@dxos/plugin-script 0.8.4-main.28f8d3d → 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 (269) 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-IABOSTBK.mjs → app-graph-builder-DPYULSME.mjs} +8 -7
  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-MWZDJNCQ.mjs → chunk-E7DXDICD.mjs} +27 -28
  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-OULPWKXN.mjs → chunk-I3QSGUFJ.mjs} +157 -66
  19. package/dist/lib/browser/chunk-I3QSGUFJ.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-SUOLJH55.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-OAVS36Q3.mjs → chunk-NM4WQS4F.mjs} +14 -14
  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-RIWQVBPX.mjs → compiler-G2N2CG63.mjs} +24 -11
  30. package/dist/lib/browser/{compiler-RIWQVBPX.mjs.map → compiler-G2N2CG63.mjs.map} +2 -2
  31. package/dist/lib/browser/index.mjs +113 -37
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-SAL2TM7U.mjs → intent-resolver-JLU7DVLQ.mjs} +31 -15
  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-E3SXU6ON.mjs → react-surface-76SDTUYG.mjs} +38 -15
  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-O2XZVRLU.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-CQTTAYHP.mjs → app-graph-builder-UXJGHXSL.mjs} +8 -7
  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-IO6T72KY.mjs → chunk-C2ORIPKH.mjs} +14 -14
  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-6WMFL3JL.mjs → chunk-SMFPSKQT.mjs} +157 -66
  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-7L4JDSXJ.mjs → chunk-VZAFGLD7.mjs} +27 -28
  67. package/dist/lib/node-esm/chunk-VZAFGLD7.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-PACUN7RS.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-S52P5P3F.mjs → compiler-PLDAZ5GJ.mjs} +24 -11
  71. package/dist/lib/node-esm/{compiler-S52P5P3F.mjs.map → compiler-PLDAZ5GJ.mjs.map} +2 -2
  72. package/dist/lib/node-esm/index.mjs +113 -37
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-GO53JOPL.mjs → intent-resolver-SFGTIFOG.mjs} +31 -15
  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-W3NRCS5O.mjs → react-surface-SHEBNW4R.mjs} +38 -15
  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/blueprint-definition.d.ts +5 -0
  88. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/compiler.d.ts +1 -1
  90. package/dist/types/src/capabilities/index.d.ts +6 -5
  91. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  95. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/settings.d.ts +1 -1
  97. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  98. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  99. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +246 -13
  100. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  102. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  103. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  104. package/dist/types/src/components/NotebookContainer.stories.d.ts +248 -0
  105. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +14 -0
  107. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  108. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  109. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  110. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  111. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  112. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +248 -0
  113. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  114. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  115. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  116. package/dist/types/src/components/ScriptContainer.d.ts +2 -2
  117. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  119. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +245 -10
  120. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  123. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  124. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  125. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  126. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +11 -4
  127. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/index.d.ts +3 -4
  129. package/dist/types/src/components/index.d.ts.map +1 -1
  130. package/dist/types/src/events.d.ts.map +1 -1
  131. package/dist/types/src/hooks/deploy.d.ts +12 -11
  132. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  133. package/dist/types/src/hooks/template.d.ts.map +1 -1
  134. package/dist/types/src/index.d.ts +1 -0
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/meta.d.ts +0 -1
  137. package/dist/types/src/meta.d.ts.map +1 -1
  138. package/dist/types/src/notebook/eval.d.ts +13 -0
  139. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  140. package/dist/types/src/notebook/index.d.ts +2 -0
  141. package/dist/types/src/notebook/index.d.ts.map +1 -0
  142. package/dist/types/src/notebook/notebook.d.ts +35 -0
  143. package/dist/types/src/notebook/notebook.d.ts.map +1 -0
  144. package/dist/types/src/notebook/notebook.test.d.ts +2 -0
  145. package/dist/types/src/notebook/notebook.test.d.ts.map +1 -0
  146. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  147. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  148. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  149. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  150. package/dist/types/src/templates/chess.d.ts.map +1 -1
  151. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  152. package/dist/types/src/templates/discord.d.ts.map +1 -1
  153. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  154. package/dist/types/src/templates/forex.d.ts.map +1 -1
  155. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  156. package/dist/types/src/templates/index.d.ts +43 -1
  157. package/dist/types/src/templates/index.d.ts.map +1 -1
  158. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  159. package/dist/types/src/templates/ping.d.ts.map +1 -0
  160. package/dist/types/src/testing/data.d.ts +19 -0
  161. package/dist/types/src/testing/data.d.ts.map +1 -0
  162. package/dist/types/src/testing/index.d.ts +2 -0
  163. package/dist/types/src/testing/index.d.ts.map +1 -0
  164. package/dist/types/src/translations.d.ts +28 -2
  165. package/dist/types/src/translations.d.ts.map +1 -1
  166. package/dist/types/src/types/actions.d.ts +66 -0
  167. package/dist/types/src/types/actions.d.ts.map +1 -0
  168. package/dist/types/src/types/index.d.ts +1 -0
  169. package/dist/types/src/types/index.d.ts.map +1 -1
  170. package/dist/types/src/types/schema.d.ts +54 -31
  171. package/dist/types/src/types/schema.d.ts.map +1 -1
  172. package/dist/types/src/util/deploy.d.ts +3 -3
  173. package/dist/types/src/util/deploy.d.ts.map +1 -1
  174. package/dist/types/src/util/functions.d.ts +5 -2
  175. package/dist/types/src/util/functions.d.ts.map +1 -1
  176. package/dist/types/tsconfig.tsbuildinfo +1 -1
  177. package/package.json +72 -68
  178. package/src/ScriptPlugin.tsx +99 -64
  179. package/src/capabilities/app-graph-builder.ts +4 -3
  180. package/src/capabilities/artifact-definition.ts +1 -1
  181. package/src/capabilities/blueprint-definition.ts +30 -0
  182. package/src/capabilities/index.ts +1 -0
  183. package/src/capabilities/intent-resolver.ts +14 -4
  184. package/src/capabilities/react-surface.tsx +17 -5
  185. package/src/capabilities/settings.ts +3 -3
  186. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +34 -20
  187. package/src/components/DeploymentDialog/DeploymentDialog.tsx +12 -18
  188. package/src/components/FrameContainer/FrameContainer.tsx +3 -2
  189. package/src/components/NotebookContainer.stories.tsx +32 -0
  190. package/src/components/NotebookContainer.tsx +124 -0
  191. package/src/components/NotebookStack/NotebookCell.tsx +217 -0
  192. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  193. package/src/components/NotebookStack/NotebookStack.stories.tsx +32 -0
  194. package/src/components/NotebookStack/NotebookStack.tsx +79 -0
  195. package/src/components/NotebookStack/index.ts +6 -0
  196. package/src/components/ScriptContainer.tsx +2 -2
  197. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +34 -18
  198. package/src/components/ScriptToolbar/ScriptToolbar.tsx +29 -22
  199. package/src/components/Settings/ScriptObjectSettings.tsx +109 -29
  200. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  201. package/src/components/TestPanel/TestPanel.tsx +6 -6
  202. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +74 -27
  203. package/src/components/TypescriptEditor/TypescriptEditor.tsx +30 -24
  204. package/src/components/index.ts +3 -0
  205. package/src/events.ts +2 -2
  206. package/src/hooks/deploy.ts +17 -18
  207. package/src/hooks/format.ts +2 -2
  208. package/src/hooks/template.ts +4 -3
  209. package/src/hooks/useCreateAndDeployScriptTemplates.ts +3 -3
  210. package/src/index.ts +1 -0
  211. package/src/meta.ts +2 -4
  212. package/src/notebook/eval.ts +105 -0
  213. package/src/notebook/index.ts +5 -0
  214. package/src/notebook/notebook.test.ts +70 -0
  215. package/src/notebook/notebook.ts +183 -0
  216. package/src/notebook/vfs-parser.test.ts +149 -0
  217. package/src/notebook/vfs-parser.ts +451 -0
  218. package/src/templates/chess.ts +2 -0
  219. package/src/templates/data-generator.ts +2 -0
  220. package/src/templates/discord.ts +11 -3
  221. package/src/templates/forex-effect.ts +6 -2
  222. package/src/templates/forex.ts +2 -0
  223. package/src/templates/gmail.ts +31 -60
  224. package/src/templates/index.ts +6 -6
  225. package/src/testing/data.ts +47 -0
  226. package/src/testing/index.ts +5 -0
  227. package/src/translations.ts +31 -4
  228. package/src/types/actions.ts +53 -0
  229. package/src/types/index.ts +1 -0
  230. package/src/types/schema.ts +30 -19
  231. package/src/util/deploy.ts +20 -33
  232. package/src/util/functions.ts +35 -6
  233. package/dist/lib/browser/DeploymentDialog-C3XH2Z56.mjs +0 -12
  234. package/dist/lib/browser/ScriptContainer-FUBR4OZE.mjs +0 -263
  235. package/dist/lib/browser/ScriptContainer-FUBR4OZE.mjs.map +0 -7
  236. package/dist/lib/browser/app-graph-builder-IABOSTBK.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-G4A2MGAL.mjs +0 -88
  238. package/dist/lib/browser/chunk-G4A2MGAL.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  240. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-MWZDJNCQ.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-OAVS36Q3.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-OULPWKXN.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  245. package/dist/lib/browser/chunk-SUOLJH55.mjs.map +0 -7
  246. package/dist/lib/browser/intent-resolver-SAL2TM7U.mjs.map +0 -7
  247. package/dist/lib/browser/react-surface-E3SXU6ON.mjs.map +0 -7
  248. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  249. package/dist/lib/node-esm/ScriptContainer-VJ75TM24.mjs +0 -264
  250. package/dist/lib/node-esm/ScriptContainer-VJ75TM24.mjs.map +0 -7
  251. package/dist/lib/node-esm/app-graph-builder-CQTTAYHP.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-3BBEM2U7.mjs +0 -90
  253. package/dist/lib/node-esm/chunk-3BBEM2U7.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-6WMFL3JL.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-7L4JDSXJ.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-IO6T72KY.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  259. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-PACUN7RS.mjs.map +0 -7
  261. package/dist/lib/node-esm/intent-resolver-GO53JOPL.mjs.map +0 -7
  262. package/dist/lib/node-esm/react-surface-W3NRCS5O.mjs.map +0 -7
  263. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  264. package/dist/types/src/templates/echo.d.ts.map +0 -1
  265. /package/dist/lib/browser/{DeploymentDialog-C3XH2Z56.mjs.map → DeploymentDialog-65TWT6S5.mjs.map} +0 -0
  266. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-OKXN2N7M.mjs.map} +0 -0
  267. /package/dist/lib/node-esm/{DeploymentDialog-O2XZVRLU.mjs.map → DeploymentDialog-I63ZC2HH.mjs.map} +0 -0
  268. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-NUXZQQ6P.mjs.map} +0 -0
  269. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -10,23 +10,23 @@ 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
