@dxos/plugin-sheet 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (281) hide show
  1. package/dist/lib/browser/{chunk-KE3AKN5W.mjs → chunk-CBNIKBPQ.mjs} +21 -140
  2. package/dist/lib/browser/chunk-CBNIKBPQ.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-GZ2EV64I.mjs +118 -0
  4. package/dist/lib/browser/chunk-GZ2EV64I.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  6. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  7. package/dist/lib/browser/drop-axis-PB7F3LBV.mjs +23 -0
  8. package/dist/lib/browser/drop-axis-PB7F3LBV.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +104 -86
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/insert-axis-DH5CO4AY.mjs +16 -0
  12. package/dist/lib/browser/insert-axis-DH5CO4AY.mjs.map +7 -0
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/operations/index.mjs +13 -0
  15. package/dist/lib/browser/operations/index.mjs.map +7 -0
  16. package/dist/lib/browser/restore-axis-Y5H5IOC6.mjs +16 -0
  17. package/dist/lib/browser/restore-axis-Y5H5IOC6.mjs.map +7 -0
  18. package/dist/lib/browser/scroll-to-anchor-MN36E3X7.mjs +65 -0
  19. package/dist/lib/browser/scroll-to-anchor-MN36E3X7.mjs.map +7 -0
  20. package/dist/lib/browser/types/index.mjs +2 -3
  21. package/dist/lib/node-esm/{chunk-6J5L47IB.mjs → chunk-3ZYLQWHC.mjs} +21 -140
  22. package/dist/lib/node-esm/chunk-3ZYLQWHC.mjs.map +7 -0
  23. package/dist/lib/node-esm/chunk-74MOADQ7.mjs +119 -0
  24. package/dist/lib/node-esm/chunk-74MOADQ7.mjs.map +7 -0
  25. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  26. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  27. package/dist/lib/node-esm/drop-axis-UBBQCU6D.mjs +24 -0
  28. package/dist/lib/node-esm/drop-axis-UBBQCU6D.mjs.map +7 -0
  29. package/dist/lib/node-esm/index.mjs +104 -86
  30. package/dist/lib/node-esm/index.mjs.map +4 -4
  31. package/dist/lib/node-esm/insert-axis-S7BR2RSJ.mjs +17 -0
  32. package/dist/lib/node-esm/insert-axis-S7BR2RSJ.mjs.map +7 -0
  33. package/dist/lib/node-esm/meta.json +1 -1
  34. package/dist/lib/node-esm/operations/index.mjs +14 -0
  35. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  36. package/dist/lib/node-esm/restore-axis-6B25SOHX.mjs +17 -0
  37. package/dist/lib/node-esm/restore-axis-6B25SOHX.mjs.map +7 -0
  38. package/dist/lib/node-esm/scroll-to-anchor-YLB4MYGF.mjs +66 -0
  39. package/dist/lib/node-esm/scroll-to-anchor-YLB4MYGF.mjs.map +7 -0
  40. package/dist/lib/node-esm/types/index.mjs +2 -3
  41. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  42. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  43. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  44. package/dist/types/src/capabilities/compute-graph-registry.d.ts +5 -0
  45. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -0
  46. package/dist/types/src/capabilities/index.d.ts +9 -5
  47. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  48. package/dist/types/src/capabilities/markdown.d.ts +5 -0
  49. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  50. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  51. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  52. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  53. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  54. package/dist/types/src/capabilities/state.d.ts +6 -0
  55. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  56. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  57. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  58. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Sheet/Sheet.d.ts +29 -0
  60. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  61. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  62. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  63. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts.map +1 -0
  64. package/dist/types/src/components/SheetContent/SheetContent.d.ts +10 -0
  65. package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -0
  66. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +63 -0
  67. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/SheetContent/index.d.ts +2 -0
  69. package/dist/types/src/components/SheetContent/index.d.ts.map +1 -0
  70. package/dist/types/src/components/SheetContent/util.d.ts.map +1 -0
  71. package/dist/types/src/components/{SheetContext/SheetContext.d.ts → SheetRoot/SheetRoot.d.ts} +7 -5
  72. package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -0
  73. package/dist/types/src/components/SheetRoot/index.d.ts +2 -0
  74. package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -0
  75. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +10 -0
  76. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -0
  77. package/dist/types/src/components/SheetStatusbar/index.d.ts +2 -0
  78. package/dist/types/src/components/SheetStatusbar/index.d.ts.map +1 -0
  79. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +9 -5
  80. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  81. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +72 -68
  82. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  83. package/dist/types/src/components/SheetToolbar/align.d.ts +1 -1
  84. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  85. package/dist/types/src/components/SheetToolbar/style.d.ts +1 -1
  86. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  87. package/dist/types/src/components/index.d.ts +1 -4
  88. package/dist/types/src/components/index.d.ts.map +1 -1
  89. package/dist/types/src/{components → containers}/RangeList/RangeList.d.ts +1 -1
  90. package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -0
  91. package/dist/types/src/containers/RangeList/index.d.ts +3 -0
  92. package/dist/types/src/containers/RangeList/index.d.ts.map +1 -0
  93. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts +12 -0
  94. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts.map +1 -0
  95. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts +58 -0
  96. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts.map +1 -0
  97. package/dist/types/src/{components → containers}/SheetContainer/index.d.ts.map +1 -1
  98. package/dist/types/src/containers/index.d.ts +4 -0
  99. package/dist/types/src/containers/index.d.ts.map +1 -0
  100. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  101. package/dist/types/src/integrations/thread-ranges.d.ts +0 -2
  102. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  103. package/dist/types/src/model/sheet-model.d.ts +1 -1
  104. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  105. package/dist/types/src/model/testing.d.ts +1 -1
  106. package/dist/types/src/model/testing.d.ts.map +1 -1
  107. package/dist/types/src/model/useSheetModel.d.ts +1 -1
  108. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  109. package/dist/types/src/operations/definitions.d.ts +45 -0
  110. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  111. package/dist/types/src/operations/drop-axis.d.ts +5 -0
  112. package/dist/types/src/operations/drop-axis.d.ts.map +1 -0
  113. package/dist/types/src/operations/index.d.ts +4 -0
  114. package/dist/types/src/operations/index.d.ts.map +1 -0
  115. package/dist/types/src/operations/insert-axis.d.ts +5 -0
  116. package/dist/types/src/operations/insert-axis.d.ts.map +1 -0
  117. package/dist/types/src/operations/restore-axis.d.ts +5 -0
  118. package/dist/types/src/operations/restore-axis.d.ts.map +1 -0
  119. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  120. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  121. package/dist/types/src/serializer.d.ts +1 -1
  122. package/dist/types/src/serializer.d.ts.map +1 -1
  123. package/dist/types/src/testing/data.d.ts +1 -1
  124. package/dist/types/src/testing/data.d.ts.map +1 -1
  125. package/dist/types/src/testing/testing.d.ts +5 -5
  126. package/dist/types/src/testing/testing.d.ts.map +1 -1
  127. package/dist/types/src/translations.d.ts +38 -36
  128. package/dist/types/src/translations.d.ts.map +1 -1
  129. package/dist/types/src/types/Sheet.d.ts +7 -7
  130. package/dist/types/src/types/Sheet.d.ts.map +1 -1
  131. package/dist/types/src/types/capabilities.d.ts +12 -0
  132. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  133. package/dist/types/src/types/types.d.ts +0 -92
  134. package/dist/types/src/types/types.d.ts.map +1 -1
  135. package/dist/types/tsconfig.tsbuildinfo +1 -1
  136. package/package.json +81 -63
  137. package/src/SheetPlugin.tsx +46 -28
  138. package/src/capabilities/{anchor-sort/anchor-sort.ts → anchor-sort.ts} +4 -3
  139. package/src/capabilities/{compute-graph-registry/compute-graph-registry.ts → compute-graph-registry.ts} +2 -2
  140. package/src/capabilities/index.ts +13 -5
  141. package/src/capabilities/{markdown/markdown.ts → markdown.ts} +2 -2
  142. package/src/capabilities/operation-handler.ts +16 -0
  143. package/src/capabilities/react-surface.tsx +49 -0
  144. package/src/capabilities/state.ts +29 -0
  145. package/src/capabilities/undo-mappings.ts +30 -0
  146. package/src/components/ComputeGraph/compute-graph.stories.tsx +13 -8
  147. package/src/components/Sheet/Sheet.tsx +20 -0
  148. package/src/components/Sheet/index.ts +5 -0
  149. package/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.tsx +6 -6
  150. package/src/components/{GridSheet/GridSheet.stories.tsx → SheetContent/SheetContent.stories.tsx} +15 -14
  151. package/src/components/{GridSheet/GridSheet.tsx → SheetContent/SheetContent.tsx} +42 -22
  152. package/src/components/{RangeList → SheetContent}/index.ts +1 -1
  153. package/src/components/{GridSheet → SheetContent}/util.ts +4 -4
  154. package/src/components/{SheetContext/SheetContext.tsx → SheetRoot/SheetRoot.tsx} +45 -38
  155. package/src/components/{GridSheet → SheetRoot}/index.ts +1 -1
  156. package/src/components/{FunctionEditor/FunctionEditor.tsx → SheetStatusbar/SheetStatusbar.tsx} +19 -7
  157. package/src/components/{FunctionEditor → SheetStatusbar}/index.ts +1 -1
  158. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +4 -4
  159. package/src/components/SheetToolbar/SheetToolbar.tsx +18 -21
  160. package/src/components/SheetToolbar/align.ts +13 -13
  161. package/src/components/SheetToolbar/style.ts +10 -10
  162. package/src/components/index.ts +1 -7
  163. package/src/{components → containers}/RangeList/RangeList.tsx +16 -15
  164. package/src/containers/RangeList/index.ts +7 -0
  165. package/src/{components → containers}/SheetContainer/SheetContainer.stories.tsx +38 -42
  166. package/src/containers/SheetContainer/SheetContainer.tsx +57 -0
  167. package/src/{components → containers}/SheetContainer/index.ts +1 -1
  168. package/src/containers/index.ts +8 -0
  169. package/src/extensions/compute.stories.tsx +13 -12
  170. package/src/extensions/editor/sheet-extension.ts +10 -10
  171. package/src/integrations/thread-ranges.ts +6 -39
  172. package/src/meta.ts +1 -1
  173. package/src/model/sheet-model.test.ts +3 -3
  174. package/src/model/sheet-model.ts +38 -36
  175. package/src/model/testing.ts +1 -1
  176. package/src/model/useSheetModel.ts +1 -1
  177. package/src/operations/definitions.ts +73 -0
  178. package/src/operations/drop-axis.ts +26 -0
  179. package/src/operations/index.ts +14 -0
  180. package/src/operations/insert-axis.ts +19 -0
  181. package/src/operations/restore-axis.ts +19 -0
  182. package/src/operations/scroll-to-anchor.ts +31 -0
  183. package/src/playwright/playwright.config.ts +1 -1
  184. package/src/playwright/sheet.spec.ts +1 -1
  185. package/src/sanity.test.ts +6 -3
  186. package/src/serializer.ts +1 -1
  187. package/src/testing/data.ts +1 -1
  188. package/src/testing/testing.tsx +2 -2
  189. package/src/translations.ts +38 -36
  190. package/src/types/Sheet.ts +13 -7
  191. package/src/types/capabilities.ts +14 -2
  192. package/src/types/sheet-range-types.ts +3 -3
  193. package/src/types/types.ts +0 -80
  194. package/dist/lib/browser/SheetContainer-J72HS2FI.mjs +0 -397
  195. package/dist/lib/browser/SheetContainer-J72HS2FI.mjs.map +0 -7
  196. package/dist/lib/browser/anchor-sort-LLO7PZKF.mjs +0 -23
  197. package/dist/lib/browser/anchor-sort-LLO7PZKF.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-IFLWVS2V.mjs +0 -234
  199. package/dist/lib/browser/chunk-IFLWVS2V.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-KE3AKN5W.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-S27QJYTN.mjs +0 -1473
  202. package/dist/lib/browser/chunk-S27QJYTN.mjs.map +0 -7
  203. package/dist/lib/browser/compute-graph-registry-RC5L7RE4.mjs +0 -21
  204. package/dist/lib/browser/compute-graph-registry-RC5L7RE4.mjs.map +0 -7
  205. package/dist/lib/browser/markdown-D2T2DOVX.mjs +0 -29
  206. package/dist/lib/browser/markdown-D2T2DOVX.mjs.map +0 -7
  207. package/dist/lib/browser/operation-resolver-YDOW72CN.mjs +0 -79
  208. package/dist/lib/browser/operation-resolver-YDOW72CN.mjs.map +0 -7
  209. package/dist/lib/browser/react-surface-JIYVFH42.mjs +0 -51
  210. package/dist/lib/browser/react-surface-JIYVFH42.mjs.map +0 -7
  211. package/dist/lib/node-esm/SheetContainer-OGSSDOZU.mjs +0 -398
  212. package/dist/lib/node-esm/SheetContainer-OGSSDOZU.mjs.map +0 -7
  213. package/dist/lib/node-esm/anchor-sort-OX5I2YOW.mjs +0 -24
  214. package/dist/lib/node-esm/anchor-sort-OX5I2YOW.mjs.map +0 -7
  215. package/dist/lib/node-esm/chunk-6J5L47IB.mjs.map +0 -7
  216. package/dist/lib/node-esm/chunk-PPOYR7DK.mjs +0 -236
  217. package/dist/lib/node-esm/chunk-PPOYR7DK.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-Y4V6HVHO.mjs +0 -1474
  219. package/dist/lib/node-esm/chunk-Y4V6HVHO.mjs.map +0 -7
  220. package/dist/lib/node-esm/compute-graph-registry-ZGXVLVGD.mjs +0 -22
  221. package/dist/lib/node-esm/compute-graph-registry-ZGXVLVGD.mjs.map +0 -7
  222. package/dist/lib/node-esm/markdown-PTV72DLO.mjs +0 -30
  223. package/dist/lib/node-esm/markdown-PTV72DLO.mjs.map +0 -7
  224. package/dist/lib/node-esm/operation-resolver-Q63VQBVA.mjs +0 -80
  225. package/dist/lib/node-esm/operation-resolver-Q63VQBVA.mjs.map +0 -7
  226. package/dist/lib/node-esm/react-surface-SWRZSZVR.mjs +0 -52
  227. package/dist/lib/node-esm/react-surface-SWRZSZVR.mjs.map +0 -7
  228. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +0 -5
  229. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +0 -1
  230. package/dist/types/src/capabilities/anchor-sort/index.d.ts +0 -3
  231. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +0 -1
  232. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts +0 -5
  233. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts.map +0 -1
  234. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts +0 -3
  235. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts.map +0 -1
  236. package/dist/types/src/capabilities/markdown/index.d.ts +0 -3
  237. package/dist/types/src/capabilities/markdown/index.d.ts.map +0 -1
  238. package/dist/types/src/capabilities/markdown/markdown.d.ts +0 -5
  239. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +0 -1
  240. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  241. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  242. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  243. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  244. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  245. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  246. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
  247. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  248. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  249. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  250. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  251. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  252. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  253. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  254. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -55
  255. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  256. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  257. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  258. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  259. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  260. package/dist/types/src/components/RangeList/RangeList.d.ts.map +0 -1
  261. package/dist/types/src/components/RangeList/index.d.ts +0 -2
  262. package/dist/types/src/components/RangeList/index.d.ts.map +0 -1
  263. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -10
  264. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  265. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -57
  266. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  267. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  268. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  269. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  270. package/src/capabilities/anchor-sort/index.ts +0 -7
  271. package/src/capabilities/compute-graph-registry/index.ts +0 -7
  272. package/src/capabilities/markdown/index.ts +0 -7
  273. package/src/capabilities/operation-resolver/index.ts +0 -7
  274. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -77
  275. package/src/capabilities/react-surface/index.ts +0 -7
  276. package/src/capabilities/react-surface/react-surface.tsx +0 -43
  277. package/src/components/SheetContainer/SheetContainer.tsx +0 -48
  278. package/src/components/SheetContext/index.ts +0 -5
  279. /package/dist/types/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.d.ts +0 -0
  280. /package/dist/types/src/components/{GridSheet → SheetContent}/util.d.ts +0 -0
  281. /package/dist/types/src/{components → containers}/SheetContainer/index.d.ts +0 -0
