@geometra/core 1.0.0 → 1.1.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 (72) hide show
  1. package/README.md +10 -1
  2. package/dist/a11y.d.ts.map +1 -1
  3. package/dist/a11y.js +6 -2
  4. package/dist/a11y.js.map +1 -1
  5. package/dist/animation.d.ts +39 -1
  6. package/dist/animation.d.ts.map +1 -1
  7. package/dist/animation.js +148 -1
  8. package/dist/animation.js.map +1 -1
  9. package/dist/app.d.ts +4 -1
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +17 -3
  12. package/dist/app.js.map +1 -1
  13. package/dist/direction.d.ts +11 -0
  14. package/dist/direction.d.ts.map +1 -0
  15. package/dist/direction.js +18 -0
  16. package/dist/direction.js.map +1 -0
  17. package/dist/elements.d.ts +4 -4
  18. package/dist/elements.d.ts.map +1 -1
  19. package/dist/elements.js.map +1 -1
  20. package/dist/focus-trap.d.ts +12 -1
  21. package/dist/focus-trap.d.ts.map +1 -1
  22. package/dist/focus-trap.js +12 -1
  23. package/dist/focus-trap.js.map +1 -1
  24. package/dist/focus.d.ts +3 -2
  25. package/dist/focus.d.ts.map +1 -1
  26. package/dist/focus.js +6 -0
  27. package/dist/focus.js.map +1 -1
  28. package/dist/fonts.d.ts +35 -2
  29. package/dist/fonts.d.ts.map +1 -1
  30. package/dist/fonts.js +335 -12
  31. package/dist/fonts.js.map +1 -1
  32. package/dist/hit-test.d.ts +35 -4
  33. package/dist/hit-test.d.ts.map +1 -1
  34. package/dist/hit-test.js +195 -70
  35. package/dist/hit-test.js.map +1 -1
  36. package/dist/index.d.ts +21 -8
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +17 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/keyboard.d.ts +5 -2
  41. package/dist/keyboard.d.ts.map +1 -1
  42. package/dist/keyboard.js +5 -2
  43. package/dist/keyboard.js.map +1 -1
  44. package/dist/selection.d.ts +5 -2
  45. package/dist/selection.d.ts.map +1 -1
  46. package/dist/selection.js +37 -8
  47. package/dist/selection.js.map +1 -1
  48. package/dist/seo.d.ts +27 -0
  49. package/dist/seo.d.ts.map +1 -1
  50. package/dist/seo.js +240 -13
  51. package/dist/seo.js.map +1 -1
  52. package/dist/signals.d.ts.map +1 -1
  53. package/dist/signals.js +44 -7
  54. package/dist/signals.js.map +1 -1
  55. package/dist/text-input-history.d.ts +14 -4
  56. package/dist/text-input-history.d.ts.map +1 -1
  57. package/dist/text-input-history.js +37 -8
  58. package/dist/text-input-history.js.map +1 -1
  59. package/dist/text-input.d.ts +8 -8
  60. package/dist/text-input.d.ts.map +1 -1
  61. package/dist/text-input.js +45 -17
  62. package/dist/text-input.js.map +1 -1
  63. package/dist/tree.d.ts.map +1 -1
  64. package/dist/tree.js +3 -0
  65. package/dist/tree.js.map +1 -1
  66. package/dist/types.d.ts +29 -5
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/virtual-scroll.d.ts +11 -1
  69. package/dist/virtual-scroll.d.ts.map +1 -1
  70. package/dist/virtual-scroll.js +14 -5
  71. package/dist/virtual-scroll.js.map +1 -1
  72. package/package.json +2 -2
package/dist/hit-test.js CHANGED
@@ -1,19 +1,58 @@
1
1
  const zIndexOrderCache = new WeakMap();
2
+ /**
3
+ * Reject NaN, ±Infinity, and negative sizes so corrupt layout cannot invert the hit rect or make
4
+ * `x <= absX + width` match unbounded spans when width is infinite.
5
+ */
6
+ function layoutBoundsAreFinite(layout) {
7
+ return (Number.isFinite(layout.x) &&
8
+ Number.isFinite(layout.y) &&
9
+ Number.isFinite(layout.width) &&
10
+ Number.isFinite(layout.height) &&
11
+ layout.width >= 0 &&
12
+ layout.height >= 0);
13
+ }
14
+ /** Ignore non-finite and non-number scroll props so child offsets stay finite (±Infinity would poison abs coords). */
15
+ function finiteScrollOffset(value) {
16
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
17
+ }
2
18
  function zIndexOf(el) {
3
- return el.props.zIndex ?? 0;
19
+ const z = el.props.zIndex;
20
+ return typeof z === 'number' && Number.isFinite(z) ? z : 0;
4
21
  }
