@sectile/virtual 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/extent-index.d.ts +40 -0
  4. package/dist/extent-index.d.ts.map +1 -0
  5. package/dist/extent-index.js +388 -0
  6. package/dist/extent-index.js.map +1 -0
  7. package/dist/index.d.ts +8 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +2 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/internal/foundation.d.ts +6 -0
  12. package/dist/internal/foundation.d.ts.map +1 -0
  13. package/dist/internal/foundation.js +28 -0
  14. package/dist/internal/foundation.js.map +1 -0
  15. package/dist/internal/machine.d.ts +4 -0
  16. package/dist/internal/machine.d.ts.map +1 -0
  17. package/dist/internal/machine.js +8 -0
  18. package/dist/internal/machine.js.map +1 -0
  19. package/dist/internal/track.d.ts +14 -0
  20. package/dist/internal/track.d.ts.map +1 -0
  21. package/dist/internal/track.js +72 -0
  22. package/dist/internal/track.js.map +1 -0
  23. package/dist/layout.d.ts +72 -0
  24. package/dist/layout.d.ts.map +1 -0
  25. package/dist/layout.js +75 -0
  26. package/dist/layout.js.map +1 -0
  27. package/dist/linear-layout.d.ts +61 -0
  28. package/dist/linear-layout.d.ts.map +1 -0
  29. package/dist/linear-layout.js +192 -0
  30. package/dist/linear-layout.js.map +1 -0
  31. package/dist/masonry-layout.d.ts +66 -0
  32. package/dist/masonry-layout.d.ts.map +1 -0
  33. package/dist/masonry-layout.js +270 -0
  34. package/dist/masonry-layout.js.map +1 -0
  35. package/dist/spatial-layout.d.ts +48 -0
  36. package/dist/spatial-layout.d.ts.map +1 -0
  37. package/dist/spatial-layout.js +237 -0
  38. package/dist/spatial-layout.js.map +1 -0
  39. package/dist/track-grid-layout.d.ts +62 -0
  40. package/dist/track-grid-layout.d.ts.map +1 -0
  41. package/dist/track-grid-layout.js +263 -0
  42. package/dist/track-grid-layout.js.map +1 -0
  43. package/package.json +78 -0
