@dxos/plugin-sheet 0.6.13-main.548ca8d → 0.6.13-staging.1e988a3

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 (325) hide show
  1. package/dist/lib/browser/SheetContainer-U4H5D34A.mjs +1772 -0
  2. package/dist/lib/browser/SheetContainer-U4H5D34A.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-APHOLYUB.mjs +175 -0
  4. package/dist/lib/browser/chunk-APHOLYUB.mjs.map +7 -0
  5. package/dist/lib/{node-esm/chunk-5WPZCXNS.mjs → browser/chunk-D5AGLXJP.mjs} +678 -411
  6. package/dist/lib/browser/chunk-D5AGLXJP.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-FUAGSXA4.mjs +82 -0
  8. package/dist/lib/browser/chunk-FUAGSXA4.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-JRL5LGCE.mjs +18 -0
  10. package/dist/lib/browser/chunk-JRL5LGCE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-NU4PBN33.mjs +8 -0
  12. package/dist/lib/browser/chunk-NU4PBN33.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +62 -93
  14. package/dist/lib/browser/index.mjs.map +3 -3
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/meta.mjs +1 -1
  17. package/dist/lib/browser/testing.mjs +92 -0
  18. package/dist/lib/browser/testing.mjs.map +7 -0
  19. package/dist/lib/browser/types.mjs +10 -4
  20. package/dist/lib/node/SheetContainer-AXQV3ZT5.cjs +1765 -0
  21. package/dist/lib/node/SheetContainer-AXQV3ZT5.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-5XPK2V4A.cjs → chunk-5KKJ4NPP.cjs} +678 -418
  23. package/dist/lib/node/chunk-5KKJ4NPP.cjs.map +7 -0
  24. package/dist/lib/node/chunk-BJ6ZD7MN.cjs +51 -0
  25. package/dist/lib/node/chunk-BJ6ZD7MN.cjs.map +7 -0
  26. package/dist/lib/node/chunk-CN3RPESU.cjs +202 -0
  27. package/dist/lib/node/chunk-CN3RPESU.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-ER3PM7GD.cjs → chunk-DSYKOI4E.cjs} +45 -29
  29. package/dist/lib/node/chunk-DSYKOI4E.cjs.map +7 -0
  30. package/dist/lib/node/chunk-PYXHNAAK.cjs +40 -0
  31. package/dist/lib/node/chunk-PYXHNAAK.cjs.map +7 -0
  32. package/dist/lib/node/index.cjs +69 -105
  33. package/dist/lib/node/index.cjs.map +3 -3
  34. package/dist/lib/node/meta.cjs +3 -3
  35. package/dist/lib/node/meta.cjs.map +1 -1
  36. package/dist/lib/node/meta.json +1 -1
  37. package/dist/lib/node/testing.cjs +111 -0
  38. package/dist/lib/node/testing.cjs.map +7 -0
  39. package/dist/lib/node/types.cjs +14 -8
  40. package/dist/lib/node/types.cjs.map +2 -2
  41. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  42. package/dist/types/src/components/CellEditor/CellEditor.d.ts +14 -0
  43. package/dist/types/src/components/CellEditor/CellEditor.d.ts.map +1 -0
  44. package/dist/types/src/components/{GridSheet/SheetCellEditor.stories.d.ts → CellEditor/CellEditor.stories.d.ts} +4 -4
  45. package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +1 -0
  46. package/dist/types/src/{extensions/editor → components/CellEditor}/extension.d.ts +1 -1
  47. package/dist/types/src/components/CellEditor/extension.d.ts.map +1 -0
  48. package/dist/types/src/components/CellEditor/extension.test.d.ts.map +1 -0
  49. package/dist/types/src/components/CellEditor/index.d.ts +3 -0
  50. package/dist/types/src/components/CellEditor/index.d.ts.map +1 -0
  51. package/dist/types/src/{graph/functions → components/ComputeGraph}/async-function.d.ts +5 -14
  52. package/dist/types/src/components/ComputeGraph/async-function.d.ts.map +1 -0
  53. package/dist/types/src/components/ComputeGraph/custom.d.ts +21 -0
  54. package/dist/types/src/components/ComputeGraph/custom.d.ts.map +1 -0
  55. package/dist/types/src/components/ComputeGraph/edge-function.d.ts +20 -0
  56. package/dist/types/src/components/ComputeGraph/edge-function.d.ts.map +1 -0
  57. package/dist/types/src/components/ComputeGraph/graph-context.d.ts +12 -0
  58. package/dist/types/src/components/ComputeGraph/graph-context.d.ts.map +1 -0
  59. package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts +2 -0
  60. package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts.map +1 -0
  61. package/dist/types/src/components/ComputeGraph/graph.d.ts +26 -0
  62. package/dist/types/src/components/ComputeGraph/graph.d.ts.map +1 -0
  63. package/dist/types/src/components/ComputeGraph/index.d.ts +3 -1
  64. package/dist/types/src/components/ComputeGraph/index.d.ts.map +1 -1
  65. package/dist/types/src/components/Sheet/Sheet.d.ts +55 -0
  66. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -0
  67. package/dist/types/src/components/Sheet/Sheet.stories.d.ts +54 -0
  68. package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/Sheet/formatting.d.ts +14 -0
  70. package/dist/types/src/components/Sheet/formatting.d.ts.map +1 -0
  71. package/dist/types/src/components/Sheet/grid.d.ts +52 -0
  72. package/dist/types/src/components/Sheet/grid.d.ts.map +1 -0
  73. package/dist/types/src/components/Sheet/index.d.ts +2 -0
  74. package/dist/types/src/components/Sheet/index.d.ts.map +1 -0
  75. package/dist/types/src/components/Sheet/nav.d.ts +29 -0
  76. package/dist/types/src/components/Sheet/nav.d.ts.map +1 -0
  77. package/dist/types/src/components/Sheet/sheet-context.d.ts +25 -0
  78. package/dist/types/src/components/Sheet/sheet-context.d.ts.map +1 -0
  79. package/dist/types/src/components/Sheet/util.d.ts +18 -0
  80. package/dist/types/src/components/Sheet/util.d.ts.map +1 -0
  81. package/dist/types/src/components/SheetContainer.d.ts +9 -0
  82. package/dist/types/src/components/SheetContainer.d.ts.map +1 -0
  83. package/dist/types/src/components/Toolbar/Toolbar.d.ts +6 -36
  84. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  85. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +14 -19
  86. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Toolbar/common.d.ts +20 -0
  88. package/dist/types/src/components/Toolbar/common.d.ts.map +1 -0
  89. package/dist/types/src/components/index.d.ts +2 -3
  90. package/dist/types/src/components/index.d.ts.map +1 -1
  91. package/dist/types/src/meta.d.ts +9 -3
  92. package/dist/types/src/meta.d.ts.map +1 -1
  93. package/dist/types/src/{graph/functions/function-defs.d.ts → model/functions.d.ts} +1 -1
  94. package/dist/types/src/model/functions.d.ts.map +1 -0
  95. package/dist/types/src/model/index.d.ts +3 -3
  96. package/dist/types/src/model/index.d.ts.map +1 -1
  97. package/dist/types/src/model/model.browser.test.d.ts +2 -0
  98. package/dist/types/src/model/model.browser.test.d.ts.map +1 -0
  99. package/dist/types/src/model/{sheet-model.d.ts → model.d.ts} +67 -13
  100. package/dist/types/src/model/model.d.ts.map +1 -0
  101. package/dist/types/src/{defs → model}/types.d.ts +3 -8
  102. package/dist/types/src/model/types.d.ts.map +1 -0
  103. package/dist/types/src/model/types.test.d.ts.map +1 -0
  104. package/dist/types/src/model/util.d.ts +15 -0
  105. package/dist/types/src/model/util.d.ts.map +1 -0
  106. package/dist/types/src/testing.d.ts +9 -0
  107. package/dist/types/src/testing.d.ts.map +1 -0
  108. package/dist/types/src/translations.d.ts +12 -17
  109. package/dist/types/src/translations.d.ts.map +1 -1
  110. package/dist/types/src/types.d.ts +32 -98
  111. package/dist/types/src/types.d.ts.map +1 -1
  112. package/package.json +52 -57
  113. package/src/SheetPlugin.tsx +74 -52
  114. package/src/components/{GridSheet/SheetCellEditor.stories.tsx → CellEditor/CellEditor.stories.tsx} +8 -8
  115. package/src/components/CellEditor/CellEditor.tsx +113 -0
  116. package/src/{extensions/editor → components/CellEditor}/extension.test.ts +6 -4
  117. package/src/{extensions/editor → components/CellEditor}/extension.ts +6 -5
  118. package/src/{extensions/editor → components/CellEditor}/index.ts +1 -0
  119. package/src/{graph/functions → components/ComputeGraph}/async-function.ts +15 -25
  120. package/src/{graph/testing/test-plugin.ts → components/ComputeGraph/custom.ts} +14 -44
  121. package/src/{graph/functions → components/ComputeGraph}/edge-function.ts +14 -16
  122. package/src/components/ComputeGraph/graph-context.tsx +50 -0
  123. package/src/components/ComputeGraph/graph.browser.test.ts +50 -0
  124. package/src/components/ComputeGraph/graph.ts +62 -0
  125. package/src/components/ComputeGraph/index.ts +3 -1
  126. package/src/components/Sheet/Sheet.stories.tsx +287 -0
  127. package/src/components/Sheet/Sheet.tsx +1160 -0
  128. package/src/{model/formatting-model.ts → components/Sheet/formatting.ts} +20 -30
  129. package/src/components/Sheet/grid.ts +191 -0
  130. package/src/{testing → components/Sheet}/index.ts +1 -1
  131. package/src/components/Sheet/nav.ts +157 -0
  132. package/src/components/Sheet/sheet-context.tsx +150 -0
  133. package/src/components/Sheet/util.ts +56 -0
  134. package/src/components/SheetContainer.tsx +34 -0
  135. package/src/components/Toolbar/Toolbar.tsx +85 -167
  136. package/src/components/Toolbar/common.tsx +72 -0
  137. package/src/components/index.ts +0 -2
  138. package/src/meta.tsx +18 -0
  139. package/src/model/index.ts +3 -3
  140. package/src/model/model.browser.test.ts +100 -0
  141. package/src/model/model.ts +550 -0
  142. package/src/{defs → model}/types.test.ts +9 -8
  143. package/src/{defs → model}/types.ts +14 -24
  144. package/src/model/util.ts +36 -0
  145. package/src/testing.ts +50 -0
  146. package/src/translations.ts +1 -6
  147. package/src/types.ts +41 -40
  148. package/dist/lib/browser/SheetContainer-NDNIS44E.mjs +0 -265
  149. package/dist/lib/browser/SheetContainer-NDNIS44E.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-AQSGDA4X.mjs +0 -1614
  151. package/dist/lib/browser/chunk-AQSGDA4X.mjs.map +0 -7
  152. package/dist/lib/browser/chunk-D3QTX46O.mjs +0 -14
  153. package/dist/lib/browser/chunk-D3QTX46O.mjs.map +0 -7
  154. package/dist/lib/browser/chunk-GKI67SEF.mjs +0 -69
  155. package/dist/lib/browser/chunk-GKI67SEF.mjs.map +0 -7
  156. package/dist/lib/browser/chunk-GSV5QNLD.mjs +0 -2966
  157. package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +0 -7
  158. package/dist/lib/browser/graph-M4IQ76QX.mjs +0 -33
  159. package/dist/lib/browser/graph-M4IQ76QX.mjs.map +0 -7
  160. package/dist/lib/node/SheetContainer-YSQGJD7K.cjs +0 -276
  161. package/dist/lib/node/SheetContainer-YSQGJD7K.cjs.map +0 -7
  162. package/dist/lib/node/chunk-5XPK2V4A.cjs.map +0 -7
  163. package/dist/lib/node/chunk-6F43RV45.cjs +0 -1610
  164. package/dist/lib/node/chunk-6F43RV45.cjs.map +0 -7
  165. package/dist/lib/node/chunk-ER3PM7GD.cjs.map +0 -7
  166. package/dist/lib/node/chunk-QIFIGEKV.cjs +0 -37
  167. package/dist/lib/node/chunk-QIFIGEKV.cjs.map +0 -7
  168. package/dist/lib/node/graph-Q3N2X26H.cjs +0 -55
  169. package/dist/lib/node/graph-Q3N2X26H.cjs.map +0 -7
  170. package/dist/lib/node-esm/SheetContainer-M7WRMZDU.mjs +0 -266
  171. package/dist/lib/node-esm/SheetContainer-M7WRMZDU.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-ELTFPX5B.mjs +0 -1615
  174. package/dist/lib/node-esm/chunk-ELTFPX5B.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-VCYJWE3O.mjs +0 -16
  176. package/dist/lib/node-esm/chunk-VCYJWE3O.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-ZVLLQ2PJ.mjs +0 -70
  178. package/dist/lib/node-esm/chunk-ZVLLQ2PJ.mjs.map +0 -7
  179. package/dist/lib/node-esm/graph-SMPUMOV2.mjs +0 -34
  180. package/dist/lib/node-esm/graph-SMPUMOV2.mjs.map +0 -7
  181. package/dist/lib/node-esm/index.mjs +0 -280
  182. package/dist/lib/node-esm/index.mjs.map +0 -7
  183. package/dist/lib/node-esm/meta.json +0 -1
  184. package/dist/lib/node-esm/meta.mjs +0 -10
  185. package/dist/lib/node-esm/meta.mjs.map +0 -7
  186. package/dist/lib/node-esm/types.mjs +0 -17
  187. package/dist/lib/node-esm/types.mjs.map +0 -7
  188. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +0 -11
  189. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +0 -1
  190. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +0 -3
  191. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +0 -1
  192. package/dist/types/src/components/FunctionEditor/index.d.ts +0 -2
  193. package/dist/types/src/components/FunctionEditor/index.d.ts.map +0 -1
  194. package/dist/types/src/components/GridSheet/GridSheet.d.ts +0 -3
  195. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +0 -1
  196. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +0 -9
  197. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +0 -1
  198. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +0 -1
  199. package/dist/types/src/components/GridSheet/index.d.ts +0 -2
  200. package/dist/types/src/components/GridSheet/index.d.ts.map +0 -1
  201. package/dist/types/src/components/GridSheet/util.d.ts +0 -16
  202. package/dist/types/src/components/GridSheet/util.d.ts.map +0 -1
  203. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +0 -6
  204. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +0 -1
  205. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +0 -11
  206. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +0 -1
  207. package/dist/types/src/components/SheetContainer/index.d.ts +0 -3
  208. package/dist/types/src/components/SheetContainer/index.d.ts.map +0 -1
  209. package/dist/types/src/components/SheetContext/SheetContext.d.ts +0 -27
  210. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +0 -1
  211. package/dist/types/src/components/SheetContext/index.d.ts +0 -2
  212. package/dist/types/src/components/SheetContext/index.d.ts.map +0 -1
  213. package/dist/types/src/defs/index.d.ts +0 -3
  214. package/dist/types/src/defs/index.d.ts.map +0 -1
  215. package/dist/types/src/defs/types.d.ts.map +0 -1
  216. package/dist/types/src/defs/types.test.d.ts.map +0 -1
  217. package/dist/types/src/defs/util.d.ts +0 -43
  218. package/dist/types/src/defs/util.d.ts.map +0 -1
  219. package/dist/types/src/extensions/compute.d.ts +0 -6
  220. package/dist/types/src/extensions/compute.d.ts.map +0 -1
  221. package/dist/types/src/extensions/compute.stories.d.ts +0 -26
  222. package/dist/types/src/extensions/compute.stories.d.ts.map +0 -1
  223. package/dist/types/src/extensions/editor/extension.d.ts.map +0 -1
  224. package/dist/types/src/extensions/editor/extension.test.d.ts.map +0 -1
  225. package/dist/types/src/extensions/editor/index.d.ts +0 -2
  226. package/dist/types/src/extensions/editor/index.d.ts.map +0 -1
  227. package/dist/types/src/extensions/index.d.ts +0 -3
  228. package/dist/types/src/extensions/index.d.ts.map +0 -1
  229. package/dist/types/src/graph/compute-graph-registry.d.ts +0 -34
  230. package/dist/types/src/graph/compute-graph-registry.d.ts.map +0 -1
  231. package/dist/types/src/graph/compute-graph.d.ts +0 -64
  232. package/dist/types/src/graph/compute-graph.d.ts.map +0 -1
  233. package/dist/types/src/graph/compute-graph.stories.d.ts +0 -10
  234. package/dist/types/src/graph/compute-graph.stories.d.ts.map +0 -1
  235. package/dist/types/src/graph/compute-graph.test.d.ts +0 -2
  236. package/dist/types/src/graph/compute-graph.test.d.ts.map +0 -1
  237. package/dist/types/src/graph/compute-node.d.ts +0 -26
  238. package/dist/types/src/graph/compute-node.d.ts.map +0 -1
  239. package/dist/types/src/graph/functions/async-function.d.ts.map +0 -1
  240. package/dist/types/src/graph/functions/edge-function.d.ts +0 -21
  241. package/dist/types/src/graph/functions/edge-function.d.ts.map +0 -1
  242. package/dist/types/src/graph/functions/function-defs.d.ts.map +0 -1
  243. package/dist/types/src/graph/functions/index.d.ts +0 -4
  244. package/dist/types/src/graph/functions/index.d.ts.map +0 -1
  245. package/dist/types/src/graph/hyperformula.test.d.ts +0 -2
  246. package/dist/types/src/graph/hyperformula.test.d.ts.map +0 -1
  247. package/dist/types/src/graph/index.d.ts +0 -5
  248. package/dist/types/src/graph/index.d.ts.map +0 -1
  249. package/dist/types/src/graph/testing/index.d.ts +0 -3
  250. package/dist/types/src/graph/testing/index.d.ts.map +0 -1
  251. package/dist/types/src/graph/testing/test-builder.d.ts +0 -15
  252. package/dist/types/src/graph/testing/test-builder.d.ts.map +0 -1
  253. package/dist/types/src/graph/testing/test-plugin.d.ts +0 -36
  254. package/dist/types/src/graph/testing/test-plugin.d.ts.map +0 -1
  255. package/dist/types/src/graph/util.d.ts +0 -2
  256. package/dist/types/src/graph/util.d.ts.map +0 -1
  257. package/dist/types/src/hooks/hooks.stories.d.ts +0 -11
  258. package/dist/types/src/hooks/hooks.stories.d.ts.map +0 -1
  259. package/dist/types/src/hooks/index.d.ts +0 -5
  260. package/dist/types/src/hooks/index.d.ts.map +0 -1
  261. package/dist/types/src/hooks/threads.d.ts +0 -8
  262. package/dist/types/src/hooks/threads.d.ts.map +0 -1
  263. package/dist/types/src/hooks/useComputeGraph.d.ts +0 -7
  264. package/dist/types/src/hooks/useComputeGraph.d.ts.map +0 -1
  265. package/dist/types/src/hooks/useFormattingModel.d.ts +0 -3
  266. package/dist/types/src/hooks/useFormattingModel.d.ts.map +0 -1
  267. package/dist/types/src/hooks/useSheetModel.d.ts +0 -8
  268. package/dist/types/src/hooks/useSheetModel.d.ts.map +0 -1
  269. package/dist/types/src/model/decorations.d.ts +0 -25
  270. package/dist/types/src/model/decorations.d.ts.map +0 -1
  271. package/dist/types/src/model/formatting-model.d.ts +0 -19
  272. package/dist/types/src/model/formatting-model.d.ts.map +0 -1
  273. package/dist/types/src/model/sheet-model.d.ts.map +0 -1
  274. package/dist/types/src/model/sheet-model.test.d.ts +0 -2
  275. package/dist/types/src/model/sheet-model.test.d.ts.map +0 -1
  276. package/dist/types/src/sanity.test.d.ts +0 -2
  277. package/dist/types/src/sanity.test.d.ts.map +0 -1
  278. package/dist/types/src/testing/index.d.ts +0 -2
  279. package/dist/types/src/testing/index.d.ts.map +0 -1
  280. package/dist/types/src/testing/testing.d.ts +0 -8
  281. package/dist/types/src/testing/testing.d.ts.map +0 -1
  282. package/dist/vendor/hyperformula.mjs +0 -37145
  283. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +0 -20
  284. package/src/components/FunctionEditor/FunctionEditor.tsx +0 -45
  285. package/src/components/FunctionEditor/index.ts +0 -5
  286. package/src/components/GridSheet/GridSheet.stories.tsx +0 -41
  287. package/src/components/GridSheet/GridSheet.tsx +0 -161
  288. package/src/components/GridSheet/index.ts +0 -5
  289. package/src/components/GridSheet/util.ts +0 -144
  290. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -40
  291. package/src/components/SheetContainer/SheetContainer.tsx +0 -52
  292. package/src/components/SheetContainer/index.ts +0 -7
  293. package/src/components/SheetContext/SheetContext.tsx +0 -108
  294. package/src/components/SheetContext/index.ts +0 -5
  295. package/src/defs/index.ts +0 -6
  296. package/src/defs/util.ts +0 -151
  297. package/src/extensions/compute.stories.tsx +0 -151
  298. package/src/extensions/compute.ts +0 -147
  299. package/src/extensions/index.ts +0 -6
  300. package/src/graph/compute-graph-registry.ts +0 -90
  301. package/src/graph/compute-graph.stories.tsx +0 -93
  302. package/src/graph/compute-graph.test.ts +0 -87
  303. package/src/graph/compute-graph.ts +0 -242
  304. package/src/graph/compute-node.ts +0 -63
  305. package/src/graph/functions/index.ts +0 -7
  306. package/src/graph/hyperformula.test.ts +0 -14
  307. package/src/graph/index.ts +0 -8
  308. package/src/graph/testing/index.ts +0 -6
  309. package/src/graph/testing/test-builder.ts +0 -54
  310. package/src/graph/util.ts +0 -8
  311. package/src/hooks/hooks.stories.tsx +0 -50
  312. package/src/hooks/index.ts +0 -8
  313. package/src/hooks/threads.ts +0 -147
  314. package/src/hooks/useComputeGraph.ts +0 -28
  315. package/src/hooks/useFormattingModel.ts +0 -11
  316. package/src/hooks/useSheetModel.ts +0 -40
  317. package/src/meta.ts +0 -14
  318. package/src/model/decorations.ts +0 -64
  319. package/src/model/sheet-model.test.ts +0 -57
  320. package/src/model/sheet-model.ts +0 -418
  321. package/src/sanity.test.ts +0 -40
  322. package/src/testing/testing.tsx +0 -68
  323. /package/dist/types/src/{extensions/editor → components/CellEditor}/extension.test.d.ts +0 -0
  324. /package/dist/types/src/{defs → model}/types.test.d.ts +0 -0
  325. /package/src/{graph/functions/function-defs.ts → model/functions.ts} +0 -0
