@geometra/core 1.1.2 → 1.2.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 (64) hide show
  1. package/dist/a11y.d.ts.map +1 -1
  2. package/dist/a11y.js +8 -3
  3. package/dist/a11y.js.map +1 -1
  4. package/dist/animation.d.ts +18 -1
  5. package/dist/animation.d.ts.map +1 -1
  6. package/dist/animation.js +42 -5
  7. package/dist/animation.js.map +1 -1
  8. package/dist/app.d.ts +22 -2
  9. package/dist/app.d.ts.map +1 -1
  10. package/dist/app.js +15 -2
  11. package/dist/app.js.map +1 -1
  12. package/dist/canvas-polyfill.js +8 -8
  13. package/dist/canvas-polyfill.js.map +1 -1
  14. package/dist/direction.d.ts +9 -2
  15. package/dist/direction.d.ts.map +1 -1
  16. package/dist/direction.js +9 -2
  17. package/dist/direction.js.map +1 -1
  18. package/dist/elements.d.ts +9 -1
  19. package/dist/elements.d.ts.map +1 -1
  20. package/dist/elements.js +9 -1
  21. package/dist/elements.js.map +1 -1
  22. package/dist/focus.d.ts +4 -0
  23. package/dist/focus.d.ts.map +1 -1
  24. package/dist/focus.js +4 -0
  25. package/dist/focus.js.map +1 -1
  26. package/dist/fonts.d.ts +8 -1
  27. package/dist/fonts.d.ts.map +1 -1
  28. package/dist/fonts.js +22 -6
  29. package/dist/fonts.js.map +1 -1
  30. package/dist/hit-test.d.ts +10 -0
  31. package/dist/hit-test.d.ts.map +1 -1
  32. package/dist/hit-test.js +11 -3
  33. package/dist/hit-test.js.map +1 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/keyboard.d.ts +4 -3
  37. package/dist/keyboard.d.ts.map +1 -1
  38. package/dist/keyboard.js +4 -3
  39. package/dist/keyboard.js.map +1 -1
  40. package/dist/layout-bounds.d.ts +5 -2
  41. package/dist/layout-bounds.d.ts.map +1 -1
  42. package/dist/layout-bounds.js +6 -3
  43. package/dist/layout-bounds.js.map +1 -1
  44. package/dist/selection.d.ts +16 -2
  45. package/dist/selection.d.ts.map +1 -1
  46. package/dist/selection.js +48 -9
  47. package/dist/selection.js.map +1 -1
  48. package/dist/seo.d.ts +3 -1
  49. package/dist/seo.d.ts.map +1 -1
  50. package/dist/seo.js +41 -27
  51. package/dist/seo.js.map +1 -1
  52. package/dist/text-input.d.ts.map +1 -1
  53. package/dist/text-input.js +16 -5
  54. package/dist/text-input.js.map +1 -1
  55. package/dist/tree.d.ts +7 -0
  56. package/dist/tree.d.ts.map +1 -1
  57. package/dist/tree.js +7 -0
  58. package/dist/tree.js.map +1 -1
  59. package/dist/types.d.ts +18 -4
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/virtual-scroll.d.ts.map +1 -1
  62. package/dist/virtual-scroll.js +2 -1
  63. package/dist/virtual-scroll.js.map +1 -1
  64. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAyC,MAAM,YAAY,CAAA;AAElF,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAOD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAA;IACD,MAAM,EAAE,mBAAmB,CAAA;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAA;CACnB;AAgGD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAE9F"}
