@dxos/plugin-sheet 0.8.3 → 0.8.4-main.1da679c

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 (191) hide show
  1. package/dist/lib/browser/{SheetContainer-BDZXBB5U.mjs → SheetContainer-OUN6AARA.mjs} +30 -31
  2. package/dist/lib/browser/SheetContainer-OUN6AARA.mjs.map +7 -0
  3. package/dist/lib/browser/{anchor-sort-NYYZLRAA.mjs → anchor-sort-CAYLDDRF.mjs} +6 -6
  4. package/dist/lib/browser/{anchor-sort-NYYZLRAA.mjs.map → anchor-sort-CAYLDDRF.mjs.map} +2 -2
  5. package/dist/lib/browser/{chunk-D3G4UGEK.mjs → chunk-6AKBCBL4.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-IR42IS3F.mjs → chunk-KJWZUQVA.mjs} +3 -3
  7. package/dist/lib/browser/{chunk-FJRLDX7Z.mjs → chunk-SSN4HYJL.mjs} +7 -7
  8. package/dist/lib/browser/chunk-SSN4HYJL.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-5TA43LO4.mjs → chunk-X4EWLDT3.mjs} +207 -203
  10. package/dist/lib/browser/chunk-X4EWLDT3.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-I7FZ4TWJ.mjs → chunk-XSXUU6FO.mjs} +29 -15
  12. package/dist/lib/browser/chunk-XSXUU6FO.mjs.map +7 -0
  13. package/dist/lib/browser/{compute-graph-registry-IXGGJJBU.mjs → compute-graph-registry-WHF3BJTJ.mjs} +6 -6
  14. package/dist/lib/{node-esm/compute-graph-registry-7PDWXMHF.mjs.map → browser/compute-graph-registry-WHF3BJTJ.mjs.map} +2 -2
  15. package/dist/lib/browser/index.mjs +21 -20
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-IBBI6B74.mjs → intent-resolver-LKZXAJRJ.mjs} +7 -7
  18. package/dist/lib/browser/{intent-resolver-IBBI6B74.mjs.map → intent-resolver-LKZXAJRJ.mjs.map} +3 -3
  19. package/dist/lib/browser/{markdown-T4TUP4BF.mjs → markdown-XKFA4Z2M.mjs} +7 -7
  20. package/dist/lib/browser/markdown-XKFA4Z2M.mjs.map +7 -0
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-UI46P43F.mjs → react-surface-N6NYHHT3.mjs} +9 -9
  23. package/dist/lib/browser/{react-surface-UI46P43F.mjs.map → react-surface-N6NYHHT3.mjs.map} +2 -2
  24. package/dist/lib/browser/types/index.mjs +2 -2
  25. package/dist/lib/node-esm/{SheetContainer-V632Q4HA.mjs → SheetContainer-NFLLTGNV.mjs} +30 -31
  26. package/dist/lib/node-esm/SheetContainer-NFLLTGNV.mjs.map +7 -0
  27. package/dist/lib/node-esm/{anchor-sort-JTNZOE67.mjs → anchor-sort-4R2ID6GE.mjs} +6 -6
  28. package/dist/lib/node-esm/{anchor-sort-JTNZOE67.mjs.map → anchor-sort-4R2ID6GE.mjs.map} +2 -2
  29. package/dist/lib/node-esm/{chunk-Y6ND5HWX.mjs → chunk-3K5VNYOF.mjs} +2 -2
  30. package/dist/lib/node-esm/{chunk-IQ76YE6M.mjs → chunk-6SK5LJ5S.mjs} +3 -3
  31. package/dist/lib/node-esm/{chunk-NMCVJWDT.mjs → chunk-IK4O7FUJ.mjs} +7 -7
  32. package/dist/lib/node-esm/chunk-IK4O7FUJ.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-C4IKYVTV.mjs → chunk-ODP4L4OV.mjs} +29 -15
  34. package/dist/lib/node-esm/chunk-ODP4L4OV.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-SOC52B67.mjs → chunk-PYF4ZJXN.mjs} +207 -203
  36. package/dist/lib/node-esm/chunk-PYF4ZJXN.mjs.map +7 -0
  37. package/dist/lib/node-esm/{compute-graph-registry-7PDWXMHF.mjs → compute-graph-registry-3IUZXRXJ.mjs} +6 -6
  38. package/dist/lib/{browser/compute-graph-registry-IXGGJJBU.mjs.map → node-esm/compute-graph-registry-3IUZXRXJ.mjs.map} +2 -2
  39. package/dist/lib/node-esm/index.mjs +21 -20
  40. package/dist/lib/node-esm/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/{intent-resolver-M2HNR7PJ.mjs → intent-resolver-JHH6ZVJ4.mjs} +7 -7
  42. package/dist/lib/node-esm/{intent-resolver-M2HNR7PJ.mjs.map → intent-resolver-JHH6ZVJ4.mjs.map} +3 -3
  43. package/dist/lib/node-esm/{markdown-WWUJ3E5F.mjs → markdown-NOKROLCG.mjs} +7 -7
  44. package/dist/lib/node-esm/markdown-NOKROLCG.mjs.map +7 -0
  45. package/dist/lib/node-esm/meta.json +1 -1
  46. package/dist/lib/node-esm/{react-surface-OLXO2MVB.mjs → react-surface-TYBS4DOF.mjs} +9 -9
  47. package/dist/lib/node-esm/{react-surface-OLXO2MVB.mjs.map → react-surface-TYBS4DOF.mjs.map} +2 -2
  48. package/dist/lib/node-esm/types/index.mjs +2 -2
  49. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  50. package/dist/types/src/capabilities/compute-graph-registry.d.ts +1 -1
  51. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/index.d.ts +6 -8
  53. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  55. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/markdown.d.ts +1 -3
  57. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  59. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  60. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  61. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts +9 -3
  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 +49 -2
  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 +11 -19
  67. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/GridSheet/util.d.ts +1 -1
  69. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  70. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  71. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +49 -2
  72. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  73. package/dist/types/src/components/SheetContext/SheetContext.d.ts +1 -1
  74. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  75. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  76. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +86 -3
  77. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  78. package/dist/types/src/components/SheetToolbar/align.d.ts +2 -2
  79. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  80. package/dist/types/src/components/SheetToolbar/style.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 +10 -12
  84. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  85. package/dist/types/src/extensions/editor/index.d.ts +1 -1
  86. package/dist/types/src/extensions/editor/index.d.ts.map +1 -1
  87. package/dist/types/src/extensions/editor/{extension.d.ts → sheet-extension.d.ts} +1 -1
  88. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -0
  89. package/dist/types/src/extensions/editor/sheet-extension.test.d.ts +2 -0
  90. package/dist/types/src/extensions/editor/sheet-extension.test.d.ts.map +1 -0
  91. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  92. package/dist/types/src/model/sheet-model.d.ts +1 -1
  93. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  94. package/dist/types/src/playwright/playwright.config.d.ts +3 -0
  95. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
  96. package/dist/types/src/{testing/playwright → playwright}/sheet-manager.d.ts +1 -1
  97. package/dist/types/src/playwright/sheet-manager.d.ts.map +1 -0
  98. package/dist/types/src/playwright/sheet.spec.d.ts.map +1 -0
  99. package/dist/types/src/testing/testing.d.ts.map +1 -1
  100. package/dist/types/src/translations.d.ts +7 -62
  101. package/dist/types/src/translations.d.ts.map +1 -1
  102. package/dist/types/src/types/schema.d.ts.map +1 -1
  103. package/dist/types/src/types/types.d.ts +1 -1
  104. package/dist/types/src/types/types.d.ts.map +1 -1
  105. package/dist/types/src/types/util.d.ts.map +1 -1
  106. package/dist/types/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +59 -57
  108. package/src/SheetPlugin.tsx +3 -3
  109. package/src/capabilities/anchor-sort.ts +1 -1
  110. package/src/capabilities/compute-graph-registry.ts +1 -1
  111. package/src/capabilities/intent-resolver.ts +2 -2
  112. package/src/capabilities/markdown.ts +3 -2
  113. package/src/capabilities/react-surface.tsx +2 -1
  114. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +1 -1
  115. package/src/components/ComputeGraph/compute-graph.stories.tsx +13 -10
  116. package/src/components/GridSheet/GridSheet.stories.tsx +9 -6
  117. package/src/components/GridSheet/GridSheet.tsx +19 -18
  118. package/src/components/GridSheet/SheetCellEditor.stories.tsx +37 -38
  119. package/src/components/GridSheet/util.ts +6 -6
  120. package/src/components/SheetContainer/SheetContainer.stories.tsx +10 -7
  121. package/src/components/SheetContainer/SheetContainer.tsx +1 -1
  122. package/src/components/SheetContext/SheetContext.tsx +1 -1
  123. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +10 -7
  124. package/src/components/SheetToolbar/SheetToolbar.tsx +16 -15
  125. package/src/components/SheetToolbar/align.ts +4 -3
  126. package/src/components/SheetToolbar/style.ts +2 -2
  127. package/src/extensions/compute.stories.tsx +20 -19
  128. package/src/extensions/compute.ts +2 -3
  129. package/src/extensions/editor/index.ts +1 -1
  130. package/src/extensions/editor/{extension.test.ts → sheet-extension.test.ts} +1 -1
  131. package/src/integrations/thread-ranges.ts +7 -6
  132. package/src/model/sheet-model.test.ts +2 -1
  133. package/src/model/sheet-model.ts +6 -6
  134. package/src/playwright/playwright.config.ts +17 -0
  135. package/src/{testing/playwright → playwright}/sheet-manager.ts +1 -1
  136. package/src/{testing/playwright → playwright}/sheet.spec.ts +2 -2
  137. package/src/sanity.test.ts +1 -1
  138. package/src/testing/testing.tsx +1 -1
  139. package/src/translations.ts +8 -6
  140. package/src/types/schema.ts +1 -0
  141. package/src/types/types.ts +2 -1
  142. package/src/types/util.ts +3 -3
  143. package/dist/lib/browser/SheetContainer-BDZXBB5U.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-5TA43LO4.mjs.map +0 -7
  145. package/dist/lib/browser/chunk-FJRLDX7Z.mjs.map +0 -7
  146. package/dist/lib/browser/chunk-I7FZ4TWJ.mjs.map +0 -7
  147. package/dist/lib/browser/markdown-T4TUP4BF.mjs.map +0 -7
  148. package/dist/lib/node/SheetContainer-VWPM3HYJ.cjs +0 -351
  149. package/dist/lib/node/SheetContainer-VWPM3HYJ.cjs.map +0 -7
  150. package/dist/lib/node/anchor-sort-A7NABMJM.cjs +0 -39
  151. package/dist/lib/node/anchor-sort-A7NABMJM.cjs.map +0 -7
  152. package/dist/lib/node/chunk-FIM6EZ6M.cjs +0 -256
  153. package/dist/lib/node/chunk-FIM6EZ6M.cjs.map +0 -7
  154. package/dist/lib/node/chunk-JSIDCZHB.cjs +0 -41
  155. package/dist/lib/node/chunk-JSIDCZHB.cjs.map +0 -7
  156. package/dist/lib/node/chunk-LJWWS53Z.cjs +0 -34
  157. package/dist/lib/node/chunk-LJWWS53Z.cjs.map +0 -7
  158. package/dist/lib/node/chunk-N7FSEUIN.cjs +0 -927
  159. package/dist/lib/node/chunk-N7FSEUIN.cjs.map +0 -7
  160. package/dist/lib/node/chunk-ST3WA73J.cjs +0 -855
  161. package/dist/lib/node/chunk-ST3WA73J.cjs.map +0 -7
  162. package/dist/lib/node/compute-graph-registry-ARLDHPFW.cjs +0 -56
  163. package/dist/lib/node/compute-graph-registry-ARLDHPFW.cjs.map +0 -7
  164. package/dist/lib/node/index.cjs +0 -173
  165. package/dist/lib/node/index.cjs.map +0 -7
  166. package/dist/lib/node/intent-resolver-2657YDOU.cjs +0 -69
  167. package/dist/lib/node/intent-resolver-2657YDOU.cjs.map +0 -7
  168. package/dist/lib/node/markdown-DBPOAYI7.cjs +0 -40
  169. package/dist/lib/node/markdown-DBPOAYI7.cjs.map +0 -7
  170. package/dist/lib/node/meta.json +0 -1
  171. package/dist/lib/node/react-surface-XQEIRKWU.cjs +0 -71
  172. package/dist/lib/node/react-surface-XQEIRKWU.cjs.map +0 -7
  173. package/dist/lib/node/types/index.cjs +0 -84
  174. package/dist/lib/node/types/index.cjs.map +0 -7
  175. package/dist/lib/node-esm/SheetContainer-V632Q4HA.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-C4IKYVTV.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-NMCVJWDT.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-SOC52B67.mjs.map +0 -7
  179. package/dist/lib/node-esm/markdown-WWUJ3E5F.mjs.map +0 -7
  180. package/dist/types/src/extensions/editor/extension.d.ts.map +0 -1
  181. package/dist/types/src/extensions/editor/extension.test.d.ts +0 -2
  182. package/dist/types/src/extensions/editor/extension.test.d.ts.map +0 -1
  183. package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +0 -1
  184. package/dist/types/src/testing/playwright/sheet.spec.d.ts.map +0 -1
  185. package/src/testing/playwright/playwright.config.cts +0 -18
  186. /package/dist/lib/browser/{chunk-D3G4UGEK.mjs.map → chunk-6AKBCBL4.mjs.map} +0 -0
  187. /package/dist/lib/browser/{chunk-IR42IS3F.mjs.map → chunk-KJWZUQVA.mjs.map} +0 -0
  188. /package/dist/lib/node-esm/{chunk-Y6ND5HWX.mjs.map → chunk-3K5VNYOF.mjs.map} +0 -0
  189. /package/dist/lib/node-esm/{chunk-IQ76YE6M.mjs.map → chunk-6SK5LJ5S.mjs.map} +0 -0
  190. /package/dist/types/src/{testing/playwright → playwright}/sheet.spec.d.ts +0 -0
  191. /package/src/extensions/editor/{extension.ts → sheet-extension.ts} +0 -0
