@dxos/plugin-sheet 0.8.4-main.7ace549 → 0.8.4-main.8baae0fced

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/LICENSE +102 -5
  2. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs +46 -0
  3. package/dist/lib/neutral/RangeList-HYB5S6KQ.mjs.map +7 -0
  4. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs +33 -0
  5. package/dist/lib/neutral/SheetArticle-5AJRM3V3.mjs.map +7 -0
  6. package/dist/lib/neutral/SheetPlugin.mjs +47 -0
  7. package/dist/lib/neutral/SheetPlugin.mjs.map +7 -0
  8. package/dist/lib/neutral/SheetPlugin.node.mjs +27 -0
  9. package/dist/lib/neutral/SheetPlugin.node.mjs.map +7 -0
  10. package/dist/lib/neutral/SheetPlugin.workerd.mjs +21 -0
  11. package/dist/lib/neutral/SheetPlugin.workerd.mjs.map +7 -0
  12. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs +22 -0
  13. package/dist/lib/neutral/anchor-sort-TTCKGX7V.mjs.map +7 -0
  14. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  15. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  16. package/dist/lib/{browser/chunk-7VEWYJJN.mjs → neutral/chunk-4SBAIU6F.mjs} +15 -15
  17. package/dist/lib/neutral/chunk-4SBAIU6F.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-CGWDLWFZ.mjs +8 -0
  19. package/dist/lib/neutral/chunk-CGWDLWFZ.mjs.map +7 -0
  20. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  21. package/dist/lib/neutral/chunk-KC2SMDNF.mjs +373 -0
  22. package/dist/lib/neutral/chunk-KC2SMDNF.mjs.map +7 -0
  23. package/dist/lib/{browser/chunk-FWFAAGXL.mjs → neutral/chunk-UVFW5VID.mjs} +3 -9
  24. package/dist/lib/neutral/chunk-UVFW5VID.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-YFY6U524.mjs +83 -0
  26. package/dist/lib/neutral/chunk-YFY6U524.mjs.map +7 -0
  27. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs +20 -0
  28. package/dist/lib/neutral/comment-config-ZBWNCJMZ.mjs.map +7 -0
  29. package/dist/lib/neutral/components/index.mjs +1551 -0
  30. package/dist/lib/neutral/components/index.mjs.map +7 -0
  31. package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs +26 -0
  32. package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs.map +7 -0
  33. package/dist/lib/neutral/containers/index.mjs +11 -0
  34. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  35. package/dist/lib/neutral/create-object-OKQAXJCW.mjs +27 -0
  36. package/dist/lib/neutral/create-object-OKQAXJCW.mjs.map +7 -0
  37. package/dist/lib/neutral/drop-axis-G6UOXG54.mjs +23 -0
  38. package/dist/lib/neutral/drop-axis-G6UOXG54.mjs.map +7 -0
  39. package/dist/lib/{node-esm/types → neutral}/index.mjs +14 -3
  40. package/dist/lib/neutral/insert-axis-ZFFNG22G.mjs +16 -0
  41. package/dist/lib/neutral/insert-axis-ZFFNG22G.mjs.map +7 -0
  42. package/dist/lib/neutral/markdown-I2AKJYPF.mjs +28 -0
  43. package/dist/lib/neutral/markdown-I2AKJYPF.mjs.map +7 -0
  44. package/dist/lib/neutral/meta.json +1 -0
  45. package/dist/lib/neutral/meta.mjs +8 -0
  46. package/dist/lib/neutral/meta.mjs.map +7 -0
  47. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs +13 -0
  48. package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs.map +7 -0
  49. package/dist/lib/neutral/operations/index.mjs +8 -0
  50. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  51. package/dist/lib/neutral/plugin.mjs +16 -0
  52. package/dist/lib/neutral/plugin.mjs.map +7 -0
  53. package/dist/lib/neutral/react-surface-VSTQNVPT.mjs +44 -0
  54. package/dist/lib/neutral/react-surface-VSTQNVPT.mjs.map +7 -0
  55. package/dist/lib/neutral/restore-axis-44DM6N54.mjs +16 -0
  56. package/dist/lib/neutral/restore-axis-44DM6N54.mjs.map +7 -0
  57. package/dist/lib/neutral/scroll-to-anchor-QPOGMAQG.mjs +33 -0
  58. package/dist/lib/neutral/scroll-to-anchor-QPOGMAQG.mjs.map +7 -0
  59. package/dist/lib/neutral/state-HPA27MX2.mjs +29 -0
  60. package/dist/lib/neutral/state-HPA27MX2.mjs.map +7 -0
  61. package/dist/lib/neutral/testing/index.mjs +103 -0
  62. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  63. package/dist/lib/neutral/translations.mjs +55 -0
  64. package/dist/lib/neutral/translations.mjs.map +7 -0
  65. package/dist/lib/{browser → neutral}/types/index.mjs +6 -2
  66. package/dist/lib/neutral/types/index.mjs.map +7 -0
  67. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs +31 -0
  68. package/dist/lib/neutral/undo-mappings-3FQLSTCZ.mjs.map +7 -0
  69. package/dist/types/src/SheetPlugin.d.ts +3 -1
  70. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  71. package/dist/types/src/SheetPlugin.node.d.ts +4 -0
  72. package/dist/types/src/SheetPlugin.node.d.ts.map +1 -0
  73. package/dist/types/src/SheetPlugin.test.d.ts +2 -0
  74. package/dist/types/src/SheetPlugin.test.d.ts.map +1 -0
  75. package/dist/types/src/SheetPlugin.workerd.d.ts +4 -0
  76. package/dist/types/src/SheetPlugin.workerd.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -2
  78. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  80. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/compute-graph-registry.d.ts +9 -2
  82. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  84. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/index.d.ts +23 -6
  86. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  88. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  90. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/state.d.ts +6 -0
  94. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  96. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  97. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +1 -1
  98. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  99. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/Sheet/Sheet.d.ts +17 -0
  101. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  102. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  103. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  104. package/dist/types/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.d.ts +1 -1
  105. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/SheetContent/SheetContent.d.ts +6 -0
  107. package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -0
  108. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +93 -0
  109. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts.map +1 -0
  110. package/dist/types/src/components/SheetContent/index.d.ts +2 -0
  111. package/dist/types/src/components/SheetContent/index.d.ts.map +1 -0
  112. package/dist/types/src/components/{GridSheet → SheetContent}/util.d.ts +1 -1
  113. package/dist/types/src/components/SheetContent/util.d.ts.map +1 -0
  114. package/dist/types/src/components/{SheetContext/SheetContext.d.ts → SheetRoot/SheetRoot.d.ts} +8 -6
  115. package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -0
  116. package/dist/types/src/components/SheetRoot/index.d.ts +2 -0
  117. package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -0
  118. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +6 -0
  119. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -0
  120. package/dist/types/src/components/SheetStatusbar/index.d.ts +2 -0
  121. package/dist/types/src/components/SheetStatusbar/index.d.ts.map +1 -0
  122. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +5 -5
  123. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  124. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +72 -68
  125. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/SheetToolbar/align.d.ts +14 -21
  127. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  128. package/dist/types/src/components/SheetToolbar/style.d.ts +14 -20
  129. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  130. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  131. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +1 -4
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/containers/RangeList/RangeList.d.ts +7 -0
  135. package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -0
  136. package/dist/types/src/containers/RangeList/index.d.ts +2 -0
  137. package/dist/types/src/containers/RangeList/index.d.ts.map +1 -0
  138. package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts +12 -0
  139. package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts.map +1 -0
  140. package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts +92 -0
  141. package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts.map +1 -0
  142. package/dist/types/src/containers/SheetArticle/index.d.ts +2 -0
  143. package/dist/types/src/containers/SheetArticle/index.d.ts.map +1 -0
  144. package/dist/types/src/containers/index.d.ts +4 -0
  145. package/dist/types/src/containers/index.d.ts.map +1 -0
  146. package/dist/types/src/extensions/compute.d.ts +1 -1
  147. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  148. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  149. package/dist/types/src/extensions/editor/sheet-extension.d.ts +1 -1
  150. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +2 -2
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/integrations/thread-ranges.d.ts +1 -3
  154. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  155. package/dist/types/src/meta.d.ts +2 -2
  156. package/dist/types/src/meta.d.ts.map +1 -1
  157. package/dist/types/src/model/sheet-model.d.ts +2 -2
  158. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  159. package/dist/types/src/model/testing.d.ts +1 -1
  160. package/dist/types/src/model/testing.d.ts.map +1 -1
  161. package/dist/types/src/model/useSheetModel.d.ts +2 -2
  162. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  163. package/dist/types/src/operations/drop-axis.d.ts +5 -0
  164. package/dist/types/src/operations/drop-axis.d.ts.map +1 -0
  165. package/dist/types/src/operations/index.d.ts +3 -0
  166. package/dist/types/src/operations/index.d.ts.map +1 -0
  167. package/dist/types/src/operations/insert-axis.d.ts +5 -0
  168. package/dist/types/src/operations/insert-axis.d.ts.map +1 -0
  169. package/dist/types/src/operations/restore-axis.d.ts +5 -0
  170. package/dist/types/src/operations/restore-axis.d.ts.map +1 -0
  171. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  172. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  173. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
  174. package/dist/types/src/playwright/sheet-manager.d.ts.map +1 -1
  175. package/dist/types/src/plugin.d.ts +4 -0
  176. package/dist/types/src/plugin.d.ts.map +1 -0
  177. package/dist/types/src/serializer.d.ts +2 -2
  178. package/dist/types/src/serializer.d.ts.map +1 -1
  179. package/dist/types/src/testing/data.d.ts +1 -1
  180. package/dist/types/src/testing/data.d.ts.map +1 -1
  181. package/dist/types/src/testing/testing.d.ts +17 -17
  182. package/dist/types/src/testing/testing.d.ts.map +1 -1
  183. package/dist/types/src/translations.d.ts +74 -39
  184. package/dist/types/src/translations.d.ts.map +1 -1
  185. package/dist/types/src/types/Sheet.d.ts +40 -34
  186. package/dist/types/src/types/Sheet.d.ts.map +1 -1
  187. package/dist/types/src/types/SheetCapabilities.d.ts +16 -0
  188. package/dist/types/src/types/SheetCapabilities.d.ts.map +1 -0
  189. package/dist/types/src/types/SheetOperation.d.ts +45 -0
  190. package/dist/types/src/types/SheetOperation.d.ts.map +1 -0
  191. package/dist/types/src/types/index.d.ts +3 -1
  192. package/dist/types/src/types/index.d.ts.map +1 -1
  193. package/dist/types/src/types/sheet-range-types.d.ts +1 -1
  194. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  195. package/dist/types/src/types/types.d.ts +2 -68
  196. package/dist/types/src/types/types.d.ts.map +1 -1
  197. package/dist/types/src/types/util.d.ts +3 -2
  198. package/dist/types/src/types/util.d.ts.map +1 -1
  199. package/dist/types/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +132 -82
  201. package/src/SheetPlugin.node.ts +21 -0
  202. package/src/SheetPlugin.test.ts +30 -0
  203. package/src/SheetPlugin.tsx +38 -64
  204. package/src/SheetPlugin.workerd.ts +18 -0
  205. package/src/capabilities/anchor-sort.ts +19 -13
  206. package/src/capabilities/comment-config.ts +24 -0
  207. package/src/capabilities/compute-graph-registry.ts +34 -15
  208. package/src/capabilities/create-object.ts +30 -0
  209. package/src/capabilities/index.ts +16 -8
  210. package/src/capabilities/markdown.ts +21 -13
  211. package/src/capabilities/operation-handler.ts +16 -0
  212. package/src/capabilities/react-surface.tsx +38 -30
  213. package/src/capabilities/state.ts +29 -0
  214. package/src/capabilities/undo-mappings.ts +30 -0
  215. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +1 -1
  216. package/src/components/ComputeGraph/compute-graph.stories.tsx +25 -17
  217. package/src/components/Sheet/Sheet.tsx +20 -0
  218. package/src/components/Sheet/index.ts +5 -0
  219. package/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.tsx +13 -9
  220. package/src/components/{GridSheet/GridSheet.stories.tsx → SheetContent/SheetContent.stories.tsx} +21 -20
  221. package/src/components/{GridSheet/GridSheet.tsx → SheetContent/SheetContent.tsx} +68 -50
  222. package/src/components/{RangeList → SheetContent}/index.ts +1 -1
  223. package/src/components/{GridSheet → SheetContent}/util.ts +7 -6
  224. package/src/components/{SheetContext/SheetContext.tsx → SheetRoot/SheetRoot.tsx} +55 -42
  225. package/src/components/{GridSheet → SheetRoot}/index.ts +1 -1
  226. package/src/components/{FunctionEditor/FunctionEditor.tsx → SheetStatusbar/SheetStatusbar.tsx} +20 -8
  227. package/src/components/{FunctionEditor → SheetStatusbar}/index.ts +1 -1
  228. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +5 -5
  229. package/src/components/SheetToolbar/SheetToolbar.tsx +46 -39
  230. package/src/components/SheetToolbar/align.ts +50 -25
  231. package/src/components/SheetToolbar/style.ts +52 -22
  232. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  233. package/src/components/index.ts +1 -7
  234. package/src/{components → containers}/RangeList/RangeList.tsx +23 -18
  235. package/src/containers/RangeList/index.ts +5 -0
  236. package/src/containers/SheetArticle/SheetArticle.stories.tsx +110 -0
  237. package/src/containers/SheetArticle/SheetArticle.tsx +57 -0
  238. package/src/containers/SheetArticle/index.ts +5 -0
  239. package/src/containers/index.ts +8 -0
  240. package/src/extensions/compute.stories.tsx +31 -21
  241. package/src/extensions/compute.ts +2 -2
  242. package/src/extensions/editor/sheet-extension.test.ts +1 -1
  243. package/src/extensions/editor/sheet-extension.ts +18 -15
  244. package/src/index.ts +2 -2
  245. package/src/integrations/thread-ranges.ts +18 -55
  246. package/src/meta.ts +4 -3
  247. package/src/model/sheet-model.test.ts +5 -5
  248. package/src/model/sheet-model.ts +72 -40
  249. package/src/model/testing.ts +2 -2
  250. package/src/model/useSheetModel.ts +3 -2
  251. package/src/operations/drop-axis.ts +26 -0
  252. package/src/operations/index.ts +12 -0
  253. package/src/operations/insert-axis.ts +19 -0
  254. package/src/operations/restore-axis.ts +19 -0
  255. package/src/operations/scroll-to-anchor.ts +30 -0
  256. package/src/playwright/playwright.config.ts +1 -1
  257. package/src/playwright/sheet.spec.ts +4 -3
  258. package/src/plugin.ts +11 -0
  259. package/src/sanity.test.ts +10 -3
  260. package/src/serializer.ts +2 -2
  261. package/src/testing/data.ts +1 -1
  262. package/src/testing/testing.tsx +4 -4
  263. package/src/translations.ts +41 -36
  264. package/src/types/Sheet.ts +31 -31
  265. package/src/types/SheetCapabilities.ts +26 -0
  266. package/src/types/SheetOperation.ts +75 -0
  267. package/src/types/index.ts +4 -1
  268. package/src/types/sheet-range-types.ts +3 -3
  269. package/src/types/types.ts +4 -40
  270. package/src/types/util.ts +3 -2
  271. package/dist/lib/browser/SheetContainer-WDKJPYCB.mjs +0 -349
  272. package/dist/lib/browser/SheetContainer-WDKJPYCB.mjs.map +0 -7
  273. package/dist/lib/browser/anchor-sort-OWOAGQM6.mjs +0 -23
  274. package/dist/lib/browser/anchor-sort-OWOAGQM6.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-6ILNTWSF.mjs +0 -852
  276. package/dist/lib/browser/chunk-6ILNTWSF.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-73AV3NH6.mjs +0 -15
  278. package/dist/lib/browser/chunk-73AV3NH6.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-7VEWYJJN.mjs.map +0 -7
  280. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-GBK6OLCY.mjs +0 -907
  282. package/dist/lib/browser/chunk-GBK6OLCY.mjs.map +0 -7
  283. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs +0 -21
  284. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs.map +0 -7
  285. package/dist/lib/browser/index.mjs +0 -154
  286. package/dist/lib/browser/index.mjs.map +0 -7
  287. package/dist/lib/browser/intent-resolver-OMHQGXFL.mjs +0 -56
  288. package/dist/lib/browser/intent-resolver-OMHQGXFL.mjs.map +0 -7
  289. package/dist/lib/browser/markdown-B6VKYY2S.mjs +0 -26
  290. package/dist/lib/browser/markdown-B6VKYY2S.mjs.map +0 -7
  291. package/dist/lib/browser/meta.json +0 -1
  292. package/dist/lib/browser/react-surface-VPLFBQSV.mjs +0 -54
  293. package/dist/lib/browser/react-surface-VPLFBQSV.mjs.map +0 -7
  294. package/dist/lib/node-esm/SheetContainer-62MZAU6Q.mjs +0 -350
  295. package/dist/lib/node-esm/SheetContainer-62MZAU6Q.mjs.map +0 -7
  296. package/dist/lib/node-esm/anchor-sort-FG3DS4HM.mjs +0 -24
  297. package/dist/lib/node-esm/anchor-sort-FG3DS4HM.mjs.map +0 -7
  298. package/dist/lib/node-esm/chunk-44YTKTMP.mjs +0 -16
  299. package/dist/lib/node-esm/chunk-44YTKTMP.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs +0 -236
  301. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +0 -29
  303. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-KSHCRK5J.mjs +0 -908
  305. package/dist/lib/node-esm/chunk-KSHCRK5J.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-QI3PNRCD.mjs +0 -853
  307. package/dist/lib/node-esm/chunk-QI3PNRCD.mjs.map +0 -7
  308. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs +0 -22
  309. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs.map +0 -7
  310. package/dist/lib/node-esm/index.mjs +0 -155
  311. package/dist/lib/node-esm/index.mjs.map +0 -7
  312. package/dist/lib/node-esm/intent-resolver-DHEHYV3B.mjs +0 -57
  313. package/dist/lib/node-esm/intent-resolver-DHEHYV3B.mjs.map +0 -7
  314. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs +0 -27
  315. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs.map +0 -7
  316. package/dist/lib/node-esm/meta.json +0 -1
  317. package/dist/lib/node-esm/react-surface-YLTZQVNL.mjs +0 -55
  318. package/dist/lib/node-esm/react-surface-YLTZQVNL.mjs.map +0 -7
  319. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  320. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  321. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  322. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  323. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  324. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  325. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  326. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  327. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  328. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  329. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -55
  330. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  331. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  332. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  333. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  334. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  335. package/dist/types/src/components/RangeList/RangeList.d.ts +0 -7
  336. package/dist/types/src/components/RangeList/RangeList.d.ts.map +0 -1
  337. package/dist/types/src/components/RangeList/index.d.ts +0 -2
  338. package/dist/types/src/components/RangeList/index.d.ts.map +0 -1
  339. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -11
  340. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  341. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -56
  342. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  343. package/dist/types/src/components/SheetContainer/index.d.ts +0 -3
  344. package/dist/types/src/components/SheetContainer/index.d.ts.map +0 -1
  345. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  346. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  347. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  348. package/src/capabilities/capabilities.ts +0 -14
  349. package/src/capabilities/intent-resolver.ts +0 -38
  350. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -93
  351. package/src/components/SheetContainer/SheetContainer.tsx +0 -41
  352. package/src/components/SheetContainer/index.ts +0 -7
  353. package/src/components/SheetContext/index.ts +0 -5
  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
