@dxos/plugin-sheet 0.8.4-main.406dc2a → 0.8.4-main.4f23b4e393

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 (355) hide show
  1. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs +46 -0
  2. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs.map +7 -0
  3. package/dist/lib/neutral/SheetContainer-ZOVKGHLT.mjs +33 -0
  4. package/dist/lib/neutral/SheetContainer-ZOVKGHLT.mjs.map +7 -0
  5. package/dist/lib/neutral/SheetPlugin.mjs +48 -0
  6. package/dist/lib/neutral/SheetPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/SheetPlugin.node.mjs +27 -0
  8. package/dist/lib/neutral/SheetPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs +22 -0
  10. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs.map +7 -0
  11. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  12. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  13. package/dist/lib/{browser/chunk-SSN4HYJL.mjs → neutral/chunk-4SBAIU6F.mjs} +19 -19
  14. package/dist/lib/neutral/chunk-4SBAIU6F.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-FZWVUKE2.mjs +8 -0
  16. package/dist/lib/neutral/chunk-FZWVUKE2.mjs.map +7 -0
  17. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  18. package/dist/lib/neutral/chunk-KC2SMDNF.mjs +373 -0
  19. package/dist/lib/neutral/chunk-KC2SMDNF.mjs.map +7 -0
  20. package/dist/lib/neutral/chunk-YFY6U524.mjs +83 -0
  21. package/dist/lib/neutral/chunk-YFY6U524.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-ZWOQCLH7.mjs +21 -0
  23. package/dist/lib/neutral/chunk-ZWOQCLH7.mjs.map +7 -0
  24. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs +20 -0
  25. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs.map +7 -0
  26. package/dist/lib/neutral/components/index.mjs +1551 -0
  27. package/dist/lib/neutral/components/index.mjs.map +7 -0
  28. package/dist/lib/neutral/compute-graph-registry-IEQBF5XZ.mjs +20 -0
  29. package/dist/lib/neutral/compute-graph-registry-IEQBF5XZ.mjs.map +7 -0
  30. package/dist/lib/neutral/containers/index.mjs +11 -0
  31. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  32. package/dist/lib/neutral/create-object-OKQAXJCW.mjs +27 -0
  33. package/dist/lib/neutral/create-object-OKQAXJCW.mjs.map +7 -0
  34. package/dist/lib/neutral/drop-axis-G6UOXG54.mjs +23 -0
  35. package/dist/lib/neutral/drop-axis-G6UOXG54.mjs.map +7 -0
  36. package/dist/lib/{node-esm/types → neutral}/index.mjs +16 -13
  37. package/dist/lib/neutral/insert-axis-ZFFNG22G.mjs +16 -0
  38. package/dist/lib/neutral/insert-axis-ZFFNG22G.mjs.map +7 -0
  39. package/dist/lib/neutral/markdown-I2AKJYPF.mjs +28 -0
  40. package/dist/lib/neutral/markdown-I2AKJYPF.mjs.map +7 -0
  41. package/dist/lib/neutral/meta.json +1 -0
  42. package/dist/lib/neutral/meta.mjs +8 -0
  43. package/dist/lib/neutral/meta.mjs.map +7 -0
  44. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs +13 -0
  45. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs.map +7 -0
  46. package/dist/lib/neutral/operations/index.mjs +8 -0
  47. package/dist/lib/neutral/operations/index.mjs.map +7 -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-UYA3OYHT.mjs +44 -0
  51. package/dist/lib/neutral/react-surface-UYA3OYHT.mjs.map +7 -0
  52. package/dist/lib/neutral/restore-axis-44DM6N54.mjs +16 -0
  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/neutral/translations.mjs +55 -0
  61. package/dist/lib/neutral/translations.mjs.map +7 -0
  62. package/dist/lib/{browser → neutral}/types/index.mjs +8 -12
  63. package/dist/lib/neutral/types/index.mjs.map +7 -0
  64. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs +31 -0
  65. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs.map +7 -0
  66. package/dist/types/src/SheetPlugin.d.ts +3 -1
  67. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  68. package/dist/types/src/SheetPlugin.node.d.ts +4 -0
  69. package/dist/types/src/SheetPlugin.node.d.ts.map +1 -0
  70. package/dist/types/src/SheetPlugin.test.d.ts +2 -0
  71. package/dist/types/src/SheetPlugin.test.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  73. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  75. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/compute-graph-registry.d.ts +3 -2
  77. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  79. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/index.d.ts +23 -9
  81. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  83. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  85. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  86. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  87. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/state.d.ts +6 -0
  89. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  91. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  92. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +1 -1
  93. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  94. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Sheet/Sheet.d.ts +17 -0
  96. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  97. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  98. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  99. package/dist/types/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.d.ts +1 -1
  100. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts.map +1 -0
  101. package/dist/types/src/components/SheetContent/SheetContent.d.ts +6 -0
  102. package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -0
  103. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +93 -0
  104. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts.map +1 -0
  105. package/dist/types/src/components/SheetContent/index.d.ts +2 -0
  106. package/dist/types/src/components/SheetContent/index.d.ts.map +1 -0
  107. package/dist/types/src/components/{GridSheet → SheetContent}/util.d.ts +1 -1
  108. package/dist/types/src/components/SheetContent/util.d.ts.map +1 -0
  109. package/dist/types/src/components/{SheetContext/SheetContext.d.ts → SheetRoot/SheetRoot.d.ts} +9 -7
  110. package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -0
  111. package/dist/types/src/components/SheetRoot/index.d.ts +2 -0
  112. package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -0
  113. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +6 -0
  114. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -0
  115. package/dist/types/src/components/SheetStatusbar/index.d.ts +2 -0
  116. package/dist/types/src/components/SheetStatusbar/index.d.ts.map +1 -0
  117. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +5 -6
  118. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  119. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +72 -66
  120. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/SheetToolbar/align.d.ts +14 -21
  122. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  123. package/dist/types/src/components/SheetToolbar/style.d.ts +14 -20
  124. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  125. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  126. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  127. package/dist/types/src/components/index.d.ts +1 -4
  128. package/dist/types/src/components/index.d.ts.map +1 -1
  129. package/dist/types/src/containers/RangeList/RangeList.d.ts +7 -0
  130. package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -0
  131. package/dist/types/src/containers/RangeList/index.d.ts +2 -0
  132. package/dist/types/src/containers/RangeList/index.d.ts.map +1 -0
  133. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts +12 -0
  134. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts.map +1 -0
  135. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts +92 -0
  136. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts.map +1 -0
  137. package/dist/types/src/containers/SheetContainer/index.d.ts +2 -0
  138. package/dist/types/src/containers/SheetContainer/index.d.ts.map +1 -0
  139. package/dist/types/src/containers/index.d.ts +4 -0
  140. package/dist/types/src/containers/index.d.ts.map +1 -0
  141. package/dist/types/src/extensions/compute.d.ts +1 -1
  142. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  143. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  144. package/dist/types/src/extensions/editor/sheet-extension.d.ts +1 -1
  145. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
  146. package/dist/types/src/index.d.ts +2 -2
  147. package/dist/types/src/index.d.ts.map +1 -1
  148. package/dist/types/src/integrations/thread-ranges.d.ts +1 -3
  149. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  150. package/dist/types/src/meta.d.ts +2 -2
  151. package/dist/types/src/meta.d.ts.map +1 -1
  152. package/dist/types/src/model/sheet-model.d.ts +7 -7
  153. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  154. package/dist/types/src/model/testing.d.ts +2 -2
  155. package/dist/types/src/model/testing.d.ts.map +1 -1
  156. package/dist/types/src/model/useSheetModel.d.ts +3 -3
  157. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  158. package/dist/types/src/operations/drop-axis.d.ts +5 -0
  159. package/dist/types/src/operations/drop-axis.d.ts.map +1 -0
  160. package/dist/types/src/operations/index.d.ts +3 -0
  161. package/dist/types/src/operations/index.d.ts.map +1 -0
  162. package/dist/types/src/operations/insert-axis.d.ts +5 -0
  163. package/dist/types/src/operations/insert-axis.d.ts.map +1 -0
  164. package/dist/types/src/operations/restore-axis.d.ts +5 -0
  165. package/dist/types/src/operations/restore-axis.d.ts.map +1 -0
  166. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  167. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  168. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
  169. package/dist/types/src/playwright/sheet-manager.d.ts.map +1 -1
  170. package/dist/types/src/plugin.d.ts +4 -0
  171. package/dist/types/src/plugin.d.ts.map +1 -0
  172. package/dist/types/src/serializer.d.ts +3 -3
  173. package/dist/types/src/serializer.d.ts.map +1 -1
  174. package/dist/types/src/testing/data.d.ts +2 -2
  175. package/dist/types/src/testing/data.d.ts.map +1 -1
  176. package/dist/types/src/testing/testing.d.ts +27 -3
  177. package/dist/types/src/testing/testing.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +74 -38
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/Sheet.d.ts +76 -0
  181. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  182. package/dist/types/src/types/SheetCapabilities.d.ts +16 -0
  183. package/dist/types/src/types/SheetCapabilities.d.ts.map +1 -0
  184. package/dist/types/src/types/SheetOperation.d.ts +45 -0
  185. package/dist/types/src/types/SheetOperation.d.ts.map +1 -0
  186. package/dist/types/src/types/index.d.ts +3 -1
  187. package/dist/types/src/types/index.d.ts.map +1 -1
  188. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  189. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  190. package/dist/types/src/types/types.d.ts +2 -77
  191. package/dist/types/src/types/types.d.ts.map +1 -1
  192. package/dist/types/src/types/util.d.ts +11 -11
  193. package/dist/types/src/types/util.d.ts.map +1 -1
  194. package/dist/types/tsconfig.tsbuildinfo +1 -1
  195. package/package.json +129 -79
  196. package/src/SheetPlugin.node.ts +21 -0
  197. package/src/SheetPlugin.test.ts +30 -0
  198. package/src/SheetPlugin.tsx +37 -67
  199. package/src/capabilities/anchor-sort.ts +20 -15
  200. package/src/capabilities/comment-config.ts +24 -0
  201. package/src/capabilities/compute-graph-registry.ts +19 -13
  202. package/src/capabilities/create-object.ts +30 -0
  203. package/src/capabilities/index.ts +16 -8
  204. package/src/capabilities/markdown.ts +21 -13
  205. package/src/capabilities/operation-handler.ts +16 -0
  206. package/src/capabilities/react-surface.tsx +38 -29
  207. package/src/capabilities/state.ts +29 -0
  208. package/src/capabilities/undo-mappings.ts +30 -0
  209. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +1 -1
  210. package/src/components/ComputeGraph/compute-graph.stories.tsx +20 -18
  211. package/src/components/Sheet/Sheet.tsx +20 -0
  212. package/src/components/Sheet/index.ts +5 -0
  213. package/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.tsx +17 -13
  214. package/src/components/SheetContent/SheetContent.stories.tsx +60 -0
  215. package/src/components/{GridSheet/GridSheet.tsx → SheetContent/SheetContent.tsx} +82 -52
  216. package/src/components/{RangeList → SheetContent}/index.ts +1 -1
  217. package/src/components/{GridSheet → SheetContent}/util.ts +17 -10
  218. package/src/components/{SheetContext/SheetContext.tsx → SheetRoot/SheetRoot.tsx} +55 -42
  219. package/src/components/{GridSheet → SheetRoot}/index.ts +1 -1
  220. package/src/components/{FunctionEditor/FunctionEditor.tsx → SheetStatusbar/SheetStatusbar.tsx} +19 -7
  221. package/src/components/{FunctionEditor → SheetStatusbar}/index.ts +1 -1
  222. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +5 -5
  223. package/src/components/SheetToolbar/SheetToolbar.tsx +51 -46
  224. package/src/components/SheetToolbar/align.ts +50 -25
  225. package/src/components/SheetToolbar/style.ts +52 -22
  226. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  227. package/src/components/index.ts +1 -7
  228. package/src/containers/RangeList/RangeList.tsx +65 -0
  229. package/src/containers/RangeList/index.ts +5 -0
  230. package/src/containers/SheetContainer/SheetContainer.stories.tsx +110 -0
  231. package/src/containers/SheetContainer/SheetContainer.tsx +57 -0
  232. package/src/containers/SheetContainer/index.ts +5 -0
  233. package/src/containers/index.ts +8 -0
  234. package/src/extensions/compute.stories.tsx +29 -19
  235. package/src/extensions/compute.ts +2 -2
  236. package/src/extensions/editor/sheet-extension.test.ts +1 -1
  237. package/src/extensions/editor/sheet-extension.ts +18 -15
  238. package/src/index.ts +2 -2
  239. package/src/integrations/thread-ranges.ts +20 -63
  240. package/src/meta.ts +9 -5
  241. package/src/model/sheet-model.test.ts +6 -6
  242. package/src/model/sheet-model.ts +82 -50
  243. package/src/model/testing.ts +5 -5
  244. package/src/model/useSheetModel.ts +4 -3
  245. package/src/operations/drop-axis.ts +26 -0
  246. package/src/operations/index.ts +12 -0
  247. package/src/operations/insert-axis.ts +19 -0
  248. package/src/operations/restore-axis.ts +19 -0
  249. package/src/operations/scroll-to-anchor.ts +30 -0
  250. package/src/playwright/playwright.config.ts +1 -1
  251. package/src/playwright/sheet.spec.ts +4 -3
  252. package/src/plugin.ts +11 -0
  253. package/src/sanity.test.ts +5 -3
  254. package/src/serializer.ts +5 -5
  255. package/src/testing/data.ts +2 -2
  256. package/src/testing/testing.tsx +6 -6
  257. package/src/translations.ts +42 -36
  258. package/src/types/Sheet.ts +103 -0
  259. package/src/types/SheetCapabilities.ts +26 -0
  260. package/src/types/SheetOperation.ts +75 -0
  261. package/src/types/index.ts +4 -1
  262. package/src/types/sheet-range-types.ts +5 -5
  263. package/src/types/types.ts +5 -51
  264. package/src/types/util.ts +12 -39
  265. package/dist/lib/browser/SheetContainer-VL34UND4.mjs +0 -351
  266. package/dist/lib/browser/SheetContainer-VL34UND4.mjs.map +0 -7
  267. package/dist/lib/browser/anchor-sort-3N44DS5F.mjs +0 -24
  268. package/dist/lib/browser/anchor-sort-3N44DS5F.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-ADK2HW4A.mjs +0 -906
  270. package/dist/lib/browser/chunk-ADK2HW4A.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-CSBSADPQ.mjs +0 -16
  272. package/dist/lib/browser/chunk-CSBSADPQ.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-SSN4HYJL.mjs.map +0 -7
  274. package/dist/lib/browser/chunk-ZJWJMX4E.mjs +0 -852
  275. package/dist/lib/browser/chunk-ZJWJMX4E.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-ZMPNHFIP.mjs +0 -15
  277. package/dist/lib/browser/chunk-ZMPNHFIP.mjs.map +0 -7
  278. package/dist/lib/browser/compute-graph-registry-MF65HGGM.mjs +0 -21
  279. package/dist/lib/browser/compute-graph-registry-MF65HGGM.mjs.map +0 -7
  280. package/dist/lib/browser/index.mjs +0 -154
  281. package/dist/lib/browser/index.mjs.map +0 -7
  282. package/dist/lib/browser/intent-resolver-BQLV6IAA.mjs +0 -56
  283. package/dist/lib/browser/intent-resolver-BQLV6IAA.mjs.map +0 -7
  284. package/dist/lib/browser/markdown-RMTMI237.mjs +0 -26
  285. package/dist/lib/browser/markdown-RMTMI237.mjs.map +0 -7
  286. package/dist/lib/browser/meta.json +0 -1
  287. package/dist/lib/browser/react-surface-7ZDMQDCT.mjs +0 -53
  288. package/dist/lib/browser/react-surface-7ZDMQDCT.mjs.map +0 -7
  289. package/dist/lib/node-esm/SheetContainer-NWJ7L6FC.mjs +0 -352
  290. package/dist/lib/node-esm/SheetContainer-NWJ7L6FC.mjs.map +0 -7
  291. package/dist/lib/node-esm/anchor-sort-YL2OZHYM.mjs +0 -25
  292. package/dist/lib/node-esm/anchor-sort-YL2OZHYM.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-BZAPYBSH.mjs +0 -907
  294. package/dist/lib/node-esm/chunk-BZAPYBSH.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-H3GSD33H.mjs +0 -18
  296. package/dist/lib/node-esm/chunk-H3GSD33H.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-IK4O7FUJ.mjs +0 -236
  298. package/dist/lib/node-esm/chunk-IK4O7FUJ.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-LN6ZSAII.mjs +0 -16
  300. package/dist/lib/node-esm/chunk-LN6ZSAII.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-YL7BVJPC.mjs +0 -853
  302. package/dist/lib/node-esm/chunk-YL7BVJPC.mjs.map +0 -7
  303. package/dist/lib/node-esm/compute-graph-registry-P2O5LDFZ.mjs +0 -22
  304. package/dist/lib/node-esm/compute-graph-registry-P2O5LDFZ.mjs.map +0 -7
  305. package/dist/lib/node-esm/index.mjs +0 -155
  306. package/dist/lib/node-esm/index.mjs.map +0 -7
  307. package/dist/lib/node-esm/intent-resolver-MV5ZFXAQ.mjs +0 -57
  308. package/dist/lib/node-esm/intent-resolver-MV5ZFXAQ.mjs.map +0 -7
  309. package/dist/lib/node-esm/markdown-EDIWHA3P.mjs +0 -27
  310. package/dist/lib/node-esm/markdown-EDIWHA3P.mjs.map +0 -7
  311. package/dist/lib/node-esm/meta.json +0 -1
  312. package/dist/lib/node-esm/react-surface-TUME5MM2.mjs +0 -54
  313. package/dist/lib/node-esm/react-surface-TUME5MM2.mjs.map +0 -7
  314. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  315. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  316. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  317. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  318. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  319. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  320. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  321. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  322. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  323. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  324. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -54
  325. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  327. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  328. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  329. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  330. package/dist/types/src/components/RangeList/RangeList.d.ts +0 -7
  331. package/dist/types/src/components/RangeList/RangeList.d.ts.map +0 -1
  332. package/dist/types/src/components/RangeList/index.d.ts +0 -2
  333. package/dist/types/src/components/RangeList/index.d.ts.map +0 -1
  334. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -11
  335. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  336. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -55
  337. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  338. package/dist/types/src/components/SheetContainer/index.d.ts +0 -3
  339. package/dist/types/src/components/SheetContainer/index.d.ts.map +0 -1
  340. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  341. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  342. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  343. package/dist/types/src/types/schema.d.ts +0 -37
  344. package/dist/types/src/types/schema.d.ts.map +0 -1
  345. package/src/capabilities/capabilities.ts +0 -14
  346. package/src/capabilities/intent-resolver.ts +0 -38
  347. package/src/components/GridSheet/GridSheet.stories.tsx +0 -59
  348. package/src/components/RangeList/RangeList.tsx +0 -60
  349. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -90
  350. package/src/components/SheetContainer/SheetContainer.tsx +0 -40
  351. package/src/components/SheetContainer/index.ts +0 -7
  352. package/src/components/SheetContext/index.ts +0 -5
  353. package/src/types/schema.ts +0 -61
  354. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  355. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