@@ -3,25 +3,25 @@ import {
3
3
  SheetProvider,
4
4
  useComputeGraph,
5
5
  useSheetContext
6
- } from "./chunk-5TA43LO4.mjs";
6
+ } from "./chunk-X4EWLDT3.mjs";
7
7
  import {
8
8
  alignKey,
9
9
  mapFormulaIndicesToRefs,
10
10
  rangeFromIndex,
11
11
  rangeToIndex
12
- } from "./chunk-I7FZ4TWJ.mjs";
13
- import "./chunk-FJRLDX7Z.mjs";
12
+ } from "./chunk-XSXUU6FO.mjs";
13
+ import "./chunk-SSN4HYJL.mjs";
14
14
  import {
15
15
  SHEET_PLUGIN
16
- } from "./chunk-D3G4UGEK.mjs";
16
+ } from "./chunk-6AKBCBL4.mjs";
17
17
 
18
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
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
21
  import { fullyQualifiedId } from "@dxos/react-client/echo";
22
22
  import { StackItem } from "@dxos/react-ui-stack";
23
23
 
24
- // packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
24
+ // src/components/FunctionEditor/FunctionEditor.tsx
25
25
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
26
26
  import React from "react";
27
27
  import { addressToA1Notation, isFormula, rangeToA1Notation } from "@dxos/compute";
