@dxos/plugin-sheet 0.7.2 → 0.7.3-main.2dd075e

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 (128) hide show
  1. package/dist/lib/browser/{SheetContainer-YAMIOFC6.mjs → SheetContainer-KCLT6PEO.mjs} +8 -6
  2. package/dist/lib/browser/SheetContainer-KCLT6PEO.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-QHQFM7LV.mjs → chunk-E5WQ7U7G.mjs} +77 -78
  4. package/dist/lib/browser/chunk-E5WQ7U7G.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-VMSX6Z4X.mjs → chunk-F3HE6D3J.mjs} +76 -26
  6. package/dist/lib/browser/chunk-F3HE6D3J.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-BVUN7SHF.mjs → chunk-JXFPOYNA.mjs} +1 -1
  8. package/dist/lib/browser/chunk-JXFPOYNA.mjs.map +7 -0
  9. package/dist/lib/browser/{compute-graph-GGWUX644.mjs → compute-graph-SNUS7HOH.mjs} +3 -3
  10. package/dist/lib/browser/index.mjs +84 -32
  11. package/dist/lib/browser/index.mjs.map +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/types.mjs +1 -1
  14. package/dist/lib/node/{SheetContainer-BSDHHYXE.cjs → SheetContainer-VVVRYTQG.cjs} +32 -31
  15. package/dist/lib/node/SheetContainer-VVVRYTQG.cjs.map +7 -0
  16. package/dist/lib/node/{chunk-J5ZFWMOD.cjs → chunk-45YW2DX2.cjs} +96 -101
  17. package/dist/lib/node/chunk-45YW2DX2.cjs.map +7 -0
  18. package/dist/lib/node/{chunk-O7XR4R7Y.cjs → chunk-KSEEI5VC.cjs} +87 -27
  19. package/dist/lib/node/chunk-KSEEI5VC.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-AWKOWDMI.cjs → chunk-OWH2EUHZ.cjs} +4 -4
  21. package/dist/lib/node/chunk-OWH2EUHZ.cjs.map +7 -0
  22. package/dist/lib/node/{compute-graph-KGWA2QLE.cjs → compute-graph-WILPHO4A.cjs} +20 -20
  23. package/dist/lib/node/{compute-graph-KGWA2QLE.cjs.map → compute-graph-WILPHO4A.cjs.map} +2 -2
  24. package/dist/lib/node/index.cjs +101 -47
  25. package/dist/lib/node/index.cjs.map +3 -3
  26. package/dist/lib/node/meta.json +1 -1
  27. package/dist/lib/node/types.cjs +6 -6
  28. package/dist/lib/node/types.cjs.map +1 -1
  29. package/dist/lib/node-esm/{SheetContainer-T47T2NYJ.mjs → SheetContainer-LSBE6Q4X.mjs} +8 -6
  30. package/dist/lib/node-esm/SheetContainer-LSBE6Q4X.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-CR4K75EL.mjs → chunk-6JF2AHKO.mjs} +76 -26
  32. package/dist/lib/node-esm/chunk-6JF2AHKO.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-UIBWRHW7.mjs → chunk-BVS2IQRO.mjs} +1 -1
  34. package/dist/lib/node-esm/chunk-BVS2IQRO.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-6GSTEN7N.mjs → chunk-NYDNXI7L.mjs} +77 -78
  36. package/dist/lib/node-esm/chunk-NYDNXI7L.mjs.map +7 -0
  37. package/dist/lib/node-esm/{compute-graph-2SCZT7N5.mjs → compute-graph-S6CVN7RS.mjs} +3 -3
  38. package/dist/lib/node-esm/index.mjs +84 -32
  39. package/dist/lib/node-esm/index.mjs.map +3 -3
  40. package/dist/lib/node-esm/meta.json +1 -1
  41. package/dist/lib/node-esm/types.mjs +1 -1
  42. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  43. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  44. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -0
  45. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/GridSheet/util.d.ts +0 -2
  47. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  48. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +2 -0
  49. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  50. package/dist/types/src/components/SheetObjectSettings.d.ts +7 -0
  51. package/dist/types/src/components/SheetObjectSettings.d.ts.map +1 -0
  52. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  53. package/dist/types/src/components/index.d.ts +1 -0
  54. package/dist/types/src/components/index.d.ts.map +1 -1
  55. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  56. package/dist/types/src/defs/types.d.ts +2 -4
  57. package/dist/types/src/defs/types.d.ts.map +1 -1
  58. package/dist/types/src/defs/util.d.ts +8 -0
  59. package/dist/types/src/defs/util.d.ts.map +1 -1
  60. package/dist/types/src/extensions/editor/extension.d.ts +2 -1
  61. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
  62. package/dist/types/src/index.d.ts +1 -0
  63. package/dist/types/src/index.d.ts.map +1 -1
  64. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  65. package/dist/types/src/model/sheet-model.d.ts +0 -4
  66. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  67. package/dist/types/src/model/testing.d.ts +6 -0
  68. package/dist/types/src/model/testing.d.ts.map +1 -0
  69. package/dist/types/src/testing/data.d.ts +3 -0
  70. package/dist/types/src/testing/data.d.ts.map +1 -0
  71. package/dist/types/src/testing/index.d.ts +1 -0
  72. package/dist/types/src/testing/index.d.ts.map +1 -1
  73. package/dist/types/src/testing/playwright/playwright.config.d.ts +3 -0
  74. package/dist/types/src/testing/playwright/playwright.config.d.ts.map +1 -0
  75. package/dist/types/src/testing/playwright/sheet-manager.d.ts +24 -0
  76. package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -0
  77. package/dist/types/src/testing/playwright/sheet.spec.d.ts +2 -0
  78. package/dist/types/src/testing/playwright/sheet.spec.d.ts.map +1 -0
  79. package/dist/types/src/testing/testing.d.ts +1 -2
  80. package/dist/types/src/testing/testing.d.ts.map +1 -1
  81. package/dist/types/src/translations.d.ts +61 -0
  82. package/dist/types/src/translations.d.ts.map +1 -1
  83. package/dist/types/src/types.d.ts +2 -3
  84. package/dist/types/src/types.d.ts.map +1 -1
  85. package/package.json +40 -37
  86. package/src/SheetPlugin.tsx +9 -21
  87. package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
  88. package/src/components/GridSheet/GridSheet.stories.tsx +2 -0
  89. package/src/components/GridSheet/GridSheet.tsx +18 -8
  90. package/src/components/GridSheet/util.ts +1 -9
  91. package/src/components/SheetContainer/SheetContainer.stories.tsx +44 -2
  92. package/src/components/SheetObjectSettings.tsx +38 -0
  93. package/src/components/Toolbar/Toolbar.tsx +7 -1
  94. package/src/components/index.ts +1 -0
  95. package/src/compute-graph/compute-graph.stories.tsx +1 -1
  96. package/src/compute-graph/compute-graph.test.ts +1 -1
  97. package/src/defs/sheet-range-types.ts +3 -0
  98. package/src/defs/types.ts +3 -1
  99. package/src/defs/util.ts +32 -1
  100. package/src/extensions/editor/extension.ts +3 -3
  101. package/src/index.ts +3 -0
  102. package/src/integrations/thread-ranges.ts +2 -0
  103. package/src/model/sheet-model.test.ts +35 -1
  104. package/src/model/sheet-model.ts +5 -17
  105. package/src/model/testing.ts +35 -0
  106. package/src/sanity.test.ts +1 -1
  107. package/src/testing/data.ts +33 -0
  108. package/src/testing/index.ts +1 -0
  109. package/src/testing/playwright/playwright.config.ts +18 -0
  110. package/src/testing/playwright/sheet-manager.ts +91 -0
  111. package/src/testing/playwright/sheet.spec.ts +78 -0
  112. package/src/testing/testing.tsx +1 -31
  113. package/src/translations.ts +4 -0
  114. package/src/types.ts +1 -3
  115. package/dist/lib/browser/SheetContainer-YAMIOFC6.mjs.map +0 -7
  116. package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +0 -7
  117. package/dist/lib/browser/chunk-QHQFM7LV.mjs.map +0 -7
  118. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +0 -7
  119. package/dist/lib/node/SheetContainer-BSDHHYXE.cjs.map +0 -7
  120. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +0 -7
  121. package/dist/lib/node/chunk-J5ZFWMOD.cjs.map +0 -7
  122. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +0 -7
  123. package/dist/lib/node-esm/SheetContainer-T47T2NYJ.mjs.map +0 -7
  124. package/dist/lib/node-esm/chunk-6GSTEN7N.mjs.map +0 -7
  125. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +0 -7
  126. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +0 -7
  127. /package/dist/lib/browser/{compute-graph-GGWUX644.mjs.map → compute-graph-SNUS7HOH.mjs.map} +0 -0
  128. /package/dist/lib/node-esm/{compute-graph-2SCZT7N5.mjs.map → compute-graph-S6CVN7RS.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", "../../../src/components/SheetObjectSettings.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 debug?: boolean;\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 = ({ debug, 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 closeOnBlur: !debug,\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 // Flags\n ignoreAttention?: boolean;\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 ignoreAttention,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model' | 'ignoreAttention'>>>) => {\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 ignoreAttention,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({\n children,\n graph,\n sheet,\n readonly,\n ignoreAttention,\n onInfo,\n}: 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} ignoreAttention={ignoreAttention}>\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 mapFormulaIndicesToRefs,\n mapFormulaRefsToIndices,\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(mapFormulaIndicesToRefs(this._sheet, 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(mapFormulaIndicesToRefs(this._sheet, 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(mapFormulaRefsToIndices(this._sheet, 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 * 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 type DxGridCellIndex,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, 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, ignoreAttention } =\n 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(parseCellIndex(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 (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\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: DxGridCellIndex) => {\n return model.getCellText(parseCellIndex(index));\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <div role='none' className='relative min-bs-0'>\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]:absolute [&_.dx-grid]:inset-0 [&_.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\n onClick={() => handleAxisMenuAction('insert-before')}\n data-testid={`grid.${contextMenuAxis}.insert-before`}\n >\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\n onClick={() => handleAxisMenuAction('insert-after')}\n data-testid={`grid.${contextMenuAxis}.insert-after`}\n >\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\n onClick={() => handleAxisMenuAction('drop')}\n data-testid={`grid.${contextMenuAxis}.drop`}\n >\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 </div>\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-form';\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 { inRange, cellClassNameForRange, rangeFromIndex } from '../../defs';\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\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 return { data: 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';\nexport * from './SheetObjectSettings';\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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { SPACE_PLUGIN } from '@dxos/plugin-space/meta';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { RangeList } from './RangeList';\nimport { type SheetType } from '../types';\n\nexport type SheetObjectSettingsProps = {\n sheet: SheetType;\n};\n\nexport const SheetObjectSettings = ({ sheet }: SheetObjectSettingsProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n // TODO(burdon): Standardize forms.\n return (\n <>\n <div role='form' className='flex flex-col w-full p-2 gap-1'>\n <Input.Root>\n <Input.Label>{t('name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('name placeholder')}\n value={sheet.name ?? ''}\n onChange={(event) => {\n sheet.name = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n <RangeList sheet={sheet} />\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", "debug", "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", "ignoreAttention", "__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", "SheetObjectSettings", "SPACE_PLUGIN", "div", "role", "Input", "Label", "TextInput", "placeholder", "onChange", "target", "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", "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", "handleClose", "_value", "shift", "includes", "delta", "refocus", "handleBlur", "parseCellIndex", "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", "data-testid", "Icon", "icon", "span", "Arrow"]
7
+ }
@@ -26,8 +26,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_O7XR4R7Y_exports = {};
30
- __export(chunk_O7XR4R7Y_exports, {
29
+ var chunk_KSEEI5VC_exports = {};
30
+ __export(chunk_KSEEI5VC_exports, {
31
+ ApiError: () => ApiError,
31
32
  AsyncFunctionPlugin: () => AsyncFunctionPlugin,
32
33
  ComputeGraph: () => ComputeGraph,
33
34
  ComputeGraphRegistry: () => ComputeGraphRegistry,
@@ -41,6 +42,7 @@ __export(chunk_O7XR4R7Y_exports, {
41
42
  MAX_COLUMNS: () => MAX_COLUMNS,
42
43
  MAX_ROWS: () => MAX_ROWS,
43
44
  RANGE_NOTATION: () => RANGE_NOTATION,
45
+ RangeException: () => RangeException,
44
46
  ReadonlyException: () => ReadonlyException,
45
47
  addressFromA1Notation: () => addressFromA1Notation,
46
48
  addressFromIndex: () => addressFromIndex,
@@ -48,7 +50,11 @@ __export(chunk_O7XR4R7Y_exports, {
48
50
  addressToIndex: () => addressToIndex,
49
51
  alignKey: () => alignKey,
50
52
  cellClassNameForRange: () => cellClassNameForRange,
53
+ columnLetter: () => columnLetter,
54
+ commentKey: () => commentKey,
51
55
  compareIndexPositions: () => compareIndexPositions,
56
+ createIndex: () => createIndex,
57
+ createIndices: () => createIndices,
52
58
  createSheet: () => createSheet,
53
59
  createSheetName: () => createSheetName,
54
60
  defaultFunctionContextOptions: () => defaultFunctionContextOptions,
@@ -59,14 +65,18 @@ __export(chunk_O7XR4R7Y_exports, {
59
65
  initialize: () => initialize,
60
66
  insertIndices: () => insertIndices,
61
67
  isFormula: () => isFormula,
68
+ mapFormulaIndicesToRefs: () => mapFormulaIndicesToRefs,
69
+ mapFormulaRefsToIndices: () => mapFormulaRefsToIndices,
62
70
  parseSheetName: () => parseSheetName,
71
+ posEquals: () => posEquals,
72
+ rangeFromA1Notation: () => rangeFromA1Notation,
63
73
  rangeFromIndex: () => rangeFromIndex,
64
74
  rangeToA1Notation: () => rangeToA1Notation,
65
75
  rangeToIndex: () => rangeToIndex,
66
76
  styleKey: () => styleKey
67
77
  });
68
- module.exports = __toCommonJS(chunk_O7XR4R7Y_exports);
69
- var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
78
+ module.exports = __toCommonJS(chunk_KSEEI5VC_exports);
79
+ var import_chunk_OWH2EUHZ = require("./chunk-OWH2EUHZ.cjs");
70
80
  var import_async = require("@dxos/async");
71
81
  var import_echo = require("@dxos/client/echo");
72
82
  var import_echo2 = require("@dxos/client/echo");
@@ -83,7 +93,8 @@ var import_context2 = require("@dxos/context");
83
93
  var import_hyperformula2 = require("#hyperformula");
84
94
  var import_invariant2 = require("@dxos/invariant");
85
95
  var import_crypto = require("@dxos/crypto");
86
- var import_echo_schema2 = require("@dxos/echo-schema");
96
+ var import_invariant3 = require("@dxos/invariant");
97
+ var import_live_object = require("@dxos/live-object");
87
98
  var import_lodash = __toESM(require("lodash.defaultsdeep"));
88
99
  var import_async3 = require("@dxos/async");
89
100
  var import_log2 = require("@dxos/log");
@@ -97,7 +108,7 @@ var import_util2 = require("@dxos/util");
97
108
  var import_hyperformula4 = require("#hyperformula");
98
109
  var import_lodash2 = __toESM(require("lodash.defaultsdeep"));
99
110
  var import_context3 = require("@dxos/context");
100
- var import_invariant3 = require("@dxos/invariant");
111
+ var import_invariant4 = require("@dxos/invariant");
101
112
  var import_log4 = require("@dxos/log");
102
113
  var import_hyperformula5 = require("#hyperformula");
103
114
  var alignKey = "alignment";
@@ -144,7 +155,7 @@ var posEquals = (a, b) => {
144
155
  var columnLetter = (col) => {
145
156
  (0, import_invariant2.invariant)(col < MAX_COLUMNS, `Invalid column: ${col}`, {
146
157
  F: __dxlog_file,
147
- L: 31,
158
+ L: 32,
148
159
  S: void 0,
149
160
  A: [
150
161
  "col < MAX_COLUMNS",
@@ -160,7 +171,7 @@ var addressFromA1Notation = (ref) => {
160
171
  const match = ref.match(/([A-Z]+)(\d+)/);
161
172
  (0, import_invariant2.invariant)(match, `Invalid notation: ${ref}`, {
162
173
  F: __dxlog_file,
163
- L: 45,
174
+ L: 46,
164
175
  S: void 0,
165
176
  A: [
166
177
  "match",
@@ -178,6 +189,13 @@ var rangeToA1Notation = (range) => {
178
189
  range?.to && addressToA1Notation(range?.to)
179
190
  ].filter(Boolean).join(":");
180
191
  };
192
+ var rangeFromA1Notation = (ref) => {
193
+ const [from, to] = ref.split(":").map(addressFromA1Notation);
194
+ return {
195
+ from,
196
+ to
197
+ };
198
+ };
181
199
  var inRange = (range, cell) => {
182
200
  if (!range) {
183
201
  return false;
@@ -198,6 +216,7 @@ var inRange = (range, cell) => {
198
216
  const { col, row } = cell;
199
217
  return col >= cMin && col <= cMax && row >= rMin && row <= rMax;
200
218
  };
219
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/defs/util.ts";
201
220
  var ApiError = class extends Error {
202
221
  };
203
222
  var ReadonlyException = class extends ApiError {
@@ -233,7 +252,7 @@ var initialize = (sheet, { rows = DEFAULT_ROWS, columns = DEFAULT_COLUMNS } = {}
233
252
  }
234
253
  };
235
254
  var createSheet = ({ name, cells, ...size } = {}) => {
236
- const sheet = (0, import_echo_schema2.create)(import_chunk_AWKOWDMI.SheetType, {
255
+ const sheet = (0, import_live_object.create)(import_chunk_OWH2EUHZ.SheetType, {
237
256
  name,
238
257
  cells: {},
239
258
  rows: [],
@@ -247,6 +266,9 @@ var createSheet = ({ name, cells, ...size } = {}) => {
247
266
  if (cells) {
248
267
  Object.entries(cells).forEach(([key, { value }]) => {
249
268
  const idx = addressToIndex(sheet, addressFromA1Notation(key));
269
+ if (isFormula(value)) {
270
+ value = mapFormulaRefsToIndices(sheet, value);
271
+ }
250
272
  sheet.cells[idx] = {
251
273
  value
252
274
  };
@@ -286,6 +308,34 @@ var compareIndexPositions = (sheet, indexA, indexB) => {
286
308
  return columnA - columnB;
287
309
  }
288
310
  };
311
+ var mapFormulaRefsToIndices = (sheet, formula) => {
312
+ (0, import_invariant3.invariant)(isFormula(formula), void 0, {
313
+ F: __dxlog_file2,
314
+ L: 153,
315
+ S: void 0,
316
+ A: [
317
+ "isFormula(formula)",
318
+ ""
319
+ ]
320
+ });
321
+ return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {
322
+ return addressToIndex(sheet, addressFromA1Notation(match));
323
+ });
324
+ };
325
+ var mapFormulaIndicesToRefs = (sheet, formula) => {
326
+ (0, import_invariant3.invariant)(isFormula(formula), void 0, {
327
+ F: __dxlog_file2,
328
+ L: 163,
329
+ S: void 0,
330
+ A: [
331
+ "isFormula(formula)",
332
+ ""
333
+ ]
334
+ });
335
+ return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {
336
+ return addressToA1Notation(addressFromIndex(sheet, idx));
337
+ });
338
+ };
289
339
  var ComputeNode = class extends import_context2.Resource {
290
340
  constructor(_graph, sheetId) {
291
341
  super();
@@ -326,7 +376,7 @@ var ComputeNode = class extends import_context2.Resource {
326
376
  async _open() {
327
377
  }
328
378
  };
329
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/functions/async-function.ts";
379
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/functions/async-function.ts";
330
380
  var defaultFunctionContextOptions = {
331
381
  defaultTtl: 5e3,
332
382
  debounceDelay: 200,
@@ -350,7 +400,7 @@ var FunctionContext = class _FunctionContext {
350
400
  this._options = (0, import_lodash.default)(_options ?? {}, defaultFunctionContextOptions);
351
401
  this._onUpdate = (0, import_async3.debounce)((update) => {
352
402
  (0, import_log2.log)("update", update, {
353
- F: __dxlog_file2,
403
+ F: __dxlog_file3,
354
404
  L: 86,
355
405
  S: this,
356
406
  C: (f, a) => f(...a)
@@ -406,7 +456,7 @@ var FunctionContext = class _FunctionContext {
406
456
  cell,
407
457
  value: value2
408
458
  }, {
409
- F: __dxlog_file2,
459
+ F: __dxlog_file3,
410
460
  L: 144,
411
461
  S: this,
412
462
  C: (f, a) => f(...a)
@@ -420,7 +470,7 @@ var FunctionContext = class _FunctionContext {
420
470
  cell,
421
471
  err
422
472
  }, {
423
- F: __dxlog_file2,
473
+ F: __dxlog_file3,
424
474
  L: 148,
425
475
  S: this,
426
476
  C: (f, a) => f(...a)
@@ -440,7 +490,7 @@ var FunctionContext = class _FunctionContext {
440
490
  args,
441
491
  cache: value
442
492
  }, {
443
- F: __dxlog_file2,
493
+ F: __dxlog_file3,
444
494
  L: 156,
445
495
  S: this,
446
496
  C: (f, a) => f(...a)
@@ -463,7 +513,7 @@ var AsyncFunctionPlugin = class extends import_hyperformula3.FunctionPlugin {
463
513
  });
464
514
  }
465
515
  };
466
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/functions/edge-function.ts";
516
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/functions/edge-function.ts";
467
517
  var EDGE_FUNCTION_NAME = "DX";
468
518
  var FUNCTION_TTL = 1e4;
469
519
  var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
@@ -480,7 +530,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
480
530
  import_log3.log.info("Function not found", {
481
531
  binding
482
532
  }, {
483
- F: __dxlog_file3,
533
+ F: __dxlog_file4,
484
534
  L: 41,
485
535
  S: this,
486
536
  C: (f, a) => f(...a)
@@ -492,7 +542,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
492
542
  (0, import_log3.log)("function changed", {
493
543
  fn
494
544
  }, {
495
- F: __dxlog_file3,
545
+ F: __dxlog_file4,
496
546
  L: 47,
497
547
  S: this,
498
548
  C: (f, a) => f(...a)
@@ -518,7 +568,7 @@ var EdgeFunctionPlugin = class extends AsyncFunctionPlugin {
518
568
  (0, import_log3.log)("function executed", {
519
569
  result
520
570
  }, {
521
- F: __dxlog_file3,
571
+ F: __dxlog_file4,
522
572
  L: 65,
523
573
  S: this,
524
574
  C: (f, a) => f(...a)
@@ -2955,7 +3005,7 @@ var defaultFunctions = [
2955
3005
  section: "Text"
2956
3006
  }
2957
3007
  ];
2958
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/compute-graph.ts";
3008
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/compute-graph.ts";
2959
3009
  var UNKNOWN_BINDING = "__UNKNOWN__";
2960
3010
  var createSheetName = ({ type, id }) => `${type}@${id}`;
2961
3011
  var parseSheetName = (name) => {
@@ -3033,7 +3083,7 @@ var ComputeGraph = class extends import_context.Resource {
3033
3083
  // The graph would then load the object and create a ComputeNode (model) of the appropriate type.
3034
3084
  getOrCreateNode(name) {
3035
3085
  (0, import_invariant.invariant)(name.length, void 0, {
3036
- F: __dxlog_file4,
3086
+ F: __dxlog_file5,
3037
3087
  L: 129,
3038
3088
  S: this,
3039
3089
  A: [
@@ -3046,7 +3096,7 @@ var ComputeGraph = class extends import_context.Resource {
3046
3096
  space: this._space?.id,
3047
3097
  sheet: name
3048
3098
  }, {
3049
- F: __dxlog_file4,
3099
+ F: __dxlog_file5,
3050
3100
  L: 131,
3051
3101
  S: this,
3052
3102
  C: (f, a) => f(...a)
@@ -3055,7 +3105,7 @@ var ComputeGraph = class extends import_context.Resource {
3055
3105
  }
3056
3106
  const sheetId = this._hf.getSheetId(name);
3057
3107
  (0, import_invariant.invariant)(sheetId !== void 0, void 0, {
3058
- F: __dxlog_file4,
3108
+ F: __dxlog_file5,
3059
3109
  L: 136,
3060
3110
  S: this,
3061
3111
  A: [
@@ -3160,7 +3210,7 @@ var ComputeGraph = class extends import_context.Resource {
3160
3210
  }
3161
3211
  }
3162
3212
  };
3163
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/compute-graph-registry.ts";
3213
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/compute-graph/compute-graph-registry.ts";
3164
3214
  var defaultOptions = {
3165
3215
  licenseKey: "gpl-v3"
3166
3216
  };
@@ -3190,7 +3240,7 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3190
3240
  (0, import_log4.log)("create graph", {
3191
3241
  space: space.id
3192
3242
  }, {
3193
- F: __dxlog_file5,
3243
+ F: __dxlog_file6,
3194
3244
  L: 69,
3195
3245
  S: this,
3196
3246
  C: (f, a) => f(...a)
@@ -3200,8 +3250,8 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3200
3250
  return graph;
3201
3251
  }
3202
3252
  createGraph(space) {
3203
- (0, import_invariant3.invariant)(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
3204
- F: __dxlog_file5,
3253
+ (0, import_invariant4.invariant)(!this._graphs.has(space.id), `ComputeGraph already exists for space: ${space.id}`, {
3254
+ F: __dxlog_file6,
3205
3255
  L: 77,
3206
3256
  S: this,
3207
3257
  A: [
@@ -3223,6 +3273,7 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3223
3273
  };
3224
3274
  // Annotate the CommonJS export names for ESM import in node:
3225
3275
  0 && (module.exports = {
3276
+ ApiError,
3226
3277
  AsyncFunctionPlugin,
3227
3278
  ComputeGraph,
3228
3279
  ComputeGraphRegistry,
@@ -3236,6 +3287,7 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3236
3287
  MAX_COLUMNS,
3237
3288
  MAX_ROWS,
3238
3289
  RANGE_NOTATION,
3290
+ RangeException,
3239
3291
  ReadonlyException,
3240
3292
  addressFromA1Notation,
3241
3293
  addressFromIndex,
@@ -3243,7 +3295,11 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3243
3295
  addressToIndex,
3244
3296
  alignKey,
3245
3297
  cellClassNameForRange,
3298
+ columnLetter,
3299
+ commentKey,
3246
3300
  compareIndexPositions,
3301
+ createIndex,
3302
+ createIndices,
3247
3303
  createSheet,
3248
3304
  createSheetName,
3249
3305
  defaultFunctionContextOptions,
@@ -3254,10 +3310,14 @@ var ComputeGraphRegistry = class extends import_context3.Resource {
3254
3310
  initialize,
3255
3311
  insertIndices,
3256
3312
  isFormula,
3313
+ mapFormulaIndicesToRefs,
3314
+ mapFormulaRefsToIndices,
3257
3315
  parseSheetName,
3316
+ posEquals,
3317
+ rangeFromA1Notation,
3258
3318
  rangeFromIndex,
3259
3319
  rangeToA1Notation,
3260
3320
  rangeToIndex,
3261
3321
  styleKey
3262
3322
  });
3263
- //# sourceMappingURL=chunk-O7XR4R7Y.cjs.map
3323
+ //# sourceMappingURL=chunk-KSEEI5VC.cjs.map