@sectile/virtual 0.6.0 → 0.8.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 (49) hide show
  1. package/README.md +3 -3
  2. package/dist/error.d.ts +1 -2
  3. package/dist/extent-index.d.ts +7 -1
  4. package/dist/extent-index.js +93 -83
  5. package/dist/extent-index.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/internal/blocked-vector.d.ts +20 -0
  8. package/dist/internal/blocked-vector.js +171 -0
  9. package/dist/internal/blocked-vector.js.map +1 -0
  10. package/dist/internal/foundation.d.ts +0 -2
  11. package/dist/internal/foundation.js +3 -13
  12. package/dist/internal/foundation.js.map +1 -1
  13. package/dist/internal/repair-diagnostics.d.ts +11 -0
  14. package/dist/internal/repair-diagnostics.js +8 -0
  15. package/dist/internal/repair-diagnostics.js.map +1 -0
  16. package/dist/internal/track.d.ts +0 -1
  17. package/dist/layout.d.ts +18 -20
  18. package/dist/layout.js +7 -21
  19. package/dist/layout.js.map +1 -1
  20. package/dist/linear-layout.d.ts +4 -1
  21. package/dist/linear-layout.js +40 -4
  22. package/dist/linear-layout.js.map +1 -1
  23. package/dist/masonry-layout.d.ts +4 -1
  24. package/dist/masonry-layout.js +86 -20
  25. package/dist/masonry-layout.js.map +1 -1
  26. package/dist/partitioned-track-grid-layout.d.ts +87 -0
  27. package/dist/partitioned-track-grid-layout.js +585 -0
  28. package/dist/partitioned-track-grid-layout.js.map +1 -0
  29. package/dist/spatial-layout.d.ts +9 -4
  30. package/dist/spatial-layout.js +221 -56
  31. package/dist/spatial-layout.js.map +1 -1
  32. package/dist/track-grid-layout.d.ts +19 -3
  33. package/dist/track-grid-layout.js +215 -15
  34. package/dist/track-grid-layout.js.map +1 -1
  35. package/package.json +8 -3
  36. package/dist/error.d.ts.map +0 -1
  37. package/dist/extent-index.d.ts.map +0 -1
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/internal/foundation.d.ts.map +0 -1
  40. package/dist/internal/machine.d.ts +0 -4
  41. package/dist/internal/machine.d.ts.map +0 -1
  42. package/dist/internal/machine.js +0 -8
  43. package/dist/internal/machine.js.map +0 -1
  44. package/dist/internal/track.d.ts.map +0 -1
  45. package/dist/layout.d.ts.map +0 -1
  46. package/dist/linear-layout.d.ts.map +0 -1
  47. package/dist/masonry-layout.d.ts.map +0 -1
  48. package/dist/spatial-layout.d.ts.map +0 -1
  49. package/dist/track-grid-layout.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../src/internal/foundation.ts"],"names":[],"mappings":"AAGA,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"}