@@ -4,8 +4,8 @@
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';
7
+ import { inRange } from '@dxos/compute-hyperformula';
8
+ import { createDocAccessor } from '@dxos/echo-db';
9
9
  import { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';
10
10
  import {
11
11
  type DxGridAxisMeta,
@@ -19,16 +19,20 @@ import {
19
19
  commentedClassName,
20
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.getDXN(thread!).toString())
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 CellAddress, type CellRange, type CompleteCellRange, type ComputeGraph } 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,18 @@
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, mx } from '@dxos/ui-theme';
9
10
 
10
- import { mapFormulaIndicesToRefs } from '../../types';
11
- import { useSheetContext } from '../SheetContext';
11
+ import { mapFormulaIndicesToRefs } from '#types';
12
12
 
13
- export const FunctionEditor = () => {
13
+ import { useSheetContext } from '../SheetRoot';
14
+
15
+ export type SheetStatusbarProps = {};
16
+
17
+ export const SheetStatusbar = composable<HTMLDivElement, SheetStatusbarProps>((props, forwardedRef) => {
18
+ const { className, ...rest } = composableProps(props);
14
19
  const { model, cursor, range } = useSheetContext();
15
20
 
16
21
  let value;
@@ -26,16 +31,23 @@ export const FunctionEditor = () => {
26
31
  }
27
32
 
28
33
  return (
29
- <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>
34
+ <div
35
+ ref={forwardedRef}
36
+ {...rest}
37
+ className={mx(
38
+ 'flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbar-surface border-y !border-subdued-separator',
39
+ className,
40
+ )}
41
+ >
30
42
  <div className='flex gap-4 items-center'>
31
43
  <div className='flex w-16 items-center font-mono'>
32
44
  {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}
33
45
  </div>
34
46
  <div className='flex gap-2 items-center'>
35
- <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />
47
+ <Icon icon='ph--function--regular' classNames={['text-green-text', formula ? 'visible' : 'invisible']} />
36
48
  <span className='font-mono'>{value}</span>
37
49
  </div>
38
50
  </div>
39
51
  </div>
40
52
  );
41
- };
53
+ });
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './FunctionEditor';
5
+ export * from './SheetStatusbar';
@@ -5,23 +5,23 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { withTheme } from '@dxos/react-ui/testing';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
9
9
 
