@dxos/plugin-sheet 0.8.4-main.ae835ea → 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 (287) hide show
  1. package/dist/lib/browser/chunk-CBNIKBPQ.mjs +278 -0
  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 +122 -114
  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 +4 -2
  21. package/dist/lib/node-esm/chunk-3ZYLQWHC.mjs +279 -0
  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 +122 -114
  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 +4 -2
  41. package/dist/types/src/SheetPlugin.d.ts +2 -1
  42. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  44. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  45. package/dist/types/src/capabilities/compute-graph-registry.d.ts +3 -2
  46. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/index.d.ts +9 -9
  48. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  49. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  50. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  51. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  52. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  54. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/state.d.ts +6 -0
  56. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  58. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  59. package/dist/types/src/components/ComputeGraph/compute-graph.stories.d.ts.map +1 -1
  60. package/dist/types/src/components/Sheet/Sheet.d.ts +29 -0
  61. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  62. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  63. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  64. package/dist/types/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.d.ts +1 -1
  65. package/dist/types/src/components/SheetContent/SheetCellEditor.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/SheetContent/SheetContent.d.ts +10 -0
  67. package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -0
  68. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +63 -0
  69. package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts.map +1 -0
  70. package/dist/types/src/components/SheetContent/index.d.ts +2 -0
  71. package/dist/types/src/components/SheetContent/index.d.ts.map +1 -0
  72. package/dist/types/src/components/SheetContent/util.d.ts.map +1 -0
  73. package/dist/types/src/components/{SheetContext/SheetContext.d.ts → SheetRoot/SheetRoot.d.ts} +7 -5
  74. package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -0
  75. package/dist/types/src/components/SheetRoot/index.d.ts +2 -0
  76. package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -0
  77. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +10 -0
  78. package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -0
  79. package/dist/types/src/components/SheetStatusbar/index.d.ts +2 -0
  80. package/dist/types/src/components/SheetStatusbar/index.d.ts.map +1 -0
  81. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +9 -5
  82. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  83. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +72 -66
  84. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/SheetToolbar/align.d.ts +13 -20
  86. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  87. package/dist/types/src/components/SheetToolbar/style.d.ts +13 -19
  88. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  89. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  90. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  91. package/dist/types/src/components/index.d.ts +1 -4
  92. package/dist/types/src/components/index.d.ts.map +1 -1
  93. package/dist/types/src/{components → containers}/RangeList/RangeList.d.ts +1 -1
  94. package/dist/types/src/{components → containers}/RangeList/RangeList.d.ts.map +1 -1
  95. package/dist/types/src/containers/RangeList/index.d.ts +3 -0
  96. package/dist/types/src/containers/RangeList/index.d.ts.map +1 -0
  97. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts +12 -0
  98. package/dist/types/src/containers/SheetContainer/SheetContainer.d.ts.map +1 -0
  99. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts +58 -0
  100. package/dist/types/src/containers/SheetContainer/SheetContainer.stories.d.ts.map +1 -0
  101. package/dist/types/src/{components → containers}/SheetContainer/index.d.ts.map +1 -1
  102. package/dist/types/src/containers/index.d.ts +4 -0
  103. package/dist/types/src/containers/index.d.ts.map +1 -0
  104. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  105. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
  106. package/dist/types/src/index.d.ts +1 -1
  107. package/dist/types/src/index.d.ts.map +1 -1
  108. package/dist/types/src/integrations/thread-ranges.d.ts +0 -2
  109. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  110. package/dist/types/src/meta.d.ts +2 -2
  111. package/dist/types/src/meta.d.ts.map +1 -1
  112. package/dist/types/src/model/sheet-model.d.ts +3 -3
  113. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  114. package/dist/types/src/model/testing.d.ts +1 -1
  115. package/dist/types/src/model/testing.d.ts.map +1 -1
  116. package/dist/types/src/model/useSheetModel.d.ts +1 -1
  117. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  118. package/dist/types/src/operations/definitions.d.ts +45 -0
  119. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  120. package/dist/types/src/operations/drop-axis.d.ts +5 -0
  121. package/dist/types/src/operations/drop-axis.d.ts.map +1 -0
  122. package/dist/types/src/operations/index.d.ts +4 -0
  123. package/dist/types/src/operations/index.d.ts.map +1 -0
  124. package/dist/types/src/operations/insert-axis.d.ts +5 -0
  125. package/dist/types/src/operations/insert-axis.d.ts.map +1 -0
  126. package/dist/types/src/operations/restore-axis.d.ts +5 -0
  127. package/dist/types/src/operations/restore-axis.d.ts.map +1 -0
  128. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  129. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  130. package/dist/types/src/serializer.d.ts +1 -1
  131. package/dist/types/src/serializer.d.ts.map +1 -1
  132. package/dist/types/src/testing/data.d.ts +1 -1
  133. package/dist/types/src/testing/data.d.ts.map +1 -1
  134. package/dist/types/src/testing/testing.d.ts +16 -16
  135. package/dist/types/src/testing/testing.d.ts.map +1 -1
  136. package/dist/types/src/translations.d.ts +38 -35
  137. package/dist/types/src/translations.d.ts.map +1 -1
  138. package/dist/types/src/types/Sheet.d.ts +41 -35
  139. package/dist/types/src/types/Sheet.d.ts.map +1 -1
  140. package/dist/types/src/types/capabilities.d.ts +18 -0
  141. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  142. package/dist/types/src/types/index.d.ts +1 -0
  143. package/dist/types/src/types/index.d.ts.map +1 -1
  144. package/dist/types/src/types/types.d.ts +2 -68
  145. package/dist/types/src/types/types.d.ts.map +1 -1
  146. package/dist/types/src/types/util.d.ts +2 -1
  147. package/dist/types/src/types/util.d.ts.map +1 -1
  148. package/dist/types/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +93 -68
  150. package/src/SheetPlugin.tsx +63 -67
  151. package/src/capabilities/anchor-sort.ts +20 -15
  152. package/src/capabilities/compute-graph-registry.ts +18 -14
  153. package/src/capabilities/index.ts +12 -8
  154. package/src/capabilities/markdown.ts +20 -13
  155. package/src/capabilities/operation-handler.ts +16 -0
  156. package/src/capabilities/react-surface.tsx +38 -29
  157. package/src/capabilities/state.ts +29 -0
  158. package/src/capabilities/undo-mappings.ts +30 -0
  159. package/src/components/ComputeGraph/compute-graph.stories.tsx +13 -8
  160. package/src/components/Sheet/Sheet.tsx +20 -0
  161. package/src/components/Sheet/index.ts +5 -0
  162. package/src/components/{GridSheet → SheetContent}/SheetCellEditor.stories.tsx +10 -7
  163. package/src/components/{GridSheet/GridSheet.stories.tsx → SheetContent/SheetContent.stories.tsx} +16 -15
  164. package/src/components/{GridSheet/GridSheet.tsx → SheetContent/SheetContent.tsx} +80 -50
  165. package/src/components/{RangeList → SheetContent}/index.ts +1 -1
  166. package/src/components/{GridSheet → SheetContent}/util.ts +15 -9
  167. package/src/components/{SheetContext/SheetContext.tsx → SheetRoot/SheetRoot.tsx} +48 -41
  168. package/src/components/{GridSheet → SheetRoot}/index.ts +1 -1
  169. package/src/components/{FunctionEditor/FunctionEditor.tsx → SheetStatusbar/SheetStatusbar.tsx} +18 -6
  170. package/src/components/{FunctionEditor → SheetStatusbar}/index.ts +1 -1
  171. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +4 -4
  172. package/src/components/SheetToolbar/SheetToolbar.tsx +50 -39
  173. package/src/components/SheetToolbar/align.ts +48 -23
  174. package/src/components/SheetToolbar/style.ts +51 -21
  175. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  176. package/src/components/index.ts +1 -7
  177. package/src/{components → containers}/RangeList/RangeList.tsx +18 -14
  178. package/src/containers/RangeList/index.ts +7 -0
  179. package/src/containers/SheetContainer/SheetContainer.stories.tsx +109 -0
  180. package/src/containers/SheetContainer/SheetContainer.tsx +57 -0
  181. package/src/{components → containers}/SheetContainer/index.ts +1 -1
  182. package/src/containers/index.ts +8 -0
  183. package/src/extensions/compute.stories.tsx +25 -15
  184. package/src/extensions/compute.ts +1 -1
  185. package/src/extensions/editor/sheet-extension.ts +16 -13
  186. package/src/index.ts +1 -1
  187. package/src/integrations/thread-ranges.ts +17 -60
  188. package/src/meta.ts +3 -3
  189. package/src/model/sheet-model.test.ts +3 -3
  190. package/src/model/sheet-model.ts +79 -47
  191. package/src/model/testing.ts +1 -1
  192. package/src/model/useSheetModel.ts +1 -1
  193. package/src/operations/definitions.ts +73 -0
  194. package/src/operations/drop-axis.ts +26 -0
  195. package/src/operations/index.ts +14 -0
  196. package/src/operations/insert-axis.ts +19 -0
  197. package/src/operations/restore-axis.ts +19 -0
  198. package/src/operations/scroll-to-anchor.ts +31 -0
  199. package/src/playwright/playwright.config.ts +1 -1
  200. package/src/playwright/sheet.spec.ts +2 -1
  201. package/src/sanity.test.ts +6 -3
  202. package/src/serializer.ts +2 -2
  203. package/src/testing/data.ts +1 -1
  204. package/src/testing/testing.tsx +2 -2
  205. package/src/translations.ts +38 -35
  206. package/src/types/Sheet.ts +31 -31
  207. package/src/types/capabilities.ts +26 -0
  208. package/src/types/index.ts +1 -0
  209. package/src/types/sheet-range-types.ts +3 -3
  210. package/src/types/types.ts +4 -40
  211. package/src/types/util.ts +2 -1
  212. package/dist/lib/browser/SheetContainer-GTINUSNB.mjs +0 -349
  213. package/dist/lib/browser/SheetContainer-GTINUSNB.mjs.map +0 -7
  214. package/dist/lib/browser/anchor-sort-R5CB37J7.mjs +0 -24
  215. package/dist/lib/browser/anchor-sort-R5CB37J7.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-73AV3NH6.mjs +0 -15
  217. package/dist/lib/browser/chunk-73AV3NH6.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-7VEWYJJN.mjs +0 -234
  219. package/dist/lib/browser/chunk-7VEWYJJN.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-DVJ3QW3F.mjs +0 -907
  221. package/dist/lib/browser/chunk-DVJ3QW3F.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-FWFAAGXL.mjs +0 -28
  223. package/dist/lib/browser/chunk-FWFAAGXL.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-LS6D4GG7.mjs +0 -850
  225. package/dist/lib/browser/chunk-LS6D4GG7.mjs.map +0 -7
  226. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs +0 -21
  227. package/dist/lib/browser/compute-graph-registry-AP5RA7W3.mjs.map +0 -7
  228. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs +0 -56
  229. package/dist/lib/browser/intent-resolver-66OAYVQF.mjs.map +0 -7
  230. package/dist/lib/browser/markdown-B6VKYY2S.mjs +0 -26
  231. package/dist/lib/browser/markdown-B6VKYY2S.mjs.map +0 -7
  232. package/dist/lib/browser/react-surface-F3VQPGDV.mjs +0 -53
  233. package/dist/lib/browser/react-surface-F3VQPGDV.mjs.map +0 -7
  234. package/dist/lib/node-esm/SheetContainer-PW4KNZME.mjs +0 -350
  235. package/dist/lib/node-esm/SheetContainer-PW4KNZME.mjs.map +0 -7
  236. package/dist/lib/node-esm/anchor-sort-HEND452H.mjs +0 -25
  237. package/dist/lib/node-esm/anchor-sort-HEND452H.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-44YTKTMP.mjs +0 -16
  239. package/dist/lib/node-esm/chunk-44YTKTMP.mjs.map +0 -7
  240. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs +0 -908
  241. package/dist/lib/node-esm/chunk-4H2EHVWE.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs +0 -236
  243. package/dist/lib/node-esm/chunk-4QV4AGWK.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-HILDMVPL.mjs +0 -29
  245. package/dist/lib/node-esm/chunk-HILDMVPL.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-LYUIM3QG.mjs +0 -851
  247. package/dist/lib/node-esm/chunk-LYUIM3QG.mjs.map +0 -7
  248. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs +0 -22
  249. package/dist/lib/node-esm/compute-graph-registry-UMQ5UYCL.mjs.map +0 -7
  250. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs +0 -57
  251. package/dist/lib/node-esm/intent-resolver-VNKIMQQT.mjs.map +0 -7
  252. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs +0 -27
  253. package/dist/lib/node-esm/markdown-VKY7HXU2.mjs.map +0 -7
  254. package/dist/lib/node-esm/react-surface-GGX76V2Y.mjs +0 -54
  255. package/dist/lib/node-esm/react-surface-GGX76V2Y.mjs.map +0 -7
  256. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  257. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  258. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  259. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  260. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  261. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  262. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  263. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  264. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  265. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  266. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -54
  267. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  268. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  269. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  270. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  271. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  272. package/dist/types/src/components/RangeList/index.d.ts +0 -2
  273. package/dist/types/src/components/RangeList/index.d.ts.map +0 -1
  274. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -11
  275. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  276. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -55
  277. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  278. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  279. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  280. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  281. package/src/capabilities/capabilities.ts +0 -14
  282. package/src/capabilities/intent-resolver.ts +0 -38
  283. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -90
  284. package/src/components/SheetContainer/SheetContainer.tsx +0 -40
  285. package/src/components/SheetContext/index.ts +0 -5
  286. /package/dist/types/src/components/{GridSheet → SheetContent}/util.d.ts +0 -0
  287. /package/dist/types/src/{components → containers}/SheetContainer/index.d.ts +0 -0