1
+ {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../../src/internal/foundation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,QAAQ,CAAsB,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,UAAsB,EACtB,IAAU,EACV,OAAe,EACf,OAA2C;IAE3C,OAAO,UAAU,CAAU,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjE,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,11 @@
1
+ export interface VirtualRepairDiagnostics {
2
+ readonly mode: 'incremental' | 'rebuild';
3
+ readonly changed: number;
4
+ readonly touchedBlocks: number;
5
+ readonly copiedNodes: number;
6
+ readonly copiedEntries: number;
7
+ readonly rebuiltItems: number;
8
+ readonly repairBound: number;
9
+ }
10
+ export declare function recordRepairDiagnostics(state: object, value: VirtualRepairDiagnostics): void;
11
+ export declare function readRepairDiagnostics(state: object): VirtualRepairDiagnostics | null;
@@ -0,0 +1,8 @@
1
+ const diagnostics = new WeakMap();
2
+ export function recordRepairDiagnostics(state, value) {
3
+ diagnostics.set(state, Object.freeze({ ...value }));
4
+ }
5
+ export function readRepairDiagnostics(state) {
6
+ return diagnostics.get(state) ?? null;
7
+ }
8
+ //# sourceMappingURL=repair-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-diagnostics.js","sourceRoot":"","sources":["../../src/internal/repair-diagnostics.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAoC,CAAC;AAEpE,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,KAA+B;IACpF,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACxC,CAAC"}
@@ -11,4 +11,3 @@ export declare function trackSpan(index: ExtentIndex, gap: number, flow: LinearF
11
11
  readonly start: number;
12
12
  readonly extent: number;
13
13
  } | null;
14
- //# sourceMappingURL=track.d.ts.map
package/dist/layout.d.ts CHANGED
@@ -1,20 +1,21 @@
1
1
  import type { StableID } from '@sectile/core';
2
+ import { ZERO_INSETS, ZERO_POINT, pointDelta, rectanglesIntersect, type Insets, type Point, type Rect, type Size } from '@sectile/core/geometry';
2
3
  import type { VirtualResult } from './error.js';
3
- export interface VirtualPoint {
4
- readonly x: number;
5
- readonly y: number;
6
- }
7
- export interface VirtualSize {
8
- readonly width: number;
9
- readonly height: number;
10
- }
11
- export interface VirtualRect extends VirtualPoint, VirtualSize {
12
- }
13
- export interface VirtualInsets {
14
- readonly top: number;
15
- readonly right: number;
16
- readonly bottom: number;
17
- readonly left: number;
4
+ export type VirtualPoint = Point;
5
+ export type VirtualSize = Size;
6
+ export type VirtualRect = Rect;
7
+ export type VirtualInsets = Insets;
8
+ export interface VirtualIndexedView<T> {
9
+ /** Constant-time cardinality. */
10
+ readonly size: number;
11
+ /** Indexed lookup; O(log n) worst-case across Virtual representations. */
12
+ at(index: number): T | undefined;
13
+ /** Lazy full traversal in O(n) time without snapshot allocation. */
14
+ iterate(): IterableIterator<T>;
15
+ /** Full traversal in O(n) time without snapshot allocation. */
16
+ forEach(callback: (value: T, index: number) => void): void;
17
+ /** Explicit immutable snapshot materialization in O(n) time and output space. */
18
+ toArray(): readonly T[];
18
19
  }
19
20
  export interface VirtualQueryInput {
20
21
  readonly viewport: VirtualRect;
@@ -25,6 +26,7 @@ export interface VirtualPlacement<ID extends StableID = StableID> {
25
26
  readonly index: number;
26
27
  readonly rect: VirtualRect;
27
28
  readonly visible: boolean;
29
+ readonly zIndex?: number;
28
30
  }
29
31
  export interface VirtualAnchor<ID extends StableID = StableID> {
30
32
  readonly id: ID;
@@ -59,15 +61,11 @@ export interface VirtualLayoutStrategy<State, ID extends StableID, Measurement,
59
61
  tryMutate(state: State, input: VirtualMutationInput<Mutation, ID>): VirtualResult<VirtualLayoutMutation<State>>;
60
62
  tryScrollTarget(state: State, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): VirtualResult<VirtualPoint>;
61
63
  }
62
- export declare const ZERO_POINT: VirtualPoint;
63
- export declare const ZERO_INSETS: VirtualInsets;
64
+ export { ZERO_INSETS, ZERO_POINT, pointDelta, rectanglesIntersect };
64
65
  export declare function normalizeQuery(input: VirtualQueryInput): VirtualResult<{
65
66
  readonly viewport: VirtualRect;
66
67
  readonly overscan: VirtualInsets;
67
68
  readonly renderBounds: VirtualRect;
68
69
  }>;
69
- export declare function rectanglesIntersect(left: VirtualRect, right: VirtualRect): boolean;
70
- export declare function pointDelta(before: VirtualRect, after: VirtualRect): VirtualPoint;
71
70
  export declare function anchorForPlan<ID extends StableID>(viewport: VirtualRect, placements: readonly VirtualPlacement<ID>[]): VirtualAnchor<ID> | null;
72
71
  export declare function alignedScrollOffset(itemStart: number, itemExtent: number, viewportStart: number, viewportExtent: number, contentExtent: number, alignment: VirtualScrollAlignment): number;
73
- //# sourceMappingURL=layout.d.ts.map
package/dist/layout.js CHANGED
@@ -1,9 +1,10 @@
1
- export const ZERO_POINT = Object.freeze({ x: 0, y: 0 });
2
- export const ZERO_INSETS = Object.freeze({ top: 0, right: 0, bottom: 0, left: 0 });
1
+ import { ZERO_INSETS, ZERO_POINT, pointDelta, rectanglesIntersect, tryCreateInsets, tryCreateRect, } from '@sectile/core/geometry';
2
+ export { ZERO_INSETS, ZERO_POINT, pointDelta, rectanglesIntersect };
3
3
  export function normalizeQuery(input) {
4
- const viewport = freezeRect(input.viewport);
5
- if (viewport === null)
4
+ const viewportResult = tryCreateRect(input.viewport);
5
+ if (!viewportResult.ok || viewportResult.value.x < 0 || viewportResult.value.y < 0)
6
6
  return invalidGeometry('Viewport coordinates and extents must be finite and non-negative.', input.viewport);
7
+ const viewport = viewportResult.value;
7
8
  const overscan = normalizeInsets(input.overscan);
8
9
  if (overscan === null)
9
10
  return invalidGeometry('Overscan must contain finite non-negative extents.', input.overscan);
@@ -20,13 +21,6 @@ export function normalizeQuery(input) {
20
21
  }),
21
22
  }) };
