@geometra/core 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/a11y.d.ts +8 -1
  2. package/dist/a11y.d.ts.map +1 -1
  3. package/dist/a11y.js +24 -16
  4. package/dist/a11y.js.map +1 -1
  5. package/dist/animation.d.ts +7 -3
  6. package/dist/animation.d.ts.map +1 -1
  7. package/dist/animation.js +22 -15
  8. package/dist/animation.js.map +1 -1
  9. package/dist/app.d.ts +26 -7
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +32 -8
  12. package/dist/app.js.map +1 -1
  13. package/dist/elements.d.ts +3 -0
  14. package/dist/elements.d.ts.map +1 -1
  15. package/dist/elements.js +3 -0
  16. package/dist/elements.js.map +1 -1
  17. package/dist/focus-candidates.d.ts +8 -0
  18. package/dist/focus-candidates.d.ts.map +1 -0
  19. package/dist/focus-candidates.js +14 -0
  20. package/dist/focus-candidates.js.map +1 -0
  21. package/dist/focus-trap.d.ts.map +1 -1
  22. package/dist/focus-trap.js +2 -6
  23. package/dist/focus-trap.js.map +1 -1
  24. package/dist/focus.d.ts +1 -0
  25. package/dist/focus.d.ts.map +1 -1
  26. package/dist/focus.js +3 -6
  27. package/dist/focus.js.map +1 -1
  28. package/dist/fonts.d.ts +5 -2
  29. package/dist/fonts.d.ts.map +1 -1
  30. package/dist/fonts.js +12 -3
  31. package/dist/fonts.js.map +1 -1
  32. package/dist/hit-test.d.ts +53 -9
  33. package/dist/hit-test.d.ts.map +1 -1
  34. package/dist/hit-test.js +76 -38
  35. package/dist/hit-test.js.map +1 -1
  36. package/dist/index.d.ts +5 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/keyboard.d.ts +7 -3
  41. package/dist/keyboard.d.ts.map +1 -1
  42. package/dist/keyboard.js +7 -3
  43. package/dist/keyboard.js.map +1 -1
  44. package/dist/layout-bounds.d.ts +8 -0
  45. package/dist/layout-bounds.d.ts.map +1 -1
  46. package/dist/layout-bounds.js +10 -0
  47. package/dist/layout-bounds.js.map +1 -1
  48. package/dist/selection.d.ts +12 -1
  49. package/dist/selection.d.ts.map +1 -1
  50. package/dist/selection.js +28 -12
  51. package/dist/selection.js.map +1 -1
  52. package/dist/text-input.d.ts +14 -2
  53. package/dist/text-input.d.ts.map +1 -1
  54. package/dist/text-input.js +20 -11
  55. package/dist/text-input.js.map +1 -1
  56. package/dist/tree.d.ts +9 -6
  57. package/dist/tree.d.ts.map +1 -1
  58. package/dist/tree.js +9 -6
  59. package/dist/tree.js.map +1 -1
  60. package/dist/types.d.ts +5 -3
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/virtual-scroll.d.ts +2 -1
  63. package/dist/virtual-scroll.d.ts.map +1 -1
  64. package/dist/virtual-scroll.js +3 -2
  65. package/dist/virtual-scroll.js.map +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,9 @@
2
2
  * @packageDocumentation
3
3
  * Public entry for `@geometra/core`: reactive primitives, element constructors, app mount, layout-tree
4
4
  * conversion, hit-testing, focus and keyboard/composition dispatch, text selection and input, web font
5
- * helpers, animation and virtual-scroll utilities, SEO and accessibility snapshots, and shared element
6
- * types (`UIElement`, `Renderer`, `FrameTimings`, …).
5
+ * helpers, animation and virtual-scroll utilities, SEO and accessibility snapshots,
6
+ * {@link import('./focus-candidates.js').hasFocusCandidateHandlers} for parity with Tab / click-to-focus
7
+ * routing, and shared element types (`UIElement`, `Renderer`, `FrameTimings`, …).
7
8
  *
8
9
  * Geometra keeps a single declarative tree across canvas, terminal, and server-driven clients; this file
9
10
  * is the supported import surface. Optional `Renderer.setFrameTimings` receives layout wall time after
@@ -22,11 +23,12 @@ export { toLayoutTree } from './tree.js';
22
23
  export { resolveDirectionValue, resolveElementDirection } from './direction.js';
23
24
  // Hit testing
24
25
  export { dispatchHit, getCursorAtPoint, hasInteractiveHitAtPoint, hitPathAtPoint } from './hit-test.js';
