@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.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/extent-index.d.ts +40 -0
- package/dist/extent-index.d.ts.map +1 -0
- package/dist/extent-index.js +388 -0
- package/dist/extent-index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/foundation.d.ts +6 -0
- package/dist/internal/foundation.d.ts.map +1 -0
- package/dist/internal/foundation.js +28 -0
- package/dist/internal/foundation.js.map +1 -0
- package/dist/internal/machine.d.ts +4 -0
- package/dist/internal/machine.d.ts.map +1 -0
- package/dist/internal/machine.js +8 -0
- package/dist/internal/machine.js.map +1 -0
- package/dist/internal/track.d.ts +14 -0
- package/dist/internal/track.d.ts.map +1 -0
- package/dist/internal/track.js +72 -0
- package/dist/internal/track.js.map +1 -0
- package/dist/layout.d.ts +72 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +75 -0
- package/dist/layout.js.map +1 -0
- package/dist/linear-layout.d.ts +61 -0
- package/dist/linear-layout.d.ts.map +1 -0
- package/dist/linear-layout.js +192 -0
- package/dist/linear-layout.js.map +1 -0
- package/dist/masonry-layout.d.ts +66 -0
- package/dist/masonry-layout.d.ts.map +1 -0
- package/dist/masonry-layout.js +270 -0
- package/dist/masonry-layout.js.map +1 -0
- package/dist/spatial-layout.d.ts +48 -0
- package/dist/spatial-layout.d.ts.map +1 -0
- package/dist/spatial-layout.js +237 -0
- package/dist/spatial-layout.js.map +1 -0
- package/dist/track-grid-layout.d.ts +62 -0
- package/dist/track-grid-layout.d.ts.map +1 -0
- package/dist/track-grid-layout.js +263 -0
- package/dist/track-grid-layout.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { tryApplySequencePatch } from '@sectile/core/sequence';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { fail, ok } from './internal/foundation.js';
|
|
4
|
+
import { extentValue } from './internal/track.js';
|
|
5
|
+
import { alignedScrollOffset, anchorForPlan, normalizeQuery, pointDelta, rectanglesIntersect, ZERO_POINT, } from './layout.js';
|
|
6
|
+
const internals = new WeakMap();
|
|
7
|
+
export const masonryLayoutStrategy = Object.freeze({
|
|
8
|
+
kind: 'masonry',
|
|
9
|
+
tryQuery: (state, input) => tryQueryMasonryLayout(state, input),
|
|
10
|
+
tryMeasure: (state, batch) => tryApplyMasonryMeasurements(state, batch),
|
|
11
|
+
tryMutate: (state, input) => tryApplyMasonryMutation(state, input.mutation, input.anchor),
|
|
12
|
+
tryScrollTarget: (state, id, viewport, alignment) => tryMasonryScrollTarget(state, id, viewport, alignment),
|
|
13
|
+
});
|
|
14
|
+
export function createMasonryLayout(domain, extents, input) {
|
|
15
|
+
return unwrap(tryCreateMasonryLayout(domain, extents, input));
|
|
16
|
+
}
|
|
17
|
+
export function tryCreateMasonryLayout(domain, extents, input) {
|
|
18
|
+
if (domain.size !== extents.size)
|
|
19
|
+
return fail('construction', 'virtual-layout-domain-mismatch', 'Masonry domain and extent index must have the same size.', { domainSize: domain.size, extentSize: extents.size });
|
|
20
|
+
const geometry = normalizeGeometry(input);
|
|
21
|
+
if (!geometry.ok)
|
|
22
|
+
return geometry;
|
|
23
|
+
return ok(createState({ domain, extents, ...geometry.value, generation: 0 }));
|
|
24
|
+
}
|
|
25
|
+
export function queryMasonryLayout(state, input) {
|
|
26
|
+
return unwrap(tryQueryMasonryLayout(state, input));
|
|
27
|
+
}
|
|
28
|
+
export function tryQueryMasonryLayout(state, input) {
|
|
29
|
+
const normalized = normalizeQuery(input);
|
|
30
|
+
if (!normalized.ok)
|
|
31
|
+
return normalized;
|
|
32
|
+
const data = getInternals(state);
|
|
33
|
+
if (!data.ok)
|
|
34
|
+
return data;
|
|
35
|
+
const renderMain = mainBounds(state, normalized.value.renderBounds, data.value.contentMain);
|
|
36
|
+
const laneRange = visibleLanes(state, normalized.value.renderBounds);
|
|
37
|
+
const placements = [];
|
|
38
|
+
for (let laneIndex = laneRange.start; laneIndex < laneRange.end; laneIndex += 1) {
|
|
39
|
+
const lane = data.value.lanes[laneIndex];
|
|
40
|
+
const start = firstEndingAfter(lane, renderMain.start);
|
|
41
|
+
for (let index = start; index < lane.length && lane[index].start < renderMain.end; index += 1) {
|
|
42
|
+
const logical = lane[index];
|
|
43
|
+
const rect = placementRect(state, data.value.contentMain, logical);
|
|
44
|
+
if (!rectanglesIntersect(rect, normalized.value.renderBounds))
|
|
45
|
+
continue;
|
|
46
|
+
placements.push(Object.freeze({ id: logical.id, index: logical.index, lane: logical.lane, rect, visible: rectanglesIntersect(rect, normalized.value.viewport) }));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
placements.sort((left, right) => left.index - right.index);
|
|
50
|
+
const frozen = Object.freeze(placements);
|
|
51
|
+
return ok(Object.freeze({
|
|
52
|
+
generation: state.generation,
|
|
53
|
+
contentSize: contentSize(state, data.value.contentMain),
|
|
54
|
+
viewport: normalized.value.viewport,
|
|
55
|
+
renderBounds: normalized.value.renderBounds,
|
|
56
|
+
placements: frozen,
|
|
57
|
+
anchor: anchorForPlan(normalized.value.viewport, frozen),
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
export function applyMasonryMeasurements(state, batch) {
|
|
61
|
+
return unwrap(tryApplyMasonryMeasurements(state, batch));
|
|
62
|
+
}
|
|
63
|
+
export function tryApplyMasonryMeasurements(state, batch) {
|
|
64
|
+
if (batch.generation !== state.generation)
|
|
65
|
+
return fail('transition-rejection', 'virtual-layout-measurement-stale', 'Measurement generation is stale.', { generation: batch.generation, activeGeneration: state.generation });
|
|
66
|
+
if (batch.measurements.length === 0)
|
|
67
|
+
return ok(Object.freeze({ state, scrollDelta: ZERO_POINT }));
|
|
68
|
+
const before = anchorRect(state, batch.anchor);
|
|
69
|
+
const updated = state.extents.update(batch.measurements);
|
|
70
|
+
if (!updated.ok)
|
|
71
|
+
return updated;
|
|
72
|
+
const generation = nextGeneration(state.generation);
|
|
73
|
+
if (!generation.ok)
|
|
74
|
+
return generation;
|
|
75
|
+
const next = createState({ ...state, extents: updated.value, generation: generation.value });
|
|
76
|
+
return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, batch.anchor)) }));
|
|
77
|
+
}
|
|
78
|
+
export function applyMasonryMutation(state, mutation, anchor = null) {
|
|
79
|
+
return unwrap(tryApplyMasonryMutation(state, mutation, anchor));
|
|
80
|
+
}
|
|
81
|
+
export function tryApplyMasonryMutation(state, mutation, anchor = null) {
|
|
82
|
+
if (mutation.type !== 'items' && mutation.type !== 'geometry')
|
|
83
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Masonry mutation type is unsupported.', { mutation });
|
|
84
|
+
const before = anchorRect(state, anchor);
|
|
85
|
+
let partial;
|
|
86
|
+
if (mutation.type === 'items') {
|
|
87
|
+
const inserted = mutation.insertedExtents ?? [];
|
|
88
|
+
if (mutation.patch.type === 'splice' && inserted.length !== mutation.patch.inserted.length)
|
|
89
|
+
return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Every inserted identity requires one extent.');
|
|
90
|
+
if (mutation.patch.type === 'move' && inserted.length !== 0)
|
|
91
|
+
return fail('transition-rejection', 'virtual-layout-inserted-extents-mismatch', 'Move patches cannot insert extents.');
|
|
92
|
+
const size = state.domain.size - (mutation.patch.type === 'splice' ? mutation.patch.deleteCount : 0) + inserted.length;
|
|
93
|
+
const domain = tryApplySequencePatch(state.domain, mutation.patch, { maxItems: Math.max(1, size) });
|
|
94
|
+
if (!domain.ok)
|
|
95
|
+
return domain;
|
|
96
|
+
const extents = mutation.patch.type === 'splice'
|
|
97
|
+
? state.extents.splice(mutation.patch.index, mutation.patch.deleteCount, inserted)
|
|
98
|
+
: state.extents.move(mutation.patch.from, mutation.patch.to, mutation.patch.count);
|
|
99
|
+
if (!extents.ok)
|
|
100
|
+
return extents;
|
|
101
|
+
partial = { ...state, domain: domain.value, extents: extents.value };
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const geometry = normalizeGeometry({
|
|
105
|
+
axis: mutation.axis ?? state.axis,
|
|
106
|
+
flow: mutation.flow ?? state.flow,
|
|
107
|
+
laneCount: mutation.laneCount ?? state.laneCount,
|
|
108
|
+
laneExtent: mutation.laneExtent ?? state.laneExtent,
|
|
109
|
+
laneGap: mutation.laneGap ?? state.laneGap,
|
|
110
|
+
itemGap: mutation.itemGap ?? state.itemGap,
|
|
111
|
+
placementPolicy: mutation.placementPolicy ?? state.placementPolicy,
|
|
112
|
+
maxLanes: state.maxLanes,
|
|
113
|
+
});
|
|
114
|
+
if (!geometry.ok)
|
|
115
|
+
return { ok: false, error: { ...geometry.error, class: 'transition-rejection' } };
|
|
116
|
+
partial = { domain: state.domain, extents: state.extents, ...geometry.value };
|
|
117
|
+
}
|
|
118
|
+
const generation = nextGeneration(state.generation);
|
|
119
|
+
if (!generation.ok)
|
|
120
|
+
return generation;
|
|
121
|
+
const next = createState({ ...partial, generation: generation.value });
|
|
122
|
+
return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, anchor)) }));
|
|
123
|
+
}
|
|
124
|
+
export function masonryScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
125
|
+
return unwrap(tryMasonryScrollTarget(state, id, viewport, alignment));
|
|
126
|
+
}
|
|
127
|
+
export function tryMasonryScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
128
|
+
const data = getInternals(state);
|
|
129
|
+
if (!data.ok)
|
|
130
|
+
return data;
|
|
131
|
+
const logical = data.value.byID.get(id);
|
|
132
|
+
if (logical === undefined)
|
|
133
|
+
return fail('transition-rejection', 'virtual-layout-scroll-target-invalid', 'Scroll target must exist in the masonry domain.', { id });
|
|
134
|
+
const rect = placementRect(state, data.value.contentMain, logical);
|
|
135
|
+
const size = contentSize(state, data.value.contentMain);
|
|
136
|
+
return ok(Object.freeze(state.axis === 'vertical'
|
|
137
|
+
? { x: viewport.x, y: alignedScrollOffset(rect.y, rect.height, viewport.y, viewport.height, size.height, alignment) }
|
|
138
|
+
: { x: alignedScrollOffset(rect.x, rect.width, viewport.x, viewport.width, size.width, alignment), y: viewport.y }));
|
|
139
|
+
}
|
|
140
|
+
export function masonryRectAt(state, id) {
|
|
141
|
+
const data = internals.get(state);
|
|
142
|
+
const logical = data?.byID.get(id);
|
|
143
|
+
return logical === undefined || data === undefined ? null : placementRect(state, data.contentMain, logical);
|
|
144
|
+
}
|
|
145
|
+
function createState(state) {
|
|
146
|
+
const frozen = Object.freeze(state);
|
|
147
|
+
internals.set(frozen, buildInternals(frozen));
|
|
148
|
+
return frozen;
|
|
149
|
+
}
|
|
150
|
+
function buildInternals(state) {
|
|
151
|
+
const laneEnds = Array(state.laneCount).fill(0);
|
|
152
|
+
const heap = state.placementPolicy === 'shortest' && state.laneCount > 16
|
|
153
|
+
? Array.from({ length: state.laneCount }, (_, lane) => ({ lane, end: 0 }))
|
|
154
|
+
: null;
|
|
155
|
+
const lanes = Array.from({ length: state.laneCount }, () => []);
|
|
156
|
+
const placements = [];
|
|
157
|
+
const byID = new Map();
|
|
158
|
+
const extents = state.extents.slice(0, state.extents.size);
|
|
159
|
+
if (extents === null)
|
|
160
|
+
throw new Error('Internal invariant breach: masonry extent range is invalid.');
|
|
161
|
+
for (let index = 0; index < state.domain.size; index += 1) {
|
|
162
|
+
const id = state.domain.at(index);
|
|
163
|
+
const extent = extentValue(extents[index]);
|
|
164
|
+
const lane = state.placementPolicy === 'round-robin' ? index % state.laneCount : heap === null ? shortestLane(laneEnds) : heap[0].lane;
|
|
165
|
+
const start = laneEnds[lane];
|
|
166
|
+
const placement = Object.freeze({ id, index, lane, start, extent });
|
|
167
|
+
placements.push(placement);
|
|
168
|
+
lanes[lane].push(placement);
|
|
169
|
+
byID.set(id, placement);
|
|
170
|
+
laneEnds[lane] = start + extent + state.itemGap;
|
|
171
|
+
if (heap !== null) {
|
|
172
|
+
heap[0] = { lane, end: laneEnds[lane] };
|
|
173
|
+
restoreHeap(heap);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
let contentMain = 0;
|
|
177
|
+
for (const end of laneEnds)
|
|
178
|
+
contentMain = Math.max(contentMain, end === 0 ? 0 : end - state.itemGap);
|
|
179
|
+
return Object.freeze({ placements: Object.freeze(placements), lanes: Object.freeze(lanes.map((lane) => Object.freeze(lane))), byID, contentMain });
|
|
180
|
+
}
|
|
181
|
+
function normalizeGeometry(input) {
|
|
182
|
+
const axis = input.axis ?? 'vertical';
|
|
183
|
+
const flow = input.flow ?? 'forward';
|
|
184
|
+
const laneGap = input.laneGap ?? 0;
|
|
185
|
+
const itemGap = input.itemGap ?? 0;
|
|
186
|
+
const placementPolicy = input.placementPolicy ?? 'shortest';
|
|
187
|
+
const maxLanes = input.maxLanes ?? 4_096;
|
|
188
|
+
if (!Number.isSafeInteger(maxLanes) || maxLanes < 1)
|
|
189
|
+
return fail('construction', 'invalid-max-items', 'maxLanes must be a positive safe integer.', { maxLanes });
|
|
190
|
+
if (input.laneCount > maxLanes)
|
|
191
|
+
return fail('resource-rejection', 'item-ceiling-exceeded', 'Masonry lane count exceeds maxLanes.', { laneCount: input.laneCount, maxLanes });
|
|
192
|
+
if ((axis !== 'vertical' && axis !== 'horizontal') || (flow !== 'forward' && flow !== 'reverse')
|
|
193
|
+
|| !Number.isSafeInteger(input.laneCount) || input.laneCount < 1 || !finitePositive(input.laneExtent)
|
|
194
|
+
|| !finiteNonNegative(laneGap) || !finiteNonNegative(itemGap)
|
|
195
|
+
|| (placementPolicy !== 'shortest' && placementPolicy !== 'round-robin')) {
|
|
196
|
+
return fail('construction', 'virtual-layout-geometry-invalid', 'Masonry axis, flow, lanes, gaps, and placement policy are invalid.');
|
|
197
|
+
}
|
|
198
|
+
return ok(Object.freeze({ axis, flow, laneCount: input.laneCount, laneExtent: input.laneExtent, laneGap, itemGap, placementPolicy, maxLanes }));
|
|
199
|
+
}
|
|
200
|
+
function placementRect(state, contentMain, placement) {
|
|
201
|
+
const main = state.flow === 'forward' ? placement.start : contentMain - placement.start - placement.extent;
|
|
202
|
+
const cross = placement.lane * (state.laneExtent + state.laneGap);
|
|
203
|
+
return Object.freeze(state.axis === 'vertical'
|
|
204
|
+
? { x: cross, y: main, width: state.laneExtent, height: placement.extent }
|
|
205
|
+
: { x: main, y: cross, width: placement.extent, height: state.laneExtent });
|
|
206
|
+
}
|
|
207
|
+
function mainBounds(state, rect, contentMain) {
|
|
208
|
+
const start = state.axis === 'vertical' ? rect.y : rect.x;
|
|
209
|
+
const end = start + (state.axis === 'vertical' ? rect.height : rect.width);
|
|
210
|
+
return state.flow === 'forward' ? { start, end } : { start: Math.max(0, contentMain - end), end: Math.max(0, contentMain - start) };
|
|
211
|
+
}
|
|
212
|
+
function visibleLanes(state, rect) {
|
|
213
|
+
const crossStart = state.axis === 'vertical' ? rect.x : rect.y;
|
|
214
|
+
const crossEnd = crossStart + (state.axis === 'vertical' ? rect.width : rect.height);
|
|
215
|
+
const stride = state.laneExtent + state.laneGap;
|
|
216
|
+
const start = Math.min(state.laneCount, Math.max(0, Math.floor(crossStart / stride)));
|
|
217
|
+
const end = Math.min(state.laneCount, Math.max(start, Math.ceil((crossEnd + state.laneGap) / stride)));
|
|
218
|
+
return { start, end };
|
|
219
|
+
}
|
|
220
|
+
function firstEndingAfter(lane, offset) {
|
|
221
|
+
let low = 0;
|
|
222
|
+
let high = lane.length;
|
|
223
|
+
while (low < high) {
|
|
224
|
+
const middle = (low + high) >>> 1;
|
|
225
|
+
const placement = lane[middle];
|
|
226
|
+
if (placement.start + placement.extent <= offset)
|
|
227
|
+
low = middle + 1;
|
|
228
|
+
else
|
|
229
|
+
high = middle;
|
|
230
|
+
}
|
|
231
|
+
return low;
|
|
232
|
+
}
|
|
233
|
+
function shortestLane(laneEnds) {
|
|
234
|
+
let selected = 0;
|
|
235
|
+
for (let lane = 1; lane < laneEnds.length; lane += 1)
|
|
236
|
+
if (laneEnds[lane] < laneEnds[selected])
|
|
237
|
+
selected = lane;
|
|
238
|
+
return selected;
|
|
239
|
+
}
|
|
240
|
+
function restoreHeap(heap) {
|
|
241
|
+
let index = 0;
|
|
242
|
+
while (true) {
|
|
243
|
+
const left = index * 2 + 1;
|
|
244
|
+
if (left >= heap.length)
|
|
245
|
+
return;
|
|
246
|
+
const right = left + 1;
|
|
247
|
+
let child = right < heap.length && compareLane(heap[right], heap[left]) < 0 ? right : left;
|
|
248
|
+
if (compareLane(heap[index], heap[child]) <= 0)
|
|
249
|
+
return;
|
|
250
|
+
[heap[index], heap[child]] = [heap[child], heap[index]];
|
|
251
|
+
index = child;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function compareLane(left, right) { return left.end - right.end || left.lane - right.lane; }
|
|
255
|
+
function anchorRect(state, anchor) {
|
|
256
|
+
return anchor === null || anchor === undefined ? null : masonryRectAt(state, anchor.id);
|
|
257
|
+
}
|
|
258
|
+
function contentSize(state, contentMain) {
|
|
259
|
+
const cross = state.laneCount * state.laneExtent + Math.max(0, state.laneCount - 1) * state.laneGap;
|
|
260
|
+
return Object.freeze(state.axis === 'vertical' ? { width: cross, height: contentMain } : { width: contentMain, height: cross });
|
|
261
|
+
}
|
|
262
|
+
function getInternals(state) {
|
|
263
|
+
const value = internals.get(state);
|
|
264
|
+
return value === undefined ? fail('construction', 'virtual-layout-domain-mismatch', 'Masonry state must be created by createMasonryLayout().') : ok(value);
|
|
265
|
+
}
|
|
266
|
+
function anchorDelta(before, after) { return before === null || after === null ? ZERO_POINT : pointDelta(before, after); }
|
|
267
|
+
function nextGeneration(generation) { return generation === Number.MAX_SAFE_INTEGER ? fail('resource-rejection', 'virtual-layout-generation-exhausted', 'Layout generation reached the safe-integer ceiling.') : ok(generation + 1); }
|
|
268
|
+
function finiteNonNegative(value) { return Number.isFinite(value) && value >= 0; }
|
|
269
|
+
function finitePositive(value) { return Number.isFinite(value) && value > 0; }
|
|
270
|
+
//# sourceMappingURL=masonry-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masonry-layout.js","sourceRoot":"","sources":["../src/masonry-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Result, StableID } from '@sectile/core';
|
|
2
|
+
import { type Sequence } from '@sectile/core/sequence';
|
|
3
|
+
import { type VirtualAnchor, type VirtualLayoutMutation, type VirtualLayoutPlan, type VirtualLayoutStrategy, type VirtualMeasurementBatch, type VirtualPlacement, type VirtualPoint, type VirtualQueryInput, type VirtualRect, type VirtualScrollAlignment } from './layout.js';
|
|
4
|
+
export interface SpatialItem<ID extends StableID = StableID> {
|
|
5
|
+
readonly id: ID;
|
|
6
|
+
readonly rect: VirtualRect;
|
|
7
|
+
readonly zIndex?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface SpatialLayoutState<ID extends StableID = StableID> {
|
|
10
|
+
readonly domain: Sequence<ID>;
|
|
11
|
+
readonly items: readonly SpatialItem<ID>[];
|
|
12
|
+
readonly maxItems: number;
|
|
13
|
+
readonly generation: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SpatialLayoutInput {
|
|
16
|
+
readonly maxItems?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface SpatialMeasurement<ID extends StableID = StableID> {
|
|
19
|
+
readonly id: ID;
|
|
20
|
+
readonly rect: VirtualRect;
|
|
21
|
+
}
|
|
22
|
+
export type SpatialMutation<ID extends StableID = StableID> = {
|
|
23
|
+
readonly type: 'replace';
|
|
24
|
+
readonly items: readonly SpatialItem<ID>[];
|
|
25
|
+
} | {
|
|
26
|
+
readonly type: 'update';
|
|
27
|
+
readonly upsert?: readonly SpatialItem<ID>[];
|
|
28
|
+
readonly remove?: readonly ID[];
|
|
29
|
+
};
|
|
30
|
+
export interface SpatialPlacement<ID extends StableID = StableID> extends VirtualPlacement<ID> {
|
|
31
|
+
readonly zIndex: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SpatialLayoutPlan<ID extends StableID = StableID> extends VirtualLayoutPlan<ID> {
|
|
34
|
+
readonly placements: readonly SpatialPlacement<ID>[];
|
|
35
|
+
}
|
|
36
|
+
export declare const spatialLayoutStrategy: VirtualLayoutStrategy<SpatialLayoutState, StableID, SpatialMeasurement, SpatialMutation>;
|
|
37
|
+
export declare function createSpatialLayout<ID extends StableID>(items: readonly SpatialItem<ID>[], input?: SpatialLayoutInput): SpatialLayoutState<ID>;
|
|
38
|
+
export declare function tryCreateSpatialLayout<ID extends StableID>(items: readonly SpatialItem<ID>[], input?: SpatialLayoutInput): Result<SpatialLayoutState<ID>>;
|
|
39
|
+
export declare function querySpatialLayout<ID extends StableID>(state: SpatialLayoutState<ID>, input: VirtualQueryInput): SpatialLayoutPlan<ID>;
|
|
40
|
+
export declare function tryQuerySpatialLayout<ID extends StableID>(state: SpatialLayoutState<ID>, input: VirtualQueryInput): Result<SpatialLayoutPlan<ID>>;
|
|
41
|
+
export declare function applySpatialMeasurements<ID extends StableID>(state: SpatialLayoutState<ID>, batch: VirtualMeasurementBatch<SpatialMeasurement<ID>, ID>): VirtualLayoutMutation<SpatialLayoutState<ID>>;
|
|
42
|
+
export declare function tryApplySpatialMeasurements<ID extends StableID>(state: SpatialLayoutState<ID>, batch: VirtualMeasurementBatch<SpatialMeasurement<ID>, ID>): Result<VirtualLayoutMutation<SpatialLayoutState<ID>>>;
|
|
43
|
+
export declare function applySpatialMutation<ID extends StableID>(state: SpatialLayoutState<ID>, mutation: SpatialMutation<ID>, anchor?: VirtualAnchor<ID> | null): VirtualLayoutMutation<SpatialLayoutState<ID>>;
|
|
44
|
+
export declare function tryApplySpatialMutation<ID extends StableID>(state: SpatialLayoutState<ID>, mutation: SpatialMutation<ID>, anchor?: VirtualAnchor<ID> | null): Result<VirtualLayoutMutation<SpatialLayoutState<ID>>>;
|
|
45
|
+
export declare function spatialScrollTarget<ID extends StableID>(state: SpatialLayoutState<ID>, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): VirtualPoint;
|
|
46
|
+
export declare function trySpatialScrollTarget<ID extends StableID>(state: SpatialLayoutState<ID>, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): Result<VirtualPoint>;
|
|
47
|
+
export declare function spatialRectAt<ID extends StableID>(state: SpatialLayoutState<ID>, id: ID): VirtualRect | null;
|
|
48
|
+
//# sourceMappingURL=spatial-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-layout.d.ts","sourceRoot":"","sources":["../src/spatial-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { fail, ok } from './internal/foundation.js';
|
|
4
|
+
import { alignedScrollOffset, anchorForPlan, normalizeQuery, pointDelta, rectanglesIntersect, ZERO_POINT, } from './layout.js';
|
|
5
|
+
const LEAF_SIZE = 16;
|
|
6
|
+
const internals = new WeakMap();
|
|
7
|
+
export const spatialLayoutStrategy = Object.freeze({
|
|
8
|
+
kind: 'spatial',
|
|
9
|
+
tryQuery: (state, input) => tryQuerySpatialLayout(state, input),
|
|
10
|
+
tryMeasure: (state, batch) => tryApplySpatialMeasurements(state, batch),
|
|
11
|
+
tryMutate: (state, input) => tryApplySpatialMutation(state, input.mutation, input.anchor),
|
|
12
|
+
tryScrollTarget: (state, id, viewport, alignment) => trySpatialScrollTarget(state, id, viewport, alignment),
|
|
13
|
+
});
|
|
14
|
+
export function createSpatialLayout(items, input = {}) {
|
|
15
|
+
return unwrap(tryCreateSpatialLayout(items, input));
|
|
16
|
+
}
|
|
17
|
+
export function tryCreateSpatialLayout(items, input = {}) {
|
|
18
|
+
const maxItems = input.maxItems ?? 1_000_000;
|
|
19
|
+
if (!Number.isSafeInteger(maxItems) || maxItems < 0)
|
|
20
|
+
return fail('construction', 'invalid-max-items', 'maxItems must be a non-negative safe integer.', { maxItems });
|
|
21
|
+
const validated = validateItems(items, maxItems);
|
|
22
|
+
if (!validated.ok)
|
|
23
|
+
return validated;
|
|
24
|
+
return ok(createState(validated.value.domain, validated.value.items, maxItems, 0));
|
|
25
|
+
}
|
|
26
|
+
export function querySpatialLayout(state, input) {
|
|
27
|
+
return unwrap(tryQuerySpatialLayout(state, input));
|
|
28
|
+
}
|
|
29
|
+
export function tryQuerySpatialLayout(state, input) {
|
|
30
|
+
const normalized = normalizeQuery(input);
|
|
31
|
+
if (!normalized.ok)
|
|
32
|
+
return normalized;
|
|
33
|
+
const data = getInternals(state);
|
|
34
|
+
if (!data.ok)
|
|
35
|
+
return data;
|
|
36
|
+
const candidates = [];
|
|
37
|
+
queryNode(data.value.root, normalized.value.renderBounds, candidates);
|
|
38
|
+
candidates.sort((left, right) => left.zIndex - right.zIndex || left.index - right.index);
|
|
39
|
+
const placements = Object.freeze(candidates.map((candidate) => Object.freeze({
|
|
40
|
+
id: candidate.value.id,
|
|
41
|
+
index: candidate.index,
|
|
42
|
+
zIndex: candidate.zIndex,
|
|
43
|
+
rect: candidate.value.rect,
|
|
44
|
+
visible: rectanglesIntersect(candidate.value.rect, normalized.value.viewport),
|
|
45
|
+
})));
|
|
46
|
+
return ok(Object.freeze({
|
|
47
|
+
generation: state.generation,
|
|
48
|
+
contentSize: data.value.contentSize,
|
|
49
|
+
viewport: normalized.value.viewport,
|
|
50
|
+
renderBounds: normalized.value.renderBounds,
|
|
51
|
+
placements,
|
|
52
|
+
anchor: anchorForPlan(normalized.value.viewport, placements),
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
export function applySpatialMeasurements(state, batch) {
|
|
56
|
+
return unwrap(tryApplySpatialMeasurements(state, batch));
|
|
57
|
+
}
|
|
58
|
+
export function tryApplySpatialMeasurements(state, batch) {
|
|
59
|
+
if (batch.generation !== state.generation)
|
|
60
|
+
return fail('transition-rejection', 'virtual-layout-measurement-stale', 'Measurement generation is stale.', { generation: batch.generation, activeGeneration: state.generation });
|
|
61
|
+
if (batch.measurements.length === 0)
|
|
62
|
+
return ok(Object.freeze({ state, scrollDelta: ZERO_POINT }));
|
|
63
|
+
const data = getInternals(state);
|
|
64
|
+
if (!data.ok)
|
|
65
|
+
return data;
|
|
66
|
+
const replacements = new Map();
|
|
67
|
+
for (const measurement of batch.measurements) {
|
|
68
|
+
if (replacements.has(measurement.id) || !data.value.byID.has(measurement.id) || !validRect(measurement.rect))
|
|
69
|
+
return fail('transition-rejection', 'virtual-layout-measurement-invalid', 'Spatial measurements require unique existing IDs and valid rectangles.', { measurement });
|
|
70
|
+
replacements.set(measurement.id, freezeRect(measurement.rect));
|
|
71
|
+
}
|
|
72
|
+
const before = anchorRect(state, batch.anchor);
|
|
73
|
+
const items = state.items.map((item) => replacements.has(item.id) ? Object.freeze({ ...item, rect: replacements.get(item.id) }) : item);
|
|
74
|
+
const generation = nextGeneration(state.generation);
|
|
75
|
+
if (!generation.ok)
|
|
76
|
+
return generation;
|
|
77
|
+
const next = createState(state.domain, items, state.maxItems, generation.value);
|
|
78
|
+
return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, batch.anchor)) }));
|
|
79
|
+
}
|
|
80
|
+
export function applySpatialMutation(state, mutation, anchor = null) {
|
|
81
|
+
return unwrap(tryApplySpatialMutation(state, mutation, anchor));
|
|
82
|
+
}
|
|
83
|
+
export function tryApplySpatialMutation(state, mutation, anchor = null) {
|
|
84
|
+
if (mutation.type !== 'replace' && mutation.type !== 'update')
|
|
85
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Spatial mutation type is unsupported.', { mutation });
|
|
86
|
+
let items;
|
|
87
|
+
if (mutation.type === 'replace')
|
|
88
|
+
items = mutation.items;
|
|
89
|
+
else {
|
|
90
|
+
const upsert = mutation.upsert ?? [];
|
|
91
|
+
const remove = mutation.remove ?? [];
|
|
92
|
+
const removed = new Set(remove);
|
|
93
|
+
const updated = new Map();
|
|
94
|
+
if (removed.size !== remove.length)
|
|
95
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Spatial removal IDs must be unique.');
|
|
96
|
+
for (const id of removed)
|
|
97
|
+
if (!state.domain.contains(id))
|
|
98
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Spatial removals must reference existing IDs.', { id });
|
|
99
|
+
for (const item of upsert) {
|
|
100
|
+
if (updated.has(item.id) || removed.has(item.id))
|
|
101
|
+
return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Spatial upserts must be unique and disjoint from removals.', { id: item.id });
|
|
102
|
+
updated.set(item.id, item);
|
|
103
|
+
}
|
|
104
|
+
const next = [];
|
|
105
|
+
for (const item of state.items) {
|
|
106
|
+
if (removed.has(item.id))
|
|
107
|
+
continue;
|
|
108
|
+
next.push(updated.get(item.id) ?? item);
|
|
109
|
+
updated.delete(item.id);
|
|
110
|
+
}
|
|
111
|
+
for (const item of upsert)
|
|
112
|
+
if (updated.has(item.id))
|
|
113
|
+
next.push(item);
|
|
114
|
+
items = next;
|
|
115
|
+
}
|
|
116
|
+
const validated = validateItems(items, state.maxItems);
|
|
117
|
+
if (!validated.ok)
|
|
118
|
+
return validated.error.class === 'construction'
|
|
119
|
+
? { ok: false, error: { ...validated.error, class: 'transition-rejection' } }
|
|
120
|
+
: validated;
|
|
121
|
+
const before = anchorRect(state, anchor);
|
|
122
|
+
const generation = nextGeneration(state.generation);
|
|
123
|
+
if (!generation.ok)
|
|
124
|
+
return generation;
|
|
125
|
+
const next = createState(validated.value.domain, validated.value.items, state.maxItems, generation.value);
|
|
126
|
+
return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, anchor)) }));
|
|
127
|
+
}
|
|
128
|
+
export function spatialScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
129
|
+
return unwrap(trySpatialScrollTarget(state, id, viewport, alignment));
|
|
130
|
+
}
|
|
131
|
+
export function trySpatialScrollTarget(state, id, viewport, alignment = 'nearest') {
|
|
132
|
+
const data = getInternals(state);
|
|
133
|
+
if (!data.ok)
|
|
134
|
+
return data;
|
|
135
|
+
const item = data.value.byID.get(id);
|
|
136
|
+
if (item === undefined)
|
|
137
|
+
return fail('transition-rejection', 'virtual-layout-scroll-target-invalid', 'Scroll target must exist in the spatial domain.', { id });
|
|
138
|
+
return ok(Object.freeze({
|
|
139
|
+
x: alignedScrollOffset(item.value.rect.x, item.value.rect.width, viewport.x, viewport.width, data.value.contentSize.width, alignment),
|
|
140
|
+
y: alignedScrollOffset(item.value.rect.y, item.value.rect.height, viewport.y, viewport.height, data.value.contentSize.height, alignment),
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
export function spatialRectAt(state, id) {
|
|
144
|
+
return internals.get(state)?.byID.get(id)?.value.rect ?? null;
|
|
145
|
+
}
|
|
146
|
+
function createState(domain, items, maxItems, generation) {
|
|
147
|
+
const state = Object.freeze({ domain, items: Object.freeze([...items]), maxItems, generation });
|
|
148
|
+
const indexed = state.items.map((value, index) => Object.freeze({ value, index, zIndex: value.zIndex ?? 0 }));
|
|
149
|
+
let width = 0;
|
|
150
|
+
let height = 0;
|
|
151
|
+
for (const item of state.items) {
|
|
152
|
+
width = Math.max(width, item.rect.x + item.rect.width);
|
|
153
|
+
height = Math.max(height, item.rect.y + item.rect.height);
|
|
154
|
+
}
|
|
155
|
+
internals.set(state, { root: buildPackedTree(indexed), byID: new Map(indexed.map((item) => [item.value.id, item])), contentSize: Object.freeze({ width, height }) });
|
|
156
|
+
return state;
|
|
157
|
+
}
|
|
158
|
+
function validateItems(items, maxItems) {
|
|
159
|
+
if (items.length > maxItems)
|
|
160
|
+
return fail('resource-rejection', 'item-ceiling-exceeded', 'Spatial items exceed maxItems.', { size: items.length, maxItems });
|
|
161
|
+
const domain = tryCreateSequence(items.map(({ id }) => id), { maxItems: Math.max(1, maxItems) });
|
|
162
|
+
if (!domain.ok)
|
|
163
|
+
return domain;
|
|
164
|
+
const frozen = [];
|
|
165
|
+
for (const item of items) {
|
|
166
|
+
if (!validRect(item.rect) || (item.zIndex !== undefined && (!Number.isSafeInteger(item.zIndex))))
|
|
167
|
+
return fail('construction', 'virtual-layout-geometry-invalid', 'Spatial items require finite non-negative rectangles and safe-integer z-indices.', { item });
|
|
168
|
+
frozen.push(Object.freeze({ id: item.id, rect: freezeRect(item.rect), ...(item.zIndex === undefined || item.zIndex === 0 ? {} : { zIndex: item.zIndex }) }));
|
|
169
|
+
}
|
|
170
|
+
return ok(Object.freeze({ domain: domain.value, items: Object.freeze(frozen) }));
|
|
171
|
+
}
|
|
172
|
+
function buildPackedTree(items) {
|
|
173
|
+
if (items.length === 0)
|
|
174
|
+
return null;
|
|
175
|
+
let level = packedGroups(items, (item) => item.value.rect).map((group) => Object.freeze({
|
|
176
|
+
bounds: boundsOfRects(group.map((item) => item.value.rect)),
|
|
177
|
+
items: Object.freeze(group),
|
|
178
|
+
children: null,
|
|
179
|
+
}));
|
|
180
|
+
while (level.length > 1) {
|
|
181
|
+
level = packedGroups(level, (node) => node.bounds).map((children) => Object.freeze({
|
|
182
|
+
bounds: boundsOfRects(children.map((node) => node.bounds)),
|
|
183
|
+
items: null,
|
|
184
|
+
children: Object.freeze(children),
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
return level[0];
|
|
188
|
+
}
|
|
189
|
+
function queryNode(node, bounds, output) {
|
|
190
|
+
if (node === null || !rectanglesIntersect(node.bounds, bounds))
|
|
191
|
+
return;
|
|
192
|
+
if (node.items !== null) {
|
|
193
|
+
for (const item of node.items)
|
|
194
|
+
if (rectanglesIntersect(item.value.rect, bounds))
|
|
195
|
+
output.push(item);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
for (const child of node.children ?? [])
|
|
199
|
+
queryNode(child, bounds, output);
|
|
200
|
+
}
|
|
201
|
+
function packedGroups(values, rectOf) {
|
|
202
|
+
if (values.length <= LEAF_SIZE)
|
|
203
|
+
return [[...values]];
|
|
204
|
+
const groupCount = Math.ceil(values.length / LEAF_SIZE);
|
|
205
|
+
const slabCount = Math.ceil(Math.sqrt(groupCount));
|
|
206
|
+
const slabSize = Math.ceil(values.length / slabCount);
|
|
207
|
+
const sorted = [...values].sort((left, right) => center(rectOf(left), 'x') - center(rectOf(right), 'x'));
|
|
208
|
+
const groups = [];
|
|
209
|
+
for (let slabStart = 0; slabStart < sorted.length; slabStart += slabSize) {
|
|
210
|
+
const slab = sorted.slice(slabStart, slabStart + slabSize).sort((left, right) => center(rectOf(left), 'y') - center(rectOf(right), 'y'));
|
|
211
|
+
for (let start = 0; start < slab.length; start += LEAF_SIZE)
|
|
212
|
+
groups.push(slab.slice(start, start + LEAF_SIZE));
|
|
213
|
+
}
|
|
214
|
+
return groups;
|
|
215
|
+
}
|
|
216
|
+
function boundsOfRects(rects) {
|
|
217
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
218
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
219
|
+
let maxX = 0;
|
|
220
|
+
let maxY = 0;
|
|
221
|
+
for (const rect of rects) {
|
|
222
|
+
minX = Math.min(minX, rect.x);
|
|
223
|
+
minY = Math.min(minY, rect.y);
|
|
224
|
+
maxX = Math.max(maxX, rect.x + rect.width);
|
|
225
|
+
maxY = Math.max(maxY, rect.y + rect.height);
|
|
226
|
+
}
|
|
227
|
+
return Object.freeze({ x: minX, y: minY, width: maxX - minX, height: maxY - minY });
|
|
228
|
+
}
|
|
229
|
+
function center(rect, axis) { return axis === 'x' ? rect.x + rect.width / 2 : rect.y + rect.height / 2; }
|
|
230
|
+
function validRect(rect) { return rect !== null && typeof rect === 'object' && finiteNonNegative(rect.x) && finiteNonNegative(rect.y) && finiteNonNegative(rect.width) && finiteNonNegative(rect.height); }
|
|
231
|
+
function freezeRect(rect) { return Object.freeze({ x: rect.x, y: rect.y, width: rect.width, height: rect.height }); }
|
|
232
|
+
function anchorRect(state, anchor) { return anchor === null || anchor === undefined ? null : spatialRectAt(state, anchor.id); }
|
|
233
|
+
function getInternals(state) { const value = internals.get(state); return value === undefined ? fail('construction', 'virtual-layout-domain-mismatch', 'Spatial state must be created by createSpatialLayout().') : ok(value); }
|
|
234
|
+
function anchorDelta(before, after) { return before === null || after === null ? ZERO_POINT : pointDelta(before, after); }
|
|
235
|
+
function nextGeneration(generation) { return generation === Number.MAX_SAFE_INTEGER ? fail('resource-rejection', 'virtual-layout-generation-exhausted', 'Layout generation reached the safe-integer ceiling.') : ok(generation + 1); }
|
|
236
|
+
function finiteNonNegative(value) { return Number.isFinite(value) && value >= 0; }
|
|
237
|
+
//# sourceMappingURL=spatial-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-layout.js","sourceRoot":"","sources":["../src/spatial-layout.ts"],"names":[],"mappings":"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"}
|