@dxos/plugin-sheet 0.8.4-main.406dc2a → 0.8.4-main.548089c

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 (151) hide show
  1. package/dist/lib/browser/{SheetContainer-VL34UND4.mjs → SheetContainer-BDLFSILO.mjs} +14 -16
  2. package/dist/lib/browser/SheetContainer-BDLFSILO.mjs.map +7 -0
  3. package/dist/lib/browser/{anchor-sort-3N44DS5F.mjs → anchor-sort-FCQ5OZZK.mjs} +8 -9
  4. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-ZMPNHFIP.mjs → chunk-73AV3NH6.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-ZJWJMX4E.mjs → chunk-7KRJ2IT5.mjs} +23 -23
  7. package/dist/lib/browser/chunk-7KRJ2IT5.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-SSN4HYJL.mjs → chunk-7VEWYJJN.mjs} +5 -5
  9. package/dist/lib/browser/{chunk-SSN4HYJL.mjs.map → chunk-7VEWYJJN.mjs.map} +2 -2
  10. package/dist/lib/browser/{chunk-ADK2HW4A.mjs → chunk-DVJ3QW3F.mjs} +217 -216
  11. package/dist/lib/browser/chunk-DVJ3QW3F.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-FWFAAGXL.mjs +28 -0
  13. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +7 -0
  14. package/dist/lib/browser/{compute-graph-registry-MF65HGGM.mjs → compute-graph-registry-AP5RA7W3.mjs} +3 -3
  15. package/dist/lib/browser/{compute-graph-registry-MF65HGGM.mjs.map → compute-graph-registry-AP5RA7W3.mjs.map} +2 -2
  16. package/dist/lib/browser/index.mjs +16 -16
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{intent-resolver-BQLV6IAA.mjs → intent-resolver-66OAYVQF.mjs} +5 -5
  19. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs.map +7 -0
  20. package/dist/lib/browser/{markdown-RMTMI237.mjs → markdown-B6VKYY2S.mjs} +4 -4
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-7ZDMQDCT.mjs → react-surface-GXHVZHKU.mjs} +11 -10
  23. package/dist/lib/browser/react-surface-GXHVZHKU.mjs.map +7 -0
  24. package/dist/lib/browser/types/index.mjs +4 -12
  25. package/dist/lib/node-esm/{SheetContainer-NWJ7L6FC.mjs → SheetContainer-CK5HSJPL.mjs} +14 -16
  26. package/dist/lib/node-esm/SheetContainer-CK5HSJPL.mjs.map +7 -0
  27. package/dist/lib/node-esm/{anchor-sort-YL2OZHYM.mjs → anchor-sort-ZE7IS7SH.mjs} +8 -9
  28. package/dist/lib/node-esm/anchor-sort-ZE7IS7SH.mjs.map +7 -0
  29. package/dist/lib/node-esm/{chunk-LN6ZSAII.mjs → chunk-44YTKTMP.mjs} +2 -2
  30. package/dist/lib/node-esm/{chunk-BZAPYBSH.mjs → chunk-4H2EHVWE.mjs} +217 -216
  31. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-IK4O7FUJ.mjs → chunk-4QV4AGWK.mjs} +5 -5
  33. package/dist/lib/node-esm/{chunk-IK4O7FUJ.mjs.map → chunk-4QV4AGWK.mjs.map} +2 -2
  34. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +29 -0
  35. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +7 -0
  36. package/dist/lib/node-esm/{chunk-YL7BVJPC.mjs → chunk-SMYD6H7Q.mjs} +23 -23
  37. package/dist/lib/node-esm/chunk-SMYD6H7Q.mjs.map +7 -0
  38. package/dist/lib/node-esm/{compute-graph-registry-P2O5LDFZ.mjs → compute-graph-registry-UMQ5UYCL.mjs} +3 -3
  39. package/dist/lib/node-esm/{compute-graph-registry-P2O5LDFZ.mjs.map → compute-graph-registry-UMQ5UYCL.mjs.map} +2 -2
  40. package/dist/lib/node-esm/index.mjs +16 -16
  41. package/dist/lib/node-esm/index.mjs.map +3 -3
  42. package/dist/lib/node-esm/{intent-resolver-MV5ZFXAQ.mjs → intent-resolver-VNKIMQQT.mjs} +5 -5
  43. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs.map +7 -0
  44. package/dist/lib/node-esm/{markdown-EDIWHA3P.mjs → markdown-VKY7HXU2.mjs} +4 -4
  45. package/dist/lib/node-esm/meta.json +1 -1
  46. package/dist/lib/node-esm/{react-surface-TUME5MM2.mjs → react-surface-45L45WN6.mjs} +11 -10
  47. package/dist/lib/node-esm/react-surface-45L45WN6.mjs.map +7 -0
  48. package/dist/lib/node-esm/types/index.mjs +4 -12
  49. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  50. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  51. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/index.d.ts +1 -4
  53. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  55. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  56. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +2 -2
  57. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  59. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -2
  60. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  61. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -2
  62. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  63. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +2 -2
  64. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/SheetContext/SheetContext.d.ts +2 -2
  66. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  67. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +3 -4
  68. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  69. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  70. package/dist/types/src/meta.d.ts.map +1 -1
  71. package/dist/types/src/model/sheet-model.d.ts +4 -4
  72. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  73. package/dist/types/src/model/testing.d.ts +2 -2
  74. package/dist/types/src/model/testing.d.ts.map +1 -1
  75. package/dist/types/src/model/useSheetModel.d.ts +2 -2
  76. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  77. package/dist/types/src/serializer.d.ts +2 -2
  78. package/dist/types/src/serializer.d.ts.map +1 -1
  79. package/dist/types/src/testing/data.d.ts +2 -2
  80. package/dist/types/src/testing/data.d.ts.map +1 -1
  81. package/dist/types/src/testing/testing.d.ts +26 -2
  82. package/dist/types/src/testing/testing.d.ts.map +1 -1
  83. package/dist/types/src/translations.d.ts +2 -2
  84. package/dist/types/src/translations.d.ts.map +1 -1
  85. package/dist/types/src/types/{schema.d.ts → Sheet.d.ts} +36 -3
  86. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  87. package/dist/types/src/types/index.d.ts +1 -1
  88. package/dist/types/src/types/index.d.ts.map +1 -1
  89. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  90. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  91. package/dist/types/src/types/types.d.ts +0 -9
  92. package/dist/types/src/types/types.d.ts.map +1 -1
  93. package/dist/types/src/types/util.d.ts +9 -10
  94. package/dist/types/src/types/util.d.ts.map +1 -1
  95. package/dist/types/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +51 -50
  97. package/src/SheetPlugin.tsx +6 -5
  98. package/src/capabilities/anchor-sort.ts +7 -8
  99. package/src/capabilities/compute-graph-registry.ts +1 -1
  100. package/src/capabilities/intent-resolver.ts +2 -2
  101. package/src/capabilities/react-surface.tsx +6 -5
  102. package/src/components/ComputeGraph/compute-graph.stories.tsx +8 -8
  103. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -1
  104. package/src/components/GridSheet/GridSheet.stories.tsx +2 -2
  105. package/src/components/GridSheet/GridSheet.tsx +16 -4
  106. package/src/components/GridSheet/SheetCellEditor.stories.tsx +4 -4
  107. package/src/components/GridSheet/util.ts +9 -3
  108. package/src/components/RangeList/RangeList.tsx +5 -5
  109. package/src/components/SheetContainer/SheetContainer.stories.tsx +9 -6
  110. package/src/components/SheetContainer/SheetContainer.tsx +5 -4
  111. package/src/components/SheetContext/SheetContext.tsx +4 -4
  112. package/src/components/SheetToolbar/SheetToolbar.tsx +14 -16
  113. package/src/extensions/compute.stories.tsx +2 -2
  114. package/src/integrations/thread-ranges.ts +10 -16
  115. package/src/meta.ts +6 -2
  116. package/src/model/sheet-model.test.ts +4 -4
  117. package/src/model/sheet-model.ts +3 -3
  118. package/src/model/testing.ts +4 -4
  119. package/src/model/useSheetModel.ts +2 -2
  120. package/src/sanity.test.ts +3 -4
  121. package/src/serializer.ts +3 -3
  122. package/src/testing/data.ts +2 -2
  123. package/src/testing/testing.tsx +3 -3
  124. package/src/translations.ts +2 -2
  125. package/src/types/Sheet.ts +103 -0
  126. package/src/types/index.ts +1 -1
  127. package/src/types/sheet-range-types.ts +2 -2
  128. package/src/types/types.ts +3 -13
  129. package/src/types/util.ts +10 -38
  130. package/dist/lib/browser/SheetContainer-VL34UND4.mjs.map +0 -7
  131. package/dist/lib/browser/anchor-sort-3N44DS5F.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-ADK2HW4A.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-CSBSADPQ.mjs +0 -16
  134. package/dist/lib/browser/chunk-CSBSADPQ.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-ZJWJMX4E.mjs.map +0 -7
  136. package/dist/lib/browser/intent-resolver-BQLV6IAA.mjs.map +0 -7
  137. package/dist/lib/browser/react-surface-7ZDMQDCT.mjs.map +0 -7
  138. package/dist/lib/node-esm/SheetContainer-NWJ7L6FC.mjs.map +0 -7
  139. package/dist/lib/node-esm/anchor-sort-YL2OZHYM.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-BZAPYBSH.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-H3GSD33H.mjs +0 -18
  142. package/dist/lib/node-esm/chunk-H3GSD33H.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-YL7BVJPC.mjs.map +0 -7
  144. package/dist/lib/node-esm/intent-resolver-MV5ZFXAQ.mjs.map +0 -7
  145. package/dist/lib/node-esm/react-surface-TUME5MM2.mjs.map +0 -7
  146. package/dist/types/src/types/schema.d.ts.map +0 -1
  147. package/src/types/schema.ts +0 -61
  148. /package/dist/lib/browser/{chunk-ZMPNHFIP.mjs.map → chunk-73AV3NH6.mjs.map} +0 -0
  149. /package/dist/lib/browser/{markdown-RMTMI237.mjs.map → markdown-B6VKYY2S.mjs.map} +0 -0
  150. /package/dist/lib/node-esm/{chunk-LN6ZSAII.mjs.map → chunk-44YTKTMP.mjs.map} +0 -0
  151. /package/dist/lib/node-esm/{markdown-EDIWHA3P.mjs.map → markdown-VKY7HXU2.mjs.map} +0 -0
