@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.
- package/dist/a11y.d.ts +8 -1
- package/dist/a11y.d.ts.map +1 -1
- package/dist/a11y.js +24 -16
- package/dist/a11y.js.map +1 -1
- package/dist/animation.d.ts +7 -3
- package/dist/animation.d.ts.map +1 -1
- package/dist/animation.js +22 -15
- package/dist/animation.js.map +1 -1
- package/dist/app.d.ts +26 -7
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +32 -8
- package/dist/app.js.map +1 -1
- package/dist/elements.d.ts +3 -0
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +3 -0
- package/dist/elements.js.map +1 -1
- package/dist/focus-candidates.d.ts +8 -0
- package/dist/focus-candidates.d.ts.map +1 -0
- package/dist/focus-candidates.js +14 -0
- package/dist/focus-candidates.js.map +1 -0
- package/dist/focus-trap.d.ts.map +1 -1
- package/dist/focus-trap.js +2 -6
- package/dist/focus-trap.js.map +1 -1
- package/dist/focus.d.ts +1 -0
- package/dist/focus.d.ts.map +1 -1
- package/dist/focus.js +3 -6
- package/dist/focus.js.map +1 -1
- package/dist/fonts.d.ts +5 -2
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +12 -3
- package/dist/fonts.js.map +1 -1
- package/dist/hit-test.d.ts +53 -9
- package/dist/hit-test.d.ts.map +1 -1
- package/dist/hit-test.js +76 -38
- package/dist/hit-test.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +7 -3
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +7 -3
- package/dist/keyboard.js.map +1 -1
- package/dist/layout-bounds.d.ts +8 -0
- package/dist/layout-bounds.d.ts.map +1 -1
- package/dist/layout-bounds.js +10 -0
- package/dist/layout-bounds.js.map +1 -1
- package/dist/selection.d.ts +12 -1
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +28 -12
- package/dist/selection.js.map +1 -1
- package/dist/text-input.d.ts +14 -2
- package/dist/text-input.d.ts.map +1 -1
- package/dist/text-input.js +20 -11
- package/dist/text-input.js.map +1 -1
- package/dist/tree.d.ts +9 -6
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +9 -6
- package/dist/tree.js.map +1 -1
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/virtual-scroll.d.ts +2 -1
- package/dist/virtual-scroll.d.ts.map +1 -1
- package/dist/virtual-scroll.js +3 -2
- package/dist/virtual-scroll.js.map +1 -1
- package/package.json +1 -1
package/dist/a11y.d.ts
CHANGED
|
@@ -19,6 +19,13 @@ export interface AccessibilityNode {
|
|
|
19
19
|
children: AccessibilityNode[];
|
|
20
20
|
focusable: boolean;
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Build an accessibility tree from UI elements and computed layout geometry.
|
|
24
|
+
*
|
|
25
|
+
* When a node’s {@link ComputedLayout} bounds fail {@link layoutBoundsAreFinite}, that node is emitted as a
|
|
26
|
+
* leaf with zero bounds, no children, and `focusable: false` (even if it has pointer/keyboard handlers).
|
|
27
|
+
* Subtrees under corrupt geometry are not walked — same rule as {@link import('./focus.js').collectFocusOrder}
|
|
28
|
+
* and hit-testing so bad Yoga output cannot surface misleading bounds or hidden descendants.
|
|
29
|
+
*/
|
|
23
30
|
export declare function toAccessibilityTree(tree: UIElement, layout: ComputedLayout): AccessibilityNode;
|
|
24
31
|
//# sourceMappingURL=a11y.d.ts.map
|
package/dist/a11y.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AAIlF,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,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;AAyGD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,iBAAiB,CAE9F"}
|
package/dist/a11y.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return typeof value === 'number' && Number.isFinite(value) ? value : 0;
|
|
4
|
-
}
|
|
1
|
+
import { hasFocusCandidateHandlers } from './focus-candidates.js';
|
|
2
|
+
import { finiteNumberOrZero, layoutBoundsAreFinite } from './layout-bounds.js';
|
|
5
3
|
function inferTextRole(element) {
|
|
6
4
|
if (element.semantic?.role)
|
|
7
5
|
return element.semantic.role;
|
|
@@ -54,15 +52,7 @@ function inferName(element) {
|
|
|
54
52
|
}
|
|
55
53
|
/** Matches `collectFocusOrder` / click-to-focus: key, click, or composition handlers make a box focusable. */
|
|
56
54
|
function isFocusable(element) {
|
|
57
|
-
|
|
58
|
-
return false;
|
|
59
|
-
const h = element.handlers;
|
|
60
|
-
return !!(h?.onClick ||
|
|
61
|
-
h?.onKeyDown ||
|
|
62
|
-
h?.onKeyUp ||
|
|
63
|
-
h?.onCompositionStart ||
|
|
64
|
-
h?.onCompositionUpdate ||
|
|
65
|
-
h?.onCompositionEnd);
|
|
55
|
+
return element.kind === 'box' && hasFocusCandidateHandlers(element.handlers);
|
|
66
56
|
}
|
|
67
57
|
function stateFor(element) {
|
|
68
58
|
const s = element.semantic;
|
|
@@ -87,12 +77,23 @@ function roleFor(element) {
|
|
|
87
77
|
return inferBoxRole(element);
|
|
88
78
|
}
|
|
89
79
|
function walk(element, layout, offsetX, offsetY, path) {
|
|
80
|
+
if (!layoutBoundsAreFinite(layout)) {
|
|
81
|
+
return {
|
|
82
|
+
role: roleFor(element),
|
|
83
|
+
...(inferName(element) !== undefined ? { name: inferName(element) } : {}),
|
|
84
|
+
...(stateFor(element) !== undefined ? { state: stateFor(element) } : {}),
|
|
85
|
+
bounds: { x: 0, y: 0, width: 0, height: 0 },
|
|
86
|
+
path,
|
|
87
|
+
children: [],
|
|
88
|
+
focusable: false,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
90
91
|
const x = offsetX + layout.x;
|
|
91
92
|
const y = offsetY + layout.y;
|
|
92
93
|
const children = [];
|
|
93
94
|
if (element.kind === 'box') {
|
|
94
|
-
const childOffsetX = x -
|
|
95
|
-
const childOffsetY = y -
|
|
95
|
+
const childOffsetX = x - finiteNumberOrZero(element.props.scrollX);
|
|
96
|
+
const childOffsetY = y - finiteNumberOrZero(element.props.scrollY);
|
|
96
97
|
for (let i = 0; i < element.children.length; i++) {
|
|
97
98
|
const childLayout = layout.children[i];
|
|
98
99
|
if (childLayout) {
|
|
@@ -110,7 +111,14 @@ function walk(element, layout, offsetX, offsetY, path) {
|
|
|
110
111
|
focusable: isFocusable(element),
|
|
111
112
|
};
|
|
112
113
|
}
|
|
113
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* Build an accessibility tree from UI elements and computed layout geometry.
|
|
116
|
+
*
|
|
117
|
+
* When a node’s {@link ComputedLayout} bounds fail {@link layoutBoundsAreFinite}, that node is emitted as a
|
|
118
|
+
* leaf with zero bounds, no children, and `focusable: false` (even if it has pointer/keyboard handlers).
|
|
119
|
+
* Subtrees under corrupt geometry are not walked — same rule as {@link import('./focus.js').collectFocusOrder}
|
|
120
|
+
* and hit-testing so bad Yoga output cannot surface misleading bounds or hidden descendants.
|
|
121
|
+
*/
|
|
114
122
|
export function toAccessibilityTree(tree, layout) {
|
|
115
123
|
return walk(tree, layout, 0, 0, []);
|
|
116
124
|
}
|
package/dist/a11y.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a11y.js","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"a11y.js","sourceRoot":"","sources":["../src/a11y.ts"],"names":[],"mappings":"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"}
|
package/dist/animation.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type EasingFn = (t: number) => number;
|
|
|
10
10
|
export type TweenPlaybackState = 'idle' | 'running' | 'paused' | 'finished' | 'cancelled';
|
|
11
11
|
export interface TweenTimeline {
|
|
12
12
|
value: Signal<number>;
|
|
13
|
-
/** Schedule/interrupt toward a new target. */
|
|
13
|
+
/** Schedule/interrupt toward a new target (non-finite values normalize to `0`, same as the initial value). */
|
|
14
14
|
to(to: number, durationMs: number, easingFn?: EasingFn): void;
|
|
15
15
|
/**
|
|
16
16
|
* Deterministically advance the timeline by up to `deltaMs` ms (finite values clamped to `>= 0`).
|
|
@@ -60,6 +60,8 @@ export declare function transition(from: number, to: number, duration: number, e
|
|
|
60
60
|
* matching {@link transition} so corrupt or serialized values never leave `step()` dividing by NaN.
|
|
61
61
|
*
|
|
62
62
|
* Non-finite `initialValue` normalizes to `0` so a corrupt starting pose cannot freeze timelines in NaN.
|
|
63
|
+
* {@link TweenTimeline.to} applies the same normalization to targets so corrupt or serialized goal values
|
|
64
|
+
* cannot poison `step()` interpolation.
|
|
63
65
|
*
|
|
64
66
|
* {@link TweenTimeline.step} uses the same finite guard for `deltaMs` so a bad frame clock (NaN/±Infinity)
|
|
65
67
|
* cannot poison internal elapsed time.
|
|
@@ -68,7 +70,8 @@ export declare function createTweenTimeline(initialValue: number): TweenTimeline
|
|
|
68
70
|
/**
|
|
69
71
|
* Multi-property deterministic timeline for geometry/paint numeric fields.
|
|
70
72
|
* Typical usage includes x/y/width/height/opacity style numeric transitions.
|
|
71
|
-
* Per-key initial values use the same non-finite normalization
|
|
73
|
+
* Per-key initial values and {@link PropertyTimeline.to} targets use the same non-finite normalization
|
|
74
|
+
* as {@link createTweenTimeline} (via each key's timeline).
|
|
72
75
|
*/
|
|
73
76
|
export declare function createPropertyTimeline(initialValues: Record<string, number>): PropertyTimeline;
|
|
74
77
|
/**
|
|
@@ -97,7 +100,8 @@ export declare function spring(target: Signal<number>, config?: {
|
|
|
97
100
|
}): Signal<number>;
|
|
98
101
|
/**
|
|
99
102
|
* Run a raw animation loop. The callback receives delta time in seconds.
|
|
100
|
-
* Return `false` from the callback to stop. Returns a stop function
|
|
103
|
+
* Return `false` from the callback to stop. Returns a stop function that is safe
|
|
104
|
+
* to call multiple times (only the first call cancels a pending frame).
|
|
101
105
|
*/
|
|
102
106
|
export declare function animationLoop(callback: (dt: number) => boolean): () => void;
|
|
103
107
|
//# sourceMappingURL=animation.d.ts.map
|
package/dist/animation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
package/dist/animation.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { finiteNumberOrZero } from './layout-bounds.js';
|
|
1
2
|
import { signal } from './signals.js';
|
|
2
3
|
const raf = typeof requestAnimationFrame !== 'undefined'
|
|
3
4
|
? requestAnimationFrame
|
|
@@ -5,10 +6,6 @@ const raf = typeof requestAnimationFrame !== 'undefined'
|
|
|
5
6
|
const cancelRaf = typeof cancelAnimationFrame !== 'undefined'
|
|
6
7
|
? cancelAnimationFrame
|
|
7
8
|
: (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
9
|
/** Advance amount for timeline stepping: finite `deltaMs` clamped to `>= 0`; otherwise `0` (NaN/±Infinity cannot poison `elapsed`). */
|
|
13
10
|
function stepDeltaMs(deltaMs) {
|
|
14
11
|
return typeof deltaMs === 'number' && Number.isFinite(deltaMs) ? Math.max(0, deltaMs) : 0;
|
|
@@ -71,12 +68,14 @@ export function transition(from, to, duration, easingFn = easing.easeInOut, opti
|
|
|
71
68
|
* matching {@link transition} so corrupt or serialized values never leave `step()` dividing by NaN.
|
|
72
69
|
*
|
|
73
70
|
* Non-finite `initialValue` normalizes to `0` so a corrupt starting pose cannot freeze timelines in NaN.
|
|
71
|
+
* {@link TweenTimeline.to} applies the same normalization to targets so corrupt or serialized goal values
|
|
72
|
+
* cannot poison `step()` interpolation.
|
|
74
73
|
*
|
|
75
74
|
* {@link TweenTimeline.step} uses the same finite guard for `deltaMs` so a bad frame clock (NaN/±Infinity)
|
|
76
75
|
* cannot poison internal elapsed time.
|
|
77
76
|
*/
|
|
78
77
|
export function createTweenTimeline(initialValue) {
|
|
79
|
-
const initial =
|
|
78
|
+
const initial = finiteNumberOrZero(initialValue);
|
|
80
79
|
const value = signal(initial);
|
|
81
80
|
let from = initial;
|
|
82
81
|
let to = initial;
|
|
@@ -85,10 +84,11 @@ export function createTweenTimeline(initialValue) {
|
|
|
85
84
|
let easingFn = easing.linear;
|
|
86
85
|
let playbackState = 'idle';
|
|
87
86
|
function toTarget(nextTo, durationMs, nextEasing = easing.easeInOut) {
|
|
87
|
+
const target = finiteNumberOrZero(nextTo);
|
|
88
88
|
if (getMotionPreference() === 'reduced') {
|
|
89
|
-
value.set(
|
|
90
|
-
from =
|
|
91
|
-
to =
|
|
89
|
+
value.set(target);
|
|
90
|
+
from = target;
|
|
91
|
+
to = target;
|
|
92
92
|
elapsed = 0;
|
|
93
93
|
duration = 1;
|
|
94
94
|
easingFn = nextEasing;
|
|
@@ -96,9 +96,9 @@ export function createTweenTimeline(initialValue) {
|
|
|
96
96
|
return;
|
|
97
97
|
}
|
|
98
98
|
if (!Number.isFinite(durationMs)) {
|
|
99
|
-
value.set(
|
|
100
|
-
from =
|
|
101
|
-
to =
|
|
99
|
+
value.set(target);
|
|
100
|
+
from = target;
|
|
101
|
+
to = target;
|
|
102
102
|
elapsed = 0;
|
|
103
103
|
duration = 1;
|
|
104
104
|
easingFn = nextEasing;
|
|
@@ -106,7 +106,7 @@ export function createTweenTimeline(initialValue) {
|
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
108
108
|
from = value.peek();
|
|
109
|
-
to =
|
|
109
|
+
to = target;
|
|
110
110
|
elapsed = 0;
|
|
111
111
|
duration = Math.max(1, durationMs);
|
|
112
112
|
easingFn = nextEasing;
|
|
@@ -150,7 +150,8 @@ export function createTweenTimeline(initialValue) {
|
|
|
150
150
|
/**
|
|
151
151
|
* Multi-property deterministic timeline for geometry/paint numeric fields.
|
|
152
152
|
* Typical usage includes x/y/width/height/opacity style numeric transitions.
|
|
153
|
-
* Per-key initial values use the same non-finite normalization
|
|
153
|
+
* Per-key initial values and {@link PropertyTimeline.to} targets use the same non-finite normalization
|
|
154
|
+
* as {@link createTweenTimeline} (via each key's timeline).
|
|
154
155
|
*/
|
|
155
156
|
export function createPropertyTimeline(initialValues) {
|
|
156
157
|
const timelines = new Map();
|
|
@@ -291,7 +292,8 @@ export function spring(target, config = {}) {
|
|
|
291
292
|
}
|
|
292
293
|
/**
|
|
293
294
|
* Run a raw animation loop. The callback receives delta time in seconds.
|
|
294
|
-
* Return `false` from the callback to stop. Returns a stop function
|
|
295
|
+
* Return `false` from the callback to stop. Returns a stop function that is safe
|
|
296
|
+
* to call multiple times (only the first call cancels a pending frame).
|
|
295
297
|
*/
|
|
296
298
|
export function animationLoop(callback) {
|
|
297
299
|
let lastTime = Date.now();
|
|
@@ -311,6 +313,11 @@ export function animationLoop(callback) {
|
|
|
311
313
|
}
|
|
312
314
|
}
|
|
313
315
|
id = raf(tick);
|
|
314
|
-
return () => {
|
|
316
|
+
return () => {
|
|
317
|
+
if (!running)
|
|
318
|
+
return;
|
|
319
|
+
running = false;
|
|
320
|
+
cancelRaf(id);
|
|
321
|
+
};
|
|
315
322
|
}
|
|
316
323
|
//# sourceMappingURL=animation.js.map
|
package/dist/animation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAGrC,MAAM,GAAG,GAAG,OAAO,qBAAqB,KAAK,WAAW;IACtD,CAAC,CAAC,qBAAqB;IACvB,CAAC,CAAC,CAAC,EAAuB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAsB,CAAA;AAE1F,MAAM,SAAS,GAAG,OAAO,oBAAoB,KAAK,WAAW;IAC3D,CAAC,CAAC,oBAAoB;IACtB,CAAC,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;AAEpC,
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
package/dist/app.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { ComputedLayout } from 'textura';
|
|
2
2
|
import type { UIElement, Renderer, EventHandlers, KeyboardHitEvent } from './types.js';
|
|
3
3
|
export interface AppOptions {
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Root width for layout computation. Non-numbers, non-finite values, and negatives are ignored
|
|
6
|
+
* (same as omitting the option) so corrupt options cannot poison Yoga.
|
|
7
|
+
*/
|
|
5
8
|
width?: number;
|
|
6
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Root height for layout computation. Non-numbers, non-finite values, and negatives are ignored
|
|
11
|
+
* (same as omitting the option) so corrupt options cannot poison Yoga.
|
|
12
|
+
*/
|
|
7
13
|
height?: number;
|
|
8
14
|
/** Called when an error occurs during update. */
|
|
9
15
|
onError?: (error: unknown) => void;
|
|
@@ -39,17 +45,30 @@ export interface App {
|
|
|
39
45
|
update(): void;
|
|
40
46
|
/**
|
|
41
47
|
* Dispatch a pointer event at `(x, y)` using the same coordinate space and optional root offsets as
|
|
42
|
-
*
|
|
48
|
+
* {@link dispatchHit} (nested canvas surfaces, CSS transforms).
|
|
49
|
+
* Non-finite or non-number `x` / `y` return `false` without handlers or focus changes (same
|
|
50
|
+
* `Number.isFinite` rule as {@link dispatchHit}).
|
|
43
51
|
* Non-finite or non-number offsets are treated as `0`.
|
|
52
|
+
*
|
|
53
|
+
* @returns `true` when a handler ran (`handled` from {@link dispatchHit}). For `'onClick'`, focus may
|
|
54
|
+
* still move via click-to-focus when this returns `false` (keyboard/composition target only).
|
|
44
55
|
*/
|
|
45
56
|
dispatch(eventType: keyof EventHandlers, x: number, y: number, extra?: Record<string, unknown>, offsetX?: number, offsetY?: number): boolean;
|
|
46
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Dispatch a keyboard event to the focused element (and Tab / Shift+Tab traversal on keydown).
|
|
59
|
+
*
|
|
60
|
+
* @see {@link dispatchKeyboardEvent} for full return semantics (Tab keydown always reports handled).
|
|
61
|
+
*/
|
|
47
62
|
dispatchKey(eventType: 'onKeyDown' | 'onKeyUp', event: Omit<KeyboardHitEvent, 'target'>): boolean;
|
|
48
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* Dispatch an IME composition event to the focused element.
|
|
65
|
+
*
|
|
66
|
+
* @see {@link dispatchCompositionEvent}
|
|
67
|
+
*/
|
|
49
68
|
dispatchComposition(eventType: 'onCompositionStart' | 'onCompositionUpdate' | 'onCompositionEnd', event: {
|
|
50
69
|
data: string;
|
|
51
70
|
}): boolean;
|
|
52
|
-
/**
|
|
71
|
+
/** Stops the reactive effect and calls {@link Renderer.destroy} on the renderer. */
|
|
53
72
|
destroy(): void;
|
|
54
73
|
}
|
|
55
74
|
/**
|
|
@@ -59,7 +78,7 @@ export interface App {
|
|
|
59
78
|
* read during its execution will trigger automatic re-layout and re-render.
|
|
60
79
|
*
|
|
61
80
|
* After each successful `computeLayout`, optional {@link Renderer.setFrameTimings} is invoked with
|
|
62
|
-
* `{ layoutMs }` (non-negative wall milliseconds from `performance.now()` when
|
|
81
|
+
* `{ layoutMs }` (non-negative wall milliseconds from a guarded `performance.now()` when usable, otherwise `0`)
|
|
63
82
|
* immediately before `render`, so hosts can split Yoga/layout time from paint.
|
|
64
83
|
*/
|
|
65
84
|
export declare function createApp(view: () => UIElement, renderer: Renderer, options?: AppOptions): Promise<App>;
|
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,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAyCtF,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,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;;;;;;;;;OASG;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;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,WAAW,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAA;IACjG;;;;OAIG;IACH,mBAAmB,CACjB,SAAS,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,EAC5E,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GACtB,OAAO,CAAA;IACV,oFAAoF;IACpF,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
|
@@ -12,6 +12,27 @@ function resolveComputeLayoutDirection(layoutDirection, root) {
|
|
|
12
12
|
}
|
|
13
13
|
return resolveElementDirection(root, 'ltr');
|
|
14
14
|
}
|
|
15
|
+
/** Only finite, non-negative numbers become Textura root constraints; otherwise the key is omitted (unconstrained). */
|
|
16
|
+
function finiteRootExtent(value) {
|
|
17
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Monotonic layout timing without throwing when `performance` is partial or hostile
|
|
21
|
+
* (missing `now`, non-function `now`, or a throwing implementation).
|
|
22
|
+
*/
|
|
23
|
+
function safePerformanceNowMs() {
|
|
24
|
+
try {
|
|
25
|
+
const perf = globalThis.performance;
|
|
26
|
+
if (perf && typeof perf.now === 'function') {
|
|
27
|
+
const t = perf.now();
|
|
28
|
+
return typeof t === 'number' && Number.isFinite(t) ? t : 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// ignore
|
|
33
|
+
}
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
15
36
|
/**
|
|
16
37
|
* Mount a reactive UI tree onto a renderer.
|
|
17
38
|
*
|
|
@@ -19,7 +40,7 @@ function resolveComputeLayoutDirection(layoutDirection, root) {
|
|
|
19
40
|
* read during its execution will trigger automatic re-layout and re-render.
|
|
20
41
|
*
|
|
21
42
|
* After each successful `computeLayout`, optional {@link Renderer.setFrameTimings} is invoked with
|
|
22
|
-
* `{ layoutMs }` (non-negative wall milliseconds from `performance.now()` when
|
|
43
|
+
* `{ layoutMs }` (non-negative wall milliseconds from a guarded `performance.now()` when usable, otherwise `0`)
|
|
23
44
|
* immediately before `render`, so hosts can split Yoga/layout time from paint.
|
|
24
45
|
*/
|
|
25
46
|
export async function createApp(view, renderer, options = {}) {
|
|
@@ -47,13 +68,16 @@ export async function createApp(view, renderer, options = {}) {
|
|
|
47
68
|
app.tree = view();
|
|
48
69
|
const layoutTree = toLayoutTree(app.tree);
|
|
49
70
|
const direction = resolveComputeLayoutDirection(options.layoutDirection, app.tree);
|
|
50
|
-
const layoutStart =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
71
|
+
const layoutStart = safePerformanceNowMs();
|
|
72
|
+
const computeOpts = { direction };
|
|
73
|
+
const rootW = finiteRootExtent(options.width);
|
|
74
|
+
const rootH = finiteRootExtent(options.height);
|
|
75
|
+
if (rootW !== undefined)
|
|
76
|
+
computeOpts.width = rootW;
|
|
77
|
+
if (rootH !== undefined)
|
|
78
|
+
computeOpts.height = rootH;
|
|
79
|
+
app.layout = computeLayout(layoutTree, computeOpts);
|
|
80
|
+
const rawLayoutMs = safePerformanceNowMs() - layoutStart;
|
|
57
81
|
const layoutMs = Math.max(0, Number.isFinite(rawLayoutMs) ? rawLayoutMs : 0);
|
|
58
82
|
renderer.setFrameTimings?.({ layoutMs });
|
|
59
83
|
renderer.render(app.layout, app.tree);
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/elements.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ type Scene3dProps = FlexProps & StyleProps & DirectionProps & {
|
|
|
39
39
|
* Optional `dir` (`ltr` | `rtl` | `auto`) sets resolved direction for this subtree for focus, hit-testing, and text
|
|
40
40
|
* interaction; `auto` inherits from the parent context. It is stripped in {@link import('./tree.js').toLayoutTree}
|
|
41
41
|
* (Yoga root direction uses {@link import('./app.js').createApp}'s `layoutDirection` when provided).
|
|
42
|
+
* For pointer routing, only `pointerEvents: 'none'` opts out; `'auto'` matches the default (see {@link import('./types.js').StyleProps.pointerEvents}).
|
|
42
43
|
*/
|
|
43
44
|
export declare function box(props: BoxProps, children?: UIElement[]): BoxElement;
|
|
44
45
|
/**
|
|
@@ -61,6 +62,8 @@ export declare function image(props: ImageProps): ImageElement;
|
|
|
61
62
|
* The `objects` array describes the scene graph using plain serializable data;
|
|
62
63
|
* a Three.js-capable renderer (e.g. `@geometra/renderer-three`) builds the live scene from these descriptors.
|
|
63
64
|
* Flex and sizing props feed {@link import('./tree.js').toLayoutTree} — the element reserves layout space like a box.
|
|
65
|
+
* 3D and host props (`background`, `objects`, camera settings, `orbitControls`, `maxPixelRatio`) plus the same
|
|
66
|
+
* paint-only style metadata as other elements are stripped from the layout snapshot; renderers read them from the live tree.
|
|
64
67
|
*/
|
|
65
68
|
export declare function scene3d(props: Scene3dProps): Scene3dElement;
|
|
66
69
|
export declare function sphere(opts: Omit<Scene3dSphere, 'type'>): Scene3dSphere;
|
package/dist/elements.d.ts.map
CHANGED
|
@@ -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,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,EACnB,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,KAAK,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,aAAa,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAA;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
|
package/dist/elements.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Optional `dir` (`ltr` | `rtl` | `auto`) sets resolved direction for this subtree for focus, hit-testing, and text
|
|
5
5
|
* interaction; `auto` inherits from the parent context. It is stripped in {@link import('./tree.js').toLayoutTree}
|
|
6
6
|
* (Yoga root direction uses {@link import('./app.js').createApp}'s `layoutDirection` when provided).
|
|
7
|
+
* For pointer routing, only `pointerEvents: 'none'` opts out; `'auto'` matches the default (see {@link import('./types.js').StyleProps.pointerEvents}).
|
|
7
8
|
*/
|
|
8
9
|
export function box(props, children = []) {
|
|
9
10
|
const { onClick, onPointerDown, onPointerUp, onPointerMove, onWheel, onKeyDown, onKeyUp, onCompositionStart, onCompositionUpdate, onCompositionEnd, key, semantic, ...rest } = props;
|
|
@@ -63,6 +64,8 @@ export function image(props) {
|
|
|
63
64
|
* The `objects` array describes the scene graph using plain serializable data;
|
|
64
65
|
* a Three.js-capable renderer (e.g. `@geometra/renderer-three`) builds the live scene from these descriptors.
|
|
65
66
|
* Flex and sizing props feed {@link import('./tree.js').toLayoutTree} — the element reserves layout space like a box.
|
|
67
|
+
* 3D and host props (`background`, `objects`, camera settings, `orbitControls`, `maxPixelRatio`) plus the same
|
|
68
|
+
* paint-only style metadata as other elements are stripped from the layout snapshot; renderers read them from the live tree.
|
|
66
69
|
*/
|
|
67
70
|
export function scene3d(props) {
|
|
68
71
|
const { key, semantic, ...rest } = props;
|
package/dist/elements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAsDA
|
|
1
|
+
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EventHandlers } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* True when a box’s {@link EventHandlers} participate in Tab order and click-to-focus routing.
|
|
4
|
+
* Keep in sync with `collectFocusOrder` / `trapFocusStep` and `dispatchHit`’s `onClick` `focusTarget`
|
|
5
|
+
* rule (deepest box with any of these handlers).
|
|
6
|
+
*/
|
|
7
|
+
export declare function hasFocusCandidateHandlers(handlers: EventHandlers | undefined): boolean;
|
|
8
|
+
//# sourceMappingURL=focus-candidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-candidates.d.ts","sourceRoot":"","sources":["../src/focus-candidates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAStF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when a box’s {@link EventHandlers} participate in Tab order and click-to-focus routing.
|
|
3
|
+
* Keep in sync with `collectFocusOrder` / `trapFocusStep` and `dispatchHit`’s `onClick` `focusTarget`
|
|
4
|
+
* rule (deepest box with any of these handlers).
|
|
5
|
+
*/
|
|
6
|
+
export function hasFocusCandidateHandlers(handlers) {
|
|
7
|
+
return !!(handlers?.onClick ||
|
|
8
|
+
handlers?.onKeyDown ||
|
|
9
|
+
handlers?.onKeyUp ||
|
|
10
|
+
handlers?.onCompositionStart ||
|
|
11
|
+
handlers?.onCompositionUpdate ||
|
|
12
|
+
handlers?.onCompositionEnd);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=focus-candidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-candidates.js","sourceRoot":"","sources":["../src/focus-candidates.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAmC;IAC3E,OAAO,CAAC,CAAC,CACP,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,kBAAkB;QAC5B,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,gBAAgB,CAC3B,CAAA;AACH,CAAC"}
|
package/dist/focus-trap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-trap.d.ts","sourceRoot":"","sources":["../src/focus-trap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"focus-trap.d.ts","sourceRoot":"","sources":["../src/focus-trap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAA;AA0CvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,GAAE,MAAM,GAAG,MAAe,GAClC,OAAO,CAgBT"}
|
package/dist/focus-trap.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hasFocusCandidateHandlers } from './focus-candidates.js';
|
|
1
2
|
import { focusedElement, setFocus } from './focus.js';
|
|
2
3
|
import { layoutBoundsAreFinite } from './layout-bounds.js';
|
|
3
4
|
function collectFocusable(element, layout, out) {
|
|
@@ -5,12 +6,7 @@ function collectFocusable(element, layout, out) {
|
|
|
5
6
|
return;
|
|
6
7
|
if (element.kind !== 'box')
|
|
7
8
|
return;
|
|
8
|
-
if (element.handlers
|
|
9
|
-
element.handlers?.onKeyDown ||
|
|
10
|
-
element.handlers?.onKeyUp ||
|
|
11
|
-
element.handlers?.onCompositionStart ||
|
|
12
|
-
element.handlers?.onCompositionUpdate ||
|
|
13
|
-
element.handlers?.onCompositionEnd) {
|
|
9
|
+
if (hasFocusCandidateHandlers(element.handlers)) {
|
|
14
10
|
out.push({ element, layout });
|
|
15
11
|
}
|
|
16
12
|
for (let i = 0; i < element.children.length; i++) {
|
package/dist/focus-trap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-trap.js","sourceRoot":"","sources":["../src/focus-trap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAO1D,SAAS,gBAAgB,CAAC,OAAkB,EAAE,MAAsB,EAAE,GAAkB;IACtF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAM;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,OAAM;IAClC,
|
|
1
|
+
{"version":3,"file":"focus-trap.js","sourceRoot":"","sources":["../src/focus-trap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAO1D,SAAS,gBAAgB,CAAC,OAAkB,EAAE,MAAsB,EAAE,GAAkB;IACtF,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAM;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,OAAM;IAClC,IAAI,yBAAyB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC/B,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACtC,IAAI,KAAK,IAAI,WAAW;YAAE,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAA;IACrE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,IAAe,EACf,MAAsB,EACtB,IAAc;IAEd,IAAI,EAAE,GAAc,IAAI,CAAA;IACxB,IAAI,EAAE,GAAmB,MAAM,CAAA;IAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACnC,EAAE,GAAG,MAAM,CAAA;QACX,EAAE,GAAG,MAAM,CAAA;IACb,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAA;IAClC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;AACpC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAe,EACf,MAAsB,EACtB,SAAmB,EACnB,YAA6B,MAAM;IAEnC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEtC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9E,IAAI,GAAG,GAAG,CAAC;QAAE,GAAG,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,SAAS,KAAK,MAAM;QAClC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM;QAC5B,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAE,CAAA;IAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/focus.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare function clearFocus(): void;
|
|
|
17
17
|
*
|
|
18
18
|
* A box is focusable when it defines any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
19
19
|
* `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`.
|
|
20
|
+
* Non-box leaves (`text`, `image`, `scene3d`) are ignored — only `box` nodes participate in this walk.
|
|
20
21
|
* Skips boxes whose layout bounds are non-finite or have negative width/height, and does not walk
|
|
21
22
|
* their subtrees — same rule as hit-testing so corrupt geometry cannot enter focus order.
|
|
22
23
|
*
|