@dxos/plugin-sheet 0.7.0 → 0.7.1-staging.7f6f91c

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 (41) hide show
  1. package/dist/lib/browser/{SheetContainer-P3NF5KEI.mjs → SheetContainer-YAMIOFC6.mjs} +10 -8
  2. package/dist/lib/browser/SheetContainer-YAMIOFC6.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-4LKIURJA.mjs → chunk-QHQFM7LV.mjs} +19 -13
  4. package/dist/lib/browser/chunk-QHQFM7LV.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1 -1
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/node/{SheetContainer-MPFKXY26.cjs → SheetContainer-BSDHHYXE.cjs} +22 -20
  8. package/dist/lib/node/SheetContainer-BSDHHYXE.cjs.map +7 -0
  9. package/dist/lib/node/{chunk-OO24XJBV.cjs → chunk-J5ZFWMOD.cjs} +24 -18
  10. package/dist/lib/node/chunk-J5ZFWMOD.cjs.map +7 -0
  11. package/dist/lib/node/index.cjs +5 -5
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node-esm/{SheetContainer-22IOAW3B.mjs → SheetContainer-T47T2NYJ.mjs} +10 -8
  14. package/dist/lib/node-esm/SheetContainer-T47T2NYJ.mjs.map +7 -0
  15. package/dist/lib/node-esm/{chunk-BW36PM2Y.mjs → chunk-6GSTEN7N.mjs} +19 -13
  16. package/dist/lib/node-esm/chunk-6GSTEN7N.mjs.map +7 -0
  17. package/dist/lib/node-esm/index.mjs +1 -1
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -1
  20. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  21. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -1
  22. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  23. package/dist/types/src/components/SheetContext/SheetContext.d.ts +3 -1
  24. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  25. package/dist/types/src/components/index.d.ts +2 -1
  26. package/dist/types/src/components/index.d.ts.map +1 -1
  27. package/package.json +38 -38
  28. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -2
  29. package/src/components/GridSheet/GridSheet.stories.tsx +2 -2
  30. package/src/components/GridSheet/GridSheet.tsx +7 -6
  31. package/src/components/GridSheet/util.ts +1 -1
  32. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -2
  33. package/src/components/SheetContainer/SheetContainer.tsx +13 -3
  34. package/src/components/SheetContext/SheetContext.tsx +16 -3
  35. package/src/components/Toolbar/Toolbar.tsx +1 -1
  36. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +0 -7
  37. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +0 -7
  38. package/dist/lib/node/SheetContainer-MPFKXY26.cjs.map +0 -7
  39. package/dist/lib/node/chunk-OO24XJBV.cjs.map +0 -7
  40. package/dist/lib/node-esm/SheetContainer-22IOAW3B.mjs.map +0 -7
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +0 -7
@@ -26,8 +26,8 @@ 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_OO24XJBV_exports = {};
30
- __export(chunk_OO24XJBV_exports, {
29
+ var chunk_J5ZFWMOD_exports = {};
30
+ __export(chunk_J5ZFWMOD_exports, {
31
31
  ComputeGraphContextProvider: () => ComputeGraphContextProvider,
32
32
  GridSheet: () => GridSheet,
33
33
  RangeList: () => RangeList,
@@ -38,7 +38,7 @@ __export(chunk_OO24XJBV_exports, {
38
38
  useComputeGraph: () => useComputeGraph,
39
39
  useSheetContext: () => useSheetContext
40
40
  });
41
- module.exports = __toCommonJS(chunk_OO24XJBV_exports);
41
+ module.exports = __toCommonJS(chunk_J5ZFWMOD_exports);
42
42
  var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
43
43
  var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
44
44
  var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
@@ -77,7 +77,7 @@ var import_react_ui_attention = require("@dxos/react-ui-attention");
77
77
  var import_react_ui_grid2 = require("@dxos/react-ui-grid");
78
78
  var import_react5 = require("react");
79
79
  var import_echo2 = require("@dxos/react-client/echo");
80
- var import_react_ui_data = require("@dxos/react-ui-data");
80
+ var import_react_ui_form = require("@dxos/react-ui-form");
81
81
  var import_react_ui_grid3 = require("@dxos/react-ui-grid");
82
82
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
83
83
  var import_react6 = require("react");
@@ -933,7 +933,7 @@ var useSheetContext = () => {
933
933
  const context = (0, import_react2.useContext)(SheetContext);
934
934
  (0, import_invariant2.invariant)(context, void 0, {
935
935
  F: __dxlog_file2,
936
- L: 52,
936
+ L: 55,
937
937
  S: void 0,
938
938
  A: [
939
939
  "context",
@@ -942,7 +942,7 @@ var useSheetContext = () => {
942
942
  });
943
943
  return context;
944
944
  };
945
- var SheetProviderImpl = ({ model, onInfo, children, __gridScope }) => {
945
+ var SheetProviderImpl = ({ model, onInfo, ignoreAttention, children, __gridScope }) => {
946
946
  const { id, editing, setEditing } = (0, import_react_ui_grid.useGridContext)("SheetProvider", __gridScope);
947
947
  const [cursor, setCursorInternal] = (0, import_react2.useState)();
948
948
  const [range, setRangeInternal] = (0, import_react2.useState)();
@@ -980,11 +980,12 @@ var SheetProviderImpl = ({ model, onInfo, children, __gridScope }) => {
980
980
  activeRefs,
981
981
  setActiveRefs,
982
982
  // TODO(burdon): Change to event.
983
- onInfo
983
+ onInfo,
984
+ ignoreAttention
984
985
  }
985
986
  }, children);
986
987
  };
987
- var SheetProvider = ({ children, graph, sheet, readonly, onInfo }) => {
988
+ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo }) => {
988
989
  const model = useSheetModel(graph, sheet, {
989
990
  readonly
990
991
  });
@@ -992,7 +993,8 @@ var SheetProvider = ({ children, graph, sheet, readonly, onInfo }) => {
992
993
  id: (0, import_echo.fullyQualifiedId)(sheet)
993
994
  }, /* @__PURE__ */ import_react2.default.createElement(SheetProviderImpl, {
994
995
  model,
995
- onInfo
996
+ onInfo,
997
+ ignoreAttention
996
998
  }, children));
997
999
  };
998
1000
  var RangeList = ({ sheet }) => {
@@ -1027,7 +1029,7 @@ var RangeList = ({ sheet }) => {
1027
1029
  onClick: () => handleDeleteRange(range)
1028
1030
  })))));