package/src/testing.ts ADDED
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type ComputeGraph, createComputeGraph } from './components';
6
+ import { SheetModel } from './model';
7
+ import { createSheet, type CellValue } from './types';
8
+
9
+ export const testSheetName = 'test';
10
+
11
+ export const createCells = (): Record<string, CellValue> => ({
12
+ B1: { value: 'Qty' },
13
+ B3: { value: 1 },
14
+ B4: { value: 2 },
15
+ B5: { value: 3 },
16
+ B7: { value: 'Total' },
17
+
18
+ C1: { value: 'Price' },
19
+ C3: { value: 2_000 },
20
+ C4: { value: 2_500 },
21
+ C5: { value: 3_000 },
22
+ C7: { value: '=SUMPRODUCT(B2:B6, C2:C6)' },
23
+ // C8: { value: '=C7*CRYPTO(D7)' },
24
+ C8: { value: '=C7*TEST()' },
25
+
26
+ D7: { value: 'USD' },
27
+ D8: { value: 'BTC' },
28
+
29
+ E3: { value: '=TODAY()' },
30
+ E4: { value: '=NOW()' },
31
+
32
+ F1: { value: `=${testSheetName}!A1` }, // Ref test sheet.
33
+ F3: { value: true },
34
+ F4: { value: false },
35
+ F5: { value: '8%' },
36
+ F6: { value: '$10000' },
37
+ });
38
+
39
+ export const createTestSheet = async ({
40
+ name,
41
+ graph = createComputeGraph(),
42
+ }: { name?: string; graph?: ComputeGraph } = {}) => {
43
+ const sheet = createSheet(name);
44
+ const model = new SheetModel(graph, sheet);
45
+ await model.initialize();
46
+ model.setValues(createCells());
47
+ model.sheet.columnMeta[model.sheet.columns[0]] = { size: 100 };
48
+ await model.destroy();
49
+ return sheet;
50
+ };
@@ -16,12 +16,7 @@ export default [
16
16
  'toolbar left label': 'Align left',
17
17
  'toolbar left center': 'Align center',
18
18
  'toolbar left right': 'Align right',
19
- 'selection overlaps existing comment label': 'Selected cell already has a comment',
20
- 'comment label': 'Add comment',
21
- 'comment ranges not supported label': 'Commenting on ranges is not yet supported',
22
- 'no cursor label': 'Select a cell to comment',
23
- 'open comment for sheet cell': 'View comments for cell',
24
19
  },
