@canvus/core 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-mount.js","sourceRoot":"","sources":["../src/shadow-mount.ts"],"names":[],"mappings":"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"}
package/dist/tree.d.ts ADDED
@@ -0,0 +1,134 @@
1
+ import type { Rect, ResolvedNode } from "./types.js";
2
+ /**
3
+ * In-memory tree structure backed by a flat `Map` with
4
+ * parent/child adjacency encoded in each `ResolvedNode`.
5
+ *
6
+ * Designed for O(1) lookup by ID and O(children) traversal.
7
+ * The tree invariant is maintained by the mutation functions
8
+ * in this module — never modify `parentId` / `childIds`
9
+ * directly on the nodes.
10
+ */
11
+ export declare class NodeTree {
12
+ private readonly nodes;
13
+ /** Returns a node by ID, or `undefined` if not found. */
14
+ get(id: string): ResolvedNode | undefined;
15
+ /** Returns whether a node with the given ID exists. */
16
+ has(id: string): boolean;
17
+ /** Returns the total number of nodes in the tree. */
18
+ get size(): number;
19
+ /** Iterates all nodes (unordered). */
20
+ values(): IterableIterator<ResolvedNode>;
21
+ /** Iterates all [id, node] entries. */
22
+ entries(): IterableIterator<[string, ResolvedNode]>;
23
+ /** Returns all root-level nodes (parentId === null), in insertion order. */
24
+ getRoots(): ResolvedNode[];
25
+ /** Returns the IDs of all root-level nodes. */
26
+ getRootIds(): string[];
27
+ /**
28
+ * Adds a node to the tree.
29
+ *
30
+ * If `parentId` is set and the parent exists, the node is
31
+ * appended to the parent's `childIds` (or inserted at `index`).
32
+ * The node's `depth` is automatically computed.
33
+ *
34
+ * @param node - The resolved node to add.
35
+ * @param index - Optional insertion index within the parent's
36
+ * children. Defaults to appending at the end.
37
+ * @throws If a node with the same ID already exists.
38
+ * @throws If the specified parent does not exist.
39
+ */
40
+ addNode(node: ResolvedNode, index?: number): void;
41
+ /**
42
+ * Removes a node and all its descendants from the tree.
43
+ *
44
+ * Also removes the node from its parent's `childIds`.
45
+ *
46
+ * @returns Array of all removed node IDs (including descendants).
47
+ */
48
+ removeNode(id: string): string[];
49
+ /**
50
+ * Moves a node from its current parent to a new parent
51
+ * at the specified index.
52
+ *
53
+ * Handles:
54
+ * - Removing from old parent's `childIds`
55
+ * - Adding to new parent's `childIds` at `index`
56
+ * - Recursively updating `depth` for the moved subtree
57
+ * - Preventing circular references (cannot move a node
58
+ * into its own descendant)
59
+ *
60
+ * @param nodeId - The node to move.
61
+ * @param newParentId - The new parent ID, or `null` for root.
62
+ * @param index - Insertion index in the new parent's
63
+ * children. Defaults to appending.
64
+ * @throws If the move would create a cycle.
65
+ */
66
+ reparentNode(nodeId: string, newParentId: string | null, index?: number): void;
67
+ /**
68
+ * Reorders a child within its current parent.
69
+ *
70
+ * @param nodeId - The child node to move.
71
+ * @param newIndex - The new index within the parent's children.
72
+ */
73
+ reorderChild(nodeId: string, newIndex: number): void;
74
+ /** Returns the parent node, or `undefined` for root nodes. */
75
+ getParent(id: string): ResolvedNode | undefined;
76
+ /** Returns all children of a node, in order. */
77
+ getChildren(id: string): ResolvedNode[];
78
+ /** Returns sibling nodes (same parent, excluding self). */
79
+ getSiblings(id: string): ResolvedNode[];
80
+ /**
81
+ * Returns the ancestor chain from the node up to the root.
82
+ * First element is the immediate parent, last is the root.
83
+ */
84
+ getAncestors(id: string): ResolvedNode[];
85
+ /**
86
+ * Returns the full path from root to node.
87
+ * First element is the root ancestor, last is the node itself.
88
+ */
89
+ getPath(id: string): ResolvedNode[];
90
+ /** Returns all descendant node IDs (recursive children). */
91
+ getDescendantIds(id: string): string[];
92
+ /** Returns all descendant nodes (recursive children), depth-first. */
93
+ getDescendants(id: string): ResolvedNode[];
94
+ /**
95
+ * Returns whether `ancestorId` is an ancestor of `descendantId`.
96
+ */
97
+ isAncestor(ancestorId: string, descendantId: string): boolean;
98
+ /**
99
+ * Returns the child index of a node within its parent's children.
100
+ * Returns `-1` for root nodes or if the node is not found.
101
+ */
102
+ getChildIndex(id: string): number;
103
+ /**
104
+ * Returns all nodes in depth-first order.
105
+ * This is the standard rendering order: parents before children.
106
+ */
107
+ flatten(): ResolvedNode[];
108
+ /**
109
+ * Returns all nodes in reverse depth-first order.
110
+ * This is the hit-testing order: deepest children first.
111
+ */
112
+ flattenReverse(): ResolvedNode[];
113
+ /** Returns whether a node has any children, or is styled as a layout container. */
114
+ isContainer(id: string): boolean;
115
+ /** Returns whether a node is a leaf (no children). */
116
+ isLeaf(id: string): boolean;
117
+ /** Returns whether a node is at the root level. */
118
+ isRoot(id: string): boolean;
119
+ /** Clears all nodes from the tree. */
120
+ clear(): void;
121
+ /**
122
+ * Returns a debug snapshot of the tree structure as a
123
+ * human-readable indented string.
124
+ */
125
+ toDebugString(): string;
126
+ }
127
+ /**
128
+ * Computes the aggregate bounding box of a set of nodes.
129
+ * Returns `null` if no nodes have measured rects.
130
+ */
131
+ export declare function computeAggregateBounds(nodes: ReadonlyArray<Readonly<{
132
+ currentRect: Rect | null;
133
+ }>>): Rect | null;
134
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIrD;;;;;;;;GAQG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAIzD,yDAAyD;IACzD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,uDAAuD;IACvD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,qDAAqD;IACrD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,sCAAsC;IACtC,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC;IAIxC,uCAAuC;IACvC,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAMnD,4EAA4E;IAC5E,QAAQ,IAAI,YAAY,EAAE;IAQ1B,+CAA+C;IAC/C,UAAU,IAAI,MAAM,EAAE;IAMtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAgCjD;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IA2BhC;;;;;;;;;;;;;;;;OAgBG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAgD9E;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkBpD,8DAA8D;IAC9D,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAM/C,gDAAgD;IAChD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAQvC,2DAA2D;IAC3D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAkBvC;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAcxC;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAQnC,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAItC,sEAAsE;IACtE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE;IAM1C;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAI7D;;;OAGG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAYjC;;;OAGG;IACH,OAAO,IAAI,YAAY,EAAE;IAmBzB;;;OAGG;IACH,cAAc,IAAI,YAAY,EAAE;IAMhC,mFAAmF;IACnF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA0BhC,sDAAsD;IACtD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI3B,mDAAmD;IACnD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAO3B,sCAAsC;IACtC,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,aAAa,IAAI,MAAM;CAsBxB;AAwDD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;IAAE,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,GAC3D,IAAI,GAAG,IAAI,CAuBb"}
package/dist/tree.js ADDED
@@ -0,0 +1,458 @@
1
+ // ─────────────────────────────────────────────────────────────
2
+ // canvus/src/tree.ts
3
+ // Node Tree Model — Parent-child traversal, manipulation, and
4
+ // structural query utilities for the nested DOM hierarchy.
5
+ //
6
+ // All functions are pure (no side effects, no DOM access).
7
+ // They operate on the `ResolvedNode` type from types.ts.
8
+ // ─────────────────────────────────────────────────────────────
9
+ // ── Node Tree ───────────────────────────────────────────────
10
+ /**
11
+ * In-memory tree structure backed by a flat `Map` with
12
+ * parent/child adjacency encoded in each `ResolvedNode`.
13
+ *
14
+ * Designed for O(1) lookup by ID and O(children) traversal.
15
+ * The tree invariant is maintained by the mutation functions
16
+ * in this module — never modify `parentId` / `childIds`
17
+ * directly on the nodes.
18
+ */
19
+ export class NodeTree {
20
+ nodes = new Map();
21
+ // ── Accessors ─────────────────────────────────
22
+ /** Returns a node by ID, or `undefined` if not found. */
23
+ get(id) {
24
+ return this.nodes.get(id);
25
+ }
26
+ /** Returns whether a node with the given ID exists. */
27
+ has(id) {
28
+ return this.nodes.has(id);
29
+ }
30
+ /** Returns the total number of nodes in the tree. */
31
+ get size() {
32
+ return this.nodes.size;
33
+ }
34
+ /** Iterates all nodes (unordered). */
35
+ values() {
36
+ return this.nodes.values();
37
+ }
38
+ /** Iterates all [id, node] entries. */
39
+ entries() {
40
+ return this.nodes.entries();
41
+ }
42
+ // ── Root Nodes ────────────────────────────────
43
+ /** Returns all root-level nodes (parentId === null), in insertion order. */
44
+ getRoots() {
45
+ const roots = [];
46
+ for (const node of this.nodes.values()) {
47
+ if (node.parentId === null)
48
+ roots.push(node);
49
+ }
50
+ return roots;
51
+ }
52
+ /** Returns the IDs of all root-level nodes. */
53
+ getRootIds() {
54
+ return this.getRoots().map(n => n.id);
55
+ }
56
+ // ── Insertion ─────────────────────────────────
57
+ /**
58
+ * Adds a node to the tree.
59
+ *
60
+ * If `parentId` is set and the parent exists, the node is
61
+ * appended to the parent's `childIds` (or inserted at `index`).
62
+ * The node's `depth` is automatically computed.
63
+ *
64
+ * @param node - The resolved node to add.
65
+ * @param index - Optional insertion index within the parent's
66
+ * children. Defaults to appending at the end.
67
+ * @throws If a node with the same ID already exists.
68
+ * @throws If the specified parent does not exist.
69
+ */
70
+ addNode(node, index) {
71
+ if (this.nodes.has(node.id)) {
72
+ throw new Error(`[NodeTree] Node "${node.id}" already exists.`);
73
+ }
74
+ // Validate parent.
75
+ if (node.parentId !== null) {
76
+ const parent = this.nodes.get(node.parentId);
77
+ if (!parent) {
78
+ throw new Error(`[NodeTree] Parent "${node.parentId}" does not exist.`);
79
+ }
80
+ // Set depth relative to parent.
81
+ node.depth = parent.depth + 1;
82
+ // Insert into parent's child list.
83
+ if (index !== undefined && index >= 0 && index < parent.childIds.length) {
84
+ parent.childIds.splice(index, 0, node.id);
85
+ }
86
+ else {
87
+ parent.childIds.push(node.id);
88
+ }
89
+ }
90
+ else {
91
+ node.depth = 0;
92
+ }
93
+ this.nodes.set(node.id, node);
94
+ }
95
+ /**
96
+ * Removes a node and all its descendants from the tree.
97
+ *
98
+ * Also removes the node from its parent's `childIds`.
99
+ *
100
+ * @returns Array of all removed node IDs (including descendants).
101
+ */
102
+ removeNode(id) {
103
+ const node = this.nodes.get(id);
104
+ if (!node)
105
+ return [];
106
+ // Collect all descendants (depth-first).
107
+ const removed = getDescendantIds(id, this.nodes);
108
+ removed.push(id);
109
+ // Remove from parent's child list.
110
+ if (node.parentId !== null) {
111
+ const parent = this.nodes.get(node.parentId);
112
+ if (parent) {
113
+ const idx = parent.childIds.indexOf(id);
114
+ if (idx !== -1)
115
+ parent.childIds.splice(idx, 1);
116
+ }
117
+ }
118
+ // Delete all removed nodes from the map.
119
+ for (const rid of removed) {
120
+ this.nodes.delete(rid);
121
+ }
122
+ return removed;
123
+ }
124
+ // ── Reparenting ───────────────────────────────
125
+ /**
126
+ * Moves a node from its current parent to a new parent
127
+ * at the specified index.
128
+ *
129
+ * Handles:
130
+ * - Removing from old parent's `childIds`
131
+ * - Adding to new parent's `childIds` at `index`
132
+ * - Recursively updating `depth` for the moved subtree
133
+ * - Preventing circular references (cannot move a node
134
+ * into its own descendant)
135
+ *
136
+ * @param nodeId - The node to move.
137
+ * @param newParentId - The new parent ID, or `null` for root.
138
+ * @param index - Insertion index in the new parent's
139
+ * children. Defaults to appending.
140
+ * @throws If the move would create a cycle.
141
+ */
142
+ reparentNode(nodeId, newParentId, index) {
143
+ const node = this.nodes.get(nodeId);
144
+ if (!node)
145
+ throw new Error(`[NodeTree] Node "${nodeId}" not found.`);
146
+ // ── Cycle prevention ──────────────────────────
147
+ if (newParentId !== null) {
148
+ if (nodeId === newParentId) {
149
+ throw new Error(`[NodeTree] Cannot parent "${nodeId}" to itself.`);
150
+ }
151
+ if (isAncestor(nodeId, newParentId, this.nodes)) {
152
+ throw new Error(`[NodeTree] Cannot move "${nodeId}" into its own descendant "${newParentId}".`);
153
+ }
154
+ }
155
+ // ── Remove from old parent ────────────────────
156
+ if (node.parentId !== null) {
157
+ const oldParent = this.nodes.get(node.parentId);
158
+ if (oldParent) {
159
+ const idx = oldParent.childIds.indexOf(nodeId);
160
+ if (idx !== -1)
161
+ oldParent.childIds.splice(idx, 1);
162
+ }
163
+ }
164
+ // ── Insert into new parent ────────────────────
165
+ node.parentId = newParentId;
166
+ if (newParentId !== null) {
167
+ const newParent = this.nodes.get(newParentId);
168
+ if (!newParent) {
169
+ throw new Error(`[NodeTree] New parent "${newParentId}" not found.`);
170
+ }
171
+ if (index !== undefined && index >= 0 && index <= newParent.childIds.length) {
172
+ newParent.childIds.splice(index, 0, nodeId);
173
+ }
174
+ else {
175
+ newParent.childIds.push(nodeId);
176
+ }
177
+ // Update depth for moved subtree.
178
+ updateDepthRecursive(nodeId, newParent.depth + 1, this.nodes);
179
+ }
180
+ else {
181
+ // Moving to root level.
182
+ updateDepthRecursive(nodeId, 0, this.nodes);
183
+ }
184
+ }
185
+ /**
186
+ * Reorders a child within its current parent.
187
+ *
188
+ * @param nodeId - The child node to move.
189
+ * @param newIndex - The new index within the parent's children.
190
+ */
191
+ reorderChild(nodeId, newIndex) {
192
+ const node = this.nodes.get(nodeId);
193
+ if (!node || node.parentId === null)
194
+ return;
195
+ const parent = this.nodes.get(node.parentId);
196
+ if (!parent)
197
+ return;
198
+ const oldIndex = parent.childIds.indexOf(nodeId);
199
+ if (oldIndex === -1)
200
+ return;
201
+ // Remove and re-insert.
202
+ parent.childIds.splice(oldIndex, 1);
203
+ const clampedIndex = Math.min(newIndex, parent.childIds.length);
204
+ parent.childIds.splice(clampedIndex, 0, nodeId);
205
+ }
206
+ // ── Query ─────────────────────────────────────
207
+ /** Returns the parent node, or `undefined` for root nodes. */
208
+ getParent(id) {
209
+ const node = this.nodes.get(id);
210
+ if (!node?.parentId)
211
+ return undefined;
212
+ return this.nodes.get(node.parentId);
213
+ }
214
+ /** Returns all children of a node, in order. */
215
+ getChildren(id) {
216
+ const node = this.nodes.get(id);
217
+ if (!node)
218
+ return [];
219
+ return node.childIds
220
+ .map(cid => this.nodes.get(cid))
221
+ .filter((n) => n !== undefined);
222
+ }
223
+ /** Returns sibling nodes (same parent, excluding self). */
224
+ getSiblings(id) {
225
+ const node = this.nodes.get(id);
226
+ if (!node)
227
+ return [];
228
+ if (node.parentId === null) {
229
+ // Root-level siblings.
230
+ return this.getRoots().filter(n => n.id !== id);
231
+ }
232
+ const parent = this.nodes.get(node.parentId);
233
+ if (!parent)
234
+ return [];
235
+ return parent.childIds
236
+ .filter(cid => cid !== id)
237
+ .map(cid => this.nodes.get(cid))
238
+ .filter((n) => n !== undefined);
239
+ }
240
+ /**
241
+ * Returns the ancestor chain from the node up to the root.
242
+ * First element is the immediate parent, last is the root.
243
+ */
244
+ getAncestors(id) {
245
+ const chain = [];
246
+ let current = this.nodes.get(id);
247
+ while (current?.parentId) {
248
+ const parent = this.nodes.get(current.parentId);
249
+ if (!parent)
250
+ break;
251
+ chain.push(parent);
252
+ current = parent;
253
+ }
254
+ return chain;
255
+ }
256
+ /**
257
+ * Returns the full path from root to node.
258
+ * First element is the root ancestor, last is the node itself.
259
+ */
260
+ getPath(id) {
261
+ const ancestors = this.getAncestors(id);
262
+ ancestors.reverse();
263
+ const node = this.nodes.get(id);
264
+ if (node)
265
+ ancestors.push(node);
266
+ return ancestors;
267
+ }
268
+ /** Returns all descendant node IDs (recursive children). */
269
+ getDescendantIds(id) {
270
+ return getDescendantIds(id, this.nodes);
271
+ }
272
+ /** Returns all descendant nodes (recursive children), depth-first. */
273
+ getDescendants(id) {
274
+ return this.getDescendantIds(id)
275
+ .map(did => this.nodes.get(did))
276
+ .filter((n) => n !== undefined);
277
+ }
278
+ /**
279
+ * Returns whether `ancestorId` is an ancestor of `descendantId`.
280
+ */
281
+ isAncestor(ancestorId, descendantId) {
282
+ return isAncestor(ancestorId, descendantId, this.nodes);
283
+ }
284
+ /**
285
+ * Returns the child index of a node within its parent's children.
286
+ * Returns `-1` for root nodes or if the node is not found.
287
+ */
288
+ getChildIndex(id) {
289
+ const node = this.nodes.get(id);
290
+ if (!node?.parentId)
291
+ return -1;
292
+ const parent = this.nodes.get(node.parentId);
293
+ if (!parent)
294
+ return -1;
295
+ return parent.childIds.indexOf(id);
296
+ }
297
+ // ── Flattening ────────────────────────────────
298
+ /**
299
+ * Returns all nodes in depth-first order.
300
+ * This is the standard rendering order: parents before children.
301
+ */
302
+ flatten() {
303
+ const result = [];
304
+ const roots = this.getRoots();
305
+ const walk = (node) => {
306
+ result.push(node);
307
+ for (const childId of node.childIds) {
308
+ const child = this.nodes.get(childId);
309
+ if (child)
310
+ walk(child);
311
+ }
312
+ };
313
+ for (const root of roots) {
314
+ walk(root);
315
+ }
316
+ return result;
317
+ }
318
+ /**
319
+ * Returns all nodes in reverse depth-first order.
320
+ * This is the hit-testing order: deepest children first.
321
+ */
322
+ flattenReverse() {
323
+ return this.flatten().reverse();
324
+ }
325
+ // ── Container Queries ─────────────────────────
326
+ /** Returns whether a node has any children, or is styled as a layout container. */
327
+ isContainer(id) {
328
+ const node = this.nodes.get(id);
329
+ if (!node)
330
+ return false;
331
+ if (node.childIds.length > 0 ||
332
+ node.layoutMode === "flex" ||
333
+ node.layoutMode === "grid" ||
334
+ node.layoutMode === "inline-flex" ||
335
+ node.layoutMode === "inline-grid") {
336
+ return true;
337
+ }
338
+ if (node.rawMarkup) {
339
+ const match = node.rawMarkup.trim().match(/^<([a-zA-Z0-9-]+)/);
340
+ if (match && match[1]) {
341
+ const tag = match[1].toLowerCase();
342
+ const nonContainerTags = new Set([
343
+ "p", "h1", "h2", "h3", "h4", "h5", "h6", "span", "img", "br", "hr",
344
+ "input", "button", "textarea", "select", "a", "strong", "em", "code", "pre"
345
+ ]);
346
+ return !nonContainerTags.has(tag);
347
+ }
348
+ }
349
+ return false;
350
+ }
351
+ /** Returns whether a node is a leaf (no children). */
352
+ isLeaf(id) {
353
+ return !this.isContainer(id);
354
+ }
355
+ /** Returns whether a node is at the root level. */
356
+ isRoot(id) {
357
+ const node = this.nodes.get(id);
358
+ return node ? node.parentId === null : false;
359
+ }
360
+ // ── Bulk Operations ───────────────────────────
361
+ /** Clears all nodes from the tree. */
362
+ clear() {
363
+ this.nodes.clear();
364
+ }
365
+ /**
366
+ * Returns a debug snapshot of the tree structure as a
367
+ * human-readable indented string.
368
+ */
369
+ toDebugString() {
370
+ const lines = [];
371
+ const walk = (node, indent) => {
372
+ const pad = " ".repeat(indent);
373
+ const mode = node.layoutMode ? ` [${node.layoutMode}]` : "";
374
+ const rect = node.currentRect
375
+ ? ` (${node.currentRect.x},${node.currentRect.y} ${node.currentRect.width}×${node.currentRect.height})`
376
+ : " (unmeasured)";
377
+ lines.push(`${pad}${node.id}${mode}${rect}`);
378
+ for (const childId of node.childIds) {
379
+ const child = this.nodes.get(childId);
380
+ if (child)
381
+ walk(child, indent + 1);
382
+ }
383
+ };
384
+ for (const root of this.getRoots()) {
385
+ walk(root, 0);
386
+ }
387
+ return lines.join("\n");
388
+ }
389
+ }
390
+ // ── Pure Helper Functions ───────────────────────────────────
391
+ /**
392
+ * Recursively collects all descendant IDs of a node.
393
+ * Does NOT include the node itself.
394
+ */
395
+ function getDescendantIds(id, nodes) {
396
+ const result = [];
397
+ const node = nodes.get(id);
398
+ if (!node)
399
+ return result;
400
+ for (const childId of node.childIds) {
401
+ result.push(childId);
402
+ result.push(...getDescendantIds(childId, nodes));
403
+ }
404
+ return result;
405
+ }
406
+ /**
407
+ * Checks whether `candidateAncestorId` is an ancestor of `descendantId`.
408
+ */
409
+ function isAncestor(candidateAncestorId, descendantId, nodes) {
410
+ let current = nodes.get(descendantId);
411
+ while (current?.parentId) {
412
+ if (current.parentId === candidateAncestorId)
413
+ return true;
414
+ current = nodes.get(current.parentId);
415
+ }
416
+ return false;
417
+ }
418
+ /**
419
+ * Recursively updates the `depth` field for a node and all its descendants.
420
+ */
421
+ function updateDepthRecursive(nodeId, newDepth, nodes) {
422
+ const node = nodes.get(nodeId);
423
+ if (!node)
424
+ return;
425
+ node.depth = newDepth;
426
+ for (const childId of node.childIds) {
427
+ updateDepthRecursive(childId, newDepth + 1, nodes);
428
+ }
429
+ }
430
+ // ── Aggregate Bounds ────────────────────────────────────────
431
+ /**
432
+ * Computes the aggregate bounding box of a set of nodes.
433
+ * Returns `null` if no nodes have measured rects.
434
+ */
435
+ export function computeAggregateBounds(nodes) {
436
+ let minX = Infinity;
437
+ let minY = Infinity;
438
+ let maxX = -Infinity;
439
+ let maxY = -Infinity;
440
+ for (const node of nodes) {
441
+ if (!node.currentRect)
442
+ continue;
443
+ const r = node.currentRect;
444
+ minX = Math.min(minX, r.x);
445
+ minY = Math.min(minY, r.y);
446
+ maxX = Math.max(maxX, r.x + r.width);
447
+ maxY = Math.max(maxY, r.y + r.height);
448
+ }
449
+ if (!isFinite(minX))
450
+ return null;
451
+ return {
452
+ x: minX,
453
+ y: minY,
454
+ width: maxX - minX,
455
+ height: maxY - minY,
456
+ };
457
+ }
458
+ //# sourceMappingURL=tree.js.map