@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
@@ -1,11 +1,41 @@
1
- import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
1
+ import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides, IntentData } from '@dxos/app-framework';
2
2
  import { ref, S } from '@dxos/echo-schema';
3
3
  import { type SchemaProvides } from '@dxos/plugin-client';
4
4
  import { type MarkdownExtensionProvides } from '@dxos/plugin-markdown';
5
5
  import { type SpaceInitProvides } from '@dxos/plugin-space';
6
6
  import { type StackProvides } from '@dxos/plugin-stack';
7
+ import { type DxGridAxis } from '@dxos/react-ui-grid';
8
+ import { type SheetModel } from './model';
7
9
  export declare enum SheetAction {
8
- CREATE = "dxos.org/plugin/sheet/action/create"
10
+ CREATE = "dxos.org/plugin/sheet/action/create",
11
+ INSERT_AXIS = "dxos.org/plugin/sheet/action/axis-insert",
12
+ DROP_AXIS = "dxos.org/plugin/sheet/action/axis-drop"
13
+ }
14
+ export type RestoreAxis = {
15
+ axis: DxGridAxis;
16
+ axisIndex: string;
17
+ index: number;
18
+ axisMeta?: S.Schema.Type<typeof RowColumnMeta>;
19
+ values: CellScalarValue[];
20
+ };
21
+ export declare namespace SheetAction {
22
+ type Create = IntentData<{
23
+ sheet: SheetType;
24
+ }>;
25
+ type InsertAxis = IntentData<{
26
+ model: SheetModel;
27
+ axis: DxGridAxis;
28
+ index: number;
29
+ count?: number;
30
+ }>;
31
+ type DropAxis = IntentData<{
32
+ model: SheetModel;
33
+ axis: DxGridAxis;
34
+ axisIndex: string;
35
+ }>;
36
+ type DropAxisRestore = IntentData<RestoreAxis & {
37
+ model: SheetModel;
38
+ }>;
9
39
  }
