@dxos/plugin-sheet 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc

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 (195) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs +46 -0
  3. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs.map +7 -0
  4. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs +33 -0
  5. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs.map +7 -0
  6. package/dist/lib/neutral/SheetPlugin.mjs +48 -0
  7. package/dist/lib/neutral/SheetPlugin.mjs.map +7 -0
  8. package/dist/lib/neutral/SheetPlugin.node.mjs +27 -0
  9. package/dist/lib/neutral/SheetPlugin.node.mjs.map +7 -0
  10. package/dist/lib/neutral/SheetPlugin.workerd.mjs +21 -0
  11. package/dist/lib/neutral/SheetPlugin.workerd.mjs.map +7 -0
  12. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs +22 -0
  13. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs.map +7 -0
  14. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  15. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  16. package/dist/lib/neutral/chunk-4SBAIU6F.mjs +234 -0
  17. package/dist/lib/neutral/chunk-4SBAIU6F.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-CGWDLWFZ.mjs +8 -0
  19. package/dist/lib/neutral/chunk-CGWDLWFZ.mjs.map +7 -0
  20. package/dist/lib/{browser/chunk-SVGX3MWY.mjs → neutral/chunk-KC2SMDNF.mjs} +160 -49
  21. package/dist/lib/neutral/chunk-KC2SMDNF.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-YFY6U524.mjs +83 -0
  23. package/dist/lib/neutral/chunk-YFY6U524.mjs.map +7 -0
  24. package/dist/lib/{browser/index.mjs → neutral/chunk-ZWOQCLH7.mjs} +1 -13
  25. package/dist/lib/neutral/chunk-ZWOQCLH7.mjs.map +7 -0
  26. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs +20 -0
  27. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs.map +7 -0
  28. package/dist/lib/neutral/components/index.mjs +1551 -0
  29. package/dist/lib/neutral/components/index.mjs.map +7 -0
  30. package/dist/lib/neutral/compute-graph-registry-IEQBF5XZ.mjs +20 -0
  31. package/dist/lib/neutral/compute-graph-registry-IEQBF5XZ.mjs.map +7 -0
  32. package/dist/lib/neutral/containers/index.mjs +11 -0
  33. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  34. package/dist/lib/neutral/create-object-OKQAXJCW.mjs +27 -0
  35. package/dist/lib/neutral/create-object-OKQAXJCW.mjs.map +7 -0
  36. package/dist/lib/{browser/drop-axis-ZLERPPPH.mjs → neutral/drop-axis-G6UOXG54.mjs} +4 -4
  37. package/dist/lib/neutral/drop-axis-G6UOXG54.mjs.map +7 -0
  38. package/dist/lib/{node-esm/types → neutral}/index.mjs +14 -5
  39. package/dist/lib/{browser/insert-axis-WTRA3HE7.mjs → neutral/insert-axis-ZFFNG22G.mjs} +4 -4
  40. package/dist/lib/neutral/insert-axis-ZFFNG22G.mjs.map +7 -0
  41. package/dist/lib/neutral/markdown-I2AKJYPF.mjs +28 -0
  42. package/dist/lib/neutral/markdown-I2AKJYPF.mjs.map +7 -0
  43. package/dist/lib/neutral/meta.json +1 -0
  44. package/dist/lib/neutral/meta.mjs +8 -0
  45. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs +13 -0
  46. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs.map +7 -0
  47. package/dist/lib/neutral/operations/index.mjs +8 -0
  48. package/dist/lib/neutral/plugin.mjs +16 -0
  49. package/dist/lib/neutral/plugin.mjs.map +7 -0
  50. package/dist/lib/neutral/react-surface-VSTQNVPT.mjs +44 -0
  51. package/dist/lib/neutral/react-surface-VSTQNVPT.mjs.map +7 -0
  52. package/dist/lib/{browser/restore-axis-PYGPW2TB.mjs → neutral/restore-axis-44DM6N54.mjs} +4 -4
  53. package/dist/lib/neutral/restore-axis-44DM6N54.mjs.map +7 -0
  54. package/dist/lib/neutral/scroll-to-anchor-QPOGMAQG.mjs +33 -0
  55. package/dist/lib/neutral/scroll-to-anchor-QPOGMAQG.mjs.map +7 -0
  56. package/dist/lib/neutral/state-HPA27MX2.mjs +29 -0
  57. package/dist/lib/neutral/state-HPA27MX2.mjs.map +7 -0
  58. package/dist/lib/neutral/testing/index.mjs +103 -0
  59. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  60. package/dist/lib/{browser → neutral}/types/index.mjs +5 -3
  61. package/dist/lib/neutral/types/index.mjs.map +7 -0
  62. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs +31 -0
  63. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs.map +7 -0
  64. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  65. package/dist/types/src/SheetPlugin.node.d.ts.map +1 -1
  66. package/dist/types/src/SheetPlugin.workerd.d.ts +4 -0
  67. package/dist/types/src/SheetPlugin.workerd.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  69. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  71. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/index.d.ts +16 -2
  73. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  75. package/dist/types/src/capabilities/state.d.ts +2 -2
  76. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  77. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  78. package/dist/types/src/containers/RangeList/RangeList.d.ts +1 -1
  79. package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -1
  80. package/dist/types/src/containers/{SheetContainer/SheetContainer.d.ts → SheetArticle/SheetArticle.d.ts} +3 -3
  81. package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts.map +1 -0
  82. package/dist/types/src/containers/{SheetContainer/SheetContainer.stories.d.ts → SheetArticle/SheetArticle.stories.d.ts} +2 -2
  83. package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts.map +1 -0
  84. package/dist/types/src/containers/SheetArticle/index.d.ts +2 -0
  85. package/dist/types/src/containers/SheetArticle/index.d.ts.map +1 -0
  86. package/dist/types/src/containers/index.d.ts +1 -1
  87. package/dist/types/src/containers/index.d.ts.map +1 -1
  88. package/dist/types/src/index.d.ts +2 -3
  89. package/dist/types/src/index.d.ts.map +1 -1
  90. package/dist/types/src/operations/drop-axis.d.ts +2 -2
  91. package/dist/types/src/operations/drop-axis.d.ts.map +1 -1
  92. package/dist/types/src/operations/index.d.ts +0 -1
  93. package/dist/types/src/operations/index.d.ts.map +1 -1
  94. package/dist/types/src/operations/insert-axis.d.ts +2 -2
  95. package/dist/types/src/operations/insert-axis.d.ts.map +1 -1
  96. package/dist/types/src/operations/restore-axis.d.ts +2 -2
  97. package/dist/types/src/operations/restore-axis.d.ts.map +1 -1
  98. package/dist/types/src/operations/scroll-to-anchor.d.ts +2 -2
  99. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -1
  100. package/dist/types/src/plugin.d.ts +4 -0
  101. package/dist/types/src/plugin.d.ts.map +1 -0
  102. package/dist/types/src/serializer.d.ts +1 -1
  103. package/dist/types/src/serializer.d.ts.map +1 -1
  104. package/dist/types/src/types/{capabilities.d.ts → SheetCapabilities.d.ts} +5 -7
  105. package/dist/types/src/types/SheetCapabilities.d.ts.map +1 -0
  106. package/dist/types/src/{operations/definitions.d.ts → types/SheetOperation.d.ts} +1 -1
  107. package/dist/types/src/types/SheetOperation.d.ts.map +1 -0
  108. package/dist/types/src/types/index.d.ts +3 -2
  109. package/dist/types/src/types/index.d.ts.map +1 -1
  110. package/dist/types/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +107 -81
  112. package/src/SheetPlugin.node.ts +3 -18
  113. package/src/SheetPlugin.test.ts +2 -2
  114. package/src/SheetPlugin.tsx +7 -36
  115. package/src/SheetPlugin.workerd.ts +18 -0
  116. package/src/capabilities/comment-config.ts +24 -0
  117. package/src/capabilities/compute-graph-registry.ts +1 -1
  118. package/src/capabilities/create-object.ts +30 -0
  119. package/src/capabilities/index.ts +4 -0
  120. package/src/capabilities/markdown.ts +1 -1
  121. package/src/capabilities/react-surface.tsx +3 -3
  122. package/src/capabilities/state.ts +3 -3
  123. package/src/capabilities/undo-mappings.ts +1 -1
  124. package/src/components/ComputeGraph/compute-graph.stories.tsx +8 -3
  125. package/src/components/SheetContent/SheetContent.stories.tsx +1 -1
  126. package/src/components/SheetContent/SheetContent.tsx +1 -1
  127. package/src/containers/RangeList/RangeList.tsx +6 -5
  128. package/src/containers/{SheetContainer/SheetContainer.stories.tsx → SheetArticle/SheetArticle.stories.tsx} +11 -10
  129. package/src/containers/{SheetContainer/SheetContainer.tsx → SheetArticle/SheetArticle.tsx} +5 -5
  130. package/src/containers/SheetArticle/index.ts +5 -0
  131. package/src/containers/index.ts +1 -1
  132. package/src/index.ts +2 -8
  133. package/src/integrations/thread-ranges.ts +3 -3
  134. package/src/operations/drop-axis.ts +4 -4
  135. package/src/operations/index.ts +0 -2
  136. package/src/operations/insert-axis.ts +4 -4
  137. package/src/operations/restore-axis.ts +4 -4
  138. package/src/operations/scroll-to-anchor.ts +2 -3
  139. package/src/playwright/sheet.spec.ts +1 -1
  140. package/src/plugin.ts +11 -0
  141. package/src/sanity.test.ts +5 -1
  142. package/src/serializer.ts +1 -1
  143. package/src/types/{capabilities.ts → SheetCapabilities.ts} +8 -8
  144. package/src/{operations/definitions.ts → types/SheetOperation.ts} +2 -0
  145. package/src/types/index.ts +4 -2
  146. package/dist/lib/browser/SheetPlugin-W4PFP6WG.mjs +0 -92
  147. package/dist/lib/browser/SheetPlugin-W4PFP6WG.mjs.map +0 -7
  148. package/dist/lib/browser/chunk-5TXOUIGZ.mjs +0 -118
  149. package/dist/lib/browser/chunk-5TXOUIGZ.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-SVGX3MWY.mjs.map +0 -7
  151. package/dist/lib/browser/drop-axis-ZLERPPPH.mjs.map +0 -7
  152. package/dist/lib/browser/index.mjs.map +0 -7
  153. package/dist/lib/browser/insert-axis-WTRA3HE7.mjs.map +0 -7
  154. package/dist/lib/browser/meta.json +0 -1
  155. package/dist/lib/browser/operations/index.mjs +0 -13
  156. package/dist/lib/browser/operations/index.mjs.map +0 -7
  157. package/dist/lib/browser/restore-axis-PYGPW2TB.mjs.map +0 -7
  158. package/dist/lib/browser/scroll-to-anchor-6I4DNKBW.mjs +0 -65
  159. package/dist/lib/browser/scroll-to-anchor-6I4DNKBW.mjs.map +0 -7
  160. package/dist/lib/node-esm/SheetPlugin-ZJRSEYHB.mjs +0 -93
  161. package/dist/lib/node-esm/SheetPlugin-ZJRSEYHB.mjs.map +0 -7
  162. package/dist/lib/node-esm/chunk-4A2KAXTF.mjs +0 -263
  163. package/dist/lib/node-esm/chunk-4A2KAXTF.mjs.map +0 -7
  164. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  165. package/dist/lib/node-esm/chunk-MCZFRYOP.mjs +0 -119
  166. package/dist/lib/node-esm/chunk-MCZFRYOP.mjs.map +0 -7
  167. package/dist/lib/node-esm/drop-axis-FV2GXSZP.mjs +0 -24
  168. package/dist/lib/node-esm/drop-axis-FV2GXSZP.mjs.map +0 -7
  169. package/dist/lib/node-esm/index.mjs +0 -34
  170. package/dist/lib/node-esm/index.mjs.map +0 -7
  171. package/dist/lib/node-esm/insert-axis-THXK6DCC.mjs +0 -17
  172. package/dist/lib/node-esm/insert-axis-THXK6DCC.mjs.map +0 -7
  173. package/dist/lib/node-esm/meta.json +0 -1
  174. package/dist/lib/node-esm/operations/index.mjs +0 -14
  175. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  176. package/dist/lib/node-esm/restore-axis-JIFT3Q7Z.mjs +0 -17
  177. package/dist/lib/node-esm/restore-axis-JIFT3Q7Z.mjs.map +0 -7
  178. package/dist/lib/node-esm/scroll-to-anchor-JRDC5KK2.mjs +0 -66
  179. package/dist/lib/node-esm/scroll-to-anchor-JRDC5KK2.mjs.map +0 -7
  180. package/dist/lib/node-esm/translations.mjs +0 -56
  181. package/dist/lib/node-esm/translations.mjs.map +0 -7
  182. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts.map +0 -1
  183. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  184. package/dist/types/src/containers/SheetContainer/index.d.ts +0 -2
  185. package/dist/types/src/containers/SheetContainer/index.d.ts.map +0 -1
  186. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  187. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  188. package/src/containers/SheetContainer/index.ts +0 -5
  189. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  190. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  191. /package/dist/lib/{browser/types → neutral}/index.mjs.map +0 -0
  192. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
  193. /package/dist/lib/{node-esm/types → neutral/operations}/index.mjs.map +0 -0
  194. /package/dist/lib/{browser → neutral}/translations.mjs +0 -0
  195. /package/dist/lib/{browser → neutral}/translations.mjs.map +0 -0
