@dxos/plugin-script 0.8.4-main.5acf9ea → 0.8.4-main.66e292d

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 (306) hide show
  1. package/dist/lib/browser/DeploymentDialog-5TKNGPVR.mjs +14 -0
  2. package/dist/lib/browser/NotebookContainer-MHY3DXDE.mjs +817 -0
  3. package/dist/lib/browser/NotebookContainer-MHY3DXDE.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-CW6YN3DQ.mjs +148 -0
  5. package/dist/lib/browser/ScriptContainer-CW6YN3DQ.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-HLQ7K3BT.mjs → app-graph-builder-2WR2ATTJ.mjs} +12 -10
  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-ALS6X4HU.mjs +304 -0
  13. package/dist/lib/browser/chunk-ALS6X4HU.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EB6AXFXO.mjs} +8 -5
  15. package/dist/lib/browser/chunk-EB6AXFXO.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  17. package/dist/lib/browser/chunk-M6KJPUJK.mjs +111 -0
  18. package/dist/lib/browser/chunk-M6KJPUJK.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FIM2MVNJ.mjs → chunk-N5EYLQOT.mjs} +182 -90
  20. package/dist/lib/browser/chunk-N5EYLQOT.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-QIZ3BPRK.mjs +103 -0
  22. package/dist/lib/browser/chunk-QIZ3BPRK.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-P4HQKUCP.mjs → chunk-SAN5Y7FI.mjs} +23 -21
  24. package/dist/lib/browser/chunk-SAN5Y7FI.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-ULJFT73Q.mjs +513 -0
  26. package/dist/lib/browser/chunk-ULJFT73Q.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-UOQ6NCH3.mjs} +2 -2
  28. package/dist/lib/browser/{compiler-CXCUA4UQ.mjs → compiler-4KHRSX7J.mjs} +10 -6
  29. package/dist/lib/browser/compiler-4KHRSX7J.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +112 -53
  31. package/dist/lib/browser/index.mjs.map +3 -3
  32. package/dist/lib/browser/{intent-resolver-S3H2SMUY.mjs → intent-resolver-TXTBWOVD.mjs} +39 -24
  33. package/dist/lib/browser/intent-resolver-TXTBWOVD.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-surface-FYYXZA7C.mjs → react-surface-R245YN52.mjs} +45 -21
  36. package/dist/lib/browser/react-surface-R245YN52.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-MHJXRGDF.mjs} +10 -8
  38. package/dist/lib/browser/settings-MHJXRGDF.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-2ULNOZQH.mjs +15 -0
  42. package/dist/lib/node-esm/DeploymentDialog-2ULNOZQH.mjs.map +7 -0
  43. package/dist/lib/node-esm/NotebookContainer-U4C2HQ4T.mjs +818 -0
  44. package/dist/lib/node-esm/NotebookContainer-U4C2HQ4T.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-VRPEKB4T.mjs +149 -0
  46. package/dist/lib/node-esm/ScriptContainer-VRPEKB4T.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-builder-7EYIHWH4.mjs → app-graph-builder-NCVLUL5R.mjs} +12 -10
  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-QKK3NDHW.mjs → chunk-ND4BPYPR.mjs} +23 -21
  61. package/dist/lib/node-esm/chunk-ND4BPYPR.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-7NMI4CEU.mjs → chunk-UEVZP5DN.mjs} +182 -90
  63. package/dist/lib/node-esm/chunk-UEVZP5DN.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-VJSRZRLI.mjs +514 -0
  65. package/dist/lib/node-esm/chunk-VJSRZRLI.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-VTRMJSQL.mjs +305 -0
  67. package/dist/lib/node-esm/chunk-VTRMJSQL.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-XYKKDWUR.mjs +104 -0
  69. package/dist/lib/node-esm/chunk-XYKKDWUR.mjs.map +7 -0
  70. package/dist/lib/node-esm/{compiler-EPFKQXPE.mjs → compiler-DU5NQISX.mjs} +10 -6
  71. package/dist/lib/node-esm/compiler-DU5NQISX.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +112 -53
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-OHKNJFCC.mjs → intent-resolver-D6AVAQRA.mjs} +39 -24
  75. package/dist/lib/node-esm/intent-resolver-D6AVAQRA.mjs.map +7 -0
  76. package/dist/lib/node-esm/meta.json +1 -1
  77. package/dist/lib/node-esm/{react-surface-V32NWHKN.mjs → react-surface-MHT3PJ6C.mjs} +45 -21
  78. package/dist/lib/node-esm/react-surface-MHT3PJ6C.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-BVJORMMJ.mjs} +10 -8
  80. package/dist/lib/node-esm/settings-BVJORMMJ.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 +1 -1
  88. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  90. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/compiler.d.ts +1 -1
  92. package/dist/types/src/capabilities/compiler.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/index.d.ts +6 -6
  94. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  96. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  98. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/settings.d.ts +1 -1
  100. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  101. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +4 -4
  102. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  103. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +246 -13
  104. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/DeploymentDialog/index.d.ts +1 -1
  106. package/dist/types/src/components/DeploymentDialog/index.d.ts.map +1 -1
  107. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +1 -1
  108. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  109. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  110. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  111. package/dist/types/src/components/NotebookContainer.stories.d.ts +254 -0
  112. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +15 -0
  114. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  115. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  116. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  117. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  118. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  119. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +248 -0
  120. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  122. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  123. package/dist/types/src/components/ScriptContainer.d.ts +4 -4
  124. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +5 -6
  126. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  127. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +245 -10
  128. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +2 -2
  130. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  131. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  132. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/TestPanel/TestContainer.d.ts +2 -2
  134. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  136. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  137. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  138. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +11 -4
  139. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/index.d.ts +3 -4
  141. package/dist/types/src/components/index.d.ts.map +1 -1
  142. package/dist/types/src/events.d.ts.map +1 -1
  143. package/dist/types/src/hooks/deploy.d.ts +20 -17
  144. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  145. package/dist/types/src/hooks/format.d.ts +2 -2
  146. package/dist/types/src/hooks/format.d.ts.map +1 -1
  147. package/dist/types/src/hooks/template.d.ts +4 -14
  148. package/dist/types/src/hooks/template.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  150. package/dist/types/src/index.d.ts +1 -0
  151. package/dist/types/src/index.d.ts.map +1 -1
  152. package/dist/types/src/meta.d.ts +0 -1
  153. package/dist/types/src/meta.d.ts.map +1 -1
  154. package/dist/types/src/notebook/compute-graph.d.ts +45 -0
  155. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -0
  156. package/dist/types/src/notebook/compute-graph.test.d.ts +2 -0
  157. package/dist/types/src/notebook/compute-graph.test.d.ts.map +1 -0
  158. package/dist/types/src/notebook/eval.d.ts +13 -0
  159. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  160. package/dist/types/src/notebook/index.d.ts +2 -0
  161. package/dist/types/src/notebook/index.d.ts.map +1 -0
  162. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  163. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  164. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  165. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  166. package/dist/types/src/templates/chess.d.ts.map +1 -1
  167. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  168. package/dist/types/src/templates/discord.d.ts.map +1 -1
  169. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  170. package/dist/types/src/templates/forex.d.ts.map +1 -1
  171. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  172. package/dist/types/src/templates/index.d.ts +43 -1
  173. package/dist/types/src/templates/index.d.ts.map +1 -1
  174. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  175. package/dist/types/src/templates/ping.d.ts.map +1 -0
  176. package/dist/types/src/testing/data.d.ts +3 -0
  177. package/dist/types/src/testing/data.d.ts.map +1 -0
  178. package/dist/types/src/testing/index.d.ts +2 -0
  179. package/dist/types/src/testing/index.d.ts.map +1 -0
  180. package/dist/types/src/translations.d.ts +32 -5
  181. package/dist/types/src/translations.d.ts.map +1 -1
  182. package/dist/types/src/types/Notebook.d.ts +31 -0
  183. package/dist/types/src/types/Notebook.d.ts.map +1 -0
  184. package/dist/types/src/types/actions.d.ts +54 -0
  185. package/dist/types/src/types/actions.d.ts.map +1 -0
  186. package/dist/types/src/types/index.d.ts +3 -1
  187. package/dist/types/src/types/index.d.ts.map +1 -1
  188. package/dist/types/src/types/types.d.ts +6 -0
  189. package/dist/types/src/types/types.d.ts.map +1 -0
  190. package/dist/types/src/util/deploy.d.ts +7 -7
  191. package/dist/types/src/util/deploy.d.ts.map +1 -1
  192. package/dist/types/src/util/functions.d.ts +6 -3
  193. package/dist/types/src/util/functions.d.ts.map +1 -1
  194. package/dist/types/tsconfig.tsbuildinfo +1 -1
  195. package/package.json +86 -76
  196. package/src/ScriptPlugin.tsx +81 -75
  197. package/src/capabilities/app-graph-builder.ts +12 -11
  198. package/src/capabilities/artifact-definition.ts +8 -6
  199. package/src/capabilities/blueprint-definition.ts +30 -0
  200. package/src/capabilities/compiler.ts +3 -2
  201. package/src/capabilities/index.ts +1 -1
  202. package/src/capabilities/intent-resolver.ts +21 -12
  203. package/src/capabilities/react-surface.tsx +33 -19
  204. package/src/capabilities/settings.ts +3 -3
  205. package/src/compiler/compiler.ts +1 -1
  206. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +39 -20
  207. package/src/components/DeploymentDialog/DeploymentDialog.tsx +45 -34
  208. package/src/components/DeploymentDialog/index.ts +1 -1
  209. package/src/components/FrameContainer/FrameContainer.tsx +5 -4
  210. package/src/components/NotebookContainer.stories.tsx +83 -0
  211. package/src/components/NotebookContainer.tsx +260 -0
  212. package/src/components/NotebookStack/NotebookCell.tsx +216 -0
  213. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  214. package/src/components/NotebookStack/NotebookStack.stories.tsx +54 -0
  215. package/src/components/NotebookStack/NotebookStack.tsx +86 -0
  216. package/src/components/NotebookStack/index.ts +6 -0
  217. package/src/components/ScriptContainer.tsx +10 -8
  218. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +34 -17
  219. package/src/components/ScriptToolbar/ScriptToolbar.tsx +37 -30
  220. package/src/components/Settings/ScriptObjectSettings.tsx +130 -38
  221. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  222. package/src/components/TestPanel/TestContainer.tsx +4 -3
  223. package/src/components/TestPanel/TestPanel.tsx +42 -19
  224. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +79 -31
  225. package/src/components/TypescriptEditor/TypescriptEditor.tsx +37 -35
  226. package/src/components/index.ts +3 -0
  227. package/src/events.ts +2 -2
  228. package/src/hooks/deploy.ts +24 -24
  229. package/src/hooks/format.ts +4 -4
  230. package/src/hooks/template.ts +6 -15
  231. package/src/hooks/useCreateAndDeployScriptTemplates.ts +11 -6
  232. package/src/index.ts +1 -0
  233. package/src/meta.ts +7 -5
  234. package/src/notebook/compute-graph.test.ts +70 -0
  235. package/src/notebook/compute-graph.ts +206 -0
  236. package/src/notebook/eval.ts +105 -0
  237. package/src/notebook/index.ts +5 -0
  238. package/src/notebook/vfs-parser.test.ts +149 -0
  239. package/src/notebook/vfs-parser.ts +451 -0
  240. package/src/templates/chess.ts +3 -1
  241. package/src/templates/data-generator.ts +9 -3
  242. package/src/templates/discord.ts +12 -4
  243. package/src/templates/forex-effect.ts +7 -3
  244. package/src/templates/forex.ts +3 -1
  245. package/src/templates/gmail.ts +34 -64
  246. package/src/templates/index.ts +6 -6
  247. package/src/testing/data.ts +72 -0
  248. package/src/testing/index.ts +5 -0
  249. package/src/translations.ts +35 -7
  250. package/src/types/Notebook.ts +42 -0
  251. package/src/types/actions.ts +53 -0
  252. package/src/types/index.ts +3 -1
  253. package/src/types/types.ts +15 -0
  254. package/src/util/deploy.ts +29 -46
  255. package/src/util/functions.ts +39 -8
  256. package/dist/lib/browser/DeploymentDialog-M4QIHTDR.mjs +0 -12
  257. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs +0 -262
  258. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs.map +0 -7
  259. package/dist/lib/browser/app-graph-builder-HLQ7K3BT.mjs.map +0 -7
  260. package/dist/lib/browser/artifact-definition-CK3BIBSI.mjs +0 -247
  261. package/dist/lib/browser/artifact-definition-CK3BIBSI.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-3U6DTUH3.mjs +0 -283
  263. package/dist/lib/browser/chunk-3U6DTUH3.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-FIM2MVNJ.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-FMDXKOP7.mjs +0 -233
  266. package/dist/lib/browser/chunk-FMDXKOP7.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  268. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-P4HQKUCP.mjs.map +0 -7
  270. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-R4R7VOFY.mjs +0 -88
  272. package/dist/lib/browser/chunk-R4R7VOFY.mjs.map +0 -7
  273. package/dist/lib/browser/compiler-CXCUA4UQ.mjs.map +0 -7
  274. package/dist/lib/browser/intent-resolver-S3H2SMUY.mjs.map +0 -7
  275. package/dist/lib/browser/react-surface-FYYXZA7C.mjs.map +0 -7
  276. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  277. package/dist/lib/node-esm/DeploymentDialog-3KPRWFE7.mjs +0 -13
  278. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs +0 -263
  279. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs.map +0 -7
  280. package/dist/lib/node-esm/app-graph-builder-7EYIHWH4.mjs.map +0 -7
  281. package/dist/lib/node-esm/artifact-definition-YCBV4YX2.mjs +0 -248
  282. package/dist/lib/node-esm/artifact-definition-YCBV4YX2.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-7NMI4CEU.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs +0 -90
  286. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  288. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-QKK3NDHW.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-RT43MACC.mjs +0 -284
  291. package/dist/lib/node-esm/chunk-RT43MACC.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs +0 -234
  293. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs.map +0 -7
  294. package/dist/lib/node-esm/compiler-EPFKQXPE.mjs.map +0 -7
  295. package/dist/lib/node-esm/intent-resolver-OHKNJFCC.mjs.map +0 -7
  296. package/dist/lib/node-esm/react-surface-V32NWHKN.mjs.map +0 -7
  297. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  298. package/dist/types/src/templates/echo.d.ts.map +0 -1
  299. package/dist/types/src/types/schema.d.ts +0 -38
  300. package/dist/types/src/types/schema.d.ts.map +0 -1
  301. package/src/types/schema.ts +0 -37
  302. /package/dist/lib/browser/{DeploymentDialog-M4QIHTDR.mjs.map → DeploymentDialog-5TKNGPVR.mjs.map} +0 -0
  303. /package/dist/lib/{node-esm/DeploymentDialog-3KPRWFE7.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  304. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-UOQ6NCH3.mjs.map} +0 -0
  305. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-55JZVM6K.mjs.map} +0 -0
  306. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -0,0 +1,260 @@
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, View } 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 graph = cell.graph?.target;
67
+ if (!graph) {
68
+ const { view } = await View.makeFromSpace({ space });
69
+ const graph = Graph.make({ query: { ast }, view });
70
+ cell.graph = Ref.make(graph);
71
+ cell.name = name;
72
+ } else {
73
+ graph.query.ast = ast;
74
+ }
75
+ }
76
+ }
77
+
78
+ if (cell.name && cell.graph?.target) {
79
+ const graph = Obj.getSnapshot(cell.graph?.target);
80
+ const query = Query.fromAst(graph.query.ast);
81
+ const result = await space?.db.query(query).run();
82
+ const objectIds = result?.objects?.map((obj) => obj.id);
83
+ setQueryValues((prev) => ({ ...prev, [cell.name!]: objectIds }));
84
+ }
85
+ }
86
+ }
87
+ }, [space, notebook, graph]);
88
+
89
+ const [promptResults, setPromptResults] = useState<Record<string, string>>({});
90
+ const handleExecPrompts = useComputeRuntimeCallback(
91
+ space,
92
+ Effect.fnUntraced(function* () {
93
+ invariant(graph);
94
+
95
+ const prompts =
96
+ notebook?.cells
97
+ .filter((cell) => cell.type === 'prompt')
98
+ .map((cell) => cell.prompt)
99
+ .filter(isNonNullable) ?? [];
100
+
101
+ for (const prompt of prompts) {
102
+ yield* runPrompt({
103
+ prompt,
104
+ input: { ...queryValues, ...graph.valuesByName.value },
105
+ onResult: (result) =>
106
+ setPromptResults((prev) => ({
107
+ ...prev,
108
+ [prompt.dxn.toString()]: result,
109
+ })),
110
+ });
111
+ }
112
+ }),
113
+ [notebook, graph, queryValues],
114
+ );
115
+
116
+ // TODO(burdon): Cache values in context (preserve when switched).
117
+ const handleCompute = useCallback(async () => {
118
+ // TODO(burdon): Generalize executors (dependencies).
119
+ await graph?.evaluate();
120
+ await handleExecQueries();
121
+ await handleExecPrompts();
122
+ }, [graph, handleExecQueries, handleExecPrompts]);
123
+
124
+ const handleRearrange = useCallback<NonNullable<NotebookStackProps['onRearrange']>>(
125
+ (source, target) => {
126
+ invariant(notebook);
127
+ const from = notebook.cells.findIndex((cell) => cell.id === source.id);
128
+ const to = notebook.cells.findIndex((cell) => cell.id === target.id);
129
+ if (from != null && to != null) {
130
+ const cell = notebook.cells.splice(from, 1)[0];
131
+ if (cell) {
132
+ notebook.cells.splice(to, 0, cell);
133
+ }
134
+ }
135
+ },
136
+ [notebook],
137
+ );
138
+
139
+ const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(
140
+ async (type, after) => {
141
+ invariant(notebook);
142
+ const cell: Notebook.Cell = { id: crypto.randomUUID(), type };
143
+ switch (type) {
144
+ case 'markdown':
145
+ case 'script':
146
+ case 'query': {
147
+ cell.source = Ref.make(Text.make());
148
+ break;
149
+ }
150
+
151
+ case 'prompt': {
152
+ if (space) {
153
+ const result = await space.db.query(Query.select(Filter.type(Blueprint.Blueprint))).run();
154
+ const blueprints = result.objects
155
+ .filter((blueprint) => INCLUDE_BLUEPRINTS.includes(blueprint.key))
156
+ .map((blueprint) => Ref.make(blueprint));
157
+ cell.prompt = Ref.make(Prompt.make({ instructions: '', blueprints }));
158
+ }
159
+ break;
160
+ }
161
+ }
162
+
163
+ const idx = after ? notebook.cells.findIndex((cell) => cell.id === after) : notebook.cells.length;
164
+ notebook.cells.splice(idx, 0, cell);
165
+ },
166
+ [space, notebook],
167
+ );
168
+
169
+ const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(
170
+ (id) => {
171
+ invariant(notebook);
172
+ const idx = notebook.cells.findIndex((cell) => cell.id === id);
173
+ if (idx !== -1) {
174
+ notebook.cells.splice(idx, 1);
175
+ }
176
+ },
177
+ [notebook],
178
+ );
179
+
180
+ return (
181
+ <StackItem.Content toolbar>
182
+ <Toolbar.Root disabled={!hasAttention} textBlockWidth>
183
+ <DropdownMenu.Root>
184
+ <DropdownMenu.Trigger asChild>
185
+ <IconButton icon='ph--plus--regular' iconOnly label={t('notebook cell insert label')} />
186
+ </DropdownMenu.Trigger>
187
+ <NotebookMenu onCellInsert={handleCellInsert} />
188
+ </DropdownMenu.Root>
189
+ <Toolbar.IconButton
190
+ icon='ph--play--fill'
191
+ iconOnly
192
+ label={t('compute label')}
193
+ classNames='text-green-500'
194
+ onClick={handleCompute}
195
+ />
196
+ </Toolbar.Root>
197
+ <div role='none' className='flex bs-full overflow-hidden -mis-[1px] -mie-[1px]'>
198
+ <NotebookStack
199
+ classNames='container-max-width border-l border-r border-subduedSeparator'
200
+ space={space}
201
+ notebook={notebook}
202
+ graph={graph}
203
+ env={env}
204
+ promptResults={promptResults}
205
+ onRearrange={handleRearrange}
206
+ onCellInsert={handleCellInsert}
207
+ onCellDelete={handleCellDelete}
208
+ />
209
+ </div>
210
+ </StackItem.Content>
211
+ );
212
+ };
213
+
214
+ export default NotebookContainer;
215
+
216
+ // TODO(wittjosiah): Factor out. Copied from PromptArticle in plugin-assistant.
217
+ const runPrompt = Effect.fn(function* ({
218
+ prompt,
219
+ input,
220
+ onResult,
221
+ }: {
222
+ prompt: Ref.Ref<Prompt.Prompt>;
223
+ input: Record<string, any>;
224
+ onResult: (result: string) => void;
225
+ }) {
226
+ const inputData: FunctionDefinition.Input<typeof Agent.prompt> = {
227
+ prompt,
228
+ input,
229
+ };
230
+ const tracer = yield* InvocationTracer;
231
+ const trace = yield* tracer.traceInvocationStart({
232
+ target: undefined,
233
+ payload: {
234
+ data: {},
235
+ },
236
+ });
237
+
238
+ // Invoke the function.
239
+ const result = yield* FunctionInvocationService.invokeFunction(Agent.prompt, inputData).pipe(
240
+ Effect.provide(TracingServiceExt.layerQueue(trace.invocationTraceQueue)),
241
+ Effect.exit,
242
+ );
243
+
244
+ Exit.match(result, {
245
+ onFailure: (cause) => {
246
+ const error = Cause.prettyErrors(cause)[0];
247
+ log.error(error.message, error.cause ?? error.stack);
248
+ onResult(error.message);
249
+ },
250
+ onSuccess: (result: any) => {
251
+ onResult(result.note);
252
+ },
253
+ });
254
+
255
+ yield* tracer.traceInvocationEnd({
256
+ trace,
257
+ // TODO(dmaretskyi): Might miss errors.
258
+ exception: Exit.isFailure(result) ? Cause.prettyErrors(result.cause)[0] : undefined,
259
+ });
260
+ });
@@ -0,0 +1,216 @@
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 { createDocAccessor } from '@dxos/echo-db';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { TemplateEditor } from '@dxos/plugin-assistant';
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 explorerGraph = cell.graph?.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
117
+ className={mx('bs-full overflow-hidden grid', explorerGraph && !dragging && 'grid-rows-[min-content_1fr]')}
118
+ >
119
+ <QueryEditor
120
+ id={cell.id}
121
+ classNames={[editorStyles, 'border-be border-subduedSeparator']}
122
+ db={space?.db}
123
+ value={cell.source.target.content}
124
+ onChange={handleQueryChange}
125
+ />
126
+ {explorerGraph && !dragging && <Surface role='section' limit={1} data={{ subject: explorerGraph }} />}
127
+ </div>
128
+ );
129
+
130
+ // TODO(burdon): Use streaming response from Chat.
131
+ case 'prompt':
132
+ if (!cell.prompt?.target) {
133
+ return null;
134
+ }
135
+
136
+ return (
137
+ <>
138
+ <TemplateEditor
139
+ id={cell.id}
140
+ template={cell.prompt.target.instructions}
141
+ lineNumbers={false}
142
+ classNames={editorStyles}
143
+ />
144
+ <NotebookPromptResult cell={cell} promptResults={promptResults} />
145
+ </>
146
+ );
147
+
148
+ default:
149
+ return null;
150
+ }
151
+ };
152
+
153
+ const NotebookCellValue = ({ cell, graph }: NotebookCellProps) => {
154
+ const name = graph?.expressions.value[cell.id]?.name;
155
+ const value = graph?.getValue(cell.id);
156
+ if (value == null) {
157
+ return null;
158
+ }
159
+
160
+ return (
161
+ <div
162
+ className={mx(
163
+ 'flex is-full bg-groupSurface border-t border-subduedSeparator text-description font-mono',
164
+ valueStyles,
165
+ )}
166
+ >
167
+ {name && (
168
+ <>
169
+ <span className='text-successText'>{name}</span>
170
+ <span className='text-description'>&nbsp;=&nbsp;</span>
171
+ </>
172
+ )}
173
+ <span>{value}</span>
174
+ </div>
175
+ );
176
+ };
177
+
178
+ const NotebookPromptResult = ({ cell, promptResults }: NotebookCellProps) => {
179
+ if (!cell.prompt) {
180
+ return null;
181
+ }
182
+
183
+ const value = promptResults?.[cell.prompt.dxn.toString()];
184
+ if (value == null) {
185
+ return null;
186
+ }
187
+
188
+ return (
189
+ <div className={mx('flex is-full bg-groupSurface text-description border-t border-subduedSeparator', valueStyles)}>
190
+ <NotebookTextEditor readOnly value={value} />
191
+ </div>
192
+ );
193
+ };
194
+
195
+ const NotebookTextEditor = ({
196
+ extensions: extensionsParam,
197
+ readOnly,
198
+ ...props
199
+ }: EditorContentProps & Pick<BasicExtensionsOptions, 'readOnly'>) => {
200
+ const { t } = useTranslation(meta.id);
201
+ const { themeMode } = useThemeContext();
202
+ const extensions = useMemo(() => {
203
+ return [
204
+ createBasicExtensions({
205
+ placeholder: t('notebook markdown placeholder'),
206
+ readOnly,
207
+ }),
208
+ createThemeExtensions({ themeMode, syntaxHighlighting: true }),
209
+ createMarkdownExtensions(),
210
+ decorateMarkdown(),
211
+ extensionsParam,
212
+ ].filter(isNonNullable);
213
+ }, [extensionsParam]);
214
+
215
+ return <EditorContent {...props} extensions={extensions} selectionEnd />;
216
+ };
@@ -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';