10
- import { translations } from '../../translations';
10
+ import { translations } from '#translations';
11
11
 
12
12
  import { SheetToolbar } from './SheetToolbar';
13
13
 
14
14
  const DefaultStory = () => {
15
- // TODO(wittjosiah): Depends on SheetProvider.
15
+ // TODO(wittjosiah): Depends on SheetRoot.
16
16
  // return <SheetToolbar id='test' />;
17
17
  return <>TODO</>;
18
18
  };
19
19
 
20
20
  const meta = {
21
- title: 'plugins/plugin-sheet/Toolbar',
21
+ title: 'plugins/plugin-sheet/components/Toolbar',
22
22
  component: SheetToolbar as any,
23
23
  render: DefaultStory,
24
- decorators: [withTheme],
24
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
25
25
  parameters: {
26
26
  layout: 'fullscreen',
27
27
  translations,
@@ -2,43 +2,40 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
6
- import React, { type PropsWithChildren, useMemo } from 'react';
5
+ import { Atom, type Registry, RegistryContext } from '@effect-atom/atom-react';
6
+ import React, { useContext, useMemo } from 'react';
7
7
 
8
- import { useAppGraph } from '@dxos/app-framework';
9
- import { type CompleteCellRange } from '@dxos/compute';
10
- import { type ThemedClassName } from '@dxos/react-ui';
11
- import {
12
- type ActionGraphProps,
13
- MenuProvider,
14
- ToolbarMenu,
15
- createGapSeparator,
16
- rxFromSignal,
17
- useMenuActions,
18
- } from '@dxos/react-ui-menu';
8
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
9
+ import { type CompleteCellRange } from '@dxos/compute-hyperformula';
10
+ import { type ActionGraphProps, Menu, createGapSeparator, useMenuActions } from '@dxos/react-ui-menu';
11
+ import { composable, composableProps } from '@dxos/ui-theme';
19
12
 
20
13
  import { type SheetModel } from '../../model';
21
- import { useSheetContext } from '../SheetContext';
22
-
14
+ import { useSheetContext } from '../SheetRoot';
23
15
  import { createAlign, useAlignState } from './align';
24
16
  import { createStyle, useStyleState } from './style';
25
- import { type ToolbarState, useToolbarState } from './useToolbarState';
26
-
27
- //
28
- // Root
29
- //
17
+ import { type ToolbarStateAtom, useToolbarState } from './useToolbarState';
30
18
 
31
- export type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ id: string }>>;
19
+ type ToolbarActionsContext = {
20
+ model: SheetModel;
21
+ stateAtom: ToolbarStateAtom;
22
+ registry: Registry.Registry;
23
+ cursorFallbackRange?: CompleteCellRange;
24
+ customActions?: Atom.Atom<ActionGraphProps>;
25
+ };
32
26
 
33
- const createToolbarActions = (
34
- model: SheetModel,
35
- state: ToolbarState,
36
- cursorFallbackRange?: CompleteCellRange,
37
- customActions?: Rx.Rx<ActionGraphProps>,
38
- ): Rx.Rx<ActionGraphProps> => {
39
- return Rx.make((get) => {
40
- const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));
41
- const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));
27
+ const createToolbarActions = ({
28
+ model,
29
+ stateAtom,
30
+ registry,
31
+ cursorFallbackRange,
32
+ customActions,
33
+ }: ToolbarActionsContext): Atom.Atom<ActionGraphProps> => {
34
+ return Atom.make((get) => {
35
+ const state = get(stateAtom);
36
+ const context = { model, state, stateAtom, registry, cursorFallbackRange };
37
+ const align = createAlign(context);
38
+ const style = createStyle(context);
42
39
  const gap = createGapSeparator();
43
40
 
44
41
  const graph: ActionGraphProps = {
@@ -56,30 +53,38 @@ const createToolbarActions = (
56
53
  });
57
54
  };
58
55
 
59
- export const SheetToolbar = ({ id, classNames }: SheetToolbarProps) => {
60
- const { model, cursorFallbackRange } = useSheetContext();
61
- const state = useToolbarState({});
62
- useAlignState(state);
63
- useStyleState(state);
56
+ export type SheetToolbarProps = {};
57
+
58
+ export const SheetToolbar = composable<HTMLDivElement, SheetToolbarProps>((props, forwardedRef) => {
59
+ const { attendableId, model, cursorFallbackRange } = useSheetContext();
60
+ const stateAtom = useToolbarState({});
61
+ const registry = useContext(RegistryContext);
62
+ useAlignState(stateAtom);
63
+ useStyleState(stateAtom);
64
64
 
65
65
  const { graph } = useAppGraph();
66
66
  const customActions = useMemo(() => {
67
- return Rx.make((get) => {
68
- const actions = get(graph.actions(id));
67
+ return Atom.make((get) => {
68
+ const actions = get(graph.actions(attendableId));
69
69
  const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
70
- return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };
70
+ return {
71
+ nodes,
72
+ edges: nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' })),
73
+ };
71
74
  });
72
- }, [graph]);
75
+ }, [graph, attendableId]);
73
76
 
74
77
  const actionsCreator = useMemo(
75
- () => createToolbarActions(model, state, cursorFallbackRange, customActions),
76
- [model, state, cursorFallbackRange, customActions],
78
+ () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),
79
+ [model, stateAtom, registry, cursorFallbackRange, customActions],
77
80
  );
78
- const menu = useMenuActions(actionsCreator);
81
+ const menuActions = useMenuActions(actionsCreator);
79
82
 
80
83
  return (
81
- <MenuProvider {...menu} attendableId={id}>
82
- <ToolbarMenu classNames={classNames} />
83
- </MenuProvider>
84
+ <Menu.Root {...menuActions} attendableId={attendableId}>
85
+ <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />
86
+ </Menu.Root>
84
87
  );
85
- };
88
+ });
89
+
90
+ SheetToolbar.displayName = 'SheetToolbar';
@@ -2,17 +2,24 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { useEffect } from 'react';
5
+ import { type Registry, RegistryContext } from '@effect-atom/atom-react';
6
+ import { useContext, useEffect } from 'react';
6
7
 
