@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.
- package/README.md +3 -3
- package/dist/error.d.ts +1 -2
- package/dist/extent-index.d.ts +7 -1
- package/dist/extent-index.js +93 -83
- package/dist/extent-index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal/blocked-vector.d.ts +20 -0
- package/dist/internal/blocked-vector.js +171 -0
- package/dist/internal/blocked-vector.js.map +1 -0
- package/dist/internal/foundation.d.ts +0 -2
- package/dist/internal/foundation.js +3 -13
- package/dist/internal/foundation.js.map +1 -1
- package/dist/internal/repair-diagnostics.d.ts +11 -0
- package/dist/internal/repair-diagnostics.js +8 -0
- package/dist/internal/repair-diagnostics.js.map +1 -0
- package/dist/internal/track.d.ts +0 -1
- package/dist/layout.d.ts +18 -20
- package/dist/layout.js +7 -21
- package/dist/layout.js.map +1 -1
- package/dist/linear-layout.d.ts +4 -1
- package/dist/linear-layout.js +40 -4
- package/dist/linear-layout.js.map +1 -1
- package/dist/masonry-layout.d.ts +4 -1
- package/dist/masonry-layout.js +86 -20
- package/dist/masonry-layout.js.map +1 -1
- package/dist/partitioned-track-grid-layout.d.ts +87 -0
- package/dist/partitioned-track-grid-layout.js +585 -0
- package/dist/partitioned-track-grid-layout.js.map +1 -0
- package/dist/spatial-layout.d.ts +9 -4
- package/dist/spatial-layout.js +221 -56
- package/dist/spatial-layout.js.map +1 -1
- package/dist/track-grid-layout.d.ts +19 -3
- package/dist/track-grid-layout.js +215 -15
- package/dist/track-grid-layout.js.map +1 -1
- package/package.json +8 -3
- package/dist/error.d.ts.map +0 -1
- package/dist/extent-index.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/internal/foundation.d.ts.map +0 -1
- package/dist/internal/machine.d.ts +0 -4
- package/dist/internal/machine.d.ts.map +0 -1
- package/dist/internal/machine.js +0 -8
- package/dist/internal/machine.js.map +0 -1
- package/dist/internal/track.d.ts.map +0 -1
- package/dist/layout.d.ts.map +0 -1
- package/dist/linear-layout.d.ts.map +0 -1
- package/dist/masonry-layout.d.ts.map +0 -1
- package/dist/spatial-layout.d.ts.map +0 -1
- package/dist/track-grid-layout.d.ts.map +0 -1
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import { unwrap } from '@sectile/core/result';
|
|
2
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
3
|
+
import { tryCreateExtentIndex } from './extent-index.js';
|
|
4
|
+
import { blockedTrackRepairBound, createBlockedVector, useBlockedTrackRepair } from './internal/blocked-vector.js';
|
|
5
|
+
import { fail, ok } from './internal/foundation.js';
|
|
6
|
+
import { recordRepairDiagnostics } from './internal/repair-diagnostics.js';
|
|
7
|
+
import { alignedScrollOffset, anchorForPlan, normalizeQuery, pointDelta, rectanglesIntersect, ZERO_POINT, } from './layout.js';
|
|
8
|
+
import { trackGridRegionRect, tryApplyGridMeasurements, tryCreateTrackGridLayout, tryQueryTrackGridLayout, } from './track-grid-layout.js';
|
|
9
|
+
const partitionedTrackGridLayoutStateBrand = Symbol('SectilePartitionedTrackGridLayoutState');
|
|
10
|
+
const internals = new WeakMap();
|
|
11
|
+
export const partitionedTrackGridLayoutStrategy = Object.freeze({
|
|
12
|
+
kind: 'partitioned-track-grid',
|
|
13
|
+
tryQuery: (state, input) => tryQueryPartitionedTrackGridLayout(state, input),
|
|
14
|
+
tryMeasure: (state, batch) => tryApplyPartitionedTrackGridMeasurements(state, batch),
|
|
15
|
+
tryMutate: (state, input) => tryApplyPartitionedTrackGridMutation(state, input.mutation, input.anchor),
|
|
16
|
+
tryScrollTarget: (state, id, viewport, alignment) => tryPartitionedTrackGridScrollTarget(state, id, viewport, alignment),
|
|
17
|
+
});
|
|
18
|
+
export function createPartitionedTrackGridLayout(rows, columns, regions, input = {}) {
|
|
19
|
+
return unwrap(tryCreatePartitionedTrackGridLayout(rows, columns, regions, input));
|
|
20
|
+
}
|
|
21
|
+
export function tryCreatePartitionedTrackGridLayout(rows, columns, regions, input = {}) {
|
|
22
|
+
const rowGap = input.rowGap ?? 0;
|
|
23
|
+
const columnGap = input.columnGap ?? 0;
|
|
24
|
+
const maxTracks = input.maxTracks ?? 1_000_000;
|
|
25
|
+
const maxRegions = input.maxRegions ?? 1_000_000;
|
|
26
|
+
if (!finiteNonNegative(rowGap) || !finiteNonNegative(columnGap)) {
|
|
27
|
+
return fail('construction', 'virtual-layout-geometry-invalid', 'Partitioned grid gaps must be finite and non-negative.', { rowGap, columnGap });
|
|
28
|
+
}
|
|
29
|
+
if (!nonNegativeSafe(maxTracks) || !nonNegativeSafe(maxRegions)) {
|
|
30
|
+
return fail('construction', 'invalid-max-items', 'Partitioned grid ceilings must be non-negative safe integers.', { maxTracks, maxRegions });
|
|
31
|
+
}
|
|
32
|
+
const normalizedRows = normalizeTracks(rows, maxTracks);
|
|
33
|
+
if (!normalizedRows.ok)
|
|
34
|
+
return normalizedRows;
|
|
35
|
+
const normalizedColumns = normalizeTracks(columns, maxTracks);
|
|
36
|
+
if (!normalizedColumns.ok)
|
|
37
|
+
return normalizedColumns;
|
|
38
|
+
return createState({
|
|
39
|
+
rows: normalizedRows.value,
|
|
40
|
+
columns: normalizedColumns.value,
|
|
41
|
+
regions: freezeRegions(regions),
|
|
42
|
+
rowGap,
|
|
43
|
+
columnGap,
|
|
44
|
+
maxTracks,
|
|
45
|
+
maxRegions,
|
|
46
|
+
generation: 0,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export function snapshotPartitionedTrackGridLayout(state) {
|
|
50
|
+
requireInternals(state);
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
schemaVersion: 1,
|
|
53
|
+
kind: 'partitioned-track-grid',
|
|
54
|
+
rows: freezeTrackView(state.rows),
|
|
55
|
+
columns: freezeTrackView(state.columns),
|
|
56
|
+
regions: freezeRegions(state.regions),
|
|
57
|
+
rowGap: state.rowGap,
|
|
58
|
+
columnGap: state.columnGap,
|
|
59
|
+
maxTracks: state.maxTracks,
|
|
60
|
+
maxRegions: state.maxRegions,
|
|
61
|
+
generation: state.generation,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function restorePartitionedTrackGridLayout(snapshot) {
|
|
65
|
+
return unwrap(tryRestorePartitionedTrackGridLayout(snapshot));
|
|
66
|
+
}
|
|
67
|
+
export function tryRestorePartitionedTrackGridLayout(snapshot) {
|
|
68
|
+
if (!validSnapshotHeader(snapshot))
|
|
69
|
+
return snapshotFailure();
|
|
70
|
+
const created = tryCreatePartitionedTrackGridLayout(snapshot.rows, snapshot.columns, snapshot.regions, snapshot);
|
|
71
|
+
if (!created.ok)
|
|
72
|
+
return created;
|
|
73
|
+
const data = getInternals(created.value);
|
|
74
|
+
if (!data.ok)
|
|
75
|
+
return data;
|
|
76
|
+
return createState({
|
|
77
|
+
rows: data.value.rows.view.toArray(),
|
|
78
|
+
columns: data.value.columns.view.toArray(),
|
|
79
|
+
regions: created.value.regions,
|
|
80
|
+
rowGap: created.value.rowGap,
|
|
81
|
+
columnGap: created.value.columnGap,
|
|
82
|
+
maxTracks: created.value.maxTracks,
|
|
83
|
+
maxRegions: created.value.maxRegions,
|
|
84
|
+
generation: snapshot.generation,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export function queryPartitionedTrackGridLayout(state, input) {
|
|
88
|
+
return unwrap(tryQueryPartitionedTrackGridLayout(state, input));
|
|
89
|
+
}
|
|
90
|
+
export function tryQueryPartitionedTrackGridLayout(state, input) {
|
|
91
|
+
const normalized = normalizeQuery(input);
|
|
92
|
+
if (!normalized.ok)
|
|
93
|
+
return normalized;
|
|
94
|
+
const data = getInternals(state);
|
|
95
|
+
if (!data.ok)
|
|
96
|
+
return data;
|
|
97
|
+
const rowSegments = querySegments(data.value.rowRanges, normalized.value.renderBounds.y, normalized.value.renderBounds.height);
|
|
98
|
+
const columnSegments = querySegments(data.value.columnRanges, normalized.value.renderBounds.x, normalized.value.renderBounds.width);
|
|
99
|
+
const candidates = new Map();
|
|
100
|
+
for (const row of rowSegments) {
|
|
101
|
+
for (const column of columnSegments) {
|
|
102
|
+
const queried = tryQueryTrackGridLayout(data.value.grid, {
|
|
103
|
+
viewport: Object.freeze({ x: column.offset, y: row.offset, width: column.extent, height: row.extent }),
|
|
104
|
+
});
|
|
105
|
+
if (!queried.ok)
|
|
106
|
+
return queried;
|
|
107
|
+
for (const placement of queried.value.placements)
|
|
108
|
+
candidates.set(placement.id, placement);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const placements = [];
|
|
112
|
+
for (const placement of candidates.values()) {
|
|
113
|
+
const region = state.regions[data.value.regionIndex.get(placement.id) ?? -1];
|
|
114
|
+
if (region === undefined)
|
|
115
|
+
return domainMismatch('Partitioned region index is stale.');
|
|
116
|
+
const rowIndex = data.value.rowIndex.get(region.row);
|
|
117
|
+
const columnIndex = data.value.columnIndex.get(region.column);
|
|
118
|
+
if (rowIndex === undefined || columnIndex === undefined)
|
|
119
|
+
return domainMismatch('Partitioned region track index is stale.');
|
|
120
|
+
const rowPartition = data.value.rowPartitions[rowIndex];
|
|
121
|
+
const columnPartition = data.value.columnPartitions[columnIndex];
|
|
122
|
+
const rect = projectRect(placement.rect, rowPartition, columnPartition, data.value.rowRanges, data.value.columnRanges, normalized.value.viewport);
|
|
123
|
+
if (!rectanglesIntersect(rect, normalized.value.renderBounds))
|
|
124
|
+
continue;
|
|
125
|
+
const zIndex = (rowPartition === 'center' ? 0 : 1) + (columnPartition === 'center' ? 0 : 1);
|
|
126
|
+
placements.push(Object.freeze({
|
|
127
|
+
id: placement.id,
|
|
128
|
+
index: placement.index,
|
|
129
|
+
rect,
|
|
130
|
+
visible: rectanglesIntersect(rect, normalized.value.viewport),
|
|
131
|
+
...(zIndex === 0 ? {} : { zIndex }),
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
placements.sort((left, right) => (left.zIndex ?? 0) - (right.zIndex ?? 0) || left.index - right.index);
|
|
135
|
+
const frozen = Object.freeze(placements);
|
|
136
|
+
return ok(Object.freeze({
|
|
137
|
+
generation: state.generation,
|
|
138
|
+
contentSize: Object.freeze({ width: data.value.grid.columns.totalExtent + gapExtent(state.columns.size, state.columnGap), height: data.value.grid.rows.totalExtent + gapExtent(state.rows.size, state.rowGap) }),
|
|
139
|
+
viewport: normalized.value.viewport,
|
|
140
|
+
renderBounds: normalized.value.renderBounds,
|
|
141
|
+
placements: frozen,
|
|
142
|
+
anchor: anchorForPlan(normalized.value.viewport, frozen),
|
|
143
|
+
pinnedStartWidth: data.value.columnRanges.start.extent,
|
|
144
|
+
pinnedEndWidth: data.value.columnRanges.end.extent,
|
|
145
|
+
pinnedStartHeight: data.value.rowRanges.start.extent,
|
|
146
|
+
pinnedEndHeight: data.value.rowRanges.end.extent,
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
export function applyPartitionedTrackGridMeasurements(state, batch) {
|
|
150
|
+
return unwrap(tryApplyPartitionedTrackGridMeasurements(state, batch));
|
|
151
|
+
}
|
|
152
|
+
export function tryApplyPartitionedTrackGridMeasurements(state, batch) {
|
|
153
|
+
if (batch.generation !== state.generation) {
|
|
154
|
+
return fail('transition-rejection', 'virtual-layout-measurement-stale', 'Measurement generation is stale.', { generation: batch.generation, activeGeneration: state.generation });
|
|
155
|
+
}
|
|
156
|
+
if (batch.measurements.length === 0)
|
|
157
|
+
return ok(Object.freeze({ state, scrollDelta: ZERO_POINT }));
|
|
158
|
+
const data = getInternals(state);
|
|
159
|
+
if (!data.ok)
|
|
160
|
+
return data;
|
|
161
|
+
const seen = new Set();
|
|
162
|
+
const rowChanges = [];
|
|
163
|
+
const columnChanges = [];
|
|
164
|
+
const gridMeasurements = [];
|
|
165
|
+
for (const measurement of batch.measurements) {
|
|
166
|
+
const key = `${measurement.axis}:${measurement.id}`;
|
|
167
|
+
if (seen.has(key))
|
|
168
|
+
return measurementFailure('Measurements must target each track at most once.', measurement);
|
|
169
|
+
seen.add(key);
|
|
170
|
+
const index = measurement.axis === 'row'
|
|
171
|
+
? data.value.rowIndex.get(measurement.id)
|
|
172
|
+
: data.value.columnIndex.get(measurement.id);
|
|
173
|
+
if (index === undefined)
|
|
174
|
+
return measurementFailure('Measurement target must exist in the active track domain.', measurement);
|
|
175
|
+
const source = measurement.axis === 'row' ? data.value.rows.at(index) : data.value.columns.at(index);
|
|
176
|
+
if (source === undefined)
|
|
177
|
+
return domainMismatch('Measurement track index is stale.');
|
|
178
|
+
if (sameExtent(source.extent, measurement.extent))
|
|
179
|
+
continue;
|
|
180
|
+
const updated = Object.freeze({ ...source, extent: Object.freeze({ ...measurement.extent }) });
|
|
181
|
+
if (measurement.axis === 'row')
|
|
182
|
+
rowChanges.push([index, updated]);
|
|
183
|
+
else
|
|
184
|
+
columnChanges.push([index, updated]);
|
|
185
|
+
gridMeasurements.push(Object.freeze({ axis: measurement.axis, index, extent: measurement.extent }));
|
|
186
|
+
}
|
|
187
|
+
if (gridMeasurements.length === 0)
|
|
188
|
+
return ok(Object.freeze({ state, scrollDelta: ZERO_POINT }));
|
|
189
|
+
const generation = nextGeneration(state.generation);
|
|
190
|
+
if (!generation.ok)
|
|
191
|
+
return generation;
|
|
192
|
+
const before = baseAnchorRect(state, batch.anchor);
|
|
193
|
+
let next;
|
|
194
|
+
rowChanges.sort(([left], [right]) => left - right);
|
|
195
|
+
columnChanges.sort(([left], [right]) => left - right);
|
|
196
|
+
const trackCount = state.rows.size + state.columns.size;
|
|
197
|
+
const repairBound = blockedTrackRepairBound(gridMeasurements.length, trackCount);
|
|
198
|
+
if (useBlockedTrackRepair(gridMeasurements.length, trackCount)) {
|
|
199
|
+
const grid = tryApplyGridMeasurements(data.value.grid, {
|
|
200
|
+
generation: data.value.grid.generation,
|
|
201
|
+
measurements: gridMeasurements,
|
|
202
|
+
});
|
|
203
|
+
if (!grid.ok)
|
|
204
|
+
return grid;
|
|
205
|
+
const rows = data.value.rows.updateDetailed(rowChanges);
|
|
206
|
+
const columns = data.value.columns.updateDetailed(columnChanges);
|
|
207
|
+
const measured = createMeasuredState(state, data.value, rows.vector, columns.vector, grid.value.state, generation.value);
|
|
208
|
+
recordRepairDiagnostics(measured, {
|
|
209
|
+
mode: 'incremental',
|
|
210
|
+
changed: gridMeasurements.length,
|
|
211
|
+
touchedBlocks: new Set([
|
|
212
|
+
...rowChanges.map(([index]) => `r:${Math.floor(index / 64)}`),
|
|
213
|
+
...columnChanges.map(([index]) => `c:${Math.floor(index / 64)}`),
|
|
214
|
+
]).size,
|
|
215
|
+
copiedNodes: rows.copiedNodes + columns.copiedNodes,
|
|
216
|
+
copiedEntries: rows.copiedEntries + columns.copiedEntries,
|
|
217
|
+
rebuiltItems: 0,
|
|
218
|
+
repairBound,
|
|
219
|
+
});
|
|
220
|
+
next = ok(measured);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
const rows = materializeChanges(data.value.rows, rowChanges);
|
|
224
|
+
const columns = materializeChanges(data.value.columns, columnChanges);
|
|
225
|
+
next = createState({
|
|
226
|
+
rows,
|
|
227
|
+
columns,
|
|
228
|
+
regions: state.regions,
|
|
229
|
+
rowGap: state.rowGap,
|
|
230
|
+
columnGap: state.columnGap,
|
|
231
|
+
maxTracks: state.maxTracks,
|
|
232
|
+
maxRegions: state.maxRegions,
|
|
233
|
+
generation: generation.value,
|
|
234
|
+
});
|
|
235
|
+
if (next.ok)
|
|
236
|
+
recordRepairDiagnostics(next.value, {
|
|
237
|
+
mode: 'rebuild',
|
|
238
|
+
changed: gridMeasurements.length,
|
|
239
|
+
touchedBlocks: new Set([
|
|
240
|
+
...rowChanges.map(([index]) => `r:${Math.floor(index / 64)}`),
|
|
241
|
+
...columnChanges.map(([index]) => `c:${Math.floor(index / 64)}`),
|
|
242
|
+
]).size,
|
|
243
|
+
copiedNodes: 0,
|
|
244
|
+
copiedEntries: 0,
|
|
245
|
+
rebuiltItems: trackCount + state.regions.length,
|
|
246
|
+
repairBound,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
if (!next.ok)
|
|
250
|
+
return transitionResult(next);
|
|
251
|
+
return ok(Object.freeze({ state: next.value, scrollDelta: anchorDelta(before, baseAnchorRect(next.value, batch.anchor)) }));
|
|
252
|
+
}
|
|
253
|
+
export function applyPartitionedTrackGridMutation(state, mutation, anchor = null) {
|
|
254
|
+
return unwrap(tryApplyPartitionedTrackGridMutation(state, mutation, anchor));
|
|
255
|
+
}
|
|
256
|
+
export function tryApplyPartitionedTrackGridMutation(state, mutation, anchor = null) {
|
|
257
|
+
const data = getInternals(state);
|
|
258
|
+
if (!data.ok)
|
|
259
|
+
return data;
|
|
260
|
+
let rows = data.value.rows.view.toArray();
|
|
261
|
+
let columns = data.value.columns.view.toArray();
|
|
262
|
+
let regions = state.regions;
|
|
263
|
+
if (mutation.type === 'replace-regions')
|
|
264
|
+
regions = freezeRegions(mutation.regions);
|
|
265
|
+
else if (mutation.type === 'replace-row-tracks') {
|
|
266
|
+
const normalized = normalizeTracks(mutation.tracks, state.maxTracks);
|
|
267
|
+
if (!normalized.ok)
|
|
268
|
+
return transitionResult(normalized);
|
|
269
|
+
rows = preserveExtents(normalized.value, data.value.rows.view);
|
|
270
|
+
}
|
|
271
|
+
else if (mutation.type === 'replace-column-tracks') {
|
|
272
|
+
const normalized = normalizeTracks(mutation.tracks, state.maxTracks);
|
|
273
|
+
if (!normalized.ok)
|
|
274
|
+
return transitionResult(normalized);
|
|
275
|
+
columns = preserveExtents(normalized.value, data.value.columns.view);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Partitioned grid mutation type is unsupported.', { mutation });
|
|
279
|
+
}
|
|
280
|
+
const generation = nextGeneration(state.generation);
|
|
281
|
+
if (!generation.ok)
|
|
282
|
+
return generation;
|
|
283
|
+
const before = baseAnchorRect(state, anchor);
|
|
284
|
+
const next = createState({
|
|
285
|
+
rows,
|
|
286
|
+
columns,
|
|
287
|
+
regions,
|
|
288
|
+
rowGap: state.rowGap,
|
|
289
|
+
columnGap: state.columnGap,
|
|
290
|
+
maxTracks: state.maxTracks,
|
|
291
|
+
maxRegions: state.maxRegions,
|
|
292
|
+
generation: generation.value,
|
|
293
|
+
});
|
|
294
|
+
if (!next.ok)
|
|
295
|
+
return transitionResult(next);
|
|
296
|
+
return ok(Object.freeze({ state: next.value, scrollDelta: anchorDelta(before, baseAnchorRect(next.value, anchor)) }));
|
|
297
|
+
}
|
|
298
|
+
export function partitionedTrackGridScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
299
|
+
return unwrap(tryPartitionedTrackGridScrollTarget(state, id, viewport, alignment));
|
|
300
|
+
}
|
|
301
|
+
export function tryPartitionedTrackGridScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
302
|
+
const normalized = normalizeQuery({ viewport });
|
|
303
|
+
if (!normalized.ok)
|
|
304
|
+
return normalized;
|
|
305
|
+
const data = getInternals(state);
|
|
306
|
+
if (!data.ok)
|
|
307
|
+
return data;
|
|
308
|
+
const region = state.regions[data.value.regionIndex.get(id) ?? -1];
|
|
309
|
+
const rect = trackGridRegionRect(data.value.grid, id);
|
|
310
|
+
if (region === undefined || rect === null) {
|
|
311
|
+
return fail('transition-rejection', 'virtual-layout-scroll-target-invalid', 'Scroll target must exist in the partitioned grid region domain.', { id });
|
|
312
|
+
}
|
|
313
|
+
const rowIndex = data.value.rowIndex.get(region.row);
|
|
314
|
+
const columnIndex = data.value.columnIndex.get(region.column);
|
|
315
|
+
if (rowIndex === undefined || columnIndex === undefined)
|
|
316
|
+
return domainMismatch('Scroll target track index is stale.');
|
|
317
|
+
const rowPinned = data.value.rowPartitions[rowIndex] !== 'center';
|
|
318
|
+
const columnPinned = data.value.columnPartitions[columnIndex] !== 'center';
|
|
319
|
+
const contentWidth = data.value.grid.columns.totalExtent + gapExtent(state.columns.size, state.columnGap);
|
|
320
|
+
const contentHeight = data.value.grid.rows.totalExtent + gapExtent(state.rows.size, state.rowGap);
|
|
321
|
+
return ok(Object.freeze({
|
|
322
|
+
x: columnPinned ? viewport.x : alignedScrollOffset(rect.x, rect.width, viewport.x, viewport.width, contentWidth, alignment),
|
|
323
|
+
y: rowPinned ? viewport.y : alignedScrollOffset(rect.y, rect.height, viewport.y, viewport.height, contentHeight, alignment),
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
function createState(input) {
|
|
327
|
+
const built = buildGrid(input.rows, input.columns, input.regions, input);
|
|
328
|
+
if (!built.ok)
|
|
329
|
+
return built;
|
|
330
|
+
const mutable = { ...input, rows: built.value.rows.view, columns: built.value.columns.view };
|
|
331
|
+
Object.defineProperty(mutable, partitionedTrackGridLayoutStateBrand, { value: true });
|
|
332
|
+
const state = Object.freeze(mutable);
|
|
333
|
+
internals.set(state, built.value);
|
|
334
|
+
return ok(state);
|
|
335
|
+
}
|
|
336
|
+
function createMeasuredState(previous, data, rows, columns, grid, generation) {
|
|
337
|
+
const mutable = { ...previous, rows: rows.view, columns: columns.view, generation };
|
|
338
|
+
Object.defineProperty(mutable, partitionedTrackGridLayoutStateBrand, { value: true });
|
|
339
|
+
const state = Object.freeze(mutable);
|
|
340
|
+
internals.set(state, {
|
|
341
|
+
...data,
|
|
342
|
+
grid,
|
|
343
|
+
rows,
|
|
344
|
+
columns,
|
|
345
|
+
rowRanges: partitionRangesFromTemplate(data.rowRanges, grid.rows, state.rowGap),
|
|
346
|
+
columnRanges: partitionRangesFromTemplate(data.columnRanges, grid.columns, state.columnGap),
|
|
347
|
+
});
|
|
348
|
+
return state;
|
|
349
|
+
}
|
|
350
|
+
function buildGrid(rows, columns, regions, input) {
|
|
351
|
+
const rowIndex = new Map(rows.map((track, index) => [track.id, index]));
|
|
352
|
+
const columnIndex = new Map(columns.map((track, index) => [track.id, index]));
|
|
353
|
+
const numericRegions = [];
|
|
354
|
+
for (const region of regions) {
|
|
355
|
+
const row = rowIndex.get(region.row);
|
|
356
|
+
const column = columnIndex.get(region.column);
|
|
357
|
+
const rowSpan = region.rowSpan ?? 1;
|
|
358
|
+
const columnSpan = region.columnSpan ?? 1;
|
|
359
|
+
if (row === undefined || column === undefined) {
|
|
360
|
+
return fail('construction', 'virtual-layout-region-invalid', 'Partitioned grid regions must reference existing row and column tracks.', { region });
|
|
361
|
+
}
|
|
362
|
+
if (!spanWithinPartition(rows, row, rowSpan) || !spanWithinPartition(columns, column, columnSpan)) {
|
|
363
|
+
return fail('construction', 'virtual-layout-region-invalid', 'Partitioned grid regions cannot span logical partition boundaries.', { region });
|
|
364
|
+
}
|
|
365
|
+
numericRegions.push(Object.freeze({
|
|
366
|
+
id: region.id,
|
|
367
|
+
row,
|
|
368
|
+
column,
|
|
369
|
+
...(rowSpan === 1 ? {} : { rowSpan }),
|
|
370
|
+
...(columnSpan === 1 ? {} : { columnSpan }),
|
|
371
|
+
}));
|
|
372
|
+
}
|
|
373
|
+
const rowExtents = tryCreateExtentIndex(rows.map(({ extent }) => extent), { maxItems: input.maxTracks });
|
|
374
|
+
if (!rowExtents.ok)
|
|
375
|
+
return rowExtents;
|
|
376
|
+
const columnExtents = tryCreateExtentIndex(columns.map(({ extent }) => extent), { maxItems: input.maxTracks });
|
|
377
|
+
if (!columnExtents.ok)
|
|
378
|
+
return columnExtents;
|
|
379
|
+
const grid = tryCreateTrackGridLayout(rowExtents.value, columnExtents.value, numericRegions, {
|
|
380
|
+
rowGap: input.rowGap,
|
|
381
|
+
columnGap: input.columnGap,
|
|
382
|
+
maxRegions: input.maxRegions,
|
|
383
|
+
});
|
|
384
|
+
if (!grid.ok)
|
|
385
|
+
return grid;
|
|
386
|
+
return ok(Object.freeze({
|
|
387
|
+
grid: grid.value,
|
|
388
|
+
rowIndex,
|
|
389
|
+
columnIndex,
|
|
390
|
+
regionIndex: new Map(regions.map((region, index) => [region.id, index])),
|
|
391
|
+
rowRanges: partitionRanges(rows, rowExtents.value, input.rowGap),
|
|
392
|
+
columnRanges: partitionRanges(columns, columnExtents.value, input.columnGap),
|
|
393
|
+
rows: createBlockedVector(rows),
|
|
394
|
+
columns: createBlockedVector(columns),
|
|
395
|
+
rowPartitions: Object.freeze(rows.map((track) => track.partition)),
|
|
396
|
+
columnPartitions: Object.freeze(columns.map((track) => track.partition)),
|
|
397
|
+
}));
|
|
398
|
+
}
|
|
399
|
+
function normalizeTracks(tracks, maxTracks) {
|
|
400
|
+
if (tracks.length > maxTracks)
|
|
401
|
+
return fail('resource-rejection', 'extent-index-ceiling-exceeded', 'Partitioned tracks exceed maxTracks.', { size: tracks.length, maxTracks });
|
|
402
|
+
const domain = tryCreateSequence(tracks.map(({ id }) => id), { maxItems: Math.max(1, maxTracks) });
|
|
403
|
+
if (!domain.ok)
|
|
404
|
+
return domain;
|
|
405
|
+
const grouped = [];
|
|
406
|
+
for (const partition of ['start', 'center', 'end']) {
|
|
407
|
+
for (const track of tracks) {
|
|
408
|
+
if (!validPartition(track.partition))
|
|
409
|
+
return fail('construction', 'virtual-layout-domain-mismatch', 'Track partition must be start, center, or end.', { track });
|
|
410
|
+
if (track.partition === partition)
|
|
411
|
+
grouped.push(Object.freeze({ id: track.id, partition, extent: Object.freeze({ ...track.extent }) }));
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
const extents = tryCreateExtentIndex(grouped.map(({ extent }) => extent), { maxItems: maxTracks });
|
|
415
|
+
if (!extents.ok)
|
|
416
|
+
return extents;
|
|
417
|
+
return ok(Object.freeze(grouped));
|
|
418
|
+
}
|
|
419
|
+
function partitionRanges(tracks, extents, gap) {
|
|
420
|
+
return partitionRangesFromPartitions(tracks.map((track) => track.partition), extents, gap);
|
|
421
|
+
}
|
|
422
|
+
function partitionRangesFromPartitions(partitions, extents, gap) {
|
|
423
|
+
const starts = partitions.filter((partition) => partition === 'start').length;
|
|
424
|
+
const centers = partitions.filter((partition) => partition === 'center').length;
|
|
425
|
+
const start = makeRange(extents, gap, 0, starts);
|
|
426
|
+
const center = makeRange(extents, gap, starts, starts + centers);
|
|
427
|
+
const end = makeRange(extents, gap, starts + centers, partitions.length);
|
|
428
|
+
return Object.freeze({ start, center, end });
|
|
429
|
+
}
|
|
430
|
+
function partitionRangesFromTemplate(template, extents, gap) {
|
|
431
|
+
return Object.freeze({
|
|
432
|
+
start: makeRange(extents, gap, template.start.startIndex, template.start.endIndex),
|
|
433
|
+
center: makeRange(extents, gap, template.center.startIndex, template.center.endIndex),
|
|
434
|
+
end: makeRange(extents, gap, template.end.startIndex, template.end.endIndex),
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
function makeRange(extents, gap, startIndex, endIndex) {
|
|
438
|
+
const offset = extents.offsetAt(startIndex) ?? extents.totalExtent;
|
|
439
|
+
const endOffset = extents.offsetAt(endIndex) ?? extents.totalExtent;
|
|
440
|
+
return Object.freeze({
|
|
441
|
+
startIndex,
|
|
442
|
+
endIndex,
|
|
443
|
+
offset: offset + gap * startIndex,
|
|
444
|
+
extent: Math.max(0, endOffset - offset + gapExtent(endIndex - startIndex, gap)),
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
function querySegments(ranges, renderStart, renderExtent) {
|
|
448
|
+
const result = [];
|
|
449
|
+
if (ranges.start.endIndex > ranges.start.startIndex)
|
|
450
|
+
result.push(ranges.start);
|
|
451
|
+
if (ranges.center.endIndex > ranges.center.startIndex) {
|
|
452
|
+
const start = Math.max(ranges.center.offset, renderStart);
|
|
453
|
+
const end = Math.min(ranges.center.offset + ranges.center.extent, renderStart + renderExtent);
|
|
454
|
+
if (end > start)
|
|
455
|
+
result.push(Object.freeze({ ...ranges.center, offset: start, extent: end - start }));
|
|
456
|
+
}
|
|
457
|
+
if (ranges.end.endIndex > ranges.end.startIndex)
|
|
458
|
+
result.push(ranges.end);
|
|
459
|
+
return Object.freeze(result);
|
|
460
|
+
}
|
|
461
|
+
function projectRect(rect, rowPartition, columnPartition, rowRanges, columnRanges, viewport) {
|
|
462
|
+
return Object.freeze({
|
|
463
|
+
x: projectAxis(rect.x, rect.width, columnPartition, columnRanges, viewport.x, viewport.width),
|
|
464
|
+
y: projectAxis(rect.y, rect.height, rowPartition, rowRanges, viewport.y, viewport.height),
|
|
465
|
+
width: rect.width,
|
|
466
|
+
height: rect.height,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
function projectAxis(start, extent, partition, ranges, viewportStart, viewportExtent) {
|
|
470
|
+
if (partition === 'start')
|
|
471
|
+
return viewportStart + start - ranges.start.offset;
|
|
472
|
+
if (partition === 'end')
|
|
473
|
+
return viewportStart + viewportExtent - ranges.end.extent + start - ranges.end.offset;
|
|
474
|
+
return start;
|
|
475
|
+
}
|
|
476
|
+
function preserveExtents(next, previous) {
|
|
477
|
+
const current = new Map();
|
|
478
|
+
previous.forEach((track) => current.set(track.id, track.extent));
|
|
479
|
+
return Object.freeze(next.map((track) => Object.freeze({ ...track, extent: current.get(track.id) ?? track.extent })));
|
|
480
|
+
}
|
|
481
|
+
function baseAnchorRect(state, anchor) {
|
|
482
|
+
if (anchor === null || anchor === undefined)
|
|
483
|
+
return null;
|
|
484
|
+
const data = internals.get(state);
|
|
485
|
+
return data === undefined ? null : trackGridRegionRect(data.grid, anchor.id);
|
|
486
|
+
}
|
|
487
|
+
function freezeTrackView(tracks) {
|
|
488
|
+
const output = [];
|
|
489
|
+
tracks.forEach((track) => output.push(Object.freeze({ id: track.id, partition: track.partition, extent: Object.freeze({ ...track.extent }) })));
|
|
490
|
+
return Object.freeze(output);
|
|
491
|
+
}
|
|
492
|
+
function materializeChanges(vector, changes) {
|
|
493
|
+
const output = new Array(vector.size);
|
|
494
|
+
let cursor = 0;
|
|
495
|
+
vector.forEach((value, index) => {
|
|
496
|
+
if (cursor < changes.length && changes[cursor][0] === index)
|
|
497
|
+
output[index] = changes[cursor++][1];
|
|
498
|
+
else
|
|
499
|
+
output[index] = value;
|
|
500
|
+
});
|
|
501
|
+
return Object.freeze(output);
|
|
502
|
+
}
|
|
503
|
+
function freezeRegions(regions) {
|
|
504
|
+
return Object.freeze(regions.map((region) => Object.freeze({
|
|
505
|
+
id: region.id,
|
|
506
|
+
row: region.row,
|
|
507
|
+
column: region.column,
|
|
508
|
+
...(region.rowSpan === undefined || region.rowSpan === 1 ? {} : { rowSpan: region.rowSpan }),
|
|
509
|
+
...(region.columnSpan === undefined || region.columnSpan === 1 ? {} : { columnSpan: region.columnSpan }),
|
|
510
|
+
})));
|
|
511
|
+
}
|
|
512
|
+
function spanWithinPartition(tracks, start, span) {
|
|
513
|
+
if (!Number.isSafeInteger(span) || span <= 0 || start + span > tracks.length)
|
|
514
|
+
return false;
|
|
515
|
+
const partition = tracks[start]?.partition;
|
|
516
|
+
for (let index = start + 1; index < start + span; index += 1)
|
|
517
|
+
if (tracks[index]?.partition !== partition)
|
|
518
|
+
return false;
|
|
519
|
+
return partition !== undefined;
|
|
520
|
+
}
|
|
521
|
+
function getInternals(state) {
|
|
522
|
+
const value = internals.get(state);
|
|
523
|
+
return value === undefined
|
|
524
|
+
? domainMismatch('Partitioned grid layout state must be created by createPartitionedTrackGridLayout().')
|
|
525
|
+
: ok(value);
|
|
526
|
+
}
|
|
527
|
+
function requireInternals(state) {
|
|
528
|
+
if (!internals.has(state))
|
|
529
|
+
throw new TypeError('Partitioned grid layout state must be created by createPartitionedTrackGridLayout().');
|
|
530
|
+
}
|
|
531
|
+
function validSnapshotHeader(snapshot) {
|
|
532
|
+
return snapshot !== null
|
|
533
|
+
&& typeof snapshot === 'object'
|
|
534
|
+
&& snapshot.schemaVersion === 1
|
|
535
|
+
&& snapshot.kind === 'partitioned-track-grid'
|
|
536
|
+
&& Array.isArray(snapshot.rows)
|
|
537
|
+
&& Array.isArray(snapshot.columns)
|
|
538
|
+
&& Array.isArray(snapshot.regions)
|
|
539
|
+
&& nonNegativeSafe(snapshot.maxTracks)
|
|
540
|
+
&& snapshot.maxTracks >= snapshot.rows.length
|
|
541
|
+
&& snapshot.maxTracks >= snapshot.columns.length
|
|
542
|
+
&& nonNegativeSafe(snapshot.maxRegions)
|
|
543
|
+
&& snapshot.maxRegions >= snapshot.regions.length
|
|
544
|
+
&& nonNegativeSafe(snapshot.generation);
|
|
545
|
+
}
|
|
546
|
+
function transitionResult(result) {
|
|
547
|
+
return result.ok || result.error.class !== 'construction'
|
|
548
|
+
? result
|
|
549
|
+
: { ok: false, error: { ...result.error, class: 'transition-rejection' } };
|
|
550
|
+
}
|
|
551
|
+
function measurementFailure(message, measurement) {
|
|
552
|
+
return fail('transition-rejection', 'virtual-layout-measurement-invalid', message, { measurement });
|
|
553
|
+
}
|
|
554
|
+
function domainMismatch(message) {
|
|
555
|
+
return fail('construction', 'virtual-layout-domain-mismatch', message);
|
|
556
|
+
}
|
|
557
|
+
function snapshotFailure() {
|
|
558
|
+
return fail('construction', 'virtual-layout-snapshot-invalid', 'Partitioned track-grid layout snapshot is invalid.');
|
|
559
|
+
}
|
|
560
|
+
function nextGeneration(generation) {
|
|
561
|
+
return generation === Number.MAX_SAFE_INTEGER
|
|
562
|
+
? fail('resource-rejection', 'virtual-layout-generation-exhausted', 'Layout generation reached the safe-integer ceiling.')
|
|
563
|
+
: ok(generation + 1);
|
|
564
|
+
}
|
|
565
|
+
function anchorDelta(before, after) {
|
|
566
|
+
return before === null || after === null ? ZERO_POINT : pointDelta(before, after);
|
|
567
|
+
}
|
|
568
|
+
function gapExtent(size, gap) {
|
|
569
|
+
return Math.max(0, size - 1) * gap;
|
|
570
|
+
}
|
|
571
|
+
function validPartition(value) {
|
|
572
|
+
return value === 'start' || value === 'center' || value === 'end';
|
|
573
|
+
}
|
|
574
|
+
function finiteNonNegative(value) {
|
|
575
|
+
return Number.isFinite(value) && value >= 0;
|
|
576
|
+
}
|
|
577
|
+
function nonNegativeSafe(value) {
|
|
578
|
+
return Number.isSafeInteger(value) && value >= 0;
|
|
579
|
+
}
|
|
580
|
+
function sameExtent(left, right) {
|
|
581
|
+
return right !== null && typeof right === 'object' && left.kind === right.kind && (left.kind === 'unknown'
|
|
582
|
+
? left.fallback === (right.kind === 'unknown' ? right.fallback : Number.NaN)
|
|
583
|
+
: left.value === (right.kind === 'unknown' ? Number.NaN : right.value));
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=partitioned-track-grid-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partitioned-track-grid-layout.js","sourceRoot":"","sources":["../src/partitioned-track-grid-layout.ts"],"names":[],"mappings":"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"}
|