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