7
- import { type CompleteCellRange, inRange } from '@dxos/compute';
8
- import { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';
8
+ import { type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';
9
+ import { Obj } from '@dxos/echo';
10
+ import {
11
+ type ActionGraphProps,
12
+ type ToolbarMenuActionGroupProperties,
13
+ createMenuAction,
14
+ createMenuItemGroup,
15
+ } from '@dxos/react-ui-menu';
9
16
 
10
- import { meta } from '../../meta';
11
- import { type SheetModel } from '../../model';
12
- import { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '../../types';
13
- import { useSheetContext } from '../SheetContext';
17
+ import { meta } from '#meta';
18
+ import { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '#types';
14
19
 
15
- import { type ToolbarState } from './useToolbarState';
20
+ import { type SheetModel } from '../../model';
21
+ import { useSheetContext } from '../SheetRoot';
22
+ import { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';
16
23
 
17
24
  export type AlignAction = { key: AlignKey; value: AlignValue };
18
25
 
@@ -24,29 +31,40 @@ const aligns: Record<AlignValue, string> = {
24
31
  end: 'ph--text-align-right--regular',
25
32
  };
26
33
 
27
- export const useAlignState = (state: Partial<AlignState>) => {
34
+ export const useAlignState = (stateAtom: ToolbarStateAtom) => {
35
+ const registry = useContext(RegistryContext);
28
36
  const { cursor, model } = useSheetContext();
29
37
  useEffect(() => {
30
38
  // TODO(thure): Can this O(n) call be memoized?
31
- state[alignKey] = (
39
+ const alignValue = (
32
40
  cursor
33
41
  ? model.sheet.ranges?.findLast(
34
42
  ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),
35
43
  )?.value
36
44
  : undefined
37
45
  ) as AlignValue | undefined;
38
- }, [cursor, model.sheet]);
46
+ const prev = registry.get(stateAtom);
47
+ registry.set(stateAtom, { ...prev, [alignKey]: alignValue });
48
+ }, [cursor, model.sheet, registry, stateAtom]);
39
49
  };
40
50
 
41
51
  const createAlignGroupAction = (value?: AlignValue) =>
42
52
  createMenuItemGroup('align', {
43
- label: ['align label', { ns: meta.id }],
53
+ label: ['align.label', { ns: meta.id }],
44
54
  variant: 'toggleGroup',
45
55
  selectCardinality: 'single',
46
56
  value: `${alignKey}--${value}`,
47
57
  } as ToolbarMenuActionGroupProperties);
48
58
 
49
- const createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>
59
+ type AlignActionsContext = {
60
+ model: SheetModel;
61
+ state: ToolbarState;
62
+ stateAtom: ToolbarStateAtom;
63
+ registry: Registry.Registry;
64
+ cursorFallbackRange?: CompleteCellRange;
65
+ };
66
+
67
+ const createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackRange }: AlignActionsContext) =>
50
68
  Object.entries(aligns).map(([alignValue, icon]) => {
51
69
  return createMenuAction<AlignAction>(
52
70
  `${alignKey}--${alignValue}`,
@@ -64,36 +82,43 @@ const createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallba
64
82
  key: alignKey,
65
83
  value: alignValue as AlignValue,
66
84
  };
85
+ const currentState = registry.get(stateAtom);
67
86
  if (index < 0) {
68
- model.sheet.ranges?.push(nextRangeEntity);
69
- state[alignKey] = nextRangeEntity.value;
87
+ Obj.update(model.sheet, (obj) => {
88
+ obj.ranges?.push(nextRangeEntity);
89
+ });
90
+ registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });
70
91
  } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {
71
- model.sheet.ranges?.splice(index, 1);
72
- state[alignKey] = undefined;
92
+ Obj.update(model.sheet, (obj) => {
93
+ obj.ranges?.splice(index, 1);
94
+ });
95
+ registry.set(stateAtom, { ...currentState, [alignKey]: undefined });
73
96
  } else {
74
- model.sheet.ranges?.splice(index, 1, nextRangeEntity);
75
- state[alignKey] = nextRangeEntity.value;
97
+ Obj.update(model.sheet, (obj) => {
98
+ obj.ranges?.splice(index, 1, nextRangeEntity);
99
+ });
100
+ registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });
76
101
  }
77
102
  },
78
103
  {
79
104
  key: alignKey,
80
105
  value: alignValue as AlignValue,
81
106
  checked: state[alignKey] === alignValue,
82
- label: [`range value ${alignValue} label`, { ns: meta.id }],
107
+ label: [`range-value.${alignValue}.label`, { ns: meta.id }],
83
108
  icon,
84
109
  testId: `grid.toolbar.${alignKey}.${alignValue}`,
85
110
  },
86
111
  );
87
112
  });
88
113
 
89
- export const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {
90
- const alignGroup = createAlignGroupAction(state[alignKey]);
91
- const alignActions = createAlignActions(model, state, cursorFallbackRange);
114
+ export const createAlign = (context: AlignActionsContext): ActionGraphProps => {
115
+ const alignGroup = createAlignGroupAction(context.state[alignKey]);
116
+ const alignActions = createAlignActions(context);
92
117
  return {
93
118
  nodes: [alignGroup, ...alignActions],
94
119
  edges: [
95
- { source: 'root', target: 'align' },
96
- ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),
120
+ { source: 'root', target: 'align', relation: 'child' },
121
+ ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id, relation: 'child' })),
97
122
  ],
98
123
  };
99
124
  };