@@ -7,18 +7,18 @@ import React from 'react';
7
7
 
8
8
  import { withPluginManager } from '@dxos/app-framework/testing';
9
9
  import { testFunctionPlugins } from '@dxos/compute/testing';
10
- import { OperationPlugin, RuntimePlugin } from '@dxos/plugin-testing';
10
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
11
11
  import { useSpace } from '@dxos/react-client/echo';
12
12
  import { withClientProvider } from '@dxos/react-client/testing';
13
- import { withTheme } from '@dxos/react-ui/testing';
13
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
14
14
 
15
- import { createTestCells, useTestSheet, withComputeGraphDecorator } from '../../testing';
15
+ import { createTestCells, useTestSheet, withComputeGraphDecorator } from '#testing';
16
16
  import { translations } from '../../translations';
17
- import { Sheet } from '../../types';
17
+ import { Sheet } from '#types';
18
18
  import { useComputeGraph } from '../ComputeGraph';
19
- import { SheetProvider } from '../SheetContext';
19
+ import { SheetRoot } from '../SheetRoot';
20
20
 
21
- import { GridSheet } from './GridSheet';
21
+ import { SheetContent } from './SheetContent';
22
22
 
23
23
  export const Basic = () => {
24
24
  const space = useSpace();
@@ -29,19 +29,20 @@ export const Basic = () => {
29
29
  }
30
30
 
31
31
  return (
32
- <SheetProvider graph={graph} sheet={sheet} ignoreAttention>
33
- <div role='none' className='grid bs-full is-full'>
34
- <GridSheet />
32
+ <SheetRoot graph={graph} sheet={sheet} attendableId='test' ignoreAttention>
33
+ <div role='none' className='grid h-full w-full'>
34
+ <SheetContent />
35
35
  </div>
36
- </SheetProvider>
36
+ </SheetRoot>
37
37
  );
38
38
  };