10
40
  type ThreadProvides<T> = {
11
41
  thread: {
@@ -48,9 +78,9 @@ declare const SheetType_base: import("@dxos/echo-schema").AbstractTypedObject<{
48
78
  };
49
79
  };
50
80
  ranges: {
81
+ readonly key: string;
51
82
  readonly value: string;
52
83
  readonly range: string;
53
- readonly key: string;
54
84
  }[];
55
85
  threads?: import("@dxos/echo-schema").Ref<{
56
86
  name?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,oBAAY,WAAW;IACrB,MAAM,wCAA2B;CAClC;AAKD,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,MAAM,EAAE;QACN,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;QAClC,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;KAC9F,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAC/C,sBAAsB,GACtB,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,cAAc,CAAC,SAAS,CAAC,CAAC;AAE5B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D,eAAO,MAAM,SAAS;;EAKpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC;AAGxD,eAAO,MAAM,KAAK;;;;EAIhB,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;AAGhD,eAAO,MAAM,aAAa;;EAExB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqCgR,CAAC;;oBAA8D,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAvoB,CAAC;;oBAA8D,CAAC;uBAAyC,CAAC;wBAAwD,CAAC;;;;;;;;2BAAsP,CAAC;qBAAuC,CAAC;;iBAA8C,CAAC;sBAA4E,CAAC;;;mBAAwE,CAAC;;;;;;;;AAlC15B,qBAAa,SAAU,SAAQ,cAuB7B;CAAG;AAEL,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-sheet",
3
- "version": "0.6.14-main.8b352a0",
3
+ "version": "0.6.14-staging.8758a12",
4
4
  "description": "Braneframe sketch plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -69,32 +69,32 @@
69
69
  "re-resizable": "^6.9.17",
70
70
  "react-markdown": "^8.0.5",
71
71
  "react-resize-detector": "^11.0.1",
72
- "@dxos/app-framework": "0.6.14-main.8b352a0",
73
- "@dxos/async": "0.6.14-main.8b352a0",
74
- "@dxos/client": "0.6.14-main.8b352a0",
75
- "@dxos/crypto": "0.6.14-main.8b352a0",
76
- "@dxos/context": "0.6.14-main.8b352a0",
77
- "@dxos/debug": "0.6.14-main.8b352a0",
78
- "@dxos/echo-schema": "0.6.14-main.8b352a0",
79
- "@dxos/invariant": "0.6.14-main.8b352a0",
80
- "@dxos/keys": "0.6.14-main.8b352a0",
81
- "@dxos/log": "0.6.14-main.8b352a0",
82
- "@dxos/plugin-attention": "0.6.14-main.8b352a0",
83
- "@dxos/plugin-client": "0.6.14-main.8b352a0",
84
- "@dxos/plugin-graph": "0.6.14-main.8b352a0",
85
- "@dxos/plugin-markdown": "0.6.14-main.8b352a0",
86
- "@dxos/plugin-space": "0.6.14-main.8b352a0",
87
- "@dxos/plugin-script": "0.6.14-main.8b352a0",
88
- "@dxos/plugin-stack": "0.6.14-main.8b352a0",
89
- "@dxos/react-client": "0.6.14-main.8b352a0",
90
- "@dxos/react-hooks": "0.6.14-main.8b352a0",
91
- "@dxos/react-ui-attention": "0.6.14-main.8b352a0",
92
- "@dxos/react-ui-editor": "0.6.14-main.8b352a0",
93
- "@dxos/react-ui-data": "0.6.14-main.8b352a0",
94
- "@dxos/react-ui-grid": "0.6.14-main.8b352a0",
95
- "@dxos/schema": "0.6.14-main.8b352a0",
96
- "@dxos/util": "0.6.14-main.8b352a0",
97
- "@dxos/react-ui-list": "0.6.14-main.8b352a0"
72
+ "@dxos/app-framework": "0.6.14-staging.8758a12",
73
+ "@dxos/async": "0.6.14-staging.8758a12",
74
+ "@dxos/context": "0.6.14-staging.8758a12",
75
+ "@dxos/crypto": "0.6.14-staging.8758a12",
76
+ "@dxos/debug": "0.6.14-staging.8758a12",
77
+ "@dxos/echo-schema": "0.6.14-staging.8758a12",
78
+ "@dxos/invariant": "0.6.14-staging.8758a12",
79
+ "@dxos/client": "0.6.14-staging.8758a12",
80
+ "@dxos/keys": "0.6.14-staging.8758a12",
81
+ "@dxos/log": "0.6.14-staging.8758a12",
82
+ "@dxos/plugin-attention": "0.6.14-staging.8758a12",
83
+ "@dxos/plugin-graph": "0.6.14-staging.8758a12",
84
+ "@dxos/plugin-script": "0.6.14-staging.8758a12",
85
+ "@dxos/plugin-client": "0.6.14-staging.8758a12",
86
+ "@dxos/plugin-space": "0.6.14-staging.8758a12",
87
+ "@dxos/plugin-markdown": "0.6.14-staging.8758a12",
88
+ "@dxos/react-client": "0.6.14-staging.8758a12",
89
+ "@dxos/react-ui-attention": "0.6.14-staging.8758a12",
90
+ "@dxos/plugin-stack": "0.6.14-staging.8758a12",
91
+ "@dxos/react-hooks": "0.6.14-staging.8758a12",
92
+ "@dxos/react-ui-data": "0.6.14-staging.8758a12",
93
+ "@dxos/react-ui-editor": "0.6.14-staging.8758a12",
94
+ "@dxos/react-ui-grid": "0.6.14-staging.8758a12",
95
+ "@dxos/schema": "0.6.14-staging.8758a12",
96
+ "@dxos/util": "0.6.14-staging.8758a12",
97
+ "@dxos/react-ui-list": "0.6.14-staging.8758a12"
98
98
  },
99
99
  "devDependencies": {
100
100
  "@lezer/generator": "^1.7.1",
@@ -106,19 +106,19 @@
106
106
  "react": "~18.2.0",
107
107
  "react-dom": "~18.2.0",
108
108
  "vite": "5.4.7",
109
- "@dxos/echo-generator": "0.6.14-main.8b352a0",
110
- "@dxos/random": "0.6.14-main.8b352a0",
111
- "@dxos/react-ui-syntax-highlighter": "0.6.14-main.8b352a0",
112
- "@dxos/react-ui": "0.6.14-main.8b352a0",
113
- "@dxos/react-ui-theme": "0.6.14-main.8b352a0",
114
- "@dxos/storybook-utils": "0.6.14-main.8b352a0",
115
- "@dxos/react-ui-types": "0.6.14-main.8b352a0"
109
+ "@dxos/echo-generator": "0.6.14-staging.8758a12",
110
+ "@dxos/random": "0.6.14-staging.8758a12",
111
+ "@dxos/react-ui": "0.6.14-staging.8758a12",
112
+ "@dxos/react-ui-syntax-highlighter": "0.6.14-staging.8758a12",
113
+ "@dxos/react-ui-theme": "0.6.14-staging.8758a12",
114
+ "@dxos/react-ui-types": "0.6.14-staging.8758a12",
115
+ "@dxos/storybook-utils": "0.6.14-staging.8758a12"
116
116
  },
117
117
  "peerDependencies": {
118
118
  "react": "~18.2.0",
119
119
  "react-dom": "~18.2.0",
120
- "@dxos/react-ui": "0.6.14-main.8b352a0",
121
- "@dxos/react-ui-theme": "0.6.14-main.8b352a0"
120
+ "@dxos/react-ui": "0.6.14-staging.8758a12",
121
+ "@dxos/react-ui-theme": "0.6.14-staging.8758a12"
122
122
  },
123
123
  "publishConfig": {
124
124
  "access": "public"
@@ -175,6 +175,26 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
175
175
  case SheetAction.CREATE: {
176
176
  return { data: createSheet() };
177
177
  }
178
+ case SheetAction.INSERT_AXIS: {
179
+ const { model, axis, index, count } = intent.data as SheetAction.InsertAxis;
180
+ const _indices = model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);
181
+ return;
182
+ }
183
+ case SheetAction.DROP_AXIS: {
184
+ if (!intent.undo) {
185
+ const { model, axis, axisIndex } = intent.data as SheetAction.DropAxis;
186
+ const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
187
+ return {
188
+ undoable: {
189
+ message: translations[0]['en-US'][SHEET_PLUGIN][`${axis} dropped label`],
190
+ data: { ...undoData, model },
191
+ },
192
+ };
193
+ } else {
194
+ const { model, ...undoData } = intent.data as SheetAction.DropAxisRestore;
195
+ model[undoData.axis === 'col' ? 'restoreColumn' : 'restoreRow'](undoData);
196
+ }
197
+ }
178
198
  }
