@pilates/core 1.1.0 → 2.0.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.
Files changed (57) hide show
  1. package/dist/algorithm/cache.d.ts +7 -19
  2. package/dist/algorithm/cache.d.ts.map +1 -1
  3. package/dist/algorithm/cache.js +31 -27
  4. package/dist/algorithm/cache.js.map +1 -1
  5. package/dist/algorithm/index.js +22 -14
  6. package/dist/algorithm/index.js.map +1 -1
  7. package/dist/algorithm/round.d.ts.map +1 -1
  8. package/dist/algorithm/round.js +19 -19
  9. package/dist/algorithm/round.js.map +1 -1
  10. package/dist/algorithm/spineless/classify.d.ts +47 -0
  11. package/dist/algorithm/spineless/classify.d.ts.map +1 -0
  12. package/dist/algorithm/spineless/classify.js +109 -0
  13. package/dist/algorithm/spineless/classify.js.map +1 -0
  14. package/dist/algorithm/spineless/field-id-pool.d.ts +28 -0
  15. package/dist/algorithm/spineless/field-id-pool.d.ts.map +1 -0
  16. package/dist/algorithm/spineless/field-id-pool.js +35 -0
  17. package/dist/algorithm/spineless/field-id-pool.js.map +1 -0
  18. package/dist/algorithm/spineless/flex-grammar.d.ts.map +1 -1
  19. package/dist/algorithm/spineless/flex-grammar.js +194 -58
  20. package/dist/algorithm/spineless/flex-grammar.js.map +1 -1
  21. package/dist/algorithm/spineless/grammar.d.ts +6 -0
  22. package/dist/algorithm/spineless/grammar.d.ts.map +1 -1
  23. package/dist/algorithm/spineless/grammar.js +2 -1
  24. package/dist/algorithm/spineless/grammar.js.map +1 -1
  25. package/dist/algorithm/spineless/layout.d.ts +52 -15
  26. package/dist/algorithm/spineless/layout.d.ts.map +1 -1
  27. package/dist/algorithm/spineless/layout.js +450 -312
  28. package/dist/algorithm/spineless/layout.js.map +1 -1
  29. package/dist/algorithm/spineless/order-maintenance.d.ts +9 -0
  30. package/dist/algorithm/spineless/order-maintenance.d.ts.map +1 -1
  31. package/dist/algorithm/spineless/order-maintenance.js +6 -0
  32. package/dist/algorithm/spineless/order-maintenance.js.map +1 -1
  33. package/dist/algorithm/spineless/runtime.d.ts +61 -8
  34. package/dist/algorithm/spineless/runtime.d.ts.map +1 -1
  35. package/dist/algorithm/spineless/runtime.js +201 -50
  36. package/dist/algorithm/spineless/runtime.js.map +1 -1
  37. package/dist/algorithm/spineless/style-dirty.d.ts +8 -6
  38. package/dist/algorithm/spineless/style-dirty.d.ts.map +1 -1
  39. package/dist/algorithm/spineless/style-dirty.js +10 -11
  40. package/dist/algorithm/spineless/style-dirty.js.map +1 -1
  41. package/dist/dirty-flags.d.ts +30 -0
  42. package/dist/dirty-flags.d.ts.map +1 -0
  43. package/dist/dirty-flags.js +35 -0
  44. package/dist/dirty-flags.js.map +1 -0
  45. package/dist/index.d.ts +2 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout-pool.d.ts +49 -0
  50. package/dist/layout-pool.d.ts.map +1 -0
  51. package/dist/layout-pool.js +75 -0
  52. package/dist/layout-pool.js.map +1 -0
  53. package/dist/node.d.ts +20 -3
  54. package/dist/node.d.ts.map +1 -1
  55. package/dist/node.js +63 -42
  56. package/dist/node.js.map +1 -1
  57. package/package.json +1 -1
@@ -87,31 +87,19 @@ export interface LayoutCacheKey {
87
87
  heightMode: MeasureMode;
88
88
  }
89
89
  /** @internal */