@@ -3,22 +3,22 @@ import {
3
3
  SheetProvider,
4
4
  useComputeGraph,
5
5
  useSheetContext
6
- } from "./chunk-ZJWJMX4E.mjs";
6
+ } from "./chunk-7KRJ2IT5.mjs";
7
7
  import {
8
8
  alignKey,
9
9
  mapFormulaIndicesToRefs,
10
10
  rangeFromIndex,
11
11
  rangeToIndex
12
- } from "./chunk-ADK2HW4A.mjs";
13
- import "./chunk-SSN4HYJL.mjs";
12
+ } from "./chunk-DVJ3QW3F.mjs";
13
+ import "./chunk-7VEWYJJN.mjs";
14
14
  import {
15
15
  meta
16
- } from "./chunk-CSBSADPQ.mjs";
16
+ } from "./chunk-FWFAAGXL.mjs";
17
17
 
18
18
  // src/components/SheetContainer/SheetContainer.tsx
19
19
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
20
20
  import React3 from "react";
21
- import { fullyQualifiedId } from "@dxos/react-client/echo";
21
+ import { Obj } from "@dxos/echo";
22
22
  import { StackItem } from "@dxos/react-ui-stack";
23
23
 
24
24
  // src/components/FunctionEditor/FunctionEditor.tsx