5
- function getChildrenByZDesc(boxEl) {
6
- const signature = boxEl.children.map((child, i) => `${i}:${zIndexOf(child)}`).join('|');
22
+ function getChildrenByZAsc(boxEl) {
7
23
  const cached = zIndexOrderCache.get(boxEl);
8
- if (cached && cached.signature === signature) {
9
- return cached.desc;
24
+ if (cached && cached.zValues.length === boxEl.children.length) {
25
+ let unchanged = true;
26
+ for (let i = 0; i < boxEl.children.length; i++) {
27
+ if (cached.zValues[i] !== zIndexOf(boxEl.children[i])) {
28
+ unchanged = false;
29
+ break;
30
+ }
31
+ }
32
+ if (unchanged)
33
+ return cached.asc;
10
34
  }
11
- const desc = boxEl.children.map((_, i) => i).sort((a, b) => zIndexOf(boxEl.children[b]) - zIndexOf(boxEl.children[a]));
12
- zIndexOrderCache.set(boxEl, { signature, desc });
13
- return desc;
35
+ const zValues = boxEl.children.map(child => zIndexOf(child));
36
+ const asc = boxEl.children
37
+ .map((_, i) => i)
38
+ .sort((a, b) => zValues[a] - zValues[b]);
39
+ zIndexOrderCache.set(boxEl, { zValues, asc });
40
+ return asc;
41
+ }
42
+ function isFocusableHandlers(handlers) {
43
+ return !!(handlers?.onClick ||
44
+ handlers?.onKeyDown ||
45
+ handlers?.onKeyUp ||
46
+ handlers?.onCompositionStart ||
47
+ handlers?.onCompositionUpdate ||
48
+ handlers?.onCompositionEnd);
14
49
  }
15
50
  /** Walk the element tree + computed layout in parallel to find hit targets at (x, y). */
16
51
  function collectHits(element, layout, x, y, offsetX, offsetY, results) {
52
+ if (!Number.isFinite(x) || !Number.isFinite(y))
53
+ return;
54
+ if (!layoutBoundsAreFinite(layout))
55
+ return;
17
56
  const absX = offsetX + layout.x;
18
57
  const absY = offsetY + layout.y;
19
58
  // Apply scroll offset for scroll containers
@@ -27,10 +66,8 @@ function collectHits(element, layout, x, y, offsetX, offsetY, results) {
27
66
  return;
28
67
  }
29
68
  }
30
- if (scrollX)
31
- childOffsetX -= scrollX;
32
- if (scrollY)
33
- childOffsetY -= scrollY;
69
+ childOffsetX -= finiteScrollOffset(scrollX);
70
+ childOffsetY -= finiteScrollOffset(scrollY);
34
71
  }
35
72
  const inside = x >= absX &&
36
73
  x <= absX + layout.width &&
@@ -40,10 +77,11 @@ function collectHits(element, layout, x, y, offsetX, offsetY, results) {
40
77
  return;
41
78
  if (element.kind === 'box') {
42
79
  const boxEl = element;
43
- if (boxEl.handlers) {
80
+ const passThrough = boxEl.props.pointerEvents === 'none';
81
+ if (boxEl.handlers && !passThrough) {
44
82
  results.push({ layout, handlers: boxEl.handlers, element: boxEl, absX, absY });
45
83
  }
46
- for (const i of getChildrenByZDesc(boxEl)) {
84
+ for (const i of getChildrenByZAsc(boxEl)) {
47
85
  const childLayout = layout.children[i];
48
86
  if (childLayout) {
49
87
  collectHits(boxEl.children[i], childLayout, x, y, childOffsetX, childOffsetY, results);
@@ -51,73 +89,160 @@ function collectHits(element, layout, x, y, offsetX, offsetY, results) {
51
89
  }
52
90
  }
53
91
  }
54
- /** Dispatch an event at (x, y) against the element tree. Returns true if any handler fired. */
55
- export function dispatchHit(element, layout, eventType, x, y, extra) {
56
- const hits = [];
57
- collectHits(element, layout, x, y, 0, 0, hits);
58
- // Deepest hit first (last in list = most nested)
59
- for (let i = hits.length - 1; i >= 0; i--) {
60
- const hit = hits[i];
61
- const handler = hit.handlers[eventType];
62
- if (handler) {
63
- const event = {
64
- x,
65
- y,
66
- localX: x - hit.absX,
67
- localY: y - hit.absY,
68
- target: hit.layout,
69
- ...extra,
70
- };
71
- handler(event);
72
- const focusable = !!(hit.handlers.onClick ||
73
- hit.handlers.onKeyDown ||
74
- hit.handlers.onKeyUp ||
75
- hit.handlers.onCompositionStart ||
76
- hit.handlers.onCompositionUpdate ||
77
- hit.handlers.onCompositionEnd);
78
- const focusTarget = eventType === 'onClick' && focusable
79
- ? { element: hit.element, layout: hit.layout }
80
- : undefined;
81
- return { handled: true, focusTarget };
92
+ function dispatchHitRecursive(element, layout, eventType, x, y, offsetX, offsetY, extra) {
93
+ if (!Number.isFinite(x) || !Number.isFinite(y))
94
+ return { handled: false };
95
+ if (!layoutBoundsAreFinite(layout))
96
+ return { handled: false };
97
+ if (element.kind !== 'box')
98
+ return { handled: false };
99
+ const boxEl = element;
100
+ const absX = offsetX + layout.x;
101
+ const absY = offsetY + layout.y;
102
+ const { overflow, scrollX, scrollY } = boxEl.props;
103
+ if (overflow === 'hidden' || overflow === 'scroll') {
104
+ if (x < absX || x > absX + layout.width || y < absY || y > absY + layout.height) {
105
+ return { handled: false };
82
106
  }
83
107
  }
84
- // Click-to-focus fallback: allow focusable boxes to receive focus on click
85
- // even when they do not implement an onClick handler.
86
- if (eventType === 'onClick') {
87
- for (let i = hits.length - 1; i >= 0; i--) {
88
- const hit = hits[i];
89
- const focusable = !!(hit.handlers.onClick ||
90
- hit.handlers.onKeyDown ||
91
- hit.handlers.onKeyUp ||
92
- hit.handlers.onCompositionStart ||
93
- hit.handlers.onCompositionUpdate ||
94
- hit.handlers.onCompositionEnd);
95
- if (focusable) {
96
- return { handled: false, focusTarget: { element: hit.element, layout: hit.layout } };
97
- }
108
+ const inside = x >= absX &&
109
+ x <= absX + layout.width &&
110
+ y >= absY &&
111
+ y <= absY + layout.height;
112
+ if (!inside)
113
+ return { handled: false };
114
+ let focusTarget;
115
+ const childOffsetX = absX - finiteScrollOffset(scrollX);
116
+ const childOffsetY = absY - finiteScrollOffset(scrollY);
117
+ const asc = getChildrenByZAsc(boxEl);
118
+ for (let k = asc.length - 1; k >= 0; k--) {
119
+ const i = asc[k];
120
+ const childLayout = layout.children[i];
121
+ if (!childLayout)
122
+ continue;
123
+ const childResult = dispatchHitRecursive(boxEl.children[i], childLayout, eventType, x, y, childOffsetX, childOffsetY, extra);
124
+ if (childResult.handled)
125
+ return childResult;
126
+ if (eventType === 'onClick' && !focusTarget && childResult.focusTarget) {
127
+ focusTarget = childResult.focusTarget;
98
128
  }
99
129
  }
100
- return { handled: false };
130
+ if (boxEl.props.pointerEvents === 'none') {
131
+ return focusTarget ? { handled: false, focusTarget } : { handled: false };
132
+ }
133
+ const handlers = boxEl.handlers;
134
+ const handler = handlers?.[eventType];
135
+ if (handler) {
136
+ const event = {
137
+ x,
138
+ y,
139
+ localX: x - absX,
140
+ localY: y - absY,
141
+ target: layout,
142
+ ...extra,
143
+ };
144
+ handler(event);
145
+ return {
146
+ handled: true,
147
+ focusTarget: eventType === 'onClick' && isFocusableHandlers(handlers)
148
+ ? { element: boxEl, layout }
149
+ : undefined,
150
+ };
151
+ }
152
+ if (eventType === 'onClick' && !focusTarget && isFocusableHandlers(handlers)) {
153
+ focusTarget = { element: boxEl, layout };
154
+ }
155
+ return focusTarget ? { handled: false, focusTarget } : { handled: false };
101
156
  }
102
- /** True when point is over an interactive element (click/key/composition handlers). */
157
+ /**
158
+ * Dispatch a hit at `(x, y)` against the element tree for the given handler key
159
+ * (e.g. `onClick`, `onPointerDown`, `onKeyDown`, composition events).
160
+ * The deepest hit with a matching handler runs first; only one handler runs per call.
161
+ * Optional `extra` is shallow-merged onto the `HitEvent` after base fields so callers
162
+ * can pass modifier keys, `button`, wheel deltas, and other renderer-specific metadata.
163
+ * For `onClick` only, the return value may include `focusTarget` for focus routing
164
+ * (including click-to-focus when there is no `onClick` handler).
165
+ * Layout bounds must be finite and non-negative on `width` and `height`; otherwise the node is
166
+ * skipped for hit-testing (corrupt geometry from Yoga or a bad snapshot).
167
+ */
168
+ export function dispatchHit(element, layout, eventType, x, y, extra) {
169
+ return dispatchHitRecursive(element, layout, eventType, x, y, 0, 0, extra);
170
+ }
171
+ /**
172
+ * True when the point is over an element that participates in pointer hit-testing
173
+ * (`onClick`, `onPointerDown` / `Up` / `Move`, `onWheel`). Keyboard and composition
174
+ * handlers alone do not count — use this for hover / pointer-capture style checks.
175
+ */
103
176
  export function hasInteractiveHitAtPoint(element, layout, x, y) {
104
177
  const hits = [];
105
178
  collectHits(element, layout, x, y, 0, 0, hits);
106
179
  for (let i = hits.length - 1; i >= 0; i--) {
107
180
  const handlers = hits[i].handlers;
108
181
  if (handlers.onClick ||
109
- handlers.onKeyDown ||
110
- handlers.onKeyUp ||
111
- handlers.onCompositionStart ||
112
- handlers.onCompositionUpdate ||
113
- handlers.onCompositionEnd) {
182
+ handlers.onPointerDown ||
183
+ handlers.onPointerUp ||
184
+ handlers.onPointerMove ||
185
+ handlers.onWheel) {
114
186
  return true;
115
187
  }
116
188
  }
117
189
  return false;
118
190
  }
191
+ /**
192
+ * Child indices from root to the deepest box under (x, y). Among overlapping siblings, prefers higher z-index (topmost);
193
+ * non-finite or non-number `zIndex` values match `dispatchHit` / paint order (treated as `0`).
194
+ * Boxes with `pointerEvents: 'none'` do not terminate the path when they have no deeper hit (same idea as `getCursorAtPoint` and `collectHits`).
195
+ * Returns `null` when the point misses the tree. Returns `[]` when the point hits the
196
+ * root (or a leaf box) with no deeper box hit.
197
+ */
198
+ export function hitPathAtPoint(element, layout, x, y, offsetX = 0, offsetY = 0) {
199
+ if (!Number.isFinite(x) || !Number.isFinite(y))
200
+ return null;
201
+ if (!layoutBoundsAreFinite(layout))
202
+ return null;
203
+ const absX = offsetX + layout.x;
204
+ const absY = offsetY + layout.y;
205
+ if (element.kind === 'box') {
206
+ const { overflow } = element.props;
207
+ if (overflow === 'hidden' || overflow === 'scroll') {
208
+ if (x < absX || x > absX + layout.width || y < absY || y > absY + layout.height) {
209
+ return null;
210
+ }
211
+ }
212
+ }
213
+ const inside = x >= absX &&
214
+ x <= absX + layout.width &&
215
+ y >= absY &&
216
+ y <= absY + layout.height;
217
+ if (!inside)
218
+ return null;
219
+ if (element.kind !== 'box')
220
+ return null;
221
+ const boxEl = element;
222
+ let childOffsetX = absX;
223
+ let childOffsetY = absY;
224
+ childOffsetX -= finiteScrollOffset(boxEl.props.scrollX);
225
+ childOffsetY -= finiteScrollOffset(boxEl.props.scrollY);
226
+ const asc = getChildrenByZAsc(boxEl);
227
+ for (let k = asc.length - 1; k >= 0; k--) {
228
+ const i = asc[k];
229
+ const childLayout = layout.children[i];
230
+ if (!childLayout)
231
+ continue;
232
+ const sub = hitPathAtPoint(boxEl.children[i], childLayout, x, y, childOffsetX, childOffsetY);
233
+ if (sub !== null)
234
+ return [i, ...sub];
235
+ }
236
+ if (boxEl.props.pointerEvents === 'none')
237
+ return null;
238
+ return [];
239
+ }
119
240
  /** Get the cursor style at a given point by walking the tree. Returns the deepest element's cursor prop. */
120
241
  export function getCursorAtPoint(element, layout, x, y, offsetX = 0, offsetY = 0) {
242
+ if (!Number.isFinite(x) || !Number.isFinite(y))
243
+ return null;
244
+ if (!layoutBoundsAreFinite(layout))
245
+ return null;
121
246
  const absX = offsetX + layout.x;
122
247
  const absY = offsetY + layout.y;
123
248
  const inside = x >= absX && x <= absX + layout.width &&
@@ -128,13 +253,11 @@ export function getCursorAtPoint(element, layout, x, y, offsetX = 0, offsetY = 0
128
253
  if (element.kind === 'box') {
129
254
  let childOffX = absX;
130
255
  let childOffY = absY;
131
- if (element.props.scrollX)
132
- childOffX -= element.props.scrollX;
133
- if (element.props.scrollY)
134
- childOffY -= element.props.scrollY;
135
- const indices = getChildrenByZDesc(element);
136
- for (let ii = 0; ii < indices.length; ii++) {
137
- const i = indices[ii];
256
+ childOffX -= finiteScrollOffset(element.props.scrollX);
257
+ childOffY -= finiteScrollOffset(element.props.scrollY);
258
+ const asc = getChildrenByZAsc(element);
259
+ for (let k = asc.length - 1; k >= 0; k--) {
260
+ const i = asc[k];
138
261
  const childLayout = layout.children[i];
139
262
  if (childLayout) {
140
263
  const childCursor = getCursorAtPoint(element.children[i], childLayout, x, y, childOffX, childOffY);
@@ -143,6 +266,8 @@ export function getCursorAtPoint(element, layout, x, y, offsetX = 0, offsetY = 0
143
266
  }
144
267
  }
145
268
  }
269
+ if (element.props.pointerEvents === 'none')
270
+ return null;
146
271
  // Return this element's cursor
147
272
  const cursor = element.props.cursor;
148
273
  return cursor ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"hit-test.js","sourceRoot":"","sources":["../src/hit-test.ts"],"names":[],"mappings":"AAgBA,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAgC,CAAA;AAEpE,SAAS,QAAQ,CAAC,EAAa;IAC7B,OAAQ,EAAE,CAAC,KAAiC,CAAC,MAA4B,IAAI,CAAC,CAAA;AAChF,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IACxH,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,OAAO,IAAI,CAAA;AACb,CAAC;AASD,yFAAyF;AACzF,SAAS,WAAW,CAClB,OAAkB,EAClB,MAAsB,EACtB,CAAS,EACT,CAAS,EACT,OAAe,EACf,OAAe,EACf,OAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IAE/B,4CAA4C;IAC5C,IAAI,YAAY,GAAG,IAAI,CAAA;IACvB,IAAI,YAAY,GAAG,IAAI,CAAA;IACvB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACpD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnD,+CAA+C;YAC/C,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChF,OAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,OAAO;YAAE,YAAY,IAAI,OAAO,CAAA;QACpC,IAAI,OAAO;YAAE,YAAY,IAAI,OAAO,CAAA;IACtC,CAAC;IAED,MAAM,MAAM,GACV,CAAC,IAAI,IAAI;QACT,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK;QACxB,CAAC,IAAI,IAAI;QACT,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAE3B,IAAI,CAAC,MAAM;QAAE,OAAM;IAEnB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,OAAqB,CAAA;QACnC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAChF,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;YACzF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,WAAW,CACzB,OAAkB,EAClB,MAAsB,EACtB,SAA8B,EAC9B,CAAS,EACT,CAAS,EACT,KAA+B;IAE/B,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IAE9C,iDAAiD;IACjD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACpB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAa;gBACtB,CAAC;gBACD,CAAC;gBACD,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI;gBACpB,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,KAAK;aACT,CACA;YAAC,OAAiC,CAAC,KAAK,CAAC,CAAA;YAC1C,MAAM,SAAS,GAAG,CAAC,CAAC,CAClB,GAAG,CAAC,QAAQ,CAAC,OAAO;gBACpB,GAAG,CAAC,QAAQ,CAAC,SAAS;gBACtB,GAAG,CAAC,QAAQ,CAAC,OAAO;gBACpB,GAAG,CAAC,QAAQ,CAAC,kBAAkB;gBAC/B,GAAG,CAAC,QAAQ,CAAC,mBAAmB;gBAChC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAC9B,CAAA;YACD,MAAM,WAAW,GACf,SAAS,KAAK,SAAS,IAAI,SAAS;gBAClC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;gBAC9C,CAAC,CAAC,SAAS,CAAA;YACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IACD,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;YACpB,MAAM,SAAS,GAAG,CAAC,CAAC,CAClB,GAAG,CAAC,QAAQ,CAAC,OAAO;gBACpB,GAAG,CAAC,QAAQ,CAAC,SAAS;gBACtB,GAAG,CAAC,QAAQ,CAAC,OAAO;gBACpB,GAAG,CAAC,QAAQ,CAAC,kBAAkB;gBAC/B,GAAG,CAAC,QAAQ,CAAC,mBAAmB;gBAChC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAC9B,CAAA;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAA;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,wBAAwB,CACtC,OAAkB,EAClB,MAAsB,EACtB,CAAS,EACT,CAAS;IAET,MAAM,IAAI,GAAgB,EAAE,CAAA;IAC5B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAA;QAClC,IACE,QAAQ,CAAC,OAAO;YAChB,QAAQ,CAAC,SAAS;YAClB,QAAQ,CAAC,OAAO;YAChB,QAAQ,CAAC,kBAAkB;YAC3B,QAAQ,CAAC,mBAAmB;YAC5B,QAAQ,CAAC,gBAAgB,EACzB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,gBAAgB,CAC9B,OAAkB,EAClB,MAAsB,EACtB,CAAS,EACT,CAAS,EACT,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC;IAEX,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAA;IAE/B,MAAM,MAAM,GACV,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK;QACrC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAExC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,+CAA+C;IAC/C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,IAAI,SAAS,GAAG,IAAI,CAAA;QACpB,IAAI,SAAS,GAAG,IAAI,CAAA;QACpB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QAC7D,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QAE7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC3C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAE,CAAA;YACtB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;gBACnG,IAAI,WAAW;oBAAE,OAAO,WAAW,CAAA;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAI,OAAO,CAAC,KAAiC,CAAC,MAA4B,CAAA;IACtF,OAAO,MAAM,IAAI,IAAI,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"hit-test.js","sourceRoot":"","sources":["../src/hit-test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,20 +1,33 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Public entry for `@geometra/core`: reactive primitives, element constructors, app mount, layout-tree
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`, …).
7
+ *
8
+ * Geometra keeps a single declarative tree across canvas, terminal, and server-driven clients; this file
9
+ * is the supported import surface. Optional `Renderer.setFrameTimings` receives layout wall time after
10
+ * Yoga so inspectors and telemetry can split layout from paint.
11
+ */
1
12
  export { signal, computed, effect, batch } from './signals.js';
2
13
  export type { Signal, Computed } from './signals.js';
3
14
  export { box, text, image } from './elements.js';
4
15
  export { createApp } from './app.js';
5
16
  export type { App, AppOptions } from './app.js';
6
17
  export { toLayoutTree } from './tree.js';
7
- export { dispatchHit, getCursorAtPoint, hasInteractiveHitAtPoint } from './hit-test.js';
18
+ export { resolveDirectionValue, resolveElementDirection } from './direction.js';
19
+ export type { ResolvedDirection } from './direction.js';
20
+ export { dispatchHit, getCursorAtPoint, hasInteractiveHitAtPoint, hitPathAtPoint } from './hit-test.js';
8
21
  export type { HitDispatchResult } from './hit-test.js';
9
- export { extractFontFamiliesFromCSSFont, collectFontFamiliesFromTree, waitForFonts, } from './fonts.js';
10
- export { focusedElement, setFocus, clearFocus, focusNext, focusPrev } from './focus.js';
22
+ export { extractFontFamiliesFromCSSFont, collectFontFamiliesFromTree, resolveFontLoadTimeoutMs, waitForFonts, } from './fonts.js';
23
+ export { focusedElement, setFocus, clearFocus, focusNext, focusPrev, collectFocusOrder } from './focus.js';
24
+ export type { FocusTarget } from './focus.js';
11
25
  export { trapFocusStep } from './focus-trap.js';
12
- export { dispatchKeyboardEvent } from './keyboard.js';
13
- export { dispatchCompositionEvent } from './keyboard.js';
26
+ export { dispatchCompositionEvent, dispatchKeyboardEvent } from './keyboard.js';
14
27
  export { collectTextNodes, getSelectedText, hitTestText } from './selection.js';
15
28
  export type { TextNodeInfo, TextLineInfo, SelectionRange } from './selection.js';
16
- export { transition, spring, easing, animationLoop } from './animation.js';
17
- export type { EasingFn } from './animation.js';
29
+ export { transition, spring, easing, animationLoop, createTweenTimeline, createPropertyTimeline, setMotionPreference, getMotionPreference, } from './animation.js';
30
+ export type { EasingFn, TweenPlaybackState, TweenTimeline, PropertyTimeline, MotionPreference, } from './animation.js';
18
31
  export { syncVirtualWindow } from './virtual-scroll.js';
19
32
  export type { VirtualWindowState } from './virtual-scroll.js';
20
33
  export { toSemanticHTML } from './seo.js';
@@ -25,5 +38,5 @@ export { isCollapsedSelection, getInputSelectionText, replaceInputSelection, ins
25
38
  export type { TextInputState, TextInputEditResult, CaretGeometry } from './text-input.js';
26
39
  export { createTextInputHistory, pushTextInputHistory, undoTextInputHistory, redoTextInputHistory, } from './text-input-history.js';
27
40
  export type { TextInputHistoryState } from './text-input-history.js';
28
- export type { UIElement, BoxElement, TextElement, ImageElement, StyleProps, SemanticProps, EventHandlers, HitEvent, KeyboardHitEvent, CompositionHitEvent, Component, Renderer, } from './types.js';
41
+ export type { UIElement, BoxElement, TextElement, ImageElement, StyleProps, Direction, DirectionProps, SemanticProps, EventHandlers, HitEvent, KeyboardHitEvent, CompositionHitEvent, Component, FrameTimings, Renderer, } from './types.js';
29
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC9D,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGpD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACvF,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGtD,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,GACb,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGxD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC/E,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGhF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC1E,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,YAAY,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAGvE,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;AACxB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACzF,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAGpE,YAAY,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,QAAQ,GACT,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,14 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * Public entry for `@geometra/core`: reactive primitives, element constructors, app mount, layout-tree
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`, …).
7
+ *
8
+ * Geometra keeps a single declarative tree across canvas, terminal, and server-driven clients; this file
9
+ * is the supported import surface. Optional `Renderer.setFrameTimings` receives layout wall time after
10
+ * Yoga so inspectors and telemetry can split layout from paint.
11
+ */
1
12
  // Reactivity
2
13
  export { signal, computed, effect, batch } from './signals.js';
3
14
  // Element constructors
@@ -6,19 +17,19 @@ export { box, text, image } from './elements.js';
6
17
  export { createApp } from './app.js';
7
18
  // Tree conversion
8
19
  export { toLayoutTree } from './tree.js';
20
+ export { resolveDirectionValue, resolveElementDirection } from './direction.js';
9
21
  // Hit testing
10
- export { dispatchHit, getCursorAtPoint, hasInteractiveHitAtPoint } from './hit-test.js';
22
+ export { dispatchHit, getCursorAtPoint, hasInteractiveHitAtPoint, hitPathAtPoint } from './hit-test.js';
11
23
  // Web fonts (browser)
12
- export { extractFontFamiliesFromCSSFont, collectFontFamiliesFromTree, waitForFonts, } from './fonts.js';
24
+ export { extractFontFamiliesFromCSSFont, collectFontFamiliesFromTree, resolveFontLoadTimeoutMs, waitForFonts, } from './fonts.js';
13
25
  // Focus management
14
- export { focusedElement, setFocus, clearFocus, focusNext, focusPrev } from './focus.js';
26
+ export { focusedElement, setFocus, clearFocus, focusNext, focusPrev, collectFocusOrder } from './focus.js';
15
27
  export { trapFocusStep } from './focus-trap.js';
16
- export { dispatchKeyboardEvent } from './keyboard.js';
17
- export { dispatchCompositionEvent } from './keyboard.js';
28
+ export { dispatchCompositionEvent, dispatchKeyboardEvent } from './keyboard.js';
18
29
  // Text selection
19
30
  export { collectTextNodes, getSelectedText, hitTestText } from './selection.js';
20
31
  // Animation
21
- export { transition, spring, easing, animationLoop } from './animation.js';
32
+ export { transition, spring, easing, animationLoop, createTweenTimeline, createPropertyTimeline, setMotionPreference, getMotionPreference, } from './animation.js';
22
33
  // Virtual scroll helpers
23
34
  export { syncVirtualWindow } from './virtual-scroll.js';
24
35
  // SEO
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,MAAM,eAAe,CAAA;AAEhD,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGpC,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAGvF,sBAAsB;AACtB,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG/E,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG1E,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;;;;;;;;;;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,MAAM,eAAe,CAAA;AAEhD,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;AAGvG,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,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"}
@@ -2,9 +2,12 @@ import type { ComputedLayout } from 'textura';
2
2
  import type { UIElement, KeyboardHitEvent, CompositionHitEvent } from './types.js';
3
3
  /**
4
4
  * Dispatch keyboard events to the focused element.
5
- * Also handles Tab/Shift+Tab focus traversal.
5
+ * Tab / Shift+Tab focus traversal runs only for `'onKeyDown'` (not `'onKeyUp'`).
6
6
  */
7
7
  export declare function dispatchKeyboardEvent(tree: UIElement, layout: ComputedLayout, eventType: 'onKeyDown' | 'onKeyUp', partialEvent: Omit<KeyboardHitEvent, 'target'>): boolean;
8
- /** Dispatch IME composition events to the focused element. */
8
+ /**
9
+ * Dispatch IME composition events to the focused element.
10
+ * Returns `false` when there is no resolved focus target or the target has no handler for `eventType`.
11
+ */
9
12
  export declare function dispatchCompositionEvent(tree: UIElement, layout: ComputedLayout, eventType: 'onCompositionStart' | 'onCompositionUpdate' | 'onCompositionEnd', partialEvent: Omit<CompositionHitEvent, 'target'>): boolean;
10
13
  //# sourceMappingURL=keyboard.d.ts.map
@@ -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;;;GAGG;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,8DAA8D;AAC9D,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;;;GAGG;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;;;GAGG;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
@@ -1,7 +1,7 @@
1
1
  import { focusNext, focusPrev, resolveFocusedTarget } from './focus.js';
2
2
  /**
3
3
  * Dispatch keyboard events to the focused element.
4
- * Also handles Tab/Shift+Tab focus traversal.
4
+ * Tab / Shift+Tab focus traversal runs only for `'onKeyDown'` (not `'onKeyUp'`).
5
5
  */
6
6
  export function dispatchKeyboardEvent(tree, layout, eventType, partialEvent) {
7
7
  if (partialEvent.key === 'Tab' && eventType === 'onKeyDown') {
@@ -24,7 +24,10 @@ export function dispatchKeyboardEvent(tree, layout, eventType, partialEvent) {
24
24
  }
25
25
  return false;
26
26
  }
27
- /** Dispatch IME composition events to the focused element. */
27
+ /**
28
+ * Dispatch IME composition events to the focused element.
29
+ * Returns `false` when there is no resolved focus target or the target has no handler for `eventType`.
30
+ */
28
31
  export function dispatchCompositionEvent(tree, layout, eventType, partialEvent) {
29
32
  const focused = resolveFocusedTarget(tree, layout);
30
33
  if (!focused)
@@ -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;;;GAGG;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,8DAA8D;AAC9D,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;;;GAGG;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;;;GAGG;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,8 +1,11 @@
1
1
  import type { ComputedLayout } from 'textura';
2
2
  import type { UIElement, TextElement } from './types.js';
3
+ import { type ResolvedDirection } from './direction.js';
3
4
  /** Info about a rendered text node's position and content. */
4
5
  export interface TextNodeInfo {
5
6
  element: TextElement;
7
+ /** Resolved runtime direction for this node. */
8
+ direction: ResolvedDirection;
6
9
  /** Absolute x position. */
7
10
  x: number;
8
11
  /** Absolute y position. */
@@ -35,10 +38,10 @@ export interface SelectionRange {
35
38
  focusOffset: number;
36
39
  }
37
40
  /** Collect all selectable text nodes from the element tree with their absolute positions. */
38
- export declare function collectTextNodes(element: UIElement, layout: ComputedLayout, offsetX: number, offsetY: number, results: TextNodeInfo[]): void;
41
+ export declare function collectTextNodes(element: UIElement, layout: ComputedLayout, offsetX: number, offsetY: number, results: TextNodeInfo[], parentDirection?: ResolvedDirection): void;
39
42
  /** Get the selected text from a selection range and text node info list. */
40
43
  export declare function getSelectedText(range: SelectionRange, textNodes: TextNodeInfo[]): string;
41
- /** Find which text node and character offset is at a given (x, y) point. */
44
+ /** Find which text node and character offset is at a given (x, y) point. Non-finite pointer coordinates return `null`; nodes with non-finite bounds are skipped (same invariant as pointer hit-testing). */
42
45
  export declare function hitTestText(textNodes: TextNodeInfo[], px: number, py: number): {
43
46
  nodeIndex: number;
44
47
  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;AAExD,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAA;IACpB,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,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA2BN;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CA+BR;AAED,4EAA4E;AAC5E,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,CAgClD"}
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;AAEhF,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,6FAA6F;AAC7F,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,CA6BN;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CA+BR;AAWD,4MAA4M;AAC5M,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"}