@datalayer/cells 0.0.1 → 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.
Files changed (45) hide show
  1. package/lib/core/axis.d.ts +6 -0
  2. package/lib/core/axis.d.ts.map +1 -1
  3. package/lib/core/axis.js +46 -7
  4. package/lib/core/axis.js.map +1 -1
  5. package/lib/core/commands.d.ts +157 -0
  6. package/lib/core/commands.d.ts.map +1 -0
  7. package/lib/core/commands.js +620 -0
  8. package/lib/core/commands.js.map +1 -0
  9. package/lib/core/format.d.ts +52 -0
  10. package/lib/core/format.d.ts.map +1 -0
  11. package/lib/core/format.js +264 -0
  12. package/lib/core/format.js.map +1 -0
  13. package/lib/core/history.d.ts +42 -0
  14. package/lib/core/history.d.ts.map +1 -0
  15. package/lib/core/history.js +63 -0
  16. package/lib/core/history.js.map +1 -0
  17. package/lib/core/index.d.ts +17 -2
  18. package/lib/core/index.d.ts.map +1 -1
  19. package/lib/core/index.js +22 -1
  20. package/lib/core/index.js.map +1 -1
  21. package/lib/core/model.d.ts +116 -0
  22. package/lib/core/model.d.ts.map +1 -0
  23. package/lib/core/model.js +330 -0
  24. package/lib/core/model.js.map +1 -0
  25. package/lib/core/patches.d.ts +140 -0
  26. package/lib/core/patches.d.ts.map +1 -0
  27. package/lib/core/patches.js +272 -0
  28. package/lib/core/patches.js.map +1 -0
  29. package/lib/core/reactor.d.ts +24 -0
  30. package/lib/core/reactor.d.ts.map +1 -0
  31. package/lib/core/reactor.js +48 -0
  32. package/lib/core/reactor.js.map +1 -0
  33. package/lib/core/selection.d.ts +81 -0
  34. package/lib/core/selection.d.ts.map +1 -0
  35. package/lib/core/selection.js +175 -0
  36. package/lib/core/selection.js.map +1 -0
  37. package/lib/core/workbook.d.ts +59 -0
  38. package/lib/core/workbook.d.ts.map +1 -0
  39. package/lib/core/workbook.js +101 -0
  40. package/lib/core/workbook.js.map +1 -0
  41. package/lib/points/index.d.ts +154 -0
  42. package/lib/points/index.d.ts.map +1 -0
  43. package/lib/points/index.js +50 -0
  44. package/lib/points/index.js.map +1 -0
  45. package/package.json +2 -1
