@geometra/core 1.49.0 → 1.52.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 (44) hide show
  1. package/README.md +14 -4
  2. package/dist/a11y.d.ts.map +1 -1
  3. package/dist/a11y.js +3 -2
  4. package/dist/a11y.js.map +1 -1
  5. package/dist/animation.d.ts.map +1 -1
  6. package/dist/animation.js +3 -2
  7. package/dist/animation.js.map +1 -1
  8. package/dist/app.js +2 -2
  9. package/dist/app.js.map +1 -1
  10. package/dist/focus.d.ts +2 -0
  11. package/dist/focus.d.ts.map +1 -1
  12. package/dist/focus.js +5 -2
  13. package/dist/focus.js.map +1 -1
  14. package/dist/hit-test.d.ts +6 -5
  15. package/dist/hit-test.d.ts.map +1 -1
  16. package/dist/hit-test.js +39 -44
  17. package/dist/hit-test.js.map +1 -1
  18. package/dist/index.d.ts +11 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +10 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/layout-bounds.d.ts +13 -5
  23. package/dist/layout-bounds.d.ts.map +1 -1
  24. package/dist/layout-bounds.js +17 -7
  25. package/dist/layout-bounds.js.map +1 -1
  26. package/dist/performance-now.d.ts +14 -3
  27. package/dist/performance-now.d.ts.map +1 -1
  28. package/dist/performance-now.js +18 -4
  29. package/dist/performance-now.js.map +1 -1
  30. package/dist/selection.d.ts +2 -0
  31. package/dist/selection.d.ts.map +1 -1
  32. package/dist/selection.js +5 -2
  33. package/dist/selection.js.map +1 -1
  34. package/dist/text-input.d.ts +10 -1
  35. package/dist/text-input.d.ts.map +1 -1
  36. package/dist/text-input.js +12 -1
  37. package/dist/text-input.js.map +1 -1
  38. package/dist/types.d.ts +46 -6
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/virtual-scroll.d.ts +26 -5
  41. package/dist/virtual-scroll.d.ts.map +1 -1
  42. package/dist/virtual-scroll.js +40 -9
  43. package/dist/virtual-scroll.js.map +1 -1
  44. package/package.json +2 -2
@@ -1,16 +1,16 @@
1
1
  /** Indices describing the visible slice of a virtual list after {@link syncVirtualWindow}. */
2
2
  export interface VirtualWindowState {
3
3
  /** First visible row index (inclusive), in `[0, totalRows - 1]` when `totalRows > 0`. */
4
- start: number;
4
+ readonly start: number;
5
5
  /** Last visible row index (inclusive); equals `start` when at most one row is visible. */
6
- end: number;
6
+ readonly end: number;
7
7
  /** Selection index after clamping to valid row range. */
8
- selected: number;
8
+ readonly selected: number;
9
9
  }
10
10
  /**
11
11
  * Inclusive last row index for a window starting at `start`. When `start + safeWindow - 1` overflows or is
12
- * otherwise non-finite, returns `maxIndex` when it is finite, else `0` (same overflow idea as
13
- * {@link import('./layout-bounds.js').pointInInclusiveLayoutRect}).
12
+ * otherwise non-finite, returns `Math.max(0, maxIndex)` when `maxIndex` is finite, else `0` (same overflow idea as
13
+ * {@link import('./layout-bounds.js').pointInInclusiveLayoutRect}; negative caps clamp like the finite-`spanEnd` branch).
14
14
  *
15
15
  * When `spanEnd` is finite but `maxIndex` is not, returns `spanEnd` so corrupt caps cannot yield `NaN` from
16
16
  * `Math.min`. {@link syncVirtualWindow} always passes a non-negative integer `maxIndex`. When both are
@@ -18,6 +18,17 @@ export interface VirtualWindowState {
18
18
  * while `spanEnd` is still positive.
19
19
  *
20
20
  * Exported for parity tests and advanced virtual-list math; {@link syncVirtualWindow} is the primary API.
21
+ *
22
+ * @param start — Window start row (inclusive). `syncVirtualWindow` passes floored non-negative indices; direct callers may pass corrupt values — NaN/±Inf on `start` or `safeWindow` are rejected by {@link isFinitePlainNumber} before `+`, yielding non-finite `spanEnd` and falling through to the `maxIndex` / `0` branches (see tests). Non-number values (including `BigInt` and boxed numbers) are treated like invalid span operands — they must not reach `+` (which throws on `bigint`/`number` mix) or `Number.isFinite(bigint)` (which throws in ECMAScript).
23
+ * @param maxIndex — Inclusive last row index in the list. Only **primitive** finite numbers are honored (same as
24
+ * {@link isFinitePlainNumber}); `NaN`, `±Infinity`, boxed numbers, and non-numbers are treated like a missing cap.
25
+ * Negative values clamp to `0` before `Math.min` with `spanEnd` so a corrupt cap cannot produce a negative end when `spanEnd` is still positive.
26
+ * @param safeWindow — Visible row count for the span (`start + safeWindow - 1`). `syncVirtualWindow` always passes `≥ 1`; smaller or negative windows can yield negative `spanEnd` (documented for direct callers).
27
+ * @returns Inclusive last visible row index, or a safe fallback when `spanEnd` or `maxIndex` is non-finite (see implementation).
28
+ *
29
+ * @example
30
+ * // Ten rows visible in a window of 3 starting at row 2 → last visible row is 4.
31
+ * inclusiveEndIndex(2, 99, 3) // => 4
21
32
  */
