@dxos/plugin-sheet 0.8.4-main.72ec0f3 → 0.8.4-main.937b3ca

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 (208) hide show
  1. package/dist/lib/browser/SheetContainer-ESCXPI7Y.mjs +397 -0
  2. package/dist/lib/browser/SheetContainer-ESCXPI7Y.mjs.map +7 -0
  3. package/dist/lib/browser/{anchor-sort-FCQ5OZZK.mjs → anchor-sort-JBRMW6OY.mjs} +7 -7
  4. package/dist/lib/browser/anchor-sort-JBRMW6OY.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2SAGT3BB.mjs +397 -0
  6. package/dist/lib/browser/chunk-2SAGT3BB.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-7VEWYJJN.mjs → chunk-IFLWVS2V.mjs} +5 -5
  8. package/dist/lib/browser/chunk-IFLWVS2V.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-W6N44ONZ.mjs +1470 -0
  10. package/dist/lib/browser/chunk-W6N44ONZ.mjs.map +7 -0
  11. package/dist/lib/browser/compute-graph-registry-DL2PX7TF.mjs +21 -0
  12. package/dist/lib/browser/compute-graph-registry-DL2PX7TF.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +68 -78
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/markdown-BC4KBDUO.mjs +29 -0
  16. package/dist/lib/browser/markdown-BC4KBDUO.mjs.map +7 -0
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/operation-resolver-FJ4UWZUM.mjs +79 -0
  19. package/dist/lib/browser/operation-resolver-FJ4UWZUM.mjs.map +7 -0
  20. package/dist/lib/browser/{react-surface-5GYLVSMR.mjs → react-surface-5BXM6TJ3.mjs} +16 -19
  21. package/dist/lib/browser/react-surface-5BXM6TJ3.mjs.map +7 -0
  22. package/dist/lib/browser/types/index.mjs +5 -2
  23. package/dist/lib/node-esm/SheetContainer-YVIDJKP4.mjs +398 -0
  24. package/dist/lib/node-esm/SheetContainer-YVIDJKP4.mjs.map +7 -0
  25. package/dist/lib/node-esm/{anchor-sort-ZE7IS7SH.mjs → anchor-sort-C3XFPI6S.mjs} +7 -7
  26. package/dist/lib/node-esm/anchor-sort-C3XFPI6S.mjs.map +7 -0
  27. package/dist/lib/node-esm/chunk-IMWGSIDG.mjs +398 -0
  28. package/dist/lib/node-esm/chunk-IMWGSIDG.mjs.map +7 -0
  29. package/dist/lib/node-esm/{chunk-4QV4AGWK.mjs → chunk-PPOYR7DK.mjs} +5 -5
  30. package/dist/lib/node-esm/chunk-PPOYR7DK.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-S7RYX7DG.mjs +1471 -0
  32. package/dist/lib/node-esm/chunk-S7RYX7DG.mjs.map +7 -0
  33. package/dist/lib/node-esm/compute-graph-registry-VXH55GDI.mjs +22 -0
  34. package/dist/lib/node-esm/compute-graph-registry-VXH55GDI.mjs.map +7 -0
  35. package/dist/lib/node-esm/index.mjs +68 -78
  36. package/dist/lib/node-esm/index.mjs.map +4 -4
  37. package/dist/lib/node-esm/markdown-6DGZCJRM.mjs +30 -0
  38. package/dist/lib/node-esm/markdown-6DGZCJRM.mjs.map +7 -0
  39. package/dist/lib/node-esm/meta.json +1 -1
  40. package/dist/lib/node-esm/operation-resolver-OGXEUWHA.mjs +80 -0
  41. package/dist/lib/node-esm/operation-resolver-OGXEUWHA.mjs.map +7 -0
  42. package/dist/lib/node-esm/{react-surface-RK32YZWR.mjs → react-surface-RLHC6B77.mjs} +16 -19
  43. package/dist/lib/node-esm/react-surface-RLHC6B77.mjs.map +7 -0
  44. package/dist/lib/node-esm/types/index.mjs +5 -2
  45. package/dist/types/src/SheetPlugin.d.ts +2 -1
  46. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +5 -0
  48. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  50. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts +5 -0
  52. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts +3 -0
  54. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/index.d.ts +5 -6
  56. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  58. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  60. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  62. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  64. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  66. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  68. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  69. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  70. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -0
  71. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts +1 -1
  73. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  75. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +4 -5
  76. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  77. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +3 -1
  78. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  79. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  80. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +2 -0
  81. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  82. package/dist/types/src/components/SheetToolbar/align.d.ts +12 -19
  83. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  84. package/dist/types/src/components/SheetToolbar/style.d.ts +12 -18
  85. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  86. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  87. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  88. package/dist/types/src/components/index.d.ts +1 -1
  89. package/dist/types/src/components/index.d.ts.map +1 -1
  90. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  91. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
  92. package/dist/types/src/index.d.ts +1 -1
  93. package/dist/types/src/index.d.ts.map +1 -1
  94. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  95. package/dist/types/src/meta.d.ts +2 -2
  96. package/dist/types/src/meta.d.ts.map +1 -1
  97. package/dist/types/src/model/sheet-model.d.ts +2 -2
  98. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  99. package/dist/types/src/serializer.d.ts.map +1 -1
  100. package/dist/types/src/testing/testing.d.ts +8 -8
  101. package/dist/types/src/translations.d.ts +1 -0
  102. package/dist/types/src/translations.d.ts.map +1 -1
  103. package/dist/types/src/types/Sheet.d.ts +34 -28
  104. package/dist/types/src/types/Sheet.d.ts.map +1 -1
  105. package/dist/types/src/types/capabilities.d.ts +6 -0
  106. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  107. package/dist/types/src/types/index.d.ts +1 -0
  108. package/dist/types/src/types/index.d.ts.map +1 -1
  109. package/dist/types/src/types/types.d.ts +91 -65
  110. package/dist/types/src/types/types.d.ts.map +1 -1
  111. package/dist/types/tsconfig.tsbuildinfo +1 -1
  112. package/package.json +75 -69
  113. package/src/SheetPlugin.tsx +40 -62
  114. package/src/capabilities/anchor-sort/anchor-sort.ts +26 -0
  115. package/src/capabilities/anchor-sort/index.ts +7 -0
  116. package/src/capabilities/compute-graph-registry/compute-graph-registry.ts +27 -0
  117. package/src/capabilities/compute-graph-registry/index.ts +7 -0
  118. package/src/capabilities/index.ts +5 -9
  119. package/src/capabilities/markdown/index.ts +7 -0
  120. package/src/capabilities/markdown/markdown.ts +30 -0
  121. package/src/capabilities/operation-resolver/index.ts +7 -0
  122. package/src/capabilities/operation-resolver/operation-resolver.ts +77 -0
  123. package/src/capabilities/react-surface/index.ts +7 -0
  124. package/src/capabilities/react-surface/react-surface.tsx +43 -0
  125. package/src/components/ComputeGraph/compute-graph.stories.tsx +1 -1
  126. package/src/components/GridSheet/GridSheet.stories.tsx +2 -2
  127. package/src/components/GridSheet/GridSheet.tsx +14 -19
  128. package/src/components/GridSheet/SheetCellEditor.stories.tsx +7 -4
  129. package/src/components/GridSheet/util.ts +2 -2
  130. package/src/components/RangeList/RangeList.tsx +5 -2
  131. package/src/components/SheetContainer/SheetContainer.stories.tsx +41 -21
  132. package/src/components/SheetContainer/SheetContainer.tsx +27 -20
  133. package/src/components/SheetContext/SheetContext.tsx +4 -4
  134. package/src/components/SheetToolbar/SheetToolbar.tsx +29 -18
  135. package/src/components/SheetToolbar/align.ts +41 -16
  136. package/src/components/SheetToolbar/style.ts +45 -15
  137. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  138. package/src/extensions/compute.stories.tsx +15 -6
  139. package/src/extensions/compute.ts +1 -1
  140. package/src/extensions/editor/sheet-extension.ts +7 -4
  141. package/src/index.ts +1 -1
  142. package/src/integrations/thread-ranges.ts +37 -41
  143. package/src/meta.ts +2 -2
  144. package/src/model/sheet-model.ts +75 -45
  145. package/src/playwright/playwright.config.ts +1 -1
  146. package/src/playwright/sheet.spec.ts +1 -0
  147. package/src/sanity.test.ts +1 -1
  148. package/src/serializer.ts +1 -1
  149. package/src/translations.ts +1 -0
  150. package/src/types/Sheet.ts +23 -20
  151. package/src/{capabilities → types}/capabilities.ts +2 -2
  152. package/src/types/index.ts +1 -0
  153. package/src/types/types.ts +81 -37
  154. package/dist/lib/browser/SheetContainer-66BNB3XG.mjs +0 -349
  155. package/dist/lib/browser/SheetContainer-66BNB3XG.mjs.map +0 -7
  156. package/dist/lib/browser/anchor-sort-FCQ5OZZK.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-73AV3NH6.mjs +0 -15
  158. package/dist/lib/browser/chunk-73AV3NH6.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-7VEWYJJN.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-DVJ3QW3F.mjs +0 -907
  161. package/dist/lib/browser/chunk-DVJ3QW3F.mjs.map +0 -7
  162. package/dist/lib/browser/chunk-FWFAAGXL.mjs +0 -28
  163. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +0 -7
  164. package/dist/lib/browser/chunk-OU5KTWY3.mjs +0 -852
  165. package/dist/lib/browser/chunk-OU5KTWY3.mjs.map +0 -7
  166. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs +0 -21
  167. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs.map +0 -7
  168. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs +0 -56
  169. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs.map +0 -7
  170. package/dist/lib/browser/markdown-B6VKYY2S.mjs +0 -26
  171. package/dist/lib/browser/markdown-B6VKYY2S.mjs.map +0 -7
  172. package/dist/lib/browser/react-surface-5GYLVSMR.mjs.map +0 -7
  173. package/dist/lib/node-esm/SheetContainer-NWEQETAY.mjs +0 -350
  174. package/dist/lib/node-esm/SheetContainer-NWEQETAY.mjs.map +0 -7
  175. package/dist/lib/node-esm/anchor-sort-ZE7IS7SH.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-44YTKTMP.mjs +0 -16
  177. package/dist/lib/node-esm/chunk-44YTKTMP.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs +0 -908
  179. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-4MT3JJU2.mjs +0 -853
  181. package/dist/lib/node-esm/chunk-4MT3JJU2.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs.map +0 -7
  183. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +0 -29
  184. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +0 -7
  185. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs +0 -22
  186. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs.map +0 -7
  187. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs +0 -57
  188. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs.map +0 -7
  189. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs +0 -27
  190. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs.map +0 -7
  191. package/dist/lib/node-esm/react-surface-RK32YZWR.mjs.map +0 -7
  192. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -4
  193. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  194. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  195. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  196. package/dist/types/src/capabilities/compute-graph-registry.d.ts +0 -4
  197. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +0 -1
  198. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  199. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  200. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  201. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  202. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  203. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  204. package/src/capabilities/anchor-sort.ts +0 -21
  205. package/src/capabilities/compute-graph-registry.ts +0 -23
  206. package/src/capabilities/intent-resolver.ts +0 -38
  207. package/src/capabilities/markdown.ts +0 -23
  208. package/src/capabilities/react-surface.tsx +0 -41
