@dxos/plugin-sheet 0.7.2 → 0.7.3-staging.971cd8d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{SheetContainer-YAMIOFC6.mjs → SheetContainer-KCLT6PEO.mjs} +8 -6
- package/dist/lib/browser/SheetContainer-KCLT6PEO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QHQFM7LV.mjs → chunk-E5WQ7U7G.mjs} +77 -78
- package/dist/lib/browser/chunk-E5WQ7U7G.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VMSX6Z4X.mjs → chunk-F3HE6D3J.mjs} +76 -26
- package/dist/lib/browser/chunk-F3HE6D3J.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BVUN7SHF.mjs → chunk-JXFPOYNA.mjs} +1 -1
- package/dist/lib/browser/chunk-JXFPOYNA.mjs.map +7 -0
- package/dist/lib/browser/{compute-graph-GGWUX644.mjs → compute-graph-SNUS7HOH.mjs} +3 -3
- package/dist/lib/browser/index.mjs +84 -32
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{SheetContainer-BSDHHYXE.cjs → SheetContainer-VVVRYTQG.cjs} +32 -31
- package/dist/lib/node/SheetContainer-VVVRYTQG.cjs.map +7 -0
- package/dist/lib/node/{chunk-J5ZFWMOD.cjs → chunk-45YW2DX2.cjs} +96 -101
- package/dist/lib/node/chunk-45YW2DX2.cjs.map +7 -0
- package/dist/lib/node/{chunk-O7XR4R7Y.cjs → chunk-KSEEI5VC.cjs} +87 -27
- package/dist/lib/node/chunk-KSEEI5VC.cjs.map +7 -0
- package/dist/lib/node/{chunk-AWKOWDMI.cjs → chunk-OWH2EUHZ.cjs} +4 -4
- package/dist/lib/node/chunk-OWH2EUHZ.cjs.map +7 -0
- package/dist/lib/node/{compute-graph-KGWA2QLE.cjs → compute-graph-WILPHO4A.cjs} +20 -20
- package/dist/lib/node/{compute-graph-KGWA2QLE.cjs.map → compute-graph-WILPHO4A.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +101 -47
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +6 -6
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-T47T2NYJ.mjs → SheetContainer-LSBE6Q4X.mjs} +8 -6
- package/dist/lib/node-esm/SheetContainer-LSBE6Q4X.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CR4K75EL.mjs → chunk-6JF2AHKO.mjs} +76 -26
- package/dist/lib/node-esm/chunk-6JF2AHKO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UIBWRHW7.mjs → chunk-BVS2IQRO.mjs} +1 -1
- package/dist/lib/node-esm/chunk-BVS2IQRO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6GSTEN7N.mjs → chunk-NYDNXI7L.mjs} +77 -78
- package/dist/lib/node-esm/chunk-NYDNXI7L.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-2SCZT7N5.mjs → compute-graph-S6CVN7RS.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +84 -32
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -0
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts +0 -2
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +2 -0
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SheetObjectSettings.d.ts +7 -0
- package/dist/types/src/components/SheetObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
- package/dist/types/src/defs/types.d.ts +2 -4
- package/dist/types/src/defs/types.d.ts.map +1 -1
- package/dist/types/src/defs/util.d.ts +8 -0
- package/dist/types/src/defs/util.d.ts.map +1 -1
- package/dist/types/src/extensions/editor/extension.d.ts +2 -1
- package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +0 -4
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/model/testing.d.ts +6 -0
- package/dist/types/src/model/testing.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts +3 -0
- package/dist/types/src/testing/data.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/testing/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/sheet-manager.d.ts +24 -0
- package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/sheet.spec.d.ts +2 -0
- package/dist/types/src/testing/playwright/sheet.spec.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +1 -2
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +61 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +2 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +40 -37
- package/src/SheetPlugin.tsx +9 -21
- package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
- package/src/components/GridSheet/GridSheet.stories.tsx +2 -0
- package/src/components/GridSheet/GridSheet.tsx +18 -8
- package/src/components/GridSheet/util.ts +1 -9
- package/src/components/SheetContainer/SheetContainer.stories.tsx +44 -2
- package/src/components/SheetObjectSettings.tsx +38 -0
- package/src/components/Toolbar/Toolbar.tsx +7 -1
- package/src/components/index.ts +1 -0
- package/src/compute-graph/compute-graph.stories.tsx +1 -1
- package/src/compute-graph/compute-graph.test.ts +1 -1
- package/src/defs/sheet-range-types.ts +3 -0
- package/src/defs/types.ts +3 -1
- package/src/defs/util.ts +32 -1
- package/src/extensions/editor/extension.ts +3 -3
- package/src/index.ts +3 -0
- package/src/integrations/thread-ranges.ts +2 -0
- package/src/model/sheet-model.test.ts +35 -1
- package/src/model/sheet-model.ts +5 -17
- package/src/model/testing.ts +35 -0
- package/src/sanity.test.ts +1 -1
- package/src/testing/data.ts +33 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/playwright/playwright.config.ts +18 -0
- package/src/testing/playwright/sheet-manager.ts +91 -0
- package/src/testing/playwright/sheet.spec.ts +78 -0
- package/src/testing/testing.tsx +1 -31
- package/src/translations.ts +4 -0
- package/src/types.ts +1 -3
- package/dist/lib/browser/SheetContainer-YAMIOFC6.mjs.map +0 -7
- package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +0 -7
- package/dist/lib/browser/chunk-QHQFM7LV.mjs.map +0 -7
- package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-BSDHHYXE.cjs.map +0 -7
- package/dist/lib/node/chunk-AWKOWDMI.cjs.map +0 -7
- package/dist/lib/node/chunk-J5ZFWMOD.cjs.map +0 -7
- package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-T47T2NYJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6GSTEN7N.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +0 -7
- /package/dist/lib/browser/{compute-graph-GGWUX644.mjs.map → compute-graph-SNUS7HOH.mjs.map} +0 -0
- /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
|
|
30
|
-
__export(
|
|
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(
|
|
69
|
-
var
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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,
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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,
|
|
3204
|
-
F:
|
|
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-
|
|
3323
|
+
//# sourceMappingURL=chunk-KSEEI5VC.cjs.map
|