@dxos/plugin-sheet 0.6.13-main.ed424a1 → 0.6.13

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 (323) 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 +12 -6
  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-NZARD7UP.cjs → chunk-DSYKOI4E.cjs} +51 -40
  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 +15 -9
  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 +9 -33
  84. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  85. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +15 -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 -2
  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 +40 -125
  111. package/dist/types/src/types.d.ts.map +1 -1
  112. package/package.json +52 -58
  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/components/Sheet/formatting.ts +106 -0
  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 +112 -242
  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 -2
  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 +47 -40
  148. package/dist/lib/browser/SheetContainer-RVRACGCZ.mjs +0 -290
  149. package/dist/lib/browser/SheetContainer-RVRACGCZ.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-BWN5DZWZ.mjs +0 -74
  151. package/dist/lib/browser/chunk-BWN5DZWZ.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-GSV5QNLD.mjs +0 -2966
  155. package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +0 -7
  156. package/dist/lib/browser/chunk-HOG37RYS.mjs +0 -1528
  157. package/dist/lib/browser/chunk-HOG37RYS.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-J7XROAMN.cjs +0 -300
  161. package/dist/lib/node/SheetContainer-J7XROAMN.cjs.map +0 -7
  162. package/dist/lib/node/chunk-5XPK2V4A.cjs.map +0 -7
  163. package/dist/lib/node/chunk-AXQZA2YS.cjs +0 -1527
  164. package/dist/lib/node/chunk-AXQZA2YS.cjs.map +0 -7
  165. package/dist/lib/node/chunk-NZARD7UP.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-YWQVKHQB.mjs +0 -291
  171. package/dist/lib/node-esm/SheetContainer-YWQVKHQB.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-BPXXIAOQ.mjs +0 -1529
  174. package/dist/lib/node-esm/chunk-BPXXIAOQ.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-WFDTY3IC.mjs +0 -75
  178. package/dist/lib/node-esm/chunk-WFDTY3IC.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 -26
  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 -4
  214. package/dist/types/src/defs/index.d.ts.map +0 -1
  215. package/dist/types/src/defs/sheet-range-types.d.ts +0 -13
  216. package/dist/types/src/defs/sheet-range-types.d.ts.map +0 -1
  217. package/dist/types/src/defs/types.d.ts.map +0 -1
  218. package/dist/types/src/defs/types.test.d.ts.map +0 -1
  219. package/dist/types/src/defs/util.d.ts +0 -43
  220. package/dist/types/src/defs/util.d.ts.map +0 -1
  221. package/dist/types/src/extensions/compute.d.ts +0 -6
  222. package/dist/types/src/extensions/compute.d.ts.map +0 -1
  223. package/dist/types/src/extensions/compute.stories.d.ts +0 -26
  224. package/dist/types/src/extensions/compute.stories.d.ts.map +0 -1
  225. package/dist/types/src/extensions/editor/extension.d.ts.map +0 -1
  226. package/dist/types/src/extensions/editor/extension.test.d.ts.map +0 -1
  227. package/dist/types/src/extensions/editor/index.d.ts +0 -2
  228. package/dist/types/src/extensions/editor/index.d.ts.map +0 -1
  229. package/dist/types/src/extensions/index.d.ts +0 -3
  230. package/dist/types/src/extensions/index.d.ts.map +0 -1
  231. package/dist/types/src/graph/compute-graph-registry.d.ts +0 -34
  232. package/dist/types/src/graph/compute-graph-registry.d.ts.map +0 -1
  233. package/dist/types/src/graph/compute-graph.d.ts +0 -64
  234. package/dist/types/src/graph/compute-graph.d.ts.map +0 -1
  235. package/dist/types/src/graph/compute-graph.stories.d.ts +0 -10
  236. package/dist/types/src/graph/compute-graph.stories.d.ts.map +0 -1
  237. package/dist/types/src/graph/compute-graph.test.d.ts +0 -2
  238. package/dist/types/src/graph/compute-graph.test.d.ts.map +0 -1
  239. package/dist/types/src/graph/compute-node.d.ts +0 -26
  240. package/dist/types/src/graph/compute-node.d.ts.map +0 -1
  241. package/dist/types/src/graph/functions/async-function.d.ts.map +0 -1
  242. package/dist/types/src/graph/functions/edge-function.d.ts +0 -21
  243. package/dist/types/src/graph/functions/edge-function.d.ts.map +0 -1
  244. package/dist/types/src/graph/functions/function-defs.d.ts.map +0 -1
  245. package/dist/types/src/graph/functions/index.d.ts +0 -4
  246. package/dist/types/src/graph/functions/index.d.ts.map +0 -1
  247. package/dist/types/src/graph/hyperformula.test.d.ts +0 -2
  248. package/dist/types/src/graph/hyperformula.test.d.ts.map +0 -1
  249. package/dist/types/src/graph/index.d.ts +0 -5
  250. package/dist/types/src/graph/index.d.ts.map +0 -1
  251. package/dist/types/src/graph/testing/index.d.ts +0 -3
  252. package/dist/types/src/graph/testing/index.d.ts.map +0 -1
  253. package/dist/types/src/graph/testing/test-builder.d.ts +0 -15
  254. package/dist/types/src/graph/testing/test-builder.d.ts.map +0 -1
  255. package/dist/types/src/graph/testing/test-plugin.d.ts +0 -36
  256. package/dist/types/src/graph/testing/test-plugin.d.ts.map +0 -1
  257. package/dist/types/src/graph/util.d.ts +0 -2
  258. package/dist/types/src/graph/util.d.ts.map +0 -1
  259. package/dist/types/src/hooks/hooks.stories.d.ts +0 -11
  260. package/dist/types/src/hooks/hooks.stories.d.ts.map +0 -1
  261. package/dist/types/src/hooks/index.d.ts +0 -4
  262. package/dist/types/src/hooks/index.d.ts.map +0 -1
  263. package/dist/types/src/hooks/threads.d.ts +0 -8
  264. package/dist/types/src/hooks/threads.d.ts.map +0 -1
  265. package/dist/types/src/hooks/useComputeGraph.d.ts +0 -7
  266. package/dist/types/src/hooks/useComputeGraph.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/sheet-model.d.ts.map +0 -1
  272. package/dist/types/src/model/sheet-model.test.d.ts +0 -2
  273. package/dist/types/src/model/sheet-model.test.d.ts.map +0 -1
  274. package/dist/types/src/sanity.test.d.ts +0 -2
  275. package/dist/types/src/sanity.test.d.ts.map +0 -1
  276. package/dist/types/src/testing/index.d.ts +0 -2
  277. package/dist/types/src/testing/index.d.ts.map +0 -1
  278. package/dist/types/src/testing/testing.d.ts +0 -8
  279. package/dist/types/src/testing/testing.d.ts.map +0 -1
  280. package/dist/vendor/hyperformula.mjs +0 -37145
  281. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +0 -20
  282. package/src/components/FunctionEditor/FunctionEditor.tsx +0 -45
  283. package/src/components/FunctionEditor/index.ts +0 -5
  284. package/src/components/GridSheet/GridSheet.stories.tsx +0 -41
  285. package/src/components/GridSheet/GridSheet.tsx +0 -163
  286. package/src/components/GridSheet/index.ts +0 -5
  287. package/src/components/GridSheet/util.ts +0 -158
  288. package/src/components/SheetContainer/SheetContainer.stories.tsx +0 -40
  289. package/src/components/SheetContainer/SheetContainer.tsx +0 -27
  290. package/src/components/SheetContainer/index.ts +0 -7
  291. package/src/components/SheetContext/SheetContext.tsx +0 -104
  292. package/src/components/SheetContext/index.ts +0 -5
  293. package/src/defs/index.ts +0 -7
  294. package/src/defs/sheet-range-types.ts +0 -46
  295. package/src/defs/util.ts +0 -151
  296. package/src/extensions/compute.stories.tsx +0 -151
  297. package/src/extensions/compute.ts +0 -147
  298. package/src/extensions/index.ts +0 -6
  299. package/src/graph/compute-graph-registry.ts +0 -90
  300. package/src/graph/compute-graph.stories.tsx +0 -93
  301. package/src/graph/compute-graph.test.ts +0 -87
  302. package/src/graph/compute-graph.ts +0 -242
  303. package/src/graph/compute-node.ts +0 -63
  304. package/src/graph/functions/index.ts +0 -7
  305. package/src/graph/hyperformula.test.ts +0 -14
  306. package/src/graph/index.ts +0 -8
  307. package/src/graph/testing/index.ts +0 -6
  308. package/src/graph/testing/test-builder.ts +0 -54
  309. package/src/graph/util.ts +0 -8
  310. package/src/hooks/hooks.stories.tsx +0 -50
  311. package/src/hooks/index.ts +0 -7
  312. package/src/hooks/threads.ts +0 -147
  313. package/src/hooks/useComputeGraph.ts +0 -28
  314. package/src/hooks/useSheetModel.ts +0 -40
  315. package/src/meta.ts +0 -14
  316. package/src/model/decorations.ts +0 -64
  317. package/src/model/sheet-model.test.ts +0 -57
  318. package/src/model/sheet-model.ts +0 -418
  319. package/src/sanity.test.ts +0 -40
  320. package/src/testing/testing.tsx +0 -68
  321. /package/dist/types/src/{extensions/editor → components/CellEditor}/extension.test.d.ts +0 -0
  322. /package/dist/types/src/{defs → model}/types.test.d.ts +0 -0
  323. /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,11 +9,8 @@ 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
