ReadonlyanchorReadonlyclosableReadonlycontentA widget offered actions before the window itself sees them.
Set it to the list or field the window exists to show. Without it, every window
holding a widget has to override handleAction just to forward, which is noise at
best and, done by assigning over the method, a trap.
ReadonlydimsReadonlymodalReadonlyonthe caret's index into value
true once close() (or destroy()) has run. A closed window is spent: close() freed it
and its contents through Pixi, so the caller's this.someWindow reference must not be
written to any more. Guard with this rather than discovering it as a null-internal throw,
and drop the reference.
the space available inside the frame, which is what contents should lay out against
the last validation error, or null when the value currently passes
the field's current text
Announces the close and frees this window and its contents. Idempotent, so a second
close() (a pop() racing a cancel, a closeAll() after a manual close) is a no-op
rather than a second destroy. The instance is spent afterwards; see closed.
With animation it plays the opening backwards first and closes when it ends (driven by
update(dt)), unless reduced motion is on, when it closes at once.
Optionalanimation: WindowAnimationRemoves all internal references and listeners as well as removes children from the display list.
Do not use a Container after calling destroy.
Optionaloptions: DestroyOptions
Options parameter. A boolean will act as if all options have been set to that value
Offered every action while this window is on top of the stack.
true if the window used it, which stops it going any further down
Offered a click that landed on the blocker, at x, y in this window's own coordinates
(its top-left corner is 0, 0). A click outside the window closes it when it is closable -
the pointer's answer to handleAction('cancel') - and a click on the window itself is
swallowed without closing, so its frame and empty body are never a dismiss button.
The blocker calls this for every click it takes, which is all a game usually needs; it is public because it is also the whole decision, and a headless test can ask it directly.
true when the click closed the window
Plays the opening animation from the window's current position. The stack calls update(dt)
on its top window, which drives it. Under reduced motion the window simply appears.
Optionalanimation: WindowAnimationpositions the window in a viewport of the given size, per its anchor
Replaces this window's palette without changing its contents or lifecycle.
called each frame while this window is the top of the stack
A modal single-line text field: a name entry, a save-slot label, a seed.
Typing arrives through
core.Input'sonText, which is the signal a free text field listens to, so this plays no part in key bindings for characters: whatever the platform turns a key press into lands in the field. Editing and movement arrive as actions instead, which a game binds the way it binds everything else:left/rightmove the caret,backspace/deleteedit,confirmaccepts subject tovalidate,cancelgives up. The prompt is modal and swallows each of those while open, so the game underneath never walks away mid-name.onTextwakes the most recently added listener first, so when two prompts overlap the topmost one gets the keystrokes - the same order the window stack shows them in.An in-progress IME composition previews below the field and only becomes value on commit, so CJK, dead keys and emoji pickers type through the same path the DOM gives every other input rather than through a game-specific workaround.
Example