@dxos/plugin-sheet 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (178) hide show
  1. package/dist/lib/browser/{SheetContainer-CWSO5WTN.mjs → SheetContainer-66BNB3XG.mjs} +26 -27
  2. package/dist/lib/browser/SheetContainer-66BNB3XG.mjs.map +7 -0
  3. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs +23 -0
  4. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-KJWZUQVA.mjs → chunk-73AV3NH6.mjs} +4 -4
  6. package/dist/lib/browser/chunk-73AV3NH6.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-CL3MDNKQ.mjs → chunk-7VEWYJJN.mjs} +5 -5
  8. package/dist/lib/browser/chunk-7VEWYJJN.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-XSXUU6FO.mjs → chunk-DVJ3QW3F.mjs} +222 -221
  10. package/dist/lib/browser/chunk-DVJ3QW3F.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-FWFAAGXL.mjs +28 -0
  12. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-Q3VBLCSM.mjs → chunk-OU5KTWY3.mjs} +35 -34
  14. package/dist/lib/browser/chunk-OU5KTWY3.mjs.map +7 -0
  15. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs +21 -0
  16. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +20 -21
  18. package/dist/lib/browser/index.mjs.map +3 -3
  19. package/dist/lib/browser/{intent-resolver-ROEY4LHM.mjs → intent-resolver-66OAYVQF.mjs} +9 -9
  20. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs.map +7 -0
  21. package/dist/lib/browser/{markdown-VMNYPXTQ.mjs → markdown-B6VKYY2S.mjs} +6 -6
  22. package/dist/lib/browser/{markdown-VMNYPXTQ.mjs.map → markdown-B6VKYY2S.mjs.map} +1 -1
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/{react-surface-2ES3D7MJ.mjs → react-surface-5GYLVSMR.mjs} +16 -15
  25. package/dist/lib/browser/react-surface-5GYLVSMR.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +4 -12
  27. package/dist/lib/node-esm/{SheetContainer-3RSDBWDG.mjs → SheetContainer-NWEQETAY.mjs} +26 -27
  28. package/dist/lib/node-esm/SheetContainer-NWEQETAY.mjs.map +7 -0
  29. package/dist/lib/node-esm/{anchor-sort-ACQDUIPU.mjs → anchor-sort-ZE7IS7SH.mjs} +10 -11
  30. package/dist/lib/node-esm/anchor-sort-ZE7IS7SH.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-6SK5LJ5S.mjs → chunk-44YTKTMP.mjs} +4 -4
  32. package/dist/lib/node-esm/chunk-44YTKTMP.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-ODP4L4OV.mjs → chunk-4H2EHVWE.mjs} +222 -221
  34. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-LUCRXSK6.mjs → chunk-4MT3JJU2.mjs} +35 -34
  36. package/dist/lib/node-esm/chunk-4MT3JJU2.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-ZIQZU4CH.mjs → chunk-4QV4AGWK.mjs} +5 -5
  38. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +29 -0
  40. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +7 -0
  41. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs +22 -0
  42. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +20 -21
  44. package/dist/lib/node-esm/index.mjs.map +3 -3
  45. package/dist/lib/node-esm/{intent-resolver-HESRI2ML.mjs → intent-resolver-VNKIMQQT.mjs} +9 -9
  46. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs.map +7 -0
  47. package/dist/lib/node-esm/{markdown-SCOTGSWB.mjs → markdown-VKY7HXU2.mjs} +6 -6
  48. package/dist/lib/node-esm/{markdown-SCOTGSWB.mjs.map → markdown-VKY7HXU2.mjs.map} +1 -1
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/{react-surface-66VS5MY2.mjs → react-surface-RK32YZWR.mjs} +16 -15
  51. package/dist/lib/node-esm/react-surface-RK32YZWR.mjs.map +7 -0
  52. package/dist/lib/node-esm/types/index.mjs +4 -12
  53. package/dist/types/src/SheetPlugin.d.ts +1 -1
  54. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -4
  56. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/index.d.ts +1 -4
  59. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  61. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts +0 -1
  62. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  64. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +3 -3
  65. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts +2 -4
  67. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  69. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -2
  70. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  71. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -2
  72. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  73. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +5 -5
  74. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/SheetContext/SheetContext.d.ts +2 -2
  76. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  77. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +3 -4
  78. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  79. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +1 -2
  80. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  81. package/dist/types/src/extensions/compute.d.ts +1 -1
  82. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  83. package/dist/types/src/extensions/compute.stories.d.ts +2 -3
  84. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  85. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  86. package/dist/types/src/meta.d.ts +0 -1
  87. package/dist/types/src/meta.d.ts.map +1 -1
  88. package/dist/types/src/model/sheet-model.d.ts +5 -5
  89. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  90. package/dist/types/src/model/testing.d.ts +2 -2
  91. package/dist/types/src/model/testing.d.ts.map +1 -1
  92. package/dist/types/src/model/useSheetModel.d.ts +2 -2
  93. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  94. package/dist/types/src/serializer.d.ts +2 -2
  95. package/dist/types/src/serializer.d.ts.map +1 -1
  96. package/dist/types/src/testing/data.d.ts +2 -2
  97. package/dist/types/src/testing/data.d.ts.map +1 -1
  98. package/dist/types/src/testing/testing.d.ts +27 -3
  99. package/dist/types/src/testing/testing.d.ts.map +1 -1
  100. package/dist/types/src/translations.d.ts +2 -2
  101. package/dist/types/src/translations.d.ts.map +1 -1
  102. package/dist/types/src/types/{schema.d.ts → Sheet.d.ts} +37 -4
  103. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  104. package/dist/types/src/types/index.d.ts +1 -1
  105. package/dist/types/src/types/index.d.ts.map +1 -1
  106. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  107. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  108. package/dist/types/src/types/types.d.ts +7 -16
  109. package/dist/types/src/types/types.d.ts.map +1 -1
  110. package/dist/types/src/types/util.d.ts +9 -10
  111. package/dist/types/src/types/util.d.ts.map +1 -1
  112. package/dist/types/tsconfig.tsbuildinfo +1 -1
  113. package/package.json +65 -64
  114. package/src/SheetPlugin.tsx +70 -61
  115. package/src/capabilities/anchor-sort.ts +7 -8
  116. package/src/capabilities/capabilities.ts +2 -2
  117. package/src/capabilities/compute-graph-registry.ts +8 -13
  118. package/src/capabilities/intent-resolver.ts +4 -4
  119. package/src/capabilities/react-surface.tsx +9 -8
  120. package/src/components/ComputeGraph/compute-graph.stories.tsx +10 -12
  121. package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
  122. package/src/components/GridSheet/GridSheet.stories.tsx +12 -9
  123. package/src/components/GridSheet/GridSheet.tsx +22 -10
  124. package/src/components/GridSheet/SheetCellEditor.stories.tsx +14 -17
  125. package/src/components/GridSheet/util.ts +9 -3
  126. package/src/components/RangeList/RangeList.tsx +8 -8
  127. package/src/components/SheetContainer/SheetContainer.stories.tsx +46 -45
  128. package/src/components/SheetContainer/SheetContainer.tsx +10 -5
  129. package/src/components/SheetContext/SheetContext.tsx +4 -4
  130. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +9 -6
  131. package/src/components/SheetToolbar/SheetToolbar.tsx +17 -19
  132. package/src/components/SheetToolbar/align.ts +3 -3
  133. package/src/components/SheetToolbar/style.ts +2 -2
  134. package/src/extensions/compute.stories.tsx +18 -15
  135. package/src/extensions/compute.ts +1 -2
  136. package/src/integrations/thread-ranges.ts +15 -20
  137. package/src/meta.ts +7 -5
  138. package/src/model/sheet-model.test.ts +4 -4
  139. package/src/model/sheet-model.ts +4 -4
  140. package/src/model/testing.ts +4 -4
  141. package/src/model/useSheetModel.ts +2 -2
  142. package/src/sanity.test.ts +3 -4
  143. package/src/serializer.ts +3 -3
  144. package/src/testing/data.ts +2 -2
  145. package/src/testing/testing.tsx +11 -5
  146. package/src/translations.ts +2 -2
  147. package/src/types/Sheet.ts +103 -0
  148. package/src/types/index.ts +1 -1
  149. package/src/types/sheet-range-types.ts +2 -2
  150. package/src/types/types.ts +6 -16
  151. package/src/types/util.ts +10 -38
  152. package/dist/lib/browser/SheetContainer-CWSO5WTN.mjs.map +0 -7
  153. package/dist/lib/browser/anchor-sort-7WD2VGXW.mjs +0 -24
  154. package/dist/lib/browser/anchor-sort-7WD2VGXW.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-6AKBCBL4.mjs +0 -18
  156. package/dist/lib/browser/chunk-6AKBCBL4.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-CL3MDNKQ.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-KJWZUQVA.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-Q3VBLCSM.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-XSXUU6FO.mjs.map +0 -7
  161. package/dist/lib/browser/compute-graph-registry-6YJHXORG.mjs +0 -30
  162. package/dist/lib/browser/compute-graph-registry-6YJHXORG.mjs.map +0 -7
  163. package/dist/lib/browser/intent-resolver-ROEY4LHM.mjs.map +0 -7
  164. package/dist/lib/browser/react-surface-2ES3D7MJ.mjs.map +0 -7
  165. package/dist/lib/node-esm/SheetContainer-3RSDBWDG.mjs.map +0 -7
  166. package/dist/lib/node-esm/anchor-sort-ACQDUIPU.mjs.map +0 -7
  167. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs +0 -20
  168. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs.map +0 -7
  169. package/dist/lib/node-esm/chunk-6SK5LJ5S.mjs.map +0 -7
  170. package/dist/lib/node-esm/chunk-LUCRXSK6.mjs.map +0 -7
  171. package/dist/lib/node-esm/chunk-ODP4L4OV.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-ZIQZU4CH.mjs.map +0 -7
  173. package/dist/lib/node-esm/compute-graph-registry-ET5KJNLV.mjs +0 -31
  174. package/dist/lib/node-esm/compute-graph-registry-ET5KJNLV.mjs.map +0 -7
  175. package/dist/lib/node-esm/intent-resolver-HESRI2ML.mjs.map +0 -7
  176. package/dist/lib/node-esm/react-surface-66VS5MY2.mjs.map +0 -7
  177. package/dist/types/src/types/schema.d.ts.map +0 -1
  178. package/src/types/schema.ts +0 -61
