@dxos/plugin-sheet 0.8.4-main.f9ba587 → 0.8.4-main.fd6878d

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 (119) hide show
  1. package/dist/lib/browser/{SheetContainer-6IWQKRJC.mjs → SheetContainer-JZNFXBW3.mjs} +5 -5
  2. package/dist/lib/browser/SheetContainer-JZNFXBW3.mjs.map +7 -0
  3. package/dist/lib/browser/{anchor-sort-VHURGBOY.mjs → anchor-sort-VRX3YZKT.mjs} +2 -2
  4. package/dist/lib/browser/{anchor-sort-VHURGBOY.mjs.map → anchor-sort-VRX3YZKT.mjs.map} +1 -1
  5. package/dist/lib/browser/{chunk-ULWNSP4B.mjs → chunk-BVTHIA5U.mjs} +187 -187
  6. package/dist/lib/browser/chunk-BVTHIA5U.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-SI4X5GUR.mjs → chunk-ELAASQ5H.mjs} +9 -2
  8. package/dist/lib/browser/chunk-ELAASQ5H.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-7HQX4NQP.mjs → chunk-VTTKAHAY.mjs} +1 -1
  10. package/dist/lib/browser/{chunk-7HQX4NQP.mjs.map → chunk-VTTKAHAY.mjs.map} +2 -2
  11. package/dist/lib/browser/{compute-graph-registry-VG7VP7IV.mjs → compute-graph-registry-6YJHXORG.mjs} +1 -1
  12. package/dist/lib/{node-esm/compute-graph-registry-3K3Q2A5T.mjs.map → browser/compute-graph-registry-6YJHXORG.mjs.map} +2 -2
  13. package/dist/lib/browser/index.mjs +10 -8
  14. package/dist/lib/browser/index.mjs.map +3 -3
  15. package/dist/lib/browser/{intent-resolver-WOJGZMSV.mjs → intent-resolver-SSLPTP5O.mjs} +3 -3
  16. package/dist/lib/browser/{intent-resolver-WOJGZMSV.mjs.map → intent-resolver-SSLPTP5O.mjs.map} +3 -3
  17. package/dist/lib/browser/{markdown-VXMIPUQC.mjs → markdown-3VPZYNGU.mjs} +2 -2
  18. package/dist/lib/browser/markdown-3VPZYNGU.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-DAHMBIQW.mjs → react-surface-Y7KTPJW2.mjs} +4 -4
  21. package/dist/lib/browser/{react-surface-DAHMBIQW.mjs.map → react-surface-Y7KTPJW2.mjs.map} +2 -2
  22. package/dist/lib/browser/types/index.mjs +1 -1
  23. package/dist/lib/node-esm/{SheetContainer-SW55KKOT.mjs → SheetContainer-GOIBAE2P.mjs} +5 -5
  24. package/dist/lib/node-esm/SheetContainer-GOIBAE2P.mjs.map +7 -0
  25. package/dist/lib/node-esm/{anchor-sort-CTJGOPET.mjs → anchor-sort-YM2UBIKL.mjs} +2 -2
  26. package/dist/lib/node-esm/{anchor-sort-CTJGOPET.mjs.map → anchor-sort-YM2UBIKL.mjs.map} +1 -1
  27. package/dist/lib/node-esm/{chunk-CADTJFAS.mjs → chunk-4L5CIB7E.mjs} +9 -2
  28. package/dist/lib/node-esm/chunk-4L5CIB7E.mjs.map +7 -0
  29. package/dist/lib/node-esm/{chunk-VEGX32AT.mjs → chunk-56HYMW55.mjs} +187 -187
  30. package/dist/lib/node-esm/chunk-56HYMW55.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-Q6UYC4G5.mjs → chunk-FXRXBHWM.mjs} +1 -1
  32. package/dist/lib/node-esm/{chunk-Q6UYC4G5.mjs.map → chunk-FXRXBHWM.mjs.map} +2 -2
  33. package/dist/lib/node-esm/{compute-graph-registry-3K3Q2A5T.mjs → compute-graph-registry-ET5KJNLV.mjs} +1 -1
  34. package/dist/lib/{browser/compute-graph-registry-VG7VP7IV.mjs.map → node-esm/compute-graph-registry-ET5KJNLV.mjs.map} +2 -2
  35. package/dist/lib/node-esm/index.mjs +10 -8
  36. package/dist/lib/node-esm/index.mjs.map +3 -3
  37. package/dist/lib/node-esm/{intent-resolver-PZRXBNIJ.mjs → intent-resolver-5P6DBGK2.mjs} +3 -3
  38. package/dist/lib/node-esm/{intent-resolver-PZRXBNIJ.mjs.map → intent-resolver-5P6DBGK2.mjs.map} +3 -3
  39. package/dist/lib/node-esm/{markdown-4VPQJZNZ.mjs → markdown-SFDGQWYE.mjs} +2 -2
  40. package/dist/lib/node-esm/markdown-SFDGQWYE.mjs.map +7 -0
  41. package/dist/lib/node-esm/meta.json +1 -1
  42. package/dist/lib/node-esm/{react-surface-Z7TVWQ4V.mjs → react-surface-6Z5FAOBH.mjs} +4 -4
  43. package/dist/lib/node-esm/{react-surface-Z7TVWQ4V.mjs.map → react-surface-6Z5FAOBH.mjs.map} +2 -2
  44. package/dist/lib/node-esm/types/index.mjs +1 -1
  45. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  46. package/dist/types/src/capabilities/index.d.ts +1 -1
  47. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  48. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  49. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  50. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  51. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  54. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/GridSheet/util.d.ts +1 -1
  56. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  57. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  58. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/SheetContext/SheetContext.d.ts +1 -1
  60. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  61. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  62. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/SheetToolbar/align.d.ts +2 -2
  64. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  65. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  66. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  67. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  68. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  69. package/dist/types/src/model/sheet-model.d.ts +1 -1
  70. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  71. package/dist/types/src/playwright/sheet-manager.d.ts +1 -1
  72. package/dist/types/src/playwright/sheet-manager.d.ts.map +1 -1
  73. package/dist/types/src/testing/testing.d.ts.map +1 -1
  74. package/dist/types/src/translations.d.ts +2 -0
  75. package/dist/types/src/translations.d.ts.map +1 -1
  76. package/dist/types/src/types/types.d.ts +1 -1
  77. package/dist/types/src/types/types.d.ts.map +1 -1
  78. package/dist/types/src/types/util.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +51 -49
  81. package/src/SheetPlugin.tsx +2 -2
  82. package/src/capabilities/anchor-sort.ts +1 -1
  83. package/src/capabilities/compute-graph-registry.ts +1 -1
  84. package/src/capabilities/intent-resolver.ts +2 -2
  85. package/src/capabilities/markdown.ts +3 -2
  86. package/src/capabilities/react-surface.tsx +2 -1
  87. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +1 -1
  88. package/src/components/ComputeGraph/compute-graph.stories.tsx +5 -4
  89. package/src/components/GridSheet/GridSheet.stories.tsx +3 -2
  90. package/src/components/GridSheet/GridSheet.tsx +15 -14
  91. package/src/components/GridSheet/SheetCellEditor.stories.tsx +1 -1
  92. package/src/components/GridSheet/util.ts +6 -6
  93. package/src/components/SheetContainer/SheetContainer.stories.tsx +4 -3
  94. package/src/components/SheetContainer/SheetContainer.tsx +1 -1
  95. package/src/components/SheetContext/SheetContext.tsx +1 -1
  96. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +2 -1
  97. package/src/components/SheetToolbar/SheetToolbar.tsx +5 -4
  98. package/src/components/SheetToolbar/align.ts +4 -3
  99. package/src/components/SheetToolbar/style.ts +2 -2
  100. package/src/extensions/compute.stories.tsx +3 -2
  101. package/src/extensions/compute.ts +1 -1
  102. package/src/integrations/thread-ranges.ts +7 -6
  103. package/src/model/sheet-model.test.ts +2 -1
  104. package/src/model/sheet-model.ts +6 -6
  105. package/src/playwright/sheet-manager.ts +1 -1
  106. package/src/playwright/sheet.spec.ts +1 -1
  107. package/src/sanity.test.ts +1 -1
  108. package/src/testing/testing.tsx +1 -1
  109. package/src/translations.ts +2 -0
  110. package/src/types/types.ts +2 -1
  111. package/src/types/util.ts +3 -3
  112. package/dist/lib/browser/SheetContainer-6IWQKRJC.mjs.map +0 -7
  113. package/dist/lib/browser/chunk-SI4X5GUR.mjs.map +0 -7
  114. package/dist/lib/browser/chunk-ULWNSP4B.mjs.map +0 -7
  115. package/dist/lib/browser/markdown-VXMIPUQC.mjs.map +0 -7
  116. package/dist/lib/node-esm/SheetContainer-SW55KKOT.mjs.map +0 -7
  117. package/dist/lib/node-esm/chunk-CADTJFAS.mjs.map +0 -7
  118. package/dist/lib/node-esm/chunk-VEGX32AT.mjs.map +0 -7
  119. package/dist/lib/node-esm/markdown-4VPQJZNZ.mjs.map +0 -7
