@dxos/plugin-sheet 0.7.4 → 0.7.5-labs.a279d8c
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-CM4CO3DC.mjs +370 -0
- package/dist/lib/browser/SheetContainer-CM4CO3DC.mjs.map +7 -0
- package/dist/lib/browser/chunk-FOO6NGBM.mjs +229 -0
- package/dist/lib/browser/chunk-FOO6NGBM.mjs.map +7 -0
- package/dist/lib/browser/chunk-H23JW3DX.mjs +800 -0
- package/dist/lib/browser/chunk-H23JW3DX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RABELMEQ.mjs → chunk-K6EUYKWT.mjs} +3 -3
- package/dist/lib/browser/chunk-K6EUYKWT.mjs.map +7 -0
- package/dist/lib/browser/chunk-PW25VUP6.mjs +15 -0
- package/dist/lib/browser/chunk-PW25VUP6.mjs.map +7 -0
- package/dist/lib/browser/chunk-T3IVPMRX.mjs +900 -0
- package/dist/lib/browser/chunk-T3IVPMRX.mjs.map +7 -0
- package/dist/lib/browser/compute-graph-registry-XH6B2SWG.mjs +27 -0
- package/dist/lib/browser/compute-graph-registry-XH6B2SWG.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +86 -324
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs +47 -0
- package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs.map +7 -0
- package/dist/lib/browser/markdown-IKG5FNCA.mjs +26 -0
- package/dist/lib/browser/markdown-IKG5FNCA.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-context-JG43577H.mjs +28 -0
- package/dist/lib/browser/react-context-JG43577H.mjs.map +7 -0
- package/dist/lib/browser/react-surface-URRC3AFC.mjs +43 -0
- package/dist/lib/browser/react-surface-URRC3AFC.mjs.map +7 -0
- package/dist/lib/browser/thread-YX6KBQNQ.mjs +17 -0
- package/dist/lib/browser/thread-YX6KBQNQ.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +62 -0
- package/dist/lib/node/SheetContainer-TJ3JQLWM.cjs +364 -0
- package/dist/lib/node/SheetContainer-TJ3JQLWM.cjs.map +7 -0
- package/dist/lib/node/chunk-E3RXOEL6.cjs +935 -0
- package/dist/lib/node/chunk-E3RXOEL6.cjs.map +7 -0
- package/dist/lib/node/{types.cjs → chunk-FU5K66DS.cjs} +12 -16
- package/dist/lib/node/chunk-FU5K66DS.cjs.map +7 -0
- package/dist/lib/node/{chunk-2ZVZI2KJ.cjs → chunk-NLDXUFDG.cjs} +7 -7
- package/dist/lib/node/chunk-NLDXUFDG.cjs.map +7 -0
- package/dist/lib/node/chunk-P4KSGZSS.cjs +251 -0
- package/dist/lib/node/chunk-P4KSGZSS.cjs.map +7 -0
- package/dist/lib/node/chunk-ZPWW4LPY.cjs +807 -0
- package/dist/lib/node/chunk-ZPWW4LPY.cjs.map +7 -0
- package/dist/lib/node/compute-graph-registry-ORGTIE5M.cjs +53 -0
- package/dist/lib/node/compute-graph-registry-ORGTIE5M.cjs.map +7 -0
- package/dist/lib/node/index.cjs +87 -318
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs +60 -0
- package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs.map +7 -0
- package/dist/lib/node/markdown-EUUL3Q36.cjs +40 -0
- package/dist/lib/node/markdown-EUUL3Q36.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-context-OOH5QFE2.cjs +50 -0
- package/dist/lib/node/react-context-OOH5QFE2.cjs.map +7 -0
- package/dist/lib/node/react-surface-IQN5JKSS.cjs +64 -0
- package/dist/lib/node/react-surface-IQN5JKSS.cjs.map +7 -0
- package/dist/lib/node/{meta.cjs → thread-VBPS23P2.cjs} +12 -10
- package/dist/lib/node/thread-VBPS23P2.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +84 -0
- package/dist/lib/node/types/index.cjs.map +7 -0
- package/dist/lib/node-esm/SheetContainer-QEEFORIC.mjs +371 -0
- package/dist/lib/node-esm/SheetContainer-QEEFORIC.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BM2Q3FFC.mjs → chunk-FMOVRTS4.mjs} +3 -3
- package/dist/lib/node-esm/chunk-FMOVRTS4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KCXK5UM6.mjs +16 -0
- package/dist/lib/node-esm/chunk-KCXK5UM6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-NSVUOAI6.mjs +901 -0
- package/dist/lib/node-esm/chunk-NSVUOAI6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-OXD6RBFF.mjs +801 -0
- package/dist/lib/node-esm/chunk-OXD6RBFF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PTOI45NK.mjs +231 -0
- package/dist/lib/node-esm/chunk-PTOI45NK.mjs.map +7 -0
- package/dist/lib/node-esm/compute-graph-registry-JH2FRHLD.mjs +28 -0
- package/dist/lib/node-esm/compute-graph-registry-JH2FRHLD.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +86 -324
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs +48 -0
- package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs.map +7 -0
- package/dist/lib/node-esm/markdown-D2ZMN7LR.mjs +27 -0
- package/dist/lib/node-esm/markdown-D2ZMN7LR.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-context-CJVSLO74.mjs +29 -0
- package/dist/lib/node-esm/react-context-CJVSLO74.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-XJIX5G3I.mjs +44 -0
- package/dist/lib/node-esm/react-surface-XJIX5G3I.mjs.map +7 -0
- package/dist/lib/node-esm/thread-HSJD3SR6.mjs +18 -0
- package/dist/lib/node-esm/thread-HSJD3SR6.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +63 -0
- package/dist/types/src/SheetPlugin.d.ts +1 -3
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +5 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/compute-graph-registry.d.ts +4 -0
- package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +17 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/markdown.d.ts +6 -0
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-context.d.ts +8 -0
- package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +4 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/thread.d.ts +6 -0
- package/dist/types/src/capabilities/thread.d.ts.map +1 -0
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +1 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
- package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -0
- package/dist/types/src/components/FunctionEditor/FunctionEditor.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/SheetCellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
- 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 +1 -2
- package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +7 -0
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +6 -0
- package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/align.d.ts +28 -0
- package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/comment.d.ts +23 -0
- package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/index.d.ts +2 -0
- package/dist/types/src/components/SheetToolbar/index.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/style.d.ts +26 -0
- package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +8 -0
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +6 -0
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.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 +1 -1
- package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/integrations/thread-ranges.d.ts +1 -1
- package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +6 -8
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/model/testing.d.ts +1 -1
- package/dist/types/src/model/testing.d.ts.map +1 -1
- package/dist/types/src/model/useSheetModel.d.ts +1 -1
- package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
- 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/{defs → types}/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/types/schema.d.ts +105 -0
- package/dist/types/src/types/schema.d.ts.map +1 -0
- package/dist/types/src/{defs → types}/sheet-range-types.d.ts +1 -1
- package/dist/types/src/types/sheet-range-types.d.ts.map +1 -0
- package/dist/types/src/types/types.d.ts +71 -0
- package/dist/types/src/types/types.d.ts.map +1 -0
- package/dist/types/src/{defs → types}/util.d.ts +5 -1
- package/dist/types/src/types/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -61
- package/src/SheetPlugin.tsx +70 -176
- package/src/capabilities/capabilities.ts +14 -0
- package/src/capabilities/compute-graph-registry.ts +25 -0
- package/src/capabilities/index.ts +14 -0
- package/src/capabilities/intent-resolver.ts +29 -0
- package/src/capabilities/markdown.ts +22 -0
- package/src/capabilities/react-context.tsx +20 -0
- package/src/capabilities/react-surface.tsx +30 -0
- package/src/capabilities/thread.ts +14 -0
- package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +1 -2
- package/src/{compute-graph → components/ComputeGraph}/compute-graph.stories.tsx +6 -7
- package/src/components/FunctionEditor/FunctionEditor.tsx +2 -1
- package/src/components/GridSheet/GridSheet.stories.tsx +2 -0
- package/src/components/GridSheet/GridSheet.tsx +15 -18
- package/src/components/GridSheet/SheetCellEditor.stories.tsx +6 -7
- package/src/components/GridSheet/util.ts +3 -2
- package/src/components/RangeList/RangeList.tsx +2 -1
- package/src/components/SheetContainer/SheetContainer.stories.tsx +25 -23
- package/src/components/SheetContainer/SheetContainer.tsx +3 -8
- package/src/components/SheetContext/SheetContext.tsx +1 -2
- package/src/components/{Toolbar/Toolbar.stories.tsx → SheetToolbar/SheetToolbar.stories.tsx} +4 -8
- package/src/components/SheetToolbar/SheetToolbar.tsx +48 -0
- package/src/components/SheetToolbar/align.ts +68 -0
- package/src/components/SheetToolbar/comment.ts +56 -0
- package/src/components/{Toolbar → SheetToolbar}/index.ts +1 -1
- package/src/components/SheetToolbar/style.ts +72 -0
- package/src/components/SheetToolbar/useToolbarAction.ts +87 -0
- package/src/components/SheetToolbar/useToolbarState.ts +17 -0
- package/src/components/index.ts +0 -1
- package/src/extensions/compute.ts +7 -4
- package/src/extensions/editor/extension.test.ts +2 -1
- package/src/extensions/editor/extension.ts +2 -3
- package/src/index.ts +2 -7
- package/src/integrations/thread-ranges.ts +28 -24
- package/src/meta.ts +1 -1
- package/src/model/sheet-model.test.ts +4 -10
- package/src/model/sheet-model.ts +30 -22
- package/src/model/testing.ts +3 -2
- package/src/model/useSheetModel.ts +2 -1
- package/src/sanity.test.ts +1 -1
- package/src/testing/testing.tsx +2 -3
- package/src/{defs → types}/index.ts +1 -0
- package/src/types/schema.ts +56 -0
- package/src/{defs → types}/sheet-range-types.ts +1 -1
- package/src/types/types.ts +67 -0
- package/src/{defs → types}/util.ts +13 -13
- package/dist/lib/browser/SheetContainer-KCLT6PEO.mjs +0 -296
- package/dist/lib/browser/SheetContainer-KCLT6PEO.mjs.map +0 -7
- package/dist/lib/browser/chunk-E5WQ7U7G.mjs +0 -1675
- package/dist/lib/browser/chunk-E5WQ7U7G.mjs.map +0 -7
- package/dist/lib/browser/chunk-F3HE6D3J.mjs +0 -3269
- package/dist/lib/browser/chunk-F3HE6D3J.mjs.map +0 -7
- package/dist/lib/browser/chunk-JXFPOYNA.mjs +0 -67
- package/dist/lib/browser/chunk-JXFPOYNA.mjs.map +0 -7
- package/dist/lib/browser/chunk-RABELMEQ.mjs.map +0 -7
- package/dist/lib/browser/compute-graph-SNUS7HOH.mjs +0 -35
- package/dist/lib/browser/meta.mjs +0 -9
- package/dist/lib/browser/types.mjs +0 -16
- package/dist/lib/browser/types.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-VVVRYTQG.cjs +0 -298
- package/dist/lib/node/SheetContainer-VVVRYTQG.cjs.map +0 -7
- package/dist/lib/node/chunk-2ZVZI2KJ.cjs.map +0 -7
- package/dist/lib/node/chunk-45YW2DX2.cjs +0 -1656
- package/dist/lib/node/chunk-45YW2DX2.cjs.map +0 -7
- package/dist/lib/node/chunk-KSEEI5VC.cjs +0 -3323
- package/dist/lib/node/chunk-KSEEI5VC.cjs.map +0 -7
- package/dist/lib/node/chunk-OWH2EUHZ.cjs +0 -90
- package/dist/lib/node/chunk-OWH2EUHZ.cjs.map +0 -7
- package/dist/lib/node/compute-graph-WILPHO4A.cjs +0 -57
- package/dist/lib/node/compute-graph-WILPHO4A.cjs.map +0 -7
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node/types.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-LSBE6Q4X.mjs +0 -297
- package/dist/lib/node-esm/SheetContainer-LSBE6Q4X.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6JF2AHKO.mjs +0 -3270
- package/dist/lib/node-esm/chunk-6JF2AHKO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BM2Q3FFC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BVS2IQRO.mjs +0 -68
- package/dist/lib/node-esm/chunk-BVS2IQRO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NYDNXI7L.mjs +0 -1676
- package/dist/lib/node-esm/chunk-NYDNXI7L.mjs.map +0 -7
- package/dist/lib/node-esm/compute-graph-S6CVN7RS.mjs +0 -36
- package/dist/lib/node-esm/compute-graph-S6CVN7RS.mjs.map +0 -7
- package/dist/lib/node-esm/meta.mjs +0 -10
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/lib/node-esm/types.mjs +0 -17
- package/dist/lib/node-esm/types.mjs.map +0 -7
- package/dist/types/src/components/SheetObjectSettings.d.ts +0 -7
- package/dist/types/src/components/SheetObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -48
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +0 -7
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/index.d.ts +0 -2
- package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
- package/dist/types/src/compute-graph/compute-graph-registry.d.ts +0 -34
- package/dist/types/src/compute-graph/compute-graph-registry.d.ts.map +0 -1
- package/dist/types/src/compute-graph/compute-graph.d.ts +0 -64
- package/dist/types/src/compute-graph/compute-graph.d.ts.map +0 -1
- package/dist/types/src/compute-graph/compute-graph.stories.d.ts.map +0 -1
- package/dist/types/src/compute-graph/compute-graph.test.d.ts +0 -2
- package/dist/types/src/compute-graph/compute-graph.test.d.ts.map +0 -1
- package/dist/types/src/compute-graph/compute-node.d.ts +0 -26
- package/dist/types/src/compute-graph/compute-node.d.ts.map +0 -1
- package/dist/types/src/compute-graph/functions/async-function.d.ts +0 -66
- package/dist/types/src/compute-graph/functions/async-function.d.ts.map +0 -1
- package/dist/types/src/compute-graph/functions/edge-function.d.ts +0 -21
- package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +0 -1
- package/dist/types/src/compute-graph/functions/function-defs.d.ts +0 -11
- package/dist/types/src/compute-graph/functions/function-defs.d.ts.map +0 -1
- package/dist/types/src/compute-graph/functions/index.d.ts +0 -4
- package/dist/types/src/compute-graph/functions/index.d.ts.map +0 -1
- package/dist/types/src/compute-graph/hyperformula.test.d.ts +0 -2
- package/dist/types/src/compute-graph/hyperformula.test.d.ts.map +0 -1
- package/dist/types/src/compute-graph/index.d.ts +0 -5
- package/dist/types/src/compute-graph/index.d.ts.map +0 -1
- package/dist/types/src/compute-graph/testing/index.d.ts +0 -3
- package/dist/types/src/compute-graph/testing/index.d.ts.map +0 -1
- package/dist/types/src/compute-graph/testing/test-builder.d.ts +0 -15
- package/dist/types/src/compute-graph/testing/test-builder.d.ts.map +0 -1
- package/dist/types/src/compute-graph/testing/test-plugin.d.ts +0 -36
- package/dist/types/src/compute-graph/testing/test-plugin.d.ts.map +0 -1
- package/dist/types/src/compute-graph/util.d.ts +0 -2
- package/dist/types/src/compute-graph/util.d.ts.map +0 -1
- package/dist/types/src/defs/index.d.ts.map +0 -1
- package/dist/types/src/defs/sheet-range-types.d.ts.map +0 -1
- package/dist/types/src/defs/types.d.ts +0 -26
- package/dist/types/src/defs/types.d.ts.map +0 -1
- package/dist/types/src/defs/types.test.d.ts +0 -2
- package/dist/types/src/defs/types.test.d.ts.map +0 -1
- package/dist/types/src/defs/util.d.ts.map +0 -1
- package/dist/types/src/types.d.ts +0 -182
- package/dist/types/src/types.d.ts.map +0 -1
- package/dist/vendor/hyperformula.mjs +0 -37145
- package/src/components/SheetObjectSettings.tsx +0 -38
- package/src/components/Toolbar/Toolbar.tsx +0 -346
- package/src/compute-graph/compute-graph-registry.ts +0 -90
- package/src/compute-graph/compute-graph.test.ts +0 -87
- package/src/compute-graph/compute-graph.ts +0 -260
- package/src/compute-graph/compute-node.ts +0 -62
- package/src/compute-graph/functions/async-function.ts +0 -179
- package/src/compute-graph/functions/edge-function.ts +0 -102
- package/src/compute-graph/functions/function-defs.ts +0 -2427
- package/src/compute-graph/functions/index.ts +0 -7
- package/src/compute-graph/hyperformula.test.ts +0 -14
- package/src/compute-graph/index.ts +0 -8
- package/src/compute-graph/testing/index.ts +0 -6
- package/src/compute-graph/testing/test-builder.ts +0 -54
- package/src/compute-graph/testing/test-plugin.ts +0 -100
- package/src/compute-graph/util.ts +0 -8
- package/src/defs/types.test.ts +0 -91
- package/src/defs/types.ts +0 -88
- package/src/types.ts +0 -125
- /package/dist/lib/browser/{compute-graph-SNUS7HOH.mjs.map → types/index.mjs.map} +0 -0
- /package/dist/lib/{browser/meta.mjs.map → node-esm/types/index.mjs.map} +0 -0
- /package/dist/types/src/{compute-graph → components/ComputeGraph}/compute-graph.stories.d.ts +0 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GridSheet,
|
|
3
|
+
SheetProvider,
|
|
4
|
+
completeCellRangeToThreadCursor,
|
|
5
|
+
useComputeGraph,
|
|
6
|
+
useSheetContext
|
|
7
|
+
} from "./chunk-H23JW3DX.mjs";
|
|
8
|
+
import {
|
|
9
|
+
alignKey,
|
|
10
|
+
commentKey,
|
|
11
|
+
mapFormulaIndicesToRefs,
|
|
12
|
+
rangeFromIndex,
|
|
13
|
+
rangeToIndex
|
|
14
|
+
} from "./chunk-T3IVPMRX.mjs";
|
|
15
|
+
import "./chunk-FOO6NGBM.mjs";
|
|
16
|
+
import {
|
|
17
|
+
SHEET_PLUGIN
|
|
18
|
+
} from "./chunk-K6EUYKWT.mjs";
|
|
19
|
+
|
|
20
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
|
|
21
|
+
import React3 from "react";
|
|
22
|
+
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
23
|
+
import { StackItem } from "@dxos/react-ui-stack";
|
|
24
|
+
|
|
25
|
+
// packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
|
|
26
|
+
import React from "react";
|
|
27
|
+
import { addressToA1Notation, isFormula, rangeToA1Notation } from "@dxos/compute";
|
|
28
|
+
import { Icon } from "@dxos/react-ui";
|
|
29
|
+
var FunctionEditor = () => {
|
|
30
|
+
const { model, cursor, range } = useSheetContext();
|
|
31
|
+
let value;
|
|
32
|
+
let formula = false;
|
|
33
|
+
if (cursor) {
|
|
34
|
+
value = model.getCellValue(cursor);
|
|
35
|
+
if (isFormula(value)) {
|
|
36
|
+
value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));
|
|
37
|
+
formula = true;
|
|
38
|
+
} else if (value != null) {
|
|
39
|
+
value = String(value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
43
|
+
className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator"
|
|
44
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
45
|
+
className: "flex gap-4 items-center"
|
|
46
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
47
|
+
className: "flex w-16 items-center font-mono"
|
|
48
|
+
}, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
|
|
49
|
+
className: "flex gap-2 items-center"
|
|
50
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
51
|
+
icon: "ph--function--regular",
|
|
52
|
+
classNames: [
|
|
53
|
+
"text-greenText",
|
|
54
|
+
formula ? "visible" : "invisible"
|
|
55
|
+
]
|
|
56
|
+
}), /* @__PURE__ */ React.createElement("span", {
|
|
57
|
+
className: "font-mono"
|
|
58
|
+
}, value))));
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
|
|
62
|
+
import React2, { useCallback as useCallback2 } from "react";
|
|
63
|
+
import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
|
|
64
|
+
|
|
65
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/align.ts
|
|
66
|
+
import { useEffect } from "react";
|
|
67
|
+
import { inRange } from "@dxos/compute";
|
|
68
|
+
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
|
69
|
+
var aligns = {
|
|
70
|
+
start: "ph--text-align-left--regular",
|
|
71
|
+
center: "ph--text-align-center--regular",
|
|
72
|
+
end: "ph--text-align-right--regular"
|
|
73
|
+
};
|
|
74
|
+
var useAlignState = (state) => {
|
|
75
|
+
const { cursor, model } = useSheetContext();
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
state[alignKey] = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
|
|
78
|
+
}, [
|
|
79
|
+
cursor,
|
|
80
|
+
model.sheet
|
|
81
|
+
]);
|
|
82
|
+
};
|
|
83
|
+
var createAlignGroupAction = (value) => createMenuItemGroup("align", {
|
|
84
|
+
label: [
|
|
85
|
+
"align label",
|
|
86
|
+
{
|
|
87
|
+
ns: SHEET_PLUGIN
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
variant: "toggleGroup",
|
|
91
|
+
selectCardinality: "single",
|
|
92
|
+
value: `${alignKey}--${value}`
|
|
93
|
+
});
|
|
94
|
+
var createAlignActions = (value) => Object.entries(aligns).map(([alignValue, icon]) => {
|
|
95
|
+
return createMenuAction(`${alignKey}--${alignValue}`, {
|
|
96
|
+
key: alignKey,
|
|
97
|
+
value: alignValue,
|
|
98
|
+
checked: value === alignValue,
|
|
99
|
+
label: [
|
|
100
|
+
`range value ${alignValue} label`,
|
|
101
|
+
{
|
|
102
|
+
ns: SHEET_PLUGIN
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
icon,
|
|
106
|
+
testId: `grid.toolbar.${alignKey}.${alignValue}`
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
var createAlign = ({ [alignKey]: alignValue }) => {
|
|
110
|
+
const alignGroup = createAlignGroupAction(alignValue);
|
|
111
|
+
const alignActions = createAlignActions(alignValue);
|
|
112
|
+
return {
|
|
113
|
+
nodes: [
|
|
114
|
+
alignGroup,
|
|
115
|
+
...alignActions
|
|
116
|
+
],
|
|
117
|
+
edges: [
|
|
118
|
+
{
|
|
119
|
+
source: "root",
|
|
120
|
+
target: "align"
|
|
121
|
+
},
|
|
122
|
+
...alignActions.map(({ id }) => ({
|
|
123
|
+
source: alignGroup.id,
|
|
124
|
+
target: id
|
|
125
|
+
}))
|
|
126
|
+
]
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/comment.ts
|
|
131
|
+
import { useEffect as useEffect2, useMemo } from "react";
|
|
132
|
+
import { RefArray } from "@dxos/live-object";
|
|
133
|
+
import { createMenuAction as createMenuAction2 } from "@dxos/react-ui-menu";
|
|
134
|
+
var useCommentState = (state) => {
|
|
135
|
+
const { cursorFallbackRange, model } = useSheetContext();
|
|
136
|
+
const overlapsCommentAnchor = useMemo(() => RefArray.allResolvedTargets(model.sheet.threads ?? []).filter((thread) => thread.status !== "resolved").some((thread) => {
|
|
137
|
+
if (!cursorFallbackRange) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;
|
|
141
|
+
}), [
|
|
142
|
+
cursorFallbackRange,
|
|
143
|
+
model.sheet
|
|
144
|
+
]);
|
|
145
|
+
useEffect2(() => {
|
|
146
|
+
state.commentEnabled = !cursorFallbackRange ? "no cursor" : overlapsCommentAnchor ? "selection overlaps existing comment" : "comment";
|
|
147
|
+
}, [
|
|
148
|
+
overlapsCommentAnchor,
|
|
149
|
+
cursorFallbackRange
|
|
150
|
+
]);
|
|
151
|
+
};
|
|
152
|
+
var createCommentAction = (state) => createMenuAction2("comment", {
|
|
153
|
+
key: commentKey,
|
|
154
|
+
testId: "editor.toolbar.comment",
|
|
155
|
+
icon: "ph--chat-text--regular",
|
|
156
|
+
label: [
|
|
157
|
+
`${state.commentEnabled} label`,
|
|
158
|
+
{
|
|
159
|
+
ns: SHEET_PLUGIN
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
disabled: state.commentEnabled !== "comment"
|
|
163
|
+
});
|
|
164
|
+
var createComment = (state) => ({
|
|
165
|
+
nodes: [
|
|
166
|
+
createCommentAction(state)
|
|
167
|
+
],
|
|
168
|
+
edges: [
|
|
169
|
+
{
|
|
170
|
+
source: "root",
|
|
171
|
+
target: "comment"
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/style.ts
|
|
177
|
+
import { useEffect as useEffect3 } from "react";
|
|
178
|
+
import { inRange as inRange2 } from "@dxos/compute";
|
|
179
|
+
import { createMenuAction as createMenuAction3, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
|
|
180
|
+
var styles = {
|
|
181
|
+
highlight: "ph--highlighter--regular",
|
|
182
|
+
softwrap: "ph--paragraph--regular"
|
|
183
|
+
};
|
|
184
|
+
var useStyleState = (state) => {
|
|
185
|
+
const { cursorFallbackRange, model } = useSheetContext();
|
|
186
|
+
useEffect3(() => {
|
|
187
|
+
state.highlight = false;
|
|
188
|
+
state.softwrap = false;
|
|
189
|
+
if (cursorFallbackRange && model.sheet.ranges) {
|
|
190
|
+
model.sheet.ranges.filter(({ range, key }) => key === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
|
|
191
|
+
state[value] = true;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}, [
|
|
195
|
+
cursorFallbackRange,
|
|
196
|
+
model.sheet
|
|
197
|
+
]);
|
|
198
|
+
};
|
|
199
|
+
var createStyleGroup = (state) => {
|
|
200
|
+
return createMenuItemGroup2("style", {
|
|
201
|
+
variant: "toggleGroup",
|
|
202
|
+
selectCardinality: "multiple",
|
|
203
|
+
value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
var createStyleActions = (state) => Object.entries(styles).map(([styleValue, icon]) => {
|
|
207
|
+
return createMenuAction3(`style--${styleValue}`, {
|
|
208
|
+
key: "style",
|
|
209
|
+
value: styleValue,
|
|
210
|
+
icon,
|
|
211
|
+
label: [
|
|
212
|
+
`range value ${styleValue} label`,
|
|
213
|
+
{
|
|
214
|
+
ns: SHEET_PLUGIN
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
checked: !!state[styleValue]
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
var createStyle = (state) => {
|
|
221
|
+
const styleGroupAction = createStyleGroup(state);
|
|
222
|
+
const styleActions = createStyleActions(state);
|
|
223
|
+
return {
|
|
224
|
+
nodes: [
|
|
225
|
+
styleGroupAction,
|
|
226
|
+
...styleActions
|
|
227
|
+
],
|
|
228
|
+
edges: [
|
|
229
|
+
{
|
|
230
|
+
source: "root",
|
|
231
|
+
target: "style"
|
|
232
|
+
},
|
|
233
|
+
...styleActions.map(({ id }) => ({
|
|
234
|
+
source: styleGroupAction.id,
|
|
235
|
+
target: id
|
|
236
|
+
}))
|
|
237
|
+
]
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarAction.ts
|
|
242
|
+
import { useCallback } from "react";
|
|
243
|
+
import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
244
|
+
import { inRange as inRange3 } from "@dxos/compute";
|
|
245
|
+
import { ThreadAction } from "@dxos/plugin-thread/types";
|
|
246
|
+
var useToolbarAction = (state) => {
|
|
247
|
+
const { model, cursorFallbackRange, cursor } = useSheetContext();
|
|
248
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
249
|
+
return useCallback((action) => {
|
|
250
|
+
const { key, value } = action.properties;
|
|
251
|
+
if (cursorFallbackRange) {
|
|
252
|
+
const index = model.sheet.ranges?.findIndex((range) => range.key === key && inRange3(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
253
|
+
const nextRangeEntity = {
|
|
254
|
+
range: rangeToIndex(model.sheet, cursorFallbackRange),
|
|
255
|
+
key,
|
|
256
|
+
value
|
|
257
|
+
};
|
|
258
|
+
switch (key) {
|
|
259
|
+
case "alignment":
|
|
260
|
+
if (index < 0) {
|
|
261
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
262
|
+
state[alignKey] = value;
|
|
263
|
+
} else if (model.sheet.ranges[index].value === value) {
|
|
264
|
+
model.sheet.ranges?.splice(index, 1);
|
|
265
|
+
state[alignKey] = void 0;
|
|
266
|
+
} else {
|
|
267
|
+
model.sheet.ranges?.splice(index, 1, nextRangeEntity);
|
|
268
|
+
state[alignKey] = value;
|
|
269
|
+
}
|
|
270
|
+
break;
|
|
271
|
+
case "style":
|
|
272
|
+
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange3(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === value)) {
|
|
273
|
+
if (index >= 0) {
|
|
274
|
+
model.sheet.ranges?.splice(index, 1);
|
|
275
|
+
}
|
|
276
|
+
state[value] = false;
|
|
277
|
+
} else {
|
|
278
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
279
|
+
state[value] = true;
|
|
280
|
+
}
|
|
281
|
+
break;
|
|
282
|
+
case "comment": {
|
|
283
|
+
const cellContent = model.getCellText(cursorFallbackRange.from);
|
|
284
|
+
void dispatch(createIntent(ThreadAction.Create, {
|
|
285
|
+
cursor: completeCellRangeToThreadCursor(cursorFallbackRange),
|
|
286
|
+
name: cellContent,
|
|
287
|
+
subject: model.sheet
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}, [
|
|
293
|
+
model.sheet,
|
|
294
|
+
cursorFallbackRange,
|
|
295
|
+
cursor,
|
|
296
|
+
dispatch
|
|
297
|
+
]);
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarState.ts
|
|
301
|
+
import { useMemo as useMemo2 } from "react";
|
|
302
|
+
import { create } from "@dxos/live-object";
|
|
303
|
+
var useToolbarState = (initialState = {}) => {
|
|
304
|
+
return useMemo2(() => create(initialState), []);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
|
|
308
|
+
var createToolbarActions = (state) => {
|
|
309
|
+
const align = createAlign(state);
|
|
310
|
+
const style = createStyle(state);
|
|
311
|
+
const gap = createGapSeparator();
|
|
312
|
+
const comment = createComment(state);
|
|
313
|
+
return {
|
|
314
|
+
nodes: [
|
|
315
|
+
...align.nodes,
|
|
316
|
+
...style.nodes,
|
|
317
|
+
...gap.nodes,
|
|
318
|
+
...comment.nodes
|
|
319
|
+
],
|
|
320
|
+
edges: [
|
|
321
|
+
...align.edges,
|
|
322
|
+
...style.edges,
|
|
323
|
+
...gap.edges,
|
|
324
|
+
...comment.edges
|
|
325
|
+
]
|
|
326
|
+
};
|
|
327
|
+
};
|
|
328
|
+
var SheetToolbar = ({ attendableId, classNames }) => {
|
|
329
|
+
const state = useToolbarState({});
|
|
330
|
+
useAlignState(state);
|
|
331
|
+
useStyleState(state);
|
|
332
|
+
useCommentState(state);
|
|
333
|
+
const actionsCreator = useCallback2(() => createToolbarActions(state), [
|
|
334
|
+
state
|
|
335
|
+
]);
|
|
336
|
+
const menu = useMenuActions(actionsCreator);
|
|
337
|
+
const handleAction = useToolbarAction(state);
|
|
338
|
+
return /* @__PURE__ */ React2.createElement(MenuProvider, {
|
|
339
|
+
...menu,
|
|
340
|
+
attendableId,
|
|
341
|
+
onAction: handleAction
|
|
342
|
+
}, /* @__PURE__ */ React2.createElement(ToolbarMenu, {
|
|
343
|
+
classNames
|
|
344
|
+
}));
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
|
|
348
|
+
var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
349
|
+
const graph = useComputeGraph(space);
|
|
350
|
+
return graph ? /* @__PURE__ */ React3.createElement(SheetProvider, {
|
|
351
|
+
sheet,
|
|
352
|
+
graph,
|
|
353
|
+
ignoreAttention
|
|
354
|
+
}, /* @__PURE__ */ React3.createElement(StackItem.Content, {
|
|
355
|
+
toolbar: true,
|
|
356
|
+
statusbar: true,
|
|
357
|
+
...role === "section" && {
|
|
358
|
+
classNames: "aspect-video"
|
|
359
|
+
}
|
|
360
|
+
}, /* @__PURE__ */ React3.createElement(SheetToolbar, {
|
|
361
|
+
attendableId: fullyQualifiedId(sheet)
|
|
362
|
+
}), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
|
|
366
|
+
var SheetContainer_default = SheetContainer;
|
|
367
|
+
export {
|
|
368
|
+
SheetContainer_default as default
|
|
369
|
+
};
|
|
370
|
+
//# sourceMappingURL=SheetContainer-CM4CO3DC.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../src/components/SheetToolbar/align.ts", "../../../src/components/SheetToolbar/comment.ts", "../../../src/components/SheetToolbar/style.ts", "../../../src/components/SheetToolbar/useToolbarAction.ts", "../../../src/components/SheetToolbar/useToolbarState.ts", "../../../src/components/SheetContainer/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId, type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <SheetToolbar attendableId={fullyQualifiedId(sheet)} />\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';\nimport { Icon } from '@dxos/react-ui';\n\nimport { mapFormulaIndicesToRefs } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { createAlign, useAlignState } from './align';\nimport { createComment, useCommentState } from './comment';\nimport { createStyle, useStyleState } from './style';\nimport { useToolbarAction } from './useToolbarAction';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ attendableId?: string }>>;\n\nconst createToolbarActions = (state: ToolbarState) => {\n const align = createAlign(state);\n const style = createStyle(state);\n const gap = createGapSeparator();\n const comment = createComment(state);\n return {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes, ...comment.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges, ...comment.edges],\n };\n};\n\nexport const SheetToolbar = ({ attendableId, classNames }: SheetToolbarProps) => {\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n useCommentState(state);\n\n const actionsCreator = useCallback(() => createToolbarActions(state), [state]);\n const menu = useMenuActions(actionsCreator);\n const handleAction = useToolbarAction(state);\n\n return (\n <MenuProvider {...menu} attendableId={attendableId} onAction={handleAction}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type AlignKey, alignKey, type AlignValue, rangeFromIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (state: Partial<AlignState>) => {\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n state[alignKey] = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n }, [cursor, model.sheet]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align label', { ns: SHEET_PLUGIN }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\nconst createAlignActions = (value?: AlignValue) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(`${alignKey}--${alignValue}`, {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: value === alignValue,\n label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n });\n });\n\nexport const createAlign = ({ [alignKey]: alignValue }: Partial<AlignState>) => {\n const alignGroup = createAlignGroupAction(alignValue);\n const alignActions = createAlignActions(alignValue);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { RefArray } from '@dxos/live-object';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { commentKey, type CommentKey, type CommentValue, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\n\nexport type CommentState = { commentEnabled: 'comment' | 'no cursor' | 'selection overlaps existing comment' };\n\nexport const useCommentState = (state: Partial<CommentState>) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = useMemo(\n () =>\n RefArray.allResolvedTargets(model.sheet.threads ?? [])\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n }),\n [cursorFallbackRange, model.sheet],\n );\n\n useEffect(() => {\n state.commentEnabled = !cursorFallbackRange\n ? 'no cursor'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment'\n : 'comment';\n }, [overlapsCommentAnchor, cursorFallbackRange]);\n};\n\nconst createCommentAction = (state: Partial<CommentState>) =>\n createMenuAction<Pick<CommentAction, 'key'>>('comment', {\n key: commentKey,\n testId: 'editor.toolbar.comment',\n icon: 'ph--chat-text--regular',\n label: [`${state.commentEnabled} label`, { ns: SHEET_PLUGIN }],\n disabled: state.commentEnabled !== 'comment',\n });\n\nexport const createComment = (state: Partial<CommentState>) => ({\n nodes: [createCommentAction(state)],\n edges: [{ source: 'root', target: 'comment' }],\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { rangeFromIndex, type StyleKey, type StyleValue } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (state: StyleState) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n state.highlight = false;\n state.softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n state[value as StyleValue] = true;\n });\n }\n }, [cursorFallbackRange, model.sheet]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\nconst createStyleActions = (state: StyleState) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(`style--${styleValue}`, {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range value ${styleValue} label`, { ns: SHEET_PLUGIN }],\n checked: !!state[styleValue as StyleValue],\n });\n });\n\nexport const createStyle = (state: StyleState) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(state);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { inRange } from '@dxos/compute';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport type { MenuAction, MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type AlignAction } from './align';\nimport { type CommentAction } from './comment';\nimport { type StyleAction } from './style';\nimport { type ToolbarState } from './useToolbarState';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { alignKey, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\n\nexport const useToolbarAction = (state: ToolbarState) => {\n const { model, cursorFallbackRange, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n return useCallback(\n (action: MenuAction<ToolbarAction>) => {\n const { key, value } = action.properties;\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) => range.key === key && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key,\n value,\n };\n switch (key) {\n case 'alignment':\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = value;\n } else if (model.sheet.ranges![index].value === value) {\n model.sheet.ranges?.splice(index, 1);\n state[alignKey] = undefined;\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n state[alignKey] = value;\n }\n break;\n case 'style':\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === value)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[value] = true;\n }\n break;\n case 'comment': {\n const cellContent = model.getCellText(cursorFallbackRange.from);\n void dispatch(\n createIntent(ThreadAction.Create, {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: cellContent,\n subject: model.sheet,\n }),\n );\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n ) as MenuActionHandler;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type CommentState } from './comment';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState & CommentState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => create<ToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "fullyQualifiedId", "StackItem", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "React", "useCallback", "createGapSeparator", "MenuProvider", "ToolbarMenu", "useMenuActions", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "state", "cursor", "model", "useSheetContext", "useEffect", "alignKey", "sheet", "ranges", "findLast", "range", "key", "inRange", "rangeFromIndex", "value", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "SHEET_PLUGIN", "variant", "selectCardinality", "createAlignActions", "Object", "entries", "map", "alignValue", "icon", "createMenuAction", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "id", "useEffect", "useMemo", "RefArray", "createMenuAction", "useCommentState", "state", "cursorFallbackRange", "model", "useSheetContext", "overlapsCommentAnchor", "useMemo", "RefArray", "allResolvedTargets", "sheet", "threads", "filter", "thread", "status", "some", "rangeToIndex", "anchor", "useEffect", "commentEnabled", "createCommentAction", "createMenuAction", "key", "commentKey", "testId", "icon", "label", "ns", "SHEET_PLUGIN", "disabled", "createComment", "nodes", "edges", "source", "target", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "state", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "createStyleGroup", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "label", "ns", "SHEET_PLUGIN", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "id", "useCallback", "createIntent", "useIntentDispatcher", "inRange", "ThreadAction", "useToolbarAction", "state", "model", "cursorFallbackRange", "cursor", "useSheetContext", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "action", "key", "value", "properties", "index", "sheet", "ranges", "findIndex", "range", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "alignKey", "splice", "undefined", "filter", "rangeKey", "some", "rangeValue", "cellContent", "getCellText", "createIntent", "ThreadAction", "Create", "completeCellRangeToThreadCursor", "name", "subject", "useMemo", "create", "useToolbarState", "initialState", "useMemo", "create", "createToolbarActions", "state", "align", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "comment", "createComment", "nodes", "edges", "SheetToolbar", "attendableId", "classNames", "useToolbarState", "useAlignState", "useStyleState", "useCommentState", "actionsCreator", "useCallback", "menu", "useMenuActions", "handleAction", "useToolbarAction", "React", "MenuProvider", "onAction", "ToolbarMenu", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "SheetToolbar", "attendableId", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// packages/plugins/plugin-sheet/src/extensions/compute.ts
|
|
2
|
+
import { syntaxTree } from "@codemirror/language";
|
|
3
|
+
import { RangeSetBuilder, StateEffect, StateField } from "@codemirror/state";
|
|
4
|
+
import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
|
|
5
|
+
import { debounce } from "@dxos/async";
|
|
6
|
+
import { createSheetName } from "@dxos/compute";
|
|
7
|
+
import { invariant } from "@dxos/invariant";
|
|
8
|
+
import { documentId, singleValueFacet } from "@dxos/react-ui-editor";
|
|
9
|
+
var updateAllDecorations = StateEffect.define();
|
|
10
|
+
var computeGraphFacet = singleValueFacet();
|
|
11
|
+
|
|
12
|
+
// packages/plugins/plugin-sheet/src/extensions/editor/extension.ts
|
|
13
|
+
import { acceptCompletion, autocompletion, completionStatus, startCompletion } from "@codemirror/autocomplete";
|
|
14
|
+
import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
|
|
15
|
+
import { ViewPlugin as ViewPlugin2, keymap } from "@codemirror/view";
|
|
16
|
+
import { tags } from "@lezer/highlight";
|
|
17
|
+
import { spreadsheet } from "codemirror-lang-spreadsheet";
|
|
18
|
+
import { RANGE_NOTATION } from "@dxos/compute";
|
|
19
|
+
import { singleValueFacet as singleValueFacet2 } from "@dxos/react-ui-editor";
|
|
20
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
21
|
+
var highlightStyles = HighlightStyle.define([
|
|
22
|
+
// Function.
|
|
23
|
+
{
|
|
24
|
+
tag: tags.name,
|
|
25
|
+
class: "text-accentText"
|
|
26
|
+
},
|
|
27
|
+
// Range.
|
|
28
|
+
{
|
|
29
|
+
tag: tags.tagName,
|
|
30
|
+
class: "text-pinkText"
|
|
31
|
+
},
|
|
32
|
+
// Values.
|
|
33
|
+
{
|
|
34
|
+
tag: tags.number,
|
|
35
|
+
class: "text-tealText"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
tag: tags.bool,
|
|
39
|
+
class: "text-tealText"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
tag: tags.string,
|
|
43
|
+
class: "text-tealText"
|
|
44
|
+
},
|
|
45
|
+
// Error.
|
|
46
|
+
{
|
|
47
|
+
tag: tags.invalid,
|
|
48
|
+
class: "text-unAccent"
|
|
49
|
+
}
|
|
50
|
+
]);
|
|
51
|
+
var languageFacet = singleValueFacet2();
|
|
52
|
+
var sheetExtension = ({ debug, functions = [] }) => {
|
|
53
|
+
const { extension, language } = spreadsheet({
|
|
54
|
+
idiom: "en-US",
|
|
55
|
+
decimalSeparator: "."
|
|
56
|
+
});
|
|
57
|
+
const createCompletion = (name) => {
|
|
58
|
+
const { section = "Custom", description, syntax } = functions.find((value) => value.name === name) ?? {};
|
|
59
|
+
return {
|
|
60
|
+
section,
|
|
61
|
+
label: name,
|
|
62
|
+
info: () => {
|
|
63
|
+
if (!description && !syntax) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const root = document.createElement("div");
|
|
67
|
+
root.className = "flex flex-col gap-2 text-sm";
|
|
68
|
+
const title = document.createElement("h2");
|
|
69
|
+
title.innerText = name;
|
|
70
|
+
title.className = "text-lg font-mono text-accentText";
|
|
71
|
+
root.appendChild(title);
|
|
72
|
+
if (description) {
|
|
73
|
+
const info = document.createElement("p");
|
|
74
|
+
info.innerText = description;
|
|
75
|
+
info.className = "text-subdued";
|
|
76
|
+
root.appendChild(info);
|
|
77
|
+
}
|
|
78
|
+
if (syntax) {
|
|
79
|
+
const detail = document.createElement("pre");
|
|
80
|
+
detail.innerText = syntax;
|
|
81
|
+
detail.className = "whitespace-pre-wrap text-greenText";
|
|
82
|
+
root.appendChild(detail);
|
|
83
|
+
}
|
|
84
|
+
return root;
|
|
85
|
+
},
|
|
86
|
+
apply: (view, completion, from, to) => {
|
|
87
|
+
const insertParens = to === view.state.doc.toString().length;
|
|
88
|
+
view.dispatch(view.state.update({
|
|
89
|
+
changes: {
|
|
90
|
+
from,
|
|
91
|
+
to,
|
|
92
|
+
insert: completion.label + (insertParens ? "()" : "")
|
|
93
|
+
},
|
|
94
|
+
selection: {
|
|
95
|
+
anchor: from + completion.label.length + 1
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
return [
|
|
102
|
+
extension,
|
|
103
|
+
languageFacet.of(language),
|
|
104
|
+
language.data.of({
|
|
105
|
+
autocomplete: (context) => {
|
|
106
|
+
if (context.state.doc.toString()[0] !== "=") {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const match = context.matchBefore(/\w*/);
|
|
110
|
+
if (!match || match.from === match.to) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const text = match.text.toUpperCase();
|
|
114
|
+
if (!context.explicit && match.text.length < 2) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
from: match.from,
|
|
119
|
+
options: functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? []
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}),
|
|
123
|
+
syntaxHighlighting(highlightStyles),
|
|
124
|
+
autocompletion({
|
|
125
|
+
aboveCursor: false,
|
|
126
|
+
defaultKeymap: true,
|
|
127
|
+
activateOnTyping: true,
|
|
128
|
+
closeOnBlur: !debug,
|
|
129
|
+
icons: false,
|
|
130
|
+
tooltipClass: () => mx("!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]", "[&>ul>li[aria-selected]]:!bg-accentSurface", "border-separator")
|
|
131
|
+
}),
|
|
132
|
+
keymap.of([
|
|
133
|
+
{
|
|
134
|
+
key: "Tab",
|
|
135
|
+
run: (view) => {
|
|
136
|
+
return completionStatus(view.state) === "active" ? acceptCompletion(view) : startCompletion(view);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
])
|
|
140
|
+
];
|
|
141
|
+
};
|
|
142
|
+
var rangeExtension = ({ onInit, onStateChange }) => {
|
|
143
|
+
let view;
|
|
144
|
+
let activeRange;
|
|
145
|
+
const notifier = {
|
|
146
|
+
setRange: (range) => {
|
|
147
|
+
if (activeRange) {
|
|
148
|
+
view.dispatch(view.state.update({
|
|
149
|
+
changes: {
|
|
150
|
+
...activeRange,
|
|
151
|
+
insert: range.toString()
|
|
152
|
+
},
|
|
153
|
+
selection: {
|
|
154
|
+
anchor: activeRange.from + range.length
|
|
155
|
+
}
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
view.focus();
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
return ViewPlugin2.fromClass(class {
|
|
162
|
+
constructor(_view) {
|
|
163
|
+
view = _view;
|
|
164
|
+
onInit?.(notifier);
|
|
165
|
+
}
|
|
166
|
+
update(view2) {
|
|
167
|
+
const { anchor } = view2.state.selection.ranges[0];
|
|
168
|
+
activeRange = void 0;
|
|
169
|
+
const language = view2.state.facet(languageFacet);
|
|
170
|
+
const { topNode } = language.parser.parse(view2.state.doc.toString());
|
|
171
|
+
visitTree(topNode, ({ type, from, to }) => {
|
|
172
|
+
if (from <= anchor && to >= anchor) {
|
|
173
|
+
switch (type.name) {
|
|
174
|
+
case "Function":
|
|
175
|
+
activeRange = {
|
|
176
|
+
from: to,
|
|
177
|
+
to
|
|
178
|
+
};
|
|
179
|
+
break;
|
|
180
|
+
case "CloseParen":
|
|
181
|
+
activeRange = {
|
|
182
|
+
from,
|
|
183
|
+
to: from
|
|
184
|
+
};
|
|
185
|
+
break;
|
|
186
|
+
case "RangeToken":
|
|
187
|
+
case "CellToken":
|
|
188
|
+
activeRange = {
|
|
189
|
+
from,
|
|
190
|
+
to
|
|
191
|
+
};
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
});
|
|
197
|
+
if (!activeRange && view2.state.doc.toString()[0] === "=") {
|
|
198
|
+
const str = view2.state.doc.sliceString(1);
|
|
199
|
+
if (RANGE_NOTATION.test(str)) {
|
|
200
|
+
activeRange = {
|
|
201
|
+
from: 1,
|
|
202
|
+
to: str.length + 1
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
onStateChange?.({
|
|
207
|
+
activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
var visitTree = (node, callback) => {
|
|
213
|
+
if (callback(node)) {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
for (let child = node.firstChild; child !== null; child = child.nextSibling) {
|
|
217
|
+
if (visitTree(child, callback)) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
export {
|
|
225
|
+
computeGraphFacet,
|
|
226
|
+
sheetExtension,
|
|
227
|
+
rangeExtension
|
|
228
|
+
};
|
|
229
|
+
//# sourceMappingURL=chunk-FOO6NGBM.mjs.map
|