@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
@@ -17,13 +17,14 @@ import {
17
17
  isFormula,
18
18
  rangeFromIndex,
19
19
  rangeToA1Notation
20
- } from "./chunk-KCYJSOFB.mjs";
20
+ } from "./chunk-VMSX6Z4X.mjs";
21
21
  import {
22
- Range
23
- } from "./chunk-5KVQ5IPW.mjs";
22
+ Range,
23
+ SheetAction
24
+ } from "./chunk-BVUN7SHF.mjs";
24
25
  import {
25
26
  SHEET_PLUGIN
26
- } from "./chunk-D3QTX46O.mjs";
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: FieldValueType.Boolean,
295
- NUMBER_RAW: FieldValueType.Number,
296
- NUMBER_PERCENT: FieldValueType.Percent,
297
- NUMBER_CURRENCY: FieldValueType.Currency,
298
- NUMBER_DATETIME: FieldValueType.DateTime,
299
- NUMBER_DATE: FieldValueType.Date,
300
- NUMBER_TIME: FieldValueType.Time
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: 111,
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: 131,
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: 134,
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
- value = this._graph.mapFormulaToNative(this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value)));
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: 176,
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: 187,
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: 196,
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: 201,
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: 216,
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: 224,
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: 267,
657
+ L: 336,
561
658
  S: this,
562
659
  A: [
563
660
  "this._node",
564
661
  ""
565
662
  ]
566
663
  });
