@datalayer/cells 0.0.0-stage → 0.0.2
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 +55 -2
- package/lib/chrome/index.d.ts +7 -0
- package/lib/chrome/index.d.ts.map +1 -0
- package/lib/chrome/index.js +7 -0
- package/lib/chrome/index.js.map +1 -0
- package/lib/collab/index.d.ts +7 -0
- package/lib/collab/index.d.ts.map +1 -0
- package/lib/collab/index.js +7 -0
- package/lib/collab/index.js.map +1 -0
- package/lib/core/axis.d.ts +103 -0
- package/lib/core/axis.d.ts.map +1 -0
- package/lib/core/axis.js +470 -0
- package/lib/core/axis.js.map +1 -0
- package/lib/core/cells.d.ts +71 -0
- package/lib/core/cells.d.ts.map +1 -0
- package/lib/core/cells.js +285 -0
- package/lib/core/cells.js.map +1 -0
- package/lib/core/commands.d.ts +157 -0
- package/lib/core/commands.d.ts.map +1 -0
- package/lib/core/commands.js +620 -0
- package/lib/core/commands.js.map +1 -0
- package/lib/core/format.d.ts +52 -0
- package/lib/core/format.d.ts.map +1 -0
- package/lib/core/format.js +264 -0
- package/lib/core/format.js.map +1 -0
- package/lib/core/history.d.ts +42 -0
- package/lib/core/history.d.ts.map +1 -0
- package/lib/core/history.js +63 -0
- package/lib/core/history.js.map +1 -0
- package/lib/core/index.d.ts +23 -0
- package/lib/core/index.d.ts.map +1 -0
- package/lib/core/index.js +28 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/model.d.ts +116 -0
- package/lib/core/model.d.ts.map +1 -0
- package/lib/core/model.js +330 -0
- package/lib/core/model.js.map +1 -0
- package/lib/core/patches.d.ts +140 -0
- package/lib/core/patches.d.ts.map +1 -0
- package/lib/core/patches.js +272 -0
- package/lib/core/patches.js.map +1 -0
- package/lib/core/reactor.d.ts +24 -0
- package/lib/core/reactor.d.ts.map +1 -0
- package/lib/core/reactor.js +48 -0
- package/lib/core/reactor.js.map +1 -0
- package/lib/core/selection.d.ts +81 -0
- package/lib/core/selection.d.ts.map +1 -0
- package/lib/core/selection.js +175 -0
- package/lib/core/selection.js.map +1 -0
- package/lib/core/strings.d.ts +19 -0
- package/lib/core/strings.d.ts.map +1 -0
- package/lib/core/strings.js +61 -0
- package/lib/core/strings.js.map +1 -0
- package/lib/core/styles.d.ts +48 -0
- package/lib/core/styles.d.ts.map +1 -0
- package/lib/core/styles.js +102 -0
- package/lib/core/styles.js.map +1 -0
- package/lib/core/values.d.ts +20 -0
- package/lib/core/values.d.ts.map +1 -0
- package/lib/core/values.js +39 -0
- package/lib/core/values.js.map +1 -0
- package/lib/core/workbook.d.ts +59 -0
- package/lib/core/workbook.d.ts.map +1 -0
- package/lib/core/workbook.js +101 -0
- package/lib/core/workbook.js.map +1 -0
- package/lib/core/zone.d.ts +48 -0
- package/lib/core/zone.d.ts.map +1 -0
- package/lib/core/zone.js +89 -0
- package/lib/core/zone.js.map +1 -0
- package/lib/csv/index.d.ts +7 -0
- package/lib/csv/index.d.ts.map +1 -0
- package/lib/csv/index.js +7 -0
- package/lib/csv/index.js.map +1 -0
- package/lib/index.d.ts +8 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +13 -0
- package/lib/index.js.map +1 -0
- package/lib/plugin/index.d.ts +7 -0
- package/lib/plugin/index.d.ts.map +1 -0
- package/lib/plugin/index.js +7 -0
- package/lib/plugin/index.js.map +1 -0
- package/lib/points/index.d.ts +154 -0
- package/lib/points/index.d.ts.map +1 -0
- package/lib/points/index.js +50 -0
- package/lib/points/index.js.map +1 -0
- package/lib/points/resolve.d.ts +56 -0
- package/lib/points/resolve.d.ts.map +1 -0
- package/lib/points/resolve.js +106 -0
- package/lib/points/resolve.js.map +1 -0
- package/lib/xlsx/index.d.ts +7 -0
- package/lib/xlsx/index.d.ts.map +1 -0
- package/lib/xlsx/index.js +7 -0
- package/lib/xlsx/index.js.map +1 -0
- package/package.json +116 -4
- package/style/cells.css +7 -0
package/lib/core/axis.js
ADDED
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022-2026 Datalayer, Inc.
|
|
3
|
+
*
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* An axis of a sheet: its rows, or its columns.
|
|
8
|
+
*
|
|
9
|
+
* - **Ids.** Every index has a stable id that follows the row through inserts,
|
|
10
|
+
* deletes and moves. Ids are materialised only up to the last index ever
|
|
11
|
+
* named; beyond, an index has an *implicit* id derived from where the row
|
|
12
|
+
* was when the axis was created (`IMPLICIT_BASE + creation index`), so two
|
|
13
|
+
* replicas that materialise the same index independently agree on its id.
|
|
14
|
+
* Inserted indexes get fresh ids, from `FRESH_BASE` up.
|
|
15
|
+
* - **Sizes.** Default until the first resize; then a raw `Float64Array` of
|
|
16
|
+
* sizes and a Fenwick tree over the effective sizes (0 when hidden), so
|
|
17
|
+
* `offsetOf` and `indexAt` are O(log n) and a resize is O(log n). An insert
|
|
18
|
+
* or delete rebuilds the tree from the edit point only.
|
|
19
|
+
* - **Hidden** is a bitset beside the sizes: a hidden index keeps its size for
|
|
20
|
+
* unhide and contributes 0 to offsets.
|
|
21
|
+
*
|
|
22
|
+
* @module core/axis
|
|
23
|
+
*/
|
|
24
|
+
/** Implicit ids are `IMPLICIT_BASE + creation index`. */
|
|
25
|
+
export const IMPLICIT_BASE = 0;
|
|
26
|
+
/** Fresh ids (inserted indexes) start here, above any creation index. */
|
|
27
|
+
export const FRESH_BASE = 1 << 30;
|
|
28
|
+
export class Axis {
|
|
29
|
+
count;
|
|
30
|
+
defaultSize;
|
|
31
|
+
/** Materialised ids, `[0, #length)`; the buffer grows by doubling. */
|
|
32
|
+
#ids = new Int32Array(0);
|
|
33
|
+
#length = 0;
|
|
34
|
+
/** The creation index of the first implicit index (`#length`). */
|
|
35
|
+
#implicitStart = 0;
|
|
36
|
+
#nextFresh = FRESH_BASE;
|
|
37
|
+
/** `null` until the first non-default size or hidden index. */
|
|
38
|
+
#sizes = null;
|
|
39
|
+
#tree = null;
|
|
40
|
+
#hidden = null;
|
|
41
|
+
constructor(options) {
|
|
42
|
+
if (!Number.isInteger(options.count) || options.count < 1 || options.count > FRESH_BASE - 1) {
|
|
43
|
+
throw new Error(`An axis holds 1 to ${FRESH_BASE - 1} indexes; ${options.count} was asked for.`);
|
|
44
|
+
}
|
|
45
|
+
if (!(options.defaultSize > 0)) {
|
|
46
|
+
throw new Error(`An axis's default size must be positive; ${options.defaultSize} was given.`);
|
|
47
|
+
}
|
|
48
|
+
this.count = options.count;
|
|
49
|
+
this.defaultSize = options.defaultSize;
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------- ids
|
|
52
|
+
/** The id of an index, materialised or implicit. */
|
|
53
|
+
idAt(index) {
|
|
54
|
+
this.#check(index);
|
|
55
|
+
if (index < this.#length)
|
|
56
|
+
return this.#ids[index];
|
|
57
|
+
return IMPLICIT_BASE + this.#implicitStart + (index - this.#length);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Materialise ids up to `index` inclusive and return its id. Anything that
|
|
61
|
+
* names an index (content, a size, a merge corner, a reference) calls this
|
|
62
|
+
* first, so no implicit id is ever referenced.
|
|
63
|
+
*/
|
|
64
|
+
materialize(index) {
|
|
65
|
+
this.#check(index);
|
|
66
|
+
if (index >= this.#length) {
|
|
67
|
+
const n = index + 1 - this.#length;
|
|
68
|
+
this.#reserve(index + 1);
|
|
69
|
+
for (let k = 0; k < n; k += 1)
|
|
70
|
+
this.#ids[this.#length + k] = IMPLICIT_BASE + this.#implicitStart + k;
|
|
71
|
+
this.#implicitStart += n;
|
|
72
|
+
this.#length = index + 1;
|
|
73
|
+
}
|
|
74
|
+
return this.#ids[index];
|
|
75
|
+
}
|
|
76
|
+
/** How many ids are materialised. */
|
|
77
|
+
get materialized() {
|
|
78
|
+
return this.#length;
|
|
79
|
+
}
|
|
80
|
+
/** `n` fresh ids, for the indexes an insert creates. Never reused. */
|
|
81
|
+
freshIds(n) {
|
|
82
|
+
const ids = new Int32Array(n);
|
|
83
|
+
for (let k = 0; k < n; k += 1)
|
|
84
|
+
ids[k] = this.#nextFresh++;
|
|
85
|
+
return ids;
|
|
86
|
+
}
|
|
87
|
+
/** Whether `tail` is what a delete of `n` would bring at the end by itself. */
|
|
88
|
+
#isImplicitTail(tail, n) {
|
|
89
|
+
if (tail.sizes !== null || tail.hidden !== null)
|
|
90
|
+
return false;
|
|
91
|
+
// After the delete, `#length` drops by n and index k >= #length holds
|
|
92
|
+
// IMPLICIT_BASE + #implicitStart + (k - #length).
|
|
93
|
+
const lengthAfter = this.#length - n;
|
|
94
|
+
for (let k = 0; k < n; k += 1) {
|
|
95
|
+
const index = this.count - n + k;
|
|
96
|
+
if (index < lengthAfter)
|
|
97
|
+
return false;
|
|
98
|
+
if (tail.ids[k] !== IMPLICIT_BASE + this.#implicitStart + (index - lengthAfter))
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
/** The index of an id, or -1. O(n) over the materialised ids; for the binding, not the hot path. */
|
|
104
|
+
indexOfId(id) {
|
|
105
|
+
for (let i = 0; i < this.#length; i += 1)
|
|
106
|
+
if (this.#ids[i] === id)
|
|
107
|
+
return i;
|
|
108
|
+
if (id >= IMPLICIT_BASE + this.#implicitStart && id < FRESH_BASE) {
|
|
109
|
+
const index = this.#length + (id - IMPLICIT_BASE - this.#implicitStart);
|
|
110
|
+
return index < this.count ? index : -1;
|
|
111
|
+
}
|
|
112
|
+
return -1;
|
|
113
|
+
}
|
|
114
|
+
/** A copy of the materialised ids, for snapshots and the file format. */
|
|
115
|
+
ids() {
|
|
116
|
+
return this.#ids.slice(0, this.#length);
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------- structure
|
|
119
|
+
/** The state of `n` indexes from `at`: ids, sizes and hidden flags, for patches. */
|
|
120
|
+
segment(at, n) {
|
|
121
|
+
this.#checkSpan(at, n, false);
|
|
122
|
+
return {
|
|
123
|
+
ids: Int32Array.from({ length: n }, (_, k) => this.idAt(at + k)),
|
|
124
|
+
sizes: this.#sizes === null ? null : this.#sizes.slice(at, at + n),
|
|
125
|
+
hidden: this.#hidden === null
|
|
126
|
+
? null
|
|
127
|
+
: Uint8Array.from({ length: n }, (_, k) => (this.isHidden(at + k) ? 1 : 0)),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Insert `n` indexes before `at`. The count stays: the last `n` indexes fall
|
|
132
|
+
* off the end (the command checks they are empty), and come back as
|
|
133
|
+
* `dropped`. With `segment`, the inserted indexes take its ids, sizes and
|
|
134
|
+
* hidden flags (undo, redo, remote inserts); without, fresh ids and the
|
|
135
|
+
* default size.
|
|
136
|
+
*/
|
|
137
|
+
insert(at, n, segment) {
|
|
138
|
+
this.#checkSpan(at, n, true);
|
|
139
|
+
if (segment !== undefined && segment.ids.length !== n) {
|
|
140
|
+
throw new Error(`insert: ${n} indexes but a segment of ${segment.ids.length}.`);
|
|
141
|
+
}
|
|
142
|
+
const dropped = this.segment(this.count - n, n);
|
|
143
|
+
let ids;
|
|
144
|
+
if (segment !== undefined)
|
|
145
|
+
ids = segment.ids.slice();
|
|
146
|
+
else {
|
|
147
|
+
ids = new Int32Array(n);
|
|
148
|
+
for (let k = 0; k < n; k += 1)
|
|
149
|
+
ids[k] = this.#nextFresh++;
|
|
150
|
+
}
|
|
151
|
+
if (at > this.#length)
|
|
152
|
+
this.materialize(at - 1);
|
|
153
|
+
this.#reserve(Math.min(this.#length + n, this.count));
|
|
154
|
+
this.#ids.copyWithin(at + n, at, Math.min(this.#length, this.count - n));
|
|
155
|
+
this.#ids.set(ids, at);
|
|
156
|
+
this.#length = Math.min(this.#length + n, this.count);
|
|
157
|
+
const needsSizes = this.#sizes !== null || segment?.sizes != null || segment?.hidden != null;
|
|
158
|
+
if (needsSizes) {
|
|
159
|
+
this.#allocate();
|
|
160
|
+
const sizes = this.#sizes;
|
|
161
|
+
sizes.copyWithin(at + n, at, this.count - n);
|
|
162
|
+
if (segment?.sizes)
|
|
163
|
+
sizes.set(segment.sizes, at);
|
|
164
|
+
else
|
|
165
|
+
sizes.fill(this.defaultSize, at, at + n);
|
|
166
|
+
if (this.#hidden !== null || segment?.hidden) {
|
|
167
|
+
if (this.#hidden === null)
|
|
168
|
+
this.#hidden = new Uint32Array(Math.ceil(this.count / 32));
|
|
169
|
+
shiftBits(this.#hidden, this.count, at, n);
|
|
170
|
+
if (segment?.hidden)
|
|
171
|
+
for (let k = 0; k < n; k += 1)
|
|
172
|
+
if (segment.hidden[k])
|
|
173
|
+
this.#setBit(at + k, true);
|
|
174
|
+
}
|
|
175
|
+
this.#rebuildFrom(at);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
inserted: { ids, sizes: segment?.sizes ?? null, hidden: segment?.hidden ?? null },
|
|
179
|
+
dropped,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Delete `n` indexes from `at`; returns them. New indexes appear at the end:
|
|
184
|
+
* implicit ones, or `tail`'s when given (undoing an insert brings back the
|
|
185
|
+
* indexes it pushed off).
|
|
186
|
+
*/
|
|
187
|
+
delete(at, n, tail) {
|
|
188
|
+
this.#checkSpan(at, n, false);
|
|
189
|
+
if (tail !== undefined && tail.ids.length !== n) {
|
|
190
|
+
throw new Error(`delete: ${n} indexes but a tail of ${tail.ids.length}.`);
|
|
191
|
+
}
|
|
192
|
+
const removed = this.segment(at, n);
|
|
193
|
+
this.materialize(at + n - 1);
|
|
194
|
+
// A tail that is what the axis would derive anyway (the common case:
|
|
195
|
+
// undoing an insert far from the end) needs no materialising.
|
|
196
|
+
const explicitTail = tail !== undefined && !this.#isImplicitTail(tail, n);
|
|
197
|
+
if (explicitTail)
|
|
198
|
+
this.materialize(this.count - 1);
|
|
199
|
+
this.#ids.copyWithin(at, at + n, this.#length);
|
|
200
|
+
this.#length -= n;
|
|
201
|
+
if (explicitTail) {
|
|
202
|
+
this.#ids.set(tail.ids, this.count - n);
|
|
203
|
+
this.#length = this.count;
|
|
204
|
+
}
|
|
205
|
+
const needsSizes = this.#sizes !== null || tail?.sizes != null || tail?.hidden != null;
|
|
206
|
+
if (needsSizes) {
|
|
207
|
+
this.#allocate();
|
|
208
|
+
const sizes = this.#sizes;
|
|
209
|
+
sizes.copyWithin(at, at + n, this.count);
|
|
210
|
+
if (tail?.sizes)
|
|
211
|
+
sizes.set(tail.sizes, this.count - n);
|
|
212
|
+
else
|
|
213
|
+
sizes.fill(this.defaultSize, this.count - n, this.count);
|
|
214
|
+
if (this.#hidden !== null || tail?.hidden) {
|
|
215
|
+
if (this.#hidden === null)
|
|
216
|
+
this.#hidden = new Uint32Array(Math.ceil(this.count / 32));
|
|
217
|
+
shiftBits(this.#hidden, this.count, at, -n);
|
|
218
|
+
if (tail?.hidden)
|
|
219
|
+
for (let k = 0; k < n; k += 1)
|
|
220
|
+
if (tail.hidden[k])
|
|
221
|
+
this.#setBit(this.count - n + k, true);
|
|
222
|
+
}
|
|
223
|
+
this.#rebuildFrom(at);
|
|
224
|
+
}
|
|
225
|
+
return removed;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Move `n` indexes from `at` to before `to` (an index in the coordinates
|
|
229
|
+
* before the move, outside `[at, at + n]`). Ids, sizes and hidden flags travel.
|
|
230
|
+
*/
|
|
231
|
+
move(at, n, to) {
|
|
232
|
+
this.#checkSpan(at, n, false);
|
|
233
|
+
if (!Number.isInteger(to) || to < 0 || to > this.count || (to >= at && to <= at + n)) {
|
|
234
|
+
throw new Error(`Cannot move ${n} index(es) at ${at} to ${to}.`);
|
|
235
|
+
}
|
|
236
|
+
const lo = Math.min(at, to);
|
|
237
|
+
const hi = Math.max(at + n, to);
|
|
238
|
+
this.materialize(hi - 1);
|
|
239
|
+
const rotate = (arr) => {
|
|
240
|
+
const part = arr.slice(at, at + n);
|
|
241
|
+
if (to < at) {
|
|
242
|
+
arr.copyWithin(to + n, to, at);
|
|
243
|
+
arr.set(part, to);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
arr.copyWithin(at, at + n, to);
|
|
247
|
+
arr.set(part, to - n);
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
rotate(this.#ids);
|
|
251
|
+
if (this.#sizes !== null) {
|
|
252
|
+
rotate(this.#sizes);
|
|
253
|
+
if (this.#hidden !== null) {
|
|
254
|
+
const flags = Float64Array.from({ length: this.count }, (_, i) => i >= lo && i < hi && this.isHidden(i) ? 1 : 0);
|
|
255
|
+
rotate(flags);
|
|
256
|
+
for (let i = lo; i < hi; i += 1)
|
|
257
|
+
this.#setBit(i, flags[i] === 1);
|
|
258
|
+
}
|
|
259
|
+
this.#rebuildFrom(lo);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/** Set sizes and hidden flags of `n` indexes from `at` at once (patches). */
|
|
263
|
+
setSegmentSizes(at, sizes, hidden, n) {
|
|
264
|
+
this.#checkSpan(at, n, false);
|
|
265
|
+
if (sizes === null && hidden === null && this.#sizes === null)
|
|
266
|
+
return;
|
|
267
|
+
this.#allocate();
|
|
268
|
+
if (sizes)
|
|
269
|
+
this.#sizes.set(sizes, at);
|
|
270
|
+
else
|
|
271
|
+
this.#sizes.fill(this.defaultSize, at, at + n);
|
|
272
|
+
if (hidden || this.#hidden !== null) {
|
|
273
|
+
if (this.#hidden === null)
|
|
274
|
+
this.#hidden = new Uint32Array(Math.ceil(this.count / 32));
|
|
275
|
+
for (let k = 0; k < n; k += 1)
|
|
276
|
+
this.#setBit(at + k, hidden ? hidden[k] === 1 : false);
|
|
277
|
+
}
|
|
278
|
+
this.#rebuildFrom(at);
|
|
279
|
+
}
|
|
280
|
+
// ---------------------------------------------------------------- sizes
|
|
281
|
+
/** The size of an index as set, hidden or not. */
|
|
282
|
+
sizeOf(index) {
|
|
283
|
+
this.#check(index);
|
|
284
|
+
return this.#sizes === null ? this.defaultSize : this.#sizes[index];
|
|
285
|
+
}
|
|
286
|
+
/** The size an index takes on screen: 0 when hidden. */
|
|
287
|
+
effectiveSizeOf(index) {
|
|
288
|
+
return this.isHidden(index) ? 0 : this.sizeOf(index);
|
|
289
|
+
}
|
|
290
|
+
/** Set the size of an index. O(log n). */
|
|
291
|
+
resize(index, size) {
|
|
292
|
+
this.#check(index);
|
|
293
|
+
if (!(size > 0) || !Number.isFinite(size))
|
|
294
|
+
throw new Error(`A size must be positive; ${size} was given.`);
|
|
295
|
+
this.#allocate();
|
|
296
|
+
const before = this.effectiveSizeOf(index);
|
|
297
|
+
this.#sizes[index] = size;
|
|
298
|
+
const after = this.effectiveSizeOf(index);
|
|
299
|
+
if (after !== before)
|
|
300
|
+
this.#add(index, after - before);
|
|
301
|
+
}
|
|
302
|
+
/** Whether any size was ever set (else every size is the default and nothing is hidden). */
|
|
303
|
+
get customized() {
|
|
304
|
+
return this.#sizes !== null;
|
|
305
|
+
}
|
|
306
|
+
/** Whether any index is hidden. */
|
|
307
|
+
get hasHidden() {
|
|
308
|
+
return this.#hidden !== null && this.#hidden.some((w) => w !== 0);
|
|
309
|
+
}
|
|
310
|
+
isHidden(index) {
|
|
311
|
+
this.#check(index);
|
|
312
|
+
const h = this.#hidden;
|
|
313
|
+
return h !== null && (h[index >>> 5] & (1 << (index & 31))) !== 0;
|
|
314
|
+
}
|
|
315
|
+
setHidden(index, hidden) {
|
|
316
|
+
if (this.isHidden(index) === hidden)
|
|
317
|
+
return;
|
|
318
|
+
this.#allocate();
|
|
319
|
+
if (this.#hidden === null)
|
|
320
|
+
this.#hidden = new Uint32Array(Math.ceil(this.count / 32));
|
|
321
|
+
const size = this.#sizes[index];
|
|
322
|
+
if (hidden)
|
|
323
|
+
this.#hidden[index >>> 5] |= 1 << (index & 31);
|
|
324
|
+
else
|
|
325
|
+
this.#hidden[index >>> 5] &= ~(1 << (index & 31));
|
|
326
|
+
this.#add(index, hidden ? -size : size);
|
|
327
|
+
}
|
|
328
|
+
/** The offset of an index's start: the sum of the effective sizes before it. O(log n). */
|
|
329
|
+
offsetOf(index) {
|
|
330
|
+
if (!Number.isInteger(index) || index < 0 || index > this.count) {
|
|
331
|
+
throw new Error(`No offset at index ${index} of an axis of ${this.count}.`);
|
|
332
|
+
}
|
|
333
|
+
if (this.#tree === null)
|
|
334
|
+
return index * this.defaultSize;
|
|
335
|
+
let sum = 0;
|
|
336
|
+
for (let i = index; i > 0; i -= i & -i)
|
|
337
|
+
sum += this.#tree[i];
|
|
338
|
+
return sum;
|
|
339
|
+
}
|
|
340
|
+
/** The total extent of the axis. */
|
|
341
|
+
get extent() {
|
|
342
|
+
return this.offsetOf(this.count);
|
|
343
|
+
}
|
|
344
|
+
/** The index under an offset: the last index whose start is at or before it. O(log n). */
|
|
345
|
+
indexAt(offset) {
|
|
346
|
+
if (offset <= 0)
|
|
347
|
+
return this.#firstVisibleFrom(0);
|
|
348
|
+
if (this.#tree === null)
|
|
349
|
+
return Math.min(Math.floor(offset / this.defaultSize), this.count - 1);
|
|
350
|
+
const tree = this.#tree;
|
|
351
|
+
let pos = 0;
|
|
352
|
+
let rest = offset;
|
|
353
|
+
for (let step = highestPowerOfTwo(this.count); step > 0; step >>= 1) {
|
|
354
|
+
const next = pos + step;
|
|
355
|
+
if (next <= this.count && tree[next] <= rest) {
|
|
356
|
+
pos = next;
|
|
357
|
+
rest -= tree[next];
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// `pos` indexes end at or before the offset; the one under it is `pos`,
|
|
361
|
+
// or the last index when the offset is past the end.
|
|
362
|
+
return Math.min(pos, this.count - 1);
|
|
363
|
+
}
|
|
364
|
+
// ---------------------------------------------------------------- internals
|
|
365
|
+
#firstVisibleFrom(index) {
|
|
366
|
+
let i = index;
|
|
367
|
+
while (i < this.count - 1 && this.effectiveSizeOf(i) === 0)
|
|
368
|
+
i += 1;
|
|
369
|
+
return i;
|
|
370
|
+
}
|
|
371
|
+
#allocate() {
|
|
372
|
+
if (this.#sizes !== null)
|
|
373
|
+
return;
|
|
374
|
+
this.#sizes = new Float64Array(this.count).fill(this.defaultSize);
|
|
375
|
+
this.#tree = new Float64Array(this.count + 1);
|
|
376
|
+
this.#rebuildFrom(0);
|
|
377
|
+
}
|
|
378
|
+
#setBit(index, on) {
|
|
379
|
+
const h = this.#hidden;
|
|
380
|
+
if (on)
|
|
381
|
+
h[index >>> 5] |= 1 << (index & 31);
|
|
382
|
+
else
|
|
383
|
+
h[index >>> 5] &= ~(1 << (index & 31));
|
|
384
|
+
}
|
|
385
|
+
#add(index, delta) {
|
|
386
|
+
const tree = this.#tree;
|
|
387
|
+
for (let i = index + 1; i <= this.count; i += i & -i)
|
|
388
|
+
tree[i] += delta;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Recompute the Fenwick nodes covering indexes `>= from`, in one pass:
|
|
392
|
+
* node i holds prefix(i) - prefix(i - lowbit(i)); prefixes below `from`
|
|
393
|
+
* come from the still-valid lower nodes, those above from a running sum.
|
|
394
|
+
*/
|
|
395
|
+
#rebuildFrom(from) {
|
|
396
|
+
const tree = this.#tree;
|
|
397
|
+
const n = this.count;
|
|
398
|
+
const start = from + 1;
|
|
399
|
+
const below = this.#prefixFromTree(from);
|
|
400
|
+
const running = new Float64Array(n - from + 1);
|
|
401
|
+
running[0] = below;
|
|
402
|
+
let sum = below;
|
|
403
|
+
for (let i = start; i <= n; i += 1) {
|
|
404
|
+
sum += this.effectiveSizeOf(i - 1);
|
|
405
|
+
running[i - from] = sum;
|
|
406
|
+
const lower = i - (i & -i);
|
|
407
|
+
const lowerPrefix = lower >= from ? running[lower - from] : this.#prefixFromTree(lower);
|
|
408
|
+
tree[i] = sum - lowerPrefix;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
#prefixFromTree(index) {
|
|
412
|
+
const tree = this.#tree;
|
|
413
|
+
let sum = 0;
|
|
414
|
+
for (let i = index; i > 0; i -= i & -i)
|
|
415
|
+
sum += tree[i];
|
|
416
|
+
return sum;
|
|
417
|
+
}
|
|
418
|
+
#reserve(length) {
|
|
419
|
+
if (length <= this.#ids.length)
|
|
420
|
+
return;
|
|
421
|
+
let capacity = Math.max(64, this.#ids.length);
|
|
422
|
+
while (capacity < length)
|
|
423
|
+
capacity *= 2;
|
|
424
|
+
const ids = new Int32Array(Math.min(capacity, this.count + 1));
|
|
425
|
+
ids.set(this.#ids.subarray(0, this.#length));
|
|
426
|
+
this.#ids = ids;
|
|
427
|
+
}
|
|
428
|
+
#check(index) {
|
|
429
|
+
if (!Number.isInteger(index) || index < 0 || index >= this.count) {
|
|
430
|
+
throw new Error(`Index ${index} is outside an axis of ${this.count}.`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
#checkSpan(at, n, inserting) {
|
|
434
|
+
if (!Number.isInteger(n) || n < 1)
|
|
435
|
+
throw new Error(`A span needs at least one index; ${n} was given.`);
|
|
436
|
+
if (!Number.isInteger(at) || at < 0 || at + n > this.count || (inserting && at >= this.count)) {
|
|
437
|
+
throw new Error(`${n} index(es) at ${at} do not fit an axis of ${this.count}.`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
function highestPowerOfTwo(n) {
|
|
442
|
+
let p = 1;
|
|
443
|
+
while (p * 2 <= n)
|
|
444
|
+
p *= 2;
|
|
445
|
+
return p;
|
|
446
|
+
}
|
|
447
|
+
/** Shift the bits at and after `at` by `n` (negative: towards `at`, dropping `-n` bits). */
|
|
448
|
+
function shiftBits(bits, count, at, n) {
|
|
449
|
+
const get = (i) => (bits[i >>> 5] & (1 << (i & 31))) !== 0;
|
|
450
|
+
const set = (i, v) => {
|
|
451
|
+
if (v)
|
|
452
|
+
bits[i >>> 5] |= 1 << (i & 31);
|
|
453
|
+
else
|
|
454
|
+
bits[i >>> 5] &= ~(1 << (i & 31));
|
|
455
|
+
};
|
|
456
|
+
if (n > 0) {
|
|
457
|
+
for (let i = count - 1; i >= at + n; i -= 1)
|
|
458
|
+
set(i, get(i - n));
|
|
459
|
+
for (let i = at; i < at + n; i += 1)
|
|
460
|
+
set(i, false);
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
const m = -n;
|
|
464
|
+
for (let i = at; i < count - m; i += 1)
|
|
465
|
+
set(i, get(i + m));
|
|
466
|
+
for (let i = count - m; i < count; i += 1)
|
|
467
|
+
set(i, false);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=axis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axis.js","sourceRoot":"","sources":["../../src/core/axis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cells of a sheet, stored by column in chunks of 1,024 rows, each chunk
|
|
3
|
+
* columnar: a kind byte, a number, a reference (into the string pool or the
|
|
4
|
+
* formula table) and a style index per row. No object per cell: a numeric
|
|
5
|
+
* cell costs 15 bytes in a full chunk.
|
|
6
|
+
*
|
|
7
|
+
* Positions are the in-memory address. Ids (the axes) are what collaboration
|
|
8
|
+
* syncs; this store never sees them.
|
|
9
|
+
*
|
|
10
|
+
* @module core/cells
|
|
11
|
+
*/
|
|
12
|
+
import type { StringPool } from './strings.js';
|
|
13
|
+
import { type CellValue } from './values.js';
|
|
14
|
+
import type { Zone } from './zone.js';
|
|
15
|
+
export declare const CHUNK = 1024;
|
|
16
|
+
/** What a cell holds, as persisted: a literal value, or a formula with its cached value; and a style. */
|
|
17
|
+
export interface CellContent {
|
|
18
|
+
/** The literal value, or a formula's cached value (`null` when not yet computed). */
|
|
19
|
+
readonly value: CellValue;
|
|
20
|
+
/** The formula as typed, without the `=`. */
|
|
21
|
+
readonly formula?: string;
|
|
22
|
+
/** An index into the workbook's style table; 0 is the default. */
|
|
23
|
+
readonly style: number;
|
|
24
|
+
}
|
|
25
|
+
/** A formula's entry: its source and its last computed value. */
|
|
26
|
+
export interface FormulaEntry {
|
|
27
|
+
source: string;
|
|
28
|
+
cached: CellValue;
|
|
29
|
+
}
|
|
30
|
+
/** The formula table: one entry per formula cell, reused through a free list. */
|
|
31
|
+
export declare class FormulaTable {
|
|
32
|
+
#private;
|
|
33
|
+
add(entry: FormulaEntry): number;
|
|
34
|
+
get(i: number): FormulaEntry;
|
|
35
|
+
remove(i: number): void;
|
|
36
|
+
get size(): number;
|
|
37
|
+
}
|
|
38
|
+
export interface Pools {
|
|
39
|
+
readonly strings: StringPool;
|
|
40
|
+
readonly formulas: FormulaTable;
|
|
41
|
+
}
|
|
42
|
+
export declare class SheetCells {
|
|
43
|
+
#private;
|
|
44
|
+
constructor(pools: Pools);
|
|
45
|
+
/** How many cells hold a value or a style. */
|
|
46
|
+
get filled(): number;
|
|
47
|
+
/** How many chunks are allocated, for `stats()`. */
|
|
48
|
+
get chunkCount(): number;
|
|
49
|
+
/** The columns holding anything, in no order. */
|
|
50
|
+
columnIndexes(): IterableIterator<number>;
|
|
51
|
+
/** The content of a cell, or `null` when it holds neither a value nor a style. */
|
|
52
|
+
get(row: number, col: number): CellContent | null;
|
|
53
|
+
/** The number in a cell when it holds a literal number, else `undefined`. The aggregate path. */
|
|
54
|
+
numberAt(row: number, col: number): number | undefined;
|
|
55
|
+
/** Write a cell; `null` empties it (value and style). */
|
|
56
|
+
set(row: number, col: number, content: CellContent | null): void;
|
|
57
|
+
/** Every populated cell of a zone, column by column, rows ascending. */
|
|
58
|
+
entries(zone?: Zone): IterableIterator<[row: number, col: number, content: CellContent]>;
|
|
59
|
+
/** The last row holding anything in a column, or -1. */
|
|
60
|
+
lastRowIn(col: number): number;
|
|
61
|
+
/** Whether a zone holds anything. */
|
|
62
|
+
isEmpty(zone: Zone): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Move rows: `n > 0` inserts `n` empty rows at `at` (rows at the end fall off
|
|
65
|
+
* `limit`); `n < 0` deletes `-n` rows from `at`. Only columns holding data are touched.
|
|
66
|
+
*/
|
|
67
|
+
shiftRows(at: number, n: number, limit: number): void;
|
|
68
|
+
/** Move columns: `n > 0` inserts at `at`, `n < 0` deletes `-n` from `at`. */
|
|
69
|
+
shiftCols(at: number, n: number, limit: number): void;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=cells.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cells.d.ts","sourceRoot":"","sources":["../../src/core/cells.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,KAAK,SAAS,EAAuC,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,eAAO,MAAM,KAAK,OAAO,CAAC;AAa1B,yGAAyG;AACzG,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,iFAAiF;AACjF,qBAAa,YAAY;;IAIvB,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAMhC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAM5B,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAMvB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAeD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED,qBAAa,UAAU;;gBAKT,KAAK,EAAE,KAAK;IAIxB,8CAA8C;IAC9C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,oDAAoD;IACpD,IAAI,UAAU,IAAI,MAAM,CAIvB;IAED,iDAAiD;IACjD,aAAa,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIzC,kFAAkF;IAClF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAQjD,iGAAiG;IACjG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOtD,yDAAyD;IACzD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IA2BhE,wEAAwE;IACvE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,gBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAoBzF,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAW9B,qCAAqC;IACrC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAK5B;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAqBrD,6EAA6E;IAC7E,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAyFtD"}
|