@sectile/virtual 0.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/extent-index.d.ts +40 -0
  4. package/dist/extent-index.d.ts.map +1 -0
  5. package/dist/extent-index.js +388 -0
  6. package/dist/extent-index.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/internal/foundation.d.ts +6 -0
  12. package/dist/internal/foundation.d.ts.map +1 -0
  13. package/dist/internal/foundation.js +28 -0
  14. package/dist/internal/foundation.js.map +1 -0
  15. package/dist/internal/machine.d.ts +4 -0
  16. package/dist/internal/machine.d.ts.map +1 -0
  17. package/dist/internal/machine.js +8 -0
  18. package/dist/internal/machine.js.map +1 -0
  19. package/dist/internal/track.d.ts +14 -0
  20. package/dist/internal/track.d.ts.map +1 -0
  21. package/dist/internal/track.js +72 -0
  22. package/dist/internal/track.js.map +1 -0
  23. package/dist/layout.d.ts +72 -0
  24. package/dist/layout.d.ts.map +1 -0
  25. package/dist/layout.js +75 -0
  26. package/dist/layout.js.map +1 -0
  27. package/dist/linear-layout.d.ts +61 -0
  28. package/dist/linear-layout.d.ts.map +1 -0
  29. package/dist/linear-layout.js +192 -0
  30. package/dist/linear-layout.js.map +1 -0
  31. package/dist/masonry-layout.d.ts +66 -0
  32. package/dist/masonry-layout.d.ts.map +1 -0
  33. package/dist/masonry-layout.js +270 -0
  34. package/dist/masonry-layout.js.map +1 -0
  35. package/dist/spatial-layout.d.ts +48 -0
  36. package/dist/spatial-layout.d.ts.map +1 -0
  37. package/dist/spatial-layout.js +237 -0
  38. package/dist/spatial-layout.js.map +1 -0
  39. package/dist/track-grid-layout.d.ts +62 -0
  40. package/dist/track-grid-layout.d.ts.map +1 -0
  41. package/dist/track-grid-layout.js +263 -0
  42. package/dist/track-grid-layout.js.map +1 -0
  43. package/package.json +78 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jinyongp
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @sectile/virtual
2
+
3
+ Renderer-neutral virtualization primitives and layout engines for dynamic content.
4
+
5
+ Import runtime APIs from explicit subpaths such as `@sectile/virtual/extent-index`, `@sectile/virtual/linear-layout`, `@sectile/virtual/masonry-layout`, `@sectile/virtual/spatial-layout`, and `@sectile/virtual/track-grid-layout`.
@@ -0,0 +1,40 @@
1
+ import type { Result } from '@sectile/core';
2
+ export type Extent = {
3
+ readonly kind: 'exact';
4
+ readonly value: number;
5
+ } | {
6
+ readonly kind: 'estimated';
7
+ readonly value: number;
8
+ } | {
9
+ readonly kind: 'unknown';
10
+ readonly fallback: number;
11
+ };
12
+ export interface ExtentUpdate {
13
+ readonly index: number;
14
+ readonly extent: Extent;
15
+ }
16
+ export interface ExtentLocation {
17
+ readonly index: number;
18
+ readonly itemOffset: number;
19
+ readonly offsetWithin: number;
20
+ readonly extent: Extent;
21
+ }
22
+ export interface ExtentIndexOptions {
23
+ readonly maxItems?: number;
24
+ }
25
+ export interface ExtentIndex {
26
+ readonly size: number;
27
+ readonly totalExtent: number;
28
+ extentAt(index: number): Extent | null;
29
+ slice(start: number, end: number): readonly Extent[] | null;
30
+ offsetAt(index: number): number | null;
31
+ indexAtOffset(offset: number): number | null;
32
+ locateOffset(offset: number): ExtentLocation | null;
33
+ update(updates: readonly ExtentUpdate[]): Result<ExtentIndex>;
34
+ splice(start: number, deleteCount: number, inserted?: readonly Extent[]): Result<ExtentIndex>;
35
+ move(from: number, to: number, count?: number): Result<ExtentIndex>;
36
+ }
37
+ export declare function createExtentIndex(extents: readonly Extent[], options?: ExtentIndexOptions): ExtentIndex;
38
+ export declare function tryCreateExtentIndex(extents: readonly Extent[], options?: ExtentIndexOptions): Result<ExtentIndex>;
39
+ export type { Result } from '@sectile/core';
40
+ //# sourceMappingURL=extent-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extent-index.d.ts","sourceRoot":"","sources":["../src/extent-index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,MAAM,MAAM,GACd;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9F,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;CACrE;AAqBD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAEb;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAAC,WAAW,CAAC,CAarB;AAsZD,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,388 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { fail, ok, validateMaxItems } from './internal/foundation.js';
3
+ const LEAF_SIZE = 64;
4
+ export function createExtentIndex(extents, options = {}) {
5
+ return unwrap(tryCreateExtentIndex(extents, options));
6
+ }
7
+ export function tryCreateExtentIndex(extents, options = {}) {
8
+ const maxItems = options.maxItems ?? 1_000_000;
9
+ const ceilingError = validateMaxItems(maxItems);
10
+ if (ceilingError !== null)
11
+ return { ok: false, error: ceilingError };
12
+ if (extents.length > maxItems) {
13
+ return fail('resource-rejection', 'extent-index-ceiling-exceeded', 'Extent index exceeds maxItems.', {
14
+ size: extents.length,
15
+ maxItems,
16
+ });
17
+ }
18
+ const validated = validateExtents(extents);
19
+ if (!validated.ok)
20
+ return validated;
21
+ return ok(createIndex(build(validated.value), maxItems));
22
+ }
23
+ function createIndex(root, maxItems) {
24
+ return Object.freeze({
25
+ size: root?.size ?? 0,
26
+ totalExtent: root?.sum ?? 0,
27
+ extentAt: (index) => extentAt(root, index),
28
+ slice: (start, end) => sliceExtents(root, start, end),
29
+ offsetAt: (index) => offsetAt(root, index),
30
+ indexAtOffset: (offset) => locateOffset(root, offset)?.index ?? null,
31
+ locateOffset: (offset) => locateOffset(root, offset),
32
+ update: (updates) => updateIndex(root, maxItems, updates),
33
+ splice: (start, deleteCount, inserted = []) => spliceIndex(root, maxItems, start, deleteCount, inserted),
34
+ move: (from, to, count = 1) => (moveIndex(root, maxItems, from, to, count)),
35
+ });
36
+ }
37
+ function updateIndex(root, maxItems, updates) {
38
+ const size = root?.size ?? 0;
39
+ let strictlyIncreasing = true;
40
+ const indices = [];
41
+ const extents = [];
42
+ let previousIndex = -1;
43
+ for (const update of updates) {
44
+ if (!Number.isSafeInteger(update.index) || update.index < 0 || update.index >= size) {
45
+ return fail('transition-rejection', 'extent-index-update-invalid', 'Extent update index is outside the domain.', {
46
+ index: update.index,
47
+ size,
48
+ });
49
+ }
50
+ const validated = validateExtent(update.extent);
51
+ if (!validated.ok)
52
+ return validated;
53
+ if (update.index <= previousIndex)
54
+ strictlyIncreasing = false;
55
+ indices.push(update.index);
56
+ extents.push(validated.value);
57
+ previousIndex = update.index;
58
+ }
59
+ if (indices.length === 0 || root === null)
60
+ return ok(createIndex(root, maxItems));
61
+ if (!strictlyIncreasing) {
62
+ const byIndex = new Map();
63
+ for (let update = 0; update < indices.length; update += 1) {
64
+ byIndex.set(indices[update], extents[update]);
65
+ }
66
+ const sorted = [...byIndex].sort(([left], [right]) => left - right);
67
+ indices.length = 0;
68
+ extents.length = 0;
69
+ for (const [index, extent] of sorted) {
70
+ indices.push(index);
71
+ extents.push(extent);
72
+ }
73
+ }
74
+ const next = isContiguous(indices)
75
+ ? updateContiguousNode(root, 0, indices[0], extents)
76
+ : updateNode(root, 0, indices, extents, 0, indices.length);
77
+ return ok(createIndex(next, maxItems));
78
+ }
79
+ function spliceIndex(root, maxItems, start, deleteCount, inserted) {
80
+ const size = root?.size ?? 0;
81
+ if (!Number.isSafeInteger(start)
82
+ || !Number.isSafeInteger(deleteCount)
83
+ || start < 0
84
+ || deleteCount < 0
85
+ || start > size
86
+ || deleteCount > size - start) {
87
+ return fail('transition-rejection', 'extent-index-splice-invalid', 'Extent splice range is invalid.', {
88
+ start,
89
+ deleteCount,
90
+ size,
91
+ });
92
+ }
93
+ if (inserted.length > maxItems - (size - deleteCount)) {
94
+ return fail('resource-rejection', 'extent-index-ceiling-exceeded', 'Extent splice exceeds maxItems.', {
95
+ size: size - deleteCount + inserted.length,
96
+ maxItems,
97
+ });
98
+ }
99
+ const validated = validateExtents(inserted);
100
+ if (!validated.ok)
101
+ return validated;
102
+ const [before, remainder] = split(root, start);
103
+ const [, after] = split(remainder, deleteCount);
104
+ return ok(createIndex(join(join(before, build(validated.value)), after), maxItems));
105
+ }
106
+ function moveIndex(root, maxItems, from, to, count) {
107
+ const size = root?.size ?? 0;
108
+ if (!Number.isSafeInteger(from)
109
+ || !Number.isSafeInteger(to)
110
+ || !Number.isSafeInteger(count)
111
+ || from < 0
112
+ || count < 0
113
+ || from > size
114
+ || count > size - from
115
+ || to < 0
116
+ || to > size - count) {
117
+ return fail('transition-rejection', 'extent-index-move-invalid', 'Extent move must identify a valid source and post-removal destination.', { from, to, count, size });
118
+ }
119
+ if (root === null || count === 0 || from === to)
120
+ return ok(createIndex(root, maxItems));
121
+ const [before, remainder] = split(root, from);
122
+ const [moved, after] = split(remainder, count);
123
+ const withoutMoved = join(before, after);
124
+ const [destinationBefore, destinationAfter] = split(withoutMoved, to);
125
+ return ok(createIndex(join(join(destinationBefore, moved), destinationAfter), maxItems));
126
+ }
127
+ function extentAt(root, index) {
128
+ if (root === null || !Number.isSafeInteger(index) || index < 0 || index >= root.size)
129
+ return null;
130
+ let node = root;
131
+ let local = index;
132
+ while (node.kind === 'branch') {
133
+ if (local < node.left.size)
134
+ node = node.left;
135
+ else {
136
+ local -= node.left.size;
137
+ node = node.right;
138
+ }
139
+ }
140
+ return node.entries[local] ?? null;
141
+ }
142
+ function sliceExtents(root, start, end) {
143
+ const size = root?.size ?? 0;
144
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 0 || end < start || end > size)
145
+ return null;
146
+ if (start === end || root === null)
147
+ return Object.freeze([]);
148
+ const output = [];
149
+ collectExtents(root, 0, start, end, output);
150
+ return Object.freeze(output);
151
+ }
152
+ function collectExtents(node, nodeStart, start, end, output) {
153
+ const nodeEnd = nodeStart + node.size;
154
+ if (end <= nodeStart || start >= nodeEnd)
155
+ return;
156
+ if (node.kind === 'leaf') {
157
+ output.push(...node.entries.slice(Math.max(0, start - nodeStart), Math.min(node.size, end - nodeStart)));
158
+ return;
159
+ }
160
+ collectExtents(node.left, nodeStart, start, end, output);
161
+ collectExtents(node.right, nodeStart + node.left.size, start, end, output);
162
+ }
163
+ function offsetAt(root, index) {
164
+ const size = root?.size ?? 0;
165
+ if (!Number.isSafeInteger(index) || index < 0 || index > size)
166
+ return null;
167
+ if (root === null || index === 0)
168
+ return 0;
169
+ if (index === size)
170
+ return root.sum;
171
+ let node = root;
172
+ let local = index;
173
+ let offset = 0;
174
+ while (node.kind === 'branch') {
175
+ if (local <= node.left.size)
176
+ node = node.left;
177
+ else {
178
+ local -= node.left.size;
179
+ offset += node.left.sum;
180
+ node = node.right;
181
+ }
182
+ }
183
+ for (let current = 0; current < local; current += 1)
184
+ offset += valueOf(node.entries[current]);
185
+ return offset;
186
+ }
187
+ function locateOffset(root, offset) {
188
+ if (root === null || !Number.isFinite(offset) || offset < 0 || offset >= root.sum)
189
+ return null;
190
+ let node = root;
191
+ let localOffset = offset;
192
+ let base = 0;
193
+ while (node.kind === 'branch') {
194
+ if (localOffset < node.left.sum)
195
+ node = node.left;
196
+ else {
197
+ localOffset -= node.left.sum;
198
+ base += node.left.size;
199
+ node = node.right;
200
+ }
201
+ }
202
+ for (let index = 0; index < node.entries.length; index += 1) {
203
+ const entry = node.entries[index];
204
+ const extent = valueOf(entry);
205
+ if (localOffset < extent)
206
+ return Object.freeze({ index: base + index, itemOffset: offset - localOffset, offsetWithin: localOffset, extent: entry });
207
+ localOffset -= extent;
208
+ }
209
+ return null;
210
+ }
211
+ function updateNode(node, start, indices, extents, from, to) {
212
+ if (from === to)
213
+ return node;
214
+ if (node.kind === 'leaf') {
215
+ let entries = null;
216
+ for (let update = from; update < to; update += 1) {
217
+ const local = indices[update] - start;
218
+ const extent = extents[update];
219
+ if (sameExtent(node.entries[local], extent))
220
+ continue;
221
+ entries ??= [...node.entries];
222
+ entries[local] = extent;
223
+ }
224
+ return entries === null ? node : leaf(entries);
225
+ }
226
+ const boundary = start + node.left.size;
227
+ const middle = lowerBound(indices, boundary, from, to);
228
+ const left = updateNode(node.left, start, indices, extents, from, middle);
229
+ const right = updateNode(node.right, boundary, indices, extents, middle, to);
230
+ return left === node.left && right === node.right ? node : branch(left, right);
231
+ }
232
+ function lowerBound(indices, boundary, from, to) {
233
+ let low = from;
234
+ let high = to;
235
+ while (low < high) {
236
+ const middle = low + Math.floor((high - low) / 2);
237
+ if (indices[middle] < boundary)
238
+ low = middle + 1;
239
+ else
240
+ high = middle;
241
+ }
242
+ return low;
243
+ }
244
+ function updateContiguousNode(node, start, updateStart, extents) {
245
+ const end = start + node.size;
246
+ const updateEnd = updateStart + extents.length;
247
+ if (updateEnd <= start || updateStart >= end)
248
+ return node;
249
+ if (node.kind === 'leaf') {
250
+ let entries = null;
251
+ const first = Math.max(start, updateStart);
252
+ const last = Math.min(end, updateEnd);
253
+ for (let index = first; index < last; index += 1) {
254
+ const local = index - start;
255
+ const extent = extents[index - updateStart];
256
+ if (sameExtent(node.entries[local], extent))
257
+ continue;
258
+ entries ??= [...node.entries];
259
+ entries[local] = extent;
260
+ }
261
+ return entries === null ? node : leaf(entries);
262
+ }
263
+ const boundary = start + node.left.size;
264
+ const left = updateContiguousNode(node.left, start, updateStart, extents);
265
+ const right = updateContiguousNode(node.right, boundary, updateStart, extents);
266
+ return left === node.left && right === node.right ? node : branch(left, right);
267
+ }
268
+ function isContiguous(indices) {
269
+ for (let index = 1; index < indices.length; index += 1) {
270
+ if (indices[index] !== indices[index - 1] + 1)
271
+ return false;
272
+ }
273
+ return true;
274
+ }
275
+ function split(node, index) {
276
+ if (node === null)
277
+ return [null, null];
278
+ if (index === 0)
279
+ return [null, node];
280
+ if (index === node.size)
281
+ return [node, null];
282
+ if (node.kind === 'leaf')
283
+ return [leaf(node.entries.slice(0, index)), leaf(node.entries.slice(index))];
284
+ if (index < node.left.size) {
285
+ const [before, remainder] = split(node.left, index);
286
+ return [before, join(remainder, node.right)];
287
+ }
288
+ const [remainder, after] = split(node.right, index - node.left.size);
289
+ return [join(node.left, remainder), after];
290
+ }
291
+ function join(left, right) {
292
+ if (left === null)
293
+ return right;
294
+ if (right === null)
295
+ return left;
296
+ if (left.kind === 'leaf' && right.kind === 'leaf' && left.size + right.size <= LEAF_SIZE) {
297
+ return leaf([...left.entries, ...right.entries]);
298
+ }
299
+ if (left.height > right.height + 1 && left.kind === 'branch') {
300
+ return balance(left.left, join(left.right, right));
301
+ }
302
+ if (right.height > left.height + 1 && right.kind === 'branch') {
303
+ return balance(join(left, right.left), right.right);
304
+ }
305
+ return branch(left, right);
306
+ }
307
+ function balance(left, right) {
308
+ if (left.height > right.height + 1 && left.kind === 'branch') {
309
+ if (left.right.height > left.left.height && left.right.kind === 'branch') {
310
+ return branch(branch(left.left, left.right.left), branch(left.right.right, right));
311
+ }
312
+ return branch(left.left, branch(left.right, right));
313
+ }
314
+ if (right.height > left.height + 1 && right.kind === 'branch') {
315
+ if (right.left.height > right.right.height && right.left.kind === 'branch') {
316
+ return branch(branch(left, right.left.left), branch(right.left.right, right.right));
317
+ }
318
+ return branch(branch(left, right.left), right.right);
319
+ }
320
+ return branch(left, right);
321
+ }
322
+ function build(entries) {
323
+ if (entries.length === 0)
324
+ return null;
325
+ const leaves = [];
326
+ for (let index = 0; index < entries.length; index += LEAF_SIZE) {
327
+ leaves.push(leaf(entries.slice(index, index + LEAF_SIZE)));
328
+ }
329
+ let nodes = leaves;
330
+ while (nodes.length > 1) {
331
+ const next = [];
332
+ for (let index = 0; index < nodes.length; index += 2) {
333
+ const left = nodes[index];
334
+ const right = nodes[index + 1];
335
+ next.push(right === undefined ? left : branch(left, right));
336
+ }
337
+ nodes = next;
338
+ }
339
+ return nodes[0];
340
+ }
341
+ function leaf(entries) {
342
+ const frozen = Object.freeze([...entries]);
343
+ return Object.freeze({
344
+ kind: 'leaf',
345
+ entries: frozen,
346
+ size: frozen.length,
347
+ sum: frozen.reduce((sum, extent) => sum + valueOf(extent), 0),
348
+ height: 1,
349
+ });
350
+ }
351
+ function branch(left, right) {
352
+ return Object.freeze({
353
+ kind: 'branch',
354
+ left,
355
+ right,
356
+ size: left.size + right.size,
357
+ sum: left.sum + right.sum,
358
+ height: Math.max(left.height, right.height) + 1,
359
+ });
360
+ }
361
+ function validateExtents(extents) {
362
+ const result = [];
363
+ for (const extent of extents) {
364
+ const validated = validateExtent(extent);
365
+ if (!validated.ok)
366
+ return validated;
367
+ result.push(validated.value);
368
+ }
369
+ return ok(Object.freeze(result));
370
+ }
371
+ function validateExtent(extent) {
372
+ const value = extent.kind === 'unknown' ? extent.fallback : extent.value;
373
+ if ((extent.kind !== 'exact' && extent.kind !== 'estimated' && extent.kind !== 'unknown')
374
+ || !Number.isFinite(value)
375
+ || value < 0) {
376
+ return fail('construction', 'extent-invalid', 'Extent must have a non-negative finite effective value.');
377
+ }
378
+ return ok(Object.freeze({ ...extent }));
379
+ }
380
+ function sameExtent(left, right) {
381
+ if (left.kind === 'unknown')
382
+ return right.kind === 'unknown' && left.fallback === right.fallback;
383
+ return right.kind !== 'unknown' && left.kind === right.kind && left.value === right.value;
384
+ }
385
+ function valueOf(extent) {
386
+ return extent.kind === 'unknown' ? extent.fallback : extent.value;
387
+ }
388
+ //# sourceMappingURL=extent-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extent-index.js","sourceRoot":"","sources":["../src/extent-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Type-only package facade. Runtime consumers import a specific subpath. */
2
+ export type * from './extent-index.js';
3
+ export type * from './layout.js';
4
+ export type * from './linear-layout.js';
5
+ export type * from './masonry-layout.js';
6
+ export type * from './spatial-layout.js';
7
+ export type * from './track-grid-layout.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mBAAmB,mBAAmB,CAAC;AACvC,mBAAmB,aAAa,CAAC;AACjC,mBAAmB,oBAAoB,CAAC;AACxC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,qBAAqB,CAAC;AACzC,mBAAmB,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { ErrorClass, Result, SectileError, SectileErrorCode } from '@sectile/core';
2
+ export declare function ok<T>(value: T): Result<T>;
3
+ export declare function fail<T = never, Code extends SectileErrorCode = SectileErrorCode>(errorClass: ErrorClass, code: Code, message: string, details?: Readonly<Record<string, unknown>>): Result<T, Code>;
4
+ export declare function freezeArray<T>(values: readonly T[]): readonly T[];
5
+ export declare function validateMaxItems(value: number): SectileError | null;
6
+ //# sourceMappingURL=foundation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation.d.ts","sourceRoot":"","sources":["../../src/internal/foundation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAExF,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAEzC;AAED,wBAAgB,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,SAAS,gBAAgB,GAAG,gBAAgB,EAC9E,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC1C,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAUjB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAEjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQnE"}
@@ -0,0 +1,28 @@
1
+ export function ok(value) {
2
+ return { ok: true, value };
3
+ }
4
+ export function fail(errorClass, code, message, details) {
5
+ return {
6
+ ok: false,
7
+ error: {
8
+ class: errorClass,
9
+ code,
10
+ message,
11
+ ...(details === undefined ? {} : { details }),
12
+ },
13
+ };
14
+ }
15
+ export function freezeArray(values) {
16
+ return Object.freeze([...values]);
17
+ }
18
+ export function validateMaxItems(value) {
19
+ if (Number.isSafeInteger(value) && value >= 0)
20
+ return null;
21
+ return {
22
+ class: 'construction',
23
+ code: 'invalid-max-items',
24
+ message: 'maxItems must be a non-negative safe integer.',
25
+ details: { maxItems: value },
26
+ };
27
+ }
28
+ //# sourceMappingURL=foundation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../src/internal/foundation.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,UAAsB,EACtB,IAAU,EACV,OAAe,EACf,OAA2C;IAE3C,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,KAAK,EAAE,UAAU;YACjB,IAAI;YACJ,OAAO;YACP,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,MAAoB;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC7B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sectile/core';
2
+ import type { MachineUpdate } from '@sectile/core/revision';
3
+ export declare function createMachineUpdate<State, Command extends object>(state: State, commands?: readonly Command[]): Result<MachineUpdate<State, Command>>;
4
+ //# sourceMappingURL=machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/internal/machine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,SAAS,MAAM,EAC/D,KAAK,EAAE,KAAK,EACZ,QAAQ,GAAE,SAAS,OAAO,EAAO,GAChC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAKvC"}
@@ -0,0 +1,8 @@
1
+ import { freezeArray, ok } from './foundation.js';
2
+ export function createMachineUpdate(state, commands = []) {
3
+ return ok(Object.freeze({
4
+ state,
5
+ commands: freezeArray(commands.map((command) => Object.freeze({ ...command }))),
6
+ }));
7
+ }
8
+ //# sourceMappingURL=machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.js","sourceRoot":"","sources":["../../src/internal/machine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,UAAU,mBAAmB,CACjC,KAAY,EACZ,QAAQ,GAAuB,EAAE;IAEjC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QACtB,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAY,CAAC,CAAC;KAC3F,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Extent, ExtentIndex } from '../extent-index.js';
2
+ import type { LinearFlow } from '../linear-layout.js';
3
+ export interface TrackRange {
4
+ readonly start: number;
5
+ readonly end: number;
6
+ }
7
+ export declare function extentValue(extent: Extent): number;
8
+ export declare function trackContentExtent(index: ExtentIndex, gap: number): number;
9
+ export declare function trackRange(index: ExtentIndex, gap: number, flow: LinearFlow, visualStart: number, visualEnd: number): TrackRange;
10
+ export declare function trackSpan(index: ExtentIndex, gap: number, flow: LinearFlow, start: number, span: number): {
11
+ readonly start: number;
12
+ readonly extent: number;
13
+ } | null;
14
+ //# sourceMappingURL=track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/internal/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CAAE;AAE7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAMhI;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASpK"}