@@ -42,7 +42,7 @@ var FunctionEditor = () => {
42
42
  }
43
43
  }
44
44
  return /* @__PURE__ */ React.createElement("div", {
45
- className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator"
45
+ className: "flex shrink-0 justify-between items-center pli-4 plb-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator"
46
46
  }, /* @__PURE__ */ React.createElement("div", {
47
47
  className: "flex gap-4 items-center"
48
48
  }, /* @__PURE__ */ React.createElement("div", {
@@ -65,9 +65,9 @@ var FunctionEditor = () => {
65
65
 
66
66
  // src/components/SheetToolbar/SheetToolbar.tsx
67
67
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
68
- import { Rx } from "@effect-rx/rx-react";
68
+ import { Atom } from "@effect-atom/atom-react";
69
69
  import React2, { useMemo as useMemo2 } from "react";
70
- import { useAppGraph } from "@dxos/app-framework";
70
+ import { useAppGraph } from "@dxos/app-framework/react";
71
71
  import { MenuProvider, ToolbarMenu, createGapSeparator, rxFromSignal, useMenuActions } from "@dxos/react-ui-menu";
72
72
 
73
73
  // src/components/SheetToolbar/align.ts
@@ -254,7 +254,7 @@ var useToolbarState = (initialState = {}) => {
254
254
 
255
255
  // src/components/SheetToolbar/SheetToolbar.tsx
256
256
  var createToolbarActions = (model, state, cursorFallbackRange, customActions) => {
257
- return Rx.make((get) => {
257
+ return Atom.make((get) => {
258
258
  const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));
259
259
  const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));
260
260
  const gap = createGapSeparator();
@@ -278,7 +278,7 @@ var createToolbarActions = (model, state, cursorFallbackRange, customActions) =>
278
278
  return graph;
279
279
  });
280
280
  };
281
- var SheetToolbar = ({ id, classNames }) => {
281
+ var SheetToolbar = ({ id }) => {
282
282
  var _effect = _useSignals3();
283
283
  try {
284
284
  const { model, cursorFallbackRange } = useSheetContext();
@@ -287,7 +287,7 @@ var SheetToolbar = ({ id, classNames }) => {
287
287
  useStyleState(state);
288
288
  const { graph } = useAppGraph();
289
289
  const customActions = useMemo2(() => {
290
- return Rx.make((get) => {
290
+ return Atom.make((get) => {
291
291
  const actions = get(graph.actions(id));
292
292
  const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
293
293
  return {
@@ -311,9 +311,7 @@ var SheetToolbar = ({ id, classNames }) => {
311
311
  return /* @__PURE__ */ React2.createElement(MenuProvider, {
312
312
  ...menu,
313
313
  attendableId: id
314
- }, /* @__PURE__ */ React2.createElement(ToolbarMenu, {
315
- classNames
316
- }));
314
+ }, /* @__PURE__ */ React2.createElement(ToolbarMenu, null));
317
315
  } finally {
318
316
  _effect.f();
319
317
  }
@@ -336,7 +334,7 @@ var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
336
334
  role === "story" && "bs-full"
337
335
  ]
338
336
  }, /* @__PURE__ */ React3.createElement(SheetToolbar, {
339
- id: fullyQualifiedId(sheet)
337
+ id: Obj.getDXN(sheet).toString()
340
338
  }), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
341
339
  } finally {
342
340
  _effect.f();
@@ -348,4 +346,4 @@ var SheetContainer_default = SheetContainer;
348
346
  export {
349
347
  SheetContainer_default as default
350
348
  };
351
- //# sourceMappingURL=SheetContainer-VL34UND4.mjs.map
349
+ //# sourceMappingURL=SheetContainer-BDLFSILO.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 { Obj } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type Sheet } 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: Sheet.Sheet;\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\n toolbar\n statusbar\n classNames={[role === 'section' && 'aspect-video', role === 'story' && 'bs-full']}\n >\n <SheetToolbar id={Obj.getDXN(sheet).toString()} />\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 pli-4 plb-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 { Atom } from '@effect-atom/atom-react';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport {\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\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n cursorFallbackRange?: CompleteCellRange,\n customActions?: Atom.Atom<ActionGraphProps>,\n): Atom.Atom<ActionGraphProps> => {\n return Atom.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\n const graph: ActionGraphProps = {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges],\n };\n\n if (customActions) {\n const custom = get(customActions);\n graph.nodes.push(...custom.nodes);\n graph.edges.push(...custom.edges);\n }\n\n return graph;\n });\n};\n\nexport type SheetToolbarProps = PropsWithChildren<{ id: string }>;\n\nexport const SheetToolbar = ({ id }: 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 Atom.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return {\n nodes,\n edges: nodes.map((node) => ({ source: 'root', target: node.id })),\n };\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 />\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 { meta } 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: meta.id }],\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: meta.id }],\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 { meta } 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: meta.id }],\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", "Obj", "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", "Atom", "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", "meta", "id", "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", "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", "meta", "id", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "cursorFallbackRange", "customActions", "Atom", "make", "get", "align", "rxFromSignal", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "useSheetContext", "useToolbarState", "useAlignState", "useStyleState", "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", "Obj", "getDXN", "toString", "GridSheet", "FunctionEditor", "SheetContainer"]
7
+ }
@@ -1,18 +1,17 @@
1
1
  import {
2
- SheetType,
2
+ Sheet_exports,
3
3
  compareIndexPositions
4
- } from "./chunk-ADK2HW4A.mjs";
5
- import "./chunk-CSBSADPQ.mjs";
4
+ } from "./chunk-DVJ3QW3F.mjs";
5
+ import "./chunk-FWFAAGXL.mjs";
6
6
 
7
7
  // src/capabilities/anchor-sort.ts
8
8
  import { Capabilities, contributes } from "@dxos/app-framework";
9
- import { Type } from "@dxos/echo";
10
- import { getTarget } from "@dxos/react-client/echo";
9
+ import { Relation } from "@dxos/echo";
11
10
  var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
12
- key: Type.getTypename(SheetType),
11
+ key: Sheet_exports.Sheet.typename,
13
12
  sort: (anchorA, anchorB) => {
14
- const sheet = getTarget(anchorA);
15
- if (sheet !== getTarget(anchorB)) {
13
+ const sheet = Relation.getTarget(anchorA);
14
+ if (sheet !== Relation.getTarget(anchorB)) {
16
15
  return 0;
17
16
  }
18
17
  return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
@@ -21,4 +20,4 @@ var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
21
20
  export {
22
21
  anchor_sort_default as default
23
22
  };
24
- //# sourceMappingURL=anchor-sort-3N44DS5F.mjs.map
23
+ //# sourceMappingURL=anchor-sort-FCQ5OZZK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/anchor-sort.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, type Capability, contributes } from '@dxos/app-framework';\nimport { Relation } from '@dxos/echo';\n\nimport { Sheet, compareIndexPositions } from '../types';\n\nexport default (): Capability<typeof Capabilities.AnchorSort> =>\n contributes(Capabilities.AnchorSort, {\n key: Sheet.Sheet.typename,\n sort: (anchorA, anchorB) => {\n const sheet = Relation.getTarget(anchorA) as Sheet.Sheet;\n if (sheet !== Relation.getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
5
+ "mappings": ";;;;;;;AAIA,SAASA,cAA+BC,mBAAmB;AAC3D,SAASC,gBAAgB;AAIzB,IAAA,uBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,cAAMA,MAAMC;EACjBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,QAAQC,SAASC,UAAUJ,OAAAA;AACjC,QAAIE,UAAUC,SAASC,UAAUH,OAAAA,GAAU;AACzC,aAAO;IACT;AAEA,WAAO,CAACD,QAAQK,UAAU,CAACJ,QAAQI,SAAS,IAAIC,sBAAsBJ,OAAOF,QAAQK,QAAQJ,QAAQI,MAAM;EAC7G;AACF,CAAA;",
6
+ "names": ["Capabilities", "contributes", "Relation", "contributes", "Capabilities", "AnchorSort", "key", "Sheet", "typename", "sort", "anchorA", "anchorB", "sheet", "Relation", "getTarget", "anchor", "compareIndexPositions"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-CSBSADPQ.mjs";
3
+ } from "./chunk-FWFAAGXL.mjs";
4
4
 
5
5
  // src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
@@ -12,4 +12,4 @@ var SheetCapabilities;
12
12
  export {
13
13
  SheetCapabilities
14
14
  };
15
- //# sourceMappingURL=chunk-ZMPNHFIP.mjs.map
15
+ //# sourceMappingURL=chunk-73AV3NH6.mjs.map
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  DEFAULT_COLS,
3
3
  DEFAULT_ROWS,
4
- Range,
5
4
  SheetAction,
5
+ Sheet_exports,
6
6
  cellClassNameForRange,
7
7
  rangeFromIndex,
8
8
  useSheetModel
9
- } from "./chunk-ADK2HW4A.mjs";
9
+ } from "./chunk-DVJ3QW3F.mjs";
10
10
  import {
11
11
  rangeExtension,
12
12
  sheetExtension
13
- } from "./chunk-SSN4HYJL.mjs";
13
+ } from "./chunk-7VEWYJJN.mjs";
14
14
  import {
15
15
  meta
16
- } from "./chunk-CSBSADPQ.mjs";
16
+ } from "./chunk-FWFAAGXL.mjs";
17
17
 
18
18
  // src/components/ComputeGraph/ComputeGraphContextProvider.tsx
19
19
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -72,7 +72,7 @@ var RangeList = ({ sheet }) => {
72
72
  className: "mbs-cardSpacingBlock mbe-labelSpacingBlock text-sm font-semibold"
73
73
  }, t("range list heading")), sheet.ranges.length < 1 ? /* @__PURE__ */ React2.createElement(Callout.Root, null, /* @__PURE__ */ React2.createElement(Callout.Title, null, t("no ranges message"))) : /* @__PURE__ */ React2.createElement(List.Root, {
74
74
  items: sheet.ranges,
75
- isItem: Schema.is(Range)
75
+ isItem: Schema.is(Sheet_exports.Range)
76
76
  }, ({ items: ranges }) => ranges.map((range, i) => /* @__PURE__ */ React2.createElement(List.Item, {
77
77
  key: i,
78
78
  item: range,
@@ -100,7 +100,8 @@ import { lazy } from "react";
100
100
  // src/components/GridSheet/GridSheet.tsx
101
101
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
102
102
  import React4, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState3 } from "react";
103
- import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
103
+ import { createIntent as createIntent2 } from "@dxos/app-framework";
104
+ import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework/react";
104
105
  import { rangeToA1Notation as rangeToA1Notation2 } from "@dxos/compute";
105
106
  import { defaultColSize, defaultRowSize } from "@dxos/lit-grid";
106
107
  import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
@@ -111,14 +112,15 @@ import { Grid as Grid2, GridCellEditor, closestCell, editorKeys, parseCellIndex
111
112
  import * as Function from "effect/Function";
112
113
  import * as Schema2 from "effect/Schema";
113
114
  import { useCallback as useCallback2, useEffect, useMemo } from "react";
114
- import { LayoutAction, chain, createIntent, createResolver, useIntentDispatcher, useIntentResolver } from "@dxos/app-framework";
115
+ import { LayoutAction, chain, createIntent, createResolver } from "@dxos/app-framework";
116
+ import { useIntentDispatcher, useIntentResolver } from "@dxos/app-framework/react";
115
117
  import { debounce } from "@dxos/async";
116
118
  import { inRange } from "@dxos/compute";
117
119
  import { Obj, Relation } from "@dxos/echo";
118
120
  import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
119
- import { ThreadAction, ThreadType } from "@dxos/plugin-thread/types";
120
- import { Filter, Query, fullyQualifiedId, getSpace, useQuery } from "@dxos/react-client/echo";
121
- import { AnchoredTo } from "@dxos/schema";
121
+ import { Thread, ThreadAction } from "@dxos/plugin-thread/types";
122
+ import { Filter, Query, getSpace, useQuery } from "@dxos/react-client/echo";
123
+ import { AnchoredTo } from "@dxos/types";
122
124
  var parseThreadAnchorAsCellRange = (cursor) => {
123
125
  const coords = cursor.split(",");
124
126
  if (coords.length !== 4) {
@@ -146,7 +148,7 @@ var useUpdateFocusedCellOnThreadSelection = (grid) => {
146
148
  if (!Schema2.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
147
149
  return false;
148
150
  }
149
- return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;
151
+ return data.subject === Obj.getDXN(model.sheet).toString() && !!data.options?.cursor;
150
152
  },
151
153
  resolve: ({ options: { cursor, ref } }) => {
152
154
  setActiveRefs(ref);
@@ -166,14 +168,14 @@ var useSelectThreadOnCellFocus = () => {
166
168
  const { model, cursor } = useSheetContext();
167
169
  const { dispatchPromise: dispatch } = useIntentDispatcher();
168
170
  const space = getSpace(model.sheet);
169
- const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo));
171
+ const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo.AnchoredTo));
170
172
  const selectClosestThread = useCallback2((cellAddress) => {
171
173
  if (!cellAddress) {
172
174
  return;
173
175
  }
174
176
  const closestThread = anchors.find((anchor) => {
175
177
  const source = Relation.getSource(anchor);
176
- if (anchor.anchor && Obj.instanceOf(ThreadType, source)) {
178
+ if (anchor.anchor && Obj.instanceOf(Thread.Thread, source)) {
177
179
  const range = parseThreadAnchorAsCellRange(anchor.anchor);
178
180
  return range ? inRange(range, cellAddress) : false;
179
181
  } else {
@@ -181,9 +183,9 @@ var useSelectThreadOnCellFocus = () => {
181
183
  }
182
184
  });
183
185
  if (closestThread) {
184
- const primary = fullyQualifiedId(model.sheet);
186
+ const primary = Obj.getDXN(model.sheet).toString();
185
187
  const intent = Function.pipe(createIntent(ThreadAction.Select, {
186
- current: fullyQualifiedId(closestThread)
188
+ current: Obj.getDXN(closestThread).toString()
187
189
  }), chain(DeckAction.ChangeCompanion, {
188
190
  primary,
189
191
  companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments`
@@ -213,8 +215,8 @@ var useSelectThreadOnCellFocus = () => {
213
215
  // src/components/SheetContext/SheetContext.tsx
214
216
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
215
217
  import React3, { createContext as createContext2, useCallback as useCallback3, useContext as useContext2, useState } from "react";
218
+ import { Obj as Obj2 } from "@dxos/echo";
216
219
  import { invariant } from "@dxos/invariant";
217
- import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
218
220
  import { Grid, useGridContext } from "@dxos/react-ui-grid";
219
221
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-sheet/src/components/SheetContext/SheetContext.tsx";
220
222
  var SheetContext = /* @__PURE__ */ createContext2(void 0);
@@ -286,7 +288,7 @@ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo
286
288
  readonly
287
289
  });
288
290
  return !model ? null : /* @__PURE__ */ React3.createElement(Grid.Root, {
289
- id: fullyQualifiedId2(sheet)
291
+ id: Obj2.getDXN(sheet).toString()
290
292
  }, /* @__PURE__ */ React3.createElement(SheetProviderImpl, {
291
293
  model,
292
294
  onInfo,
@@ -578,14 +580,12 @@ var GridSheet = () => {
578
580
  ]);
579
581
  const handleAxisResize = useCallback4(({ axis, size, index: numericIndex }) => {
580
582
  if (axis === "row") {
581
- var _model_sheet_rowMeta, _rowId;
582
583
  const rowId = model.sheet.rows[parseInt(numericIndex)];
583
- (_model_sheet_rowMeta = model.sheet.rowMeta)[_rowId = rowId] ?? (_model_sheet_rowMeta[_rowId] = {});
584
+ model.sheet.rowMeta[rowId] ??= {};
584
585
  model.sheet.rowMeta[rowId].size = size;
585
586
  } else {
586
- var _model_sheet_columnMeta, _columnId;
587
587
  const columnId = model.sheet.columns[parseInt(numericIndex)];
588
- (_model_sheet_columnMeta = model.sheet.columnMeta)[_columnId = columnId] ?? (_model_sheet_columnMeta[_columnId] = {});
588
+ model.sheet.columnMeta[columnId] ??= {};
589
589
  model.sheet.columnMeta[columnId].size = size;
590
590
  }
591
591
  }, [
@@ -838,7 +838,7 @@ var GridSheet = () => {
838
838
  };
839
839
 
840
840
  // src/components/index.ts
841
- var SheetContainer = lazy(() => import("./SheetContainer-VL34UND4.mjs"));
841
+ var SheetContainer = lazy(() => import("./SheetContainer-BDLFSILO.mjs"));
842
842
 
843
843
  export {
844
844
  ComputeGraphContextProvider,
@@ -849,4 +849,4 @@ export {
849
849
  RangeList,
850
850
  SheetContainer
851
851
  };
852
- //# sourceMappingURL=chunk-ZJWJMX4E.mjs.map
852
+ //# sourceMappingURL=chunk-7KRJ2IT5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/components/RangeList/RangeList.tsx", "../../../src/components/index.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/integrations/thread-ranges.ts", "../../../src/components/SheetContext/SheetContext.tsx", "../../../src/components/GridSheet/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute';\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\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 * as Schema from 'effect/Schema';\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\nimport { Callout, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { rangeFromIndex } from '../../types';\nimport { Sheet } from '../../types';\n\nexport type RangeListProps = {\n sheet: Sheet.Sheet;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(meta.id);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Sheet.Range) => {};\n const handleDeleteRange = useCallback(\n (range: Sheet.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='mbs-cardSpacingBlock mbe-labelSpacingBlock text-sm font-semibold'>{t('range list heading')}</h2>\n {sheet.ranges.length < 1 ? (\n <Callout.Root>\n <Callout.Title>{t('no ranges message')}</Callout.Title>\n </Callout.Root>\n ) : (\n <List.Root<Sheet.Range> items={sheet.ranges} isItem={Schema.is(Sheet.Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n )}\n </>\n );\n};\n", "//\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, {\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type WheelEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { createIntent } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { type CellRange, rangeToA1Notation } from '@dxos/compute';\nimport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n type DxGridCellIndex,\n type DxGridElement,\n type DxGridPosition,\n type EditorBlurHandler,\n type EditorKeyHandler,\n Grid,\n GridCellEditor,\n type GridContentProps,\n closestCell,\n editorKeys,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { type RangeController, rangeExtension, sheetExtension } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { meta } from '../../meta';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\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 sheetColDefault = {\n frozenColsStart: { size: 48, readonly: true, focusUnfurl: false },\n grid: { size: defaultColSize, resizeable: true },\n};\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultRowSize, readonly: true, focusUnfurl: false },\n grid: { size: defaultRowSize, resizeable: true },\n};\n\nexport const GridSheet = () => {\n const { t } = useTranslation(meta.id);\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 { dispatchPromise: dispatch } = useIntentDispatcher();\n const rangeController = useRef<RangeController>(null);\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell) {\n if (cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n setExtraplanarFocus(null);\n } else {\n setExtraplanarFocus(cell);\n }\n } else {\n setExtraplanarFocus(null);\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<EditorKeyHandler>(\n (_value, event) => {\n if (event) {\n const { key, shift } = event;\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n }\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (value !== undefined) {\n model.setValue(parseCellIndex(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n\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: {\n col: pos.col,\n row: model.sheet.rows.length - 1,\n plane: 'grid',\n },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: {\n row: pos.row,\n col: model.sheet.columns.length - 1,\n plane: 'grid',\n },\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 createIntent(SheetAction.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n }),\n );\n case 'drop':\n return dispatch(\n createIntent(SheetAction.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n }),\n );\n }\n },\n [contextMenuAxis, contextMenuOpen, model, dispatch],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extensions = useMemo(\n () => [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: DxGridCellIndex) => {\n return model.getCellText(parseCellIndex(index));\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?\n <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent'>\n <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n // TODO(burdon): `col` vs. `column`?\n columnDefault={sheetColDefault}\n rowDefault={sheetRowDefault}\n frozen={frozen}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-before')}\n data-testid={`grid.${contextMenuAxis}.insert-before`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-after')}\n data-testid={`grid.${contextMenuAxis}.insert-after`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('drop')}\n data-testid={`grid.${contextMenuAxis}.drop`}\n >\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Schema from 'effect/Schema';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { LayoutAction, chain, createIntent, createResolver } from '@dxos/app-framework';\nimport { useIntentDispatcher, useIntentResolver } from '@dxos/app-framework/react';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { Obj, Relation } from '@dxos/echo';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { Thread, ThreadAction } from '@dxos/plugin-thread/types';\nimport { Filter, Query, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { type DxGridElement, type GridContentProps } from '@dxos/react-ui-grid';\nimport { AnchoredTo } from '@dxos/types';\n\nimport { useSheetContext } from '../components';\nimport { meta } 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 scrollIntoViewResolver = useMemo(\n () =>\n createResolver({\n intent: LayoutAction.ScrollIntoView,\n position: 'hoist',\n filter: (\n data,\n ): data is {\n part: 'current';\n subject: string;\n options: { cursor: string; ref: GridContentProps['activeRefs'] };\n } => {\n if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {\n return false;\n }\n\n return data.subject === Obj.getDXN(model.sheet).toString() && !!data.options?.cursor;\n },\n resolve: ({ options: { cursor, ref } }) => {\n setActiveRefs(ref);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(cursor!);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n },\n }),\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(meta.id, scrollIntoViewResolver);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const space = getSpace(model.sheet);\n const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo.AnchoredTo));\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress) {\n return;\n }\n\n const closestThread = anchors.find((anchor) => {\n const source = Relation.getSource(anchor);\n if (anchor.anchor && Obj.instanceOf(Thread.Thread, source)) {\n const range = parseThreadAnchorAsCellRange(anchor.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n const primary = Obj.getDXN(model.sheet).toString();\n const intent = Function.pipe(\n createIntent(ThreadAction.Select, { current: Obj.getDXN(closestThread).toString() }),\n chain(DeckAction.ChangeCompanion, { primary, companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments` }),\n );\n void dispatch(intent);\n }\n },\n [dispatch, anchors],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: CellAddress) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { type CellAddress, type CellRange, type CompleteCellRange, type ComputeGraph } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type Sheet } 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: Sheet.Sheet;\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={Obj.getDXN(sheet).toString()}>\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 { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';\nimport {\n type DxGridAxisMeta,\n type DxGridCellValue,\n type DxGridElement,\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n type GridContentProps,\n colToA1Notation,\n commentedClassName,\n rowToA1Notation,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type SheetModel } from '../../model';\nimport { cellClassNameForRange, rangeFromIndex } from '../../types';\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] = {\n size: model.sheet.columnMeta[columnId].size,\n resizeable: true,\n };\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] = {\n size: model.sheet.rowMeta[rowId].size,\n resizeable: true,\n };\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 = undefined;\n // TODO(wittjosiah): Update this to get threads via relations.\n // model.sheet.threads\n // ?.filter((thread) => {\n // const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);\n // return thread && range ? inRange(range, address) : false;\n // })\n // .map((thread) => Obj.getDXN(thread!).toString())\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: '!bg-toolbarSurface text-subdued text-end pie-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: '!bg-toolbarSurface 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 'fixedStartStart': {\n return {\n '0,0': { className: '!bg-toolbarSurface' },\n };\n }\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"],
5
+ "mappings": "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",
6
+ "names": ["React", "createContext", "useContext", "raise", "useAsyncState", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "Schema", "React", "useCallback", "rangeToA1Notation", "Callout", "useTranslation", "List", "ghostHover", "RangeList", "sheet", "t", "useTranslation", "meta", "id", "handleSelectRange", "range", "handleDeleteRange", "useCallback", "index", "ranges", "findIndex", "sheetRange", "splice", "React", "h2", "className", "length", "Callout", "Root", "Title", "List", "items", "isItem", "is", "Sheet", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "value", "ItemDeleteButton", "lazy", "React", "useCallback", "useMemo", "useRef", "useState", "createIntent", "useIntentDispatcher", "rangeToA1Notation", "defaultColSize", "defaultRowSize", "DropdownMenu", "Icon", "useTranslation", "useAttention", "Grid", "GridCellEditor", "closestCell", "editorKeys", "parseCellIndex", "Function", "Schema", "useCallback", "useEffect", "useMemo", "LayoutAction", "chain", "createIntent", "createResolver", "useIntentDispatcher", "useIntentResolver", "debounce", "inRange", "Obj", "Relation", "ATTENDABLE_PATH_SEPARATOR", "DeckAction", "Thread", "ThreadAction", "Filter", "Query", "getSpace", "useQuery", "AnchoredTo", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "from", "col", "parseInt", "row", "to", "useUpdateFocusedCellOnThreadSelection", "grid", "model", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "ScrollIntoView", "position", "filter", "data", "is", "fields", "input", "subject", "Obj", "getDXN", "sheet", "toString", "options", "resolve", "ref", "range", "setFocus", "plane", "useIntentResolver", "meta", "id", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "anchors", "useQuery", "Query", "select", "Filter", "ids", "targetOf", "AnchoredTo", "selectClosestThread", "useCallback", "cellAddress", "closestThread", "find", "anchor", "source", "Relation", "getSource", "instanceOf", "Thread", "inRange", "primary", "pipe", "createIntent", "ThreadAction", "Select", "current", "chain", "DeckAction", "ChangeCompanion", "companion", "ATTENDABLE_PATH_SEPARATOR", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "useEffect", "React", "createContext", "useCallback", "useContext", "useState", "Obj", "invariant", "Grid", "useGridContext", "SheetContext", "createContext", "undefined", "useSheetContext", "context", "useContext", "invariant", "SheetProviderImpl", "model", "onInfo", "ignoreAttention", "children", "__gridScope", "id", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "useState", "range", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "to", "from", "setRange", "nextRange", "React", "Provider", "value", "SheetProvider", "graph", "sheet", "readonly", "useSheetModel", "Grid", "Root", "Obj", "getDXN", "toString", "useEffect", "useState", "inRange", "createDocAccessor", "cellClassesForFieldType", "parseValue", "colToA1Notation", "commentedClassName", "rowToA1Notation", "mx", "createDxGridColumns", "model", "sheet", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "ranges", "filter", "range", "inRange", "rangeFromIndex", "threadRefs", "undefined", "description", "getValueDescription", "type", "format", "classNames", "map", "cellClassNameForRange", "reverse", "value", "parseValue", "className", "mx", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "useEffect", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "graph", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "plane", "col", "row", "initialCells", "grid", "frozenColsStart", "Array", "reduce", "acc", "_", "i", "rowLabelCell", "frozenRowsStart", "colLabelCell", "frozen", "sheetColDefault", "size", "readonly", "focusUnfurl", "defaultColSize", "resizeable", "sheetRowDefault", "defaultRowSize", "GridSheet", "t", "useTranslation", "meta", "id", "model", "editing", "setCursor", "setRange", "cursor", "cursorFallbackRange", "activeRefs", "ignoreAttention", "useSheetContext", "dxGrid", "setDxGrid", "useState", "extraplanarFocus", "setExtraplanarFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "useCallback", "event", "cell", "closestCell", "target", "handleClose", "_value", "key", "shift", "axis", "includes", "undefined", "delta", "startsWith", "refocus", "handleBlur", "value", "setValue", "parseCellIndex", "index", "handleAxisResize", "numericIndex", "rowId", "sheet", "rows", "parseInt", "rowMeta", "columnId", "columns", "columnMeta", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "range", "from", "to", "current", "rangeToA1Notation", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "start", "end", "length", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "createIntent", "SheetAction", "InsertAxis", "DropAxis", "axisIndex", "useSheetModelDxGridProps", "extensions", "useMemo", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "graph", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "useUpdateFocusedCellOnThreadSelection", "useSelectThreadOnCellFocus", "React", "div", "role", "className", "GridCellEditor", "onBlur", "Grid", "Content", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "columnDefault", "rowDefault", "onAxisResize", "onSelect", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "onClick", "overscroll", "ref", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Item", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
7
+ }
@@ -159,6 +159,10 @@ var rangeExtension = ({ onInit, onStateChange }) => {
159
159
  }
160
160
  };
161
161
  return ViewPlugin2.fromClass(class {
162
+ constructor(_view) {
163
+ view = _view;
164
+ onInit?.(notifier);
165
+ }
162
166
  update(view2) {
163
167
  const { anchor } = view2.state.selection.ranges[0];
164
168
  activeRange = void 0;
@@ -208,10 +212,6 @@ var rangeExtension = ({ onInit, onStateChange }) => {
208
212
  activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
209
213
  });
210
214
  }
211
- constructor(_view) {
212
- view = _view;
213
- onInit?.(notifier);
214
- }
215
215
  });
216
216
  };
217
217
  var visitTree = (node, callback) => {
@@ -231,4 +231,4 @@ export {
231
231
  sheetExtension,
232
232
  rangeExtension
233
233
  };
234
- //# sourceMappingURL=chunk-SSN4HYJL.mjs.map
234
+ //# sourceMappingURL=chunk-7VEWYJJN.mjs.map