@geometra/core 1.0.1 → 1.1.1
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/animation.d.ts +20 -1
- package/dist/animation.d.ts.map +1 -1
- package/dist/animation.js +33 -3
- package/dist/animation.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -1
- package/dist/app.js.map +1 -1
- package/dist/direction.d.ts +1 -0
- package/dist/direction.d.ts.map +1 -1
- package/dist/direction.js +6 -1
- package/dist/direction.js.map +1 -1
- package/dist/elements.d.ts +12 -3
- package/dist/elements.d.ts.map +1 -1
- package/dist/elements.js +12 -3
- package/dist/elements.js.map +1 -1
- package/dist/focus-trap.d.ts +3 -2
- package/dist/focus-trap.d.ts.map +1 -1
- package/dist/focus-trap.js +6 -2
- package/dist/focus-trap.js.map +1 -1
- package/dist/focus.d.ts +8 -1
- package/dist/focus.d.ts.map +1 -1
- package/dist/focus.js +37 -8
- package/dist/focus.js.map +1 -1
- package/dist/fonts.d.ts +10 -4
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +25 -6
- package/dist/fonts.js.map +1 -1
- package/dist/hit-test.d.ts +19 -3
- package/dist/hit-test.d.ts.map +1 -1
- package/dist/hit-test.js +48 -31
- package/dist/hit-test.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +10 -2
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +10 -2
- package/dist/keyboard.js.map +1 -1
- package/dist/layout-bounds.d.ts +16 -0
- package/dist/layout-bounds.d.ts.map +1 -0
- package/dist/layout-bounds.js +27 -0
- package/dist/layout-bounds.js.map +1 -0
- package/dist/node.d.ts +9 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -2
- package/dist/node.js.map +1 -1
- package/dist/selection.d.ts +7 -2
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +17 -4
- package/dist/selection.js.map +1 -1
- package/dist/seo.d.ts +12 -2
- package/dist/seo.d.ts.map +1 -1
- package/dist/seo.js +43 -12
- package/dist/seo.js.map +1 -1
- package/dist/signals.d.ts +40 -5
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +28 -5
- package/dist/signals.js.map +1 -1
- package/dist/tree.d.ts +11 -1
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +16 -2
- package/dist/tree.js.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/animation.d.ts
CHANGED
|
@@ -29,7 +29,11 @@ export interface PropertyTimeline {
|
|
|
29
29
|
state(): TweenPlaybackState;
|
|
30
30
|
}
|
|
31
31
|
export type MotionPreference = 'full' | 'reduced';
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Set global motion preference for animation helpers.
|
|
34
|
+
* Runtime values other than `'reduced'` normalize to `'full'` so bad serialized or plain-JS callers
|
|
35
|
+
* cannot leave the module in an unexpected state.
|
|
36
|
+
*/
|
|
33
37
|
export declare function setMotionPreference(preference: MotionPreference): void;
|
|
34
38
|
/** Read current global motion preference. */
|
|
35
39
|
export declare function getMotionPreference(): MotionPreference;
|
|
@@ -50,6 +54,21 @@ export declare function createTweenTimeline(initialValue: number): TweenTimeline
|
|
|
50
54
|
* Typical usage includes x/y/width/height/opacity style numeric transitions.
|
|
51
55
|
*/
|
|
52
56
|
export declare function createPropertyTimeline(initialValues: Record<string, number>): PropertyTimeline;
|
|
57
|
+
/**
|
|
58
|
+
* Normalize spring config so physics integration never sees NaN, ±Infinity, negative mass, or
|
|
59
|
+
* negative stiffness (which would push away from the target or explode the state).
|
|
60
|
+
* Damping may be `0` (undamped). Stiffness `0` is treated as invalid and falls back to the default
|
|
61
|
+
* so the spring still has a restoring force toward the target.
|
|
62
|
+
*/
|
|
63
|
+
export declare function normalizeSpringConfig(config?: {
|
|
64
|
+
stiffness?: number;
|
|
65
|
+
damping?: number;
|
|
66
|
+
mass?: number;
|
|
67
|
+
}): {
|
|
68
|
+
stiffness: number;
|
|
69
|
+
damping: number;
|
|
70
|
+
mass: number;
|
|
71
|
+
};
|
|
53
72
|
/**
|
|
54
73
|
* Create a spring-physics animated signal that follows a target value.
|
|
55
74
|
* Returns a signal that smoothly converges to `target.value`.
|
package/dist/animation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAU1C,+BAA+B;AAC/B,eAAO,MAAM,MAAM;gBACL,MAAM;gBACN,MAAM;iBACL,MAAM;mBACJ,MAAM;CACtB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;AAC5C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;AAEzF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,8CAA8C;IAC9C,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC7D,gEAAgE;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,MAAM,IAAI,IAAI,CAAA;IACd,KAAK,IAAI,kBAAkB,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IACtC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IAClF,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,MAAM,IAAI,IAAI,CAAA;IACd,KAAK,IAAI,kBAAkB,CAAA;CAC5B;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAAA;AAIjD
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
package/dist/animation.js
CHANGED
|
@@ -13,9 +13,13 @@ export const easing = {
|
|
|
13
13
|
easeInOut: (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,
|
|
14
14
|
};
|
|
15
15
|
const motionPreference = signal('full');
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Set global motion preference for animation helpers.
|
|
18
|
+
* Runtime values other than `'reduced'` normalize to `'full'` so bad serialized or plain-JS callers
|
|
19
|
+
* cannot leave the module in an unexpected state.
|
|
20
|
+
*/
|
|
17
21
|
export function setMotionPreference(preference) {
|
|
18
|
-
motionPreference.set(preference);
|
|
22
|
+
motionPreference.set(preference === 'reduced' ? 'reduced' : 'full');
|
|
19
23
|
}
|
|
20
24
|
/** Read current global motion preference. */
|
|
21
25
|
export function getMotionPreference() {
|
|
@@ -176,12 +180,38 @@ export function createPropertyTimeline(initialValues) {
|
|
|
176
180
|
}
|
|
177
181
|
return { values, to, step, pause, resume, cancel, state };
|
|
178
182
|
}
|
|
183
|
+
const DEFAULT_SPRING_STIFFNESS = 170;
|
|
184
|
+
const DEFAULT_SPRING_DAMPING = 26;
|
|
185
|
+
const DEFAULT_SPRING_MASS = 1;
|
|
186
|
+
/**
|
|
187
|
+
* Normalize spring config so physics integration never sees NaN, ±Infinity, negative mass, or
|
|
188
|
+
* negative stiffness (which would push away from the target or explode the state).
|
|
189
|
+
* Damping may be `0` (undamped). Stiffness `0` is treated as invalid and falls back to the default
|
|
190
|
+
* so the spring still has a restoring force toward the target.
|
|
191
|
+
*/
|
|
192
|
+
export function normalizeSpringConfig(config = {}) {
|
|
193
|
+
let mass = config.mass;
|
|
194
|
+
if (typeof mass !== 'number' || !Number.isFinite(mass) || mass <= 0) {
|
|
195
|
+
mass = DEFAULT_SPRING_MASS;
|
|
196
|
+
}
|
|
197
|
+
let stiffness = config.stiffness;
|
|
198
|
+
if (typeof stiffness !== 'number' ||
|
|
199
|
+
!Number.isFinite(stiffness) ||
|
|
200
|
+
stiffness <= 0) {
|
|
201
|
+
stiffness = DEFAULT_SPRING_STIFFNESS;
|
|
202
|
+
}
|
|
203
|
+
let damping = config.damping;
|
|
204
|
+
if (typeof damping !== 'number' || !Number.isFinite(damping) || damping < 0) {
|
|
205
|
+
damping = DEFAULT_SPRING_DAMPING;
|
|
206
|
+
}
|
|
207
|
+
return { stiffness, damping, mass };
|
|
208
|
+
}
|
|
179
209
|
/**
|
|
180
210
|
* Create a spring-physics animated signal that follows a target value.
|
|
181
211
|
* Returns a signal that smoothly converges to `target.value`.
|
|
182
212
|
*/
|
|
183
213
|
export function spring(target, config = {}) {
|
|
184
|
-
const { stiffness
|
|
214
|
+
const { stiffness, damping, mass } = normalizeSpringConfig(config);
|
|
185
215
|
const s = signal(target.peek());
|
|
186
216
|
let velocity = 0;
|
|
187
217
|
let prevTarget = target.peek();
|
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,+BAA+B;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;CACpF,CAAA;AA6BD,MAAM,gBAAgB,GAAG,MAAM,CAAmB,MAAM,CAAC,CAAA;AAEzD
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
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,
|
|
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"}
|
package/dist/app.js
CHANGED
|
@@ -40,7 +40,8 @@ export async function createApp(view, renderer, options = {}) {
|
|
|
40
40
|
width: options.width,
|
|
41
41
|
height: options.height,
|
|
42
42
|
});
|
|
43
|
-
const
|
|
43
|
+
const rawLayoutMs = typeof performance !== 'undefined' ? performance.now() - layoutStart : 0;
|
|
44
|
+
const layoutMs = Math.max(0, Number.isFinite(rawLayoutMs) ? rawLayoutMs : 0);
|
|
44
45
|
renderer.setFrameTimings?.({ layoutMs });
|
|
45
46
|
renderer.render(app.layout, app.tree);
|
|
46
47
|
}
|
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,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;AAyC/E;;;;;GAKG;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,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;iBACvB,CAAC,CAAA;gBACF,MAAM,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/direction.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type ResolvedDirection = 'ltr' | 'rtl';
|
|
|
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
6
|
* serialized props) inherit {@link parentDirection} until script-level `auto` detection lands.
|
|
7
|
+
* Non-`ltr` / non-`rtl` {@link parentDirection} values (bad callers or deserialized state) fall back to `ltr`.
|
|
7
8
|
*/
|
|
8
9
|
export declare function resolveDirectionValue(dir: Direction | undefined, parentDirection?: ResolvedDirection): ResolvedDirection;
|
|
9
10
|
/** Resolve concrete direction for a UI element from its own `dir` and parent context. */
|
package/dist/direction.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/direction.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
function normalizeResolvedDirection(value) {
|
|
2
|
+
return value === 'rtl' ? 'rtl' : 'ltr';
|
|
3
|
+
}
|
|
1
4
|
/**
|
|
2
5
|
* Resolve an element direction value to a concrete runtime direction.
|
|
3
6
|
* Only `ltr` and `rtl` are honored; `undefined`, `auto`, and any other value (e.g. malformed
|
|
4
7
|
* serialized props) inherit {@link parentDirection} until script-level `auto` detection lands.
|
|
8
|
+
* Non-`ltr` / non-`rtl` {@link parentDirection} values (bad callers or deserialized state) fall back to `ltr`.
|
|
5
9
|
*/
|
|
6
10
|
export function resolveDirectionValue(dir, parentDirection = 'ltr') {
|
|
11
|
+
const parent = normalizeResolvedDirection(parentDirection);
|
|
7
12
|
if (dir === 'rtl')
|
|
8
13
|
return 'rtl';
|
|
9
14
|
if (dir === 'ltr')
|
|
10
15
|
return 'ltr';
|
|
11
|
-
return
|
|
16
|
+
return parent;
|
|
12
17
|
}
|
|
13
18
|
/** Resolve concrete direction for a UI element from its own `dir` and parent context. */
|
|
14
19
|
export function resolveElementDirection(element, parentDirection = 'ltr') {
|
package/dist/direction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direction.js","sourceRoot":"","sources":["../src/direction.ts"],"names":[],"mappings":"AAIA
|
|
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"}
|
package/dist/elements.d.ts
CHANGED
|
@@ -20,11 +20,20 @@ type ImageProps = FlexProps & StyleProps & DirectionProps & {
|
|
|
20
20
|
key?: string;
|
|
21
21
|
semantic?: SemanticProps;
|
|
22
22
|
};
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Create a box (container) element.
|
|
25
|
+
* Handlers, `semantic`, and `key` are runtime metadata; flex and layout fields are consumed by `toLayoutTree()`.
|
|
26
|
+
*/
|
|
24
27
|
export declare function box(props: BoxProps, children?: UIElement[]): BoxElement;
|
|
25
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Create a text leaf element.
|
|
30
|
+
* `selectable` and `semantic` are runtime/rendering concerns; remaining props feed `toLayoutTree()` and Textura.
|
|
31
|
+
*/
|
|
26
32
|
export declare function text(props: TextProps): TextElement;
|
|
27
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Create an image element.
|
|
35
|
+
* `semantic` and `key` are runtime metadata; layout and `src`/`alt` flow through `toLayoutTree()`.
|
|
36
|
+
*/
|
|
28
37
|
export declare function image(props: ImageProps): ImageElement;
|
|
29
38
|
export {};
|
|
30
39
|
//# sourceMappingURL=elements.d.ts.map
|
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,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
|
|
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"}
|
package/dist/elements.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Create a box (container) element.
|
|
3
|
+
* Handlers, `semantic`, and `key` are runtime metadata; flex and layout fields are consumed by `toLayoutTree()`.
|
|
4
|
+
*/
|
|
2
5
|
export function box(props, children = []) {
|
|
3
6
|
const { onClick, onPointerDown, onPointerUp, onPointerMove, onWheel, onKeyDown, onKeyUp, onCompositionStart, onCompositionUpdate, onCompositionEnd, key, semantic, ...rest } = props;
|
|
4
7
|
const handlers = {};
|
|
@@ -31,12 +34,18 @@ export function box(props, children = []) {
|
|
|
31
34
|
semantic,
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Create a text leaf element.
|
|
39
|
+
* `selectable` and `semantic` are runtime/rendering concerns; remaining props feed `toLayoutTree()` and Textura.
|
|
40
|
+
*/
|
|
35
41
|
export function text(props) {
|
|
36
42
|
const { key, semantic, ...rest } = props;
|
|
37
43
|
return { kind: 'text', props: rest, key, semantic };
|
|
38
44
|
}
|
|
39
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Create an image element.
|
|
47
|
+
* `semantic` and `key` are runtime metadata; layout and `src`/`alt` flow through `toLayoutTree()`.
|
|
48
|
+
*/
|
|
40
49
|
export function image(props) {
|
|
41
50
|
const { key, semantic, ...rest } = props;
|
|
42
51
|
return { kind: 'image', props: rest, key, semantic };
|
package/dist/elements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AA8BA
|
|
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"}
|
package/dist/focus-trap.d.ts
CHANGED
|
@@ -3,8 +3,9 @@ import type { UIElement } from './types.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Move focus to the next or previous focusable box inside a subtree (modal / overlay trap).
|
|
5
5
|
*
|
|
6
|
-
* Focusables are boxes with any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
7
|
-
* in tree order (same rule as
|
|
6
|
+
* Focusables are boxes with any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
7
|
+
* `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`, in tree order (same rule as
|
|
8
|
+
* {@link collectFocusOrder}, including skipping corrupt layout bounds).
|
|
8
9
|
*
|
|
9
10
|
* When the current {@link focusedElement} is missing or not inside the trap list, `'next'`
|
|
10
11
|
* jumps to the first focusable and `'prev'` to the last — so focus can enter the trap from
|
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;AAgDvD;;;;;;;;;;;;;;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,5 +1,8 @@
|
|
|
1
1
|
import { focusedElement, setFocus } from './focus.js';
|
|
2
|
+
import { layoutBoundsAreFinite } from './layout-bounds.js';
|
|
2
3
|
function collectFocusable(element, layout, out) {
|
|
4
|
+
if (!layoutBoundsAreFinite(layout))
|
|
5
|
+
return;
|
|
3
6
|
if (element.kind !== 'box')
|
|
4
7
|
return;
|
|
5
8
|
if (element.handlers?.onClick ||
|
|
@@ -37,8 +40,9 @@ function resolveSubtree(tree, layout, path) {
|
|
|
37
40
|
/**
|
|
38
41
|
* Move focus to the next or previous focusable box inside a subtree (modal / overlay trap).
|
|
39
42
|
*
|
|
40
|
-
* Focusables are boxes with any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
41
|
-
* in tree order (same rule as
|
|
43
|
+
* Focusables are boxes with any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
44
|
+
* `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`, in tree order (same rule as
|
|
45
|
+
* {@link collectFocusOrder}, including skipping corrupt layout bounds).
|
|
42
46
|
*
|
|
43
47
|
* When the current {@link focusedElement} is missing or not inside the trap list, `'next'`
|
|
44
48
|
* jumps to the first focusable and `'prev'` to the last — so focus can enter the trap from
|
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;
|
|
1
|
+
{"version":3,"file":"focus-trap.js","sourceRoot":"","sources":["../src/focus-trap.ts"],"names":[],"mappings":"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"}
|
package/dist/focus.d.ts
CHANGED
|
@@ -12,7 +12,14 @@ export declare const focusedElement: Signal<FocusTarget | null>;
|
|
|
12
12
|
export declare function setFocus(element: BoxElement, layout: ComputedLayout): void;
|
|
13
13
|
/** Clear the current focus. */
|
|
14
14
|
export declare function clearFocus(): void;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Document-order focusable elements (Tab order). Useful for inspector overlays.
|
|
17
|
+
*
|
|
18
|
+
* A box is focusable when it defines any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
19
|
+
* `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`.
|
|
20
|
+
* Skips boxes whose layout bounds are non-finite or have negative width/height, and does not walk
|
|
21
|
+
* their subtrees — same rule as hit-testing so corrupt geometry cannot enter focus order.
|
|
22
|
+
*/
|
|
16
23
|
export declare function collectFocusOrder(element: UIElement, layout: ComputedLayout): FocusTarget[];
|
|
17
24
|
/** Resolve currently focused target against the latest tree/layout after rerenders. */
|
|
18
25
|
export declare function resolveFocusedTarget(tree: UIElement, layout: ComputedLayout): FocusTarget | null;
|
package/dist/focus.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/focus.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { layoutBoundsAreFinite } from './layout-bounds.js';
|
|
1
2
|
import { signal } from './signals.js';
|
|
2
3
|
/** Signal tracking the currently focused element. */
|
|
3
4
|
export const focusedElement = signal(null);
|
|
@@ -9,14 +10,23 @@ export function setFocus(element, layout) {
|
|
|
9
10
|
export function clearFocus() {
|
|
10
11
|
focusedElement.set(null);
|
|
11
12
|
}
|
|
12
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Document-order focusable elements (Tab order). Useful for inspector overlays.
|
|
15
|
+
*
|
|
16
|
+
* A box is focusable when it defines any of `onClick`, `onKeyDown`, `onKeyUp`,
|
|
17
|
+
* `onCompositionStart`, `onCompositionUpdate`, or `onCompositionEnd`.
|
|
18
|
+
* Skips boxes whose layout bounds are non-finite or have negative width/height, and does not walk
|
|
19
|
+
* their subtrees — same rule as hit-testing so corrupt geometry cannot enter focus order.
|
|
20
|
+
*/
|
|
13
21
|
export function collectFocusOrder(element, layout) {
|
|
14
22
|
const results = [];
|
|
15
23
|
collectFocusable(element, layout, results);
|
|
16
24
|
return results;
|
|
17
25
|
}
|
|
18
|
-
/** Collect all focusable elements (
|
|
26
|
+
/** Collect all focusable elements (click, key, or composition handlers) in document order. */
|
|
19
27
|
function collectFocusable(element, layout, results) {
|
|
28
|
+
if (!layoutBoundsAreFinite(layout))
|
|
29
|
+
return;
|
|
20
30
|
if (element.kind === 'box') {
|
|
21
31
|
if (element.handlers?.onKeyDown ||
|
|
22
32
|
element.handlers?.onKeyUp ||
|
|
@@ -43,6 +53,28 @@ function findTargetIndex(targets, current) {
|
|
|
43
53
|
return byIdentity;
|
|
44
54
|
return targets.findIndex(t => sameBounds(t.layout, current.layout));
|
|
45
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Prefer stored `focusIndex` when it still lines up with the focused target:
|
|
58
|
+
* same element reference (stable across pure reorder), or same layout bounds (new box() at the same
|
|
59
|
+
* slot after a rerender). If the index points at a different sibling with different bounds (e.g. Tab
|
|
60
|
+
* order changed), fall back to identity/bounds search.
|
|
61
|
+
*/
|
|
62
|
+
function stableFocusIndex(targets, current) {
|
|
63
|
+
const indexed = current.focusIndex;
|
|
64
|
+
if (indexed !== undefined && indexed >= 0 && indexed < targets.length) {
|
|
65
|
+
const at = targets[indexed];
|
|
66
|
+
if (at.element === current.element || sameBounds(at.layout, current.layout)) {
|
|
67
|
+
return indexed;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const found = findTargetIndex(targets, current);
|
|
71
|
+
if (found !== -1)
|
|
72
|
+
return found;
|
|
73
|
+
if (indexed !== undefined && indexed >= 0 && indexed < targets.length) {
|
|
74
|
+
return indexed;
|
|
75
|
+
}
|
|
76
|
+
return -1;
|
|
77
|
+
}
|
|
46
78
|
/** Resolve currently focused target against the latest tree/layout after rerenders. */
|
|
47
79
|
export function resolveFocusedTarget(tree, layout) {
|
|
48
80
|
const current = focusedElement.peek();
|
|
@@ -52,10 +84,7 @@ export function resolveFocusedTarget(tree, layout) {
|
|
|
52
84
|
collectFocusable(tree, layout, targets);
|
|
53
85
|
if (targets.length === 0)
|
|
54
86
|
return null;
|
|
55
|
-
const
|
|
56
|
-
const idx = indexed !== undefined && indexed >= 0 && indexed < targets.length
|
|
57
|
-
? indexed
|
|
58
|
-
: findTargetIndex(targets, current);
|
|
87
|
+
const idx = stableFocusIndex(targets, current);
|
|
59
88
|
if (idx === -1)
|
|
60
89
|
return null;
|
|
61
90
|
const resolved = { ...targets[idx], focusIndex: idx };
|
|
@@ -75,7 +104,7 @@ export function focusNext(tree, layout) {
|
|
|
75
104
|
focusedElement.set({ ...targets[0], focusIndex: 0 });
|
|
76
105
|
return;
|
|
77
106
|
}
|
|
78
|
-
const idx =
|
|
107
|
+
const idx = stableFocusIndex(targets, current);
|
|
79
108
|
const safeIdx = idx >= 0 ? idx : 0;
|
|
80
109
|
const nextIndex = (safeIdx + 1) % targets.length;
|
|
81
110
|
const next = targets[nextIndex];
|
|
@@ -93,7 +122,7 @@ export function focusPrev(tree, layout) {
|
|
|
93
122
|
focusedElement.set({ ...targets[lastIndex], focusIndex: lastIndex });
|
|
94
123
|
return;
|
|
95
124
|
}
|
|
96
|
-
const idx =
|
|
125
|
+
const idx = stableFocusIndex(targets, current);
|
|
97
126
|
const safeIdx = idx >= 0 ? idx : 0;
|
|
98
127
|
const prevIndex = (safeIdx - 1 + targets.length) % targets.length;
|
|
99
128
|
const prev = targets[prevIndex];
|
package/dist/focus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AASrC,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAA+B,MAAM,CAAqB,IAAI,CAAC,CAAA;AAE1F,+BAA+B;AAC/B,MAAM,UAAU,QAAQ,CAAC,OAAmB,EAAE,MAAsB;IAClE,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,UAAU;IACxB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../src/focus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AASrC,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAA+B,MAAM,CAAqB,IAAI,CAAC,CAAA;AAE1F,+BAA+B;AAC/B,MAAM,UAAU,QAAQ,CAAC,OAAmB,EAAE,MAAsB;IAClE,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,UAAU;IACxB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAkB,EAClB,MAAsB;IAEtB,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,8FAA8F;AAC9F,SAAS,gBAAgB,CACvB,OAAkB,EAClB,MAAsB,EACtB,OAAsB;IAEtB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAAE,OAAM;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,IACE,OAAO,CAAC,QAAQ,EAAE,SAAS;YAC3B,OAAO,CAAC,QAAQ,EAAE,OAAO;YACzB,OAAO,CAAC,QAAQ,EAAE,kBAAkB;YACpC,OAAO,CAAC,QAAQ,EAAE,mBAAmB;YACrC,OAAO,CAAC,QAAQ,EAAE,gBAAgB;YAClC,OAAO,CAAC,QAAQ,EAAE,OAAO,EACzB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAiB,EAAE,CAAiB;IACtD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAA;AACnF,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB,EAAE,OAAoB;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACxE,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,UAAU,CAAA;IACxC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,OAAsB,EAAE,OAAoB;IACpE,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;IAClC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACtE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAE,CAAA;QAC5B,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,OAAO,OAAO,CAAA;QAChB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC/C,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACtE,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,IAAe,EAAE,MAAsB;IAC1E,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAErC,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAE3B,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAA;IACtD,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzF,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,MAAsB;IAC/D,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEhC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;QACrD,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAE,CAAA;IAChC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;AACxD,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,MAAsB;IAC/D,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEhC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACpC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;QACrE,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,SAAS,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAE,CAAA;IAChC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;AACxD,CAAC"}
|
package/dist/fonts.d.ts
CHANGED
|
@@ -20,8 +20,13 @@ import type { UIElement } from './types.js';
|
|
|
20
20
|
* Leading absolute size keywords (`medium`, `xx-small`, `large`, …) are stripped the same way.
|
|
21
21
|
* A comma-list segment that is exactly an absolute size keyword is dropped when unquoted; the same word
|
|
22
22
|
* inside quotes is kept (CSS requires quoting when a family name matches a keyword).
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
* Broken `calc()`/`min()`/… values (unclosed parentheses) and stray `+` tails after a matched size
|
|
24
|
+
* token yield no families so {@link waitForFonts} is not called with math remnants.
|
|
25
|
+
* Unquoted `url(...)` and `format(...)` segments (e.g. mistaken `@font-face` `src` paste) are not concrete
|
|
26
|
+
* family names and are skipped so {@link waitForFonts} does not call `load` with them.
|
|
27
|
+
* The same applies to unquoted `local(...)` only when it appears **after** the first comma-separated family
|
|
28
|
+
* segment (a common `src:` list paste into a fallback list); a leading `local(...)` after the size is kept
|
|
29
|
+
* for callers that forward tokens to `document.fonts.load`.
|
|
25
30
|
* The same spellings inside quotes are kept as literal family names (CSS `font-family` rules).
|
|
26
31
|
*/
|
|
27
32
|
export declare function extractFontFamiliesFromCSSFont(font: string): string[];
|
|
@@ -32,8 +37,9 @@ export declare function extractFontFamiliesFromCSSFont(font: string): string[];
|
|
|
32
37
|
export declare function collectFontFamiliesFromTree(root: UIElement): string[];
|
|
33
38
|
/**
|
|
34
39
|
* Resolve a font-load timeout in milliseconds. Used by {@link waitForFonts} and `createApp`'s
|
|
35
|
-
* `fontLoadTimeoutMs` so `NaN`, `±Infinity`, negative values, and non-numbers
|
|
36
|
-
* `defaultMs` (avoids `??` missing `NaN` and odd `setTimeout` coercion).
|
|
40
|
+
* `fontLoadTimeoutMs` so `NaN`, `±Infinity`, negative values, and non-numbers (`null`, `bigint`,
|
|
41
|
+
* objects, strings, …) all fall back to `defaultMs` (avoids `??` missing `NaN` and odd `setTimeout` coercion).
|
|
42
|
+
* Signed zero (`-0`) is normalized to `+0`.
|
|
37
43
|
*/
|
|
38
44
|
export declare function resolveFontLoadTimeoutMs(timeoutMs: number | undefined, defaultMs?: number): number;
|
|
39
45
|
/**
|
package/dist/fonts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA6K3C
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../src/fonts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA6K3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAwKrE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAarE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,SAAS,GAAG,MAAM,CAIlG;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxF"}
|
package/dist/fonts.js
CHANGED
|
@@ -165,15 +165,22 @@ function splitFontFamilyList(tail) {
|
|
|
165
165
|
* Leading absolute size keywords (`medium`, `xx-small`, `large`, …) are stripped the same way.
|
|
166
166
|
* A comma-list segment that is exactly an absolute size keyword is dropped when unquoted; the same word
|
|
167
167
|
* inside quotes is kept (CSS requires quoting when a family name matches a keyword).
|
|
168
|
-
*
|
|
169
|
-
*
|
|
168
|
+
* Broken `calc()`/`min()`/… values (unclosed parentheses) and stray `+` tails after a matched size
|
|
169
|
+
* token yield no families so {@link waitForFonts} is not called with math remnants.
|
|
170
|
+
* Unquoted `url(...)` and `format(...)` segments (e.g. mistaken `@font-face` `src` paste) are not concrete
|
|
171
|
+
* family names and are skipped so {@link waitForFonts} does not call `load` with them.
|
|
172
|
+
* The same applies to unquoted `local(...)` only when it appears **after** the first comma-separated family
|
|
173
|
+
* segment (a common `src:` list paste into a fallback list); a leading `local(...)` after the size is kept
|
|
174
|
+
* for callers that forward tokens to `document.fonts.load`.
|
|
170
175
|
* The same spellings inside quotes are kept as literal family names (CSS `font-family` rules).
|
|
171
176
|
*/
|
|
172
177
|
export function extractFontFamiliesFromCSSFont(font) {
|
|
173
178
|
function filterFamilies(tail) {
|
|
174
179
|
const out = [];
|
|
175
180
|
const seen = new Set();
|
|
176
|
-
|
|
181
|
+
const segments = splitFontFamilyList(tail);
|
|
182
|
+
for (let si = 0; si < segments.length; si++) {
|
|
183
|
+
const seg = segments[si];
|
|
177
184
|
const t = seg.trim();
|
|
178
185
|
if (t.length === 0)
|
|
179
186
|
continue;
|
|
@@ -184,8 +191,12 @@ export function extractFontFamiliesFromCSSFont(font) {
|
|
|
184
191
|
if (inner.length === 0)
|
|
185
192
|
continue;
|
|
186
193
|
const lead = inner.trimStart();
|
|
194
|
+
if (!quoted && /^\+/.test(lead))
|
|
195
|
+
continue;
|
|
187
196
|
if (!quoted && /^url\s*\(/i.test(lead))
|
|
188
197
|
continue;
|
|
198
|
+
if (!quoted && si > 0 && /^local\s*\(/i.test(lead))
|
|
199
|
+
continue;
|
|
189
200
|
if (!quoted && /^format\s*\(/i.test(lead))
|
|
190
201
|
continue;
|
|
191
202
|
if (!quoted && ABSOLUTE_FONT_SIZE_KEYWORDS.has(inner.toLowerCase()))
|
|
@@ -210,6 +221,11 @@ export function extractFontFamiliesFromCSSFont(font) {
|
|
|
210
221
|
/** True when the family tail still begins with another size token (dimension, stacked shorthand, or CSS math size). */
|
|
211
222
|
function tailLeadsWithStackedSize(tail) {
|
|
212
223
|
const first = firstFamilyListSegment(tail);
|
|
224
|
+
const tf = first.trimStart();
|
|
225
|
+
// Shorthand peel can match a dimension inside broken `calc(` / stacked tokens and leave a `+ …` math
|
|
226
|
+
// remnant; that is never a valid unquoted family name and must not be passed to `document.fonts.load`.
|
|
227
|
+
if (/^\+/.test(tf))
|
|
228
|
+
return true;
|
|
213
229
|
return (FONT_SIZE_ONLY.test(first) ||
|
|
214
230
|
TAIL_LEADS_WITH_SIZE_TOKEN.test(tail) ||
|
|
215
231
|
/^(calc|min|max|clamp)\s*\(/i.test(first));
|
|
@@ -351,11 +367,14 @@ export function collectFontFamiliesFromTree(root) {
|
|
|
351
367
|
}
|
|
352
368
|
/**
|
|
353
369
|
* Resolve a font-load timeout in milliseconds. Used by {@link waitForFonts} and `createApp`'s
|
|
354
|
-
* `fontLoadTimeoutMs` so `NaN`, `±Infinity`, negative values, and non-numbers
|
|
355
|
-
* `defaultMs` (avoids `??` missing `NaN` and odd `setTimeout` coercion).
|
|
370
|
+
* `fontLoadTimeoutMs` so `NaN`, `±Infinity`, negative values, and non-numbers (`null`, `bigint`,
|
|
371
|
+
* objects, strings, …) all fall back to `defaultMs` (avoids `??` missing `NaN` and odd `setTimeout` coercion).
|
|
372
|
+
* Signed zero (`-0`) is normalized to `+0`.
|
|
356
373
|
*/
|
|
357
374
|
export function resolveFontLoadTimeoutMs(timeoutMs, defaultMs = 10_000) {
|
|
358
|
-
return typeof timeoutMs === 'number' && Number.isFinite(timeoutMs) && timeoutMs >= 0
|
|
375
|
+
return typeof timeoutMs === 'number' && Number.isFinite(timeoutMs) && timeoutMs >= 0
|
|
376
|
+
? Math.max(0, timeoutMs)
|
|
377
|
+
: defaultMs;
|
|
359
378
|
}
|
|
360
379
|
/**
|
|
361
380
|
* Wait for web fonts used by the app. Browser only; no-op on server.
|