179
199
  },
180
200
  },
@@ -13,6 +13,7 @@ import React, {
13
13
  useState,
14
14
  } from 'react';
15
15
 
16
+ import { useIntentDispatcher } from '@dxos/app-framework';
16
17
  import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
17
18
  import { useAttention } from '@dxos/react-ui-attention';
18
19
  import {
@@ -21,7 +22,8 @@ import {
21
22
  Grid,
22
23
  GridCellEditor,
23
24
  type DxGridElement,
24
- type EditorKeysProps,
25
+ type EditorKeyHandler,
26
+ type EditorBlurHandler,
25
27
  type GridContentProps,
26
28
  type DxGridPosition,
27
29
  } from '@dxos/react-ui-grid';
@@ -31,6 +33,7 @@ import { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from
31
33
  import { rangeExtension, sheetExtension, type RangeController } from '../../extensions';
32
34
  import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
33
35
  import { SHEET_PLUGIN } from '../../meta';
36
+ import { SheetAction } from '../../types';
34
37
  import { useSheetContext } from '../SheetContext';
35
38
 
36
39
  const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
@@ -57,10 +60,12 @@ const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: {
57
60
 
58
61
  export const GridSheet = () => {
59
62
  const { t } = useTranslation(SHEET_PLUGIN);
60
- const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } =
61
- useSheetContext();
62
- // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
63
+ const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
64
+ // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
65
+ // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
63
66
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
67
+ const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
68
+ const dispatch = useIntentDispatcher();
64
69
  const rangeController = useRef<RangeController>();
65
70
  const { hasAttention } = useAttention(id);
66
71
 
@@ -68,8 +73,15 @@ export const GridSheet = () => {
68
73
  (event: FocusEvent) => {
69
74
  if (!editing) {
70
75
  const cell = closestCell(event.target);
71
- if (cell && cell.plane === 'grid') {
72
- setCursor({ col: cell.col, row: cell.row });
76
+ if (cell) {
77
+ if (cell.plane === 'grid') {
78
+ setCursor({ col: cell.col, row: cell.row });
79
+ setExtraplanarFocus(null);
80
+ } else {
81
+ setExtraplanarFocus(cell);
82
+ }
83
+ } else {
84
+ setExtraplanarFocus(null);
73
85
  }
74
86
  }
75
87
  },
@@ -77,29 +89,27 @@ export const GridSheet = () => {
77
89
  );
78
90
 
79
91
  // TODO(burdon): Validate formula before closing: hf.validateFormula();
80
- const handleClose = useCallback<NonNullable<EditorKeysProps['onClose']> | NonNullable<EditorKeysProps['onNav']>>(
81
- (value, { key, shift }) => {
82
- if (value !== undefined) {
83
- model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);
92
+ const handleClose = useCallback<EditorKeyHandler>(
93
+ (_value, event) => {
94
+ if (event) {
95
+ const { key, shift } = event;
96
+ const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)
97
+ ? 'row'
98
+ : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)
99
+ ? 'col'
100
+ : undefined;
101
+ const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
102
+ dxGrid?.refocus(axis, delta);
84
103
  }
85
- setEditing(null);
86
- const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)
87
- ? 'row'
88
- : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)
89
- ? 'col'
90
- : undefined;
91
- const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
92
- dxGrid?.refocus(axis, delta);
93
104
  },
94
105
  [model, editing, dxGrid],
95
106
  );
96
107
 
97
- const handleBlur = useCallback(
98
- (value?: string) => {
108
+ const handleBlur = useCallback<EditorBlurHandler>(
109
+ (value) => {
99
110
  if (value !== undefined) {
100
111
  model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);
101
112
  }
102
- setEditing(null);
103
113
  },
104
114
  [model, editing],
105
115
  );
@@ -144,6 +154,34 @@ export const GridSheet = () => {
144
154
  [hasAttention],
145
155
  );
146
156
 
157
+ const selectEntireAxis = useCallback(
158
+ (pos: DxGridPosition) => {
159
+ switch (pos.plane) {
160
+ case 'frozenRowsStart':
161
+ return dxGrid?.setSelection({
162
+ start: { col: pos.col, row: 0, plane: 'grid' },
163
+ end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },
164
+ });
165
+ case 'frozenColsStart':
166
+ return dxGrid?.setSelection({
167
+ start: { row: pos.row, col: 0, plane: 'grid' },
168
+ end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },
169
+ });
170
+ }
171
+ },
172
+ [dxGrid, model.sheet],
173
+ );
174
+
175
+ const handleClick = useCallback(
176
+ (event: MouseEvent) => {
177
+ const cell = closestCell(event.target);
178
+ if (cell) {
179
+ selectEntireAxis(cell);
180
+ }
181
+ },
182
+ [selectEntireAxis],
183
+ );
184
+
147
185
  const handleKeyDown = useCallback(
148
186
  (event: KeyboardEvent) => {
149
187
  switch (event.key) {
@@ -151,6 +189,16 @@ export const GridSheet = () => {
151
189
  case 'Delete':
152
190
  event.preventDefault();
153
191
  return cursorFallbackRange && model.clear(cursorFallbackRange);
192
+ case 'Enter':
193
+ case 'Space':
194
+ if (dxGrid && extraplanarFocus) {
195
+ switch (extraplanarFocus.plane) {
196
+ case 'frozenRowsStart':
197
+ case 'frozenColsStart':
198
+ event.preventDefault();
199
+ return selectEntireAxis(extraplanarFocus);
200
+ }
201
+ }
154
202
  }
155
203
  if (event.metaKey || event.ctrlKey) {
156
204
  switch (event.key) {
@@ -176,7 +224,7 @@ export const GridSheet = () => {
176
224
  }
177
225
  }
178
226
  },
179
- [cursorFallbackRange, model, cursor],
227
+ [cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],
180
228
  );
181
229
 
182
230
  const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);
@@ -193,20 +241,31 @@ export const GridSheet = () => {
193
241
  }, []);
194
242
 
195
243
  const handleAxisMenuAction = useCallback(
196
- (operation: 'add-before' | 'add-after' | 'remove') => {
244
+ (operation: 'insert-before' | 'insert-after' | 'drop') => {
197
245
  switch (operation) {
198
- case 'add-before':
199
- case 'add-after':
200
- model[contextMenuAxis === 'col' ? 'insertColumns' : 'insertRows'](
201
- contextMenuOpen![contextMenuAxis] + (operation === 'add-before' ? 0 : 1),
202
- 1,
203
- );
246
+ case 'insert-before':
247
+ case 'insert-after':
248
+ return dispatch({
249
+ action: SheetAction.INSERT_AXIS,
250
+ data: {
251
+ model,
252
+ axis: contextMenuAxis,
253
+ index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
254
+ } satisfies SheetAction.InsertAxis,
255
+ });
204
256
  break;
205
- case 'remove':
206
- // console.warn('[model does not implement]');
257
+ case 'drop':
258
+ return dispatch({
259
+ action: SheetAction.DROP_AXIS,
260
+ data: {
261
+ model,
262
+ axis: contextMenuAxis,
263
+ axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
264
+ } satisfies SheetAction.DropAxis,
265
+ });
207
266
  }
208
267
  },
209
- [contextMenuAxis, contextMenuOpen, model],
268
+ [contextMenuAxis, contextMenuOpen, model, dispatch],
210
269
  );
211
270
 
212
271
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
@@ -257,7 +316,8 @@ export const GridSheet = () => {
257
316
  onWheelCapture={handleWheel}
258
317
  onKeyDown={handleKeyDown}
259
318
  onContextMenu={handleContextMenu}
260
- overscroll='inline'
319
+ onClick={handleClick}
320
+ overscroll='trap'
261
321
  className='[--dx-grid-base:var(--surface-bg)]'
262
322
  activeRefs={activeRefs}
263
323
  ref={setDxGrid}
@@ -270,21 +330,21 @@ export const GridSheet = () => {
270
330
  <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />
271
331
  <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>
272
332
  <DropdownMenu.Viewport>
273
- <DropdownMenu.Item onClick={() => handleAxisMenuAction('add-before')}>
333
+ <DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-before')}>
274
334
  <Icon
275
335
  size={5}
276
336
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
277
337
  />
278
338
  <span>{t(`add ${contextMenuAxis} before label`)}</span>
279
339
  </DropdownMenu.Item>
280
- <DropdownMenu.Item onClick={() => handleAxisMenuAction('add-after')}>
340
+ <DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>
281
341
  <Icon
282
342
  size={5}
283
343
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
284
344
  />
285
345
  <span>{t(`add ${contextMenuAxis} after label`)}</span>
286
346
  </DropdownMenu.Item>
287
- <DropdownMenu.Item disabled onClick={() => handleAxisMenuAction('remove')}>
347
+ <DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>
288
348
  <Icon size={5} icon='ph--backspace--regular' />
289
349
  <span>{t(`delete ${contextMenuAxis} label`)}</span>
290
350
  </DropdownMenu.Item>
@@ -67,16 +67,18 @@ const projectCellProps = (model: SheetModel, col: number, row: number): DxGridCe
67
67
  })
68
68
  .map((thread) => fullyQualifiedId(thread!))
69
69
  .join(' ');
70
- const type = model.getValueType(address);
70
+
71
+ const description = model.getValueDescription(address);
72
+ const type = description?.type;
73
+ const format = description?.format;
71
74
  const classNames = ranges?.map(cellClassNameForRange).reverse();
72
75
 
73
76
  return {
74
- value: parseValue(type, rawValue),
75
- className: mx(cellClassesForFieldType(type), threadRefs && commentedClassName, classNames),
77
+ value: parseValue({ type, format, value: rawValue }),
78
+ className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),
76
79
  dataRefs: threadRefs,
77
80
  };
78
81
  };
79
-
80
82
  const gridCellGetter = (model: SheetModel) => {
81
83
  // TODO(thure): Actually use the cache.
82
84
  const cachedGridCells: DxGridPlaneCells = {};
@@ -129,7 +131,7 @@ export const useSheetModelDxGridProps = (
129
131
  model: SheetModel,
130
132
  ): Pick<GridContentProps, 'columns' | 'rows'> => {
131
133
  const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));
132
- const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridColumns(model));
134
+ const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));
133
135
 