@@ -3,14 +3,14 @@ import {
3
3
  SheetProvider,
4
4
  useComputeGraph,
5
5
  useSheetContext
6
- } from "./chunk-ULWNSP4B.mjs";
6
+ } from "./chunk-BVTHIA5U.mjs";
7
7
  import {
8
8
  alignKey,
9
9
  mapFormulaIndicesToRefs,
10
10
  rangeFromIndex,
11
11
  rangeToIndex
12
- } from "./chunk-SI4X5GUR.mjs";
13
- import "./chunk-7HQX4NQP.mjs";
12
+ } from "./chunk-ELAASQ5H.mjs";
13
+ import "./chunk-VTTKAHAY.mjs";
14
14
  import {
15
15
  SHEET_PLUGIN
16
16
  } from "./chunk-6AKBCBL4.mjs";
@@ -68,7 +68,7 @@ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking"
68
68
  import { Rx } from "@effect-rx/rx-react";
69
69
  import React2, { useMemo as useMemo2 } from "react";
70
70
  import { useAppGraph } from "@dxos/app-framework";
71
- import { createGapSeparator, MenuProvider, rxFromSignal, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
71
+ import { MenuProvider, ToolbarMenu, createGapSeparator, rxFromSignal, useMenuActions } from "@dxos/react-ui-menu";
72
72
 
73
73
  // src/components/SheetToolbar/align.ts
74
74
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -348,4 +348,4 @@ var SheetContainer_default = SheetContainer;
348
348
  export {
349
349
  SheetContainer_default as default
350
350
  };
351
- //# sourceMappingURL=SheetContainer-6IWQKRJC.mjs.map
351
+ //# sourceMappingURL=SheetContainer-JZNFXBW3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../src/components/SheetToolbar/align.ts", "../../../src/components/SheetToolbar/style.ts", "../../../src/components/SheetToolbar/useToolbarState.ts", "../../../src/components/SheetContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport type SheetContainerProps = {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n};\n\nexport const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <SheetToolbar id={fullyQualifiedId(sheet)} />\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';\nimport { Icon } from '@dxos/react-ui';\n\nimport { mapFormulaIndicesToRefs } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type ActionGraphEdges,\n type ActionGraphNodes,\n type ActionGraphProps,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n rxFromSignal,\n useMenuActions,\n} from '@dxos/react-ui-menu';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetContext';\n\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ id: string }>>;\n\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n cursorFallbackRange?: CompleteCellRange,\n customActions?: Rx.Rx<ActionGraphProps>,\n) => {\n return Rx.make((get) => {\n const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));\n const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));\n const gap = createGapSeparator();\n const nodes: ActionGraphNodes = [...align.nodes, ...style.nodes, ...gap.nodes];\n const edges: ActionGraphEdges = [...align.edges, ...style.edges, ...gap.edges];\n if (customActions) {\n const custom = get(customActions);\n nodes.push(...custom.nodes);\n edges.push(...custom.edges);\n }\n return {\n nodes,\n edges,\n };\n });\n};\n\nexport const SheetToolbar = ({ id, classNames }: SheetToolbarProps) => {\n const { model, cursorFallbackRange } = useSheetContext();\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions(model, state, cursorFallbackRange, customActions),\n [model, state, cursorFallbackRange, customActions],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={id}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nimport { type ToolbarState } from './useToolbarState';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (state: Partial<AlignState>) => {\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n state[alignKey] = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n }, [cursor, model.sheet]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align label', { ns: SHEET_PLUGIN }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\nconst createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n model.sheet.ranges?.splice(index, 1);\n state[alignKey] = undefined;\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {\n const alignGroup = createAlignGroupAction(state[alignKey]);\n const alignActions = createAlignActions(model, state, cursorFallbackRange);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type StyleKey, type StyleValue, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (state: StyleState) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n state.highlight = false;\n state.softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n state[value as StyleValue] = true;\n });\n }\n }, [cursorFallbackRange, model.sheet]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\nconst createStyleActions = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[nextRangeEntity.value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[nextRangeEntity.value] = true;\n }\n },\n {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range value ${styleValue} label`, { ns: SHEET_PLUGIN }],\n checked: !!state[styleValue as StyleValue],\n },\n );\n });\n\nexport const createStyle = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(model, state, cursorFallbackRange);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { live } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => live<ToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "fullyQualifiedId", "StackItem", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Rx", "React", "useMemo", "useAppGraph", "MenuProvider", "ToolbarMenu", "createGapSeparator", "rxFromSignal", "useMenuActions", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "state", "cursor", "model", "useSheetContext", "useEffect", "alignKey", "sheet", "ranges", "findLast", "range", "key", "inRange", "rangeFromIndex", "value", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "SHEET_PLUGIN", "variant", "selectCardinality", "createAlignActions", "cursorFallbackRange", "Object", "entries", "map", "alignValue", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "id", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "state", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "createStyleGroup", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "rangeKey", "some", "rangeValue", "splice", "push", "label", "ns", "SHEET_PLUGIN", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "id", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "cursorFallbackRange", "customActions", "Rx", "make", "get", "align", "rxFromSignal", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "classNames", "useSheetContext", "useToolbarState", "useAlignState", "useStyleState", "graph", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "attendableId", "ToolbarMenu", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "SheetToolbar", "id", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SheetType,
3
3
  compareIndexPositions
4
- } from "./chunk-SI4X5GUR.mjs";
4
+ } from "./chunk-ELAASQ5H.mjs";
5
5
  import "./chunk-6AKBCBL4.mjs";
