@dxos/plugin-script 0.8.4-main.2e9d522 → 0.8.4-main.406dc2a

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 (287) hide show
  1. package/dist/lib/browser/DeploymentDialog-65TWT6S5.mjs +13 -0
  2. package/dist/lib/browser/NotebookContainer-LVGRPFY3.mjs +683 -0
  3. package/dist/lib/browser/NotebookContainer-LVGRPFY3.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-LRTRN7JW.mjs +149 -0
  5. package/dist/lib/browser/ScriptContainer-LRTRN7JW.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-5CYLWXRH.mjs +89 -0
  11. package/dist/lib/browser/chunk-5CYLWXRH.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-75LH4EUR.mjs +326 -0
  13. package/dist/lib/browser/chunk-75LH4EUR.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-3U6DTUH3.mjs → chunk-E7DXDICD.mjs} +29 -30
  15. package/dist/lib/browser/chunk-E7DXDICD.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EZVXV6DA.mjs} +3 -5
  17. package/dist/lib/browser/chunk-EZVXV6DA.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-FIM2MVNJ.mjs → chunk-I3QSGUFJ.mjs} +159 -68
  19. package/dist/lib/browser/chunk-I3QSGUFJ.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-FMDXKOP7.mjs → chunk-JO2O7W6J.mjs} +71 -50
  21. package/dist/lib/browser/chunk-JO2O7W6J.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-N6M34EUC.mjs +112 -0
  23. package/dist/lib/browser/chunk-N6M34EUC.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-P4HQKUCP.mjs → chunk-NM4WQS4F.mjs} +15 -15
  25. package/dist/lib/browser/chunk-NM4WQS4F.mjs.map +7 -0
  26. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-OKXN2N7M.mjs} +2 -2
  27. package/dist/lib/browser/chunk-ST3ACVUC.mjs +88 -0
  28. package/dist/lib/browser/chunk-ST3ACVUC.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 +109 -39
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-7B77IG3N.mjs → intent-resolver-JLU7DVLQ.mjs} +33 -19
  34. package/dist/lib/browser/intent-resolver-JLU7DVLQ.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/{react-surface-FYYXZA7C.mjs → react-surface-76SDTUYG.mjs} +36 -13
  37. package/dist/lib/browser/react-surface-76SDTUYG.mjs.map +7 -0
  38. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-ERFKVNUK.mjs} +9 -8
  39. package/dist/lib/browser/settings-ERFKVNUK.mjs.map +7 -0
  40. package/dist/lib/browser/templates/index.mjs +1 -1
  41. package/dist/lib/browser/types/index.mjs +7 -4
  42. package/dist/lib/node-esm/{DeploymentDialog-3KPRWFE7.mjs → DeploymentDialog-I63ZC2HH.mjs} +6 -5
  43. package/dist/lib/node-esm/NotebookContainer-QY5NJGJI.mjs +684 -0
  44. package/dist/lib/node-esm/NotebookContainer-QY5NJGJI.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-SVXCSLNH.mjs +150 -0
  46. package/dist/lib/node-esm/ScriptContainer-SVXCSLNH.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-2GVTWESW.mjs +90 -0
  52. package/dist/lib/node-esm/chunk-2GVTWESW.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-4X375PGY.mjs +90 -0
  54. package/dist/lib/node-esm/chunk-4X375PGY.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-67OVZHI3.mjs +327 -0
  56. package/dist/lib/node-esm/chunk-67OVZHI3.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-QKK3NDHW.mjs → chunk-C2ORIPKH.mjs} +15 -15
  58. package/dist/lib/node-esm/chunk-C2ORIPKH.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-35M3CHYE.mjs → chunk-NUXZQQ6P.mjs} +2 -2
  60. package/dist/lib/node-esm/{chunk-AHXJ6NQU.mjs → chunk-OG2SIKHE.mjs} +3 -5
  61. package/dist/lib/node-esm/chunk-OG2SIKHE.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-7NMI4CEU.mjs → chunk-SMFPSKQT.mjs} +159 -68
  63. package/dist/lib/node-esm/chunk-SMFPSKQT.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs +114 -0
  65. package/dist/lib/node-esm/chunk-VRSDE4CI.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-RT43MACC.mjs → chunk-VZAFGLD7.mjs} +29 -30
  67. package/dist/lib/node-esm/chunk-VZAFGLD7.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-XJPK3IYI.mjs → chunk-YW36TZ7K.mjs} +71 -50
  69. package/dist/lib/node-esm/chunk-YW36TZ7K.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 +109 -39
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-FRZGS4TB.mjs → intent-resolver-SFGTIFOG.mjs} +33 -19
  75. package/dist/lib/node-esm/intent-resolver-SFGTIFOG.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-SHEBNW4R.mjs} +36 -13
  78. package/dist/lib/node-esm/react-surface-SHEBNW4R.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-5TYXQ42N.mjs} +9 -8
  80. package/dist/lib/node-esm/settings-5TYXQ42N.mjs.map +7 -0
  81. package/dist/lib/node-esm/templates/index.mjs +1 -1
  82. package/dist/lib/node-esm/types/index.mjs +7 -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 +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.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 +248 -0
  111. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +14 -0
  113. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  114. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  115. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  116. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  117. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  118. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +248 -0
  119. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  121. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  122. package/dist/types/src/components/ScriptContainer.d.ts +2 -2
  123. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  125. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +245 -10
  126. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  128. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  129. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  130. package/dist/types/src/components/TestPanel/TestContainer.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 +11 -10
  139. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  140. package/dist/types/src/hooks/template.d.ts.map +1 -1
  141. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  142. package/dist/types/src/index.d.ts +1 -0
  143. package/dist/types/src/index.d.ts.map +1 -1
  144. package/dist/types/src/meta.d.ts +0 -1
  145. package/dist/types/src/meta.d.ts.map +1 -1
  146. package/dist/types/src/notebook/eval.d.ts +13 -0
  147. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  148. package/dist/types/src/notebook/index.d.ts +2 -0
  149. package/dist/types/src/notebook/index.d.ts.map +1 -0
  150. package/dist/types/src/notebook/notebook.d.ts +35 -0
  151. package/dist/types/src/notebook/notebook.d.ts.map +1 -0
  152. package/dist/types/src/notebook/notebook.test.d.ts +2 -0
  153. package/dist/types/src/notebook/notebook.test.d.ts.map +1 -0
  154. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  155. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  156. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  157. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  158. package/dist/types/src/templates/chess.d.ts.map +1 -1
  159. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  160. package/dist/types/src/templates/discord.d.ts.map +1 -1
  161. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  162. package/dist/types/src/templates/forex.d.ts.map +1 -1
  163. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  164. package/dist/types/src/templates/index.d.ts +43 -1
  165. package/dist/types/src/templates/index.d.ts.map +1 -1
  166. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  167. package/dist/types/src/templates/ping.d.ts.map +1 -0
  168. package/dist/types/src/testing/data.d.ts +19 -0
  169. package/dist/types/src/testing/data.d.ts.map +1 -0
  170. package/dist/types/src/testing/index.d.ts +2 -0
  171. package/dist/types/src/testing/index.d.ts.map +1 -0
  172. package/dist/types/src/translations.d.ts +28 -2
  173. package/dist/types/src/translations.d.ts.map +1 -1
  174. package/dist/types/src/types/actions.d.ts +66 -0
  175. package/dist/types/src/types/actions.d.ts.map +1 -0
  176. package/dist/types/src/types/index.d.ts +1 -0
  177. package/dist/types/src/types/index.d.ts.map +1 -1
  178. package/dist/types/src/types/schema.d.ts +54 -31
  179. package/dist/types/src/types/schema.d.ts.map +1 -1
  180. package/dist/types/src/util/deploy.d.ts +3 -3
  181. package/dist/types/src/util/deploy.d.ts.map +1 -1
  182. package/dist/types/src/util/functions.d.ts +5 -2
  183. package/dist/types/src/util/functions.d.ts.map +1 -1
  184. package/dist/types/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +76 -69
  186. package/src/ScriptPlugin.tsx +93 -70
  187. package/src/capabilities/app-graph-builder.ts +6 -5
  188. package/src/capabilities/artifact-definition.ts +8 -12
  189. package/src/capabilities/blueprint-definition.ts +30 -0
  190. package/src/capabilities/compiler.ts +2 -1
  191. package/src/capabilities/index.ts +1 -1
  192. package/src/capabilities/intent-resolver.ts +16 -9
  193. package/src/capabilities/react-surface.tsx +20 -7
  194. package/src/capabilities/settings.ts +3 -3
  195. package/src/compiler/compiler.ts +1 -1
  196. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +34 -20
  197. package/src/components/DeploymentDialog/DeploymentDialog.tsx +16 -22
  198. package/src/components/DeploymentDialog/index.ts +1 -1
  199. package/src/components/FrameContainer/FrameContainer.tsx +3 -2
  200. package/src/components/NotebookContainer.stories.tsx +32 -0
  201. package/src/components/NotebookContainer.tsx +124 -0
  202. package/src/components/NotebookStack/NotebookCell.tsx +217 -0
  203. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  204. package/src/components/NotebookStack/NotebookStack.stories.tsx +32 -0
  205. package/src/components/NotebookStack/NotebookStack.tsx +79 -0
  206. package/src/components/NotebookStack/index.ts +6 -0
  207. package/src/components/ScriptContainer.tsx +4 -3
  208. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +34 -17
  209. package/src/components/ScriptToolbar/ScriptToolbar.tsx +30 -23
  210. package/src/components/Settings/ScriptObjectSettings.tsx +111 -31
  211. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  212. package/src/components/TestPanel/TestContainer.tsx +2 -1
  213. package/src/components/TestPanel/TestPanel.tsx +6 -6
  214. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +79 -31
  215. package/src/components/TypescriptEditor/TypescriptEditor.tsx +32 -25
  216. package/src/components/index.ts +3 -0
  217. package/src/events.ts +2 -2
  218. package/src/hooks/deploy.ts +18 -19
  219. package/src/hooks/format.ts +2 -2
  220. package/src/hooks/template.ts +5 -4
  221. package/src/hooks/useCreateAndDeployScriptTemplates.ts +4 -3
  222. package/src/index.ts +1 -0
  223. package/src/meta.ts +2 -4
  224. package/src/notebook/eval.ts +105 -0
  225. package/src/notebook/index.ts +5 -0
  226. package/src/notebook/notebook.test.ts +70 -0
  227. package/src/notebook/notebook.ts +183 -0
  228. package/src/notebook/vfs-parser.test.ts +149 -0
  229. package/src/notebook/vfs-parser.ts +451 -0
  230. package/src/templates/chess.ts +3 -1
  231. package/src/templates/data-generator.ts +9 -3
  232. package/src/templates/discord.ts +12 -4
  233. package/src/templates/forex-effect.ts +7 -3
  234. package/src/templates/forex.ts +3 -1
  235. package/src/templates/gmail.ts +33 -62
  236. package/src/templates/index.ts +6 -6
  237. package/src/testing/data.ts +47 -0
  238. package/src/testing/index.ts +5 -0
  239. package/src/translations.ts +31 -4
  240. package/src/types/actions.ts +53 -0
  241. package/src/types/index.ts +1 -0
  242. package/src/types/schema.ts +30 -19
  243. package/src/util/deploy.ts +20 -33
  244. package/src/util/functions.ts +35 -6
  245. package/dist/lib/browser/DeploymentDialog-M4QIHTDR.mjs +0 -12
  246. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs +0 -262
  247. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs.map +0 -7
  248. package/dist/lib/browser/app-graph-builder-HLQ7K3BT.mjs.map +0 -7
  249. package/dist/lib/browser/artifact-definition-24Q3IHOU.mjs +0 -249
  250. package/dist/lib/browser/artifact-definition-24Q3IHOU.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-3U6DTUH3.mjs.map +0 -7
  252. package/dist/lib/browser/chunk-FIM2MVNJ.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-FMDXKOP7.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  255. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-P4HQKUCP.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-R4R7VOFY.mjs +0 -88
  259. package/dist/lib/browser/chunk-R4R7VOFY.mjs.map +0 -7
  260. package/dist/lib/browser/compiler-CXCUA4UQ.mjs.map +0 -7
  261. package/dist/lib/browser/intent-resolver-7B77IG3N.mjs.map +0 -7
  262. package/dist/lib/browser/react-surface-FYYXZA7C.mjs.map +0 -7
  263. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  264. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs +0 -263
  265. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs.map +0 -7
  266. package/dist/lib/node-esm/app-graph-builder-7EYIHWH4.mjs.map +0 -7
  267. package/dist/lib/node-esm/artifact-definition-WAJFALUI.mjs +0 -250
  268. package/dist/lib/node-esm/artifact-definition-WAJFALUI.mjs.map +0 -7
  269. package/dist/lib/node-esm/chunk-7NMI4CEU.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs +0 -90
  272. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  274. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-QKK3NDHW.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-RT43MACC.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs.map +0 -7
  278. package/dist/lib/node-esm/compiler-EPFKQXPE.mjs.map +0 -7
  279. package/dist/lib/node-esm/intent-resolver-FRZGS4TB.mjs.map +0 -7
  280. package/dist/lib/node-esm/react-surface-V32NWHKN.mjs.map +0 -7
  281. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  282. package/dist/types/src/templates/echo.d.ts.map +0 -1
  283. /package/dist/lib/browser/{DeploymentDialog-M4QIHTDR.mjs.map → DeploymentDialog-65TWT6S5.mjs.map} +0 -0
  284. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-OKXN2N7M.mjs.map} +0 -0
  285. /package/dist/lib/node-esm/{DeploymentDialog-3KPRWFE7.mjs.map → DeploymentDialog-I63ZC2HH.mjs.map} +0 -0
  286. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-NUXZQQ6P.mjs.map} +0 -0
  287. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -3,10 +3,10 @@
