@dxos/plugin-sheet 0.6.13 → 0.6.14-main.69511f5

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 (330) hide show
  1. package/dist/lib/browser/SheetContainer-R65IDJHN.mjs +286 -0
  2. package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-5KVQ5IPW.mjs +65 -0
  4. package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-D3QTX46O.mjs +14 -0
  6. package/dist/lib/browser/chunk-D3QTX46O.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-I2DKJ72A.mjs +1471 -0
  8. package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-D5AGLXJP.mjs → chunk-KCYJSOFB.mjs} +625 -675
  10. package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +7 -0
  11. package/dist/lib/browser/compute-graph-SJT67236.mjs +35 -0
  12. package/dist/lib/browser/compute-graph-SJT67236.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +140 -67
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/meta.mjs +1 -1
  17. package/dist/lib/browser/types.mjs +6 -12
  18. package/dist/lib/node/SheetContainer-6BO4C5X2.cjs +290 -0
  19. package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-DSYKOI4E.cjs → chunk-2XJ5I4UF.cjs} +32 -52
  21. package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +7 -0
  22. package/dist/lib/node/chunk-DEPJHN47.cjs +1457 -0
  23. package/dist/lib/node/chunk-DEPJHN47.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-5KKJ4NPP.cjs → chunk-JF5XNTF3.cjs} +643 -674
  25. package/dist/lib/node/chunk-JF5XNTF3.cjs.map +7 -0
  26. package/dist/lib/node/chunk-QIFIGEKV.cjs +37 -0
  27. package/dist/lib/node/chunk-QIFIGEKV.cjs.map +7 -0
  28. package/dist/lib/node/compute-graph-AQBDL7HO.cjs +57 -0
  29. package/dist/lib/node/compute-graph-AQBDL7HO.cjs.map +7 -0
  30. package/dist/lib/node/index.cjs +150 -75
  31. package/dist/lib/node/index.cjs.map +4 -4
  32. package/dist/lib/node/meta.cjs +3 -3
  33. package/dist/lib/node/meta.cjs.map +1 -1
  34. package/dist/lib/node/meta.json +1 -1
  35. package/dist/lib/node/types.cjs +9 -15
  36. package/dist/lib/node/types.cjs.map +2 -2
  37. package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs +287 -0
  38. package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-25V7WY4R.mjs +1472 -0
  40. package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +7 -0
  41. package/dist/lib/node-esm/chunk-5TXLF6PL.mjs +66 -0
  42. package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +7 -0
  43. package/dist/lib/node-esm/chunk-VCYJWE3O.mjs +16 -0
  44. package/dist/lib/node-esm/chunk-VCYJWE3O.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-XBEHKYO7.mjs +3186 -0
  46. package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +7 -0
  47. package/dist/lib/node-esm/compute-graph-FRCKXEYK.mjs +36 -0
  48. package/dist/lib/node-esm/compute-graph-FRCKXEYK.mjs.map +7 -0
  49. package/dist/lib/node-esm/index.mjs +322 -0
  50. package/dist/lib/node-esm/index.mjs.map +7 -0
  51. package/dist/lib/node-esm/meta.json +1 -0
  52. package/dist/lib/node-esm/meta.mjs +10 -0
  53. package/dist/lib/node-esm/meta.mjs.map +7 -0
  54. package/dist/lib/node-esm/types.mjs +17 -0
  55. package/dist/lib/node-esm/types.mjs.map +7 -0
  56. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  57. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +13 -0
  58. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -0
  59. package/dist/types/src/components/ComputeGraph/index.d.ts +1 -3
  60. package/dist/types/src/components/ComputeGraph/index.d.ts.map +1 -1
  61. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts +3 -0
  62. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -0
  63. package/dist/types/src/components/FunctionEditor/index.d.ts +2 -0
  64. package/dist/types/src/components/FunctionEditor/index.d.ts.map +1 -0
  65. package/dist/types/src/components/GridSheet/GridSheet.d.ts +3 -0
  66. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -0
  67. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +6 -0
  68. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/{CellEditor/CellEditor.stories.d.ts → GridSheet/SheetCellEditor.stories.d.ts} +5 -9
  70. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -0
  71. package/dist/types/src/components/GridSheet/index.d.ts +2 -0
  72. package/dist/types/src/components/GridSheet/index.d.ts.map +1 -0
  73. package/dist/types/src/components/GridSheet/util.d.ts +15 -0
  74. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -0
  75. package/dist/types/src/components/RangeList/RangeList.d.ts +7 -0
  76. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -0
  77. package/dist/types/src/components/RangeList/index.d.ts +2 -0
  78. package/dist/types/src/components/RangeList/index.d.ts.map +1 -0
  79. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +9 -0
  80. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -0
  81. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +6 -0
  82. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/SheetContainer/index.d.ts +3 -0
  84. package/dist/types/src/components/SheetContainer/index.d.ts.map +1 -0
  85. package/dist/types/src/components/SheetContext/SheetContext.d.ts +28 -0
  86. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -0
  87. package/dist/types/src/components/SheetContext/index.d.ts +2 -0
  88. package/dist/types/src/components/SheetContext/index.d.ts.map +1 -0
  89. package/dist/types/src/components/Toolbar/Toolbar.d.ts +33 -9
  90. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  91. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +4 -32
  92. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +7 -4
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/compute-graph/compute-graph-registry.d.ts +34 -0
  96. package/dist/types/src/compute-graph/compute-graph-registry.d.ts.map +1 -0
  97. package/dist/types/src/compute-graph/compute-graph.d.ts +64 -0
  98. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -0
  99. package/dist/types/src/compute-graph/compute-graph.stories.d.ts +6 -0
  100. package/dist/types/src/compute-graph/compute-graph.stories.d.ts.map +1 -0
  101. package/dist/types/src/compute-graph/compute-graph.test.d.ts +2 -0
  102. package/dist/types/src/compute-graph/compute-graph.test.d.ts.map +1 -0
  103. package/dist/types/src/compute-graph/compute-node.d.ts +26 -0
  104. package/dist/types/src/compute-graph/compute-node.d.ts.map +1 -0
  105. package/dist/types/src/{components/ComputeGraph → compute-graph/functions}/async-function.d.ts +14 -5
  106. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -0
  107. package/dist/types/src/compute-graph/functions/edge-function.d.ts +21 -0
  108. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -0
  109. package/dist/types/src/{model/functions.d.ts → compute-graph/functions/function-defs.d.ts} +1 -1
  110. package/dist/types/src/compute-graph/functions/function-defs.d.ts.map +1 -0
  111. package/dist/types/src/compute-graph/functions/index.d.ts +4 -0
  112. package/dist/types/src/compute-graph/functions/index.d.ts.map +1 -0
  113. package/dist/types/src/compute-graph/hyperformula.test.d.ts +2 -0
  114. package/dist/types/src/compute-graph/hyperformula.test.d.ts.map +1 -0
  115. package/dist/types/src/compute-graph/index.d.ts +5 -0
  116. package/dist/types/src/compute-graph/index.d.ts.map +1 -0
  117. package/dist/types/src/compute-graph/testing/index.d.ts +3 -0
  118. package/dist/types/src/compute-graph/testing/index.d.ts.map +1 -0
  119. package/dist/types/src/compute-graph/testing/test-builder.d.ts +15 -0
  120. package/dist/types/src/compute-graph/testing/test-builder.d.ts.map +1 -0
  121. package/dist/types/src/compute-graph/testing/test-plugin.d.ts +36 -0
  122. package/dist/types/src/compute-graph/testing/test-plugin.d.ts.map +1 -0
  123. package/dist/types/src/compute-graph/util.d.ts +2 -0
  124. package/dist/types/src/compute-graph/util.d.ts.map +1 -0
  125. package/dist/types/src/defs/index.d.ts +4 -0
  126. package/dist/types/src/defs/index.d.ts.map +1 -0
  127. package/dist/types/src/defs/sheet-range-types.d.ts +13 -0
  128. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -0
  129. package/dist/types/src/defs/types.d.ts +28 -0
  130. package/dist/types/src/defs/types.d.ts.map +1 -0
  131. package/dist/types/src/defs/types.test.d.ts.map +1 -0
  132. package/dist/types/src/defs/util.d.ts +39 -0
  133. package/dist/types/src/defs/util.d.ts.map +1 -0
  134. package/dist/types/src/extensions/compute.d.ts +6 -0
  135. package/dist/types/src/extensions/compute.d.ts.map +1 -0
  136. package/dist/types/src/extensions/compute.stories.d.ts +21 -0
  137. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -0
  138. package/dist/types/src/extensions/editor/extension.d.ts +39 -0
  139. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -0
  140. package/dist/types/src/extensions/editor/extension.test.d.ts.map +1 -0
  141. package/dist/types/src/extensions/editor/index.d.ts +2 -0
  142. package/dist/types/src/extensions/editor/index.d.ts.map +1 -0
  143. package/dist/types/src/extensions/index.d.ts +3 -0
  144. package/dist/types/src/extensions/index.d.ts.map +1 -0
  145. package/dist/types/src/index.d.ts +1 -1
  146. package/dist/types/src/index.d.ts.map +1 -1
  147. package/dist/types/src/integrations/index.d.ts +2 -0
  148. package/dist/types/src/integrations/index.d.ts.map +1 -0
  149. package/dist/types/src/integrations/thread-ranges.d.ts +7 -0
  150. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -0
  151. package/dist/types/src/meta.d.ts +3 -9
  152. package/dist/types/src/meta.d.ts.map +1 -1
  153. package/dist/types/src/model/index.d.ts +2 -3
  154. package/dist/types/src/model/index.d.ts.map +1 -1
  155. package/dist/types/src/model/{model.d.ts → sheet-model.d.ts} +13 -67
  156. package/dist/types/src/model/sheet-model.d.ts.map +1 -0
  157. package/dist/types/src/model/sheet-model.test.d.ts +2 -0
  158. package/dist/types/src/model/sheet-model.test.d.ts.map +1 -0
  159. package/dist/types/src/model/useSheetModel.d.ts +8 -0
  160. package/dist/types/src/model/useSheetModel.d.ts.map +1 -0
  161. package/dist/types/src/sanity.test.d.ts +2 -0
  162. package/dist/types/src/sanity.test.d.ts.map +1 -0
  163. package/dist/types/src/serializer.d.ts +4 -0
  164. package/dist/types/src/serializer.d.ts.map +1 -0
  165. package/dist/types/src/testing/index.d.ts +2 -0
  166. package/dist/types/src/testing/index.d.ts.map +1 -0
  167. package/dist/types/src/testing/testing.d.ts +8 -0
  168. package/dist/types/src/testing/testing.d.ts.map +1 -0
  169. package/dist/types/src/translations.d.ts +27 -12
  170. package/dist/types/src/translations.d.ts.map +1 -1
  171. package/dist/types/src/types.d.ts +100 -41
  172. package/dist/types/src/types.d.ts.map +1 -1
  173. package/dist/vendor/hyperformula.mjs +37145 -0
  174. package/package.json +60 -61
  175. package/src/SheetPlugin.tsx +69 -78
  176. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +37 -0
  177. package/src/components/ComputeGraph/index.ts +1 -3
  178. package/src/components/FunctionEditor/FunctionEditor.tsx +45 -0
  179. package/src/components/FunctionEditor/index.ts +5 -0
  180. package/src/components/GridSheet/GridSheet.stories.tsx +46 -0
  181. package/src/components/GridSheet/GridSheet.tsx +297 -0
  182. package/src/components/{CellEditor/CellEditor.stories.tsx → GridSheet/SheetCellEditor.stories.tsx} +18 -15
  183. package/src/components/GridSheet/index.ts +5 -0
  184. package/src/components/GridSheet/util.ts +164 -0
  185. package/src/components/RangeList/RangeList.tsx +53 -0
  186. package/src/components/RangeList/index.ts +5 -0
  187. package/src/components/SheetContainer/SheetContainer.stories.tsx +43 -0
  188. package/src/components/SheetContainer/SheetContainer.tsx +33 -0
  189. package/src/components/SheetContainer/index.ts +7 -0
  190. package/src/components/SheetContext/SheetContext.tsx +127 -0
  191. package/src/components/SheetContext/index.ts +5 -0
  192. package/src/components/Toolbar/Toolbar.stories.tsx +9 -6
  193. package/src/components/Toolbar/Toolbar.tsx +245 -112
  194. package/src/components/index.ts +5 -3
  195. package/src/compute-graph/compute-graph-registry.ts +90 -0
  196. package/src/compute-graph/compute-graph.stories.tsx +97 -0
  197. package/src/compute-graph/compute-graph.test.ts +87 -0
  198. package/src/compute-graph/compute-graph.ts +245 -0
  199. package/src/compute-graph/compute-node.ts +62 -0
  200. package/src/{components/ComputeGraph → compute-graph/functions}/async-function.ts +25 -15
  201. package/src/{components/ComputeGraph → compute-graph/functions}/edge-function.ts +16 -14
  202. package/src/compute-graph/functions/index.ts +7 -0
  203. package/src/compute-graph/hyperformula.test.ts +14 -0
  204. package/src/compute-graph/index.ts +8 -0
  205. package/src/compute-graph/testing/index.ts +6 -0
  206. package/src/compute-graph/testing/test-builder.ts +54 -0
  207. package/src/{components/ComputeGraph/custom.ts → compute-graph/testing/test-plugin.ts} +44 -14
  208. package/src/compute-graph/util.ts +8 -0
  209. package/src/defs/index.ts +7 -0
  210. package/src/defs/sheet-range-types.ts +47 -0
  211. package/src/{model → defs}/types.test.ts +8 -9
  212. package/src/defs/types.ts +86 -0
  213. package/src/defs/util.ts +135 -0
  214. package/src/extensions/compute.stories.tsx +155 -0
  215. package/src/extensions/compute.ts +147 -0
  216. package/src/{components/CellEditor → extensions/editor}/extension.test.ts +4 -6
  217. package/src/{components/CellEditor → extensions/editor}/extension.ts +51 -27
  218. package/src/{components/CellEditor → extensions/editor}/index.ts +0 -1
  219. package/src/extensions/index.ts +6 -0
  220. package/src/index.ts +2 -2
  221. package/src/integrations/index.ts +5 -0
  222. package/src/integrations/thread-ranges.ts +101 -0
  223. package/src/meta.ts +14 -0
  224. package/src/model/index.ts +2 -3
  225. package/src/model/sheet-model.test.ts +57 -0
  226. package/src/model/sheet-model.ts +423 -0
  227. package/src/model/useSheetModel.ts +40 -0
  228. package/src/sanity.test.ts +40 -0
  229. package/src/serializer.ts +27 -0
  230. package/src/{components/Sheet → testing}/index.ts +1 -1
  231. package/src/testing/testing.tsx +68 -0
  232. package/src/translations.ts +19 -4
  233. package/src/types.ts +42 -47
  234. package/dist/lib/browser/SheetContainer-U4H5D34A.mjs +0 -1772
  235. package/dist/lib/browser/SheetContainer-U4H5D34A.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-APHOLYUB.mjs +0 -175
  237. package/dist/lib/browser/chunk-APHOLYUB.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-D5AGLXJP.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-FUAGSXA4.mjs +0 -82
  240. package/dist/lib/browser/chunk-FUAGSXA4.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-JRL5LGCE.mjs +0 -18
  242. package/dist/lib/browser/chunk-JRL5LGCE.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-NU4PBN33.mjs +0 -8
  244. package/dist/lib/browser/chunk-NU4PBN33.mjs.map +0 -7
  245. package/dist/lib/browser/testing.mjs +0 -92
  246. package/dist/lib/browser/testing.mjs.map +0 -7
  247. package/dist/lib/node/SheetContainer-AXQV3ZT5.cjs +0 -1765
  248. package/dist/lib/node/SheetContainer-AXQV3ZT5.cjs.map +0 -7
  249. package/dist/lib/node/chunk-5KKJ4NPP.cjs.map +0 -7
  250. package/dist/lib/node/chunk-BJ6ZD7MN.cjs +0 -51
  251. package/dist/lib/node/chunk-BJ6ZD7MN.cjs.map +0 -7
  252. package/dist/lib/node/chunk-CN3RPESU.cjs +0 -202
  253. package/dist/lib/node/chunk-CN3RPESU.cjs.map +0 -7
  254. package/dist/lib/node/chunk-DSYKOI4E.cjs.map +0 -7
  255. package/dist/lib/node/chunk-PYXHNAAK.cjs +0 -40
  256. package/dist/lib/node/chunk-PYXHNAAK.cjs.map +0 -7
  257. package/dist/lib/node/testing.cjs +0 -111
  258. package/dist/lib/node/testing.cjs.map +0 -7
  259. package/dist/types/src/components/CellEditor/CellEditor.d.ts +0 -14
  260. package/dist/types/src/components/CellEditor/CellEditor.d.ts.map +0 -1
  261. package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +0 -1
  262. package/dist/types/src/components/CellEditor/extension.d.ts +0 -19
  263. package/dist/types/src/components/CellEditor/extension.d.ts.map +0 -1
  264. package/dist/types/src/components/CellEditor/extension.test.d.ts.map +0 -1
  265. package/dist/types/src/components/CellEditor/index.d.ts +0 -3
  266. package/dist/types/src/components/CellEditor/index.d.ts.map +0 -1
  267. package/dist/types/src/components/ComputeGraph/async-function.d.ts.map +0 -1
  268. package/dist/types/src/components/ComputeGraph/custom.d.ts +0 -21
  269. package/dist/types/src/components/ComputeGraph/custom.d.ts.map +0 -1
  270. package/dist/types/src/components/ComputeGraph/edge-function.d.ts +0 -20
  271. package/dist/types/src/components/ComputeGraph/edge-function.d.ts.map +0 -1
  272. package/dist/types/src/components/ComputeGraph/graph-context.d.ts +0 -12
  273. package/dist/types/src/components/ComputeGraph/graph-context.d.ts.map +0 -1
  274. package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts +0 -2
  275. package/dist/types/src/components/ComputeGraph/graph.browser.test.d.ts.map +0 -1
  276. package/dist/types/src/components/ComputeGraph/graph.d.ts +0 -26
  277. package/dist/types/src/components/ComputeGraph/graph.d.ts.map +0 -1
  278. package/dist/types/src/components/Sheet/Sheet.d.ts +0 -55
  279. package/dist/types/src/components/Sheet/Sheet.d.ts.map +0 -1
  280. package/dist/types/src/components/Sheet/Sheet.stories.d.ts +0 -54
  281. package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +0 -1
  282. package/dist/types/src/components/Sheet/formatting.d.ts +0 -14
  283. package/dist/types/src/components/Sheet/formatting.d.ts.map +0 -1
  284. package/dist/types/src/components/Sheet/grid.d.ts +0 -52
  285. package/dist/types/src/components/Sheet/grid.d.ts.map +0 -1
  286. package/dist/types/src/components/Sheet/index.d.ts +0 -2
  287. package/dist/types/src/components/Sheet/index.d.ts.map +0 -1
  288. package/dist/types/src/components/Sheet/nav.d.ts +0 -29
  289. package/dist/types/src/components/Sheet/nav.d.ts.map +0 -1
  290. package/dist/types/src/components/Sheet/sheet-context.d.ts +0 -25
  291. package/dist/types/src/components/Sheet/sheet-context.d.ts.map +0 -1
  292. package/dist/types/src/components/Sheet/util.d.ts +0 -18
  293. package/dist/types/src/components/Sheet/util.d.ts.map +0 -1
  294. package/dist/types/src/components/SheetContainer.d.ts +0 -9
  295. package/dist/types/src/components/SheetContainer.d.ts.map +0 -1
  296. package/dist/types/src/components/Toolbar/common.d.ts +0 -20
  297. package/dist/types/src/components/Toolbar/common.d.ts.map +0 -1
  298. package/dist/types/src/model/functions.d.ts.map +0 -1
  299. package/dist/types/src/model/model.browser.test.d.ts +0 -2
  300. package/dist/types/src/model/model.browser.test.d.ts.map +0 -1
  301. package/dist/types/src/model/model.d.ts.map +0 -1
  302. package/dist/types/src/model/types.d.ts +0 -17
  303. package/dist/types/src/model/types.d.ts.map +0 -1
  304. package/dist/types/src/model/types.test.d.ts.map +0 -1
  305. package/dist/types/src/model/util.d.ts +0 -15
  306. package/dist/types/src/model/util.d.ts.map +0 -1
  307. package/dist/types/src/testing.d.ts +0 -9
  308. package/dist/types/src/testing.d.ts.map +0 -1
  309. package/src/components/CellEditor/CellEditor.tsx +0 -113
  310. package/src/components/ComputeGraph/graph-context.tsx +0 -50
  311. package/src/components/ComputeGraph/graph.browser.test.ts +0 -50
  312. package/src/components/ComputeGraph/graph.ts +0 -62
  313. package/src/components/Sheet/Sheet.stories.tsx +0 -287
  314. package/src/components/Sheet/Sheet.tsx +0 -1160
  315. package/src/components/Sheet/formatting.ts +0 -106
  316. package/src/components/Sheet/grid.ts +0 -191
  317. package/src/components/Sheet/nav.ts +0 -157
  318. package/src/components/Sheet/sheet-context.tsx +0 -150
  319. package/src/components/Sheet/util.ts +0 -56
  320. package/src/components/SheetContainer.tsx +0 -34
  321. package/src/components/Toolbar/common.tsx +0 -72
  322. package/src/meta.tsx +0 -18
  323. package/src/model/model.browser.test.ts +0 -100
  324. package/src/model/model.ts +0 -550
  325. package/src/model/types.ts +0 -71
  326. package/src/model/util.ts +0 -36
  327. package/src/testing.ts +0 -50
  328. /package/dist/types/src/{model → defs}/types.test.d.ts +0 -0
  329. /package/dist/types/src/{components/CellEditor → extensions/editor}/extension.test.d.ts +0 -0
  330. /package/src/{model/functions.ts → compute-graph/functions/function-defs.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/extensions/compute.ts", "../../../src/extensions/editor/extension.ts", "../../../src/components/SheetContext/SheetContext.tsx", "../../../src/model/sheet-model.ts", "../../../src/model/useSheetModel.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/index.ts", "../../../src/components/RangeList/RangeList.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '../../compute-graph';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type UnsubscribeCallback, debounce } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/react-ui-editor';\n\nimport { type ComputeGraph, type ComputeNode, createSheetName } from '../compute-graph';\nimport { type CellAddress } from '../defs';\nimport { type CellScalarValue } from '../types';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: UnsubscribeCallback;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView) {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\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 } 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 { singleValueFacet } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type FunctionDefinition } from '../../compute-graph';\nimport { RANGE_NOTATION } from '../../defs';\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 = singleValueFacet<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 '!-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 SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (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\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\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 case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\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 const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type ComputeGraph } from '../../compute-graph';\nimport { type CellAddress, type CellRange, type CompleteCellRange } from '../../defs';\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\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 cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n};\n\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nconst SheetProviderImpl = ({\n model,\n onInfo,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model'>>>) => {\n const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);\n\n const [cursor, setCursorInternal] = useState<CellAddress>();\n const [range, setRangeInternal] = useState<CellRange>();\n const [cursorFallbackRange, setCursorFallbackRange] = useState<CompleteCellRange>();\n const [activeRefs, setActiveRefs] = useState<GridContentProps['activeRefs']>('');\n\n const setCursor = useCallback(\n (nextCursor?: CellAddress) => {\n setCursorInternal(nextCursor);\n setCursorFallbackRange(\n range?.to ? (range as CompleteCellRange) : nextCursor ? { from: nextCursor!, to: nextCursor! } : undefined,\n );\n },\n [range],\n );\n const setRange = useCallback(\n (nextRange?: CellRange) => {\n setRangeInternal(nextRange);\n setCursorFallbackRange(\n nextRange?.to ? (nextRange as CompleteCellRange) : cursor ? { from: cursor!, to: cursor! } : undefined,\n );\n },\n [cursor],\n );\n\n return (\n <SheetContext.Provider\n value={{\n id,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n // TODO(burdon): Change to event.\n onInfo,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({ children, graph, sheet, readonly, onInfo }: PropsWithChildren<SheetProviderProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n\n return !model ? null : (\n <Grid.Root id={fullyQualifiedId(sheet)}>\n <SheetProviderImpl model={model} onInfo={onInfo}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type SimpleCellRange } from 'hyperformula/typings/AbsoluteCellRange';\nimport { type SimpleCellAddress } from 'hyperformula/typings/Cell';\nimport { type SimpleDate, type SimpleDateTime } from 'hyperformula/typings/DateTimeHelper';\n\nimport { Event } from '@dxos/async';\nimport { Resource } from '@dxos/context';\nimport { getTypename } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { FieldValueType } from '@dxos/schema';\n\nimport { DetailedCellError, ExportedCellChange } from '#hyperformula';\nimport { type ComputeGraph, type ComputeNode, type ComputeNodeEvent, createSheetName } from '../compute-graph';\nimport {\n addressFromA1Notation,\n addressFromIndex,\n addressToA1Notation,\n addressToIndex,\n type CellAddress,\n type CellRange,\n initialize,\n insertIndices,\n isFormula,\n MAX_COLUMNS,\n MAX_ROWS,\n ReadonlyException,\n} from '../defs';\nimport { type CellScalarValue, type CellValue, type SheetType } from '../types';\n\n// Map sheet types to system types.\nconst typeMap: Record<string, FieldValueType> = {\n BOOLEAN: FieldValueType.Boolean,\n NUMBER_RAW: FieldValueType.Number,\n NUMBER_PERCENT: FieldValueType.Percent,\n NUMBER_CURRENCY: FieldValueType.Currency,\n NUMBER_DATETIME: FieldValueType.DateTime,\n NUMBER_DATE: FieldValueType.Date,\n NUMBER_TIME: FieldValueType.Time,\n};\n\nconst getTopLeft = (range: CellRange): CellAddress => {\n const to = range.to ?? range.from;\n return { row: Math.min(range.from.row, to.row), col: Math.min(range.from.col, to.col) };\n};\n\nconst toSimpleCellAddress = (sheet: number, cell: CellAddress): SimpleCellAddress => ({\n sheet,\n row: cell.row,\n col: cell.col,\n});\n\nconst toModelRange = (sheet: number, range: CellRange): SimpleCellRange => ({\n start: toSimpleCellAddress(sheet, range.from),\n end: toSimpleCellAddress(sheet, range.to ?? range.from),\n});\n\nexport type SheetModelOptions = {\n readonly?: boolean;\n};\n\n/**\n * Spreadsheet data model.\n *\n * [ComputeGraphContext] > [SheetContext]:[SheetModel] > [Sheet.Root]\n */\n// TODO(burdon): Factor out commonality with ComputeNode. Factor out HF.\nexport class SheetModel extends Resource {\n public readonly id = `model-${PublicKey.random().truncate()}`;\n\n // Wraps compute node.\n public readonly update = new Event<ComputeNodeEvent>();\n\n private _node?: ComputeNode;\n\n constructor(\n private readonly _graph: ComputeGraph,\n private readonly _sheet: SheetType,\n private readonly _options: SheetModelOptions = {},\n ) {\n super();\n }\n\n get graph() {\n return this._graph;\n }\n\n get sheet() {\n return this._sheet;\n }\n\n get readonly() {\n return this._options.readonly;\n }\n\n get bounds() {\n return {\n rows: this._sheet.rows.length,\n columns: this._sheet.columns.length,\n };\n }\n\n /**\n * Initialize sheet and engine.\n */\n protected override async _open() {\n log('initialize', { id: this.id });\n initialize(this._sheet);\n\n // TODO(burdon): SheetModel should extend ComputeNode and be constructed via the graph.\n this._node = this._graph.getOrCreateNode(createSheetName({ type: getTypename(this._sheet)!, id: this._sheet.id }));\n await this._node.open();\n\n // Listen for model updates (e.g., async calculations).\n const unsubscribe = this._node.update.on((event) => this.update.emit(event));\n this._ctx.onDispose(unsubscribe);\n\n this.reset();\n }\n\n /**\n * Update engine.\n * NOTE: This resets the undo history.\n * @deprecated\n */\n reset() {\n invariant(this._node);\n this._node.graph.hf.clearSheet(this._node.sheetId);\n Object.entries(this._sheet.cells).forEach(([key, { value }]) => {\n invariant(this._node);\n const { col, row } = addressFromIndex(this._sheet, key);\n if (isFormula(value)) {\n value = this._graph.mapFormulaToNative(\n this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value)),\n );\n }\n\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row, col }, value);\n });\n }\n\n /**\n * Recalculate formulas.\n * NOTE: This resets the undo history.\n * https://hyperformula.handsontable.com/guide/volatile-functions.html#volatile-actions\n * @deprecated\n */\n // TODO(burdon): Remove.\n recalculate() {\n this._node?.graph.hf.rebuildAndRecalculate();\n }\n\n insertRows(i: number, n = 1) {\n insertIndices(this._sheet.rows, i, n, MAX_ROWS);\n this.reset();\n }\n\n insertColumns(i: number, n = 1) {\n insertIndices(this._sheet.columns, i, n, MAX_COLUMNS);\n this.reset();\n }\n\n //\n // Undoable actions.\n // TODO(burdon): Group undoable methods; consistently update hf/sheet.\n //\n\n /**\n * Clear range of values.\n */\n clear(range: CellRange) {\n invariant(this._node);\n const topLeft = getTopLeft(range);\n const values = this._iterRange(range, () => null);\n this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n cut(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));\n this._iterRange(range, (cell) => {\n const idx = addressToIndex(this._sheet, cell);\n delete this._sheet.cells[idx];\n });\n }\n\n copy(range: CellRange) {\n invariant(this._node);\n this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));\n }\n\n paste(cell: CellAddress) {\n invariant(this._node);\n if (!this._node.graph.hf.isClipboardEmpty()) {\n const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));\n for (const change of changes) {\n if (change instanceof ExportedCellChange) {\n const { address, newValue } = change;\n const idx = addressToIndex(this._sheet, { row: address.row, col: address.col });\n this._sheet.cells[idx] = { value: newValue };\n }\n }\n }\n }\n\n // TODO(burdon): Display undo/redo state.\n undo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToUndo()) {\n this._node.graph.hf.undo();\n // this.update.emit();\n }\n }\n\n redo() {\n invariant(this._node);\n if (this._node.graph.hf.isThereSomethingToRedo()) {\n this._node.graph.hf.redo();\n // this.update.emit();\n }\n }\n\n /**\n * Get value from sheet.\n */\n getCellValue(cell: CellAddress): CellScalarValue {\n const idx = addressToIndex(this._sheet, cell);\n return this._sheet.cells[idx]?.value ?? null;\n }\n\n /**\n * Get value as a string for editing.\n */\n getCellText(cell: CellAddress): string | undefined {\n const value = this.getCellValue(cell);\n if (value == null) {\n return undefined;\n }\n\n if (isFormula(value)) {\n return this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value));\n } else {\n return String(value);\n }\n }\n\n /**\n * Get array of raw values from sheet.\n */\n getCellValues(range: CellRange): CellScalarValue[][] {\n return this._iterRange(range, (cell) => this.getCellValue(cell));\n }\n\n /**\n * Gets the regular or computed value from the engine.\n */\n getValue(cell: CellAddress): CellScalarValue {\n // Applies rounding and post-processing.\n invariant(this._node);\n const value = this._node.graph.hf.getCellValue(toSimpleCellAddress(this._node.sheetId, cell));\n if (value instanceof DetailedCellError) {\n return value.toString();\n }\n\n return value;\n }\n\n /**\n * Get value type.\n */\n getValueType(cell: CellAddress): FieldValueType {\n invariant(this._node);\n const addr = toSimpleCellAddress(this._node.sheetId, cell);\n const type = this._node.graph.hf.getCellValueDetailedType(addr);\n return typeMap[type];\n }\n\n /**\n * Sets the value, updating the sheet and engine.\n */\n setValue(cell: CellAddress, value: CellScalarValue) {\n invariant(this._node);\n if (this._options.readonly) {\n throw new ReadonlyException();\n }\n\n // Reallocate if > current bounds.\n let refresh = false;\n if (cell.row >= this._sheet.rows.length) {\n insertIndices(this._sheet.rows, cell.row, 1, MAX_ROWS);\n refresh = true;\n }\n if (cell.col >= this._sheet.columns.length) {\n insertIndices(this._sheet.columns, cell.col, 1, MAX_COLUMNS);\n refresh = true;\n }\n\n if (refresh) {\n // TODO(burdon): Remove.\n this.reset();\n }\n\n // Insert into engine.\n this._node.graph.hf.setCellContents({ sheet: this._node.sheetId, row: cell.row, col: cell.col }, [\n [isFormula(value) ? this._graph.mapFormulaToNative(value) : value],\n ]);\n\n // Insert into sheet.\n const idx = addressToIndex(this._sheet, cell);\n if (value === undefined || value === null) {\n delete this._sheet.cells[idx];\n } else {\n if (isFormula(value)) {\n value = this._graph.mapFunctionBindingToId(this.mapFormulaRefsToIndices(value));\n }\n\n this._sheet.cells[idx] = { value };\n }\n }\n\n /**\n * Sets values from a simple map.\n */\n setValues(values: Record<string, CellValue>) {\n Object.entries(values).forEach(([key, { value }]) => {\n this.setValue(addressFromA1Notation(key), value);\n });\n }\n\n /**\n * Iterate range.\n */\n private _iterRange(range: CellRange, cb: (cell: CellAddress) => CellScalarValue | void): CellScalarValue[][] {\n const to = range.to ?? range.from;\n const rowRange = [Math.min(range.from.row, to.row), Math.max(range.from.row, to.row)];\n const columnRange = [Math.min(range.from.col, to.col), Math.max(range.from.col, to.col)];\n const rows: CellScalarValue[][] = [];\n for (let row = rowRange[0]; row <= rowRange[1]; row++) {\n const rowCells: CellScalarValue[] = [];\n for (let column = columnRange[0]; column <= columnRange[1]; column++) {\n const value = cb({ row, col: column });\n if (value !== undefined) {\n rowCells.push(value);\n }\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n }\n\n // TODO(burdon): Delete index.\n private _deleteIndices(indices: string[], i: number, n: number) {\n throw new Error('Not implemented');\n }\n\n // TODO(burdon): Move. Cannot use fractional without changing. Switch back to using unique IDs?\n private _moveIndices(indices: string[], i: number, j: number, n: number) {\n throw new Error('Not implemented');\n }\n\n //\n // Indices.\n //\n\n /**\n * Map from A1 notation to indices.\n */\n mapFormulaRefsToIndices(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {\n return addressToIndex(this._sheet, addressFromA1Notation(match));\n });\n }\n\n /**\n * Map from indices to A1 notation.\n */\n mapFormulaIndicesToRefs(formula: string): string {\n invariant(isFormula(formula));\n return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {\n return addressToA1Notation(addressFromIndex(this._sheet, idx));\n });\n }\n\n //\n // Values\n //\n\n /**\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#example\n * https://hyperformula.handsontable.com/api/interfaces/configparams.html#nulldate\n * NOTE: TODAY() is number of FULL days since nullDate. It will typically be -1 days from NOW().\n */\n toLocalDate(num: number): Date {\n const { year, month, day, hours, minutes, seconds } = this.toDateTime(num);\n return new Date(year, month - 1, day, hours, minutes, seconds);\n }\n\n toDateTime(num: number): SimpleDateTime {\n invariant(this._node);\n return this._node.graph.hf.numberToDateTime(num) as SimpleDateTime;\n }\n\n toDate(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToDate(num) as SimpleDate;\n }\n\n toTime(num: number): SimpleDate {\n invariant(this._node);\n return this._node.graph.hf.numberToTime(num) as SimpleDate;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ComputeGraph } from '../compute-graph';\nimport { SheetModel } from '../model';\nimport { type SheetType } from '../types';\n\nexport type UseSheetModelOptions = {\n readonly?: boolean;\n};\n\nexport const useSheetModel = (\n graph?: ComputeGraph,\n sheet?: SheetType,\n { readonly }: UseSheetModelOptions = {},\n): SheetModel | undefined => {\n const [model, setModel] = useState<SheetModel>();\n useEffect(() => {\n if (!graph || !sheet) {\n return;\n }\n\n let model: SheetModel | undefined;\n const t = setTimeout(async () => {\n model = new SheetModel(graph, sheet, { readonly });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [graph, sheet, readonly]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type EditorKeysProps,\n type GridContentProps,\n type DxGridPosition,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, dxGridCellIndexToSheetCellAddress, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from '../../defs';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = { frozenRowsStart: { size: 32, readonly: true }, grid: { size: 32, resizeable: true } };\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setEditing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } =\n useSheetContext();\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const rangeController = useRef<RangeController>();\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell && cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<NonNullable<EditorKeysProps['onClose']> | NonNullable<EditorKeysProps['onNav']>>(\n (value, { key, shift }) => {\n if (value !== undefined) {\n model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);\n }\n setEditing(null);\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback(\n (value?: string) => {\n if (value !== undefined) {\n model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);\n }\n setEditing(null);\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n return cursorFallbackRange && model.clear(cursorFallbackRange);\n }\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'x':\n case 'X':\n event.preventDefault();\n return cursorFallbackRange && model.cut(cursorFallbackRange);\n case 'c':\n case 'C':\n event.preventDefault();\n return cursorFallbackRange && model.copy(cursorFallbackRange);\n case 'v':\n case 'V':\n event.preventDefault();\n return cursor && model.paste(cursor);\n case 'z':\n event.preventDefault();\n return event.shiftKey ? model.redo() : model.undo();\n case 'Z':\n case 'y':\n event.preventDefault();\n return model.redo();\n }\n }\n },\n [cursorFallbackRange, model, cursor],\n );\n\n const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);\n const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell && cell.plane.startsWith('frozen')) {\n event.preventDefault();\n contextMenuAnchorRef.current = event.target as HTMLButtonElement;\n setContextMenuOpen(cell);\n }\n }, []);\n\n const handleAxisMenuAction = useCallback(\n (operation: 'add-before' | 'add-after' | 'remove') => {\n switch (operation) {\n case 'add-before':\n case 'add-after':\n model[contextMenuAxis === 'col' ? 'insertColumns' : 'insertRows'](\n contextMenuOpen![contextMenuAxis] + (operation === 'add-before' ? 0 : 1),\n 1,\n );\n break;\n case 'remove':\n // console.warn('[model does not implement]');\n }\n },\n [contextMenuAxis, contextMenuOpen, model],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extension = useMemo(\n () => [\n editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: string) => {\n const cell = dxGridCellIndexToSheetCellAddress(index);\n return model.getCellText(cell);\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <>\n <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLUMNS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n rowDefault={sheetRowDefault}\n columnDefault={sheetColDefault}\n frozen={frozen}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n overscroll='inline'\n className='[--dx-grid-base:var(--surface-bg)]'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('add-before')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => handleAxisMenuAction('add-after')}>\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item disabled onClick={() => handleAxisMenuAction('remove')}>\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { parseValue, cellClassesForFieldType } from '@dxos/react-ui-data';\nimport {\n type GridContentProps,\n type DxGridElement,\n type DxGridAxisMeta,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPlaneCells,\n type DxGridCellValue,\n colToA1Notation,\n rowToA1Notation,\n commentedClassName,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type CellAddress, inRange, cellClassNameForRange, rangeFromIndex } from '../../defs';\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\n\nexport const dxGridCellIndexToSheetCellAddress = (index: string): CellAddress => {\n const [colStr, rowStr] = index.split(',');\n return {\n col: parseInt(colStr),\n row: parseInt(rowStr),\n };\n};\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread?.anchor && parseThreadAnchorAsCellRange(thread!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n const type = model.getValueType(address);\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue(type, rawValue),\n className: mx(cellClassesForFieldType(type), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\n\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end !pie-1',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({ value: colToA1Notation(col), resizeHandle: 'col' });\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n return () => cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { type IntentResolver, LayoutAction, useIntentDispatcher, useIntentResolver } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { type CellAddress, type CompleteCellRange, inRange } from '../defs';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const handleScrollIntoView: IntentResolver = useCallback(\n ({ action, data }) => {\n switch (action) {\n case LayoutAction.SCROLL_INTO_VIEW: {\n if (!data?.id || data?.cursor === undefined || data?.id !== fullyQualifiedId(model.sheet)) {\n return;\n }\n setActiveRefs(data.thread);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(data.cursor);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n }\n }\n },\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, handleScrollIntoView);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const dispatch = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find(({ anchor }) => {\n if (anchor) {\n const range = parseThreadAnchorAsCellRange(anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch([\n { action: 'dxos.org/plugin/thread/action/select', data: { current: fullyQualifiedId(closestThread) } },\n ]);\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { rangeFromIndex, rangeToA1Notation } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAyE;AAEzE,mBAAsB;AAEtB,yBAA8B;ACJ9B,sBAA2B;AAC3B,mBAQO;AACP,kBAA+D;AAE/D,mBAAmD;AACnD,uBAA0B;AAC1B,6BAA6C;ACd7C,0BAQO;AACP,IAAAA,mBAAkE;AAElE,IAAAC,eAAqE;AAErE,uBAAqB;AACrB,yCAA4B;AAE5B,IAAAC,0BAAiC;AACjC,4BAAmB;ACjBnB,IAAAC,gBAAgG;AAEhG,IAAAC,oBAA0B;AAC1B,kBAAiC;AACjC,2BAMO;ACNP,IAAAC,gBAAsB;AACtB,qBAAyB;AACzB,yBAA4B;AAC5B,IAAAD,oBAA0B;AAC1B,kBAA0B;AAC1B,iBAAoB;AACpB,oBAA+B;AAE/B,0BAAsD;ACZtD,IAAAD,gBAAoC;ACApC,IAAAA,gBASO;AAEP,sBAAmD;AACnD,gCAA6B;AAC7B,IAAAG,wBASO;ACtBP,IAAAH,gBAAoC;AAEpC,IAAAI,eAAoD;AACpD,2BAAoD;AACpD,IAAAD,wBAWO;AACP,IAAAE,yBAAmB;AChBnB,IAAAL,gBAAgD;AAEhD,2BAA0F;AAC1F,IAAAE,gBAAyB;AACzB,IAAAE,eAAiC;ACJjC,IAAAJ,gBAAqB;ACArB,IAAAA,gBAAmC;AAEnC,IAAAM,sBAAkB;AAClB,IAAAC,mBAA+B;AAC/B,2BAAqB;AACrB,IAAAF,yBAA2B;AVUpB,IAAMG,sBAAsBC,gDAAmDC,MAAAA;AAE/E,IAAMC,8BAA8B,CAAC,EAAEC,UAAUC,SAAQ,MAA8C;AAC5G,SAAO,6BAAAC,QAAA,cAACN,oBAAoBO,UAAQ;IAACC,OAAO;MAAEJ;IAAS;KAAIC,QAAAA;AAC7D;AAEO,IAAMI,kBAAkB,CAACC,UAAAA;AAC9B,QAAM,EAAEN,SAAQ,QAAKO,yBAAWX,mBAAAA,SAAwBY,oBAAM,IAAIC,MAAM,6BAAA,CAAA;AACxE,QAAM,CAACC,KAAAA,QAASC,kCAAc,YAAA;AAC5B,QAAIL,OAAO;AACT,YAAMI,SAAQV,SAASY,iBAAiBN,KAAAA;AACxC,YAAMI,OAAMG,KAAI;AAChB,aAAOH;IACT;EACF,GAAG;IAACJ;IAAON;GAAS;AAEpB,SAAOU;AACT;ACTA,IAAMI,uBAAuBC,yBAAYC,OAAM;AAExC,IAAMC,wBAAoBC,yCAAAA;ACGjC,IAAMC,kBAAkBC,gCAAeJ,OAAO;;EAE5C;IACEK,KAAKC,sBAAKC;IACVC,OAAO;EACT;;EAEA;IACEH,KAAKC,sBAAKG;IACVD,OAAO;EACT;;EAEA;IACEH,KAAKC,sBAAKI;IACVF,OAAO;EACT;EACA;IACEH,KAAKC,sBAAKK;IACVH,OAAO;EACT;EACA;IACEH,KAAKC,sBAAKM;IACVJ,OAAO;EACT;;EAEA;IACEH,KAAKC,sBAAKO;IACVL,OAAO;EACT;CACD;AAED,IAAMM,oBAAgBZ,wBAAAA,kBAAAA;AAaf,IAAMa,iBAAiB,CAAC,EAAEC,YAAY,CAAA,EAAE,MAAyB;AACtE,QAAM,EAAEC,WAAWC,SAAQ,QAAKC,gDAAY;IAAEC,OAAO;IAASC,kBAAkB;EAAI,CAAA;AAEpF,QAAMC,mBAAmB,CAACf,SAAAA;AACxB,UAAM,EAAEgB,UAAU,UAAUC,aAAaC,OAAM,IAAKT,UAAUU,KAAK,CAACtC,UAAUA,MAAMmB,SAASA,IAAAA,KAAS,CAAC;AAEvG,WAAO;MACLgB;MACAI,OAAOpB;MACPqB,MAAM,MAAA;AACJ,YAAI,CAACJ,eAAe,CAACC,QAAQ;AAC3B,iBAAO;QACT;AAGA,cAAMI,OAAOC,SAASC,cAAc,KAAA;AACpCF,aAAKG,YAAY;AAEjB,cAAMC,QAAQH,SAASC,cAAc,IAAA;AACrCE,cAAMC,YAAY3B;AAClB0B,cAAMD,YAAY;AAClBH,aAAKM,YAAYF,KAAAA;AAEjB,YAAIT,aAAa;AACf,gBAAMI,OAAOE,SAASC,cAAc,GAAA;AACpCH,eAAKM,YAAYV;AACjBI,eAAKI,YAAY;AACjBH,eAAKM,YAAYP,IAAAA;QACnB;AAEA,YAAIH,QAAQ;AACV,gBAAMW,SAASN,SAASC,cAAc,KAAA;AACtCK,iBAAOF,YAAYT;AACnBW,iBAAOJ,YAAY;AACnBH,eAAKM,YAAYC,MAAAA;QACnB;AAEA,eAAOP;MACT;MACAQ,OAAO,CAACC,MAAMC,YAAYC,MAAMC,OAAAA;AAC9B,cAAMC,eAAeD,OAAOH,KAAKK,MAAMC,IAAIC,SAAQ,EAAGC;AACtDR,aAAKS,SACHT,KAAKK,MAAMK,OAAO;UAChBC,SAAS;YACPT;YACAC;YACAS,QAAQX,WAAWZ,SAASe,eAAe,OAAO;UACpD;UACAS,WAAW;YACTC,QAAQZ,OAAOD,WAAWZ,MAAMmB,SAAS;UAC3C;QACF,CAAA,CAAA;MAEJ;IACF;EACF;AAEA,SAAO;IACL7B;IACAH,cAAcuC,GAAGnC,QAAAA;IACjBA,SAASoC,KAAKD,GAAG;MACfE,cAAc,CAACC,YAAAA;AACb,YAAIA,QAAQb,MAAMC,IAAIC,SAAQ,EAAG,CAAA,MAAO,KAAK;AAC3C,iBAAO;QACT;AACA,cAAMY,QAAQD,QAAQE,YAAY,KAAA;AAClC,YAAI,CAACD,SAASA,MAAMjB,SAASiB,MAAMhB,IAAI;AACrC,iBAAO;QACT;AAEA,cAAMkB,OAAOF,MAAME,KAAKC,YAAW;AACnC,YAAI,CAACJ,QAAQK,YAAYJ,MAAME,KAAKb,SAAS,GAAG;AAC9C,iBAAO;QACT;AAEA,eAAO;UACLN,MAAMiB,MAAMjB;UACZsB,SACE9C,WAAW+C,OAAO,CAAC,EAAExD,KAAI,MAAOA,KAAKyD,WAAWL,IAAAA,CAAAA,EAAOM,IAAI,CAAC,EAAE1D,KAAI,MAAOe,iBAAiBf,IAAAA,CAAAA,KAAU,CAAA;QACxG;MACF;IACF,CAAA;QAEA2D,qCAAmB/D,eAAAA;QACnBgE,oCAAe;MACbC,aAAa;MACbC,eAAe;MACfC,kBAAkB;;MAElBC,aAAa;MACbC,OAAO;MACPC,cAAc,UACZC,0BACE,2EACA,8CACA,kBAAA;IAEN,CAAA;IACAC,oBAAOtB,GAAG;MACR;QACEuB,KAAK;QACLC,KAAK,CAACvC,SAAAA;AACJ,qBAAOwC,sCAAiBxC,KAAKK,KAAK,MAAM,eAAWoC,sCAAiBzC,IAAAA,QAAQ0C,qCAAgB1C,IAAAA;QAC9F;MACF;KACD;;AAeL;AAwBO,IAAM2C,iBAAiB,CAAC,EAAEC,QAAQC,cAAa,MAAyB;AAC7E,MAAI7C;AACJ,MAAI8C;AAGJ,QAAMC,WAA4B;IAChCC,UAAU,CAACC,UAAAA;AACT,UAAIH,aAAa;AACf9C,aAAKS,SACHT,KAAKK,MAAMK,OAAO;UAChBC,SAAS;YAAE,GAAGmC;YAAalC,QAAQqC,MAAM1C,SAAQ;UAAG;UACpDM,WAAW;YAAEC,QAAQgC,YAAY5C,OAAO+C,MAAMzC;UAAO;QACvD,CAAA,CAAA;MAEJ;AAEAR,WAAKkD,MAAK;IACZ;EACF;AAEA,SAAOC,aAAAA,WAAWC,UAChB,MAAA;IACEC,YAAYC,OAAmB;AAC7BtD,aAAOsD;AACPV,eAASG,QAAAA;IACX;IAEArC,OAAOV,OAAkB;AACvB,YAAM,EAAEc,OAAM,IAAKd,MAAKK,MAAMQ,UAAU0C,OAAO,CAAA;AAG/CT,oBAActG;AACd,YAAMoC,WAAWoB,MAAKK,MAAMmD,MAAMhF,aAAAA;AAClC,YAAM,EAAEiF,QAAO,IAAK7E,SAAS8E,OAAOC,MAAM3D,MAAKK,MAAMC,IAAIC,SAAQ,CAAA;AACjEqD,gBAAUH,SAAS,CAAC,EAAEI,MAAM3D,MAAMC,GAAE,MAAE;AACpC,YAAID,QAAQY,UAAUX,MAAMW,QAAQ;AAClC,kBAAQ+C,KAAK5F,MAAI;YACf,KAAK;AAEH6E,4BAAc;gBAAE5C,MAAMC;gBAAIA;cAAG;AAC7B;YAEF,KAAK;AAEH2C,4BAAc;gBAAE5C;gBAAMC,IAAID;cAAK;AAC/B;YAEF,KAAK;YACL,KAAK;AACH4C,4BAAc;gBAAE5C;gBAAMC;cAAG;AACzB,qBAAO;UACX;QACF;AAEA,eAAO;MACT,CAAA;AAGA,UAAI,CAAC2C,eAAe9C,MAAKK,MAAMC,IAAIC,SAAQ,EAAG,CAAA,MAAO,KAAK;AACxD,cAAMuD,MAAM9D,MAAKK,MAAMC,IAAIyD,YAAY,CAAA;AACvC,YAAIC,qCAAeC,KAAKH,GAAAA,GAAM;AAC5BhB,wBAAc;YAAE5C,MAAM;YAAGC,IAAI2D,IAAItD,SAAS;UAAE;QAC9C;MACF;AAEAqC,sBAAgB;QACdC,aAAaA,cAAc9C,MAAKK,MAAMC,IAAIyD,YAAYjB,YAAY5C,MAAM4C,YAAY3C,EAAE,IAAI3D;MAC5F,CAAA;IACF;EACF,CAAA;AAEJ;AAKA,IAAMoH,YAAY,CAACM,MAAkBC,aAAAA;AACnC,MAAIA,SAASD,IAAAA,GAAO;AAClB,WAAO;EACT;AAEA,WAASE,QAAQF,KAAKG,YAAYD,UAAU,MAAMA,QAAQA,MAAME,aAAa;AAC3E,QAAIV,UAAUQ,OAAOD,QAAAA,GAAW;AAC9B,aAAO;IACT;EACF;AAEA,SAAO;AACT;;AEjRA,IAAMI,UAA0C;EAC9CC,SAASC,6BAAeC;EACxBC,YAAYF,6BAAeG;EAC3BC,gBAAgBJ,6BAAeK;EAC/BC,iBAAiBN,6BAAeO;EAChCC,iBAAiBR,6BAAeS;EAChCC,aAAaV,6BAAeW;EAC5BC,aAAaZ,6BAAea;AAC9B;AAEA,IAAMC,aAAa,CAACtC,UAAAA;AAClB,QAAM9C,KAAK8C,MAAM9C,MAAM8C,MAAM/C;AAC7B,SAAO;IAAEsF,KAAKC,KAAKC,IAAIzC,MAAM/C,KAAKsF,KAAKrF,GAAGqF,GAAG;IAAGG,KAAKF,KAAKC,IAAIzC,MAAM/C,KAAKyF,KAAKxF,GAAGwF,GAAG;EAAE;AACxF;AAEA,IAAMC,sBAAsB,CAACC,OAAeC,UAA0C;EACpFD;EACAL,KAAKM,KAAKN;EACVG,KAAKG,KAAKH;AACZ;AAEA,IAAMI,eAAe,CAACF,OAAe5C,WAAuC;EAC1E+C,OAAOJ,oBAAoBC,OAAO5C,MAAM/C,IAAI;EAC5C+F,KAAKL,oBAAoBC,OAAO5C,MAAM9C,MAAM8C,MAAM/C,IAAI;AACxD;AAYO,IAAMgG,aAAN,cAAyBC,wBAAAA;EAQ9B9C,YACmB+C,QACAC,QACAC,WAA8B,CAAC,GAChD;AACA,UAAK;SAJYF,SAAAA;SACAC,SAAAA;SACAC,WAAAA;SAVHC,KAAK,SAASC,sBAAUC,OAAM,EAAGC,SAAQ,CAAA;SAGzChG,SAAS,IAAIiG,oBAAAA;EAU7B;EAEA,IAAIvJ,QAAQ;AACV,WAAO,KAAKgJ;EACd;EAEA,IAAIP,QAAQ;AACV,WAAO,KAAKQ;EACd;EAEA,IAAIO,WAAW;AACb,WAAO,KAAKN,SAASM;EACvB;EAEA,IAAIC,SAAS;AACX,WAAO;MACLC,MAAM,KAAKT,OAAOS,KAAKtG;MACvBuG,SAAS,KAAKV,OAAOU,QAAQvG;IAC/B;EACF;;;;EAKA,MAAyBwG,QAAQ;AAC/BC,wBAAI,cAAc;MAAEV,IAAI,KAAKA;IAAG,GAAA;;;;;;AAChCW,0CAAW,KAAKb,MAAM;AAGtB,SAAKc,QAAQ,KAAKf,OAAOgB,oBAAgBC,uCAAgB;MAAExD,UAAMyD,gCAAY,KAAKjB,MAAM;MAAIE,IAAI,KAAKF,OAAOE;IAAG,CAAA,CAAA;AAC/G,UAAM,KAAKY,MAAM5J,KAAI;AAGrB,UAAMgK,cAAc,KAAKJ,MAAMzG,OAAO8G,GAAG,CAACC,UAAU,KAAK/G,OAAOgH,KAAKD,KAAAA,CAAAA;AACrE,SAAKE,KAAKC,UAAUL,WAAAA;AAEpB,SAAKM,MAAK;EACZ;;;;;;EAOAA,QAAQ;AACNC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,SAAKA,MAAM/J,MAAM2K,GAAGC,WAAW,KAAKb,MAAMc,OAAO;AACjDC,WAAOC,QAAQ,KAAK9B,OAAO+B,KAAK,EAAEC,QAAQ,CAAC,CAAC/F,KAAK,EAAExF,MAAK,CAAE,MAAC;AACzDgL,4BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,YAAM,EAAExB,KAAKH,IAAG,QAAK8C,wCAAiB,KAAKjC,QAAQ/D,GAAAA;AACnD,cAAIiG,iCAAUzL,KAAAA,GAAQ;AACpBA,gBAAQ,KAAKsJ,OAAOoC,mBAClB,KAAKpC,OAAOqC,yBAAyB,KAAKC,wBAAwB5L,KAAAA,CAAAA,CAAAA;MAEtE;AAEA,WAAKqK,MAAM/J,MAAM2K,GAAGY,gBAAgB;QAAE9C,OAAO,KAAKsB,MAAMc;QAASzC;QAAKG;MAAI,GAAG7I,KAAAA;IAC/E,CAAA;EACF;;;;;;;;EASA8L,cAAc;AACZ,SAAKzB,OAAO/J,MAAM2K,GAAGc,sBAAAA;EACvB;EAEAC,WAAWC,GAAWC,IAAI,GAAG;AAC3BC,6CAAc,KAAK5C,OAAOS,MAAMiC,GAAGC,GAAGE,8BAAAA;AACtC,SAAKrB,MAAK;EACZ;EAEAsB,cAAcJ,GAAWC,IAAI,GAAG;AAC9BC,6CAAc,KAAK5C,OAAOU,SAASgC,GAAGC,GAAGI,iCAAAA;AACzC,SAAKvB,MAAK;EACZ;;;;;;;;EAUAwB,MAAMpG,OAAkB;AACtB6E,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,UAAMmC,UAAU/D,WAAWtC,KAAAA;AAC3B,UAAMsG,SAAS,KAAKC,WAAWvG,OAAO,MAAM,IAAA;AAC5C,SAAKkE,MAAM/J,MAAM2K,GAAGY,gBAAgB/C,oBAAoB,KAAKuB,MAAMc,SAASqB,OAAAA,GAAUC,MAAAA;AACtF,SAAKC,WAAWvG,OAAO,CAAC6C,SAAAA;AACtB,YAAM2D,UAAMC,sCAAe,KAAKrD,QAAQP,IAAAA;AACxC,aAAO,KAAKO,OAAO+B,MAAMqB,GAAAA;IAC3B,CAAA;EACF;EAEAE,IAAI1G,OAAkB;AACpB6E,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,SAAKA,MAAM/J,MAAM2K,GAAG4B,IAAI5D,aAAa,KAAKoB,MAAMc,SAAShF,KAAAA,CAAAA;AACzD,SAAKuG,WAAWvG,OAAO,CAAC6C,SAAAA;AACtB,YAAM2D,UAAMC,sCAAe,KAAKrD,QAAQP,IAAAA;AACxC,aAAO,KAAKO,OAAO+B,MAAMqB,GAAAA;IAC3B,CAAA;EACF;EAEAG,KAAK3G,OAAkB;AACrB6E,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,SAAKA,MAAM/J,MAAM2K,GAAG6B,KAAK7D,aAAa,KAAKoB,MAAMc,SAAShF,KAAAA,CAAAA;EAC5D;EAEA4G,MAAM/D,MAAmB;AACvBgC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,QAAI,CAAC,KAAKA,MAAM/J,MAAM2K,GAAG+B,iBAAgB,GAAI;AAC3C,YAAMnJ,UAAU,KAAKwG,MAAM/J,MAAM2K,GAAG8B,MAAMjE,oBAAoB,KAAKuB,MAAMc,SAASnC,IAAAA,CAAAA;AAClF,iBAAWiE,UAAUpJ,SAAS;AAC5B,YAAIoJ,kBAAkBC,wCAAoB;AACxC,gBAAM,EAAEC,SAASC,SAAQ,IAAKH;AAC9B,gBAAMN,UAAMC,sCAAe,KAAKrD,QAAQ;YAAEb,KAAKyE,QAAQzE;YAAKG,KAAKsE,QAAQtE;UAAI,CAAA;AAC7E,eAAKU,OAAO+B,MAAMqB,GAAAA,IAAO;YAAE3M,OAAOoN;UAAS;QAC7C;MACF;IACF;EACF;;EAGAC,OAAO;AACLrC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,QAAI,KAAKA,MAAM/J,MAAM2K,GAAGqC,uBAAsB,GAAI;AAChD,WAAKjD,MAAM/J,MAAM2K,GAAGoC,KAAI;IAE1B;EACF;EAEAE,OAAO;AACLvC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,QAAI,KAAKA,MAAM/J,MAAM2K,GAAGuC,uBAAsB,GAAI;AAChD,WAAKnD,MAAM/J,MAAM2K,GAAGsC,KAAI;IAE1B;EACF;;;;EAKAE,aAAazE,MAAoC;AAC/C,UAAM2D,UAAMC,sCAAe,KAAKrD,QAAQP,IAAAA;AACxC,WAAO,KAAKO,OAAO+B,MAAMqB,GAAAA,GAAM3M,SAAS;EAC1C;;;;EAKA0N,YAAY1E,MAAuC;AACjD,UAAMhJ,QAAQ,KAAKyN,aAAazE,IAAAA;AAChC,QAAIhJ,SAAS,MAAM;AACjB,aAAON;IACT;AAEA,YAAI+L,iCAAUzL,KAAAA,GAAQ;AACpB,aAAO,KAAKsJ,OAAOqC,yBAAyB,KAAKC,wBAAwB5L,KAAAA,CAAAA;IAC3E,OAAO;AACL,aAAO2N,OAAO3N,KAAAA;IAChB;EACF;;;;EAKA4N,cAAczH,OAAuC;AACnD,WAAO,KAAKuG,WAAWvG,OAAO,CAAC6C,SAAS,KAAKyE,aAAazE,IAAAA,CAAAA;EAC5D;;;;EAKA6E,SAAS7E,MAAoC;AAE3CgC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,UAAMrK,QAAQ,KAAKqK,MAAM/J,MAAM2K,GAAGwC,aAAa3E,oBAAoB,KAAKuB,MAAMc,SAASnC,IAAAA,CAAAA;AACvF,QAAIhJ,iBAAiB8N,uCAAmB;AACtC,aAAO9N,MAAMyD,SAAQ;IACvB;AAEA,WAAOzD;EACT;;;;EAKA+N,aAAa/E,MAAmC;AAC9CgC,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,UAAM2D,OAAOlF,oBAAoB,KAAKuB,MAAMc,SAASnC,IAAAA;AACrD,UAAMjC,OAAO,KAAKsD,MAAM/J,MAAM2K,GAAGgD,yBAAyBD,IAAAA;AAC1D,WAAOvG,QAAQV,IAAAA;EACjB;;;;EAKAmH,SAASlF,MAAmBhJ,OAAwB;AAClDgL,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,QAAI,KAAKb,SAASM,UAAU;AAC1B,YAAM,IAAIqE,wCAAAA;IACZ;AAGA,QAAIC,UAAU;AACd,QAAIpF,KAAKN,OAAO,KAAKa,OAAOS,KAAKtG,QAAQ;AACvCyI,+CAAc,KAAK5C,OAAOS,MAAMhB,KAAKN,KAAK,GAAG0D,8BAAAA;AAC7CgC,gBAAU;IACZ;AACA,QAAIpF,KAAKH,OAAO,KAAKU,OAAOU,QAAQvG,QAAQ;AAC1CyI,+CAAc,KAAK5C,OAAOU,SAASjB,KAAKH,KAAK,GAAGyD,iCAAAA;AAChD8B,gBAAU;IACZ;AAEA,QAAIA,SAAS;AAEX,WAAKrD,MAAK;IACZ;AAGA,SAAKV,MAAM/J,MAAM2K,GAAGY,gBAAgB;MAAE9C,OAAO,KAAKsB,MAAMc;MAASzC,KAAKM,KAAKN;MAAKG,KAAKG,KAAKH;IAAI,GAAG;MAC/F;YAAC4C,iCAAUzL,KAAAA,IAAS,KAAKsJ,OAAOoC,mBAAmB1L,KAAAA,IAASA;;KAC7D;AAGD,UAAM2M,UAAMC,sCAAe,KAAKrD,QAAQP,IAAAA;AACxC,QAAIhJ,UAAUN,UAAaM,UAAU,MAAM;AACzC,aAAO,KAAKuJ,OAAO+B,MAAMqB,GAAAA;IAC3B,OAAO;AACL,cAAIlB,iCAAUzL,KAAAA,GAAQ;AACpBA,gBAAQ,KAAKsJ,OAAO+E,uBAAuB,KAAKC,wBAAwBtO,KAAAA,CAAAA;MAC1E;AAEA,WAAKuJ,OAAO+B,MAAMqB,GAAAA,IAAO;QAAE3M;MAAM;IACnC;EACF;;;;EAKAuO,UAAU9B,QAAmC;AAC3CrB,WAAOC,QAAQoB,MAAAA,EAAQlB,QAAQ,CAAC,CAAC/F,KAAK,EAAExF,MAAK,CAAE,MAAC;AAC9C,WAAKkO,aAASM,6CAAsBhJ,GAAAA,GAAMxF,KAAAA;IAC5C,CAAA;EACF;;;;EAKQ0M,WAAWvG,OAAkBsI,IAAwE;AAC3G,UAAMpL,KAAK8C,MAAM9C,MAAM8C,MAAM/C;AAC7B,UAAMsL,WAAW;MAAC/F,KAAKC,IAAIzC,MAAM/C,KAAKsF,KAAKrF,GAAGqF,GAAG;MAAGC,KAAKgG,IAAIxI,MAAM/C,KAAKsF,KAAKrF,GAAGqF,GAAG;;AACnF,UAAMkG,cAAc;MAACjG,KAAKC,IAAIzC,MAAM/C,KAAKyF,KAAKxF,GAAGwF,GAAG;MAAGF,KAAKgG,IAAIxI,MAAM/C,KAAKyF,KAAKxF,GAAGwF,GAAG;;AACtF,UAAMmB,OAA4B,CAAA;AAClC,aAAStB,MAAMgG,SAAS,CAAA,GAAIhG,OAAOgG,SAAS,CAAA,GAAIhG,OAAO;AACrD,YAAMmG,WAA8B,CAAA;AACpC,eAASC,SAASF,YAAY,CAAA,GAAIE,UAAUF,YAAY,CAAA,GAAIE,UAAU;AACpE,cAAM9O,QAAQyO,GAAG;UAAE/F;UAAKG,KAAKiG;QAAO,CAAA;AACpC,YAAI9O,UAAUN,QAAW;AACvBmP,mBAASE,KAAK/O,KAAAA;QAChB;MACF;AAEAgK,WAAK+E,KAAKF,QAAAA;IACZ;AAEA,WAAO7E;EACT;;EAGQgF,eAAeC,SAAmBhD,GAAWC,GAAW;AAC9D,UAAM,IAAI7L,MAAM,iBAAA;EAClB;;EAGQ6O,aAAaD,SAAmBhD,GAAWkD,GAAWjD,GAAW;AACvE,UAAM,IAAI7L,MAAM,iBAAA;EAClB;;;;;;;EASAiO,wBAAwBc,SAAyB;AAC/CpE,0BAAAA,eAAUS,iCAAU2D,OAAAA,GAAAA,QAAAA;;;;;;;;;AACpB,WAAOA,QAAQC,QAAQ,wBAAwB,CAAChL,UAAAA;AAC9C,iBAAOuI,sCAAe,KAAKrD,YAAQiF,6CAAsBnK,KAAAA,CAAAA;IAC3D,CAAA;EACF;;;;EAKAuH,wBAAwBwD,SAAyB;AAC/CpE,0BAAAA,eAAUS,iCAAU2D,OAAAA,GAAAA,QAAAA;;;;;;;;;AACpB,WAAOA,QAAQC,QAAQ,kCAAkC,CAAC1C,QAAAA;AACxD,iBAAO2C,+CAAoB9D,wCAAiB,KAAKjC,QAAQoD,GAAAA,CAAAA;IAC3D,CAAA;EACF;;;;;;;;;EAWA4C,YAAYC,KAAmB;AAC7B,UAAM,EAAEC,MAAMC,OAAOC,KAAKC,OAAOC,SAASC,QAAO,IAAK,KAAKC,WAAWP,GAAAA;AACtE,WAAO,IAAIlH,KAAKmH,MAAMC,QAAQ,GAAGC,KAAKC,OAAOC,SAASC,OAAAA;EACxD;EAEAC,WAAWP,KAA6B;AACtCxE,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,WAAO,KAAKA,MAAM/J,MAAM2K,GAAG+E,iBAAiBR,GAAAA;EAC9C;EAEAS,OAAOT,KAAyB;AAC9BxE,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,WAAO,KAAKA,MAAM/J,MAAM2K,GAAGiF,aAAaV,GAAAA;EAC1C;EAEAW,OAAOX,KAAyB;AAC9BxE,0BAAAA,WAAU,KAAKX,OAAK,QAAA;;;;;;;;;AACpB,WAAO,KAAKA,MAAM/J,MAAM2K,GAAGmF,aAAaZ,GAAAA;EAC1C;AACF;ACxZO,IAAMa,gBAAgB,CAC3B/P,OACAyI,OACA,EAAEe,SAAQ,IAA2B,CAAC,MAAC;AAEvC,QAAM,CAACwG,OAAOC,QAAAA,QAAYC,wBAAAA;AAC1BC,+BAAU,MAAA;AACR,QAAI,CAACnQ,SAAS,CAACyI,OAAO;AACpB;IACF;AAEA,QAAIuH;AACJ,UAAMI,IAAIC,WAAW,YAAA;AACnBL,eAAQ,IAAIlH,WAAW9I,OAAOyI,OAAO;QAAEe;MAAS,CAAA;AAChD,YAAMwG,OAAM7P,KAAI;AAChB8P,eAASD,MAAAA;IACX,CAAA;AAEA,WAAO,MAAA;AACLM,mBAAaF,CAAAA;AACb,WAAKJ,QAAOO,MAAAA;IACd;EACF,GAAG;IAACvQ;IAAOyI;IAAOe;GAAS;AAE3B,SAAOwG;AACT;;AFQA,IAAMQ,eAAerR,kCAAAA,eAA6CC,MAAAA;AAE3D,IAAMqR,kBAAkB,MAAA;AAC7B,QAAM3M,cAAUjE,cAAAA,YAAW2Q,YAAAA;AAC3B9F,wBAAAA,WAAU5G,SAAAA,QAAAA;;;;;;;;;AACV,SAAOA;AACT;AAEA,IAAM4M,oBAAoB,CAAC,EACzBV,OACAW,QACApR,UACAqR,YAAW,MACqE;AAChF,QAAM,EAAEzH,IAAI0H,SAASC,WAAU,QAAKC,qCAAe,iBAAiBH,WAAAA;AAEpE,QAAM,CAACI,QAAQC,iBAAAA,QAAqBf,cAAAA,UAAAA;AACpC,QAAM,CAACrK,OAAOqL,gBAAAA,QAAoBhB,cAAAA,UAAAA;AAClC,QAAM,CAACiB,qBAAqBC,sBAAAA,QAA0BlB,cAAAA,UAAAA;AACtD,QAAM,CAACmB,YAAYC,aAAAA,QAAiBpB,cAAAA,UAAyC,EAAA;AAE7E,QAAMqB,gBAAYC,2BAChB,CAACC,eAAAA;AACCR,sBAAkBQ,UAAAA;AAClBL,2BACEvL,OAAO9C,KAAM8C,QAA8B4L,aAAa;MAAE3O,MAAM2O;MAAa1O,IAAI0O;IAAY,IAAIrS,MAAAA;EAErG,GACA;IAACyG;GAAM;AAET,QAAMD,eAAW4L,2BACf,CAACE,cAAAA;AACCR,qBAAiBQ,SAAAA;AACjBN,2BACEM,WAAW3O,KAAM2O,YAAkCV,SAAS;MAAElO,MAAMkO;MAASjO,IAAIiO;IAAQ,IAAI5R,MAAAA;EAEjG,GACA;IAAC4R;GAAO;AAGV,SACExR,8BAAAA,QAAA,cAACgR,aAAa/Q,UAAQ;IACpBC,OAAO;MACLyJ;MACA6G;MACAa;MACAC;MACAE;MACAO;MACA1L;MACAD;MACAuL;MACAE;MACAC;;MAEAX;IACF;KAECpR,QAAAA;AAGP;AAQO,IAAMoS,gBAAgB,CAAC,EAAEpS,UAAUS,OAAOyI,OAAOe,UAAUmH,OAAM,MAAyC;AAC/G,QAAMX,QAAQD,cAAc/P,OAAOyI,OAAO;IAAEe;EAAS,CAAA;AAErD,SAAO,CAACwG,QAAQ,OACdxQ,8BAAAA,QAAA,cAACoS,0BAAKC,MAAI;IAAC1I,QAAI2I,8BAAiBrJ,KAAAA;KAC9BjJ,8BAAAA,QAAA,cAACkR,mBAAAA;IAAkBV;IAAcW;KAC9BpR,QAAAA,CAAAA;AAIT;AO3GO,IAAMwS,YAAY,CAAC,EAAEtJ,MAAK,MAAkB;AACjD,QAAM,EAAE2H,EAAC,QAAK4B,iCAAeC,kCAAAA;AAE7B,QAAMC,oBAAoB,CAACrM,UAAAA;EAAkB;AAC7C,QAAMsM,wBAAoBX,cAAAA,aACxB,CAAC3L,UAAAA;AACC,UAAMuM,QAAQ3J,MAAMtC,OAAOkM,UAAU,CAACC,eAAeA,eAAezM,KAAAA;AACpE4C,UAAMtC,OAAOoM,OAAOH,OAAO,CAAA;EAC7B,GACA;IAAC3J;GAAM;AAET,SACEjJ,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,MACEA,8BAAAA,QAAA,cAACgT,MAAAA;IAAGlQ,WAAU;KAA6B8N,EAAE,oBAAA,CAAA,GAC7C5Q,8BAAAA,QAAA,cAACiT,0BAAKZ,MAAI;IAAQa,OAAOjK,MAAMtC;IAAQwM,QAAQC,sBAAEC,GAAGC,2BAAAA;KACjD,CAAC,EAAEJ,OAAOvM,OAAM,MACfA,OAAO5B,IAAI,CAACsB,OAAO8F,MACjBnM,8BAAAA,QAAA,cAACiT,0BAAKM,MAAI;IAAC7N,KAAKyG;IAAGqH,MAAMnN;IAAOoN,YAAY;MAAC;MAAOC;;KAClD1T,8BAAAA,QAAA,cAACiT,0BAAKU,gBAAc,IAAA,GACpB3T,8BAAAA,QAAA,cAACiT,0BAAKW,WAAS;IAACC,SAAS,MAAMnB,kBAAkBrM,KAAAA;KAC9CuK,EAAE,eAAe;IAChBkD,cAAUC,6CAAkBC,sCAAe/K,OAAO5C,MAAMA,KAAK,CAAA;IAC7DX,KAAKkL,EAAE,aAAavK,MAAMX,GAAG,QAAQ;IACrCxF,OAAO0Q,EAAE,eAAevK,MAAMnG,KAAK,QAAQ;EAC7C,CAAA,CAAA,GAEFF,8BAAAA,QAAA,cAACiT,0BAAKgB,kBAAgB;IAACJ,SAAS,MAAMlB,kBAAkBtM,KAAAA;;AAOtE;ADzCO,IAAM6N,qBAAiBC,oBAAK,MAAM,OAAO,+BAAA,CAAA;ADIzC,IAAMC,kCAAkC,CAAC/N,UAAAA;AAC9C,SAAO,GAAGA,MAAM/C,KAAKyF,GAAG,IAAI1C,MAAM/C,KAAKsF,GAAG,IAAIvC,MAAM9C,GAAGwF,GAAG,IAAI1C,MAAM9C,GAAGqF,GAAG;AAC5E;AAEO,IAAMyL,+BAA+B,CAAC7C,WAAAA;AAC3C,QAAM8C,SAAS9C,OAAO+C,MAAM,GAAA;AAC5B,MAAID,OAAO1Q,WAAW,GAAG;AACvB,WAAO;EACT,OAAO;AACL,UAAM,CAAC4Q,SAASC,SAASC,OAAOC,KAAAA,IAASL;AACzC,WAAO;MACLhR,MAAM;QAAEyF,KAAK6L,SAASJ,OAAAA;QAAU5L,KAAKgM,SAASH,OAAAA;MAAS;MACvDlR,IAAI;QAAEwF,KAAK6L,SAASF,KAAAA;QAAQ9L,KAAKgM,SAASD,KAAAA;MAAO;IACnD;EACF;AACF;AAEO,IAAME,wCAAwC,CAACC,SAAAA;AACpD,QAAM,EAAEtE,OAAOsB,cAAa,IAAKb,gBAAAA;AACjC,QAAM8D,2BAAuC/C,cAAAA,aAC3C,CAAC,EAAEgD,QAAQ5Q,KAAI,MAAE;AACf,YAAQ4Q,QAAAA;MACN,KAAKC,kCAAaC,kBAAkB;AAClC,YAAI,CAAC9Q,MAAMuF,MAAMvF,MAAMoN,WAAW5R,UAAawE,MAAMuF,WAAO2I,aAAAA,kBAAiB9B,MAAMvH,KAAK,GAAG;AACzF;QACF;AACA6I,sBAAc1N,KAAK+Q,MAAM;AAEzB,cAAM9O,QAAQgO,6BAA6BjQ,KAAKoN,MAAM;AACtDnL,iBAASyO,MAAMM,SAAS;UAAE,GAAG/O,MAAM9C;UAAI8R,OAAO;QAAO,GAAG,IAAA;MAC1D;IACF;EACF,GACA;IAAC7E,MAAMvH;IAAO6I;GAAc;AAG9BwD,8CAAkB7C,oCAAcsC,oBAAAA;AAClC;AAEO,IAAMQ,6BAA6B,MAAA;AACxC,QAAM,EAAE/E,OAAOgB,OAAM,IAAKP,gBAAAA;AAC1B,QAAMpN,eAAW2R,0CAAAA;AAEjB,QAAMC,cAAUC,uBACd,MAAMlF,MAAMvH,MAAMwM,SAAS5Q,OAAO,CAACsQ,WAAiD,CAAC,CAACA,MAAAA,KAAW,CAAA,GACjG;;IAEEQ,KAAKC,UAAUpF,MAAMvH,MAAMwM,OAAO;GACnC;AAGH,QAAMI,0BAAsB7D,cAAAA,aAC1B,CAAC8D,gBAAAA;AACC,QAAI,CAACA,eAAe,CAACL,SAAS;AAC5B;IACF;AAEA,UAAMM,gBAAgBN,SAASjT,KAAK,CAAC,EAAE0B,OAAM,MAAE;AAC7C,UAAIA,QAAQ;AACV,cAAMmC,QAAQgO,6BAA6BnQ,MAAAA;AAC3C,eAAOmC,YAAQ2P,+BAAQ3P,OAAOyP,WAAAA,IAAe;MAC/C,OAAO;AACL,eAAO;MACT;IACF,CAAA;AAEA,QAAIC,eAAe;AACjB,WAAKlS,SAAS;QACZ;UAAEmR,QAAQ;UAAwC5Q,MAAM;YAAE6R,aAAS3D,aAAAA,kBAAiByD,aAAAA;UAAe;QAAE;OACtG;IACH;EACF,GACA;IAAClS;IAAU4R;GAAQ;AAGrB,QAAMS,gBAAYR,uBAAQ,MAAA;AACxB,eAAOS,cAAAA,UAAS,CAACC,eAA+BC,sBAAsB,MAAMR,oBAAoBO,UAAAA,CAAAA,GAAc,EAAA;EAChH,GAAG;IAACP;GAAoB;AAExBlF,oBAAAA,WAAU,MAAA;AACR,QAAI,CAACa,QAAQ;AACX;IACF;AACA0E,cAAU1E,MAAAA;EACZ,GAAG;IAACA;IAAQ0E;GAAU;AACxB;AD1EO,IAAMI,oCAAoC,CAAC1D,UAAAA;AAChD,QAAM,CAAC2D,QAAQC,MAAAA,IAAU5D,MAAM2B,MAAM,GAAA;AACrC,SAAO;IACLxL,KAAK6L,SAAS2B,MAAAA;IACd3N,KAAKgM,SAAS4B,MAAAA;EAChB;AACF;AAEA,IAAMC,sBAAsB,CAACjG,UAAAA;AAC3B,SAAOA,MAAMvH,MAAMkB,QAAQuM,OACzB,CAACC,KAAqBC,UAAUC,iBAAAA;AAC9B,QAAIrG,MAAMvH,MAAM6N,WAAWF,QAAAA,KAAapG,MAAMvH,MAAM6N,WAAWF,QAAAA,EAAUG,MAAM;AAC7EJ,UAAI7B,KAAK+B,YAAAA,IAAgB;QAAEE,MAAMvG,MAAMvH,MAAM6N,WAAWF,QAAAA,EAAUG;QAAMC,YAAY;MAAK;IAC3F;AACA,WAAOL;EACT,GACA;IAAE7B,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAMmC,mBAAmB,CAACzG,UAAAA;AACxB,SAAOA,MAAMvH,MAAMiB,KAAKwM,OACtB,CAACC,KAAqBO,OAAOL,iBAAAA;AAC3B,QAAIrG,MAAMvH,MAAMkO,QAAQD,KAAAA,KAAU1G,MAAMvH,MAAMkO,QAAQD,KAAAA,EAAOH,MAAM;AACjEJ,UAAI7B,KAAK+B,YAAAA,IAAgB;QAAEE,MAAMvG,MAAMvH,MAAMkO,QAAQD,KAAAA,EAAOH;QAAMC,YAAY;MAAK;IACrF;AACA,WAAOL;EACT,GACA;IAAE7B,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAMsC,mBAAmB,CAAC5G,OAAmBzH,KAAaH,QAAAA;AACxD,QAAMyE,UAAU;IAAEtE;IAAKH;EAAI;AAC3B,QAAMyO,WAAW7G,MAAMzC,SAASV,OAAAA;AAChC,QAAM1G,SAAS6J,MAAMvH,MAAMtC,QAAQ9B,OAAO,CAAC,EAAEwB,MAAK,UAAO2P,mCAAQhC,sCAAexD,MAAMvH,OAAO5C,KAAAA,GAAQgH,OAAAA,CAAAA;AACrG,QAAMiK,aAAa9G,MAAMvH,MAAMwM,SAC3B5Q,OAAO,CAACsQ,WAAAA;AACR,UAAM9O,QAAQ8O,QAAQjR,UAAUmQ,6BAA6Bc,OAAQjR,MAAM;AAC3E,WAAOiR,UAAU9O,YAAQ2P,+BAAQ3P,OAAOgH,OAAAA,IAAW;EACrD,CAAA,EACCtI,IAAI,CAACoQ,eAAW7C,aAAAA,kBAAiB6C,MAAAA,CAAAA,EACjCoC,KAAK,GAAA;AACR,QAAMtQ,OAAOuJ,MAAMvC,aAAaZ,OAAAA;AAChC,QAAMoG,aAAa9M,QAAQ5B,IAAIyS,2CAAAA,EAAuBC,QAAAA;AAEtD,SAAO;IACLvX,WAAOwX,iCAAWzQ,MAAMoQ,QAAAA;IACxBvU,eAAW0C,uBAAAA,QAAGmS,8CAAwB1Q,IAAAA,GAAOqQ,cAAcM,0CAAoBnE,UAAAA;IAC/EoE,UAAUP;EACZ;AACF;AAEA,IAAMQ,iBAAiB,CAACtH,UAAAA;AAEtB,QAAMuH,kBAAoC,CAAC;AAC3C,SAAO,CAACC,eAAAA;AACN;SAAIC,MAAMD,WAAW3O,IAAIN,MAAMiP,WAAW5O,MAAML,GAAG;MAAG0C,QAAQ,CAACyM,GAAGC,OAAAA;AAChE,aAAO;WAAIF,MAAMD,WAAW3O,IAAIT,MAAMoP,WAAW5O,MAAMR,GAAG;QAAG6C,QAAQ,CAACyM,IAAGE,OAAAA;AACvE,cAAMrP,MAAMiP,WAAW5O,MAAML,MAAMoP;AACnC,cAAMvP,MAAMoP,WAAW5O,MAAMR,MAAMwP;AACnCL,wBAAgB,GAAGhP,GAAAA,IAAOH,GAAAA,EAAK,IAAIwO,iBAAiB5G,OAAOzH,KAAKH,GAAAA;MAClE,CAAA;IACF,CAAA;AACA,WAAOmP;EACT;AACF;AAEO,IAAMM,eAAe,CAACzP,SAAiB;EAC5C1I,WAAOoY,uCAAgB1P,GAAAA;EACvB9F,WAAW;EACXyV,cAAc;AAChB;AAEO,IAAMC,eAAe,CAACzP,SAAiB;EAAE7I,WAAOuY,uCAAgB1P,GAAAA;EAAMwP,cAAc;AAAM;AAEjG,IAAMG,aAAa,CAAClI,UAAAA;AAClB,QAAMmI,eAAeb,eAAetH,KAAAA;AACpC,SAAO,CAACwH,YAA8B3C,UAAAA;AACpC,YAAQA,OAAAA;MACN,KAAK;AACH,eAAOsD,aAAaX,UAAAA;MACtB,KAAK;AACH,eAAO;aAAIC,MAAMD,WAAW3O,IAAIT,MAAMoP,WAAW5O,MAAMR,GAAG;UAAG8N,OAAO,CAACC,KAAKuB,GAAGE,OAAAA;AAC3E,gBAAMQ,IAAIZ,WAAW5O,MAAMR,MAAMwP;AACjCzB,cAAI,KAAKiC,CAAAA,EAAG,IAAIP,aAAaO,CAAAA;AAC7B,iBAAOjC;QACT,GAAG,CAAC,CAAA;MACN,KAAK;AACH,eAAO;aAAIsB,MAAMD,WAAW3O,IAAIN,MAAMiP,WAAW5O,MAAML,GAAG;UAAG2N,OAAO,CAACC,KAAKuB,GAAGC,OAAAA;AAC3E,gBAAMU,IAAIb,WAAW5O,MAAML,MAAMoP;AACjCxB,cAAI,GAAGkC,CAAAA,IAAK,IAAIL,aAAaK,CAAAA;AAC7B,iBAAOlC;QACT,GAAG,CAAC,CAAA;MACN;AACE,eAAO,CAAC;IACZ;EACF;AACF;AAEO,IAAMmC,2BAA2B,CACtCC,QACAvI,UAAAA;AAEA,QAAM,CAACrG,SAAS6O,UAAAA,QAActI,cAAAA,UAAyB+F,oBAAoBjG,KAAAA,CAAAA;AAC3E,QAAM,CAACtG,MAAM+O,OAAAA,QAAWvI,cAAAA,UAAyB+F,oBAAoBjG,KAAAA,CAAAA;AAErEG,oBAAAA,WAAU,MAAA;AACR,UAAMuI,oBAAgBC,gCAAkB3I,MAAMvH,OAAO;MAAC;KAAQ;AAC9D,QAAI8P,QAAQ;AACVA,aAAOK,WAAWV,WAAWlI,KAAAA;IAC/B;AACA,UAAM6I,oBAAoB,MAAA;AACxBN,cAAQO,cAAc,cAAA;IACxB;AACAJ,kBAAcK,OAAOC,YAAY,UAAUH,iBAAAA;AAC3C,WAAO,MAAMH,cAAcK,OAAOE,eAAe,UAAUJ,iBAAAA;EAC7D,GAAG;IAAC7I;IAAOuI;GAAO;AAElBpI,oBAAAA,WAAU,MAAA;AACR,UAAM+I,yBAAqBP,gCAAkB3I,MAAMvH,OAAO;MAAC;KAAa;AACxE,UAAM0Q,sBAAkBR,gCAAkB3I,MAAMvH,OAAO;MAAC;KAAU;AAClE,UAAM2Q,yBAAyB,MAAA;AAC7BZ,iBAAWvC,oBAAoBjG,KAAAA,CAAAA;IACjC;AACA,UAAMqJ,sBAAsB,MAAA;AAC1BZ,cAAQhC,iBAAiBzG,KAAAA,CAAAA;IAC3B;AACAkJ,uBAAmBH,OAAOC,YAAY,UAAUI,sBAAAA;AAChDD,oBAAgBJ,OAAOC,YAAY,UAAUK,mBAAAA;AAC7C,WAAO,MAAA;AACLH,yBAAmBH,OAAOE,eAAe,UAAUG,sBAAAA;AACnDD,sBAAgBJ,OAAOE,eAAe,UAAUI,mBAAAA;IAClD;EACF,GAAG;IAACrJ;GAAM;AAEV,SAAO;IAAErG;IAASD;EAAK;AACzB;ADhIA,IAAM4P,gBAAgC;EAAEzE,OAAO;EAAQtM,KAAK;EAAGH,KAAK;AAAE;AAEtE,IAAMmR,eAAe;EACnBjF,MAAM,CAAC;EACPkF,iBAAiB;OAAI/B,MAAM,EAAA;IAAKvB,OAAO,CAACC,KAAKuB,GAAG/L,MAAAA;AAC9CwK,QAAI,KAAKxK,CAAAA,EAAG,IAAIkM,aAAalM,CAAAA;AAC7B,WAAOwK;EACT,GAAG,CAAC,CAAA;EACJsD,iBAAiB;OAAIhC,MAAM,EAAA;IAAKvB,OAAO,CAACC,KAAKuB,GAAG/L,MAAAA;AAC9CwK,QAAI,GAAGxK,CAAAA,IAAK,IAAIqM,aAAarM,CAAAA;AAC7B,WAAOwK;EACT,GAAG,CAAC,CAAA;AACN;AAEA,IAAMuD,SAAS;EACbF,iBAAiB;EACjBC,iBAAiB;AACnB;AAEA,IAAME,kBAAkB;EAAEF,iBAAiB;IAAElD,MAAM;IAAI/M,UAAU;EAAK;EAAG8K,MAAM;IAAEiC,MAAM;IAAIC,YAAY;EAAK;AAAE;AAC9G,IAAMoD,kBAAkB;EAAEJ,iBAAiB;IAAEjD,MAAM;IAAI/M,UAAU;EAAK;EAAG8K,MAAM;IAAEiC,MAAM;IAAKC,YAAY;EAAK;AAAE;AAExG,IAAMqD,YAAY,MAAA;AACvB,QAAM,EAAEzJ,EAAC,QAAK4B,gBAAAA,gBAAeC,kCAAAA;AAC7B,QAAM,EAAE9I,IAAI6G,OAAOa,SAASC,YAAYS,WAAW3L,UAAUoL,QAAQG,qBAAqBE,WAAU,IAClGZ,gBAAAA;AAEF,QAAM,CAAC8H,QAAQuB,SAAAA,QAAa5J,cAAAA,UAA+B,IAAA;AAC3D,QAAM6J,sBAAkBC,sBAAAA;AACxB,QAAM,EAAEC,aAAY,QAAKC,wCAAa/Q,EAAAA;AAEtC,QAAMgR,kBAAc3I,cAAAA,aAClB,CAACnH,UAAAA;AACC,QAAI,CAACwG,SAAS;AACZ,YAAMnI,WAAO0R,mCAAY/P,MAAMgQ,MAAM;AACrC,UAAI3R,QAAQA,KAAKmM,UAAU,QAAQ;AACjCtD,kBAAU;UAAEhJ,KAAKG,KAAKH;UAAKH,KAAKM,KAAKN;QAAI,CAAA;MAC3C;IACF;EACF,GACA;IAACyI;GAAQ;AAIX,QAAMyJ,kBAAc9I,cAAAA,aAClB,CAAC9R,OAAO,EAAEwF,KAAKqV,MAAK,MAAE;AACpB,QAAI7a,UAAUN,QAAW;AACvB4Q,YAAMpC,SAASkI,kCAAkCjF,QAASuB,KAAK,GAAG1S,KAAAA;IACpE;AACAoR,eAAW,IAAA;AACX,UAAM0J,OAAO;MAAC;MAAS;MAAW;MAAaC,SAASvV,GAAAA,IACpD,QACA;MAAC;MAAO;MAAa;MAAcuV,SAASvV,GAAAA,IAC1C,QACA9F;AACN,UAAMsb,QAAQxV,IAAIZ,WAAW,OAAA,IAAY;MAAC;MAAW;MAAamW,SAASvV,GAAAA,IAAO,KAAK,IAAKqV,QAAQ,KAAK;AACzGhC,YAAQoC,QAAQH,MAAME,KAAAA;EACxB,GACA;IAAC1K;IAAOa;IAAS0H;GAAO;AAG1B,QAAMqC,iBAAapJ,cAAAA,aACjB,CAAC9R,UAAAA;AACC,QAAIA,UAAUN,QAAW;AACvB4Q,YAAMpC,SAASkI,kCAAkCjF,QAASuB,KAAK,GAAG1S,KAAAA;IACpE;AACAoR,eAAW,IAAA;EACb,GACA;IAACd;IAAOa;GAAQ;AAGlB,QAAMgK,uBAAmBrJ,cAAAA,aACvB,CAAC,EAAEgJ,MAAMjE,MAAMnE,OAAOiE,aAAY,MAAE;AAClC,QAAImE,SAAS,OAAO;AAClB,YAAM9D,QAAQ1G,MAAMvH,MAAMiB,KAAK0K,SAASiC,YAAAA,CAAAA;AACxCrG,YAAMvH,MAAMkO,QAAQD,KAAAA,MAAW,CAAC;AAChC1G,YAAMvH,MAAMkO,QAAQD,KAAAA,EAAOH,OAAOA;IACpC,OAAO;AACL,YAAMH,WAAWpG,MAAMvH,MAAMkB,QAAQyK,SAASiC,YAAAA,CAAAA;AAC9CrG,YAAMvH,MAAM6N,WAAWF,QAAAA,MAAc,CAAC;AACtCpG,YAAMvH,MAAM6N,WAAWF,QAAAA,EAAUG,OAAOA;IAC1C;EACF,GACA;IAACvG;GAAM;AAGT,QAAM8K,mBAAetJ,cAAAA,aACnB,CAAC,EAAEuJ,QAAQC,QAAQC,QAAQC,OAAM,MAAE;AACjC,UAAMrV,QAAmB;MAAE/C,MAAM;QAAEyF,KAAKwS;QAAQ3S,KAAK6S;MAAO;IAAE;AAC9D,QAAIF,WAAWC,UAAUC,WAAWC,QAAQ;AAC1CrV,YAAM9C,KAAK;QAAEwF,KAAKyS;QAAQ5S,KAAK8S;MAAO;IACxC;AACA,QAAIrK,SAAS;AAEXkJ,sBAAgBtE,SAAS7P,aAAS2N,yCAAkB1N,KAAAA,CAAAA;IACtD,OAAO;AAELD,eAASC,MAAM9C,KAAK8C,QAAQzG,MAAAA;IAC9B;EACF,GACA;IAACyR;GAAQ;AAEX,QAAMsK,kBAAc3J,cAAAA,aAClB,CAACnH,UAAAA;AACC,QAAI,CAAC4P,cAAc;AACjB5P,YAAM+Q,gBAAe;IACvB;EACF,GACA;IAACnB;GAAa;AAGhB,QAAMoB,oBAAgB7J,cAAAA,aACpB,CAACnH,UAAAA;AACC,YAAQA,MAAMnF,KAAG;MACf,KAAK;MACL,KAAK;AACHmF,cAAMiR,eAAc;AACpB,eAAOnK,uBAAuBnB,MAAM/D,MAAMkF,mBAAAA;IAC9C;AACA,QAAI9G,MAAMkR,WAAWlR,MAAMmR,SAAS;AAClC,cAAQnR,MAAMnF,KAAG;QACf,KAAK;QACL,KAAK;AACHmF,gBAAMiR,eAAc;AACpB,iBAAOnK,uBAAuBnB,MAAMzD,IAAI4E,mBAAAA;QAC1C,KAAK;QACL,KAAK;AACH9G,gBAAMiR,eAAc;AACpB,iBAAOnK,uBAAuBnB,MAAMxD,KAAK2E,mBAAAA;QAC3C,KAAK;QACL,KAAK;AACH9G,gBAAMiR,eAAc;AACpB,iBAAOtK,UAAUhB,MAAMvD,MAAMuE,MAAAA;QAC/B,KAAK;AACH3G,gBAAMiR,eAAc;AACpB,iBAAOjR,MAAMoR,WAAWzL,MAAM/C,KAAI,IAAK+C,MAAMjD,KAAI;QACnD,KAAK;QACL,KAAK;AACH1C,gBAAMiR,eAAc;AACpB,iBAAOtL,MAAM/C,KAAI;MACrB;IACF;EACF,GACA;IAACkE;IAAqBnB;IAAOgB;GAAO;AAGtC,QAAM0K,2BAAuB1B,sBAAiC,IAAA;AAC9D,QAAM,CAAC2B,iBAAiBC,kBAAAA,QAAsB1L,cAAAA,UAAgC,IAAA;AAC9E,QAAM2L,kBAAkBF,iBAAiB9G,MAAMvQ,WAAW,YAAA,IAAgB,QAAQ;AAElF,QAAMwX,wBAAoBtK,cAAAA,aAAY,CAACnH,UAAAA;AACrC,UAAM3B,WAAO0R,mCAAY/P,MAAMgQ,MAAM;AACrC,QAAI3R,QAAQA,KAAKmM,MAAMvQ,WAAW,QAAA,GAAW;AAC3C+F,YAAMiR,eAAc;AACpBI,2BAAqBjG,UAAUpL,MAAMgQ;AACrCuB,yBAAmBlT,IAAAA;IACrB;EACF,GAAG,CAAA,CAAE;AAEL,QAAMqT,2BAAuBvK,cAAAA,aAC3B,CAACwK,cAAAA;AACC,YAAQA,WAAAA;MACN,KAAK;MACL,KAAK;AACHhM,cAAM6L,oBAAoB,QAAQ,kBAAkB,YAAA,EAClDF,gBAAiBE,eAAAA,KAAoBG,cAAc,eAAe,IAAI,IACtE,CAAA;AAEF;MACF,KAAK;IAEP;EACF,GACA;IAACH;IAAiBF;IAAiB3L;GAAM;AAG3C,QAAM,EAAErG,SAASD,KAAI,IAAK4O,yBAAyBC,QAAQvI,KAAAA;AAE3D,QAAMzO,gBAAY2T,cAAAA,SAChB,MAAM;QACJ+G,kCAAW;MAAEC,SAAS5B;MAAa,GAAIzJ,SAASsL,kBAAkB;QAAEC,OAAO9B;MAAY;IAAG,CAAA;IAC1FjZ,eAAe;MAAEC,WAAW0O,MAAMhQ,MAAMqc,aAAY;IAAG,CAAA;IACvD9W,eAAe;MACbC,QAAQ,CAAC8W,OAAQvC,gBAAgBtE,UAAU6G;MAC3C7W,eAAe,CAACxC,UAAAA;AACd,YAAIsV,QAAQ;AAEVA,iBAAOgE,OAAO,OAAOtZ,MAAMyC,gBAAgB,cAAc,SAAS;QACpE;MACF;IACF,CAAA;KAEF;IAACsK;IAAOsK;IAAazJ;GAAQ;AAG/B,QAAM2L,qBAAiBhL,cAAAA,aACrB,CAACY,UAAAA;AACC,UAAM1J,OAAOoN,kCAAkC1D,KAAAA;AAC/C,WAAOpC,MAAM5C,YAAY1E,IAAAA;EAC3B,GACA;IAACsH;GAAM;AAGTqE,wCAAsCkE,MAAAA;AACtCxD,6BAAAA;AAEA,SACEvV,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,MACEA,8BAAAA,QAAA,cAACid,sCAAAA;IAAeD;IAAgCjb;IAAsBmb,QAAQ9B;MAC9Epb,8BAAAA,QAAA,cAACoS,sBAAAA,KAAK+K,SAAO;IACXpD;IACAqD,cAAcC;IACdC,WAAWC;IACXpT;IACAD;IACAsT,cAAcnC;IACdoC,UAAUnC;IACVoC,YAAYvD;IACZwD,eAAevD;IACfF;IACA0D,SAASjD;IACTkD,gBAAgBlC;IAChBmC,WAAWjC;IACXkC,eAAezB;IACf0B,YAAW;IACXlb,WAAU;IACV+O;IACAoM,KAAK3D;MAEPta,8BAAAA,QAAA,cAACke,6BAAa7L,MAAI;IAChB8L,OAAO;IACPxd,MAAM,CAAC,CAACwb;IACRiC,cAAc,CAACC,aAAajC,mBAAmBiC,WAAWvE,gBAAgB,IAAA;KAE1E9Z,8BAAAA,QAAA,cAACke,6BAAaI,gBAAc;IAACC,YAAYrC;MACzClc,8BAAAA,QAAA,cAACke,6BAAaf,SAAO;IAACqB,MAAMnC,oBAAoB,QAAQ,WAAW;IAASoC,YAAY;IAAGC,kBAAkB;KAC3G1e,8BAAAA,QAAA,cAACke,6BAAaS,UAAQ,MACpB3e,8BAAAA,QAAA,cAACke,6BAAa3K,MAAI;IAACM,SAAS,MAAM0I,qBAAqB,YAAA;KACrDvc,8BAAAA,QAAA,cAAC4e,sBAAAA;IACC7H,MAAM;IACN8H,MAAMxC,oBAAoB,QAAQ,mCAAmC;MAEvErc,8BAAAA,QAAA,cAAC8e,QAAAA,MAAMlO,EAAE,OAAOyL,eAAAA,eAA8B,CAAA,CAAA,GAEhDrc,8BAAAA,QAAA,cAACke,6BAAa3K,MAAI;IAACM,SAAS,MAAM0I,qBAAqB,WAAA;KACrDvc,8BAAAA,QAAA,cAAC4e,sBAAAA;IACC7H,MAAM;IACN8H,MAAMxC,oBAAoB,QAAQ,oCAAoC;MAExErc,8BAAAA,QAAA,cAAC8e,QAAAA,MAAMlO,EAAE,OAAOyL,eAAAA,cAA6B,CAAA,CAAA,GAE/Crc,8BAAAA,QAAA,cAACke,6BAAa3K,MAAI;IAACwL,UAAAA;IAASlL,SAAS,MAAM0I,qBAAqB,QAAA;KAC9Dvc,8BAAAA,QAAA,cAAC4e,sBAAAA;IAAK7H,MAAM;IAAG8H,MAAK;MACpB7e,8BAAAA,QAAA,cAAC8e,QAAAA,MAAMlO,EAAE,UAAUyL,eAAAA,QAAuB,CAAA,CAAA,CAAA,GAG9Crc,8BAAAA,QAAA,cAACke,6BAAac,OAAK,IAAA,CAAA,CAAA,CAAA;AAK7B;",
6
+ "names": ["import_language", "import_view", "import_react_ui_editor", "import_react", "import_invariant", "import_async", "import_react_ui_grid", "import_echo", "import_react_ui_theme", "import_echo_schema", "import_react_ui", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "React", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "updateAllDecorations", "StateEffect", "define", "computeGraphFacet", "singleValueFacet", "highlightStyles", "HighlightStyle", "tag", "tags", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "sheetExtension", "functions", "extension", "language", "spreadsheet", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "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", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "ViewPlugin", "fromClass", "constructor", "_view", "ranges", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "RANGE_NOTATION", "test", "node", "callback", "child", "firstChild", "nextSibling", "typeMap", "BOOLEAN", "FieldValueType", "Boolean", "NUMBER_RAW", "Number", "NUMBER_PERCENT", "Percent", "NUMBER_CURRENCY", "Currency", "NUMBER_DATETIME", "DateTime", "NUMBER_DATE", "Date", "NUMBER_TIME", "Time", "getTopLeft", "row", "Math", "min", "col", "toSimpleCellAddress", "sheet", "cell", "toModelRange", "start", "end", "SheetModel", "Resource", "_graph", "_sheet", "_options", "id", "PublicKey", "random", "truncate", "Event", "readonly", "bounds", "rows", "columns", "_open", "log", "initialize", "_node", "getOrCreateNode", "createSheetName", "getTypename", "unsubscribe", "on", "event", "emit", "_ctx", "onDispose", "reset", "invariant", "hf", "clearSheet", "sheetId", "Object", "entries", "cells", "forEach", "addressFromIndex", "isFormula", "mapFormulaToNative", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "setCellContents", "recalculate", "rebuildAndRecalculate", "insertRows", "i", "n", "insertIndices", "MAX_ROWS", "insertColumns", "MAX_COLUMNS", "clear", "topLeft", "values", "_iterRange", "idx", "addressToIndex", "cut", "copy", "paste", "isClipboardEmpty", "change", "ExportedCellChange", "address", "newValue", "undo", "isThereSomethingToUndo", "redo", "isThereSomethingToRedo", "getCellValue", "getCellText", "String", "getCellValues", "getValue", "DetailedCellError", "getValueType", "addr", "getCellValueDetailedType", "setValue", "ReadonlyException", "refresh", "mapFunctionBindingToId", "mapFormulaRefsToIndices", "setValues", "addressFromA1Notation", "cb", "rowRange", "max", "columnRange", "rowCells", "column", "push", "_deleteIndices", "indices", "_moveIndices", "j", "formula", "replace", "addressToA1Notation", "toLocalDate", "num", "year", "month", "day", "hours", "minutes", "seconds", "toDateTime", "numberToDateTime", "toDate", "numberToDate", "toTime", "numberToTime", "useSheetModel", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "clearTimeout", "close", "SheetContext", "useSheetContext", "SheetProviderImpl", "onInfo", "__gridScope", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "nextRange", "SheetProvider", "Grid", "Root", "fullyQualifiedId", "RangeList", "useTranslation", "SHEET_PLUGIN", "handleSelectRange", "handleDeleteRange", "index", "findIndex", "sheetRange", "splice", "h2", "List", "items", "isItem", "S", "is", "Range", "Item", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "SheetContainer", "lazy", "completeCellRangeToThreadCursor", "parseThreadAnchorAsCellRange", "coords", "split", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "handleScrollIntoView", "action", "LayoutAction", "SCROLL_INTO_VIEW", "thread", "setFocus", "plane", "useIntentResolver", "useSelectThreadOnCellFocus", "useIntentDispatcher", "threads", "useMemo", "JSON", "stringify", "selectClosestThread", "cellAddress", "closestThread", "inRange", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "dxGridCellIndexToSheetCellAddress", "colStr", "rowStr", "createDxGridColumns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "resizeable", "createDxGridRows", "rowId", "rowMeta", "projectCellProps", "rawValue", "threadRefs", "join", "cellClassNameForRange", "reverse", "parseValue", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "setRows", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetRowDefault", "sheetColDefault", "GridSheet", "setDxGrid", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "closestCell", "target", "handleClose", "shift", "axis", "includes", "delta", "refocus", "handleBlur", "handleAxisResize", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "handleWheel", "stopPropagation", "handleKeyDown", "preventDefault", "metaKey", "ctrlKey", "shiftKey", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "editorKeys", "onClose", "initialContent", "onNav", "getFunctions", "fn", "mode", "getCellContent", "GridCellEditor", "onBlur", "Content", "limitColumns", "DEFAULT_COLUMNS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "ref", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Icon", "icon", "span", "disabled", "Arrow"]
7
+ }