@dxos/plugin-sheet 0.8.4-main.f9ba587 → 0.8.4-staging.60fe92afc8

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 (395) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +359 -0
  3. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs +46 -0
  4. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs.map +7 -0
  5. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs +33 -0
  6. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs.map +7 -0
  7. package/dist/lib/neutral/SheetPlugin.mjs +63 -0
  8. package/dist/lib/neutral/SheetPlugin.mjs.map +7 -0
  9. package/dist/lib/neutral/SheetPlugin.node.mjs +27 -0
  10. package/dist/lib/neutral/SheetPlugin.node.mjs.map +7 -0
  11. package/dist/lib/neutral/SheetPlugin.workerd.mjs +21 -0
  12. package/dist/lib/neutral/SheetPlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/anchor-sort-2POWTKTD.mjs +22 -0
  14. package/dist/lib/neutral/anchor-sort-2POWTKTD.mjs.map +7 -0
  15. package/dist/lib/neutral/app-graph-builder-2QP6GYB2.mjs +67 -0
  16. package/dist/lib/neutral/app-graph-builder-2QP6GYB2.mjs.map +7 -0
  17. package/dist/lib/neutral/capabilities/index.mjs +29 -0
  18. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  19. package/dist/lib/neutral/chunk-BGR7FVNF.mjs +8 -0
  20. package/dist/lib/neutral/chunk-BGR7FVNF.mjs.map +7 -0
  21. package/dist/lib/{browser/chunk-7HQX4NQP.mjs → neutral/chunk-ERHMBRSU.mjs} +16 -16
  22. package/dist/lib/neutral/chunk-ERHMBRSU.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-FQHTXKMF.mjs +34 -0
  24. package/dist/lib/neutral/chunk-FQHTXKMF.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-HEN74ZWI.mjs +83 -0
  26. package/dist/lib/neutral/chunk-HEN74ZWI.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  28. package/dist/lib/neutral/chunk-KUWATEHB.mjs +374 -0
  29. package/dist/lib/neutral/chunk-KUWATEHB.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-S2UNH6VD.mjs +10 -0
  31. package/dist/lib/neutral/chunk-S2UNH6VD.mjs.map +7 -0
  32. package/dist/lib/neutral/comment-config-WGXXX5FG.mjs +22 -0
  33. package/dist/lib/neutral/comment-config-WGXXX5FG.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +1552 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs +26 -0
  37. package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs.map +7 -0
  38. package/dist/lib/neutral/containers/index.mjs +11 -0
  39. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  40. package/dist/lib/neutral/create-object-TDQQ24IB.mjs +31 -0
  41. package/dist/lib/neutral/create-object-TDQQ24IB.mjs.map +7 -0
  42. package/dist/lib/neutral/drop-axis-WSWFOLQN.mjs +23 -0
  43. package/dist/lib/neutral/drop-axis-WSWFOLQN.mjs.map +7 -0
  44. package/dist/lib/{node-esm/types → neutral}/index.mjs +22 -13
  45. package/dist/lib/neutral/insert-axis-6UQJTIWC.mjs +16 -0
  46. package/dist/lib/neutral/insert-axis-6UQJTIWC.mjs.map +7 -0
  47. package/dist/lib/neutral/markdown-extension-HTJDICGT.mjs +28 -0
  48. package/dist/lib/neutral/markdown-extension-HTJDICGT.mjs.map +7 -0
  49. package/dist/lib/neutral/meta.json +1 -0
  50. package/dist/lib/neutral/meta.mjs +8 -0
  51. package/dist/lib/neutral/meta.mjs.map +7 -0
  52. package/dist/lib/neutral/navigation-resolver-FXEZYO7G.mjs +14 -0
  53. package/dist/lib/neutral/navigation-resolver-FXEZYO7G.mjs.map +7 -0
  54. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs +13 -0
  55. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs.map +7 -0
  56. package/dist/lib/neutral/operations/index.mjs +8 -0
  57. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  58. package/dist/lib/neutral/plugin.mjs +16 -0
  59. package/dist/lib/neutral/plugin.mjs.map +7 -0
  60. package/dist/lib/neutral/react-surface-4H3PC4WG.mjs +44 -0
  61. package/dist/lib/neutral/react-surface-4H3PC4WG.mjs.map +7 -0
  62. package/dist/lib/neutral/restore-axis-AMMVTPS3.mjs +16 -0
  63. package/dist/lib/neutral/restore-axis-AMMVTPS3.mjs.map +7 -0
  64. package/dist/lib/neutral/scroll-to-anchor-FK2CXCQR.mjs +33 -0
  65. package/dist/lib/neutral/scroll-to-anchor-FK2CXCQR.mjs.map +7 -0
  66. package/dist/lib/neutral/state-HPA27MX2.mjs +29 -0
  67. package/dist/lib/neutral/state-HPA27MX2.mjs.map +7 -0
  68. package/dist/lib/neutral/testing/index.mjs +103 -0
  69. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  70. package/dist/lib/neutral/translations.mjs +56 -0
  71. package/dist/lib/neutral/translations.mjs.map +7 -0
  72. package/dist/lib/{browser → neutral}/types/index.mjs +8 -12
  73. package/dist/lib/neutral/types/index.mjs.map +7 -0
  74. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs +31 -0
  75. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs.map +7 -0
  76. package/dist/types/src/SheetPlugin.d.ts +3 -1
  77. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  78. package/dist/types/src/SheetPlugin.node.d.ts +4 -0
  79. package/dist/types/src/SheetPlugin.node.d.ts.map +1 -0
  80. package/dist/types/src/SheetPlugin.test.d.ts +2 -0
  81. package/dist/types/src/SheetPlugin.test.d.ts.map +1 -0
  82. package/dist/types/src/SheetPlugin.workerd.d.ts +4 -0
  83. package/dist/types/src/SheetPlugin.workerd.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  85. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  87. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  88. package/dist/types/src/capabilities/comment-config.d.ts +6 -0
  89. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/compute-graph-registry.d.ts +9 -2
  91. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  93. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/index.d.ts +19 -11
  95. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/markdown-extension.d.ts +5 -0
  97. package/dist/types/src/capabilities/markdown-extension.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/navigation-resolver.d.ts +6 -0
  99. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  101. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  103. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/state.d.ts +6 -0
  105. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  107. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  108. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +1 -1
  109. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  110. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts +9 -4
  111. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/Sheet/Sheet.d.ts +17 -0
  113. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  114. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  115. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  116. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts +16 -0
  117. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts.map +1 -0
  118. package/dist/types/src/components/SheetContent/SheetContent.d.ts +6 -0
  119. package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -0
  120. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +93 -0
  121. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/SheetContent/index.d.ts +2 -0
  123. package/dist/types/src/components/SheetContent/index.d.ts.map +1 -0
  124. package/dist/types/src/components/{GridSheet → SheetContent}/util.d.ts +2 -2
  125. package/dist/types/src/components/SheetContent/util.d.ts.map +1 -0
  126. package/dist/types/src/components/{SheetContext/SheetContext.d.ts → SheetRoot/SheetRoot.d.ts} +9 -7
  127. package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -0
  128. package/dist/types/src/components/SheetRoot/index.d.ts +2 -0
  129. package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -0
  130. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +6 -0
  131. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -0
  132. package/dist/types/src/components/SheetStatusbar/index.d.ts +2 -0
  133. package/dist/types/src/components/SheetStatusbar/index.d.ts.map +1 -0
  134. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +5 -6
  135. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  136. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +92 -4
  137. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/SheetToolbar/align.d.ts +14 -21
  139. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  140. package/dist/types/src/components/SheetToolbar/style.d.ts +14 -20
  141. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  142. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  143. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +1 -4
  145. package/dist/types/src/components/index.d.ts.map +1 -1
  146. package/dist/types/src/containers/RangeList/RangeList.d.ts +7 -0
  147. package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -0
  148. package/dist/types/src/containers/RangeList/index.d.ts +2 -0
  149. package/dist/types/src/containers/RangeList/index.d.ts.map +1 -0
  150. package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts +12 -0
  151. package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts.map +1 -0
  152. package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts +92 -0
  153. package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts.map +1 -0
  154. package/dist/types/src/containers/SheetArticle/index.d.ts +2 -0
  155. package/dist/types/src/containers/SheetArticle/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/index.d.ts +4 -0
  157. package/dist/types/src/containers/index.d.ts.map +1 -0
  158. package/dist/types/src/extensions/compute.d.ts +2 -2
  159. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  160. package/dist/types/src/extensions/compute.stories.d.ts +10 -13
  161. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  162. package/dist/types/src/extensions/editor/index.d.ts +1 -1
  163. package/dist/types/src/extensions/editor/index.d.ts.map +1 -1
  164. package/dist/types/src/extensions/editor/{extension.d.ts → sheet-extension.d.ts} +2 -2
  165. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -0
  166. package/dist/types/src/extensions/editor/sheet-extension.test.d.ts +2 -0
  167. package/dist/types/src/extensions/editor/sheet-extension.test.d.ts.map +1 -0
  168. package/dist/types/src/index.d.ts +3 -2
  169. package/dist/types/src/index.d.ts.map +1 -1
  170. package/dist/types/src/integrations/thread-ranges.d.ts +1 -3
  171. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  172. package/dist/types/src/meta.d.ts +2 -3
  173. package/dist/types/src/meta.d.ts.map +1 -1
  174. package/dist/types/src/model/sheet-model.d.ts +31 -7
  175. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  176. package/dist/types/src/model/testing.d.ts +2 -2
  177. package/dist/types/src/model/testing.d.ts.map +1 -1
  178. package/dist/types/src/model/useSheetModel.d.ts +3 -3
  179. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  180. package/dist/types/src/operations/drop-axis.d.ts +5 -0
  181. package/dist/types/src/operations/drop-axis.d.ts.map +1 -0
  182. package/dist/types/src/operations/index.d.ts +3 -0
  183. package/dist/types/src/operations/index.d.ts.map +1 -0
  184. package/dist/types/src/operations/insert-axis.d.ts +5 -0
  185. package/dist/types/src/operations/insert-axis.d.ts.map +1 -0
  186. package/dist/types/src/operations/restore-axis.d.ts +5 -0
  187. package/dist/types/src/operations/restore-axis.d.ts.map +1 -0
  188. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  189. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  190. package/dist/types/src/paths.d.ts +3 -0
  191. package/dist/types/src/paths.d.ts.map +1 -0
  192. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
  193. package/dist/types/src/playwright/sheet-manager.d.ts +1 -1
  194. package/dist/types/src/playwright/sheet-manager.d.ts.map +1 -1
  195. package/dist/types/src/plugin.d.ts +4 -0
  196. package/dist/types/src/plugin.d.ts.map +1 -0
  197. package/dist/types/src/serializer.d.ts +3 -3
  198. package/dist/types/src/serializer.d.ts.map +1 -1
  199. package/dist/types/src/testing/data.d.ts +2 -2
  200. package/dist/types/src/testing/data.d.ts.map +1 -1
  201. package/dist/types/src/testing/testing.d.ts +28 -4
  202. package/dist/types/src/testing/testing.d.ts.map +1 -1
  203. package/dist/types/src/translations.d.ts +74 -36
  204. package/dist/types/src/translations.d.ts.map +1 -1
  205. package/dist/types/src/types/Sheet.d.ts +75 -0
  206. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  207. package/dist/types/src/types/SheetCapabilities.d.ts +16 -0
  208. package/dist/types/src/types/SheetCapabilities.d.ts.map +1 -0
  209. package/dist/types/src/types/SheetOperation.d.ts +45 -0
  210. package/dist/types/src/types/SheetOperation.d.ts.map +1 -0
  211. package/dist/types/src/types/index.d.ts +3 -1
  212. package/dist/types/src/types/index.d.ts.map +1 -1
  213. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  214. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  215. package/dist/types/src/types/types.d.ts +3 -78
  216. package/dist/types/src/types/types.d.ts.map +1 -1
  217. package/dist/types/src/types/util.d.ts +11 -11
  218. package/dist/types/src/types/util.d.ts.map +1 -1
  219. package/dist/types/tsconfig.tsbuildinfo +1 -1
  220. package/package.json +133 -97
  221. package/src/SheetPlugin.node.ts +21 -0
  222. package/src/SheetPlugin.test.ts +30 -0
  223. package/src/SheetPlugin.tsx +55 -68
  224. package/src/SheetPlugin.workerd.ts +18 -0
  225. package/src/capabilities/anchor-sort.ts +20 -15
  226. package/src/capabilities/app-graph-builder.ts +63 -0
  227. package/src/capabilities/comment-config.ts +28 -0
  228. package/src/capabilities/compute-graph-registry.ts +34 -20
  229. package/src/capabilities/create-object.ts +33 -0
  230. package/src/capabilities/index.ts +22 -8
  231. package/src/capabilities/markdown-extension.ts +31 -0
  232. package/src/capabilities/navigation-resolver.ts +16 -0
  233. package/src/capabilities/operation-handler.ts +16 -0
  234. package/src/capabilities/react-surface.tsx +38 -28
  235. package/src/capabilities/state.ts +29 -0
  236. package/src/capabilities/undo-mappings.ts +30 -0
  237. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +2 -2
  238. package/src/components/ComputeGraph/compute-graph.stories.tsx +38 -29
  239. package/src/components/Sheet/Sheet.tsx +20 -0
  240. package/src/components/Sheet/index.ts +5 -0
  241. package/src/components/SheetContent/SheetCellEditor.stories.tsx +95 -0
  242. package/src/components/SheetContent/SheetContent.stories.tsx +60 -0
  243. package/src/components/{GridSheet/GridSheet.tsx → SheetContent/SheetContent.tsx} +100 -69
  244. package/src/components/{RangeList → SheetContent}/index.ts +1 -1
  245. package/src/components/{GridSheet → SheetContent}/util.ts +23 -16
  246. package/src/components/{SheetContext/SheetContext.tsx → SheetRoot/SheetRoot.tsx} +55 -42
  247. package/src/components/{GridSheet → SheetRoot}/index.ts +1 -1
  248. package/src/components/{FunctionEditor/FunctionEditor.tsx → SheetStatusbar/SheetStatusbar.tsx} +20 -7
  249. package/src/components/{FunctionEditor → SheetStatusbar}/index.ts +1 -1
  250. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +20 -14
  251. package/src/components/SheetToolbar/SheetToolbar.tsx +62 -56
  252. package/src/components/SheetToolbar/align.ts +50 -24
  253. package/src/components/SheetToolbar/style.ts +52 -22
  254. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  255. package/src/components/index.ts +1 -7
  256. package/src/containers/RangeList/RangeList.tsx +65 -0
  257. package/src/containers/RangeList/index.ts +5 -0
  258. package/src/containers/SheetArticle/SheetArticle.stories.tsx +110 -0
  259. package/src/containers/SheetArticle/SheetArticle.tsx +57 -0
  260. package/src/containers/SheetArticle/index.ts +5 -0
  261. package/src/containers/index.ts +8 -0
  262. package/src/extensions/compute.stories.tsx +50 -36
  263. package/src/extensions/compute.ts +4 -5
  264. package/src/extensions/editor/index.ts +1 -1
  265. package/src/extensions/editor/{extension.test.ts → sheet-extension.test.ts} +2 -2
  266. package/src/extensions/editor/{extension.ts → sheet-extension.ts} +18 -15
  267. package/src/index.ts +3 -2
  268. package/src/integrations/thread-ranges.ts +22 -63
  269. package/src/meta.ts +22 -8
  270. package/src/model/sheet-model.test.ts +35 -6
  271. package/src/model/sheet-model.ts +89 -57
  272. package/src/model/testing.ts +5 -5
  273. package/src/model/useSheetModel.ts +4 -3
  274. package/src/operations/drop-axis.ts +26 -0
  275. package/src/operations/index.ts +12 -0
  276. package/src/operations/insert-axis.ts +19 -0
  277. package/src/operations/restore-axis.ts +19 -0
  278. package/src/operations/scroll-to-anchor.ts +30 -0
  279. package/src/paths.ts +11 -0
  280. package/src/playwright/playwright.config.ts +1 -1
  281. package/src/playwright/sheet-manager.ts +1 -1
  282. package/src/playwright/sheet.spec.ts +5 -4
  283. package/src/plugin.ts +11 -0
  284. package/src/sanity.test.ts +10 -4
  285. package/src/serializer.ts +4 -12
  286. package/src/testing/data.ts +2 -2
  287. package/src/testing/testing.tsx +13 -7
  288. package/src/translations.ts +43 -34
  289. package/src/types/Sheet.ts +97 -0
  290. package/src/types/SheetCapabilities.ts +26 -0
  291. package/src/types/SheetOperation.ts +84 -0
  292. package/src/types/index.ts +4 -1
  293. package/src/types/sheet-range-types.ts +5 -5
  294. package/src/types/types.ts +6 -51
  295. package/src/types/util.ts +18 -45
  296. package/src/vite-env.d.ts +10 -0
  297. package/dist/lib/browser/SheetContainer-6IWQKRJC.mjs +0 -351
  298. package/dist/lib/browser/SheetContainer-6IWQKRJC.mjs.map +0 -7
  299. package/dist/lib/browser/anchor-sort-VHURGBOY.mjs +0 -24
  300. package/dist/lib/browser/anchor-sort-VHURGBOY.mjs.map +0 -7
  301. package/dist/lib/browser/chunk-6AKBCBL4.mjs +0 -18
  302. package/dist/lib/browser/chunk-6AKBCBL4.mjs.map +0 -7
  303. package/dist/lib/browser/chunk-7HQX4NQP.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-KJWZUQVA.mjs +0 -15
  305. package/dist/lib/browser/chunk-KJWZUQVA.mjs.map +0 -7
  306. package/dist/lib/browser/chunk-SI4X5GUR.mjs +0 -892
  307. package/dist/lib/browser/chunk-SI4X5GUR.mjs.map +0 -7
  308. package/dist/lib/browser/chunk-ULWNSP4B.mjs +0 -847
  309. package/dist/lib/browser/chunk-ULWNSP4B.mjs.map +0 -7
  310. package/dist/lib/browser/compute-graph-registry-VG7VP7IV.mjs +0 -30
  311. package/dist/lib/browser/compute-graph-registry-VG7VP7IV.mjs.map +0 -7
  312. package/dist/lib/browser/index.mjs +0 -153
  313. package/dist/lib/browser/index.mjs.map +0 -7
  314. package/dist/lib/browser/intent-resolver-WOJGZMSV.mjs +0 -56
  315. package/dist/lib/browser/intent-resolver-WOJGZMSV.mjs.map +0 -7
  316. package/dist/lib/browser/markdown-VXMIPUQC.mjs +0 -26
  317. package/dist/lib/browser/markdown-VXMIPUQC.mjs.map +0 -7
  318. package/dist/lib/browser/meta.json +0 -1
  319. package/dist/lib/browser/react-surface-DAHMBIQW.mjs +0 -53
  320. package/dist/lib/browser/react-surface-DAHMBIQW.mjs.map +0 -7
  321. package/dist/lib/node-esm/SheetContainer-SW55KKOT.mjs +0 -352
  322. package/dist/lib/node-esm/SheetContainer-SW55KKOT.mjs.map +0 -7
  323. package/dist/lib/node-esm/anchor-sort-CTJGOPET.mjs +0 -25
  324. package/dist/lib/node-esm/anchor-sort-CTJGOPET.mjs.map +0 -7
  325. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs +0 -20
  326. package/dist/lib/node-esm/chunk-3K5VNYOF.mjs.map +0 -7
  327. package/dist/lib/node-esm/chunk-6SK5LJ5S.mjs +0 -16
  328. package/dist/lib/node-esm/chunk-6SK5LJ5S.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-CADTJFAS.mjs +0 -893
  330. package/dist/lib/node-esm/chunk-CADTJFAS.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-Q6UYC4G5.mjs +0 -236
  332. package/dist/lib/node-esm/chunk-Q6UYC4G5.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-VEGX32AT.mjs +0 -848
  334. package/dist/lib/node-esm/chunk-VEGX32AT.mjs.map +0 -7
  335. package/dist/lib/node-esm/compute-graph-registry-3K3Q2A5T.mjs +0 -31
  336. package/dist/lib/node-esm/compute-graph-registry-3K3Q2A5T.mjs.map +0 -7
  337. package/dist/lib/node-esm/index.mjs +0 -154
  338. package/dist/lib/node-esm/index.mjs.map +0 -7
  339. package/dist/lib/node-esm/intent-resolver-PZRXBNIJ.mjs +0 -57
  340. package/dist/lib/node-esm/intent-resolver-PZRXBNIJ.mjs.map +0 -7
  341. package/dist/lib/node-esm/markdown-4VPQJZNZ.mjs +0 -27
  342. package/dist/lib/node-esm/markdown-4VPQJZNZ.mjs.map +0 -7
  343. package/dist/lib/node-esm/meta.json +0 -1
  344. package/dist/lib/node-esm/react-surface-Z7TVWQ4V.mjs +0 -54
  345. package/dist/lib/node-esm/react-surface-Z7TVWQ4V.mjs.map +0 -7
  346. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  347. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  348. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  349. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  350. package/dist/types/src/capabilities/markdown.d.ts +0 -6
  351. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  352. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  353. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  354. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  355. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  356. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  357. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  358. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -7
  359. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  360. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts +0 -25
  361. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  362. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  363. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  364. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  365. package/dist/types/src/components/RangeList/RangeList.d.ts +0 -7
  366. package/dist/types/src/components/RangeList/RangeList.d.ts.map +0 -1
  367. package/dist/types/src/components/RangeList/index.d.ts +0 -2
  368. package/dist/types/src/components/RangeList/index.d.ts.map +0 -1
  369. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -11
  370. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  371. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -8
  372. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  373. package/dist/types/src/components/SheetContainer/index.d.ts +0 -3
  374. package/dist/types/src/components/SheetContainer/index.d.ts.map +0 -1
  375. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  376. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  377. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  378. package/dist/types/src/extensions/editor/extension.d.ts.map +0 -1
  379. package/dist/types/src/extensions/editor/extension.test.d.ts +0 -2
  380. package/dist/types/src/extensions/editor/extension.test.d.ts.map +0 -1
  381. package/dist/types/src/types/schema.d.ts +0 -37
  382. package/dist/types/src/types/schema.d.ts.map +0 -1
  383. package/src/capabilities/capabilities.ts +0 -14
  384. package/src/capabilities/intent-resolver.ts +0 -38
  385. package/src/capabilities/markdown.ts +0 -22
  386. package/src/components/GridSheet/GridSheet.stories.tsx +0 -53
  387. package/src/components/GridSheet/SheetCellEditor.stories.tsx +0 -93
  388. package/src/components/RangeList/RangeList.tsx +0 -60
  389. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -89
  390. package/src/components/SheetContainer/SheetContainer.tsx +0 -36
  391. package/src/components/SheetContainer/index.ts +0 -7
  392. package/src/components/SheetContext/index.ts +0 -5
  393. package/src/types/schema.ts +0 -61
  394. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  395. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
