@dxos/plugin-script 0.8.4-main.67995b8 → 0.8.4-main.c4373fc

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 (271) hide show
  1. package/dist/lib/browser/DeploymentDialog-7FNPALCV.mjs +12 -0
  2. package/dist/lib/browser/NotebookContainer-ZSXYRRZB.mjs +578 -0
  3. package/dist/lib/browser/NotebookContainer-ZSXYRRZB.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-24LLLTLB.mjs +149 -0
  5. package/dist/lib/browser/ScriptContainer-24LLLTLB.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-HLQ7K3BT.mjs → app-graph-builder-DPYULSME.mjs} +9 -8
  7. package/dist/lib/browser/app-graph-builder-DPYULSME.mjs.map +7 -0
  8. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs +28 -0
  9. package/dist/lib/browser/blueprint-definition-ET5KZ46I.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-3U6DTUH3.mjs → chunk-DXWTBOND.mjs} +26 -27
  11. package/dist/lib/browser/chunk-DXWTBOND.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-FMDXKOP7.mjs → chunk-ETFBQURU.mjs} +71 -50
  13. package/dist/lib/browser/chunk-ETFBQURU.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EZVXV6DA.mjs} +3 -5
  15. package/dist/lib/browser/chunk-EZVXV6DA.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-I3THDIT5.mjs +90 -0
  17. package/dist/lib/browser/chunk-I3THDIT5.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-N6M34EUC.mjs +112 -0
  19. package/dist/lib/browser/chunk-N6M34EUC.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-P4HQKUCP.mjs → chunk-NNYSARXK.mjs} +15 -15
  21. package/dist/lib/browser/chunk-NNYSARXK.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-OKXN2N7M.mjs} +2 -2
  23. package/dist/lib/browser/{chunk-FIM2MVNJ.mjs → chunk-SRSEZWDY.mjs} +159 -68
  24. package/dist/lib/browser/chunk-SRSEZWDY.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-SWBZUZDX.mjs +80 -0
  26. package/dist/lib/browser/chunk-SWBZUZDX.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-VFJJA4WR.mjs +88 -0
  28. package/dist/lib/browser/chunk-VFJJA4WR.mjs.map +7 -0
  29. package/dist/lib/browser/{compiler-CXCUA4UQ.mjs → compiler-G2N2CG63.mjs} +24 -8
  30. package/dist/lib/browser/compiler-G2N2CG63.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +96 -39
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-S3H2SMUY.mjs → intent-resolver-FYZRLYNT.mjs} +29 -13
  34. package/dist/lib/browser/intent-resolver-FYZRLYNT.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/{react-surface-FYYXZA7C.mjs → react-surface-CFRYAL2P.mjs} +36 -13
  37. package/dist/lib/browser/react-surface-CFRYAL2P.mjs.map +7 -0
  38. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-L3HCZRBP.mjs} +8 -8
  39. package/dist/lib/browser/settings-L3HCZRBP.mjs.map +7 -0
  40. package/dist/lib/browser/templates/index.mjs +1 -1
  41. package/dist/lib/browser/types/index.mjs +6 -4
  42. package/dist/lib/node-esm/{DeploymentDialog-3KPRWFE7.mjs → DeploymentDialog-AKAGR37W.mjs} +5 -5
  43. package/dist/lib/node-esm/NotebookContainer-2O3N3XPE.mjs +579 -0
  44. package/dist/lib/node-esm/NotebookContainer-2O3N3XPE.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-IKOB6FHQ.mjs +150 -0
  46. package/dist/lib/node-esm/ScriptContainer-IKOB6FHQ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-builder-7EYIHWH4.mjs → app-graph-builder-UXJGHXSL.mjs} +9 -8
  48. package/dist/lib/node-esm/app-graph-builder-UXJGHXSL.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs +30 -0
  50. package/dist/lib/node-esm/blueprint-definition-AIYFOT7Q.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-QKK3NDHW.mjs → chunk-5IKGUOMI.mjs} +15 -15
  52. package/dist/lib/node-esm/chunk-5IKGUOMI.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-RT43MACC.mjs → chunk-7MR2L4T3.mjs} +26 -27
  54. package/dist/lib/node-esm/chunk-7MR2L4T3.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-C33FKUSC.mjs +91 -0
  56. package/dist/lib/node-esm/chunk-C33FKUSC.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-35M3CHYE.mjs → chunk-NUXZQQ6P.mjs} +2 -2
  58. package/dist/lib/node-esm/{chunk-AHXJ6NQU.mjs → chunk-OG2SIKHE.mjs} +3 -5
  59. package/dist/lib/node-esm/chunk-OG2SIKHE.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-OQGBKNYU.mjs +90 -0
  61. package/dist/lib/node-esm/chunk-OQGBKNYU.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-7NMI4CEU.mjs → chunk-PMQ3D535.mjs} +159 -68
  63. package/dist/lib/node-esm/chunk-PMQ3D535.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-XJPK3IYI.mjs → chunk-U4CZGISN.mjs} +71 -50
  65. package/dist/lib/node-esm/chunk-U4CZGISN.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs +114 -0
  67. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-ZF5ULKED.mjs +81 -0
  69. package/dist/lib/node-esm/chunk-ZF5ULKED.mjs.map +7 -0
  70. package/dist/lib/node-esm/{compiler-EPFKQXPE.mjs → compiler-PLDAZ5GJ.mjs} +24 -8
  71. package/dist/lib/node-esm/compiler-PLDAZ5GJ.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +96 -39
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-OHKNJFCC.mjs → intent-resolver-6J3CFL5T.mjs} +29 -13
  75. package/dist/lib/node-esm/intent-resolver-6J3CFL5T.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-NPKEO7SA.mjs} +36 -13
  78. package/dist/lib/node-esm/react-surface-NPKEO7SA.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-YWGZP4EW.mjs} +8 -8
  80. package/dist/lib/node-esm/settings-YWGZP4EW.mjs.map +7 -0
  81. package/dist/lib/node-esm/templates/index.mjs +1 -1
  82. package/dist/lib/node-esm/types/index.mjs +6 -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 +2 -2
  102. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  103. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +225 -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.map +1 -1
  108. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  109. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  110. package/dist/types/src/components/NotebookContainer.stories.d.ts +231 -0
  111. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +16 -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 +231 -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 +2 -0
  117. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  118. package/dist/types/src/components/ScriptContainer.d.ts +2 -2
  119. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  120. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  121. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +227 -10
  122. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  124. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  125. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  126. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  128. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  129. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +17 -4
  130. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/index.d.ts +3 -4
  132. package/dist/types/src/components/index.d.ts.map +1 -1
  133. package/dist/types/src/events.d.ts.map +1 -1
  134. package/dist/types/src/hooks/deploy.d.ts +11 -10
  135. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  136. package/dist/types/src/hooks/template.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  138. package/dist/types/src/index.d.ts +1 -0
  139. package/dist/types/src/index.d.ts.map +1 -1
  140. package/dist/types/src/meta.d.ts +0 -1
  141. package/dist/types/src/meta.d.ts.map +1 -1
  142. package/dist/types/src/notebook/index.d.ts +2 -0
  143. package/dist/types/src/notebook/index.d.ts.map +1 -0
  144. package/dist/types/src/notebook/notebook.d.ts +39 -0
  145. package/dist/types/src/notebook/notebook.d.ts.map +1 -0
  146. package/dist/types/src/notebook/notebook.test.d.ts +2 -0
  147. package/dist/types/src/notebook/notebook.test.d.ts.map +1 -0
  148. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  149. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  150. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  151. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  152. package/dist/types/src/templates/chess.d.ts.map +1 -1
  153. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  154. package/dist/types/src/templates/discord.d.ts.map +1 -1
  155. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  156. package/dist/types/src/templates/forex.d.ts.map +1 -1
  157. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  158. package/dist/types/src/testing/data.d.ts +10 -0
  159. package/dist/types/src/testing/data.d.ts.map +1 -0
  160. package/dist/types/src/testing/index.d.ts +2 -0
  161. package/dist/types/src/testing/index.d.ts.map +1 -0
  162. package/dist/types/src/translations.d.ts +21 -2
  163. package/dist/types/src/translations.d.ts.map +1 -1
  164. package/dist/types/src/types/actions.d.ts +58 -0
  165. package/dist/types/src/types/actions.d.ts.map +1 -0
  166. package/dist/types/src/types/index.d.ts +1 -0
  167. package/dist/types/src/types/index.d.ts.map +1 -1
  168. package/dist/types/src/types/schema.d.ts +29 -32
  169. package/dist/types/src/types/schema.d.ts.map +1 -1
  170. package/dist/types/src/util/deploy.d.ts +3 -3
  171. package/dist/types/src/util/deploy.d.ts.map +1 -1
  172. package/dist/types/src/util/functions.d.ts +5 -2
  173. package/dist/types/src/util/functions.d.ts.map +1 -1
  174. package/dist/types/tsconfig.tsbuildinfo +1 -1
  175. package/package.json +76 -75
  176. package/src/ScriptPlugin.tsx +91 -69
  177. package/src/capabilities/app-graph-builder.ts +6 -5
  178. package/src/capabilities/artifact-definition.ts +7 -4
  179. package/src/capabilities/blueprint-definition.ts +30 -0
  180. package/src/capabilities/compiler.ts +2 -1
  181. package/src/capabilities/index.ts +1 -1
  182. package/src/capabilities/intent-resolver.ts +14 -4
  183. package/src/capabilities/react-surface.tsx +20 -7
  184. package/src/capabilities/settings.ts +3 -3
  185. package/src/compiler/compiler.ts +1 -1
  186. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +34 -20
  187. package/src/components/DeploymentDialog/DeploymentDialog.tsx +16 -22
  188. package/src/components/DeploymentDialog/index.ts +1 -1
  189. package/src/components/FrameContainer/FrameContainer.tsx +3 -2
  190. package/src/components/NotebookContainer.stories.tsx +36 -0
  191. package/src/components/NotebookContainer.tsx +82 -0
  192. package/src/components/NotebookStack/NotebookStack.stories.tsx +36 -0
  193. package/src/components/NotebookStack/NotebookStack.tsx +113 -0
  194. package/src/components/NotebookStack/index.ts +5 -0
  195. package/src/components/ScriptContainer.tsx +4 -3
  196. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +33 -17
  197. package/src/components/ScriptToolbar/ScriptToolbar.tsx +30 -23
  198. package/src/components/Settings/ScriptObjectSettings.tsx +111 -31
  199. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  200. package/src/components/TestPanel/TestContainer.tsx +2 -1
  201. package/src/components/TestPanel/TestPanel.tsx +6 -6
  202. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +84 -30
  203. package/src/components/TypescriptEditor/TypescriptEditor.tsx +32 -25
  204. package/src/components/index.ts +3 -0
  205. package/src/events.ts +2 -2
  206. package/src/hooks/deploy.ts +18 -19
  207. package/src/hooks/format.ts +2 -2
  208. package/src/hooks/template.ts +4 -3
  209. package/src/hooks/useCreateAndDeployScriptTemplates.ts +4 -3
  210. package/src/index.ts +1 -0
  211. package/src/meta.ts +2 -4
  212. package/src/notebook/index.ts +5 -0
  213. package/src/notebook/notebook.test.ts +38 -0
  214. package/src/notebook/notebook.ts +188 -0
  215. package/src/notebook/vfs-parser.test.ts +149 -0
  216. package/src/notebook/vfs-parser.ts +490 -0
  217. package/src/templates/chess.ts +3 -1
  218. package/src/templates/data-generator.ts +9 -3
  219. package/src/templates/discord.ts +12 -4
  220. package/src/templates/forex-effect.ts +7 -3
  221. package/src/templates/forex.ts +3 -1
  222. package/src/templates/gmail.ts +33 -62
  223. package/src/testing/data.ts +37 -0
  224. package/src/testing/index.ts +5 -0
  225. package/src/translations.ts +24 -4
  226. package/src/types/actions.ts +49 -0
  227. package/src/types/index.ts +1 -0
  228. package/src/types/schema.ts +24 -19
  229. package/src/util/deploy.ts +20 -33
  230. package/src/util/functions.ts +35 -6
  231. package/dist/lib/browser/DeploymentDialog-M4QIHTDR.mjs +0 -12
  232. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs +0 -262
  233. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs.map +0 -7
  234. package/dist/lib/browser/app-graph-builder-HLQ7K3BT.mjs.map +0 -7
  235. package/dist/lib/browser/artifact-definition-CK3BIBSI.mjs +0 -247
  236. package/dist/lib/browser/artifact-definition-CK3BIBSI.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-3U6DTUH3.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-FIM2MVNJ.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-FMDXKOP7.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  241. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-P4HQKUCP.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-R4R7VOFY.mjs +0 -88
  245. package/dist/lib/browser/chunk-R4R7VOFY.mjs.map +0 -7
  246. package/dist/lib/browser/compiler-CXCUA4UQ.mjs.map +0 -7
  247. package/dist/lib/browser/intent-resolver-S3H2SMUY.mjs.map +0 -7
  248. package/dist/lib/browser/react-surface-FYYXZA7C.mjs.map +0 -7
  249. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  250. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs +0 -263
  251. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs.map +0 -7
  252. package/dist/lib/node-esm/app-graph-builder-7EYIHWH4.mjs.map +0 -7
  253. package/dist/lib/node-esm/artifact-definition-YCBV4YX2.mjs +0 -248
  254. package/dist/lib/node-esm/artifact-definition-YCBV4YX2.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-7NMI4CEU.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs +0 -90
  258. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  260. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-QKK3NDHW.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-RT43MACC.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs.map +0 -7
  264. package/dist/lib/node-esm/compiler-EPFKQXPE.mjs.map +0 -7
  265. package/dist/lib/node-esm/intent-resolver-OHKNJFCC.mjs.map +0 -7
  266. package/dist/lib/node-esm/react-surface-V32NWHKN.mjs.map +0 -7
  267. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  268. /package/dist/lib/browser/{DeploymentDialog-M4QIHTDR.mjs.map → DeploymentDialog-7FNPALCV.mjs.map} +0 -0
  269. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-OKXN2N7M.mjs.map} +0 -0
  270. /package/dist/lib/node-esm/{DeploymentDialog-3KPRWFE7.mjs.map → DeploymentDialog-AKAGR37W.mjs.map} +0 -0
  271. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-NUXZQQ6P.mjs.map} +0 -0
