@geometra/core 1.3.1 → 1.5.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 (66) hide show
  1. package/dist/a11y.d.ts +8 -1
  2. package/dist/a11y.d.ts.map +1 -1
  3. package/dist/a11y.js +24 -16
  4. package/dist/a11y.js.map +1 -1
  5. package/dist/animation.d.ts +7 -3
  6. package/dist/animation.d.ts.map +1 -1
  7. package/dist/animation.js +22 -15
  8. package/dist/animation.js.map +1 -1
  9. package/dist/app.d.ts +26 -7
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +32 -8
  12. package/dist/app.js.map +1 -1
  13. package/dist/elements.d.ts +3 -0
  14. package/dist/elements.d.ts.map +1 -1
  15. package/dist/elements.js +3 -0
  16. package/dist/elements.js.map +1 -1
  17. package/dist/focus-candidates.d.ts +8 -0
  18. package/dist/focus-candidates.d.ts.map +1 -0
  19. package/dist/focus-candidates.js +14 -0
  20. package/dist/focus-candidates.js.map +1 -0
  21. package/dist/focus-trap.d.ts.map +1 -1
  22. package/dist/focus-trap.js +2 -6
  23. package/dist/focus-trap.js.map +1 -1
  24. package/dist/focus.d.ts +1 -0
  25. package/dist/focus.d.ts.map +1 -1
  26. package/dist/focus.js +3 -6
  27. package/dist/focus.js.map +1 -1
  28. package/dist/fonts.d.ts +5 -2
  29. package/dist/fonts.d.ts.map +1 -1
  30. package/dist/fonts.js +12 -3
  31. package/dist/fonts.js.map +1 -1
  32. package/dist/hit-test.d.ts +56 -11
  33. package/dist/hit-test.d.ts.map +1 -1
  34. package/dist/hit-test.js +80 -41
  35. package/dist/hit-test.js.map +1 -1
  36. package/dist/index.d.ts +5 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/keyboard.d.ts +23 -3
  41. package/dist/keyboard.d.ts.map +1 -1
  42. package/dist/keyboard.js +23 -3
  43. package/dist/keyboard.js.map +1 -1
  44. package/dist/layout-bounds.d.ts +8 -0
  45. package/dist/layout-bounds.d.ts.map +1 -1
  46. package/dist/layout-bounds.js +10 -0
  47. package/dist/layout-bounds.js.map +1 -1
  48. package/dist/selection.d.ts +12 -1
  49. package/dist/selection.d.ts.map +1 -1
  50. package/dist/selection.js +28 -12
  51. package/dist/selection.js.map +1 -1
  52. package/dist/text-input.d.ts +14 -2
  53. package/dist/text-input.d.ts.map +1 -1
  54. package/dist/text-input.js +20 -11
  55. package/dist/text-input.js.map +1 -1
  56. package/dist/tree.d.ts +9 -6
  57. package/dist/tree.d.ts.map +1 -1
  58. package/dist/tree.js +9 -6
  59. package/dist/tree.js.map +1 -1
  60. package/dist/types.d.ts +5 -3
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/virtual-scroll.d.ts +7 -4
  63. package/dist/virtual-scroll.d.ts.map +1 -1
  64. package/dist/virtual-scroll.js +15 -8
  65. package/dist/virtual-scroll.js.map +1 -1
  66. package/package.json +1 -1