@@ -63,14 +63,14 @@ var FunctionEditor = () => {
63
63
  }
64
64
  };
65
65
 
66
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
66
+ // src/components/SheetToolbar/SheetToolbar.tsx
67
67
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
68
68
  import { Rx } from "@effect-rx/rx-react";
69
69
  import React2, { useMemo as useMemo2 } from "react";
70
70
  import { useAppGraph } from "@dxos/app-framework";
71
- import { createGapSeparator, MenuProvider, rxFromSignal, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
71
+ import { MenuProvider, ToolbarMenu, createGapSeparator, rxFromSignal, useMenuActions } from "@dxos/react-ui-menu";
72
72
 
73
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/align.ts
73
+ // src/components/SheetToolbar/align.ts
74
74
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
75
75
  import { useEffect } from "react";
76
76
  import { inRange } from "@dxos/compute";
@@ -161,7 +161,7 @@ var createAlign = (model, state, cursorFallbackRange) => {
161
161
  };
162
162
  };
163
163
 
164
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/style.ts
164
+ // src/components/SheetToolbar/style.ts
165
165
  import { useEffect as useEffect2 } from "react";
166
166
  import { inRange as inRange2 } from "@dxos/compute";
167
167
  import { createMenuAction as createMenuAction2, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
@@ -245,38 +245,37 @@ var createStyle = (model, state, cursorFallbackRange) => {
245
245
  };
246
246
  };