3
3
  //
4
4
 
5
5
  import {
6
+ type VirtualTypeScriptEnvironment,
6
7
  createDefaultMapFromCDN,
7
8
  createSystem,
8
9
  createVirtualTypeScriptEnvironment,
9
- type VirtualTypeScriptEnvironment,
10
10
  } from '@typescript/vfs';
11
11
  import ts from 'typescript';
12
12
 
@@ -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,32 @@
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 { withLayout, 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, withLayout({ container: 'column', classNames: 'is-prose' }), withClientProvider()],
19
+ parameters: {
20
+ translations,
21
+ },
22
+ } satisfies Meta<typeof NotebookContainer>;
23
+
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof meta>;
27
+
28
+ export const Default: Story = {
29
+ args: {
30
+ notebook: createNotebook(),
31
+ },
32
+ };
@@ -0,0 +1,124 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo } from 'react';
6
+
7
+ import { Ref } from '@dxos/echo';
8
+ import { invariant } from '@dxos/invariant';
9
+ import { Assistant } from '@dxos/plugin-assistant';
10
+ import { getSpace } from '@dxos/react-client/echo';
11
+ import { DropdownMenu, IconButton, Toolbar, useTranslation } from '@dxos/react-ui';
12
+ import { StackItem } from '@dxos/react-ui-stack';
13
+ import { DataType } from '@dxos/schema';
14
+
15
+ import { meta } from '../meta';
16
+ import { ComputeGraph } from '../notebook';
17
+ import { type Notebook } from '../types';
18
+
19
+ import { NotebookMenu, NotebookStack, type NotebookStackProps } from './NotebookStack';
20
+ import { type TypescriptEditorProps } from './TypescriptEditor';
21
+
22
+ // TODO(burdon): Support calling named deployed functions (as with sheet).
23
+
24
+ export type NotebookContainerProps = {
25
+ role?: string;
26
+ notebook?: Notebook.Notebook;
27
+ } & Pick<TypescriptEditorProps, 'env'>;
28
+
29
+ export const NotebookContainer = ({ notebook, env }: NotebookContainerProps) => {
30
+ const { t } = useTranslation(meta.id);
31
+ const space = getSpace(notebook);
32
+ const graph = useMemo(() => notebook && new ComputeGraph(notebook), [notebook]);
33
+
34
+ // TODO(burdon): Cache values in context (preserve when switched).
35
+ const handleCompute = useCallback(() => {
36
+ graph?.evaluate();
37
+ }, [graph]);
38
+
39
+ const handleRearrange = useCallback<NonNullable<NotebookStackProps['onRearrange']>>(
40
+ (source, target) => {
41
+ invariant(notebook);
42
+ const from = notebook.cells.findIndex((cell) => cell.id === source.id);
43
+ const to = notebook.cells.findIndex((cell) => cell.id === target.id);
44
+ if (from != null && to != null) {
45
+ const cell = notebook.cells.splice(from, 1)[0];
46
+ if (cell) {
47
+ notebook.cells.splice(to, 0, cell);
48
+ }
49
+ }
50
+ },
51
+ [notebook],
52
+ );
53
+
54
+ const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(
55
+ (type, after) => {
56
+ invariant(notebook);
57
+ const cell: Notebook.Cell = { id: crypto.randomUUID(), type };
58
+ switch (type) {
59
+ case 'markdown':
60
+ case 'script':
61
+ case 'query': {
62
+ cell.script = Ref.make(DataType.makeText());
63
+ break;
64
+ }
65
+
66
+ case 'prompt': {
67
+ if (space) {
68
+ cell.chat = Ref.make(Assistant.makeChat({ queue: space.queues.create() }));
69
+ }
70
+ break;
71
+ }
72
+ }
73
+
74
+ const idx = after ? notebook.cells.findIndex((cell) => cell.id === after) : notebook.cells.length;
75
+ notebook.cells.splice(idx, 0, cell);
76
+ },
77
+ [space, notebook],
78
+ );
79
+
80
+ const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(
81
+ (id) => {
82
+ invariant(notebook);
83
+ const idx = notebook.cells.findIndex((cell) => cell.id === id);
84
+ if (idx !== -1) {
85
+ notebook.cells.splice(idx, 1);
86
+ }
87
+ },
88
+ [notebook],
89
+ );
90
+
91
+ return (
92
+ <StackItem.Content toolbar>
93
+ <Toolbar.Root textBlockWidth>
94
+ <DropdownMenu.Root>
95
+ <DropdownMenu.Trigger asChild>
96
+ <IconButton icon='ph--plus--regular' iconOnly label={t('notebook cell insert label')} />
97
+ </DropdownMenu.Trigger>
98
+ <NotebookMenu onCellInsert={handleCellInsert} />
99
+ </DropdownMenu.Root>
100
+ <Toolbar.IconButton
101
+ icon='ph--play--fill'
102
+ iconOnly
103
+ label={t('compute label')}
104
+ classNames='text-green-500'
105
+ onClick={handleCompute}
106
+ />
107
+ </Toolbar.Root>
108
+ <div role='none' className='flex bs-full overflow-hidden -mis-[1px] -mie-[1px]'>
109
+ <NotebookStack
110
+ classNames='container-max-width border-l border-r border-subduedSeparator'
111
+ space={space}
112
+ notebook={notebook}
113
+ graph={graph}
114
+ env={env}
115
+ onRearrange={handleRearrange}
116
+ onCellInsert={handleCellInsert}
117
+ onCellDelete={handleCellDelete}
118
+ />
119
+ </div>
120
+ </StackItem.Content>
121
+ );
122
+ };
123
+
124
+ export default NotebookContainer;
@@ -0,0 +1,217 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback, useMemo } from 'react';
6
+
7
+ import { Surface } from '@dxos/app-framework';
8
+ import { Query, Ref } from '@dxos/echo';
9
+ import { QueryBuilder } from '@dxos/echo-query';
10
+ import { invariant } from '@dxos/invariant';
11
+ import { useChatProcessor, useChatServices } from '@dxos/plugin-assistant';
12
+ import { Chat } from '@dxos/plugin-assistant';
13
+ import { Graph } from '@dxos/plugin-explorer/types';
14
+ import { createDocAccessor } from '@dxos/react-client/echo';
15
+ import { type Space } from '@dxos/react-client/echo';
16
+ import { useAsyncEffect, useThemeContext, useTranslation } from '@dxos/react-ui';
17
+ import { QueryEditor, type QueryEditorProps } from '@dxos/react-ui-components';
18
+ import {
19
+ Editor,
20
+ type EditorProps,
21
+ createBasicExtensions,
22
+ createDataExtensions,
23
+ createMarkdownExtensions,
24
+ createThemeExtensions,
25
+ decorateMarkdown,
26
+ } from '@dxos/react-ui-editor';
27
+ import { mx } from '@dxos/react-ui-theme';
28
+ import { isNonNullable } from '@dxos/util';
29
+
30
+ import { meta } from '../../meta';
31
+ import { type ComputeGraph } from '../../notebook';
32
+ import { type Notebook } from '../../types';
33
+ import { TypescriptEditor, type TypescriptEditorProps } from '../TypescriptEditor';
34
+
35
+ import { type NotebookMenuProps } from './NotebookMenu';
36
+
37
+ const editorStyles = 'p-2 pis-3';
38
+ const valueStyles = 'p-1 pis-3';
39
+
40
+ export type NotebookCellProps = {
41
+ space?: Space;
42
+ graph?: ComputeGraph;
43
+ dragging?: boolean;
44
+ cell: Notebook.Cell;
45
+ } & (Pick<NotebookMenuProps, 'onCellInsert' | 'onCellDelete'> & Pick<TypescriptEditorProps, 'env'>);
46
+
47
+ // TODO(burdon): Display errors.
48
+ export const NotebookCell = ({ space, graph, dragging, cell, env }: NotebookCellProps) => {
49
+ const { t } = useTranslation(meta.id);
50
+
51
+ //
52
+ // Common.
53
+ //
54
+ const extensions = useMemo(() => {
55
+ return cell.script?.target
56
+ ? [createDataExtensions({ id: cell.id, text: createDocAccessor(cell.script.target, ['content']) })].filter(
57
+ isNonNullable,
58
+ )
59
+ : [];
60
+ }, [cell.script?.target]);
61
+
62
+ //
63
+ // Query.
64
+ //
65
+ const view = cell.view?.target;
66
+ const builder = useMemo(() => new QueryBuilder(), []);
67
+ useAsyncEffect(async () => {
68
+ if (!space || !cell.script?.target) {
69
+ return;
70
+ }
71
+
72
+ if (cell.type === 'query') {
73
+ const query = cell.script.target.content;
74
+ const filter = builder.build(query);
75
+ if (filter) {
76
+ const ast = Query.select(filter).ast;
77
+ const view = cell.view?.target;
78
+ if (!view) {
79
+ const graph = Graph.make({ query: { ast } });
80
+ const { view } = await Graph.makeView({ space, presentation: graph });
81
+ cell.view = Ref.make(view);
82
+ } else {
83
+ view.query.ast = ast;
84
+ }
85
+ }
86
+ }
87
+ }, [space, builder, cell, cell.script?.target?.content]);
88
+
89
+ const handleQueryChange = useCallback<NonNullable<QueryEditorProps['onChange']>>(
90
+ (value: string) => {
91
+ invariant(cell.script?.target);
92
+ cell.script.target.content = value;
93
+ },
94
+ [cell],
95
+ );
96
+
97
+ //
98
+ // Prompt.
99
+ // TODO(burdon): Add values to context or system message (via blueprint?).
100
+ //
101
+ const services = useChatServices({ space, chat: cell.chat?.target });
102
+ const processor = useChatProcessor({ chat: cell.chat?.target, services });
103
+
104
+ switch (cell.type) {
105
+ case 'markdown':
106
+ if (!cell.script?.target) {
107
+ return null;
108
+ }
109
+
110
+ return (
111
+ <MarkdownEditor
112
+ id={cell.id}
113
+ classNames={editorStyles}
114
+ initialValue={cell.script.target.content}
115
+ extensions={extensions}
116
+ />
117
+ );
118
+
119
+ case 'script':
120
+ if (!cell.script?.target) {
121
+ return null;
122
+ }
123
+
124
+ return (
125
+ <>
126
+ <TypescriptEditor
127
+ id={cell.id}
128
+ role='section'
129
+ classNames={editorStyles}
130
+ initialValue={cell.script.target.content}
131
+ extensions={extensions}
132
+ env={env}
133
+ options={{
134
+ placeholder: t('notebook cell placeholder'),
135
+ highlightActiveLine: false,
136
+ lineNumbers: false,
137
+ }}
138
+ />
139
+ <NotebookCellValue cell={cell} graph={graph} />
140
+ </>
141
+ );
142
+
143
+ case 'query':
144
+ if (!cell.script?.target) {
145
+ return null;
146
+ }
147
+
148
+ return (
149
+ <div className={mx('bs-full overflow-hidden grid', view && !dragging && 'grid-rows-[min-content_1fr]')}>
150
+ <QueryEditor
151
+ id={cell.id}
152
+ classNames={[editorStyles, 'border-b border-subduedSeparator']}
153
+ db={space?.db}
154
+ value={cell.script.target.content}
155
+ onChange={handleQueryChange}
156
+ />
157
+ {view && !dragging && <Surface role='section' limit={1} data={{ subject: view }} />}
158
+ </div>
159
+ );
160
+
161
+ case 'prompt':
162
+ if (!cell.chat?.target || !processor) {
163
+ return null;
164
+ }
165
+
166
+ return (
167
+ <Chat.Root chat={cell.chat.target} processor={processor}>
168
+ <Chat.Thread overscroll={0} />
169
+ <Chat.Prompt settings={false} classNames='p-2 border-t border-subduedSeparator' />
170
+ </Chat.Root>
171
+ );
172
+
173
+ default:
174
+ return null;
175
+ }
176
+ };
177
+
178
+ const NotebookCellValue = ({ cell, graph }: NotebookCellProps) => {
179
+ const name = graph?.expressions.value[cell.id]?.name;
180
+ const value = graph?.values.value[cell.id];
181
+ if (value == null) {
182
+ return null;
183
+ }
184
+
185
+ return (
186
+ <div
187
+ className={mx(
188
+ 'flex is-full bg-groupSurface border-t border-subduedSeparator text-description font-mono',
189
+ valueStyles,
190
+ )}
191
+ >
192
+ {name && (
193
+ <>
194
+ <span className='text-successText'>{name}</span>
195
+ <span className='text-description'>&nbsp;=&nbsp;</span>
196
+ </>
197
+ )}
198
+ <span>{value}</span>
199
+ </div>
200
+ );
201
+ };
202
+
203
+ const MarkdownEditor = ({ extensions: extensionsParam, ...props }: EditorProps) => {
204
+ const { t } = useTranslation(meta.id);
205
+ const { themeMode } = useThemeContext();
206
+ const extensions = useMemo(() => {
207
+ return [
208
+ createBasicExtensions({ placeholder: t('notebook markdown placeholder') }),
209
+ createThemeExtensions({ themeMode, syntaxHighlighting: true }),
210
+ createMarkdownExtensions(),
211
+ decorateMarkdown(),
212
+ extensionsParam,
213
+ ].filter(isNonNullable);
214
+ }, [extensionsParam]);
215
+
216
+ return <Editor {...props} extensions={extensions} moveToEnd />;
217
+ };
@@ -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,32 @@
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 { withLayout, 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, withLayout({ container: 'column', classNames: 'is-prose' }), withClientProvider()],
19
+ parameters: {
20
+ translations,
21
+ },
22
+ } satisfies Meta<typeof NotebookStack>;
23
+
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof meta>;
27
+
28
+ export const Default: Story = {
29
+ args: {
30
+ notebook: createNotebook(),
31
+ },
32
+ };