@@ -3,41 +3,46 @@
3
3
  //
4
4
 
5
5
  import React, {
6
+ type FocusEvent,
7
+ type KeyboardEvent,
8
+ type MouseEvent,
9
+ type WheelEvent,
6
10
  useCallback,
11
+ useEffect,
7
12
  useMemo,
8
13
  useRef,
9
14
  useState,
10
- type FocusEvent,
11
- type KeyboardEvent,
12
- type WheelEvent,
13
- type MouseEvent,
14
15
  } from 'react';
15
16
 
16
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
17
- import { rangeToA1Notation, type CellRange } from '@dxos/compute';
17
+ import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
18
+ import { type CellRange, rangeToA1Notation } from '@dxos/compute-hyperformula';
19
+ import { Obj } from '@dxos/echo';
18
20
  import { defaultColSize, defaultRowSize } from '@dxos/lit-grid';
19
21
  import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
22
+ import { composable, composableProps } from '@dxos/react-ui';
20
23
  import { useAttention } from '@dxos/react-ui-attention';
21
24
  import {
22
- closestCell,
23
- editorKeys,
24
- parseCellIndex,
25
- Grid,
26
- GridCellEditor,
25
+ type DxGridCellIndex,
27
26
  type DxGridElement,
28
27
  type DxGridPosition,
29
- type DxGridCellIndex,
30
- type EditorKeyHandler,
31
28
  type EditorBlurHandler,
29
+ type EditorKeyHandler,
30
+ Grid,
31
+ GridCellEditor,
32
32
  type GridContentProps,
33
+ closestCell,
34
+ editorKeys,
35
+ parseCellIndex,
33
36
  } from '@dxos/react-ui-grid';
