@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.8758a12

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-GPJOTYCI.mjs} +41 -30
  2. package/dist/lib/browser/SheetContainer-GPJOTYCI.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-CYOQA6UK.mjs} +277 -79
  6. package/dist/lib/browser/chunk-CYOQA6UK.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-VSC6XF3M.cjs} +60 -50
  18. package/dist/lib/node/SheetContainer-VSC6XF3M.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-DEPJHN47.cjs → chunk-545PZPK3.cjs} +313 -116
  22. package/dist/lib/node/chunk-545PZPK3.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-2XJ5I4UF.cjs → chunk-AWKOWDMI.cjs} +8 -6
  24. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-JF5XNTF3.cjs → chunk-O7XR4R7Y.cjs} +61 -26
  26. package/dist/lib/node/chunk-O7XR4R7Y.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-SJK25GKT.mjs} +41 -30
  37. package/dist/lib/node-esm/SheetContainer-SJK25GKT.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-25V7WY4R.mjs → chunk-EZ6K2W62.mjs} +277 -79
  43. package/dist/lib/node-esm/chunk-EZ6K2W62.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-5TXLF6PL.mjs → chunk-UIBWRHW7.mjs} +4 -2
  45. package/dist/lib/node-esm/chunk-UIBWRHW7.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 +96 -36
  77. package/src/components/GridSheet/util.ts +13 -7
  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-SJK25GKT.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
  };
@@ -1132,7 +1249,7 @@ var cellGetter = (model) => {
1132
1249
  };
1133
1250
  var useSheetModelDxGridProps = (dxGrid, model) => {
1134
1251
  const [columns, setColumns] = useState3(createDxGridColumns(model));
1135
- const [rows, setRows] = useState3(createDxGridColumns(model));
1252
+ const [rows, setRows] = useState3(createDxGridRows(model));
1136
1253
  useEffect3(() => {
1137
1254
  const cellsAccessor = createDocAccessor(model.sheet, [
1138
1255
  "cells"
@@ -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,
@@ -1224,42 +1346,50 @@ var sheetColDefault = {
1224
1346
  };
1225
1347
  var GridSheet = () => {
1226
1348
  const { t } = useTranslation2(SHEET_PLUGIN);
1227
- const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1349
+ const { id, model, editing, 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
  }, [
1242
1373
  editing
1243
1374
  ]);
1244
- const handleClose = useCallback4((value, { key, shift }) => {
1245
- if (value !== void 0) {
1246
- model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
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);
1247
1392
  }
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
1393
  }, [
1264
1394
  model,
1265
1395
  editing,
@@ -1269,7 +1399,6 @@ var GridSheet = () => {
1269
1399
  if (value !== void 0) {
1270
1400
  model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
1271
1401
  }
1272
- setEditing(null);
1273
1402
  }, [
1274
1403
  model,
1275
1404
  editing
@@ -1315,12 +1444,63 @@ var GridSheet = () => {
1315
1444
  }, [
1316
1445
  hasAttention
1317
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
+ ]);
1318
1488
  const handleKeyDown = useCallback4((event) => {
1319
1489
  switch (event.key) {
1320
1490
  case "Backspace":
1321
1491
  case "Delete":
1322
1492
  event.preventDefault();
1323
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
+ }
1324
1504
  }
1325
1505
  if (event.metaKey || event.ctrlKey) {
1326
1506
  switch (event.key) {
@@ -1348,7 +1528,9 @@ var GridSheet = () => {
1348
1528
  }, [
1349
1529
  cursorFallbackRange,
1350
1530
  model,
1351
- cursor
1531
+ cursor,
1532
+ extraplanarFocus,
1533
+ selectEntireAxis
1352
1534
  ]);
1353
1535
  const contextMenuAnchorRef = useRef(null);
1354
1536
  const [contextMenuOpen, setContextMenuOpen] = useState4(null);
@@ -1363,16 +1545,32 @@ var GridSheet = () => {
1363
1545
  }, []);
1364
1546
  const handleAxisMenuAction = useCallback4((operation) => {
1365
1547
  switch (operation) {
1366
- case "add-before":
1367
- case "add-after":
1368
- model[contextMenuAxis === "col" ? "insertColumns" : "insertRows"](contextMenuOpen[contextMenuAxis] + (operation === "add-before" ? 0 : 1), 1);
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
+ });
1369
1558
  break;
1370
- case "remove":
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
+ });
1371
1568
  }
1372
1569
  }, [
1373
1570
  contextMenuAxis,
1374
1571
  contextMenuOpen,
1375
- model
1572
+ model,
1573
+ dispatch
1376
1574
  ]);
1377
1575
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
1378
1576
  const extension = useMemo2(() => [
@@ -1425,7 +1623,8 @@ var GridSheet = () => {
1425
1623
  onWheelCapture: handleWheel,
1426
1624
  onKeyDown: handleKeyDown,
1427
1625
  onContextMenu: handleContextMenu,
1428
- overscroll: "inline",
1626
+ onClick: handleClick,
1627
+ overscroll: "trap",
1429
1628
  className: "[--dx-grid-base:var(--surface-bg)]",
1430
1629
  activeRefs,
1431
1630
  ref: setDxGrid
@@ -1440,18 +1639,17 @@ var GridSheet = () => {
1440
1639
  sideOffset: 4,
1441
1640
  collisionPadding: 8
1442
1641
  }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1443
- onClick: () => handleAxisMenuAction("add-before")
1642
+ onClick: () => handleAxisMenuAction("insert-before")
1444
1643
  }, /* @__PURE__ */ React4.createElement(Icon, {
1445
1644
  size: 5,
1446
1645
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1447
1646
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1448
- onClick: () => handleAxisMenuAction("add-after")
1647
+ onClick: () => handleAxisMenuAction("insert-after")
1449
1648
  }, /* @__PURE__ */ React4.createElement(Icon, {
1450
1649
  size: 5,
1451
1650
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1452
1651
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1453
- disabled: true,
1454
- onClick: () => handleAxisMenuAction("remove")
1652
+ onClick: () => handleAxisMenuAction("drop")
1455
1653
  }, /* @__PURE__ */ React4.createElement(Icon, {
1456
1654
  size: 5,
1457
1655
  icon: "ph--backspace--regular"
@@ -1469,4 +1667,4 @@ export {
1469
1667
  RangeList,
1470
1668
  SheetContainer
1471
1669
  };
1472
- //# sourceMappingURL=chunk-25V7WY4R.mjs.map
1670
+ //# sourceMappingURL=chunk-EZ6K2W62.mjs.map