@dxos/plugin-script 0.8.4-main.28f8d3d → 0.8.4-main.2c6827d

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 (295) hide show
  1. package/dist/lib/browser/DeploymentDialog-MZX4T77L.mjs +14 -0
  2. package/dist/lib/browser/NotebookContainer-RTESC4OV.mjs +817 -0
  3. package/dist/lib/browser/NotebookContainer-RTESC4OV.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-T2BAZDJ4.mjs +147 -0
  5. package/dist/lib/browser/ScriptContainer-T2BAZDJ4.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-IABOSTBK.mjs → app-graph-builder-2WR2ATTJ.mjs} +11 -9
  7. package/dist/lib/browser/app-graph-builder-2WR2ATTJ.mjs.map +7 -0
  8. package/dist/lib/browser/blueprint-definition-6PZWZM2Y.mjs +30 -0
  9. package/dist/lib/browser/blueprint-definition-6PZWZM2Y.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-2G2NA6DQ.mjs +88 -0
  11. package/dist/lib/browser/chunk-2G2NA6DQ.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-OAVS36Q3.mjs → chunk-3IJASGG5.mjs} +23 -21
  13. package/dist/lib/browser/chunk-3IJASGG5.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-4M7U2WVT.mjs +304 -0
  15. package/dist/lib/browser/chunk-4M7U2WVT.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-5JSNQYZZ.mjs +517 -0
  17. package/dist/lib/browser/chunk-5JSNQYZZ.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EB6AXFXO.mjs} +8 -5
  19. package/dist/lib/browser/chunk-EB6AXFXO.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-OULPWKXN.mjs → chunk-GAFCKEII.mjs} +178 -87
  21. package/dist/lib/browser/chunk-GAFCKEII.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  23. package/dist/lib/browser/chunk-LNNCD2H4.mjs +102 -0
  24. package/dist/lib/browser/chunk-LNNCD2H4.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-M6KJPUJK.mjs +111 -0
  26. package/dist/lib/browser/chunk-M6KJPUJK.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-UOQ6NCH3.mjs} +2 -2
  28. package/dist/lib/browser/{compiler-RIWQVBPX.mjs → compiler-4KHRSX7J.mjs} +7 -6
  29. package/dist/lib/browser/compiler-4KHRSX7J.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +112 -42
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-SAL2TM7U.mjs → intent-resolver-AFJ575VK.mjs} +38 -23
  33. package/dist/lib/browser/intent-resolver-AFJ575VK.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-surface-E3SXU6ON.mjs → react-surface-QEQ3QUQA.mjs} +47 -23
  36. package/dist/lib/browser/react-surface-QEQ3QUQA.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-LNLSTZM4.mjs} +10 -8
  38. package/dist/lib/browser/settings-LNLSTZM4.mjs.map +7 -0
  39. package/dist/lib/browser/templates/index.mjs +2 -1
  40. package/dist/lib/browser/types/index.mjs +8 -4
  41. package/dist/lib/node-esm/DeploymentDialog-GL5AUWMR.mjs +15 -0
  42. package/dist/lib/node-esm/DeploymentDialog-GL5AUWMR.mjs.map +7 -0
  43. package/dist/lib/node-esm/NotebookContainer-SVD3A3D6.mjs +818 -0
  44. package/dist/lib/node-esm/NotebookContainer-SVD3A3D6.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-2CE3H3JJ.mjs +148 -0
  46. package/dist/lib/node-esm/ScriptContainer-2CE3H3JJ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-builder-CQTTAYHP.mjs → app-graph-builder-NCVLUL5R.mjs} +11 -9
  48. package/dist/lib/node-esm/app-graph-builder-NCVLUL5R.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-5R6YCSZZ.mjs +31 -0
  50. package/dist/lib/node-esm/blueprint-definition-5R6YCSZZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-35M3CHYE.mjs → chunk-55JZVM6K.mjs} +2 -2
  52. package/dist/lib/node-esm/chunk-57JA6XL5.mjs +90 -0
  53. package/dist/lib/node-esm/chunk-57JA6XL5.mjs.map +7 -0
  54. package/dist/lib/node-esm/chunk-HDKR5WCD.mjs +113 -0
  55. package/dist/lib/node-esm/chunk-HDKR5WCD.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  57. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-AHXJ6NQU.mjs → chunk-IBV2DR36.mjs} +8 -5
  59. package/dist/lib/node-esm/chunk-IBV2DR36.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-IQTBVH4L.mjs +518 -0
  61. package/dist/lib/node-esm/chunk-IQTBVH4L.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-6WMFL3JL.mjs → chunk-KJKZ4KNO.mjs} +178 -87
  63. package/dist/lib/node-esm/chunk-KJKZ4KNO.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-NNHWLRHT.mjs +103 -0
  65. package/dist/lib/node-esm/chunk-NNHWLRHT.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-IO6T72KY.mjs → chunk-RIE676OW.mjs} +23 -21
  67. package/dist/lib/node-esm/chunk-RIE676OW.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-YRTA4EHU.mjs +305 -0
  69. package/dist/lib/node-esm/chunk-YRTA4EHU.mjs.map +7 -0
  70. package/dist/lib/node-esm/{compiler-S52P5P3F.mjs → compiler-DU5NQISX.mjs} +7 -6
  71. package/dist/lib/node-esm/compiler-DU5NQISX.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +112 -42
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-GO53JOPL.mjs → intent-resolver-A5VVK746.mjs} +38 -23
  75. package/dist/lib/node-esm/intent-resolver-A5VVK746.mjs.map +7 -0
  76. package/dist/lib/node-esm/meta.json +1 -1
  77. package/dist/lib/node-esm/{react-surface-W3NRCS5O.mjs → react-surface-U77YT7VF.mjs} +47 -23
  78. package/dist/lib/node-esm/react-surface-U77YT7VF.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-IUFMOCXY.mjs} +10 -8
  80. package/dist/lib/node-esm/settings-IUFMOCXY.mjs.map +7 -0
  81. package/dist/lib/node-esm/templates/index.mjs +2 -1
  82. package/dist/lib/node-esm/types/index.mjs +8 -4
  83. package/dist/types/src/ScriptPlugin.d.ts +1 -1
  84. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  89. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/compiler.d.ts +1 -1
  91. package/dist/types/src/capabilities/index.d.ts +6 -5
  92. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  94. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  96. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/settings.d.ts +1 -1
  98. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +4 -4
  99. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  100. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +243 -13
  101. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +1 -1
  103. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  104. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  105. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  106. package/dist/types/src/components/NotebookContainer.stories.d.ts +251 -0
  107. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  108. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +15 -0
  109. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  110. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  111. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  112. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  113. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  114. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +245 -0
  115. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  117. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  118. package/dist/types/src/components/ScriptContainer.d.ts +4 -4
  119. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  120. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +5 -6
  121. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  122. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +242 -10
  123. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +2 -2
  125. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  126. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  127. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/TestPanel/TestContainer.d.ts +2 -2
  129. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  131. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  132. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  133. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +11 -4
  134. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/index.d.ts +3 -4
  136. package/dist/types/src/components/index.d.ts.map +1 -1
  137. package/dist/types/src/events.d.ts.map +1 -1
  138. package/dist/types/src/hooks/deploy.d.ts +17 -14
  139. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  140. package/dist/types/src/hooks/format.d.ts +2 -2
  141. package/dist/types/src/hooks/format.d.ts.map +1 -1
  142. package/dist/types/src/hooks/template.d.ts +4 -14
  143. package/dist/types/src/hooks/template.d.ts.map +1 -1
  144. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  145. package/dist/types/src/index.d.ts +1 -0
  146. package/dist/types/src/index.d.ts.map +1 -1
  147. package/dist/types/src/meta.d.ts +0 -1
  148. package/dist/types/src/meta.d.ts.map +1 -1
  149. package/dist/types/src/notebook/compute-graph.d.ts +45 -0
  150. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -0
  151. package/dist/types/src/notebook/compute-graph.test.d.ts +2 -0
  152. package/dist/types/src/notebook/compute-graph.test.d.ts.map +1 -0
  153. package/dist/types/src/notebook/eval.d.ts +13 -0
  154. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  155. package/dist/types/src/notebook/index.d.ts +2 -0
  156. package/dist/types/src/notebook/index.d.ts.map +1 -0
  157. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  158. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  159. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  160. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  161. package/dist/types/src/templates/chess.d.ts.map +1 -1
  162. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  163. package/dist/types/src/templates/discord.d.ts.map +1 -1
  164. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  165. package/dist/types/src/templates/forex.d.ts.map +1 -1
  166. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  167. package/dist/types/src/templates/index.d.ts +43 -1
  168. package/dist/types/src/templates/index.d.ts.map +1 -1
  169. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  170. package/dist/types/src/templates/ping.d.ts.map +1 -0
  171. package/dist/types/src/testing/data.d.ts +3 -0
  172. package/dist/types/src/testing/data.d.ts.map +1 -0
  173. package/dist/types/src/testing/index.d.ts +2 -0
  174. package/dist/types/src/testing/index.d.ts.map +1 -0
  175. package/dist/types/src/translations.d.ts +30 -5
  176. package/dist/types/src/translations.d.ts.map +1 -1
  177. package/dist/types/src/types/Notebook.d.ts +31 -0
  178. package/dist/types/src/types/Notebook.d.ts.map +1 -0
  179. package/dist/types/src/types/actions.d.ts +54 -0
  180. package/dist/types/src/types/actions.d.ts.map +1 -0
  181. package/dist/types/src/types/index.d.ts +3 -1
  182. package/dist/types/src/types/index.d.ts.map +1 -1
  183. package/dist/types/src/types/types.d.ts +6 -0
  184. package/dist/types/src/types/types.d.ts.map +1 -0
  185. package/dist/types/src/util/deploy.d.ts +7 -7
  186. package/dist/types/src/util/deploy.d.ts.map +1 -1
  187. package/dist/types/src/util/functions.d.ts +6 -3
  188. package/dist/types/src/util/functions.d.ts.map +1 -1
  189. package/dist/types/tsconfig.tsbuildinfo +1 -1
  190. package/package.json +78 -69
  191. package/src/ScriptPlugin.tsx +96 -65
  192. package/src/capabilities/app-graph-builder.ts +10 -9
  193. package/src/capabilities/artifact-definition.ts +2 -3
  194. package/src/capabilities/blueprint-definition.ts +30 -0
  195. package/src/capabilities/compiler.ts +1 -1
  196. package/src/capabilities/index.ts +1 -0
  197. package/src/capabilities/intent-resolver.ts +20 -11
  198. package/src/capabilities/react-surface.tsx +30 -17
  199. package/src/capabilities/settings.ts +3 -3
  200. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +39 -20
  201. package/src/components/DeploymentDialog/DeploymentDialog.tsx +42 -31
  202. package/src/components/FrameContainer/FrameContainer.tsx +5 -4
  203. package/src/components/NotebookContainer.stories.tsx +83 -0
  204. package/src/components/NotebookContainer.tsx +263 -0
  205. package/src/components/NotebookStack/NotebookCell.tsx +214 -0
  206. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  207. package/src/components/NotebookStack/NotebookStack.stories.tsx +54 -0
  208. package/src/components/NotebookStack/NotebookStack.tsx +86 -0
  209. package/src/components/NotebookStack/index.ts +6 -0
  210. package/src/components/ScriptContainer.tsx +5 -5
  211. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +34 -18
  212. package/src/components/ScriptToolbar/ScriptToolbar.tsx +37 -30
  213. package/src/components/Settings/ScriptObjectSettings.tsx +126 -35
  214. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  215. package/src/components/TestPanel/TestContainer.tsx +2 -2
  216. package/src/components/TestPanel/TestPanel.tsx +42 -19
  217. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +74 -27
  218. package/src/components/TypescriptEditor/TypescriptEditor.tsx +36 -35
  219. package/src/components/index.ts +3 -0
  220. package/src/events.ts +2 -2
  221. package/src/hooks/deploy.ts +22 -23
  222. package/src/hooks/format.ts +4 -4
  223. package/src/hooks/template.ts +6 -15
  224. package/src/hooks/useCreateAndDeployScriptTemplates.ts +10 -6
  225. package/src/index.ts +1 -0
  226. package/src/meta.ts +7 -5
  227. package/src/notebook/compute-graph.test.ts +70 -0
  228. package/src/notebook/compute-graph.ts +206 -0
  229. package/src/notebook/eval.ts +105 -0
  230. package/src/notebook/index.ts +5 -0
  231. package/src/notebook/vfs-parser.test.ts +149 -0
  232. package/src/notebook/vfs-parser.ts +451 -0
  233. package/src/templates/chess.ts +2 -0
  234. package/src/templates/data-generator.ts +2 -0
  235. package/src/templates/discord.ts +11 -3
  236. package/src/templates/forex-effect.ts +6 -2
  237. package/src/templates/forex.ts +2 -0
  238. package/src/templates/gmail.ts +32 -62
  239. package/src/templates/index.ts +6 -6
  240. package/src/testing/data.ts +72 -0
  241. package/src/testing/index.ts +5 -0
  242. package/src/translations.ts +33 -7
  243. package/src/types/Notebook.ts +41 -0
  244. package/src/types/actions.ts +53 -0
  245. package/src/types/index.ts +3 -1
  246. package/src/types/types.ts +15 -0
  247. package/src/util/deploy.ts +29 -46
  248. package/src/util/functions.ts +37 -7
  249. package/dist/lib/browser/DeploymentDialog-C3XH2Z56.mjs +0 -12
  250. package/dist/lib/browser/ScriptContainer-FUBR4OZE.mjs +0 -263
  251. package/dist/lib/browser/ScriptContainer-FUBR4OZE.mjs.map +0 -7
  252. package/dist/lib/browser/app-graph-builder-IABOSTBK.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-G4A2MGAL.mjs +0 -88
  254. package/dist/lib/browser/chunk-G4A2MGAL.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  256. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-MWZDJNCQ.mjs +0 -283
  258. package/dist/lib/browser/chunk-MWZDJNCQ.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-OAVS36Q3.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-OULPWKXN.mjs.map +0 -7
  261. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-SUOLJH55.mjs +0 -233
  263. package/dist/lib/browser/chunk-SUOLJH55.mjs.map +0 -7
  264. package/dist/lib/browser/compiler-RIWQVBPX.mjs.map +0 -7
  265. package/dist/lib/browser/intent-resolver-SAL2TM7U.mjs.map +0 -7
  266. package/dist/lib/browser/react-surface-E3SXU6ON.mjs.map +0 -7
  267. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  268. package/dist/lib/node-esm/DeploymentDialog-O2XZVRLU.mjs +0 -13
  269. package/dist/lib/node-esm/ScriptContainer-VJ75TM24.mjs +0 -264
  270. package/dist/lib/node-esm/ScriptContainer-VJ75TM24.mjs.map +0 -7
  271. package/dist/lib/node-esm/app-graph-builder-CQTTAYHP.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-3BBEM2U7.mjs +0 -90
  273. package/dist/lib/node-esm/chunk-3BBEM2U7.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-6WMFL3JL.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-7L4JDSXJ.mjs +0 -284
  276. package/dist/lib/node-esm/chunk-7L4JDSXJ.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-IO6T72KY.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  280. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  281. package/dist/lib/node-esm/chunk-PACUN7RS.mjs +0 -234
  282. package/dist/lib/node-esm/chunk-PACUN7RS.mjs.map +0 -7
  283. package/dist/lib/node-esm/compiler-S52P5P3F.mjs.map +0 -7
  284. package/dist/lib/node-esm/intent-resolver-GO53JOPL.mjs.map +0 -7
  285. package/dist/lib/node-esm/react-surface-W3NRCS5O.mjs.map +0 -7
  286. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  287. package/dist/types/src/templates/echo.d.ts.map +0 -1
  288. package/dist/types/src/types/schema.d.ts +0 -38
  289. package/dist/types/src/types/schema.d.ts.map +0 -1
  290. package/src/types/schema.ts +0 -37
  291. /package/dist/lib/browser/{DeploymentDialog-C3XH2Z56.mjs.map → DeploymentDialog-MZX4T77L.mjs.map} +0 -0
  292. /package/dist/lib/{node-esm/DeploymentDialog-O2XZVRLU.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  293. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-UOQ6NCH3.mjs.map} +0 -0
  294. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-55JZVM6K.mjs.map} +0 -0
  295. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -0,0 +1,263 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Cause from 'effect/Cause';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Exit from 'effect/Exit';