25
- export { layoutBoundsAreFinite } from './layout-bounds.js';
26
+ export { finiteNumberOrZero, layoutBoundsAreFinite } from './layout-bounds.js';
26
27
  // Web fonts (browser)
27
28
  export { extractFontFamiliesFromCSSFont, collectFontFamiliesFromTree, resolveFontLoadTimeoutMs, waitForFonts, } from './fonts.js';
28
29
  // Focus management
29
30
  export { focusedElement, setFocus, clearFocus, focusNext, focusPrev, collectFocusOrder } from './focus.js';
31
+ export { hasFocusCandidateHandlers } from './focus-candidates.js';
30
32
  export { trapFocusStep } from './focus-trap.js';
31
33
  export { dispatchCompositionEvent, dispatchKeyboardEvent } from './keyboard.js';
32
34
  // Text selection
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAG9D,uBAAuB;AACvB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEzD,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEjG,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAG/E,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,sBAAsB;AACtB,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE1G,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE/E,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG/E,YAAY;AACZ,OAAO,EACL,UAAU,EACV,MAAM,EACN,qBAAqB,EACrB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AASvB,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAG9D,uBAAuB;AACvB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEzD,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEjG,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAG/E,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE9E,sBAAsB;AACtB,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,EACxB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAE/E,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG/E,YAAY;AACZ,OAAO,EACL,UAAU,EACV,MAAM,EACN,qBAAqB,EACrB,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AASvB,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,wBAAwB;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA"}
@@ -3,9 +3,13 @@ import type { UIElement, KeyboardHitEvent, CompositionHitEvent } from './types.j
3
3
  /**
4
4
  * Dispatch keyboard events to the focused element.
5
5
  *
6
- * Tab / Shift+Tab runs only on `'onKeyDown'` (not `'onKeyUp'`). On keydown, Tab always returns
7
- * `true` and runs focus traversal (`focusNext` / `focusPrev` from `./focus.js`); when the tree has
8
- * no focusable boxes, those calls no-op and focus stays unset.
6
+ * Tab / Shift+Tab runs only on `'onKeyDown'` (not `'onKeyUp'`). Detection uses **strict** string
7
+ * equality with `partialEvent.key === 'Tab'` (capital T), matching typical `KeyboardEvent.key` from
8
+ * browsers; values such as `'tab'` do not trigger traversal and are handled like any other key below.
9
+ *
10
+ * On Tab keydown, the function always returns `true` and runs focus traversal (`focusNext` /
11
+ * `focusPrev` from `./focus.js`); when the tree has no focusable boxes, those calls no-op and focus
12
+ * stays unset.
9
13
  *
10
14
  * For other keys, returns `true` only when a resolved focus target exists and its handler for
11
15
  * `eventType` runs; otherwise `false`.
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGlF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAC7C,OAAO,CAqBT;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,EAC5E,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAChD,OAAO,CAQT"}
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAC7C,OAAO,CAqBT;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,EAC5E,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAChD,OAAO,CAQT"}
package/dist/keyboard.js CHANGED
@@ -2,9 +2,13 @@ import { focusNext, focusPrev, resolveFocusedTarget } from './focus.js';
2
2
  /**
3
3
  * Dispatch keyboard events to the focused element.
4
4
  *
5
- * Tab / Shift+Tab runs only on `'onKeyDown'` (not `'onKeyUp'`). On keydown, Tab always returns
6
- * `true` and runs focus traversal (`focusNext` / `focusPrev` from `./focus.js`); when the tree has
7
- * no focusable boxes, those calls no-op and focus stays unset.
5
+ * Tab / Shift+Tab runs only on `'onKeyDown'` (not `'onKeyUp'`). Detection uses **strict** string
6
+ * equality with `partialEvent.key === 'Tab'` (capital T), matching typical `KeyboardEvent.key` from
7
+ * browsers; values such as `'tab'` do not trigger traversal and are handled like any other key below.
8
+ *
9
+ * On Tab keydown, the function always returns `true` and runs focus traversal (`focusNext` /
10
+ * `focusPrev` from `./focus.js`); when the tree has no focusable boxes, those calls no-op and focus
11
+ * stays unset.
8
12
  *
9
13
  * For other keys, returns `true` only when a resolved focus target exists and its handler for
10
14
  * `eventType` runs; otherwise `false`.
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEvE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAe,EACf,MAAsB,EACtB,SAAkC,EAClC,YAA8C;IAE9C,IAAI,YAAY,CAAC,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5D,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAqB,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;QAC3E,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAe,EACf,MAAsB,EACtB,SAA4E,EAC5E,YAAiD;IAEjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,KAAK,GAAwB,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;IAC9E,OAAO,CAAC,KAAK,CAAC,CAAA;IACd,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAe,EACf,MAAsB,EACtB,SAAkC,EAClC,YAA8C;IAE9C,IAAI,YAAY,CAAC,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC5D,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAqB,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;QAC3E,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAe,EACf,MAAsB,EACtB,SAA4E,EAC5E,YAAiD;IAEjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAA;IACrD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IAC1B,MAAM,KAAK,GAAwB,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;IAC9E,OAAO,CAAC,KAAK,CAAC,CAAA;IACd,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,4 +1,12 @@
1
1
  import type { ComputedLayout } from 'textura';
2
+ /**
3
+ * Coerce a runtime value to a finite number for scroll offsets, root paint offsets, and similar layout math.
4
+ * Non-numbers, NaN, and ±Infinity become `0`. `typeof` rejects `BigInt` before any numeric coercion that could throw.
5
+ *
6
+ * Shared by hit-testing, text selection walks, accessibility bounds, text-input caret math, and animation timelines
7
+ * so corrupt serialized values cannot poison coordinates or timing.
8
+ */
9
+ export declare function finiteNumberOrZero(value: unknown): number;
2
10
  /**
3
11
  * Reject NaN, ±Infinity, and negative sizes so corrupt layout cannot invert rects or poison
4
12
  * coordinate math. Shared by hit-testing, focus order, and focus traps.
@@ -1 +1 @@
1
- {"version":3,"file":"layout-bounds.d.ts","sourceRoot":"","sources":["../src/layout-bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAO7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAUrE"}
1
+ {"version":3,"file":"layout-bounds.d.ts","sourceRoot":"","sources":["../src/layout-bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAO7C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAUrE"}
@@ -2,6 +2,16 @@
2
2
  function isFiniteLayoutNumber(value) {
3
3
  return typeof value === 'number' && Number.isFinite(value);
4
4
  }
5
+ /**
6
+ * Coerce a runtime value to a finite number for scroll offsets, root paint offsets, and similar layout math.
7
+ * Non-numbers, NaN, and ±Infinity become `0`. `typeof` rejects `BigInt` before any numeric coercion that could throw.
8
+ *
9
+ * Shared by hit-testing, text selection walks, accessibility bounds, text-input caret math, and animation timelines
10
+ * so corrupt serialized values cannot poison coordinates or timing.
11
+ */
12
+ export function finiteNumberOrZero(value) {
13
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
14
+ }
5
15
  /**
6
16
  * Reject NaN, ±Infinity, and negative sizes so corrupt layout cannot invert rects or poison
7
17
  * coordinate math. Shared by hit-testing, focus order, and focus traps.
@@ -1 +1 @@
1
- {"version":3,"file":"layout-bounds.js","sourceRoot":"","sources":["../src/layout-bounds.ts"],"names":[],"mappings":"AAEA,8HAA8H;AAC9H,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACtC,OAAO,CACL,oBAAoB,CAAC,CAAC,CAAC;QACvB,oBAAoB,CAAC,CAAC,CAAC;QACvB,oBAAoB,CAAC,KAAK,CAAC;QAC3B,oBAAoB,CAAC,MAAM,CAAC;QAC5B,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC,CACZ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"layout-bounds.js","sourceRoot":"","sources":["../src/layout-bounds.ts"],"names":[],"mappings":"AAEA,8HAA8H;AAC9H,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACxE,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACtC,OAAO,CACL,oBAAoB,CAAC,CAAC,CAAC;QACvB,oBAAoB,CAAC,CAAC,CAAC;QACvB,oBAAoB,CAAC,KAAK,CAAC;QAC3B,oBAAoB,CAAC,MAAM,CAAC;QAC5B,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC,CACZ,CAAA;AACH,CAAC"}
@@ -50,6 +50,9 @@ export interface SelectionRange {
50
50
  * For each box, child origins subtract {@link import('./types.js').StyleProps.scrollX} /
51
51
  * `scrollY` (non-finite values → `0`), matching {@link import('./hit-test.js').dispatchHit} and
52
52
  * canvas paint so text metrics and pointer hit-testing share one coordinate space inside scroll containers.
53
+ *
54
+ * Sibling order is **element child index** (tree source order), not {@link import('./types.js').StyleProps.zIndex}
55
+ * paint order — pointer routing uses z-index for topmost hits; selection indexing stays stable for a11y and ranges.
53
56
  */