@@ -0,0 +1,397 @@
1
+ import {
2
+ GridSheet,
3
+ SheetProvider,
4
+ useComputeGraph,
5
+ useSheetContext
6
+ } from "./chunk-W6N44ONZ.mjs";
7
+ import "./chunk-IFLWVS2V.mjs";
8
+ import {
9
+ alignKey,
10
+ mapFormulaIndicesToRefs,
11
+ meta,
12
+ rangeFromIndex,
13
+ rangeToIndex
14
+ } from "./chunk-2SAGT3BB.mjs";
15
+
16
+ // src/components/SheetContainer/SheetContainer.tsx
17
+ import React3, { Fragment } from "react";
18
+ import { Obj as Obj3 } from "@dxos/echo";
19
+ import { Layout } from "@dxos/react-ui-mosaic";
20
+
21
+ // src/components/FunctionEditor/FunctionEditor.tsx
22
+ import React from "react";
23
+ import { addressToA1Notation, isFormula, rangeToA1Notation } from "@dxos/compute";
24
+ import { Icon } from "@dxos/react-ui";
25
+ var FunctionEditor = () => {
26
+ const { model, cursor, range } = useSheetContext();
27
+ let value;
28
+ let formula = false;
29
+ if (cursor) {
30
+ value = model.getCellValue(cursor);
31
+ if (isFormula(value)) {
32
+ value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));
33
+ formula = true;
34
+ } else if (value != null) {
35
+ value = String(value);
36
+ }
37
+ }
38
+ return /* @__PURE__ */ React.createElement("div", {
39
+ className: "flex shrink-0 justify-between items-center pli-4 plb-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator"
40
+ }, /* @__PURE__ */ React.createElement("div", {
41
+ className: "flex gap-4 items-center"
42
+ }, /* @__PURE__ */ React.createElement("div", {
43
+ className: "flex is-16 items-center font-mono"
44
+ }, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
45
+ className: "flex gap-2 items-center"
46
+ }, /* @__PURE__ */ React.createElement(Icon, {
47
+ icon: "ph--function--regular",
48
+ classNames: [
49
+ "text-greenText",
50
+ formula ? "visible" : "invisible"
51
+ ]
52
+ }), /* @__PURE__ */ React.createElement("span", {
53
+ className: "font-mono"
54
+ }, value))));
55
+ };
56
+
57
+ // src/components/SheetToolbar/SheetToolbar.tsx
58
+ import { Atom as Atom2, RegistryContext as RegistryContext4 } from "@effect-atom/atom-react";
59
+ import React2, { useContext as useContext4, useMemo as useMemo2 } from "react";
60
+ import { useAppGraph } from "@dxos/app-framework/react";
61
+ import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
62
+
63
+ // src/components/SheetToolbar/align.ts
64
+ import { RegistryContext } from "@effect-atom/atom-react";
65
+ import { useContext, useEffect } from "react";
66
+ import { inRange } from "@dxos/compute";
67
+ import { Obj } from "@dxos/echo";
68
+ import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
69
+ var aligns = {
70
+ start: "ph--text-align-left--regular",
71
+ center: "ph--text-align-center--regular",
72
+ end: "ph--text-align-right--regular"
73
+ };
74
+ var useAlignState = (stateAtom) => {
75
+ const registry = useContext(RegistryContext);
76
+ const { cursor, model } = useSheetContext();
77
+ useEffect(() => {
78
+ const alignValue = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
79
+ const prev = registry.get(stateAtom);
80
+ registry.set(stateAtom, {
81
+ ...prev,
82
+ [alignKey]: alignValue
83
+ });
84
+ }, [
85
+ cursor,
86
+ model.sheet,
87
+ registry,
88
+ stateAtom
89
+ ]);
90
+ };
91
+ var createAlignGroupAction = (value) => createMenuItemGroup("align", {
92
+ label: [
93
+ "align label",
94
+ {
95
+ ns: meta.id
96
+ }
97
+ ],
98
+ variant: "toggleGroup",
99
+ selectCardinality: "single",
100
+ value: `${alignKey}--${value}`
101
+ });
102
+ var createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackRange }) => Object.entries(aligns).map(([alignValue, icon]) => {
103
+ return createMenuAction(`${alignKey}--${alignValue}`, () => {
104
+ if (!cursorFallbackRange) {
105
+ return;
106
+ }
107
+ const index = model.sheet.ranges?.findIndex((range) => range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
108
+ const nextRangeEntity = {
109
+ range: rangeToIndex(model.sheet, cursorFallbackRange),
110
+ key: alignKey,
111
+ value: alignValue
112
+ };
113
+ const currentState = registry.get(stateAtom);
114
+ if (index < 0) {
115
+ Obj.change(model.sheet, (s) => {
116
+ s.ranges?.push(nextRangeEntity);
117
+ });
118
+ registry.set(stateAtom, {
119
+ ...currentState,
120
+ [alignKey]: nextRangeEntity.value
121
+ });
122
+ } else if (model.sheet.ranges[index].value === nextRangeEntity.value) {
123
+ Obj.change(model.sheet, (s) => {
124
+ s.ranges?.splice(index, 1);
125
+ });
126
+ registry.set(stateAtom, {
127
+ ...currentState,
128
+ [alignKey]: void 0
129
+ });
130
+ } else {
131
+ Obj.change(model.sheet, (s) => {
132
+ s.ranges?.splice(index, 1, nextRangeEntity);
133
+ });
134
+ registry.set(stateAtom, {
135
+ ...currentState,
136
+ [alignKey]: nextRangeEntity.value
137
+ });
138
+ }
139
+ }, {
140
+ key: alignKey,
141
+ value: alignValue,
142
+ checked: state[alignKey] === alignValue,
143
+ label: [
144
+ `range value ${alignValue} label`,
145
+ {
146
+ ns: meta.id
147
+ }
148
+ ],
149
+ icon,
150
+ testId: `grid.toolbar.${alignKey}.${alignValue}`
151
+ });
152
+ });
153
+ var createAlign = (context) => {
154
+ const alignGroup = createAlignGroupAction(context.state[alignKey]);
155
+ const alignActions = createAlignActions(context);
156
+ return {
157
+ nodes: [
158
+ alignGroup,
159
+ ...alignActions
160
+ ],
161
+ edges: [
162
+ {
163
+ source: "root",
164
+ target: "align"
165
+ },
166
+ ...alignActions.map(({ id }) => ({
167
+ source: alignGroup.id,
168
+ target: id
169
+ }))
170
+ ]
171
+ };
172
+ };
173
+
174
+ // src/components/SheetToolbar/style.ts
175
+ import { RegistryContext as RegistryContext2 } from "@effect-atom/atom-react";
176
+ import { useContext as useContext2, useEffect as useEffect2 } from "react";
177
+ import { inRange as inRange2 } from "@dxos/compute";
178
+ import { Obj as Obj2 } from "@dxos/echo";
179
+ import { createMenuAction as createMenuAction2, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
180
+ var styles = {
181
+ highlight: "ph--highlighter--regular",
182
+ softwrap: "ph--paragraph--regular"
183
+ };
184
+ var useStyleState = (stateAtom) => {
185
+ const registry = useContext2(RegistryContext2);
186
+ const { cursorFallbackRange, model } = useSheetContext();
187
+ useEffect2(() => {
188
+ let highlight = false;
189
+ let softwrap = false;
190
+ if (cursorFallbackRange && model.sheet.ranges) {
191
+ model.sheet.ranges.filter(({ range, key }) => key === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
192
+ if (value === "highlight") {
193
+ highlight = true;
194
+ }
195
+ if (value === "softwrap") {
196
+ softwrap = true;
197
+ }
198
+ });
199
+ }
200
+ const prev = registry.get(stateAtom);
201
+ registry.set(stateAtom, {
202
+ ...prev,
203
+ highlight,
204
+ softwrap
205
+ });
206
+ }, [
207
+ cursorFallbackRange,
208
+ model.sheet,
209
+ registry,
210
+ stateAtom
211
+ ]);
212
+ };
213
+ var createStyleGroup = (state) => {
214
+ return createMenuItemGroup2("style", {
215
+ variant: "toggleGroup",
216
+ selectCardinality: "multiple",
217
+ value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
218
+ });
219
+ };
220
+ var createStyleActions = ({ model, state, stateAtom, registry, cursorFallbackRange }) => Object.entries(styles).map(([styleValue, icon]) => {
221
+ return createMenuAction2(`style--${styleValue}`, () => {
222
+ if (!cursorFallbackRange) {
223
+ return;
224
+ }
225
+ const index = model.sheet.ranges?.findIndex((range) => range.key === "style" && inRange2(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
226
+ const nextRangeEntity = {
227
+ range: rangeToIndex(model.sheet, cursorFallbackRange),
228
+ key: "style",
229
+ value: styleValue
230
+ };
231
+ const currentState = registry.get(stateAtom);
232
+ if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === styleValue)) {
233
+ if (index >= 0) {
234
+ Obj2.change(model.sheet, (s) => {
235
+ s.ranges?.splice(index, 1);
236
+ });
237
+ }
238
+ registry.set(stateAtom, {
239
+ ...currentState,
240
+ [nextRangeEntity.value]: false
241
+ });
242
+ } else {
243
+ Obj2.change(model.sheet, (s) => {
244
+ s.ranges?.push(nextRangeEntity);
245
+ });
246
+ registry.set(stateAtom, {
247
+ ...currentState,
248
+ [nextRangeEntity.value]: true
249
+ });
250
+ }
251
+ }, {
252
+ key: "style",
253
+ value: styleValue,
254
+ icon,
255
+ label: [
256
+ `range value ${styleValue} label`,
257
+ {
258
+ ns: meta.id
259
+ }
260
+ ],
261
+ checked: !!state[styleValue]
262
+ });
263
+ });
264
+ var createStyle = (context) => {
265
+ const styleGroupAction = createStyleGroup(context.state);
266
+ const styleActions = createStyleActions(context);
267
+ return {
268
+ nodes: [
269
+ styleGroupAction,
270
+ ...styleActions
271
+ ],
272
+ edges: [
273
+ {
274
+ source: "root",
275
+ target: "style"
276
+ },
277
+ ...styleActions.map(({ id }) => ({
278
+ source: styleGroupAction.id,
279
+ target: id
280
+ }))
281
+ ]
282
+ };
283
+ };
284
+
285
+ // src/components/SheetToolbar/useToolbarState.ts
286
+ import { Atom, RegistryContext as RegistryContext3, useAtomValue } from "@effect-atom/atom-react";
287
+ import { useContext as useContext3, useMemo } from "react";
288
+ var useToolbarState = (initialState = {}) => {
289
+ return useMemo(() => Atom.make(initialState).pipe(Atom.keepAlive), []);
290
+ };
291
+
292
+ // src/components/SheetToolbar/SheetToolbar.tsx
293
+ var createToolbarActions = ({ model, stateAtom, registry, cursorFallbackRange, customActions }) => {
294
+ return Atom2.make((get) => {
295
+ const state = get(stateAtom);
296
+ const context = {
297
+ model,
298
+ state,
299
+ stateAtom,
300
+ registry,
301
+ cursorFallbackRange
302
+ };
303
+ const align = createAlign(context);
304
+ const style = createStyle(context);
305
+ const gap = createGapSeparator();
306
+ const graph = {
307
+ nodes: [
308
+ ...align.nodes,
309
+ ...style.nodes,
310
+ ...gap.nodes
311
+ ],
312
+ edges: [
313
+ ...align.edges,
314
+ ...style.edges,
315
+ ...gap.edges
316
+ ]
317
+ };
318
+ if (customActions) {
319
+ const custom = get(customActions);
320
+ graph.nodes.push(...custom.nodes);
321
+ graph.edges.push(...custom.edges);
322
+ }
323
+ return graph;
324
+ });
325
+ };
326
+ var SheetToolbar = ({ id }) => {
327
+ const { model, cursorFallbackRange } = useSheetContext();
328
+ const stateAtom = useToolbarState({});
329
+ const registry = useContext4(RegistryContext4);
330
+ useAlignState(stateAtom);
331
+ useStyleState(stateAtom);
332
+ const { graph } = useAppGraph();
333
+ const customActions = useMemo2(() => {
334
+ return Atom2.make((get) => {
335
+ const actions = get(graph.actions(id));
336
+ const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
337
+ return {
338
+ nodes,
339
+ edges: nodes.map((node) => ({
340
+ source: "root",
341
+ target: node.id
342
+ }))
343
+ };
344
+ });
345
+ }, [
346
+ graph,
347
+ id
348
+ ]);
349
+ const actionsCreator = useMemo2(() => createToolbarActions({
350
+ model,
351
+ stateAtom,
352
+ registry,
353
+ cursorFallbackRange,
354
+ customActions
355
+ }), [
356
+ model,
357
+ stateAtom,
358
+ registry,
359
+ cursorFallbackRange,
360
+ customActions
361
+ ]);
362
+ const menu = useMenuActions(actionsCreator);
363
+ return /* @__PURE__ */ React2.createElement(MenuProvider, {
364
+ ...menu,
365
+ attendableId: id
366
+ }, /* @__PURE__ */ React2.createElement(ToolbarMenu, null));
367
+ };
368
+
369
+ // src/components/SheetContainer/SheetContainer.tsx
370
+ var SheetContainer = ({ role, subject: sheet, space, ignoreAttention }) => {
371
+ const graph = useComputeGraph(space);
372
+ if (!graph) {
373
+ return null;
374
+ }
375
+ const Root = role === "section" ? Container : Fragment;
376
+ return /* @__PURE__ */ React3.createElement(SheetProvider, {
377
+ sheet,
378
+ graph,
379
+ ignoreAttention
380
+ }, /* @__PURE__ */ React3.createElement(Root, null, /* @__PURE__ */ React3.createElement(Layout.Main, {
381
+ toolbar: true,
382
+ statusbar: true
383
+ }, /* @__PURE__ */ React3.createElement(SheetToolbar, {
384
+ id: Obj3.getDXN(sheet).toString()
385
+ }), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))));
386
+ };
387
+ var Container = (props) => /* @__PURE__ */ React3.createElement(Layout.Flex, {
388
+ ...props,
389
+ classNames: "aspect-square"
390
+ });
391
+
392
+ // src/components/SheetContainer/index.ts
393
+ var SheetContainer_default = SheetContainer;
394
+ export {
395
+ SheetContainer_default as default
396
+ };
397
+ //# sourceMappingURL=SheetContainer-ESCXPI7Y.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, { Fragment } from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Layout, type LayoutFlexProps } from '@dxos/react-ui-mosaic';\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 = SurfaceComponentProps<\n Sheet.Sheet,\n {\n space: Space;\n ignoreAttention?: boolean;\n }\n>;\n\nexport const SheetContainer = ({ role, subject: sheet, space, ignoreAttention }: SheetContainerProps) => {\n const graph = useComputeGraph(space);\n if (!graph) {\n return null;\n }\n\n const Root = role === 'section' ? Container : Fragment;\n\n return (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <Root>\n <Layout.Main toolbar statusbar>\n <SheetToolbar id={Obj.getDXN(sheet).toString()} />\n <GridSheet />\n <FunctionEditor />\n </Layout.Main>\n </Root>\n </SheetProvider>\n );\n};\n\nconst Container = (props: LayoutFlexProps) => <Layout.Flex {...props} classNames='aspect-square' />;\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, type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport React, { type PropsWithChildren, useContext, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport {\n type ActionGraphProps,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n 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 ToolbarStateAtom, useToolbarState } from './useToolbarState';\n\ntype ToolbarActionsContext = {\n model: SheetModel;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n customActions?: Atom.Atom<ActionGraphProps>;\n};\n\nconst createToolbarActions = ({\n model,\n stateAtom,\n registry,\n cursorFallbackRange,\n customActions,\n}: ToolbarActionsContext): Atom.Atom<ActionGraphProps> => {\n return Atom.make((get) => {\n const state = get(stateAtom);\n const context = { model, state, stateAtom, registry, cursorFallbackRange };\n const align = createAlign(context);\n const style = createStyle(context);\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 stateAtom = useToolbarState({});\n const registry = useContext(RegistryContext);\n useAlignState(stateAtom);\n useStyleState(stateAtom);\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, id]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),\n [model, stateAtom, registry, 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 { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} 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, type ToolbarStateAtom } 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 = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n const alignValue = (\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 const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, [alignKey]: alignValue });\n }, [cursor, model.sheet, registry, stateAtom]);\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\ntype AlignActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: AlignActionsContext) =>\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 const currentState = registry.get(stateAtom);\n if (index < 0) {\n Obj.change(model.sheet, (s) => {\n s.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n Obj.change(model.sheet, (s) => {\n s.ranges?.splice(index, 1);\n });\n registry.set(stateAtom, { ...currentState, [alignKey]: undefined });\n } else {\n Obj.change(model.sheet, (s) => {\n s.ranges?.splice(index, 1, nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [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 = (context: AlignActionsContext): ActionGraphProps => {\n const alignGroup = createAlignGroupAction(context.state[alignKey]);\n const alignActions = createAlignActions(context);\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 { type Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { useContext, useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport {\n type ActionGraphProps,\n type ToolbarMenuActionGroupProperties,\n createMenuAction,\n createMenuItemGroup,\n} 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\nimport { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';\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 = (stateAtom: ToolbarStateAtom) => {\n const registry = useContext(RegistryContext);\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n let highlight = false;\n let 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 if (value === 'highlight') {\n highlight = true;\n }\n if (value === 'softwrap') {\n softwrap = true;\n }\n });\n }\n const prev = registry.get(stateAtom);\n registry.set(stateAtom, { ...prev, highlight, softwrap });\n }, [cursorFallbackRange, model.sheet, registry, stateAtom]);\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\ntype StyleActionsContext = {\n model: SheetModel;\n state: ToolbarState;\n stateAtom: ToolbarStateAtom;\n registry: Registry.Registry;\n cursorFallbackRange?: CompleteCellRange;\n};\n\nconst createStyleActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: StyleActionsContext) =>\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 const currentState = registry.get(stateAtom);\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 Obj.change(model.sheet, (s) => {\n s.ranges?.splice(index, 1);\n });\n }\n registry.set(stateAtom, { ...currentState, [nextRangeEntity.value]: false });\n } else {\n Obj.change(model.sheet, (s) => {\n s.ranges?.push(nextRangeEntity);\n });\n registry.set(stateAtom, { ...currentState, [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 = (context: StyleActionsContext): ActionGraphProps => {\n const styleGroupAction = createStyleGroup(context.state);\n const styleActions = createStyleActions(context);\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 { Atom, type Registry, RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport { useContext, useMemo } from 'react';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\nexport type ToolbarStateAtom = Atom.Writable<ToolbarState>;\n\n/**\n * Creates a reactive toolbar state Atom.\n */\nexport const useToolbarState = (initialState: ToolbarState = {}): ToolbarStateAtom => {\n return useMemo(() => Atom.make<ToolbarState>(initialState).pipe(Atom.keepAlive), []);\n};\n\n/**\n * Hook to read the current toolbar state value.\n */\nexport const useToolbarStateValue = (stateAtom: ToolbarStateAtom): ToolbarState => {\n return useAtomValue(stateAtom);\n};\n\n/**\n * Hook to get the registry for updating toolbar state.\n */\nexport const useToolbarStateRegistry = (): Registry.Registry => {\n return useContext(RegistryContext);\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", "Fragment", "Obj", "Layout", "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", "RegistryContext", "React", "useContext", "useMemo", "useAppGraph", "MenuProvider", "ToolbarMenu", "createGapSeparator", "useMenuActions", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "stateAtom", "registry", "useContext", "RegistryContext", "cursor", "model", "useSheetContext", "useEffect", "alignValue", "sheet", "ranges", "findLast", "range", "key", "alignKey", "inRange", "rangeFromIndex", "value", "undefined", "prev", "get", "set", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "meta", "id", "variant", "selectCardinality", "createAlignActions", "state", "cursorFallbackRange", "Object", "entries", "map", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "currentState", "Obj", "change", "s", "push", "splice", "checked", "testId", "createAlign", "context", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "RegistryContext", "useContext", "useEffect", "inRange", "Obj", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "stateAtom", "registry", "useContext", "RegistryContext", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "prev", "get", "set", "createStyleGroup", "state", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "currentState", "rangeKey", "some", "rangeValue", "Obj", "change", "s", "splice", "push", "label", "ns", "meta", "id", "checked", "createStyle", "context", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "Atom", "RegistryContext", "useAtomValue", "useContext", "useMemo", "useToolbarState", "initialState", "useMemo", "Atom", "make", "pipe", "keepAlive", "createToolbarActions", "model", "stateAtom", "registry", "cursorFallbackRange", "customActions", "Atom", "make", "get", "state", "context", "align", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "useSheetContext", "useToolbarState", "useContext", "RegistryContext", "useAlignState", "useStyleState", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "attendableId", "ToolbarMenu", "SheetContainer", "role", "subject", "sheet", "space", "ignoreAttention", "graph", "useComputeGraph", "Root", "Container", "Fragment", "React", "SheetProvider", "Layout", "Main", "toolbar", "statusbar", "SheetToolbar", "id", "Obj", "getDXN", "toString", "GridSheet", "FunctionEditor", "props", "Flex", "classNames", "SheetContainer"]
7
+ }
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  Sheet_exports,
3
3
  compareIndexPositions