8
+ import React, { useCallback, useMemo, useState } from 'react';
9
+
10
+ import { Agent } from '@dxos/assistant-toolkit';
11
+ import { Blueprint, Prompt } from '@dxos/blueprints';
12
+ import { Filter, Obj, Query, Ref } from '@dxos/echo';
13
+ import { QueryBuilder } from '@dxos/echo-query';
14
+ import { type FunctionDefinition, FunctionInvocationService } from '@dxos/functions';
15
+ import { InvocationTracer } from '@dxos/functions-runtime';
16
+ import { TracingServiceExt } from '@dxos/functions-runtime';
17
+ import { invariant } from '@dxos/invariant';
18
+ import { log } from '@dxos/log';
19
+ import { useComputeRuntimeCallback } from '@dxos/plugin-automation';
20
+ import { Graph } from '@dxos/plugin-explorer/types';
21
+ import { getSpace } from '@dxos/react-client/echo';
22
+ import { DropdownMenu, IconButton, Toolbar, useTranslation } from '@dxos/react-ui';
23
+ import { useAttention } from '@dxos/react-ui-attention';
24
+ import { StackItem } from '@dxos/react-ui-stack';
25
+ import { Text } from '@dxos/schema';
26
+ import { isNonNullable } from '@dxos/util';
27
+
28
+ import { meta } from '../meta';
29
+ import { ComputeGraph } from '../notebook';
30
+ import { type Notebook } from '../types';
31
+
32
+ import { NotebookMenu, NotebookStack, type NotebookStackProps } from './NotebookStack';
33
+ import { type TypescriptEditorProps } from './TypescriptEditor';
34
+
35
+ const INCLUDE_BLUEPRINTS = ['dxos.org/blueprint/assistant', 'dxos.org/blueprint/markdown'];
36
+
37
+ // TODO(burdon): Support calling named deployed functions (as with sheet).
38
+
39
+ export type NotebookContainerProps = {
40
+ role?: string;
41
+ notebook?: Notebook.Notebook;
42
+ } & Pick<TypescriptEditorProps, 'env'>;
43
+
44
+ export const NotebookContainer = ({ notebook, env }: NotebookContainerProps) => {
45
+ const { t } = useTranslation(meta.id);
46
+ const space = getSpace(notebook);
47
+ const attendableId = notebook ? Obj.getDXN(notebook).toString() : '';
48
+ const { hasAttention } = useAttention(attendableId);
49
+
50
+ // TODO(burdon): Consolidate execution and state (with graph).
51
+ // Generalize ComputeGraph evaluation function (using effects).
52
+ const graph = useMemo(() => notebook && new ComputeGraph(notebook), [notebook]);
53
+
54
+ const [queryValues, setQueryValues] = useState<Record<string, any>>({});
55
+ const handleExecQueries = useCallback(async () => {
56
+ invariant(space);
57
+
58
+ const builder = new QueryBuilder();
59
+ for (const cell of notebook?.cells ?? []) {
60
+ if (cell.type === 'query') {
61
+ if (cell.source?.target) {
62
+ const source = cell.source.target.content;
63
+ const { name, filter } = builder.build(source);
64
+ if (filter) {
65
+ const ast = Query.select(filter).ast;
66
+ const view = cell.view?.target;
67
+ if (!view) {
68
+ const graph = Graph.make({ query: { ast } });
69
+ const { view } = await Graph.makeView({
70
+ space,
71
+ presentation: graph,
72
+ });
73
+ cell.view = Ref.make(view);
74
+ cell.name = name;
75
+ } else {
76
+ view.query.ast = ast;
77
+ }
78
+ }
79
+ }
80
+
81
+ if (cell.name && cell.view?.target) {
82
+ const view = Obj.getSnapshot(cell.view?.target);
83
+ const query = Query.fromAst(view.query.ast);
84
+ const result = await space?.db.query(query).run();
85
+ const objectIds = result?.objects?.map((obj) => obj.id);
86
+ setQueryValues((prev) => ({ ...prev, [cell.name!]: objectIds }));
87
+ }
88
+ }
89
+ }
90
+ }, [space, notebook, graph]);
91
+
92
+ const [promptResults, setPromptResults] = useState<Record<string, string>>({});
93
+ const handleExecPrompts = useComputeRuntimeCallback(
94
+ space,
95
+ Effect.fnUntraced(function* () {
96
+ invariant(graph);
97
+
98
+ const prompts =
99
+ notebook?.cells
100
+ .filter((cell) => cell.type === 'prompt')
101
+ .map((cell) => cell.prompt)
102
+ .filter(isNonNullable) ?? [];
103
+
104
+ for (const prompt of prompts) {
105
+ yield* runPrompt({
106
+ prompt,
107
+ input: { ...queryValues, ...graph.valuesByName.value },
108
+ onResult: (result) =>
109
+ setPromptResults((prev) => ({
110
+ ...prev,
111
+ [prompt.dxn.toString()]: result,
112
+ })),
113
+ });
114
+ }
115
+ }),
116
+ [notebook, graph, queryValues],
117
+ );
118
+
119
+ // TODO(burdon): Cache values in context (preserve when switched).
120
+ const handleCompute = useCallback(async () => {
121
+ // TODO(burdon): Generalize executors (dependencies).
122
+ await graph?.evaluate();
123
+ await handleExecQueries();
124
+ await handleExecPrompts();
125
+ }, [graph, handleExecQueries, handleExecPrompts]);
126
+
127
+ const handleRearrange = useCallback<NonNullable<NotebookStackProps['onRearrange']>>(
128
+ (source, target) => {
129
+ invariant(notebook);
130
+ const from = notebook.cells.findIndex((cell) => cell.id === source.id);
131
+ const to = notebook.cells.findIndex((cell) => cell.id === target.id);
132
+ if (from != null && to != null) {
133
+ const cell = notebook.cells.splice(from, 1)[0];
134
+ if (cell) {
135
+ notebook.cells.splice(to, 0, cell);
136
+ }
137
+ }
138
+ },
139
+ [notebook],
140
+ );
141
+
142
+ const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(
143
+ async (type, after) => {
144
+ invariant(notebook);
145
+ const cell: Notebook.Cell = { id: crypto.randomUUID(), type };
146
+ switch (type) {
147
+ case 'markdown':
148
+ case 'script':
149
+ case 'query': {
150
+ cell.source = Ref.make(Text.make());
151
+ break;
152
+ }
153
+
154
+ case 'prompt': {
155
+ if (space) {
156
+ const result = await space.db.query(Query.select(Filter.type(Blueprint.Blueprint))).run();
157
+ const blueprints = result.objects
158
+ .filter((blueprint) => INCLUDE_BLUEPRINTS.includes(blueprint.key))
159
+ .map((blueprint) => Ref.make(blueprint));
160
+ cell.prompt = Ref.make(Prompt.make({ instructions: '', blueprints }));
161
+ }
162
+ break;
163
+ }
164
+ }
165
+
166
+ const idx = after ? notebook.cells.findIndex((cell) => cell.id === after) : notebook.cells.length;
167
+ notebook.cells.splice(idx, 0, cell);
168
+ },
169
+ [space, notebook],
170
+ );
171
+
172
+ const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(
173
+ (id) => {
174
+ invariant(notebook);
175
+ const idx = notebook.cells.findIndex((cell) => cell.id === id);
176
+ if (idx !== -1) {
177
+ notebook.cells.splice(idx, 1);
178
+ }
179
+ },
180
+ [notebook],
181
+ );
182
+
183
+ return (
184
+ <StackItem.Content toolbar>
185
+ <Toolbar.Root disabled={!hasAttention} textBlockWidth>
186
+ <DropdownMenu.Root>
187
+ <DropdownMenu.Trigger asChild>
188
+ <IconButton icon='ph--plus--regular' iconOnly label={t('notebook cell insert label')} />
189
+ </DropdownMenu.Trigger>
190
+ <NotebookMenu onCellInsert={handleCellInsert} />
191
+ </DropdownMenu.Root>
192
+ <Toolbar.IconButton
193
+ icon='ph--play--fill'
194
+ iconOnly
195
+ label={t('compute label')}
196
+ classNames='text-green-500'
197
+ onClick={handleCompute}
198
+ />
199
+ </Toolbar.Root>
200
+ <div role='none' className='flex bs-full overflow-hidden -mis-[1px] -mie-[1px]'>
201
+ <NotebookStack
202
+ classNames='container-max-width border-l border-r border-subduedSeparator'
203
+ space={space}
204
+ notebook={notebook}
205
+ graph={graph}
206
+ env={env}
207
+ promptResults={promptResults}
208
+ onRearrange={handleRearrange}
209
+ onCellInsert={handleCellInsert}
210
+ onCellDelete={handleCellDelete}
211
+ />
212
+ </div>
213
+ </StackItem.Content>
214
+ );
215
+ };
216
+
217
+ export default NotebookContainer;
218
+
219
+ // TODO(wittjosiah): Factor out. Copied from PromptArticle in plugin-assistant.
220
+ const runPrompt = Effect.fn(function* ({
221
+ prompt,
222
+ input,
223
+ onResult,
224
+ }: {
225
+ prompt: Ref.Ref<Prompt.Prompt>;
226
+ input: Record<string, any>;
227
+ onResult: (result: string) => void;
228
+ }) {
229
+ const inputData: FunctionDefinition.Input<typeof Agent.prompt> = {
230
+ prompt,
231
+ input,
232
+ };
233
+ const tracer = yield* InvocationTracer;
234
+ const trace = yield* tracer.traceInvocationStart({
235
+ target: undefined,
236
+ payload: {
237
+ data: {},
238
+ },
239
+ });
240
+
241
+ // Invoke the function.
242
+ const result = yield* FunctionInvocationService.invokeFunction(Agent.prompt, inputData).pipe(
243
+ Effect.provide(TracingServiceExt.layerQueue(trace.invocationTraceQueue)),
244
+ Effect.exit,
245
+ );
246
+
247
+ Exit.match(result, {
248
+ onFailure: (cause) => {
249
+ const error = Cause.prettyErrors(cause)[0];
250
+ log.error(error.message, error.cause ?? error.stack);
251
+ onResult(error.message);
252
+ },
253
+ onSuccess: (result: any) => {
254
+ onResult(result.note);
255
+ },
256
+ });
257
+
258
+ yield* tracer.traceInvocationEnd({
259
+ trace,
260
+ // TODO(dmaretskyi): Might miss errors.
261
+ exception: Exit.isFailure(result) ? Cause.prettyErrors(result.cause)[0] : undefined,
262
+ });
263
+ });
@@ -0,0 +1,214 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo } from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework/react';
8
+ import { invariant } from '@dxos/invariant';
9
+ import { TemplateEditor } from '@dxos/plugin-assistant';
10
+ import { createDocAccessor } from '@dxos/react-client/echo';
11
+ import { type Space } from '@dxos/react-client/echo';
12
+ import { useThemeContext, useTranslation } from '@dxos/react-ui';
13
+ import { QueryEditor, type QueryEditorProps } from '@dxos/react-ui-components';
14
+ import {
15
+ type BasicExtensionsOptions,
16
+ EditorContent,
17
+ type EditorContentProps,
18
+ createBasicExtensions,
19
+ createDataExtensions,
20
+ createMarkdownExtensions,
21
+ createThemeExtensions,
22
+ decorateMarkdown,
23
+ } from '@dxos/react-ui-editor';
24
+ import { mx } from '@dxos/react-ui-theme';
25
+ import { isNonNullable } from '@dxos/util';
26
+
27
+ import { meta } from '../../meta';
28
+ import { type ComputeGraph } from '../../notebook';
29
+ import { type Notebook } from '../../types';
30
+ import { TypescriptEditor, type TypescriptEditorProps } from '../TypescriptEditor';
31
+
32
+ import { type NotebookMenuProps } from './NotebookMenu';
33
+
34
+ const editorStyles = 'p-2 pis-3';
35
+ const valueStyles = 'p-1 pis-3';
36
+
37
+ export type NotebookCellProps = {
38
+ space?: Space;
39
+ graph?: ComputeGraph;
40
+ dragging?: boolean;
41
+ cell: Notebook.Cell;
42
+ promptResults?: Record<string, string>;
43
+ } & (Pick<NotebookMenuProps, 'onCellInsert' | 'onCellDelete'> & Pick<TypescriptEditorProps, 'env'>);
44
+
45
+ // TODO(burdon): Show evaluation errors.
46
+ export const NotebookCell = ({ space, graph, dragging, cell, promptResults, env }: NotebookCellProps) => {
47
+ const { t } = useTranslation(meta.id);
48
+
49
+ const extensions = useMemo(() => {
50
+ return cell.source?.target
51
+ ? [
52
+ createDataExtensions({
53
+ id: cell.id,
54
+ text: createDocAccessor(cell.source.target, ['content']),
55
+ }),
56
+ ].filter(isNonNullable)
57
+ : [];
58
+ }, [cell.source?.target]);
59
+
60
+ const view = cell.view?.target;
61
+
62
+ const handleQueryChange = useCallback<NonNullable<QueryEditorProps['onChange']>>(
63
+ (value: string) => {
64
+ invariant(cell.source?.target);
65
+ cell.source.target.content = value;
66
+ },
67
+ [cell],
68
+ );
69
+
70
+ switch (cell.type) {
71
+ case 'markdown':
72
+ if (!cell.source?.target) {
73
+ return null;
74
+ }
75
+
76
+ return (
77
+ <NotebookTextEditor
78
+ id={cell.id}
79
+ classNames={editorStyles}
80
+ initialValue={cell.source.target.content}
81
+ extensions={extensions}
82
+ />
83
+ );
84
+
85
+ case 'script':
86
+ if (!cell.source?.target) {
87
+ return null;
88
+ }
89
+
90
+ return (
91
+ <>
92
+ <TypescriptEditor
93
+ id={cell.id}
94
+ role='section'
95
+ classNames={editorStyles}
96
+ initialValue={cell.source.target.content}
97
+ extensions={extensions}
98
+ env={env}
99
+ options={{
100
+ placeholder: t('notebook cell placeholder'),
101
+ highlightActiveLine: false,
102
+ lineNumbers: false,
103
+ }}
104
+ />
105
+ <NotebookCellValue cell={cell} graph={graph} />
106
+ </>
107
+ );
108
+
109
+ case 'query':
110
+ if (!cell.source?.target) {
111
+ return null;
112
+ }
113
+
114
+ // TODO(burdon): Remove app-framework deps (via render prop).
115
+ return (
116
+ <div className={mx('bs-full overflow-hidden grid', view && !dragging && 'grid-rows-[min-content_1fr]')}>
117
+ <QueryEditor
118
+ id={cell.id}
119
+ classNames={[editorStyles, 'border-be border-subduedSeparator']}
120
+ db={space?.db}
121
+ value={cell.source.target.content}
122
+ onChange={handleQueryChange}
123
+ />
124
+ {view && !dragging && <Surface role='section' limit={1} data={{ subject: view }} />}
125
+ </div>
126
+ );
127
+
128
+ // TODO(burdon): Use streaming response from Chat.
129
+ case 'prompt':
130
+ if (!cell.prompt?.target) {
131
+ return null;
132
+ }
133
+
134
+ return (
135
+ <>
136
+ <TemplateEditor
137
+ id={cell.id}
138
+ template={cell.prompt.target.instructions}
139
+ lineNumbers={false}
140
+ classNames={editorStyles}
141
+ />
142
+ <NotebookPromptResult cell={cell} promptResults={promptResults} />
143
+ </>
144
+ );
145
+
146
+ default:
147
+ return null;
148
+ }
149
+ };
150
+
151
+ const NotebookCellValue = ({ cell, graph }: NotebookCellProps) => {
152
+ const name = graph?.expressions.value[cell.id]?.name;
153
+ const value = graph?.getValue(cell.id);
154
+ if (value == null) {
155
+ return null;
156
+ }
157
+
158
+ return (
159
+ <div
160
+ className={mx(
161
+ 'flex is-full bg-groupSurface border-t border-subduedSeparator text-description font-mono',
162
+ valueStyles,
163
+ )}
164
+ >
165
+ {name && (
166
+ <>
167
+ <span className='text-successText'>{name}</span>
168
+ <span className='text-description'>&nbsp;=&nbsp;</span>
169
+ </>
170
+ )}
171
+ <span>{value}</span>
172
+ </div>
173
+ );
174
+ };
175
+
176
+ const NotebookPromptResult = ({ cell, promptResults }: NotebookCellProps) => {
177
+ if (!cell.prompt) {
178
+ return null;
179
+ }
180
+
181
+ const value = promptResults?.[cell.prompt.dxn.toString()];
182
+ if (value == null) {
183
+ return null;
184
+ }
185
+
186
+ return (
187
+ <div className={mx('flex is-full bg-groupSurface text-description border-t border-subduedSeparator', valueStyles)}>
188
+ <NotebookTextEditor readOnly value={value} />
189
+ </div>
190
+ );
191
+ };
192
+
193
+ const NotebookTextEditor = ({
194
+ extensions: extensionsParam,
195
+ readOnly,
196
+ ...props
197
+ }: EditorContentProps & Pick<BasicExtensionsOptions, 'readOnly'>) => {
198
+ const { t } = useTranslation(meta.id);
199
+ const { themeMode } = useThemeContext();
200
+ const extensions = useMemo(() => {
201
+ return [
202
+ createBasicExtensions({
203
+ placeholder: t('notebook markdown placeholder'),
204
+ readOnly,
205
+ }),
206
+ createThemeExtensions({ themeMode, syntaxHighlighting: true }),
207
+ createMarkdownExtensions(),
208
+ decorateMarkdown(),
209
+ extensionsParam,
210
+ ].filter(isNonNullable);
211
+ }, [extensionsParam]);
212
+
213
+ return <EditorContent {...props} extensions={extensions} selectionEnd />;
214
+ };
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { DropdownMenu, useTranslation } from '@dxos/react-ui';
8
+
9
+ import { meta } from '../../meta';
10
+ import { type Notebook } from '../../types';
11
+
12
+ export type NotebookMenuProps = {
13
+ cell?: Notebook.Cell;
14
+ onCellInsert?: (type: Notebook.CellType, after: string | undefined) => void;
15
+ onCellDelete?: (id: string) => void;
16
+ };
17
+
18
+ // TODO(burdon): Better way to organize menu?
19
+ export const NotebookMenu = ({ cell, onCellInsert, onCellDelete }: NotebookMenuProps) => {
20
+ const { t } = useTranslation(meta.id);
21
+ return (
22
+ <DropdownMenu.Portal>
23
+ <DropdownMenu.Content>
24
+ <DropdownMenu.Viewport>
25
+ <DropdownMenu.Item onClick={() => onCellInsert?.('script', cell?.id)}>
26
+ {t('notebook cell insert script label')}
27
+ </DropdownMenu.Item>
28
+ <DropdownMenu.Item onClick={() => onCellInsert?.('prompt', cell?.id)}>
29
+ {t('notebook cell insert prompt label')}
30
+ </DropdownMenu.Item>
31
+ <DropdownMenu.Item onClick={() => onCellInsert?.('query', cell?.id)}>
32
+ {t('notebook cell insert query label')}
33
+ </DropdownMenu.Item>
34
+ <DropdownMenu.Item onClick={() => onCellInsert?.('markdown', cell?.id)}>
35
+ {t('notebook cell insert markdown label')}
36
+ </DropdownMenu.Item>
37
+ {cell && onCellDelete && (
38
+ <DropdownMenu.Item onClick={() => onCellDelete?.(cell.id)}>
39
+ {t('notebook cell delete label')}
40
+ </DropdownMenu.Item>
41
+ )}
42
+ </DropdownMenu.Viewport>
43
+ <DropdownMenu.Arrow />
44
+ </DropdownMenu.Content>
45
+ </DropdownMenu.Portal>
46
+ );
47
+ };
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
8
+ import { withPluginManager } from '@dxos/app-framework/testing';
9
+ import { AutomationPlugin } from '@dxos/plugin-automation';
10
+ import { ClientPlugin } from '@dxos/plugin-client';
11
+ import { SpacePlugin } from '@dxos/plugin-space';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
+
14
+ import { createNotebook } from '../../testing';
15
+ import { translations } from '../../translations';
16
+
17
+ import { NotebookStack } from './NotebookStack';
18
+
19
+ const meta = {
20
+ title: 'plugins/plugin-script/NotebookStack',
21
+ component: NotebookStack,
22
+ decorators: [
23
+ withTheme,
24
+ withLayout({ container: 'column', classNames: 'is-prose' }),
25
+ // TODO(burdon): Factor out Surface to avoid dependency on app-framework.
26
+ withPluginManager({
27
+ plugins: [
28
+ ClientPlugin({
29
+ onClientInitialized: async ({ client }) => {
30
+ await client.halo.createIdentity();
31
+ await client.spaces.waitUntilReady();
32
+ },
33
+ }),
34
+ SpacePlugin({}),
35
+ SettingsPlugin(),
36
+ IntentPlugin(),
37
+ AutomationPlugin(),
38
+ ],
39
+ }),
40
+ ],
41
+ parameters: {
42
+ translations,
43
+ },
44
+ } satisfies Meta<typeof NotebookStack>;
45
+
46
+ export default meta;
47
+
48
+ type Story = StoryObj<typeof meta>;
49
+
50
+ export const Default: Story = {
51
+ args: {
52
+ notebook: createNotebook(),
53
+ },
54
+ };
@@ -0,0 +1,86 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { DropdownMenu, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
8
+ import { Stack, StackItem, type StackProps } from '@dxos/react-ui-stack';
9
+
10
+ import { meta } from '../../meta';
11
+ import { type Notebook } from '../../types';
12
+ import { type TypescriptEditorProps } from '../TypescriptEditor';
13
+
14
+ import { NotebookCell, type NotebookCellProps } from './NotebookCell';
15
+ import { NotebookMenu } from './NotebookMenu';
16
+
17
+ const minSectionHeight = 'min-bs-[16rem]';
18
+
19
+ export type NotebookStackProps = ThemedClassName<
20
+ {
21
+ notebook?: Notebook.Notebook;
22
+ onRearrange?: StackProps['onRearrange'];
23
+ } & (Pick<NotebookSectionProps, 'space' | 'graph' | 'promptResults' | 'onCellInsert' | 'onCellDelete'> &
24
+ Pick<TypescriptEditorProps, 'env'>)
25
+ >;
26
+
27
+ // TODO(burdon): Option for narrow rail (with compact buttons that align with first button in toolbar).
28
+ export const NotebookStack = ({ classNames, notebook, onRearrange, ...props }: NotebookStackProps) => {
29
+ return (
30
+ <Stack classNames={classNames} orientation='vertical' size='contain' rail onRearrange={onRearrange}>
31
+ {notebook?.cells.map((cell, i) => (
32
+ <NotebookSection key={i} cell={cell} {...props} />
33
+ ))}
34
+ </Stack>
35
+ );
36
+ };
37
+
38
+ type NotebookSectionProps = NotebookCellProps;
39
+
40
+ const NotebookSection = ({
41
+ cell,
42
+ space,
43
+ env,
44
+ promptResults,
45
+ onCellInsert,
46
+ onCellDelete,
47
+ ...props
48
+ }: NotebookSectionProps) => {
49
+ const { t } = useTranslation(meta.id);
50
+ const resizable = cell.type === 'query';
51
+
52
+ return (
53
+ <StackItem.Root role='section' item={cell} draggable classNames={resizable && minSectionHeight}>
54
+ <StackItem.Heading classNames='bs-full p-1 justify-between attention-surface'>
55
+ <StackItem.DragHandle asChild>
56
+ <IconButton variant='ghost' icon='ph--dots-six-vertical--regular' iconOnly label='Drag handle' />
57
+ </StackItem.DragHandle>
58
+ <DropdownMenu.Root>
59
+ <DropdownMenu.Trigger asChild>
60
+ <IconButton
61
+ variant='ghost'
62
+ icon='ph--dots-three--regular'
63
+ iconOnly
64
+ label={t('notebook cell insert label')}
65
+ />
66
+ </DropdownMenu.Trigger>
67
+ <NotebookMenu cell={cell} onCellInsert={onCellInsert} onCellDelete={onCellDelete} />
68
+ </DropdownMenu.Root>
69
+ {resizable && <StackItem.ResizeHandle />}
70
+ </StackItem.Heading>
71
+
72
+ {/* TODO(burdon): Move drag preview to outer stack (uniformly). */}
73
+ <StackItem.DragPreview>
74
+ {({ item: cell }) => (
75
+ <StackItem.Content classNames='overflow-visible bg-groupSurface border border-subduedSeparator'>
76
+ <NotebookCell space={space} cell={cell} env={env} dragging />
77
+ </StackItem.Content>
78
+ )}
79
+ </StackItem.DragPreview>
80
+
81
+ <StackItem.Content classNames='overflow-visible'>
82
+ <NotebookCell space={space} cell={cell} env={env} promptResults={promptResults} {...props} />
83
+ </StackItem.Content>
84
+ </StackItem.Root>
85
+ );
86
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './NotebookMenu';
6
+ export * from './NotebookStack';