1029
1031
  };
1030
- var SheetContainer = (0, import_react7.lazy)(() => import("./SheetContainer-MPFKXY26.cjs"));
1032
+ var SheetContainer = (0, import_react7.lazy)(() => import("./SheetContainer-BSDHHYXE.cjs"));
1031
1033
  var completeCellRangeToThreadCursor = (range) => {
1032
1034
  return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;
1033
1035
  };
@@ -1168,12 +1170,12 @@ var projectCellProps = (model, col, row) => {
1168
1170
  const format = description?.format;
1169
1171
  const classNames = ranges?.map(import_chunk_O7XR4R7Y.cellClassNameForRange).reverse();
1170
1172
  return {
1171
- value: (0, import_react_ui_data.parseValue)({
1173
+ value: (0, import_react_ui_form.parseValue)({
1172
1174
  type,
1173
1175
  format,
1174
1176
  value: rawValue
1175
1177
  }),
1176
- className: (0, import_react_ui_theme2.mx)((0, import_react_ui_data.cellClassesForFieldType)({
1178
+ className: (0, import_react_ui_theme2.mx)((0, import_react_ui_form.cellClassesForFieldType)({
1177
1179
  type,
1178
1180
  format
1179
1181
  }), threadRefs && import_react_ui_grid3.commentedClassName, classNames),
@@ -1331,7 +1333,7 @@ var sheetColDefault = {
1331
1333
  };
1332
1334
  var GridSheet = () => {
1333
1335
  const { t } = (0, import_react_ui.useTranslation)(import_chunk_2ZVZI2KJ.SHEET_PLUGIN);
1334
- const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
1336
+ const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } = useSheetContext();
1335
1337
  const [dxGrid, setDxGrid] = (0, import_react4.useState)(null);
1336
1338
  const [extraplanarFocus, setExtraplanarFocus] = (0, import_react4.useState)(null);
1337
1339
  const dispatch = (0, import_app_framework.useIntentDispatcher)();
@@ -1423,11 +1425,12 @@ var GridSheet = () => {
1423
1425
  editing
1424
1426
  ]);
1425
1427
  const handleWheel = (0, import_react4.useCallback)((event) => {
1426
- if (!hasAttention) {
1428
+ if (!ignoreAttention && !hasAttention) {
1427
1429
  event.stopPropagation();
1428
1430
  }
1429
1431
  }, [
1430
- hasAttention
1432
+ hasAttention,
1433
+ ignoreAttention
1431
1434
  ]);
1432
1435
  const selectEntireAxis = (0, import_react4.useCallback)((pos) => {
1433
1436
  switch (pos.plane) {
@@ -1589,7 +1592,10 @@ var GridSheet = () => {
1589
1592
  ]);
1590
1593
  useUpdateFocusedCellOnThreadSelection(dxGrid);
1591
1594
  useSelectThreadOnCellFocus();
1592
- return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui_grid2.GridCellEditor, {
1595
+ return /* @__PURE__ */ import_react4.default.createElement("div", {
1596
+ role: "none",
1597
+ className: "relative min-bs-0"
1598
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui_grid2.GridCellEditor, {
1593
1599
  getCellContent,
1594
1600
  extension,
1595
1601
  onBlur: handleBlur
@@ -1610,7 +1616,7 @@ var GridSheet = () => {
1610
1616
  onContextMenu: handleContextMenu,
1611
1617
  onClick: handleClick,
1612
1618
  overscroll: "trap",
1613
- className: "[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-separator",
1619
+ className: "[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator",
1614
1620
  activeRefs,
1615
1621
  ref: setDxGrid
1616
1622
  }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui.DropdownMenu.Root, {
@@ -1652,4 +1658,4 @@ var GridSheet = () => {
1652
1658
  useComputeGraph,
1653
1659
  useSheetContext
1654
1660
  });
1655
- //# sourceMappingURL=chunk-OO24XJBV.cjs.map
1661
+ //# sourceMappingURL=chunk-J5ZFWMOD.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/extensions/compute.ts", "../../../src/extensions/editor/extension.ts", "../../../src/components/SheetContext/SheetContext.tsx", "../../../src/model/sheet-model.ts", "../../../src/model/useSheetModel.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/index.ts", "../../../src/components/RangeList/RangeList.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '../../compute-graph';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type UnsubscribeCallback, debounce } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/react-ui-editor';\n\nimport { type ComputeGraph, type ComputeNode, createSheetName } from '../compute-graph';\nimport { type CellAddress } from '../defs';\nimport { type CellScalarValue } from '../types';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: UnsubscribeCallback;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView) {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { singleValueFacet } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type FunctionDefinition } from '../../compute-graph';\nimport { RANGE_NOTATION } from '../../defs';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accentText',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pinkText',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-tealText',\n },\n {\n tag: tags.bool,\n class: 'text-tealText',\n },\n {\n tag: tags.string,\n class: 'text-tealText',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-unAccent',\n },\n]);\n\nconst languageFacet = singleValueFacet<Language>();\n\nexport type SheetExtensionOptions = {\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({ idiom: 'en-US', decimalSeparator: '.' });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accentText';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-greenText';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n // NOTE: Useful for debugging.\n closeOnBlur: false,\n icons: false,\n tooltipClass: () =>\n mx(\n '!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accentSurface',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n },\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const language = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function':\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n\n case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\n });\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type ComputeGraph } from '../../compute-graph';\nimport { type CellAddress, type CellRange, type CompleteCellRange } from '../../defs';\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n\n // 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} from '../defs';\nimport { type CellScalarValue, type CellValue, type SheetType, type RestoreAxis } from '../types';\n\n// Map sheet types to system types.\n// https://hyperformula.handsontable.com/guide/types-of-values.html\n// - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)\n// - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)\nconst typeMap: Record<string, { type: TypeEnum; format?: FormatEnum }> = {\n BOOLEAN: { type: TypeEnum.Boolean },\n NUMBER_RAW: { type: TypeEnum.Number },\n NUMBER_PERCENT: { type: TypeEnum.Number, format: FormatEnum.Percent },\n NUMBER_CURRENCY: { type: TypeEnum.Number, format: FormatEnum.Currency },\n NUMBER_DATETIME: { type: TypeEnum.String, format: FormatEnum.DateTime },\n NUMBER_DATE: { type: TypeEnum.String, format: FormatEnum.Date },\n NUMBER_TIME: { type: TypeEnum.String, format: FormatEnum.Time },\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: SheetType,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open() {\n log('initialize', { id: this.id });\n initialize(this._sheet);\n\n this._graph.update.on((event) => {\n if (event.type === 'functionsUpdated') {\n this.reset();\n }\n });\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(createSheetName({ type: getTypename(this._sheet)!, id: this._sheet.id }));\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset() {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n const binding = this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));\n if (binding) {\n value = this._graph.mapFormulaToNative(binding);\n } else {\n // If binding is not found, render the cell as empty.\n // This prevents the cell from momentarily rendering an error while the binding is being loaded.\n value = '';\n }\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate() {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1) {\n const idx = insertIndices(this._sheet.rows, i, n, MAX_ROWS);\n this.reset();\n return idx;\n }\n\n insertColumns(i: number, n = 1) {\n const idx = insertIndices(this._sheet.columns, i, n, MAX_COLUMNS);\n this.reset();\n return idx;\n }\n\n dropRow(rowIndex: string): RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${this._sheet.columns[0]}@${rowIndex}`),\n to: addressFromIndex(this._sheet, `${this._sheet.columns[this._sheet.columns.length - 1]}@${rowIndex}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.rows.indexOf(rowIndex);\n this.clear(range);\n this._sheet.rows.splice(index, 1);\n delete this._sheet.rowMeta[rowIndex];\n this.reset();\n return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };\n }\n\n dropColumn(colIndex: string): RestoreAxis {\n const range = {\n from: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[0]}`),\n to: addressFromIndex(this._sheet, `${colIndex}@${this._sheet.rows[this._sheet.rows.length - 1]}`),\n };\n const values = this.getCellValues(range).flat();\n const index = this._sheet.columns.indexOf(colIndex);\n this.clear(range);\n this._sheet.columns.splice(index, 1);\n delete this._sheet.columnMeta[colIndex];\n this.reset();\n return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };\n }\n\n restoreRow({ index, axisIndex, axisMeta, values }: RestoreAxis) {\n this._sheet.rows.splice(index, 0, axisIndex);\n values.forEach((value, col) => {\n if (value) {\n this._sheet.cells[`${this._sheet.columns[col]}@${axisIndex}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.rowMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n restoreColumn({ index, axisIndex, axisMeta, values }: RestoreAxis) {\n this._sheet.columns.splice(index, 0, axisIndex);\n values.forEach((value, row) => {\n if (value) {\n this._sheet.cells[`${axisIndex}@${this._sheet.rows[row]}`] = { value };\n }\n });\n if (axisMeta) {\n this._sheet.columnMeta[axisIndex] = axisMeta;\n }\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange) {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n cut(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n copy(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress) {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n this._sheet.cells[idx] = { value: newValue };\n }\n }\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const address = toSimpleCellAddress(this._node.sheetId, cell);\n const value = this._node.graph.hf.getCellValue(address);\n if (value instanceof DetailedCellError) {\n // TODO(wittjosiah): Error details should be shown in cell `title`.\n log.info('cell error', { cell, error: value });\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueDescription(cell: CellAddress): { type: TypeEnum; format?: FormatEnum } | undefined {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue) {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n insertIndices(this._sheet.rows, cell.row, 1, MAX_ROWS);\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n insertIndices(this._sheet.columns, cell.col, 1, MAX_COLUMNS);\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n delete this._sheet.cells[idx];\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(this.mapFormulaRefsToIndices(value));\n }\n\n this._sheet.cells[idx] = { value };\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, CellValue>) {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number) {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number) {\n throw new Error('Not implemented');\n }\n\n //\n // Indices.\n //\n\n /**\n * Map from A1 notation to indices.\n */\n mapFormulaRefsToIndices(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {\n return addressToIndex(this._sheet, addressFromA1Notation(match));\n });\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '../compute-graph';\nimport { SheetModel } from '../model';\nimport { type SheetType } from '../types';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: SheetType,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n defaultSizeRow,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\n type DxGridPosition,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, dxGridCellIndexToSheetCellAddress, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from '../../defs';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultSizeRow, readonly: true },\n grid: { size: defaultSizeRow, resizeable: true },\n};\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, 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(dxGridCellIndexToSheetCellAddress(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!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: string) => {\n const cell = dxGridCellIndexToSheetCellAddress(index);\n return model.getCellText(cell);\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <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 onClick={() => handleAxisMenuAction('insert-before')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </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 { type CellAddress, inRange, cellClassNameForRange, rangeFromIndex } from '../../defs';\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\n\nexport const dxGridCellIndexToSheetCellAddress = (index: string): CellAddress => {\n const [colStr, rowStr] = index.split(',');\n return {\n col: parseInt(colStr),\n row: parseInt(rowStr),\n };\n};\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread?.anchor && parseThreadAnchorAsCellRange(thread!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n\n const description = model.getValueDescription(address);\n const type = description?.type;\n const format = description?.format;\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue({ type, format, value: rawValue }),\n className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end !pie-1 text-subdued',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'text-subdued',\n resizeHandle: 'col',\n});\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n const unsubscribe = model.graph.update.on(handleCellsUpdate);\n return () => {\n cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n unsubscribe();\n };\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model, dxGrid]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { type IntentResolver, LayoutAction, useIntentDispatcher, useIntentResolver } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { type CellAddress, type CompleteCellRange, inRange } from '../defs';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const handleScrollIntoView: IntentResolver = useCallback(\n ({ action, data }) => {\n switch (action) {\n case LayoutAction.SCROLL_INTO_VIEW: {\n if (!data?.id || data?.cursor === undefined || data?.id !== fullyQualifiedId(model.sheet)) {\n return;\n }\n setActiveRefs(data.thread);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(data.cursor);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n }\n }\n },\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, handleScrollIntoView);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const dispatch = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find(({ anchor }) => {\n if (anchor) {\n const range = parseThreadAnchorAsCellRange(anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch([\n { action: 'dxos.org/plugin/thread/action/select', data: { current: fullyQualifiedId(closestThread) } },\n ]);\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { rangeFromIndex, rangeToA1Notation } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_language", "import_view", "import_react_ui_editor", "import_react", "import_invariant", "import_async", "import_react_ui_grid", "import_echo", "import_react_ui_theme", "import_app_framework", "import_echo_schema", "import_react_ui", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "React", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "highlightStyles", "HighlightStyle", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "sheetExtension", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "constructor", "_view", "ranges", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling", "typeMap", "BOOLEAN", "TypeEnum", "Boolean", "NUMBER_RAW", "Number", "NUMBER_PERCENT", "format", "FormatEnum", "Percent", "NUMBER_CURRENCY", "Currency", "NUMBER_DATETIME", "String", "DateTime", "NUMBER_DATE", "Date", "NUMBER_TIME", "Time", "getTopLeft", "row", "Math", "min", "col", "toSimpleCellAddress", "sheet", "cell", "toModelRange", "start", "end", "SheetModel", "Resource", "_graph", "_sheet", "_options", "id", "PublicKey", "random", "truncate", "Event", "readonly", "bounds", "rows", "columns", "_open", "log", "initialize", "on", "event", "reset", "_node", "getOrCreateNode", "createSheetName", "getTypename", "unsubscribe", "emit", "_ctx", "onDispose", "invariant", "hf", "clearSheet", "sheetId", "Object", "entries", "cells", "forEach", "addressFromIndex", "isFormula", "binding", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "mapFormulaToNative", "setCellContents", "recalculate", "rebuildAndRecalculate", "insertRows", "i", "n", "idx", "insertIndices", "MAX_ROWS", "insertColumns", "MAX_COLUMNS", "dropRow", "rowIndex", "values", "getCellValues", "flat", "index", "indexOf", "clear", "splice", "rowMeta", "axis", "axisIndex", "axisMeta", "dropColumn", "colIndex", "columnMeta", "restoreRow", "restoreColumn", "topLeft", "_iterRange", "addressToIndex", "cut", "copy", "paste", "isClipboardEmpty", "change", "ExportedCellChange", "address", "newValue", "undo", "isThereSomethingToUndo", "redo", "isThereSomethingToRedo", "getCellValue", "getCellText", "getValue", "DetailedCellError", "error", "getValueDescription", "addr", "getCellValueDetailedType", "setValue", "ReadonlyException", "refresh", "mapFunctionBindingToId", "mapFormulaRefsToIndices", "setValues", "addressFromA1Notation", "cb", "rowRange", "max", "columnRange", "rowCells", "column", "push", "_deleteIndices", "indices", "_moveIndices", "j", "formula", "replace", "addressToA1Notation", "toLocalDate", "num", "year", "month", "day", "hours", "minutes", "seconds", "toDateTime", "numberToDateTime", "toDate", "numberToDate", "toTime", "numberToTime", "useSheetModel", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "clearTimeout", "close", "SheetContext", "useSheetContext", "SheetProviderImpl", "onInfo", "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", "SheetContainer", "lazy", "completeCellRangeToThreadCursor", "parseThreadAnchorAsCellRange", "coords", "split", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "handleScrollIntoView", "action", "LayoutAction", "SCROLL_INTO_VIEW", "thread", "setFocus", "plane", "useIntentResolver", "useSelectThreadOnCellFocus", "useIntentDispatcher", "threads", "useMemo", "JSON", "stringify", "selectClosestThread", "cellAddress", "closestThread", "inRange", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "dxGridCellIndexToSheetCellAddress", "colStr", "rowStr", "createDxGridColumns", "reduce", "acc", "columnId", "numericIndex", "size", "resizeable", "createDxGridRows", "rowId", "projectCellProps", "rawValue", "threadRefs", "join", "cellClassNameForRange", "reverse", "parseValue", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "setRows", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetRowDefault", "defaultSizeRow", "sheetColDefault", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "closestCell", "target", "handleClose", "_value", "shift", "includes", "delta", "refocus", "handleBlur", "handleAxisResize", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "handleClick", "handleKeyDown", "preventDefault", "metaKey", "ctrlKey", "shiftKey", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetAction", "INSERT_AXIS", "DROP_AXIS", "editorKeys", "onClose", "initialContent", "onNav", "getFunctions", "fn", "mode", "getCellContent", "div", "role", "GridCellEditor", "onBlur", "Content", "limitColumns", "DEFAULT_COLUMNS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "ref", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Icon", "icon", "span", "Arrow"]
7
+ }
@@ -32,7 +32,7 @@ __export(node_exports, {
32
32
  default: () => src_default
33
33
  });
34
34
  module.exports = __toCommonJS(node_exports);
35
- var import_chunk_OO24XJBV = require("./chunk-OO24XJBV.cjs");
35
+ var import_chunk_J5ZFWMOD = require("./chunk-J5ZFWMOD.cjs");
36
36
  var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
37
37
  var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
38
38
  var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
@@ -136,7 +136,7 @@ var SheetPlugin = () => {
136
136
  ""
137
137
  ]
138
138
  });
139
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.ComputeGraphContextProvider, {
139
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_J5ZFWMOD.ComputeGraphContextProvider, {
140
140
  registry: computeGraphRegistry
141
141
  }, children);
142
142
  },
@@ -247,7 +247,7 @@ var SheetPlugin = () => {
247
247
  const space = (0, import_echo.getSpace)(doc);
248
248
  if (space) {
249
249
  const computeGraph = computeGraphRegistry.getOrCreateGraph(space);
250
- return import_chunk_OO24XJBV.computeGraphFacet.of(computeGraph);
250
+ return import_chunk_J5ZFWMOD.computeGraphFacet.of(computeGraph);
251
251
  }
252
252
  }
253
253
  },
@@ -294,7 +294,7 @@ var SheetPlugin = () => {
294
294
  case "article":
295
295
  case "section":
296
296
  if (data.object instanceof import_chunk_AWKOWDMI.SheetType) {
297
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.SheetContainer, {
297
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_J5ZFWMOD.SheetContainer, {
298
298
  space,
299
299
  sheet: data.object,
300
300
  role
@@ -304,7 +304,7 @@ var SheetPlugin = () => {
304
304
  case "complementary--settings":
305
305
  if (data.subject instanceof import_chunk_AWKOWDMI.SheetType) {
306
306
  return {
307
- node: /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.RangeList, {
307
+ node: /* @__PURE__ */ import_react.default.createElement(import_chunk_J5ZFWMOD.RangeList, {
308
308
  sheet: data.subject
309
309
  })
310
310
  };