@@ -0,0 +1,234 @@
1
+ // src/extensions/compute.ts
2
+ import { syntaxTree } from "@codemirror/language";
3
+ import { RangeSetBuilder, StateEffect, StateField } from "@codemirror/state";
4
+ import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
5
+ import { debounce } from "@dxos/async";
6
+ import { createSheetName } from "@dxos/compute-hyperformula";
7
+ import { invariant } from "@dxos/invariant";
8
+ import { documentId, singleValueFacet } from "@dxos/ui-editor";
9
+ var updateAllDecorations = StateEffect.define();
10
+ var computeGraphFacet = singleValueFacet();
11
+
12
+ // src/extensions/editor/sheet-extension.ts
13
+ import { acceptCompletion, autocompletion, completionStatus, startCompletion } from "@codemirror/autocomplete";
14
+ import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
15
+ import { ViewPlugin as ViewPlugin2, keymap } from "@codemirror/view";
16
+ import { tags } from "@lezer/highlight";
17
+ import { spreadsheet } from "codemirror-lang-spreadsheet";
18
+ import { RANGE_NOTATION } from "@dxos/compute-hyperformula";
19
+ import { singleValueFacet as singleValueFacet2 } from "@dxos/ui-editor";
20
+ import { mx } from "@dxos/ui-theme";
21
+ var highlightStyles = HighlightStyle.define([
22
+ // Function.
23
+ {
24
+ tag: tags.name,
25
+ class: "text-accent-text"
26
+ },
27
+ // Range.
28
+ {
29
+ tag: tags.tagName,
30
+ class: "text-pink-text"
31
+ },
32
+ // Values.
33
+ {
34
+ tag: tags.number,
35
+ class: "text-teal-text"
36
+ },
37
+ {
38
+ tag: tags.bool,
39
+ class: "text-teal-text"
40
+ },
41
+ {
42
+ tag: tags.string,
43
+ class: "text-teal-text"
44
+ },
45
+ // Error.
46
+ {
47
+ tag: tags.invalid,
48
+ class: "text-un-accent"
49
+ }
50
+ ]);
51
+ var languageFacet = singleValueFacet2();
52
+ var sheetExtension = ({ debug, functions = [] }) => {
53
+ const { extension, language } = spreadsheet({
54
+ idiom: "en-US",
55
+ decimalSeparator: "."
56
+ });
57
+ const createCompletion = (name) => {
58
+ const { section = "Custom", description, syntax } = functions.find((value) => value.name === name) ?? {};
59
+ return {
60
+ section,
61
+ label: name,
62
+ info: () => {
63
+ if (!description && !syntax) {
64
+ return null;
65
+ }
66
+ const root = document.createElement("div");
67
+ root.className = "flex flex-col gap-2 text-sm";
68
+ const title = document.createElement("h2");
69
+ title.innerText = name;
70
+ title.className = "text-lg font-mono text-accent-text";
71
+ root.appendChild(title);
72
+ if (description) {
73
+ const info = document.createElement("p");
74
+ info.innerText = description;
75
+ info.className = "text-subdued";
76
+ root.appendChild(info);
77
+ }
78
+ if (syntax) {
79
+ const detail = document.createElement("pre");
80
+ detail.innerText = syntax;
81
+ detail.className = "whitespace-pre-wrap text-green-text";
82
+ root.appendChild(detail);
83
+ }
84
+ return root;
85
+ },
86
+ apply: (view, completion, from, to) => {
87
+ const insertParens = to === view.state.doc.toString().length;
88
+ view.dispatch(view.state.update({
89
+ changes: {
90
+ from,
91
+ to,
92
+ insert: completion.label + (insertParens ? "()" : "")
93
+ },
94
+ selection: {
95
+ anchor: from + completion.label.length + 1
96
+ }
97
+ }));
98
+ }
99
+ };
100
+ };
101
+ return [
102
+ extension,
103
+ languageFacet.of(language),
104
+ language.data.of({
105
+ autocomplete: (context) => {
106
+ if (context.state.doc.toString()[0] !== "=") {
107
+ return null;
108
+ }
109
+ const match = context.matchBefore(/\w*/);
110
+ if (!match || match.from === match.to) {
111
+ return null;
112
+ }
113
+ const text = match.text.toUpperCase();
114
+ if (!context.explicit && match.text.length < 2) {
115
+ return null;
116
+ }
117
+ return {
118
+ from: match.from,
119
+ options: functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? []
120
+ };
121
+ }
122
+ }),
123
+ syntaxHighlighting(highlightStyles),
124
+ autocompletion({
125
+ aboveCursor: false,
126
+ defaultKeymap: true,
127
+ activateOnTyping: true,
128
+ closeOnBlur: !debug,
129
+ icons: false,
130
+ tooltipClass: () => mx("!-left-[1px] !top-[33px] !-m-0 border border-h-0! [&>ul]:!min-w-[198px]", "[&>ul>li[aria-selected]]:!bg-accent-surface", "border-separator")
131
+ }),
132
+ keymap.of([
133
+ {
134
+ key: "Tab",
135
+ run: (view) => {
136
+ return completionStatus(view.state) === "active" ? acceptCompletion(view) : startCompletion(view);
137
+ }
138
+ }
139
+ ])
140
+ ];
141
+ };
142
+ var rangeExtension = ({ onInit, onStateChange }) => {
143
+ let view;
144
+ let activeRange;
145
+ const notifier = {
146
+ setRange: (range) => {
147
+ if (activeRange) {
148
+ view.dispatch(view.state.update({
149
+ changes: {
150
+ ...activeRange,
151
+ insert: range.toString()
152
+ },
153
+ selection: {
154
+ anchor: activeRange.from + range.length
155
+ }
156
+ }));
157
+ }
158
+ view.focus();
159
+ }
160
+ };
161
+ return ViewPlugin2.fromClass(class {
162
+ constructor(_view) {
163
+ view = _view;
164
+ onInit?.(notifier);
165
+ }
166
+ update(view2) {
167
+ const { anchor } = view2.state.selection.ranges[0];
168
+ activeRange = void 0;
169
+ const language = view2.state.facet(languageFacet);
170
+ const { topNode } = language.parser.parse(view2.state.doc.toString());
171
+ visitTree(topNode, ({ type, from, to }) => {
172
+ if (from <= anchor && to >= anchor) {
173
+ switch (type.name) {
174
+ case "Function":
175
+ activeRange = {
176
+ from: to,
177
+ to
178
+ };
179
+ break;
180
+ case "CloseParen":
181
+ activeRange = {
182
+ from,
183
+ to: from
184
+ };
185
+ break;
186
+ case "RangeToken":
187
+ case "CellToken":
188
+ activeRange = {
189
+ from,
190
+ to
191
+ };
192
+ return true;
193
+ }
194
+ }
195
+ return false;
196
+ });
197
+ if (!activeRange && view2.state.doc.toString()[0] === "=") {
198
+ const str = view2.state.doc.sliceString(1);
199
+ if (RANGE_NOTATION.test(str)) {
200
+ activeRange = {
201
+ from: 1,
202
+ to: str.length + 1
203
+ };
204
+ } else {
205
+ activeRange = {
206
+ from: str.length + 1,
207
+ to: str.length + 1
208
+ };
209
+ }
210
+ }
211
+ onStateChange?.({
212
+ activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
213
+ });
214
+ }
215
+ });
216
+ };
217
+ var visitTree = (node, callback) => {
218
+ if (callback(node)) {
219
+ return true;
220
+ }
221
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) {
222
+ if (visitTree(child, callback)) {
223
+ return true;
224
+ }
225
+ }
226
+ return false;
227
+ };
228
+
229
+ export {
230
+ computeGraphFacet,
231
+ sheetExtension,
232
+ rangeExtension
233
+ };
234
+ //# sourceMappingURL=chunk-4SBAIU6F.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-hyperformula';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/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-hyperformula';\nimport { RANGE_NOTATION } from '@dxos/compute-hyperformula';\nimport { singleValueFacet } from '@dxos/ui-editor';\nimport { mx } from '@dxos/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-accent-text',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pink-text',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-teal-text',\n },\n {\n tag: tags.bool,\n class: 'text-teal-text',\n },\n {\n tag: tags.string,\n class: 'text-teal-text',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-un-accent',\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({\n idiom: 'en-US',\n decimalSeparator: '.',\n });\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-accent-text';\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-green-text';\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-h-0! [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accent-surface',\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", "_options", "computeNode", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "ViewPlugin", "keymap", "tags", "spreadsheet", "RANGE_NOTATION", "singleValueFacet", "mx", "highlightStyles", "define", "tag", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "sheetExtension", "debug", "functions", "extension", "language", "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", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "key", "run", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "fromClass", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "test", "node", "callback", "child", "firstChild", "nextSibling"]
7
+ }
@@ -0,0 +1,8 @@
1
+ // src/operations/index.ts
2
+ import { OperationHandlerSet } from "@dxos/compute";
3
+ var SheetOperationHandlerSet = OperationHandlerSet.lazy(() => import("./drop-axis-G6UOXG54.mjs"), () => import("./insert-axis-ZFFNG22G.mjs"), () => import("./restore-axis-44DM6N54.mjs"), () => import("./scroll-to-anchor-QPOGMAQG.mjs"));
4
+
5
+ export {
6
+ SheetOperationHandlerSet
7
+ };
8
+ //# sourceMappingURL=chunk-CGWDLWFZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const SheetOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./drop-axis'),\n () => import('./insert-axis'),\n () => import('./restore-axis'),\n () => import('./scroll-to-anchor'),\n);\n"],
5
+ "mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,2BAA2BD,oBAAoBE,KAC1D,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,4BAAA,GACb,MAAM,OAAO,6BAAA,GACb,MAAM,OAAO,iCAAA,CAAA;",
6
+ "names": ["OperationHandlerSet", "SheetOperationHandlerSet", "lazy"]
7
+ }
@@ -2,14 +2,41 @@ import {
2
2
  __export
3
3
  } from "./chunk-J5LGTIGS.mjs";