@@ -0,0 +1,272 @@
1
+ /*
2
+ * Copyright (c) 2022-2026 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ // ------------------------------------------------------------------ snapshots
7
+ export const EMPTY_SNAPSHOT = {
8
+ rows: new Int32Array(0),
9
+ cols: new Int32Array(0),
10
+ values: [],
11
+ formulas: [],
12
+ styles: new Uint16Array(0),
13
+ };
14
+ /** The populated cells of a zone. */
15
+ export function snapshot(sheet, zone) {
16
+ const rows = [];
17
+ const cols = [];
18
+ const values = [];
19
+ const formulas = [];
20
+ const styles = [];
21
+ for (const [row, col, c] of sheet.cells.entries(zone)) {
22
+ rows.push(row);
23
+ cols.push(col);
24
+ values.push(c.value);
25
+ formulas.push(c.formula);
26
+ styles.push(c.style);
27
+ }
28
+ return {
29
+ rows: Int32Array.from(rows),
30
+ cols: Int32Array.from(cols),
31
+ values,
32
+ formulas,
33
+ styles: Uint16Array.from(styles),
34
+ };
35
+ }
36
+ /** A snapshot from contents listed by position. */
37
+ export function snapshotOf(cells) {
38
+ return {
39
+ rows: Int32Array.from(cells, (c) => c[0]),
40
+ cols: Int32Array.from(cells, (c) => c[1]),
41
+ values: cells.map((c) => c[2].value),
42
+ formulas: cells.map((c) => c[2].formula),
43
+ styles: Uint16Array.from(cells, (c) => c[2].style),
44
+ };
45
+ }
46
+ export function snapshotEntries(s) {
47
+ const out = [];
48
+ for (let i = 0; i < s.rows.length; i += 1) {
49
+ const formula = s.formulas[i];
50
+ out.push([
51
+ s.rows[i],
52
+ s.cols[i],
53
+ formula === undefined
54
+ ? { value: s.values[i], style: s.styles[i] }
55
+ : { value: s.values[i], formula, style: s.styles[i] },
56
+ ]);
57
+ }
58
+ return out;
59
+ }
60
+ function snapshotBytes(s) {
61
+ let bytes = 64 + s.rows.length * 26;
62
+ for (const v of s.values)
63
+ if (typeof v === 'string')
64
+ bytes += v.length * 2;
65
+ for (const f of s.formulas)
66
+ if (f !== undefined)
67
+ bytes += f.length * 2;
68
+ return bytes;
69
+ }
70
+ function segmentBytes(s) {
71
+ return 64 + s.ids.byteLength + (s.sizes?.byteLength ?? 0) + (s.hidden?.byteLength ?? 0);
72
+ }
73
+ // ------------------------------------------------------------------ the core ops
74
+ const axisOf = (sheet, axis) => (axis === 'rows' ? sheet.rows : sheet.cols);
75
+ const segmentOf = (ids) => ({
76
+ ids: Int32Array.from(ids),
77
+ sizes: null,
78
+ hidden: null,
79
+ });
80
+ const cellsOp = {
81
+ op: 'cells',
82
+ apply(wb, p) {
83
+ const sheet = wb.sheet(p.sheet);
84
+ for (const [row, col] of [...sheet.cells.entries(p.zone)])
85
+ sheet.cells.set(row, col, null);
86
+ for (const [row, col, content] of snapshotEntries(p.after)) {
87
+ if (row < p.zone.top || row > p.zone.bottom || col < p.zone.left || col > p.zone.right) {
88
+ throw new Error(`A cells patch writes ${row},${col} outside its zone.`);
89
+ }
90
+ sheet.cells.set(row, col, content);
91
+ }
92
+ },
93
+ invert: (p) => ({ ...p, before: p.after, after: p.before }),
94
+ example: () => ({
95
+ op: 'cells',
96
+ sheet: 's1',
97
+ zone: { top: 0, left: 0, bottom: 1, right: 1 },
98
+ before: EMPTY_SNAPSHOT,
99
+ after: snapshotOf([[1, 1, { value: 42, style: 0 }]]),
100
+ }),
101
+ bytes: (p) => snapshotBytes(p.before) + snapshotBytes(p.after),
102
+ };
103
+ function shiftContent(sheet, axis, at, n) {
104
+ if (axis === 'rows')
105
+ sheet.cells.shiftRows(at, n, sheet.rows.count);
106
+ else
107
+ sheet.cells.shiftCols(at, n, sheet.cols.count);
108
+ }
109
+ const axisInsertOp = {
110
+ op: 'axis-insert',
111
+ apply(wb, p) {
112
+ const sheet = wb.sheet(p.sheet);
113
+ axisOf(sheet, p.axis).insert(p.at, p.n, p.inserted);
114
+ shiftContent(sheet, p.axis, p.at, p.n);
115
+ },
116
+ invert: (p) => ({
117
+ op: 'axis-delete',
118
+ sheet: p.sheet,
119
+ axis: p.axis,
120
+ at: p.at,
121
+ n: p.n,
122
+ removed: p.inserted,
123
+ tail: p.dropped,
124
+ }),
125
+ example: (wb) => {
126
+ const count = wb.sheet('s1').rows.count;
127
+ return {
128
+ op: 'axis-insert',
129
+ sheet: 's1',
130
+ axis: 'rows',
131
+ at: 2,
132
+ n: 2,
133
+ inserted: segmentOf([1 << 30, (1 << 30) + 1]),
134
+ dropped: segmentOf([count - 2, count - 1]),
135
+ };
136
+ },
137
+ bytes: (p) => segmentBytes(p.inserted) + (p.dropped ? segmentBytes(p.dropped) : 0),
138
+ };
139
+ const axisDeleteOp = {
140
+ op: 'axis-delete',
141
+ apply(wb, p) {
142
+ const sheet = wb.sheet(p.sheet);
143
+ axisOf(sheet, p.axis).delete(p.at, p.n, p.tail);
144
+ shiftContent(sheet, p.axis, p.at, -p.n);
145
+ },
146
+ invert: (p) => ({
147
+ op: 'axis-insert',
148
+ sheet: p.sheet,
149
+ axis: p.axis,
150
+ at: p.at,
151
+ n: p.n,
152
+ inserted: p.removed,
153
+ dropped: p.tail,
154
+ }),
155
+ example: (wb) => {
156
+ return {
157
+ op: 'axis-delete',
158
+ sheet: 's1',
159
+ axis: 'rows',
160
+ at: 1,
161
+ n: 1,
162
+ removed: segmentOf([1]),
163
+ };
164
+ },
165
+ bytes: (p) => segmentBytes(p.removed) + (p.tail ? segmentBytes(p.tail) : 0),
166
+ };
167
+ const axisMoveOp = {
168
+ op: 'axis-move',
169
+ apply(wb, p) {
170
+ axisOf(wb.sheet(p.sheet), p.axis).move(p.at, p.n, p.to);
171
+ },
172
+ invert: (p) => p.to < p.at ? { ...p, at: p.to, to: p.at + p.n } : { ...p, at: p.to - p.n, to: p.at },
173
+ example: () => ({ op: 'axis-move', sheet: 's1', axis: 'cols', at: 1, n: 2, to: 6 }),
174
+ };
175
+ const axisSizesOp = {
176
+ op: 'axis-sizes',
177
+ apply(wb, p) {
178
+ axisOf(wb.sheet(p.sheet), p.axis).setSegmentSizes(p.at, p.after.sizes, p.after.hidden, p.n);
179
+ },
180
+ invert: (p) => ({ ...p, before: p.after, after: p.before }),
181
+ example: () => ({
182
+ op: 'axis-sizes',
183
+ sheet: 's1',
184
+ axis: 'cols',
185
+ at: 3,
186
+ n: 2,
187
+ before: { sizes: null, hidden: null },
188
+ after: { sizes: Float64Array.of(40, 50), hidden: Uint8Array.of(0, 1) },
189
+ }),
190
+ };
191
+ const mergesOp = {
192
+ op: 'merges',
193
+ apply(wb, p) {
194
+ wb.sheet(p.sheet).merges = p.after.map((z) => ({ ...z }));
195
+ },
196
+ invert: (p) => ({ ...p, before: p.after, after: p.before }),
197
+ example: () => ({
198
+ op: 'merges',
199
+ sheet: 's1',
200
+ before: [],
201
+ after: [{ top: 0, left: 0, bottom: 1, right: 2 }],
202
+ }),
203
+ };
204
+ const sheetAddOp = {
205
+ op: 'sheet-add',
206
+ apply(wb, p) {
207
+ if (wb.hasSheet(p.sheet.id))
208
+ throw new Error(`Sheet '${p.sheet.id}' is in the workbook already.`);
209
+ if (p.index < 0 || p.index > wb.sheets.length)
210
+ throw new Error(`No sheet position ${p.index}.`);
211
+ wb.sheets.splice(p.index, 0, p.sheet);
212
+ },
213
+ invert: (p) => ({ op: 'sheet-delete', index: p.index, sheet: p.sheet }),
214
+ example: (wb) => ({ op: 'sheet-add', index: 1, sheet: wb.createSheet('Example', 'example') }),
215
+ };
216
+ const sheetDeleteOp = {
217
+ op: 'sheet-delete',
218
+ apply(wb, p) {
219
+ if (wb.sheets[p.index] !== p.sheet)
220
+ throw new Error(`Sheet '${p.sheet.id}' is not at position ${p.index}.`);
221
+ wb.sheets.splice(p.index, 1);
222
+ },
223
+ invert: (p) => ({ op: 'sheet-add', index: p.index, sheet: p.sheet }),
224
+ example: (wb) => ({ op: 'sheet-delete', index: 0, sheet: wb.sheet('s1') }),
225
+ };
226
+ const sheetRenameOp = {
227
+ op: 'sheet-rename',
228
+ apply(wb, p) {
229
+ wb.sheet(p.sheet).name = p.after;
230
+ },
231
+ invert: (p) => ({ ...p, before: p.after, after: p.before }),
232
+ example: () => ({ op: 'sheet-rename', sheet: 's1', before: 'Sheet1', after: 'Budget' }),
233
+ };
234
+ const sheetMoveOp = {
235
+ op: 'sheet-move',
236
+ apply(wb, p) {
237
+ const [sheet] = wb.sheets.splice(p.from, 1);
238
+ if (sheet === undefined)
239
+ throw new Error(`No sheet at position ${p.from}.`);
240
+ wb.sheets.splice(p.to, 0, sheet);
241
+ },
242
+ invert: (p) => ({ ...p, from: p.to, to: p.from }),
243
+ example: () => ({ op: 'sheet-move', from: 0, to: 0 }),
244
+ };
245
+ const frozenOp = {
246
+ op: 'frozen',
247
+ apply(wb, p) {
248
+ wb.sheet(p.sheet).frozen = { ...p.after };
249
+ },
250
+ invert: (p) => ({ ...p, before: p.after, after: p.before }),
251
+ example: () => ({
252
+ op: 'frozen',
253
+ sheet: 's1',
254
+ before: { rows: 0, cols: 0 },
255
+ after: { rows: 1, cols: 2 },
256
+ }),
257
+ };
258
+ /** The core patch ops, contributed by `CellsCorePlugin`. */
259
+ export const CORE_PATCH_OPS = [
260
+ cellsOp,
261
+ axisInsertOp,
262
+ axisDeleteOp,
263
+ axisMoveOp,
264
+ axisSizesOp,
265
+ mergesOp,
266
+ sheetAddOp,
267
+ sheetDeleteOp,
268
+ sheetRenameOp,
269
+ sheetMoveOp,
270
+ frozenOp,
271
+ ];
272
+ //# sourceMappingURL=patches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patches.js","sourceRoot":"","sources":["../../src/core/patches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Cells on Reactor: the core plugin, which opens every `datalayer.cells.*`
3
+ * point and contributes the core patch ops and commands through them, and
4
+ * the builder of a platform for hosts that run no Reactor of their own.
5
+ *
6
+ * @module core/reactor
7
+ */
8
+ import { type PlatformInput, type ReactorPlatform } from '@datalayer/reactor';
9
+ export declare const CELLS_CORE_PLUGIN = "@datalayer/cells-core";
10
+ /**
11
+ * The core plugin. Every grid needs it: it declares the points, and its
12
+ * contributions are the core's own patch ops and commands, at `order: 100`
13
+ * so a plugin may place its own before or after them.
14
+ */
15
+ export declare const CellsCorePlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, unknown>;
16
+ /** The built-in plugins a grid gets by default, besides the core. More arrive with each feature. */
17
+ export declare function cellsBuiltins(): PlatformInput[];
18
+ /**
19
+ * A started Reactor platform holding the core, the built-ins and `plugins`.
20
+ * A host already running Reactor passes its own platform to the model instead,
21
+ * with `CellsCorePlugin` among its plugins.
22
+ */
23
+ export declare function buildCellsReactor(plugins?: readonly PlatformInput[]): ReactorPlatform;
24
+ //# sourceMappingURL=reactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/core/reactor.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAK5B,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,eAAe,qFAY1B,CAAC;AAEH,oGAAoG;AACpG,wBAAgB,aAAa,IAAI,aAAa,EAAE,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,SAAS,aAAa,EAAO,GAAG,eAAe,CAIzF"}
@@ -0,0 +1,48 @@
1
+ /*
2
+ * Copyright (c) 2022-2026 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ /**
7
+ * Cells on Reactor: the core plugin, which opens every `datalayer.cells.*`
8
+ * point and contributes the core patch ops and commands through them, and
9
+ * the builder of a platform for hosts that run no Reactor of their own.
10
+ *
11
+ * @module core/reactor
12
+ */
13
+ import { buildReactorFromPlugins, contribution, definePlugin, } from '@datalayer/reactor';
14
+ import { CELLS_POINTS, CellsCommands, CellsPatchOps } from '../points/index.js';
15
+ import { CORE_COMMANDS } from './commands.js';
16
+ import { CORE_PATCH_OPS } from './patches.js';
17
+ export const CELLS_CORE_PLUGIN = '@datalayer/cells-core';
18
+ /**
19
+ * The core plugin. Every grid needs it: it declares the points, and its
20
+ * contributions are the core's own patch ops and commands, at `order: 100`
21
+ * so a plugin may place its own before or after them.
22
+ */
23
+ export const CellsCorePlugin = definePlugin({
24
+ name: CELLS_CORE_PLUGIN,
25
+ displayName: 'Cells',
26
+ description: 'The spreadsheet core: its contribution points, patch ops and commands.',
27
+ octicon: 'table',
28
+ contributionPoints: [...CELLS_POINTS],
29
+ contributes: [
30
+ ...CORE_PATCH_OPS.map((op) => contribution(CellsPatchOps, op, { id: op.op, order: 100 })),
31
+ ...CORE_COMMANDS.map((handler) => contribution(CellsCommands, handler, { id: handler.type, order: 100 })),
32
+ ],
33
+ });
34
+ /** The built-in plugins a grid gets by default, besides the core. More arrive with each feature. */
35
+ export function cellsBuiltins() {
36
+ return [];
37
+ }
38
+ /**
39
+ * A started Reactor platform holding the core, the built-ins and `plugins`.
40
+ * A host already running Reactor passes its own platform to the model instead,
41
+ * with `CellsCorePlugin` among its plugins.
42
+ */
43
+ export function buildCellsReactor(plugins = []) {
44
+ const reactor = buildReactorFromPlugins([CellsCorePlugin, ...cellsBuiltins(), ...plugins]);
45
+ reactor.start();
46
+ return reactor;
47
+ }
48
+ //# sourceMappingURL=reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../src/core/reactor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AAEH,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;IAC1C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,wEAAwE;IACrF,OAAO,EAAE,OAAO;IAChB,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;IACrC,WAAW,EAAE;QACX,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACzF,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CACvE;KACF;CACF,CAAC,CAAC;AAEH,oGAAoG;AACpG,MAAM,UAAU,aAAa;IAC3B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAoC,EAAE;IACtE,MAAM,OAAO,GAAG,uBAAuB,CAAC,CAAC,eAAe,EAAE,GAAG,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * The selection: view state (never undone, never synced), and the keyboard's
3
+ * movement semantics as pure functions, after Excel and Sheets. The model
4
+ * holds the current selection and streams its changes; the grid, the editor,
5
+ * the name box and plugins observe that one stream.
6
+ *
7
+ * @module core/selection
8
+ */
9
+ import { type Position, type Zone } from './zone.js';
10
+ export interface SelectionState {
11
+ readonly sheet: string;
12
+ /** At least one; the last is the one being edited by Shift+arrows. */
13
+ readonly zones: readonly Zone[];
14
+ /** The fixed corner of the last zone. */
15
+ readonly anchor: Position;
16
+ /** The active cell: where typing goes. Inside the last zone. */
17
+ readonly active: Position;
18
+ }
19
+ /** What navigation needs to know of a sheet. */
20
+ export interface NavigationGrid {
21
+ readonly rows: number;
22
+ readonly cols: number;
23
+ /** Whether a cell holds a value (for Ctrl+arrows' data edges). */
24
+ has(row: number, col: number): boolean;
25
+ /** The last row and column holding data (Ctrl+End). */
26
+ lastUsed(): Position;
27
+ }
28
+ export type Direction = 'up' | 'down' | 'left' | 'right';
29
+ export type Navigation = {
30
+ readonly type: 'move';
31
+ readonly dir: Direction;
32
+ readonly jump?: boolean;
33
+ readonly extend?: boolean;
34
+ }
35
+ /** Enter (by: 'col', down) and Tab (by: 'row', right); Shift reverses. Cycles inside a multi-cell selection. */
36
+ | {
37
+ readonly type: 'cycle';
38
+ readonly by: 'row' | 'col';
39
+ readonly reverse?: boolean;
40
+ }
41
+ /** Home, Ctrl+Home. */
42
+ | {
43
+ readonly type: 'home';
44
+ readonly ctrl?: boolean;
45
+ readonly extend?: boolean;
46
+ }
47
+ /** Ctrl+End. */
48
+ | {
49
+ readonly type: 'end';
50
+ readonly extend?: boolean;
51
+ } | {
52
+ readonly type: 'page';
53
+ readonly dir: 'up' | 'down';
54
+ readonly rows: number;
55
+ readonly extend?: boolean;
56
+ }
57
+ /** Ctrl+Space. */
58
+ | {
59
+ readonly type: 'selectColumns';
60
+ }
61
+ /** Shift+Space. */
62
+ | {
63
+ readonly type: 'selectRows';
64
+ }
65
+ /** Ctrl+A. */
66
+ | {
67
+ readonly type: 'selectAll';
68
+ };
69
+ export declare function initialSelection(sheet: string, at?: Position): SelectionState;
70
+ /** A single-cell selection at `at`, or the last zone extended to it. */
71
+ export declare function selectCell(s: SelectionState, at: Position, extend?: boolean): SelectionState;
72
+ /** Add a zone (Ctrl+click), making its corner the anchor and active cell. */
73
+ export declare function addZone(s: SelectionState, zone: Zone): SelectionState;
74
+ /**
75
+ * Ctrl+arrow from `p`: through a run of filled cells to its last one; from an
76
+ * empty cell, or from the end of a run, to the next filled cell; to the edge
77
+ * when there is none.
78
+ */
79
+ export declare function dataEdge(p: Position, dir: Direction, g: NavigationGrid): Position;
80
+ export declare function navigate(s: SelectionState, nav: Navigation, g: NavigationGrid): SelectionState;
81
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../src/core/selection.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAwB,MAAM,WAAW,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC3B;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,uDAAuD;IACvD,QAAQ,IAAI,QAAQ,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AACH,gHAAgH;GAC9G;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AACpF,uBAAuB;GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;AAC/E,gBAAgB;GACd;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACnD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AACH,kBAAkB;GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AACpC,mBAAmB;GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE;AACjC,cAAc;GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAE,QAA6B,GAAG,cAAc,CAEjG;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,UAAQ,GAAG,cAAc,CAG1F;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,GAAG,cAAc,CAGrE;AAoBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,GAAG,QAAQ,CAWjF;AAeD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,cAAc,GAAG,cAAc,CAoD9F"}
@@ -0,0 +1,175 @@
1
+ /*
2
+ * Copyright (c) 2022-2026 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ /**
7
+ * The selection: view state (never undone, never synced), and the keyboard's
8
+ * movement semantics as pure functions, after Excel and Sheets. The model
9
+ * holds the current selection and streams its changes; the grid, the editor,
10
+ * the name box and plugins observe that one stream.
11
+ *
12
+ * @module core/selection
13
+ */
14
+ import { zoneContains, zoneOf } from './zone.js';
15
+ export function initialSelection(sheet, at = { row: 0, col: 0 }) {
16
+ return { sheet, zones: [zoneOf(at)], anchor: at, active: at };
17
+ }
18
+ /** A single-cell selection at `at`, or the last zone extended to it. */
19
+ export function selectCell(s, at, extend = false) {
20
+ if (!extend)
21
+ return initialSelection(s.sheet, at);
22
+ return { ...s, zones: [...s.zones.slice(0, -1), zoneOf(s.anchor, at)] };
23
+ }
24
+ /** Add a zone (Ctrl+click), making its corner the anchor and active cell. */
25
+ export function addZone(s, zone) {
26
+ const at = { row: zone.top, col: zone.left };
27
+ return { ...s, zones: [...s.zones, zone], anchor: at, active: at };
28
+ }
29
+ const STEP = {
30
+ up: [-1, 0],
31
+ down: [1, 0],
32
+ left: [0, -1],
33
+ right: [0, 1],
34
+ };
35
+ function clamp(p, g) {
36
+ return {
37
+ row: Math.min(Math.max(p.row, 0), g.rows - 1),
38
+ col: Math.min(Math.max(p.col, 0), g.cols - 1),
39
+ };
40
+ }
41
+ function inside(p, g) {
42
+ return p.row >= 0 && p.col >= 0 && p.row < g.rows && p.col < g.cols;
43
+ }
44
+ /**
45
+ * Ctrl+arrow from `p`: through a run of filled cells to its last one; from an
46
+ * empty cell, or from the end of a run, to the next filled cell; to the edge
47
+ * when there is none.
48
+ */
49
+ export function dataEdge(p, dir, g) {
50
+ const [dr, dc] = STEP[dir];
51
+ const next = (q) => ({ row: q.row + dr, col: q.col + dc });
52
+ let q = next(p);
53
+ if (!inside(q, g))
54
+ return p;
55
+ if (g.has(p.row, p.col) && g.has(q.row, q.col)) {
56
+ while (inside(next(q), g) && g.has(next(q).row, next(q).col))
57
+ q = next(q);
58
+ return q;
59
+ }
60
+ while (!g.has(q.row, q.col) && inside(next(q), g))
61
+ q = next(q);
62
+ return q;
63
+ }
64
+ /** The corner of the last zone opposite the anchor: what Shift+arrows move. */
65
+ function movingCorner(s) {
66
+ const z = s.zones[s.zones.length - 1];
67
+ return {
68
+ row: s.anchor.row === z.top ? z.bottom : z.top,
69
+ col: s.anchor.col === z.left ? z.right : z.left,
70
+ };
71
+ }
72
+ function extendTo(s, corner) {
73
+ return { ...s, zones: [...s.zones.slice(0, -1), zoneOf(s.anchor, corner)] };
74
+ }
75
+ export function navigate(s, nav, g) {
76
+ switch (nav.type) {
77
+ case 'move': {
78
+ const from = nav.extend ? movingCorner(s) : s.active;
79
+ const [dr, dc] = STEP[nav.dir];
80
+ const to = nav.jump
81
+ ? dataEdge(from, nav.dir, g)
82
+ : clamp({ row: from.row + dr, col: from.col + dc }, g);
83
+ return nav.extend ? extendTo(s, to) : initialSelection(s.sheet, to);
84
+ }
85
+ case 'cycle':
86
+ return cycle(s, nav.by, nav.reverse ?? false, g);
87
+ case 'home': {
88
+ const corner = nav.extend ? movingCorner(s) : s.active;
89
+ const to = nav.ctrl ? { row: 0, col: 0 } : { row: corner.row, col: 0 };
90
+ return nav.extend ? extendTo(s, to) : initialSelection(s.sheet, to);
91
+ }
92
+ case 'end': {
93
+ const to = g.lastUsed();
94
+ return nav.extend ? extendTo(s, to) : initialSelection(s.sheet, to);
95
+ }
96
+ case 'page': {
97
+ const corner = nav.extend ? movingCorner(s) : s.active;
98
+ const to = clamp({ row: corner.row + (nav.dir === 'down' ? nav.rows : -nav.rows), col: corner.col }, g);
99
+ return nav.extend ? extendTo(s, to) : initialSelection(s.sheet, to);
100
+ }
101
+ case 'selectColumns': {
102
+ const z = s.zones[s.zones.length - 1];
103
+ return {
104
+ ...s,
105
+ zones: [
106
+ ...s.zones.slice(0, -1),
107
+ { top: 0, bottom: g.rows - 1, left: z.left, right: z.right },
108
+ ],
109
+ };
110
+ }
111
+ case 'selectRows': {
112
+ const z = s.zones[s.zones.length - 1];
113
+ return {
114
+ ...s,
115
+ zones: [
116
+ ...s.zones.slice(0, -1),
117
+ { top: z.top, bottom: z.bottom, left: 0, right: g.cols - 1 },
118
+ ],
119
+ };
120
+ }
121
+ case 'selectAll':
122
+ return { ...s, zones: [{ top: 0, left: 0, bottom: g.rows - 1, right: g.cols - 1 }] };
123
+ }
124
+ }
125
+ /**
126
+ * Enter and Tab. With one cell selected, the active cell moves (down, or
127
+ * right) and the selection follows. With a range, the active cell cycles
128
+ * inside the zones and the selection stays: Enter goes down a column then to
129
+ * the top of the next, Tab along a row then to the start of the next, and
130
+ * from the last cell of a zone to the first of the next zone.
131
+ */
132
+ function cycle(s, by, reverse, g) {
133
+ const single = s.zones.length === 1 &&
134
+ s.zones[0].top === s.zones[0].bottom &&
135
+ s.zones[0].left === s.zones[0].right;
136
+ if (single) {
137
+ const dir = by === 'col' ? (reverse ? 'up' : 'down') : reverse ? 'left' : 'right';
138
+ const [dr, dc] = STEP[dir];
139
+ return initialSelection(s.sheet, clamp({ row: s.active.row + dr, col: s.active.col + dc }, g));
140
+ }
141
+ let zi = s.zones.findIndex((z) => zoneContains(z, s.active));
142
+ if (zi < 0)
143
+ zi = s.zones.length - 1;
144
+ const z = s.zones[zi];
145
+ let { row, col } = s.active;
146
+ const step = reverse ? -1 : 1;
147
+ const nextZone = () => {
148
+ zi = (zi + step + s.zones.length) % s.zones.length;
149
+ const n = s.zones[zi];
150
+ return reverse ? { row: n.bottom, col: n.right } : { row: n.top, col: n.left };
151
+ };
152
+ let to;
153
+ if (by === 'col') {
154
+ row += step;
155
+ if (row > z.bottom || row < z.top) {
156
+ col += step;
157
+ row = reverse ? z.bottom : z.top;
158
+ to = col > z.right || col < z.left ? nextZone() : { row, col };
159
+ }
160
+ else
161
+ to = { row, col };
162
+ }
163
+ else {
164
+ col += step;
165
+ if (col > z.right || col < z.left) {
166
+ row += step;
167
+ col = reverse ? z.right : z.left;
168
+ to = row > z.bottom || row < z.top ? nextZone() : { row, col };
169
+ }
170
+ else
171
+ to = { row, col };
172
+ }
173
+ return { ...s, active: to };
174
+ }
175
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/core/selection.ts"],"names":[],"mappings":"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"}