@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.3e2eaca
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/lib/browser/{SheetContainer-R65IDJHN.mjs → SheetContainer-P3NF5KEI.mjs} +49 -43
- package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-4LKIURJA.mjs} +283 -84
- package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
- package/dist/lib/browser/{chunk-5KVQ5IPW.mjs → chunk-BVUN7SHF.mjs} +4 -2
- package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
- package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-KCYJSOFB.mjs → chunk-VMSX6Z4X.mjs} +51 -17
- package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
- package/dist/lib/browser/{compute-graph-SJT67236.mjs → compute-graph-GGWUX644.mjs} +4 -4
- package/dist/lib/browser/index.mjs +38 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{SheetContainer-6BO4C5X2.cjs → SheetContainer-MPFKXY26.cjs} +67 -62
- package/dist/lib/node/SheetContainer-MPFKXY26.cjs.map +7 -0
- package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
- package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
- package/dist/lib/node/{chunk-2XJ5I4UF.cjs → chunk-AWKOWDMI.cjs} +8 -6
- package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
- package/dist/lib/node/{chunk-JF5XNTF3.cjs → chunk-O7XR4R7Y.cjs} +61 -26
- package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
- package/dist/lib/node/{chunk-DEPJHN47.cjs → chunk-OO24XJBV.cjs} +318 -120
- package/dist/lib/node/chunk-OO24XJBV.cjs.map +7 -0
- package/dist/lib/node/{compute-graph-AQBDL7HO.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
- package/dist/lib/node/{compute-graph-AQBDL7HO.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +66 -38
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +7 -7
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-MJXC5E3P.mjs → SheetContainer-22IOAW3B.mjs} +49 -43
- package/dist/lib/node-esm/SheetContainer-22IOAW3B.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-25V7WY4R.mjs → chunk-BW36PM2Y.mjs} +283 -84
- package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XBEHKYO7.mjs → chunk-CR4K75EL.mjs} +51 -17
- package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5TXLF6PL.mjs → chunk-UIBWRHW7.mjs} +4 -2
- package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
- package/dist/lib/node-esm/index.mjs +38 -10
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/meta.mjs +1 -1
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts +1 -0
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +5 -2
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
- package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
- package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
- package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
- package/dist/types/src/defs/sheet-range-types.d.ts +1 -1
- package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
- package/dist/types/src/defs/util.d.ts +1 -1
- package/dist/types/src/defs/util.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +12 -5
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +10 -5
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +33 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +37 -36
- package/src/SheetPlugin.tsx +20 -0
- package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
- package/src/components/GridSheet/GridSheet.tsx +102 -38
- package/src/components/GridSheet/util.ts +19 -9
- package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
- package/src/components/SheetContainer/SheetContainer.tsx +9 -8
- package/src/components/Toolbar/Toolbar.tsx +62 -53
- package/src/compute-graph/compute-graph.ts +22 -7
- package/src/compute-graph/functions/async-function.ts +1 -0
- package/src/compute-graph/functions/edge-function.ts +5 -3
- package/src/defs/sheet-range-types.ts +4 -2
- package/src/defs/util.ts +1 -0
- package/src/meta.ts +1 -0
- package/src/model/sheet-model.test.ts +5 -3
- package/src/model/sheet-model.ts +93 -21
- package/src/translations.ts +10 -5
- package/src/types.ts +20 -0
- package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +0 -7
- package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +0 -7
- package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +0 -7
- package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +0 -7
- package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +0 -7
- package/dist/lib/node/chunk-DEPJHN47.cjs.map +0 -7
- package/dist/lib/node/chunk-JF5XNTF3.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +0 -7
- /package/dist/lib/browser/{compute-graph-SJT67236.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
|
@@ -18,13 +18,14 @@ import {
|
|
|
18
18
|
isFormula,
|
|
19
19
|
rangeFromIndex,
|
|
20
20
|
rangeToA1Notation
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-CR4K75EL.mjs";
|
|
22
22
|
import {
|
|
23
|
-
Range
|
|
24
|
-
|
|
23
|
+
Range,
|
|
24
|
+
SheetAction
|
|
25
|
+
} from "./chunk-UIBWRHW7.mjs";
|
|
25
26
|
import {
|
|
26
27
|
SHEET_PLUGIN
|
|
27
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-BM2Q3FFC.mjs";
|
|
28
29
|
|
|
29
30
|
// packages/plugins/plugin-sheet/src/components/ComputeGraph/ComputeGraphContextProvider.tsx
|
|
30
31
|
import React, { createContext, useContext } from "react";
|
|
@@ -284,21 +285,39 @@ import { Grid, useGridContext } from "@dxos/react-ui-grid";
|
|
|
284
285
|
// packages/plugins/plugin-sheet/src/model/sheet-model.ts
|
|
285
286
|
import { Event } from "@dxos/async";
|
|
286
287
|
import { Resource } from "@dxos/context";
|
|
287
|
-
import { getTypename } from "@dxos/echo-schema";
|
|
288
|
+
import { getTypename, FormatEnum, TypeEnum } from "@dxos/echo-schema";
|
|
288
289
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
289
290
|
import { PublicKey } from "@dxos/keys";
|
|
290
291
|
import { log } from "@dxos/log";
|
|
291
|
-
import { FieldValueType } from "@dxos/schema";
|
|
292
292
|
import { DetailedCellError, ExportedCellChange } from "#hyperformula";
|
|
293
293
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/model/sheet-model.ts";
|
|
294
294
|
var typeMap = {
|
|
295
|
-
BOOLEAN:
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
295
|
+
BOOLEAN: {
|
|
296
|
+
type: TypeEnum.Boolean
|
|
297
|
+
},
|
|
298
|
+
NUMBER_RAW: {
|
|
299
|
+
type: TypeEnum.Number
|
|
300
|
+
},
|
|
301
|
+
NUMBER_PERCENT: {
|
|
302
|
+
type: TypeEnum.Number,
|
|
303
|
+
format: FormatEnum.Percent
|
|
304
|
+
},
|
|
305
|
+
NUMBER_CURRENCY: {
|
|
306
|
+
type: TypeEnum.Number,
|
|
307
|
+
format: FormatEnum.Currency
|
|
308
|
+
},
|
|
309
|
+
NUMBER_DATETIME: {
|
|
310
|
+
type: TypeEnum.String,
|
|
311
|
+
format: FormatEnum.DateTime
|
|
312
|
+
},
|
|
313
|
+
NUMBER_DATE: {
|
|
314
|
+
type: TypeEnum.String,
|
|
315
|
+
format: FormatEnum.Date
|
|
316
|
+
},
|
|
317
|
+
NUMBER_TIME: {
|
|
318
|
+
type: TypeEnum.String,
|
|
319
|
+
format: FormatEnum.Time
|
|
320
|
+
}
|
|
302
321
|
};
|
|
303
322
|
var getTopLeft = (range) => {
|
|
304
323
|
const to = range.to ?? range.from;
|
|
@@ -348,11 +367,16 @@ var SheetModel = class extends Resource {
|
|
|
348
367
|
id: this.id
|
|
349
368
|
}, {
|
|
350
369
|
F: __dxlog_file,
|
|
351
|
-
L:
|
|
370
|
+
L: 113,
|
|
352
371
|
S: this,
|
|
353
372
|
C: (f, a) => f(...a)
|
|
354
373
|
});
|
|
355
374
|
initialize(this._sheet);
|
|
375
|
+
this._graph.update.on((event) => {
|
|
376
|
+
if (event.type === "functionsUpdated") {
|
|
377
|
+
this.reset();
|
|
378
|
+
}
|
|
379
|
+
});
|
|
356
380
|
this._node = this._graph.getOrCreateNode(createSheetName({
|
|
357
381
|
type: getTypename(this._sheet),
|
|
358
382
|
id: this._sheet.id
|
|
@@ -370,7 +394,7 @@ var SheetModel = class extends Resource {
|
|
|
370
394
|
reset() {
|
|
371
395
|
invariant2(this._node, void 0, {
|
|
372
396
|
F: __dxlog_file,
|
|
373
|
-
L:
|
|
397
|
+
L: 139,
|
|
374
398
|
S: this,
|
|
375
399
|
A: [
|
|
376
400
|
"this._node",
|
|
@@ -381,7 +405,7 @@ var SheetModel = class extends Resource {
|
|
|
381
405
|
Object.entries(this._sheet.cells).forEach(([key, { value }]) => {
|
|
382
406
|
invariant2(this._node, void 0, {
|
|
383
407
|
F: __dxlog_file,
|
|
384
|
-
L:
|
|
408
|
+
L: 142,
|
|
385
409
|
S: this,
|
|
386
410
|
A: [
|
|
387
411
|
"this._node",
|
|
@@ -390,7 +414,12 @@ var SheetModel = class extends Resource {
|
|
|
390
414
|
});
|
|
391
415
|
const { col, row } = addressFromIndex(this._sheet, key);
|
|
392
416
|
if (isFormula(value)) {
|
|
393
|
-
|
|
417
|
+
const binding = this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));
|
|
418
|
+
if (binding) {
|
|
419
|
+
value = this._graph.mapFormulaToNative(binding);
|
|
420
|
+
} else {
|
|
421
|
+
value = "";
|
|
422
|
+
}
|
|
394
423
|
}
|
|
395
424
|
this._node.graph.hf.setCellContents({
|
|
396
425
|
sheet: this._node.sheetId,
|
|
@@ -410,11 +439,79 @@ var SheetModel = class extends Resource {
|
|
|
410
439
|
this._node?.graph.hf.rebuildAndRecalculate();
|
|
411
440
|
}
|
|
412
441
|
insertRows(i, n = 1) {
|
|
413
|
-
insertIndices(this._sheet.rows, i, n, MAX_ROWS);
|
|
442
|
+
const idx = insertIndices(this._sheet.rows, i, n, MAX_ROWS);
|
|
414
443
|
this.reset();
|
|
444
|
+
return idx;
|
|
415
445
|
}
|
|
416
446
|
insertColumns(i, n = 1) {
|
|
417
|
-
insertIndices(this._sheet.columns, i, n, MAX_COLUMNS);
|
|
447
|
+
const idx = insertIndices(this._sheet.columns, i, n, MAX_COLUMNS);
|
|
448
|
+
this.reset();
|
|
449
|
+
return idx;
|
|
450
|
+
}
|
|
451
|
+
dropRow(rowIndex) {
|
|
452
|
+
const range = {
|
|
453
|
+
from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),
|
|
454
|
+
to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`)
|
|
455
|
+
};
|
|
456
|
+
const values = this.getCellValues(range).flat();
|
|
457
|
+
const index = this._sheet.rows.indexOf(rowIndex);
|
|
458
|
+
this.clear(range);
|
|
459
|
+
this._sheet.rows.splice(index, 1);
|
|
460
|
+
delete this._sheet.rowMeta[rowIndex];
|
|
461
|
+
this.reset();
|
|
462
|
+
return {
|
|
463
|
+
axis: "row",
|
|
464
|
+
index,
|
|
465
|
+
axisIndex: rowIndex,
|
|
466
|
+
axisMeta: this._sheet.rowMeta[rowIndex],
|
|
467
|
+
values
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
dropColumn(colIndex) {
|
|
471
|
+
const range = {
|
|
472
|
+
from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),
|
|
473
|
+
to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`)
|
|
474
|
+
};
|
|
475
|
+
const values = this.getCellValues(range).flat();
|
|
476
|
+
const index = this._sheet.columns.indexOf(colIndex);
|
|
477
|
+
this.clear(range);
|
|
478
|
+
this._sheet.columns.splice(index, 1);
|
|
479
|
+
delete this._sheet.columnMeta[colIndex];
|
|
480
|
+
this.reset();
|
|
481
|
+
return {
|
|
482
|
+
axis: "col",
|
|
483
|
+
index,
|
|
484
|
+
axisIndex: colIndex,
|
|
485
|
+
axisMeta: this._sheet.rowMeta[colIndex],
|
|
486
|
+
values
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
restoreRow({ index, axisIndex, axisMeta, values }) {
|
|
490
|
+
this._sheet.rows.splice(index, 0, axisIndex);
|
|
491
|
+
values.forEach((value, col) => {
|
|
492
|
+
if (value) {
|
|
493
|
+
this._sheet.cells[`${this._sheet.columns[col]}@${axisIndex}`] = {
|
|
494
|
+
value
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
if (axisMeta) {
|
|
499
|
+
this._sheet.rowMeta[axisIndex] = axisMeta;
|
|
500
|
+
}
|
|
501
|
+
this.reset();
|
|
502
|
+
}
|
|
503
|
+
restoreColumn({ index, axisIndex, axisMeta, values }) {
|
|
504
|
+
this._sheet.columns.splice(index, 0, axisIndex);
|
|
505
|
+
values.forEach((value, row) => {
|
|
506
|
+
if (value) {
|
|
507
|
+
this._sheet.cells[`${axisIndex}@${this._sheet.rows[row]}`] = {
|
|
508
|
+
value
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
if (axisMeta) {
|
|
513
|
+
this._sheet.columnMeta[axisIndex] = axisMeta;
|
|
514
|
+
}
|
|
418
515
|
this.reset();
|
|
419
516
|
}
|
|
420
517
|
//
|
|
@@ -427,7 +524,7 @@ var SheetModel = class extends Resource {
|
|
|
427
524
|
clear(range) {
|
|
428
525
|
invariant2(this._node, void 0, {
|
|
429
526
|
F: __dxlog_file,
|
|
430
|
-
L:
|
|
527
|
+
L: 245,
|
|
431
528
|
S: this,
|
|
432
529
|
A: [
|
|
433
530
|
"this._node",
|
|
@@ -445,7 +542,7 @@ var SheetModel = class extends Resource {
|
|
|
445
542
|
cut(range) {
|
|
446
543
|
invariant2(this._node, void 0, {
|
|
447
544
|
F: __dxlog_file,
|
|
448
|
-
L:
|
|
545
|
+
L: 256,
|
|
449
546
|
S: this,
|
|
450
547
|
A: [
|
|
451
548
|
"this._node",
|
|
@@ -461,7 +558,7 @@ var SheetModel = class extends Resource {
|
|
|
461
558
|
copy(range) {
|
|
462
559
|
invariant2(this._node, void 0, {
|
|
463
560
|
F: __dxlog_file,
|
|
464
|
-
L:
|
|
561
|
+
L: 265,
|
|
465
562
|
S: this,
|
|
466
563
|
A: [
|
|
467
564
|
"this._node",
|
|
@@ -473,7 +570,7 @@ var SheetModel = class extends Resource {
|
|
|
473
570
|
paste(cell) {
|
|
474
571
|
invariant2(this._node, void 0, {
|
|
475
572
|
F: __dxlog_file,
|
|
476
|
-
L:
|
|
573
|
+
L: 270,
|
|
477
574
|
S: this,
|
|
478
575
|
A: [
|
|
479
576
|
"this._node",
|
|
@@ -500,7 +597,7 @@ var SheetModel = class extends Resource {
|
|
|
500
597
|
undo() {
|
|
501
598
|
invariant2(this._node, void 0, {
|
|
502
599
|
F: __dxlog_file,
|
|
503
|
-
L:
|
|
600
|
+
L: 285,
|
|
504
601
|
S: this,
|
|
505
602
|
A: [
|
|
506
603
|
"this._node",
|
|
@@ -514,7 +611,7 @@ var SheetModel = class extends Resource {
|
|
|
514
611
|
redo() {
|
|
515
612
|
invariant2(this._node, void 0, {
|
|
516
613
|
F: __dxlog_file,
|
|
517
|
-
L:
|
|
614
|
+
L: 293,
|
|
518
615
|
S: this,
|
|
519
616
|
A: [
|
|
520
617
|
"this._node",
|
|
@@ -558,15 +655,25 @@ var SheetModel = class extends Resource {
|
|
|
558
655
|
getValue(cell) {
|
|
559
656
|
invariant2(this._node, void 0, {
|
|
560
657
|
F: __dxlog_file,
|
|
561
|
-
L:
|
|
658
|
+
L: 336,
|
|
562
659
|
S: this,
|
|
563
660
|
A: [
|
|
564
661
|
"this._node",
|
|
565
662
|
""
|
|
566
663
|
]
|
|
567
664
|
});
|
|
568
|
-
const
|
|
665
|
+
const address = toSimpleCellAddress(this._node.sheetId, cell);
|
|
666
|
+
const value = this._node.graph.hf.getCellValue(address);
|
|
569
667
|
if (value instanceof DetailedCellError) {
|
|
668
|
+
log.info("cell error", {
|
|
669
|
+
cell,
|
|
670
|
+
error: value
|
|
671
|
+
}, {
|
|
672
|
+
F: __dxlog_file,
|
|
673
|
+
L: 341,
|
|
674
|
+
S: this,
|
|
675
|
+
C: (f, a) => f(...a)
|
|
676
|
+
});
|
|
570
677
|
return value.toString();
|
|
571
678
|
}
|
|
572
679
|
return value;
|
|
@@ -574,10 +681,10 @@ var SheetModel = class extends Resource {
|
|
|
574
681
|
/**
|
|
575
682
|
* Get value type.
|
|
576
683
|
*/
|
|
577
|
-
|
|
684
|
+
getValueDescription(cell) {
|
|
578
685
|
invariant2(this._node, void 0, {
|
|
579
686
|
F: __dxlog_file,
|
|
580
|
-
L:
|
|
687
|
+
L: 352,
|
|
581
688
|
S: this,
|
|
582
689
|
A: [
|
|
583
690
|
"this._node",
|
|
@@ -594,7 +701,7 @@ var SheetModel = class extends Resource {
|
|
|
594
701
|
setValue(cell, value) {
|
|
595
702
|
invariant2(this._node, void 0, {
|
|
596
703
|
F: __dxlog_file,
|
|
597
|
-
L:
|
|
704
|
+
L: 362,
|
|
598
705
|
S: this,
|
|
599
706
|
A: [
|
|
600
707
|
"this._node",
|
|
@@ -691,7 +798,7 @@ var SheetModel = class extends Resource {
|
|
|
691
798
|
mapFormulaRefsToIndices(formula) {
|
|
692
799
|
invariant2(isFormula(formula), void 0, {
|
|
693
800
|
F: __dxlog_file,
|
|
694
|
-
L:
|
|
801
|
+
L: 451,
|
|
695
802
|
S: this,
|
|
696
803
|
A: [
|
|
697
804
|
"isFormula(formula)",
|
|
@@ -708,7 +815,7 @@ var SheetModel = class extends Resource {
|
|
|
708
815
|
mapFormulaIndicesToRefs(formula) {
|
|
709
816
|
invariant2(isFormula(formula), void 0, {
|
|
710
817
|
F: __dxlog_file,
|
|
711
|
-
L:
|
|
818
|
+
L: 461,
|
|
712
819
|
S: this,
|
|
713
820
|
A: [
|
|
714
821
|
"isFormula(formula)",
|
|
@@ -734,7 +841,7 @@ var SheetModel = class extends Resource {
|
|
|
734
841
|
toDateTime(num) {
|
|
735
842
|
invariant2(this._node, void 0, {
|
|
736
843
|
F: __dxlog_file,
|
|
737
|
-
L:
|
|
844
|
+
L: 482,
|
|
738
845
|
S: this,
|
|
739
846
|
A: [
|
|
740
847
|
"this._node",
|
|
@@ -746,7 +853,7 @@ var SheetModel = class extends Resource {
|
|
|
746
853
|
toDate(num) {
|
|
747
854
|
invariant2(this._node, void 0, {
|
|
748
855
|
F: __dxlog_file,
|
|
749
|
-
L:
|
|
856
|
+
L: 487,
|
|
750
857
|
S: this,
|
|
751
858
|
A: [
|
|
752
859
|
"this._node",
|
|
@@ -758,7 +865,7 @@ var SheetModel = class extends Resource {
|
|
|
758
865
|
toTime(num) {
|
|
759
866
|
invariant2(this._node, void 0, {
|
|
760
867
|
F: __dxlog_file,
|
|
761
|
-
L:
|
|
868
|
+
L: 492,
|
|
762
869
|
S: this,
|
|
763
870
|
A: [
|
|
764
871
|
"this._node",
|
|
@@ -869,9 +976,10 @@ var SheetProvider = ({ children, graph, sheet, readonly, onInfo }) => {
|
|
|
869
976
|
|
|
870
977
|
// packages/plugins/plugin-sheet/src/components/GridSheet/GridSheet.tsx
|
|
871
978
|
import React4, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState4 } from "react";
|
|
979
|
+
import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
|
|
872
980
|
import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
873
981
|
import { useAttention } from "@dxos/react-ui-attention";
|
|
874
|
-
import { closestCell, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
|
|
982
|
+
import { closestCell, defaultSizeRow, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
|
|
875
983
|
|
|
876
984
|
// packages/plugins/plugin-sheet/src/components/GridSheet/util.ts
|
|
877
985
|
import { useEffect as useEffect3, useState as useState3 } from "react";
|
|
@@ -929,7 +1037,7 @@ var RangeList = ({ sheet }) => {
|
|
|
929
1037
|
};
|
|
930
1038
|
|
|
931
1039
|
// packages/plugins/plugin-sheet/src/components/index.ts
|
|
932
|
-
var SheetContainer = lazy(() => import("./SheetContainer-
|
|
1040
|
+
var SheetContainer = lazy(() => import("./SheetContainer-22IOAW3B.mjs"));
|
|
933
1041
|
|
|
934
1042
|
// packages/plugins/plugin-sheet/src/integrations/thread-ranges.ts
|
|
935
1043
|
var completeCellRangeToThreadCursor = (range) => {
|
|
@@ -1069,11 +1177,20 @@ var projectCellProps = (model, col, row) => {
|
|
|
1069
1177
|
const range = thread?.anchor && parseThreadAnchorAsCellRange(thread.anchor);
|
|
1070
1178
|
return thread && range ? inRange(range, address) : false;
|
|
1071
1179
|
}).map((thread) => fullyQualifiedId3(thread)).join(" ");
|
|
1072
|
-
const
|
|
1180
|
+
const description = model.getValueDescription(address);
|
|
1181
|
+
const type = description?.type;
|
|
1182
|
+
const format = description?.format;
|
|
1073
1183
|
const classNames = ranges?.map(cellClassNameForRange).reverse();
|
|
1074
1184
|
return {
|
|
1075
|
-
value: parseValue(
|
|
1076
|
-
|
|
1185
|
+
value: parseValue({
|
|
1186
|
+
type,
|
|
1187
|
+
format,
|
|
1188
|
+
value: rawValue
|
|
1189
|
+
}),
|
|
1190
|
+
className: mx2(cellClassesForFieldType({
|
|
1191
|
+
type,
|
|
1192
|
+
format
|
|
1193
|
+
}), threadRefs && commentedClassName, classNames),
|
|
1077
1194
|
dataRefs: threadRefs
|
|
1078
1195
|
};
|
|
1079
1196
|
};
|
|
@@ -1096,11 +1213,12 @@ var gridCellGetter = (model) => {
|
|
|
1096
1213
|
};
|
|
1097
1214
|
var rowLabelCell = (row) => ({
|
|
1098
1215
|
value: rowToA1Notation(row),
|
|
1099
|
-
className: "text-end !pie-1",
|
|
1216
|
+
className: "text-end !pie-1 text-subdued",
|
|
1100
1217
|
resizeHandle: "row"
|
|
1101
1218
|
});
|
|
1102
1219
|
var colLabelCell = (col) => ({
|
|
1103
1220
|
value: colToA1Notation(col),
|
|
1221
|
+
className: "text-subdued",
|
|
1104
1222
|
resizeHandle: "col"
|
|
1105
1223
|
});
|
|
1106
1224
|
var cellGetter = (model) => {
|
|
@@ -1132,7 +1250,7 @@ var cellGetter = (model) => {
|
|
|
1132
1250
|
};
|
|
1133
1251
|
var useSheetModelDxGridProps = (dxGrid, model) => {
|
|
1134
1252
|
const [columns, setColumns] = useState3(createDxGridColumns(model));
|
|
1135
|
-
const [rows, setRows] = useState3(
|
|
1253
|
+
const [rows, setRows] = useState3(createDxGridRows(model));
|
|
1136
1254
|
useEffect3(() => {
|
|
1137
1255
|
const cellsAccessor = createDocAccessor(model.sheet, [
|
|
1138
1256
|
"cells"
|
|
@@ -1144,7 +1262,11 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
|
|
|
1144
1262
|
dxGrid?.requestUpdate("initialCells");
|
|
1145
1263
|
};
|
|
1146
1264
|
cellsAccessor.handle.addListener("change", handleCellsUpdate);
|
|
1147
|
-
|
|
1265
|
+
const unsubscribe = model.graph.update.on(handleCellsUpdate);
|
|
1266
|
+
return () => {
|
|
1267
|
+
cellsAccessor.handle.removeListener("change", handleCellsUpdate);
|
|
1268
|
+
unsubscribe();
|
|
1269
|
+
};
|
|
1148
1270
|
}, [
|
|
1149
1271
|
model,
|
|
1150
1272
|
dxGrid
|
|
@@ -1169,7 +1291,8 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
|
|
|
1169
1291
|
rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
|
|
1170
1292
|
};
|
|
1171
1293
|
}, [
|
|
1172
|
-
model
|
|
1294
|
+
model,
|
|
1295
|
+
dxGrid
|
|
1173
1296
|
]);
|
|
1174
1297
|
return {
|
|
1175
1298
|
columns,
|
|
@@ -1204,11 +1327,11 @@ var frozen = {
|
|
|
1204
1327
|
};
|
|
1205
1328
|
var sheetRowDefault = {
|
|
1206
1329
|
frozenRowsStart: {
|
|
1207
|
-
size:
|
|
1330
|
+
size: defaultSizeRow,
|
|
1208
1331
|
readonly: true
|
|
1209
1332
|
},
|
|
1210
1333
|
grid: {
|
|
1211
|
-
size:
|
|
1334
|
+
size: defaultSizeRow,
|
|
1212
1335
|
resizeable: true
|
|
1213
1336
|
}
|
|
1214
1337
|
};
|
|
@@ -1224,42 +1347,50 @@ var sheetColDefault = {
|
|
|
1224
1347
|
};
|
|
1225
1348
|
var GridSheet = () => {
|
|
1226
1349
|
const { t } = useTranslation2(SHEET_PLUGIN);
|
|
1227
|
-
const { id, model, editing,
|
|
1350
|
+
const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
|
|
1228
1351
|
const [dxGrid, setDxGrid] = useState4(null);
|
|
1352
|
+
const [extraplanarFocus, setExtraplanarFocus] = useState4(null);
|
|
1353
|
+
const dispatch = useIntentDispatcher2();
|
|
1229
1354
|
const rangeController = useRef();
|
|
1230
1355
|
const { hasAttention } = useAttention(id);
|
|
1231
1356
|
const handleFocus = useCallback4((event) => {
|
|
1232
1357
|
if (!editing) {
|
|
1233
1358
|
const cell = closestCell(event.target);
|
|
1234
|
-
if (cell
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1359
|
+
if (cell) {
|
|
1360
|
+
if (cell.plane === "grid") {
|
|
1361
|
+
setCursor({
|
|
1362
|
+
col: cell.col,
|
|
1363
|
+
row: cell.row
|
|
1364
|
+
});
|
|
1365
|
+
setExtraplanarFocus(null);
|
|
1366
|
+
} else {
|
|
1367
|
+
setExtraplanarFocus(cell);
|
|
1368
|
+
}
|
|
1369
|
+
} else {
|
|
1370
|
+
setExtraplanarFocus(null);
|
|
1239
1371
|
}
|
|
1240
1372
|
}
|
|
1241
1373
|
}, [
|
|
1242
1374
|
editing
|
|
1243
1375
|
]);
|
|
1244
|
-
const handleClose = useCallback4((
|
|
1245
|
-
if (
|
|
1246
|
-
|
|
1376
|
+
const handleClose = useCallback4((_value, event) => {
|
|
1377
|
+
if (event) {
|
|
1378
|
+
const { key, shift } = event;
|
|
1379
|
+
const axis = [
|
|
1380
|
+
"Enter",
|
|
1381
|
+
"ArrowUp",
|
|
1382
|
+
"ArrowDown"
|
|
1383
|
+
].includes(key) ? "row" : [
|
|
1384
|
+
"Tab",
|
|
1385
|
+
"ArrowLeft",
|
|
1386
|
+
"ArrowRight"
|
|
1387
|
+
].includes(key) ? "col" : void 0;
|
|
1388
|
+
const delta = key.startsWith("Arrow") ? [
|
|
1389
|
+
"ArrowUp",
|
|
1390
|
+
"ArrowLeft"
|
|
1391
|
+
].includes(key) ? -1 : 1 : shift ? -1 : 1;
|
|
1392
|
+
dxGrid?.refocus(axis, delta);
|
|
1247
1393
|
}
|
|
1248
|
-
setEditing(null);
|
|
1249
|
-
const axis = [
|
|
1250
|
-
"Enter",
|
|
1251
|
-
"ArrowUp",
|
|
1252
|
-
"ArrowDown"
|
|
1253
|
-
].includes(key) ? "row" : [
|
|
1254
|
-
"Tab",
|
|
1255
|
-
"ArrowLeft",
|
|
1256
|
-
"ArrowRight"
|
|
1257
|
-
].includes(key) ? "col" : void 0;
|
|
1258
|
-
const delta = key.startsWith("Arrow") ? [
|
|
1259
|
-
"ArrowUp",
|
|
1260
|
-
"ArrowLeft"
|
|
1261
|
-
].includes(key) ? -1 : 1 : shift ? -1 : 1;
|
|
1262
|
-
dxGrid?.refocus(axis, delta);
|
|
1263
1394
|
}, [
|
|
1264
1395
|
model,
|
|
1265
1396
|
editing,
|
|
@@ -1269,7 +1400,6 @@ var GridSheet = () => {
|
|
|
1269
1400
|
if (value !== void 0) {
|
|
1270
1401
|
model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
|
|
1271
1402
|
}
|
|
1272
|
-
setEditing(null);
|
|
1273
1403
|
}, [
|
|
1274
1404
|
model,
|
|
1275
1405
|
editing
|
|
@@ -1315,12 +1445,63 @@ var GridSheet = () => {
|
|
|
1315
1445
|
}, [
|
|
1316
1446
|
hasAttention
|
|
1317
1447
|
]);
|
|
1448
|
+
const selectEntireAxis = useCallback4((pos) => {
|
|
1449
|
+
switch (pos.plane) {
|
|
1450
|
+
case "frozenRowsStart":
|
|
1451
|
+
return dxGrid?.setSelection({
|
|
1452
|
+
start: {
|
|
1453
|
+
col: pos.col,
|
|
1454
|
+
row: 0,
|
|
1455
|
+
plane: "grid"
|
|
1456
|
+
},
|
|
1457
|
+
end: {
|
|
1458
|
+
col: pos.col,
|
|
1459
|
+
row: model.sheet.rows.length - 1,
|
|
1460
|
+
plane: "grid"
|
|
1461
|
+
}
|
|
1462
|
+
});
|
|
1463
|
+
case "frozenColsStart":
|
|
1464
|
+
return dxGrid?.setSelection({
|
|
1465
|
+
start: {
|
|
1466
|
+
row: pos.row,
|
|
1467
|
+
col: 0,
|
|
1468
|
+
plane: "grid"
|
|
1469
|
+
},
|
|
1470
|
+
end: {
|
|
1471
|
+
row: pos.row,
|
|
1472
|
+
col: model.sheet.columns.length - 1,
|
|
1473
|
+
plane: "grid"
|
|
1474
|
+
}
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1477
|
+
}, [
|
|
1478
|
+
dxGrid,
|
|
1479
|
+
model.sheet
|
|
1480
|
+
]);
|
|
1481
|
+
const handleClick = useCallback4((event) => {
|
|
1482
|
+
const cell = closestCell(event.target);
|
|
1483
|
+
if (cell) {
|
|
1484
|
+
selectEntireAxis(cell);
|
|
1485
|
+
}
|
|
1486
|
+
}, [
|
|
1487
|
+
selectEntireAxis
|
|
1488
|
+
]);
|
|
1318
1489
|
const handleKeyDown = useCallback4((event) => {
|
|
1319
1490
|
switch (event.key) {
|
|
1320
1491
|
case "Backspace":
|
|
1321
1492
|
case "Delete":
|
|
1322
1493
|
event.preventDefault();
|
|
1323
1494
|
return cursorFallbackRange && model.clear(cursorFallbackRange);
|
|
1495
|
+
case "Enter":
|
|
1496
|
+
case "Space":
|
|
1497
|
+
if (dxGrid && extraplanarFocus) {
|
|
1498
|
+
switch (extraplanarFocus.plane) {
|
|
1499
|
+
case "frozenRowsStart":
|
|
1500
|
+
case "frozenColsStart":
|
|
1501
|
+
event.preventDefault();
|
|
1502
|
+
return selectEntireAxis(extraplanarFocus);
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1324
1505
|
}
|
|
1325
1506
|
if (event.metaKey || event.ctrlKey) {
|
|
1326
1507
|
switch (event.key) {
|
|
@@ -1348,7 +1529,9 @@ var GridSheet = () => {
|
|
|
1348
1529
|
}, [
|
|
1349
1530
|
cursorFallbackRange,
|
|
1350
1531
|
model,
|
|
1351
|
-
cursor
|
|
1532
|
+
cursor,
|
|
1533
|
+
extraplanarFocus,
|
|
1534
|
+
selectEntireAxis
|
|
1352
1535
|
]);
|
|
1353
1536
|
const contextMenuAnchorRef = useRef(null);
|
|
1354
1537
|
const [contextMenuOpen, setContextMenuOpen] = useState4(null);
|
|
@@ -1363,16 +1546,32 @@ var GridSheet = () => {
|
|
|
1363
1546
|
}, []);
|
|
1364
1547
|
const handleAxisMenuAction = useCallback4((operation) => {
|
|
1365
1548
|
switch (operation) {
|
|
1366
|
-
case "
|
|
1367
|
-
case "
|
|
1368
|
-
|
|
1549
|
+
case "insert-before":
|
|
1550
|
+
case "insert-after":
|
|
1551
|
+
return dispatch({
|
|
1552
|
+
action: SheetAction.INSERT_AXIS,
|
|
1553
|
+
data: {
|
|
1554
|
+
model,
|
|
1555
|
+
axis: contextMenuAxis,
|
|
1556
|
+
index: contextMenuOpen[contextMenuAxis] + (operation === "insert-before" ? 0 : 1)
|
|
1557
|
+
}
|
|
1558
|
+
});
|
|
1369
1559
|
break;
|
|
1370
|
-
case "
|
|
1560
|
+
case "drop":
|
|
1561
|
+
return dispatch({
|
|
1562
|
+
action: SheetAction.DROP_AXIS,
|
|
1563
|
+
data: {
|
|
1564
|
+
model,
|
|
1565
|
+
axis: contextMenuAxis,
|
|
1566
|
+
axisIndex: model.sheet[contextMenuAxis === "row" ? "rows" : "columns"][contextMenuOpen[contextMenuAxis]]
|
|
1567
|
+
}
|
|
1568
|
+
});
|
|
1371
1569
|
}
|
|
1372
1570
|
}, [
|
|
1373
1571
|
contextMenuAxis,
|
|
1374
1572
|
contextMenuOpen,
|
|
1375
|
-
model
|
|
1573
|
+
model,
|
|
1574
|
+
dispatch
|
|
1376
1575
|
]);
|
|
1377
1576
|
const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
|
|
1378
1577
|
const extension = useMemo2(() => [
|
|
@@ -1425,8 +1624,9 @@ var GridSheet = () => {
|
|
|
1425
1624
|
onWheelCapture: handleWheel,
|
|
1426
1625
|
onKeyDown: handleKeyDown,
|
|
1427
1626
|
onContextMenu: handleContextMenu,
|
|
1428
|
-
|
|
1429
|
-
|
|
1627
|
+
onClick: handleClick,
|
|
1628
|
+
overscroll: "trap",
|
|
1629
|
+
className: "[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-separator",
|
|
1430
1630
|
activeRefs,
|
|
1431
1631
|
ref: setDxGrid
|
|
1432
1632
|
}), /* @__PURE__ */ React4.createElement(DropdownMenu.Root, {
|
|
@@ -1440,18 +1640,17 @@ var GridSheet = () => {
|
|
|
1440
1640
|
sideOffset: 4,
|
|
1441
1641
|
collisionPadding: 8
|
|
1442
1642
|
}, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
|
|
1443
|
-
onClick: () => handleAxisMenuAction("
|
|
1643
|
+
onClick: () => handleAxisMenuAction("insert-before")
|
|
1444
1644
|
}, /* @__PURE__ */ React4.createElement(Icon, {
|
|
1445
1645
|
size: 5,
|
|
1446
1646
|
icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
|
|
1447
1647
|
}), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
|
|
1448
|
-
onClick: () => handleAxisMenuAction("
|
|
1648
|
+
onClick: () => handleAxisMenuAction("insert-after")
|
|
1449
1649
|
}, /* @__PURE__ */ React4.createElement(Icon, {
|
|
1450
1650
|
size: 5,
|
|
1451
1651
|
icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
|
|
1452
1652
|
}), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
|
|
1453
|
-
|
|
1454
|
-
onClick: () => handleAxisMenuAction("remove")
|
|
1653
|
+
onClick: () => handleAxisMenuAction("drop")
|
|
1455
1654
|
}, /* @__PURE__ */ React4.createElement(Icon, {
|
|
1456
1655
|
size: 5,
|
|
1457
1656
|
icon: "ph--backspace--regular"
|
|
@@ -1469,4 +1668,4 @@ export {
|
|
|
1469
1668
|
RangeList,
|
|
1470
1669
|
SheetContainer
|
|
1471
1670
|
};
|
|
1472
|
-
//# sourceMappingURL=chunk-
|
|
1671
|
+
//# sourceMappingURL=chunk-BW36PM2Y.mjs.map
|