6
6
 
7
7
  // src/capabilities/anchor-sort.ts
@@ -21,4 +21,4 @@ var anchor_sort_default = () => contributes(Capabilities.AnchorSort, {
21
21
  export {
22
22
  anchor_sort_default as default
23
23
  };
24
- //# sourceMappingURL=anchor-sort-VHURGBOY.mjs.map
24
+ //# sourceMappingURL=anchor-sort-VRX3YZKT.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/anchor-sort.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { getTarget } from '@dxos/react-client/echo';\n\nimport { compareIndexPositions, SheetType } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Type.getTypename(SheetType)!,\n sort: (anchorA, anchorB) => {\n const sheet = getTarget(anchorA) as SheetType;\n if (sheet !== getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { getTarget } from '@dxos/react-client/echo';\n\nimport { SheetType, compareIndexPositions } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Type.getTypename(SheetType)!,\n sort: (anchorA, anchorB) => {\n const sheet = getTarget(anchorA) as SheetType;\n if (sheet !== getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
5
5
  "mappings": ";;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAI1B,IAAA,sBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,KAAKC,YAAYC,SAAAA;EACtBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,QAAQC,UAAUH,OAAAA;AACxB,QAAIE,UAAUC,UAAUF,OAAAA,GAAU;AAChC,aAAO;IACT;AAEA,WAAO,CAACD,QAAQI,UAAU,CAACH,QAAQG,SAAS,IAAIC,sBAAsBH,OAAOF,QAAQI,QAAQH,QAAQG,MAAM;EAC7G;AACF,CAAA;",
6
6
  "names": ["Capabilities", "contributes", "Type", "getTarget", "contributes", "Capabilities", "AnchorSort", "key", "Type", "getTypename", "SheetType", "sort", "anchorA", "anchorB", "sheet", "getTarget", "anchor", "compareIndexPositions"]
7
7
  }
@@ -6,11 +6,11 @@ import {
6
6
  cellClassNameForRange,
7
7
  rangeFromIndex,
8
8
  useSheetModel
9
- } from "./chunk-SI4X5GUR.mjs";
9
+ } from "./chunk-ELAASQ5H.mjs";
10
10
  import {
11
11
  rangeExtension,
12
12
  sheetExtension
13
- } from "./chunk-7HQX4NQP.mjs";
13
+ } from "./chunk-VTTKAHAY.mjs";
14
14
  import {
15
15
  SHEET_PLUGIN
16
16
  } from "./chunk-6AKBCBL4.mjs";