4
4
 
5
- // src/types/capabilities.ts
6
- import { Capability } from "@dxos/app-framework";
7
- import { meta } from "#meta";
8
- (function(SheetCapabilities2) {
9
- SheetCapabilities2.ComputeGraphRegistry = Capability.make(`${meta.id}.capability.compute-graph-registry`);
10
- SheetCapabilities2.GridInstances = Capability.make(`${meta.id}.capability.grid-instances`);
11
- })(SheetCapabilities || (SheetCapabilities = {}));
12
- var SheetCapabilities;
5
+ // src/types/sheet-range-types.ts
6
+ var alignKey = "alignment";
7
+ var commentKey = "comment";
8
+ var styleKey = "style";
9
+ var cellClassNameForRange = ({ key, value }) => {
10
+ switch (key) {
11
+ case alignKey:
12
+ switch (value) {
13
+ case "start":
14
+ return "text-start";
15
+ case "center":
16
+ return "text-center";
17
+ case "end":
18
+ return "text-end";
19
+ default:
20
+ return void 0;
21
+ }
22
+ case commentKey:
23
+ return "bg-grid-comment";
24
+ case styleKey:
25
+ switch (value) {
26
+ case "highlight":
27
+ return "bg-grid-highlight!";
28
+ case "softwrap":
29
+ return "whitespace-normal!";
30
+ default:
31
+ return void 0;
32
+ }
33
+ default:
34
+ return void 0;
35
+ }
36
+ };
37
+
38
+ // src/types/types.ts
39
+ import * as Schema2 from "effect/Schema";
13
40
 