15
 
19
16
  import { SHEET_PLUGIN } from './meta';
@@ -24,26 +21,13 @@ export enum SheetAction {
24
21
  CREATE = `${SHEET_ACTION}/create`,
25
22
  }
26
23
 
27
- // TODO(Zan): Move this to the plugin-space plugin or another common location
28
- // when we implement comments in sheets.
29
- // This is currently duplicated in a few places.
30
- type ThreadProvides<T> = {
31
- thread: {
32
- predicate: (obj: any) => obj is T;
33
- createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;
34
- };
35
- };
36
-
37
24
  export type SheetPluginProvides = SurfaceProvides &
38
25
  IntentResolverProvides &
39
26
  GraphBuilderProvides &
40
- MarkdownExtensionProvides &
41
27
  MetadataRecordsProvides &
42
28
  TranslationsProvides &
43
29
  SchemaProvides &
44
- SpaceInitProvides &
45
- StackProvides &
46
- ThreadProvides<SheetType>;
30
+ StackProvides;
47
31
 
48
32
  export type CellScalarValue = number | string | boolean | null;
49
33
 
@@ -51,29 +35,61 @@ export const CellValue = S.Struct({
51
35
  // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.
52
36
  // Consider import/export; natural access for other plugins. Special handling for currency (precision).
53
37
  // TODO(burdon): Automerge (long string) or short string or number.
38
+ // TODO(burdon): Arrays?
54
39
  value: S.Any,
55
40
  });
56
41
 
57
42
  export type CellValue = S.Schema.Type<typeof CellValue>;
58
43
 