@@ -105,189 +105,18 @@ import { rangeToA1Notation as rangeToA1Notation2 } from "@dxos/compute";
105
105
  import { defaultColSize, defaultRowSize } from "@dxos/lit-grid";
106
106
  import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
107
107
  import { useAttention } from "@dxos/react-ui-attention";
108
- import { closestCell, editorKeys, parseCellIndex, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
109
-
110
- // src/components/GridSheet/util.ts
111
- import { useEffect, useState } from "react";
112
- import { inRange } from "@dxos/compute";
113
- import { createDocAccessor } from "@dxos/react-client/echo";
114
- import { parseValue, cellClassesForFieldType } from "@dxos/react-ui-form";
115
- import { colToA1Notation, rowToA1Notation, commentedClassName } from "@dxos/react-ui-grid";
116
- import { mx } from "@dxos/react-ui-theme";
117
- var createDxGridColumns = (model) => {
118
- return model.sheet.columns.reduce((acc, columnId, numericIndex) => {
119
- if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
120
- acc.grid[numericIndex] = {
121
- size: model.sheet.columnMeta[columnId].size,
122
- resizeable: true
123
- };
124
- }
125
- return acc;
126
- }, {
127
- grid: {}
128
- });
129
- };
130
- var createDxGridRows = (model) => {
131
- return model.sheet.rows.reduce((acc, rowId, numericIndex) => {
132
- if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
133
- acc.grid[numericIndex] = {
134
- size: model.sheet.rowMeta[rowId].size,
135
- resizeable: true
136
- };
137
- }
138
- return acc;
139
- }, {
140
- grid: {}
141
- });
142
- };
143
- var projectCellProps = (model, col, row) => {
144
- const address = {
145
- col,
146
- row
147
- };
148
- const rawValue = model.getValue(address);
149
- const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));
150
- const threadRefs = void 0;
151
- const description = model.getValueDescription(address);
152
- const type = description?.type;
153
- const format = description?.format;
154
- const classNames = ranges?.map(cellClassNameForRange).reverse();
155
- return {
156
- value: parseValue({
157
- type,
158
- format,
159
- value: rawValue
160
- }),
161
- className: mx(cellClassesForFieldType({
162
- type,
163
- format
164
- }), threadRefs && commentedClassName, classNames),
165
- dataRefs: threadRefs
166
- };
167
- };
168
- var gridCellGetter = (model) => {
169
- const cachedGridCells = {};
170
- return (nextBounds) => {
171
- [
172
- ...Array(nextBounds.end.col - nextBounds.start.col)
173
- ].forEach((_, c0) => {
174
- return [
175
- ...Array(nextBounds.end.row - nextBounds.start.row)
176
- ].forEach((_2, r0) => {
177
- const col = nextBounds.start.col + c0;
178
- const row = nextBounds.start.row + r0;
179
- cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);
180
- });
181
- });
182
- return cachedGridCells;
183
- };
184
- };
185
- var rowLabelCell = (row) => ({
186
- value: rowToA1Notation(row),
187
- className: "!bg-toolbarSurface text-subdued text-end pie-1",
188
- resizeHandle: "row"
189
- });
190
- var colLabelCell = (col) => ({
191
- value: colToA1Notation(col),
192
- className: "!bg-toolbarSurface text-subdued",
193
- resizeHandle: "col"
194
- });
195
- var cellGetter = (model) => {
196
- const getGridCells = gridCellGetter(model);
197
- return (nextBounds, plane) => {
198
- switch (plane) {
199
- case "grid":
200
- return getGridCells(nextBounds);
201
- case "fixedStartStart": {
202
- return {
203
- "0,0": {
204
- className: "!bg-toolbarSurface"
205
- }
206
- };
207
- }
208
- case "frozenColsStart":
209
- return [
210
- ...Array(nextBounds.end.row - nextBounds.start.row)
211
- ].reduce((acc, _, r0) => {
212
- const r = nextBounds.start.row + r0;
213
- acc[`0,${r}`] = rowLabelCell(r);
214
- return acc;
215
- }, {});
216
- case "frozenRowsStart":
217
- return [
218
- ...Array(nextBounds.end.col - nextBounds.start.col)
219
- ].reduce((acc, _, c0) => {
220
- const c = nextBounds.start.col + c0;
221
- acc[`${c},0`] = colLabelCell(c);
222
- return acc;
223
- }, {});
224
- default:
225
- return {};
226
- }
227
- };
228
- };
229
- var useSheetModelDxGridProps = (dxGrid, model) => {
230
- const [columns, setColumns] = useState(createDxGridColumns(model));
231
- const [rows, setRows] = useState(createDxGridRows(model));
232
- useEffect(() => {
233
- const cellsAccessor = createDocAccessor(model.sheet, [
234
- "cells"
235
- ]);
236
- if (dxGrid) {
237
- dxGrid.getCells = cellGetter(model);
238
- }
239
- const handleCellsUpdate = () => {
240
- dxGrid?.requestUpdate("initialCells");
241
- };
242
- cellsAccessor.handle.addListener("change", handleCellsUpdate);
243
- const unsubscribe = model.graph.update.on(handleCellsUpdate);
244
- return () => {
245
- cellsAccessor.handle.removeListener("change", handleCellsUpdate);
246
- unsubscribe();
247
- };
248
- }, [
249
- model,
250
- dxGrid
251
- ]);
252
- useEffect(() => {
253
- const columnMetaAccessor = createDocAccessor(model.sheet, [
254
- "columnMeta"
255
- ]);
256
- const rowMetaAccessor = createDocAccessor(model.sheet, [
257
- "rowMeta"
258
- ]);
259
- const handleColumnMetaUpdate = () => {
260
- setColumns(createDxGridColumns(model));
261
- };
262
- const handleRowMetaUpdate = () => {
263
- setRows(createDxGridRows(model));
264
- };
265
- columnMetaAccessor.handle.addListener("change", handleColumnMetaUpdate);
266
- rowMetaAccessor.handle.addListener("change", handleRowMetaUpdate);
267
- return () => {
268
- columnMetaAccessor.handle.removeListener("change", handleColumnMetaUpdate);
269
- rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
270
- };
271
- }, [
272
- model,
273
- dxGrid
274
- ]);
275
- return {
276
- columns,
277
- rows
278
- };
279
- };
108
+ import { Grid as Grid2, GridCellEditor, closestCell, editorKeys, parseCellIndex } from "@dxos/react-ui-grid";
280
109
 
