@rtif-sdk/web 1.0.0 → 1.3.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/dist/block-drag-handler.d.ts +5 -0
- package/dist/block-drag-handler.d.ts.map +1 -1
- package/dist/block-drag-handler.js +32 -3
- package/dist/block-drag-handler.js.map +1 -1
- package/dist/block-renderer.d.ts +12 -6
- package/dist/block-renderer.d.ts.map +1 -1
- package/dist/block-renderer.js +98 -9
- package/dist/block-renderer.js.map +1 -1
- package/dist/block-type-dropdown.d.ts +78 -0
- package/dist/block-type-dropdown.d.ts.map +1 -0
- package/dist/block-type-dropdown.js +276 -0
- package/dist/block-type-dropdown.js.map +1 -0
- package/dist/color-picker.d.ts +91 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +346 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/content-handlers.d.ts +7 -8
- package/dist/content-handlers.d.ts.map +1 -1
- package/dist/content-handlers.js +122 -93
- package/dist/content-handlers.js.map +1 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +224 -15
- package/dist/editor.js.map +1 -1
- package/dist/embed-utils.d.ts +148 -0
- package/dist/embed-utils.d.ts.map +1 -0
- package/dist/embed-utils.js +197 -0
- package/dist/embed-utils.js.map +1 -0
- package/dist/font-family-picker.d.ts +105 -0
- package/dist/font-family-picker.d.ts.map +1 -0
- package/dist/font-family-picker.js +314 -0
- package/dist/font-family-picker.js.map +1 -0
- package/dist/font-size-picker.d.ts +82 -0
- package/dist/font-size-picker.d.ts.map +1 -0
- package/dist/font-size-picker.js +290 -0
- package/dist/font-size-picker.js.map +1 -0
- package/dist/index.d.ts +18 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -2
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +2 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/link-plugin.d.ts +4 -0
- package/dist/plugins/link-plugin.d.ts.map +1 -1
- package/dist/plugins/link-plugin.js +17 -0
- package/dist/plugins/link-plugin.js.map +1 -1
- package/dist/plugins/mark-utils.d.ts +31 -0
- package/dist/plugins/mark-utils.d.ts.map +1 -1
- package/dist/plugins/mark-utils.js +46 -0
- package/dist/plugins/mark-utils.js.map +1 -1
- package/dist/renderer.d.ts +31 -2
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +131 -55
- package/dist/renderer.js.map +1 -1
- package/dist/selection-sync.d.ts +2 -26
- package/dist/selection-sync.d.ts.map +1 -1
- package/dist/selection-sync.js +49 -13
- package/dist/selection-sync.js.map +1 -1
- package/dist/spatial-index.d.ts +203 -0
- package/dist/spatial-index.d.ts.map +1 -0
- package/dist/spatial-index.js +211 -0
- package/dist/spatial-index.js.map +1 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/virtual-viewport.d.ts +241 -0
- package/dist/virtual-viewport.d.ts.map +1 -0
- package/dist/virtual-viewport.js +584 -0
- package/dist/virtual-viewport.js.map +1 -0
- package/package.json +17 -5
package/dist/selection-sync.js
CHANGED
|
@@ -40,8 +40,17 @@ let suppressSelectionChange = false;
|
|
|
40
40
|
* // ]
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
+
// One-slot memo for buildBlockOffsetCache: same doc reference → same cache
|
|
44
|
+
let _memoDoc = null;
|
|
45
|
+
let _memoCache = null;
|
|
46
|
+
let _memoIndex = null;
|
|
43
47
|
export function buildBlockOffsetCache(doc) {
|
|
48
|
+
// Return memoized result when document reference hasn't changed
|
|
49
|
+
if (doc === _memoDoc && _memoCache) {
|
|
50
|
+
return _memoCache;
|
|
51
|
+
}
|
|
44
52
|
const entries = [];
|
|
53
|
+
const index = new Map();
|
|
45
54
|
let offset = 0;
|
|
46
55
|
for (let i = 0; i < doc.blocks.length; i++) {
|
|
47
56
|
if (i > 0) {
|
|
@@ -54,10 +63,35 @@ export function buildBlockOffsetCache(doc) {
|
|
|
54
63
|
startOffset: offset,
|
|
55
64
|
length,
|
|
56
65
|
});
|
|
66
|
+
index.set(block.id, i);
|
|
57
67
|
offset += length;
|
|
58
68
|
}
|
|
69
|
+
_memoDoc = doc;
|
|
70
|
+
_memoCache = entries;
|
|
71
|
+
_memoIndex = index;
|
|
59
72
|
return entries;
|
|
60
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* O(1) lookup of a block's cache entry by ID.
|
|
76
|
+
* Returns the entry and its index, or undefined if not found.
|
|
77
|
+
* Must be called after buildBlockOffsetCache for the same document.
|
|
78
|
+
*/
|
|
79
|
+
function lookupCacheEntry(cache, blockId) {
|
|
80
|
+
if (_memoIndex && _memoCache === cache) {
|
|
81
|
+
const idx = _memoIndex.get(blockId);
|
|
82
|
+
if (idx === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
const entry = cache[idx];
|
|
85
|
+
if (entry === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
return { entry, index: idx };
|
|
88
|
+
}
|
|
89
|
+
// Fallback to linear scan if memo doesn't match
|
|
90
|
+
const idx = cache.findIndex((e) => e.blockId === blockId);
|
|
91
|
+
if (idx === -1)
|
|
92
|
+
return undefined;
|
|
93
|
+
return { entry: cache[idx], index: idx };
|
|
94
|
+
}
|
|
61
95
|
// ---------------------------------------------------------------------------
|
|
62
96
|
// domPointToRtifOffset
|
|
63
97
|
// ---------------------------------------------------------------------------
|
|
@@ -101,9 +135,9 @@ export function domPointToRtifOffset(root, node, domOffset, cache) {
|
|
|
101
135
|
if (blockId === null) {
|
|
102
136
|
return null;
|
|
103
137
|
}
|
|
104
|
-
// Look up block in cache
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
138
|
+
// Look up block in cache (O(1) via index Map)
|
|
139
|
+
const lookup = lookupCacheEntry(cache, blockId);
|
|
140
|
+
if (lookup === undefined) {
|
|
107
141
|
return null;
|
|
108
142
|
}
|
|
109
143
|
// Compute local offset within the block
|
|
@@ -111,7 +145,7 @@ export function domPointToRtifOffset(root, node, domOffset, cache) {
|
|
|
111
145
|
if (localOffset === null) {
|
|
112
146
|
return null;
|
|
113
147
|
}
|
|
114
|
-
return
|
|
148
|
+
return lookup.entry.startOffset + localOffset;
|
|
115
149
|
}
|
|
116
150
|
/**
|
|
117
151
|
* Handle the case where `node` is the root element itself.
|
|
@@ -134,13 +168,13 @@ function resolveRootOffset(root, childIndex, cache) {
|
|
|
134
168
|
if (blockId === null) {
|
|
135
169
|
return null;
|
|
136
170
|
}
|
|
137
|
-
const
|
|
138
|
-
if (
|
|
171
|
+
const lookup = lookupCacheEntry(cache, blockId);
|
|
172
|
+
if (lookup === undefined) {
|
|
139
173
|
return null;
|
|
140
174
|
}
|
|
175
|
+
const { entry } = lookup;
|
|
141
176
|
// After this block: if there's a next block, return its start
|
|
142
|
-
const
|
|
143
|
-
const nextEntry = cache[entryIndex + 1];
|
|
177
|
+
const nextEntry = cache[lookup.index + 1];
|
|
144
178
|
if (nextEntry !== undefined) {
|
|
145
179
|
return nextEntry.startOffset;
|
|
146
180
|
}
|
|
@@ -304,13 +338,15 @@ function getSpanTextLength(spanEl) {
|
|
|
304
338
|
* }
|
|
305
339
|
* ```
|
|
306
340
|
*/
|
|
307
|
-
export function rtifOffsetToDomPoint(root, doc, offset) {
|
|
341
|
+
export function rtifOffsetToDomPoint(root, doc, offset, blockElementMap) {
|
|
308
342
|
const resolved = resolve(doc, offset);
|
|
309
343
|
const block = doc.blocks[resolved.blockIndex];
|
|
310
344
|
if (block === undefined) {
|
|
311
345
|
return null;
|
|
312
346
|
}
|
|
313
|
-
|
|
347
|
+
// Use persistent Map for O(1) lookup, fall back to querySelector
|
|
348
|
+
const blockEl = blockElementMap?.get(block.id) ??
|
|
349
|
+
root.querySelector(`[data-rtif-block="${escapeAttrValue(block.id)}"]`);
|
|
314
350
|
if (blockEl === null) {
|
|
315
351
|
return null;
|
|
316
352
|
}
|
|
@@ -465,9 +501,9 @@ export function readDomSelection(root, cache) {
|
|
|
465
501
|
* setDomSelection(root, doc, { anchor: { offset: 0 }, focus: { offset: 5 } });
|
|
466
502
|
* ```
|
|
467
503
|
*/
|
|
468
|
-
export function setDomSelection(root, doc, selection) {
|
|
469
|
-
const anchorPoint = rtifOffsetToDomPoint(root, doc, selection.anchor.offset);
|
|
470
|
-
const focusPoint = rtifOffsetToDomPoint(root, doc, selection.focus.offset);
|
|
504
|
+
export function setDomSelection(root, doc, selection, blockElementMap) {
|
|
505
|
+
const anchorPoint = rtifOffsetToDomPoint(root, doc, selection.anchor.offset, blockElementMap);
|
|
506
|
+
const focusPoint = rtifOffsetToDomPoint(root, doc, selection.focus.offset, blockElementMap);
|
|
471
507
|
if (anchorPoint === null || focusPoint === null) {
|
|
472
508
|
return;
|
|
473
509
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-sync.js","sourceRoot":"","sources":["../src/selection-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection-sync.js","sourceRoot":"","sources":["../src/selection-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spatial index for viewport virtualization.
|
|
3
|
+
*
|
|
4
|
+
* A prefix-sum array of block pixel heights, mirroring
|
|
5
|
+
* {@link ResolveIndex} from `@rtif-sdk/core` but for layout instead of
|
|
6
|
+
* character offsets. Provides O(1) `blockTop` / `totalHeight` and
|
|
7
|
+
* O(log n) `computeVisibleRange` for efficiently determining which
|
|
8
|
+
* blocks are visible within a scrollable viewport.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
import type { Document } from '@rtif-sdk/core';
|
|
13
|
+
/**
|
|
14
|
+
* Default estimated pixel heights per block type.
|
|
15
|
+
*
|
|
16
|
+
* Used when no measured height is available for a block.
|
|
17
|
+
* Override via {@link SpatialIndexConfig.blockTypeHeights}.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* // Use defaults with a custom "callout" override
|
|
22
|
+
* createSpatialIndex(doc, {
|
|
23
|
+
* blockTypeHeights: { ...DEFAULT_BLOCK_TYPE_HEIGHTS, callout: 64 },
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_BLOCK_TYPE_HEIGHTS: Record<string, number>;
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for creating a {@link SpatialIndex}.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const config: SpatialIndexConfig = {
|
|
34
|
+
* estimatedBlockHeight: 32,
|
|
35
|
+
* blockTypeHeights: { heading: 48, image: 250 },
|
|
36
|
+
* };
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export interface SpatialIndexConfig {
|
|
40
|
+
/**
|
|
41
|
+
* Default estimated pixel height for block types not listed in
|
|
42
|
+
* {@link blockTypeHeights} or {@link DEFAULT_BLOCK_TYPE_HEIGHTS}.
|
|
43
|
+
*
|
|
44
|
+
* Default: `24`.
|
|
45
|
+
*/
|
|
46
|
+
readonly estimatedBlockHeight?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Estimated pixel heights per block type string.
|
|
49
|
+
*
|
|
50
|
+
* Merged on top of {@link DEFAULT_BLOCK_TYPE_HEIGHTS} so you only
|
|
51
|
+
* need to specify overrides. Pass an empty object to use only the
|
|
52
|
+
* built-in defaults.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* { heading: 48, 'list-item': 28 }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
readonly blockTypeHeights?: Record<string, number>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A prefix-sum spatial index for O(1) block-top queries and O(log n)
|
|
63
|
+
* visible-range computation.
|
|
64
|
+
*
|
|
65
|
+
* Create with {@link createSpatialIndex}. The index is mutable --
|
|
66
|
+
* call {@link setBlockHeight} or {@link setBlockHeights} as measured
|
|
67
|
+
* heights become available, and {@link rebuild} when the document
|
|
68
|
+
* structure changes (blocks added/removed/reordered).
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const spatial = createSpatialIndex(doc);
|
|
73
|
+
* const range = spatial.computeVisibleRange(scrollTop, viewportHeight, 2);
|
|
74
|
+
* for (let i = range.start; i < range.end; i++) {
|
|
75
|
+
* renderBlock(doc.blocks[i]);
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export interface SpatialIndex {
|
|
80
|
+
/**
|
|
81
|
+
* Total height of all blocks in pixels.
|
|
82
|
+
*
|
|
83
|
+
* @returns Sum of all block heights (O(1))
|
|
84
|
+
*/
|
|
85
|
+
totalHeight(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Number of blocks in the index.
|
|
88
|
+
*
|
|
89
|
+
* @returns Block count (O(1))
|
|
90
|
+
*/
|
|
91
|
+
blockCount(): number;
|
|
92
|
+
/**
|
|
93
|
+
* Pixel height of the block at the given index.
|
|
94
|
+
*
|
|
95
|
+
* @param index - 0-based block index
|
|
96
|
+
* @returns The block's height in pixels
|
|
97
|
+
* @throws {RangeError} If index is out of bounds
|
|
98
|
+
*/
|
|
99
|
+
blockHeight(index: number): number;
|
|
100
|
+
/**
|
|
101
|
+
* The y-coordinate (top edge) of the block at the given index,
|
|
102
|
+
* measured from the top of the document.
|
|
103
|
+
*
|
|
104
|
+
* @param index - 0-based block index
|
|
105
|
+
* @returns Pixel offset from document top (O(1))
|
|
106
|
+
* @throws {RangeError} If index is out of bounds
|
|
107
|
+
*/
|
|
108
|
+
blockTop(index: number): number;
|
|
109
|
+
/**
|
|
110
|
+
* Compute the range of block indices visible within a scrollable
|
|
111
|
+
* viewport, plus a configurable buffer of extra blocks on each side.
|
|
112
|
+
*
|
|
113
|
+
* Uses binary search on the prefix-sum array for O(log n) performance.
|
|
114
|
+
*
|
|
115
|
+
* @param scrollTop - The viewport's scroll offset from the top of the
|
|
116
|
+
* document in pixels. Clamped to `[0, totalHeight]`.
|
|
117
|
+
* @param viewportHeight - The viewport height in pixels. Must be >= 0.
|
|
118
|
+
* @param buffer - Number of extra blocks to include before and after
|
|
119
|
+
* the visible range (for smooth scrolling). Clamped to valid range.
|
|
120
|
+
* @returns An object with `start` (inclusive) and `end` (exclusive)
|
|
121
|
+
* block indices. When there are no blocks, returns `{ start: 0, end: 0 }`.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```ts
|
|
125
|
+
* const { start, end } = spatial.computeVisibleRange(200, 600, 3);
|
|
126
|
+
* // Render blocks [start, end)
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
computeVisibleRange(scrollTop: number, viewportHeight: number, buffer: number): {
|
|
130
|
+
readonly start: number;
|
|
131
|
+
readonly end: number;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Update the measured pixel height of a single block and rebuild
|
|
135
|
+
* prefix sums from that index onward.
|
|
136
|
+
*
|
|
137
|
+
* @param index - 0-based block index
|
|
138
|
+
* @param height - New measured height in pixels
|
|
139
|
+
* @throws {RangeError} If index is out of bounds
|
|
140
|
+
*/
|
|
141
|
+
setBlockHeight(index: number, height: number): void;
|
|
142
|
+
/**
|
|
143
|
+
* Batch-update measured pixel heights for multiple blocks and rebuild
|
|
144
|
+
* prefix sums once.
|
|
145
|
+
*
|
|
146
|
+
* More efficient than calling {@link setBlockHeight} in a loop because
|
|
147
|
+
* prefix sums are only rebuilt once, starting from the lowest changed index.
|
|
148
|
+
*
|
|
149
|
+
* @param updates - Array of `{ index, height }` pairs
|
|
150
|
+
* @throws {RangeError} If any index is out of bounds
|
|
151
|
+
*/
|
|
152
|
+
setBlockHeights(updates: ReadonlyArray<{
|
|
153
|
+
readonly index: number;
|
|
154
|
+
readonly height: number;
|
|
155
|
+
}>): void;
|
|
156
|
+
/**
|
|
157
|
+
* Rebuild the index from a (potentially new) document.
|
|
158
|
+
*
|
|
159
|
+
* Creates a fresh prefix-sum array sized to the document's block count.
|
|
160
|
+
* If `preserveHeights` is provided (keyed by block ID), those measured
|
|
161
|
+
* heights are used; otherwise the estimate for the block's type is used.
|
|
162
|
+
*
|
|
163
|
+
* @param doc - The RTIF document to index
|
|
164
|
+
* @param preserveHeights - Optional map of block ID to measured pixel
|
|
165
|
+
* height. Blocks whose IDs appear in this map use the measured value
|
|
166
|
+
* instead of the type-based estimate.
|
|
167
|
+
*/
|
|
168
|
+
rebuild(doc: Document, preserveHeights?: Map<string, number>): void;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create a spatial index for viewport virtualization.
|
|
172
|
+
*
|
|
173
|
+
* Builds a prefix-sum array of estimated block heights in O(n). Subsequent
|
|
174
|
+
* `blockTop()` calls are O(1) and `computeVisibleRange()` calls are O(log n).
|
|
175
|
+
*
|
|
176
|
+
* As blocks are rendered and measured, call {@link SpatialIndex.setBlockHeight}
|
|
177
|
+
* or {@link SpatialIndex.setBlockHeights} to replace estimates with actual
|
|
178
|
+
* measured values. When the document structure changes (blocks added, removed,
|
|
179
|
+
* or reordered), call {@link SpatialIndex.rebuild}.
|
|
180
|
+
*
|
|
181
|
+
* @param doc - The RTIF document to index
|
|
182
|
+
* @param config - Optional configuration for height estimates
|
|
183
|
+
* @returns A new {@link SpatialIndex} instance
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* import { createSpatialIndex } from '@rtif-sdk/web';
|
|
188
|
+
*
|
|
189
|
+
* const spatial = createSpatialIndex(doc);
|
|
190
|
+
* console.log(spatial.totalHeight()); // e.g. 2400
|
|
191
|
+
* console.log(spatial.blockTop(5)); // e.g. 120
|
|
192
|
+
*
|
|
193
|
+
* const { start, end } = spatial.computeVisibleRange(100, 600, 2);
|
|
194
|
+
* for (let i = start; i < end; i++) {
|
|
195
|
+
* renderBlock(doc.blocks[i]);
|
|
196
|
+
* }
|
|
197
|
+
*
|
|
198
|
+
* // After measuring a block's actual height:
|
|
199
|
+
* spatial.setBlockHeight(5, 36);
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare function createSpatialIndex(doc: Document, config?: SpatialIndexConfig): SpatialIndex;
|
|
203
|
+
//# sourceMappingURL=spatial-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-index.d.ts","sourceRoot":"","sources":["../src/spatial-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAM/C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ7D,CAAC;AAMF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAEvC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC;IAEtB;;;;OAIG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpD;;;;;;;OAOG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpD;;;;;;;;;OASG;IACH,eAAe,CACb,OAAO,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAC1E,IAAI,CAAC;IAER;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CACrE;AA+CD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,kBAAkB,GAC1B,YAAY,CAgJd"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spatial index for viewport virtualization.
|
|
3
|
+
*
|
|
4
|
+
* A prefix-sum array of block pixel heights, mirroring
|
|
5
|
+
* {@link ResolveIndex} from `@rtif-sdk/core` but for layout instead of
|
|
6
|
+
* character offsets. Provides O(1) `blockTop` / `totalHeight` and
|
|
7
|
+
* O(log n) `computeVisibleRange` for efficiently determining which
|
|
8
|
+
* blocks are visible within a scrollable viewport.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Constants
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Default estimated pixel heights per block type.
|
|
17
|
+
*
|
|
18
|
+
* Used when no measured height is available for a block.
|
|
19
|
+
* Override via {@link SpatialIndexConfig.blockTypeHeights}.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* // Use defaults with a custom "callout" override
|
|
24
|
+
* createSpatialIndex(doc, {
|
|
25
|
+
* blockTypeHeights: { ...DEFAULT_BLOCK_TYPE_HEIGHTS, callout: 64 },
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULT_BLOCK_TYPE_HEIGHTS = {
|
|
30
|
+
text: 24,
|
|
31
|
+
heading: 40,
|
|
32
|
+
code_block: 48,
|
|
33
|
+
blockquote: 32,
|
|
34
|
+
hr: 16,
|
|
35
|
+
image: 200,
|
|
36
|
+
embed: 300,
|
|
37
|
+
};
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Helpers
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Estimate the pixel height of a block based on its type.
|
|
43
|
+
*/
|
|
44
|
+
function estimateHeight(blockType, mergedHeights, fallback) {
|
|
45
|
+
const h = mergedHeights[blockType];
|
|
46
|
+
return h !== undefined ? h : fallback;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Rebuild prefix sums starting from `fromIndex`. Mutates `prefixSums` in place.
|
|
50
|
+
*/
|
|
51
|
+
function rebuildPrefixSums(heights, prefixSums, fromIndex) {
|
|
52
|
+
const n = heights.length;
|
|
53
|
+
for (let i = fromIndex; i < n; i++) {
|
|
54
|
+
prefixSums[i] = i === 0 ? 0 : prefixSums[i - 1] + heights[i - 1];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validate that `index` is in `[0, count)`.
|
|
59
|
+
*/
|
|
60
|
+
function assertValidIndex(index, count) {
|
|
61
|
+
if (index < 0 || index >= count) {
|
|
62
|
+
throw new RangeError(`Block index ${index} out of range [0, ${count})`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Factory
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* Create a spatial index for viewport virtualization.
|
|
70
|
+
*
|
|
71
|
+
* Builds a prefix-sum array of estimated block heights in O(n). Subsequent
|
|
72
|
+
* `blockTop()` calls are O(1) and `computeVisibleRange()` calls are O(log n).
|
|
73
|
+
*
|
|
74
|
+
* As blocks are rendered and measured, call {@link SpatialIndex.setBlockHeight}
|
|
75
|
+
* or {@link SpatialIndex.setBlockHeights} to replace estimates with actual
|
|
76
|
+
* measured values. When the document structure changes (blocks added, removed,
|
|
77
|
+
* or reordered), call {@link SpatialIndex.rebuild}.
|
|
78
|
+
*
|
|
79
|
+
* @param doc - The RTIF document to index
|
|
80
|
+
* @param config - Optional configuration for height estimates
|
|
81
|
+
* @returns A new {@link SpatialIndex} instance
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { createSpatialIndex } from '@rtif-sdk/web';
|
|
86
|
+
*
|
|
87
|
+
* const spatial = createSpatialIndex(doc);
|
|
88
|
+
* console.log(spatial.totalHeight()); // e.g. 2400
|
|
89
|
+
* console.log(spatial.blockTop(5)); // e.g. 120
|
|
90
|
+
*
|
|
91
|
+
* const { start, end } = spatial.computeVisibleRange(100, 600, 2);
|
|
92
|
+
* for (let i = start; i < end; i++) {
|
|
93
|
+
* renderBlock(doc.blocks[i]);
|
|
94
|
+
* }
|
|
95
|
+
*
|
|
96
|
+
* // After measuring a block's actual height:
|
|
97
|
+
* spatial.setBlockHeight(5, 36);
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function createSpatialIndex(doc, config) {
|
|
101
|
+
const fallbackHeight = config?.estimatedBlockHeight ?? 24;
|
|
102
|
+
const mergedHeights = {
|
|
103
|
+
...DEFAULT_BLOCK_TYPE_HEIGHTS,
|
|
104
|
+
...config?.blockTypeHeights,
|
|
105
|
+
};
|
|
106
|
+
// Mutable arrays — rebuilt on structural changes, updated on height changes
|
|
107
|
+
let heights = [];
|
|
108
|
+
let prefixSums = [];
|
|
109
|
+
let count = 0;
|
|
110
|
+
/**
|
|
111
|
+
* Build the arrays from a document, optionally preserving measured heights.
|
|
112
|
+
*/
|
|
113
|
+
function buildFromDoc(d, preserveHeights) {
|
|
114
|
+
const n = d.blocks.length;
|
|
115
|
+
heights = new Array(n);
|
|
116
|
+
prefixSums = new Array(n);
|
|
117
|
+
count = n;
|
|
118
|
+
for (let i = 0; i < n; i++) {
|
|
119
|
+
const block = d.blocks[i];
|
|
120
|
+
const preserved = preserveHeights?.get(block.id);
|
|
121
|
+
heights[i] =
|
|
122
|
+
preserved !== undefined
|
|
123
|
+
? preserved
|
|
124
|
+
: estimateHeight(block.type, mergedHeights, fallbackHeight);
|
|
125
|
+
}
|
|
126
|
+
rebuildPrefixSums(heights, prefixSums, 0);
|
|
127
|
+
}
|
|
128
|
+
// Initial build
|
|
129
|
+
buildFromDoc(doc);
|
|
130
|
+
const index = {
|
|
131
|
+
totalHeight() {
|
|
132
|
+
if (count === 0)
|
|
133
|
+
return 0;
|
|
134
|
+
return prefixSums[count - 1] + heights[count - 1];
|
|
135
|
+
},
|
|
136
|
+
blockCount() {
|
|
137
|
+
return count;
|
|
138
|
+
},
|
|
139
|
+
blockHeight(blockIndex) {
|
|
140
|
+
assertValidIndex(blockIndex, count);
|
|
141
|
+
return heights[blockIndex];
|
|
142
|
+
},
|
|
143
|
+
blockTop(blockIndex) {
|
|
144
|
+
assertValidIndex(blockIndex, count);
|
|
145
|
+
return prefixSums[blockIndex];
|
|
146
|
+
},
|
|
147
|
+
computeVisibleRange(scrollTop, viewportHeight, buffer) {
|
|
148
|
+
if (count === 0) {
|
|
149
|
+
return { start: 0, end: 0 };
|
|
150
|
+
}
|
|
151
|
+
// Clamp scrollTop to valid range
|
|
152
|
+
const total = index.totalHeight();
|
|
153
|
+
const clampedScrollTop = Math.max(0, Math.min(scrollTop, total));
|
|
154
|
+
const clampedViewportHeight = Math.max(0, viewportHeight);
|
|
155
|
+
const clampedBuffer = Math.max(0, Math.floor(buffer));
|
|
156
|
+
// Binary search for first block whose bottom edge > clampedScrollTop.
|
|
157
|
+
// A block's bottom edge = prefixSums[i] + heights[i].
|
|
158
|
+
// We want the smallest i such that prefixSums[i] + heights[i] > clampedScrollTop.
|
|
159
|
+
let lo = 0;
|
|
160
|
+
let hi = count - 1;
|
|
161
|
+
while (lo < hi) {
|
|
162
|
+
const mid = (lo + hi) >>> 1;
|
|
163
|
+
const bottomEdge = prefixSums[mid] + heights[mid];
|
|
164
|
+
if (bottomEdge <= clampedScrollTop) {
|
|
165
|
+
lo = mid + 1;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
hi = mid;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const firstVisible = lo;
|
|
172
|
+
// Linear scan forward to find last block within viewport.
|
|
173
|
+
// A block is visible if its top edge < clampedScrollTop + clampedViewportHeight.
|
|
174
|
+
const viewportBottom = clampedScrollTop + clampedViewportHeight;
|
|
175
|
+
let lastVisible = firstVisible;
|
|
176
|
+
for (let i = firstVisible; i < count; i++) {
|
|
177
|
+
if (prefixSums[i] >= viewportBottom) {
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
lastVisible = i;
|
|
181
|
+
}
|
|
182
|
+
// Apply buffer, clamped to valid range
|
|
183
|
+
const start = Math.max(0, firstVisible - clampedBuffer);
|
|
184
|
+
const end = Math.min(count, lastVisible + 1 + clampedBuffer);
|
|
185
|
+
return { start, end };
|
|
186
|
+
},
|
|
187
|
+
setBlockHeight(blockIndex, height) {
|
|
188
|
+
assertValidIndex(blockIndex, count);
|
|
189
|
+
heights[blockIndex] = height;
|
|
190
|
+
rebuildPrefixSums(heights, prefixSums, blockIndex);
|
|
191
|
+
},
|
|
192
|
+
setBlockHeights(updates) {
|
|
193
|
+
if (updates.length === 0)
|
|
194
|
+
return;
|
|
195
|
+
let minIndex = count;
|
|
196
|
+
for (const { index: idx, height } of updates) {
|
|
197
|
+
assertValidIndex(idx, count);
|
|
198
|
+
heights[idx] = height;
|
|
199
|
+
if (idx < minIndex) {
|
|
200
|
+
minIndex = idx;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
rebuildPrefixSums(heights, prefixSums, minIndex);
|
|
204
|
+
},
|
|
205
|
+
rebuild(d, preserveHeights) {
|
|
206
|
+
buildFromDoc(d, preserveHeights);
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
return index;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=spatial-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-index.js","sourceRoot":"","sources":["../src/spatial-index.ts"],"names":[],"mappings":"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"}
|