247
247
 
248
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarState.ts
248
+ // src/components/SheetToolbar/useToolbarState.ts
249
249
  import { useMemo } from "react";
250
250
  import { live } from "@dxos/live-object";
251
251
  var useToolbarState = (initialState = {}) => {
252
252
  return useMemo(() => live(initialState), []);
253
253
  };
254
254
 
255
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
255
+ // src/components/SheetToolbar/SheetToolbar.tsx
256
256
  var createToolbarActions = (model, state, cursorFallbackRange, customActions) => {
257
257
  return Rx.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();
261
- const nodes = [
262
- ...align.nodes,
263
- ...style.nodes,
264
- ...gap.nodes
265
- ];
266
- const edges = [
267
- ...align.edges,
268
- ...style.edges,
269
- ...gap.edges
270
- ];
261
+ const graph = {
262
+ nodes: [
263
+ ...align.nodes,
264
+ ...style.nodes,
265
+ ...gap.nodes
266
+ ],
267
+ edges: [
268
+ ...align.edges,
269
+ ...style.edges,
270
+ ...gap.edges
271
+ ]
272
+ };
271
273
  if (customActions) {
272
274
  const custom = get(customActions);
273
- nodes.push(...custom.nodes);
274
- edges.push(...custom.edges);
275
+ graph.nodes.push(...custom.nodes);
276
+ graph.edges.push(...custom.edges);
275
277
  }
276
- return {
277
- nodes,
278
- edges
279
- };
278
+ return graph;
280
279
  });