25
20
  },
26
21
  },
27
- ] as const;
22
+ ];
package/src/types.ts CHANGED
@@ -9,13 +9,9 @@ import type {
9
9
  SurfaceProvides,
10
10
  TranslationsProvides,
11
11
  } from '@dxos/app-framework';
12
- import { ref, S, TypedObject } from '@dxos/echo-schema';
12
+ import { create, S, TypedObject } from '@dxos/echo-schema';
13
13
  import { type SchemaProvides } from '@dxos/plugin-client';
14
- import { type MarkdownExtensionProvides } from '@dxos/plugin-markdown';
15
- import { type SpaceInitProvides } from '@dxos/plugin-space';
16
- import { ThreadType } from '@dxos/plugin-space/types';
17
14
  import { type StackProvides } from '@dxos/plugin-stack';
18
- import { FieldValueType } from '@dxos/schema';
19
15
 
20
16
  import { SHEET_PLUGIN } from './meta';
21
17
 
@@ -25,26 +21,13 @@ export enum SheetAction {
25
21
  CREATE = `${SHEET_ACTION}/create`,
26
22
  }
27
23
 
28
- // TODO(Zan): Move this to the plugin-space plugin or another common location
29
- // when we implement comments in sheets.
30
- // This is currently duplicated in a few places.
31
- type ThreadProvides<T> = {
32
- thread: {
33
- predicate: (obj: any) => obj is T;
34
- createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;
35
- };
36
- };
37
-
38
24
  export type SheetPluginProvides = SurfaceProvides &