package/dist/tree.js CHANGED
@@ -43,13 +43,16 @@ function stripStyleProps(props) {
43
43
  *
44
44
  * Strips everything that is not consumed by Textura layout: colors, borders, opacity, cursor,
45
45
  * `pointerEvents`, `zIndex`, `overflow` / `scrollX` / `scrollY`, `boxShadow`, `gradient`,
46
- * `selectable`, `dir`, and image `src` / `alt` / `objectFit`. Remaining props are flex and
47
- * sizing fields that belong in the layout pipeline.
46
+ * `selectable`, `dir`, image `src` / `alt` / `objectFit`, and scene3d host fields (`background`,
47
+ * `objects`, `fov`, `near`, `far`, `cameraPosition`, `cameraTarget`, `orbitControls`, `maxPixelRatio`).
48
+ * Remaining props are flex and sizing fields that belong in the layout pipeline.
48
49
  *
49
- * `dir` is omitted because upstream Textura {@link LayoutNode} types do not carry direction yet;
50
- * Yoga sees one document direction via {@link import('./app.js').createApp}'s `layoutDirection` /
51
- * `computeLayout`, while per-node text, focus, and hit-testing resolve direction on the live
52
- * {@link UIElement} tree with {@link import('./direction.js').resolveElementDirection}.
50
+ * Per-node `dir` is intentionally stripped from layout nodes: Yoga/Textura receives one document
51
+ * direction from {@link import('./app.js').createApp}'s {@link import('./app.js').AppOptions.layoutDirection}
52
+ * (or the root element’s resolved `dir` when that option is omitted), while nested `dir` on the live
53
+ * {@link UIElement} tree is resolved at text, focus, selection, and hit-test time with
54
+ * {@link import('./direction.js').resolveElementDirection}. ROADMAP.md “Deferred / research” tracks an
55
+ * optional future pass that would thread per-node direction through Textura layout props.
53
56
  *
54
57
  * Does not mutate the source element or its `props` (strip list is applied to a shallow copy).
55
58
  *
package/dist/tree.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,OAAO,WAAW,CAAC,eAAe,CAAA;IAClC,OAAO,WAAW,CAAC,KAAK,CAAA;IACxB,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,wEAAwE;IACxE,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,mBAAmB;IACnB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,qBAAqB;IACrB,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,IAAI,CAAA;IACvB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,cAAc,CAAA;IACjC,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtF,OAAO,WAAyB,CAAA;IAClC,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC/B,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,OAAO,WAAW,CAAC,eAAe,CAAA;IAClC,OAAO,WAAW,CAAC,KAAK,CAAA;IACxB,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,WAAW,CAAA;IAC9B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,MAAM,CAAA;IACzB,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,OAAO,WAAW,CAAC,QAAQ,CAAA;IAC3B,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,wEAAwE;IACxE,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,mBAAmB;IACnB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,SAAS,CAAA;IAC5B,qBAAqB;IACrB,OAAO,WAAW,CAAC,UAAU,CAAA;IAC7B,OAAO,WAAW,CAAC,OAAO,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,IAAI,CAAA;IACvB,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAC,cAAc,CAAA;IACjC,OAAO,WAAW,CAAC,YAAY,CAAA;IAC/B,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAC,aAAa,CAAA;IAChC,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY,CAAC,OAAkB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAE7E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACtF,OAAO,WAAyB,CAAA;IAClC,CAAC;IAED,OAAO;QACL,GAAG,WAAW;QACd,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;KAC/B,CAAA;AACjB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -8,8 +8,9 @@ export type Direction = 'ltr' | 'rtl' | 'auto';
8
8
  /**
9
9
  * CSS `cursor` keyword for box props (canvas hosts assign it to `canvas.style.cursor` when supported).
10
10
  * Use `''` so {@link import('./hit-test.js').getCursorAtPoint} can fall through to an ancestor cursor.
11
+ * The union is a curated subset of valid CSS keywords, not an exhaustive list.
11
12
  */
12
- export type CursorProp = '' | 'default' | 'pointer' | 'grab' | 'grabbing' | 'text' | 'not-allowed' | 'crosshair' | 'move' | 'help' | 'cell';
13
+ export type CursorProp = '' | 'default' | 'pointer' | 'grab' | 'grabbing' | 'text' | 'not-allowed' | 'crosshair' | 'move' | 'help' | 'cell' | 'zoom-in' | 'zoom-out';
13
14
  /** Optional direction metadata carried on UI props (see {@link Direction}). */
14
15
  export interface DirectionProps {
15
16
  /** When omitted or `auto`, inherits the parent’s resolved `ltr` / `rtl`. */
@@ -31,8 +32,9 @@ export interface StyleProps {
31
32
  */
32
33
  zIndex?: number;
33
34
  /**
34
- * Pointer hit targeting. `'none'` skips this box for pointer handlers and cursor resolution;
35
- * hits pass through to geometry behind it. Descendants still receive hits unless they also set `'none'`.
35
+ * Pointer hit targeting. Only `'none'` is pass-through: this box is omitted from the pointer stack and
36
+ * cursor walk so hits reach geometry behind. `'auto'` and omitting the prop behave the same (the box stays
37
+ * in the stack). Descendants still receive hits under a `'none'` parent unless they also set `'none'`.
36
38
  */
37
39
  pointerEvents?: 'auto' | 'none';
38
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAE9C;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB,EAAE,GACF,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,aAAa,GACb,WAAW,GACX,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,GACT,UAAU,CAAA;AAEd,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC1C,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kBAAkB;IAClB,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7E,uEAAuE;IACvE,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,QAAQ,CAAA;QACd,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,KAAK,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAChD,CAAA;CACF;AAED,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gHAAgH;IAChH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,uBAAuB;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;QAC/C,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;QAClC,8DAA8D;QAC9D,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,KAAK,CAAA;IACX,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,CAAA;IAC9C,QAAQ,EAAE,SAAS,EAAE,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;QAC/C,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;KACzC,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,aAAa,GACb,WAAW,GACX,WAAW,GACX,mBAAmB,GACnB,uBAAuB,GACvB,YAAY,CAAA;AAEhB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAA;IACd,kFAAkF;IAClF,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC;AAED,kIAAkI;AAClI,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG;QAC/C,0CAA0C;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,+BAA+B;QAC/B,OAAO,EAAE,aAAa,EAAE,CAAA;QACxB,oDAAoD;QACpD,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,uCAAuC;QACvC,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,uCAAuC;QACvC,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,iCAAiC;QACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACzC,uCAAuC;QACvC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACvC,6BAA6B;QAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAA;QAC7C,uDAAuD;QACvD,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IACD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,kCAAkC;AAClC,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,CAAA;AAEhF,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC/B,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IACnC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAA;IACrC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACpE,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACvC,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACrD,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAA;IACtD,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAA;CACpD;AAED,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;CACvB;AAED,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,cAAc,CAAA;CACvB;AAED,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,cAAc,CAAA;CACvB;AAED,wEAAwE;AACxE,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,CAAA;AAE1E,qFAAqF;AACrF,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IACrD,mCAAmC;IACnC,OAAO,IAAI,IAAI,CAAA;IACf;;;OAGG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAC9C"}
@@ -10,10 +10,13 @@ export interface VirtualWindowState {
10
10
  /**
11
11
  * Keep the selected row index visible inside a fixed-size virtual window.
12
12
  *
13
- * @param totalRows — Non-negative row count; negative values are treated as zero.
14
- * @param windowSize — Visible row count; values below 1 are clamped to 1.
15
- * @param selectedDesired selection index; clamped into `[0, totalRows - 1]`.
16
- * @param currentStart Current window start index; clamped into valid range before adjusting for selection.
13
+ * @param totalRows — Non-negative row count; negative values are treated as zero. Non-integer finite values are
14
+ * floored so row counts stay whole indices (same rule as `windowSize`).
15
+ * @param windowSizeVisible row count; values below 1 are clamped to 1. Non-integer finite values are floored
16
+ * so `start` / `end` stay whole row indices (same as counting visible list rows).
17
+ * @param selected — Desired selection index; floored to a whole row, then clamped into `[0, totalRows - 1]`.
18
+ * @param currentStart — Current window start index; floored to a whole row, then clamped into valid range before
19
+ * adjusting for selection.
17
20
  * Non-finite arguments use the same defaults as empty/reset UI state (`0` rows, window `1`, selection/start `0`).
18
21
  */
19
22
  export declare function syncVirtualWindow(totalRows: number, windowSize: number, selected: number, currentStart: number): VirtualWindowState;
@@ -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;AAOD;;;;;;;;GAQG;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":"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;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAsBpB"}
@@ -2,22 +2,29 @@
2
2
  function finiteOr(n, fallback) {
3
3
  return typeof n === 'number' && Number.isFinite(n) ? n : fallback;
4
4
  }
5
+ /** Non-negative integer row index / count: finite numbers only, then floored (aligned with `windowSize` flooring). */
6
+ function intRowMetric(n, fallback) {
7
+ return Math.max(0, Math.floor(finiteOr(n, fallback)));
8
+ }
5
9
  /**
6
10
  * Keep the selected row index visible inside a fixed-size virtual window.
7
11
  *
8
- * @param totalRows — Non-negative row count; negative values are treated as zero.
9
- * @param windowSize — Visible row count; values below 1 are clamped to 1.
10
- * @param selectedDesired selection index; clamped into `[0, totalRows - 1]`.
11
- * @param currentStart Current window start index; clamped into valid range before adjusting for selection.
12
+ * @param totalRows — Non-negative row count; negative values are treated as zero. Non-integer finite values are
13
+ * floored so row counts stay whole indices (same rule as `windowSize`).
14
+ * @param windowSizeVisible row count; values below 1 are clamped to 1. Non-integer finite values are floored
15
+ * so `start` / `end` stay whole row indices (same as counting visible list rows).
16
+ * @param selected — Desired selection index; floored to a whole row, then clamped into `[0, totalRows - 1]`.
17
+ * @param currentStart — Current window start index; floored to a whole row, then clamped into valid range before
18
+ * adjusting for selection.
12
19
  * Non-finite arguments use the same defaults as empty/reset UI state (`0` rows, window `1`, selection/start `0`).
13
20
  */
14
21
  export function syncVirtualWindow(totalRows, windowSize, selected, currentStart) {
15
- const safeTotal = Math.max(0, finiteOr(totalRows, 0));
16
- const safeWindow = Math.max(1, finiteOr(windowSize, 1));
22
+ const safeTotal = intRowMetric(totalRows, 0);
23
+ const safeWindow = Math.max(1, Math.floor(finiteOr(windowSize, 1)));
17
24
  const maxIndex = Math.max(0, safeTotal - 1);
18
- const nextSelected = Math.max(0, Math.min(maxIndex, finiteOr(selected, 0)));
25
+ const nextSelected = Math.max(0, Math.min(maxIndex, intRowMetric(selected, 0)));
19
26
  const maxStart = Math.max(0, safeTotal - safeWindow);
20
- let start = Math.max(0, Math.min(maxStart, finiteOr(currentStart, 0)));
27
+ let start = Math.max(0, Math.min(maxStart, intRowMetric(currentStart, 0)));
21
28
  const end = Math.min(maxIndex, start + safeWindow - 1);
22
29
  if (nextSelected < start) {
23
30
  start = nextSelected;
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll.js","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"AAUA,0IAA0I;AAC1I,SAAS,QAAQ,CAAC,CAAS,EAAE,QAAgB;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAA;IAEpD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAA;IAEtD,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;QACzB,KAAK,GAAG,YAAY,CAAA;IACtB,CAAC;SAAM,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;QAC9B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3D,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;QACtD,QAAQ,EAAE,YAAY;KACvB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"virtual-scroll.js","sourceRoot":"","sources":["../src/virtual-scroll.ts"],"names":[],"mappings":"AAUA,0IAA0I;AAC1I,SAAS,QAAQ,CAAC,CAAS,EAAE,QAAgB;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACnE,CAAC;AAED,sHAAsH;AACtH,SAAS,YAAY,CAAC,CAAS,EAAE,QAAgB;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AACvD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC,CAAA;IAEpD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAA;IAEtD,IAAI,YAAY,GAAG,KAAK,EAAE,CAAC;QACzB,KAAK,GAAG,YAAY,CAAA;IACtB,CAAC;SAAM,IAAI,YAAY,GAAG,GAAG,EAAE,CAAC;QAC9B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3D,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;QACtD,QAAQ,EAAE,YAAY;KACvB,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geometra/core",
3
- "version": "1.3.1",
3
+ "version": "1.5.0",
4
4
  "description": "DOM-free UI framework core: components, signals, reconciler",
5
5
  "license": "MIT",
6
6
  "type": "module",