@dxos/plugin-sheet 0.6.14-main.7bd9c89 → 0.6.14-staging.54a8bab
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{SheetContainer-AKWROARP.mjs → SheetContainer-JZEKRM4Z.mjs} +83 -76
- package/dist/lib/browser/SheetContainer-JZEKRM4Z.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BWN5DZWZ.mjs → chunk-BVUN7SHF.mjs} +6 -13
- package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FGMFOW6U.mjs → chunk-G2FUL6PK.mjs} +791 -690
- package/dist/lib/browser/chunk-G2FUL6PK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
- package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-GSV5QNLD.mjs → chunk-VMSX6Z4X.mjs} +297 -44
- package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
- package/dist/lib/browser/{graph-M4IQ76QX.mjs → compute-graph-GGWUX644.mjs} +4 -2
- package/dist/lib/browser/index.mjs +91 -21
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{SheetContainer-N5IQGEFL.cjs → SheetContainer-PJE74VO4.cjs} +81 -81
- package/dist/lib/node/SheetContainer-PJE74VO4.cjs.map +7 -0
- package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
- package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
- package/dist/lib/node/{chunk-NZARD7UP.cjs → chunk-AWKOWDMI.cjs} +10 -17
- package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
- package/dist/lib/node/{chunk-5XPK2V4A.cjs → chunk-O7XR4R7Y.cjs} +306 -42
- package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
- package/dist/lib/node/{chunk-53BMSUIK.cjs → chunk-STZ7S7RF.cjs} +755 -668
- package/dist/lib/node/chunk-STZ7S7RF.cjs.map +7 -0
- package/dist/lib/node/{graph-Q3N2X26H.cjs → compute-graph-KGWA2QLE.cjs} +21 -19
- package/dist/lib/node/compute-graph-KGWA2QLE.cjs.map +7 -0
- package/dist/lib/node/index.cjs +109 -42
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +7 -7
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-46PBMF2E.mjs → SheetContainer-R73XEXHU.mjs} +83 -76
- package/dist/lib/node-esm/SheetContainer-R73XEXHU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-5WPZCXNS.mjs → chunk-CR4K75EL.mjs} +296 -44
- package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-WFDTY3IC.mjs → chunk-UIBWRHW7.mjs} +6 -13
- package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-T3PRH7QS.mjs → chunk-V5N3Y2O5.mjs} +791 -690
- package/dist/lib/node-esm/chunk-V5N3Y2O5.mjs.map +7 -0
- package/dist/lib/node-esm/{graph-SMPUMOV2.mjs → compute-graph-2SCZT7N5.mjs} +4 -2
- package/dist/lib/node-esm/index.mjs +91 -21
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/meta.mjs +1 -1
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +3 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts +1 -2
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/RangeList/RangeList.d.ts +7 -0
- package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -0
- package/dist/types/src/components/RangeList/index.d.ts +2 -0
- package/dist/types/src/components/RangeList/index.d.ts.map +1 -0
- package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +6 -3
- package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SheetContext/SheetContext.d.ts +7 -5
- package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +6 -3
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +5 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/compute-graph/compute-graph-registry.d.ts.map +1 -0
- package/dist/types/src/{graph → compute-graph}/compute-graph.d.ts +3 -3
- package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -0
- package/dist/types/src/compute-graph/compute-graph.stories.d.ts.map +1 -0
- package/dist/types/src/compute-graph/compute-graph.test.d.ts.map +1 -0
- package/dist/types/src/compute-graph/compute-node.d.ts.map +1 -0
- package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -0
- package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -0
- package/dist/types/src/compute-graph/functions/function-defs.d.ts.map +1 -0
- package/dist/types/src/compute-graph/functions/index.d.ts.map +1 -0
- package/dist/types/src/compute-graph/hyperformula.test.d.ts.map +1 -0
- package/dist/types/src/compute-graph/index.d.ts.map +1 -0
- package/dist/types/src/compute-graph/testing/index.d.ts.map +1 -0
- package/dist/types/src/compute-graph/testing/test-builder.d.ts.map +1 -0
- package/dist/types/src/compute-graph/testing/test-plugin.d.ts.map +1 -0
- package/dist/types/src/compute-graph/util.d.ts.map +1 -0
- package/dist/types/src/defs/index.d.ts +1 -1
- package/dist/types/src/defs/index.d.ts.map +1 -1
- package/dist/types/src/defs/sheet-range-types.d.ts +2 -2
- package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
- package/dist/types/src/defs/types.d.ts +6 -0
- package/dist/types/src/defs/types.d.ts.map +1 -1
- package/dist/types/src/defs/util.d.ts +3 -7
- package/dist/types/src/defs/util.d.ts.map +1 -1
- package/dist/types/src/extensions/compute.d.ts +1 -1
- package/dist/types/src/extensions/compute.d.ts.map +1 -1
- package/dist/types/src/extensions/editor/extension.d.ts +23 -3
- package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/integrations/index.d.ts +2 -0
- package/dist/types/src/integrations/index.d.ts.map +1 -0
- package/dist/types/src/integrations/thread-ranges.d.ts +7 -0
- package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/index.d.ts +1 -1
- package/dist/types/src/model/index.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +13 -6
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/{hooks → model}/useSheetModel.d.ts +1 -1
- package/dist/types/src/model/useSheetModel.d.ts.map +1 -0
- package/dist/types/src/serializer.d.ts +4 -0
- package/dist/types/src/serializer.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +1 -1
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +18 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +37 -33
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +43 -50
- package/src/SheetPlugin.tsx +45 -12
- package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +19 -2
- package/src/components/FunctionEditor/FunctionEditor.tsx +5 -5
- package/src/components/GridSheet/GridSheet.stories.tsx +3 -1
- package/src/components/GridSheet/GridSheet.tsx +181 -24
- package/src/components/GridSheet/SheetCellEditor.stories.tsx +1 -1
- package/src/components/GridSheet/util.ts +34 -18
- package/src/components/RangeList/RangeList.tsx +53 -0
- package/src/components/RangeList/index.ts +5 -0
- package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -3
- package/src/components/SheetContainer/SheetContainer.tsx +10 -4
- package/src/components/SheetContext/SheetContext.tsx +43 -20
- package/src/components/Toolbar/Toolbar.tsx +98 -74
- package/src/components/index.ts +1 -0
- package/src/{graph → compute-graph}/compute-graph.stories.tsx +2 -1
- package/src/{graph → compute-graph}/compute-graph.ts +27 -9
- package/src/{graph → compute-graph}/compute-node.ts +2 -3
- package/src/{graph → compute-graph}/functions/async-function.ts +1 -0
- package/src/{graph → compute-graph}/functions/edge-function.ts +5 -3
- package/src/defs/index.ts +1 -1
- package/src/defs/sheet-range-types.ts +9 -6
- package/src/defs/types.ts +6 -1
- package/src/defs/util.ts +4 -19
- package/src/extensions/compute.stories.tsx +2 -2
- package/src/extensions/compute.ts +2 -2
- package/src/extensions/editor/extension.test.ts +1 -1
- package/src/extensions/editor/extension.ts +48 -23
- package/src/index.ts +2 -2
- package/src/integrations/index.ts +5 -0
- package/src/integrations/thread-ranges.ts +101 -0
- package/src/meta.ts +1 -0
- package/src/model/index.ts +1 -1
- package/src/model/sheet-model.test.ts +6 -4
- package/src/model/sheet-model.ts +103 -26
- package/src/{hooks → model}/useSheetModel.ts +1 -1
- package/src/serializer.ts +27 -0
- package/src/testing/testing.tsx +1 -1
- package/src/translations.ts +18 -3
- package/src/types.ts +24 -2
- package/dist/lib/browser/SheetContainer-AKWROARP.mjs.map +0 -7
- package/dist/lib/browser/chunk-BWN5DZWZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-FGMFOW6U.mjs.map +0 -7
- package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-N5IQGEFL.cjs.map +0 -7
- package/dist/lib/node/chunk-53BMSUIK.cjs.map +0 -7
- package/dist/lib/node/chunk-5XPK2V4A.cjs.map +0 -7
- package/dist/lib/node/chunk-NZARD7UP.cjs.map +0 -7
- package/dist/lib/node/graph-Q3N2X26H.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-46PBMF2E.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-T3PRH7QS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WFDTY3IC.mjs.map +0 -7
- package/dist/types/src/graph/compute-graph-registry.d.ts.map +0 -1
- package/dist/types/src/graph/compute-graph.d.ts.map +0 -1
- package/dist/types/src/graph/compute-graph.stories.d.ts.map +0 -1
- package/dist/types/src/graph/compute-graph.test.d.ts.map +0 -1
- package/dist/types/src/graph/compute-node.d.ts.map +0 -1
- package/dist/types/src/graph/functions/async-function.d.ts.map +0 -1
- package/dist/types/src/graph/functions/edge-function.d.ts.map +0 -1
- package/dist/types/src/graph/functions/function-defs.d.ts.map +0 -1
- package/dist/types/src/graph/functions/index.d.ts.map +0 -1
- package/dist/types/src/graph/hyperformula.test.d.ts.map +0 -1
- package/dist/types/src/graph/index.d.ts.map +0 -1
- package/dist/types/src/graph/testing/index.d.ts.map +0 -1
- package/dist/types/src/graph/testing/test-builder.d.ts.map +0 -1
- package/dist/types/src/graph/testing/test-plugin.d.ts.map +0 -1
- package/dist/types/src/graph/util.d.ts.map +0 -1
- package/dist/types/src/hooks/hooks.stories.d.ts +0 -6
- package/dist/types/src/hooks/hooks.stories.d.ts.map +0 -1
- package/dist/types/src/hooks/index.d.ts +0 -4
- package/dist/types/src/hooks/index.d.ts.map +0 -1
- package/dist/types/src/hooks/threads.d.ts +0 -8
- package/dist/types/src/hooks/threads.d.ts.map +0 -1
- package/dist/types/src/hooks/useComputeGraph.d.ts +0 -7
- package/dist/types/src/hooks/useComputeGraph.d.ts.map +0 -1
- package/dist/types/src/hooks/useSheetModel.d.ts.map +0 -1
- package/dist/types/src/model/decorations.d.ts +0 -26
- package/dist/types/src/model/decorations.d.ts.map +0 -1
- package/src/hooks/hooks.stories.tsx +0 -53
- package/src/hooks/index.ts +0 -7
- package/src/hooks/threads.ts +0 -147
- package/src/hooks/useComputeGraph.ts +0 -28
- package/src/model/decorations.ts +0 -66
- /package/dist/lib/browser/{graph-M4IQ76QX.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
- /package/dist/lib/node-esm/{graph-SMPUMOV2.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
- /package/dist/types/src/{graph → compute-graph}/compute-graph-registry.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/compute-graph.stories.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/compute-graph.test.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/compute-node.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/functions/async-function.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/functions/edge-function.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/functions/function-defs.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/functions/index.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/hyperformula.test.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/index.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/testing/index.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/testing/test-builder.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/testing/test-plugin.d.ts +0 -0
- /package/dist/types/src/{graph → compute-graph}/util.d.ts +0 -0
- /package/src/{graph → compute-graph}/compute-graph-registry.ts +0 -0
- /package/src/{graph → compute-graph}/compute-graph.test.ts +0 -0
- /package/src/{graph → compute-graph}/functions/function-defs.ts +0 -0
- /package/src/{graph → compute-graph}/functions/index.ts +0 -0
- /package/src/{graph → compute-graph}/hyperformula.test.ts +0 -0
- /package/src/{graph → compute-graph}/index.ts +0 -0
- /package/src/{graph → compute-graph}/testing/index.ts +0 -0
- /package/src/{graph → compute-graph}/testing/test-builder.ts +0 -0
- /package/src/{graph → compute-graph}/testing/test-plugin.ts +0 -0
- /package/src/{graph → compute-graph}/util.ts +0 -0
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-sheet",
|
|
3
|
-
"version": "0.6.14-
|
|
3
|
+
"version": "0.6.14-staging.54a8bab",
|
|
4
4
|
"description": "Braneframe sketch plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "DXOS.org",
|
|
9
|
+
"sideEffects": true,
|
|
9
10
|
"imports": {
|
|
10
11
|
"#hyperformula": {
|
|
11
12
|
"types": "hyperformula",
|
|
@@ -14,28 +15,19 @@
|
|
|
14
15
|
},
|
|
15
16
|
"exports": {
|
|
16
17
|
".": {
|
|
18
|
+
"types": "./dist/types/src/index.d.ts",
|
|
17
19
|
"browser": "./dist/lib/browser/index.mjs",
|
|
18
|
-
"node":
|
|
19
|
-
"require": "./dist/lib/node/index.cjs",
|
|
20
|
-
"default": "./dist/lib/node-esm/index.mjs"
|
|
21
|
-
},
|
|
22
|
-
"types": "./dist/types/src/index.d.ts"
|
|
20
|
+
"node": "./dist/lib/node-esm/index.mjs"
|
|
23
21
|
},
|
|
24
22
|
"./meta": {
|
|
23
|
+
"types": "./dist/types/src/meta.d.ts",
|
|
25
24
|
"browser": "./dist/lib/browser/meta.mjs",
|
|
26
|
-
"node":
|
|
27
|
-
"require": "./dist/lib/node/meta.cjs",
|
|
28
|
-
"default": "./dist/lib/node-esm/meta.mjs"
|
|
29
|
-
},
|
|
30
|
-
"types": "./dist/types/src/meta.d.ts"
|
|
25
|
+
"node": "./dist/lib/node-esm/meta.mjs"
|
|
31
26
|
},
|
|
32
27
|
"./types": {
|
|
28
|
+
"types": "./dist/types/src/types.d.ts",
|
|
33
29
|
"browser": "./dist/lib/browser/types.mjs",
|
|
34
|
-
"node":
|
|
35
|
-
"require": "./dist/lib/node/types.cjs",
|
|
36
|
-
"default": "./dist/lib/node-esm/types.mjs"
|
|
37
|
-
},
|
|
38
|
-
"types": "./dist/types/src/types.d.ts"
|
|
30
|
+
"node": "./dist/lib/node-esm/types.mjs"
|
|
39
31
|
}
|
|
40
32
|
},
|
|
41
33
|
"types": "dist/types/src/index.d.ts",
|
|
@@ -77,31 +69,32 @@
|
|
|
77
69
|
"re-resizable": "^6.9.17",
|
|
78
70
|
"react-markdown": "^8.0.5",
|
|
79
71
|
"react-resize-detector": "^11.0.1",
|
|
80
|
-
"@dxos/app-framework": "0.6.14-
|
|
81
|
-
"@dxos/async": "0.6.14-
|
|
82
|
-
"@dxos/client": "0.6.14-
|
|
83
|
-
"@dxos/
|
|
84
|
-
"@dxos/debug": "0.6.14-
|
|
85
|
-
"@dxos/
|
|
86
|
-
"@dxos/echo-schema": "0.6.14-
|
|
87
|
-
"@dxos/invariant": "0.6.14-
|
|
88
|
-
"@dxos/keys": "0.6.14-
|
|
89
|
-
"@dxos/plugin-attention": "0.6.14-
|
|
90
|
-
"@dxos/
|
|
91
|
-
"@dxos/
|
|
92
|
-
"@dxos/plugin-graph": "0.6.14-
|
|
93
|
-
"@dxos/plugin-markdown": "0.6.14-
|
|
94
|
-
"@dxos/plugin-script": "0.6.14-
|
|
95
|
-
"@dxos/plugin-
|
|
96
|
-
"@dxos/
|
|
97
|
-
"@dxos/react-
|
|
98
|
-
"@dxos/react-
|
|
99
|
-
"@dxos/
|
|
100
|
-
"@dxos/react-ui-editor": "0.6.14-
|
|
101
|
-
"@dxos/react-ui-
|
|
102
|
-
"@dxos/react-ui-grid": "0.6.14-
|
|
103
|
-
"@dxos/
|
|
104
|
-
"@dxos/util": "0.6.14-
|
|
72
|
+
"@dxos/app-framework": "0.6.14-staging.54a8bab",
|
|
73
|
+
"@dxos/async": "0.6.14-staging.54a8bab",
|
|
74
|
+
"@dxos/client": "0.6.14-staging.54a8bab",
|
|
75
|
+
"@dxos/crypto": "0.6.14-staging.54a8bab",
|
|
76
|
+
"@dxos/debug": "0.6.14-staging.54a8bab",
|
|
77
|
+
"@dxos/context": "0.6.14-staging.54a8bab",
|
|
78
|
+
"@dxos/echo-schema": "0.6.14-staging.54a8bab",
|
|
79
|
+
"@dxos/invariant": "0.6.14-staging.54a8bab",
|
|
80
|
+
"@dxos/keys": "0.6.14-staging.54a8bab",
|
|
81
|
+
"@dxos/plugin-attention": "0.6.14-staging.54a8bab",
|
|
82
|
+
"@dxos/plugin-client": "0.6.14-staging.54a8bab",
|
|
83
|
+
"@dxos/log": "0.6.14-staging.54a8bab",
|
|
84
|
+
"@dxos/plugin-graph": "0.6.14-staging.54a8bab",
|
|
85
|
+
"@dxos/plugin-markdown": "0.6.14-staging.54a8bab",
|
|
86
|
+
"@dxos/plugin-script": "0.6.14-staging.54a8bab",
|
|
87
|
+
"@dxos/plugin-space": "0.6.14-staging.54a8bab",
|
|
88
|
+
"@dxos/plugin-stack": "0.6.14-staging.54a8bab",
|
|
89
|
+
"@dxos/react-client": "0.6.14-staging.54a8bab",
|
|
90
|
+
"@dxos/react-hooks": "0.6.14-staging.54a8bab",
|
|
91
|
+
"@dxos/react-ui-data": "0.6.14-staging.54a8bab",
|
|
92
|
+
"@dxos/react-ui-editor": "0.6.14-staging.54a8bab",
|
|
93
|
+
"@dxos/react-ui-attention": "0.6.14-staging.54a8bab",
|
|
94
|
+
"@dxos/react-ui-grid": "0.6.14-staging.54a8bab",
|
|
95
|
+
"@dxos/react-ui-list": "0.6.14-staging.54a8bab",
|
|
96
|
+
"@dxos/util": "0.6.14-staging.54a8bab",
|
|
97
|
+
"@dxos/schema": "0.6.14-staging.54a8bab"
|
|
105
98
|
},
|
|
106
99
|
"devDependencies": {
|
|
107
100
|
"@lezer/generator": "^1.7.1",
|
|
@@ -113,19 +106,19 @@
|
|
|
113
106
|
"react": "~18.2.0",
|
|
114
107
|
"react-dom": "~18.2.0",
|
|
115
108
|
"vite": "5.4.7",
|
|
116
|
-
"@dxos/echo-generator": "0.6.14-
|
|
117
|
-
"@dxos/react-ui": "0.6.14-
|
|
118
|
-
"@dxos/random": "0.6.14-
|
|
119
|
-
"@dxos/react-ui-
|
|
120
|
-
"@dxos/react-ui-
|
|
121
|
-
"@dxos/react-ui-types": "0.6.14-
|
|
122
|
-
"@dxos/storybook-utils": "0.6.14-
|
|
109
|
+
"@dxos/echo-generator": "0.6.14-staging.54a8bab",
|
|
110
|
+
"@dxos/react-ui": "0.6.14-staging.54a8bab",
|
|
111
|
+
"@dxos/random": "0.6.14-staging.54a8bab",
|
|
112
|
+
"@dxos/react-ui-syntax-highlighter": "0.6.14-staging.54a8bab",
|
|
113
|
+
"@dxos/react-ui-theme": "0.6.14-staging.54a8bab",
|
|
114
|
+
"@dxos/react-ui-types": "0.6.14-staging.54a8bab",
|
|
115
|
+
"@dxos/storybook-utils": "0.6.14-staging.54a8bab"
|
|
123
116
|
},
|
|
124
117
|
"peerDependencies": {
|
|
125
118
|
"react": "~18.2.0",
|
|
126
119
|
"react-dom": "~18.2.0",
|
|
127
|
-
"@dxos/react-ui": "0.6.14-
|
|
128
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
120
|
+
"@dxos/react-ui": "0.6.14-staging.54a8bab",
|
|
121
|
+
"@dxos/react-ui-theme": "0.6.14-staging.54a8bab"
|
|
129
122
|
},
|
|
130
123
|
"publishConfig": {
|
|
131
124
|
"access": "public"
|
package/src/SheetPlugin.tsx
CHANGED
|
@@ -13,12 +13,12 @@ import { SpaceAction } from '@dxos/plugin-space';
|
|
|
13
13
|
import { getSpace, isEchoObject } from '@dxos/react-client/echo';
|
|
14
14
|
import { Icon } from '@dxos/react-ui';
|
|
15
15
|
|
|
16
|
-
import { ComputeGraphContextProvider, SheetContainer } from './components';
|
|
16
|
+
import { ComputeGraphContextProvider, RangeList, SheetContainer } from './components';
|
|
17
|
+
import { type ComputeGraphRegistry } from './compute-graph';
|
|
17
18
|
import { compareIndexPositions, createSheet } from './defs';
|
|
18
19
|
import { computeGraphFacet } from './extensions';
|
|
19
|
-
import { type ComputeGraphRegistry } from './graph';
|
|
20
|
-
import { useComputeGraph } from './hooks';
|
|
21
20
|
import meta, { SHEET_PLUGIN } from './meta';
|
|
21
|
+
import { serializer } from './serializer';
|
|
22
22
|
import translations from './translations';
|
|
23
23
|
import { SheetAction, SheetType, type SheetPluginProvides } from './types';
|
|
24
24
|
|
|
@@ -38,8 +38,8 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// Async import removes direct dependency on hyperformula.
|
|
41
|
-
const { ComputeGraphRegistry } = await import('./graph');
|
|
42
|
-
computeGraphRegistry = new ComputeGraphRegistry({ remoteFunctionUrl });
|
|
41
|
+
const { defaultPlugins, ComputeGraphRegistry } = await import('./compute-graph');
|
|
42
|
+
computeGraphRegistry = new ComputeGraphRegistry({ plugins: defaultPlugins, remoteFunctionUrl });
|
|
43
43
|
},
|
|
44
44
|
provides: {
|
|
45
45
|
context: ({ children }) => {
|
|
@@ -52,6 +52,7 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
|
|
|
52
52
|
label: (object: any) => (object instanceof SheetType ? object.name : undefined),
|
|
53
53
|
placeholder: ['sheet title placeholder', { ns: SHEET_PLUGIN }],
|
|
54
54
|
icon: 'ph--grid-nine--regular',
|
|
55
|
+
serializer,
|
|
55
56
|
},
|
|
56
57
|
},
|
|
57
58
|
},
|
|
@@ -143,14 +144,26 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
|
|
|
143
144
|
surface: {
|
|
144
145
|
component: ({ data, role }) => {
|
|
145
146
|
const space = isEchoObject(data.object) ? getSpace(data.object) : undefined;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
if (!space) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
switch (role) {
|
|
152
|
+
case 'article':
|
|
153
|
+
case 'section':
|
|
154
|
+
if (data.object instanceof SheetType) {
|
|
155
|
+
return <SheetContainer space={space} sheet={data.object} role={role} />;
|
|
152
156
|
}
|
|
153
|
-
|
|
157
|
+
|
|
158
|
+
return null;
|
|
159
|
+
case 'complementary--settings':
|
|
160
|
+
if (data.subject instanceof SheetType) {
|
|
161
|
+
return {
|
|
162
|
+
node: <RangeList sheet={data.subject} />,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return null;
|
|
154
167
|
}
|
|
155
168
|
|
|
156
169
|
return null;
|
|
@@ -162,6 +175,26 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
|
|
|
162
175
|
case SheetAction.CREATE: {
|
|
163
176
|
return { data: createSheet() };
|
|
164
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
|
+
}
|
|
165
198
|
}
|
|
166
199
|
},
|
|
167
200
|
},
|
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, { createContext, type PropsWithChildren } from 'react';
|
|
5
|
+
import React, { createContext, type PropsWithChildren, useContext } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { raise } from '@dxos/debug';
|
|
8
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
9
|
+
import { useAsyncState } from '@dxos/react-hooks';
|
|
10
|
+
|
|
11
|
+
import { type ComputeGraph, type ComputeGraphRegistry } from '../../compute-graph';
|
|
8
12
|
|
|
9
13
|
export type ComputeGraphContextType = {
|
|
10
14
|
registry: ComputeGraphRegistry;
|
|
@@ -18,3 +22,16 @@ export const ComputeGraphContext = createContext<ComputeGraphContextType | undef
|
|
|
18
22
|
export const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {
|
|
19
23
|
return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;
|
|
20
24
|
};
|
|
25
|
+
|
|
26
|
+
export const useComputeGraph = (space?: Space): ComputeGraph | undefined => {
|
|
27
|
+
const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));
|
|
28
|
+
const [graph] = useAsyncState(async () => {
|
|
29
|
+
if (space) {
|
|
30
|
+
const graph = registry.getOrCreateGraph(space);
|
|
31
|
+
await graph.open();
|
|
32
|
+
return graph;
|
|
33
|
+
}
|
|
34
|
+
}, [space, registry]);
|
|
35
|
+
|
|
36
|
+
return graph;
|
|
37
|
+
};
|
|
@@ -7,19 +7,19 @@ import React from 'react';
|
|
|
7
7
|
import { Icon } from '@dxos/react-ui';
|
|
8
8
|
import { mx } from '@dxos/react-ui-theme';
|
|
9
9
|
|
|
10
|
-
import { addressToA1Notation, rangeToA1Notation } from '../../defs';
|
|
10
|
+
import { addressToA1Notation, isFormula, rangeToA1Notation } from '../../defs';
|
|
11
11
|
import { useSheetContext } from '../SheetContext';
|
|
12
12
|
|
|
13
13
|
export const FunctionEditor = () => {
|
|
14
14
|
const { model, cursor, range } = useSheetContext();
|
|
15
15
|
|
|
16
16
|
let value;
|
|
17
|
-
let
|
|
17
|
+
let formula = false;
|
|
18
18
|
if (cursor) {
|
|
19
19
|
value = model.getCellValue(cursor);
|
|
20
|
-
if (
|
|
20
|
+
if (isFormula(value)) {
|
|
21
21
|
value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));
|
|
22
|
-
|
|
22
|
+
formula = true;
|
|
23
23
|
} else if (value != null) {
|
|
24
24
|
value = String(value);
|
|
25
25
|
}
|
|
@@ -36,7 +36,7 @@ export const FunctionEditor = () => {
|
|
|
36
36
|
{(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}
|
|
37
37
|
</div>
|
|
38
38
|
<div className='flex gap-2 items-center'>
|
|
39
|
-
<Icon icon='ph--function--regular' classNames={['text-greenText',
|
|
39
|
+
<Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />
|
|
40
40
|
<span className='font-mono'>{value}</span>
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
@@ -10,9 +10,10 @@ import { withClientProvider } from '@dxos/react-client/testing';
|
|
|
10
10
|
import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
11
11
|
|
|
12
12
|
import { GridSheet } from './GridSheet';
|
|
13
|
-
import { useComputeGraph } from '../../hooks';
|
|
14
13
|
import { createTestCells, useTestSheet, withComputeGraphDecorator } from '../../testing';
|
|
14
|
+
import translations from '../../translations';
|
|
15
15
|
import { SheetType } from '../../types';
|
|
16
|
+
import { useComputeGraph } from '../ComputeGraph';
|
|
16
17
|
import { SheetProvider } from '../SheetContext';
|
|
17
18
|
|
|
18
19
|
export const Basic = () => {
|
|
@@ -39,6 +40,7 @@ const meta: Meta = {
|
|
|
39
40
|
withTheme,
|
|
40
41
|
withLayout({ fullscreen: true, tooltips: true }),
|
|
41
42
|
],
|
|
43
|
+
parameters: { translations },
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
export default meta;
|
|
@@ -2,25 +2,41 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, {
|
|
5
|
+
import React, {
|
|
6
|
+
useCallback,
|
|
7
|
+
useMemo,
|
|
8
|
+
useRef,
|
|
9
|
+
type FocusEvent,
|
|
10
|
+
type KeyboardEvent,
|
|
11
|
+
type WheelEvent,
|
|
12
|
+
type MouseEvent,
|
|
13
|
+
useState,
|
|
14
|
+
} from 'react';
|
|
6
15
|
|
|
16
|
+
import { useIntentDispatcher } from '@dxos/app-framework';
|
|
17
|
+
import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
|
|
7
18
|
import { useAttention } from '@dxos/react-ui-attention';
|
|
8
19
|
import {
|
|
9
|
-
|
|
10
|
-
Grid,
|
|
11
|
-
type GridContentProps,
|
|
20
|
+
closestCell,
|
|
12
21
|
editorKeys,
|
|
13
|
-
|
|
22
|
+
Grid,
|
|
14
23
|
GridCellEditor,
|
|
15
|
-
|
|
24
|
+
type DxGridElement,
|
|
25
|
+
type EditorKeysProps,
|
|
26
|
+
type GridContentProps,
|
|
27
|
+
type DxGridPosition,
|
|
16
28
|
} from '@dxos/react-ui-grid';
|
|
17
29
|
|
|
18
30
|
import { colLabelCell, dxGridCellIndexToSheetCellAddress, rowLabelCell, useSheetModelDxGridProps } from './util';
|
|
19
|
-
import { rangeToA1Notation, type CellRange
|
|
20
|
-
import { rangeExtension, sheetExtension, type
|
|
21
|
-
import { useUpdateFocusedCellOnThreadSelection } from '../../
|
|
31
|
+
import { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from '../../defs';
|
|
32
|
+
import { rangeExtension, sheetExtension, type RangeController } from '../../extensions';
|
|
33
|
+
import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
|
|
34
|
+
import { SHEET_PLUGIN } from '../../meta';
|
|
35
|
+
import { SheetAction } from '../../types';
|
|
22
36
|
import { useSheetContext } from '../SheetContext';
|
|
23
37
|
|
|
38
|
+
const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
|
|
39
|
+
|
|
24
40
|
const initialCells = {
|
|
25
41
|
grid: {},
|
|
26
42
|
frozenColsStart: [...Array(64)].reduce((acc, _, i) => {
|
|
@@ -42,17 +58,29 @@ const sheetRowDefault = { frozenRowsStart: { size: 32, readonly: true }, grid: {
|
|
|
42
58
|
const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };
|
|
43
59
|
|
|
44
60
|
export const GridSheet = () => {
|
|
45
|
-
const {
|
|
46
|
-
const
|
|
47
|
-
|
|
61
|
+
const { t } = useTranslation(SHEET_PLUGIN);
|
|
62
|
+
const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } =
|
|
63
|
+
useSheetContext();
|
|
64
|
+
// 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.
|
|
65
|
+
const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
|
|
66
|
+
const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
|
|
67
|
+
const dispatch = useIntentDispatcher();
|
|
68
|
+
const rangeController = useRef<RangeController>();
|
|
48
69
|
const { hasAttention } = useAttention(id);
|
|
49
70
|
|
|
50
71
|
const handleFocus = useCallback(
|
|
51
72
|
(event: FocusEvent) => {
|
|
52
73
|
if (!editing) {
|
|
53
74
|
const cell = closestCell(event.target);
|
|
54
|
-
if (cell
|
|
55
|
-
|
|
75
|
+
if (cell) {
|
|
76
|
+
if (cell.plane === 'grid') {
|
|
77
|
+
setCursor({ col: cell.col, row: cell.row });
|
|
78
|
+
setExtraplanarFocus(null);
|
|
79
|
+
} else {
|
|
80
|
+
setExtraplanarFocus(cell);
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
setExtraplanarFocus(null);
|
|
56
84
|
}
|
|
57
85
|
}
|
|
58
86
|
},
|
|
@@ -72,9 +100,19 @@ export const GridSheet = () => {
|
|
|
72
100
|
? 'col'
|
|
73
101
|
: undefined;
|
|
74
102
|
const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
|
|
75
|
-
dxGrid
|
|
103
|
+
dxGrid?.refocus(axis, delta);
|
|
76
104
|
},
|
|
77
|
-
[model, editing,
|
|
105
|
+
[model, editing, dxGrid],
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
const handleBlur = useCallback(
|
|
109
|
+
(value?: string) => {
|
|
110
|
+
if (value !== undefined) {
|
|
111
|
+
model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);
|
|
112
|
+
}
|
|
113
|
+
setEditing(null);
|
|
114
|
+
},
|
|
115
|
+
[model, editing],
|
|
78
116
|
);
|
|
79
117
|
|
|
80
118
|
const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(
|
|
@@ -100,7 +138,7 @@ export const GridSheet = () => {
|
|
|
100
138
|
}
|
|
101
139
|
if (editing) {
|
|
102
140
|
// Update range selection in formula.
|
|
103
|
-
|
|
141
|
+
rangeController.current?.setRange(rangeToA1Notation(range));
|
|
104
142
|
} else {
|
|
105
143
|
// Setting range while editing causes focus to move to null, avoid doing so.
|
|
106
144
|
setRange(range.to ? range : undefined);
|
|
@@ -108,7 +146,6 @@ export const GridSheet = () => {
|
|
|
108
146
|
},
|
|
109
147
|
[editing],
|
|
110
148
|
);
|
|
111
|
-
|
|
112
149
|
const handleWheel = useCallback(
|
|
113
150
|
(event: WheelEvent) => {
|
|
114
151
|
if (!hasAttention) {
|
|
@@ -118,14 +155,51 @@ export const GridSheet = () => {
|
|
|
118
155
|
[hasAttention],
|
|
119
156
|
);
|
|
120
157
|
|
|
158
|
+
const selectEntireAxis = useCallback(
|
|
159
|
+
(pos: DxGridPosition) => {
|
|
160
|
+
switch (pos.plane) {
|
|
161
|
+
case 'frozenRowsStart':
|
|
162
|
+
return dxGrid?.setSelection({
|
|
163
|
+
start: { col: pos.col, row: 0, plane: 'grid' },
|
|
164
|
+
end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },
|
|
165
|
+
});
|
|
166
|
+
case 'frozenColsStart':
|
|
167
|
+
return dxGrid?.setSelection({
|
|
168
|
+
start: { row: pos.row, col: 0, plane: 'grid' },
|
|
169
|
+
end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
[dxGrid, model.sheet],
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
const handleClick = useCallback(
|
|
177
|
+
(event: MouseEvent) => {
|
|
178
|
+
const cell = closestCell(event.target);
|
|
179
|
+
if (cell) {
|
|
180
|
+
selectEntireAxis(cell);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
[selectEntireAxis],
|
|
184
|
+
);
|
|
185
|
+
|
|
121
186
|
const handleKeyDown = useCallback(
|
|
122
187
|
(event: KeyboardEvent) => {
|
|
123
|
-
const cursorFallbackRange: CellRange | null = range ?? cursor ? { from: cursor!, to: cursor! } : null;
|
|
124
188
|
switch (event.key) {
|
|
125
189
|
case 'Backspace':
|
|
126
190
|
case 'Delete':
|
|
127
191
|
event.preventDefault();
|
|
128
192
|
return cursorFallbackRange && model.clear(cursorFallbackRange);
|
|
193
|
+
case 'Enter':
|
|
194
|
+
case 'Space':
|
|
195
|
+
if (dxGrid && extraplanarFocus) {
|
|
196
|
+
switch (extraplanarFocus.plane) {
|
|
197
|
+
case 'frozenRowsStart':
|
|
198
|
+
case 'frozenColsStart':
|
|
199
|
+
event.preventDefault();
|
|
200
|
+
return selectEntireAxis(extraplanarFocus);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
129
203
|
}
|
|
130
204
|
if (event.metaKey || event.ctrlKey) {
|
|
131
205
|
switch (event.key) {
|
|
@@ -151,7 +225,48 @@ export const GridSheet = () => {
|
|
|
151
225
|
}
|
|
152
226
|
}
|
|
153
227
|
},
|
|
154
|
-
[
|
|
228
|
+
[cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);
|
|
232
|
+
const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);
|
|
233
|
+
const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';
|
|
234
|
+
|
|
235
|
+
const handleContextMenu = useCallback((event: MouseEvent) => {
|
|
236
|
+
const cell = closestCell(event.target);
|
|
237
|
+
if (cell && cell.plane.startsWith('frozen')) {
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
contextMenuAnchorRef.current = event.target as HTMLButtonElement;
|
|
240
|
+
setContextMenuOpen(cell);
|
|
241
|
+
}
|
|
242
|
+
}, []);
|
|
243
|
+
|
|
244
|
+
const handleAxisMenuAction = useCallback(
|
|
245
|
+
(operation: 'insert-before' | 'insert-after' | 'drop') => {
|
|
246
|
+
switch (operation) {
|
|
247
|
+
case 'insert-before':
|
|
248
|
+
case 'insert-after':
|
|
249
|
+
return dispatch({
|
|
250
|
+
action: SheetAction.INSERT_AXIS,
|
|
251
|
+
data: {
|
|
252
|
+
model,
|
|
253
|
+
axis: contextMenuAxis,
|
|
254
|
+
index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
|
|
255
|
+
} satisfies SheetAction.InsertAxis,
|
|
256
|
+
});
|
|
257
|
+
break;
|
|
258
|
+
case 'drop':
|
|
259
|
+
return dispatch({
|
|
260
|
+
action: SheetAction.DROP_AXIS,
|
|
261
|
+
data: {
|
|
262
|
+
model,
|
|
263
|
+
axis: contextMenuAxis,
|
|
264
|
+
axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
|
|
265
|
+
} satisfies SheetAction.DropAxis,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
[contextMenuAxis, contextMenuOpen, model, dispatch],
|
|
155
270
|
);
|
|
156
271
|
|
|
157
272
|
const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
|
|
@@ -160,7 +275,15 @@ export const GridSheet = () => {
|
|
|
160
275
|
() => [
|
|
161
276
|
editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),
|
|
162
277
|
sheetExtension({ functions: model.graph.getFunctions() }),
|
|
163
|
-
rangeExtension(
|
|
278
|
+
rangeExtension({
|
|
279
|
+
onInit: (fn) => (rangeController.current = fn),
|
|
280
|
+
onStateChange: (state) => {
|
|
281
|
+
if (dxGrid) {
|
|
282
|
+
// This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.
|
|
283
|
+
dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
}),
|
|
164
287
|
],
|
|
165
288
|
[model, handleClose, editing],
|
|
166
289
|
);
|
|
@@ -173,11 +296,12 @@ export const GridSheet = () => {
|
|
|
173
296
|
[model],
|
|
174
297
|
);
|
|
175
298
|
|
|
176
|
-
useUpdateFocusedCellOnThreadSelection(
|
|
299
|
+
useUpdateFocusedCellOnThreadSelection(dxGrid);
|
|
300
|
+
useSelectThreadOnCellFocus();
|
|
177
301
|
|
|
178
302
|
return (
|
|
179
303
|
<>
|
|
180
|
-
<GridCellEditor getCellContent={getCellContent} extension={extension} />
|
|
304
|
+
<GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />
|
|
181
305
|
<Grid.Content
|
|
182
306
|
initialCells={initialCells}
|
|
183
307
|
limitColumns={DEFAULT_COLUMNS}
|
|
@@ -192,10 +316,43 @@ export const GridSheet = () => {
|
|
|
192
316
|
onFocus={handleFocus}
|
|
193
317
|
onWheelCapture={handleWheel}
|
|
194
318
|
onKeyDown={handleKeyDown}
|
|
319
|
+
onContextMenu={handleContextMenu}
|
|
320
|
+
onClick={handleClick}
|
|
195
321
|
overscroll='inline'
|
|
196
322
|
className='[--dx-grid-base:var(--surface-bg)]'
|
|
197
|
-
|
|
323
|
+
activeRefs={activeRefs}
|
|
324
|
+
ref={setDxGrid}
|
|
198
325
|
/>
|
|
326
|
+
<DropdownMenu.Root
|
|
327
|
+
modal={false}
|
|
328
|
+
open={!!contextMenuOpen}
|
|
329
|
+
onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}
|
|
330
|
+
>
|
|
331
|
+
<DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />
|
|
332
|
+
<DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>
|
|
333
|
+
<DropdownMenu.Viewport>
|
|
334
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-before')}>
|
|
335
|
+
<Icon
|
|
336
|
+
size={5}
|
|
337
|
+
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
|
|
338
|
+
/>
|
|
339
|
+
<span>{t(`add ${contextMenuAxis} before label`)}</span>
|
|
340
|
+
</DropdownMenu.Item>
|
|
341
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>
|
|
342
|
+
<Icon
|
|
343
|
+
size={5}
|
|
344
|
+
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
|
|
345
|
+
/>
|
|
346
|
+
<span>{t(`add ${contextMenuAxis} after label`)}</span>
|
|
347
|
+
</DropdownMenu.Item>
|
|
348
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>
|
|
349
|
+
<Icon size={5} icon='ph--backspace--regular' />
|
|
350
|
+
<span>{t(`delete ${contextMenuAxis} label`)}</span>
|
|
351
|
+
</DropdownMenu.Item>
|
|
352
|
+
</DropdownMenu.Viewport>
|
|
353
|
+
<DropdownMenu.Arrow />
|
|
354
|
+
</DropdownMenu.Content>
|
|
355
|
+
</DropdownMenu.Root>
|
|
199
356
|
</>
|
|
200
357
|
);
|
|
201
358
|
};
|
|
@@ -14,9 +14,9 @@ import { CellEditor, type CellEditorProps } from '@dxos/react-ui-grid';
|
|
|
14
14
|
import { withTheme } from '@dxos/storybook-utils';
|
|
15
15
|
|
|
16
16
|
import { HyperFormula } from '#hyperformula';
|
|
17
|
+
import { defaultFunctions } from '../../compute-graph';
|
|
17
18
|
import { createSheet } from '../../defs';
|
|
18
19
|
import { sheetExtension } from '../../extensions';
|
|
19
|
-
import { defaultFunctions } from '../../graph';
|
|
20
20
|
import { SheetType } from '../../types';
|
|
21
21
|
|
|
22
22
|
type StoryProps = CellEditorProps;
|