@dxos/plugin-sheet 0.6.14-staging.9e90729 → 0.6.14-staging.c117501

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/lib/browser/{SheetContainer-JBB7W52Y.mjs → SheetContainer-P3NF5KEI.mjs} +60 -48
  2. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-XXDHBYZQ.mjs → chunk-4LKIURJA.mjs} +337 -122
  4. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-3QWIMZZJ.mjs → chunk-BVUN7SHF.mjs} +5 -3
  6. package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
  8. package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-2ZK3YMZG.mjs → chunk-VMSX6Z4X.mjs} +58 -20
  10. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
  11. package/dist/lib/browser/{compute-graph-ZQKB6QVP.mjs → compute-graph-GGWUX644.mjs} +4 -4
  12. package/dist/lib/browser/index.mjs +48 -21
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/meta.mjs +1 -1
  16. package/dist/lib/browser/types.mjs +2 -2
  17. package/dist/lib/node/{SheetContainer-L37HUFCF.cjs → SheetContainer-MPFKXY26.cjs} +72 -63
  18. package/dist/lib/node/SheetContainer-MPFKXY26.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
  20. package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
  21. package/dist/lib/node/{chunk-V7E5JZBD.cjs → chunk-AWKOWDMI.cjs} +9 -7
  22. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-QNFMTK3X.cjs → chunk-O7XR4R7Y.cjs} +69 -29
  24. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-7AWAC3R3.cjs → chunk-OO24XJBV.cjs} +353 -139
  26. package/dist/lib/node/chunk-OO24XJBV.cjs.map +7 -0
  27. package/dist/lib/node/{compute-graph-RJB6OVW6.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
  28. package/dist/lib/node/{compute-graph-RJB6OVW6.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
  29. package/dist/lib/node/index.cjs +74 -46
  30. package/dist/lib/node/index.cjs.map +3 -3
  31. package/dist/lib/node/meta.cjs +3 -3
  32. package/dist/lib/node/meta.cjs.map +1 -1
  33. package/dist/lib/node/meta.json +1 -1
  34. package/dist/lib/node/types.cjs +7 -7
  35. package/dist/lib/node/types.cjs.map +1 -1
  36. package/dist/lib/node-esm/{SheetContainer-CLKFEM35.mjs → SheetContainer-22IOAW3B.mjs} +60 -48
  37. package/dist/lib/node-esm/SheetContainer-22IOAW3B.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
  39. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
  40. package/dist/lib/node-esm/{chunk-3JYJEOCF.mjs → chunk-BW36PM2Y.mjs} +337 -122
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-JBTORSST.mjs → chunk-CR4K75EL.mjs} +58 -20
  43. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-SPQFLYC2.mjs → chunk-UIBWRHW7.mjs} +5 -3
  45. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
  46. package/dist/lib/node-esm/{compute-graph-VKRG526N.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
  47. package/dist/lib/node-esm/index.mjs +48 -21
  48. package/dist/lib/node-esm/index.mjs.map +3 -3
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/meta.mjs +1 -1
  51. package/dist/lib/node-esm/types.mjs +2 -2
  52. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  53. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -1
  54. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  55. package/dist/types/src/components/GridSheet/util.d.ts +2 -2
  56. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  57. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -4
  58. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  59. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +6 -3
  60. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  61. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/Toolbar/Toolbar.d.ts +6 -3
  63. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  64. package/dist/types/src/components/index.d.ts +4 -2
  65. package/dist/types/src/components/index.d.ts.map +1 -1
  66. package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
  67. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
  68. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
  69. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
  70. package/dist/types/src/defs/sheet-range-types.d.ts +2 -2
  71. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  72. package/dist/types/src/defs/util.d.ts +1 -1
  73. package/dist/types/src/defs/util.d.ts.map +1 -1
  74. package/dist/types/src/integrations/thread-ranges.d.ts +1 -2
  75. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  76. package/dist/types/src/meta.d.ts +1 -0
  77. package/dist/types/src/meta.d.ts.map +1 -1
  78. package/dist/types/src/model/sheet-model.d.ts +12 -5
  79. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  80. package/dist/types/src/translations.d.ts +12 -3
  81. package/dist/types/src/translations.d.ts.map +1 -1
  82. package/dist/types/src/types.d.ts +33 -3
  83. package/dist/types/src/types.d.ts.map +1 -1
  84. package/package.json +37 -36
  85. package/src/SheetPlugin.tsx +27 -7
  86. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
  87. package/src/components/GridSheet/GridSheet.tsx +107 -42
  88. package/src/components/GridSheet/util.ts +26 -16
  89. package/src/components/RangeList/RangeList.tsx +27 -12
  90. package/src/components/SheetContainer/SheetContainer.stories.tsx +4 -2
  91. package/src/components/SheetContainer/SheetContainer.tsx +19 -12
  92. package/src/components/Toolbar/Toolbar.tsx +72 -59
  93. package/src/compute-graph/compute-graph.ts +22 -7
  94. package/src/compute-graph/functions/async-function.ts +1 -0
  95. package/src/compute-graph/functions/edge-function.ts +5 -3
  96. package/src/defs/sheet-range-types.ts +8 -6
  97. package/src/defs/util.ts +1 -0
  98. package/src/integrations/thread-ranges.ts +3 -3
  99. package/src/meta.ts +1 -0
  100. package/src/model/sheet-model.test.ts +5 -3
  101. package/src/model/sheet-model.ts +93 -21
  102. package/src/translations.ts +12 -3
  103. package/src/types.ts +21 -1
  104. package/dist/lib/browser/SheetContainer-JBB7W52Y.mjs.map +0 -7
  105. package/dist/lib/browser/chunk-2ZK3YMZG.mjs.map +0 -7
  106. package/dist/lib/browser/chunk-3QWIMZZJ.mjs.map +0 -7
  107. package/dist/lib/browser/chunk-XXDHBYZQ.mjs.map +0 -7
  108. package/dist/lib/node/SheetContainer-L37HUFCF.cjs.map +0 -7
  109. package/dist/lib/node/chunk-7AWAC3R3.cjs.map +0 -7
  110. package/dist/lib/node/chunk-QNFMTK3X.cjs.map +0 -7
  111. package/dist/lib/node/chunk-V7E5JZBD.cjs.map +0 -7
  112. package/dist/lib/node-esm/SheetContainer-CLKFEM35.mjs.map +0 -7
  113. package/dist/lib/node-esm/chunk-3JYJEOCF.mjs.map +0 -7
  114. package/dist/lib/node-esm/chunk-JBTORSST.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-SPQFLYC2.mjs.map +0 -7
  116. /package/dist/lib/browser/{compute-graph-ZQKB6QVP.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  117. /package/dist/lib/node-esm/{compute-graph-VKRG526N.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/extensions/compute.ts", "../../../src/extensions/editor/extension.ts", "../../../src/components/SheetContext/SheetContext.tsx", "../../../src/model/sheet-model.ts", "../../../src/model/useSheetModel.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/index.ts", "../../../src/components/RangeList/RangeList.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '../../compute-graph';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type UnsubscribeCallback, debounce } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/react-ui-editor';\n\nimport { type ComputeGraph, type ComputeNode, createSheetName } from '../compute-graph';\nimport { type CellAddress } from '../defs';\nimport { type CellScalarValue } from '../types';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: UnsubscribeCallback;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView) {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { singleValueFacet } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type FunctionDefinition } from '../../compute-graph';\nimport { RANGE_NOTATION } from '../../defs';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accentText',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pinkText',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-tealText',\n },\n {\n tag: tags.bool,\n class: 'text-tealText',\n },\n {\n tag: tags.string,\n class: 'text-tealText',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-unAccent',\n },\n]);\n\nconst languageFacet = singleValueFacet<Language>();\n\nexport type SheetExtensionOptions = {\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({ idiom: 'en-US', decimalSeparator: '.' });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accentText';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-greenText';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n // NOTE: Useful for debugging.\n closeOnBlur: false,\n icons: false,\n tooltipClass: () =>\n mx(\n '!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accentSurface',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n },\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const language = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function':\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n\n case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\n });\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type ComputeGraph } from '../../compute-graph';\nimport { type CellAddress, type CellRange, type CompleteCellRange } from '../../defs';\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n};\n\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nconst SheetProviderImpl = ({\n model,\n onInfo,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model'>>>) => {\n const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);\n\n const [cursor, setCursorInternal] = useState<CellAddress>();\n const [range, setRangeInternal] = useState<CellRange>();\n const [cursorFallbackRange, setCursorFallbackRange] = useState<CompleteCellRange>();\n const [activeRefs, setActiveRefs] = useState<GridContentProps['activeRefs']>('');\n\n const setCursor = useCallback(\n (nextCursor?: CellAddress) => {\n setCursorInternal(nextCursor);\n setCursorFallbackRange(\n range?.to ? (range as CompleteCellRange) : nextCursor ? { from: nextCursor!, to: nextCursor! } : undefined,\n );\n },\n [range],\n );\n const setRange = useCallback(\n (nextRange?: CellRange) => {\n setRangeInternal(nextRange);\n setCursorFallbackRange(\n nextRange?.to ? (nextRange as CompleteCellRange) : cursor ? { from: cursor!, to: cursor! } : undefined,\n );\n },\n [cursor],\n );\n\n return (\n <SheetContext.Provider\n value={{\n id,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n // TODO(burdon): Change to event.\n onInfo,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({ children, graph, sheet, readonly, onInfo }: PropsWithChildren<SheetProviderProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n\n return !model ? null : (\n <Grid.Root id={fullyQualifiedId(sheet)}>\n <SheetProviderImpl model={model} onInfo={onInfo}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type SimpleCellRange } from 'hyperformula/typings/AbsoluteCellRange';\nimport { type SimpleCellAddress } from 'hyperformula/typings/Cell';\nimport { type SimpleDate, type SimpleDateTime } from 'hyperformula/typings/DateTimeHelper';\n\nimport { Event } from '@dxos/async';\nimport { Resource } from '@dxos/context';\nimport { getTypename, FormatEnum, TypeEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { DetailedCellError, ExportedCellChange } from '#hyperformula';\nimport { type ComputeGraph, type ComputeNode, type ComputeNodeEvent, createSheetName } from '../compute-graph';\nimport {\n addressFromA1Notation,\n addressFromIndex,\n addressToA1Notation,\n addressToIndex,\n initialize,\n insertIndices,\n isFormula,\n type CellAddress,\n type CellRange,\n ReadonlyException,\n MAX_COLUMNS,\n MAX_ROWS,\n} from '../defs';\nimport { type CellScalarValue, type CellValue, type SheetType, type RestoreAxis } from '../types';\n\n// Map sheet types to system types.\n// https://hyperformula.handsontable.com/guide/types-of-values.html\n// - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)\n// - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)\nconst typeMap: Record<string, { type: TypeEnum; format?: FormatEnum }> = {\n BOOLEAN: { type: TypeEnum.Boolean },\n NUMBER_RAW: { type: TypeEnum.Number },\n NUMBER_PERCENT: { type: TypeEnum.Number, format: FormatEnum.Percent },\n NUMBER_CURRENCY: { type: TypeEnum.Number, format: FormatEnum.Currency },\n NUMBER_DATETIME: { type: TypeEnum.String, format: FormatEnum.DateTime },\n NUMBER_DATE: { type: TypeEnum.String, format: FormatEnum.Date },\n NUMBER_TIME: { type: TypeEnum.String, format: FormatEnum.Time },\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: SheetType,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open() {\n log('initialize', { id: this.id });\n initialize(this._sheet);\n\n this._graph.update.on((event) => {\n if (event.type === 'functionsUpdated') {\n this.reset();\n }\n });\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(createSheetName({ type: getTypename(this._sheet)!, id: this._sheet.id }));\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset() {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n const binding = this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));\n if (binding) {\n value = this._graph.mapFormulaToNative(binding);\n } else {\n // If binding is not found, render the cell as empty.\n // This prevents the cell from momentarily rendering an error while the binding is being loaded.\n value = '';\n }\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate() {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1) {\n const idx = insertIndices(this._sheet.rows, i, n, MAX_ROWS);\n this.reset();\n return idx;\n }\n\n insertColumns(i: number, n = 1) {\n const idx = insertIndices(this._sheet.columns, i, n, MAX_COLUMNS);\n this.reset();\n return idx;\n }\n\n dropRow(rowIndex: string): RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),\n to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.rows.indexOf(rowIndex);\n this.clear(range);\n this._sheet.rows.splice(index, 1);\n delete this._sheet.rowMeta[rowIndex];\n this.reset();\n return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };\n }\n\n dropColumn(colIndex: string): RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),\n to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.columns.indexOf(colIndex);\n this.clear(range);\n this._sheet.columns.splice(index, 1);\n delete this._sheet.columnMeta[colIndex];\n this.reset();\n return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };\n }\n\n restoreRow({ index, axisIndex, axisMeta, values }: RestoreAxis) {\n this._sheet.rows.splice(index, 0, axisIndex);\n values.forEach((value, col) => {\n if (value) {\n this._sheet.cells[`${this._sheet.columns[col]}@${axisIndex}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.rowMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n restoreColumn({ index, axisIndex, axisMeta, values }: RestoreAxis) {\n this._sheet.columns.splice(index, 0, axisIndex);\n values.forEach((value, row) => {\n if (value) {\n this._sheet.cells[`${axisIndex}@${this._sheet.rows[row]}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.columnMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange) {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n cut(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n copy(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress) {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n this._sheet.cells[idx] = { value: newValue };\n }\n }\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const address = toSimpleCellAddress(this._node.sheetId, cell);\n const value = this._node.graph.hf.getCellValue(address);\n if (value instanceof DetailedCellError) {\n // TODO(wittjosiah): Error details should be shown in cell `title`.\n log.info('cell error', { cell, error: value });\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueDescription(cell: CellAddress): { type: TypeEnum; format?: FormatEnum } | undefined {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue) {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n insertIndices(this._sheet.rows, cell.row, 1, MAX_ROWS);\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n insertIndices(this._sheet.columns, cell.col, 1, MAX_COLUMNS);\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n delete this._sheet.cells[idx];\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(this.mapFormulaRefsToIndices(value));\n }\n\n this._sheet.cells[idx] = { value };\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, CellValue>) {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number) {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number) {\n throw new Error('Not implemented');\n }\n\n //\n // Indices.\n //\n\n /**\n * Map from A1 notation to indices.\n */\n mapFormulaRefsToIndices(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {\n return addressToIndex(this._sheet, addressFromA1Notation(match));\n });\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '../compute-graph';\nimport { SheetModel } from '../model';\nimport { type SheetType } from '../types';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: SheetType,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n defaultSizeRow,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\n type DxGridPosition,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, dxGridCellIndexToSheetCellAddress, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from '../../defs';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultSizeRow, readonly: true },\n grid: { size: defaultSizeRow, resizeable: true },\n};\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us\n // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);\n const dispatch = useIntentDispatcher();\n const rangeController = useRef<RangeController>();\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell) {\n if (cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n setExtraplanarFocus(null);\n } else {\n setExtraplanarFocus(cell);\n }\n } else {\n setExtraplanarFocus(null);\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<EditorKeyHandler>(\n (_value, event) => {\n if (event) {\n const { key, shift } = event;\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n }\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (value !== undefined) {\n model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention],\n );\n\n const selectEntireAxis = useCallback(\n (pos: DxGridPosition) => {\n switch (pos.plane) {\n case 'frozenRowsStart':\n return dxGrid?.setSelection({\n start: { col: pos.col, row: 0, plane: 'grid' },\n end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },\n });\n }\n },\n [dxGrid, model.sheet],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell) {\n selectEntireAxis(cell);\n }\n },\n [selectEntireAxis],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n return cursorFallbackRange && model.clear(cursorFallbackRange);\n case 'Enter':\n case 'Space':\n if (dxGrid && extraplanarFocus) {\n switch (extraplanarFocus.plane) {\n case 'frozenRowsStart':\n case 'frozenColsStart':\n event.preventDefault();\n return selectEntireAxis(extraplanarFocus);\n }\n }\n }\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'x':\n case 'X':\n event.preventDefault();\n return cursorFallbackRange && model.cut(cursorFallbackRange);\n case 'c':\n case 'C':\n event.preventDefault();\n return cursorFallbackRange && model.copy(cursorFallbackRange);\n case 'v':\n case 'V':\n event.preventDefault();\n return cursor && model.paste(cursor);\n case 'z':\n event.preventDefault();\n return event.shiftKey ? model.redo() : model.undo();\n case 'Z':\n case 'y':\n event.preventDefault();\n return model.redo();\n }\n }\n },\n [cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],\n );\n\n const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);\n const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell && cell.plane.startsWith('frozen')) {\n event.preventDefault();\n contextMenuAnchorRef.current = event.target as HTMLButtonElement;\n setContextMenuOpen(cell);\n }\n }, []);\n\n const handleAxisMenuAction = useCallback(\n (operation: 'insert-before' | 'insert-after' | 'drop') => {\n switch (operation) {\n case 'insert-before':\n case 'insert-after':\n return dispatch({\n action: SheetAction.INSERT_AXIS,\n data: {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n } satisfies SheetAction.InsertAxis,\n });\n break;\n case 'drop':\n return dispatch({\n action: SheetAction.DROP_AXIS,\n data: {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n } satisfies SheetAction.DropAxis,\n });\n }\n },\n [contextMenuAxis, contextMenuOpen, model, dispatch],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extension = useMemo(\n () => [\n editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: string) => {\n const cell = dxGridCellIndexToSheetCellAddress(index);\n return model.getCellText(cell);\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <>\n <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLUMNS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n rowDefault={sheetRowDefault}\n columnDefault={sheetColDefault}\n frozen={frozen}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-separator'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-before')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { parseValue, cellClassesForFieldType } from '@dxos/react-ui-data';\nimport {\n type GridContentProps,\n type DxGridElement,\n type DxGridAxisMeta,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPlaneCells,\n type DxGridCellValue,\n colToA1Notation,\n rowToA1Notation,\n commentedClassName,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type CellAddress, inRange, cellClassNameForRange, rangeFromIndex } from '../../defs';\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\n\nexport const dxGridCellIndexToSheetCellAddress = (index: string): CellAddress => {\n const [colStr, rowStr] = index.split(',');\n return {\n col: parseInt(colStr),\n row: parseInt(rowStr),\n };\n};\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread?.anchor && parseThreadAnchorAsCellRange(thread!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n\n const description = model.getValueDescription(address);\n const type = description?.type;\n const format = description?.format;\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue({ type, format, value: rawValue }),\n className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end !pie-1 text-subdued',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'text-subdued',\n resizeHandle: 'col',\n});\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n const unsubscribe = model.graph.update.on(handleCellsUpdate);\n return () => {\n cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n unsubscribe();\n };\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model, dxGrid]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { type IntentResolver, LayoutAction, useIntentDispatcher, useIntentResolver } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { type CellAddress, type CompleteCellRange, inRange } from '../defs';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const handleScrollIntoView: IntentResolver = useCallback(\n ({ action, data }) => {\n switch (action) {\n case LayoutAction.SCROLL_INTO_VIEW: {\n if (!data?.id || data?.cursor === undefined || data?.id !== fullyQualifiedId(model.sheet)) {\n return;\n }\n setActiveRefs(data.thread);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(data.cursor);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n }\n }\n },\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, handleScrollIntoView);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const dispatch = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find(({ anchor }) => {\n if (anchor) {\n const range = parseThreadAnchorAsCellRange(anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch([\n { action: 'dxos.org/plugin/thread/action/select', data: { current: fullyQualifiedId(closestThread) } },\n ]);\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { rangeFromIndex, rangeToA1Notation } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_language", "import_view", "import_react_ui_editor", "import_react", "import_invariant", "import_async", "import_react_ui_grid", "import_echo", "import_react_ui_theme", "import_app_framework", "import_echo_schema", "import_react_ui", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "React", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "highlightStyles", "HighlightStyle", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "sheetExtension", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "constructor", "_view", "ranges", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling", "typeMap", "BOOLEAN", "TypeEnum", "Boolean", "NUMBER_RAW", "Number", "NUMBER_PERCENT", "format", "FormatEnum", "Percent", "NUMBER_CURRENCY", "Currency", "NUMBER_DATETIME", "String", "DateTime", "NUMBER_DATE", "Date", "NUMBER_TIME", "Time", "getTopLeft", "row", "Math", "min", "col", "toSimpleCellAddress", "sheet", "cell", "toModelRange", "start", "end", "SheetModel", "Resource", "_graph", "_sheet", "_options", "id", "PublicKey", "random", "truncate", "Event", "readonly", "bounds", "rows", "columns", "_open", "log", "initialize", "on", "event", "reset", "_node", "getOrCreateNode", "createSheetName", "getTypename", "unsubscribe", "emit", "_ctx", "onDispose", "invariant", "hf", "clearSheet", "sheetId", "Object", "entries", "cells", "forEach", "addressFromIndex", "isFormula", "binding", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "mapFormulaToNative", "setCellContents", "recalculate", "rebuildAndRecalculate", "insertRows", "i", "n", "idx", "insertIndices", "MAX_ROWS", "insertColumns", "MAX_COLUMNS", "dropRow", "rowIndex", "values", "getCellValues", "flat", "index", "indexOf", "clear", "splice", "rowMeta", "axis", "axisIndex", "axisMeta", "dropColumn", "colIndex", "columnMeta", "restoreRow", "restoreColumn", "topLeft", "_iterRange", "addressToIndex", "cut", "copy", "paste", "isClipboardEmpty", "change", "ExportedCellChange", "address", "newValue", "undo", "isThereSomethingToUndo", "redo", "isThereSomethingToRedo", "getCellValue", "getCellText", "getValue", "DetailedCellError", "error", "getValueDescription", "addr", "getCellValueDetailedType", "setValue", "ReadonlyException", "refresh", "mapFunctionBindingToId", "mapFormulaRefsToIndices", "setValues", "addressFromA1Notation", "cb", "rowRange", "max", "columnRange", "rowCells", "column", "push", "_deleteIndices", "indices", "_moveIndices", "j", "formula", "replace", "addressToA1Notation", "toLocalDate", "num", "year", "month", "day", "hours", "minutes", "seconds", "toDateTime", "numberToDateTime", "toDate", "numberToDate", "toTime", "numberToTime", "useSheetModel", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "clearTimeout", "close", "SheetContext", "useSheetContext", "SheetProviderImpl", "onInfo", "__gridScope", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "nextRange", "SheetProvider", "Grid", "Root", "fullyQualifiedId", "RangeList", "useTranslation", "SHEET_PLUGIN", "handleSelectRange", "handleDeleteRange", "findIndex", "sheetRange", "h2", "List", "items", "isItem", "S", "is", "Range", "Item", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "SheetContainer", "lazy", "completeCellRangeToThreadCursor", "parseThreadAnchorAsCellRange", "coords", "split", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "handleScrollIntoView", "action", "LayoutAction", "SCROLL_INTO_VIEW", "thread", "setFocus", "plane", "useIntentResolver", "useSelectThreadOnCellFocus", "useIntentDispatcher", "threads", "useMemo", "JSON", "stringify", "selectClosestThread", "cellAddress", "closestThread", "inRange", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "dxGridCellIndexToSheetCellAddress", "colStr", "rowStr", "createDxGridColumns", "reduce", "acc", "columnId", "numericIndex", "size", "resizeable", "createDxGridRows", "rowId", "projectCellProps", "rawValue", "threadRefs", "join", "cellClassNameForRange", "reverse", "parseValue", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "setRows", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetRowDefault", "defaultSizeRow", "sheetColDefault", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "closestCell", "target", "handleClose", "_value", "shift", "includes", "delta", "refocus", "handleBlur", "handleAxisResize", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "handleClick", "handleKeyDown", "preventDefault", "metaKey", "ctrlKey", "shiftKey", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetAction", "INSERT_AXIS", "DROP_AXIS", "editorKeys", "onClose", "initialContent", "onNav", "getFunctions", "fn", "mode", "getCellContent", "GridCellEditor", "onBlur", "Content", "limitColumns", "DEFAULT_COLUMNS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "ref", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Icon", "icon", "span", "Arrow"]
7
+ }
@@ -16,27 +16,27 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var compute_graph_RJB6OVW6_exports = {};
20
- __export(compute_graph_RJB6OVW6_exports, {
21
- AsyncFunctionPlugin: () => import_chunk_QNFMTK3X.AsyncFunctionPlugin,
22
- ComputeGraph: () => import_chunk_QNFMTK3X.ComputeGraph,
23
- ComputeGraphRegistry: () => import_chunk_QNFMTK3X.ComputeGraphRegistry,
24
- ComputeNode: () => import_chunk_QNFMTK3X.ComputeNode,
25
- EDGE_FUNCTION_NAME: () => import_chunk_QNFMTK3X.EDGE_FUNCTION_NAME,
26
- EdgeFunctionPlugin: () => import_chunk_QNFMTK3X.EdgeFunctionPlugin,
27
- EdgeFunctionPluginTranslations: () => import_chunk_QNFMTK3X.EdgeFunctionPluginTranslations,
28
- FunctionContext: () => import_chunk_QNFMTK3X.FunctionContext,
29
- createSheetName: () => import_chunk_QNFMTK3X.createSheetName,
30
- defaultFunctionContextOptions: () => import_chunk_QNFMTK3X.defaultFunctionContextOptions,
31
- defaultFunctions: () => import_chunk_QNFMTK3X.defaultFunctions,
32
- defaultOptions: () => import_chunk_QNFMTK3X.defaultOptions,
33
- defaultPlugins: () => import_chunk_QNFMTK3X.defaultPlugins,
34
- parseSheetName: () => import_chunk_QNFMTK3X.parseSheetName
19
+ var compute_graph_KGWA2QLE_exports = {};
20
+ __export(compute_graph_KGWA2QLE_exports, {
21
+ AsyncFunctionPlugin: () => import_chunk_O7XR4R7Y.AsyncFunctionPlugin,
22
+ ComputeGraph: () => import_chunk_O7XR4R7Y.ComputeGraph,
23
+ ComputeGraphRegistry: () => import_chunk_O7XR4R7Y.ComputeGraphRegistry,
24
+ ComputeNode: () => import_chunk_O7XR4R7Y.ComputeNode,
25
+ EDGE_FUNCTION_NAME: () => import_chunk_O7XR4R7Y.EDGE_FUNCTION_NAME,
26
+ EdgeFunctionPlugin: () => import_chunk_O7XR4R7Y.EdgeFunctionPlugin,
27
+ EdgeFunctionPluginTranslations: () => import_chunk_O7XR4R7Y.EdgeFunctionPluginTranslations,
28
+ FunctionContext: () => import_chunk_O7XR4R7Y.FunctionContext,
29
+ createSheetName: () => import_chunk_O7XR4R7Y.createSheetName,
30
+ defaultFunctionContextOptions: () => import_chunk_O7XR4R7Y.defaultFunctionContextOptions,
31
+ defaultFunctions: () => import_chunk_O7XR4R7Y.defaultFunctions,
32
+ defaultOptions: () => import_chunk_O7XR4R7Y.defaultOptions,
33
+ defaultPlugins: () => import_chunk_O7XR4R7Y.defaultPlugins,
34
+ parseSheetName: () => import_chunk_O7XR4R7Y.parseSheetName
35
35
  });
36
- module.exports = __toCommonJS(compute_graph_RJB6OVW6_exports);
37
- var import_chunk_QNFMTK3X = require("./chunk-QNFMTK3X.cjs");
38
- var import_chunk_V7E5JZBD = require("./chunk-V7E5JZBD.cjs");
39
- var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
36
+ module.exports = __toCommonJS(compute_graph_KGWA2QLE_exports);
37
+ var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
38
+ var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
39
+ var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
40
40
  // Annotate the CommonJS export names for ESM import in node:
41
41
  0 && (module.exports = {
42
42
  AsyncFunctionPlugin,
@@ -54,4 +54,4 @@ var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
54
54
  defaultPlugins,
55
55
  parseSheetName
56
56
  });
57
- //# sourceMappingURL=compute-graph-RJB6OVW6.cjs.map
57
+ //# sourceMappingURL=compute-graph-KGWA2QLE.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["compute-graph-RJB6OVW6.cjs"],
4
- "sourcesContent": ["import {\n AsyncFunctionPlugin,\n ComputeGraph,\n ComputeGraphRegistry,\n ComputeNode,\n EDGE_FUNCTION_NAME,\n EdgeFunctionPlugin,\n EdgeFunctionPluginTranslations,\n FunctionContext,\n createSheetName,\n defaultFunctionContextOptions,\n defaultFunctions,\n defaultOptions,\n defaultPlugins,\n parseSheetName\n} from \"./chunk-QNFMTK3X.cjs\";\nimport \"./chunk-V7E5JZBD.cjs\";\nimport \"./chunk-QIFIGEKV.cjs\";\nexport {\n AsyncFunctionPlugin,\n ComputeGraph,\n ComputeGraphRegistry,\n ComputeNode,\n EDGE_FUNCTION_NAME,\n EdgeFunctionPlugin,\n EdgeFunctionPluginTranslations,\n FunctionContext,\n createSheetName,\n defaultFunctionContextOptions,\n defaultFunctions,\n defaultOptions,\n defaultPlugins,\n parseSheetName\n};\n//# sourceMappingURL=compute-graph-RJB6OVW6.cjs.map\n"],
3
+ "sources": ["compute-graph-KGWA2QLE.cjs"],
4
+ "sourcesContent": ["import {\n AsyncFunctionPlugin,\n ComputeGraph,\n ComputeGraphRegistry,\n ComputeNode,\n EDGE_FUNCTION_NAME,\n EdgeFunctionPlugin,\n EdgeFunctionPluginTranslations,\n FunctionContext,\n createSheetName,\n defaultFunctionContextOptions,\n defaultFunctions,\n defaultOptions,\n defaultPlugins,\n parseSheetName\n} from \"./chunk-O7XR4R7Y.cjs\";\nimport \"./chunk-AWKOWDMI.cjs\";\nimport \"./chunk-2ZVZI2KJ.cjs\";\nexport {\n AsyncFunctionPlugin,\n ComputeGraph,\n ComputeGraphRegistry,\n ComputeNode,\n EDGE_FUNCTION_NAME,\n EdgeFunctionPlugin,\n EdgeFunctionPluginTranslations,\n FunctionContext,\n createSheetName,\n defaultFunctionContextOptions,\n defaultFunctions,\n defaultOptions,\n defaultPlugins,\n parseSheetName\n};\n//# sourceMappingURL=compute-graph-KGWA2QLE.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAeO;AACP,4BAAO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -32,10 +32,10 @@ __export(node_exports, {
32
32
  default: () => src_default
33
33
  });
34
34
  module.exports = __toCommonJS(node_exports);
35
- var import_chunk_7AWAC3R3 = require("./chunk-7AWAC3R3.cjs");
36
- var import_chunk_QNFMTK3X = require("./chunk-QNFMTK3X.cjs");
37
- var import_chunk_V7E5JZBD = require("./chunk-V7E5JZBD.cjs");
38
- var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
35
+ var import_chunk_OO24XJBV = require("./chunk-OO24XJBV.cjs");
36
+ var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
37
+ var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
38
+ var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_invariant = require("@dxos/invariant");
@@ -53,7 +53,7 @@ var serializer = {
53
53
  },
54
54
  deserialize: async ({ content, newId }) => {
55
55
  const { id, ...parsed } = JSON.parse(content);
56
- const sheet = (0, import_echo2.create)(import_chunk_V7E5JZBD.SheetType, parsed);
56
+ const sheet = (0, import_echo2.create)(import_chunk_AWKOWDMI.SheetType, parsed);
57
57
  if (!newId) {
58
58
  const core = (0, import_echo2.getObjectCore)(sheet);
59
59
  core.id = id;
@@ -64,15 +64,20 @@ var serializer = {
64
64
  var translations_default = [
65
65
  {
66
66
  "en-US": {
67
- [import_chunk_QIFIGEKV.SHEET_PLUGIN]: {
67
+ [import_chunk_2ZVZI2KJ.SHEET_PLUGIN]: {
68
68
  "plugin name": "Sheets",
69
69
  "sheet title placeholder": "New sheet",
70
70
  "create sheet label": "Create sheet",
71
71
  "create sheet section label": "Create sheet",
72
72
  "cell placeholder": "Cell value...",
73
- "toolbar left label": "Align left",
74
- "toolbar left center": "Align center",
75
- "toolbar left right": "Align right",
73
+ "range key alignment label": "Align",
74
+ "range key style label": "Style",
75
+ "range value start label": "Align left",
76
+ "range value center label": "Align center",
77
+ "range value end label": "Align right",
78
+ "range value softwrap label": "Wrap text",
79
+ "range value highlight label": "Highlight",
80
+ "toolbar action label": "{{value}}",
76
81
  "selection overlaps existing comment label": "Selected cell already has a comment",
77
82
  "comment label": "Add comment",
78
83
  "comment ranges not supported label": "Commenting on ranges is not yet supported",
@@ -83,7 +88,11 @@ var translations_default = [
83
88
  "delete col label": "Delete column",
84
89
  "add row before label": "Add row before",
85
90
  "add row after label": "Add row after",
86
- "delete row label": "Delete row"
91
+ "delete row label": "Delete row",
92
+ "range list heading": "Ranges",
93
+ "range title": "{{position}} \u2014 {{value}}",
94
+ "col dropped label": "Deleted a column",
95
+ "row dropped label": "Deleted a row"
87
96
  }
88
97
  }
89
98
  }
@@ -92,7 +101,7 @@ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/sr
92
101
  var SheetPlugin = () => {
93
102
  let computeGraphRegistry;
94
103
  return {
95
- meta: import_chunk_QIFIGEKV.meta_default,
104
+ meta: import_chunk_2ZVZI2KJ.meta_default,
96
105
  ready: async (plugins) => {
97
106
  const client = (0, import_app_framework.resolvePlugin)(plugins, import_plugin_client.parseClientPlugin)?.provides.client;
98
107
  (0, import_invariant.invariant)(client, void 0, {
@@ -110,7 +119,7 @@ var SheetPlugin = () => {
110
119
  url.protocol = "https";
111
120
  remoteFunctionUrl = url.toString();
112
121
  }
113
- const { defaultPlugins, ComputeGraphRegistry } = await import("./compute-graph-RJB6OVW6.cjs");
122
+ const { defaultPlugins, ComputeGraphRegistry } = await import("./compute-graph-KGWA2QLE.cjs");
114
123
  computeGraphRegistry = new ComputeGraphRegistry({
115
124
  plugins: defaultPlugins,
116
125
  remoteFunctionUrl
@@ -127,18 +136,18 @@ var SheetPlugin = () => {
127
136
  ""
128
137
  ]
129
138
  });
130
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_7AWAC3R3.ComputeGraphContextProvider, {
139
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.ComputeGraphContextProvider, {
131
140
  registry: computeGraphRegistry
132
141
  }, children);
133
142
  },
134
143
  metadata: {
135
144
  records: {
136
- [import_chunk_V7E5JZBD.SheetType.typename]: {
137
- label: (object) => object instanceof import_chunk_V7E5JZBD.SheetType ? object.name : void 0,
145
+ [import_chunk_AWKOWDMI.SheetType.typename]: {
146
+ label: (object) => object instanceof import_chunk_AWKOWDMI.SheetType ? object.name : void 0,
138
147
  placeholder: [
139
148
  "sheet title placeholder",
140
149
  {
141
- ns: import_chunk_QIFIGEKV.SHEET_PLUGIN
150
+ ns: import_chunk_2ZVZI2KJ.SHEET_PLUGIN
142
151
  }
143
152
  ],
144
153
  icon: "ph--grid-nine--regular",
@@ -151,7 +160,7 @@ var SheetPlugin = () => {
151
160
  // TODO(wittjosiah): Factor out to common package/plugin.
152
161
  // FunctionType is currently registered here in case script plugin isn't enabled.
153
162
  schema: [
154
- import_chunk_V7E5JZBD.SheetType,
163
+ import_chunk_AWKOWDMI.SheetType,
155
164
  import_types.FunctionType
156
165
  ]
157
166
  },
@@ -160,10 +169,10 @@ var SheetPlugin = () => {
160
169
  label: [
161
170
  "create sheet label",
162
171
  {
163
- ns: import_chunk_QIFIGEKV.SHEET_PLUGIN
172
+ ns: import_chunk_2ZVZI2KJ.SHEET_PLUGIN
164
173
  }
165
174
  ],
166
- action: import_chunk_V7E5JZBD.SheetAction.CREATE
175
+ action: import_chunk_AWKOWDMI.SheetAction.CREATE
167
176
  }
168
177
  },
169
178
  graph: {
@@ -174,7 +183,7 @@ var SheetPlugin = () => {
174
183
  return [];
175
184
  }
176
185
  return (0, import_plugin_graph.createExtension)({
177
- id: import_chunk_V7E5JZBD.SheetAction.CREATE,
186
+ id: import_chunk_AWKOWDMI.SheetAction.CREATE,
178
187
  filter: (node) => (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
179
188
  actions: ({ node }) => {
180
189
  const id = node.id.split("/").at(-1);
@@ -187,12 +196,12 @@ var SheetPlugin = () => {
187
196
  }
188
197
  return [
189
198
  {
190
- id: `${import_chunk_QIFIGEKV.SHEET_PLUGIN}/create/${node.id}`,
199
+ id: `${import_chunk_2ZVZI2KJ.SHEET_PLUGIN}/create/${node.id}`,
191
200
  data: async () => {
192
201
  await dispatch([
193
202
  {
194
- plugin: import_chunk_QIFIGEKV.SHEET_PLUGIN,
195
- action: import_chunk_V7E5JZBD.SheetAction.CREATE,
203
+ plugin: import_chunk_2ZVZI2KJ.SHEET_PLUGIN,
204
+ action: import_chunk_AWKOWDMI.SheetAction.CREATE,
196
205
  data: {
197
206
  space
198
207
  }
@@ -212,7 +221,7 @@ var SheetPlugin = () => {
212
221
  label: [
213
222
  "create sheet label",
214
223
  {
215
- ns: import_chunk_QIFIGEKV.SHEET_PLUGIN
224
+ ns: import_chunk_2ZVZI2KJ.SHEET_PLUGIN
216
225
  }
217
226
  ],
218
227
  icon: "ph--grid-nine--regular",
@@ -238,7 +247,7 @@ var SheetPlugin = () => {
238
247
  const space = (0, import_echo.getSpace)(doc);
239
248
  if (space) {
240
249
  const computeGraph = computeGraphRegistry.getOrCreateGraph(space);
241
- return import_chunk_7AWAC3R3.computeGraphFacet.of(computeGraph);
250
+ return import_chunk_OO24XJBV.computeGraphFacet.of(computeGraph);
242
251
  }
243
252
  }
244
253
  },
@@ -250,13 +259,13 @@ var SheetPlugin = () => {
250
259
  type: [
251
260
  "plugin name",
252
261
  {
253
- ns: import_chunk_QIFIGEKV.SHEET_PLUGIN
262
+ ns: import_chunk_2ZVZI2KJ.SHEET_PLUGIN
254
263
  }
255
264
  ],
256
265
  label: [
257
266
  "create sheet section label",
258
267
  {
259
- ns: import_chunk_QIFIGEKV.SHEET_PLUGIN
268
+ ns: import_chunk_2ZVZI2KJ.SHEET_PLUGIN
260
269
  }
261
270
  ],
262
271
  // TODO(thure): Refactor to use strings
@@ -265,42 +274,38 @@ var SheetPlugin = () => {
265
274
  ...props
266
275
  }),
267
276
  intent: {
268
- plugin: import_chunk_QIFIGEKV.SHEET_PLUGIN,
269
- action: import_chunk_V7E5JZBD.SheetAction.CREATE
277
+ plugin: import_chunk_2ZVZI2KJ.SHEET_PLUGIN,
278
+ action: import_chunk_AWKOWDMI.SheetAction.CREATE
270
279
  }
271
280
  }
272
281
  ]
273
282
  },
274
283
  thread: {
275
- predicate: (data) => data instanceof import_chunk_V7E5JZBD.SheetType,
276
- createSort: (sheet) => (indexA, indexB) => !indexA || !indexB ? 0 : (0, import_chunk_QNFMTK3X.compareIndexPositions)(sheet, indexA, indexB)
284
+ predicate: (data) => data instanceof import_chunk_AWKOWDMI.SheetType,
285
+ createSort: (sheet) => (indexA, indexB) => !indexA || !indexB ? 0 : (0, import_chunk_O7XR4R7Y.compareIndexPositions)(sheet, indexA, indexB)
277
286
  },
278
287
  surface: {
279
288
  component: ({ data, role }) => {
280
289
  const space = (0, import_echo.isEchoObject)(data.object) ? (0, import_echo.getSpace)(data.object) : void 0;
281
- const graph = (0, import_chunk_7AWAC3R3.useComputeGraph)(space);
282
- const handleSelectRange = () => {
283
- };
284
- const handleDeleteRange = () => {
285
- };
290
+ if (!space) {
291
+ return null;
292
+ }
286
293
  switch (role) {
287
294
  case "article":
288
295
  case "section":
289
- if (graph && data.object instanceof import_chunk_V7E5JZBD.SheetType) {
290
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_7AWAC3R3.SheetContainer, {
291
- graph,
296
+ if (data.object instanceof import_chunk_AWKOWDMI.SheetType) {
297
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.SheetContainer, {
298
+ space,
292
299
  sheet: data.object,
293
300
  role
294
301
  });
295
302
  }
296
303
  return null;
297
304
  case "complementary--settings":
298
- if (data.subject instanceof import_chunk_V7E5JZBD.SheetType) {
305
+ if (data.subject instanceof import_chunk_AWKOWDMI.SheetType) {
299
306
  return {
300
- node: /* @__PURE__ */ import_react.default.createElement(import_chunk_7AWAC3R3.RangeList, {
301
- sheet: data.subject,
302
- onSelect: handleSelectRange,
303
- onDelete: handleDeleteRange
307
+ node: /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.RangeList, {
308
+ sheet: data.subject
304
309
  })
305
310
  };
306
311
  }
@@ -312,11 +317,34 @@ var SheetPlugin = () => {
312
317
  intent: {
313
318
  resolver: async (intent) => {
314
319
  switch (intent.action) {
315
- case import_chunk_V7E5JZBD.SheetAction.CREATE: {
320
+ case import_chunk_AWKOWDMI.SheetAction.CREATE: {
316
321
  return {
317
- data: (0, import_chunk_QNFMTK3X.createSheet)()
322
+ data: (0, import_chunk_O7XR4R7Y.createSheet)()
318
323
  };
319
324
  }
325
+ case import_chunk_AWKOWDMI.SheetAction.INSERT_AXIS: {
326
+ const { model, axis, index, count } = intent.data;
327
+ const _indices = model[axis === "col" ? "insertColumns" : "insertRows"](index, count);
328
+ return;
329
+ }
330
+ case import_chunk_AWKOWDMI.SheetAction.DROP_AXIS: {
331
+ if (!intent.undo) {
332
+ const { model, axis, axisIndex } = intent.data;
333
+ const undoData = model[axis === "col" ? "dropColumn" : "dropRow"](axisIndex);
334
+ return {
335
+ undoable: {
336
+ message: translations_default[0]["en-US"][import_chunk_2ZVZI2KJ.SHEET_PLUGIN][`${axis} dropped label`],
337
+ data: {
338
+ ...undoData,
339
+ model
340
+ }
341
+ }
342
+ };
343
+ } else {
344
+ const { model, ...undoData } = intent.data;
345
+ model[undoData.axis === "col" ? "restoreColumn" : "restoreRow"](undoData);
346
+ }
347
+ }
320
348
  }
321
349
  }
322
350
  }