22
23
  }
23
- export function rectanglesIntersect(left, right) {
24
- return left.x < right.x + right.width && right.x < left.x + left.width
25
- && left.y < right.y + right.height && right.y < left.y + left.height;
26
- }
27
- export function pointDelta(before, after) {
28
- return Object.freeze({ x: after.x - before.x, y: after.y - before.y });
29
- }
30
24
  export function anchorForPlan(viewport, placements) {
31
25
  let anchor = null;
32
26
  for (const placement of placements) {
@@ -55,19 +49,11 @@ export function alignedScrollOffset(itemStart, itemExtent, viewportStart, viewpo
55
49
  target = viewportStart;
56
50
  return Math.min(Math.max(0, target), Math.max(0, contentExtent - viewportExtent));
57
51
  }
58
- function freezeRect(value) {
59
- if (value === null || typeof value !== 'object' || !Number.isFinite(value.x) || !Number.isFinite(value.y)
60
- || !Number.isFinite(value.width) || !Number.isFinite(value.height) || value.x < 0 || value.y < 0 || value.width < 0 || value.height < 0)
61
- return null;
62
- return Object.freeze({ x: value.x, y: value.y, width: value.width, height: value.height });
63
- }
64
52
  function normalizeInsets(value) {
65
53
  if (value === undefined)
66
54
  return ZERO_INSETS;
67
- if (typeof value === 'number')
68
- return Number.isFinite(value) && value >= 0 ? Object.freeze({ top: value, right: value, bottom: value, left: value }) : null;
69
- const result = { top: value.top ?? 0, right: value.right ?? 0, bottom: value.bottom ?? 0, left: value.left ?? 0 };
70
- return Object.values(result).every((item) => Number.isFinite(item) && item >= 0) ? Object.freeze(result) : null;
55
+ const result = tryCreateInsets(value);
56
+ return result.ok ? result.value : null;
71
57
  }
72
58
  function invalidGeometry(message, value) {
73
59
  return { ok: false, error: { class: 'construction', code: 'virtual-layout-geometry-invalid', message, details: { value } } };
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,11 @@ export interface LinearLayoutState<ID extends StableID = StableID> {
19
19
  readonly generation: number;
20
20
  }
21
21
  export interface LinearLayoutSnapshot<ID extends StableID = StableID> {
22
+ readonly schemaVersion: 1;
23
+ readonly kind: 'linear';
22
24
  readonly ids: readonly ID[];
25
+ readonly sequenceMaxItems: number;
26
+ readonly sequenceMaxIDCodeUnits: number;
23
27
  readonly extents: readonly Extent[];
24
28
  readonly extentMaxItems: number;
25
29
  readonly axis: LinearAxis;
@@ -76,4 +80,3 @@ export declare function tryLinearScrollTarget<ID extends StableID>(state: Linear
76
80
  export declare function linearRectAt<ID extends StableID>(state: LinearLayoutState<ID>, index: number): VirtualRect | null;
77
81
  export declare function collectionWindowEventForLinearPlan<ID extends StableID>(plan: VirtualLayoutPlan<ID>, collection: CollectionWindowState<ID>, loadedDomain: Sequence<ID>): VirtualResult<CollectionWindowEvent<ID> | null>;
78
82
  export {};
79
- //# sourceMappingURL=linear-layout.d.ts.map
@@ -35,7 +35,11 @@ export function snapshotLinearLayout(state) {
35
35
  if (extents === null)
36
36
  throw new Error('Internal invariant breach: linear extent range is invalid.');
37
37
  return Object.freeze({
38
+ schemaVersion: 1,
39
+ kind: 'linear',
38
40
  ids: Object.freeze([...state.domain.ids]),
41
+ sequenceMaxItems: state.domain.maxItems,
42
+ sequenceMaxIDCodeUnits: state.domain.maxIDCodeUnits,
39
43
  extents,
40
44
  extentMaxItems: state.extents.maxItems,
41
45
  axis: state.axis,
@@ -53,7 +57,8 @@ export function tryRestoreLinearLayout(snapshot) {
53
57
  if (!validSnapshotHeader(snapshot))
54
58
  return snapshotFailure();
55
59
  const domain = tryCreateSequence(snapshot.ids, {
56
- maxItems: Math.max(1, snapshot.ids.length),
60
+ maxItems: snapshot.sequenceMaxItems,
61
+ maxIDCodeUnits: snapshot.sequenceMaxIDCodeUnits,
57
62
  });
58
63
  if (!domain.ok)
59
64
  return domain;
@@ -148,7 +153,7 @@ export function tryApplyLinearPatch(state, input, anchor = null) {
148
153
  return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Every inserted identity requires one extent.');
149
154
  if (input.patch.type === 'move' && inserted.length !== 0)
150
155
  return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Move patches cannot insert extents.');
151
- const domain = tryApplySequencePatch(state.domain, input.patch, { maxItems: Math.max(1, state.domain.size - (input.patch.type === 'splice' ? input.patch.deleteCount : 0) + inserted.length) });
156
+ const domain = tryApplySequencePatch(state.domain, input.patch);
152
157
  if (!domain.ok)
153
158
  return domain;
154
159
  const extents = input.patch.type === 'splice'
@@ -159,9 +164,12 @@ export function tryApplyLinearPatch(state, input, anchor = null) {
159
164
  const generation = nextGeneration(state.generation);
160
165
  if (!generation.ok)
161
166
  return generation;
162
- const before = anchorRect(state, anchor);
163
167
  const next = freezeState({ ...state, domain: domain.value, extents: extents.value, generation: generation.value });
164
- return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, anchor)) }));
168
+ const activeAnchor = survivingLinearAnchor(state, next, anchor);
169
+ return ok(Object.freeze({
170
+ state: next,
171
+ scrollDelta: anchorDelta(anchorRect(state, activeAnchor), anchorRect(next, activeAnchor)),
172
+ }));
165
173
  }
166
174
  export function linearScrollTarget(state, id, viewport, alignment = 'nearest') {
167
175
  return unwrap(tryLinearScrollTarget(state, id, viewport, alignment));
@@ -216,6 +224,28 @@ function anchorRect(state, anchor) {
216
224
  const index = state.domain.indexOf(anchor.id);
217
225
  return index === null ? null : rectAt(state, index);
218
226
  }
227
+ function survivingLinearAnchor(previous, next, anchor) {
228
+ if (anchor === null || anchor === undefined)
229
+ return null;
230
+ if (next.domain.indexOf(anchor.id) !== null)
231
+ return anchor;
232
+ const anchorIndex = previous.domain.indexOf(anchor.id);
233
+ if (anchorIndex === null)
234
+ return null;
235
+ for (let index = anchorIndex + 1; index < previous.domain.size; index += 1) {
236
+ const id = previous.domain.at(index);
237
+ if (id !== null && next.domain.indexOf(id) !== null) {
238
+ return Object.freeze({ id, viewportOffset: anchor.viewportOffset });
239
+ }
240
+ }
241
+ for (let index = anchorIndex - 1; index >= 0; index -= 1) {
242
+ const id = previous.domain.at(index);
243
+ if (id !== null && next.domain.indexOf(id) !== null) {
244
+ return Object.freeze({ id, viewportOffset: anchor.viewportOffset });
245
+ }
246
+ }
247
+ return null;
248
+ }
219
249
  function anchorDelta(before, after) { return before === null || after === null ? ZERO_POINT : pointDelta(before, after); }
220
250
  function mainContentExtent(state) { return trackContentExtent(state.extents, state.gap); }
221
251
  function sizeOf(state) {
@@ -232,8 +262,14 @@ function freezeState(state) {
232
262
  function validSnapshotHeader(snapshot) {
233
263
  return snapshot !== null
234
264
  && typeof snapshot === 'object'
265
+ && snapshot.schemaVersion === 1
266
+ && snapshot.kind === 'linear'
235
267
  && Array.isArray(snapshot.ids)
236
268
  && Array.isArray(snapshot.extents)
269
+ && Number.isSafeInteger(snapshot.sequenceMaxItems)
270
+ && snapshot.sequenceMaxItems >= snapshot.ids.length
271
+ && Number.isSafeInteger(snapshot.sequenceMaxIDCodeUnits)
272
+ && snapshot.sequenceMaxIDCodeUnits > 0
237
273
  && Number.isSafeInteger(snapshot.generation)
238
274
  && snapshot.generation >= 0
239
275
  && Number.isSafeInteger(snapshot.extentMaxItems)
@@ -1 +1 @@
1
- {"version":3,"file":"linear-layout.js","sourceRoot":"","sources":["../src/linear-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linear-layout.js","sourceRoot":"","sources":["../src/linear-layout.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,11 @@ export interface MasonryLayoutState<ID extends StableID = StableID> {
21
21
  readonly generation: number;
22
22
  }
23
23
  export interface MasonryLayoutSnapshot<ID extends StableID = StableID> {
24
+ readonly schemaVersion: 1;
25
+ readonly kind: 'masonry';
24
26
  readonly ids: readonly ID[];
27
+ readonly sequenceMaxItems: number;
28
+ readonly sequenceMaxIDCodeUnits: number;
25
29
  readonly extents: readonly Extent[];
26
30
  readonly extentMaxItems: number;
27
31
  readonly axis: LinearAxis;
@@ -84,4 +88,3 @@ export declare function masonryScrollTarget<ID extends StableID>(state: MasonryL
84
88
  export declare function tryMasonryScrollTarget<ID extends StableID>(state: MasonryLayoutState<ID>, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): VirtualResult<VirtualPoint>;
85
89
  export declare function masonryRectAt<ID extends StableID>(state: MasonryLayoutState<ID>, id: ID): VirtualRect | null;
86
90
  export {};
87
- //# sourceMappingURL=masonry-layout.d.ts.map
@@ -29,7 +29,11 @@ export function snapshotMasonryLayout(state) {
29
29
  if (extents === null)
30
30
  throw new Error('Internal invariant breach: masonry extent range is invalid.');
31
31
  return Object.freeze({
32
+ schemaVersion: 1,
33
+ kind: 'masonry',
32
34
  ids: Object.freeze([...state.domain.ids]),
35
+ sequenceMaxItems: state.domain.maxItems,
36
+ sequenceMaxIDCodeUnits: state.domain.maxIDCodeUnits,
33
37
  extents,
34
38
  extentMaxItems: state.extents.maxItems,
35
39
  axis: state.axis,
@@ -50,7 +54,8 @@ export function tryRestoreMasonryLayout(snapshot) {
50
54
  if (!validSnapshotHeader(snapshot))
51
55
  return snapshotFailure();
52
56
  const domain = tryCreateSequence(snapshot.ids, {
53
- maxItems: Math.max(1, snapshot.ids.length),
57
+ maxItems: snapshot.sequenceMaxItems,
58
+ maxIDCodeUnits: snapshot.sequenceMaxIDCodeUnits,
54
59
  });
55
60
  if (!domain.ok)
56
61
  return domain;
@@ -114,7 +119,13 @@ export function tryApplyMasonryMeasurements(state, batch) {
114
119
  const generation = nextGeneration(state.generation);
115
120
  if (!generation.ok)
116
121
  return generation;
117
- const next = createState({ ...state, extents: updated.value, generation: generation.value });
122
+ const data = getInternals(state);
123
+ if (!data.ok)
124
+ return data;
125
+ const next = createState({ ...state, extents: updated.value, generation: generation.value }, {
126
+ previous: data.value,
127
+ recomputeStart: firstChangedExtentIndex(state.extents, batch.measurements),
128
+ });
118
129
  return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, batch.anchor)) }));
119
130
  }
120
131
  export function applyMasonryMutation(state, mutation, anchor = null) {
@@ -125,14 +136,14 @@ export function tryApplyMasonryMutation(state, mutation, anchor = null) {
125
136
  return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Masonry mutation type is unsupported.', { mutation });
126
137
  const before = anchorRect(state, anchor);
127
138
  let partial;
139
+ let recomputeStart = null;
128
140
  if (mutation.type === 'items') {
129
141
  const inserted = mutation.insertedExtents ?? [];
130
142
  if (mutation.patch.type === 'splice' && inserted.length !== mutation.patch.inserted.length)
131
143
  return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Every inserted identity requires one extent.');
132
144
  if (mutation.patch.type === 'move' && inserted.length !== 0)
133
145
  return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Move patches cannot insert extents.');
134
- const size = state.domain.size - (mutation.patch.type === 'splice' ? mutation.patch.deleteCount : 0) + inserted.length;
135
- const domain = tryApplySequencePatch(state.domain, mutation.patch, { maxItems: Math.max(1, size) });
146
+ const domain = tryApplySequencePatch(state.domain, mutation.patch);
136
147
  if (!domain.ok)
137
148
  return domain;
138
149
  const extents = mutation.patch.type === 'splice'
@@ -141,6 +152,9 @@ export function tryApplyMasonryMutation(state, mutation, anchor = null) {
141
152
  if (!extents.ok)
142
153
  return extents;
143
154
  partial = { ...state, domain: domain.value, extents: extents.value };
155
+ recomputeStart = mutation.patch.type === 'splice'
156
+ ? mutation.patch.index
157
+ : Math.min(mutation.patch.from, mutation.patch.to);
144
158
  }
145
159
  else {
146
160
  const geometry = normalizeGeometry({
@@ -160,7 +174,15 @@ export function tryApplyMasonryMutation(state, mutation, anchor = null) {
160
174
  const generation = nextGeneration(state.generation);
161
175
  if (!generation.ok)
162
176
  return generation;
163
- const next = createState({ ...partial, generation: generation.value });
177
+ const data = recomputeStart === null ? null : getInternals(state);
178
+ if (data !== null && !data.ok)
179
+ return data;
180
+ const next = createState({ ...partial, generation: generation.value }, data === null
181
+ ? undefined
182
+ : {
183
+ previous: data.value,
184
+ recomputeStart: Math.min(recomputeStart ?? 0, partial.domain.size),
185
+ });
164
186
  return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, anchor)) }));
165
187
  }
166
188
  export function masonryScrollTarget(state, id, viewport, alignment = 'nearest') {
@@ -170,7 +192,8 @@ export function tryMasonryScrollTarget(state, id, viewport, alignment = 'nearest
170
192
  const data = getInternals(state);
171
193
  if (!data.ok)
172
194
  return data;
173
- const logical = data.value.byID.get(id);
195
+ const index = state.domain.indexOf(id);
196
+ const logical = index === null ? undefined : data.value.placements[index];
174
197
  if (logical === undefined)
175
198
  return fail('transition-rejection', 'virtual-layout-scroll-target-invalid', 'Scroll target must exist in the masonry domain.', { id });
176
199
  const rect = placementRect(state, data.value.contentMain, logical);
@@ -181,35 +204,50 @@ export function tryMasonryScrollTarget(state, id, viewport, alignment = 'nearest
181
204
  }
182
205
  export function masonryRectAt(state, id) {
183
206
  const data = internals.get(state);
184
- const logical = data?.byID.get(id);
207
+ const index = state.domain.indexOf(id);
208
+ const logical = index === null ? undefined : data?.placements[index];
185
209
  return logical === undefined || data === undefined ? null : placementRect(state, data.contentMain, logical);
186
210
  }
187
- function createState(state) {
211
+ function createState(state, reuse) {
188
212
  Object.defineProperty(state, masonryLayoutStateBrand, { value: true });
189
213
  const frozen = Object.freeze(state);
190
- internals.set(frozen, buildInternals(frozen));
214
+ internals.set(frozen, buildInternals(frozen, reuse));
191
215
  return frozen;
192
216
  }
193
- function buildInternals(state) {
217
+ function buildInternals(state, reuse) {
194
218
  const laneEnds = Array(state.laneCount).fill(0);
219
+ const lanes = Array.from({ length: state.laneCount }, () => []);
220
+ const recomputeStart = reuse === undefined
221
+ ? 0
222
+ : Math.min(Math.max(0, reuse.recomputeStart), state.domain.size);
223
+ const placements = reuse === undefined
224
+ ? []
225
+ : reuse.previous.placements.slice(0, recomputeStart);
226
+ if (reuse !== undefined && recomputeStart > 0) {
227
+ for (let lane = 0; lane < state.laneCount; lane += 1) {
228
+ const previous = reuse.previous.lanes[lane] ?? [];
229
+ const end = firstIndexAtOrAfter(previous, recomputeStart);
230
+ const prefix = previous.slice(0, end);
231
+ lanes[lane].push(...prefix);
232
+ const last = prefix[prefix.length - 1];
233
+ if (last !== undefined)
234
+ laneEnds[lane] = last.start + last.extent + state.itemGap;
235
+ }
236
+ }
195
237
  const heap = state.placementPolicy === 'shortest' && state.laneCount > 16
196
- ? Array.from({ length: state.laneCount }, (_, lane) => ({ lane, end: 0 }))
238
+ ? Array.from({ length: state.laneCount }, (_, lane) => ({ lane, end: laneEnds[lane] })).sort(compareLane)
197
239
  : null;
198
- const lanes = Array.from({ length: state.laneCount }, () => []);
199
- const placements = [];
200
- const byID = new Map();
201
- const extents = state.extents.slice(0, state.extents.size);
240
+ const extents = state.extents.slice(recomputeStart, state.extents.size);
202
241
  if (extents === null)
203
242
  throw new Error('Internal invariant breach: masonry extent range is invalid.');
204
- for (let index = 0; index < state.domain.size; index += 1) {
243
+ for (let index = recomputeStart; index < state.domain.size; index += 1) {
205
244
  const id = state.domain.at(index);
206
- const extent = extentValue(extents[index]);
245
+ const extent = extentValue(extents[index - recomputeStart]);
207
246
  const lane = state.placementPolicy === 'round-robin' ? index % state.laneCount : heap === null ? shortestLane(laneEnds) : heap[0].lane;
208
247
  const start = laneEnds[lane];
209
- const placement = Object.freeze({ id, index, lane, start, extent });
248
+ const placement = { id, index, lane, start, extent };
210
249
  placements.push(placement);
211
250
  lanes[lane].push(placement);
212
- byID.set(id, placement);
213
251
  laneEnds[lane] = start + extent + state.itemGap;
214
252
  if (heap !== null) {
215
253
  heap[0] = { lane, end: laneEnds[lane] };
@@ -219,7 +257,29 @@ function buildInternals(state) {
219
257
  let contentMain = 0;
220
258
  for (const end of laneEnds)
221
259
  contentMain = Math.max(contentMain, end === 0 ? 0 : end - state.itemGap);
222
- return Object.freeze({ placements: Object.freeze(placements), lanes: Object.freeze(lanes.map((lane) => Object.freeze(lane))), byID, contentMain });
260
+ return Object.freeze({ placements: Object.freeze(placements), lanes: Object.freeze(lanes.map((lane) => Object.freeze(lane))), contentMain });
261
+ }
262
+ function firstIndexAtOrAfter(lane, itemIndex) {
263
+ let low = 0;
264
+ let high = lane.length;
265
+ while (low < high) {
266
+ const middle = (low + high) >>> 1;
267
+ if (lane[middle].index < itemIndex)
268
+ low = middle + 1;
269
+ else
270
+ high = middle;
271
+ }
272
+ return low;
273
+ }
274
+ function firstChangedExtentIndex(index, measurements) {
275
+ let first = index.size;
276
+ for (const measurement of measurements) {
277
+ const previous = index.extentAt(measurement.index);
278
+ if (previous === null || extentValue(previous) !== extentValue(measurement.extent)) {
279
+ first = Math.min(first, measurement.index);
280
+ }
281
+ }
282
+ return first;
223
283
  }
224
284
  function normalizeGeometry(input) {
225
285
  const axis = input.axis ?? 'vertical';
@@ -309,8 +369,14 @@ function getInternals(state) {
309
369
  function validSnapshotHeader(snapshot) {
310
370
  return snapshot !== null
311
371
  && typeof snapshot === 'object'
372
+ && snapshot.schemaVersion === 1
373
+ && snapshot.kind === 'masonry'
312
374
  && Array.isArray(snapshot.ids)
313
375
  && Array.isArray(snapshot.extents)
376
+ && Number.isSafeInteger(snapshot.sequenceMaxItems)
377
+ && snapshot.sequenceMaxItems >= snapshot.ids.length
378
+ && Number.isSafeInteger(snapshot.sequenceMaxIDCodeUnits)
379
+ && snapshot.sequenceMaxIDCodeUnits > 0
314
380
  && Number.isSafeInteger(snapshot.generation)
315
381
  && snapshot.generation >= 0
316
382
  && Number.isSafeInteger(snapshot.extentMaxItems)