22
33
  export declare function inclusiveEndIndex(start: number, maxIndex: number, safeWindow: number): number;
23
34
  /**
@@ -32,8 +43,18 @@ export declare function inclusiveEndIndex(start: number, maxIndex: number, safeW
32
43
  * adjusting for selection.
33
44
  * Non-finite arguments use the same defaults as empty/reset UI state (`0` rows, window `1`, selection/start `0`).
34
45
  *
46
+ * @remarks Host or deserialized state may supply non-numbers, boxed numbers, bigint, symbols, etc. Each
47
+ * argument is sanitized through the same primitive-finite rules as
48
+ * {@link import('./layout-bounds.js').isFinitePlainNumber} (via internal helpers) so window indices never
49
+ * propagate `NaN` or `±Infinity`. See `packages/core/src/__tests__/virtual-scroll.test.ts` for corrupt-input cases.
50
+ *
35
51
  * @returns Indices with `start <= end`, selection clamped to `[0, totalRows - 1]` (or `0` when empty), and
36
52
  * `selected` always inside `[start, end]` whenever `totalRows > 0`.
53
+ *
54
+ * @example
55
+ * // 100 rows, 10 visible, selection at row 20, window was scrolled to start at 15.
56
+ * syncVirtualWindow(100, 10, 20, 15)
57
+ * // => { start: 15, end: 24, selected: 20 }
37
58
  */
38
59
  export declare function syncVirtualWindow(totalRows: number, windowSize: number, selected: number, currentStart: number): VirtualWindowState;
39
60
  //# sourceMappingURL=virtual-scroll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll.d.ts","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,KAAK,EAAE,MAAM,CAAA;IACb,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAA;IACX,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAW7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAsBpB"}
1
+ {"version":3,"file":"virtual-scroll.d.ts","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAoBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiB7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAsBpB"}
@@ -1,6 +1,10 @@
1
- /** Only plain finite `number` values count (`typeof` + `Number.isFinite`, same idea as `layoutBoundsAreFinite` in `layout-bounds.js`). */
1
+ import { isFinitePlainNumber } from './layout-bounds.js';
2
+ /**
3
+ * Only primitive finite numbers count — same rule as {@link isFinitePlainNumber} / protocol patch validation
4
+ * so corrupt host props cannot slip boxed numbers or strings into window math.
5
+ */
2
6
  function finiteOr(n, fallback) {
3
- return typeof n === 'number' && Number.isFinite(n) ? n : fallback;
7
+ return isFinitePlainNumber(n) ? n : fallback;
4
8
  }
5
9
  /** Non-negative integer row index / count: finite numbers only, then floored (aligned with `windowSize` flooring). */