34
37
 
38
+ import { meta } from '#meta';
39
+ import { SheetOperation } from '#types';
40
+ import { DEFAULT_COLS, DEFAULT_ROWS, SheetCapabilities } from '#types';
41
+
42
+ import { type RangeController, rangeExtension, sheetExtension } from '../../extensions';
43
+ import { useSelectThreadOnCellFocus } from '../../integrations';
44
+ import { useSheetContext } from '../SheetRoot';
35
45
  import { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';
36
- import { rangeExtension, sheetExtension, type RangeController } from '../../extensions';
37
- import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
38
- import { SHEET_PLUGIN } from '../../meta';
39
- import { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';
40
- import { useSheetContext } from '../SheetContext';
41
46
 
42
47
  const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
43
48
 
@@ -59,24 +64,38 @@ const frozen = {
59
64
  };
60
65
 
61
66
  const sheetColDefault = {
62
- frozenColsStart: { size: 48, readonly: true },
67
+ frozenColsStart: { size: 48, readonly: true, focusUnfurl: false },
63
68
  grid: { size: defaultColSize, resizeable: true },
64
69
  };
65
70
  const sheetRowDefault = {
66
- frozenRowsStart: { size: defaultRowSize, readonly: true },
71
+ frozenRowsStart: { size: defaultRowSize, readonly: true, focusUnfurl: false },
67
72
  grid: { size: defaultRowSize, resizeable: true },
68
73
  };
69
74
 
70
- export const GridSheet = () => {
71
- const { t } = useTranslation(SHEET_PLUGIN);
72
- const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =
73
- useSheetContext();
75
+ export type SheetContentProps = {};
76
+
77
+ export const SheetContent = composable<HTMLDivElement, SheetContentProps>((props, forwardedRef) => {
78
+ const { t } = useTranslation(meta.id);
79
+ const {
80
+ id,
81
+ attendableId,
82
+ model,
83
+ editing,
84
+ setCursor,
85
+ setRange,
86
+ cursor,
87
+ cursorFallbackRange,
88
+ activeRefs,
89
+ setActiveRefs,
90
+ ignoreAttention,
91
+ } = useSheetContext();
92
+
74
93
  // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
75
94
  // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
76
95
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
77
96
  const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
78
- const { dispatchPromise: dispatch } = useIntentDispatcher();
79
- const rangeController = useRef<RangeController>();
97
+ const { invokePromise } = useOperationInvoker();
98
+ const rangeController = useRef<RangeController>(null);
80
99
  const { hasAttention } = useAttention(id);
81
100
 
82
101
  const handleFocus = useCallback(
@@ -126,15 +145,17 @@ export const GridSheet = () => {
126
145
 
127
146
  const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(
128
147
  ({ axis, size, index: numericIndex }) => {
129
- if (axis === 'row') {
130
- const rowId = model.sheet.rows[parseInt(numericIndex)];
131
- model.sheet.rowMeta[rowId] ??= {};
132
- model.sheet.rowMeta[rowId].size = size;
133
- } else {
134
- const columnId = model.sheet.columns[parseInt(numericIndex)];
135
- model.sheet.columnMeta[columnId] ??= {};
136
- model.sheet.columnMeta[columnId].size = size;
137
- }
148
+ Obj.update(model.sheet, (sheet) => {
149
+ if (axis === 'row') {
150
+ const rowId = sheet.rows[parseInt(numericIndex)];
151
+ sheet.rowMeta[rowId] ??= {};
152
+ sheet.rowMeta[rowId].size = size;
153
+ } else {
154
+ const columnId = sheet.columns[parseInt(numericIndex)];
155
+ sheet.columnMeta[columnId] ??= {};
156
+ sheet.columnMeta[columnId].size = size;
157
+ }
158
+ });
138
159
  },
139
160
  [model],
140
161
  );
@@ -171,12 +192,20 @@ export const GridSheet = () => {
171
192
  case 'frozenRowsStart':
172
193
  return dxGrid?.setSelection({
173
194
  start: { col: pos.col, row: 0, plane: 'grid' },
174
- end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },
195
+ end: {
196
+ col: pos.col,
197
+ row: model.sheet.rows.length - 1,
198
+ plane: 'grid',
199
+ },
175
200
  });
176
201
  case 'frozenColsStart':
177
202
  return dxGrid?.setSelection({
178
203
  start: { row: pos.row, col: 0, plane: 'grid' },
179
- end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },
204
+ end: {
205
+ row: pos.row,
206
+ col: model.sheet.columns.length - 1,
207
+ plane: 'grid',
208
+ },
180
209
  });
181
210
  }
182
211
  },
@@ -256,31 +285,30 @@ export const GridSheet = () => {
256
285
  switch (operation) {
257
286
  case 'insert-before':
258
287
  case 'insert-after':
259
- return dispatch(
260
- createIntent(SheetAction.InsertAxis, {
261
- model,
262
- axis: contextMenuAxis,
263
- index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
264
- }),
265
- );
288
+ return invokePromise(SheetOperation.InsertAxis, {
289
+ model,
290
+ axis: contextMenuAxis,
291
+ index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
292
+ });
266
293
  case 'drop':
267
- return dispatch(
268
- createIntent(SheetAction.DropAxis, {
269
- model,
270
- axis: contextMenuAxis,
271
- axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
272
- }),
273
- );
294
+ return invokePromise(SheetOperation.DropAxis, {
295
+ model,
296
+ axis: contextMenuAxis,
297
+ axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
298
+ });
274
299
  }
275
300
  },
276
- [contextMenuAxis, contextMenuOpen, model, dispatch],
301
+ [contextMenuAxis, contextMenuOpen, model, invokePromise],
277
302
  );
278
303
 
279
304
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
280
305
 
281
- const extension = useMemo(
306
+ const extensions = useMemo(
282
307
  () => [
283
- editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),
308
+ editorKeys({
309
+ onClose: handleClose,
310
+ ...(editing?.initialContent && { onNav: handleClose }),
311
+ }),
284
312
  sheetExtension({ functions: model.graph.getFunctions() }),
285
313
  rangeExtension({
286
314
  onInit: (fn) => (rangeController.current = fn),
@@ -302,23 +330,31 @@ export const GridSheet = () => {
302
330
  [model],
303
331
  );
304
332
 
305
- useUpdateFocusedCellOnThreadSelection(dxGrid);
333
+ const [gridInstances] = useCapabilities(SheetCapabilities.GridInstances);
334
+ useEffect(() => {
335
+ if (dxGrid && gridInstances) {
336
+ gridInstances.register(attendableId, dxGrid, setActiveRefs);
337
+ return () => gridInstances.unregister(attendableId);
338
+ }
339
+ }, [dxGrid, gridInstances, attendableId, setActiveRefs]);
340
+
306
341
  useSelectThreadOnCellFocus();
307
342
 
308
343
  return (
309
- // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
310
- <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent '>
311
- <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />
344
+ <div ref={forwardedRef} {...composableProps(props, { classNames: 'relative min-h-0' })}>
345
+ <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />
312
346
  <Grid.Content
347
+ className='[--dx-grid-base:var(--base-surface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
313
348
  initialCells={initialCells}
314
349
  limitColumns={DEFAULT_COLS}
315
350
  limitRows={DEFAULT_ROWS}
316
351
  columns={columns}
317
352
  rows={rows}
318
- // TODO(burdon): `col` vs. `column`?
319
353
  columnDefault={sheetColDefault}
320
354
  rowDefault={sheetRowDefault}
355
+ activeRefs={activeRefs}
321
356
  frozen={frozen}
357
+ overscroll='trap'
322
358
  onAxisResize={handleAxisResize}
323
359
  onSelect={handleSelect}
324
360
  onFocus={handleFocus}
@@ -326,9 +362,6 @@ export const GridSheet = () => {
326
362
  onKeyDown={handleKeyDown}
327
363
  onContextMenu={handleContextMenu}
328
364
  onClick={handleClick}
329
- overscroll='trap'
330
- className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
331
- activeRefs={activeRefs}
332
365
  ref={setDxGrid}
333
366
  />
334
367
  <DropdownMenu.Root
@@ -344,27 +377,25 @@ export const GridSheet = () => {
344
377
  data-testid={`grid.${contextMenuAxis}.insert-before`}
345
378
  >
346
379
  <Icon
347
- size={5}
348
380
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
349
381
  />
350
- <span>{t(`add ${contextMenuAxis} before label`)}</span>
382
+ <span>{t(`add-${contextMenuAxis}-before.label`)}</span>
351
383
  </DropdownMenu.Item>
352
384
  <DropdownMenu.Item
353
385
  onClick={() => handleAxisMenuAction('insert-after')}
354
386
  data-testid={`grid.${contextMenuAxis}.insert-after`}
355
387
  >
356
388
  <Icon
357
- size={5}
358
389
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
359
390
  />
360
- <span>{t(`add ${contextMenuAxis} after label`)}</span>
391
+ <span>{t(`add-${contextMenuAxis}-after.label`)}</span>
361
392
  </DropdownMenu.Item>
362
393
  <DropdownMenu.Item
363
394
  onClick={() => handleAxisMenuAction('drop')}
364
395
  data-testid={`grid.${contextMenuAxis}.drop`}
365
396
  >
366
- <Icon size={5} icon='ph--backspace--regular' />
367
- <span>{t(`delete ${contextMenuAxis} label`)}</span>
397
+ <Icon icon='ph--backspace--regular' />
398
+ <span>{t(`delete-${contextMenuAxis}.label`)}</span>
368
399
  </DropdownMenu.Item>
369
400
  </DropdownMenu.Viewport>
370
401
  <DropdownMenu.Arrow />
@@ -372,4 +403,4 @@ export const GridSheet = () => {
372
403
  </DropdownMenu.Root>
373
404
  </div>
374
405
  );
375
- };
406
+ });
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './RangeList';
5
+ export * from './SheetContent';
@@ -4,31 +4,35 @@
4
4
 
5
5
  import { useEffect, useState } from 'react';
6
6
 
7
- import { inRange } from '@dxos/compute';
8
- import { createDocAccessor } from '@dxos/react-client/echo';
9
- import { parseValue, cellClassesForFieldType } from '@dxos/react-ui-form';
7
+ import { inRange } from '@dxos/compute-hyperformula';
8
+ import { createDocAccessor } from '@dxos/echo-client';
9
+ import { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';
10
10
  import {
11
- type GridContentProps,
12
- type DxGridElement,
13
11
  type DxGridAxisMeta,
12
+ type DxGridCellValue,
13
+ type DxGridElement,
14
14
  type DxGridPlane,
15
- type DxGridPlaneRange,
16
15
  type DxGridPlaneCells,
17
- type DxGridCellValue,
16
+ type DxGridPlaneRange,
17
+ type GridContentProps,
18
18
  colToA1Notation,
19
- rowToA1Notation,
20
19
  commentedClassName,
20
+ rowToA1Notation,
21
21
  } from '@dxos/react-ui-grid';
22
- import { mx } from '@dxos/react-ui-theme';
22
+ import { mx } from '@dxos/ui-theme';
23
+
24
+ import { cellClassNameForRange, rangeFromIndex } from '#types';
23
25
 
24
26
  import { type SheetModel } from '../../model';
25
- import { cellClassNameForRange, rangeFromIndex } from '../../types';
26
27
 
27
28
  const createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {
28
29
  return model.sheet.columns.reduce(
29
30
  (acc: DxGridAxisMeta, columnId, numericIndex) => {
30
31
  if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
31
- acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };
32
+ acc.grid[numericIndex] = {
33
+ size: model.sheet.columnMeta[columnId].size,
34
+ resizeable: true,
35
+ };
32
36
  }
33
37
  return acc;
34
38
  },
@@ -40,7 +44,10 @@ const createDxGridRows = (model: SheetModel): DxGridAxisMeta => {
40
44
  return model.sheet.rows.reduce(
41
45
  (acc: DxGridAxisMeta, rowId, numericIndex) => {
42
46
  if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
43
- acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };
47
+ acc.grid[numericIndex] = {
48
+ size: model.sheet.rowMeta[rowId].size,
49
+ resizeable: true,
50
+ };
44
51
  }
45
52
  return acc;
46
53
  },
@@ -59,7 +66,7 @@ const projectCellProps = (model: SheetModel, col: number, row: number): DxGridCe
59
66
  // const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);
60
67
  // return thread && range ? inRange(range, address) : false;
61
68
  // })
62
- // .map((thread) => fullyQualifiedId(thread!))
69
+ // .map((thread) => Obj.getURI(thread!))
63
70
  // .join(' ');
64
71
 
65
72
  const description = model.getValueDescription(address);
@@ -90,13 +97,13 @@ const gridCellGetter = (model: SheetModel) => {
90
97
 
91
98
  export const rowLabelCell = (row: number) => ({
92
99
  value: rowToA1Notation(row),
93
- className: '!bg-toolbarSurface text-subdued text-end pie-1',
100
+ className: '!bg-toolbar-surface text-subdued text-end pe-1',
94
101
  resizeHandle: 'row',
95
102
  });
96
103
 
97
104
  export const colLabelCell = (col: number) => ({
98
105
  value: colToA1Notation(col),
99
- className: '!bg-toolbarSurface text-subdued',
106
+ className: '!bg-toolbar-surface text-subdued',
100
107
  resizeHandle: 'col',
101
108
  });
102
109
 
@@ -108,7 +115,7 @@ const cellGetter = (model: SheetModel) => {
108
115
  return getGridCells(nextBounds);
109
116
  case 'fixedStartStart': {
110
117
  return {
111
- '0,0': { className: '!bg-toolbarSurface' },
118
+ '0,0': { className: '!bg-toolbar-surface' },
112
119
  };
113
120
  }
114
121
  case 'frozenColsStart':
@@ -4,9 +4,13 @@
4
4
 
5
5
  import React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';
6
6
 
7
- import { type ComputeGraph, type CellAddress, type CellRange, type CompleteCellRange } from '@dxos/compute';
8
- import { invariant } from '@dxos/invariant';
9
- import { fullyQualifiedId } from '@dxos/react-client/echo';
7
+ import {
8
+ type CellAddress,
9
+ type CellRange,
10
+ type CompleteCellRange,
11
+ type ComputeGraph,
12
+ } from '@dxos/compute-hyperformula';
13
+ import { raise } from '@dxos/debug';
10
14
  import {
11
15
  Grid,
12
16
  type GridContentProps,
@@ -15,12 +19,13 @@ import {
15
19
  useGridContext,
16
20
  } from '@dxos/react-ui-grid';
17
21
 
22
+ import { type Sheet } from '#types';
23
+
18
24
  import { type SheetModel, useSheetModel } from '../../model';
19
- import { type SheetType } from '../../types';
20
25
 
21
26
  export type SheetContextValue = {
22
27
  id: string;
23
-
28
+ attendableId: string;
24
29
  model: SheetModel;
25
30
 
26
31
  // Cursor state.
@@ -39,29 +44,62 @@ export type SheetContextValue = {
39
44
  activeRefs: GridContentProps['activeRefs'];
40
45
  setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;
41
46
 
47
+ // Flags
48
+ ignoreAttention?: boolean;
49
+
42
50
  // Events.
43
51
  // TODO(burdon): Generalize.
44
52
  onInfo?: () => void;
45
-
46
- // Flags
47
- ignoreAttention?: boolean;
48
53
  };
49
54
 
55
+ // TODO(burdon): Use radix context.
50
56
  const SheetContext = createContext<SheetContextValue | undefined>(undefined);
51
57
 
52
58
  export const useSheetContext = (): SheetContextValue => {
53
- const context = useContext(SheetContext);
54
- invariant(context);
55
- return context;
59
+ return useContext(SheetContext) ?? raise(new Error('Missing SheetContext'));
60
+ };
61
+
62
+ export type SheetRootProps = {
63
+ graph: ComputeGraph;
64
+ sheet: Sheet.Sheet;
65
+ attendableId: string;
66
+ readonly?: boolean;
67
+ ignoreAttention?: boolean;
68
+ } & Pick<SheetContextValue, 'onInfo'>;
69
+
70
+ export const SheetRoot = ({
71
+ children,
72
+ graph,
73
+ sheet,
74
+ attendableId,
75
+ readonly,
76
+ ignoreAttention,
77
+ onInfo,
78
+ }: PropsWithChildren<SheetRootProps>) => {
79
+ const model = useSheetModel(graph, sheet, { readonly });
80
+ if (!model) {
81
+ return null;
82
+ }
83
+
84
+ return (
85
+ <Grid.Root id={attendableId}>
86
+ <SheetProviderImpl model={model} attendableId={attendableId} onInfo={onInfo} ignoreAttention={ignoreAttention}>
87
+ {children}
88
+ </SheetProviderImpl>
89
+ </Grid.Root>
90
+ );
56
91
  };
57
92
 
58
93
  const SheetProviderImpl = ({
94
+ __gridScope,
95
+ children,
96
+ attendableId,
97
+ ignoreAttention,
59
98
  model,
60
99
  onInfo,
61
- ignoreAttention,
62
- children,
63
- __gridScope,
64
- }: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model' | 'ignoreAttention'>>>) => {
100
+ }: GridScopedProps<
101
+ PropsWithChildren<Pick<SheetContextValue, 'attendableId' | 'ignoreAttention' | 'model' | 'onInfo'>>
102
+ >) => {
65
103
  const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);
66
104
 
67
105
  const [cursor, setCursorInternal] = useState<CellAddress>();
@@ -92,6 +130,7 @@ const SheetProviderImpl = ({
92
130
  <SheetContext.Provider
93
131
  value={{
94
132
  id,
133
+ attendableId,
95
134
  model,
96
135
  editing,
97
136
  setEditing,
@@ -102,38 +141,12 @@ const SheetProviderImpl = ({
102
141
  cursorFallbackRange,
103
142
  activeRefs,
104
143
  setActiveRefs,
144
+ ignoreAttention,
105
145
  // TODO(burdon): Change to event.
106
146
  onInfo,
107
- ignoreAttention,
108
147
  }}
109
148
  >
110
149
  {children}
111
150
  </SheetContext.Provider>
112
151
  );
113
152
  };
114
-
115
- export type SheetProviderProps = {
116
- graph: ComputeGraph;
117
- sheet: SheetType;
118
- readonly?: boolean;
119
- ignoreAttention?: boolean;
120
- } & Pick<SheetContextValue, 'onInfo'>;
121
-
122
- export const SheetProvider = ({
123
- children,
124
- graph,
125
- sheet,
126
- readonly,
127
- ignoreAttention,
128
- onInfo,
129
- }: PropsWithChildren<SheetProviderProps>) => {
130
- const model = useSheetModel(graph, sheet, { readonly });
131
-
132
- return !model ? null : (
133
- <Grid.Root id={fullyQualifiedId(sheet)}>
134
- <SheetProviderImpl model={model} onInfo={onInfo} ignoreAttention={ignoreAttention}>
135
- {children}
136
- </SheetProviderImpl>
137
- </Grid.Root>
138
- );
139
- };
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './GridSheet';
5
+ export * from './SheetRoot';
@@ -4,13 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';
7
+ import { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute-hyperformula';
8
8
  import { Icon } from '@dxos/react-ui';
9
+ import { composable, composableProps } from '@dxos/react-ui';
10
+ import { mx } from '@dxos/ui-theme';
9
11
 
10
- import { mapFormulaIndicesToRefs } from '../../types';
11
- import { useSheetContext } from '../SheetContext';
12
+ import { mapFormulaIndicesToRefs } from '#types';
12
13
 
13
- export const FunctionEditor = () => {
14
+ import { useSheetContext } from '../SheetRoot';
15
+
16
+ export type SheetStatusbarProps = {};
17
+
18
+ export const SheetStatusbar = composable<HTMLDivElement, SheetStatusbarProps>((props, forwardedRef) => {
19
+ const { className, ...rest } = composableProps(props);
14
20
  const { model, cursor, range } = useSheetContext();
15
21
 
16
22
  let value;
@@ -26,16 +32,23 @@ export const FunctionEditor = () => {
26
32
  }
27
33
 
28
34
  return (
29
- <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>
35
+ <div
36
+ ref={forwardedRef}
37
+ {...rest}
38
+ className={mx(
39
+ 'flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbar-surface border-y !border-subdued-separator',
40
+ className,
41
+ )}
42
+ >
30
43
  <div className='flex gap-4 items-center'>
31
44
  <div className='flex w-16 items-center font-mono'>
32
45
  {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}
33
46
  </div>
34
47
  <div className='flex gap-2 items-center'>
35
- <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />
48
+ <Icon icon='ph--function--regular' classNames={['text-green-text', formula ? 'visible' : 'invisible']} />
36
49
  <span className='font-mono'>{value}</span>
37
50
  </div>
38
51
  </div>
39
52
  </div>
40
53
  );
41
- };
54
+ });
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './FunctionEditor';
5
+ export * from './SheetStatusbar';
@@ -2,28 +2,34 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { withLayout, withTheme } from '@dxos/storybook-utils';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
9
+
10
+ import { translations } from '#translations';
11
11
 
12
12
  import { SheetToolbar } from './SheetToolbar';
13
- import { translations } from '../../translations';
14
13
 
15
14
  const DefaultStory = () => {
16
- return <SheetToolbar id='test' />;
15
+ // TODO(wittjosiah): Depends on SheetRoot.
16
+ // return <SheetToolbar id='test' />;
17
+ return <>TODO</>;
17
18
  };
18
19
 
19
- export const Default = {};
20
-
21
- const meta: Meta = {
22
- title: 'plugins/plugin-sheet/Toolbar',
23
- component: SheetToolbar,
20
+ const meta = {
21
+ title: 'plugins/plugin-sheet/components/Toolbar',
22
+ component: SheetToolbar as any,
24
23
  render: DefaultStory,
25
- decorators: [withTheme, withLayout()],
26
- parameters: { translations, layout: 'fullscreen' },
27
- };
24
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
25
+ parameters: {
26
+ layout: 'fullscreen',
27
+ translations,
28
+ },
29
+ } satisfies Meta<typeof DefaultStory>;
28
30
 
29
31
  export default meta;
32
+
33
+ type Story = StoryObj<typeof meta>;
34
+
35
+ export const Default: Story = {};