@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
@@ -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-GPJOTYCI.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
  };
@@ -1131,7 +1248,7 @@ var cellGetter = (model) => {
1131
1248
  };
1132
1249
  var useSheetModelDxGridProps = (dxGrid, model) => {
1133
1250
  const [columns, setColumns] = useState3(createDxGridColumns(model));
1134
- const [rows, setRows] = useState3(createDxGridColumns(model));
1251
+ const [rows, setRows] = useState3(createDxGridRows(model));
1135
1252
  useEffect3(() => {
1136
1253
  const cellsAccessor = createDocAccessor(model.sheet, [
1137
1254
  "cells"
@@ -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,
@@ -1223,42 +1345,50 @@ var sheetColDefault = {
1223
1345
  };
1224
1346
  var GridSheet = () => {
1225
1347
  const { t } = useTranslation2(SHEET_PLUGIN);
1226
- const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1348
+ const { id, model, editing, 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
  }, [
1241
1372
  editing
1242
1373
  ]);
1243
- const handleClose = useCallback4((value, { key, shift }) => {
1244
- if (value !== void 0) {
1245
- model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
1374
+ const handleClose = useCallback4((_value, event) => {
1375
+ if (event) {
1376
+ const { key, shift } = event;
1377
+ const axis = [
1378
+ "Enter",
1379
+ "ArrowUp",
1380
+ "ArrowDown"
1381
+ ].includes(key) ? "row" : [
1382
+ "Tab",
1383
+ "ArrowLeft",
1384
+ "ArrowRight"
1385
+ ].includes(key) ? "col" : void 0;
1386
+ const delta = key.startsWith("Arrow") ? [
1387
+ "ArrowUp",
1388
+ "ArrowLeft"
1389
+ ].includes(key) ? -1 : 1 : shift ? -1 : 1;
1390
+ dxGrid?.refocus(axis, delta);
1246
1391
  }
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
1392
  }, [
1263
1393
  model,
1264
1394
  editing,
@@ -1268,7 +1398,6 @@ var GridSheet = () => {
1268
1398
  if (value !== void 0) {
1269
1399
  model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
1270
1400
  }
1271
- setEditing(null);
1272
1401
  }, [
1273
1402
  model,
1274
1403
  editing
@@ -1314,12 +1443,63 @@ var GridSheet = () => {
1314
1443
  }, [
1315
1444
  hasAttention
1316
1445
  ]);
1446
+ const selectEntireAxis = useCallback4((pos) => {
1447
+ switch (pos.plane) {
1448
+ case "frozenRowsStart":
1449
+ return dxGrid?.setSelection({
1450
+ start: {
1451
+ col: pos.col,
1452
+ row: 0,
1453
+ plane: "grid"
1454
+ },
1455
+ end: {
1456
+ col: pos.col,
1457
+ row: model.sheet.rows.length - 1,
1458
+ plane: "grid"
1459
+ }
1460
+ });
1461
+ case "frozenColsStart":
1462
+ return dxGrid?.setSelection({
1463
+ start: {
1464
+ row: pos.row,
1465
+ col: 0,
1466
+ plane: "grid"
1467
+ },
1468
+ end: {
1469
+ row: pos.row,
1470
+ col: model.sheet.columns.length - 1,
1471
+ plane: "grid"
1472
+ }
1473
+ });
1474
+ }
1475
+ }, [
1476
+ dxGrid,
1477
+ model.sheet
1478
+ ]);
1479
+ const handleClick = useCallback4((event) => {
1480
+ const cell = closestCell(event.target);
1481
+ if (cell) {
1482
+ selectEntireAxis(cell);
1483
+ }
1484
+ }, [
1485
+ selectEntireAxis
1486
+ ]);
1317
1487
  const handleKeyDown = useCallback4((event) => {
1318
1488
  switch (event.key) {
1319
1489
  case "Backspace":
1320
1490
  case "Delete":
1321
1491
  event.preventDefault();
1322
1492
  return cursorFallbackRange && model.clear(cursorFallbackRange);
1493
+ case "Enter":
1494
+ case "Space":
1495
+ if (dxGrid && extraplanarFocus) {
1496
+ switch (extraplanarFocus.plane) {
1497
+ case "frozenRowsStart":
1498
+ case "frozenColsStart":
1499
+ event.preventDefault();
1500
+ return selectEntireAxis(extraplanarFocus);
1501
+ }
1502
+ }
1323
1503
  }
1324
1504
  if (event.metaKey || event.ctrlKey) {
1325
1505
  switch (event.key) {
@@ -1347,7 +1527,9 @@ var GridSheet = () => {
1347
1527
  }, [
1348
1528
  cursorFallbackRange,
1349
1529
  model,
1350
- cursor
1530
+ cursor,
1531
+ extraplanarFocus,
1532
+ selectEntireAxis
1351
1533
  ]);
1352
1534
  const contextMenuAnchorRef = useRef(null);
1353
1535
  const [contextMenuOpen, setContextMenuOpen] = useState4(null);
@@ -1362,16 +1544,32 @@ var GridSheet = () => {
1362
1544
  }, []);
1363
1545
  const handleAxisMenuAction = useCallback4((operation) => {
1364
1546
  switch (operation) {
1365
- case "add-before":
1366
- case "add-after":
1367
- model[contextMenuAxis === "col" ? "insertColumns" : "insertRows"](contextMenuOpen[contextMenuAxis] + (operation === "add-before" ? 0 : 1), 1);
1547
+ case "insert-before":
1548
+ case "insert-after":
1549
+ return dispatch({
1550
+ action: SheetAction.INSERT_AXIS,
1551
+ data: {
1552
+ model,
1553
+ axis: contextMenuAxis,
1554
+ index: contextMenuOpen[contextMenuAxis] + (operation === "insert-before" ? 0 : 1)
1555
+ }
1556
+ });
1368
1557
  break;
1369
- case "remove":
1558
+ case "drop":
1559
+ return dispatch({
1560
+ action: SheetAction.DROP_AXIS,
1561
+ data: {
1562
+ model,
1563
+ axis: contextMenuAxis,
1564
+ axisIndex: model.sheet[contextMenuAxis === "row" ? "rows" : "columns"][contextMenuOpen[contextMenuAxis]]
1565
+ }
1566
+ });
1370
1567
  }
1371
1568
  }, [
1372
1569
  contextMenuAxis,
1373
1570
  contextMenuOpen,
1374
- model
1571
+ model,
1572
+ dispatch
1375
1573
  ]);
1376
1574
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
1377
1575
  const extension = useMemo2(() => [
@@ -1424,7 +1622,8 @@ var GridSheet = () => {
1424
1622
  onWheelCapture: handleWheel,
1425
1623
  onKeyDown: handleKeyDown,
1426
1624
  onContextMenu: handleContextMenu,
1427
- overscroll: "inline",
1625
+ onClick: handleClick,
1626
+ overscroll: "trap",
1428
1627
  className: "[--dx-grid-base:var(--surface-bg)]",
1429
1628
  activeRefs,
1430
1629
  ref: setDxGrid
@@ -1439,18 +1638,17 @@ var GridSheet = () => {
1439
1638
  sideOffset: 4,
1440
1639
  collisionPadding: 8
1441
1640
  }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1442
- onClick: () => handleAxisMenuAction("add-before")
1641
+ onClick: () => handleAxisMenuAction("insert-before")
1443
1642
  }, /* @__PURE__ */ React4.createElement(Icon, {
1444
1643
  size: 5,
1445
1644
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1446
1645
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1447
- onClick: () => handleAxisMenuAction("add-after")
1646
+ onClick: () => handleAxisMenuAction("insert-after")
1448
1647
  }, /* @__PURE__ */ React4.createElement(Icon, {
1449
1648
  size: 5,
1450
1649
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1451
1650
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1452
- disabled: true,
1453
- onClick: () => handleAxisMenuAction("remove")
1651
+ onClick: () => handleAxisMenuAction("drop")
1454
1652
  }, /* @__PURE__ */ React4.createElement(Icon, {
1455
1653
  size: 5,
1456
1654
  icon: "ph--backspace--regular"
@@ -1468,4 +1666,4 @@ export {
1468
1666
  RangeList,
1469
1667
  SheetContainer
1470
1668
  };
1471
- //# sourceMappingURL=chunk-I2DKJ72A.mjs.map
1669
+ //# sourceMappingURL=chunk-CYOQA6UK.mjs.map