@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SheetContainer.tsx", "../../../src/components/Sheet/Sheet.tsx", "../../../src/components/Sheet/grid.ts", "../../../src/components/Sheet/nav.ts", "../../../src/components/Sheet/sheet-context.tsx", "../../../src/components/Sheet/formatting.ts", "../../../src/components/Sheet/util.ts", "../../../src/components/CellEditor/CellEditor.tsx", "../../../src/components/CellEditor/extension.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type LayoutCoordinate } from '@dxos/app-framework';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Sheet, type SheetRootProps } from './Sheet';\n\nconst SheetContainer = ({\n sheet,\n space,\n role,\n remoteFunctionUrl,\n}: SheetRootProps & { role?: string; coordinate?: LayoutCoordinate }) => {\n return (\n <div\n role='none'\n className={mx(\n 'flex',\n role === 'article' && 'row-span-2',\n role === 'section' && 'aspect-square border-y border-is border-separator',\n )}\n >\n <Sheet.Root sheet={sheet} space={space} remoteFunctionUrl={remoteFunctionUrl}>\n <Sheet.Main />\n </Sheet.Root>\n </div>\n );\n};\n\nexport default SheetContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type Active,\n DndContext,\n type DragEndEvent,\n DragOverlay,\n type DragStartEvent,\n KeyboardSensor,\n type Modifier,\n MouseSensor,\n type PointerActivationConstraint,\n TouchSensor,\n useDraggable,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis, restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { getEventCoordinates, useCombinedRefs } from '@dnd-kit/utilities';\nimport { Function as FunctionIcon } from '@phosphor-icons/react';\nimport { Resizable, type ResizeCallback, type ResizeStartCallback } from 're-resizable';\nimport React, {\n type CSSProperties,\n type DOMAttributes,\n type PropsWithChildren,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { debounce } from '@dxos/async';\nimport { fullyQualifiedId, createDocAccessor } from '@dxos/client/echo';\nimport { log } from '@dxos/log';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createAttendableAttributes, useHasAttention } from '@dxos/react-ui-attention';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport {\n type GridLayoutProps,\n type SizeMap,\n CELL_DATA_KEY,\n axisHeight,\n axisWidth,\n defaultHeight,\n defaultWidth,\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n getCellElement,\n useGridLayout,\n} from './grid';\nimport { type GridSize, handleArrowNav, handleNav, useRangeSelect } from './nav';\nimport { type SheetContextProps, SheetContextProvider, useSheetContext } from './sheet-context';\nimport { getRectUnion, getRelativeClientRect, scrollIntoView } from './util';\nimport {\n type CellIndex,\n type CellAddress,\n addressToA1Notation,\n columnLetter,\n posEquals,\n rangeToA1Notation,\n} from '../../model';\nimport {\n CellEditor,\n type CellRangeNotifier,\n type EditorKeysProps,\n editorKeys,\n rangeExtension,\n sheetExtension,\n} from '../CellEditor';\n\n// TODO(burdon): Virtualization bug.\n// TODO(burdon): Toolbar styles and formatting.\n// TODO(burdon): Insert/delete rows/columns (menu).\n// TODO(burdon): Scroll to position if off screen.\n// TODO(burdon): Don't render until sizes were updated (otherwise, flickers).\n\n// TODO(burdon): Model multiple sheets (e.g., documents). And cross sheet references.\n// TODO(burdon): Factor out react-ui-sheet.\n// TODO(burdon): Comments (josiah).\n// TODO(burdon): Realtime long text.\n// TODO(burdon): Search.\n\n// TODO(burdon): Virtualization:\n// https://github.com/TanStack/virtual/blob/main/examples/react/dynamic/src/main.tsx#L171\n// https://tanstack.com/virtual/v3/docs/framework/react/examples/variable\n// https://canvas-grid-demo.vercel.app\n// https://sheet.brianhung.me\n// https://github.com/BrianHung\n// https://daybrush.com/moveable\n\n/**\n * Features:\n * - Move rows/columns.\n * - Insert/delete rows/columns.\n * - Copy/paste.\n * - Undo/redo.\n * - Comments.\n * - Real time collaborative editing of large text cells.\n * - Select range.\n * - Format cells.\n * - Formulae.\n * - Update formula ranges by selection.\n */\n\nconst fragments = {\n axis: 'bg-axisSurface text-axisText text-xs select-none',\n axisSelected: 'bg-attention text-baseText',\n cell: 'bg-gridCell',\n cellSelected: 'bg-gridCellSelected text-baseText border !border-accentSurface',\n};\n\n//\n// Root\n//\n\ntype SheetRootProps = SheetContextProps;\n\nconst SheetRoot = ({ children, ...props }: PropsWithChildren<SheetContextProps>) => {\n return <SheetContextProvider {...props}>{children}</SheetContextProvider>;\n};\n\n//\n// Main\n//\n\ntype SheetMainProps = ThemedClassName<Partial<GridSize>>;\n\nconst SheetMain = forwardRef<HTMLDivElement, SheetMainProps>(({ classNames, numRows, numColumns }, forwardRef) => {\n const { model, cursor, setCursor, setRange, setEditing } = useSheetContext();\n\n // Scrolling.\n const { rowsRef, columnsRef, contentRef } = useScrollHandlers();\n\n //\n // Order of Row/columns.\n //\n const [rows, setRows] = useState([...model.sheet.rows]);\n const [columns, setColumns] = useState([...model.sheet.columns]);\n useEffect(() => {\n const rowsAccessor = createDocAccessor(model.sheet, ['rows']);\n const columnsAccessor = createDocAccessor(model.sheet, ['columns']);\n const handleUpdate = debounce(() => {\n setRows([...model.sheet.rows]);\n setColumns([...model.sheet.columns]);\n }, 100);\n\n rowsAccessor.handle.addListener('change', handleUpdate);\n columnsAccessor.handle.addListener('change', handleUpdate);\n handleUpdate();\n return () => {\n rowsAccessor.handle.removeListener('change', handleUpdate);\n columnsAccessor.handle.removeListener('change', handleUpdate);\n };\n }, [model]);\n\n // Refresh the model.\n // TODO(burdon): Breaks undo.\n useEffect(() => {\n model.reset();\n }, [rows, columns]);\n\n const handleMoveRows: SheetRowsProps['onMove'] = (from, to, num = 1) => {\n const cursorIdx = cursor ? model.addressToIndex(cursor) : undefined;\n const [rows] = model.sheet.rows.splice(from, num);\n model.sheet.rows.splice(to, 0, rows);\n if (cursorIdx) {\n setCursor(model.addressFromIndex(cursorIdx));\n }\n setRows([...model.sheet.rows]);\n };\n\n const handleMoveColumns: SheetColumnsProps['onMove'] = (from, to, num = 1) => {\n const cursorIdx = cursor ? model.addressToIndex(cursor) : undefined;\n const columns = model.sheet.columns.splice(from, num);\n model.sheet.columns.splice(to, 0, ...columns);\n if (cursorIdx) {\n setCursor(model.addressFromIndex(cursorIdx));\n }\n setColumns([...model.sheet.columns]);\n };\n\n //\n // Row/column sizes.\n //\n const [rowSizes, setRowSizes] = useState<SizeMap>();\n const [columnSizes, setColumnSizes] = useState<SizeMap>();\n useEffect(() => {\n const rowAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const columnAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const handleUpdate = debounce(() => {\n const mapSizes = (values: [string, { size?: number | undefined }][]) =>\n values.reduce<SizeMap>((map, [idx, meta]) => {\n if (meta.size) {\n map[idx] = meta.size;\n }\n return map;\n }, {});\n\n setRowSizes(mapSizes(Object.entries(model.sheet.rowMeta)));\n setColumnSizes(mapSizes(Object.entries(model.sheet.columnMeta)));\n }, 100);\n\n rowAccessor.handle.addListener('change', handleUpdate);\n columnAccessor.handle.addListener('change', handleUpdate);\n handleUpdate();\n return () => {\n rowAccessor.handle.removeListener('change', handleUpdate);\n columnAccessor.handle.removeListener('change', handleUpdate);\n };\n }, [model]);\n\n const handleResizeRow: SheetRowsProps['onResize'] = (idx, size, save) => {\n if (save) {\n model.sheet.rowMeta[idx] ??= {};\n model.sheet.rowMeta[idx].size = size;\n } else {\n setRowSizes((sizes) => ({ ...sizes, [idx]: size }));\n }\n };\n\n const handleResizeColumn: SheetColumnsProps['onResize'] = (idx, size, save) => {\n if (save) {\n model.sheet.columnMeta[idx] ??= {};\n model.sheet.columnMeta[idx].size = size;\n } else {\n setColumnSizes((sizes) => ({ ...sizes, [idx]: size }));\n }\n };\n\n return (\n <div\n role='none'\n className={mx(\n 'grid grid-cols-[calc(var(--rail-size)-2px)_1fr] grid-rows-[32px_1fr_32px] bs-full is-full overflow-hidden',\n classNames,\n )}\n >\n <GridCorner\n onClick={() => {\n setCursor(undefined);\n setRange(undefined);\n setEditing(false);\n }}\n />\n <SheetColumns\n ref={columnsRef}\n columns={columns}\n sizes={columnSizes}\n selected={cursor?.column}\n onSelect={(column) => setCursor(cursor?.column === column ? undefined : { row: -1, column })}\n onResize={handleResizeColumn}\n onMove={handleMoveColumns}\n />\n\n <SheetRows\n ref={rowsRef}\n rows={rows}\n sizes={rowSizes}\n selected={cursor?.row}\n onSelect={(row) => setCursor(cursor?.row === row ? undefined : { row, column: -1 })}\n onResize={handleResizeRow}\n onMove={handleMoveRows}\n />\n <SheetGrid\n ref={contentRef}\n size={{ numRows: numRows ?? rows.length, numColumns: numColumns ?? columns.length }}\n rows={rows}\n columns={columns}\n rowSizes={rowSizes}\n columnSizes={columnSizes}\n />\n\n <GridCorner />\n <SheetStatusBar />\n </div>\n );\n});\n\n/**\n * Coordinate scrolling across components.\n */\nconst useScrollHandlers = () => {\n const rowsRef = useRef<HTMLDivElement>(null);\n const columnsRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleRowsScroll = (ev: Event) => {\n const { scrollTop } = ev.target as HTMLDivElement;\n if (!rowsRef.current!.dataset.locked) {\n contentRef.current!.scrollTop = scrollTop;\n }\n };\n\n const handleColumnsScroll = (ev: Event) => {\n const { scrollLeft } = ev.target as HTMLDivElement;\n if (!columnsRef.current!.dataset.locked) {\n contentRef.current!.scrollLeft = scrollLeft;\n }\n };\n\n const handleContentScroll = (ev: Event) => {\n const { scrollTop, scrollLeft } = ev.target as HTMLDivElement;\n rowsRef.current!.scrollTop = scrollTop;\n columnsRef.current!.scrollLeft = scrollLeft;\n };\n\n const rows = rowsRef.current!;\n const columns = columnsRef.current!;\n const content = contentRef.current!;\n\n rows.addEventListener('scroll', handleRowsScroll);\n columns.addEventListener('scroll', handleColumnsScroll);\n content.addEventListener('scroll', handleContentScroll);\n return () => {\n rows.removeEventListener('scroll', handleRowsScroll);\n columns.removeEventListener('scroll', handleColumnsScroll);\n content.removeEventListener('scroll', handleContentScroll);\n };\n }, []);\n\n return { rowsRef, columnsRef, contentRef };\n};\n\n//\n// Row/Column\n//\n\nconst GridCorner = (props: { className?: string } & Pick<DOMAttributes<HTMLDivElement>, 'onClick'>) => {\n return <div className={fragments.axis} {...props} />;\n};\n\nconst MovingOverlay = ({ label }: { label: string }) => {\n return (\n <div className='flex w-full h-full justify-center items-center text-sm p-1 bg-gridOverlay cursor-pointer'>\n {label}\n </div>\n );\n};\n\n// https://docs.dndkit.com/api-documentation/sensors/pointer#activation-constraints\nconst mouseConstraints: PointerActivationConstraint = { distance: 10 };\nconst touchConstraints: PointerActivationConstraint = { delay: 250, tolerance: 5 };\n\ntype ResizeProps = {\n sizes?: SizeMap;\n onResize?: (idx: CellIndex, size: number, save?: boolean) => void;\n};\n\ntype MoveProps = {\n onMove?: (from: number, to: number) => void;\n};\n\ntype RowColumnSelection = {\n selected?: number;\n onSelect?: (selected: number) => void;\n};\n\ntype RowColumnProps = {\n idx: CellIndex;\n index: number;\n label: string;\n size: number;\n resize: boolean;\n selected: boolean;\n} & Pick<ResizeProps, 'onResize'> &\n Pick<RowColumnSelection, 'onSelect'>;\n\n//\n// Rows\n//\n\ntype SheetRowsProps = { rows: CellIndex[] } & RowColumnSelection & ResizeProps & MoveProps;\n\nconst SheetRows = forwardRef<HTMLDivElement, SheetRowsProps>(\n ({ rows, sizes, selected, onSelect, onResize, onMove }, forwardRef) => {\n const mouseSensor = useSensor(MouseSensor, { activationConstraint: mouseConstraints });\n const touchSensor = useSensor(TouchSensor, { activationConstraint: touchConstraints });\n const keyboardSensor = useSensor(KeyboardSensor, {});\n const sensors = useSensors(mouseSensor, touchSensor, keyboardSensor);\n\n const [active, setActive] = useState<Active | null>(null);\n const handleDragStart = ({ active }: DragStartEvent) => {\n setActive(active);\n };\n\n const handleDragEnd = ({ over, active }: DragEndEvent) => {\n if (over && over.id !== active.id) {\n setActive(null);\n onMove?.(active.data.current!.index, over.data.current!.index);\n }\n };\n\n const snapToCenter: Modifier = ({ activatorEvent, draggingNodeRect, transform }) => {\n if (draggingNodeRect && activatorEvent) {\n const activatorCoordinates = getEventCoordinates(activatorEvent);\n if (!activatorCoordinates) {\n return transform;\n }\n\n const offset = activatorCoordinates.y - draggingNodeRect.top;\n return {\n ...transform,\n y: transform.y + offset - draggingNodeRect.height / 2,\n };\n }\n\n return transform;\n };\n\n return (\n <div className='relative flex grow overflow-hidden'>\n {/* Fixed border. */}\n <div\n className={mx('z-20 absolute inset-0 border-y border-gridLine pointer-events-none')}\n style={{ width: axisWidth }}\n />\n\n {/* Scrollbar. */}\n <div ref={forwardRef} role='rowheader' className='grow overflow-y-auto scrollbar-none'>\n <DndContext\n sensors={sensors}\n modifiers={[restrictToVerticalAxis, snapToCenter]}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className='flex flex-col' style={{ width: axisWidth }}>\n {rows.map((idx, index) => (\n <GridRowCell\n key={idx}\n idx={idx}\n index={index}\n label={String(index + 1)}\n size={sizes?.[idx] ?? defaultHeight}\n resize={index < rows.length - 1}\n selected={selected === index}\n onResize={onResize}\n onSelect={onSelect}\n />\n ))}\n </div>\n\n {createPortal(\n <DragOverlay>{active && <MovingOverlay label={String(active.data.current!.index + 1)} />}</DragOverlay>,\n document.body,\n )}\n </DndContext>\n </div>\n </div>\n );\n },\n);\n\nconst GridRowCell = ({ idx, index, label, size, resize, selected, onSelect, onResize }: RowColumnProps) => {\n const { setNodeRef: setDroppableNodeRef } = useDroppable({ id: idx, data: { index } });\n const {\n setNodeRef: setDraggableNodeRef,\n attributes,\n listeners,\n isDragging,\n over,\n } = useDraggable({ id: idx, data: { index } });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const [initialSize, setInitialSize] = useState(size);\n const [resizing, setResizing] = useState(false);\n\n // Lock scroll container while resizing (fixes scroll bug).\n // https://github.com/bokuweb/re-resizable/issues/727\n const scrollHandler = useRef<any>();\n const handleResizeStart: ResizeStartCallback = (_ev, _dir, elementRef) => {\n const scrollContainer = elementRef.closest<HTMLDivElement>('[role=\"rowheader\"]')!;\n const scrollTop = scrollContainer.scrollTop;\n scrollHandler.current = (ev: Event) => ((ev.target as HTMLElement).scrollTop = scrollTop);\n scrollContainer.addEventListener('scroll', scrollHandler.current);\n scrollContainer.dataset.locked = 'true';\n setResizing(true);\n };\n\n const handleResize: ResizeCallback = (_ev, _dir, _elementRef, { height }) => {\n onResize?.(idx, initialSize + height);\n };\n\n const handleResizeStop: ResizeCallback = (_ev, _dir, elementRef, { height }) => {\n const scrollContainer = elementRef.closest<HTMLDivElement>('[role=\"rowheader\"]')!;\n scrollContainer.removeEventListener('scroll', scrollHandler.current!);\n delete scrollContainer.dataset.locked;\n scrollHandler.current = undefined;\n setInitialSize(initialSize + height);\n onResize?.(idx, initialSize + height, true);\n setResizing(false);\n };\n\n // Row.\n return (\n <Resizable\n enable={{ bottom: resize }}\n size={{ height: size - 1 }}\n minHeight={minHeight - 1}\n maxHeight={maxHeight}\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeStop={handleResizeStop}\n >\n <div\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n className={mx(\n 'flex h-full items-center justify-center cursor-pointer',\n 'border-t border-gridLine focus-visible:outline-none',\n fragments.axis,\n selected && fragments.axisSelected,\n isDragging && fragments.axisSelected,\n )}\n onClick={() => onSelect?.(index)}\n >\n <span className='flex w-full justify-center'>{label}</span>\n\n {/* Drop indicator. */}\n {over?.id === idx && !isDragging && (\n <div className='z-20 absolute top-0 w-full min-h-[4px] border-b-4 border-accentSurface' />\n )}\n\n {/* Resize indicator. */}\n {resizing && <div className='z-20 absolute bottom-0 w-full min-h-[4px] border-b-4 border-accentSurface' />}\n </div>\n </Resizable>\n );\n};\n\n//\n// Columns\n//\n\ntype SheetColumnsProps = { columns: CellIndex[] } & RowColumnSelection & ResizeProps & MoveProps;\n\nconst SheetColumns = forwardRef<HTMLDivElement, SheetColumnsProps>(\n ({ columns, sizes, selected, onSelect, onResize, onMove }, forwardRef) => {\n const mouseSensor = useSensor(MouseSensor, { activationConstraint: mouseConstraints });\n const touchSensor = useSensor(TouchSensor, { activationConstraint: touchConstraints });\n const keyboardSensor = useSensor(KeyboardSensor, {});\n const sensors = useSensors(mouseSensor, touchSensor, keyboardSensor);\n\n const [active, setActive] = useState<Active | null>(null);\n const handleDragStart = ({ active }: DragStartEvent) => {\n setActive(active);\n };\n\n const handleDragEnd = ({ active, over }: DragEndEvent) => {\n if (over && over.id !== active.id) {\n setActive(null);\n onMove?.(active.data.current!.index, over.data.current!.index);\n }\n };\n\n const snapToCenter: Modifier = ({ activatorEvent, draggingNodeRect, transform }) => {\n if (draggingNodeRect && activatorEvent) {\n const activatorCoordinates = getEventCoordinates(activatorEvent);\n if (!activatorCoordinates) {\n return transform;\n }\n\n const offset = activatorCoordinates.x - draggingNodeRect.left;\n return {\n ...transform,\n x: transform.x + offset - draggingNodeRect.width / 2,\n };\n }\n\n return transform;\n };\n\n return (\n <div className='relative flex grow overflow-hidden'>\n {/* Fixed border. */}\n <div\n className={mx('z-20 absolute inset-0 border-x border-gridLine pointer-events-none')}\n style={{ height: axisHeight }}\n />\n\n {/* Scrollbar. */}\n <div ref={forwardRef} role='columnheader' className='grow overflow-x-auto scrollbar-none'>\n <DndContext\n autoScroll={{ enabled: true }}\n sensors={sensors}\n modifiers={[restrictToHorizontalAxis, snapToCenter]}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <div className='flex h-full' style={{ height: axisHeight }}>\n {columns.map((idx, index) => (\n <GridColumnCell\n key={idx}\n idx={idx}\n index={index}\n label={columnLetter(index)}\n size={sizes?.[idx] ?? defaultWidth}\n resize={index < columns.length - 1}\n selected={selected === index}\n onResize={onResize}\n onSelect={onSelect}\n />\n ))}\n </div>\n\n {createPortal(\n <DragOverlay>{active && <MovingOverlay label={columnLetter(active.data.current!.index)} />}</DragOverlay>,\n document.body,\n )}\n </DndContext>\n </div>\n </div>\n );\n },\n);\n\nconst GridColumnCell = ({ idx, index, label, size, resize, selected, onSelect, onResize }: RowColumnProps) => {\n const { setNodeRef: setDroppableNodeRef } = useDroppable({ id: idx, data: { index } });\n const {\n setNodeRef: setDraggableNodeRef,\n attributes,\n listeners,\n over,\n isDragging,\n } = useDraggable({ id: idx, data: { index } });\n const setNodeRef = useCombinedRefs(setDroppableNodeRef, setDraggableNodeRef);\n const [initialSize, setInitialSize] = useState(size);\n const [resizing, setResizing] = useState(false);\n\n // Lock scroll container while resizing (fixes scroll bug).\n // https://github.com/bokuweb/re-resizable/issues/727\n const scrollHandler = useRef<any>();\n const handleResizeStart: ResizeStartCallback = (_ev, _dir, elementRef) => {\n const scrollContainer = elementRef.closest<HTMLDivElement>('[role=\"columnheader\"]')!;\n const scrollLeft = scrollContainer.scrollLeft;\n scrollHandler.current = (ev: Event) => ((ev.target as HTMLElement).scrollLeft = scrollLeft);\n scrollContainer.addEventListener('scroll', scrollHandler.current);\n scrollContainer.dataset.locked = 'true';\n setResizing(true);\n };\n\n const handleResize: ResizeCallback = (_ev, _dir, _elementRef, { width }) => {\n onResize?.(idx, initialSize + width);\n };\n\n const handleResizeStop: ResizeCallback = (_ev, _dir, elementRef, { width }) => {\n const scrollContainer = elementRef.closest<HTMLDivElement>('[role=\"columnheader\"]')!;\n scrollContainer.removeEventListener('scroll', scrollHandler.current!);\n delete scrollContainer.dataset.locked;\n scrollHandler.current = undefined;\n setInitialSize(initialSize + width);\n onResize?.(idx, initialSize + width, true);\n setResizing(false);\n };\n\n // Column.\n return (\n <Resizable\n enable={{ right: resize }}\n size={{ width: size - 1 }}\n minWidth={minWidth - 1}\n maxWidth={maxWidth}\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeStop={handleResizeStop}\n >\n <div\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n className={mx(\n 'flex h-full items-center justify-center cursor-pointer',\n 'border-l border-gridLine focus-visible:outline-none',\n fragments.axis,\n selected && fragments.axisSelected,\n isDragging && fragments.axisSelected,\n )}\n onClick={() => onSelect?.(index)}\n >\n <span className='flex w-full justify-center'>{label}</span>\n\n {/* Drop indicator. */}\n {over?.id === idx && !isDragging && (\n <div className='z-20 absolute left-0 h-full min-w-[4px] border-l-4 border-accentSurface' />\n )}\n\n {/* Resize indicator. */}\n {resizing && <div className='z-20 absolute right-0 h-full min-h-[4px] border-l-4 border-accentSurface' />}\n </div>\n </Resizable>\n );\n};\n\n//\n// Content\n//\n\ntype SheetGridProps = GridLayoutProps & {\n size: GridSize;\n};\n\nconst SheetGrid = forwardRef<HTMLDivElement, SheetGridProps>(\n ({ size, rows, columns, rowSizes, columnSizes }, forwardRef) => {\n const {\n ref: containerRef,\n width: containerWidth = 0,\n height: containerHeight = 0,\n } = useResizeDetector({ refreshRate: 200 });\n const scrollerRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(forwardRef, () => scrollerRef.current!);\n\n const { model, cursor, range, editing, setCursor, setRange, setEditing, onInfo } = useSheetContext();\n const initialText = useRef<string>();\n const quickEdit = useRef(false);\n\n // Listen for async calculation updates.\n const [, forceUpdate] = useState({});\n useEffect(() => {\n const unsubscribe = model.update.on(() => {\n log('updated', { id: model.id });\n forceUpdate({});\n });\n\n return () => {\n unsubscribe();\n };\n }, [model]);\n\n //\n // Event handling.\n //\n\n const inputRef = useRef<HTMLInputElement>(null);\n const handleKeyDown: DOMAttributes<HTMLInputElement>['onKeyDown'] = (ev) => {\n // Cut-and-paste.\n const isMacOS = /Mac|iPhone|iPod|iPad/.test(navigator.userAgent);\n if (cursor && ((isMacOS && ev.metaKey) || ev.ctrlKey)) {\n switch (ev.key) {\n case 'x': {\n model.cut(range ?? { from: cursor });\n return;\n }\n case 'c': {\n model.copy(range ?? { from: cursor });\n return;\n }\n case 'v': {\n model.paste(cursor);\n return;\n }\n case 'z': {\n if (ev.shiftKey) {\n model.redo();\n } else {\n model.undo();\n }\n return;\n }\n }\n }\n\n switch (ev.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Home':\n case 'End': {\n const next = handleNav(ev, cursor, range, size);\n setRange(next.range);\n if (next.cursor) {\n setCursor(next.cursor);\n const element = getCellElement(scrollerRef.current!, next.cursor);\n if (element) {\n scrollIntoView(scrollerRef.current!, element);\n }\n }\n break;\n }\n\n case 'Backspace': {\n if (cursor) {\n if (range) {\n model.clear(range);\n } else {\n model.setValue(cursor, null);\n }\n }\n break;\n }\n\n case 'Escape': {\n setRange(undefined);\n break;\n }\n\n case 'Enter': {\n ev.stopPropagation();\n if (cursor) {\n setEditing(true);\n }\n break;\n }\n\n case '?': {\n onInfo?.();\n break;\n }\n\n default: {\n if (ev.key.length === 1) {\n initialText.current = ev.key;\n quickEdit.current = true;\n setEditing(true);\n }\n }\n }\n };\n\n // Mouse handlers for selection.\n const { handlers } = useRangeSelect((event, range) => {\n switch (event) {\n case 'start': {\n // if (!editing) {\n // setCursor(range?.from);\n // }\n setRange(undefined);\n break;\n }\n\n default: {\n setRange(range);\n }\n }\n });\n\n // Calculate visible grid.\n const { width, height, rowRange, columnRange } = useGridLayout({\n scroller: scrollerRef.current,\n size: { width: containerWidth, height: containerHeight },\n rows,\n columns,\n rowSizes,\n columnSizes,\n });\n\n // TODO(burdon): Prevent scroll if not attended.\n const id = fullyQualifiedId(model.sheet);\n const attendableAttrs = createAttendableAttributes(id);\n const hasAttention = useHasAttention(id);\n\n return (\n <div ref={containerRef} role='grid' className='relative flex grow overflow-hidden'>\n {/* Fixed border. */}\n <div className={mx('z-20 absolute inset-0 border border-gridLine pointer-events-none')} />\n\n {/* Grid scroll container. */}\n <div ref={scrollerRef} className={mx('grow', hasAttention && 'overflow-auto scrollbar-thin')}>\n {/* Scroll content. */}\n <div\n className='relative select-none'\n style={{ width, height }}\n onClick={() => inputRef.current?.focus()}\n {...handlers}\n >\n {/* Selection. */}\n {scrollerRef.current && <SelectionOverlay root={scrollerRef.current} />}\n\n {/* Grid cells. */}\n {rowRange.map(({ row, top, height }) => {\n return columnRange.map(({ column, left, width }) => {\n const style: CSSProperties = { position: 'absolute', top, left, width, height };\n const cell = { row, column };\n const id = addressToA1Notation(cell);\n const idx = model.addressToIndex(cell);\n const active = posEquals(cursor, cell);\n if (active && editing) {\n const value = initialText.current ?? model.getCellText(cell) ?? '';\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose: GridCellEditorProps['onClose'] = (value) => {\n initialText.current = undefined;\n quickEdit.current = false;\n if (value !== undefined) {\n model.setValue(cell, value);\n // Auto-advance to next cell.\n const next = handleArrowNav({ key: 'ArrowDown', metaKey: false }, cursor, size);\n if (next) {\n setCursor(next);\n }\n }\n inputRef.current?.focus();\n setEditing(false);\n };\n\n // Quick entry mode: i.e., typing to enter cell.\n const handleNav: GridCellEditorProps['onNav'] = (value, { key }) => {\n initialText.current = undefined;\n model.setValue(cell, value ?? null);\n const next = handleArrowNav({ key, metaKey: false }, cursor, size);\n if (next) {\n setCursor(next);\n }\n inputRef.current?.focus();\n setEditing(false);\n };\n\n return (\n <GridCellEditor\n key={idx}\n value={value}\n style={style}\n onNav={quickEdit.current ? handleNav : undefined}\n onClose={handleClose}\n />\n );\n }\n\n return (\n <SheetCell\n key={id}\n id={id}\n cell={cell}\n active={active}\n style={style}\n onSelect={(cell, edit) => {\n setEditing(edit);\n setCursor(cell);\n }}\n />\n );\n });\n })}\n </div>\n </div>\n\n {/* Hidden input for key navigation. */}\n {createPortal(\n <input\n ref={inputRef}\n autoFocus\n className='absolute w-[1px] h-[1px] bg-transparent outline-none border-none caret-transparent'\n onKeyDown={handleKeyDown}\n {...attendableAttrs}\n />,\n document.body,\n )}\n </div>\n );\n },\n);\n\n//\n// Selection\n//\n\nconst SelectionOverlay = ({ root }: { root: HTMLDivElement }) => {\n const { range } = useSheetContext();\n if (!range) {\n return null;\n }\n\n const c1 = getCellElement(root, range.from);\n const c2 = range.to ? getCellElement(root, range.to)! : c1;\n if (!c1 || !c2) {\n return null;\n }\n\n // TODO(burdon): Instead of measuring cells, get from grid layout?\n const b1 = getRelativeClientRect(root, c1);\n const b2 = getRelativeClientRect(root, c2);\n const bounds = getRectUnion(b1, b2);\n\n return (\n <div\n role='none'\n style={bounds}\n className='z-10 absolute pointer-events-none bg-gridSelectionOverlay border border-gridOverlay'\n />\n );\n};\n\n//\n// Cell\n//\n\ntype SheetCellProps = {\n id: string; // TODO(burdon): Should this be the index?\n cell: CellAddress;\n style: CSSProperties;\n active: boolean;\n onSelect?: (selected: CellAddress, edit: boolean) => void;\n};\n\nconst SheetCell = ({ id, cell, style, active, onSelect }: SheetCellProps) => {\n const { formatting, editing, setRange } = useSheetContext();\n const { value, classNames } = formatting.getFormatting(cell);\n\n return (\n <div\n {...{ [`data-${CELL_DATA_KEY}`]: id }}\n role='cell'\n style={style}\n className={mx(\n 'flex w-full h-full px-2 py-1 truncate items-center border border-gridLine cursor-pointer',\n fragments.cell,\n active && ['z-20', fragments.cellSelected],\n classNames,\n )}\n onClick={() => {\n if (editing) {\n setRange?.({ from: cell });\n } else {\n onSelect?.(cell, false);\n }\n }}\n onDoubleClick={() => onSelect?.(cell, true)}\n >\n {value}\n </div>\n );\n};\n\ntype GridCellEditorProps = {\n style: CSSProperties;\n value: string;\n} & EditorKeysProps;\n\nconst GridCellEditor = ({ style, value, onNav, onClose }: GridCellEditorProps) => {\n const { model, range } = useSheetContext();\n const notifier = useRef<CellRangeNotifier>();\n useEffect(() => {\n if (range) {\n // Update range selection in formula.\n notifier.current?.(rangeToA1Notation(range));\n }\n }, [range]);\n const extension = useMemo(\n () => [\n editorKeys({ onNav, onClose }),\n sheetExtension({ functions: model.functions }),\n rangeExtension((fn) => (notifier.current = fn)),\n ],\n [model],\n );\n\n return (\n <div\n role='cell'\n style={style}\n className={mx('z-20 flex', fragments.cellSelected)}\n onClick={(ev) => ev.stopPropagation()}\n >\n <CellEditor autoFocus value={value} extension={extension} />\n </div>\n );\n};\n\n//\n// StatusBar\n//\n\nconst SheetStatusBar = () => {\n const { model, cursor, range } = useSheetContext();\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.mapFormulaBindingFromId(model.mapFormulaIndicesToRefs(value));\n isFormula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className={mx('flex shrink-0 justify-between items-center px-4 py-1 text-sm border-x border-gridLine')}>\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 <FunctionIcon className={mx('text-greenText', isFormula ? 'visible' : 'invisible')} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n\n//\n// Debug\n//\n\nconst SheetDebug = () => {\n const { model, cursor, range } = useSheetContext();\n const [, forceUpdate] = useState({});\n useEffect(() => {\n // TODO(burdon): This is called without registering a listener.\n const accessor = createDocAccessor(model.sheet, []);\n const handleUpdate = () => forceUpdate({});\n accessor.handle.addListener('change', handleUpdate);\n handleUpdate();\n return () => {\n accessor.handle.removeListener('change', handleUpdate);\n };\n }, [model]);\n\n return (\n <div\n className={mx(\n 'z-20 absolute right-0 top-20 bottom-20 w-[30rem] overflow-auto scrollbar-thin',\n 'border border-gridLine text-xs bg-neutral-50 dark:bg-black text-cyan-500 font-mono p-1 opacity-80',\n )}\n >\n <pre className='whitespace-pre-wrap'>\n {JSON.stringify(\n {\n cursor,\n range,\n cells: model.sheet.cells,\n rowMeta: model.sheet.rowMeta,\n columnMeta: model.sheet.columnMeta,\n formatting: model.sheet.formatting,\n },\n undefined,\n 2,\n )}\n </pre>\n </div>\n );\n};\n\n//\n// Grid\n//\n\nexport const Sheet = {\n Root: SheetRoot,\n Main: SheetMain,\n Rows: SheetRows,\n Columns: SheetColumns,\n Grid: SheetGrid,\n Cell: SheetCell,\n StatusBar: SheetStatusBar,\n Debug: SheetDebug,\n};\n\nexport type { SheetRootProps, SheetMainProps, SheetRowsProps, SheetColumnsProps, SheetGridProps, SheetCellProps };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type MouseEvent, useEffect, useState } from 'react';\n\nimport { type CellAddress, type CellIndex, addressFromA1Notation, addressToA1Notation } from '../../model';\n\n// export type Bounds = Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n// export type Dimension = Pick<DOMRect, 'width' | 'height'>;\n\nexport type SizeMap = Record<string, number>;\n\nexport type RowPosition = { row: number } & Pick<DOMRect, 'top' | 'height'>;\nexport type ColumnPosition = { column: number } & Pick<DOMRect, 'left' | 'width'>;\n\nexport const axisWidth = 'calc(var(--rail-size)-2px)';\nexport const axisHeight = 34;\n\nexport const minWidth = 40;\nexport const maxWidth = 800;\n\nexport const minHeight = axisHeight;\nexport const maxHeight = 400;\n\nexport const defaultWidth = 200;\nexport const defaultHeight = minHeight;\n\n/**\n * Cell nodes are identified by their A1 notation.\n */\nexport const CELL_DATA_KEY = 'cell';\n\nexport type GridLayoutProps = {\n rows: CellIndex[];\n columns: CellIndex[];\n rowSizes?: SizeMap;\n columnSizes?: SizeMap;\n};\n\nexport type GridLayout = {\n width: number;\n height: number;\n rowRange: RowPosition[];\n columnRange: ColumnPosition[];\n};\n\n/**\n * Calculates the grid geometry for the current viewport.\n */\nexport const useGridLayout = ({\n scroller,\n size,\n rows,\n columns,\n rowSizes,\n columnSizes,\n}: GridLayoutProps & {\n scroller: HTMLDivElement | null;\n size: { width: number; height: number };\n}): GridLayout => {\n const [rowPositions, setRowPositions] = useState<RowPosition[]>([]);\n useEffect(() => {\n if (!rowSizes) {\n return;\n }\n\n let y = 0;\n setRowPositions(\n rows.map((idx, i) => {\n const height = rowSizes?.[idx] ?? defaultHeight;\n const top = y;\n y += height - 1;\n return { row: i, top, height };\n }),\n );\n }, [rows, rowSizes]);\n\n const [columnPositions, setColumnPositions] = useState<ColumnPosition[]>([]);\n useEffect(() => {\n if (!columns) {\n return;\n }\n\n let x = 0;\n setColumnPositions(\n columns.map((idx, i) => {\n const width = columnSizes?.[idx] ?? defaultWidth;\n const left = x;\n x += width - 1;\n return { column: i, left, width };\n }),\n );\n }, [columns, columnSizes]);\n\n const height = rowPositions.length\n ? rowPositions[rowPositions.length - 1].top + rowPositions[rowPositions.length - 1].height\n : 0;\n\n const width = columnPositions.length\n ? columnPositions[columnPositions.length - 1].left + columnPositions[columnPositions.length - 1].width\n : 0;\n\n //\n // Virtual window.\n // TODO(burdon): Preserve edit state, selection.\n // TODO(burdon): BUG: Doesn't scroll to cursor if jump to end.\n //\n\n const [{ rowRange, columnRange }, setWindow] = useState<{\n rowRange: RowPosition[];\n columnRange: ColumnPosition[];\n }>({ rowRange: [], columnRange: [] });\n useEffect(() => {\n const handleScroll = () => {\n if (!scroller) {\n return;\n }\n\n const { scrollLeft: left, scrollTop: top, clientWidth: width, clientHeight: height } = scroller;\n\n let rowStart = 0;\n let rowEnd = 0;\n for (let i = 0; i < rowPositions.length; i++) {\n const row = rowPositions[i];\n if (row.top <= top) {\n rowStart = i;\n }\n if (row.top + row.height >= top + height) {\n rowEnd = i;\n break;\n }\n }\n\n let columnStart = 0;\n let columnEnd = 0;\n for (let i = 0; i < columnPositions.length; i++) {\n const column = columnPositions[i];\n if (column.left <= left) {\n columnStart = i;\n }\n if (column.left + column.width >= left + width) {\n columnEnd = i;\n break;\n }\n }\n\n const overscan = 5;\n setWindow({\n rowRange: rowPositions.slice(\n Math.max(0, rowStart - overscan),\n Math.min(rowPositions.length, rowEnd + overscan),\n ),\n columnRange: columnPositions.slice(\n Math.max(0, columnStart - overscan),\n Math.min(columnPositions.length, columnEnd + overscan),\n ),\n });\n };\n\n scroller?.addEventListener('scroll', handleScroll);\n handleScroll();\n return () => {\n scroller?.removeEventListener('scroll', handleScroll);\n };\n }, [size.width, size.height, rowPositions, columnPositions]);\n\n return { width, height, rowRange, columnRange };\n};\n\n/**\n * Find child node at mouse pointer.\n */\nexport const getCellAtPointer = (event: MouseEvent): CellAddress | undefined => {\n const element = document.elementFromPoint(event.clientX, event.clientY);\n const root = element?.closest<HTMLDivElement>(`[data-${CELL_DATA_KEY}]`);\n if (root) {\n const value = root.dataset[CELL_DATA_KEY];\n if (value) {\n return addressFromA1Notation(value);\n }\n }\n};\n\n/**\n * Get element.\n */\nexport const getCellElement = (root: HTMLElement, cell: CellAddress): HTMLElement | null => {\n const pos = addressToA1Notation(cell);\n return root.querySelector(`[data-${CELL_DATA_KEY}=\"${pos}\"]`);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type KeyboardEvent, type MouseEventHandler, useState } from 'react';\n\nimport { getCellAtPointer } from './grid';\nimport { type CellAddress, type CellRange, posEquals } from '../../model';\n\nexport type GridSize = {\n numRows: number;\n numColumns: number;\n};\n\n/**\n * Calculate next range based on arrow keys.\n */\nexport const handleNav = (\n ev: KeyboardEvent<HTMLInputElement>,\n cursor: CellAddress | undefined,\n range: CellRange | undefined,\n size: GridSize,\n): { cursor?: CellAddress; range?: CellRange } => {\n if (cursor && ev.shiftKey) {\n // Navigate from the furthest point.\n const opposite = range?.to ?? { ...cursor };\n switch (ev.key) {\n case 'ArrowUp': {\n if (opposite.row > 0) {\n opposite.row -= 1;\n }\n break;\n }\n case 'ArrowDown': {\n if (opposite.row < size.numRows - 1) {\n opposite.row += 1;\n }\n break;\n }\n case 'ArrowLeft': {\n if (opposite.column > 0) {\n opposite.column -= 1;\n }\n break;\n }\n case 'ArrowRight': {\n if (opposite.column < size.numColumns - 1) {\n opposite.column += 1;\n }\n break;\n }\n }\n\n return { cursor, range: { from: cursor, to: opposite } };\n }\n\n const next = handleArrowNav(ev, cursor, size);\n return { cursor: next };\n};\n\n/**\n * Calculate next cell based on arrow keys.\n */\nexport const handleArrowNav = (\n ev: Pick<KeyboardEvent<HTMLInputElement>, 'key' | 'metaKey'>,\n cursor: CellAddress | undefined,\n { numRows, numColumns }: GridSize,\n): CellAddress | undefined => {\n switch (ev.key) {\n case 'ArrowUp':\n if (cursor === undefined) {\n return { row: 0, column: 0 };\n } else if (cursor.row > 0) {\n return { row: ev.metaKey ? 0 : cursor.row - 1, column: cursor.column };\n }\n break;\n case 'ArrowDown':\n if (cursor === undefined) {\n return { row: 0, column: 0 };\n } else if (cursor.row < numRows - 1) {\n return { row: ev.metaKey ? numRows - 1 : cursor.row + 1, column: cursor.column };\n }\n break;\n case 'ArrowLeft':\n if (cursor === undefined) {\n return { row: 0, column: 0 };\n } else if (cursor.column > 0) {\n return { row: cursor.row, column: ev.metaKey ? 0 : cursor.column - 1 };\n }\n break;\n case 'ArrowRight':\n if (cursor === undefined) {\n return { row: 0, column: 0 };\n } else if (cursor.column < numColumns - 1) {\n return { row: cursor.row, column: ev.metaKey ? numColumns - 1 : cursor.column + 1 };\n }\n break;\n case 'Home':\n return { row: 0, column: 0 };\n case 'End':\n return { row: numRows - 1, column: numColumns - 1 };\n }\n};\n\n/**\n * Hook to manage range drag handlers.\n */\n// TODO(burdon): Memoize callbacks?\nexport const useRangeSelect = (\n cb: (event: 'start' | 'move' | 'end', range: CellRange | undefined) => void,\n): {\n range: CellRange | undefined;\n handlers: {\n onMouseDown: MouseEventHandler<HTMLDivElement>;\n onMouseMove: MouseEventHandler<HTMLDivElement>;\n onMouseUp: MouseEventHandler<HTMLDivElement>;\n };\n} => {\n const [from, setFrom] = useState<CellAddress | undefined>();\n const [to, setTo] = useState<CellAddress | undefined>();\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (ev) => {\n const current = getCellAtPointer(ev);\n setFrom(current);\n if (current) {\n setTimeout(() => cb('start', { from: current }));\n }\n };\n\n const onMouseMove: MouseEventHandler<HTMLDivElement> = (ev) => {\n if (from) {\n let current = getCellAtPointer(ev);\n if (posEquals(current, from)) {\n current = undefined;\n }\n setTo(current);\n setTimeout(() => cb('move', { from, to: current }));\n }\n };\n\n const onMouseUp: MouseEventHandler<HTMLDivElement> = (ev) => {\n if (from) {\n let current = getCellAtPointer(ev);\n if (posEquals(current, from)) {\n current = undefined;\n }\n setFrom(undefined);\n setTo(undefined);\n setTimeout(() => cb('end', current ? { from, to: current } : undefined));\n }\n };\n\n return {\n range: from ? { from, to } : undefined,\n handlers: { onMouseDown, onMouseMove, onMouseUp },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useContext, useState, useEffect } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { type FunctionType } from '@dxos/plugin-script';\nimport { fullyQualifiedId, type Space } from '@dxos/react-client/echo';\n\nimport { FormattingModel } from './formatting';\nimport { type CellAddress, type CellRange, defaultFunctions, SheetModel } from '../../model';\nimport { type SheetType } from '../../types';\nimport { type FunctionContextOptions } from '../ComputeGraph';\n// TODO(wittjosiah): Refactor. This is not exported from ./components due to depending on ECHO.\nimport { useComputeGraph } from '../ComputeGraph/graph-context';\n\n// TODO(wittjosiah): Factor out.\nconst OBJECT_ID_LENGTH = 60; // 33 (space id) + 26 (object id) + 1 (separator).\n\nexport type SheetContextType = {\n model: SheetModel;\n formatting: FormattingModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n\n // Editing state (undefined if not editing).\n editing: boolean;\n setEditing: (editing: boolean) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n};\n\nconst SheetContext = createContext<SheetContextType | null>(null);\n\nexport const useSheetContext = (): SheetContextType => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nexport type SheetContextProps = {\n sheet: SheetType;\n space: Space;\n readonly?: boolean;\n} & Pick<SheetContextType, 'onInfo'> &\n Partial<FunctionContextOptions>;\n\n/**\n * Map from binding to fully qualified ECHO ID.\n */\nconst mapFormulaBindingToId =\n (functions: FunctionType[]) =>\n (formula: string): string => {\n return formula.replace(/([a-zA-Z0-9]+)\\((.*)\\)/g, (match, binding, args) => {\n if (defaultFunctions.find((fn) => fn.name === binding) || binding === 'EDGE') {\n return match;\n }\n\n const fn = functions.find((fn) => fn.binding === binding);\n if (fn) {\n return `${fullyQualifiedId(fn)}(${args})`;\n } else {\n return match;\n }\n });\n };\n\n/**\n * Map from fully qualified ECHO ID to binding.\n */\nconst mapFormulaBindingFromId =\n (functions: FunctionType[]) =>\n (formula: string): string => {\n return formula.replace(/([a-zA-Z0-9]+):([a-zA-Z0-9]+)\\((.*)\\)/g, (match, spaceId, objectId, args) => {\n const id = `${spaceId}:${objectId}`;\n if (id.length !== OBJECT_ID_LENGTH) {\n return match;\n }\n\n const fn = functions.find((fn) => fullyQualifiedId(fn) === id);\n if (fn?.binding) {\n return `${fn.binding}(${args})`;\n } else {\n return match;\n }\n });\n };\n\nexport const SheetContextProvider = ({\n children,\n sheet,\n space,\n readonly,\n onInfo,\n ...options\n}: PropsWithChildren<SheetContextProps>) => {\n const graph = useComputeGraph(space, options);\n\n const [cursor, setCursor] = useState<CellAddress>();\n const [range, setRange] = useState<CellRange>();\n const [editing, setEditing] = useState<boolean>(false);\n\n const [[model, formatting] = [], setModels] = useState<[SheetModel, FormattingModel] | undefined>(undefined);\n useEffect(() => {\n let model: SheetModel | undefined;\n let formatting;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, space, { readonly, mapFormulaBindingToId, mapFormulaBindingFromId });\n await model.initialize();\n formatting = new FormattingModel(model);\n setModels([model, formatting]);\n });\n\n return () => {\n clearTimeout(t);\n void model?.destroy();\n };\n }, [graph, readonly]);\n\n if (!model || !formatting) {\n return null;\n }\n\n return (\n <SheetContext.Provider\n value={{\n model,\n formatting,\n cursor,\n setCursor,\n range,\n setRange,\n editing,\n setEditing,\n // TODO(burdon): Change to event.\n onInfo,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ClassNameValue } from '@dxos/react-ui-types';\n\nimport { type SheetModel, type CellAddress, inRange } from '../../model';\nimport { ValueTypeEnum } from '../../types';\n\nexport class FormattingModel {\n constructor(private readonly model: SheetModel) {}\n\n /**\n * Get formatted string value and className for cell.\n */\n getFormatting(cell: CellAddress): { value?: string; classNames?: ClassNameValue } {\n const value = this.model.getValue(cell);\n if (value === undefined || value === null) {\n return {};\n }\n\n // TODO(burdon): Locale.\n const locales = undefined;\n\n // Cell-specific formatting.\n const idx = this.model.addressToIndex(cell);\n let formatting = this.model.sheet.formatting?.[idx] ?? {};\n const classNames = [...(formatting?.classNames ?? [])];\n\n // Range formatting.\n // TODO(burdon): NOTE: D0 means the D column.\n // TODO(burdon): Cache model formatting (e.g., for ranges). Create class out of this function.\n for (const [idx, _formatting] of Object.entries(this.model.sheet.formatting)) {\n const range = this.model.rangeFromIndex(idx);\n if (inRange(range, cell)) {\n if (_formatting.classNames) {\n classNames.push(..._formatting.classNames);\n }\n\n // TODO(burdon): Last wins.\n if (_formatting.type) {\n formatting = _formatting;\n }\n }\n }\n\n const defaultNumber = 'justify-end font-mono';\n\n const type = formatting?.type ?? this.model.getValueType(cell);\n switch (type) {\n case ValueTypeEnum.Boolean: {\n return {\n value: (value as boolean).toLocaleString().toUpperCase(),\n classNames: [...classNames, value ? '!text-greenText' : '!text-orangeText'],\n };\n }\n\n //\n // Numbers.\n //\n\n case ValueTypeEnum.Number: {\n return { value: value.toLocaleString(locales), classNames: [...classNames, defaultNumber] };\n }\n\n case ValueTypeEnum.Percent: {\n return { value: (value as number) * 100 + '%', classNames: [...classNames, defaultNumber] };\n }\n\n case ValueTypeEnum.Currency: {\n return {\n value: (value as number).toLocaleString(locales, {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }),\n classNames: [...classNames, defaultNumber],\n };\n }\n\n //\n // Dates.\n //\n\n case ValueTypeEnum.DateTime: {\n const date = this.model.toLocalDate(value as number);\n return { value: date.toLocaleString(locales), classNames };\n }\n\n case ValueTypeEnum.Date: {\n const date = this.model.toLocalDate(value as number);\n return { value: date.toLocaleDateString(locales), classNames };\n }\n\n case ValueTypeEnum.Time: {\n const date = this.model.toLocalDate(value as number);\n return { value: date.toLocaleTimeString(locales), classNames };\n }\n\n default: {\n return { value: String(value), classNames };\n }\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Gets the relative client rect of an element within a parent container.\n * NOTE: This is stable even when the parent is scrolling.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect\n * @param root Parent container (e.g., scrollable container).\n * @param element\n */\nexport const getRelativeClientRect = (root: HTMLElement, element: HTMLElement): DOMRect => {\n const rootRect = root.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n return new DOMRect(\n elementRect.left - rootRect.left + root.scrollLeft,\n elementRect.top - rootRect.top + root.scrollTop,\n elementRect.width,\n elementRect.height,\n );\n};\n\n/**\n * Union of two rectangles.\n */\nexport const getRectUnion = (b1: DOMRect, b2: DOMRect): Pick<DOMRect, 'left' | 'top' | 'width' | 'height'> => {\n return {\n left: Math.min(b1.left, b2.left),\n top: Math.min(b1.top, b2.top),\n width: Math.abs(b1.left - b2.left) + (b1.left > b2.left ? b1.width : b2.width),\n height: Math.abs(b1.top - b2.top) + (b1.height > b2.height ? b1.height : b2.height),\n };\n};\n\n/**\n * Scroll to cell.\n * We need to correct for the DOM `scrollIntoView` function which doesn't show the border.\n */\nexport const scrollIntoView = (scrollContainer: HTMLElement, el: HTMLElement) => {\n el.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n\n const cellBounds = el.getBoundingClientRect();\n const scrollerBounds = scrollContainer.getBoundingClientRect();\n\n if (cellBounds.top < scrollerBounds.top) {\n scrollContainer.scrollTop -= scrollerBounds.top - cellBounds.top;\n } else if (cellBounds.bottom >= scrollerBounds.bottom - 1) {\n scrollContainer.scrollTop += 2 + scrollerBounds.bottom - cellBounds.bottom;\n }\n\n if (cellBounds.left < scrollerBounds.left) {\n scrollContainer.scrollLeft -= scrollerBounds.left - cellBounds.left;\n } else if (cellBounds.right >= scrollerBounds.right) {\n scrollContainer.scrollLeft += 2 + scrollerBounds.right - cellBounds.right;\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\nimport React, { type DOMAttributes, type KeyboardEvent } from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n type UseTextEditorProps,\n createBasicExtensions,\n createThemeExtensions,\n preventNewline,\n useTextEditor,\n} from '@dxos/react-ui-editor';\n\nexport type EditorKeysProps = {\n onClose: (value: string | undefined) => void;\n onNav?: (value: string | undefined, ev: Pick<KeyboardEvent<HTMLInputElement>, 'key'>) => void;\n};\n\nexport const editorKeys = ({ onNav, onClose }: EditorKeysProps): Extension => {\n return keymap.of([\n {\n key: 'ArrowUp',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowUp' });\n return !!onNav;\n },\n },\n {\n key: 'ArrowDown',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowDown' });\n return !!onNav;\n },\n },\n {\n key: 'ArrowLeft',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowLeft' });\n return !!onNav;\n },\n },\n {\n key: 'ArrowRight',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowRight' });\n return !!onNav;\n },\n },\n {\n key: 'Enter',\n run: (editor) => {\n onClose(editor.state.doc.toString());\n return true;\n },\n },\n {\n key: 'Escape',\n run: () => {\n onClose(undefined);\n return true;\n },\n },\n ]);\n};\n\nexport type CellEditorProps = {\n value?: string;\n extension?: Extension;\n} & Pick<UseTextEditorProps, 'autoFocus'> &\n Pick<DOMAttributes<HTMLInputElement>, 'onBlur' | 'onKeyDown'>;\n\nexport const CellEditor = ({ value, extension, autoFocus, onBlur }: CellEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n return {\n autoFocus,\n initialValue: value,\n selection: { anchor: value?.length ?? 0 },\n extensions: [\n extension ?? [],\n preventNewline,\n EditorView.focusChangeEffect.of((_, focusing) => {\n if (!focusing) {\n onBlur?.({ type: 'blur' } as any);\n }\n return null;\n }),\n createBasicExtensions({ lineWrapping: false }),\n createThemeExtensions({\n themeMode,\n slots: {\n editor: {\n className: 'flex w-full [&>.cm-scroller]:scrollbar-none',\n },\n content: {\n className: '!px-2 !py-1',\n },\n },\n }),\n ],\n };\n }, [extension]);\n\n return <div ref={parentRef} className='flex w-full' />;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension, Facet } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type FunctionDefinition } from '../../model';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accentText',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pinkText',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-tealText',\n },\n {\n tag: tags.bool,\n class: 'text-tealText',\n },\n {\n tag: tags.string,\n class: 'text-tealText',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-unAccent',\n },\n]);\n\nconst languageFacet = Facet.define<Language>();\n\nexport type SheetExtensionOptions = {\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({ idiom: 'en-US', decimalSeparator: '.' });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accentText';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-greenText';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n // NOTE: Useful for debugging.\n closeOnBlur: false,\n icons: false,\n tooltipClass: () =>\n mx(\n // TODO(burdon): Factor out fragments.\n // TODO(burdon): Size to make width same as column.\n '!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accentSurface',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type CellRangeNotifier = (range: string) => void;\n\ntype Range = { from: number; to: number };\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = (onInit: (notifier: CellRangeNotifier) => void): Extension => {\n let view: EditorView;\n let activeRange: Range | undefined;\n const provider: CellRangeNotifier = (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit(provider);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const [language] = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function': {\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n }\n\n case 'CloseParen': {\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n }\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n activeRange = { from: 1, to: view.state.doc.toString().length };\n }\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "mx", "DndContext", "DragOverlay", "KeyboardSensor", "MouseSensor", "TouchSensor", "useDraggable", "useDroppable", "useSensor", "useSensors", "restrictToHorizontalAxis", "restrictToVerticalAxis", "getEventCoordinates", "useCombinedRefs", "Function", "FunctionIcon", "Resizable", "React", "forwardRef", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "createPortal", "useResizeDetector", "debounce", "fullyQualifiedId", "createDocAccessor", "log", "createAttendableAttributes", "useHasAttention", "mx", "useEffect", "useState", "axisWidth", "axisHeight", "minWidth", "maxWidth", "minHeight", "maxHeight", "defaultWidth", "defaultHeight", "CELL_DATA_KEY", "useGridLayout", "scroller", "size", "rows", "columns", "rowSizes", "columnSizes", "rowPositions", "setRowPositions", "useState", "useEffect", "y", "map", "idx", "i", "height", "top", "row", "columnPositions", "setColumnPositions", "x", "width", "left", "column", "length", "rowRange", "columnRange", "setWindow", "handleScroll", "scrollLeft", "scrollTop", "clientWidth", "clientHeight", "rowStart", "rowEnd", "columnStart", "columnEnd", "overscan", "slice", "Math", "max", "min", "addEventListener", "removeEventListener", "getCellAtPointer", "event", "element", "document", "elementFromPoint", "clientX", "clientY", "root", "closest", "value", "dataset", "addressFromA1Notation", "getCellElement", "cell", "pos", "addressToA1Notation", "querySelector", "useState", "handleNav", "ev", "cursor", "range", "size", "shiftKey", "opposite", "to", "key", "row", "numRows", "column", "numColumns", "from", "next", "handleArrowNav", "undefined", "metaKey", "useRangeSelect", "cb", "setFrom", "useState", "setTo", "onMouseDown", "current", "getCellAtPointer", "setTimeout", "onMouseMove", "posEquals", "onMouseUp", "handlers", "React", "createContext", "useContext", "useState", "useEffect", "invariant", "fullyQualifiedId", "FormattingModel", "constructor", "model", "getFormatting", "cell", "value", "getValue", "undefined", "locales", "idx", "addressToIndex", "formatting", "sheet", "classNames", "_formatting", "Object", "entries", "range", "rangeFromIndex", "inRange", "push", "type", "defaultNumber", "getValueType", "ValueTypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "Percent", "Currency", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "DateTime", "date", "toLocalDate", "Date", "toLocaleDateString", "Time", "toLocaleTimeString", "String", "OBJECT_ID_LENGTH", "SheetContext", "createContext", "useSheetContext", "context", "useContext", "invariant", "mapFormulaBindingToId", "functions", "formula", "replace", "match", "binding", "args", "defaultFunctions", "find", "fn", "name", "fullyQualifiedId", "mapFormulaBindingFromId", "spaceId", "objectId", "id", "length", "SheetContextProvider", "children", "sheet", "space", "readonly", "onInfo", "options", "graph", "useComputeGraph", "cursor", "setCursor", "useState", "range", "setRange", "editing", "setEditing", "model", "formatting", "setModels", "undefined", "useEffect", "t", "setTimeout", "SheetModel", "initialize", "FormattingModel", "clearTimeout", "destroy", "Provider", "value", "getRelativeClientRect", "root", "element", "rootRect", "getBoundingClientRect", "elementRect", "DOMRect", "left", "scrollLeft", "top", "scrollTop", "width", "height", "getRectUnion", "b1", "b2", "Math", "min", "abs", "scrollIntoView", "scrollContainer", "el", "block", "inline", "cellBounds", "scrollerBounds", "bottom", "right", "EditorView", "keymap", "React", "useThemeContext", "createBasicExtensions", "createThemeExtensions", "preventNewline", "useTextEditor", "editorKeys", "onNav", "onClose", "keymap", "of", "key", "run", "editor", "value", "state", "doc", "toString", "undefined", "CellEditor", "extension", "autoFocus", "onBlur", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "selection", "anchor", "length", "extensions", "preventNewline", "EditorView", "focusChangeEffect", "_", "focusing", "type", "createBasicExtensions", "lineWrapping", "createThemeExtensions", "slots", "className", "content", "React", "div", "ref", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "Facet", "ViewPlugin", "keymap", "tags", "spreadsheet", "mx", "highlightStyles", "HighlightStyle", "define", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "Facet", "sheetExtension", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "value", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "syntaxHighlighting", "autocompletion", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "mx", "keymap", "key", "run", "completionStatus", "acceptCompletion", "startCompletion", "rangeExtension", "onInit", "activeRange", "provider", "range", "focus", "ViewPlugin", "fromClass", "constructor", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "node", "callback", "child", "firstChild", "nextSibling", "fragments", "axis", "axisSelected", "cell", "cellSelected", "SheetRoot", "children", "props", "React", "SheetContextProvider", "SheetMain", "forwardRef", "classNames", "numRows", "numColumns", "model", "cursor", "setCursor", "setRange", "setEditing", "useSheetContext", "rowsRef", "columnsRef", "contentRef", "useScrollHandlers", "rows", "setRows", "useState", "sheet", "columns", "setColumns", "useEffect", "rowsAccessor", "createDocAccessor", "columnsAccessor", "handleUpdate", "debounce", "handle", "addListener", "removeListener", "reset", "handleMoveRows", "from", "to", "num", "cursorIdx", "addressToIndex", "undefined", "splice", "addressFromIndex", "handleMoveColumns", "rowSizes", "setRowSizes", "columnSizes", "setColumnSizes", "rowAccessor", "columnAccessor", "mapSizes", "values", "reduce", "map", "idx", "meta", "size", "Object", "entries", "rowMeta", "columnMeta", "handleResizeRow", "save", "sizes", "handleResizeColumn", "div", "role", "className", "mx", "GridCorner", "onClick", "SheetColumns", "ref", "selected", "column", "onSelect", "row", "onResize", "onMove", "SheetRows", "SheetGrid", "length", "SheetStatusBar", "useRef", "handleRowsScroll", "ev", "scrollTop", "target", "current", "dataset", "locked", "handleColumnsScroll", "scrollLeft", "handleContentScroll", "content", "addEventListener", "removeEventListener", "MovingOverlay", "label", "mouseConstraints", "distance", "touchConstraints", "delay", "tolerance", "mouseSensor", "useSensor", "MouseSensor", "activationConstraint", "touchSensor", "TouchSensor", "keyboardSensor", "KeyboardSensor", "sensors", "useSensors", "active", "setActive", "handleDragStart", "handleDragEnd", "over", "id", "data", "index", "snapToCenter", "activatorEvent", "draggingNodeRect", "transform", "activatorCoordinates", "getEventCoordinates", "offset", "y", "top", "height", "style", "width", "axisWidth", "DndContext", "modifiers", "restrictToVerticalAxis", "onDragStart", "onDragEnd", "GridRowCell", "key", "String", "defaultHeight", "resize", "createPortal", "DragOverlay", "document", "body", "setNodeRef", "setDroppableNodeRef", "useDroppable", "setDraggableNodeRef", "attributes", "listeners", "isDragging", "useDraggable", "useCombinedRefs", "initialSize", "setInitialSize", "resizing", "setResizing", "scrollHandler", "handleResizeStart", "_ev", "_dir", "elementRef", "scrollContainer", "closest", "handleResize", "_elementRef", "handleResizeStop", "Resizable", "enable", "bottom", "minHeight", "maxHeight", "onResizeStart", "onResizeStop", "span", "x", "left", "axisHeight", "autoScroll", "enabled", "restrictToHorizontalAxis", "GridColumnCell", "columnLetter", "defaultWidth", "right", "minWidth", "maxWidth", "containerRef", "containerWidth", "containerHeight", "useResizeDetector", "refreshRate", "scrollerRef", "useImperativeHandle", "range", "editing", "onInfo", "initialText", "quickEdit", "forceUpdate", "unsubscribe", "update", "on", "log", "inputRef", "handleKeyDown", "isMacOS", "test", "navigator", "userAgent", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "next", "handleNav", "element", "getCellElement", "scrollIntoView", "clear", "setValue", "stopPropagation", "handlers", "useRangeSelect", "event", "rowRange", "columnRange", "useGridLayout", "scroller", "fullyQualifiedId", "attendableAttrs", "createAttendableAttributes", "hasAttention", "useHasAttention", "focus", "SelectionOverlay", "root", "position", "addressToA1Notation", "posEquals", "value", "getCellText", "handleClose", "handleArrowNav", "GridCellEditor", "onNav", "onClose", "SheetCell", "edit", "input", "autoFocus", "onKeyDown", "c1", "c2", "b1", "getRelativeClientRect", "b2", "bounds", "getRectUnion", "formatting", "getFormatting", "CELL_DATA_KEY", "onDoubleClick", "notifier", "rangeToA1Notation", "extension", "useMemo", "editorKeys", "sheetExtension", "functions", "rangeExtension", "fn", "CellEditor", "isFormula", "getCellValue", "charAt", "mapFormulaBindingFromId", "mapFormulaIndicesToRefs", "FunctionIcon", "SheetDebug", "accessor", "pre", "JSON", "stringify", "cells", "Sheet", "Root", "Main", "Rows", "Columns", "Grid", "Cell", "StatusBar", "Debug", "SheetContainer", "sheet", "space", "role", "remoteFunctionUrl", "React", "div", "className", "mx", "Sheet", "Root", "Main"]
7
+ }
@@ -0,0 +1,175 @@
1
+ import {
2
+ CustomPlugin,
3
+ CustomPluginTranslations,
4
+ FunctionPluginAsync,
5
+ createComputeGraph
6
+ } from "./chunk-D5AGLXJP.mjs";
7
+
8
+ // packages/plugins/plugin-sheet/src/components/ComputeGraph/edge-function.ts
9
+ import { effect } from "@preact/signals-core";
10
+ import { CellError, ErrorType, FunctionArgumentType } from "hyperformula";
11
+ import { Filter, getMeta } from "@dxos/client/echo";
12
+ import { log } from "@dxos/log";
13
+ import { getUserFunctionUrlInMetadata } from "@dxos/plugin-script/edge";
14
+ import { FunctionType } from "@dxos/plugin-script/types";
15
+ import { nonNullable } from "@dxos/util";
16
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/components/ComputeGraph/edge-function.ts";
17
+ var EDGE_FUNCTION_TTL = 1e4;
18
+ var EdgeFunctionPlugin = class extends FunctionPluginAsync {
19
+ edge(ast, state) {
20
+ const handler = (subscribe = false) => async (binding, ...args) => {
21
+ const space = this.context.space;
22
+ if (!space) {
23
+ return new CellError(ErrorType.REF, "Missing space");
24
+ }
25
+ const { objects: [fn] } = await space.db.query(Filter.schema(FunctionType, {
26
+ binding
27
+ })).run();
28
+ if (!fn) {
29
+ log.info("Function not found", {
30
+ binding
31
+ }, {
32
+ F: __dxlog_file,
33
+ L: 39,
34
+ S: this,
35
+ C: (f, a) => f(...a)
36
+ });
37
+ return new CellError(ErrorType.REF, "Function not found");
38
+ }
39
+ if (subscribe) {
40
+ const unsubscribe = effect(() => {
41
+ log.info("function changed", {
42
+ fn
43
+ }, {
44
+ F: __dxlog_file,
45
+ L: 45,
46
+ S: this,
47
+ C: (f, a) => f(...a)
48
+ });
49
+ const _ = fn?.version;
50
+ this.runAsyncFunction(ast, state, handler(false), {
51
+ ttl: EDGE_FUNCTION_TTL
52
+ });
53
+ });
54
+ this.context.createSubscription(ast.procedureName, unsubscribe);
55
+ }
56
+ const path = getUserFunctionUrlInMetadata(getMeta(fn));
57
+ const result = await fetch(`${this.context.remoteFunctionUrl}${path}`, {
58
+ method: "POST",
59
+ headers: {
60
+ "Content-Type": "application/json"
61
+ },
62
+ body: JSON.stringify({
63
+ args: args.filter(nonNullable)
64
+ })
65
+ });
66
+ return await result.text();
67
+ };
68
+ return this.runAsyncFunction(ast, state, handler(true), {
69
+ ttl: EDGE_FUNCTION_TTL
70
+ });
71
+ }
72
+ };
73
+ EdgeFunctionPlugin.implementedFunctions = {
74
+ EDGE: {
75
+ method: "edge",
76
+ parameters: [
77
+ // Binding
78
+ {
79
+ argumentType: FunctionArgumentType.STRING
80
+ },
81
+ // Remote function arguments (currently supporting up to 9).
82
+ {
83
+ argumentType: FunctionArgumentType.ANY,
84
+ optionalArg: true
85
+ },
86
+ {
87
+ argumentType: FunctionArgumentType.ANY,
88
+ optionalArg: true
89
+ },
90
+ {
91
+ argumentType: FunctionArgumentType.ANY,
92
+ optionalArg: true
93
+ },
94
+ {
95
+ argumentType: FunctionArgumentType.ANY,
96
+ optionalArg: true
97
+ },
98
+ {
99
+ argumentType: FunctionArgumentType.ANY,
100
+ optionalArg: true
101
+ },
102
+ {
103
+ argumentType: FunctionArgumentType.ANY,
104
+ optionalArg: true
105
+ },
106
+ {
107
+ argumentType: FunctionArgumentType.ANY,
108
+ optionalArg: true
109
+ },
110
+ {
111
+ argumentType: FunctionArgumentType.ANY,
112
+ optionalArg: true
113
+ },
114
+ {
115
+ argumentType: FunctionArgumentType.ANY,
116
+ optionalArg: true
117
+ }
118
+ ],
119
+ isVolatile: true
120
+ }
121
+ };
122
+ var EdgeFunctionPluginTranslations = {
123
+ enGB: {
124
+ EDGE: "EDGE"
125
+ },
126
+ enUS: {
127
+ EDGE: "EDGE"
128
+ }
129
+ };
130
+
131
+ // packages/plugins/plugin-sheet/src/components/ComputeGraph/graph-context.tsx
132
+ import React, { createContext, useContext, useEffect } from "react";
133
+ var ComputeGraphContext = /* @__PURE__ */ createContext({
134
+ graphs: {},
135
+ setGraph: () => {
136
+ }
137
+ });
138
+ var ComputeGraphContextProvider = ({ children, graphs, setGraph }) => {
139
+ return /* @__PURE__ */ React.createElement(ComputeGraphContext.Provider, {
140
+ value: {
141
+ graphs,
142
+ setGraph
143
+ }
144
+ }, children);
145
+ };
146
+ var useComputeGraph = (space, options) => {
147
+ const { graphs, setGraph } = useContext(ComputeGraphContext);
148
+ const graph = graphs[space.id] ?? createComputeGraph([
149
+ {
150
+ plugin: EdgeFunctionPlugin,
151
+ translations: EdgeFunctionPluginTranslations
152
+ },
153
+ // TODO(wittjosiah): Remove. Needed for current test sheet generated data.
154
+ {
155
+ plugin: CustomPlugin,
156
+ translations: CustomPluginTranslations
157
+ }
158
+ ], space, options);
159
+ useEffect(() => {
160
+ if (!graphs[space.id]) {
161
+ setGraph(space.id, graph);
162
+ }
163
+ }, [
164
+ space
165
+ ]);
166
+ return graph;
167
+ };
168
+
169
+ export {
170
+ EdgeFunctionPlugin,
171
+ EdgeFunctionPluginTranslations,
172
+ ComputeGraphContextProvider,
173
+ useComputeGraph
174
+ };
175
+ //# sourceMappingURL=chunk-APHOLYUB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/edge-function.ts", "../../../src/components/ComputeGraph/graph-context.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\nimport { CellError, ErrorType, FunctionArgumentType } from 'hyperformula';\nimport { type InterpreterState } from 'hyperformula/typings/interpreter/InterpreterState';\nimport { type ProcedureAst } from 'hyperformula/typings/parser';\n\nimport { Filter, getMeta } from '@dxos/client/echo';\nimport { log } from '@dxos/log';\nimport { getUserFunctionUrlInMetadata } from '@dxos/plugin-script/edge';\nimport { FunctionType } from '@dxos/plugin-script/types';\nimport { nonNullable } from '@dxos/util';\n\nimport { type AsyncFunction, FunctionPluginAsync } from './async-function';\n\nconst EDGE_FUNCTION_TTL = 10_000;\n\n/**\n * A hyperformula function plugin for calling EDGE functions.\n *\n * https://hyperformula.handsontable.com/guide/custom-functions.html#add-a-simple-custom-function\n */\nexport class EdgeFunctionPlugin extends FunctionPluginAsync {\n edge(ast: ProcedureAst, state: InterpreterState) {\n const handler =\n (subscribe = false): AsyncFunction =>\n async (binding: string, ...args: any) => {\n const space = this.context.space;\n if (!space) {\n return new CellError(ErrorType.REF, 'Missing space');\n }\n\n const {\n objects: [fn],\n } = await space.db.query(Filter.schema(FunctionType, { binding })).run();\n if (!fn) {\n log.info('Function not found', { binding });\n return new CellError(ErrorType.REF, 'Function not found');\n }\n\n if (subscribe) {\n const unsubscribe = effect(() => {\n log.info('function changed', { fn });\n const _ = fn?.version;\n\n // TODO(wittjosiah): `ttl` should be 0 to force a recalculation when a new version is deployed.\n // This needs a ttl to prevent a binding change from causing the function not to be found.\n this.runAsyncFunction(ast, state, handler(false), { ttl: EDGE_FUNCTION_TTL });\n });\n\n this.context.createSubscription(ast.procedureName, unsubscribe);\n }\n\n const path = getUserFunctionUrlInMetadata(getMeta(fn));\n const result = await fetch(`${this.context.remoteFunctionUrl}${path}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ args: args.filter(nonNullable) }),\n });\n return await result.text();\n };\n\n return this.runAsyncFunction(ast, state, handler(true), { ttl: EDGE_FUNCTION_TTL });\n }\n}\n\nEdgeFunctionPlugin.implementedFunctions = {\n EDGE: {\n method: 'edge',\n parameters: [\n // Binding\n { argumentType: FunctionArgumentType.STRING },\n\n // Remote function arguments (currently supporting up to 9).\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n { argumentType: FunctionArgumentType.ANY, optionalArg: true },\n ],\n isVolatile: true,\n },\n};\n\nexport const EdgeFunctionPluginTranslations = {\n enGB: {\n EDGE: 'EDGE',\n },\n enUS: {\n EDGE: 'EDGE',\n },\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext, useEffect } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { type FunctionContextOptions } from './async-function';\nimport { CustomPlugin, CustomPluginTranslations } from './custom';\nimport { EdgeFunctionPlugin, EdgeFunctionPluginTranslations } from './edge-function';\nimport { createComputeGraph, type ComputeGraph } from './graph';\n\nexport type ComputeGraphContextType = {\n graphs: Record<string, ComputeGraph>;\n setGraph: (key: string, graph: ComputeGraph) => void;\n};\n\nexport const ComputeGraphContext = createContext<ComputeGraphContextType>({ graphs: {}, setGraph: () => {} });\n\nexport const ComputeGraphContextProvider = ({\n children,\n graphs,\n setGraph,\n}: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ graphs, setGraph }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space: Space, options?: Partial<FunctionContextOptions>): ComputeGraph => {\n const { graphs, setGraph } = useContext(ComputeGraphContext);\n const graph =\n graphs[space.id] ??\n createComputeGraph(\n [\n { plugin: EdgeFunctionPlugin, translations: EdgeFunctionPluginTranslations },\n // TODO(wittjosiah): Remove. Needed for current test sheet generated data.\n { plugin: CustomPlugin, translations: CustomPluginTranslations },\n ],\n space,\n options,\n );\n\n useEffect(() => {\n if (!graphs[space.id]) {\n setGraph(space.id, graph);\n }\n }, [space]);\n\n return graph;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["effect", "CellError", "ErrorType", "FunctionArgumentType", "Filter", "getMeta", "log", "getUserFunctionUrlInMetadata", "FunctionType", "nonNullable", "EDGE_FUNCTION_TTL", "EdgeFunctionPlugin", "FunctionPluginAsync", "edge", "ast", "state", "handler", "subscribe", "binding", "args", "space", "context", "CellError", "ErrorType", "REF", "objects", "fn", "db", "query", "Filter", "schema", "FunctionType", "run", "log", "info", "unsubscribe", "effect", "_", "version", "runAsyncFunction", "ttl", "createSubscription", "procedureName", "path", "getUserFunctionUrlInMetadata", "getMeta", "result", "fetch", "remoteFunctionUrl", "method", "headers", "body", "JSON", "stringify", "filter", "nonNullable", "text", "implementedFunctions", "EDGE", "parameters", "argumentType", "FunctionArgumentType", "STRING", "ANY", "optionalArg", "isVolatile", "EdgeFunctionPluginTranslations", "enGB", "enUS", "React", "createContext", "useContext", "useEffect", "ComputeGraphContext", "createContext", "graphs", "setGraph", "ComputeGraphContextProvider", "children", "Provider", "value", "useComputeGraph", "space", "options", "useContext", "graph", "id", "createComputeGraph", "plugin", "EdgeFunctionPlugin", "translations", "EdgeFunctionPluginTranslations", "CustomPlugin", "CustomPluginTranslations", "useEffect"]
7
+ }