6
10
  function intRowMetric(n, fallback) {
@@ -8,12 +12,12 @@ function intRowMetric(n, fallback) {
8
12
  }
9
13
  /** Like `Math.max(0, n)` but maps non-finite `n` to `0` so corrupt floats cannot poison window indices. */
10
14
  function nonNegativeOrZero(n) {
11
- return Number.isFinite(n) ? Math.max(0, n) : 0;
15
+ return isFinitePlainNumber(n) ? Math.max(0, n) : 0;
12
16
  }
13
17
  /**
14
18
  * Inclusive last row index for a window starting at `start`. When `start + safeWindow - 1` overflows or is
15
- * otherwise non-finite, returns `maxIndex` when it is finite, else `0` (same overflow idea as
16
- * {@link import('./layout-bounds.js').pointInInclusiveLayoutRect}).
19
+ * otherwise non-finite, returns `Math.max(0, maxIndex)` when `maxIndex` is finite, else `0` (same overflow idea as
20
+ * {@link import('./layout-bounds.js').pointInInclusiveLayoutRect}; negative caps clamp like the finite-`spanEnd` branch).
17
21
  *
18
22
  * When `spanEnd` is finite but `maxIndex` is not, returns `spanEnd` so corrupt caps cannot yield `NaN` from
19
23
  * `Math.min`. {@link syncVirtualWindow} always passes a non-negative integer `maxIndex`. When both are
@@ -21,18 +25,35 @@ function nonNegativeOrZero(n) {
21
25
  * while `spanEnd` is still positive.
22
26
  *
23
27
  * Exported for parity tests and advanced virtual-list math; {@link syncVirtualWindow} is the primary API.
28
+ *
29
+ * @param start — Window start row (inclusive). `syncVirtualWindow` passes floored non-negative indices; direct callers may pass corrupt values — NaN/±Inf on `start` or `safeWindow` are rejected by {@link isFinitePlainNumber} before `+`, yielding non-finite `spanEnd` and falling through to the `maxIndex` / `0` branches (see tests). Non-number values (including `BigInt` and boxed numbers) are treated like invalid span operands — they must not reach `+` (which throws on `bigint`/`number` mix) or `Number.isFinite(bigint)` (which throws in ECMAScript).
30
+ * @param maxIndex — Inclusive last row index in the list. Only **primitive** finite numbers are honored (same as
31
+ * {@link isFinitePlainNumber}); `NaN`, `±Infinity`, boxed numbers, and non-numbers are treated like a missing cap.
32
+ * Negative values clamp to `0` before `Math.min` with `spanEnd` so a corrupt cap cannot produce a negative end when `spanEnd` is still positive.
33
+ * @param safeWindow — Visible row count for the span (`start + safeWindow - 1`). `syncVirtualWindow` always passes `≥ 1`; smaller or negative windows can yield negative `spanEnd` (documented for direct callers).
34
+ * @returns Inclusive last visible row index, or a safe fallback when `spanEnd` or `maxIndex` is non-finite (see implementation).
35
+ *
36
+ * @example
37
+ * // Ten rows visible in a window of 3 starting at row 2 → last visible row is 4.
38
+ * inclusiveEndIndex(2, 99, 3) // => 4
24
39
  */
25
40
  export function inclusiveEndIndex(start, maxIndex, safeWindow) {
26
- const spanEnd = start + safeWindow - 1;
41
+ const spanEnd = isFinitePlainNumber(start) && isFinitePlainNumber(safeWindow) ? start + safeWindow - 1 : Number.NaN;
42
+ // Match start/safeWindow: only primitive finite numbers (NaN/±Infinity/boxed values → NaN cap).
43
+ const maxIdx = isFinitePlainNumber(maxIndex) ? maxIndex : Number.NaN;
27
44
  if (!Number.isFinite(spanEnd)) {
28
- return Number.isFinite(maxIndex) ? maxIndex : 0;
45
+ // Match the finite-span branch: clamp corrupt negative caps so callers never get a negative end when
46
+ // span math overflowed (syncVirtualWindow always supplies non-negative maxIndex; direct callers may not).
47
+ if (!Number.isFinite(maxIdx))
48
+ return 0;
49
+ return Math.max(0, maxIdx);
29
50
  }
30
- if (!Number.isFinite(maxIndex)) {
51
+ if (!Number.isFinite(maxIdx)) {
31
52
  return spanEnd;
32
53
  }
33
54
  // maxIndex is always non-negative from syncVirtualWindow; clamp so direct callers with corrupt
34
55
  // negative caps cannot produce a negative end when spanEnd is still positive.
35
- return Math.min(Math.max(0, maxIndex), spanEnd);
56
+ return Math.min(Math.max(0, maxIdx), spanEnd);
36
57
  }
37
58
  /**
38
59
  * Keep the selected row index visible inside a fixed-size virtual window.
@@ -46,8 +67,18 @@ export function inclusiveEndIndex(start, maxIndex, safeWindow) {
46
67
  * adjusting for selection.
47
68
  * Non-finite arguments use the same defaults as empty/reset UI state (`0` rows, window `1`, selection/start `0`).
48
69
  *
70
+ * @remarks Host or deserialized state may supply non-numbers, boxed numbers, bigint, symbols, etc. Each
71
+ * argument is sanitized through the same primitive-finite rules as
72
+ * {@link import('./layout-bounds.js').isFinitePlainNumber} (via internal helpers) so window indices never
73
+ * propagate `NaN` or `±Infinity`. See `packages/core/src/__tests__/virtual-scroll.test.ts` for corrupt-input cases.
74
+ *
49
75
  * @returns Indices with `start <= end`, selection clamped to `[0, totalRows - 1]` (or `0` when empty), and
50
76
  * `selected` always inside `[start, end]` whenever `totalRows > 0`.
77
+ *
78
+ * @example
79
+ * // 100 rows, 10 visible, selection at row 20, window was scrolled to start at 15.
80
+ * syncVirtualWindow(100, 10, 20, 15)
81
+ * // => { start: 15, end: 24, selected: 20 }
51
82
  */
52
83
  export function syncVirtualWindow(totalRows, windowSize, selected, currentStart) {
53
84
  const safeTotal = intRowMetric(totalRows, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll.js","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"virtual-scroll.js","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geometra/core",
3
- "version": "1.49.0",
3
+ "version": "1.52.0",
4
4
  "description": "DOM-free UI framework core: components, signals, reconciler",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "check": "tsc --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "textura": "^1.49.0"
42
+ "textura": "^1.52.0"
43
43
  },
44
44
  "optionalDependencies": {
45
45
  "@napi-rs/canvas": "^0.1.65"