54
57
  export declare function collectTextNodes(element: UIElement, layout: ComputedLayout, offsetX: number, offsetY: number, results: TextNodeInfo[], parentDirection?: ResolvedDirection): void;
55
58
  /**
@@ -64,7 +67,15 @@ export declare function collectTextNodes(element: UIElement, layout: ComputedLay
64
67
  * ranges cannot use `String.prototype.slice` negative indices or fractional positions.
65
68
  */
66
69
  export declare function getSelectedText(range: SelectionRange, textNodes: TextNodeInfo[]): string;
67
- /** Find which text node and character offset is at a given (x, y) point. Coordinates must be finite numbers — otherwise `null` (e.g. NaN, ±Infinity, BigInt, or non-numbers). Nodes with non-finite or negative-size bounds are skipped (aligned with {@link import('./layout-bounds.js').layoutBoundsAreFinite}). */
70
+ /**
71
+ * Find which text node and character offset is at a given (x, y) point. Coordinates must be finite numbers —
72
+ * otherwise `null` (e.g. NaN, ±Infinity, BigInt, or non-numbers). Nodes with non-finite or negative-size bounds
73
+ * are skipped (aligned with {@link import('./layout-bounds.js').layoutBoundsAreFinite}).
74
+ *
75
+ * Vertical line bands are half-open between stacked lines so a y exactly on an interior boundary belongs to the
76
+ * lower line; the **last** line’s bottom edge is inclusive so it matches {@link import('./hit-test.js').dispatchHit}
77
+ * inclusive rect edges on the text node box.
78
+ */
68
79
  export declare function hitTestText(textNodes: TextNodeInfo[], px: number, py: number): {
69
80
  nodeIndex: number;
70
81
  charOffset: number;
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGhF,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAA;IACpB,gDAAgD;IAChD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,uEAAuE;IACvE,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAMD,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EAAE,EACvB,eAAe,GAAE,iBAAyB,GACzC,IAAI,CASN;AAsDD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CA4CR;AAYD,sTAAsT;AACtT,wBAAgB,WAAW,CACzB,SAAS,EAAE,YAAY,EAAE,EACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkDlD"}
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGhF,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAA;IACpB,gDAAgD;IAChD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,uEAAuE;IACvE,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EAAE,EACvB,eAAe,GAAE,iBAAyB,GACzC,IAAI,CASN;AAsDD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CA4CR;AAYD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,YAAY,EAAE,EACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA0DlD"}
package/dist/selection.js CHANGED
@@ -1,8 +1,5 @@
1
1
  import { resolveElementDirection } from './direction.js';
2
- import { layoutBoundsAreFinite } from './layout-bounds.js';
3
- function finiteRootOffset(value) {
4
- return typeof value === 'number' && Number.isFinite(value) ? value : 0;
5
- }
2
+ import { finiteNumberOrZero, layoutBoundsAreFinite } from './layout-bounds.js';
6
3
  /**
7
4
  * Collect all selectable text nodes from the element tree with their absolute positions.
8
5
  * Root `offsetX` / `offsetY` share the same coordinate space as pointer hits; non-finite or non-number
@@ -16,9 +13,12 @@ function finiteRootOffset(value) {
16
13
  * For each box, child origins subtract {@link import('./types.js').StyleProps.scrollX} /
17
14
  * `scrollY` (non-finite values → `0`), matching {@link import('./hit-test.js').dispatchHit} and
18
15
  * canvas paint so text metrics and pointer hit-testing share one coordinate space inside scroll containers.
16
+ *
17
+ * Sibling order is **element child index** (tree source order), not {@link import('./types.js').StyleProps.zIndex}
18
+ * paint order — pointer routing uses z-index for topmost hits; selection indexing stays stable for a11y and ranges.
19
19
  */
20
20
  export function collectTextNodes(element, layout, offsetX, offsetY, results, parentDirection = 'ltr') {
21
- collectTextNodesWalk(element, layout, finiteRootOffset(offsetX), finiteRootOffset(offsetY), results, parentDirection);
21
+ collectTextNodesWalk(element, layout, finiteNumberOrZero(offsetX), finiteNumberOrZero(offsetY), results, parentDirection);
22
22
  }
23
23
  function collectTextNodesWalk(element, layout, offsetX, offsetY, results, parentDirection) {
24
24
  if (!layoutBoundsAreFinite(layout))
@@ -43,8 +43,8 @@ function collectTextNodesWalk(element, layout, offsetX, offsetY, results, parent
43
43
  }
44
44
  if (element.kind !== 'box')
45
45
  return;
46
- const childOffsetX = x - finiteRootOffset(element.props.scrollX);
47
- const childOffsetY = y - finiteRootOffset(element.props.scrollY);
46
+ const childOffsetX = x - finiteNumberOrZero(element.props.scrollX);
47
+ const childOffsetY = y - finiteNumberOrZero(element.props.scrollY);
48
48
  for (let i = 0; i < element.children.length; i++) {
49
49
  const childLayout = layout.children[i];
50
50
  if (childLayout) {
@@ -129,7 +129,15 @@ function textNodeBoundsAreFinite(node) {
129
129
  children: [],
130
130
  });
131
131
  }
132
- /** Find which text node and character offset is at a given (x, y) point. Coordinates must be finite numbers — otherwise `null` (e.g. NaN, ±Infinity, BigInt, or non-numbers). Nodes with non-finite or negative-size bounds are skipped (aligned with {@link import('./layout-bounds.js').layoutBoundsAreFinite}). */
132
+ /**
133
+ * Find which text node and character offset is at a given (x, y) point. Coordinates must be finite numbers —
134
+ * otherwise `null` (e.g. NaN, ±Infinity, BigInt, or non-numbers). Nodes with non-finite or negative-size bounds
135
+ * are skipped (aligned with {@link import('./layout-bounds.js').layoutBoundsAreFinite}).
136
+ *
137
+ * Vertical line bands are half-open between stacked lines so a y exactly on an interior boundary belongs to the
138
+ * lower line; the **last** line’s bottom edge is inclusive so it matches {@link import('./hit-test.js').dispatchHit}
139
+ * inclusive rect edges on the text node box.
140
+ */
133
141
  export function hitTestText(textNodes, px, py) {
134
142
  if (!Number.isFinite(px) || !Number.isFinite(py))
135
143
  return null;
@@ -140,11 +148,19 @@ export function hitTestText(textNodes, px, py) {
140
148
  if (px < node.x || px > node.x + node.width || py < node.y || py > node.y + node.height) {
141
149
  continue;
142
150
  }
143
- // Find the line
151
+ // Find the line. Use half-open vertical bands between lines so shared boundaries
152
+ // (next line's y === previous line bottom) map to the lower line only. The last line
153
+ // uses an inclusive bottom so the node's bottom edge (same rule as box hit-test rects)
154
+ // still resolves to this line instead of falling through to the "between lines" snap.
144
155
  let globalCharOffset = 0;
145
- for (const line of node.lines) {
146
- const lineBottom = line.y + (node.element.props.lineHeight);
147
- if (py >= line.y && py < lineBottom) {
156
+ for (let li = 0; li < node.lines.length; li++) {
157
+ const line = node.lines[li];
158
+ const lineBottom = line.y + node.element.props.lineHeight;
159
+ const lastLine = li === node.lines.length - 1;
160
+ const inBand = lastLine
161
+ ? py >= line.y && py <= lineBottom
162
+ : py >= line.y && py < lineBottom;
163
+ if (inBand) {
148
164
  // Find the character within the line
149
165
  const localX = px - line.x;
150
166
  const lineVisualWidth = line.charOffsets.length > 0
@@ -1 +1 @@
1
- {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../src/selection.ts"],"names":[],"mappings":"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"}
@@ -33,9 +33,21 @@ export declare function insertInputText(state: TextInputState, text: string): Te
33
33
  export declare function backspaceInput(state: TextInputState): TextInputEditResult;
34
34
  /** Delete-forward behavior across node boundaries and active selections. */
35
35
  export declare function deleteInput(state: TextInputState): TextInputEditResult;
36
- /** Move caret by one character; optionally extend existing selection. */
36
+ /**
37
+ * Move caret by one logical step horizontally or vertically; optionally extend selection.
38
+ *
39
+ * Horizontal moves advance one **UTF-16 code unit** (same indexing as `String` length and
40
+ * `TextInputState` offsets). Astral symbols encoded as surrogate pairs therefore need two
41
+ * ArrowLeft/ArrowRight steps; invalid lone surrogates are not repaired here (see roadmap notes
42
+ * on complex scripts).
43
+ */
37
44
  export declare function moveInputCaret(state: TextInputState, direction: 'left' | 'right' | 'up' | 'down', extendSelection?: boolean, columnIntent?: number, readingDirection?: ReadingDirection): TextInputEditResult;
38
- /** Move caret by whole words (Ctrl/Alt-style navigation). */
45
+ /**
46
+ * Move caret by whole words (Ctrl/Alt-style navigation).
47
+ *
48
+ * “Word” characters are ASCII letters, digits, and `_` only; other code units form gaps or
49
+ * punctuation runs. Offsets stay UTF-16 code units, matching {@link moveInputCaret}.
50
+ */
39
51
  export declare function moveInputCaretByWord(state: TextInputState, direction: 'left' | 'right', extendSelection?: boolean, readingDirection?: ReadingDirection): TextInputEditResult;
40
52
  /** Move caret to start/end of current line. */
41
53
  export declare function moveInputCaretToLineBoundary(state: TextInputState, boundary: 'start' | 'end', extendSelection?: boolean, readingDirection?: ReadingDirection): TextInputEditResult;
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../src/text-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,oDAAoD;IACpD,SAAS,EAAE,cAAc,CAAA;IACzB,uHAAuH;IACvH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,KAAK,gBAAgB,GAAG,KAAK,GAAG,KAAK,CAAA;AAiErC,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAKvE;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,CAiBxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,cAAc,EACzB,YAAY,EAAE,MAAM,GACnB,mBAAmB,CAgCrB;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,MAAM,GACX,mBAAmB,CAErB;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAqCzE;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAoCtE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAC3C,eAAe,UAAQ,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CA8ErB;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,eAAe,UAAQ,EACvB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CAgDrB;AAED,+CAA+C;AAC/C,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,eAAe,UAAQ,EACvB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CA8BrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,cAAc,GACxB,aAAa,GAAG,IAAI,CAgDtB"}
1
+ {"version":3,"file":"text-input.d.ts","sourceRoot":"","sources":["../src/text-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,oDAAoD;IACpD,SAAS,EAAE,cAAc,CAAA;IACzB,uHAAuH;IACvH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,KAAK,gBAAgB,GAAG,KAAK,GAAG,KAAK,CAAA;AA4DrC,gDAAgD;AAChD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAKvE;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,CAiBxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,cAAc,EACzB,YAAY,EAAE,MAAM,GACnB,mBAAmB,CAgCrB;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,MAAM,GACX,mBAAmB,CAErB;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAqCzE;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,mBAAmB,CAoCtE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,EAC3C,eAAe,UAAQ,EACvB,YAAY,CAAC,EAAE,MAAM,EACrB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CA8ErB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,eAAe,UAAQ,EACvB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CAgDrB;AAED,+CAA+C;AAC/C,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,eAAe,UAAQ,EACvB,gBAAgB,GAAE,gBAAwB,GACzC,mBAAmB,CA8BrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,cAAc,GACxB,aAAa,GAAG,IAAI,CAgDtB"}
@@ -1,10 +1,7 @@
1
+ import { finiteNumberOrZero } from './layout-bounds.js';
1
2
  function clamp(n, min, max) {
2
3
  return Math.min(max, Math.max(min, n));
3
4
  }
4
- /** Finite numbers only; `Math.min`/`Math.max` throw on BigInt and propagate NaN through caret math. */
5
- function finiteSelectionNumber(value) {
6
- return typeof value === 'number' && Number.isFinite(value) ? value : 0;
7
- }
8
5
  function normalizeSelection(selection) {
9
6
  const { anchorNode, anchorOffset, focusNode, focusOffset, } = selection;
10
7
  if (anchorNode < focusNode ||
@@ -24,10 +21,10 @@ function clampSelection(nodes, selection) {
24
21
  }
25
22
  const maxNode = nodes.length - 1;
26
23
  const sanitized = {
27
- anchorNode: finiteSelectionNumber(selection.anchorNode),
28
- anchorOffset: finiteSelectionNumber(selection.anchorOffset),
29
- focusNode: finiteSelectionNumber(selection.focusNode),
30
- focusOffset: finiteSelectionNumber(selection.focusOffset),
24
+ anchorNode: finiteNumberOrZero(selection.anchorNode),
25
+ anchorOffset: finiteNumberOrZero(selection.anchorOffset),
26
+ focusNode: finiteNumberOrZero(selection.focusNode),
27
+ focusOffset: finiteNumberOrZero(selection.focusOffset),
31
28
  };
32
29
  const normalized = normalizeSelection(sanitized);
33
30
  const aNode = clamp(normalized.anchorNode, 0, maxNode);
@@ -174,7 +171,14 @@ export function deleteInput(state) {
174
171
  },
175
172
  };
176
173
  }
177
- /** Move caret by one character; optionally extend existing selection. */
174
+ /**
175
+ * Move caret by one logical step horizontally or vertically; optionally extend selection.
176
+ *
177
+ * Horizontal moves advance one **UTF-16 code unit** (same indexing as `String` length and
178
+ * `TextInputState` offsets). Astral symbols encoded as surrogate pairs therefore need two
179
+ * ArrowLeft/ArrowRight steps; invalid lone surrogates are not repaired here (see roadmap notes
180
+ * on complex scripts).
181
+ */
178
182
  export function moveInputCaret(state, direction, extendSelection = false, columnIntent, readingDirection = 'ltr') {
179
183
  const nodes = state.nodes.length > 0 ? state.nodes : [''];
180
184
  const selection = clampSelection(nodes, state.selection);
@@ -257,7 +261,12 @@ export function moveInputCaret(state, direction, extendSelection = false, column
257
261
  caretColumnIntent: nextColumnIntent,
258
262
  };
259
263
  }
260
- /** Move caret by whole words (Ctrl/Alt-style navigation). */
264
+ /**
265
+ * Move caret by whole words (Ctrl/Alt-style navigation).
266
+ *
267
+ * “Word” characters are ASCII letters, digits, and `_` only; other code units form gaps or
268
+ * punctuation runs. Offsets stay UTF-16 code units, matching {@link moveInputCaret}.
269
+ */
261
270
  export function moveInputCaretByWord(state, direction, extendSelection = false, readingDirection = 'ltr') {
262
271
  const nodes = state.nodes.length > 0 ? state.nodes : [''];
263
272
  const selection = clampSelection(nodes, state.selection);
@@ -351,7 +360,7 @@ export function getInputCaretGeometry(textNodes, selection) {
351
360
  if (!node || node.lines.length === 0)
352
361
  return null;
353
362
  const maxOffset = node.element.props.text.length;
354
- const targetOffset = clamp(finiteSelectionNumber(selection.focusOffset), 0, maxOffset);
363
+ const targetOffset = clamp(finiteNumberOrZero(selection.focusOffset), 0, maxOffset);
355
364
  let traversed = 0;
356
365
  for (const line of node.lines) {
357
366
  const lineEnd = traversed + line.text.length;
@@ -1 +1 @@
1
- {"version":3,"file":"text-input.js","sourceRoot":"","sources":["../src/text-input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text-input.js","sourceRoot":"","sources":["../src/text-input.ts"],"names":[],"mappings":"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"}
package/dist/tree.d.ts CHANGED
@@ -5,13 +5,16 @@ import type { UIElement } from './types.js';
5
5
  *
6
6
  * Strips everything that is not consumed by Textura layout: colors, borders, opacity, cursor,
7
7
  * `pointerEvents`, `zIndex`, `overflow` / `scrollX` / `scrollY`, `boxShadow`, `gradient`,
8
- * `selectable`, `dir`, and image `src` / `alt` / `objectFit`. Remaining props are flex and
9
- * sizing fields that belong in the layout pipeline.
8
+ * `selectable`, `dir`, image `src` / `alt` / `objectFit`, and scene3d host fields (`background`,
9
+ * `objects`, `fov`, `near`, `far`, `cameraPosition`, `cameraTarget`, `orbitControls`, `maxPixelRatio`).
10
+ * Remaining props are flex and sizing fields that belong in the layout pipeline.
10
11
  *
11
- * `dir` is omitted because upstream Textura {@link LayoutNode} types do not carry direction yet;
12
- * Yoga sees one document direction via {@link import('./app.js').createApp}'s `layoutDirection` /
13
- * `computeLayout`, while per-node text, focus, and hit-testing resolve direction on the live
14
- * {@link UIElement} tree with {@link import('./direction.js').resolveElementDirection}.
12
+ * Per-node `dir` is intentionally stripped from layout nodes: Yoga/Textura receives one document
13
+ * direction from {@link import('./app.js').createApp}'s {@link import('./app.js').AppOptions.layoutDirection}
14
+ * (or the root element’s resolved `dir` when that option is omitted), while nested `dir` on the live
15
+ * {@link UIElement} tree is resolved at text, focus, selection, and hit-test time with
16
+ * {@link import('./direction.js').resolveElementDirection}. ROADMAP.md “Deferred / research” tracks an
17
+ * optional future pass that would thread per-node direction through Textura layout props.
15
18
  *
16
19
  * Does not mutate the source element or its `props` (strip list is applied to a shallow copy).
17
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA2C3C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,CAW3D"}
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA2C3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,UAAU,CAW3D"}
package/dist/tree.js CHANGED
@@ -43,13 +43,16 @@ function stripStyleProps(props) {
43
43
  *
44
44
  * Strips everything that is not consumed by Textura layout: colors, borders, opacity, cursor,
45
45
  * `pointerEvents`, `zIndex`, `overflow` / `scrollX` / `scrollY`, `boxShadow`, `gradient`,
46
- * `selectable`, `dir`, and image `src` / `alt` / `objectFit`. Remaining props are flex and
47
- * sizing fields that belong in the layout pipeline.
46
+ * `selectable`, `dir`, image `src` / `alt` / `objectFit`, and scene3d host fields (`background`,
47
+ * `objects`, `fov`, `near`, `far`, `cameraPosition`, `cameraTarget`, `orbitControls`, `maxPixelRatio`).
48
+ * Remaining props are flex and sizing fields that belong in the layout pipeline.
48
49
  *
49
- * `dir` is omitted because upstream Textura {@link LayoutNode} types do not carry direction yet;
50
- * Yoga sees one document direction via {@link import('./app.js').createApp}'s `layoutDirection` /
51
- * `computeLayout`, while per-node text, focus, and hit-testing resolve direction on the live
52
- * {@link UIElement} tree with {@link import('./direction.js').resolveElementDirection}.
50
+ * Per-node `dir` is intentionally stripped from layout nodes: Yoga/Textura receives one document
51
+ * direction from {@link import('./app.js').createApp}'s {@link import('./app.js').AppOptions.layoutDirection}
52
+ * (or the root element’s resolved `dir` when that option is omitted), while nested `dir` on the live
53
+ * {@link UIElement} tree is resolved at text, focus, selection, and hit-test time with
54
+ * {@link import('./direction.js').resolveElementDirection}. ROADMAP.md “Deferred / research” tracks an
55
+ * optional future pass that would thread per-node direction through Textura layout props.
53
56
  *
54
57
  * Does not mutate the source element or its `props` (strip list is applied to a shallow copy).
55
58
  *
package/dist/tree.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,OAAO,WAAW,CAAC,eAAe,CAAA;IAClC,OAAO,WAAW,CAAC,KAAK,CAAA;IACxB,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,wEAAwE;IACxE,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,mBAAmB;IACnB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,qBAAqB;IACrB,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,IAAI,CAAA;IACvB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,cAAc,CAAA;IACjC,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtF,OAAO,WAAyB,CAAA;IAClC,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC/B,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,OAAO,WAAW,CAAC,eAAe,CAAA;IAClC,OAAO,WAAW,CAAC,KAAK,CAAA;IACxB,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,wEAAwE;IACxE,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,mBAAmB;IACnB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,qBAAqB;IACrB,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,IAAI,CAAA;IACvB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,cAAc,CAAA;IACjC,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtF,OAAO,WAAyB,CAAA;IAClC,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC/B,CAAA;AACjB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -8,8 +8,9 @@ export type Direction = 'ltr' | 'rtl' | 'auto';
8
8
  /**
9
9
  * CSS `cursor` keyword for box props (canvas hosts assign it to `canvas.style.cursor` when supported).
10
10
  * Use `''` so {@link import('./hit-test.js').getCursorAtPoint} can fall through to an ancestor cursor.
11
+ * The union is a curated subset of valid CSS keywords, not an exhaustive list.
11
12
  */
12
- export type CursorProp = '' | 'default' | 'pointer' | 'grab' | 'grabbing' | 'text' | 'not-allowed' | 'crosshair' | 'move' | 'help' | 'cell';
13
+ export type CursorProp = '' | 'default' | 'pointer' | 'grab' | 'grabbing' | 'text' | 'not-allowed' | 'crosshair' | 'move' | 'help' | 'cell' | 'zoom-in' | 'zoom-out';
13
14
  /** Optional direction metadata carried on UI props (see {@link Direction}). */
14
15
  export interface DirectionProps {
15
16
  /** When omitted or `auto`, inherits the parent’s resolved `ltr` / `rtl`. */
@@ -31,8 +32,9 @@ export interface StyleProps {
31
32
  */
32
33
  zIndex?: number;
33
34
  /**
34
- * Pointer hit targeting. `'none'` skips this box for pointer handlers and cursor resolution;
35
- * hits pass through to geometry behind it. Descendants still receive hits unless they also set `'none'`.
35
+ * Pointer hit targeting. Only `'none'` is pass-through: this box is omitted from the pointer stack and
36
+ * cursor walk so hits reach geometry behind. `'auto'` and omitting the prop behave the same (the box stays
37
+ * in the stack). Descendants still receive hits under a `'none'` parent unless they also set `'none'`.
36
38
  */
37
39
  pointerEvents?: 'auto' | 'none';
38
40
  /**