@@ -2,38 +2,52 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
8
+ import { IntentPlugin } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Obj } from '@dxos/echo';
11
+ import { ClientPlugin } from '@dxos/plugin-client';
10
12
  import { Dialog } from '@dxos/react-ui';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
13
+ import { withTheme } from '@dxos/react-ui/testing';
14
+ import { DataType } from '@dxos/schema';
12
15
 
13
16
  import { translations } from '../../translations';
14
- import { DeploymentDialog } from '../DeploymentDialog/DeploymentDialog';
15
17
 
16
- export const Default = {
17
- args: {
18
- accessToken: { value: 'example-token' },
19
- scripts: [
20
- { label: 'Script 1', templateId: 'template1' },
21
- { label: 'Script 2', templateId: 'template2' },
22
- { label: 'Script 3', templateId: 'template3' },
23
- ],
24
- },
25
- render: (args: any) => (
18
+ import { DeploymentDialog, type DeploymentDialogProps } from './DeploymentDialog';
19
+
20
+ const DefaultStory = (props: DeploymentDialogProps) => {
21
+ return (
26
22
  <Dialog.Root defaultOpen={true}>
27
- <DeploymentDialog {...args} />
23
+ <DeploymentDialog {...props} />
28
24
  </Dialog.Root>
29
- ),
25
+ );
30
26
  };
31
27
 
32
- const meta: Meta = {
28
+ const meta = {
33
29
  title: 'plugins/plugin-script/DeploymentDialog',
34
30
  component: DeploymentDialog,
31
+ render: DefaultStory,
35
32
  parameters: { translations },
36
- decorators: [withTheme, withLayout()],
37
- };
33
+ // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
34
+ decorators: [withTheme, withPluginManager({ plugins: [IntentPlugin(), ClientPlugin({})] })],
35
+ } satisfies Meta<typeof DefaultStory>;
38
36
 
39
37
  export default meta;
38
+
39
+ type Story = StoryObj<typeof meta>;
40
+
41
+ export const Default: Story = {
42
+ args: {
43
+ accessToken: Obj.make(DataType.AccessToken, {
44
+ source: 'example.com',
45
+ token: 'example-token',
46
+ }),
47
+ scriptTemplates: [
48
+ { id: 't-1', name: 'Script 1', source: 'template1' },
49
+ { id: 't-2', name: 'Script 2', source: 'template2' },
50
+ { id: 't-3', name: 'Script 3', source: 'template3' },
51
+ ],
52
+ },
53
+ };
@@ -4,29 +4,29 @@
4
4
 
5
5
  import React, { useEffect, useMemo } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
8
  import { getSpace } from '@dxos/react-client/echo';
9
9
  import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
10
10
  import { type DataType } from '@dxos/schema';
11
11
 
12
12
  import { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';
13
- import { SCRIPT_PLUGIN } from '../../meta';
13
+ import { meta } from '../../meta';
14
14
  import { type Template } from '../../templates';
15
15
 
16
- export const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;
16
+ export const DEPLOYMENT_DIALOG = `${meta.id}/deployment/dialog`;
17
17
 
18
18
  // TODO(ZaymonFC):
19
- // - Show activity and feedback to the user.
20
- // - Only take an array of templateIds and get the name from the data.
21
- // - Pending / onError states.
19
+ // - Show activity and feedback to the user.
20
+ // - Only take an array of templateIds and get the name from the data.
21
+ // - Pending / onError states.
22
22
 
23
- type DeploymentDialogProps = {
23
+ export type DeploymentDialogProps = {
24
24
  accessToken: DataType.AccessToken;
25
25
  scriptTemplates: Template[];
26
26
  };
27
27
 
28
28
  export const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDialogProps) => {
29
- const { t } = useTranslation(SCRIPT_PLUGIN);
29
+ const { t } = useTranslation(meta.id);
30
30
  const space = useMemo(() => getSpace(accessToken), [accessToken]);
31
31
 
32
32
  // TODO(ZaymonFC): Thinking further. All of this should get moved to intents to run async in the background.
@@ -41,12 +41,12 @@ export const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDia
41
41
  createIntent(LayoutAction.AddToast, {
42
42
  part: 'toast',
43
43
  subject: {
44
- id: `${SCRIPT_PLUGIN}/deployment-success`,
44
+ id: `${meta.id}/deployment-success`,
45
45
  icon: 'ph--check--regular',
46
46
  duration: Infinity,
47
- title: ['script deployment toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],
48
- description: ['script deployment toast description', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],
49
- closeLabel: ['script deployment toast close label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],
47
+ title: ['script deployment toast label', { ns: meta.id, count: scriptTemplates.length }],
48
+ description: ['script deployment toast description', { ns: meta.id, count: scriptTemplates.length }],
49
+ closeLabel: ['script deployment toast close label', { ns: meta.id, count: scriptTemplates.length }],
50
50
  },
51
51
  }),
52
52
  );
@@ -58,18 +58,12 @@ export const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDia
58
58
  createIntent(LayoutAction.AddToast, {
59
59
  part: 'toast',
60
60
  subject: {
61
- id: `${SCRIPT_PLUGIN}/deployment-error`,
61
+ id: `${meta.id}/deployment-error`,
62
62
  icon: 'ph--warning--regular',
63
63
  duration: Infinity,
64
- title: ['script deployment error toast label', { ns: SCRIPT_PLUGIN, count: scriptTemplates.length }],
65
- description: [
66
- 'script deployment error toast description',
67
- { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },
68
- ],
69
- closeLabel: [
70
- 'script deployment error toast close label',
71
- { ns: SCRIPT_PLUGIN, count: scriptTemplates.length },
72
- ],
64
+ title: ['script deployment error toast label', { ns: meta.id, count: scriptTemplates.length }],
65
+ description: ['script deployment error toast description', { ns: meta.id, count: scriptTemplates.length }],
66
+ closeLabel: ['script deployment error toast close label', { ns: meta.id, count: scriptTemplates.length }],
73
67
  },
74
68
  }),
75
69
  );
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { DeploymentDialog, DEPLOYMENT_DIALOG } from './DeploymentDialog';
5
+ import { DEPLOYMENT_DIALOG, DeploymentDialog } from './DeploymentDialog';
6
6
 
7
7
  export { DEPLOYMENT_DIALOG };
8
8
 
@@ -48,7 +48,8 @@ export const FrameContainer = ({ containerUrl, result, debug = true }: FrameCont
48
48
  // Encodes compiled code via URL.
49
49
  invariant(result.sourceHash, 'Source hash is required.');
50
50
  const sourceHash = Buffer.from(result.sourceHash).toString('hex');
51
- const src = result.bundle && `${containerUrl}?ts=${sourceHash}#code=${encodeURIComponent(result.bundle)}`;
51
+ const src =
52
+ 'bundle' in result ? `${containerUrl}?ts=${sourceHash}#code=${encodeURIComponent(result.bundle)}` : undefined;
52
53
 
53
54
  return (
54
55
  <>
@@ -68,7 +69,7 @@ export const FrameContainer = ({ containerUrl, result, debug = true }: FrameCont
68
69
  {
69
70
  timestamp: result.timestamp,
70
71
  sourceHash,
71
- error: result.error,
72
+ error: 'error' in result ? result.error : undefined,
72
73
  src,
73
74
  },
74
75
  undefined,
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withClientProvider } from '@dxos/react-client/testing';
8
+ import { withTheme } from '@dxos/react-ui/testing';
9
+
10
+ import { createNotebook } from '../testing';
11
+ import { translations } from '../translations';
12
+
13
+ import { NotebookContainer } from './NotebookContainer';
14
+
15
+ const meta = {
16
+ title: 'plugins/plugin-script/NotebookContainer',
17
+ component: NotebookContainer,
18
+ decorators: [withTheme, withClientProvider()],
19
+ parameters: {
20
+ layout: {
21
+ type: 'column',
22
+ className: 'is-prose',
23
+ },
24
+ translations,
25
+ },
26
+ } satisfies Meta<typeof NotebookContainer>;
27
+
28
+ export default meta;
29
+
30
+ type Story = StoryObj<typeof meta>;
31
+
32
+ export const Default: Story = {
33
+ args: {
34
+ notebook: createNotebook(),
35
+ },
36
+ };
@@ -0,0 +1,82 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo } from 'react';
6
+
7
+ import { Ref } from '@dxos/echo';
8
+ import { Toolbar, useTranslation } from '@dxos/react-ui';
9
+ import { StackItem } from '@dxos/react-ui-stack';
10
+ import { DataType } from '@dxos/schema';
11
+
12
+ import { meta } from '../meta';
13
+ import { ComputeGraph } from '../notebook';
14
+ import { type Notebook } from '../types';
15
+
16
+ import { NotebookStack, type NotebookStackProps } from './NotebookStack';
17
+ import { type TypescriptEditorProps } from './TypescriptEditor';
18
+
19
+ export type NotebookContainerProps = {
20
+ role?: string;
21
+ notebook?: Notebook.Notebook;
22
+ } & Pick<TypescriptEditorProps, 'env'>;
23
+
24
+ export const NotebookContainer = ({ notebook, env }: NotebookContainerProps) => {
25
+ const { t } = useTranslation(meta.id);
26
+
27
+ const graph = useMemo(() => notebook && new ComputeGraph(notebook), [notebook]);
28
+
29
+ const handleCompute = useCallback(() => {
30
+ graph?.evaluate();
31
+ }, [graph]);
32
+
33
+ const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(
34
+ (after) => {
35
+ const idx = after ? notebook!.cells.findIndex((cell) => cell.id === after) : notebook!.cells.length;
36
+ notebook?.cells.splice(idx, 0, {
37
+ id: crypto.randomUUID(),
38
+ script: Ref.make(DataType.makeText('\n\n\n')),
39
+ });
40
+ },
41
+ [notebook],
42
+ );
43
+
44
+ const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(
45
+ (id: string) => {
46
+ const idx = notebook!.cells.findIndex((cell) => cell.id === id);
47
+ if (idx !== -1) {
48
+ notebook!.cells.splice(idx, 1);
49
+ }
50
+ },
51
+ [notebook],
52
+ );
53
+
54
+ return (
55
+ <StackItem.Content classNames='container-max-width border-l border-r border-subduedSeparator' toolbar>
56
+ <Toolbar.Root>
57
+ <Toolbar.IconButton
58
+ icon='ph--plus--regular'
59
+ iconOnly
60
+ label={t('add cell label')}
61
+ onClick={() => handleCellInsert('')}
62
+ />
63
+ <Toolbar.IconButton
64
+ icon='ph--play--fill'
65
+ iconOnly
66
+ label={t('compute label')}
67
+ classNames='text-green-500'
68
+ onClick={handleCompute}
69
+ />
70
+ </Toolbar.Root>
71
+ <NotebookStack
72
+ notebook={notebook}
73
+ graph={graph}
74
+ env={env}
75
+ onCellInsert={handleCellInsert}
76
+ onCellDelete={handleCellDelete}
77
+ />
78
+ </StackItem.Content>
79
+ );
80
+ };
81
+
82
+ export default NotebookContainer;
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withClientProvider } from '@dxos/react-client/testing';
8
+ import { withTheme } from '@dxos/react-ui/testing';
9
+
10
+ import { createNotebook } from '../../testing';
11
+ import { translations } from '../../translations';
12
+
13
+ import { NotebookStack } from './NotebookStack';
14
+
15
+ const meta = {
16
+ title: 'plugins/plugin-script/NotebookStack',
17
+ component: NotebookStack,
18
+ decorators: [withTheme, withClientProvider()],
19
+ parameters: {
20
+ layout: {
21
+ type: 'column',
22
+ className: 'is-prose',
23
+ },
24
+ translations,
25
+ },
26
+ } satisfies Meta<typeof NotebookStack>;
27
+
28
+ export default meta;
29
+
30
+ type Story = StoryObj<typeof meta>;
31
+
32
+ export const Default: Story = {
33
+ args: {
34
+ notebook: createNotebook(),
35
+ },
36
+ };
@@ -0,0 +1,113 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { createDocAccessor } from '@dxos/react-client/echo';
8
+ import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
9
+ import { createDataExtensions } from '@dxos/react-ui-editor';
10
+ import { Stack, StackItem } from '@dxos/react-ui-stack';
11
+
12
+ import { meta } from '../../meta';
13
+ import { type ComputeGraph } from '../../notebook';
14
+ import { type Notebook } from '../../types';
15
+ import { TypescriptEditor } from '../TypescriptEditor';
16
+ import { type TypescriptEditorProps } from '../TypescriptEditor';
17
+
18
+ export type NotebookStackProps = {
19
+ notebook?: Notebook.Notebook;
20
+ } & Pick<NotebookSectionProps, 'graph' | 'onCellInsert' | 'onCellDelete'> &
21
+ Pick<TypescriptEditorProps, 'env'>;
22
+
23
+ // TODO(burdon): Option for narrow rail (with compact buttons that align with first button in toolbar).
24
+ export const NotebookStack = ({ notebook, ...props }: NotebookStackProps) => {
25
+ return (
26
+ <Stack orientation='vertical' size='contain' rail>
27
+ {notebook?.cells.map((cell, i) => (
28
+ <NotebookSection key={i} cell={cell} {...props} />
29
+ ))}
30
+ </Stack>
31
+ );
32
+ };
33
+
34
+ // TODO(burdon): Support calling named deployed functions (as with sheet).
35
+ // TODO(burdon): Different section types (value, query, expression, prompt).
36
+ // TODO(burdon): Display errors.
37
+ // TODO(burdon): Allow moving cursor between sections (CMD Up/Down).
38
+
39
+ type NotebookSectionProps = {
40
+ cell: Notebook.Cell;
41
+ graph?: ComputeGraph;
42
+ onCellInsert?: (after: string | undefined) => void;
43
+ onCellDelete?: (id: string) => void;
44
+ } & Pick<TypescriptEditorProps, 'env'>;
45
+
46
+ const NotebookSection = ({ cell, graph, env, onCellInsert, onCellDelete }: NotebookSectionProps) => {
47
+ const { t } = useTranslation(meta.id);
48
+ const extensions = useMemo(() => {
49
+ return cell.script.target
50
+ ? [createDataExtensions({ id: cell.id, text: createDocAccessor(cell.script.target, ['content']) })]
51
+ : [];
52
+ }, [cell.script.target]);
53
+
54
+ const name = graph?.expressions.value[cell.id]?.name;
55
+ const value = graph?.values.value[cell.id];
56
+
57
+ return (
58
+ <StackItem.Root role='section' item={cell}>
59
+ <StackItem.Heading classNames='attention-surface'>
60
+ <StackItem.HeadingStickyContent>
61
+ <DropdownMenu.Root>
62
+ <DropdownMenu.Trigger asChild>
63
+ <StackItem.SigilButton>
64
+ <Icon icon='ph--list--regular' size={5} />
65
+ </StackItem.SigilButton>
66
+ </DropdownMenu.Trigger>
67
+ <DropdownMenu.Portal>
68
+ <DropdownMenu.Content>
69
+ <DropdownMenu.Viewport>
70
+ <DropdownMenu.Item onClick={() => onCellInsert?.(cell.id)}>
71
+ {t('notebook cell insert label')}
72
+ </DropdownMenu.Item>
73
+ <DropdownMenu.Item onClick={() => onCellDelete?.(cell.id)}>
74
+ {t('notebook cell delete label')}
75
+ </DropdownMenu.Item>
76
+ </DropdownMenu.Viewport>
77
+ <DropdownMenu.Arrow />
78
+ </DropdownMenu.Content>
79
+ </DropdownMenu.Portal>
80
+ </DropdownMenu.Root>
81
+ </StackItem.HeadingStickyContent>
82
+ </StackItem.Heading>
83
+
84
+ <StackItem.Content>
85
+ <TypescriptEditor
86
+ id={cell.id}
87
+ role='section'
88
+ initialValue={cell.script.target?.content}
89
+ extensions={extensions}
90
+ env={env}
91
+ options={{
92
+ placeholder: t('notebook cell placeholder'),
93
+ highlightActiveLine: false,
94
+ lineNumbers: false,
95
+ }}
96
+ classNames='p-2 pbs-3'
97
+ />
98
+
99
+ {value != null && (
100
+ <div className='flex p-2 bg-groupSurface border-t border-subduedSeparator text-description font-mono'>
101
+ {name && (
102
+ <>
103
+ <span className='text-successText'>{name}</span>
104
+ <span className='text-description'>&nbsp;=&nbsp;</span>
105
+ </>
106
+ )}
107
+ <span>{value}</span>
108
+ </div>
109
+ )}
110
+ </StackItem.Content>
111
+ </StackItem.Root>
112
+ );
113
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './NotebookStack';
@@ -10,15 +10,16 @@ import { useIdentity } from '@dxos/react-client/halo';
10
10
  import { createDataExtensions, listener, stackItemContentEditorClassNames } from '@dxos/react-ui-editor';
11
11
  import { StackItem } from '@dxos/react-ui-stack';
12
12
 
13
+ import { useDeployState, useToolbarState } from '../hooks';
14
+ import { type ScriptSettings } from '../types';
15
+
13
16
  import { ScriptToolbar } from './ScriptToolbar';
14
17
  import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';
15
- import { useDeployState, useToolbarState } from '../hooks';
16
- import { type ScriptSettingsProps } from '../types';
17
18
 
18
19
  export type ScriptEditorProps = {
19
20
  role: string;
20
21
  script: ScriptType;
21
- settings?: ScriptSettingsProps;
22
+ settings?: ScriptSettings;
22
23
  } & Pick<TypescriptEditorProps, 'env'>;
23
24
 
24
25
  export const ScriptContainer = ({ role, script, settings = { editorInputMode: 'vscode' }, env }: ScriptEditorProps) => {
@@ -2,29 +2,45 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
- import { type Meta } from '@storybook/react-vite';
7
+ import { IntentPlugin } from '@dxos/app-framework';
8
+ import { withPluginManager } from '@dxos/app-framework/testing';
9
+ import { Obj, Ref } from '@dxos/echo';
10
+ import { ScriptType } from '@dxos/functions';
11
+ import { ClientPlugin } from '@dxos/plugin-client';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+ import { DataType } from '@dxos/schema';
8
14
 
9
- import { withLayout, withTheme } from '@dxos/storybook-utils';
15
+ import { translations } from '../../translations';
10
16
 
11
17
  import { ScriptToolbar } from './ScriptToolbar';
12
- import { templates } from '../../templates';
13
18
 
14
- export const Default = {
15
- args: {
16
- binding: 'example',
17
- deployed: true,
18
- templates,
19
- onFormat: () => console.log('Format'),
20
- onTogglePanel: () => {},
21
- },
22
- };
23
-
24
- const meta: Meta = {
19
+ const meta = {
25
20
  title: 'plugins/plugin-script/Toolbar',
26
21
  component: ScriptToolbar,
27
- decorators: [withTheme, withLayout()],
28
- };
22
+ // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
23
+ decorators: [withTheme, withPluginManager({ plugins: [IntentPlugin(), ClientPlugin({})] })],
24
+ parameters: {
25
+ layout: {
26
+ type: 'centered',
27
+ className: 'is-prose',
28
+ },
29
+ translations,
30
+ },
31
+ } satisfies Meta<typeof ScriptToolbar>;
29
32
 
30
33
  export default meta;
34
+
35
+ type Story = StoryObj<typeof meta>;
36
+
37
+ export const Default: Story = {
38
+ args: {
39
+ state: {},
40
+ script: Obj.make(ScriptType, {
41
+ name: 'test',
42
+ description: 'test',
43
+ source: Ref.make(DataType.makeText('test')),
44
+ }),
45
+ },
46
+ };
@@ -7,8 +7,15 @@ import React, { useMemo } from 'react';
7
7
 
8
8
  import { type ScriptType } from '@dxos/functions';
9
9
  import { fullyQualifiedId } from '@dxos/react-client/echo';
10
- import { ElevationProvider, useTranslation, type ThemedClassName } from '@dxos/react-ui';
11
- import { createGapSeparator, MenuProvider, rxFromSignal, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';
10
+ import { ElevationProvider, type ThemedClassName, useTranslation } from '@dxos/react-ui';
11
+ import {
12
+ type ActionGraphProps,
13
+ MenuProvider,
14
+ ToolbarMenu,
15
+ createGapSeparator,
16
+ rxFromSignal,
17
+ useMenuActions,
18
+ } from '@dxos/react-ui-menu';
12
19
 
13
20
  import {
14
21
  type CreateDeployOptions,
@@ -18,23 +25,7 @@ import {
18
25
  createTemplateSelect,
19
26
  useDeployDeps,
20
27
  } from '../../hooks';
21
- import { SCRIPT_PLUGIN } from '../../meta';
22
-
23
- const createToolbar = ({ state, script, ...options }: CreateDeployOptions) =>
24
- Rx.make((get) =>
25
- get(
26
- rxFromSignal(() => {
27
- const templateSelect = createTemplateSelect(script);
28
- const format = createFormat(script);
29
- const gap = createGapSeparator();
30
- const deploy = createDeploy({ state, script, ...options });
31
- return {
32
- nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],
33
- edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],
34
- };
35
- }),
36
- ),
37
- );
28
+ import { meta } from '../../meta';
38
29
 
39
30
  export type ScriptToolbarProps = ThemedClassName<{
40
31
  role?: string;
@@ -43,16 +34,32 @@ export type ScriptToolbarProps = ThemedClassName<{
43
34
  }>;
44
35
 
45
36
  export const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbarProps) => {
46
- const { t } = useTranslation(SCRIPT_PLUGIN);
37
+ const { t } = useTranslation(meta.id);
47
38
  const options = useDeployDeps({ script });
48
- const toolbarCreator = useMemo(() => createToolbar({ state, script, t, ...options }), [state, script, options, t]);
49
- const menu = useMenuActions(toolbarCreator);
39
+ const menu = useMemo(() => createToolbarActions({ state, script, t, ...options }), [state, script, options, t]);
40
+ const actions = useMenuActions(menu);
50
41
 
51
42
  return (
52
43
  <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
53
- <MenuProvider {...menu} attendableId={fullyQualifiedId(script)}>
44
+ <MenuProvider {...actions} attendableId={fullyQualifiedId(script)}>
54
45
  <ToolbarMenu classNames={classNames} />
55
46
  </MenuProvider>
56
47
  </ElevationProvider>
57
48
  );
58
49
  };
50
+
51
+ const createToolbarActions = ({ state, script, ...options }: CreateDeployOptions): Rx.Rx<ActionGraphProps> =>
52
+ Rx.make((get) =>
53
+ get(
54
+ rxFromSignal(() => {
55
+ const templateSelect = createTemplateSelect(script);
56
+ const format = createFormat(script);
57
+ const gap = createGapSeparator();
58
+ const deploy = createDeploy({ state, script, ...options });
59
+ return {
60
+ nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],
61
+ edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],
62
+ };
63
+ }),
64
+ ),
65
+ );