4
- } from "./chunk-DVJ3QW3F.mjs";
5
- import "./chunk-FWFAAGXL.mjs";
4
+ } from "./chunk-2SAGT3BB.mjs";
6
5
 
7
- // src/capabilities/anchor-sort.ts
8
- import { Capabilities, contributes } from "@dxos/app-framework";
6
+ // src/capabilities/anchor-sort/anchor-sort.ts
7
+ import * as Effect from "effect/Effect";
8
+ import { Capability, Common } from "@dxos/app-framework";
9
9
  import { Relation } from "@dxos/echo";
10
- var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
10
+ var anchor_sort_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common.Capability.AnchorSort, {
11
11
  key: Sheet_exports.Sheet.typename,
12
12
  sort: (anchorA, anchorB) => {
13
13
  const sheet = Relation.getTarget(anchorA);
@@ -16,8 +16,8 @@ var anchor_sort_default = (() => contributes(Capabilities.AnchorSort, {
16
16
  }
17
17
  return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
18
18
  }
19
- }));
19
+ })));
20
20
  export {
21
21
  anchor_sort_default as default
22
22
  };
23
- //# sourceMappingURL=anchor-sort-FCQ5OZZK.mjs.map
23
+ //# sourceMappingURL=anchor-sort-JBRMW6OY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/anchor-sort/anchor-sort.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Relation } from '@dxos/echo';\n\nimport { Sheet, compareIndexPositions } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.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 ),\n);\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,gBAAgB;AAIzB,IAAA,sBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,YAAY;EACnDC,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,CAAA,CAAA;",
6
+ "names": ["Effect", "Capability", "Common", "Relation", "Capability", "makeModule", "succeed", "contributes", "Common", "AnchorSort", "key", "Sheet", "typename", "sort", "anchorA", "anchorB", "sheet", "Relation", "getTarget", "anchor", "compareIndexPositions"]
7
+ }