@@ -8,14 +8,15 @@ import React, {
8
8
  type MouseEvent,
9
9
  type WheelEvent,
10
10
  useCallback,
11
+ useEffect,
11
12
  useMemo,
12
13
  useRef,
13
14
  useState,
14
15
  } from 'react';
15
16
 
16
- import { createIntent } from '@dxos/app-framework';
17
- import { useIntentDispatcher } from '@dxos/app-framework/react';
18
- import { type CellRange, rangeToA1Notation } 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';
19
20
  import { defaultColSize, defaultRowSize } from '@dxos/lit-grid';
20
21
  import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
21
22
  import { useAttention } from '@dxos/react-ui-attention';
@@ -32,13 +33,15 @@ import {
32
33
  editorKeys,
33
34
  parseCellIndex,
34
35
  } from '@dxos/react-ui-grid';
36
+ import { composable, composableProps } from '@dxos/ui-theme';
35
37
 
36
- import { type RangeController, rangeExtension, sheetExtension } from '../../extensions';
37
- import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
38
- import { meta } from '../../meta';
39
- import { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';
40
- import { useSheetContext } from '../SheetContext';
38
+ import { meta } from '#meta';
39
+ import { SheetOperation } from '#types';
40
+ import { DEFAULT_COLS, DEFAULT_ROWS, SheetCapabilities } from '#types';
41
41
 
42
+ import { type RangeController, rangeExtension, sheetExtension } from '../../extensions';
43
+ import { useSelectThreadOnCellFocus } from '../../integrations';
44
+ import { useSheetContext } from '../SheetRoot';
42
45
  import { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';
43
46
 
44
47
  const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
@@ -69,15 +72,29 @@ const sheetRowDefault = {
69
72
  grid: { size: defaultRowSize, resizeable: true },
70
73
  };
71
74
 
72
- export const GridSheet = () => {
75
+ export type SheetContentProps = {};
76
+
77
+ export const SheetContent = composable<HTMLDivElement, SheetContentProps>((props, forwardedRef) => {
73
78
  const { t } = useTranslation(meta.id);
74
- const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =
75
- useSheetContext();
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
+
76
93
  // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
77
94
  // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
78
95
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
79
96
  const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
80
- const { dispatchPromise: dispatch } = useIntentDispatcher();
97
+ const { invokePromise } = useOperationInvoker();
81
98
  const rangeController = useRef<RangeController>(null);
82
99
  const { hasAttention } = useAttention(id);
83
100
 
@@ -128,15 +145,17 @@ export const GridSheet = () => {
128
145
 
129
146
  const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(
130
147
  ({ axis, size, index: numericIndex }) => {
131
- if (axis === 'row') {
132
- const rowId = model.sheet.rows[parseInt(numericIndex)];
133
- model.sheet.rowMeta[rowId] ??= {};
134
- model.sheet.rowMeta[rowId].size = size;
135
- } else {
136
- const columnId = model.sheet.columns[parseInt(numericIndex)];
137
- model.sheet.columnMeta[columnId] ??= {};
138
- model.sheet.columnMeta[columnId].size = size;
139
- }
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
+ });
140
159
  },
141
160
  [model],
142
161
  );
@@ -266,24 +285,20 @@ export const GridSheet = () => {
266
285
  switch (operation) {
267
286
  case 'insert-before':
268
287
  case 'insert-after':
269
- return dispatch(
270
- createIntent(SheetAction.InsertAxis, {
271
- model,
272
- axis: contextMenuAxis,
273
- index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
274
- }),
275
- );
288
+ return invokePromise(SheetOperation.InsertAxis, {
289
+ model,
290
+ axis: contextMenuAxis,
291
+ index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
292
+ });
276
293
  case 'drop':
277
- return dispatch(
278
- createIntent(SheetAction.DropAxis, {
279
- model,
280
- axis: contextMenuAxis,
281
- axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
282
- }),
283
- );
294
+ return invokePromise(SheetOperation.DropAxis, {
295
+ model,
296
+ axis: contextMenuAxis,
297
+ axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
298
+ });
284
299
  }
285
300
  },
286
- [contextMenuAxis, contextMenuOpen, model, dispatch],
301
+ [contextMenuAxis, contextMenuOpen, model, invokePromise],
287
302
  );
288
303
 
289
304
  const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
@@ -315,23 +330,31 @@ export const GridSheet = () => {
315
330
  [model],
316
331
  );
317
332
 
318
- 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
+
319
341
  useSelectThreadOnCellFocus();
320
342
 
321
343
  return (
322
- // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
323
- <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent'>
344
+ <div ref={forwardedRef} {...composableProps(props, { classNames: 'relative min-h-0' })}>
324
345
  <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />
325
346
  <Grid.Content
347
+ className='[--dx-grid-base:var(--base-surface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
326
348
  initialCells={initialCells}
327
349
  limitColumns={DEFAULT_COLS}
328
350
  limitRows={DEFAULT_ROWS}
329
351
  columns={columns}
330
352
  rows={rows}
331
- // TODO(burdon): `col` vs. `column`?
332
353
  columnDefault={sheetColDefault}
333
354
  rowDefault={sheetRowDefault}
355
+ activeRefs={activeRefs}
334
356
  frozen={frozen}
357
+ overscroll='trap'
335
358
  onAxisResize={handleAxisResize}
336
359
  onSelect={handleSelect}
337
360
  onFocus={handleFocus}
@@ -339,9 +362,6 @@ export const GridSheet = () => {
339
362
  onKeyDown={handleKeyDown}
340
363
  onContextMenu={handleContextMenu}
341
364
  onClick={handleClick}
342
- overscroll='trap'
343
- className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
344
- activeRefs={activeRefs}
345
365
  ref={setDxGrid}
346
366
  />
347
367
  <DropdownMenu.Root
@@ -357,27 +377,25 @@ export const GridSheet = () => {
357
377
  data-testid={`grid.${contextMenuAxis}.insert-before`}
358
378
  >
359
379
  <Icon
360
- size={5}
361
380
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
362
381
  />
363
- <span>{t(`add ${contextMenuAxis} before label`)}</span>
382
+ <span>{t(`add-${contextMenuAxis}-before.label`)}</span>
364
383
  </DropdownMenu.Item>
365
384
  <DropdownMenu.Item
366
385
  onClick={() => handleAxisMenuAction('insert-after')}
367
386
  data-testid={`grid.${contextMenuAxis}.insert-after`}
368
387
  >
369
388
  <Icon
370
- size={5}
371
389
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
372
390
  />
373
- <span>{t(`add ${contextMenuAxis} after label`)}</span>
391
+ <span>{t(`add-${contextMenuAxis}-after.label`)}</span>
374
392
  </DropdownMenu.Item>
375
393
  <DropdownMenu.Item
376
394
  onClick={() => handleAxisMenuAction('drop')}
377
395
  data-testid={`grid.${contextMenuAxis}.drop`}
378
396
  >
379
- <Icon size={5} icon='ph--backspace--regular' />
380
- <span>{t(`delete ${contextMenuAxis} label`)}</span>
397
+ <Icon icon='ph--backspace--regular' />
398
+ <span>{t(`delete-${contextMenuAxis}.label`)}</span>
381
399
  </DropdownMenu.Item>
382
400
  </DropdownMenu.Viewport>
383
401
  <DropdownMenu.Arrow />
@@ -385,4 +403,4 @@ export const GridSheet = () => {
385
403
  </DropdownMenu.Root>
386
404
  </div>
387
405
  );
388
- };
406
+ });
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './RangeList';
5
+ export * from './SheetContent';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { useEffect, useState } from 'react';
6
6
 
7
- import { inRange } from '@dxos/compute';
7
+ import { inRange } from '@dxos/compute-hyperformula';
8
8
  import { createDocAccessor } from '@dxos/echo-db';
9
9
  import { cellClassesForFieldType, parseValue } from '@dxos/react-ui-form';
10
10
  import {
@@ -19,10 +19,11 @@ 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(
@@ -96,13 +97,13 @@ const gridCellGetter = (model: SheetModel) => {
96
97
 
97
98
  export const rowLabelCell = (row: number) => ({
98
99
  value: rowToA1Notation(row),
99
- className: '!bg-toolbarSurface text-subdued text-end pie-1',
100
+ className: '!bg-toolbar-surface text-subdued text-end pe-1',
100
101
  resizeHandle: 'row',
101
102
  });
102
103
 
103
104
  export const colLabelCell = (col: number) => ({
104
105
  value: colToA1Notation(col),
105
- className: '!bg-toolbarSurface text-subdued',
106
+ className: '!bg-toolbar-surface text-subdued',
106
107
  resizeHandle: 'col',
107
108
  });
108
109
 
@@ -114,7 +115,7 @@ const cellGetter = (model: SheetModel) => {
114
115
  return getGridCells(nextBounds);
115
116
  case 'fixedStartStart': {
116
117
  return {
117
- '0,0': { className: '!bg-toolbarSurface' },
118
+ '0,0': { className: '!bg-toolbar-surface' },
118
119
  };
119
120
  }
120
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 { Obj } from '@dxos/echo';
9
- import { invariant } from '@dxos/invariant';
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 Sheet } 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: Sheet.Sheet;
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={Obj.getDXN(sheet).toString()}>
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 pli-4 plb-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
- <div className='flex is-16 items-center font-mono'>
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,36 +2,40 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Atom } from '@effect-atom/atom-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/react';
9
- import { type CompleteCellRange } from '@dxos/compute';
10
- import {
11
- type ActionGraphProps,
12
- MenuProvider,
13
- ToolbarMenu,
14
- atomFromSignal,
15
- createGapSeparator,
16
- useMenuActions,
17
- } 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';
18
12
 
19
13
  import { type SheetModel } from '../../model';
20
- import { useSheetContext } from '../SheetContext';
21
-
14
+ import { useSheetContext } from '../SheetRoot';
22
15
  import { createAlign, useAlignState } from './align';
23
16
  import { createStyle, useStyleState } from './style';
24
- import { type ToolbarState, useToolbarState } from './useToolbarState';
17
+ import { type ToolbarStateAtom, useToolbarState } from './useToolbarState';
18
+
19
+ type ToolbarActionsContext = {
20
+ model: SheetModel;
21
+ stateAtom: ToolbarStateAtom;
22
+ registry: Registry.Registry;
23
+ cursorFallbackRange?: CompleteCellRange;
24
+ customActions?: Atom.Atom<ActionGraphProps>;
25
+ };
25
26
 
26
- const createToolbarActions = (
27
- model: SheetModel,
28
- state: ToolbarState,
29
- cursorFallbackRange?: CompleteCellRange,
30
- customActions?: Atom.Atom<ActionGraphProps>,
31
- ): Atom.Atom<ActionGraphProps> => {
27
+ const createToolbarActions = ({
28
+ model,
29
+ stateAtom,
30
+ registry,
31
+ cursorFallbackRange,
32
+ customActions,
33
+ }: ToolbarActionsContext): Atom.Atom<ActionGraphProps> => {
32
34
  return Atom.make((get) => {
33
- const align = get(atomFromSignal(() => createAlign(model, state, cursorFallbackRange)));
34
- const style = get(atomFromSignal(() => createStyle(model, state, cursorFallbackRange)));
35
+ const state = get(stateAtom);
36
+ const context = { model, state, stateAtom, registry, cursorFallbackRange };
37
+ const align = createAlign(context);
38
+ const style = createStyle(context);
35
39
  const gap = createGapSeparator();
36
40
 
37
41
  const graph: ActionGraphProps = {
@@ -49,35 +53,38 @@ const createToolbarActions = (
49
53
  });
50
54
  };
51
55
 
52
- export type SheetToolbarProps = PropsWithChildren<{ id: string }>;
56
+ export type SheetToolbarProps = {};
53
57
 
54
- export const SheetToolbar = ({ id }: SheetToolbarProps) => {
55
- const { model, cursorFallbackRange } = useSheetContext();
56
- const state = useToolbarState({});
57
- useAlignState(state);
58
- useStyleState(state);
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);
59
64
 
60
65
  const { graph } = useAppGraph();
61
66
  const customActions = useMemo(() => {
62
67
  return Atom.make((get) => {
63
- const actions = get(graph.actions(id));
68
+ const actions = get(graph.actions(attendableId));
64
69
  const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
65
70
  return {
66
71
  nodes,
67
- edges: nodes.map((node) => ({ source: 'root', target: node.id })),
72
+ edges: nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' })),
68
73
  };
69
74
  });
70
- }, [graph]);
75
+ }, [graph, attendableId]);
71
76
 
72
77
  const actionsCreator = useMemo(
73
- () => createToolbarActions(model, state, cursorFallbackRange, customActions),
74
- [model, state, cursorFallbackRange, customActions],
78
+ () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),
79
+ [model, stateAtom, registry, cursorFallbackRange, customActions],
75
80
  );
76
- const menu = useMenuActions(actionsCreator);
81
+ const menuActions = useMenuActions(actionsCreator);
77
82
 
78
83
  return (
79
- <MenuProvider {...menu} attendableId={id}>
80
- <ToolbarMenu />
81
- </MenuProvider>
84
+ <Menu.Root {...menuActions} attendableId={attendableId}>
85
+ <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />
86
+ </Menu.Root>
82
87
  );
83
- };
88
+ });
89
+
90
+ SheetToolbar.displayName = 'SheetToolbar';