API reference
Every public class, method, and event in @codexo/exojs. Generated from source.
classTextEditWidget
Base class of the text-editing widgets (TextInput, TextArea): the editing model, the platform text-input transport, caret blink, selection and caret painting, placeholder rendering, scroll-to-caret, and the keyboard/pointer editing gestures. The platform transport is created lazily on first focus and may be `null` - the field then renders and takes focus but rejects edits. Key handling consumes every editing key with `preventDefault`, so focus navigation never also reacts while editing; `Escape` and `Tab` are deliberately not consumed. The caret blink rides the app's frame signal like a Tooltip's show delay - it pauses with the scene and runs no timer while the field is unfocused.
import { TextEditWidget } from '@codexo/exojs'Base class of the text-editing widgets (TextInput, TextArea): the editing model, the platform text-input transport, caret blink, selection and caret painting, placeholder rendering, scroll-to-caret, and the keyboard/pointer editing gestures.
The platform transport is created lazily on first focus and may be `null` - the field then renders and takes focus but rejects edits. Key handling consumes every editing key with `preventDefault`, so focus navigation never also reacts while editing; `Escape` and `Tab` are deliberately not consumed. The caret blink rides the app's frame signal like a Tooltip's show delay - it pauses with the scene and runs no timer while the field is unfocused.
new(options: TextEditWidgetOptions): TextEditWidget_applyAnchor(containerWidth: number, containerHeight: number): void_cascadeTheme(): void_collectContent(builder: RenderPlanBuilder): void_invalidateLayout(): void_invalidatePaint(): void_onChildListChanged(): void_onChildResized(): void_onEnabledChanged(effectiveEnabled: boolean): void_onFocusChanged(focused: boolean): void_onScrollUpdated(): void_onThemeChanged(): void_relayout(): void_repaint(): void_resolveInheritedTheme(): UIThemeSkins for every role, as resolved for a widget._skin(role: UIThemeRoleA themed surface. Roles are per painted surface, not per widget class: a progress bar draws its track and its fill from two independent roles.): UISkinThe look of one widget surface in one state: what it paints, how its text is styled, and the content box its layout works against._trackFocus(): voidanchorIn(root: UIRootA container that carries a UITheme for the subtree below it. Widgets resolve their skins from the nearest themed ancestor, which is how a theme assigned on a U…, anchor: WidgetAnchorAnchor position of a widget within its container's box., offsetX: number, offsetY: number): thisblur(): thisclearFilters(): thiscollect(builder: RenderPlanBuilder, seq?: number): voidcollidesWith(target: CollidableContract for objects that participate in collision detection. Implemented by all concrete shape classes as well as `SceneNode`.): CollisionResponseResult of a successful Collidable.collidesWith call. Contains the two participating shapes, the penetration depth, containment flags, and the minimum-translati… | nullcontains(x: number, y: number): booleandestroy(): voidfocus(): thisgetBounds(out?: RectangleMutable axis-aligned rectangle defined by a top-left origin `(x, y)` and dimensions `(width, height)`. Implements Collidable with full SAT collision response f…): RectangleMutable axis-aligned rectangle defined by a top-left origin `(x, y)` and dimensions `(width, height)`. Implements Collidable with full SAT collision response f…invalidateCache(): thisinvalidateContent(): thismove(x: number, y: number): thisproject(axis: VectorConcrete mutable 2D vector with full AbstractVector arithmetic and Collidable collision support (treated as a point collider). `Vector.temp` provides a shared…, result: IntervalA closed scalar interval `[min, max]` used by the SAT collision solver to represent the projection of a shape onto a separating axis. `Interval.temp` provides…): IntervalA closed scalar interval `[min, max]` used by the SAT collision solver to represent the projection of a shape onto a separating axis. `Interval.temp` provides…removeChildAt(index: number): thisremoveChildren(begin: number, end: number): thisrender(backend: RenderBackend): thisrotate(degrees: number): thisselectAll(): thissetChildIndex(child: RenderNodeSceneNode that can produce visual output. Adds the rendering pipeline features on top of the structural transform/bounds carried by SceneNode: post-process `fi…, index: number): thissetLocalBounds(x: number, y: number, width: number, height: number): thissetOrigin(x: number, y: number): thissetPosition(x: number, y: number): thissetRotation(degrees: number): thissetScale(x: number, y: number): thissetSize(width: number, height: number): thissetSkew(x: number, y: number): thissetTheme(patch: Partial<Readonly<Record<UIThemeRoleA themed surface. Roles are per painted surface, not per widget class: a progress bar draws its track and its fill from two independent roles., Partial<Readonly<Record<UIWidgetStateVisual state a widget paints in. A widget that tracks no interaction stays on `'normal'`; states a skin set leaves undefined fall back to `'normal'`., Partial<UISkinThe look of one widget surface in one state: what it paints, how its text is styled, and the content box its layout works against.>>>>>>> | null): thisswapChildren(firstChild: RenderNodeSceneNode that can produce visual output. Adds the rendering pipeline features on top of the structural transform/bounds carried by SceneNode: post-process `fi…, secondChild: RenderNodeSceneNode that can produce visual output. Adds the rendering pipeline features on top of the structural transform/bounds carried by SceneNode: post-process `fi…): thisupdateBounds(): thisupdateParentTransform(): thisupdateTransform(): thiscursor: null | stringdraggable: booleanfocusable: booleanmodel: TextEditingModelname: null | stringtabIndex: numberbottom: numbercacheAsTexture: booleancacheResolution: TargetResolutionclip: booleanclipShape: GeometryNon-renderable geometry data object used by advanced rendering paths. Geometry owns only vertex/index data and its layout metadata; it is not a scene node, has… | RectangleMutable axis-aligned rectangle defined by a top-left origin `(x, y)` and dimensions `(width, height)`. Implements Collidable with full SAT collision response f… | nullcontentInsets: { bottom: number; left: number; right: number; top: number }cullable: booleandestroyed: booleanediting: booleaneffectiveEnabled: booleanenabled: booleanfocused: booleanheight: numberinteractive: booleanisAlignedBox: booleanleft: numberplaceholder: stringpreserveDrawOrder: booleanreadOnly: booleanrenderedText: stringright: numberrotation: numberscrollOffsetY: numberselectionEnd: numberselectionStart: numberskewX: numberskewY: numberthemeOverrides: Partial<Readonly<Record<UIThemeRoleA themed surface. Roles are per painted surface, not per widget class: a progress bar draws its track and its fill from two independent roles., Partial<Readonly<Record<UIWidgetStateVisual state a widget paints in. A widget that tracks no interaction stays on `'normal'`; states a skin set leaves undefined fall back to `'normal'`., Partial<UISkinThe look of one widget surface in one state: what it paints, how its text is styled, and the content box its layout works against.>>>>>>> | nulltop: numberuiHeight: numberuiWidth: numbervalue: stringvisible: booleanwidth: numberx: numbery: numberzIndex: numberonBlur: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[RenderNodeSceneNode that can produce visual output. Adds the rendering pipeline features on top of the structural transform/bounds carried by SceneNode: post-process `fi…]>onContextMenu: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onDrag: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onDragEnd: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onDragStart: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onFocus: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[RenderNodeSceneNode that can produce visual output. Adds the rendering pipeline features on top of the structural transform/bounds carried by SceneNode: post-process `fi…]>onKeyDown: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[KeyEventEnvelope dispatched by `app.interaction` to the focused RenderNode for keyboard input, then bubbled up its entire parent chain - same DOM-style shape as Intera…]>onKeyUp: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[KeyEventEnvelope dispatched by `app.interaction` to the focused RenderNode for keyboard input, then bubbled up its entire parent chain - same DOM-style shape as Intera…]>onPointerDown: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onPointerMove: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onPointerOut: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onPointerOver: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onPointerTap: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>onPointerUp: SignalLightweight typed event emitter. Each `Signal` represents one named notification channel (e.g. `onResize`, `onFrame`). Listeners are added with Signal.add or S…<[InteractionEventDOM-Event-shaped envelope dispatched by InteractionSystem to interactive scene nodes. Bubbles up the *entire* parent chain - `target` stays pinned to the hit-d…]>