@@ -23,7 +23,7 @@ import {
23
23
  } from '@dxos/compute';
24
24
  import { Resource } from '@dxos/context';
25
25
  import { Obj } from '@dxos/echo';
26
- import { FormatEnum, TypeEnum } from '@dxos/echo/internal';
26
+ import { Format, TypeEnum } from '@dxos/echo/internal';
27
27
  import { invariant } from '@dxos/invariant';
28
28
  import { PublicKey } from '@dxos/keys';
29
29
  import { log } from '@dxos/log';
@@ -38,22 +38,22 @@ import {
38
38
  insertIndices,
39
39
  mapFormulaIndicesToRefs,
40
40
  mapFormulaRefsToIndices,
41
- } from '../types';
42
- import { type Sheet, type SheetAction } from '../types';
41
+ } from '#types';
42
+ import { type Sheet, type SheetAction } from '#types';
43
43
 
44
44
  // TODO(burdon): Move to compute.
45
45
  // Map sheet types to system types.
46
46
  // https://hyperformula.handsontable.com/guide/types-of-values.html
47
47
  // - https://github.com/handsontable/hyperformula/blob/master/src/Cell.ts (CellValueType)
48
48
  // - https://github.com/handsontable/hyperformula/blob/master/src/interpreter/InterpreterValue.ts (NumberType)