14
41
  // src/types/Sheet.ts
15
42
  var Sheet_exports = {};
@@ -185,41 +212,7 @@ var make = ({ name, cells = {}, ...size } = {}) => {
185
212
  return sheet;
186
213
  };
187
214
 
188
- // src/types/sheet-range-types.ts
189
- var alignKey = "alignment";
190
- var commentKey = "comment";
191
- var styleKey = "style";
192
- var cellClassNameForRange = ({ key, value }) => {
193
- switch (key) {
194
- case alignKey:
195
- switch (value) {
196
- case "start":
197
- return "text-start";
198
- case "center":
199
- return "text-center";
200
- case "end":
201
- return "text-end";
202
- default:
203
- return void 0;
204
- }
205
- case commentKey:
206
- return "bg-grid-comment";
207
- case styleKey:
208
- switch (value) {
209
- case "highlight":
210
- return "bg-grid-highlight!";
211
- case "softwrap":
212
- return "whitespace-normal!";
213
- default:
214
- return void 0;
215
- }
216
- default:
217
- return void 0;
218
- }
219
- };
220
-
221
215
  // src/types/types.ts
222
- import * as Schema2 from "effect/Schema";
223
216
  var ActionAxis = Schema2.Union(Schema2.Literal("row"), Schema2.Literal("col"));
