@dxos/plugin-script 0.8.1-staging.391c573 → 0.8.1-staging.9eaf14f

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 (264) hide show
  1. package/dist/lib/browser/DeploymentDialog-AEPYJKPO.mjs +12 -0
  2. package/dist/lib/browser/DeploymentDialog-AEPYJKPO.mjs.map +7 -0
  3. package/dist/lib/browser/{ScriptContainer-4FIJVITA.mjs → ScriptContainer-R25PRK2D.mjs} +26 -39
  4. package/dist/lib/browser/ScriptContainer-R25PRK2D.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-RRLY67QC.mjs +64 -0
  6. package/dist/lib/browser/app-graph-builder-RRLY67QC.mjs.map +7 -0
  7. package/dist/lib/browser/{artifact-definition-GTL3ZSF2.mjs → artifact-definition-WXFYD2V5.mjs} +10 -9
  8. package/dist/lib/browser/artifact-definition-WXFYD2V5.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-SFG422OU.mjs → chunk-2CGZFDCR.mjs} +290 -277
  10. package/dist/lib/browser/chunk-2CGZFDCR.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-4VD3K3PY.mjs +15 -0
  12. package/dist/lib/browser/{chunk-6MOQ4BP3.mjs.map → chunk-4VD3K3PY.mjs.map} +3 -3
  13. package/dist/lib/browser/chunk-CSZXPLYY.mjs +147 -0
  14. package/dist/lib/browser/chunk-CSZXPLYY.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-KLEOGVXY.mjs +352 -0
  16. package/dist/lib/browser/chunk-KLEOGVXY.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-MQZQB5VD.mjs +233 -0
  18. package/dist/lib/browser/chunk-MQZQB5VD.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-JL34HAEL.mjs → chunk-R2CHVWJ2.mjs} +5 -4
  20. package/dist/lib/browser/chunk-R2CHVWJ2.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-SUCBNCEQ.mjs +87 -0
  22. package/dist/lib/browser/chunk-SUCBNCEQ.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-FVVCAWNP.mjs → chunk-WSK3YQXI.mjs} +9 -3
  24. package/dist/lib/browser/chunk-WSK3YQXI.mjs.map +7 -0
  25. package/dist/lib/browser/{compiler-YY2XSKHQ.mjs → compiler-56LTBEQB.mjs} +7 -7
  26. package/dist/lib/browser/index.mjs +65 -61
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/intent-resolver-WCVXKRBR.mjs +90 -0
  29. package/dist/lib/browser/intent-resolver-WCVXKRBR.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/react-surface-WXZVPNGI.mjs +117 -0
  32. package/dist/lib/browser/react-surface-WXZVPNGI.mjs.map +7 -0
  33. package/dist/lib/browser/{settings-HIWURVAS.mjs → settings-Z7B37V2I.mjs} +6 -6
  34. package/dist/lib/browser/{settings-HIWURVAS.mjs.map → settings-Z7B37V2I.mjs.map} +3 -3
  35. package/dist/lib/browser/types.mjs +5 -2
  36. package/dist/lib/node/DeploymentDialog-O4MU4OMF.cjs +33 -0
  37. package/dist/lib/node/DeploymentDialog-O4MU4OMF.cjs.map +7 -0
  38. package/dist/lib/node/{ScriptContainer-54GQSZCU.cjs → ScriptContainer-5KY6ZOQD.cjs} +29 -40
  39. package/dist/lib/node/ScriptContainer-5KY6ZOQD.cjs.map +7 -0
  40. package/dist/lib/node/app-graph-builder-6I2BWD46.cjs +80 -0
  41. package/dist/lib/node/app-graph-builder-6I2BWD46.cjs.map +7 -0
  42. package/dist/lib/node/{artifact-definition-64KZC4UT.cjs → artifact-definition-6NVXEHJD.cjs} +16 -15
  43. package/dist/lib/node/artifact-definition-6NVXEHJD.cjs.map +7 -0
  44. package/dist/lib/node/chunk-65MIJR3Q.cjs +173 -0
  45. package/dist/lib/node/chunk-65MIJR3Q.cjs.map +7 -0
  46. package/dist/lib/node/chunk-F4DP7WON.cjs +372 -0
  47. package/dist/lib/node/chunk-F4DP7WON.cjs.map +7 -0
  48. package/dist/lib/node/{chunk-ALY3N6PW.cjs → chunk-JICWAOWZ.cjs} +6 -6
  49. package/dist/lib/node/{chunk-ALY3N6PW.cjs.map → chunk-JICWAOWZ.cjs.map} +3 -3
  50. package/dist/lib/node/{chunk-45OE3V5M.cjs → chunk-SLDJM45C.cjs} +286 -272
  51. package/dist/lib/node/chunk-SLDJM45C.cjs.map +7 -0
  52. package/dist/lib/node/chunk-VYBEBLDO.cjs +251 -0
  53. package/dist/lib/node/chunk-VYBEBLDO.cjs.map +7 -0
  54. package/dist/lib/node/chunk-X7MHLHHS.cjs +91 -0
  55. package/dist/lib/node/chunk-X7MHLHHS.cjs.map +7 -0
  56. package/dist/lib/node/{chunk-VJ73IG7P.cjs → chunk-XFZPWFEG.cjs} +8 -7
  57. package/dist/lib/node/chunk-XFZPWFEG.cjs.map +7 -0
  58. package/dist/lib/node/{chunk-5UH3F7TA.cjs → chunk-YJQZHKKA.cjs} +11 -4
  59. package/dist/lib/node/chunk-YJQZHKKA.cjs.map +7 -0
  60. package/dist/lib/node/{compiler-UIBLKJKG.cjs → compiler-W2RU3M7U.cjs} +8 -8
  61. package/dist/lib/node/index.cjs +75 -71
  62. package/dist/lib/node/index.cjs.map +3 -3
  63. package/dist/lib/node/intent-resolver-J4NBDNFH.cjs +100 -0
  64. package/dist/lib/node/intent-resolver-J4NBDNFH.cjs.map +7 -0
  65. package/dist/lib/node/meta.json +1 -1
  66. package/dist/lib/node/react-surface-27KTUBIZ.cjs +129 -0
  67. package/dist/lib/node/react-surface-27KTUBIZ.cjs.map +7 -0
  68. package/dist/lib/node/{settings-ZASSNBKR.cjs → settings-EI6VPNKN.cjs} +9 -9
  69. package/dist/lib/node/{settings-ZASSNBKR.cjs.map → settings-EI6VPNKN.cjs.map} +3 -3
  70. package/dist/lib/node/types.cjs +6 -4
  71. package/dist/lib/node/types.cjs.map +2 -2
  72. package/dist/lib/node-esm/DeploymentDialog-SSQSWLHX.mjs +13 -0
  73. package/dist/lib/node-esm/DeploymentDialog-SSQSWLHX.mjs.map +7 -0
  74. package/dist/lib/node-esm/{ScriptContainer-JAQY5F3X.mjs → ScriptContainer-W2F4FGDV.mjs} +26 -39
  75. package/dist/lib/node-esm/ScriptContainer-W2F4FGDV.mjs.map +7 -0
  76. package/dist/lib/node-esm/app-graph-builder-H5XLRVX3.mjs +65 -0
  77. package/dist/lib/node-esm/app-graph-builder-H5XLRVX3.mjs.map +7 -0
  78. package/dist/lib/node-esm/{artifact-definition-SF46QOO7.mjs → artifact-definition-KQ64AYBP.mjs} +10 -9
  79. package/dist/lib/node-esm/artifact-definition-KQ64AYBP.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-LBFWIT3Y.mjs → chunk-4MTPYMV2.mjs} +290 -277
  81. package/dist/lib/node-esm/chunk-4MTPYMV2.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs → chunk-EB5DSAD4.mjs} +5 -5
  83. package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs.map → chunk-EB5DSAD4.mjs.map} +3 -3
  84. package/dist/lib/node-esm/chunk-F4HA5C34.mjs +234 -0
  85. package/dist/lib/node-esm/chunk-F4HA5C34.mjs.map +7 -0
  86. package/dist/lib/node-esm/{chunk-P2V2Y5LV.mjs → chunk-FDEAVT67.mjs} +9 -3
  87. package/dist/lib/node-esm/chunk-FDEAVT67.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-MU3JKVL2.mjs +148 -0
  89. package/dist/lib/node-esm/chunk-MU3JKVL2.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-PBGVTGL2.mjs +353 -0
  91. package/dist/lib/node-esm/chunk-PBGVTGL2.mjs.map +7 -0
  92. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs +89 -0
  93. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs.map +7 -0
  94. package/dist/lib/node-esm/{chunk-FHQKFLM7.mjs → chunk-RW2APVMV.mjs} +5 -4
  95. package/dist/lib/node-esm/chunk-RW2APVMV.mjs.map +7 -0
  96. package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs → compiler-VT5C2Z3T.mjs} +7 -7
  97. package/dist/lib/node-esm/index.mjs +65 -61
  98. package/dist/lib/node-esm/index.mjs.map +3 -3
  99. package/dist/lib/node-esm/intent-resolver-PDZ2A26X.mjs +91 -0
  100. package/dist/lib/node-esm/intent-resolver-PDZ2A26X.mjs.map +7 -0
  101. package/dist/lib/node-esm/meta.json +1 -1
  102. package/dist/lib/node-esm/react-surface-UCUVDVSH.mjs +118 -0
  103. package/dist/lib/node-esm/react-surface-UCUVDVSH.mjs.map +7 -0
  104. package/dist/lib/node-esm/{settings-FDGLXN4I.mjs → settings-HU5UEFRF.mjs} +6 -6
  105. package/dist/lib/node-esm/{settings-FDGLXN4I.mjs.map → settings-HU5UEFRF.mjs.map} +3 -3
  106. package/dist/lib/node-esm/types.mjs +5 -2
  107. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  109. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/index.d.ts +178 -1
  113. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  116. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +11 -0
  117. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -0
  118. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +18 -0
  119. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/DeploymentDialog/index.d.ts +4 -0
  121. package/dist/types/src/components/DeploymentDialog/index.d.ts.map +1 -0
  122. package/dist/types/src/components/ScriptContainer.d.ts +3 -3
  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/Settings/ScriptObjectSettings.d.ts +8 -0
  126. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -0
  127. package/dist/types/src/components/{ScriptSettings/ScriptSettings.d.ts → Settings/ScriptPluginSettings.d.ts} +2 -2
  128. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -0
  129. package/dist/types/src/components/Settings/index.d.ts +3 -0
  130. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  131. package/dist/types/src/components/TestPanel/TestPanel.d.ts +7 -0
  132. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -0
  133. package/dist/types/src/components/TestPanel/index.d.ts +2 -0
  134. package/dist/types/src/components/TestPanel/index.d.ts.map +1 -0
  135. package/dist/types/src/components/index.d.ts +8 -5
  136. package/dist/types/src/components/index.d.ts.map +1 -1
  137. package/dist/types/src/hooks/deploy.d.ts +16 -12
  138. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  139. package/dist/types/src/hooks/index.d.ts +1 -1
  140. package/dist/types/src/hooks/index.d.ts.map +1 -1
  141. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts +17 -0
  142. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -0
  143. package/dist/types/src/hooks/useToolbarAction.d.ts +2 -3
  144. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
  145. package/dist/types/src/hooks/useToolbarState.d.ts +2 -8
  146. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  147. package/dist/types/src/meta.d.ts +3 -9
  148. package/dist/types/src/meta.d.ts.map +1 -1
  149. package/dist/types/src/templates/chess.d.ts.map +1 -1
  150. package/dist/types/src/templates/data-generator.d.ts +10 -0
  151. package/dist/types/src/templates/data-generator.d.ts.map +1 -0
  152. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  153. package/dist/types/src/templates/gmail.d.ts +3 -0
  154. package/dist/types/src/templates/gmail.d.ts.map +1 -0
  155. package/dist/types/src/templates/index.d.ts.map +1 -1
  156. package/dist/types/src/translations.d.ts +68 -21
  157. package/dist/types/src/translations.d.ts.map +1 -1
  158. package/dist/types/src/types.d.ts +12 -2
  159. package/dist/types/src/types.d.ts.map +1 -1
  160. package/dist/types/src/util/deploy.d.ts +25 -0
  161. package/dist/types/src/util/deploy.d.ts.map +1 -0
  162. package/dist/types/src/util/functions.d.ts +11 -0
  163. package/dist/types/src/util/functions.d.ts.map +1 -0
  164. package/dist/types/src/util/index.d.ts +3 -0
  165. package/dist/types/src/util/index.d.ts.map +1 -0
  166. package/package.json +51 -49
  167. package/src/ScriptPlugin.tsx +12 -17
  168. package/src/capabilities/app-graph-builder.ts +47 -0
  169. package/src/capabilities/artifact-definition.ts +2 -1
  170. package/src/capabilities/capabilities.ts +2 -2
  171. package/src/capabilities/index.ts +2 -1
  172. package/src/capabilities/intent-resolver.ts +39 -5
  173. package/src/capabilities/react-surface.tsx +64 -25
  174. package/src/capabilities/settings.ts +2 -2
  175. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +39 -0
  176. package/src/components/DeploymentDialog/DeploymentDialog.tsx +112 -0
  177. package/src/components/DeploymentDialog/index.ts +9 -0
  178. package/src/components/ScriptContainer.tsx +21 -32
  179. package/src/components/ScriptToolbar/ScriptToolbar.tsx +3 -4
  180. package/src/components/{ScriptSettingsPanel.tsx → Settings/ScriptObjectSettings.tsx} +120 -102
  181. package/src/components/{ScriptSettings/ScriptSettings.tsx → Settings/ScriptPluginSettings.tsx} +3 -3
  182. package/src/components/Settings/index.ts +6 -0
  183. package/src/components/{DebugPanel/DebugPanel.tsx → TestPanel/TestPanel.tsx} +8 -14
  184. package/src/components/{LogsPanel → TestPanel}/index.ts +1 -1
  185. package/src/components/index.ts +4 -4
  186. package/src/hooks/deploy.ts +31 -80
  187. package/src/hooks/index.ts +1 -1
  188. package/src/hooks/useCreateAndDeployScriptTemplates.ts +59 -0
  189. package/src/hooks/useToolbarAction.ts +9 -13
  190. package/src/hooks/useToolbarState.ts +1 -2
  191. package/src/meta.ts +7 -2
  192. package/src/templates/chess.ts +4 -0
  193. package/src/templates/data-generator.ts +73 -0
  194. package/src/templates/discord.ts +1 -1
  195. package/src/templates/forex-effect.ts +2 -1
  196. package/src/templates/gmail.ts +244 -0
  197. package/src/templates/index.ts +14 -0
  198. package/src/translations.ts +28 -10
  199. package/src/types.ts +4 -0
  200. package/src/util/deploy.ts +126 -0
  201. package/src/util/functions.ts +53 -0
  202. package/src/util/index.ts +6 -0
  203. package/dist/lib/browser/ScriptContainer-4FIJVITA.mjs.map +0 -7
  204. package/dist/lib/browser/artifact-definition-GTL3ZSF2.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-4SSKJNMZ.mjs +0 -69
  206. package/dist/lib/browser/chunk-4SSKJNMZ.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-6MOQ4BP3.mjs +0 -15
  208. package/dist/lib/browser/chunk-7TZYIGBS.mjs +0 -541
  209. package/dist/lib/browser/chunk-7TZYIGBS.mjs.map +0 -7
  210. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +0 -7
  211. package/dist/lib/browser/chunk-JL34HAEL.mjs.map +0 -7
  212. package/dist/lib/browser/chunk-SFG422OU.mjs.map +0 -7
  213. package/dist/lib/browser/intent-resolver-BJ76DBGE.mjs +0 -45
  214. package/dist/lib/browser/intent-resolver-BJ76DBGE.mjs.map +0 -7
  215. package/dist/lib/browser/react-surface-HXCDELEA.mjs +0 -79
  216. package/dist/lib/browser/react-surface-HXCDELEA.mjs.map +0 -7
  217. package/dist/lib/node/ScriptContainer-54GQSZCU.cjs.map +0 -7
  218. package/dist/lib/node/artifact-definition-64KZC4UT.cjs.map +0 -7
  219. package/dist/lib/node/chunk-45OE3V5M.cjs.map +0 -7
  220. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +0 -7
  221. package/dist/lib/node/chunk-CJ45RBS4.cjs +0 -563
  222. package/dist/lib/node/chunk-CJ45RBS4.cjs.map +0 -7
  223. package/dist/lib/node/chunk-VJ73IG7P.cjs.map +0 -7
  224. package/dist/lib/node/chunk-XCQNFRZ6.cjs +0 -77
  225. package/dist/lib/node/chunk-XCQNFRZ6.cjs.map +0 -7
  226. package/dist/lib/node/intent-resolver-HQ3FGK2K.cjs +0 -59
  227. package/dist/lib/node/intent-resolver-HQ3FGK2K.cjs.map +0 -7
  228. package/dist/lib/node/react-surface-QQL4EDUS.cjs +0 -95
  229. package/dist/lib/node/react-surface-QQL4EDUS.cjs.map +0 -7
  230. package/dist/lib/node-esm/ScriptContainer-JAQY5F3X.mjs.map +0 -7
  231. package/dist/lib/node-esm/artifact-definition-SF46QOO7.mjs.map +0 -7
  232. package/dist/lib/node-esm/chunk-4YUSGXJ2.mjs +0 -71
  233. package/dist/lib/node-esm/chunk-4YUSGXJ2.mjs.map +0 -7
  234. package/dist/lib/node-esm/chunk-FHQKFLM7.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-LBFWIT3Y.mjs.map +0 -7
  236. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +0 -7
  237. package/dist/lib/node-esm/chunk-RI35DJSW.mjs +0 -542
  238. package/dist/lib/node-esm/chunk-RI35DJSW.mjs.map +0 -7
  239. package/dist/lib/node-esm/intent-resolver-CDTQKQD4.mjs +0 -46
  240. package/dist/lib/node-esm/intent-resolver-CDTQKQD4.mjs.map +0 -7
  241. package/dist/lib/node-esm/react-surface-PCW5HN3B.mjs +0 -80
  242. package/dist/lib/node-esm/react-surface-PCW5HN3B.mjs.map +0 -7
  243. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts +0 -7
  244. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +0 -1
  245. package/dist/types/src/components/DebugPanel/index.d.ts +0 -2
  246. package/dist/types/src/components/DebugPanel/index.d.ts.map +0 -1
  247. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts +0 -8
  248. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts.map +0 -1
  249. package/dist/types/src/components/LogsPanel/index.d.ts +0 -2
  250. package/dist/types/src/components/LogsPanel/index.d.ts.map +0 -1
  251. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +0 -1
  252. package/dist/types/src/components/ScriptSettings/index.d.ts +0 -2
  253. package/dist/types/src/components/ScriptSettings/index.d.ts.map +0 -1
  254. package/dist/types/src/components/ScriptSettingsPanel.d.ts +0 -7
  255. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +0 -1
  256. package/dist/types/src/hooks/view.d.ts +0 -33
  257. package/dist/types/src/hooks/view.d.ts.map +0 -1
  258. package/src/components/DebugPanel/index.ts +0 -5
  259. package/src/components/LogsPanel/LogsPanel.tsx +0 -111
  260. package/src/components/ScriptSettings/index.ts +0 -5
  261. package/src/hooks/view.ts +0 -52
  262. /package/dist/lib/browser/{compiler-YY2XSKHQ.mjs.map → compiler-56LTBEQB.mjs.map} +0 -0
  263. /package/dist/lib/node/{compiler-UIBLKJKG.cjs.map → compiler-W2RU3M7U.cjs.map} +0 -0
  264. /package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs.map → compiler-VT5C2Z3T.mjs.map} +0 -0
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
6
+ import { isInstanceOf } from '@dxos/echo-schema';
7
+ import { ScriptType } from '@dxos/functions';
8
+ import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
9
+ import { createExtension, type Node } from '@dxos/plugin-graph';
10
+
11
+ import { meta } from '../meta';
12
+
13
+ export default (context: PluginsContext) =>
14
+ contributes(Capabilities.AppGraphBuilder, [
15
+ createExtension({
16
+ id: `${meta.id}/execute`,
17
+ filter: (node): node is Node<ScriptType> => isInstanceOf(ScriptType, node.data),
18
+ connector: ({ node }) => [
19
+ {
20
+ id: [node.id, 'execute'].join(ATTENDABLE_PATH_SEPARATOR),
21
+ type: PLANK_COMPANION_TYPE,
22
+ data: 'execute',
23
+ properties: {
24
+ label: ['script test label', { ns: meta.id }],
25
+ icon: 'ph--terminal--regular',
26
+ disposition: 'hidden',
27
+ },
28
+ },
29
+ ],
30
+ }),
31
+ createExtension({
32
+ id: `${meta.id}/logs`,
33
+ filter: (node): node is Node<ScriptType> => isInstanceOf(ScriptType, node.data),
34
+ connector: ({ node }) => [
35
+ {
36
+ id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),
37
+ type: PLANK_COMPANION_TYPE,
38
+ data: 'logs',
39
+ properties: {
40
+ label: ['script logs label', { ns: meta.id }],
41
+ icon: 'ph--clock-countdown--regular',
42
+ disposition: 'hidden',
43
+ },
44
+ },
45
+ ],
46
+ }),
47
+ ]);
@@ -23,7 +23,7 @@ declare global {
23
23
 
24
24
  export default () => {
25
25
  const definition = defineArtifact({
26
- id: meta.id,
26
+ id: `artifact:${meta.id}`,
27
27
  name: meta.name,
28
28
  // TODO(dmaretskyi): Since writing scripts requires a lot of domain knowledge,
29
29
  // we should offload the work of synthesizing the code to a separate model.
@@ -31,6 +31,7 @@ export default () => {
31
31
  instructions: `
32
32
  If the user explicitly requests you to write a script, you can create one.
33
33
  If the user requests you to change one of the existing script, you can update it.
34
+ You must not create a script unless the user explicitly requests it.
34
35
  Scripts are short code pieces of executable code that can be used to perform computations, integrate with external systems, and perform automated tasks.
35
36
  Each script must follow as strict shape for the definition but the body can contain any valid executable code.
36
37
  Scripts are written in JavaScript or TypeScript.
@@ -5,8 +5,8 @@
5
5
  import { defineCapability } from '@dxos/app-framework';
6
6
 
7
7
  import { type Compiler } from '../compiler';
8
- import { SCRIPT_PLUGIN } from '../meta';
8
+ import { meta } from '../meta';
9
9
 
10
10
  export namespace ScriptCapabilities {
11
- export const Compiler = defineCapability<Compiler>(`${SCRIPT_PLUGIN}/capability/compiler`);
11
+ export const Compiler = defineCapability<Compiler>(`${meta.id}/capability/compiler`);
12
12
  }
@@ -4,10 +4,11 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
8
+ export const ArtifactDefinition = lazy(() => import('./artifact-definition'));
7
9
  export const Compiler = lazy(() => import('./compiler'));
8
10
  export const IntentResolver = lazy(() => import('./intent-resolver'));
9
11
  export const ReactSurface = lazy(() => import('./react-surface'));
10
12
  export const ScriptSettings = lazy(() => import('./settings'));
11
- export const ArtifactDefinition = lazy(() => import('./artifact-definition'));
12
13
 
13
14
  export * from './capabilities';
@@ -3,22 +3,26 @@
3
3
  //
4
4
 
5
5
  import { Octokit } from '@octokit/core';
6
+ import { isNotNullable } from 'effect/Predicate';
6
7
 
7
- import { contributes, Capabilities, createResolver } from '@dxos/app-framework';
8
+ import { contributes, Capabilities, createResolver, createIntent, LayoutAction } from '@dxos/app-framework';
8
9
  import { ScriptType } from '@dxos/functions/types';
9
10
  import { create, makeRef } from '@dxos/live-object';
11
+ import { TokenManagerAction } from '@dxos/plugin-token-manager/types';
10
12
  import { TextType } from '@dxos/schema';
11
13
 
14
+ import { DEPLOYMENT_DIALOG } from '../components';
15
+ import { defaultScriptsForIntegration } from '../meta';
12
16
  import { templates } from '../templates';
13
17
  import { ScriptAction } from '../types';
14
18
 
15
19
  export default () =>
16
- contributes(
17
- Capabilities.IntentResolver,
20
+ contributes(Capabilities.IntentResolver, [
18
21
  createResolver({
19
22
  intent: ScriptAction.Create,
20
- resolve: async ({ name, gistUrl }) => {
23
+ resolve: async ({ name, gistUrl, initialTemplateId }) => {
21
24
  let content = templates[0].source;
25
+
22
26
  const gistId = gistUrl?.split('/').at(-1);
23
27
  if (gistId) {
24
28
  // TODO(wittjosiah): Capability which contributes Octokit?
@@ -33,6 +37,14 @@ export default () =>
33
37
  }
34
38
  }
35
39
 
40
+ if (initialTemplateId) {
41
+ const template = templates.find((template) => template.id === initialTemplateId);
42
+ if (template) {
43
+ content = template.source;
44
+ name = template.name;
45
+ }
46
+ }
47
+
36
48
  return {
37
49
  data: {
38
50
  object: create(ScriptType, {
@@ -43,4 +55,26 @@ export default () =>
43
55
  };
44
56
  },
45
57
  }),
46
- );
58
+ createResolver({
59
+ intent: TokenManagerAction.AccessTokenCreated,
60
+ resolve: async ({ accessToken }) => {
61
+ const scriptTemplates = (defaultScriptsForIntegration[accessToken.source] ?? [])
62
+ .map((id) => templates.find((t) => t.id === id))
63
+ .filter(isNotNullable);
64
+
65
+ if (scriptTemplates.length > 0) {
66
+ return {
67
+ intents: [
68
+ createIntent(LayoutAction.UpdateDialog, {
69
+ part: 'dialog',
70
+ subject: DEPLOYMENT_DIALOG,
71
+ options: { blockAlign: 'start', state: true, props: { accessToken, scriptTemplates } },
72
+ }),
73
+ ],
74
+ };
75
+ }
76
+
77
+ return { data: undefined };
78
+ },
79
+ }),
80
+ ]);
@@ -5,56 +5,95 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';
8
+ import { InvocationTracePanel } from '@dxos/devtools';
9
+ import { isInstanceOf } from '@dxos/echo-schema';
8
10
  import { ScriptType } from '@dxos/functions/types';
9
11
  import { SettingsStore } from '@dxos/local-storage';
10
- import { Clipboard } from '@dxos/react-ui';
12
+ import { getSpace } from '@dxos/react-client/echo';
13
+ import { StackItem } from '@dxos/react-ui-stack';
14
+ import { type AccessTokenType } from '@dxos/schema';
11
15
 
12
16
  import { ScriptCapabilities } from './capabilities';
13
- import { DebugPanel, ScriptSettings, ScriptContainer, ScriptSettingsPanel } from '../components';
17
+ import {
18
+ ScriptContainer,
19
+ ScriptPluginSettings,
20
+ ScriptObjectSettings,
21
+ TestPanel,
22
+ ScriptProperties,
23
+ DeploymentDialog,
24
+ DEPLOYMENT_DIALOG,
25
+ } from '../components';
14
26
  import { useDeployState, useToolbarState } from '../hooks';
15
- import { SCRIPT_PLUGIN } from '../meta';
27
+ import { meta } from '../meta';
16
28
  import { type ScriptSettingsProps } from '../types';
17
29
 
18
30
  export default () =>
19
31
  contributes(Capabilities.ReactSurface, [
20
32
  createSurface({
21
- id: `${SCRIPT_PLUGIN}/settings`,
33
+ id: `${meta.id}/plugin-settings`,
22
34
  role: 'article',
23
35
  filter: (data): data is { subject: SettingsStore<ScriptSettingsProps> } =>
24
- data.subject instanceof SettingsStore && data.subject.prefix === SCRIPT_PLUGIN,
25
- component: ({ data: { subject } }) => <ScriptSettings settings={subject.value} />,
36
+ data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
37
+ component: ({ data: { subject } }) => <ScriptPluginSettings settings={subject.value} />,
26
38
  }),
27
39
  createSurface({
28
- id: `${SCRIPT_PLUGIN}/article`,
40
+ id: `${meta.id}/article`,
29
41
  role: 'article',
30
- filter: (data): data is { subject: ScriptType } => data.subject instanceof ScriptType,
42
+ filter: (data): data is { subject: ScriptType } => isInstanceOf(ScriptType, data.subject),
31
43
  component: ({ data, role }) => {
32
44
  const compiler = useCapability(ScriptCapabilities.Compiler);
33
45
  // TODO(dmaretskyi): Since settings store is not reactive, this would break on the script plugin being enabled without a page reload.
34
- const settings = useCapability(Capabilities.SettingsStore).getStore<ScriptSettingsProps>(SCRIPT_PLUGIN)?.value;
46
+ const settings = useCapability(Capabilities.SettingsStore).getStore<ScriptSettingsProps>(meta.id)?.value;
35
47
  return <ScriptContainer role={role} script={data.subject} settings={settings} env={compiler.environment} />;
36
48
  },
37
49
  }),
38
50
  createSurface({
39
- id: `${SCRIPT_PLUGIN}/automation`,
40
- role: 'complementary--function',
41
- position: 'hoist',
42
- filter: (data): data is { subject: ScriptType } => data.subject instanceof ScriptType,
43
- component: ({ data }) => {
51
+ id: `${meta.id}/companion/base-settings`,
52
+ role: 'base-object-settings',
53
+ filter: (data): data is { subject: ScriptType } => isInstanceOf(ScriptType, data.subject),
54
+ component: ({ data }) => <ScriptProperties object={data.subject} />,
55
+ }),
56
+ createSurface({
57
+ id: `${meta.id}/companion/settings`,
58
+ role: 'object-settings',
59
+ filter: (data): data is { subject: ScriptType } => isInstanceOf(ScriptType, data.subject),
60
+ component: ({ data }) => <ScriptObjectSettings object={data.subject} />,
61
+ }),
62
+ createSurface({
63
+ id: `${meta.id}/companion/execute`,
64
+ role: 'article',
65
+ filter: (data): data is { companionTo: ScriptType } =>
66
+ isInstanceOf(ScriptType, data.companionTo) && data.subject === 'execute',
67
+ component: ({ data, role }) => {
44
68
  // TODO(wittjosiah): Decouple hooks from toolbar state.
45
- const state = useToolbarState({ view: 'editor' });
46
- useDeployState({ state, script: data.subject });
47
- return <DebugPanel functionUrl={state.functionUrl} />;
69
+ const state = useToolbarState();
70
+ useDeployState({ state, script: data.companionTo });
71
+ return (
72
+ <StackItem.Content role={role}>
73
+ <TestPanel functionUrl={state.functionUrl} />
74
+ </StackItem.Content>
75
+ );
76
+ },
77
+ }),
78
+ createSurface({
79
+ id: `${meta.id}/companion/logs`,
80
+ role: 'article',
81
+ filter: (data): data is { companionTo: ScriptType } =>
82
+ isInstanceOf(ScriptType, data.companionTo) && data.subject === 'logs',
83
+ component: ({ data, role }) => {
84
+ const space = getSpace(data.companionTo);
85
+ return (
86
+ <StackItem.Content role={role}>
87
+ <InvocationTracePanel space={space} script={data.companionTo} detailAxis='block' />
88
+ </StackItem.Content>
89
+ );
48
90
  },
49
91
  }),
50
92
  createSurface({
51
- id: `${SCRIPT_PLUGIN}/settings-panel`,
52
- role: 'complementary--settings',
53
- filter: (data): data is { subject: ScriptType } => data.subject instanceof ScriptType,
54
- component: ({ data }) => (
55
- <Clipboard.Provider>
56
- <ScriptSettingsPanel script={data.subject} />
57
- </Clipboard.Provider>
58
- ),
93
+ id: DEPLOYMENT_DIALOG,
94
+ role: 'dialog',
95
+ filter: (data): data is { props: { accessToken: AccessTokenType; scriptTemplates: any } } =>
96
+ data.component === DEPLOYMENT_DIALOG,
97
+ component: ({ data }) => <DeploymentDialog {...data.props} />,
59
98
  }),
60
99
  ]);
@@ -5,10 +5,10 @@
5
5
  import { Capabilities, contributes } from '@dxos/app-framework';
6
6
  import { create } from '@dxos/live-object';
7
7
 
8
- import { SCRIPT_PLUGIN } from '../meta';
8
+ import { meta } from '../meta';
9
9
  import { ScriptSettingsSchema } from '../types';
10
10
 
11
11
  export default () => {
12
12
  const settings = create(ScriptSettingsSchema, { editorInputMode: 'vscode' });
13
- return contributes(Capabilities.Settings, { schema: ScriptSettingsSchema, prefix: SCRIPT_PLUGIN, value: settings });
13
+ return contributes(Capabilities.Settings, { schema: ScriptSettingsSchema, prefix: meta.id, value: settings });
14
14
  };
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta } from '@storybook/react';
8
+ import React from 'react';
9
+
10
+ import { Dialog } from '@dxos/react-ui';
11
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
12
+
13
+ import translations from '../../translations';
14
+ import { DeploymentDialog } from '../DeploymentDialog/DeploymentDialog';
15
+
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) => (
26
+ <Dialog.Root defaultOpen={true}>
27
+ <DeploymentDialog {...args} />
28
+ </Dialog.Root>
29
+ ),
30
+ };
31
+
32
+ const meta: Meta = {
33
+ title: 'plugins/plugin-script/DeploymentDialog',
34
+ component: DeploymentDialog,
35
+ parameters: { translations },
36
+ decorators: [withTheme, withLayout({ tooltips: true })],
37
+ };
38
+
39
+ export default meta;
@@ -0,0 +1,112 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useEffect, useMemo } from 'react';
6
+
7
+ import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { getSpace } from '@dxos/react-client/echo';
9
+ import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
10
+ import { type AccessTokenType } from '@dxos/schema';
11
+
12
+ import { useCreateAndDeployScriptTemplates } from '../../hooks/useCreateAndDeployScriptTemplates';
13
+ import { SCRIPT_PLUGIN } from '../../meta';
14
+ import { type Template } from '../../templates';
15
+
16
+ export const DEPLOYMENT_DIALOG = `${SCRIPT_PLUGIN}/deployment/dialog`;
17
+
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.
22
+
23
+ type DeploymentDialogProps = {
24
+ accessToken: AccessTokenType;
25
+ scriptTemplates: Template[];
26
+ };
27
+
28
+ export const DeploymentDialog = ({ accessToken, scriptTemplates }: DeploymentDialogProps) => {
29
+ const { t } = useTranslation(SCRIPT_PLUGIN);
30
+ const space = useMemo(() => getSpace(accessToken), [accessToken]);
31
+
32
+ // TODO(ZaymonFC): Thinking further. All of this should get moved to intents to run async in the background.
33
+ // Deployment shouldn't be tied to the lifecycle of the dialogue component.
34
+ const { handleCreateAndDeployScripts, status } = useCreateAndDeployScriptTemplates(space, scriptTemplates);
35
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
36
+
37
+ useEffect(() => {
38
+ if (status === 'success') {
39
+ // TODO(ZaymonFC): We can probably re-use this toast for normal script deployment.
40
+ void dispatch(
41
+ createIntent(LayoutAction.AddToast, {
42
+ part: 'toast',
43
+ subject: {
44
+ id: `${SCRIPT_PLUGIN}/deployment-success`,
45
+ icon: 'ph--check--regular',
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 }],
50
+ },
51
+ }),
52
+ );
53
+ void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
54
+ }
55
+ if (status === 'error') {
56
+ void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
57
+ void dispatch(
58
+ createIntent(LayoutAction.AddToast, {
59
+ part: 'toast',
60
+ subject: {
61
+ id: `${SCRIPT_PLUGIN}/deployment-error`,
62
+ icon: 'ph--warning--regular',
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
+ ],
73
+ },
74
+ }),
75
+ );
76
+ }
77
+ }, [status, dispatch]);
78
+
79
+ return (
80
+ <Dialog.Content>
81
+ <div className='flex justify-between items-center'>
82
+ <Dialog.Title>{t('deployment dialog title')}</Dialog.Title>
83
+ <Dialog.Close asChild>
84
+ <Button density='fine' variant='ghost'>
85
+ <Icon icon='ph--x--regular' size={4} />
86
+ </Button>
87
+ </Dialog.Close>
88
+ </div>
89
+ <div role='none' className='plb-4'>
90
+ {/* TODO: Implement deployment logic and UI. */}
91
+ <p>{t('deployment dialog scripts found message', { count: scriptTemplates.length })}</p>
92
+ <ul className='pbs-2'>
93
+ {scriptTemplates.map((template) => {
94
+ return <li key={template.id}>{template.name}</li>;
95
+ })}
96
+ </ul>
97
+ </div>
98
+ <div role='none' className='flex flex-row-reverse gap-1'>
99
+ <Button variant='primary' onClick={handleCreateAndDeployScripts} disabled={status === 'pending'}>
100
+ {status === 'pending'
101
+ ? t('deployment dialog deploy functions pending button label', { count: scriptTemplates.length })
102
+ : t('deployment dialog deploy functions button label', { count: scriptTemplates.length })}
103
+ </Button>
104
+ <Dialog.Close asChild disabled={status === 'pending'}>
105
+ <Button disabled={status === 'pending'}>{t('deployment dialog skip button label')}</Button>
106
+ </Dialog.Close>
107
+ </div>
108
+ </Dialog.Content>
109
+ );
110
+ };
111
+
112
+ export default DeploymentDialog;
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { DeploymentDialog, DEPLOYMENT_DIALOG } from './DeploymentDialog';
6
+
7
+ export { DEPLOYMENT_DIALOG };
8
+
9
+ export default DeploymentDialog;
@@ -12,28 +12,30 @@ import { createDataExtensions, listener, stackItemContentEditorClassNames } from
12
12
  import { StackItem } from '@dxos/react-ui-stack';
13
13
  import { mx } from '@dxos/react-ui-theme';
14
14
 
15
- import { LogsPanel } from './LogsPanel';
16
15
  import { ScriptToolbar } from './ScriptToolbar';
17
16
  import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';
18
17
  import { useDeployState, useToolbarState } from '../hooks';
19
18
  import { type ScriptSettingsProps } from '../types';
20
19
 
21
- export type ScriptEditorProps = ThemedClassName<{
22
- script: ScriptType;
23
- settings?: ScriptSettingsProps;
24
- role?: string;
25
- }> &
26
- Pick<TypescriptEditorProps, 'env'>;
20
+ export type ScriptEditorProps = ThemedClassName<
21
+ {
22
+ role?: string;
23
+ script: ScriptType;
24
+ settings?: ScriptSettingsProps;
25
+ } & Pick<TypescriptEditorProps, 'env'>
26
+ >;
27
27
 
28
28
  export const ScriptContainer = ({
29
- role,
30
29
  classNames,
30
+ role,
31
31
  script,
32
32
  settings = { editorInputMode: 'vscode' },
33
33
  env,
34
34
  }: ScriptEditorProps) => {
35
35
  const identity = useIdentity();
36
36
  const space = getSpace(script);
37
+ const state = useToolbarState();
38
+ useDeployState({ state, script });
37
39
 
38
40
  const extensions = useMemo(
39
41
  () => [
@@ -51,34 +53,21 @@ export const ScriptContainer = ({
51
53
  identity,
52
54
  }),
53
55
  ],
54
- [script, script.source.target, space, identity],
56
+ [identity, space, script, script.source.target],
55
57
  );
56
58
 
57
- const state = useToolbarState({ view: 'editor' });
58
- useDeployState({ state, script });
59
-
60
- if (!space) {
61
- return null;
62
- }
63
-
64
59
  return (
65
- <StackItem.Content toolbar>
60
+ <StackItem.Content toolbar classNames='divide-y divide-separator'>
66
61
  <ScriptToolbar state={state} role={role} script={script} />
67
- <div role='none' className={mx('flex flex-col w-full overflow-hidden divide-y divide-separator', classNames)}>
68
- {state.view !== 'logs' && (
69
- <TypescriptEditor
70
- id={script.id}
71
- env={env}
72
- initialValue={script.source?.target?.content}
73
- extensions={extensions}
74
- className={mx(stackItemContentEditorClassNames(role), 'grow')}
75
- inputMode={settings.editorInputMode}
76
- toolbar
77
- />
78
- )}
79
-
80
- {state.view !== 'editor' && <LogsPanel script={script} classNames='grow' />}
81
- </div>
62
+ <TypescriptEditor
63
+ id={script.id}
64
+ env={env}
65
+ initialValue={script.source?.target?.content}
66
+ extensions={extensions}
67
+ className={mx(stackItemContentEditorClassNames(role))}
68
+ inputMode={settings.editorInputMode}
69
+ toolbar
70
+ />
82
71
  </StackItem.Content>
83
72
  );
84
73
  };
@@ -15,7 +15,6 @@ import {
15
15
  createDeploy,
16
16
  createFormat,
17
17
  createTemplateSelect,
18
- createView,
19
18
  useToolbarAction,
20
19
  } from '../../hooks';
21
20
 
@@ -30,10 +29,9 @@ const createToolbar = (state: ScriptToolbarState) => {
30
29
  const format = createFormat();
31
30
  const gap = createGapSeparator();
32
31
  const deploy = createDeploy(state);
33
- const view = createView(state);
34
32
  return {
35
- nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes, ...view.nodes],
36
- edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges, ...view.edges],
33
+ nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes],
34
+ edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges],
37
35
  };
38
36
  };
39
37
 
@@ -41,6 +39,7 @@ export const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbar
41
39
  const handleAction = useToolbarAction({ state, script });
42
40
  const toolbarCreator = useCallback(() => createToolbar(state), [state]);
43
41
  const menu = useMenuActions(toolbarCreator);
42
+
44
43
  return (
45
44
  <div role='none' className={stackItemContentToolbarClassNames(role)}>
46
45
  <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>