39
39
 
40
40
  const meta = {
41
- title: 'plugins/plugin-sheet/GridSheet',
42
- component: GridSheet,
41
+ title: 'plugins/plugin-sheet/components/SheetContent',
42
+ component: SheetContent,
43
43
  decorators: [
44
- withTheme,
44
+ withTheme(),
45
+ withLayout({ layout: 'fullscreen' }),
45
46
  withClientProvider({ types: [Sheet.Sheet], createSpace: true }),
46
47
  withComputeGraphDecorator({ plugins: testFunctionPlugins }),
47
48
  withPluginManager({
@@ -52,7 +53,7 @@ const meta = {
52
53
  layout: 'fullscreen',
53
54
  translations,
54
55
  },
55
- } satisfies Meta<typeof GridSheet>;
56
+ } satisfies Meta<typeof SheetContent>;
56
57
 
57
58
  export default meta;
58
59
 
@@ -8,12 +8,13 @@ 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 { useOperationInvoker } from '@dxos/app-framework/react';
17
+ import { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';
17
18
  import { type CellRange, rangeToA1Notation } from '@dxos/compute';
18
19
  import { Obj } from '@dxos/echo';
19
20
  import { defaultColSize, defaultRowSize } from '@dxos/lit-grid';
@@ -32,12 +33,14 @@ 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
38
  import { type RangeController, rangeExtension, sheetExtension } from '../../extensions';
37
- import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
38
- import { meta } from '../../meta';
39
- import { DEFAULT_COLS, DEFAULT_ROWS, SheetOperation } from '../../types';
40
- import { useSheetContext } from '../SheetContext';
39
+ import { useSelectThreadOnCellFocus } from '../../integrations';
40
+ import { meta } from '#meta';
41
+ import { DEFAULT_COLS, DEFAULT_ROWS, SheetCapabilities } from '#types';
42
+ import { SheetOperation } from '#operations';
43
+ import { useSheetContext } from '../SheetRoot';
41
44
 
42
45
  import { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';
43
46
 
@@ -69,10 +72,24 @@ 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);
@@ -313,23 +330,31 @@ export const GridSheet = () => {
313
330
  [model],
314
331
  );
315
332
 
316
- 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
+
317
341
  useSelectThreadOnCellFocus();
318
342
 
319
343
  return (
320
- // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
321
- <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' })}>
322
345
  <GridCellEditor getCellContent={getCellContent} extensions={extensions} onBlur={handleBlur} />
323
346
  <Grid.Content
347
+ className='[--dx-grid-base:var(--base-surface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
324
348
  initialCells={initialCells}
325
349
  limitColumns={DEFAULT_COLS}
326
350
  limitRows={DEFAULT_ROWS}
327
351
  columns={columns}
328
352
  rows={rows}
329
- // TODO(burdon): `col` vs. `column`?
330
353
  columnDefault={sheetColDefault}
331
354
  rowDefault={sheetRowDefault}
355
+ activeRefs={activeRefs}
332
356
  frozen={frozen}
357
+ overscroll='trap'
333
358
  onAxisResize={handleAxisResize}
334
359
  onSelect={handleSelect}
335
360
  onFocus={handleFocus}
@@ -337,9 +362,6 @@ export const GridSheet = () => {
337
362
  onKeyDown={handleKeyDown}
338
363
  onContextMenu={handleContextMenu}
339
364
  onClick={handleClick}
340
- overscroll='trap'
341
- className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:absolute [&_.dx-grid]:inset-0'
342
- activeRefs={activeRefs}
343
365
  ref={setDxGrid}
344
366
  />
345
367
  <DropdownMenu.Root
@@ -355,27 +377,25 @@ export const GridSheet = () => {
355
377
  data-testid={`grid.${contextMenuAxis}.insert-before`}
356
378
  >
357
379
  <Icon
358
- size={5}
359
380
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
360
381
  />
361
- <span>{t(`add ${contextMenuAxis} before label`)}</span>
382
+ <span>{t(`add-${contextMenuAxis}-before.label`)}</span>
362
383
  </DropdownMenu.Item>
363
384
  <DropdownMenu.Item
364
385
  onClick={() => handleAxisMenuAction('insert-after')}
365
386
  data-testid={`grid.${contextMenuAxis}.insert-after`}
366
387
  >
367
388
  <Icon
368
- size={5}
369
389
  icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
370
390
  />
371
- <span>{t(`add ${contextMenuAxis} after label`)}</span>
391
+ <span>{t(`add-${contextMenuAxis}-after.label`)}</span>
372
392
  </DropdownMenu.Item>
373
393
  <DropdownMenu.Item
374
394
  onClick={() => handleAxisMenuAction('drop')}
375
395
  data-testid={`grid.${contextMenuAxis}.drop`}
376
396
  >
377
- <Icon size={5} icon='ph--backspace--regular' />
378
- <span>{t(`delete ${contextMenuAxis} label`)}</span>
397
+ <Icon icon='ph--backspace--regular' />
398
+ <span>{t(`delete-${contextMenuAxis}.label`)}</span>
379
399
  </DropdownMenu.Item>
380
400
  </DropdownMenu.Viewport>
381
401
  <DropdownMenu.Arrow />
@@ -383,4 +403,4 @@ export const GridSheet = () => {
383
403
  </DropdownMenu.Root>
384
404
  </div>
385
405
  );
386
- };
406
+ });
@@ -2,4 +2,4 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './RangeList';
5
+ export * from './SheetContent';
@@ -22,7 +22,7 @@ import {
22
22
  import { mx } from '@dxos/ui-theme';
23
23
 
24
24
  import { type SheetModel } from '../../model';
25
- import { cellClassNameForRange, rangeFromIndex } from '../../types';
25
+ import { cellClassNameForRange, rangeFromIndex } from '#types';
26
26
 
27
27
  const createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {
28
28
  return model.sheet.columns.reduce(
@@ -96,13 +96,13 @@ const gridCellGetter = (model: SheetModel) => {
96
96
 
97
97
  export const rowLabelCell = (row: number) => ({
98
98
  value: rowToA1Notation(row),
99
- className: '!bg-toolbarSurface text-subdued text-end pie-1',
99
+ className: '!bg-toolbar-surface text-subdued text-end pe-1',
100
100
  resizeHandle: 'row',
101
101
  });
102
102
 
103
103
  export const colLabelCell = (col: number) => ({
104
104
  value: colToA1Notation(col),
105
- className: '!bg-toolbarSurface text-subdued',
105
+ className: '!bg-toolbar-surface text-subdued',
106
106
  resizeHandle: 'col',
107
107
  });
108
108
 
@@ -114,7 +114,7 @@ const cellGetter = (model: SheetModel) => {
114
114
  return getGridCells(nextBounds);
115
115
  case 'fixedStartStart': {
116
116
  return {
117
- '0,0': { className: '!bg-toolbarSurface' },
117
+ '0,0': { className: '!bg-toolbar-surface' },
118
118
  };
119
119
  }
120
120
  case 'frozenColsStart':
@@ -5,8 +5,7 @@
5
5
  import React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';
6
6
 
7
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';
8
+ import { raise } from '@dxos/debug';
10
9
  import {
11
10
  Grid,
12
11
  type GridContentProps,
@@ -16,11 +15,11 @@ import {
16
15
  } from '@dxos/react-ui-grid';
17
16
 
18
17
  import { type SheetModel, useSheetModel } from '../../model';
19
- import { type Sheet } from '../../types';
18
+ import { type Sheet } from '#types';
20
19
 
21
20
  export type SheetContextValue = {
22
21
  id: string;
23
-
22
+ attendableId: string;
24
23
  model: SheetModel;
25
24
 
26
25
  // Cursor state.
@@ -39,29 +38,62 @@ export type SheetContextValue = {
39
38
  activeRefs: GridContentProps['activeRefs'];
40
39
  setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;
41
40
 
41
+ // Flags
42
+ ignoreAttention?: boolean;
43
+
42
44
  // Events.
43
45
  // TODO(burdon): Generalize.
44
46
  onInfo?: () => void;
45
-
46
- // Flags
47
- ignoreAttention?: boolean;
48
47
  };
49
48
 
49
+ // TODO(burdon): Use radix context.
50
50
  const SheetContext = createContext<SheetContextValue | undefined>(undefined);
51
51
 
52
52
  export const useSheetContext = (): SheetContextValue => {
53
- const context = useContext(SheetContext);
54
- invariant(context);
55
- return context;
53
+ return useContext(SheetContext) ?? raise(new Error('Missing SheetContext'));
54
+ };
55
+
56
+ export type SheetRootProps = {
57
+ graph: ComputeGraph;
58
+ sheet: Sheet.Sheet;
59
+ attendableId: string;
60
+ readonly?: boolean;
61
+ ignoreAttention?: boolean;
62
+ } & Pick<SheetContextValue, 'onInfo'>;
63
+
64
+ export const SheetRoot = ({
65
+ children,
66
+ graph,
67
+ sheet,
68
+ attendableId,
69
+ readonly,
70
+ ignoreAttention,
71
+ onInfo,
72
+ }: PropsWithChildren<SheetRootProps>) => {
73
+ const model = useSheetModel(graph, sheet, { readonly });
74
+ if (!model) {
75
+ return null;
76
+ }
77
+
78
+ return (
79
+ <Grid.Root id={attendableId}>
80
+ <SheetProviderImpl model={model} attendableId={attendableId} onInfo={onInfo} ignoreAttention={ignoreAttention}>
81
+ {children}
82
+ </SheetProviderImpl>
83
+ </Grid.Root>
84
+ );
56
85
  };
57
86
 
58
87
  const SheetProviderImpl = ({
59
88
  __gridScope,
60
89
  children,
90
+ attendableId,
61
91
  ignoreAttention,
62
92
  model,
63
93
  onInfo,
64
- }: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'ignoreAttention' | 'model' | 'onInfo'>>>) => {
94
+ }: GridScopedProps<
95
+ PropsWithChildren<Pick<SheetContextValue, 'attendableId' | 'ignoreAttention' | 'model' | 'onInfo'>>
96
+ >) => {
65
97
  const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);
66
98
 
67
99
  const [cursor, setCursorInternal] = useState<CellAddress>();
@@ -92,6 +124,7 @@ const SheetProviderImpl = ({
92
124
  <SheetContext.Provider
93
125
  value={{
94
126
  id,
127
+ attendableId,
95
128
  model,
96
129
  editing,
97
130
  setEditing,
@@ -102,38 +135,12 @@ const SheetProviderImpl = ({
102
135
  cursorFallbackRange,
103
136
  activeRefs,
104
137
  setActiveRefs,
138
+ ignoreAttention,
105
139
  // TODO(burdon): Change to event.
106
140
  onInfo,
107
- ignoreAttention,
108
141
  }}
109
142
  >
110
143
  {children}
111
144
  </SheetContext.Provider>
112
145
  );
113
146
  };
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';
@@ -7,10 +7,15 @@ import React from 'react';
7
7
  import { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';
8
8
  import { Icon } from '@dxos/react-ui';
9
9
 
10
- import { mapFormulaIndicesToRefs } from '../../types';
11
- import { useSheetContext } from '../SheetContext';
10
+ import { composable, composableProps, mx } from '@dxos/ui-theme';
12
11
 
13
- export const FunctionEditor = () => {
12
+ import { mapFormulaIndicesToRefs } from '#types';
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
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,
@@ -3,20 +3,15 @@
3
3
  //
4
4
 
5
5
  import { Atom, type Registry, RegistryContext } from '@effect-atom/atom-react';
6
- import React, { type PropsWithChildren, useContext, useMemo } from 'react';
6
+ import React, { useContext, useMemo } from 'react';
7
7
 
8
- import { useAppGraph } from '@dxos/app-framework/react';
8
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
9
9
  import { type CompleteCellRange } from '@dxos/compute';
10
- import {
11
- type ActionGraphProps,
12
- MenuProvider,
13
- ToolbarMenu,
14
- createGapSeparator,
15
- useMenuActions,
16
- } from '@dxos/react-ui-menu';
10
+ import { type ActionGraphProps, Menu, createGapSeparator, useMenuActions } from '@dxos/react-ui-menu';
11
+ import { composable, composableProps } from '@dxos/ui-theme';
17
12
 
18
13
  import { type SheetModel } from '../../model';
19
- import { useSheetContext } from '../SheetContext';
14
+ import { useSheetContext } from '../SheetRoot';
20
15
 
21
16
  import { createAlign, useAlignState } from './align';
22
17
  import { createStyle, useStyleState } from './style';
@@ -59,10 +54,10 @@ const createToolbarActions = ({
59
54
  });
60
55
  };
61
56
 
62
- export type SheetToolbarProps = PropsWithChildren<{ id: string }>;
57
+ export type SheetToolbarProps = {};
63
58
 
64
- export const SheetToolbar = ({ id }: SheetToolbarProps) => {
65
- const { model, cursorFallbackRange } = useSheetContext();
59
+ export const SheetToolbar = composable<HTMLDivElement, SheetToolbarProps>((props, forwardedRef) => {
60
+ const { attendableId, model, cursorFallbackRange } = useSheetContext();
66
61
  const stateAtom = useToolbarState({});
67
62
  const registry = useContext(RegistryContext);
68
63
  useAlignState(stateAtom);
@@ -71,24 +66,26 @@ export const SheetToolbar = ({ id }: SheetToolbarProps) => {
71
66
  const { graph } = useAppGraph();
72
67
  const customActions = useMemo(() => {
73
68
  return Atom.make((get) => {
74
- const actions = get(graph.actions(id));
69
+ const actions = get(graph.actions(attendableId));
75
70
  const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');
76
71
  return {
77
72
  nodes,
78
- edges: nodes.map((node) => ({ source: 'root', target: node.id })),
73
+ edges: nodes.map((node) => ({ source: 'root', target: node.id, relation: 'child' })),
79
74
  };
80
75
  });
81
- }, [graph, id]);
76
+ }, [graph, attendableId]);
82
77
 
83
78
  const actionsCreator = useMemo(
84
79
  () => createToolbarActions({ model, stateAtom, registry, cursorFallbackRange, customActions }),
85
80
  [model, stateAtom, registry, cursorFallbackRange, customActions],
86
81
  );
87
- const menu = useMenuActions(actionsCreator);
82
+ const menuActions = useMenuActions(actionsCreator);
88
83
 
89
84
  return (
90
- <MenuProvider {...menu} attendableId={id}>
91
- <ToolbarMenu />
92
- </MenuProvider>
85
+ <Menu.Root {...menuActions} attendableId={attendableId}>
86
+ <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />
87
+ </Menu.Root>
93
88
  );
94
- };
89
+ });
90
+
91
+ SheetToolbar.displayName = 'SheetToolbar';
@@ -14,10 +14,10 @@ import {
14
14
  createMenuItemGroup,
15
15
  } from '@dxos/react-ui-menu';
16
16
 
17
- import { meta } from '../../meta';
17
+ import { meta } from '#meta';
18
18
  import { type SheetModel } from '../../model';
19
- import { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '../../types';
20
- import { useSheetContext } from '../SheetContext';
19
+ import { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '#types';
20
+ import { useSheetContext } from '../SheetRoot';
21
21
 
22
22
  import { type ToolbarState, type ToolbarStateAtom } from './useToolbarState';
23
23
 
@@ -50,7 +50,7 @@ export const useAlignState = (stateAtom: ToolbarStateAtom) => {
50
50
 
51
51
  const createAlignGroupAction = (value?: AlignValue) =>
52
52
  createMenuItemGroup('align', {
53
- label: ['align label', { ns: meta.id }],
53
+ label: ['align.label', { ns: meta.id }],
54
54
  variant: 'toggleGroup',
55
55
  selectCardinality: 'single',
56
56
  value: `${alignKey}--${value}`,
@@ -84,18 +84,18 @@ const createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackR
84
84
  };
85
85
  const currentState = registry.get(stateAtom);
86
86
  if (index < 0) {
87
- Obj.change(model.sheet, (s) => {
88
- s.ranges?.push(nextRangeEntity);
87
+ Obj.change(model.sheet, (obj) => {
88
+ obj.ranges?.push(nextRangeEntity);
89
89
  });
90
90
  registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });
91
91
  } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {
92
- Obj.change(model.sheet, (s) => {
93
- s.ranges?.splice(index, 1);
92
+ Obj.change(model.sheet, (obj) => {
93
+ obj.ranges?.splice(index, 1);
94
94
  });
95
95
  registry.set(stateAtom, { ...currentState, [alignKey]: undefined });
96
96
  } else {
97
- Obj.change(model.sheet, (s) => {
98
- s.ranges?.splice(index, 1, nextRangeEntity);
97
+ Obj.change(model.sheet, (obj) => {
98
+ obj.ranges?.splice(index, 1, nextRangeEntity);
99
99
  });
100
100
  registry.set(stateAtom, { ...currentState, [alignKey]: nextRangeEntity.value });
101
101
  }
@@ -104,7 +104,7 @@ const createAlignActions = ({ model, state, stateAtom, registry, cursorFallbackR
104
104
  key: alignKey,
105
105
  value: alignValue as AlignValue,
106
106
  checked: state[alignKey] === alignValue,
107
- label: [`range value ${alignValue} label`, { ns: meta.id }],
107
+ label: [`range-value-${alignValue}.label`, { ns: meta.id }],
108
108
  icon,
109
109
  testId: `grid.toolbar.${alignKey}.${alignValue}`,
110
110
  },
@@ -117,8 +117,8 @@ export const createAlign = (context: AlignActionsContext): ActionGraphProps => {
117
117
  return {
118
118
  nodes: [alignGroup, ...alignActions],
119
119
  edges: [
120
- { source: 'root', target: 'align' },
121
- ...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' })),
122
122
  ],
123
123
  };
124
124
  };