90
- export interface CachedChildLayout {
91
- left: number;
92
- top: number;
90
+ export interface LayoutCacheValue {
93
91
  width: number;
94
92
  height: number;
95
93
  scrollWidth: number;
96
94
  scrollHeight: number;
97
95
  /**
98
- * Pre-rounding (float) left position of this child, captured before
99
- * `roundLayout` converts positions to integers. Used by
100
- * `roundLayoutSubtree` to compute the correct float absolute coordinate
101
- * when re-laying out a dirty boundary node under a cache-hit root.
102
- * See `Node._floatLeft` for the full explanation.
96
+ * Flat child-layout data — `CHILD_STRIDE` (8) floats per direct child:
97
+ * [left, top, width, height, scrollWidth, scrollHeight, floatLeft, floatTop].
98
+ * Leaf nodes share the module-level `EMPTY_CHILD_DATA`.
103
99
  */
104
- floatLeft: number;
105
- /** See {@link floatLeft}. */
106
- floatTop: number;
107
- }
108
- /** @internal */
109
- export interface LayoutCacheValue {
110
- width: number;
111
- height: number;
112
- scrollWidth: number;
113
- scrollHeight: number;
114
- childLayouts: CachedChildLayout[];
100
+ childData: Float64Array;
101
+ /** Number of direct children captured. `childData.length === childCount * CHILD_STRIDE`. */
102
+ childCount: number;
115
103
  }
116
104
  /**
117
105
  * Single-slot per-node layout cache. Matches Yoga's `cachedLayout`
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/algorithm/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/algorithm/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,gBAAgB;AAChB,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,KAAK,CAAkD;IAE/D;;;;;;;;;;OAUG;IACH,IAAI,SAAK;IACT,kCAAkC;IAClC,MAAM,SAAK;IAEX,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,iBAAiB,GAAG,SAAS;IAgB3D;;;;;;;;;OASG;IACH,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAqB3D;;;;;OAKG;IACH,KAAK,IAAI,IAAI;CAGd;AAED,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;CAKzB;AAQD,gBAAgB;AAChB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAyE;IAErF,gBAAgB;IAChB,IAAI,SAAK;IACT,gBAAgB;IAChB,MAAM,SAAK;IAEX,MAAM,CAAC,GAAG,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS;IAgBzD;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAIzD,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,EAAE,CAgBhE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI/C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAG9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,CAuB7D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CA2B1E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAe5E"}
@@ -96,6 +96,10 @@ export class MeasureCache {
96
96
  this.slots.length = 0;
97
97
  }
98
98
  }
99
+ /** Number of Float64 slots per child in a `LayoutCacheValue.childData` array. */
100
+ const CHILD_STRIDE = 8;
101
+ /** Shared empty child-data array for leaf nodes — avoids per-leaf allocation. */
102
+ const EMPTY_CHILD_DATA = new Float64Array(0);
99
103
  /**
100
104
  * Single-slot per-node layout cache. Matches Yoga's `cachedLayout`
101
105
  * (single overwrite-on-write) and Taffy's 1-slot layout-cache. Internal
@@ -223,27 +227,27 @@ export function markDirtyDeep(root) {
223
227
  * @internal
224
228
  */
225
229
  export function snapshotForCache(node) {
226
- const childLayouts = [];
227
230
  const count = node.getChildCount();
231
+ const childData = count === 0 ? EMPTY_CHILD_DATA : new Float64Array(count * CHILD_STRIDE);
228
232
  for (let i = 0; i < count; i++) {
229
233
  const c = node.getChild(i);
230
- childLayouts.push({
231
- left: c.layout.left,
232
- top: c.layout.top,
233
- width: c.layout.width,
234
- height: c.layout.height,
235
- scrollWidth: c.layout.scrollWidth,
236
- scrollHeight: c.layout.scrollHeight,
237
- floatLeft: c._floatLeft,
238
- floatTop: c._floatTop,
239
- });
234
+ const base = i * CHILD_STRIDE;
235
+ childData[base] = c.layout.left;
236
+ childData[base + 1] = c.layout.top;
237
+ childData[base + 2] = c.layout.width;
238
+ childData[base + 3] = c.layout.height;
239
+ childData[base + 4] = c.layout.scrollWidth;
240
+ childData[base + 5] = c.layout.scrollHeight;
241
+ childData[base + 6] = c._floatLeft;
242
+ childData[base + 7] = c._floatTop;
240
243
  }
241
244
  return {
242
245
  width: node.layout.width,
243
246
  height: node.layout.height,
244
247
  scrollWidth: node.layout.scrollWidth,
245
248
  scrollHeight: node.layout.scrollHeight,
246
- childLayouts,
249
+ childData,
250
+ childCount: count,
247
251
  };
248
252
  }
249
253
  /**
@@ -262,28 +266,28 @@ export function snapshotForCache(node) {
262
266
  */
263
267
  export function restoreFromCache(node, value) {
264
268
  if (process.env.PILATES_DIFFERENTIAL_LAYOUT === '1') {
265
- if (node.getChildCount() !== value.childLayouts.length) {
266
- throw new Error(`[pilates layout cache] restored value has ${value.childLayouts.length} children but node has ${node.getChildCount()} — cache invalidation bug`);
269
+ if (node.getChildCount() !== value.childCount) {
270
+ throw new Error(`[pilates layout cache] restored value has ${value.childCount} children but node has ${node.getChildCount()} — cache invalidation bug`);
267
271
  }
268
272
  }
269
273
  node._layout.width = value.width;
270
274
  node._layout.height = value.height;
271
275
  node._layout.scrollWidth = value.scrollWidth;
272
276
  node._layout.scrollHeight = value.scrollHeight;
273
- // node._layout.left/top are set by the caller before recursion starts
274
- // (root sets to 0; child positions come from this restore via the
275
- // childLayouts array below).
276
- for (let i = 0; i < node.getChildCount(); i++) {
277
+ // node._layout.left/top are set by the caller before recursion starts.
278
+ const cd = value.childData;
279
+ const count = node.getChildCount();
280
+ for (let i = 0; i < count; i++) {
277
281
  const c = node.getChild(i);
278
- const cl = value.childLayouts[i];
279
- c._layout.left = cl.left;
280
- c._layout.top = cl.top;
281
- c._layout.width = cl.width;
282
- c._layout.height = cl.height;
283
- c._layout.scrollWidth = cl.scrollWidth;
284
- c._layout.scrollHeight = cl.scrollHeight;
285
- c._floatLeft = cl.floatLeft;
286
- c._floatTop = cl.floatTop;
282
+ const base = i * CHILD_STRIDE;
283
+ c._layout.left = cd[base];
284
+ c._layout.top = cd[base + 1];
285
+ c._layout.width = cd[base + 2];
286
+ c._layout.height = cd[base + 3];
287
+ c._layout.scrollWidth = cd[base + 4];
288
+ c._layout.scrollHeight = cd[base + 5];
289
+ c._floatLeft = cd[base + 6];
290
+ c._floatTop = cd[base + 7];
287
291
  }
288
292
  }
289
293
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/algorithm/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/algorithm/cache.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,7 @@ export function calculateLayout(root, availableWidth, availableHeight) {
70
70
  // engine takes over — build once, relay incrementally.
71
71
  const engine = layoutEngines.get(root);
72
72
  if (engine === undefined) {
73
- calculateLayoutImpl(root, availableWidth, availableHeight);
73
+ calculateLayoutImpl(root, availableWidth, availableHeight, false);
74
74
  layoutEngines.set(root, 'cold');
75
75
  }
76
76
  else {
@@ -97,12 +97,12 @@ export function calculateLayout(root, availableWidth, availableHeight) {
97
97
  return;
98
98
  }
99
99
  // First pass: cached path (normal).
100
- calculateLayoutImpl(root, availableWidth, availableHeight);
100
+ calculateLayoutImpl(root, availableWidth, availableHeight, true);
101
101
  const cachedSnapshot = snapshotTreeLayouts(root);
102
102
  // Second pass: clear caches, re-dirty, recompute cold.
103
103
  clearAllCaches(root);
104
104
  markDirtyDeep(root);
105
- calculateLayoutImpl(root, availableWidth, availableHeight);
105
+ calculateLayoutImpl(root, availableWidth, availableHeight, true);
106
106
  const coldSnapshot = snapshotTreeLayouts(root);
107
107
  const diff = diffLayouts(cachedSnapshot, coldSnapshot);
108
108
  if (diff !== '') {
@@ -118,9 +118,9 @@ export function calculateLayout(root, availableWidth, availableHeight) {
118
118
  * @internal
119
119
  */
120
120
  export function calculateLayoutImperative(root, availableWidth, availableHeight) {
121
- calculateLayoutImpl(root, availableWidth, availableHeight);
121
+ calculateLayoutImpl(root, availableWidth, availableHeight, true);
122
122
  }
123
- function calculateLayoutImpl(root, availableWidth, availableHeight) {
123
+ function calculateLayoutImpl(root, availableWidth, availableHeight, populateCache) {
124
124
  const widthMode = availableWidth === undefined ? 'undefined' : 'exactly';
125
125
  const heightMode = availableHeight === undefined ? 'undefined' : 'exactly';
126
126
  const aw = availableWidth ?? Number.POSITIVE_INFINITY;
@@ -180,12 +180,17 @@ function calculateLayoutImpl(root, availableWidth, availableHeight) {
180
180
  root._layout.height = resolveRootAxisSize(root, 'column', availableHeight);
181
181
  layoutChildren(root);
182
182
  roundLayout(root);
183
- computeScrollSizes(root);
183
+ computeScrollSizes(root, populateCache);
184
184
  markClean(root);
185
185
  // Store the root's result (computeScrollSizes already cached inner nodes).
186
- if (root._layoutCache === undefined)
187
- root._layoutCache = new LayoutCache();
188
- root._layoutCache.store(key, snapshotForCache(root));
186
+ // Skipped when populateCache is false — the router runs the imperative
187
+ // engine only once per root, then switches to Spineless, which never
188
+ // reads this cache.
189
+ if (populateCache) {
190
+ if (root._layoutCache === undefined)
191
+ root._layoutCache = new LayoutCache();
192
+ root._layoutCache.store(key, snapshotForCache(root));
193
+ }
189
194
  }
190
195
  function markClean(node) {
191
196
  node.clearDirty();
@@ -204,9 +209,10 @@ function markClean(node) {
204
209
  * Runs after `roundLayout` so the recorded extent is in integer cells and
205
210
  * matches what the renderer paints.
206
211
  */
207
- function computeScrollSizes(node) {
208
- for (let i = 0; i < node.getChildCount(); i++)
209
- computeScrollSizes(node.getChild(i));
212
+ function computeScrollSizes(node, populateCache) {
213
+ for (let i = 0; i < node.getChildCount(); i++) {
214
+ computeScrollSizes(node.getChild(i), populateCache);
215
+ }
210
216
  let contentRight = 0;
211
217
  let contentBottom = 0;
212
218
  for (let i = 0; i < node.getChildCount(); i++) {
@@ -218,8 +224,10 @@ function computeScrollSizes(node) {
218
224
  node._layout.scrollWidth = Math.max(node._layout.width, contentRight);
219
225
  node._layout.scrollHeight = Math.max(node._layout.height, contentBottom);
220
226
  // Cache the node's layout for next pass. Skip root (cached separately
221
- // by calculateLayoutImpl with the original root key).
222
- if (node.getParent() !== null) {
227
+ // by calculateLayoutImpl with the original root key). Skipped entirely
228
+ // when populateCache is false — the router's first-layout imperative pass
229
+ // populates a cache no subsequent layout reads (layout 2+ uses Spineless).
230
+ if (populateCache && node.getParent() !== null) {
223
231
  const innerKey = {
224
232
  availableWidth: node.layout.width,
225
233
  widthMode: 'exactly',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/algorithm/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"round.d.ts","sourceRoot":"","sources":["../../src/algorithm/round.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AASvC,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI5C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAqB3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,IAAI,CAIN"}
1
+ {"version":3,"file":"round.d.ts","sourceRoot":"","sources":["../../src/algorithm/round.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAG5C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAoB3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,IAAI,CAGN"}
@@ -15,10 +15,10 @@
15
15
  *
16
16
  * This mirrors Yoga's "round to pixel grid" pass.
17
17
  */
18
+ import { Pool } from '../layout-pool.js';
18
19
  export function roundLayout(root) {
19
- const absolutes = new Map();
20
- collectAbsolutes(root, 0, 0, absolutes);
21
- applyRounding(root, absolutes, 0, 0);
20
+ collectAbsolutes(root, 0, 0);
21
+ applyRounding(root, 0, 0);
22
22
  }
23
23
  /**
24
24
  * Round the layout of a subtree that sits at a known absolute position.
@@ -45,17 +45,16 @@ export function roundLayoutSubtree(node, parentAbsX, parentAbsY) {
45
45
  // are computed in the same floating-point space as the full-tree roundLayout pass.
46
46
  const nodeAbsX = parentAbsX + node._floatLeft;
47
47
  const nodeAbsY = parentAbsY + node._floatTop;
48
- const absolutes = new Map();
49
48
  // Collect children relative to the node's absolute corner.
50
49
  for (let i = 0; i < node.getChildCount(); i++) {
51
- collectAbsolutes(node.getChild(i), nodeAbsX, nodeAbsY, absolutes);
50
+ collectAbsolutes(node.getChild(i), nodeAbsX, nodeAbsY);
52
51
  }
53
52
  // Round children (their positions are relative to `node`, so
54
53
  // parentRoundedX/Y for each child is node's absolute corner rounded).
55
54
  const roundedNodeX = Math.round(nodeAbsX);
56
55
  const roundedNodeY = Math.round(nodeAbsY);
57
56
  for (let i = 0; i < node.getChildCount(); i++) {
58
- applyRounding(node.getChild(i), absolutes, roundedNodeX, roundedNodeY);
57
+ applyRounding(node.getChild(i), roundedNodeX, roundedNodeY);
59
58
  }
60
59
  }
61
60
  /**
@@ -71,30 +70,31 @@ export function roundLayoutSubtree(node, parentAbsX, parentAbsY) {
71
70
  * @internal
72
71
  */
73
72
  export function roundLayoutFrom(node, parentAbsX, parentAbsY, parentRoundedX, parentRoundedY) {
74
- const absolutes = new Map();
75
- collectAbsolutes(node, parentAbsX, parentAbsY, absolutes);
76
- applyRounding(node, absolutes, parentRoundedX, parentRoundedY);
73
+ collectAbsolutes(node, parentAbsX, parentAbsY);
74
+ applyRounding(node, parentRoundedX, parentRoundedY);
77
75
  }
78
- function collectAbsolutes(node, parentX, parentY, out) {
76
+ function collectAbsolutes(node, parentX, parentY) {
79
77
  const x = parentX + node.layout.left;
80
78
  const y = parentY + node.layout.top;
81
- out.set(node, { x, y, w: node.layout.width, h: node.layout.height });
79
+ Pool.absCornersX[node._id] = x;
80
+ Pool.absCornersY[node._id] = y;
82
81
  for (let i = 0; i < node.getChildCount(); i++) {
83
- collectAbsolutes(node.getChild(i), x, y, out);
82
+ collectAbsolutes(node.getChild(i), x, y);
84
83
  }
85
84
  }
86
- function applyRounding(node, abs, parentRoundedX, parentRoundedY) {
87
- const my = abs.get(node);
88
- const roundedX = Math.round(my.x);
89
- const roundedY = Math.round(my.y);
90
- const roundedR = Math.round(my.x + my.w);
91
- const roundedB = Math.round(my.y + my.h);
85
+ function applyRounding(node, parentRoundedX, parentRoundedY) {
86
+ const absX = Pool.absCornersX[node._id];
87
+ const absY = Pool.absCornersY[node._id];
88
+ const roundedX = Math.round(absX);
89
+ const roundedY = Math.round(absY);
90
+ const roundedR = Math.round(absX + node.layout.width);
91
+ const roundedB = Math.round(absY + node.layout.height);
92
92
  node._layout.left = roundedX - parentRoundedX;
93
93
  node._layout.top = roundedY - parentRoundedY;
94
94
  node._layout.width = Math.max(0, roundedR - roundedX);
95
95
  node._layout.height = Math.max(0, roundedB - roundedY);
96
96
  for (let i = 0; i < node.getChildCount(); i++) {
97
- applyRounding(node.getChild(i), abs, roundedX, roundedY);
97
+ applyRounding(node.getChild(i), roundedX, roundedY);
98
98
  }
99
99
  }
100
100
  //# sourceMappingURL=round.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"round.js","sourceRoot":"","sources":["../../src/algorithm/round.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"round.js","sourceRoot":"","sources":["../../src/algorithm/round.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Dirty-region classifier for the `calculateLayout` router (phase 14).
3
+ *
4
+ * Examines the dirty region of `root` against a snapshot map of the
5
+ * pre-mutation tree state. Returns a discriminated union telling the
6
+ * router which engine to use:
7
+ *
8
+ * - `value` — only value mutations on snapped nodes; Spineless wins
9
+ * - `structural` — one pivot node had its child list change; route to imperative
10
+ * - `multi-pivot` — two or more parents had children change; imperative for safety
11
+ * - `sig-change` — a snapped node had its signature or measure func change; imperative
12
+ * - `no-snap` — no snap map available (driver is cold or just invalidated)
13
+ *
14
+ * Pure function over `Node` reads + the snap map. No I/O, no
15
+ * side effects.
16
+ *
17
+ * @internal
18
+ */
19
+ import type { MeasureFunc } from '../../measure-func.js';
20
+ import type { Node } from '../../node.js';
21
+ /**
22
+ * The structural-signature payload the classifier compares per node.
23
+ * Mirrors the shape `SpinelessLayout.layout()` uses internally; lifted
24
+ * here so the router can classify without instantiating a driver.
25
+ */
26
+ export interface NodeSnap {
27
+ sig: string;
28
+ measure: MeasureFunc | null;
29
+ children: Node[];
30
+ }
31
+ export type Classification = {
32
+ kind: 'value';
33
+ } | {
34
+ kind: 'structural';
35
+ pivot: Node;
36
+ } | {
37
+ kind: 'multi-pivot';
38
+ } | {
39
+ kind: 'sig-change';
40
+ } | {
41
+ kind: 'no-snap';
42
+ };
43
+ /** Snapshot one node's structural shape for later comparison. */
44
+ export declare function snapNode(node: Node): NodeSnap;
45
+ /** Walk dirty region, classify against the snap map. */
46
+ export declare function classifyDirty(root: Node, snaps: ReadonlyMap<Node, NodeSnap> | null): Classification;
47
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,IAAI,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AA4BxB,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAI7C;AAWD,wDAAwD;AACxD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,GACxC,cAAc,CAwChB"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Dirty-region classifier for the `calculateLayout` router (phase 14).
3
+ *
4
+ * Examines the dirty region of `root` against a snapshot map of the
5
+ * pre-mutation tree state. Returns a discriminated union telling the
6
+ * router which engine to use:
7
+ *
8
+ * - `value` — only value mutations on snapped nodes; Spineless wins
9
+ * - `structural` — one pivot node had its child list change; route to imperative
10
+ * - `multi-pivot` — two or more parents had children change; imperative for safety
11
+ * - `sig-change` — a snapped node had its signature or measure func change; imperative
12
+ * - `no-snap` — no snap map available (driver is cold or just invalidated)
13
+ *
14
+ * Pure function over `Node` reads + the snap map. No I/O, no
15
+ * side effects.
16
+ *
17
+ * @internal
18
+ */
19
+ /**
20
+ * Build a structural signature for one node. Two nodes' sigs are equal
21
+ * iff their style-affecting-layout-shape fields are equal — see
22
+ * `SpinelessLayout`'s `nodeSig` for the inspiration.
23
+ */
24
+ function nodeSig(node) {
25
+ const s = node.style;
26
+ return [
27
+ s.flexDirection,
28
+ s.flexWrap,
29
+ s.justifyContent,
30
+ s.alignItems,
31
+ s.alignContent,
32
+ s.alignSelf,
33
+ s.positionType,
34
+ s.display,
35
+ typeof s.width,
36
+ typeof s.height,
37
+ typeof s.flexBasis,
38
+ s.flexGrow > 0 ? 'g' : '_',
39
+ s.flexShrink > 0 ? 's' : '_',
40
+ s.aspectRatio === undefined ? 'n' : String(s.aspectRatio),
41
+ s.position.map((p) => (p === undefined ? '_' : String(p))).join(','),
42
+ ].join('|');
43
+ }
44
+ /** Snapshot one node's structural shape for later comparison. */
45
+ export function snapNode(node) {
46
+ const children = [];
47
+ for (let i = 0; i < node.getChildCount(); i++)
48
+ children.push(node.getChild(i));
49
+ return { sig: nodeSig(node), measure: node.getMeasureFunc(), children };
50
+ }
51
+ /** True iff `node`'s current child list still matches `snap.children`. */
52
+ function childrenUnchanged(snap, node) {
53
+ if (node.getChildCount() !== snap.children.length)
54
+ return false;
55
+ for (let i = 0; i < snap.children.length; i++) {
56
+ if (node.getChild(i) !== snap.children[i])
57
+ return false;
58
+ }
59
+ return true;
60
+ }
61
+ /** Walk dirty region, classify against the snap map. */
62
+ export function classifyDirty(root, snaps) {
63
+ if (snaps === null)
64
+ return { kind: 'no-snap' };
65
+ let structuralPivot = null;
66
+ let multiPivot = false;
67
+ let sigChanged = false;
68
+ function visit(n) {
69
+ if (sigChanged || multiPivot)
70
+ return;
71
+ const dirty = n.isDirty();
72
+ const hasDirtyDescendant = n
73
+ ._hasDirtyDescendant;
74
+ const snap = snaps.get(n);
75
+ if (snap === undefined) {
76
+ // A node with no snap that's part of the dirty walk = newly
77
+ // introduced node (e.g. an appended child). Its parent's child-list
78
+ // change is already tracked via childrenUnchanged(); don't escalate
79
+ // to multi-pivot just because the new subtree contains unseen nodes.
80
+ return;
81
+ }
82
+ if (dirty) {
83
+ if (snap.sig !== nodeSig(n) || snap.measure !== n.getMeasureFunc()) {
84
+ sigChanged = true;
85
+ return;
86
+ }
87
+ if (!childrenUnchanged(snap, n)) {
88
+ if (structuralPivot !== null && structuralPivot !== n) {
89
+ multiPivot = true;
90
+ return;
91
+ }
92
+ structuralPivot = n;
93
+ }
94
+ }
95
+ if (dirty || hasDirtyDescendant) {
96
+ for (let i = 0; i < n.getChildCount(); i++)
97
+ visit(n.getChild(i));
98
+ }
99
+ }
100
+ visit(root);
101
+ if (sigChanged)
102
+ return { kind: 'sig-change' };
103
+ if (multiPivot)
104
+ return { kind: 'multi-pivot' };
105
+ if (structuralPivot !== null)
106
+ return { kind: 'structural', pivot: structuralPivot };
107
+ return { kind: 'value' };
108
+ }
109
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/classify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Monotonic integer ID allocator for Spineless `Field` objects.
3
+ * Phase 15I indexes the runtime's typed-array storage by field.id.
4
+ *
5
+ * IDs are never recycled — Fields are interned per (node, name) and
6
+ * live as long as their node. The max id is the live-field high-water
7
+ * mark, matching LayoutPool's accepted tradeoff.
8
+ *
9
+ * @internal
10
+ */
11
+ /** Allocate a fresh unique integer id for a Field. */
12
+ export declare function allocateFieldId(): number;
13
+ /** Current id count — the exclusive upper bound of allocated ids.
14
+ * Runtime typed arrays size to at least this. @internal */
15
+ export declare function fieldIdCount(): number;
16
+ /** Reset for tests. @internal
17
+ *
18
+ * WARNING: Only safe to call when no live `Field` objects exist
19
+ * anywhere — the `FIELD_REGISTRY` WeakMap in `grammar.ts` is NOT
20
+ * cleared, so any `Field` retained across this call still holds
21
+ * its old id. Newly-allocated fields will then collide with retained
22
+ * ids, aliasing entries in the runtime's typed-array storage. The
23
+ * standard test harness creates fresh `Node`s per test, so retained
24
+ * cross-test references are the only way to hit this; don't introduce
25
+ * them.
26
+ */
27
+ export declare function _resetFieldIdsForTesting(): void;
28
+ //# sourceMappingURL=field-id-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-id-pool.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/field-id-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,sDAAsD;AACtD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}