49
- const typeMap: Record<string, { type: TypeEnum; format?: FormatEnum }> = {
49
+ const typeMap: Record<string, { type: TypeEnum; format?: Format.TypeFormat }> = {
50
50
  BOOLEAN: { type: TypeEnum.Boolean },
51
51
  NUMBER_RAW: { type: TypeEnum.Number },
52
- NUMBER_PERCENT: { type: TypeEnum.Number, format: FormatEnum.Percent },
53
- NUMBER_CURRENCY: { type: TypeEnum.Number, format: FormatEnum.Currency },
54
- NUMBER_DATETIME: { type: TypeEnum.String, format: FormatEnum.DateTime },
55
- NUMBER_DATE: { type: TypeEnum.String, format: FormatEnum.Date },
56
- NUMBER_TIME: { type: TypeEnum.String, format: FormatEnum.Time },
52
+ NUMBER_PERCENT: { type: TypeEnum.Number, format: Format.TypeFormat.Percent },
53
+ NUMBER_CURRENCY: { type: TypeEnum.Number, format: Format.TypeFormat.Currency },
54
+ NUMBER_DATETIME: { type: TypeEnum.String, format: Format.TypeFormat.DateTime },
55
+ NUMBER_DATE: { type: TypeEnum.String, format: Format.TypeFormat.Date },
56
+ NUMBER_TIME: { type: TypeEnum.String, format: Format.TypeFormat.Time },
57
57
  };
58
58
 
59
59
  const getTopLeft = (range: CellRange): CellAddress => {
@@ -122,7 +122,9 @@ export class SheetModel extends Resource {
122
122
  */
123
123
  protected override async _open(): Promise<void> {
124
124
  log('initialize', { id: this.id });
125
- initialize(this._sheet);
125
+ Obj.change(this._sheet, (obj) => {
126
+ initialize(obj);
127
+ });
126
128
 
127
129
  this._graph.update.on((event) => {
128
130
  if (event.type === 'functionsUpdated') {
@@ -181,13 +183,19 @@ export class SheetModel extends Resource {
181
183
  }
182
184
 
183
185
  insertRows(i: number, n = 1): string[] {
184
- const idx = insertIndices(this._sheet.rows, i, n, MAX_ROWS);
186
+ let idx: string[] = [];
187
+ Obj.change(this._sheet, (obj) => {
188
+ idx = insertIndices(obj.rows, i, n, MAX_ROWS);
189
+ });
185
190
  this.reset();
186
191
  return idx;
187
192
  }
188
193
 
189
194
  insertColumns(i: number, n = 1): string[] {
190
- const idx = insertIndices(this._sheet.columns, i, n, MAX_COLS);
195
+ let idx: string[] = [];
196
+ Obj.change(this._sheet, (obj) => {
197
+ idx = insertIndices(obj.columns, i, n, MAX_COLS);
198
+ });
191
199
  this.reset();
192
200
  return idx;
193
201
  }
@@ -200,8 +208,10 @@ export class SheetModel extends Resource {
200
208
  const values = this.getCellValues(range).flat();
201
209
  const index = this._sheet.rows.indexOf(rowIndex);
202
210
  this.clear(range);
203
- this._sheet.rows.splice(index, 1);
204
- delete this._sheet.rowMeta[rowIndex];
211
+ Obj.change(this._sheet, (obj) => {
212
+ obj.rows.splice(index, 1);
213
+ delete obj.rowMeta[rowIndex];
214
+ });
205
215
  this.reset();
206
216
  return { axis: 'row', index, axisIndex: rowIndex, axisMeta: this._sheet.rowMeta[rowIndex], values };
207
217
  }
@@ -214,35 +224,43 @@ export class SheetModel extends Resource {
214
224
  const values = this.getCellValues(range).flat();
215
225
  const index = this._sheet.columns.indexOf(colIndex);
216
226
  this.clear(range);
217
- this._sheet.columns.splice(index, 1);
218
- delete this._sheet.columnMeta[colIndex];
227
+ Obj.change(this._sheet, (obj) => {
228
+ obj.columns.splice(index, 1);
229
+ delete obj.columnMeta[colIndex];
230
+ });
219
231
  this.reset();
220
232
  return { axis: 'col', index, axisIndex: colIndex, axisMeta: this._sheet.rowMeta[colIndex], values };
221
233
  }
222
234
 
223
235
  restoreRow({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {
224
- this._sheet.rows.splice(index, 0, axisIndex);
225
- values.forEach((value, col) => {
226
- if (value) {
227
- this._sheet.cells[`${this._sheet.columns[col]}@${axisIndex}`] = { value };
236
+ Obj.change(this._sheet, (obj) => {
237
+ obj.rows.splice(index, 0, axisIndex);
238
+ values.forEach((value, col) => {
239
+ if (value) {
240
+ obj.cells[`${obj.columns[col]}@${axisIndex}`] = { value };
241
+ }
242
+ });
243
+
244
+ if (axisMeta) {
245
+ obj.rowMeta[axisIndex] = axisMeta;
228
246
  }
229
247
  });
230
- if (axisMeta) {
231
- this._sheet.rowMeta[axisIndex] = axisMeta;
232
- }
233
248
  this.reset();
234
249
  }
235
250
 
236
251
  restoreColumn({ index, axisIndex, axisMeta, values }: SheetAction.RestoreAxis): void {
237
- this._sheet.columns.splice(index, 0, axisIndex);
238
- values.forEach((value, row) => {
239
- if (value) {
240
- this._sheet.cells[`${axisIndex}@${this._sheet.rows[row]}`] = { value };
252
+ Obj.change(this._sheet, (obj) => {
253
+ obj.columns.splice(index, 0, axisIndex);
254
+ values.forEach((value, row) => {
255
+ if (value) {
256
+ obj.cells[`${axisIndex}@${obj.rows[row]}`] = { value };
257
+ }
258
+ });
259
+
260
+ if (axisMeta) {
261
+ obj.columnMeta[axisIndex] = axisMeta;
241
262
  }
242
263
  });
243
- if (axisMeta) {
244
- this._sheet.columnMeta[axisIndex] = axisMeta;
245
- }
246
264
  this.reset();
247
265
  }
248
266
 
@@ -259,18 +277,22 @@ export class SheetModel extends Resource {
259
277
  const topLeft = getTopLeft(range);
260
278
  const values = this._iterRange(range, () => null);
261
279
  this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);
262
- this._iterRange(range, (cell) => {
263
- const idx = addressToIndex(this._sheet, cell);
264
- delete this._sheet.cells[idx];
280
+ Obj.change(this._sheet, (obj) => {
281
+ this._iterRange(range, (cell) => {
282
+ const idx = addressToIndex(this._sheet, cell);
283
+ delete obj.cells[idx];
284
+ });
265
285
  });
266
286
  }
267
287
 
268
288
  cut(range: CellRange): void {
269
289
  invariant(this._node);
270
290
  this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));
271
- this._iterRange(range, (cell) => {
272
- const idx = addressToIndex(this._sheet, cell);
273
- delete this._sheet.cells[idx];
291
+ Obj.change(this._sheet, (obj) => {
292
+ this._iterRange(range, (cell) => {
293
+ const idx = addressToIndex(this._sheet, cell);
294
+ delete obj.cells[idx];
295
+ });
274
296
  });
275
297
  }
276
298
 
@@ -283,13 +305,15 @@ export class SheetModel extends Resource {
283
305
  invariant(this._node);
284
306
  if (!this._node.graph.hf.isClipboardEmpty()) {
285
307
  const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));
286
- for (const change of changes) {
287
- if (change instanceof ExportedCellChange) {
288
- const { address, newValue } = change;
289
- const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });
290
- this._sheet.cells[idx] = { value: newValue };
308
+ Obj.change(this._sheet, (obj) => {
309
+ for (const change of changes) {
310
+ if (change instanceof ExportedCellChange) {
311
+ const { address, newValue } = change;
312
+ const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });
313
+ obj.cells[idx] = { value: newValue };
314
+ }
291
315
  }
292
- }
316
+ });
293
317
  }
294
318
  }
295
319
 
@@ -361,7 +385,7 @@ export class SheetModel extends Resource {
361
385
  /**
362
386
  * Get value type.
363
387
  */
364
- getValueDescription(cell: CellAddress): { type: TypeEnum; format?: FormatEnum } | undefined {
388
+ getValueDescription(cell: CellAddress): { type: TypeEnum; format?: Format.TypeFormat } | undefined {
365
389
  invariant(this._node);
366
390
  const addr = toSimpleCellAddress(this._node.sheetId, cell);
367
391
  const type = this._node.graph.hf.getCellValueDetailedType(addr);
@@ -380,11 +404,15 @@ export class SheetModel extends Resource {
380
404
  // Reallocate if > current bounds.
381
405
  let refresh = false;
382
406
  if (cell.row >= this._sheet.rows.length) {
383
- insertIndices(this._sheet.rows, cell.row, 1, MAX_ROWS);
407
+ Obj.change(this._sheet, (obj) => {
408
+ insertIndices(obj.rows, cell.row, 1, MAX_ROWS);
409
+ });
384
410
  refresh = true;
385
411
  }
386
412
  if (cell.col >= this._sheet.columns.length) {
387
- insertIndices(this._sheet.columns, cell.col, 1, MAX_COLS);
413
+ Obj.change(this._sheet, (obj) => {
414
+ insertIndices(obj.columns, cell.col, 1, MAX_COLS);
415
+ });
388
416
  refresh = true;
389
417
  }
390
418
 
@@ -401,13 +429,17 @@ export class SheetModel extends Resource {
401
429
  // Insert into sheet.
402
430
  const idx = addressToIndex(this._sheet, cell);
403
431
  if (value === undefined || value === null) {
404
- delete this._sheet.cells[idx];
432
+ Obj.change(this._sheet, (obj) => {
433
+ delete obj.cells[idx];
434
+ });
405
435
  } else {
406
436
  if (isFormula(value)) {
407
437
  value = this._graph.mapFunctionBindingToId(mapFormulaRefsToIndices(this._sheet, value));
408
438
  }
409
439
 
410
- this._sheet.cells[idx] = { value };
440
+ Obj.change(this._sheet, (obj) => {
441
+ obj.cells[idx] = { value };
442
+ });
411
443
  }
412
444
  }
413
445
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { addressToA1Notation } from '@dxos/compute';
6
6
 
7
- import { Sheet } from '../types';
7
+ import { Sheet } from '#types';
8
8
 
9
9
  // TODO(burdon): Create testing endpoint.
10
10
  // TODO(burdon): Move to react-ui-sheet.
@@ -7,7 +7,7 @@ import { useEffect, useState } from 'react';
7
7
  import { type ComputeGraph } from '@dxos/compute';
8
8
 
9
9
  import { SheetModel } from '../model';
10
- import { type Sheet } from '../types';
10
+ import { type Sheet } from '#types';
11
11
 
12
12
  export type UseSheetModelOptions = {
13
13
  readonly?: boolean;
@@ -0,0 +1,73 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/operation';
9
+
10
+ import { meta } from '#meta';
11
+
12
+ const SHEET_OPERATION = `${meta.id}.operation`;
13
+
14
+ // TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.
15
+ const Axis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));
16
+
17
+ export const InsertAxis = Operation.make({
18
+ meta: { key: `${SHEET_OPERATION}.axis-insert`, name: 'Insert Axis' },
19
+ input: Schema.Struct({
20
+ model: Schema.Any,
21
+ axis: Axis,
22
+ index: Schema.Number,
23
+ count: Schema.optional(Schema.Number),
24
+ }),
25
+ output: Schema.Void,
26
+ });
27
+
28
+ export const DropAxisOutput = Schema.Struct({
29
+ axis: Axis.annotations({ description: 'The axis type (row or col).' }),
30
+ axisIndex: Schema.String.annotations({ description: 'The dropped axis index.' }),
31
+ index: Schema.Number.annotations({ description: 'The position the axis was at.' }),
32
+ axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),
33
+ values: Schema.Array(Schema.Any).annotations({ description: 'The cell values that were dropped.' }),
34
+ });
35
+
36
+ export type DropAxisOutput = Schema.Schema.Type<typeof DropAxisOutput>;
37
+
38
+ export const DropAxis = Operation.make({
39
+ meta: { key: `${SHEET_OPERATION}.axis-drop`, name: 'Drop Axis' },
40
+ input: Schema.Struct({
41
+ model: Schema.Any,
42
+ axis: Axis,
43
+ axisIndex: Schema.String,
44
+ }),
45
+ output: DropAxisOutput,
46
+ });
47
+
48
+ export const ScrollToAnchor = Operation.make({
49
+ meta: { key: `${SHEET_OPERATION}.scroll-to-anchor`, name: 'Scroll To Anchor' },
50
+ services: [Capability.Service],
51
+ input: Schema.Struct({
52
+ subject: Schema.String.annotations({ description: 'Attendable ID of the sheet.' }),
53
+ cursor: Schema.String.annotations({ description: 'Cell range coordinates.' }),
54
+ ref: Schema.optional(Schema.Any.annotations({ description: 'Active refs for highlighting.' })),
55
+ }),
56
+ output: Schema.Void,
57
+ });
58
+
59
+ /**
60
+ * Restore a dropped axis (inverse of DropAxis).
61
+ */
62
+ export const RestoreAxis = Operation.make({
63
+ meta: { key: `${SHEET_OPERATION}.restore-axis`, name: 'Restore Axis' },
64
+ input: Schema.Struct({
65
+ model: Schema.Any.annotations({ description: 'The sheet model.' }),
66
+ axis: Axis.annotations({ description: 'The axis type (row or col).' }),
67
+ axisIndex: Schema.String.annotations({ description: 'The axis index to restore.' }),
68
+ index: Schema.Number.annotations({ description: 'The position to restore at.' }),
69
+ axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),
70
+ values: Schema.Array(Schema.Any).annotations({ description: 'The cell values to restore.' }),
71
+ }),
72
+ output: Schema.Void,
73
+ });
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ import { DropAxis } from './definitions';
10
+
11
+ const handler: Operation.WithHandler<typeof DropAxis> = DropAxis.pipe(
12
+ Operation.withHandler(({ model, axis, axisIndex }) =>
13
+ Effect.sync(() => {
14
+ const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
15
+ return {
16
+ axis: undoData.axis,
17
+ axisIndex: undoData.axisIndex,
18
+ index: undoData.index,
19
+ axisMeta: undoData.axisMeta,
20
+ values: undoData.values,
21
+ };
22
+ }),
23
+ ),
24
+ );
25
+
26
+ export default handler;
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { OperationHandlerSet } from '@dxos/operation';
6
+
7
+ export * as SheetOperation from './definitions';
8
+
9
+ export const SheetOperationHandlerSet = OperationHandlerSet.lazy(
10
+ () => import('./drop-axis'),
11
+ () => import('./insert-axis'),
12
+ () => import('./restore-axis'),
13
+ () => import('./scroll-to-anchor'),
14
+ );
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ import { InsertAxis } from './definitions';
10
+
11
+ const handler: Operation.WithHandler<typeof InsertAxis> = InsertAxis.pipe(
12
+ Operation.withHandler(({ model, axis, index, count }) =>
13
+ Effect.sync(() => {
14
+ model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);
15
+ }),
16
+ ),
17
+ );
18
+
19
+ export default handler;
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/operation';
8
+
9
+ import { RestoreAxis } from './definitions';
10
+
11
+ const handler: Operation.WithHandler<typeof RestoreAxis> = RestoreAxis.pipe(
12
+ Operation.withHandler(({ model, axis, ...restoreData }) =>
13
+ Effect.sync(() => {
14
+ model[axis === 'col' ? 'restoreColumn' : 'restoreRow'](restoreData);
15
+ }),
16
+ ),
17
+ );
18
+
19
+ export default handler;
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/operation';
9
+
10
+ import { parseThreadAnchorAsCellRange } from '../integrations/thread-ranges';
11
+ import { SheetCapabilities } from '../types';
12
+ import { ScrollToAnchor } from './definitions';
13
+
14
+ const handler: Operation.WithHandler<typeof ScrollToAnchor> = ScrollToAnchor.pipe(
15
+ Operation.withHandler(
16
+ Effect.fnUntraced(function* ({ subject, cursor, ref }) {
17
+ const gridInstances = yield* Capability.get(SheetCapabilities.GridInstances);
18
+ const entry = gridInstances.get(subject);
19
+ if (!entry) {
20
+ return;
21
+ }
22
+ entry.setActiveRefs(ref);
23
+ const range = parseThreadAnchorAsCellRange(cursor);
24
+ if (range) {
25
+ entry.grid.setFocus({ ...range.to, plane: 'grid' }, true);
26
+ }
27
+ }),
28
+ ),
29
+ );
30
+
31
+ export default handler;
@@ -10,7 +10,7 @@ export default defineConfig({
10
10
  ...e2ePreset(import.meta.dirname),
11
11
  // TODO(wittjosiah): Avoid hard-coding ports.
12
12
  webServer: {
13
- command: 'moon run storybook:serve-e2e -- --port=9005',
13
+ command: 'pnpm storybook dev --ci --quiet --port=9005 --config-dir=.storybook',
14
14
  port: 9005,
15
15
  reuseExistingServer: false,
16
16
  },
@@ -15,7 +15,8 @@ test.describe('plugin-sheet', () => {
15
15
 
16
16
  test.beforeEach(async ({ browser }) => {
17
17
  const setup = await setupPage(browser, {
18
- url: storybookUrl('plugins-plugin-sheet-sheetcontainer--spec', 9005),
18
+ url: storybookUrl('plugins-plugin-sheet-containers-sheetcontainer--spec', 9005),
19
+ viewportSize: { width: 1280, height: 720 },
19
20
  });
20
21
  page = setup.page;
21
22
  sheet = new SheetManager(page);
@@ -5,7 +5,8 @@
5
5
  import { describe, expect, test } from 'vitest';
6
6
 
7
7
  import { Client } from '@dxos/client';
8
- import { Function } from '@dxos/functions';
8
+ import { Obj } from '@dxos/echo';
9
+ import { Operation } from '@dxos/operation';
9
10
 
10
11
  // Part 2.
11
12
  // TODO(burdon): Cannot test outside of browser.
@@ -22,7 +23,7 @@ import { Function } from '@dxos/functions';
22
23
  describe('test', () => {
23
24
  test('test', async () => {
24
25
  const client = new Client();
25
- client.addTypes([Function.Function]);
26
+ await client.addTypes([Operation.PersistentOperation]);
26
27
  await client.initialize();
27
28
  await client.halo.createIdentity();
28
29
 
@@ -33,7 +34,9 @@ describe('test', () => {
33
34
  // - ERROR "process.nextTick is not a function"
34
35
  // - ERROR "Identifier 'Buffer' has already been declared" if { nodeExternal: true }
35
36
  const space = await client.spaces.create();
36
- const fn = space.db.add(Function.make({ name: 'test', version: '0.0.1', binding: 'HELLO' }));
37
+ const fn = space.db.add(
38
+ Obj.make(Operation.PersistentOperation, { name: 'test', version: '0.0.1', binding: 'HELLO' }),
39
+ );
37
40
  expect(fn).to.exist;
38
41
  });
39
42
  });
package/src/serializer.ts CHANGED
@@ -3,10 +3,10 @@
3
3
  //
4
4
 
5
5
  import { Obj } from '@dxos/echo';
6
+ import { getObjectCore } from '@dxos/echo-db';
6
7
  import { type TypedObjectSerializer } from '@dxos/plugin-space/types';
7
- import { getObjectCore } from '@dxos/react-client/echo';
8
8
 
9
- import { Sheet } from './types';
9
+ import { Sheet } from '#types';
10
10
 
11
11
  export const serializer: TypedObjectSerializer<Sheet.Sheet> = {
12
12
  serialize: async ({ object }): Promise<string> => {
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import type { Sheet } from '../types';
5
+ import type { Sheet } from '#types';
6
6
 
7
7
  export const createTestCells = (testSheetName = 'test'): Record<string, Sheet.CellValue> => ({
8
8
  B1: { value: 'Qty2' },
@@ -10,8 +10,8 @@ import { createMockedComputeRuntimeProvider } from '@dxos/compute/testing';
10
10
  import { type Space } from '@dxos/react-client/echo';
11
11
  import { useAsyncState } from '@dxos/react-hooks';
12
12
 
13
- import { ComputeGraphContextProvider } from '../components';
14
- import { Sheet } from '../types';
13
+ import { ComputeGraphContextProvider } from '#components';
14
+ import { Sheet } from '#types';
15
15
 
16
16
  export const useTestSheet = (space?: Space, graph?: ComputeGraph, options?: Sheet.SheetProps) => {
17
17
  const [sheet] = useAsyncState(async () => {
@@ -4,48 +4,51 @@
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- import { meta } from './meta';
8
- import { Sheet } from './types';
7
+ import { meta } from '#meta';
8
+ import { Sheet } from '#types';
9
9
 
10
10
  export const translations = [
11
11
  {
12
12
  'en-US': {
13
13
  [Sheet.Sheet.typename]: {
14
- 'typename label': 'Sheet',
15
- 'typename label_zero': 'Sheets',
16
- 'typename label_one': 'Sheet',
17
- 'typename label_other': 'Sheets',
18
- 'object name placeholder': 'New sheet',
19
- 'rename object label': 'Rename sheet',
20
- 'delete object label': 'Delete sheet',
14
+ 'typename.label': 'Sheet',
15
+ 'typename.label_zero': 'Sheets',
16
+ 'typename.label_one': 'Sheet',
17
+ 'typename.label_other': 'Sheets',
18
+ 'object-name.placeholder': 'New sheet',
19
+ 'add-object.label': 'Add sheet',
20
+ 'rename-object.label': 'Rename sheet',
21
+ 'delete-object.label': 'Delete sheet',
22
+ 'object-deleted.label': 'Sheet deleted',
21
23
  },
22
24
  [meta.id]: {
23
- 'plugin name': 'Sheets',
24
- 'cell placeholder': 'Cell value...',
25
- 'range key alignment label': 'Align',
26
- 'range key style label': 'Style',
27
- 'range value start label': 'Align left',
28
- 'range value center label': 'Align center',
29
- 'range value end label': 'Align right',
30
- 'range value softwrap label': 'Wrap text',
31
- 'range value highlight label': 'Highlight',
32
- 'toolbar action label': '{{value}}',
33
- 'selection overlaps existing comment label': 'Selected cell already has a comment',
34
- 'comment label': 'Add comment',
35
- 'comment ranges not supported label': 'Commenting on ranges is not yet supported',
36
- 'no cursor label': 'Select a cell to comment',
37
- 'open comment for sheet cell': 'View comments for cell',
38
- 'add col before label': 'Add column before',
39
- 'add col after label': 'Add column after',
40
- 'delete col label': 'Delete column',
41
- 'add row before label': 'Add row before',
42
- 'add row after label': 'Add row after',
43
- 'delete row label': 'Delete row',
44
- 'range list heading': 'Ranges',
45
- 'no ranges message': 'No ranges',
46
- 'range title': '{{position}} {{value}}',
47
- 'col dropped label': 'Deleted a column',
48
- 'row dropped label': 'Deleted a row',
25
+ 'plugin.name': 'Sheets',
26
+ 'cell.placeholder': 'Cell value...',
27
+ 'range-key-alignment.label': 'Align',
28
+ 'range-key-style.label': 'Style',
29
+ 'range-value-start.label': 'Align left',
30
+ 'range-value-center.label': 'Align center',
31
+ 'range-value-end.label': 'Align right',
32
+ 'range-value-softwrap.label': 'Wrap text',
33
+ 'range-value-highlight.label': 'Highlight',
34
+ 'toolbar-action.label': '{{value}}',
35
+ 'selection-overlaps-existing-comment.label': 'Selected cell already has a comment',
36
+ 'comment.label': 'Add comment',
37
+ 'comment-ranges-not-supported.label': 'Commenting on ranges is not yet supported',
38
+ 'no-cursor.label': 'Select a cell to comment',
39
+ 'add-col-before.label': 'Add column before',
40
+ 'add-col-after.label': 'Add column after',
41
+ 'delete-col.label': 'Delete column',
42
+ 'add-row-before.label': 'Add row before',
43
+ 'add-row-after.label': 'Add row after',
44
+ 'delete-row.label': 'Delete row',
45
+ 'range-list.heading': 'Ranges',
46
+ 'no-ranges.message': 'No ranges',
47
+ 'range.title': '{{position}} — {{value}}',
48
+ 'col-dropped.label': 'Deleted a column',
49
+ 'row-dropped.label': 'Deleted a row',
50
+ 'align.label': 'Text align',
51
+ 'axis-dropped.label': 'Drop axis', // TODO(burdon): What does this mean?
49
52
  },
50
53
  },
51
54
  },