59
- // TODO(burdon): IMPORTANT: Reconcile with Field definition.
60
- export const Range = S.Struct({
61
- range: S.Struct({ from: S.Struct({ col: S.Number, row: S.Number }), to: S.Struct({ col: S.Number, row: S.Number }) }),
62
- key: S.String,
63
- value: S.String,
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
+
71
+ export const Formatting = S.Struct({
72
+ type: S.optional(ValueType),
73
+ format: S.optional(S.String),
74
+ precision: S.optional(S.Number),
75
+ classNames: S.optional(S.Array(S.String)),
64
76
  });
65
77
 
78
+ export type Formatting = S.Schema.Type<typeof Formatting>;
79
+
66
80
  // TODO(burdon): Visibility, locked, frozen, etc.
67
81
  export const RowColumnMeta = S.Struct({
68
82
  size: S.optional(S.Number),
69
83
  });
70
84
 
71
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.
72
88
  export class SheetType extends TypedObject({ typename: 'dxos.org/type/SheetType', version: '0.1.0' })({
73
- name: S.optional(S.String),
89
+ title: S.optional(S.String),
74
90
 
75
91
  // Sparse map of cells referenced by index.
76
- cells: S.mutable(S.Record({ key: S.String, value: S.mutable(CellValue) })),
92
+ cells: S.mutable(S.Record(S.String, S.mutable(CellValue))),
77
93
 
78
94
  // Ordered row indices.
79
95
  rows: S.mutable(S.Array(S.String)),
@@ -82,24 +98,15 @@ export class SheetType extends TypedObject({ typename: 'dxos.org/type/SheetType'
82
98
  columns: S.mutable(S.Array(S.String)),
83
99
 
84
100
  // Row metadata referenced by index.
85
- rowMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),
101
+ rowMeta: S.mutable(S.Record(S.String, S.mutable(RowColumnMeta))),
86
102
 
87
103
  // Column metadata referenced by index.
88
- columnMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),
104
+ columnMeta: S.mutable(S.Record(S.String, S.mutable(RowColumnMeta))),
89
105
 
90
106
  // Cell formatting referenced by indexed range.
91
- ranges: S.mutable(S.Array(Range)),
92
-
93
- // Threads associated with the sheet
94
- threads: S.optional(S.mutable(S.Array(ref(ThreadType)))),
107
+ formatting: S.mutable(S.Record(S.String, S.mutable(Formatting))),
95
108
  }) {}
96
109
 
97
- export type SheetSize = {
98
- rows: number;
99
- columns: number;
100
- };
101
-
102
- export type CreateSheetOptions = {
103
- name?: string;
104
- cells?: Record<string, CellValue>;
105
- } & 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,290 +0,0 @@
1
- import {
2
- GridSheet,
3
- SheetProvider,
4
- addressToA1Notation,
5
- addressToIndex,
6
- inRange,
7
- rangeToA1Notation,
8
- useSheetContext
9
- } from "./chunk-HOG37RYS.mjs";
10
- import "./chunk-BWN5DZWZ.mjs";
11
- import {
12
- SHEET_PLUGIN
13
- } from "./chunk-D3QTX46O.mjs";
14
- import "./chunk-GSV5QNLD.mjs";
15
-
16
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
17
- import React3 from "react";
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, { useCallback, useMemo } from "react";
58
- import { useIntentDispatcher } from "@dxos/app-framework";
59
- import { Icon as Icon2, Toolbar as NaturalToolbar, useTranslation, Tooltip } from "@dxos/react-ui";
60
- import { useAttention } from "@dxos/react-ui-attention";
61
- import { nonNullable } from "@dxos/util";
62
- var buttonStyles = "min-bs-0 p-2";
63
- var tooltipProps = {
64
- side: "bottom",
65
- classNames: "z-10"
66
- };
67
- var ToolbarSeparator = () => /* @__PURE__ */ React2.createElement("div", {
68
- role: "separator",
69
- className: "grow"
70
- });
71
- var ToolbarItem = ({ itemType, icon, children, ...props }) => {
72
- const Invoker = itemType === "toggleGroupItem" ? NaturalToolbar.ToggleGroupItem : itemType === "toggle" ? NaturalToolbar.Toggle : NaturalToolbar.Button;
73
- return /* @__PURE__ */ React2.createElement(Tooltip.Root, null, /* @__PURE__ */ React2.createElement(Tooltip.Trigger, {
74
- asChild: true
75
- }, /* @__PURE__ */ React2.createElement(Invoker, {
76
- variant: "ghost",
77
- ...props,
78
- classNames: buttonStyles
79
- }, /* @__PURE__ */ React2.createElement(Icon2, {
80
- icon,
81
- size: 5
82
- }), /* @__PURE__ */ React2.createElement("span", {
83
- className: "sr-only"
84
- }, children))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, tooltipProps, children, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null))));
85
- };
86
- var [ToolbarContextProvider, useToolbarContext] = createContext("Toolbar");
87
- var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
88
- var ToolbarRoot = ({ children, role, classNames }) => {
89
- const { id, model, range, cursor } = useSheetContext();
90
- const { hasAttention } = useAttention(id);
91
- const dispatch = useIntentDispatcher();
92
- const handleAction = useCallback((action) => {
93
- switch (action.key) {
94
- case "align":
95
- if (cursor) {
96
- const index = model.sheet.ranges?.findIndex((range2) => range2.key === action.key && inRange(range2.range, cursor));
97
- const nextRange = range ? {
98
- from: range.from,
99
- to: range.to ?? range.from
100
- } : {
101
- from: cursor,
102
- to: cursor
103
- };
104
- const nextRangeEntity = {
105
- range: nextRange,
106
- key: action.key,
107
- value: action.value
108
- };
109
- if (index < 0) {
110
- model.sheet.ranges?.push(nextRangeEntity);
111
- } else {
112
- model.sheet.ranges?.splice(index, 1, nextRangeEntity);
113
- }
114
- }
115
- break;
116
- case "style":
117
- if (action.value === "unset") {
118
- const index = model.sheet.ranges?.findIndex((range2) => range2.key === action.key);
119
- if (index >= 0) {
120
- model.sheet.ranges?.splice(index, 1);
121
- }
122
- } else if (range || cursor) {
123
- const nextRange = range ? {
124
- from: range.from,
125
- to: range.to ?? range.from
126
- } : {
127
- from: cursor,
128
- to: cursor
129
- };
130
- model.sheet.ranges?.push({
131
- range: nextRange,
132
- key: action.key,
133
- value: action.value
134
- });
135
- }
136
- break;
137
- case "comment": {
138
- void dispatch({
139
- action: "dxos.org/plugin/thread/action/create",
140
- data: {
141
- cursor: action.value,
142
- name: action.cellContent,
143
- subject: model.sheet
144
- }
145
- });
146
- }
147
- }
148
- }, [
149
- model.sheet,
150
- range,
151
- cursor,
152
- dispatch
153
- ]);
154
- return /* @__PURE__ */ React2.createElement(ToolbarContextProvider, {
155
- onAction: handleAction
156
- }, /* @__PURE__ */ React2.createElement(NaturalToolbar.Root, {
157
- classNames: [
158
- ...role === "section" ? [
159
- "z-[2] group-focus-within/section:visible",
160
- !hasAttention && "invisible",
161
- sectionToolbarLayout
162
- ] : [
163
- "attention-surface"
164
- ],
165
- classNames
166
- ]
167
- }, children));
168
- };
169
- var alignmentOptions = [
170
- {
171
- value: "start",
172
- icon: "ph--text-align-left--regular"
173
- },
174
- {
175
- value: "center",
176
- icon: "ph--text-align-center--regular"
177
- },
178
- {
179
- value: "end",
180
- icon: "ph--text-align-right--regular"
181
- }
182
- ];
183
- var Alignment = () => {
184
- const { cursor, model } = useSheetContext();
185
- const { onAction } = useToolbarContext("Alignment");
186
- const { t } = useTranslation(SHEET_PLUGIN);
187
- const value = useMemo(() => cursor ? model.sheet.ranges?.find(({ range, key }) => key === "alignment" && inRange(range, cursor))?.value : void 0, [
188
- cursor,
189
- model.sheet.ranges
190
- ]);
191
- return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
192
- type: "single",
193
- value,
194
- onValueChange: (value2) => onAction?.({
195
- key: "align",
196
- value: value2
197
- })
198
- }, alignmentOptions.map(({ value: value2, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
199
- itemType: "toggleGroupItem",
200
- key: value2,
201
- value: value2,
202
- icon
203
- }, t(`toolbar ${value2} label`))));
204
- };
205
- var styleOptions = [
206
- {
207
- value: "highlight",
208
- icon: "ph--highlighter--regular"
209
- }
210
- ];
211
- var Styles = () => {
212
- const { cursor, model } = useSheetContext();
213
- const { onAction } = useToolbarContext("Styles");
214
- const { t } = useTranslation(SHEET_PLUGIN);
215
- const activeValues = useMemo(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && inRange(range, cursor)).reduce((acc, { value }) => {
216
- acc.add(value);
217
- return acc;
218
- }, /* @__PURE__ */ new Set()) : void 0, [
219
- cursor,
220
- model.sheet.ranges
221
- ]);
222
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
223
- itemType: "toggle",
224
- key: value,
225
- pressed: activeValues?.has(value),
226
- onPressedChange: (nextPressed) => onAction?.({
227
- key: "style",
228
- value: nextPressed ? value : "unset"
229
- }),
230
- icon
231
- }, t(`toolbar ${value} label`))));
232
- };
233
- var Actions = () => {
234
- const { onAction } = useToolbarContext("Actions");
235
- const { cursor, range, model } = useSheetContext();
236
- const { t } = useTranslation(SHEET_PLUGIN);
237
- const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
238
- if (!cursor) {
239
- return false;
240
- }
241
- return addressToIndex(model.sheet, cursor) === thread.anchor;
242
- });
243
- const hasCursor = !!cursor;
244
- const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;
245
- const tooltipLabelKey = !hasCursor ? "no cursor label" : overlapsCommentAnchor ? "selection overlaps existing comment label" : range ? "comment ranges not supported label" : "comment label";
246
- return /* @__PURE__ */ React2.createElement(ToolbarItem, {
247
- itemType: "button",
248
- value: "comment",
249
- icon: "ph--chat-text--regular",
250
- "data-testid": "editor.toolbar.comment",
251
- onClick: () => {
252
- if (!cursor) {
253
- return;
254
- }
255
- return onAction?.({
256
- key: "comment",
257
- value: addressToIndex(model.sheet, cursor),
258
- cellContent: model.getCellText(cursor)
259
- });
260
- },
261
- disabled: !cursorOnly || overlapsCommentAnchor
262
- }, t(tooltipLabelKey));
263
- };
264
- var Toolbar = {
265
- Root: ToolbarRoot,
266
- Separator: ToolbarSeparator,
267
- Alignment,
268
- Styles,
269
- Actions
270
- };
271
-
272
- // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
273
- var SheetContainer = ({ graph, sheet, role }) => {
274
- return /* @__PURE__ */ React3.createElement(SheetProvider, {
275
- sheet,
276
- graph
277
- }, /* @__PURE__ */ React3.createElement(Toolbar.Root, {
278
- role
279
- }, /* @__PURE__ */ React3.createElement(Toolbar.Styles, null), /* @__PURE__ */ React3.createElement(Toolbar.Alignment, null), /* @__PURE__ */ React3.createElement(Toolbar.Separator, null), /* @__PURE__ */ React3.createElement(Toolbar.Actions, null)), /* @__PURE__ */ React3.createElement("div", {
280
- role: "none",
281
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
282
- }, /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null)));
283
- };
284
-
285
- // packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
286
- var SheetContainer_default = SheetContainer;
287
- export {
288
- SheetContainer_default as default
289
- };
290
- //# sourceMappingURL=SheetContainer-RVRACGCZ.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 from 'react';\n\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider, type SheetProviderProps } from '../SheetContext';\nimport { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({ graph, sheet, role }: SheetProviderProps & { role?: string }) => {\n return (\n <SheetProvider sheet={sheet} graph={graph}>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\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, useCallback, useMemo } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\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 {\n addressToIndex,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetType } 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 AlignAction = { key: AlignKey; value: AlignValue };\ntype CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\ntype StyleAction = { key: StyleKey; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{ onAction: (action: ToolbarAction) => void }>(\n 'Toolbar',\n);\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\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, range, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\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.key) {\n case 'align':\n if (cursor) {\n const index = model.sheet.ranges?.findIndex(\n (range) => range.key === action.key && inRange(range.range, cursor),\n );\n const nextRange = range ? { from: range.from, to: range.to ?? range.from } : { from: cursor, to: cursor };\n const nextRangeEntity = {\n range: nextRange as Range['range'],\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.value === 'unset') {\n const index = model.sheet.ranges?.findIndex((range) => range.key === action.key);\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (range || cursor) {\n const nextRange = range ? { from: range.from, to: range.to ?? range.from } : { from: cursor, to: cursor };\n model.sheet.ranges?.push({\n range: nextRange as Range['range'],\n key: action.key,\n value: action.value,\n });\n }\n break;\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.value,\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n },\n [model.sheet, range, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\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 disabled?: (state: Range) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'start', icon: 'ph--text-align-left--regular' },\n { value: 'center', icon: 'ph--text-align-center--regular' },\n { value: 'end', icon: 'ph--text-align-right--regular' },\n];\n\nconst Alignment = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const value = useMemo(\n () =>\n cursor\n ? model.sheet.ranges?.find(({ range, key }) => key === 'alignment' && inRange(range, cursor))?.value\n : undefined,\n [cursor, model.sheet.ranges],\n );\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={value}\n onValueChange={(value: AlignValue) => onAction?.({ key: 'align', value })}\n >\n {alignmentOptions.map(({ value, 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>[] = [{ value: 'highlight', icon: 'ph--highlighter--regular' }];\n\nconst Styles = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const activeValues = useMemo(\n () =>\n cursor\n ? model.sheet.ranges\n ?.filter(({ range, key }) => key === 'style' && inRange(range, cursor))\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined,\n [cursor, model.sheet.ranges],\n );\n\n return (\n <>\n {styleOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n pressed={activeValues?.has(value)}\n onPressedChange={(nextPressed: boolean) => onAction?.({ key: 'style', value: nextPressed ? value : 'unset' })}\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 key: 'comment',\n value: 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 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": ";;;;;;;;;;;;;;;;AAIA,OAAOA,YAAW;;;ACAlB,OAAOC,WAAW;AAElB,SAASC,YAAY;AACrB,SAASC,UAAU;AAKZ,IAAMC,iBAAiB,MAAA;AAC5B,QAAM,EAAEC,OAAOC,QAAQC,MAAK,IAAKC,gBAAAA;AAEjC,MAAIC;AACJ,MAAIC,YAAY;AAChB,MAAIJ,QAAQ;AACVG,YAAQJ,MAAMM,aAAaL,MAAAA;AAC3B,QAAI,OAAOG,UAAU,YAAYA,MAAMG,OAAO,CAAA,MAAO,KAAK;AACxDH,cAAQJ,MAAMQ,MAAMC,yBAAyBT,MAAMU,wBAAwBN,KAAAA,CAAAA;AAC3EC,kBAAY;IACd,WAAWD,SAAS,MAAM;AACxBA,cAAQO,OAAOP,KAAAA;IACjB;EACF;AAEA,SACE,sBAAA,cAACQ,OAAAA;IACCC,WAAWC,GACT,4GAAA;KAGF,sBAAA,cAACF,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACXX,SAASa,kBAAkBb,KAAAA,KAAYD,UAAUe,oBAAoBf,MAAAA,CAAAA,GAEzE,sBAAA,cAACW,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACI,MAAAA;IAAKC,MAAK;IAAwBC,YAAY;MAAC;MAAkBd,YAAY,YAAY;;MAC1F,sBAAA,cAACe,QAAAA;IAAKP,WAAU;KAAaT,KAAAA,CAAAA,CAAAA,CAAAA;AAKvC;;;ACxCA,SAASiB,qBAAqB;AAC9B,OAAOC,UAAiCC,aAAaC,eAAe;AAEpE,SAASC,2BAA2B;AACpC,SACEC,QAAAA,OACAC,WAAWC,gBACXC,gBACAC,eAKK;AACP,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAoB5B,IAAMC,eAAe;AACrB,IAAMC,eAAe;EAAEC,MAAM;EAAmBC,YAAY;AAAO;AAEnE,IAAMC,mBAAmB,MAAM,gBAAAC,OAAA,cAACC,OAAAA;EAAIC,MAAK;EAAYC,WAAU;;AAWxD,IAAMC,cAAc,CAAC,EAAEC,UAAUC,MAAMC,UAAU,GAAGC,MAAAA,MAAyB;AAClF,QAAMC,UACJJ,aAAa,oBACTK,eAAeC,kBACfN,aAAa,WACXK,eAAeE,SACfF,eAAeG;AACvB,SACE,gBAAAb,OAAA,cAACc,QAAQC,MAAI,MACX,gBAAAf,OAAA,cAACc,QAAQE,SAAO;IAACC,SAAAA;KAEf,gBAAAjB,OAAA,cAACS,SAAAA;IAAQS,SAAQ;IAAS,GAAIV;IAAeV,YAAYH;KACvD,gBAAAK,OAAA,cAACmB,OAAAA;IAAKb;IAAYc,MAAM;MACxB,gBAAApB,OAAA,cAACqB,QAAAA;IAAKlB,WAAU;KAAWI,QAAAA,CAAAA,CAAAA,GAG/B,gBAAAP,OAAA,cAACc,QAAQQ,QAAM,MACb,gBAAAtB,OAAA,cAACc,QAAQS,SAAY3B,cAClBW,UACD,gBAAAP,OAAA,cAACc,QAAQU,OAAK,IAAA,CAAA,CAAA,CAAA;AAKxB;AAsBA,IAAM,CAACC,wBAAwBC,iBAAAA,IAAqBC,cAClD,SAAA;AAIF,IAAMC,uBACJ;AAIF,IAAMC,cAAc,CAAC,EAAEtB,UAAUL,MAAMJ,WAAU,MAAgB;AAC/D,QAAM,EAAEgC,IAAIC,OAAOC,OAAOC,OAAM,IAAKC,gBAAAA;AACrC,QAAM,EAAEC,aAAY,IAAKC,aAAaN,EAAAA;AACtC,QAAMO,WAAWC,oBAAAA;AAGjB,QAAMC,eAAeC,YACnB,CAACC,WAAAA;AACC,YAAQA,OAAOC,KAAG;MAChB,KAAK;AACH,YAAIT,QAAQ;AACV,gBAAMU,QAAQZ,MAAMa,MAAMC,QAAQC,UAChC,CAACd,WAAUA,OAAMU,QAAQD,OAAOC,OAAOK,QAAQf,OAAMA,OAAOC,MAAAA,CAAAA;AAE9D,gBAAMe,YAAYhB,QAAQ;YAAEiB,MAAMjB,MAAMiB;YAAMC,IAAIlB,MAAMkB,MAAMlB,MAAMiB;UAAK,IAAI;YAAEA,MAAMhB;YAAQiB,IAAIjB;UAAO;AACxG,gBAAMkB,kBAAkB;YACtBnB,OAAOgB;YACPN,KAAKD,OAAOC;YACZU,OAAOX,OAAOW;UAChB;AACA,cAAIT,QAAQ,GAAG;AACbZ,kBAAMa,MAAMC,QAAQQ,KAAKF,eAAAA;UAC3B,OAAO;AACLpB,kBAAMa,MAAMC,QAAQS,OAAOX,OAAO,GAAGQ,eAAAA;UACvC;QACF;AACA;MACF,KAAK;AACH,YAAIV,OAAOW,UAAU,SAAS;AAC5B,gBAAMT,QAAQZ,MAAMa,MAAMC,QAAQC,UAAU,CAACd,WAAUA,OAAMU,QAAQD,OAAOC,GAAG;AAC/E,cAAIC,SAAS,GAAG;AACdZ,kBAAMa,MAAMC,QAAQS,OAAOX,OAAO,CAAA;UACpC;QACF,WAAWX,SAASC,QAAQ;AAC1B,gBAAMe,YAAYhB,QAAQ;YAAEiB,MAAMjB,MAAMiB;YAAMC,IAAIlB,MAAMkB,MAAMlB,MAAMiB;UAAK,IAAI;YAAEA,MAAMhB;YAAQiB,IAAIjB;UAAO;AACxGF,gBAAMa,MAAMC,QAAQQ,KAAK;YACvBrB,OAAOgB;YACPN,KAAKD,OAAOC;YACZU,OAAOX,OAAOW;UAChB,CAAA;QACF;AACA;MACF,KAAK,WAAW;AAEd,aAAKf,SAAS;UACZI,QAAQ;UACRc,MAAM;YACJtB,QAAQQ,OAAOW;YACfI,MAAMf,OAAOgB;YACbC,SAAS3B,MAAMa;UACjB;QACF,CAAA;MACF;IACF;EACF,GACA;IAACb,MAAMa;IAAOZ;IAAOC;IAAQI;GAAS;AAGxC,SACE,gBAAArC,OAAA,cAACyB,wBAAAA;IAAuBkC,UAAUpB;KAChC,gBAAAvC,OAAA,cAACU,eAAeK,MAAI;IAClBjB,YAAY;SACNI,SAAS,YACT;QAAC;QAA4C,CAACiC,gBAAgB;QAAaP;UAC3E;QAAC;;MACL9B;;KAGDS,QAAAA,CAAAA;AAIT;AAcA,IAAMqD,mBAA8C;EAClD;IAAER,OAAO;IAAS9C,MAAM;EAA+B;EACvD;IAAE8C,OAAO;IAAU9C,MAAM;EAAiC;EAC1D;IAAE8C,OAAO;IAAO9C,MAAM;EAAgC;;AAGxD,IAAMuD,YAAY,MAAA;AAChB,QAAM,EAAE5B,QAAQF,MAAK,IAAKG,gBAAAA;AAC1B,QAAM,EAAEyB,SAAQ,IAAKjC,kBAAkB,WAAA;AACvC,QAAM,EAAEoC,EAAC,IAAKC,eAAeC,YAAAA;AAE7B,QAAMZ,QAAQa,QACZ,MACEhC,SACIF,MAAMa,MAAMC,QAAQqB,KAAK,CAAC,EAAElC,OAAOU,IAAG,MAAOA,QAAQ,eAAeK,QAAQf,OAAOC,MAAAA,CAAAA,GAAUmB,QAC7Fe,QACN;IAAClC;IAAQF,MAAMa,MAAMC;GAAO;AAG9B,SACE,gBAAA7C,OAAA,cAACU,eAAe0D,aAAW;IACzBC,MAAK;IACLjB;IACAkB,eAAe,CAAClB,WAAsBO,WAAW;MAAEjB,KAAK;MAASU,OAAAA;IAAM,CAAA;KAEtEQ,iBAAiBW,IAAI,CAAC,EAAEnB,OAAAA,QAAO9C,KAAI,MAClC,gBAAAN,OAAA,cAACI,aAAAA;IAAYC,UAAS;IAAkBqC,KAAKU;IAAOA,OAAOA;IAAO9C;KAC/DwD,EAAE,WAAWV,MAAAA,QAAa,CAAA,CAAA,CAAA;AAKrC;AAEA,IAAMoB,eAA0C;EAAC;IAAEpB,OAAO;IAAa9C,MAAM;EAA2B;;AAExG,IAAMmE,SAAS,MAAA;AACb,QAAM,EAAExC,QAAQF,MAAK,IAAKG,gBAAAA;AAC1B,QAAM,EAAEyB,SAAQ,IAAKjC,kBAAkB,QAAA;AACvC,QAAM,EAAEoC,EAAC,IAAKC,eAAeC,YAAAA;AAE7B,QAAMU,eAAeT,QACnB,MACEhC,SACIF,MAAMa,MAAMC,QACR8B,OAAO,CAAC,EAAE3C,OAAOU,IAAG,MAAOA,QAAQ,WAAWK,QAAQf,OAAOC,MAAAA,CAAAA,EAC9D2C,OAAO,CAACC,KAAK,EAAEzB,MAAK,MAAE;AACrByB,QAAIC,IAAI1B,KAAAA;AACR,WAAOyB;EACT,GAAG,oBAAIE,IAAAA,CAAAA,IACTZ,QACN;IAAClC;IAAQF,MAAMa,MAAMC;GAAO;AAG9B,SACE,gBAAA7C,OAAA,cAAAA,OAAA,UAAA,MACGwE,aAAaD,IAAI,CAAC,EAAEnB,OAAO9C,KAAI,MAC9B,gBAAAN,OAAA,cAACI,aAAAA;IACCC,UAAS;IACTqC,KAAKU;IACL4B,SAASN,cAAcO,IAAI7B,KAAAA;IAC3B8B,iBAAiB,CAACC,gBAAyBxB,WAAW;MAAEjB,KAAK;MAASU,OAAO+B,cAAc/B,QAAQ;IAAQ,CAAA;IAC3G9C;KAECwD,EAAE,WAAWV,KAAAA,QAAa,CAAA,CAAA,CAAA;AAKrC;AAMA,IAAMgC,UAAU,MAAA;AACd,QAAM,EAAEzB,SAAQ,IAAKjC,kBAAkB,SAAA;AACvC,QAAM,EAAEO,QAAQD,OAAOD,MAAK,IAAKG,gBAAAA;AACjC,QAAM,EAAE4B,EAAC,IAAKC,eAAeC,YAAAA;AAE7B,QAAMqB,yBAAyBtD,MAAMa,MAAM0C,WAAW,CAAA,GACnDX,OAAOY,WAAAA,EACPZ,OAAO,CAACa,WAAWA,OAAOC,WAAW,UAAA,EACrCC,KAAK,CAACF,WAAAA;AACL,QAAI,CAACvD,QAAQ;AACX,aAAO;IACT;AACA,WAAO0D,eAAe5D,MAAMa,OAAOX,MAAAA,MAAYuD,OAAOI;EACxD,CAAA;AAEF,QAAMC,YAAY,CAAC,CAAC5D;AACpB,QAAM6D,aAAaD,aAAa,CAAC7D,SAAS,CAACqD;AAE3C,QAAMU,kBAAkB,CAACF,YACrB,oBACAR,wBACE,8CACArD,QACE,uCACA;AAER,SACE,gBAAAhC,OAAA,cAACI,aAAAA;IACCC,UAAS;IACT+C,OAAM;IACN9C,MAAK;IACL0F,eAAY;IACZC,SAAS,MAAA;AACP,UAAI,CAAChE,QAAQ;AACX;MACF;AACA,aAAO0B,WAAW;QAChBjB,KAAK;QACLU,OAAOuC,eAAe5D,MAAMa,OAAOX,MAAAA;QACnCwB,aAAa1B,MAAMmE,YAAYjE,MAAAA;MACjC,CAAA;IACF;IACAkE,UAAU,CAACL,cAAcT;KAExBvB,EAAEiC,eAAAA,CAAAA;AAGT;AAEO,IAAMK,UAAU;EACrBrF,MAAMc;EACNwE,WAAWtG;EACX8D;EACAY;EACAW;AACF;;;AF1TO,IAAMkB,iBAAiB,CAAC,EAAEC,OAAOC,OAAOC,KAAI,MAA0C;AAC3F,SACE,gBAAAC,OAAA,cAACC,eAAAA;IAAcH;IAAcD;KAC3B,gBAAAG,OAAA,cAACE,QAAQC,MAAI;IAACJ;KACZ,gBAAAC,OAAA,cAACE,QAAQE,QAAM,IAAA,GACf,gBAAAJ,OAAA,cAACE,QAAQG,WAAS,IAAA,GAClB,gBAAAL,OAAA,cAACE,QAAQI,WAAS,IAAA,GAClB,gBAAAN,OAAA,cAACE,QAAQK,SAAO,IAAA,CAAA,GAElB,gBAAAP,OAAA,cAACQ,OAAAA;IAAIT,MAAK;IAAOU,WAAU;KACzB,gBAAAT,OAAA,cAACU,WAAAA,IAAAA,GACD,gBAAAV,OAAA,cAACW,gBAAAA,IAAAA,CAAAA,CAAAA;AAIT;;;AGpBA,IAAA,yBAAeC;",
6
- "names": ["React", "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", "useCallback", "useMemo", "useIntentDispatcher", "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", "id", "model", "range", "cursor", "useSheetContext", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "inRange", "nextRange", "from", "to", "nextRangeEntity", "value", "push", "splice", "data", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "useMemo", "find", "undefined", "ToggleGroup", "type", "onValueChange", "map", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "addressToIndex", "anchor", "hasCursor", "cursorOnly", "tooltipLabelKey", "data-testid", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "graph", "sheet", "role", "React", "SheetProvider", "Toolbar", "Root", "Styles", "Alignment", "Separator", "Actions", "div", "className", "GridSheet", "FunctionEditor", "SheetContainer"]
7
- }
@@ -1,74 +0,0 @@
1
- import {
2
- SHEET_PLUGIN
3
- } from "./chunk-D3QTX46O.mjs";
4
-
5
- // packages/plugins/plugin-sheet/src/types.ts
6
- import { ref, S, TypedObject } from "@dxos/echo-schema";
7
- import { ThreadType } from "@dxos/plugin-space/types";
8
- var SHEET_ACTION = `${SHEET_PLUGIN}/action`;
9
- var SheetAction;
10
- (function(SheetAction2) {
11
- SheetAction2[SheetAction2["CREATE"] = `${SHEET_ACTION}/create`] = "CREATE";
12
- })(SheetAction || (SheetAction = {}));
13
- var CellValue = S.Struct({
14
- // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.
15
- // Consider import/export; natural access for other plugins. Special handling for currency (precision).
16
- // TODO(burdon): Automerge (long string) or short string or number.
17
- value: S.Any
18
- });
19
- var Range = S.Struct({
20
- range: S.Struct({
21
- from: S.Struct({
22
- col: S.Number,
23
- row: S.Number
24
- }),
25
- to: S.Struct({
26
- col: S.Number,
27
- row: S.Number
28
- })
29
- }),
30
- key: S.String,
31
- value: S.String
32
- });
33
- var RowColumnMeta = S.Struct({
34
- size: S.optional(S.Number)
35
- });
36
- var SheetType = class extends TypedObject({
37
- typename: "dxos.org/type/SheetType",
38
- version: "0.1.0"
39
- })({
40
- name: S.optional(S.String),
41
- // Sparse map of cells referenced by index.
42
- cells: S.mutable(S.Record({
43
- key: S.String,
44
- value: S.mutable(CellValue)
45
- })),
46
- // Ordered row indices.
47
- rows: S.mutable(S.Array(S.String)),
48
- // Ordered column indices.
49
- columns: S.mutable(S.Array(S.String)),
50
- // Row metadata referenced by index.
51
- rowMeta: S.mutable(S.Record({
52
- key: S.String,
53
- value: S.mutable(RowColumnMeta)
54
- })),
55
- // Column metadata referenced by index.
56
- columnMeta: S.mutable(S.Record({
57
- key: S.String,
58
- value: S.mutable(RowColumnMeta)
59
- })),
60
- // Cell formatting referenced by indexed range.
61
- ranges: S.mutable(S.Array(Range)),
62
- // Threads associated with the sheet
63
- threads: S.optional(S.mutable(S.Array(ref(ThreadType))))
64
- }) {
65
- };
66
-
67
- export {
68
- SheetAction,
69
- CellValue,
70
- Range,
71
- RowColumnMeta,
72
- SheetType
73
- };
74
- //# sourceMappingURL=chunk-BWN5DZWZ.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type MarkdownExtensionProvides } from '@dxos/plugin-markdown';\nimport { type SpaceInitProvides } from '@dxos/plugin-space';\nimport { ThreadType } from '@dxos/plugin-space/types';\nimport { type StackProvides } from '@dxos/plugin-stack';\n\nimport { SHEET_PLUGIN } from './meta';\n\nconst SHEET_ACTION = `${SHEET_PLUGIN}/action`;\n\nexport enum SheetAction {\n CREATE = `${SHEET_ACTION}/create`,\n}\n\n// TODO(Zan): Move this to the plugin-space plugin or another common location\n// when we implement comments in sheets.\n// This is currently duplicated in a few places.\ntype ThreadProvides<T> = {\n thread: {\n predicate: (obj: any) => obj is T;\n createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;\n };\n};\n\nexport type SheetPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MarkdownExtensionProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n SpaceInitProvides &\n StackProvides &\n ThreadProvides<SheetType>;\n\nexport type CellScalarValue = number | string | boolean | null;\n\nexport const CellValue = S.Struct({\n // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.\n // Consider import/export; natural access for other plugins. Special handling for currency (precision).\n // TODO(burdon): Automerge (long string) or short string or number.\n value: S.Any,\n});\n\nexport type CellValue = S.Schema.Type<typeof CellValue>;\n\n// TODO(burdon): IMPORTANT: Reconcile with Field definition.\nexport const Range = S.Struct({\n range: S.Struct({ from: S.Struct({ col: S.Number, row: S.Number }), to: S.Struct({ col: S.Number, row: S.Number }) }),\n key: S.String,\n value: S.String,\n});\n\n// TODO(burdon): Visibility, locked, frozen, etc.\nexport const RowColumnMeta = S.Struct({\n size: S.optional(S.Number),\n});\n\n// TODO(burdon): Index to all updates when rows/columns are inserted/deleted.\nexport class SheetType extends TypedObject({ typename: 'dxos.org/type/SheetType', version: '0.1.0' })({\n name: S.optional(S.String),\n\n // Sparse map of cells referenced by index.\n cells: S.mutable(S.Record({ key: S.String, value: S.mutable(CellValue) })),\n\n // Ordered row indices.\n rows: S.mutable(S.Array(S.String)),\n\n // Ordered column indices.\n columns: S.mutable(S.Array(S.String)),\n\n // Row metadata referenced by index.\n rowMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),\n\n // Column metadata referenced by index.\n columnMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),\n\n // Cell formatting referenced by indexed range.\n ranges: S.mutable(S.Array(Range)),\n\n // Threads associated with the sheet\n threads: S.optional(S.mutable(S.Array(ref(ThreadType)))),\n}) {}\n\nexport type SheetSize = {\n rows: number;\n columns: number;\n};\n\nexport type CreateSheetOptions = {\n name?: string;\n cells?: Record<string, CellValue>;\n} & Partial<SheetSize>;\n"],
5
- "mappings": ";;;;;AAWA,SAASA,KAAKC,GAAGC,mBAAmB;AAIpC,SAASC,kBAAkB;AAK3B,IAAMC,eAAe,GAAGC,YAAAA;;UAEZC,cAAAA;wCACD,GAAGF,YAAAA,SAAqB,IAAA;GADvBE,gBAAAA,cAAAA,CAAAA,EAAAA;AA2BL,IAAMC,YAAYC,EAAEC,OAAO;;;;EAIhCC,OAAOF,EAAEG;AACX,CAAA;AAKO,IAAMC,QAAQJ,EAAEC,OAAO;EAC5BI,OAAOL,EAAEC,OAAO;IAAEK,MAAMN,EAAEC,OAAO;MAAEM,KAAKP,EAAEQ;MAAQC,KAAKT,EAAEQ;IAAO,CAAA;IAAIE,IAAIV,EAAEC,OAAO;MAAEM,KAAKP,EAAEQ;MAAQC,KAAKT,EAAEQ;IAAO,CAAA;EAAG,CAAA;EACnHG,KAAKX,EAAEY;EACPV,OAAOF,EAAEY;AACX,CAAA;AAGO,IAAMC,gBAAgBb,EAAEC,OAAO;EACpCa,MAAMd,EAAEe,SAASf,EAAEQ,MAAM;AAC3B,CAAA;AAGO,IAAMQ,YAAN,cAAwBC,YAAY;EAAEC,UAAU;EAA2BC,SAAS;AAAQ,CAAA,EAAG;EACpGC,MAAMpB,EAAEe,SAASf,EAAEY,MAAM;;EAGzBS,OAAOrB,EAAEsB,QAAQtB,EAAEuB,OAAO;IAAEZ,KAAKX,EAAEY;IAAQV,OAAOF,EAAEsB,QAAQvB,SAAAA;EAAW,CAAA,CAAA;;EAGvEyB,MAAMxB,EAAEsB,QAAQtB,EAAEyB,MAAMzB,EAAEY,MAAM,CAAA;;EAGhCc,SAAS1B,EAAEsB,QAAQtB,EAAEyB,MAAMzB,EAAEY,MAAM,CAAA;;EAGnCe,SAAS3B,EAAEsB,QAAQtB,EAAEuB,OAAO;IAAEZ,KAAKX,EAAEY;IAAQV,OAAOF,EAAEsB,QAAQT,aAAAA;EAAe,CAAA,CAAA;;EAG7Ee,YAAY5B,EAAEsB,QAAQtB,EAAEuB,OAAO;IAAEZ,KAAKX,EAAEY;IAAQV,OAAOF,EAAEsB,QAAQT,aAAAA;EAAe,CAAA,CAAA;;EAGhFgB,QAAQ7B,EAAEsB,QAAQtB,EAAEyB,MAAMrB,KAAAA,CAAAA;;EAG1B0B,SAAS9B,EAAEe,SAASf,EAAEsB,QAAQtB,EAAEyB,MAAMM,IAAIC,UAAAA,CAAAA,CAAAA,CAAAA;AAC5C,CAAA,EAAA;AAAI;",
6
- "names": ["ref", "S", "TypedObject", "ThreadType", "SHEET_ACTION", "SHEET_PLUGIN", "SheetAction", "CellValue", "S", "Struct", "value", "Any", "Range", "range", "from", "col", "Number", "row", "to", "key", "String", "RowColumnMeta", "size", "optional", "SheetType", "TypedObject", "typename", "version", "name", "cells", "mutable", "Record", "rows", "Array", "columns", "rowMeta", "columnMeta", "ranges", "threads", "ref", "ThreadType"]
7
- }
@@ -1,14 +0,0 @@
1
- // packages/plugins/plugin-sheet/src/meta.ts
2
- var SHEET_PLUGIN = "dxos.org/plugin/sheet";
3
- var meta_default = {
4
- id: SHEET_PLUGIN,
5
- name: "Sheet",
6
- description: "A simple spreadsheet plugin.",
7
- icon: "ph--grid-nine--regular"
8
- };
9
-
10
- export {
11
- SHEET_PLUGIN,
12
- meta_default
13
- };
14
- //# sourceMappingURL=chunk-D3QTX46O.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport default {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;AACR;",
6
- "names": ["SHEET_PLUGIN", "id", "name", "description", "icon"]
7
- }