@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.3e2eaca

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/lib/browser/{SheetContainer-R65IDJHN.mjs → SheetContainer-P3NF5KEI.mjs} +49 -43
  2. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-4LKIURJA.mjs} +283 -84
  4. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-5KVQ5IPW.mjs → chunk-BVUN7SHF.mjs} +4 -2
  6. package/dist/lib/browser/chunk-BVUN7SHF.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-MPFKXY26.cjs} +67 -62
  18. package/dist/lib/node/SheetContainer-MPFKXY26.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-OO24XJBV.cjs} +318 -120
  26. package/dist/lib/node/chunk-OO24XJBV.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-22IOAW3B.mjs} +49 -43
  37. package/dist/lib/node-esm/SheetContainer-22IOAW3B.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-25V7WY4R.mjs → chunk-BW36PM2Y.mjs} +283 -84
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-XBEHKYO7.mjs → chunk-CR4K75EL.mjs} +51 -17
  43. package/dist/lib/node-esm/chunk-CR4K75EL.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/FunctionEditor/FunctionEditor.d.ts.map +1 -1
  54. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  55. package/dist/types/src/components/GridSheet/util.d.ts +1 -0
  56. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  57. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  58. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Toolbar/Toolbar.d.ts +5 -2
  60. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  61. package/dist/types/src/components/index.d.ts.map +1 -1
  62. package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
  63. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
  64. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
  65. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
  66. package/dist/types/src/defs/sheet-range-types.d.ts +1 -1
  67. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  68. package/dist/types/src/defs/util.d.ts +1 -1
  69. package/dist/types/src/defs/util.d.ts.map +1 -1
  70. package/dist/types/src/meta.d.ts +1 -0
  71. package/dist/types/src/meta.d.ts.map +1 -1
  72. package/dist/types/src/model/sheet-model.d.ts +12 -5
  73. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  74. package/dist/types/src/translations.d.ts +10 -5
  75. package/dist/types/src/translations.d.ts.map +1 -1
  76. package/dist/types/src/types.d.ts +33 -3
  77. package/dist/types/src/types.d.ts.map +1 -1
  78. package/package.json +37 -36
  79. package/src/SheetPlugin.tsx +20 -0
  80. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
  81. package/src/components/GridSheet/GridSheet.tsx +102 -38
  82. package/src/components/GridSheet/util.ts +19 -9
  83. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
  84. package/src/components/SheetContainer/SheetContainer.tsx +9 -8
  85. package/src/components/Toolbar/Toolbar.tsx +62 -53
  86. package/src/compute-graph/compute-graph.ts +22 -7
  87. package/src/compute-graph/functions/async-function.ts +1 -0
  88. package/src/compute-graph/functions/edge-function.ts +5 -3
  89. package/src/defs/sheet-range-types.ts +4 -2
  90. package/src/defs/util.ts +1 -0
  91. package/src/meta.ts +1 -0
  92. package/src/model/sheet-model.test.ts +5 -3
  93. package/src/model/sheet-model.ts +93 -21
  94. package/src/translations.ts +10 -5
  95. package/src/types.ts +20 -0
  96. package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +0 -7
  98. package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +0 -7
  100. package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +0 -7
  101. package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +0 -7
  102. package/dist/lib/node/chunk-DEPJHN47.cjs.map +0 -7
  103. package/dist/lib/node/chunk-JF5XNTF3.cjs.map +0 -7
  104. package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +0 -7
  105. package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +0 -7
  106. package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +0 -7
  107. package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +0 -7
  108. /package/dist/lib/browser/{compute-graph-SJT67236.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  109. /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,9 +975,10 @@ var SheetProvider = ({ children, graph, sheet, readonly, onInfo }) => {
868
975
 
869
976
  // packages/plugins/plugin-sheet/src/components/GridSheet/GridSheet.tsx
870
977
  import React4, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState4 } from "react";
978
+ import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
871
979
  import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
872
980
  import { useAttention } from "@dxos/react-ui-attention";
873
- import { closestCell, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
981
+ import { closestCell, defaultSizeRow, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
874
982
 
875
983
  // packages/plugins/plugin-sheet/src/components/GridSheet/util.ts
876
984
  import { useEffect as useEffect3, useState as useState3 } from "react";
@@ -928,7 +1036,7 @@ var RangeList = ({ sheet }) => {
928
1036
  };
929
1037
 
930
1038
  // packages/plugins/plugin-sheet/src/components/index.ts
931
- var SheetContainer = lazy(() => import("./SheetContainer-R65IDJHN.mjs"));
1039
+ var SheetContainer = lazy(() => import("./SheetContainer-P3NF5KEI.mjs"));
932
1040
 
933
1041
  // packages/plugins/plugin-sheet/src/integrations/thread-ranges.ts
934
1042
  var completeCellRangeToThreadCursor = (range) => {
@@ -1068,11 +1176,20 @@ var projectCellProps = (model, col, row) => {
1068
1176
  const range = thread?.anchor && parseThreadAnchorAsCellRange(thread.anchor);
1069
1177
  return thread && range ? inRange(range, address) : false;
1070
1178
  }).map((thread) => fullyQualifiedId3(thread)).join(" ");
1071
- const 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
  };
@@ -1095,11 +1212,12 @@ var gridCellGetter = (model) => {
1095
1212
  };
1096
1213
  var rowLabelCell = (row) => ({
1097
1214
  value: rowToA1Notation(row),
1098
- className: "text-end !pie-1",
1215
+ className: "text-end !pie-1 text-subdued",
1099
1216
  resizeHandle: "row"
1100
1217
  });
1101
1218
  var colLabelCell = (col) => ({
1102
1219
  value: colToA1Notation(col),
1220
+ className: "text-subdued",
1103
1221
  resizeHandle: "col"
1104
1222
  });
1105
1223
  var cellGetter = (model) => {
@@ -1131,7 +1249,7 @@ var cellGetter = (model) => {
1131
1249
  };
1132
1250
  var useSheetModelDxGridProps = (dxGrid, model) => {
1133
1251
  const [columns, setColumns] = useState3(createDxGridColumns(model));
1134
- const [rows, setRows] = useState3(createDxGridColumns(model));
1252
+ const [rows, setRows] = useState3(createDxGridRows(model));
1135
1253
  useEffect3(() => {
1136
1254
  const cellsAccessor = createDocAccessor(model.sheet, [
1137
1255
  "cells"
@@ -1143,7 +1261,11 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1143
1261
  dxGrid?.requestUpdate("initialCells");
1144
1262
  };
1145
1263
  cellsAccessor.handle.addListener("change", handleCellsUpdate);
1146
- 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
+ };
1147
1269
  }, [
1148
1270
  model,
1149
1271
  dxGrid
@@ -1168,7 +1290,8 @@ var useSheetModelDxGridProps = (dxGrid, model) => {
1168
1290
  rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
1169
1291
  };
1170
1292
  }, [
1171
- model
1293
+ model,
1294
+ dxGrid
1172
1295
  ]);
1173
1296
  return {
1174
1297
  columns,
@@ -1203,11 +1326,11 @@ var frozen = {
1203
1326
  };
1204
1327
  var sheetRowDefault = {
1205
1328
  frozenRowsStart: {
1206
- size: 32,
1329
+ size: defaultSizeRow,
1207
1330
  readonly: true
1208
1331
  },
1209
1332
  grid: {
1210
- size: 32,
1333
+ size: defaultSizeRow,
1211
1334
  resizeable: true
1212
1335
  }
1213
1336
  };
@@ -1223,42 +1346,50 @@ var sheetColDefault = {
1223
1346
  };
1224
1347
  var GridSheet = () => {
1225
1348
  const { t } = useTranslation2(SHEET_PLUGIN);
1226
- const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1349
+ const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1227
1350
  const [dxGrid, setDxGrid] = useState4(null);
1351
+ const [extraplanarFocus, setExtraplanarFocus] = useState4(null);
1352
+ const dispatch = useIntentDispatcher2();
1228
1353
  const rangeController = useRef();
1229
1354
  const { hasAttention } = useAttention(id);
1230
1355
  const handleFocus = useCallback4((event) => {
1231
1356
  if (!editing) {
1232
1357
  const cell = closestCell(event.target);
1233
- if (cell && cell.plane === "grid") {
1234
- setCursor({
1235
- col: cell.col,
1236
- row: cell.row
1237
- });
1358
+ if (cell) {
1359
+ if (cell.plane === "grid") {
1360
+ setCursor({
1361
+ col: cell.col,
1362
+ row: cell.row
1363
+ });
1364
+ setExtraplanarFocus(null);
1365
+ } else {
1366
+ setExtraplanarFocus(cell);
1367
+ }
1368
+ } else {
1369
+ setExtraplanarFocus(null);
1238
1370
  }
1239
1371
  }
1240
1372
  }, [
1241
1373
  editing
1242
1374
  ]);
1243
- const handleClose = useCallback4((value, { key, shift }) => {
1244
- if (value !== void 0) {
1245
- 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);
1246
1392
  }
1247
- setEditing(null);
1248
- const axis = [
1249
- "Enter",
1250
- "ArrowUp",
1251
- "ArrowDown"
1252
- ].includes(key) ? "row" : [
1253
- "Tab",
1254
- "ArrowLeft",
1255
- "ArrowRight"
1256
- ].includes(key) ? "col" : void 0;
1257
- const delta = key.startsWith("Arrow") ? [
1258
- "ArrowUp",
1259
- "ArrowLeft"
1260
- ].includes(key) ? -1 : 1 : shift ? -1 : 1;
1261
- dxGrid?.refocus(axis, delta);
1262
1393
  }, [
1263
1394
  model,
1264
1395
  editing,
@@ -1268,7 +1399,6 @@ var GridSheet = () => {
1268
1399
  if (value !== void 0) {
1269
1400
  model.setValue(dxGridCellIndexToSheetCellAddress(editing.index), value);
1270
1401
  }
1271
- setEditing(null);
1272
1402
  }, [
1273
1403
  model,
1274
1404
  editing
@@ -1314,12 +1444,63 @@ var GridSheet = () => {
1314
1444
  }, [
1315
1445
  hasAttention
1316
1446
  ]);
1447
+ const selectEntireAxis = useCallback4((pos) => {
1448
+ switch (pos.plane) {
1449
+ case "frozenRowsStart":
1450
+ return dxGrid?.setSelection({
1451
+ start: {
1452
+ col: pos.col,
1453
+ row: 0,
1454
+ plane: "grid"
1455
+ },
1456
+ end: {
1457
+ col: pos.col,
1458
+ row: model.sheet.rows.length - 1,
1459
+ plane: "grid"
1460
+ }
1461
+ });
1462
+ case "frozenColsStart":
1463
+ return dxGrid?.setSelection({
1464
+ start: {
1465
+ row: pos.row,
1466
+ col: 0,
1467
+ plane: "grid"
1468
+ },
1469
+ end: {
1470
+ row: pos.row,
1471
+ col: model.sheet.columns.length - 1,
1472
+ plane: "grid"
1473
+ }
1474
+ });
1475
+ }
1476
+ }, [
1477
+ dxGrid,
1478
+ model.sheet
1479
+ ]);
1480
+ const handleClick = useCallback4((event) => {
1481
+ const cell = closestCell(event.target);
1482
+ if (cell) {
1483
+ selectEntireAxis(cell);
1484
+ }
1485
+ }, [
1486
+ selectEntireAxis
1487
+ ]);
1317
1488
  const handleKeyDown = useCallback4((event) => {
1318
1489
  switch (event.key) {
1319
1490
  case "Backspace":
1320
1491
  case "Delete":
1321
1492
  event.preventDefault();
1322
1493
  return cursorFallbackRange && model.clear(cursorFallbackRange);
1494
+ case "Enter":
1495
+ case "Space":
1496
+ if (dxGrid && extraplanarFocus) {
1497
+ switch (extraplanarFocus.plane) {
1498
+ case "frozenRowsStart":
1499
+ case "frozenColsStart":
1500
+ event.preventDefault();
1501
+ return selectEntireAxis(extraplanarFocus);
1502
+ }
1503
+ }
1323
1504
  }
1324
1505
  if (event.metaKey || event.ctrlKey) {
1325
1506
  switch (event.key) {
@@ -1347,7 +1528,9 @@ var GridSheet = () => {
1347
1528
  }, [
1348
1529
  cursorFallbackRange,
1349
1530
  model,
1350
- cursor
1531
+ cursor,
1532
+ extraplanarFocus,
1533
+ selectEntireAxis
1351
1534
  ]);
1352
1535
  const contextMenuAnchorRef = useRef(null);
1353
1536
  const [contextMenuOpen, setContextMenuOpen] = useState4(null);
@@ -1362,16 +1545,32 @@ var GridSheet = () => {
1362
1545
  }, []);
1363
1546
  const handleAxisMenuAction = useCallback4((operation) => {
1364
1547
  switch (operation) {
1365
- case "add-before":
1366
- case "add-after":
1367
- 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
+ });
1368
1558
  break;
1369
- 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
+ });
1370
1568
  }
1371
1569
  }, [
1372
1570
  contextMenuAxis,
1373
1571
  contextMenuOpen,
1374
- model
1572
+ model,
1573
+ dispatch
1375
1574
  ]);
1376
1575
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
1377
1576
  const extension = useMemo2(() => [
@@ -1424,8 +1623,9 @@ var GridSheet = () => {
1424
1623
  onWheelCapture: handleWheel,
1425
1624
  onKeyDown: handleKeyDown,
1426
1625
  onContextMenu: handleContextMenu,
1427
- overscroll: "inline",
1428
- className: "[--dx-grid-base:var(--surface-bg)]",
1626
+ onClick: handleClick,
1627
+ overscroll: "trap",
1628
+ className: "[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-separator",
1429
1629
  activeRefs,
1430
1630
  ref: setDxGrid
1431
1631
  }), /* @__PURE__ */ React4.createElement(DropdownMenu.Root, {
@@ -1439,18 +1639,17 @@ var GridSheet = () => {
1439
1639
  sideOffset: 4,
1440
1640
  collisionPadding: 8
1441
1641
  }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1442
- onClick: () => handleAxisMenuAction("add-before")
1642
+ onClick: () => handleAxisMenuAction("insert-before")
1443
1643
  }, /* @__PURE__ */ React4.createElement(Icon, {
1444
1644
  size: 5,
1445
1645
  icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
1446
1646
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1447
- onClick: () => handleAxisMenuAction("add-after")
1647
+ onClick: () => handleAxisMenuAction("insert-after")
1448
1648
  }, /* @__PURE__ */ React4.createElement(Icon, {
1449
1649
  size: 5,
1450
1650
  icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
1451
1651
  }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
1452
- disabled: true,
1453
- onClick: () => handleAxisMenuAction("remove")
1652
+ onClick: () => handleAxisMenuAction("drop")
1454
1653
  }, /* @__PURE__ */ React4.createElement(Icon, {
1455
1654
  size: 5,
1456
1655
  icon: "ph--backspace--regular"
@@ -1468,4 +1667,4 @@ export {
1468
1667
  RangeList,
1469
1668
  SheetContainer
1470
1669
  };
1471
- //# sourceMappingURL=chunk-I2DKJ72A.mjs.map
1670
+ //# sourceMappingURL=chunk-4LKIURJA.mjs.map