39
25
  IntentResolverProvides &
40
26
  GraphBuilderProvides &
41
- MarkdownExtensionProvides &
42
27
  MetadataRecordsProvides &
43
28
  TranslationsProvides &
44
29
  SchemaProvides &
45
- SpaceInitProvides &
46
- StackProvides &
47
- ThreadProvides<SheetType>;
30
+ StackProvides;
48
31
 
49
32
  export type CellScalarValue = number | string | boolean | null;
50
33
 
@@ -52,15 +35,41 @@ export const CellValue = S.Struct({
52
35
  // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.
53
36
  // Consider import/export; natural access for other plugins. Special handling for currency (precision).
54
37
  // TODO(burdon): Automerge (long string) or short string or number.
38
+ // TODO(burdon): Arrays?
55
39
  value: S.Any,
56
40
  });
57
41
 
58
42
  export type CellValue = S.Schema.Type<typeof CellValue>;
59
43
 
60
- // TODO(burdon): IMPORTANT: Reconcile with Field definition.
44
+ /**
45
+ * https://www.tutorialsteacher.com/typescript/typescript-number
46
+ */
47
+ // TODO(burdon): Format vs. value.
48
+ export enum ValueTypeEnum {
49
+ Null = 0,
50
+ Number = 1,
51
+ Boolean = 2,
52
+ String = 3,
53
+
54
+ // Special numbers.
55
+ Percent = 10,
56
+ Currency = 11,
57
+
58
+ // Dates.
59
+ DateTime = 20,
60
+ Date = 21,
61
+ Time = 22,
62
+
63
+ // Validated string types.
64
+ // TODO(burdon): Define effect types.
65
+ URL = 30,
66
+ DID = 31,
67
+ }
68
+
69
+ export const ValueType = S.Enums(ValueTypeEnum);
70
+
61
71
  export const Formatting = S.Struct({
62
- range: S.String,
63
- type: S.optional(S.Enums(FieldValueType)),
72
+ type: S.optional(ValueType),
64
73
  format: S.optional(S.String),
65
74
  precision: S.optional(S.Number),
66
75
  classNames: S.optional(S.Array(S.String)),
@@ -74,11 +83,13 @@ export const RowColumnMeta = S.Struct({
74
83
  });
75
84
 
76
85
  // TODO(burdon): Index to all updates when rows/columns are inserted/deleted.
86
+ // TODO(wittjosiah): Migrate typename to remove `Type` suffix.
87
+ // TODO(wittjosiah): Rename title to name to align with other schemas.
77
88
  export class SheetType extends TypedObject({ typename: 'dxos.org/type/SheetType', version: '0.1.0' })({
78
- name: S.optional(S.String),
89
+ title: S.optional(S.String),
79
90
 
80
91
  // Sparse map of cells referenced by index.
81
- cells: S.mutable(S.Record({ key: S.String, value: S.mutable(CellValue) })),
92
+ cells: S.mutable(S.Record(S.String, S.mutable(CellValue))),
82
93
 
83
94
  // Ordered row indices.
84
95
  rows: S.mutable(S.Array(S.String)),
@@ -87,25 +98,15 @@ export class SheetType extends TypedObject({ typename: 'dxos.org/type/SheetType'
87
98
  columns: S.mutable(S.Array(S.String)),
88
99
 
89
100
  // Row metadata referenced by index.
90
- rowMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),
101
+ rowMeta: S.mutable(S.Record(S.String, S.mutable(RowColumnMeta))),
91
102
 
92
103
  // Column metadata referenced by index.
93
- columnMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),
104
+ columnMeta: S.mutable(S.Record(S.String, S.mutable(RowColumnMeta))),
94
105
 
95
- // TODO(burdon): Change to array.
96
106
  // Cell formatting referenced by indexed range.
97
- formatting: S.mutable(S.Array(Formatting)),
98
-
99
- // Threads associated with the sheet
100
- threads: S.optional(S.mutable(S.Array(ref(ThreadType)))),
107
+ formatting: S.mutable(S.Record(S.String, S.mutable(Formatting))),
101
108
  }) {}
102
109
 
103
- export type SheetSize = {
104
- rows: number;
105
- columns: number;
106
- };
107
-
108
- export type CreateSheetOptions = {
109
- name?: string;
110
- cells?: Record<string, CellValue>;
111
- } & Partial<SheetSize>;
110
+ // TODO(burdon): Fix defaults.
111
+ export const createSheet = (title?: string): SheetType =>
112
+ create(SheetType, { title, cells: {}, rows: [], columns: [], rowMeta: {}, columnMeta: {}, formatting: {} });
@@ -1,265 +0,0 @@
1
- import {
2
- GridSheet,
3
- SheetProvider,
4
- addressToA1Notation,
5
- addressToIndex,
6
- rangeToA1Notation,
7
- useSheetContext
8
- } from "./chunk-AQSGDA4X.mjs";
9
- import "./chunk-GKI67SEF.mjs";
10
- import {
11
- SHEET_PLUGIN
12
- } from "./chunk-D3QTX46O.mjs";
13
- import "./chunk-GSV5QNLD.mjs";
14
-
15
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
16
- import React3, { useCallback } from "react";
17
- import { useIntentDispatcher } from "@dxos/app-framework";
18
-
19
- // packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
20
- import React from "react";
21
- import { Icon } from "@dxos/react-ui";
22
- import { mx } from "@dxos/react-ui-theme";
23
- var FunctionEditor = () => {
24
- const { model, cursor, range } = useSheetContext();
25
- let value;
26
- let isFormula = false;
27
- if (cursor) {
28
- value = model.getCellValue(cursor);
29
- if (typeof value === "string" && value.charAt(0) === "=") {
30
- value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));
31
- isFormula = true;
32
- } else if (value != null) {
33
- value = String(value);
34
- }
35
- }
36
- return /* @__PURE__ */ React.createElement("div", {
37
- className: mx("flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface")
38
- }, /* @__PURE__ */ React.createElement("div", {
39
- className: "flex gap-4 items-center"
40
- }, /* @__PURE__ */ React.createElement("div", {
41
- className: "flex w-16 items-center font-mono"
42
- }, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
43
- className: "flex gap-2 items-center"
44
- }, /* @__PURE__ */ React.createElement(Icon, {
45
- icon: "ph--function--regular",
46
- classNames: [
47
- "text-greenText",
48
- isFormula ? "visible" : "invisible"
49
- ]
50
- }), /* @__PURE__ */ React.createElement("span", {
51
- className: "font-mono"
52
- }, value))));
53
- };
54
-
55
- // packages/plugins/plugin-sheet/src/components/Toolbar/Toolbar.tsx
56
- import { createContext } from "@radix-ui/react-context";
57
- import React2 from "react";
58
- import { Icon as Icon2, Toolbar as NaturalToolbar, useTranslation, Tooltip } from "@dxos/react-ui";
59
- import { useAttention } from "@dxos/react-ui-attention";
60
- import { nonNullable } from "@dxos/util";
61
- var buttonStyles = "min-bs-0 p-2";
62
- var tooltipProps = {
63
- side: "bottom",
64
- classNames: "z-10"
65
- };
66
- var ToolbarSeparator = () => /* @__PURE__ */ React2.createElement("div", {
67
- role: "separator",
68
- className: "grow"
69
- });
70
- var ToolbarItem = ({ itemType, icon, children, ...props }) => {
71
- const Invoker = itemType === "toggleGroupItem" ? NaturalToolbar.ToggleGroupItem : itemType === "toggle" ? NaturalToolbar.Toggle : NaturalToolbar.Button;
72
- return /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
73
- asChild: true
74
- }, /* @__PURE__ */ React2.createElement(Invoker, {
75
- variant: "ghost",
76
- ...props,
77
- classNames: buttonStyles
78
- }, /* @__PURE__ */ React2.createElement(Icon2, {
79
- icon,
80
- size: 5
81
- }), /* @__PURE__ */ React2.createElement("span", {
82
- className: "sr-only"
83
- }, children))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, tooltipProps, children, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null))));
84
- };
85
- var [ToolbarContextProvider, useToolbarContext] = createContext("Toolbar");
86
- var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
87
- var ToolbarRoot = ({ children, onAction, role, classNames }) => {
88
- const { id } = useSheetContext();
89
- const { hasAttention } = useAttention(id);
90
- return /* @__PURE__ */ React2.createElement(ToolbarContextProvider, {
91
- onAction
92
- }, /* @__PURE__ */ React2.createElement(NaturalToolbar.Root, {
93
- classNames: [
94
- ...role === "section" ? [
95
- "z-[2] group-focus-within/section:visible",
96
- !hasAttention && "invisible",
97
- sectionToolbarLayout
98
- ] : [
99
- "attention-surface"
100
- ],
101
- classNames
102
- ]
103
- }, children));
104
- };
105
- var formatOptions = [
106
- {
107
- value: "date",
108
- icon: "ph--calendar--regular",
109
- getState: (state) => false
110
- },
111
- {
112
- value: "currency",
113
- icon: "ph--currency-dollar--regular",
114
- getState: (state) => false
115
- }
116
- ];
117
- var Format = () => {
118
- const { onAction } = useToolbarContext("Format");
119
- const { t } = useTranslation(SHEET_PLUGIN);
120
- return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
121
- type: "single"
122
- }, formatOptions.map(({ value, getState, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
123
- itemType: "toggleGroupItem",
124
- key: value,
125
- value,
126
- icon,
127
- onClick: () => onAction?.({
128
- type: "format",
129
- value
130
- })
131
- }, t(`toolbar ${value} label`))));
132
- };
133
- var alignmentOptions = [
134
- {
135
- value: "left",
136
- icon: "ph--text-align-left--regular",
137
- getState: (state) => false
138
- },
139
- {
140
- value: "center",
141
- icon: "ph--text-align-center--regular",
142
- getState: (state) => false
143
- },
144
- {
145
- value: "right",
146
- icon: "ph--text-align-right--regular",
147
- getState: (state) => false
148
- }
149
- ];
150
- var Alignment = () => {
151
- const { onAction } = useToolbarContext("Alignment");
152
- const { t } = useTranslation(SHEET_PLUGIN);
153
- return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
154
- type: "single",
155
- // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}
156
- // disabled={state?.blockType === 'codeblock'}
157
- onValueChange: (value) => onAction?.({
158
- type: "align",
159
- value
160
- })
161
- }, alignmentOptions.map(({ value, getState, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
162
- itemType: "toggleGroupItem",
163
- key: value,
164
- value,
165
- icon
166
- }, t(`toolbar ${value} label`))));
167
- };
168
- var styleOptions = [
169
- {
170
- value: "highlight",
171
- icon: "ph--highlighter--regular",
172
- getState: (state) => false
173
- }
174
- ];
175
- var Styles = () => {
176
- const { onAction } = useToolbarContext("Styles");
177
- const { t } = useTranslation(SHEET_PLUGIN);
178
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, styleOptions.map(({ value, getState, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
179
- itemType: "toggle",
180
- key: value,
181
- onPressedChange: (nextPressed) => onAction?.({
182
- type: "style",
183
- value: nextPressed ? "highlight" : "unset"
184
- }),
185
- icon
186
- }, t(`toolbar ${value} label`))));
187
- };
188
- var Actions = () => {
189
- const { onAction } = useToolbarContext("Actions");
190
- const { cursor, range, model } = useSheetContext();
191
- const { t } = useTranslation(SHEET_PLUGIN);
192
- const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
193
- if (!cursor) {
194
- return false;
195
- }
196
- return addressToIndex(model.sheet, cursor) === thread.anchor;
197
- });
198
- const hasCursor = !!cursor;
199
- const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;
200
- const tooltipLabelKey = !hasCursor ? "no cursor label" : overlapsCommentAnchor ? "selection overlaps existing comment label" : range ? "comment ranges not supported label" : "comment label";
201
- return /* @__PURE__ */ React2.createElement(ToolbarItem, {
202
- itemType: "button",
203
- value: "comment",
204
- icon: "ph--chat-text--regular",
205
- "data-testid": "editor.toolbar.comment",
206
- onClick: () => {
207
- if (!cursor) {
208
- return;
209
- }
210
- return onAction?.({
211
- type: "comment",
212
- anchor: addressToIndex(model.sheet, cursor),
213
- cellContent: model.getCellText(cursor)
214
- });
215
- },
216
- disabled: !cursorOnly || overlapsCommentAnchor
217
- }, t(tooltipLabelKey));
218
- };
219
- var Toolbar = {
220
- Root: ToolbarRoot,
221
- Separator: ToolbarSeparator,
222
- Alignment,
223
- Format,
224
- Styles,
225
- Actions
226
- };
227
-
228
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
229
- var SheetContainer = ({ graph, sheet, role }) => {
230
- const dispatch = useIntentDispatcher();
231
- const handleAction = useCallback((action) => {
232
- switch (action.type) {
233
- case "comment": {
234
- void dispatch({
235
- action: "dxos.org/plugin/thread/action/create",
236
- data: {
237
- cursor: action.anchor,
238
- name: action.cellContent,
239
- subject: sheet
240
- }
241
- });
242
- }
243
- }
244
- }, [
245
- sheet,
246
- dispatch
247
- ]);
248
- return /* @__PURE__ */ React3.createElement(SheetProvider, {
249
- sheet,
250
- graph
251
- }, /* @__PURE__ */ React3.createElement(Toolbar.Root, {
252
- onAction: handleAction,
253
- role
254
- }, /* @__PURE__ */ React3.createElement(Toolbar.Styles, null), /* @__PURE__ */ React3.createElement(Toolbar.Format, null), /* @__PURE__ */ React3.createElement(Toolbar.Alignment, null), /* @__PURE__ */ React3.createElement(Toolbar.Separator, null), /* @__PURE__ */ React3.createElement(Toolbar.Actions, null)), /* @__PURE__ */ React3.createElement("div", {
255
- role: "none",
256
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
257
- }, /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null)));
258
- };
259
-
260
- // packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
261
- var SheetContainer_default = SheetContainer;
262
- export {
263
- SheetContainer_default as default
264
- };
265
- //# sourceMappingURL=SheetContainer-NDNIS44E.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/SheetContainer/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\n\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider, type SheetProviderProps } from '../SheetContext';\nimport { Toolbar, type ToolbarAction } from '../Toolbar';\n\nexport const SheetContainer = ({ graph, sheet, role }: SheetProviderProps & { role?: string }) => {\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Centralise the toolbar action handler. Current implementation in stories.\n const handleAction = useCallback(\n (action: ToolbarAction) => {\n switch (action.type) {\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: action.anchor,\n name: action.cellContent,\n subject: sheet,\n },\n });\n }\n }\n },\n [sheet, dispatch],\n );\n\n return (\n <SheetProvider sheet={sheet} graph={graph}>\n <Toolbar.Root onAction={handleAction} role={role}>\n <Toolbar.Styles />\n <Toolbar.Format />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n <div role='none' className='border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0'>\n <GridSheet />\n <FunctionEditor />\n </div>\n </SheetProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Icon } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { addressToA1Notation, rangeToA1Notation } from '../../defs';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let isFormula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (typeof value === 'string' && value.charAt(0) === '=') {\n value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));\n isFormula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div\n className={mx(\n 'flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface',\n )}\n >\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', isFormula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport {\n Icon,\n Toolbar as NaturalToolbar,\n useTranslation,\n Tooltip,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n type ThemedClassName,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport { addressToIndex } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type Formatting } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Buttons\n//\n\nconst buttonStyles = 'min-bs-0 p-2';\nconst tooltipProps = { side: 'bottom' as const, classNames: 'z-10' };\n\nconst ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarItem\n//\n\ntype ToolbarItemProps =\n | (NaturalToolbarButtonProps & { itemType: 'button'; icon: string })\n | (NaturalToolbarToggleGroupItemProps & { itemType: 'toggleGroupItem'; icon: string })\n | (NaturalToolbarToggleProps & { itemType: 'toggle'; icon: string });\n\nexport const ToolbarItem = ({ itemType, icon, children, ...props }: ToolbarItemProps) => {\n const Invoker =\n itemType === 'toggleGroupItem'\n ? NaturalToolbar.ToggleGroupItem\n : itemType === 'toggle'\n ? NaturalToolbar.Toggle\n : NaturalToolbar.Button;\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(thure): type the props spread better. */}\n <Invoker variant='ghost' {...(props as any)} classNames={buttonStyles}>\n <Icon icon={icon} size={5} />\n <span className='sr-only'>{children}</span>\n </Invoker>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// Root\n//\n\ntype AlignValue = 'left' | 'center' | 'right' | 'unset';\ntype AlignAction = { type: 'align'; value: AlignValue };\n\ntype CommentAction = { type: 'comment'; anchor: string; cellContent?: string };\n\ntype FormatValue = 'date' | 'currency' | 'unset';\ntype FormatAction = { type: 'format'; value: FormatValue };\n\ntype StyleValue = 'highlight' | 'unset';\ntype StyleAction = { type: 'style'; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | FormatAction | CommentAction;\n\nexport type ToolbarActionType = ToolbarAction['type'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n onAction?: ToolbarActionHandler;\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<ToolbarProps>('Toolbar');\n\n// TODO(Zan): Factor out, copied this from MarkdownPlugin.\nconst sectionToolbarLayout =\n 'bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity';\n\nconst ToolbarRoot = ({ children, onAction, role, classNames }: ToolbarProps) => {\n const { id } = useSheetContext();\n const { hasAttention } = useAttention(id);\n\n return (\n <ToolbarContextProvider onAction={onAction}>\n <NaturalToolbar.Root\n classNames={[\n ...(role === 'section'\n ? ['z-[2] group-focus-within/section:visible', !hasAttention && 'invisible', sectionToolbarLayout]\n : ['attention-surface']),\n classNames,\n ]}\n >\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps<T> = {\n value: T;\n icon: string;\n getState: (state: Formatting) => boolean;\n disabled?: (state: Formatting) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst formatOptions: ButtonProps<FormatValue>[] = [\n { value: 'date', icon: 'ph--calendar--regular', getState: (state) => false },\n { value: 'currency', icon: 'ph--currency-dollar--regular', getState: (state) => false },\n];\n\nconst Format = () => {\n const { onAction } = useToolbarContext('Format');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {formatOptions.map(({ value, getState, icon }) => (\n <ToolbarItem\n itemType='toggleGroupItem'\n key={value}\n value={value}\n icon={icon}\n onClick={() => onAction?.({ type: 'format', value })}\n >\n {t(`toolbar ${value} label`)}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'left', icon: 'ph--text-align-left--regular', getState: (state) => false },\n { value: 'center', icon: 'ph--text-align-center--regular', getState: (state) => false },\n { value: 'right', icon: 'ph--text-align-right--regular', getState: (state) => false },\n];\n\nconst Alignment = () => {\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n // disabled={state?.blockType === 'codeblock'}\n onValueChange={(value: AlignValue) => onAction?.({ type: 'align', value })}\n >\n {alignmentOptions.map(({ value, getState, icon }) => (\n <ToolbarItem itemType='toggleGroupItem' key={value} value={value} icon={icon}>\n {t(`toolbar ${value} label`)}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [\n { value: 'highlight', icon: 'ph--highlighter--regular', getState: (state) => false },\n];\n\nconst Styles = () => {\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <>\n {styleOptions.map(({ value, getState, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n onPressedChange={(nextPressed: boolean) =>\n onAction?.({ type: 'style', value: nextPressed ? 'highlight' : 'unset' })\n }\n icon={icon}\n >\n {t(`toolbar ${value} label`)}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursor, range, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursor) {\n return false;\n }\n return addressToIndex(model.sheet, cursor) === thread.anchor;\n });\n\n const hasCursor = !!cursor;\n const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;\n\n const tooltipLabelKey = !hasCursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : range\n ? 'comment ranges not supported label'\n : 'comment label';\n\n return (\n <ToolbarItem\n itemType='button'\n value='comment'\n icon='ph--chat-text--regular'\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursor) {\n return;\n }\n return onAction?.({\n type: 'comment',\n anchor: addressToIndex(model.sheet, cursor),\n cellContent: model.getCellText(cursor),\n });\n }}\n disabled={!cursorOnly || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarItem>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Format,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useIntentDispatcher", "React", "Icon", "mx", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "isFormula", "getCellValue", "charAt", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "String", "div", "className", "mx", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "createContext", "React", "Icon", "Toolbar", "NaturalToolbar", "useTranslation", "Tooltip", "useAttention", "nonNullable", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "React", "div", "role", "className", "ToolbarItem", "itemType", "icon", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "Icon", "size", "span", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "sectionToolbarLayout", "ToolbarRoot", "onAction", "id", "useSheetContext", "hasAttention", "useAttention", "formatOptions", "value", "getState", "state", "Format", "t", "useTranslation", "SHEET_PLUGIN", "ToggleGroup", "type", "map", "key", "onClick", "alignmentOptions", "Alignment", "onValueChange", "styleOptions", "Styles", "onPressedChange", "nextPressed", "Actions", "cursor", "range", "model", "overlapsCommentAnchor", "sheet", "threads", "filter", "nonNullable", "thread", "status", "some", "addressToIndex", "anchor", "hasCursor", "cursorOnly", "tooltipLabelKey", "data-testid", "cellContent", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "graph", "sheet", "role", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "type", "data", "cursor", "anchor", "name", "cellContent", "subject", "React", "SheetProvider", "Toolbar", "Root", "onAction", "Styles", "Format", "Alignment", "Separator", "Actions", "div", "className", "GridSheet", "FunctionEditor", "SheetContainer"]
7
- }