@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.54a8bab

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 (103) hide show
  1. package/dist/lib/browser/{SheetContainer-R65IDJHN.mjs → SheetContainer-JZEKRM4Z.mjs} +41 -30
  2. package/dist/lib/browser/SheetContainer-JZEKRM4Z.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-5KVQ5IPW.mjs → chunk-BVUN7SHF.mjs} +4 -2
  4. package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-G2FUL6PK.mjs} +257 -57
  6. package/dist/lib/browser/chunk-G2FUL6PK.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
  8. package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-KCYJSOFB.mjs → chunk-VMSX6Z4X.mjs} +51 -17
  10. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
  11. package/dist/lib/browser/{compute-graph-SJT67236.mjs → compute-graph-GGWUX644.mjs} +4 -4
  12. package/dist/lib/browser/index.mjs +38 -10
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/meta.mjs +1 -1
  16. package/dist/lib/browser/types.mjs +2 -2
  17. package/dist/lib/node/{SheetContainer-6BO4C5X2.cjs → SheetContainer-PJE74VO4.cjs} +60 -50
  18. package/dist/lib/node/SheetContainer-PJE74VO4.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
  20. package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
  21. package/dist/lib/node/{chunk-2XJ5I4UF.cjs → chunk-AWKOWDMI.cjs} +8 -6
  22. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-JF5XNTF3.cjs → chunk-O7XR4R7Y.cjs} +61 -26
  24. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-DEPJHN47.cjs → chunk-STZ7S7RF.cjs} +293 -94
  26. package/dist/lib/node/chunk-STZ7S7RF.cjs.map +7 -0
  27. package/dist/lib/node/{compute-graph-AQBDL7HO.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
  28. package/dist/lib/node/{compute-graph-AQBDL7HO.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
  29. package/dist/lib/node/index.cjs +66 -38
  30. package/dist/lib/node/index.cjs.map +3 -3
  31. package/dist/lib/node/meta.cjs +3 -3
  32. package/dist/lib/node/meta.cjs.map +1 -1
  33. package/dist/lib/node/meta.json +1 -1
  34. package/dist/lib/node/types.cjs +7 -7
  35. package/dist/lib/node/types.cjs.map +1 -1
  36. package/dist/lib/node-esm/{SheetContainer-MJXC5E3P.mjs → SheetContainer-R73XEXHU.mjs} +41 -30
  37. package/dist/lib/node-esm/SheetContainer-R73XEXHU.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
  39. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
  40. package/dist/lib/node-esm/{chunk-XBEHKYO7.mjs → chunk-CR4K75EL.mjs} +51 -17
  41. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-5TXLF6PL.mjs → chunk-UIBWRHW7.mjs} +4 -2
  43. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-25V7WY4R.mjs → chunk-V5N3Y2O5.mjs} +257 -57
  45. package/dist/lib/node-esm/chunk-V5N3Y2O5.mjs.map +7 -0
  46. package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
  47. package/dist/lib/node-esm/index.mjs +38 -10
  48. package/dist/lib/node-esm/index.mjs.map +3 -3
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/meta.mjs +1 -1
  51. package/dist/lib/node-esm/types.mjs +2 -2
  52. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  53. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  54. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  55. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/Toolbar/Toolbar.d.ts +5 -2
  57. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  58. package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
  59. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
  60. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
  61. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
  62. package/dist/types/src/defs/sheet-range-types.d.ts +1 -1
  63. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  64. package/dist/types/src/defs/util.d.ts +1 -1
  65. package/dist/types/src/defs/util.d.ts.map +1 -1
  66. package/dist/types/src/meta.d.ts +1 -0
  67. package/dist/types/src/meta.d.ts.map +1 -1
  68. package/dist/types/src/model/sheet-model.d.ts +12 -5
  69. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  70. package/dist/types/src/translations.d.ts +10 -5
  71. package/dist/types/src/translations.d.ts.map +1 -1
  72. package/dist/types/src/types.d.ts +33 -3
  73. package/dist/types/src/types.d.ts.map +1 -1
  74. package/package.json +36 -36
  75. package/src/SheetPlugin.tsx +20 -0
  76. package/src/components/GridSheet/GridSheet.tsx +77 -16
  77. package/src/components/GridSheet/util.ts +12 -6
  78. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
  79. package/src/components/Toolbar/Toolbar.tsx +62 -41
  80. package/src/compute-graph/compute-graph.ts +22 -7
  81. package/src/compute-graph/functions/async-function.ts +1 -0
  82. package/src/compute-graph/functions/edge-function.ts +5 -3
  83. package/src/defs/sheet-range-types.ts +4 -2
  84. package/src/defs/util.ts +1 -0
  85. package/src/meta.ts +1 -0
  86. package/src/model/sheet-model.test.ts +5 -3
  87. package/src/model/sheet-model.ts +93 -21
  88. package/src/translations.ts +10 -5
  89. package/src/types.ts +20 -0
  90. package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +0 -7
  92. package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +0 -7
  93. package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +0 -7
  94. package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +0 -7
  95. package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +0 -7
  96. package/dist/lib/node/chunk-DEPJHN47.cjs.map +0 -7
  97. package/dist/lib/node/chunk-JF5XNTF3.cjs.map +0 -7
  98. package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +0 -7
  99. package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +0 -7
  101. package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +0 -7
  102. /package/dist/lib/browser/{compute-graph-SJT67236.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  103. /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-XBEHKYO7.mjs";
21
+ } from "./chunk-CR4K75EL.mjs";
22
22
  import {
23
- Range
24
- } from "./chunk-5TXLF6PL.mjs";
23
+ Range,
24
+ SheetAction
25
+ } from "./chunk-UIBWRHW7.mjs";
25
26
  import {
26
27
  SHEET_PLUGIN
27
- } from "./chunk-VCYJWE3O.mjs";
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: FieldValueType.Boolean,
296
- NUMBER_RAW: FieldValueType.Number,
297
- NUMBER_PERCENT: FieldValueType.Percent,
298
- NUMBER_CURRENCY: FieldValueType.Currency,
299
- NUMBER_DATETIME: FieldValueType.DateTime,
300
- NUMBER_DATE: FieldValueType.Date,
301
- NUMBER_TIME: FieldValueType.Time
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: 111,
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: 131,
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: 134,
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
- value = this._graph.mapFormulaToNative(this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value)));
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: 176,
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: 187,
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: 196,
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: 201,
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: 216,
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: 224,
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: 267,
658
+ L: 336,
562
659
  S: this,