134
136
  useEffect(() => {
135
137
  const cellsAccessor = createDocAccessor(model.sheet, ['cells']);
@@ -140,7 +142,11 @@ export const useSheetModelDxGridProps = (
140
142
  dxGrid?.requestUpdate('initialCells');
141
143
  };
142
144
  cellsAccessor.handle.addListener('change', handleCellsUpdate);
143
- return () => cellsAccessor.handle.removeListener('change', handleCellsUpdate);
145
+ const unsubscribe = model.graph.update.on(handleCellsUpdate);
146
+ return () => {
147
+ cellsAccessor.handle.removeListener('change', handleCellsUpdate);
148
+ unsubscribe();
149
+ };
144
150
  }, [model, dxGrid]);
145
151
 
146
152
  useEffect(() => {
@@ -158,7 +164,7 @@ export const useSheetModelDxGridProps = (
158
164
  columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);
159
165
  rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);
160
166
  };
161
- }, [model]);
167
+ }, [model, dxGrid]);
162
168
 
163
169
  return { columns, rows };
164
170
  };
@@ -11,6 +11,7 @@ import { withTheme, withLayout } from '@dxos/storybook-utils';
11
11
 
12
12
  import { SheetContainer } from './SheetContainer';
13
13
  import { createTestCells, useTestSheet, withComputeGraphDecorator } from '../../testing';
14
+ import translations from '../../translations';
14
15
  import { SheetType } from '../../types';
15
16
  import { useComputeGraph } from '../ComputeGraph';
16
17
 
@@ -38,6 +39,7 @@ const meta: Meta = {
38
39
  classNames: 'grid grid-cols-1 grid-rows-[min-content_minmax(0,1fr)_min-content]',
39
40
  }),
40
41
  ],
42
+ parameters: { translations },
41
43
  };
42
44
 
43
45
  export default meta;