1
+ {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAyC,MAAM,YAAY,CAAA;AAElF,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAOD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAA;IACD,MAAM,EAAE,mBAAmB,CAAA;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAA;CACnB;AAqGD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAE9F"}
package/dist/a11y.js CHANGED
@@ -52,12 +52,17 @@ function inferName(element) {
52
52
  return element.semantic?.alt ?? element.props.alt;
53
53
  return element.semantic?.alt;
54
54
  }
55
+ /** Matches `collectFocusOrder` / click-to-focus: key, click, or composition handlers make a box focusable. */
55
56
  function isFocusable(element) {
56
57
  if (element.kind !== 'box')
57
58
  return false;
58
- return !!(element.handlers?.onClick ||
59
- element.handlers?.onKeyDown ||
60
- element.handlers?.onKeyUp);
59
+ const h = element.handlers;
60
+ return !!(h?.onClick ||
61
+ h?.onKeyDown ||
62
+ h?.onKeyUp ||
63
+ h?.onCompositionStart ||
64
+ h?.onCompositionUpdate ||
65
+ h?.onCompositionEnd);
61
66
  }
62
67
  function stateFor(element) {
63
68
  const s = element.semantic;
package/dist/a11y.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"a11y.js","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"a11y.js","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,10 @@ export interface TweenTimeline {
12
12
  value: Signal<number>;
13
13
  /** Schedule/interrupt toward a new target. */
14
14
  to(to: number, durationMs: number, easingFn?: EasingFn): void;
15
- /** Deterministically advance timeline by fixed milliseconds. */
15
+ /**
16
+ * Deterministically advance the timeline by up to `deltaMs` ms (finite values clamped to `>= 0`).
17
+ * Non-finite or non-number `deltaMs` is treated as `0`.
18
+ */
16
19
  step(deltaMs: number): number;
17
20
  pause(): void;
18
21
  resume(): void;
@@ -22,6 +25,7 @@ export interface TweenTimeline {
22
25
  export interface PropertyTimeline {
23
26
  values: Record<string, Signal<number>>;
24
27
  to(targets: Record<string, number>, durationMs: number, easingFn?: EasingFn): void;
28
+ /** Per-key stepping; `deltaMs` rules match {@link TweenTimeline.step}. */
25
29
  step(deltaMs: number): Record<string, number>;
26
30
  pause(): void;
27
31
  resume(): void;
@@ -40,6 +44,10 @@ export declare function getMotionPreference(): MotionPreference;
40
44
  /**
41
45
  * Create an animated signal that transitions from `from` to `to` over `duration` ms.
42
46
  * Returns a signal whose `.value` tracks the current interpolated value.
47
+ *
48
+ * Non-finite `duration` (NaN, ±Infinity) jumps immediately to `to` with no RAF scheduling.
49
+ * Finite non-positive durations use the same 1 ms floor as {@link createTweenTimeline} so progress
50
+ * scale stays well-defined.
43
51
  */
44
52
  export declare function transition(from: number, to: number, duration: number, easingFn?: EasingFn, options?: {
45
53
  respectReducedMotion?: boolean;
@@ -47,11 +55,20 @@ export declare function transition(from: number, to: number, duration: number, e
47
55
  /**
48
56
  * Deterministic tween timeline for tests and frame-stepped animation orchestration.
49
57
  * Unlike `transition()`, this helper does not use `requestAnimationFrame`.
58
+ *
59
+ * Non-finite `durationMs` (NaN, ±Infinity) jumps immediately to the target and ends in `finished`,
60
+ * matching {@link transition} so corrupt or serialized values never leave `step()` dividing by NaN.
61
+ *
62
+ * Non-finite `initialValue` normalizes to `0` so a corrupt starting pose cannot freeze timelines in NaN.
63
+ *
64
+ * {@link TweenTimeline.step} uses the same finite guard for `deltaMs` so a bad frame clock (NaN/±Infinity)
65
+ * cannot poison internal elapsed time.
50
66
  */
51
67
  export declare function createTweenTimeline(initialValue: number): TweenTimeline;
52
68
  /**
53
69
  * Multi-property deterministic timeline for geometry/paint numeric fields.
54
70
  * Typical usage includes x/y/width/height/opacity style numeric transitions.
71
+ * Per-key initial values use the same non-finite normalization as {@link createTweenTimeline}.
55
72
  */
56
73
  export declare function createPropertyTimeline(initialValues: Record<string, number>): PropertyTimeline;
57
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
package/dist/animation.js CHANGED
@@ -5,6 +5,14 @@ const raf = typeof requestAnimationFrame !== 'undefined'
5
5
  const cancelRaf = typeof cancelAnimationFrame !== 'undefined'
6
6
  ? cancelAnimationFrame
7
7
  : (id) => clearTimeout(id);
8
+ /** Same finite guard as layout/hit paths: NaN and ±Infinity become `0` so stepping never propagates poisoned floats. */
9
+ function finiteTimelineNumber(value) {
10
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
11
+ }
12
+ /** Advance amount for timeline stepping: finite `deltaMs` clamped to `>= 0`; otherwise `0` (NaN/±Infinity cannot poison `elapsed`). */
13
+ function stepDeltaMs(deltaMs) {
14
+ return typeof deltaMs === 'number' && Number.isFinite(deltaMs) ? Math.max(0, deltaMs) : 0;
15
+ }
8
16
  /** Common easing functions. */
9
17
  export const easing = {
10
18
  linear: (t) => t,
@@ -28,6 +36,10 @@ export function getMotionPreference() {
28
36
  /**
29
37
  * Create an animated signal that transitions from `from` to `to` over `duration` ms.
30
38
  * Returns a signal whose `.value` tracks the current interpolated value.
39
+ *
40
+ * Non-finite `duration` (NaN, ±Infinity) jumps immediately to `to` with no RAF scheduling.
41
+ * Finite non-positive durations use the same 1 ms floor as {@link createTweenTimeline} so progress
42
+ * scale stays well-defined.
31
43
  */
32
44
  export function transition(from, to, duration, easingFn = easing.easeInOut, options = {}) {
33
45
  const s = signal(from);
@@ -35,10 +47,15 @@ export function transition(from, to, duration, easingFn = easing.easeInOut, opti
35
47
  s.set(to);
36
48
  return s;
37
49
  }
50
+ if (!Number.isFinite(duration)) {
51
+ s.set(to);
52
+ return s;
53
+ }
54
+ const d = Math.max(1, duration);
38
55
  const start = Date.now();
39
56
  function tick() {
40
57
  const elapsed = Date.now() - start;
41
- const t = Math.min(elapsed / duration, 1);
58
+ const t = Math.min(elapsed / d, 1);
42
59
  s.set(from + (to - from) * easingFn(t));
43
60
  if (t < 1)
44
61
  raf(tick);
@@ -49,11 +66,20 @@ export function transition(from, to, duration, easingFn = easing.easeInOut, opti
49
66
  /**
50
67
  * Deterministic tween timeline for tests and frame-stepped animation orchestration.
51
68
  * Unlike `transition()`, this helper does not use `requestAnimationFrame`.
69
+ *
70
+ * Non-finite `durationMs` (NaN, ±Infinity) jumps immediately to the target and ends in `finished`,
71
+ * matching {@link transition} so corrupt or serialized values never leave `step()` dividing by NaN.
72
+ *
73
+ * Non-finite `initialValue` normalizes to `0` so a corrupt starting pose cannot freeze timelines in NaN.
74
+ *
75
+ * {@link TweenTimeline.step} uses the same finite guard for `deltaMs` so a bad frame clock (NaN/±Infinity)
76
+ * cannot poison internal elapsed time.
52
77
  */
53
78
  export function createTweenTimeline(initialValue) {
54
- const value = signal(initialValue);
55
- let from = initialValue;
56
- let to = initialValue;
79
+ const initial = finiteTimelineNumber(initialValue);
80
+ const value = signal(initial);
81
+ let from = initial;
82
+ let to = initial;
57
83
  let elapsed = 0;
58
84
  let duration = 0;
59
85
  let easingFn = easing.linear;
@@ -69,6 +95,16 @@ export function createTweenTimeline(initialValue) {
69
95
  playbackState = 'finished';
70
96
  return;
71
97
  }
98
+ if (!Number.isFinite(durationMs)) {
99
+ value.set(nextTo);
100
+ from = nextTo;
101
+ to = nextTo;
102
+ elapsed = 0;
103
+ duration = 1;
104
+ easingFn = nextEasing;
105
+ playbackState = 'finished';
106
+ return;
107
+ }
72
108
  from = value.peek();
73
109
  to = nextTo;
74
110
  elapsed = 0;
@@ -79,7 +115,7 @@ export function createTweenTimeline(initialValue) {
79
115
  function step(deltaMs) {
80
116
  if (playbackState !== 'running')
81
117
  return value.peek();
82
- elapsed += Math.max(0, deltaMs);
118
+ elapsed += stepDeltaMs(deltaMs);
83
119
  const t = Math.min(elapsed / duration, 1);
84
120
  const next = from + (to - from) * easingFn(t);
85
121
  value.set(next);
@@ -114,6 +150,7 @@ export function createTweenTimeline(initialValue) {
114
150
  /**
115
151
  * Multi-property deterministic timeline for geometry/paint numeric fields.
116
152
  * Typical usage includes x/y/width/height/opacity style numeric transitions.
153
+ * Per-key initial values use the same non-finite normalization as {@link createTweenTimeline}.
117
154
  */
118
155
  export function createPropertyTimeline(initialValues) {
119
156
  const timelines = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
package/dist/app.d.ts CHANGED
@@ -17,6 +17,18 @@ export interface AppOptions {
17
17
  * Non-finite or negative values fall back to the default (same rules as `waitForFonts` in `fonts.js`).
18
18
  */
19
19
  fontLoadTimeoutMs?: number;
20
+ /**
21
+ * Yoga / Textura root layout direction. When omitted, derived from the root element’s resolved
22
+ * `dir` prop (parent context defaults to `ltr`), so RTL roots mirror flex rows correctly.
23
+ *
24
+ * Values other than the strings `ltr` and `rtl` (e.g. malformed plain-JS options) are ignored and
25
+ * treated like omission so `computeLayout` still receives a concrete direction.
26
+ *
27
+ * Nested `dir` on descendants still drives text, focus, and selection, but does not set a separate
28
+ * flex direction per subtree: `computeLayout` receives one document direction and
29
+ * {@link import('./tree.js').toLayoutTree} strips `dir` from layout nodes.
30
+ */
31
+ layoutDirection?: 'ltr' | 'rtl';
20
32
  }
21
33
  export interface App {
22
34
  /** The current computed layout. */
@@ -25,8 +37,12 @@ export interface App {
25
37
  tree: UIElement | null;
26
38
  /** Manually trigger a re-render. */
27
39
  update(): void;
28
- /** Dispatch a pointer event at (x, y). */
29
- dispatch(eventType: keyof EventHandlers, x: number, y: number, extra?: Record<string, unknown>): boolean;
40
+ /**
41
+ * Dispatch a pointer event at `(x, y)` using the same coordinate space and optional root offsets as
42
+ * `dispatchHit` in `hit-test.js` (nested canvas surfaces, CSS transforms).
43
+ * Non-finite or non-number offsets are treated as `0`.
44
+ */
45
+ dispatch(eventType: keyof EventHandlers, x: number, y: number, extra?: Record<string, unknown>, offsetX?: number, offsetY?: number): boolean;
30
46
  /** Dispatch a keyboard event to the focused element. */
31
47
  dispatchKey(eventType: 'onKeyDown' | 'onKeyUp', event: Omit<KeyboardHitEvent, 'target'>): boolean;
32
48
  /** Dispatch an IME composition event to the focused element. */
@@ -41,6 +57,10 @@ export interface App {
41
57
  *
42
58
  * The `view` function is called inside a reactive effect — any signals
43
59
  * read during its execution will trigger automatic re-layout and re-render.
60
+ *
61
+ * After each successful `computeLayout`, optional {@link Renderer.setFrameTimings} is invoked with
62
+ * `{ layoutMs }` (non-negative wall milliseconds from `performance.now()` when available, otherwise `0`)
63
+ * immediately before `render`, so hosts can split Yoga/layout time from paint.
44
64
  */
45
65
  export declare function createApp(view: () => UIElement, renderer: Renderer, options?: AppOptions): Promise<App>;
46
66
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAQtF,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,GAAG;IAClB,mCAAmC;IACnC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,gCAAgC;IAChC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB,oCAAoC;IACpC,MAAM,IAAI,IAAI,CAAA;IACd,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IACxG,wDAAwD;IACxD,WAAW,CAAC,SAAS,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAA;IACjG,gEAAgE;IAChE,mBAAmB,CACjB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,EAC5E,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAA;IACV,yBAAyB;IACzB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,GAAG,CAAC,CAyEd"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAmBtF,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CAChC;AAED,MAAM,WAAW,GAAG;IAClB,mCAAmC;IACnC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,gCAAgC;IAChC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACtB,oCAAoC;IACpC,MAAM,IAAI,IAAI,CAAA;IACd;;;;OAIG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,aAAa,EAC9B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAA;IACV,wDAAwD;IACxD,WAAW,CAAC,SAAS,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAA;IACjG,gEAAgE;IAChE,mBAAmB,CACjB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,EAC5E,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAA;IACV,yBAAyB;IACzB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,GAAG,CAAC,CA2Ed"}
package/dist/app.js CHANGED
@@ -1,15 +1,26 @@
1
1
  import { init, computeLayout } from 'textura';
2
2
  import { toLayoutTree } from './tree.js';
3
+ import { resolveElementDirection } from './direction.js';
3
4
  import { dispatchHit } from './hit-test.js';
4
5
  import { effect } from './signals.js';
5
6
  import { focusedElement, setFocus } from './focus.js';
6
7
  import { collectFontFamiliesFromTree, resolveFontLoadTimeoutMs, waitForFonts } from './fonts.js';
7
8
  import { dispatchKeyboardEvent, dispatchCompositionEvent } from './keyboard.js';
9
+ function resolveComputeLayoutDirection(layoutDirection, root) {
10
+ if (layoutDirection === 'ltr' || layoutDirection === 'rtl') {
11
+ return layoutDirection;
12
+ }
13
+ return resolveElementDirection(root, 'ltr');
14
+ }
8
15
  /**
9
16
  * Mount a reactive UI tree onto a renderer.
10
17
  *
11
18
  * The `view` function is called inside a reactive effect — any signals
12
19
  * read during its execution will trigger automatic re-layout and re-render.
20
+ *
21
+ * After each successful `computeLayout`, optional {@link Renderer.setFrameTimings} is invoked with
22
+ * `{ layoutMs }` (non-negative wall milliseconds from `performance.now()` when available, otherwise `0`)
23
+ * immediately before `render`, so hosts can split Yoga/layout time from paint.
13
24
  */
14
25
  export async function createApp(view, renderer, options = {}) {
15
26
  await init();
@@ -35,10 +46,12 @@ export async function createApp(view, renderer, options = {}) {
35
46
  try {
36
47
  app.tree = view();
37
48
  const layoutTree = toLayoutTree(app.tree);
49
+ const direction = resolveComputeLayoutDirection(options.layoutDirection, app.tree);
38
50
  const layoutStart = typeof performance !== 'undefined' ? performance.now() : 0;
39
51
  app.layout = computeLayout(layoutTree, {
40
52
  width: options.width,
41
53
  height: options.height,
54
+ direction,
42
55
  });
43
56
  const rawLayoutMs = typeof performance !== 'undefined' ? performance.now() - layoutStart : 0;
44
57
  const layoutMs = Math.max(0, Number.isFinite(rawLayoutMs) ? rawLayoutMs : 0);
@@ -54,10 +67,10 @@ export async function createApp(view, renderer, options = {}) {
54
67
  }
55
68
  }
56
69
  },
57
- dispatch(eventType, x, y, extra) {
70
+ dispatch(eventType, x, y, extra, offsetX, offsetY) {
58
71
  if (!app.tree || !app.layout)
59
72
  return false;
60
- const { handled, focusTarget } = dispatchHit(app.tree, app.layout, eventType, x, y, extra);
73
+ const { handled, focusTarget } = dispatchHit(app.tree, app.layout, eventType, x, y, extra, offsetX, offsetY);
61
74
  if (eventType === 'onClick' && focusTarget) {
62
75
  setFocus(focusTarget.element, focusTarget.layout);
63
76
  }
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAE/E,SAAS,6BAA6B,CACpC,eAA8C,EAC9C,IAAe;IAEf,IAAI,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAC3D,OAAO,eAAe,CAAA;IACxB,CAAC;IACD,OAAO,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC7C,CAAC;AAgED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAqB,EACrB,QAAkB,EAClB,UAAsB,EAAE;IAExB,MAAM,IAAI,EAAE,CAAA;IAEZ,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,EAAE,CAAA;YAC1B,MAAM,YAAY,CAChB,2BAA2B,CAAC,WAAW,CAAC,EACxC,wBAAwB,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAC5D,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;YAC9C,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAQ;QACf,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,MAAM;YACJ,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,CAAA;gBACjB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACzC,MAAM,SAAS,GAAG,6BAA6B,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;gBAClF,MAAM,WAAW,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9E,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE;oBACrC,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,SAAS;iBACV,CAAC,CAAA;gBACF,MAAM,WAAW,GACf,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC5E,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;gBACxC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO;YAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC1C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC5G,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,EAAE,CAAC;gBAC3C,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,WAAW,CAAC,SAAS,EAAE,YAAY;YACjC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC1C,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;QAC7E,CAAC;QACD,mBAAmB,CAAC,SAAS,EAAE,YAAY;YACzC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YAC1C,OAAO,wBAAwB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;QAChF,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAA;YACT,QAAQ,CAAC,OAAO,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE;QAC1B,KAAK,cAAc,CAAC,KAAK,CAAA;QACzB,GAAG,CAAC,MAAM,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -3,19 +3,19 @@
3
3
  // @napi-rs/canvas provides a compatible canvas for Node.js.
4
4
  import { createCanvas } from '@napi-rs/canvas';
5
5
  if (typeof globalThis.OffscreenCanvas === 'undefined') {
6
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
- ;
8
- globalThis.OffscreenCanvas = class OffscreenCanvas {
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ class NodeOffscreenCanvas {
10
7
  _canvas;
11
8
  constructor(width, height) {
12
9
  this._canvas = createCanvas(width, height);
13
10
  }
14
11
  getContext(type) {
15
- if (type === '2d')
16
- return this._canvas.getContext('2d');
17
- return null;
12
+ if (type !== '2d')
13
+ return null;
14
+ return this._canvas.getContext('2d');
18
15
  }
19
- };
16
+ }
17
+ ;
18
+ globalThis.OffscreenCanvas =
19
+ NodeOffscreenCanvas;
20
20
  }
21
21
  //# sourceMappingURL=canvas-polyfill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-polyfill.js","sourceRoot":"","sources":["../src/canvas-polyfill.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yDAAyD;AACzD,4DAA4D;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,IAAI,OAAO,UAAU,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;IACtD,8DAA8D;IAC9D,CAAC;IAAC,UAAkB,CAAC,eAAe,GAAG,MAAM,eAAe;QAC1D,8DAA8D;QACtD,OAAO,CAAK;QACpB,YAAY,KAAa,EAAE,MAAc;YACvC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QACD,UAAU,CAAC,IAAY;YACrB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACvD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"canvas-polyfill.js","sourceRoot":"","sources":["../src/canvas-polyfill.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yDAAyD;AACzD,4DAA4D;AAE5D,OAAO,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAA;AAE3D,IAAI,OAAO,UAAU,CAAC,eAAe,KAAK,WAAW,EAAE,CAAC;IACtD,MAAM,mBAAmB;QACN,OAAO,CAAQ;QAEhC,YAAY,KAAa,EAAE,MAAc;YACvC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,UAAU,CAAC,IAAY;YACrB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC;KACF;IAED,CAAC;IAAC,UAAyE,CAAC,eAAe;QACzF,mBAAmB,CAAA;AACvB,CAAC"}
@@ -3,10 +3,17 @@ export type ResolvedDirection = 'ltr' | 'rtl';
3
3
  /**
4
4
  * Resolve an element direction value to a concrete runtime direction.
5
5
  * Only `ltr` and `rtl` are honored; `undefined`, `auto`, and any other value (e.g. malformed
6
- * serialized props) inherit {@link parentDirection} until script-level `auto` detection lands.
6
+ * serialized props) inherit {@link parentDirection}. Document-level direction for Yoga flex rows is set
7
+ * separately via {@link import('./app.js').createApp}'s `layoutDirection` option (see `AppOptions` in `app.js`).
7
8
  * Non-`ltr` / non-`rtl` {@link parentDirection} values (bad callers or deserialized state) fall back to `ltr`.
8
9
  */
9
10
  export declare function resolveDirectionValue(dir: Direction | undefined, parentDirection?: ResolvedDirection): ResolvedDirection;
10
- /** Resolve concrete direction for a UI element from its own `dir` and parent context. */
11
+ /**
12
+ * Resolve concrete direction for a UI element from its own `dir` and parent context.
13
+ *
14
+ * @param element Any {@link UIElement}; `dir` is read from {@link UIElement.props} when present.
15
+ * @param parentDirection Resolved direction of the visual parent (default `'ltr'`). Invalid values are normalized like {@link resolveDirectionValue}.
16
+ * @returns Concrete `ltr` or `rtl` for layout, text, and hit-testing.
17
+ */
11
18
  export declare function resolveElementDirection(element: UIElement, parentDirection?: ResolvedDirection): ResolvedDirection;
12
19
  //# sourceMappingURL=direction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"direction.d.ts","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAA;AAM7C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,eAAe,GAAE,iBAAyB,GACzC,iBAAiB,CAKnB;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,EAClB,eAAe,GAAE,iBAAyB,GACzC,iBAAiB,CAGnB"}
1
+ {"version":3,"file":"direction.d.ts","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAA;AAM7C;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,eAAe,GAAE,iBAAyB,GACzC,iBAAiB,CAKnB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,EAClB,eAAe,GAAE,iBAAyB,GACzC,iBAAiB,CAGnB"}
package/dist/direction.js CHANGED
@@ -4,7 +4,8 @@ function normalizeResolvedDirection(value) {
4
4
  /**
5
5
  * Resolve an element direction value to a concrete runtime direction.
6
6
  * Only `ltr` and `rtl` are honored; `undefined`, `auto`, and any other value (e.g. malformed
7
- * serialized props) inherit {@link parentDirection} until script-level `auto` detection lands.
7
+ * serialized props) inherit {@link parentDirection}. Document-level direction for Yoga flex rows is set
8
+ * separately via {@link import('./app.js').createApp}'s `layoutDirection` option (see `AppOptions` in `app.js`).
8
9
  * Non-`ltr` / non-`rtl` {@link parentDirection} values (bad callers or deserialized state) fall back to `ltr`.
9
10
  */
10
11
  export function resolveDirectionValue(dir, parentDirection = 'ltr') {
@@ -15,7 +16,13 @@ export function resolveDirectionValue(dir, parentDirection = 'ltr') {
15
16
  return 'ltr';
16
17
  return parent;
17
18
  }
18
- /** Resolve concrete direction for a UI element from its own `dir` and parent context. */
19
+ /**
20
+ * Resolve concrete direction for a UI element from its own `dir` and parent context.
21
+ *
22
+ * @param element Any {@link UIElement}; `dir` is read from {@link UIElement.props} when present.
23
+ * @param parentDirection Resolved direction of the visual parent (default `'ltr'`). Invalid values are normalized like {@link resolveDirectionValue}.
24
+ * @returns Concrete `ltr` or `rtl` for layout, text, and hit-testing.
25
+ */
19
26
  export function resolveElementDirection(element, parentDirection = 'ltr') {
20
27
  const dir = element.props.dir;
21
28
  return resolveDirectionValue(dir, parentDirection);
@@ -1 +1 @@
1
- {"version":3,"file":"direction.js","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAIA,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAA0B,EAC1B,kBAAqC,KAAK;IAE1C,MAAM,MAAM,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAA;IAC1D,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC/B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CACrC,OAAkB,EAClB,kBAAqC,KAAK;IAE1C,MAAM,GAAG,GAAI,OAAO,CAAC,KAA6B,CAAC,GAAG,CAAA;IACtD,OAAO,qBAAqB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;AACpD,CAAC"}
1
+ {"version":3,"file":"direction.js","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAIA,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAA0B,EAC1B,kBAAqC,KAAK;IAE1C,MAAM,MAAM,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAA;IAC1D,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC/B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAkB,EAClB,kBAAqC,KAAK;IAE1C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAA;IAC7B,OAAO,qBAAqB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;AACpD,CAAC"}
@@ -23,16 +23,24 @@ type ImageProps = FlexProps & StyleProps & DirectionProps & {
23
23
  /**
24
24
  * Create a box (container) element.
25
25
  * Handlers, `semantic`, and `key` are runtime metadata; flex and layout fields are consumed by `toLayoutTree()`.
26
+ * Optional `dir` (`ltr` | `rtl` | `auto`) sets resolved direction for this subtree for focus, hit-testing, and text
27
+ * interaction; `auto` inherits from the parent context. It is stripped in {@link import('./tree.js').toLayoutTree}
28
+ * (Yoga root direction uses {@link import('./app.js').createApp}'s `layoutDirection` when provided).
26
29
  */
27
30
  export declare function box(props: BoxProps, children?: UIElement[]): BoxElement;
28
31
  /**
29
32
  * Create a text leaf element.
30
33
  * `selectable` and `semantic` are runtime/rendering concerns; remaining props feed `toLayoutTree()` and Textura.
34
+ * Optional `dir` participates in the same resolved-direction model as boxes (caret, selection, bidi); it is not part
35
+ * of the Yoga layout snapshot.
31
36
  */
32
37
  export declare function text(props: TextProps): TextElement;
33
38
  /**
34
39
  * Create an image element.
35
- * `semantic` and `key` are runtime metadata; layout and `src`/`alt` flow through `toLayoutTree()`.
40
+ * `semantic` and `key` are runtime metadata. Flex and sizing props feed {@link import('./tree.js').toLayoutTree}
41
+ * for Yoga/Textura; `src`, `alt`, and `objectFit` remain on the live element for renderers and a11y but are
42
+ * stripped from the layout snapshot (Textura measures boxes from width/height, not bitmaps).
43
+ * Optional `dir` is used for resolved direction alongside siblings and ancestors; it is stripped from the layout snapshot.
36
44
  */
37
45
  export declare function image(props: ImageProps): ImageElement;
38
46
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,KAAK,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,CAAA;AACpH,KAAK,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAClC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB,CAAA;AACD,KAAK,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;IAC1D,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB,CAAA;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAE,SAAS,EAAO,GAAG,UAAU,CAoC3E;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAGlD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAGrD"}
1
+ {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAA;AAEnB,KAAK,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,CAAA;AACpH,KAAK,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;IACzD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;IAClC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB,CAAA;AACD,KAAK,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;IAC1D,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAE,SAAS,EAAO,GAAG,UAAU,CAoC3E;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAGlD;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAGrD"}
package/dist/elements.js CHANGED
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Create a box (container) element.
3
3
  * Handlers, `semantic`, and `key` are runtime metadata; flex and layout fields are consumed by `toLayoutTree()`.
4
+ * Optional `dir` (`ltr` | `rtl` | `auto`) sets resolved direction for this subtree for focus, hit-testing, and text
5
+ * interaction; `auto` inherits from the parent context. It is stripped in {@link import('./tree.js').toLayoutTree}
6
+ * (Yoga root direction uses {@link import('./app.js').createApp}'s `layoutDirection` when provided).
4
7
  */
5
8
  export function box(props, children = []) {
6
9
  const { onClick, onPointerDown, onPointerUp, onPointerMove, onWheel, onKeyDown, onKeyUp, onCompositionStart, onCompositionUpdate, onCompositionEnd, key, semantic, ...rest } = props;
@@ -37,6 +40,8 @@ export function box(props, children = []) {
37
40
  /**
38
41
  * Create a text leaf element.
39
42
  * `selectable` and `semantic` are runtime/rendering concerns; remaining props feed `toLayoutTree()` and Textura.
43
+ * Optional `dir` participates in the same resolved-direction model as boxes (caret, selection, bidi); it is not part
44
+ * of the Yoga layout snapshot.
40
45
  */
41
46
  export function text(props) {
42
47
  const { key, semantic, ...rest } = props;
@@ -44,7 +49,10 @@ export function text(props) {
44
49
  }
45
50
  /**
46
51
  * Create an image element.
47
- * `semantic` and `key` are runtime metadata; layout and `src`/`alt` flow through `toLayoutTree()`.
52
+ * `semantic` and `key` are runtime metadata. Flex and sizing props feed {@link import('./tree.js').toLayoutTree}
53
+ * for Yoga/Textura; `src`, `alt`, and `objectFit` remain on the live element for renderers and a11y but are
54
+ * stripped from the layout snapshot (Textura measures boxes from width/height, not bitmaps).
55
+ * Optional `dir` is used for resolved direction alongside siblings and ancestors; it is stripped from the layout snapshot.
48
56
  */
49
57
  export function image(props) {
50
58
  const { key, semantic, ...rest } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AA8BA;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,WAAwB,EAAE;IAC7D,MAAM,EACJ,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,GAAG,EACH,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK,CAAA;IACT,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAClC,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,aAAa;QAAE,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;IACzD,IAAI,WAAW;QAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAA;IACnD,IAAI,aAAa;QAAE,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;IACzD,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,SAAS;QAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAA;IAC7C,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,kBAAkB;QAAE,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;IACxE,IAAI,mBAAmB;QAAE,QAAQ,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;IAC3E,IAAI,gBAAgB;QAAE,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;IAElE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI;QACX,QAAQ;QACR,GAAG;QACH,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACjE,QAAQ;KACT,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AACtD,CAAC"}
1
+ {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AA8BA;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,WAAwB,EAAE;IAC7D,MAAM,EACJ,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,GAAG,EACH,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK,CAAA;IACT,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAClC,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,aAAa;QAAE,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;IACzD,IAAI,WAAW;QAAE,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAA;IACnD,IAAI,aAAa;QAAE,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAA;IACzD,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,SAAS;QAAE,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAA;IAC7C,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;IACvC,IAAI,kBAAkB;QAAE,QAAQ,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;IACxE,IAAI,mBAAmB;QAAE,QAAQ,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;IAC3E,IAAI,gBAAgB;QAAE,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;IAElE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI;QACX,QAAQ;QACR,GAAG;QACH,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACjE,QAAQ;KACT,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACxC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AACtD,CAAC"}
package/dist/focus.d.ts CHANGED
@@ -19,6 +19,10 @@ export declare function clearFocus(): void;
19
19
  * `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`.
20
20
  * Skips boxes whose layout bounds are non-finite or have negative width/height, and does not walk
21
21
  * their subtrees — same rule as hit-testing so corrupt geometry cannot enter focus order.
22
+ *
23
+ * Unlike pointer hit-testing (`dispatchHit`, `hasInteractiveHitAtPoint` in `hit-test.ts`),
24
+ * `pointerEvents: 'none'` does not exclude a box here: keyboard/composition targets may still belong in
25
+ * Tab order when pointer hits pass through the box.
22
26
  */
23
27
  export declare function collectFocusOrder(element: UIElement, layout: ComputedLayout): FocusTarget[];
24
28
  /** Resolve currently focused target against the latest tree/layout after rerenders. */
@@ -1 +1 @@
1
- {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,cAAc,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAoC,CAAA;AAE1F,+BAA+B;AAC/B,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAE1E;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,GACrB,WAAW,EAAE,CAIf;AA6DD,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,IAAI,CAgBhG;AAED,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAgBvE;AAED,oDAAoD;AACpD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAiBvE"}
1
+ {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,cAAc,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAoC,CAAA;AAE1F,+BAA+B;AAC/B,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAE1E;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,GACrB,WAAW,EAAE,CAIf;AA6DD,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,IAAI,CAgBhG;AAED,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAgBvE;AAED,oDAAoD;AACpD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAiBvE"}
package/dist/focus.js CHANGED
@@ -17,6 +17,10 @@ export function clearFocus() {
17
17
  * `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`.
18
18
  * Skips boxes whose layout bounds are non-finite or have negative width/height, and does not walk
19
19
  * their subtrees — same rule as hit-testing so corrupt geometry cannot enter focus order.
20
+ *
21
+ * Unlike pointer hit-testing (`dispatchHit`, `hasInteractiveHitAtPoint` in `hit-test.ts`),
22
+ * `pointerEvents: 'none'` does not exclude a box here: keyboard/composition targets may still belong in
23
+ * Tab order when pointer hits pass through the box.
20
24
  */
21
25
  export function collectFocusOrder(element, layout) {
22
26
  const results = [];