567
- const value = this._node.graph.hf.getCellValue(toSimpleCellAddress(this._node.sheetId, cell));
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
- getValueType(cell) {
683
+ getValueDescription(cell) {
577
684
  invariant2(this._node, void 0, {
578
685
  F: __dxlog_file,
579
- L: 280,
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: 290,
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: 379,
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: 389,
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: 410,
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: 415,
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: 420,
867
+ L: 492,
761
868
  S: this,
762
869
  A: [
763
870
  "this._node",
@@ -868,6 +975,7 @@ 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
981
  import { closestCell, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
@@ -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-R65IDJHN.mjs"));
1039
+ var SheetContainer = lazy(() => import("./SheetContainer-JZEKRM4Z.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 type = model.getValueType(address);
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(type, rawValue),
1075
- className: mx2(cellClassesForFieldType(type), threadRefs && commentedClassName, classNames),
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
  };
@@ -1143,7 +1260,11 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1143
1260
  dxGrid?.requestUpdate("initialCells");
1144
1261
  };
1145
1262
  cellsAccessor.handle.addListener("change", handleCellsUpdate);
1146
- return () => cellsAccessor.handle.removeListener("change", handleCellsUpdate);
1263
+ const unsubscribe = model.graph.update.on(handleCellsUpdate);
1264
+ return () => {
1265
+ cellsAccessor.handle.removeListener("change", handleCellsUpdate);
1266
+ unsubscribe();
1267
+ };
1147
1268
  }, [
1148
1269
  model,
1149
1270
  dxGrid
@@ -1168,7 +1289,8 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1168
1289
  rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
1169
1290
  };
1170
1291
  }, [
1171
- model
1292
+ model,
1293
+ dxGrid
1172
1294
  ]);
1173
1295
  return {
1174
1296
  columns,
@@ -1225,16 +1347,25 @@ var GridSheet = () => {
1225
1347
  const { t } = useTranslation2(SHEET_PLUGIN);
1226
1348
  const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1227
1349
  const [dxGrid, setDxGrid] = useState4(null);
1350
+ const [extraplanarFocus, setExtraplanarFocus] = useState4(null);
1351
+ const dispatch = useIntentDispatcher2();
1228
1352
  const rangeController = useRef();
1229
1353
  const { hasAttention } = useAttention(id);
1230
1354
  const handleFocus = useCallback4((event) => {
1231
1355
  if (!editing) {
1232
1356
  const cell = closestCell(event.target);
1233
- if (cell && cell.plane === "grid") {
1234
- setCursor({
1235
- col: cell.col,
1236
- row: cell.row
1237
- });
1357
+ if (cell) {
1358
+ if (cell.plane === "grid") {
1359
+ setCursor({
1360
+ col: cell.col,
1361
+ row: cell.row
1362
+ });
1363
+ setExtraplanarFocus(null);
1364
+ } else {
1365
+ setExtraplanarFocus(cell);
1366
+ }
1367
+ } else {
1368
+ setExtraplanarFocus(null);
1238
1369
  }
1239
1370
  }
1240
1371
  }, [
@@ -1314,12 +1445,63 @@ var GridSheet = () => {
1314
1445
  }, [
1315
1446
  hasAttention
1316
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
+ ]);
1317
1489
  const handleKeyDown = useCallback4((event) => {
1318
1490
  switch (event.key) {
1319
1491
  case "Backspace":
1320
1492
  case "Delete":
1321
1493
  event.preventDefault();
1322
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
+ }
1323
1505
  }
1324
1506
  if (event.metaKey || event.ctrlKey) {
1325
1507
  switch (event.key) {
@@ -1347,7 +1529,9 @@ var GridSheet = () => {
1347
1529
  }, [
1348
1530
  cursorFallbackRange,
1349
1531
  model,
1350
- cursor
1532
+ cursor,
1533
+ extraplanarFocus,
1534
+ selectEntireAxis
1351
1535
  ]);
1352
1536
  const contextMenuAnchorRef = useRef(null);
1353
1537
  const [contextMenuOpen, setContextMenuOpen] = useState4(null);
@@ -1362,16 +1546,32 @@ var GridSheet = () => {
1362
1546
  }, []);
1363
1547
  const handleAxisMenuAction = useCallback4((operation) => {
1364
1548
  switch (operation) {
1365
- case "add-before":
1366
- case "add-after":
1367
- model[contextMenuAxis === "col" ? "insertColumns" : "insertRows"](contextMenuOpen[contextMenuAxis] + (operation === "add-before" ? 0 : 1), 1);
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
+ });
1368
1559
  break;
1369
- case "remove":
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
+ });
1370
1569
  }
1371
1570
  }, [
1372
1571
  contextMenuAxis,
1373
1572
  contextMenuOpen,
1374
- model
1573
+ model,
1574
+ dispatch
1375
1575
  ]);
1376
1576
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
1377
1577
  const extension = useMemo2(() => [
@@ -1424,6 +1624,7 @@ var GridSheet = () => {
1424
1624
  onWheelCapture: handleWheel,
1425
1625
  onKeyDown: handleKeyDown,
1426
1626
  onContextMenu: handleContextMenu,
1627
+ onClick: handleClick,
1427
1628
  overscroll: "inline",
1428
1629
  className: "[--dx-grid-base:var(--surface-bg)]",
1429
1630
  activeRefs,
@@ -1439,18 +1640,17 @@ var GridSheet = () => {
1439
1640
  sideOffset: 4,
1440
1641
  collisionPadding: 8
1441
1642
  }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1442
- onClick: () => handleAxisMenuAction("add-before")
1643
+ onClick: () => handleAxisMenuAction("insert-before")
1443
1644
  }, /* @__PURE__ */ React4.createElement(Icon, {
1444
1645
  size: 5,
1445
1646
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1446
1647
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1447
- onClick: () => handleAxisMenuAction("add-after")
1648
+ onClick: () => handleAxisMenuAction("insert-after")
1448
1649
  }, /* @__PURE__ */ React4.createElement(Icon, {
1449
1650
  size: 5,
1450
1651
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1451
1652
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1452
- disabled: true,
1453
- onClick: () => handleAxisMenuAction("remove")
1653
+ onClick: () => handleAxisMenuAction("drop")
1454
1654
  }, /* @__PURE__ */ React4.createElement(Icon, {
1455
1655
  size: 5,
1456
1656
  icon: "ph--backspace--regular"
@@ -1468,4 +1668,4 @@ export {
1468
1668
  RangeList,
1469
1669
  SheetContainer
1470
1670
  };
1471
- //# sourceMappingURL=chunk-I2DKJ72A.mjs.map
1671
+ //# sourceMappingURL=chunk-G2FUL6PK.mjs.map