224
217
  (function(SheetAction2) {
225
218
  SheetAction2.RestoreAxis = Schema2.Struct({
@@ -232,8 +225,128 @@ var ActionAxis = Schema2.Union(Schema2.Literal("row"), Schema2.Literal("col"));
232
225
  })(SheetAction || (SheetAction = {}));
233
226
  var SheetAction;
234
227
 
228
+ // src/types/SheetCapabilities.ts
229
+ var SheetCapabilities_exports = {};
230
+ __export(SheetCapabilities_exports, {
231
+ ComputeGraphRegistry: () => ComputeGraphRegistry,
232
+ GridInstances: () => GridInstances
233
+ });
234
+ import { Capability } from "@dxos/app-framework";
235
+ import { meta } from "#meta";
236
+ var ComputeGraphRegistry = Capability.make(`${meta.id}.capability.compute-graph-registry`);
237
+ var GridInstances = Capability.make(`${meta.id}.capability.grid-instances`);
238
+
239
+ // src/types/SheetOperation.ts
240
+ var SheetOperation_exports = {};
241
+ __export(SheetOperation_exports, {
242
+ DropAxis: () => DropAxis,
243
+ DropAxisOutput: () => DropAxisOutput,
244
+ InsertAxis: () => InsertAxis,
245
+ RestoreAxis: () => RestoreAxis,
246
+ ScrollToAnchor: () => ScrollToAnchor
247
+ });
248
+ import * as Schema3 from "effect/Schema";
249
+ import { Capability as Capability2 } from "@dxos/app-framework";
250
+ import { Operation } from "@dxos/compute";
251
+ import { meta as meta2 } from "#meta";
252
+ var SHEET_OPERATION = `${meta2.id}.operation`;
253
+ var Axis = Schema3.Union(Schema3.Literal("row"), Schema3.Literal("col"));
254
+ var InsertAxis = Operation.make({
255
+ meta: {
256
+ key: `${SHEET_OPERATION}.axis-insert`,
257
+ name: "Insert Axis"
258
+ },
259
+ input: Schema3.Struct({
260
+ model: Schema3.Any,
261
+ axis: Axis,
262
+ index: Schema3.Number,
263
+ count: Schema3.optional(Schema3.Number)
264
+ }),
265
+ output: Schema3.Void
266
+ });
267
+ var DropAxisOutput = Schema3.Struct({
268
+ axis: Axis.annotations({
269
+ description: "The axis type (row or col)."
270
+ }),
271
+ axisIndex: Schema3.String.annotations({
272
+ description: "The dropped axis index."
273
+ }),
274
+ index: Schema3.Number.annotations({
275
+ description: "The position the axis was at."
276
+ }),
277
+ axisMeta: Schema3.Any.annotations({
278
+ description: "The row/column metadata."
279
+ }),
280
+ values: Schema3.Array(Schema3.Any).annotations({
281
+ description: "The cell values that were dropped."
282
+ })
283
+ });
284
+ var DropAxis = Operation.make({
285
+ meta: {
286
+ key: `${SHEET_OPERATION}.axis-drop`,
287
+ name: "Drop Axis"
288
+ },
289
+ input: Schema3.Struct({
290
+ model: Schema3.Any,
291
+ axis: Axis,
292
+ axisIndex: Schema3.String
293
+ }),
294
+ output: DropAxisOutput
295
+ });
296
+ var ScrollToAnchor = Operation.make({
297
+ meta: {
298
+ key: `${SHEET_OPERATION}.scroll-to-anchor`,
299
+ name: "Scroll To Anchor"
300
+ },
301
+ services: [
302
+ Capability2.Service
303
+ ],
304
+ input: Schema3.Struct({
305
+ subject: Schema3.String.annotations({
306
+ description: "Attendable ID of the sheet."
307
+ }),
308
+ cursor: Schema3.String.annotations({
309
+ description: "Cell range coordinates."
310
+ }),
311
+ ref: Schema3.optional(Schema3.Any.annotations({
312
+ description: "Active refs for highlighting."
313
+ }))
314
+ }),
315
+ output: Schema3.Void
316
+ });
317
+ var RestoreAxis = Operation.make({
318
+ meta: {
319
+ key: `${SHEET_OPERATION}.restore-axis`,
320
+ name: "Restore Axis"
321
+ },
322
+ input: Schema3.Struct({
323
+ model: Schema3.Any.annotations({
324
+ description: "The sheet model."
325
+ }),
326
+ axis: Axis.annotations({
327
+ description: "The axis type (row or col)."
328
+ }),
329
+ axisIndex: Schema3.String.annotations({
330
+ description: "The axis index to restore."
331
+ }),
332
+ index: Schema3.Number.annotations({
333
+ description: "The position to restore at."
334
+ }),
335
+ axisMeta: Schema3.Any.annotations({
336
+ description: "The row/column metadata."
337
+ }),
338
+ values: Schema3.Array(Schema3.Any).annotations({
339
+ description: "The cell values to restore."
340
+ })
341
+ }),
342
+ output: Schema3.Void
343
+ });
344
+
235
345
  export {
236
- SheetCapabilities,
346
+ alignKey,
347
+ commentKey,
348
+ styleKey,
349
+ cellClassNameForRange,
237
350
  MAX_ROWS,
238
351
  MAX_COLS,
239
352
  DEFAULT_ROWS,
@@ -253,10 +366,8 @@ export {
253
366
  mapFormulaRefsToIndices,
254
367
  mapFormulaIndicesToRefs,
255
368
  Sheet_exports,
256
- alignKey,
257
- commentKey,
258
- styleKey,
259
- cellClassNameForRange,
260
- SheetAction
369
+ SheetAction,
370
+ SheetCapabilities_exports,
371
+ SheetOperation_exports
261
372
  };
262
- //# sourceMappingURL=chunk-SVGX3MWY.mjs.map
373
+ //# sourceMappingURL=chunk-KC2SMDNF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/sheet-range-types.ts", "../../../src/types/types.ts", "../../../src/types/Sheet.ts", "../../../src/types/util.ts", "../../../src/types/SheetCapabilities.ts", "../../../src/types/SheetOperation.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui';\n\nimport { type Sheet } from '../types';\n\nexport const alignKey = 'alignment';\nexport type AlignKey = typeof alignKey;\nexport type AlignValue = 'start' | 'center' | 'end';\n\nexport const commentKey = 'comment';\nexport type CommentKey = typeof commentKey;\nexport type CommentValue = string;\n\nexport const styleKey = 'style';\nexport type StyleKey = typeof styleKey;\nexport type StyleValue = 'highlight' | 'softwrap';\n\n// TODO(burdon): Reconcile with plugin-table.\nexport const cellClassNameForRange = ({ key, value }: Sheet.Sheet['ranges'][number]): ClassNameValue => {\n switch (key) {\n case alignKey:\n switch (value) {\n case 'start':\n return 'text-start';\n case 'center':\n return 'text-center';\n case 'end':\n return 'text-end';\n default:\n return undefined;\n }\n\n case commentKey:\n return 'bg-grid-comment';\n\n case styleKey:\n switch (value) {\n case 'highlight':\n return 'bg-grid-highlight!';\n case 'softwrap':\n return 'whitespace-normal!';\n default:\n return undefined;\n }\n\n default:\n return undefined;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Sheet from './Sheet';\n\n// TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.\nconst ActionAxis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));\n\nexport namespace SheetAction {\n export const RestoreAxis = Schema.Struct({\n axis: ActionAxis,\n axisIndex: Schema.String,\n index: Schema.Number,\n axisMeta: Sheet.RowColumnMeta,\n values: Schema.Array(Schema.Any),\n });\n\n export type RestoreAxis = Schema.Schema.Type<typeof RestoreAxis>;\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { addressFromA1Notation, isFormula } from '@dxos/compute-hyperformula';\nimport { Annotation, Obj, Type } from '@dxos/echo';\nimport { FormInputAnnotation } from '@dxos/echo/internal';\n\nimport { addressToIndex, initialize, mapFormulaRefsToIndices } from './util';\n\nexport type SheetSize = {\n rows: number;\n columns: number;\n};\n\nexport const CellValue = Schema.Struct({\n // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.\n // Consider import/export; natural access for other plugins. Special handling for currency (precision).\n // TODO(burdon): Automerge (long string) or short string or number.\n value: Schema.Any,\n});\n\nexport type CellValue = Schema.Schema.Type<typeof CellValue>;\n\n// TODO(burdon): IMPORTANT: Reconcile with Field definition.\nexport const Range = Schema.Struct({\n range: Schema.String,\n key: Schema.String,\n value: Schema.String,\n});\n\nexport type Range = Schema.Schema.Type<typeof Range>;\n\n// TODO(burdon): Visibility, locked, frozen, etc.\nexport const RowColumnMeta = Schema.Struct({\n size: Schema.optional(Schema.Number),\n});\n\n// TODO(burdon): Reconcile col/column (across packages).\n// TODO(burdon): Index to all updates when rows/columns are inserted/deleted.\nexport const Sheet = Schema.Struct({\n name: Schema.optional(Schema.String),\n\n // Sparse map of cells referenced by index.\n cells: Schema.Record({ key: Schema.String, value: CellValue }).pipe(FormInputAnnotation.set(false)),\n\n // Ordered row indices.\n rows: Schema.Array(Schema.String).pipe(FormInputAnnotation.set(false)),\n\n // Ordered column indices.\n columns: Schema.Array(Schema.String).pipe(FormInputAnnotation.set(false)),\n\n // Row metadata referenced by index.\n rowMeta: Schema.Record({ key: Schema.String, value: RowColumnMeta }).pipe(FormInputAnnotation.set(false)),\n\n // Column metadata referenced by index.\n columnMeta: Schema.Record({ key: Schema.String, value: RowColumnMeta }).pipe(FormInputAnnotation.set(false)),\n\n // Cell formatting referenced by indexed range.\n ranges: Schema.Array(Range).pipe(FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.sheet',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--grid-nine--regular',\n hue: 'indigo',\n }),\n);\n\nexport interface Sheet extends Schema.Schema.Type<typeof Sheet> {}\n\nexport type SheetProps = {\n name?: string;\n cells?: Record<string, CellValue>;\n} & Partial<SheetSize>;\n\nexport const make = ({ name, cells = {}, ...size }: SheetProps = {}) => {\n const sheet = Obj.make(Sheet, { name, cells: {}, rows: [], columns: [], rowMeta: {}, columnMeta: {}, ranges: [] });\n\n // Initialize and set cells within Obj.update to satisfy change context requirements.\n Obj.update(sheet, (sheet) => {\n initialize(sheet, size);\n\n if (cells) {\n Object.entries(cells).forEach(([key, { value }]) => {\n const idx = addressToIndex(sheet, addressFromA1Notation(key));\n if (isFormula(value)) {\n value = mapFormulaRefsToIndices(sheet, value);\n }\n\n sheet.cells[idx] = { value };\n });\n }\n });\n\n return sheet;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type CellAddress,\n type CellRange,\n type CompleteCellRange,\n addressFromA1Notation,\n addressToA1Notation,\n isFormula,\n} from '@dxos/compute-hyperformula';\nimport { randomBytes } from '@dxos/crypto';\nimport { type Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\n\nimport { type Sheet } from '../types';\n\nexport const MAX_ROWS = 500;\nexport const MAX_COLS = 676; // 26^2;\n\nexport const DEFAULT_ROWS = 50;\nexport const DEFAULT_COLS = 26;\n\n// TODO(burdon): Factor out from dxos/protocols to new common package.\nexport class ApiError extends Error {}\n\nexport class ReadonlyException extends ApiError {}\n\nexport class RangeException extends ApiError {\n constructor(n: number) {\n super();\n }\n}\n\n/**\n * With a string length of 8, the chance of a collision is 0.02% for a sheet with 10,000 strings.\n */\nexport const createIndex = (length = 8): string => {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charactersLength = characters.length;\n const randomBuffer = randomBytes(length);\n return Array.from(randomBuffer, (byte) => characters[byte % charactersLength]).join('');\n};\n\nexport const createIndices = (length: number): string[] => Array.from({ length }).map(() => createIndex());\n\nexport const insertIndices = (indices: string[], i: number, n: number, max: number) => {\n if (i + n > max) {\n throw new RangeException(i + n);\n }\n\n const idx = createIndices(n);\n indices.splice(i, 0, ...idx);\n return idx;\n};\n\nexport const initialize = (\n sheet: Obj.Mutable<Sheet.Sheet>,\n { rows = DEFAULT_ROWS, columns = DEFAULT_COLS }: Partial<Sheet.SheetSize> = {},\n) => {\n if (!sheet.rows.length) {\n insertIndices(sheet.rows, 0, rows, MAX_ROWS);\n }\n if (!sheet.columns.length) {\n insertIndices(sheet.columns, 0, columns, MAX_COLS);\n }\n};\n\n/**\n * E.g., \"A1\" => \"CA2@CB3\".\n */\nexport const addressToIndex = (sheet: Sheet.Sheet, cell: CellAddress): string => {\n return `${sheet.columns[cell.col]}@${sheet.rows[cell.row]}`;\n};\n\n/**\n * E.g., \"CA2@CB3\" => \"A1\".\n */\nexport const addressFromIndex = (sheet: Sheet.Sheet, idx: string): CellAddress => {\n const [column, row] = idx.split('@');\n return {\n col: sheet.columns.indexOf(column),\n row: sheet.rows.indexOf(row),\n };\n};\n\n/**\n * E.g., \"A1:B2\" => \"CA2@CB3:CC4@CD5\".\n */\nexport const rangeToIndex = (sheet: Sheet.Sheet, range: CellRange): string => {\n return [range.from, range.to ?? range.from].map((cell) => addressToIndex(sheet, cell)).join(':');\n};\n\n/**\n * E.g., \"CA2@CB3:CC4@CD5\" => \"A1:B2\".\n */\nexport const rangeFromIndex = (sheet: Sheet.Sheet, idx: string): CompleteCellRange => {\n const [from, to] = idx.split(':').map((index) => addressFromIndex(sheet, index));\n return { from, to };\n};\n\n/**\n * Compares the positions of two cell indexes in a sheet.\n * Sorts primarily by row, then by column if rows are equal.\n */\nexport const compareIndexPositions = (sheet: Sheet.Sheet, indexA: string, indexB: string): number => {\n const { row: rowA, col: columnA } = addressFromIndex(sheet, indexA);\n const { row: rowB, col: columnB } = addressFromIndex(sheet, indexB);\n\n // Sort by row first, then by column.\n if (rowA !== rowB) {\n return rowA - rowB;\n } else {\n return columnA - columnB;\n }\n};\n\n// TODO(burdon): Tests.\n\n/**\n * Map from A1 notation to indices.\n */\nexport const mapFormulaRefsToIndices = (sheet: Sheet.Sheet, formula: string): string => {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {\n return addressToIndex(sheet, addressFromA1Notation(match));\n });\n};\n\n/**\n * Map from indices to A1 notation.\n */\nexport const mapFormulaIndicesToRefs = (sheet: Sheet.Sheet, formula: string): string => {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(sheet, idx));\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { Capability } from '@dxos/app-framework';\nimport { type ComputeGraphRegistry as ComputeGraphRegistryType } from '@dxos/compute-hyperformula';\nimport { type DxGridElement, type GridContentProps } from '@dxos/react-ui-grid';\n\nimport { meta } from '#meta';\n\nexport type GridEntry = { grid: DxGridElement; setActiveRefs: (refs: GridContentProps['activeRefs']) => void };\n\nexport type GridRegistry = {\n register: (attendableId: string, grid: DxGridElement, setActiveRefs: GridEntry['setActiveRefs']) => void;\n unregister: (attendableId: string) => void;\n get: (attendableId: string) => GridEntry | undefined;\n};\n\nexport const ComputeGraphRegistry = Capability.make<ComputeGraphRegistryType>(\n `${meta.id}.capability.compute-graph-registry`,\n);\n\n/** Registry of active grid instances keyed by attendable ID. */\nexport const GridInstances = Capability.make<GridRegistry>(`${meta.id}.capability.grid-instances`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { meta } from '#meta';\n\nconst SHEET_OPERATION = `${meta.id}.operation`;\n\n// TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.\nconst Axis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));\n\nexport const InsertAxis = Operation.make({\n meta: { key: `${SHEET_OPERATION}.axis-insert`, name: 'Insert Axis' },\n input: Schema.Struct({\n model: Schema.Any,\n axis: Axis,\n index: Schema.Number,\n count: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n});\n\nexport const DropAxisOutput = Schema.Struct({\n axis: Axis.annotations({ description: 'The axis type (row or col).' }),\n axisIndex: Schema.String.annotations({ description: 'The dropped axis index.' }),\n index: Schema.Number.annotations({ description: 'The position the axis was at.' }),\n axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),\n values: Schema.Array(Schema.Any).annotations({ description: 'The cell values that were dropped.' }),\n});\n\nexport type DropAxisOutput = Schema.Schema.Type<typeof DropAxisOutput>;\n\nexport const DropAxis = Operation.make({\n meta: { key: `${SHEET_OPERATION}.axis-drop`, name: 'Drop Axis' },\n input: Schema.Struct({\n model: Schema.Any,\n axis: Axis,\n axisIndex: Schema.String,\n }),\n output: DropAxisOutput,\n});\n\nexport const ScrollToAnchor = Operation.make({\n meta: { key: `${SHEET_OPERATION}.scroll-to-anchor`, name: 'Scroll To Anchor' },\n services: [Capability.Service],\n input: Schema.Struct({\n subject: Schema.String.annotations({ description: 'Attendable ID of the sheet.' }),\n cursor: Schema.String.annotations({ description: 'Cell range coordinates.' }),\n ref: Schema.optional(Schema.Any.annotations({ description: 'Active refs for highlighting.' })),\n }),\n output: Schema.Void,\n});\n\n/**\n * Restore a dropped axis (inverse of DropAxis).\n */\nexport const RestoreAxis = Operation.make({\n meta: { key: `${SHEET_OPERATION}.restore-axis`, name: 'Restore Axis' },\n input: Schema.Struct({\n model: Schema.Any.annotations({ description: 'The sheet model.' }),\n axis: Axis.annotations({ description: 'The axis type (row or col).' }),\n axisIndex: Schema.String.annotations({ description: 'The axis index to restore.' }),\n index: Schema.Number.annotations({ description: 'The position to restore at.' }),\n axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),\n values: Schema.Array(Schema.Any).annotations({ description: 'The cell values to restore.' }),\n }),\n output: Schema.Void,\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["alignKey", "commentKey", "styleKey", "cellClassNameForRange", "key", "value", "undefined", "Schema", "Schema", "addressFromA1Notation", "isFormula", "Annotation", "Obj", "Type", "FormInputAnnotation", "addressFromA1Notation", "addressToA1Notation", "isFormula", "randomBytes", "invariant", "MAX_ROWS", "DEFAULT_ROWS", "DEFAULT_COLS", "ApiError", "ReadonlyException", "RangeException", "charactersLength", "characters", "length", "randomBuffer", "byte", "createIndices", "Array", "map", "createIndex", "i", "n", "idx", "indices", "insertIndices", "sheet", "col", "columns", "indexOf", "column", "row", "range", "from", "cell", "to", "rowB", "addressFromIndex", "indexB", "rowA", "columnA", "formula", "match", "addressToIndex", "CellValue", "Struct", "value", "Any", "Range", "range", "String", "key", "RowColumnMeta", "size", "optional", "Number", "Sheet", "name", "cells", "Record", "pipe", "FormInputAnnotation", "set", "rows", "Array", "columns", "rowMeta", "columnMeta", "ranges", "Type", "object", "typename", "version", "Annotation", "IconAnnotation", "icon", "hue", "make", "sheet", "Obj", "update", "initialize", "Object", "entries", "forEach", "idx", "addressToIndex", "addressFromA1Notation", "isFormula", "mapFormulaRefsToIndices", "ActionAxis", "Union", "Literal", "SheetAction", "RestoreAxis", "Struct", "axis", "axisIndex", "String", "index", "Number", "axisMeta", "RowColumnMeta", "values", "Array", "Any", "Capability", "meta", "ComputeGraphRegistry", "make", "id", "GridInstances", "Schema", "Capability", "Operation", "meta", "SHEET_OPERATION", "id", "Axis", "Union", "Literal", "InsertAxis", "make", "key", "name", "input", "Struct", "model", "Any", "axis", "index", "Number", "count", "optional", "output", "Void", "DropAxisOutput", "annotations", "description", "axisIndex", "String", "axisMeta", "values", "Array", "DropAxis", "ScrollToAnchor", "services", "Service", "subject", "cursor", "ref", "RestoreAxis"]
7
+ }