@@ -3,22 +3,22 @@ import {
3
3
  SheetProvider,
4
4
  useComputeGraph,
5
5
  useSheetContext
6
- } from "./chunk-Q3VBLCSM.mjs";
6
+ } from "./chunk-OU5KTWY3.mjs";
7
7
  import {
8
8
  alignKey,
9
9
  mapFormulaIndicesToRefs,
10
10
  rangeFromIndex,
11
11
  rangeToIndex
12
- } from "./chunk-XSXUU6FO.mjs";
13
- import "./chunk-CL3MDNKQ.mjs";
12
+ } from "./chunk-DVJ3QW3F.mjs";
13
+ import "./chunk-7VEWYJJN.mjs";
14
14
  import {
15
- SHEET_PLUGIN
16
- } from "./chunk-6AKBCBL4.mjs";
15
+ meta
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,11 +42,11 @@ 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", {
49
- className: "flex w-16 items-center font-mono"
49
+ className: "flex is-16 items-center font-mono"
50
50
  }, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
51
51
  className: "flex gap-2 items-center"
52
52
  }, /* @__PURE__ */ React.createElement(Icon, {
@@ -65,10 +65,10 @@ 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";
71
- import { MenuProvider, ToolbarMenu, createGapSeparator, rxFromSignal, useMenuActions } from "@dxos/react-ui-menu";
70
+ import { useAppGraph } from "@dxos/app-framework/react";
71
+ import { MenuProvider, ToolbarMenu, atomFromSignal, createGapSeparator, 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";
@@ -98,7 +98,7 @@ var createAlignGroupAction = (value) => createMenuItemGroup("align", {
98
98
  label: [
99
99
  "align label",
100
100
  {
101
- ns: SHEET_PLUGIN
101
+ ns: meta.id
102
102
  }
103
103
  ],
104
104
  variant: "toggleGroup",
@@ -133,7 +133,7 @@ var createAlignActions = (model, state, cursorFallbackRange) => Object.entries(a
133
133
  label: [
134
134
  `range value ${alignValue} label`,
135
135
  {
136
- ns: SHEET_PLUGIN
136
+ ns: meta.id
137
137
  }
138
138
  ],
139
139
  icon,
@@ -218,7 +218,7 @@ var createStyleActions = (model, state, cursorFallbackRange) => Object.entries(s
218
218
  label: [
219
219
  `range value ${styleValue} label`,
220
220
  {
221
- ns: SHEET_PLUGIN
221
+ ns: meta.id
222
222
  }
223
223
  ],
224
224
  checked: !!state[styleValue]
@@ -254,9 +254,9 @@ 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) => {
258
- const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));
259
- const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));
257
+ return Atom.make((get) => {
258
+ const align = get(atomFromSignal(() => createAlign(model, state, cursorFallbackRange)));
259
+ const style = get(atomFromSignal(() => createStyle(model, state, cursorFallbackRange)));
260
260
  const gap = createGapSeparator();
261
261
  const graph = {
262
262
  nodes: [
@@ -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
  }
@@ -331,11 +329,12 @@ var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
331
329
  }, /* @__PURE__ */ React3.createElement(StackItem.Content, {
332
330
  toolbar: true,
333
331
  statusbar: true,
334
- ...role === "section" && {
335
- classNames: "aspect-video"
336
- }
332
+ classNames: [
333
+ role === "section" && "aspect-video",
334
+ role === "story" && "bs-full"
335
+ ]
337
336
  }, /* @__PURE__ */ React3.createElement(SheetToolbar, {
338
- id: fullyQualifiedId(sheet)
337
+ id: Obj.getDXN(sheet).toString()
339
338
  }), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
340
339
  } finally {
341
340
  _effect.f();
@@ -347,4 +346,4 @@ var SheetContainer_default = SheetContainer;
347
346
  export {
348
347
  SheetContainer_default as default
349
348
  };
350
- //# sourceMappingURL=SheetContainer-CWSO5WTN.mjs.map
349
+ //# sourceMappingURL=SheetContainer-66BNB3XG.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 is-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 atomFromSignal,\n createGapSeparator,\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(atomFromSignal(() => createAlign(model, state, cursorFallbackRange)));\n const style = get(atomFromSignal(() => 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", "atomFromSignal", "createGapSeparator", "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", "atomFromSignal", "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
+ }
@@ -0,0 +1,23 @@
1
+ import {
2
+ Sheet_exports,
3
+ compareIndexPositions
4
+ } from "./chunk-DVJ3QW3F.mjs";
5
+ import "./chunk-FWFAAGXL.mjs";
6
+
7
+ // src/capabilities/anchor-sort.ts
8
+ import { Capabilities, contributes } from "@dxos/app-framework";
9
+ import { Relation } from "@dxos/echo";
10
+ var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
11
+ key: Sheet_exports.Sheet.typename,
12
+ sort: (anchorA, anchorB) => {
13
+ const sheet = Relation.getTarget(anchorA);
14
+ if (sheet !== Relation.getTarget(anchorB)) {
15
+ return 0;
16
+ }
17
+ return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
18
+ }
19
+ }));
20
+ export {
21
+ anchor_sort_default as default
22
+ };
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,15 +1,15 @@
1
1
  import {
2
- SHEET_PLUGIN
3
- } from "./chunk-6AKBCBL4.mjs";
2
+ meta
3
+ } from "./chunk-FWFAAGXL.mjs";
4
4
 
5
5
  // src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
7
7
  (function(SheetCapabilities2) {
8
- SheetCapabilities2.ComputeGraphRegistry = defineCapability(`${SHEET_PLUGIN}/capability/compute-graph-registry`);
8
+ SheetCapabilities2.ComputeGraphRegistry = defineCapability(`${meta.id}/capability/compute-graph-registry`);
9
9
  })(SheetCapabilities || (SheetCapabilities = {}));
10
10
  var SheetCapabilities;
11
11
 
12
12
  export {
13
13
  SheetCapabilities
14
14
  };
15
- //# sourceMappingURL=chunk-KJWZUQVA.mjs.map
15
+ //# sourceMappingURL=chunk-73AV3NH6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type ComputeGraphRegistry } from '@dxos/compute';\n\nimport { meta } from '../meta';\n\nexport namespace SheetCapabilities {\n export const ComputeGraphRegistry = defineCapability<ComputeGraphRegistry>(\n `${meta.id}/capability/compute-graph-registry`,\n );\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,wBAAwB;UAKhBC,oBAAAA;qBACFC,uBAAuBC,iBAClC,GAAGC,KAAKC,EAAE,oCAAoC;AAElD,GAJiBJ,sBAAAA,oBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["defineCapability", "SheetCapabilities", "ComputeGraphRegistry", "defineCapability", "meta", "id"]
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-CL3MDNKQ.mjs.map
234
+ //# sourceMappingURL=chunk-7VEWYJJN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/compute.ts", "../../../src/extensions/editor/sheet-extension.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type CleanupFn, debounce } from '@dxos/async';\nimport {\n type CellAddress,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n createSheetName,\n} from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/react-ui-editor';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (_options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: CleanupFn;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView): HTMLDivElement {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { type FunctionDefinition } from '@dxos/compute';\nimport { RANGE_NOTATION } from '@dxos/compute';\nimport { singleValueFacet } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accentText',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pinkText',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-tealText',\n },\n {\n tag: tags.bool,\n class: 'text-tealText',\n },\n {\n tag: tags.string,\n class: 'text-tealText',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-unAccent',\n },\n]);\n\nconst languageFacet = singleValueFacet<Language>();\n\nexport type SheetExtensionOptions = {\n debug?: boolean;\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ debug, functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({ idiom: 'en-US', decimalSeparator: '.' });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accentText';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-greenText';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n closeOnBlur: !debug,\n icons: false,\n tooltipClass: () =>\n mx(\n '!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accentSurface',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n },\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const language = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function':\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n\n case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n } else {\n activeRange = { from: str.length + 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\n });\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["syntaxTree", "RangeSetBuilder", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "debounce", "createSheetName", "invariant", "documentId", "singleValueFacet", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "ViewPlugin", "keymap", "tags", "spreadsheet", "RANGE_NOTATION", "singleValueFacet", "mx", "highlightStyles", "HighlightStyle", "define", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "singleValueFacet", "sheetExtension", "debug", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "value", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling"]
7
+ }