281
280
  };
282
281
  var SheetToolbar = ({ id, classNames }) => {
@@ -320,7 +319,7 @@ var SheetToolbar = ({ id, classNames }) => {
320
319
  }
321
320
  };
322
321
 
323
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
322
+ // src/components/SheetContainer/SheetContainer.tsx
324
323
  var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
325
324
  var _effect = _useSignals4();
326
325
  try {
@@ -343,9 +342,9 @@ var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
343
342
  }
344
343
  };
345
344
 
346
- // packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
345
+ // src/components/SheetContainer/index.ts
347
346
  var SheetContainer_default = SheetContainer;
348
347
  export {
349
348
  SheetContainer_default as default
350
349
  };
351
- //# sourceMappingURL=SheetContainer-BDZXBB5U.mjs.map
350
+ //# sourceMappingURL=SheetContainer-OUN6AARA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../src/components/SheetToolbar/align.ts", "../../../src/components/SheetToolbar/style.ts", "../../../src/components/SheetToolbar/useToolbarState.ts", "../../../src/components/SheetContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport type SheetContainerProps = {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n};\n\nexport const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <SheetToolbar id={fullyQualifiedId(sheet)} />\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';\nimport { Icon } from '@dxos/react-ui';\n\nimport { mapFormulaIndicesToRefs } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type ActionGraphProps,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n rxFromSignal,\n useMenuActions,\n} from '@dxos/react-ui-menu';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetContext';\n\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ id: string }>>;\n\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n cursorFallbackRange?: CompleteCellRange,\n customActions?: Rx.Rx<ActionGraphProps>,\n): Rx.Rx<ActionGraphProps> => {\n return Rx.make((get) => {\n const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));\n const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));\n const gap = createGapSeparator();\n\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 const SheetToolbar = ({ id, classNames }: SheetToolbarProps) => {\n const { model, cursorFallbackRange } = useSheetContext();\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions(model, state, cursorFallbackRange, customActions),\n [model, state, cursorFallbackRange, customActions],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={id}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nimport { type ToolbarState } from './useToolbarState';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (state: Partial<AlignState>) => {\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n state[alignKey] = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n }, [cursor, model.sheet]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align label', { ns: SHEET_PLUGIN }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\nconst createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n model.sheet.ranges?.splice(index, 1);\n state[alignKey] = undefined;\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {\n const alignGroup = createAlignGroupAction(state[alignKey]);\n const alignActions = createAlignActions(model, state, cursorFallbackRange);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type StyleKey, type StyleValue, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (state: StyleState) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n state.highlight = false;\n state.softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n state[value as StyleValue] = true;\n });\n }\n }, [cursorFallbackRange, model.sheet]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\nconst createStyleActions = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[nextRangeEntity.value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[nextRangeEntity.value] = true;\n }\n },\n {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range value ${styleValue} label`, { ns: SHEET_PLUGIN }],\n checked: !!state[styleValue as StyleValue],\n },\n );\n });\n\nexport const createStyle = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(model, state, cursorFallbackRange);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { live } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => live<ToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "fullyQualifiedId", "StackItem", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Rx", "React", "useMemo", "useAppGraph", "MenuProvider", "ToolbarMenu", "createGapSeparator", "rxFromSignal", "useMenuActions", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "state", "cursor", "model", "useSheetContext", "useEffect", "alignKey", "sheet", "ranges", "findLast", "range", "key", "inRange", "rangeFromIndex", "value", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "SHEET_PLUGIN", "variant", "selectCardinality", "createAlignActions", "cursorFallbackRange", "Object", "entries", "map", "alignValue", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "id", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "state", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "createStyleGroup", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "rangeKey", "some", "rangeValue", "splice", "push", "label", "ns", "SHEET_PLUGIN", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "id", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "cursorFallbackRange", "customActions", "Rx", "make", "get", "align", "rxFromSignal", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "classNames", "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", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
7
+ }
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  SheetType,
3
3
  compareIndexPositions