281
110
  // src/integrations/thread-ranges.ts
282
111
  import { Schema as Schema2, pipe } from "effect";
283
- import { useCallback as useCallback2, useEffect as useEffect2, useMemo } from "react";
284
- import { createIntent, createResolver, LayoutAction, useIntentResolver, useIntentDispatcher, chain } from "@dxos/app-framework";
112
+ import { useCallback as useCallback2, useEffect, useMemo } from "react";
113
+ import { LayoutAction, chain, createIntent, createResolver, useIntentDispatcher, useIntentResolver } from "@dxos/app-framework";
285
114
  import { debounce } from "@dxos/async";
286
- import { inRange as inRange2 } from "@dxos/compute";
115
+ import { inRange } from "@dxos/compute";
287
116
  import { Obj, Relation } from "@dxos/echo";
288
117
  import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
289
118
  import { ThreadAction, ThreadType } from "@dxos/plugin-thread/types";
290
- import { Filter, fullyQualifiedId, getSpace, Query, useQuery } from "@dxos/react-client/echo";
119
+ import { Filter, Query, fullyQualifiedId, getSpace, useQuery } from "@dxos/react-client/echo";
291
120
  import { AnchoredTo } from "@dxos/schema";
292
121
  var parseThreadAnchorAsCellRange = (cursor) => {
293
122
  const coords = cursor.split(",");
@@ -345,7 +174,7 @@ var useSelectThreadOnCellFocus = () => {
345
174
  const source = Relation.getSource(anchor);
346
175
  if (anchor.anchor && Obj.instanceOf(ThreadType, source)) {
347
176
  const range = parseThreadAnchorAsCellRange(anchor.anchor);
348
- return range ? inRange2(range, cellAddress) : false;
177
+ return range ? inRange(range, cellAddress) : false;
349
178
  } else {
350
179
  return false;
351
180
  }
@@ -369,7 +198,7 @@ var useSelectThreadOnCellFocus = () => {
369
198
  }, [
370
199
  selectClosestThread
371
200
  ]);
372
- useEffect2(() => {
201
+ useEffect(() => {
373
202
  if (!cursor) {
374
203
  return;
375
204
  }
@@ -382,7 +211,7 @@ var useSelectThreadOnCellFocus = () => {
382
211
 
383
212
  // src/components/SheetContext/SheetContext.tsx
384
213
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
385
- import React3, { createContext as createContext2, useCallback as useCallback3, useContext as useContext2, useState as useState2 } from "react";
214
+ import React3, { createContext as createContext2, useCallback as useCallback3, useContext as useContext2, useState } from "react";
386
215
  import { invariant } from "@dxos/invariant";
387
216
  import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
388
217
  import { Grid, useGridContext } from "@dxos/react-ui-grid";
@@ -405,10 +234,10 @@ var SheetProviderImpl = ({ model, onInfo, ignoreAttention, children, __gridScope
405
234
  var _effect = _useSignals3();
406
235
  try {
407
236
  const { id, editing, setEditing } = useGridContext("SheetProvider", __gridScope);
408
- const [cursor, setCursorInternal] = useState2();
409
- const [range, setRangeInternal] = useState2();
410
- const [cursorFallbackRange, setCursorFallbackRange] = useState2();
411
- const [activeRefs, setActiveRefs] = useState2("");
237
+ const [cursor, setCursorInternal] = useState();
238
+ const [range, setRangeInternal] = useState();
239
+ const [cursorFallbackRange, setCursorFallbackRange] = useState();
240
+ const [activeRefs, setActiveRefs] = useState("");
412
241
  const setCursor = useCallback3((nextCursor) => {
413
242
  setCursorInternal(nextCursor);
414
243
  setCursorFallbackRange(range?.to ? range : nextCursor ? {
@@ -467,6 +296,177 @@ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo
467
296
  }
468
297
  };
469
298
 
299
+ // src/components/GridSheet/util.ts
300
+ import { useEffect as useEffect2, useState as useState2 } from "react";
301
+ import { inRange as inRange2 } from "@dxos/compute";
302
+ import { createDocAccessor } from "@dxos/react-client/echo";
303
+ import { cellClassesForFieldType, parseValue } from "@dxos/react-ui-form";
304
+ import { colToA1Notation, commentedClassName, rowToA1Notation } from "@dxos/react-ui-grid";
305
+ import { mx } from "@dxos/react-ui-theme";
306
+ var createDxGridColumns = (model) => {
307
+ return model.sheet.columns.reduce((acc, columnId, numericIndex) => {
308
+ if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
309
+ acc.grid[numericIndex] = {
310
+ size: model.sheet.columnMeta[columnId].size,
311
+ resizeable: true
312
+ };
313
+ }
314
+ return acc;
315
+ }, {
316
+ grid: {}
317
+ });
318
+ };
319
+ var createDxGridRows = (model) => {
320
+ return model.sheet.rows.reduce((acc, rowId, numericIndex) => {
321
+ if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
322
+ acc.grid[numericIndex] = {
323
+ size: model.sheet.rowMeta[rowId].size,
324
+ resizeable: true
325
+ };
326
+ }
327
+ return acc;
328
+ }, {
329
+ grid: {}
330
+ });
331
+ };
332
+ var projectCellProps = (model, col, row) => {
333
+ const address = {
334
+ col,
335
+ row
336
+ };
337
+ const rawValue = model.getValue(address);
338
+ const ranges = model.sheet.ranges?.filter(({ range }) => inRange2(rangeFromIndex(model.sheet, range), address));
339
+ const threadRefs = void 0;
340
+ const description = model.getValueDescription(address);
341
+ const type = description?.type;
342
+ const format = description?.format;
343
+ const classNames = ranges?.map(cellClassNameForRange).reverse();
344
+ return {
345
+ value: parseValue({
346
+ type,
347
+ format,
348
+ value: rawValue
349
+ }),
350
+ className: mx(cellClassesForFieldType({
351
+ type,
352
+ format
353
+ }), threadRefs && commentedClassName, classNames),
354
+ dataRefs: threadRefs
355
+ };
356
+ };
357
+ var gridCellGetter = (model) => {
358
+ const cachedGridCells = {};
359
+ return (nextBounds) => {
360
+ [
361
+ ...Array(nextBounds.end.col - nextBounds.start.col)
362
+ ].forEach((_, c0) => {
363
+ return [
364
+ ...Array(nextBounds.end.row - nextBounds.start.row)
365
+ ].forEach((_2, r0) => {
366
+ const col = nextBounds.start.col + c0;
367
+ const row = nextBounds.start.row + r0;
368
+ cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);
369
+ });
370
+ });
371
+ return cachedGridCells;
372
+ };
373
+ };
374
+ var rowLabelCell = (row) => ({
375
+ value: rowToA1Notation(row),
376
+ className: "!bg-toolbarSurface text-subdued text-end pie-1",
377
+ resizeHandle: "row"
378
+ });
379
+ var colLabelCell = (col) => ({
380
+ value: colToA1Notation(col),
381
+ className: "!bg-toolbarSurface text-subdued",
382
+ resizeHandle: "col"
383
+ });
384
+ var cellGetter = (model) => {
385
+ const getGridCells = gridCellGetter(model);
386
+ return (nextBounds, plane) => {
387
+ switch (plane) {
388
+ case "grid":
389
+ return getGridCells(nextBounds);
390
+ case "fixedStartStart": {
391
+ return {
392
+ "0,0": {
393
+ className: "!bg-toolbarSurface"
394
+ }
395
+ };
396
+ }
397
+ case "frozenColsStart":
398
+ return [
399
+ ...Array(nextBounds.end.row - nextBounds.start.row)
400
+ ].reduce((acc, _, r0) => {
401
+ const r = nextBounds.start.row + r0;
402
+ acc[`0,${r}`] = rowLabelCell(r);
403
+ return acc;
404
+ }, {});
405
+ case "frozenRowsStart":
406
+ return [
407
+ ...Array(nextBounds.end.col - nextBounds.start.col)
408
+ ].reduce((acc, _, c0) => {
409
+ const c = nextBounds.start.col + c0;
410
+ acc[`${c},0`] = colLabelCell(c);
411
+ return acc;
412
+ }, {});
413
+ default:
414
+ return {};
415
+ }
416
+ };
417
+ };
418
+ var useSheetModelDxGridProps = (dxGrid, model) => {
419
+ const [columns, setColumns] = useState2(createDxGridColumns(model));
420
+ const [rows, setRows] = useState2(createDxGridRows(model));
421
+ useEffect2(() => {
422
+ const cellsAccessor = createDocAccessor(model.sheet, [
423
+ "cells"
424
+ ]);
425
+ if (dxGrid) {
426
+ dxGrid.getCells = cellGetter(model);
427
+ }
428
+ const handleCellsUpdate = () => {
429
+ dxGrid?.requestUpdate("initialCells");
430
+ };
431
+ cellsAccessor.handle.addListener("change", handleCellsUpdate);
432
+ const unsubscribe = model.graph.update.on(handleCellsUpdate);
433
+ return () => {
434
+ cellsAccessor.handle.removeListener("change", handleCellsUpdate);
435
+ unsubscribe();
436
+ };
437
+ }, [
438
+ model,
439
+ dxGrid
440
+ ]);
441
+ useEffect2(() => {
442
+ const columnMetaAccessor = createDocAccessor(model.sheet, [
443
+ "columnMeta"
444
+ ]);
445
+ const rowMetaAccessor = createDocAccessor(model.sheet, [
446
+ "rowMeta"
447
+ ]);
448
+ const handleColumnMetaUpdate = () => {
449
+ setColumns(createDxGridColumns(model));
450
+ };
451
+ const handleRowMetaUpdate = () => {
452
+ setRows(createDxGridRows(model));
453
+ };
454
+ columnMetaAccessor.handle.addListener("change", handleColumnMetaUpdate);
455
+ rowMetaAccessor.handle.addListener("change", handleRowMetaUpdate);
456
+ return () => {
457
+ columnMetaAccessor.handle.removeListener("change", handleColumnMetaUpdate);
458
+ rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
459
+ };
460
+ }, [
461
+ model,
462
+ dxGrid
463
+ ]);
464
+ return {
465
+ columns,
466
+ rows
467
+ };
468
+ };
469
+
470
470
  // src/components/GridSheet/GridSheet.tsx
471
471
  var inertPosition = {
472
472
  plane: "grid",
@@ -833,7 +833,7 @@ var GridSheet = () => {
833
833
  };
834
834
 
835
835
  // src/components/index.ts
836
- var SheetContainer = lazy(() => import("./SheetContainer-6IWQKRJC.mjs"));
836
+ var SheetContainer = lazy(() => import("./SheetContainer-JZNFXBW3.mjs"));
837
837
 
838
838
  export {
839
839
  ComputeGraphContextProvider,
@@ -844,4 +844,4 @@ export {
844
844
  RangeList,
845
845
  SheetContainer
846
846
  };
847
- //# sourceMappingURL=chunk-ULWNSP4B.mjs.map
847
+ //# sourceMappingURL=chunk-BVTHIA5U.mjs.map