19
  // - Show activity and feedback to the user.
20
20
  // - Only take an array of templateIds and get the name from the data.
21
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
  );
@@ -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
+ };
@@ -0,0 +1,79 @@
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' | '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 = ({ cell, space, env, onCellInsert, onCellDelete, ...props }: NotebookSectionProps) => {
41
+ const { t } = useTranslation(meta.id);
42
+ const resizable = cell.type === 'query' || cell.type === 'prompt';
43
+
44
+ // TOOD(burdon): Set size if no extrinsic size (provider).
45
+ return (
46
+ <StackItem.Root role='section' item={cell} draggable classNames={resizable && minSectionHeight}>
47
+ <StackItem.Heading classNames='bs-full p-1 justify-between attention-surface'>
48
+ <StackItem.DragHandle asChild>
49
+ <IconButton variant='ghost' icon='ph--dots-six-vertical--regular' iconOnly label='Drag handle' />
50
+ </StackItem.DragHandle>
51
+ <DropdownMenu.Root>
52
+ <DropdownMenu.Trigger asChild>
53
+ <IconButton
54
+ variant='ghost'
55
+ icon='ph--dots-three--regular'
56
+ iconOnly
57
+ label={t('notebook cell insert label')}
58
+ />
59
+ </DropdownMenu.Trigger>
60
+ <NotebookMenu cell={cell} onCellInsert={onCellInsert} onCellDelete={onCellDelete} />
61
+ </DropdownMenu.Root>
62
+ {resizable && <StackItem.ResizeHandle />}
63
+ </StackItem.Heading>
64
+
65
+ {/* TODO(burdon): Move drag preview to outer stack (uniformly). */}
66
+ <StackItem.DragPreview>
67
+ {({ item: cell }) => (
68
+ <StackItem.Content classNames='overflow-visible bg-groupSurface border border-subduedSeparator'>
69
+ <NotebookCell space={space} cell={cell} env={env} dragging />
70
+ </StackItem.Content>
71
+ )}
72
+ </StackItem.DragPreview>
73
+
74
+ <StackItem.Content classNames='overflow-visible'>
75
+ <NotebookCell space={space} cell={cell} env={env} {...props} />
76
+ </StackItem.Content>
77
+ </StackItem.Root>
78
+ );
79
+ };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './NotebookMenu';
6
+ export * from './NotebookStack';
@@ -11,7 +11,7 @@ import { createDataExtensions, listener, stackItemContentEditorClassNames } from
11
11
  import { StackItem } from '@dxos/react-ui-stack';
12
12
 
13
13
  import { useDeployState, useToolbarState } from '../hooks';
14
- import { type ScriptSettingsProps } from '../types';
14
+ import { type ScriptSettings } from '../types';
15
15
 
16
16
  import { ScriptToolbar } from './ScriptToolbar';
17
17
  import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';
@@ -19,7 +19,7 @@ import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor
19
19
  export type ScriptEditorProps = {
20
20
  role: string;
21
21
  script: ScriptType;
22
- settings?: ScriptSettingsProps;
22
+ settings?: ScriptSettings;
23
23
  } & Pick<TypescriptEditorProps, 'env'>;
24
24
 
25
25
  export const ScriptContainer = ({ role, script, settings = { editorInputMode: 'vscode' }, env }: ScriptEditorProps) => {