4
- } from "./chunk-I7FZ4TWJ.mjs";
5
- import "./chunk-D3G4UGEK.mjs";
4
+ } from "./chunk-XSXUU6FO.mjs";
5
+ import "./chunk-6AKBCBL4.mjs";
6
6
 
7
- // packages/plugins/plugin-sheet/src/capabilities/anchor-sort.ts
7
+ // src/capabilities/anchor-sort.ts
8
8
  import { Capabilities, contributes } from "@dxos/app-framework";
9
9
  import { Type } from "@dxos/echo";
10
10
  import { getTarget } from "@dxos/react-client/echo";
11
- var anchor_sort_default = () => contributes(Capabilities.AnchorSort, {
11
+ var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
12
12
  key: Type.getTypename(SheetType),
13
13
  sort: (anchorA, anchorB) => {
14
14
  const sheet = getTarget(anchorA);
@@ -17,8 +17,8 @@ var anchor_sort_default = () => contributes(Capabilities.AnchorSort, {
17
17
  }
18
18
  return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
19
19
  }
20
- });
20
+ }));
21
21
  export {
22
22
  anchor_sort_default as default
23
23
  };
24
- //# sourceMappingURL=anchor-sort-NYYZLRAA.mjs.map
24
+ //# sourceMappingURL=anchor-sort-CAYLDDRF.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/anchor-sort.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { getTarget } from '@dxos/react-client/echo';\n\nimport { compareIndexPositions, SheetType } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Type.getTypename(SheetType)!,\n sort: (anchorA, anchorB) => {\n const sheet = getTarget(anchorA) as SheetType;\n if (sheet !== getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
5
- "mappings": ";;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAI1B,IAAA,sBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,KAAKC,YAAYC,SAAAA;EACtBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,QAAQC,UAAUH,OAAAA;AACxB,QAAIE,UAAUC,UAAUF,OAAAA,GAAU;AAChC,aAAO;IACT;AAEA,WAAO,CAACD,QAAQI,UAAU,CAACH,QAAQG,SAAS,IAAIC,sBAAsBH,OAAOF,QAAQI,QAAQH,QAAQG,MAAM;EAC7G;AACF,CAAA;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { getTarget } from '@dxos/react-client/echo';\n\nimport { SheetType, compareIndexPositions } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Type.getTypename(SheetType)!,\n sort: (anchorA, anchorB) => {\n const sheet = getTarget(anchorA) as SheetType;\n if (sheet !== getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
5
+ "mappings": ";;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AACrB,SAASC,iBAAiB;AAI1B,IAAA,uBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,KAAKC,YAAYC,SAAAA;EACtBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,QAAQC,UAAUH,OAAAA;AACxB,QAAIE,UAAUC,UAAUF,OAAAA,GAAU;AAChC,aAAO;IACT;AAEA,WAAO,CAACD,QAAQI,UAAU,CAACH,QAAQG,SAAS,IAAIC,sBAAsBH,OAAOF,QAAQI,QAAQH,QAAQG,MAAM;EAC7G;AACF,CAAA;",
6
6
  "names": ["Capabilities", "contributes", "Type", "getTarget", "contributes", "Capabilities", "AnchorSort", "key", "Type", "getTypename", "SheetType", "sort", "anchorA", "anchorB", "sheet", "getTarget", "anchor", "compareIndexPositions"]