563
660
  A: [
564
661
  "this._node",
565
662
  ""
566
663
  ]
567
664
  });
568
- const value = this._node.graph.hf.getCellValue(toSimpleCellAddress(this._node.sheetId, cell));
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
- getValueType(cell) {
684
+ getValueDescription(cell) {
578
685
  invariant2(this._node, void 0, {
579
686
  F: __dxlog_file,
580
- L: 280,
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: 290,
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: 379,
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: 389,
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: 410,
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: 415,
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: 420,
868
+ L: 492,
762
869
  S: this,
763
870
  A: [
764
871
  "this._node",
@@ -869,6 +976,7 @@ 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
982
  import { closestCell, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
@@ -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-MJXC5E3P.mjs"));
1040
+ var SheetContainer = lazy(() => import("./SheetContainer-R73XEXHU.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 type = model.getValueType(address);
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(type, rawValue),
1076
- className: mx2(cellClassesForFieldType(type), threadRefs && commentedClassName, classNames),
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
  };
@@ -1144,7 +1261,11 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1144
1261
  dxGrid?.requestUpdate("initialCells");
1145
1262
  };
1146
1263
  cellsAccessor.handle.addListener("change", handleCellsUpdate);
1147
- return () => cellsAccessor.handle.removeListener("change", handleCellsUpdate);
1264
+ const unsubscribe = model.graph.update.on(handleCellsUpdate);
1265
+ return () => {
1266
+ cellsAccessor.handle.removeListener("change", handleCellsUpdate);
1267
+ unsubscribe();
1268
+ };
1148
1269
  }, [
1149
1270
  model,
1150
1271
  dxGrid
@@ -1169,7 +1290,8 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1169
1290
  rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
1170
1291
  };
1171
1292
  }, [
1172
- model
1293
+ model,
1294
+ dxGrid
1173
1295
  ]);
1174
1296
  return {
1175
1297
  columns,
@@ -1226,16 +1348,25 @@ var GridSheet = () => {
1226
1348
  const { t } = useTranslation2(SHEET_PLUGIN);
1227
1349
  const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1228
1350
  const [dxGrid, setDxGrid] = useState4(null);
1351
+ const [extraplanarFocus, setExtraplanarFocus] = useState4(null);
1352
+ const dispatch = useIntentDispatcher2();
1229
1353
  const rangeController = useRef();
1230
1354
  const { hasAttention } = useAttention(id);
1231
1355
  const handleFocus = useCallback4((event) => {
1232
1356
  if (!editing) {
1233
1357
  const cell = closestCell(event.target);
1234
- if (cell && cell.plane === "grid") {
1235
- setCursor({
1236
- col: cell.col,
1237
- row: cell.row
1238
- });
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);
1239
1370
  }
1240
1371
  }
1241
1372
  }, [
@@ -1315,12 +1446,63 @@ var GridSheet = () => {
1315
1446
  }, [
1316
1447
  hasAttention
1317
1448
  ]);
1449
+ const selectEntireAxis = useCallback4((pos) => {
1450
+ switch (pos.plane) {
1451
+ case "frozenRowsStart":
1452
+ return dxGrid?.setSelection({
1453
+ start: {
1454
+ col: pos.col,
1455
+ row: 0,
1456
+ plane: "grid"
1457
+ },
1458
+ end: {
1459
+ col: pos.col,
1460
+ row: model.sheet.rows.length - 1,
1461
+ plane: "grid"
1462
+ }
1463
+ });
1464
+ case "frozenColsStart":
1465
+ return dxGrid?.setSelection({
1466
+ start: {
1467
+ row: pos.row,
1468
+ col: 0,
1469
+ plane: "grid"
1470
+ },
1471
+ end: {
1472
+ row: pos.row,
1473
+ col: model.sheet.columns.length - 1,
1474
+ plane: "grid"
1475
+ }
1476
+ });
1477
+ }
1478
+ }, [
1479
+ dxGrid,
1480
+ model.sheet
1481
+ ]);
1482
+ const handleClick = useCallback4((event) => {
1483
+ const cell = closestCell(event.target);
1484
+ if (cell) {
1485
+ selectEntireAxis(cell);
1486
+ }
1487
+ }, [
1488
+ selectEntireAxis
1489
+ ]);
1318
1490
  const handleKeyDown = useCallback4((event) => {
1319
1491
  switch (event.key) {
1320
1492
  case "Backspace":
1321
1493
  case "Delete":
1322
1494
  event.preventDefault();
1323
1495
  return cursorFallbackRange && model.clear(cursorFallbackRange);
1496
+ case "Enter":
1497
+ case "Space":
1498
+ if (dxGrid && extraplanarFocus) {
1499
+ switch (extraplanarFocus.plane) {
1500
+ case "frozenRowsStart":
1501
+ case "frozenColsStart":
1502
+ event.preventDefault();
1503
+ return selectEntireAxis(extraplanarFocus);
1504
+ }
1505
+ }
1324
1506
  }
1325
1507
  if (event.metaKey || event.ctrlKey) {
1326
1508
  switch (event.key) {
@@ -1348,7 +1530,9 @@ var GridSheet = () => {
1348
1530
  }, [
1349
1531
  cursorFallbackRange,
1350
1532
  model,
1351
- cursor
1533
+ cursor,
1534
+ extraplanarFocus,
1535
+ selectEntireAxis
1352
1536
  ]);
1353
1537
  const contextMenuAnchorRef = useRef(null);
1354
1538
  const [contextMenuOpen, setContextMenuOpen] = useState4(null);
@@ -1363,16 +1547,32 @@ var GridSheet = () => {
1363
1547
  }, []);
1364
1548
  const handleAxisMenuAction = useCallback4((operation) => {
1365
1549
  switch (operation) {
1366
- case "add-before":
1367
- case "add-after":
1368
- model[contextMenuAxis === "col" ? "insertColumns" : "insertRows"](contextMenuOpen[contextMenuAxis] + (operation === "add-before" ? 0 : 1), 1);
1550
+ case "insert-before":
1551
+ case "insert-after":
1552
+ return dispatch({
1553
+ action: SheetAction.INSERT_AXIS,
1554
+ data: {
1555
+ model,
1556
+ axis: contextMenuAxis,
1557
+ index: contextMenuOpen[contextMenuAxis] + (operation === "insert-before" ? 0 : 1)
1558
+ }
1559
+ });
1369
1560
  break;
1370
- case "remove":
1561
+ case "drop":
1562
+ return dispatch({
1563
+ action: SheetAction.DROP_AXIS,
1564
+ data: {
1565
+ model,
1566
+ axis: contextMenuAxis,
1567
+ axisIndex: model.sheet[contextMenuAxis === "row" ? "rows" : "columns"][contextMenuOpen[contextMenuAxis]]
1568
+ }
1569
+ });
1371
1570
  }
1372
1571
  }, [
1373
1572
  contextMenuAxis,
1374
1573
  contextMenuOpen,
1375
- model
1574
+ model,
1575
+ dispatch
1376
1576
  ]);
1377
1577
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
1378
1578
  const extension = useMemo2(() => [
@@ -1425,6 +1625,7 @@ var GridSheet = () => {
1425
1625
  onWheelCapture: handleWheel,
1426
1626
  onKeyDown: handleKeyDown,
1427
1627
  onContextMenu: handleContextMenu,
1628
+ onClick: handleClick,
1428
1629
  overscroll: "inline",
1429
1630
  className: "[--dx-grid-base:var(--surface-bg)]",
1430
1631
  activeRefs,
@@ -1440,18 +1641,17 @@ var GridSheet = () => {
1440
1641
  sideOffset: 4,
1441
1642
  collisionPadding: 8
1442
1643
  }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1443
- onClick: () => handleAxisMenuAction("add-before")
1644
+ onClick: () => handleAxisMenuAction("insert-before")
1444
1645
  }, /* @__PURE__ */ React4.createElement(Icon, {
1445
1646
  size: 5,
1446
1647
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1447
1648
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1448
- onClick: () => handleAxisMenuAction("add-after")
1649
+ onClick: () => handleAxisMenuAction("insert-after")
1449
1650
  }, /* @__PURE__ */ React4.createElement(Icon, {
1450
1651
  size: 5,
1451
1652
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1452
1653
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1453
- disabled: true,
1454
- onClick: () => handleAxisMenuAction("remove")
1654
+ onClick: () => handleAxisMenuAction("drop")
1455
1655
  }, /* @__PURE__ */ React4.createElement(Icon, {
1456
1656
  size: 5,
1457
1657
  icon: "ph--backspace--regular"
@@ -1469,4 +1669,4 @@ export {
1469
1669
  RangeList,
1470
1670
  SheetContainer
1471
1671
  };
1472
- //# sourceMappingURL=chunk-25V7WY4R.mjs.map
1672
+ //# sourceMappingURL=chunk-V5N3Y2O5.mjs.map