@@ -0,0 +1,62 @@
1
+ import type { Result, StableID } from '@sectile/core';
2
+ import type { Extent, ExtentIndex } from './extent-index.js';
3
+ import { type TrackRange } from './internal/track.js';
4
+ import type { LinearFlow } from './linear-layout.js';
5
+ import { type VirtualAnchor, type VirtualLayoutMutation, type VirtualLayoutPlan, type VirtualLayoutStrategy, type VirtualMeasurementBatch, type VirtualPoint, type VirtualQueryInput, type VirtualRect, type VirtualScrollAlignment } from './layout.js';
6
+ export interface GridRegion<ID extends StableID = StableID> {
7
+ readonly id: ID;
8
+ readonly row: number;
9
+ readonly column: number;
10
+ readonly rowSpan?: number;
11
+ readonly columnSpan?: number;
12
+ }
13
+ export interface TrackGridLayoutState<ID extends StableID = StableID> {
14
+ readonly rows: ExtentIndex;
15
+ readonly columns: ExtentIndex;
16
+ readonly regions: readonly GridRegion<ID>[];
17
+ readonly rowGap: number;
18
+ readonly columnGap: number;
19
+ readonly rowFlow: LinearFlow;
20
+ readonly columnFlow: LinearFlow;
21
+ readonly maxRegions: number;
22
+ readonly generation: number;
23
+ }
24
+ export interface TrackGridLayoutInput {
25
+ readonly rowGap?: number;
26
+ readonly columnGap?: number;
27
+ readonly rowFlow?: LinearFlow;
28
+ readonly columnFlow?: LinearFlow;
29
+ readonly maxRegions?: number;
30
+ }
31
+ export interface GridTrackMeasurement {
32
+ readonly axis: 'row' | 'column';
33
+ readonly index: number;
34
+ readonly extent: Extent;
35
+ }
36
+ export type TrackGridMutation<ID extends StableID = StableID> = {
37
+ readonly type: 'replace-regions';
38
+ readonly regions: readonly GridRegion<ID>[];
39
+ } | {
40
+ readonly type: 'splice-tracks';
41
+ readonly axis: 'row' | 'column';
42
+ readonly index: number;
43
+ readonly deleteCount: number;
44
+ readonly inserted: readonly Extent[];
45
+ };
46
+ export interface TrackGridLayoutPlan<ID extends StableID = StableID> extends VirtualLayoutPlan<ID> {
47
+ readonly rowRange: TrackRange;
48
+ readonly columnRange: TrackRange;
49
+ }
50
+ export declare const trackGridLayoutStrategy: VirtualLayoutStrategy<TrackGridLayoutState, StableID, GridTrackMeasurement, TrackGridMutation>;
51
+ export declare function createTrackGridLayout<ID extends StableID>(rows: ExtentIndex, columns: ExtentIndex, regions: readonly GridRegion<ID>[], input?: TrackGridLayoutInput): TrackGridLayoutState<ID>;
52
+ export declare function tryCreateTrackGridLayout<ID extends StableID>(rows: ExtentIndex, columns: ExtentIndex, regions: readonly GridRegion<ID>[], input?: TrackGridLayoutInput): Result<TrackGridLayoutState<ID>>;
53
+ export declare function queryTrackGridLayout<ID extends StableID>(state: TrackGridLayoutState<ID>, input: VirtualQueryInput): TrackGridLayoutPlan<ID>;
54
+ export declare function tryQueryTrackGridLayout<ID extends StableID>(state: TrackGridLayoutState<ID>, input: VirtualQueryInput): Result<TrackGridLayoutPlan<ID>>;
55
+ export declare function applyGridMeasurements<ID extends StableID>(state: TrackGridLayoutState<ID>, batch: VirtualMeasurementBatch<GridTrackMeasurement, ID>): VirtualLayoutMutation<TrackGridLayoutState<ID>>;
56
+ export declare function tryApplyGridMeasurements<ID extends StableID>(state: TrackGridLayoutState<ID>, batch: VirtualMeasurementBatch<GridTrackMeasurement, ID>): Result<VirtualLayoutMutation<TrackGridLayoutState<ID>>>;
57
+ export declare function applyTrackGridMutation<ID extends StableID>(state: TrackGridLayoutState<ID>, mutation: TrackGridMutation<ID>, anchor?: VirtualAnchor<ID> | null): VirtualLayoutMutation<TrackGridLayoutState<ID>>;
58
+ export declare function tryApplyTrackGridMutation<ID extends StableID>(state: TrackGridLayoutState<ID>, mutation: TrackGridMutation<ID>, anchor?: VirtualAnchor<ID> | null): Result<VirtualLayoutMutation<TrackGridLayoutState<ID>>>;
59
+ export declare function trackGridScrollTarget<ID extends StableID>(state: TrackGridLayoutState<ID>, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): VirtualPoint;
60
+ export declare function tryTrackGridScrollTarget<ID extends StableID>(state: TrackGridLayoutState<ID>, id: ID, viewport: VirtualRect, alignment?: VirtualScrollAlignment): Result<VirtualPoint>;
61
+ export declare function trackGridRegionRect<ID extends StableID>(state: TrackGridLayoutState<ID>, id: ID): VirtualRect | null;
62
+ //# sourceMappingURL=track-grid-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-grid-layout.d.ts","sourceRoot":"","sources":["../src/track-grid-layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { tryCreateSequence } from '@sectile/core/sequence';
3
+ import { fail, ok } from './internal/foundation.js';
4
+ import { trackContentExtent, trackRange, trackSpan } from './internal/track.js';
5
+ import { alignedScrollOffset, anchorForPlan, normalizeQuery, pointDelta, rectanglesIntersect, ZERO_POINT, } from './layout.js';
6
+ const internals = new WeakMap();
7
+ export const trackGridLayoutStrategy = Object.freeze({
8
+ kind: 'track-grid',
9
+ tryQuery: (state, input) => tryQueryTrackGridLayout(state, input),
10
+ tryMeasure: (state, batch) => tryApplyGridMeasurements(state, batch),
11
+ tryMutate: (state, input) => tryApplyTrackGridMutation(state, input.mutation, input.anchor),
12
+ tryScrollTarget: (state, id, viewport, alignment) => tryTrackGridScrollTarget(state, id, viewport, alignment),
13
+ });
14
+ export function createTrackGridLayout(rows, columns, regions, input = {}) {
15
+ return unwrap(tryCreateTrackGridLayout(rows, columns, regions, input));
16
+ }
17
+ export function tryCreateTrackGridLayout(rows, columns, regions, input = {}) {
18
+ const rowGap = input.rowGap ?? 0;
19
+ const columnGap = input.columnGap ?? 0;
20
+ const rowFlow = input.rowFlow ?? 'forward';
21
+ const columnFlow = input.columnFlow ?? 'forward';
22
+ const maxRegions = input.maxRegions ?? 1_000_000;
23
+ if (!finiteNonNegative(rowGap) || !finiteNonNegative(columnGap) || !validFlow(rowFlow) || !validFlow(columnFlow))
24
+ return geometryFailure('Grid gaps and flows are invalid.');
25
+ if (!Number.isSafeInteger(maxRegions) || maxRegions < 0)
26
+ return fail('construction', 'invalid-max-items', 'maxRegions must be a non-negative safe integer.', { maxRegions });
27
+ const indexed = validateRegions(rows.size, columns.size, regions, maxRegions);
28
+ if (!indexed.ok)
29
+ return indexed;
30
+ return ok(createState({ rows, columns, regions: indexed.value.map(({ value }) => value), rowGap, columnGap, rowFlow, columnFlow, maxRegions, generation: 0 }, indexed.value));
31
+ }
32
+ export function queryTrackGridLayout(state, input) {
33
+ return unwrap(tryQueryTrackGridLayout(state, input));
34
+ }
35
+ export function tryQueryTrackGridLayout(state, input) {
36
+ const normalized = normalizeQuery(input);
37
+ if (!normalized.ok)
38
+ return normalized;
39
+ const grid = getInternals(state);
40
+ if (!grid.ok)
41
+ return grid;
42
+ const rowRange = trackRange(state.rows, state.rowGap, state.rowFlow, normalized.value.renderBounds.y, normalized.value.renderBounds.y + normalized.value.renderBounds.height);
43
+ const columnRange = trackRange(state.columns, state.columnGap, state.columnFlow, normalized.value.renderBounds.x, normalized.value.renderBounds.x + normalized.value.renderBounds.width);
44
+ const candidates = [];
45
+ queryRows(grid.value.root, rowRange.start, rowRange.end, candidates);
46
+ const placements = [];
47
+ for (const candidate of candidates) {
48
+ if (candidate.value.column >= columnRange.end || candidate.columnEnd <= columnRange.start)
49
+ continue;
50
+ const rect = regionRect(state, candidate.value);
51
+ if (rect === null || !rectanglesIntersect(rect, normalized.value.renderBounds))
52
+ continue;
53
+ placements.push(Object.freeze({ id: candidate.value.id, index: candidate.index, rect, visible: rectanglesIntersect(rect, normalized.value.viewport) }));
54
+ }
55
+ placements.sort((left, right) => left.index - right.index);
56
+ const frozen = Object.freeze(placements);
57
+ return ok(Object.freeze({
58
+ generation: state.generation,
59
+ contentSize: contentSize(state),
60
+ viewport: normalized.value.viewport,
61
+ renderBounds: normalized.value.renderBounds,
62
+ placements: frozen,
63
+ anchor: anchorForPlan(normalized.value.viewport, frozen),
64
+ rowRange,
65
+ columnRange,
66
+ }));
67
+ }
68
+ export function applyGridMeasurements(state, batch) {
69
+ return unwrap(tryApplyGridMeasurements(state, batch));
70
+ }
71
+ export function tryApplyGridMeasurements(state, batch) {
72
+ if (batch.generation !== state.generation)
73
+ return fail('transition-rejection', 'virtual-layout-measurement-stale', 'Measurement generation is stale.', { generation: batch.generation, activeGeneration: state.generation });
74
+ if (batch.measurements.length === 0)
75
+ return ok(Object.freeze({ state, scrollDelta: ZERO_POINT }));
76
+ const rowUpdates = [];
77
+ const columnUpdates = [];
78
+ for (const measurement of batch.measurements) {
79
+ if (measurement.axis !== 'row' && measurement.axis !== 'column')
80
+ return fail('transition-rejection', 'virtual-layout-measurement-invalid', 'Grid measurements require a row or column axis.', { measurement });
81
+ (measurement.axis === 'row' ? rowUpdates : columnUpdates).push(measurement);
82
+ }
83
+ const rows = state.rows.update(rowUpdates);
84
+ if (!rows.ok)
85
+ return rows;
86
+ const columns = state.columns.update(columnUpdates);
87
+ if (!columns.ok)
88
+ return columns;
89
+ const generation = nextGeneration(state.generation);
90
+ if (!generation.ok)
91
+ return generation;
92
+ const before = anchorRect(state, batch.anchor);
93
+ const grid = getInternals(state);
94
+ if (!grid.ok)
95
+ return grid;
96
+ const next = createState({ ...state, rows: rows.value, columns: columns.value, generation: generation.value }, null, grid.value);
97
+ return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, batch.anchor)) }));
98
+ }
99
+ export function applyTrackGridMutation(state, mutation, anchor = null) {
100
+ return unwrap(tryApplyTrackGridMutation(state, mutation, anchor));
101
+ }
102
+ export function tryApplyTrackGridMutation(state, mutation, anchor = null) {
103
+ if (mutation.type !== 'replace-regions' && mutation.type !== 'splice-tracks')
104
+ return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Grid mutation type is unsupported.', { mutation });
105
+ const before = anchorRect(state, anchor);
106
+ let rows = state.rows;
107
+ let columns = state.columns;
108
+ let regions = state.regions;
109
+ if (mutation.type === 'replace-regions')
110
+ regions = mutation.regions;
111
+ else {
112
+ const target = mutation.axis === 'row' ? rows : columns;
113
+ const changed = target.splice(mutation.index, mutation.deleteCount, mutation.inserted);
114
+ if (!changed.ok)
115
+ return changed;
116
+ const transformed = transformRegions(regions, mutation.axis, mutation.index, mutation.deleteCount, mutation.inserted.length);
117
+ if (!transformed.ok)
118
+ return transformed;
119
+ regions = transformed.value;
120
+ if (mutation.axis === 'row')
121
+ rows = changed.value;
122
+ else
123
+ columns = changed.value;
124
+ }
125
+ const validated = validateRegions(rows.size, columns.size, regions, state.maxRegions);
126
+ if (!validated.ok)
127
+ return validated.error.class === 'construction'
128
+ ? { ok: false, error: { ...validated.error, class: 'transition-rejection' } }
129
+ : validated;
130
+ const generation = nextGeneration(state.generation);
131
+ if (!generation.ok)
132
+ return generation;
133
+ const next = createState({ ...state, rows, columns, regions: validated.value.map(({ value }) => value), generation: generation.value }, validated.value);
134
+ return ok(Object.freeze({ state: next, scrollDelta: anchorDelta(before, anchorRect(next, anchor)) }));
135
+ }
136
+ export function trackGridScrollTarget(state, id, viewport, alignment = 'nearest') {
137
+ return unwrap(tryTrackGridScrollTarget(state, id, viewport, alignment));
138
+ }
139
+ export function tryTrackGridScrollTarget(state, id, viewport, alignment = 'nearest') {
140
+ const grid = getInternals(state);
141
+ if (!grid.ok)
142
+ return grid;
143
+ const region = grid.value.byID.get(id);
144
+ const rect = region === undefined ? null : regionRect(state, region.value);
145
+ if (rect === null)
146
+ return fail('transition-rejection', 'virtual-layout-scroll-target-invalid', 'Scroll target must exist in the grid region domain.', { id });
147
+ const size = contentSize(state);
148
+ return ok(Object.freeze({
149
+ x: alignedScrollOffset(rect.x, rect.width, viewport.x, viewport.width, size.width, alignment),
150
+ y: alignedScrollOffset(rect.y, rect.height, viewport.y, viewport.height, size.height, alignment),
151
+ }));
152
+ }
153
+ export function trackGridRegionRect(state, id) {
154
+ const grid = internals.get(state);
155
+ const region = grid?.byID.get(id);
156
+ return region === undefined ? null : regionRect(state, region.value);
157
+ }
158
+ function createState(state, indexed, reusable) {
159
+ const frozen = Object.freeze({ ...state, regions: reusable === undefined ? Object.freeze([...state.regions]) : state.regions });
160
+ if (reusable !== undefined) {
161
+ internals.set(frozen, reusable);
162
+ return frozen;
163
+ }
164
+ if (indexed === null)
165
+ throw new Error('Internal invariant breach: grid regions require an index.');
166
+ const sorted = [...indexed].sort(compareRegions);
167
+ internals.set(frozen, { root: buildRegionTree(sorted, 0, sorted.length), byID: new Map(indexed.map((region) => [region.value.id, region])) });
168
+ return frozen;
169
+ }
170
+ function validateRegions(rowCount, columnCount, regions, maxRegions) {
171
+ if (regions.length > maxRegions)
172
+ return fail('resource-rejection', 'item-ceiling-exceeded', 'Grid regions exceed maxRegions.', { size: regions.length, maxRegions });
173
+ const domain = tryCreateSequence(regions.map(({ id }) => id), { maxItems: Math.max(1, maxRegions) });
174
+ if (!domain.ok)
175
+ return domain;
176
+ const indexed = [];
177
+ for (let index = 0; index < regions.length; index += 1) {
178
+ const region = regions[index];
179
+ const rowSpan = region.rowSpan ?? 1;
180
+ const columnSpan = region.columnSpan ?? 1;
181
+ if (!positiveSafe(rowSpan) || !positiveSafe(columnSpan) || !nonNegativeSafe(region.row) || !nonNegativeSafe(region.column)
182
+ || region.row + rowSpan > rowCount || region.column + columnSpan > columnCount) {
183
+ return fail('construction', 'virtual-layout-region-invalid', 'Grid regions require unique stable IDs and valid track spans.', { region, rowCount, columnCount });
184
+ }
185
+ const value = Object.freeze({ id: region.id, row: region.row, column: region.column, ...(rowSpan === 1 ? {} : { rowSpan }), ...(columnSpan === 1 ? {} : { columnSpan }) });
186
+ indexed.push(Object.freeze({ value, index, rowEnd: region.row + rowSpan, columnEnd: region.column + columnSpan }));
187
+ }
188
+ const sorted = [...indexed].sort(compareRegions);
189
+ const active = [];
190
+ for (const region of sorted) {
191
+ for (let index = active.length - 1; index >= 0; index -= 1)
192
+ if (active[index].rowEnd <= region.value.row)
193
+ active.splice(index, 1);
194
+ for (const other of active)
195
+ if (other.value.column < region.columnEnd && region.value.column < other.columnEnd) {
196
+ return fail('construction', 'virtual-layout-region-overlap', 'Track-grid regions cannot overlap.', { left: other.value.id, right: region.value.id });
197
+ }
198
+ active.push(region);
199
+ }
200
+ return ok(Object.freeze(indexed));
201
+ }
202
+ function transformRegions(regions, axis, index, deleteCount, insertedCount) {
203
+ const removedEnd = index + deleteCount;
204
+ const delta = insertedCount - deleteCount;
205
+ const result = [];
206
+ for (const region of regions) {
207
+ const start = axis === 'row' ? region.row : region.column;
208
+ const span = axis === 'row' ? region.rowSpan ?? 1 : region.columnSpan ?? 1;
209
+ const end = start + span;
210
+ const insertionSplitsRegion = deleteCount === 0 && start < index && index < end;
211
+ const deletionTouchesRegion = deleteCount > 0 && start < removedEnd && end > index;
212
+ if (insertionSplitsRegion || deletionTouchesRegion)
213
+ return fail('transition-rejection', 'virtual-layout-mutation-invalid', 'Track splice intersects a region; replace regions atomically to define the new spans.', { id: region.id, axis, index, deleteCount });
214
+ const nextStart = start >= removedEnd ? start + delta : start;
215
+ result.push(Object.freeze(axis === 'row' ? { ...region, row: nextStart } : { ...region, column: nextStart }));
216
+ }
217
+ return ok(Object.freeze(result));
218
+ }
219
+ function queryRows(node, start, end, output) {
220
+ if (node === null || node.maxRowEnd <= start)
221
+ return;
222
+ if (node.left !== null)
223
+ queryRows(node.left, start, end, output);
224
+ if (node.region.value.row < end && node.region.rowEnd > start)
225
+ output.push(node.region);
226
+ if (node.region.value.row < end)
227
+ queryRows(node.right, start, end, output);
228
+ }
229
+ function buildRegionTree(regions, from, to) {
230
+ if (from >= to)
231
+ return null;
232
+ const middle = (from + to) >>> 1;
233
+ const left = buildRegionTree(regions, from, middle);
234
+ const right = buildRegionTree(regions, middle + 1, to);
235
+ const region = regions[middle];
236
+ return Object.freeze({ region, left, right, maxRowEnd: Math.max(region.rowEnd, left?.maxRowEnd ?? 0, right?.maxRowEnd ?? 0) });
237
+ }
238
+ function regionRect(state, region) {
239
+ const row = trackSpan(state.rows, state.rowGap, state.rowFlow, region.row, region.rowSpan ?? 1);
240
+ const column = trackSpan(state.columns, state.columnGap, state.columnFlow, region.column, region.columnSpan ?? 1);
241
+ return row === null || column === null ? null : Object.freeze({ x: column.start, y: row.start, width: column.extent, height: row.extent });
242
+ }
243
+ function anchorRect(state, anchor) {
244
+ return anchor === null || anchor === undefined ? null : trackGridRegionRect(state, anchor.id);
245
+ }
246
+ function contentSize(state) {
247
+ return Object.freeze({ width: trackContentExtent(state.columns, state.columnGap), height: trackContentExtent(state.rows, state.rowGap) });
248
+ }
249
+ function getInternals(state) {
250
+ const value = internals.get(state);
251
+ return value === undefined ? fail('construction', 'virtual-layout-domain-mismatch', 'Grid layout state must be created by createTrackGridLayout().') : ok(value);
252
+ }
253
+ function compareRegions(left, right) {
254
+ return left.value.row - right.value.row || left.value.column - right.value.column || left.index - right.index;
255
+ }
256
+ function anchorDelta(before, after) { return before === null || after === null ? ZERO_POINT : pointDelta(before, after); }
257
+ 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); }
258
+ function geometryFailure(message) { return fail('construction', 'virtual-layout-geometry-invalid', message); }
259
+ function finiteNonNegative(value) { return Number.isFinite(value) && value >= 0; }
260
+ function positiveSafe(value) { return Number.isSafeInteger(value) && value > 0; }
261
+ function nonNegativeSafe(value) { return Number.isSafeInteger(value) && value >= 0; }
262
+ function validFlow(value) { return value === 'forward' || value === 'reverse'; }
263
+ //# sourceMappingURL=track-grid-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-grid-layout.js","sourceRoot":"","sources":["../src/track-grid-layout.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@sectile/virtual",
3
+ "version": "0.5.0",
4
+ "description": "Renderer-neutral dynamic virtualization and layout semantics for Sectile.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "engines": {
9
+ "node": ">=24"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/sectile/sectile.git",
20
+ "directory": "packages/virtual"
21
+ },
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
28
+ },
29
+ "./extent-index": {
30
+ "types": "./dist/extent-index.d.ts",
31
+ "import": "./dist/extent-index.js",
32
+ "default": "./dist/extent-index.js"
33
+ },
34
+ "./layout": {
35
+ "types": "./dist/layout.d.ts",
36
+ "import": "./dist/layout.js",
37
+ "default": "./dist/layout.js"
38
+ },
39
+ "./linear-layout": {
40
+ "types": "./dist/linear-layout.d.ts",
41
+ "import": "./dist/linear-layout.js",
42
+ "default": "./dist/linear-layout.js"
43
+ },
44
+ "./masonry-layout": {
45
+ "types": "./dist/masonry-layout.d.ts",
46
+ "import": "./dist/masonry-layout.js",
47
+ "default": "./dist/masonry-layout.js"
48
+ },
49
+ "./spatial-layout": {
50
+ "types": "./dist/spatial-layout.d.ts",
51
+ "import": "./dist/spatial-layout.js",
52
+ "default": "./dist/spatial-layout.js"
53
+ },
54
+ "./track-grid-layout": {
55
+ "types": "./dist/track-grid-layout.d.ts",
56
+ "import": "./dist/track-grid-layout.js",
57
+ "default": "./dist/track-grid-layout.js"
58
+ },
59
+ "./package.json": "./package.json"
60
+ },
61
+ "dependencies": {
62
+ "@sectile/core": "0.5.0"
63
+ },
64
+ "devDependencies": {
65
+ "@chenglou/pretext": "0.0.8",
66
+ "typescript": "7.0.2"
67
+ },
68
+ "scripts": {
69
+ "build": "node scripts/build.mjs production",
70
+ "build:verification": "node scripts/build.mjs verification",
71
+ "typecheck": "tsc --project tsconfig.json --pretty false",
72
+ "test": "pnpm --silent run build:verification && node --test --test-concurrency=1 tests/*/*.test.mjs",
73
+ "benchmark": "pnpm --silent run build && node benchmarks/virtualization.mjs",
74
+ "check:laws": "node scripts/check-laws.mjs",
75
+ "check:package": "node scripts/check-package.mjs",
76
+ "verify": "pnpm run typecheck && pnpm run test && pnpm run build && pnpm run check:laws && pnpm run check:package"
77
+ }
78
+ }