7
7
  }
@@ -1,4 +1,4 @@
1
- // packages/plugins/plugin-sheet/src/meta.ts
1
+ // src/meta.ts
2
2
  var SHEET_PLUGIN = "dxos.org/plugin/sheet";
3
3
  var meta = {
4
4
  id: SHEET_PLUGIN,
@@ -15,4 +15,4 @@ export {
15
15
  SHEET_PLUGIN,
16
16
  meta
17
17
  };
18
- //# sourceMappingURL=chunk-D3G4UGEK.mjs.map
18
+ //# sourceMappingURL=chunk-6AKBCBL4.mjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  SHEET_PLUGIN
3
- } from "./chunk-D3G4UGEK.mjs";
3
+ } from "./chunk-6AKBCBL4.mjs";
4
4
 
5
- // packages/plugins/plugin-sheet/src/capabilities/capabilities.ts
5
+ // src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
7
7
  (function(SheetCapabilities2) {
8
8
  SheetCapabilities2.ComputeGraphRegistry = defineCapability(`${SHEET_PLUGIN}/capability/compute-graph-registry`);
@@ -12,4 +12,4 @@ var SheetCapabilities;
12
12
  export {
13
13
  SheetCapabilities
14
14
  };
15
- //# sourceMappingURL=chunk-IR42IS3F.mjs.map
15
+ //# sourceMappingURL=chunk-KJWZUQVA.mjs.map
@@ -1,4 +1,4 @@
1
- // packages/plugins/plugin-sheet/src/extensions/compute.ts
1
+ // src/extensions/compute.ts
2
2
  import { syntaxTree } from "@codemirror/language";
3
3
  import { RangeSetBuilder, StateEffect, StateField } from "@codemirror/state";
4
4
  import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
@@ -9,7 +9,7 @@ import { documentId, singleValueFacet } from "@dxos/react-ui-editor";
9
9
  var updateAllDecorations = StateEffect.define();
10
10
  var computeGraphFacet = singleValueFacet();
11
11
 
12
- // packages/plugins/plugin-sheet/src/extensions/editor/extension.ts
12
+ // src/extensions/editor/sheet-extension.ts
13
13
  import { acceptCompletion, autocompletion, completionStatus, startCompletion } from "@codemirror/autocomplete";
14
14
  import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
15
15
  import { ViewPlugin as ViewPlugin2, keymap } from "@codemirror/view";
@@ -159,10 +159,6 @@ var rangeExtension = ({ onInit, onStateChange }) => {
159
159
  }
160
160
  };
161
161
  return ViewPlugin2.fromClass(class {
162
- constructor(_view) {
163
- view = _view;
164
- onInit?.(notifier);
165
- }
166
162
  update(view2) {
167
163
  const { anchor } = view2.state.selection.ranges[0];
168
164
  activeRange = void 0;
@@ -212,6 +208,10 @@ var rangeExtension = ({ onInit, onStateChange }) => {
212
208
  activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
213
209
  });
214
210
  }
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-FJRLDX7Z.mjs.map
234
+ //# sourceMappingURL=chunk-SSN4HYJL.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", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "_view", "node", "callback", "child", "firstChild", "nextSibling"]
7
+ }