@dxos/plugin-script 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (337) hide show
  1. package/dist/lib/browser/DeploymentDialog-FIHD4UVK.mjs +15 -0
  2. package/dist/lib/browser/NotebookContainer-GL2Z5I5Q.mjs +817 -0
  3. package/dist/lib/browser/NotebookContainer-GL2Z5I5Q.mjs.map +7 -0
  4. package/dist/lib/browser/ScriptContainer-F4OK3OG6.mjs +149 -0
  5. package/dist/lib/browser/ScriptContainer-F4OK3OG6.mjs.map +7 -0
  6. package/dist/lib/browser/{app-graph-builder-HLQ7K3BT.mjs → app-graph-builder-2WR2ATTJ.mjs} +12 -10
  7. package/dist/lib/browser/app-graph-builder-2WR2ATTJ.mjs.map +7 -0
  8. package/dist/lib/browser/blueprint-definition-6PZWZM2Y.mjs +30 -0
  9. package/dist/lib/browser/blueprint-definition-6PZWZM2Y.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-2SXDKBM7.mjs +304 -0
  11. package/dist/lib/browser/chunk-2SXDKBM7.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-6X7QVTRB.mjs +112 -0
  13. package/dist/lib/browser/chunk-6X7QVTRB.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-P4HQKUCP.mjs → chunk-75RTLLH4.mjs} +23 -21
  15. package/dist/lib/browser/chunk-75RTLLH4.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-FIM2MVNJ.mjs → chunk-7WFISUBY.mjs} +182 -90
  17. package/dist/lib/browser/chunk-7WFISUBY.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-QYAREHGH.mjs → chunk-EB6AXFXO.mjs} +8 -5
  19. package/dist/lib/browser/chunk-EB6AXFXO.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  21. package/dist/lib/browser/chunk-MQHBMJLH.mjs +103 -0
  22. package/dist/lib/browser/chunk-MQHBMJLH.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-S22N3BUR.mjs +88 -0
  24. package/dist/lib/browser/chunk-S22N3BUR.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-UGDRMROB.mjs +542 -0
  26. package/dist/lib/browser/chunk-UGDRMROB.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-5TVBECWH.mjs → chunk-UOQ6NCH3.mjs} +2 -2
  28. package/dist/lib/browser/compiler-2HV5KXV4.mjs +143 -0
  29. package/dist/lib/browser/compiler-2HV5KXV4.mjs.map +7 -0
  30. package/dist/lib/browser/index.mjs +113 -67
  31. package/dist/lib/browser/index.mjs.map +4 -4
  32. package/dist/lib/browser/{intent-resolver-7B77IG3N.mjs → intent-resolver-3B4ESSCU.mjs} +40 -26
  33. package/dist/lib/browser/intent-resolver-3B4ESSCU.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/{react-surface-FYYXZA7C.mjs → react-surface-ASV2KBRA.mjs} +49 -25
  36. package/dist/lib/browser/react-surface-ASV2KBRA.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-KCTBK5TY.mjs → settings-4NKLTJTT.mjs} +10 -8
  38. package/dist/lib/browser/settings-4NKLTJTT.mjs.map +7 -0
  39. package/dist/lib/browser/templates/index.mjs +2 -1
  40. package/dist/lib/browser/types/index.mjs +8 -4
  41. package/dist/lib/node-esm/DeploymentDialog-5EN2KZE5.mjs +16 -0
  42. package/dist/lib/node-esm/DeploymentDialog-5EN2KZE5.mjs.map +7 -0
  43. package/dist/lib/node-esm/NotebookContainer-7RCEXND7.mjs +818 -0
  44. package/dist/lib/node-esm/NotebookContainer-7RCEXND7.mjs.map +7 -0
  45. package/dist/lib/node-esm/ScriptContainer-763IAKOD.mjs +150 -0
  46. package/dist/lib/node-esm/ScriptContainer-763IAKOD.mjs.map +7 -0
  47. package/dist/lib/node-esm/{app-graph-builder-7EYIHWH4.mjs → app-graph-builder-NCVLUL5R.mjs} +12 -10
  48. package/dist/lib/node-esm/app-graph-builder-NCVLUL5R.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-5R6YCSZZ.mjs +31 -0
  50. package/dist/lib/node-esm/blueprint-definition-5R6YCSZZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-2S43VHAM.mjs +90 -0
  52. package/dist/lib/node-esm/chunk-2S43VHAM.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-32AMTGGN.mjs +104 -0
  54. package/dist/lib/node-esm/chunk-32AMTGGN.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-4VVV5L5A.mjs +543 -0
  56. package/dist/lib/node-esm/chunk-4VVV5L5A.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-QKK3NDHW.mjs → chunk-535YDI5V.mjs} +23 -21
  58. package/dist/lib/node-esm/chunk-535YDI5V.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-35M3CHYE.mjs → chunk-55JZVM6K.mjs} +2 -2
  60. package/dist/lib/node-esm/chunk-6H4FYMCX.mjs +114 -0
  61. package/dist/lib/node-esm/chunk-6H4FYMCX.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-7NMI4CEU.mjs → chunk-DKS2EQW6.mjs} +182 -90
  63. package/dist/lib/node-esm/chunk-DKS2EQW6.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  65. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-AHXJ6NQU.mjs → chunk-IBV2DR36.mjs} +8 -5
  67. package/dist/lib/node-esm/chunk-IBV2DR36.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-NQN3JE2R.mjs +305 -0
  69. package/dist/lib/node-esm/chunk-NQN3JE2R.mjs.map +7 -0
  70. package/dist/lib/node-esm/compiler-KPEZKEHC.mjs +144 -0
  71. package/dist/lib/node-esm/compiler-KPEZKEHC.mjs.map +7 -0
  72. package/dist/lib/node-esm/index.mjs +113 -67
  73. package/dist/lib/node-esm/index.mjs.map +4 -4
  74. package/dist/lib/node-esm/{intent-resolver-FRZGS4TB.mjs → intent-resolver-GIACMXI4.mjs} +40 -26
  75. package/dist/lib/node-esm/intent-resolver-GIACMXI4.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-NXBO7VYB.mjs} +49 -25
  78. package/dist/lib/node-esm/react-surface-NXBO7VYB.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-DXZ334A3.mjs → settings-PW5NXWLW.mjs} +10 -8
  80. package/dist/lib/node-esm/settings-PW5NXWLW.mjs.map +7 -0
  81. package/dist/lib/node-esm/templates/index.mjs +2 -1
  82. package/dist/lib/node-esm/types/index.mjs +8 -4
  83. package/dist/types/src/ScriptPlugin.d.ts +1 -1
  84. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
  88. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  90. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/compiler.d.ts +1 -1
  92. package/dist/types/src/capabilities/compiler.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/index.d.ts +6 -6
  94. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  96. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  98. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/settings.d.ts +1 -1
  100. package/dist/types/src/compiler/compiler.d.ts +1 -1
  101. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  102. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +4 -4
  103. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  104. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts +246 -13
  105. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/DeploymentDialog/index.d.ts +1 -1
  107. package/dist/types/src/components/DeploymentDialog/index.d.ts.map +1 -1
  108. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts +1 -1
  109. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  110. package/dist/types/src/components/NotebookContainer.d.ts +10 -0
  111. package/dist/types/src/components/NotebookContainer.d.ts.map +1 -0
  112. package/dist/types/src/components/NotebookContainer.stories.d.ts +254 -0
  113. package/dist/types/src/components/NotebookContainer.stories.d.ts.map +1 -0
  114. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts +15 -0
  115. package/dist/types/src/components/NotebookStack/NotebookCell.d.ts.map +1 -0
  116. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts +9 -0
  117. package/dist/types/src/components/NotebookStack/NotebookMenu.d.ts.map +1 -0
  118. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts +14 -0
  119. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -0
  120. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts +248 -0
  121. package/dist/types/src/components/NotebookStack/NotebookStack.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/NotebookStack/index.d.ts +3 -0
  123. package/dist/types/src/components/NotebookStack/index.d.ts.map +1 -0
  124. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts +5 -0
  125. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts.map +1 -0
  126. package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts +13 -0
  127. package/dist/types/src/components/QueryEditor/QueryEditor.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/QueryEditor/index.d.ts +2 -0
  129. package/dist/types/src/components/QueryEditor/index.d.ts.map +1 -0
  130. package/dist/types/src/components/ScriptContainer.d.ts +4 -4
  131. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  132. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +5 -6
  133. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  134. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts +245 -10
  135. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +2 -2
  137. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  138. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts +2 -2
  139. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  140. package/dist/types/src/components/TestPanel/TestContainer.d.ts +2 -2
  141. package/dist/types/src/components/TestPanel/TestContainer.d.ts.map +1 -1
  142. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  143. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  144. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  145. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts +11 -4
  146. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/index.d.ts +3 -4
  148. package/dist/types/src/components/index.d.ts.map +1 -1
  149. package/dist/types/src/e2e/deploy.test.d.ts +2 -0
  150. package/dist/types/src/e2e/deploy.test.d.ts.map +1 -0
  151. package/dist/types/src/events.d.ts.map +1 -1
  152. package/dist/types/src/hooks/deploy.d.ts +11 -26
  153. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  154. package/dist/types/src/hooks/format.d.ts +2 -2
  155. package/dist/types/src/hooks/format.d.ts.map +1 -1
  156. package/dist/types/src/hooks/index.d.ts +1 -0
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/template.d.ts +4 -14
  159. package/dist/types/src/hooks/template.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useCompiler.d.ts +7 -0
  161. package/dist/types/src/hooks/useCompiler.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  163. package/dist/types/src/index.d.ts +1 -0
  164. package/dist/types/src/index.d.ts.map +1 -1
  165. package/dist/types/src/meta.d.ts +0 -1
  166. package/dist/types/src/meta.d.ts.map +1 -1
  167. package/dist/types/src/notebook/compute-graph.d.ts +45 -0
  168. package/dist/types/src/notebook/compute-graph.d.ts.map +1 -0
  169. package/dist/types/src/notebook/compute-graph.test.d.ts +2 -0
  170. package/dist/types/src/notebook/compute-graph.test.d.ts.map +1 -0
  171. package/dist/types/src/notebook/eval.d.ts +13 -0
  172. package/dist/types/src/notebook/eval.d.ts.map +1 -0
  173. package/dist/types/src/notebook/index.d.ts +2 -0
  174. package/dist/types/src/notebook/index.d.ts.map +1 -0
  175. package/dist/types/src/notebook/vfs-parser.d.ts +74 -0
  176. package/dist/types/src/notebook/vfs-parser.d.ts.map +1 -0
  177. package/dist/types/src/notebook/vfs-parser.test.d.ts +2 -0
  178. package/dist/types/src/notebook/vfs-parser.test.d.ts.map +1 -0
  179. package/dist/types/src/templates/chess.d.ts +6 -1
  180. package/dist/types/src/templates/chess.d.ts.map +1 -1
  181. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  182. package/dist/types/src/templates/discord.d.ts.map +1 -1
  183. package/dist/types/src/templates/forex-effect.d.ts +4 -1
  184. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  185. package/dist/types/src/templates/forex.d.ts +4 -1
  186. package/dist/types/src/templates/forex.d.ts.map +1 -1
  187. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  188. package/dist/types/src/templates/index.d.ts +43 -1
  189. package/dist/types/src/templates/index.d.ts.map +1 -1
  190. package/dist/types/src/templates/{echo.d.ts → ping.d.ts} +1 -1
  191. package/dist/types/src/templates/ping.d.ts.map +1 -0
  192. package/dist/types/src/testing/data.d.ts +3 -0
  193. package/dist/types/src/testing/data.d.ts.map +1 -0
  194. package/dist/types/src/testing/deploy.test.d.ts +2 -0
  195. package/dist/types/src/testing/deploy.test.d.ts.map +1 -0
  196. package/dist/types/src/testing/index.d.ts +2 -0
  197. package/dist/types/src/testing/index.d.ts.map +1 -0
  198. package/dist/types/src/testing/simulator.test.d.ts +2 -0
  199. package/dist/types/src/testing/simulator.test.d.ts.map +1 -0
  200. package/dist/types/src/translations.d.ts +32 -5
  201. package/dist/types/src/translations.d.ts.map +1 -1
  202. package/dist/types/src/types/Notebook.d.ts +31 -0
  203. package/dist/types/src/types/Notebook.d.ts.map +1 -0
  204. package/dist/types/src/types/actions.d.ts +54 -0
  205. package/dist/types/src/types/actions.d.ts.map +1 -0
  206. package/dist/types/src/types/index.d.ts +3 -1
  207. package/dist/types/src/types/index.d.ts.map +1 -1
  208. package/dist/types/src/types/types.d.ts +6 -0
  209. package/dist/types/src/types/types.d.ts.map +1 -0
  210. package/dist/types/src/util/deploy.d.ts +7 -7
  211. package/dist/types/src/util/deploy.d.ts.map +1 -1
  212. package/dist/types/src/util/functions.d.ts +6 -3
  213. package/dist/types/src/util/functions.d.ts.map +1 -1
  214. package/dist/types/tsconfig.tsbuildinfo +1 -1
  215. package/package.json +87 -71
  216. package/src/ScriptPlugin.tsx +79 -75
  217. package/src/capabilities/app-graph-builder.ts +12 -11
  218. package/src/capabilities/artifact-definition.ts +19 -24
  219. package/src/capabilities/blueprint-definition.ts +30 -0
  220. package/src/capabilities/compiler.ts +69 -18
  221. package/src/capabilities/index.ts +1 -1
  222. package/src/capabilities/intent-resolver.ts +21 -15
  223. package/src/capabilities/react-surface.tsx +34 -21
  224. package/src/capabilities/settings.ts +3 -3
  225. package/src/compiler/compiler.ts +11 -4
  226. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +39 -20
  227. package/src/components/DeploymentDialog/DeploymentDialog.tsx +45 -34
  228. package/src/components/DeploymentDialog/index.ts +1 -1
  229. package/src/components/FrameContainer/FrameContainer.tsx +7 -4
  230. package/src/components/NotebookContainer.stories.tsx +83 -0
  231. package/src/components/NotebookContainer.tsx +260 -0
  232. package/src/components/NotebookStack/NotebookCell.tsx +216 -0
  233. package/src/components/NotebookStack/NotebookMenu.tsx +47 -0
  234. package/src/components/NotebookStack/NotebookStack.stories.tsx +54 -0
  235. package/src/components/NotebookStack/NotebookStack.tsx +86 -0
  236. package/src/components/NotebookStack/index.ts +6 -0
  237. package/src/components/QueryEditor/QueryEditor.stories.tsx +89 -0
  238. package/src/components/QueryEditor/QueryEditor.tsx +47 -0
  239. package/src/components/QueryEditor/index.ts +5 -0
  240. package/src/components/ScriptContainer.tsx +10 -8
  241. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +34 -17
  242. package/src/components/ScriptToolbar/ScriptToolbar.tsx +37 -30
  243. package/src/components/Settings/ScriptObjectSettings.tsx +130 -38
  244. package/src/components/Settings/ScriptPluginSettings.tsx +37 -47
  245. package/src/components/TestPanel/TestContainer.tsx +4 -3
  246. package/src/components/TestPanel/TestPanel.tsx +42 -19
  247. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +79 -31
  248. package/src/components/TypescriptEditor/TypescriptEditor.tsx +39 -37
  249. package/src/components/index.ts +3 -0
  250. package/src/e2e/deploy.test.ts +64 -0
  251. package/src/events.ts +2 -2
  252. package/src/hooks/deploy.ts +24 -24
  253. package/src/hooks/format.ts +4 -4
  254. package/src/hooks/index.ts +1 -0
  255. package/src/hooks/template.ts +6 -15
  256. package/src/hooks/useCompiler.ts +23 -0
  257. package/src/hooks/useCreateAndDeployScriptTemplates.ts +11 -6
  258. package/src/index.ts +1 -0
  259. package/src/meta.ts +7 -5
  260. package/src/notebook/compute-graph.test.ts +70 -0
  261. package/src/notebook/compute-graph.ts +206 -0
  262. package/src/notebook/eval.ts +105 -0
  263. package/src/notebook/index.ts +5 -0
  264. package/src/notebook/vfs-parser.test.ts +149 -0
  265. package/src/notebook/vfs-parser.ts +451 -0
  266. package/src/templates/chess.ts +11 -8
  267. package/src/templates/data-generator.ts +10 -4
  268. package/src/templates/discord.ts +12 -4
  269. package/src/templates/forex-effect.ts +24 -25
  270. package/src/templates/forex.ts +9 -6
  271. package/src/templates/gmail.ts +34 -64
  272. package/src/templates/index.ts +6 -6
  273. package/src/testing/data.ts +72 -0
  274. package/src/testing/deploy.test.ts +63 -0
  275. package/src/testing/index.ts +5 -0
  276. package/src/testing/simulator.test.ts +40 -0
  277. package/src/translations.ts +35 -7
  278. package/src/types/Notebook.ts +42 -0
  279. package/src/types/actions.ts +53 -0
  280. package/src/types/index.ts +3 -1
  281. package/src/types/types.ts +15 -0
  282. package/src/util/deploy.ts +33 -60
  283. package/src/util/functions.ts +39 -8
  284. package/src/vite-env.d.ts +2 -0
  285. package/dist/lib/browser/DeploymentDialog-M4QIHTDR.mjs +0 -12
  286. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs +0 -262
  287. package/dist/lib/browser/ScriptContainer-Z6SIGRRC.mjs.map +0 -7
  288. package/dist/lib/browser/app-graph-builder-HLQ7K3BT.mjs.map +0 -7
  289. package/dist/lib/browser/artifact-definition-24Q3IHOU.mjs +0 -249
  290. package/dist/lib/browser/artifact-definition-24Q3IHOU.mjs.map +0 -7
  291. package/dist/lib/browser/chunk-3U6DTUH3.mjs +0 -283
  292. package/dist/lib/browser/chunk-3U6DTUH3.mjs.map +0 -7
  293. package/dist/lib/browser/chunk-FIM2MVNJ.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-FMDXKOP7.mjs +0 -233
  295. package/dist/lib/browser/chunk-FMDXKOP7.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-IS4OG2UW.mjs +0 -39
  297. package/dist/lib/browser/chunk-IS4OG2UW.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-P4HQKUCP.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-QYAREHGH.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-R4R7VOFY.mjs +0 -88
  301. package/dist/lib/browser/chunk-R4R7VOFY.mjs.map +0 -7
  302. package/dist/lib/browser/compiler-CXCUA4UQ.mjs +0 -82
  303. package/dist/lib/browser/compiler-CXCUA4UQ.mjs.map +0 -7
  304. package/dist/lib/browser/intent-resolver-7B77IG3N.mjs.map +0 -7
  305. package/dist/lib/browser/react-surface-FYYXZA7C.mjs.map +0 -7
  306. package/dist/lib/browser/settings-KCTBK5TY.mjs.map +0 -7
  307. package/dist/lib/node-esm/DeploymentDialog-3KPRWFE7.mjs +0 -13
  308. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs +0 -263
  309. package/dist/lib/node-esm/ScriptContainer-KPU75HHI.mjs.map +0 -7
  310. package/dist/lib/node-esm/app-graph-builder-7EYIHWH4.mjs.map +0 -7
  311. package/dist/lib/node-esm/artifact-definition-WAJFALUI.mjs +0 -250
  312. package/dist/lib/node-esm/artifact-definition-WAJFALUI.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-7NMI4CEU.mjs.map +0 -7
  314. package/dist/lib/node-esm/chunk-AHXJ6NQU.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs +0 -90
  316. package/dist/lib/node-esm/chunk-F5GFJ3PY.mjs.map +0 -7
  317. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs +0 -40
  318. package/dist/lib/node-esm/chunk-JIPFLBYA.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-QKK3NDHW.mjs.map +0 -7
  320. package/dist/lib/node-esm/chunk-RT43MACC.mjs +0 -284
  321. package/dist/lib/node-esm/chunk-RT43MACC.mjs.map +0 -7
  322. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs +0 -234
  323. package/dist/lib/node-esm/chunk-XJPK3IYI.mjs.map +0 -7
  324. package/dist/lib/node-esm/compiler-EPFKQXPE.mjs +0 -83
  325. package/dist/lib/node-esm/compiler-EPFKQXPE.mjs.map +0 -7
  326. package/dist/lib/node-esm/intent-resolver-FRZGS4TB.mjs.map +0 -7
  327. package/dist/lib/node-esm/react-surface-V32NWHKN.mjs.map +0 -7
  328. package/dist/lib/node-esm/settings-DXZ334A3.mjs.map +0 -7
  329. package/dist/types/src/templates/echo.d.ts.map +0 -1
  330. package/dist/types/src/types/schema.d.ts +0 -38
  331. package/dist/types/src/types/schema.d.ts.map +0 -1
  332. package/src/types/schema.ts +0 -37
  333. /package/dist/lib/browser/{DeploymentDialog-M4QIHTDR.mjs.map → DeploymentDialog-FIHD4UVK.mjs.map} +0 -0
  334. /package/dist/lib/{node-esm/DeploymentDialog-3KPRWFE7.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  335. /package/dist/lib/browser/{chunk-5TVBECWH.mjs.map → chunk-UOQ6NCH3.mjs.map} +0 -0
  336. /package/dist/lib/node-esm/{chunk-35M3CHYE.mjs.map → chunk-55JZVM6K.mjs.map} +0 -0
  337. /package/src/templates/{echo.ts → ping.ts} +0 -0
@@ -4,68 +4,58 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';
8
7
  import { useClient } from '@dxos/react-client';
9
8
  import { Button, Select, useTranslation } from '@dxos/react-ui';
10
9
  import { type EditorInputMode, EditorInputModes } from '@dxos/react-ui-editor';
11
- import { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';
10
+ import { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';
12
11
 
13
12
  import { meta } from '../../meta';
14
- import { type ScriptSettingsProps } from '../../types';
13
+ import { type ScriptSettings } from '../../types';
14
+ import { getAccessCredential } from '../../util';
15
15
 
16
- export const ScriptPluginSettings = ({ settings }: { settings: ScriptSettingsProps }) => {
16
+ export const ScriptPluginSettings = ({ settings }: { settings: ScriptSettings }) => {
17
17
  const { t } = useTranslation(meta.id);
18
18
  const client = useClient();
19
19
 
20
20
  // TODO(burdon): Check token.
21
21
  const handleAuthenticate = async () => {
22
22
  const { identityKey } = client.halo.identity.get()!;
23
- await client.halo.writeCredentials([
24
- {
25
- issuer: identityKey,
26
- issuanceDate: new Date(),
27
- subject: {
28
- id: identityKey,
29
- assertion: {
30
- '@type': 'dxos.halo.credentials.ServiceAccess',
31
- serverName: 'hub.dxos.network',
32
- serverKey: identityKey,
33
- identityKey,
34
- capabilities: ['composer:beta'],
35
- },
36
- },
37
- } satisfies Credential,
38
- ]);
23
+ await client.halo.writeCredentials([getAccessCredential(identityKey)]);
39
24
  };
40
25
 
41
26
  return (
42
- <DeprecatedFormContainer>
43
- {/* TODO(wittjosiah): Hide outside of dev environments. */}
44
- <DeprecatedFormInput label={t('authenticate action label')}>
45
- <Button onClick={handleAuthenticate}>{t('authenticate button label')}</Button>
46
- </DeprecatedFormInput>
27
+ <ControlPage>
28
+ <ControlSection title={t('settings title', { ns: meta.id })}>
29
+ <ControlGroup>
30
+ {/* TODO(wittjosiah): Hide outside of dev environments. */}
31
+ <ControlItemInput title={t('authenticate action label')}>
32
+ <Button onClick={handleAuthenticate}>{t('authenticate button label')}</Button>
33
+ </ControlItemInput>
47
34
 
48
- <DeprecatedFormInput label={t('editor input mode label')}>
49
- <Select.Root
50
- value={settings.editorInputMode ?? 'default'}
51
- onValueChange={(value) => {
52
- settings.editorInputMode = value as EditorInputMode;
53
- }}
54
- >
55
- <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
56
- <Select.Portal>
57
- <Select.Content>
58
- <Select.Viewport>
59
- {EditorInputModes.map((mode) => (
60
- <Select.Option key={mode} value={mode}>
61
- {t(`settings editor input mode ${mode} label`)}
62
- </Select.Option>
63
- ))}
64
- </Select.Viewport>
65
- </Select.Content>
66
- </Select.Portal>
67
- </Select.Root>
68
- </DeprecatedFormInput>
69
- </DeprecatedFormContainer>
35
+ <ControlItemInput title={t('editor input mode label')}>
36
+ <Select.Root
37
+ value={settings.editorInputMode ?? 'default'}
38
+ onValueChange={(value) => {
39
+ settings.editorInputMode = value as EditorInputMode;
40
+ }}
41
+ >
42
+ <Select.TriggerButton placeholder={t('select editor input mode placeholder')} />
43
+ <Select.Portal>
44
+ <Select.Content>
45
+ <Select.Viewport>
46
+ {EditorInputModes.map((mode) => (
47
+ <Select.Option key={mode} value={mode}>
48
+ {t(`settings editor input mode ${mode} label`)}
49
+ </Select.Option>
50
+ ))}
51
+ </Select.Viewport>
52
+ <Select.Arrow />
53
+ </Select.Content>
54
+ </Select.Portal>
55
+ </Select.Root>
56
+ </ControlItemInput>
57
+ </ControlGroup>
58
+ </ControlSection>
59
+ </ControlPage>
70
60
  );
71
61
  };
@@ -4,15 +4,16 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { type ScriptType } from '@dxos/functions';
7
+ import { type Script } from '@dxos/functions';
8
8
  import { StackItem } from '@dxos/react-ui-stack';
9
9
 
10
- import { TestPanel } from './TestPanel';
11
10
  import { useDeployState, useToolbarState } from '../../hooks';
12
11
 
12
+ import { TestPanel } from './TestPanel';
13
+
13
14
  export type TestContainerProps = {
14
15
  role: string;
15
- script: ScriptType;
16
+ script: Script.Script;
16
17
  };
17
18
 
18
19
  export const TestContainer = ({ script }: TestContainerProps) => {
@@ -9,14 +9,19 @@ import { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } fr
9
9
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
10
10
  import { errorText, mx } from '@dxos/react-ui-theme';
11
11
 
12
- import { SCRIPT_PLUGIN } from '../../meta';
12
+ import { meta } from '../../meta';
13
13
 
14
14
  type State = 'pending' | 'responding';
15
15
 
16
16
  /**
17
17
  * Request or response.
18
18
  */
19
- type Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };
19
+ type Message = {
20
+ type: 'request' | 'response';
21
+ text?: string;
22
+ data?: any;
23
+ error?: Error;
24
+ };
20
25
 
21
26
  export type TestPanelProps = ThemedClassName<{
22
27
  functionUrl?: string;
@@ -24,7 +29,7 @@ export type TestPanelProps = ThemedClassName<{
24
29
 
25
30
  // TODO(burdon): Need persistent history (currently lost when switching tabs)..
26
31
  export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
27
- const { t } = useTranslation(SCRIPT_PLUGIN);
32
+ const { t } = useTranslation(meta.id);
28
33
 
29
34
  const inputRef = useRef<HTMLInputElement>(null);
30
35
  const [input, setInput] = useState('');
@@ -41,7 +46,7 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
41
46
  }
42
47
  };
43
48
 
44
- const controller = useRef<AbortController>();
49
+ const controller = useRef<AbortController>(null);
45
50
  useEffect(() => {
46
51
  return () => {
47
52
  handleStop();
@@ -50,7 +55,7 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
50
55
 
51
56
  const handleStop = () => {
52
57
  controller.current?.abort('stop');
53
- controller.current = undefined;
58
+ controller.current = null;
54
59
  };
55
60
 
56
61
  const handleClear = () => {
@@ -61,8 +66,16 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
61
66
  inputRef.current?.focus();
62
67
  };
63
68
 
64
- const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {
65
- controller.current = undefined;
69
+ const handleResponse = ({
70
+ text,
71
+ data,
72
+ error,
73
+ }: {
74
+ text?: string;
75
+ data?: any;
76
+ error?: Error;
77
+ } = {}) => {
78
+ controller.current = null;
66
79
  setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);
67
80
  setResult('');
68
81
  setState(null);
@@ -108,7 +121,9 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
108
121
  // Check for error.
109
122
  if (!response.ok) {
110
123
  const text = await response.text();
111
- handleResponse({ error: new Error(text || response.statusText || String(response.status)) });
124
+ handleResponse({
125
+ error: new Error(text || response.statusText || String(response.status)),
126
+ });
112
127
  return;
113
128
  }
114
129
 
@@ -159,11 +174,11 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
159
174
  };
160
175
 
161
176
  return (
162
- <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>
177
+ <div className={mx('flex flex-col bs-full overflow-hidden', classNames)}>
163
178
  {/* TODO(burdon): Replace with Thread. */}
164
179
  <MessageThread ref={scrollerRef} state={state} result={result} history={history} />
165
180
  {/* TODO(burdon): Replace with Form based on the function's input schema. */}
166
- <Toolbar.Root classNames='p-2'>
181
+ <Toolbar.Root>
167
182
  <Input.Root>
168
183
  <Input.TextInput
169
184
  ref={inputRef}
@@ -174,12 +189,20 @@ export const TestPanel = ({ classNames, functionUrl }: TestPanelProps) => {
174
189
  onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}
175
190
  />
176
191
  </Input.Root>
177
- <Toolbar.Button onClick={() => handleRequest(input)}>
178
- <Icon icon='ph--play--regular' size={4} />
179
- </Toolbar.Button>
180
- <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>
181
- <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />
182
- </Toolbar.Button>
192
+ <Toolbar.IconButton
193
+ icon='ph--play--regular'
194
+ size={4}
195
+ label='Execute'
196
+ iconOnly
197
+ onClick={() => handleRequest(input)}
198
+ />
199
+ <Toolbar.IconButton
200
+ icon={state ? 'ph--stop--regular' : 'ph--trash--regular'}
201
+ size={4}
202
+ label={state ? 'Stop' : 'Clear'}
203
+ iconOnly
204
+ onClick={() => (state ? handleStop() : handleClear())}
205
+ />
183
206
  </Toolbar.Root>
184
207
  </div>
185
208
  );
@@ -196,7 +219,7 @@ type MessageThreadProps = {
196
219
  const MessageThread = forwardRef<HTMLDivElement, MessageThreadProps>(
197
220
  ({ state, history, result }: MessageThreadProps, forwardedRef) => {
198
221
  return (
199
- <div ref={forwardedRef} className='flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto'>
222
+ <div ref={forwardedRef} className='flex flex-col gap-6 bs-full p-2 overflow-x-hidden overflow-y-auto'>
200
223
  {history.map((message, i) => (
201
224
  <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>
202
225
  <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>
@@ -225,7 +248,7 @@ const MessageThread = forwardRef<HTMLDivElement, MessageThreadProps>(
225
248
 
226
249
  const MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {
227
250
  const { type, text, data, error } = message;
228
- const wrapper = 'p-1 px-2 rounded-md bg-hoverSurface overflow-auto';
251
+ const wrapper = 'p-1 pli-2 rounded-md bg-hoverSurface overflow-auto';
229
252
  return (
230
253
  <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>
231
254
  {error && <div className={mx(wrapper, 'whitespace-pre', errorText)}>{String(error)}</div>}
@@ -237,7 +260,7 @@ const MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message
237
260
  )}
238
261
 
239
262
  {data && (
240
- <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>
263
+ <SyntaxHighlighter language='json' className={mx(wrapper, 'text-xs')}>
241
264
  {JSON.stringify(data, null, 2)}
242
265
  </SyntaxHighlighter>
243
266
  )}
@@ -2,43 +2,91 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useCallback, useMemo, useState } from 'react';
6
7
 
7
- import { type Meta } from '@storybook/react-vite';
8
- import React, { useMemo } from 'react';
9
-
10
- import { createDocAccessor, createObject } from '@dxos/react-client/echo';
8
+ import { createDocAccessor } from '@dxos/echo-db';
9
+ import { createObject } from '@dxos/react-client/echo';
10
+ import { Toolbar } from '@dxos/react-ui';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
12
  import { createDataExtensions } from '@dxos/react-ui-editor';
12
- import { withTheme } from '@dxos/storybook-utils';
13
-
14
- import { TypescriptEditor } from './TypescriptEditor';
15
- import { templates } from '../../templates';
16
-
17
- // TODO(burdon): Features:
18
- // - language support for S
19
- // - hierarchical editor (DND)
20
- // - virtual document image rendering
21
- // - mobile rendering error
22
-
23
- // TODO(burdon): JSX.
24
- // TODO(burdon): Effect schema.
25
- // TODO(burdon): react-buddy for storybook?
26
-
27
- const DefaultStory = () => {
28
- const object = useMemo(() => createObject({ content: templates[0].source }), []);
29
- const initialValue = useMemo(() => object.content, [object]);
30
- const accessor = useMemo(() => createDocAccessor(object, ['content']), [object]);
31
- const extensions = useMemo(() => [createDataExtensions({ id: object.id, text: accessor })], [object.id, accessor]);
32
- return <TypescriptEditor id='test' initialValue={initialValue} extensions={extensions} />;
33
- };
13
+ import { StackItem } from '@dxos/react-ui-stack';
14
+ import { Json } from '@dxos/react-ui-syntax-highlighter';
15
+ import { trim } from '@dxos/util';
16
+
17
+ import { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';
18
+
19
+ const SCRIPT = trim`
20
+ x * 2
21
+ `;
22
+
23
+ const DefaultStory = (props: TypescriptEditorProps) => {
24
+ const object = useMemo(() => createObject({ content: SCRIPT }), []);
25
+ const [result, setResult] = useState<object | undefined>({});
26
+
27
+ // TODO(burdon): Make this work.
28
+ // const object = useMemo(() => Text.make(templates[1].source), []);
29
+ // const script = useMemo(
30
+ // () =>
31
+ // Obj.make(ScriptType, {
32
+ // source: Ref.make(createObject({ content: templates[0].source })),
33
+ // }),
34
+ // [object],
35
+ // );
36
+
37
+ const extensions = useMemo(
38
+ () => [createDataExtensions({ id: object.id, text: createDocAccessor(object, ['content']) })],
39
+ [],
40
+ );
41
+
42
+ const handleRun = useCallback(async () => {
43
+ try {
44
+ const definitions: [string, any][] = [['x', 100]];
34
45
 
35
- export const Default = {};
46
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
47
+ const result = new Function(...definitions.map(([name]) => name), `return ${object.content.trim()}`)(
48
+ ...definitions.map(([, value]) => value),
49
+ );
36
50
 
37
- const meta: Meta = {
51
+ setResult({
52
+ timestamp: Date.now(),
53
+ result,
54
+ });
55
+ } catch (err) {
56
+ setResult({
57
+ timestamp: Date.now(),
58
+ error: String(err),
59
+ });
60
+ }
61
+ }, [object]);
62
+
63
+ return (
64
+ <StackItem.Content toolbar>
65
+ {/* <ScriptToolbar script={script} state={{}} /> */}
66
+ <Toolbar.Root>
67
+ <Toolbar.Button onClick={handleRun}>Run</Toolbar.Button>
68
+ </Toolbar.Root>
69
+ <div role='none' className='grid grid-rows-[1fr_min-content] bs-full overflow-hidden text-sm'>
70
+ <TypescriptEditor {...props} initialValue={object.content} extensions={extensions} />
71
+ <Json data={result} classNames='shrink-0 p-2 border-t border-subduedSeparator' />
72
+ </div>
73
+ </StackItem.Content>
74
+ );
75
+ };
76
+
77
+ const meta = {
38
78
  title: 'plugins/plugin-script/TypescriptEditor',
39
79
  component: TypescriptEditor,
40
80
  render: DefaultStory,
41
- decorators: [withTheme],
42
- };
81
+ decorators: [withTheme, withLayout({ container: 'column', classNames: 'is-prose' })],
82
+ } satisfies Meta<typeof DefaultStory>;
43
83
 
44
84
  export default meta;
85
+
86
+ type Story = StoryObj<typeof meta>;
87
+
88
+ export const Default: Story = {
89
+ args: {
90
+ id: 'test',
91
+ },
92
+ };
@@ -2,27 +2,27 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { autocompletion, completionKeymap } from '@codemirror/autocomplete';
5
6
  import { javascript } from '@codemirror/lang-javascript';
6
- import { defaultHighlightStyle } from '@codemirror/language';
7
+ import { HighlightStyle } from '@codemirror/language';
7
8
  import { lintKeymap } from '@codemirror/lint';
8
9
  import { Prec } from '@codemirror/state';
9
- import { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';
10
10
  import { keymap } from '@codemirror/view';
11
11
  import { tags } from '@lezer/highlight';
12
12
  import { type VirtualTypeScriptEnvironment } from '@typescript/vfs';
13
13
  import { continueKeymap } from '@valtown/codemirror-continue';
14
- import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover, type HoverInfo } from '@valtown/codemirror-ts';
14
+ import { type HoverInfo, tsAutocomplete, tsFacet, tsHover, tsLinter, tsSync } from '@valtown/codemirror-ts';
15
15
  import React from 'react';
16
16
 
17
- import { type ThemedClassName, type ThemeMode, useThemeContext } from '@dxos/react-ui';
17
+ import { Domino, type ThemeMode, type ThemedClassName, useThemeContext } from '@dxos/react-ui';
18
18
  import {
19
+ type BasicExtensionsOptions,
19
20
  type EditorInputMode,
20
21
  InputModeExtensions,
21
22
  type UseTextEditorProps,
22
- autocomplete,
23
23
  createBasicExtensions,
24
24
  createThemeExtensions,
25
- folding,
25
+ defaultStyles,
26
26
  useTextEditor,
27
27
  } from '@dxos/react-ui-editor';
28
28
  import { mx } from '@dxos/react-ui-theme';
@@ -31,18 +31,21 @@ import { isNonNullable } from '@dxos/util';
31
31
  export type TypescriptEditorProps = ThemedClassName<
32
32
  {
33
33
  id: string;
34
+ role?: string;
34
35
  inputMode?: EditorInputMode;
35
36
  toolbar?: boolean;
36
37
  env?: VirtualTypeScriptEnvironment;
38
+ options?: BasicExtensionsOptions;
37
39
  } & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>
38
40
  >;
39
41
 
40
42
  export const TypescriptEditor = ({
41
43
  classNames,
42
44
  id,
45
+ role = 'article',
43
46
  inputMode = 'vscode',
44
- toolbar,
45
47
  env,
48
+ options,
46
49
  initialValue,
47
50
  extensions,
48
51
  scrollTo,
@@ -62,43 +65,44 @@ export const TypescriptEditor = ({
62
65
  indentWithTab: true,
63
66
  lineNumbers: true,
64
67
  lineWrapping: false,
68
+ scrollPastEnd: role !== 'section',
69
+ search: true,
70
+ ...options,
71
+ }),
72
+ createThemeExtensions({
65
73
  monospace: true,
66
- scrollPastEnd: true,
74
+ themeMode,
75
+ syntaxHighlighting: true,
67
76
  }),
68
- createThemeExtensions({ themeMode, syntaxHighlighting: true }),
69
77
  InputModeExtensions[inputMode],
70
- folding(),
78
+
79
+ javascript({ typescript: true }),
80
+ autocompletion({ override: env ? [tsAutocomplete()] : undefined }),
81
+
71
82
  // Continues block comments when pressing Enter.
72
83
  Prec.high(keymap.of(continueKeymap)),
84
+ keymap.of(completionKeymap),
85
+ keymap.of(lintKeymap),
73
86
 
74
- // TODO(burdon): Factor out.
75
- javascript({ typescript: true }),
76
87
  // https://github.com/val-town/codemirror-ts
77
- autocomplete({ override: env ? [tsAutocomplete()] : undefined }),
78
- keymap.of(lintKeymap),
79
88
  env && [
80
- tsFacet.of({ env, path: `/src/${id}.ts` }),
89
+ tsFacet.of({ env, path: `./src/${id}.ts` }),
81
90
  tsSync(),
82
91
  tsLinter(),
83
92
  tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),
84
93
  ],
85
94
  ].filter(isNonNullable),
86
95
  }),
87
- [id, extensions, themeMode, inputMode, selection, scrollTo],
96
+ [id, extensions, themeMode, inputMode, selection, scrollTo, env],
88
97
  );
89
98
 
90
- return (
91
- <div
92
- ref={parentRef}
93
- data-toolbar={toolbar ? 'enabled' : 'disabled'}
94
- className={mx(classNames)}
95
- {...focusAttributes}
96
- />
97
- );
99
+ // TODO(brudon): Use react-ui-editor's Editor component.
100
+ return <div ref={parentRef} className={mx(classNames)} {...focusAttributes} />;
98
101
  };
99
102
 
103
+ // TODO(burdon): Factor out (react-ui-editor).
100
104
  const createTooltipRenderer = (themeMode: ThemeMode) => {
101
- const theme = themeMode === 'dark' ? oneDarkHighlightStyle : defaultHighlightStyle;
105
+ const theme = HighlightStyle.define(themeMode === 'dark' ? defaultStyles.dark : defaultStyles.light);
102
106
 
103
107
  const classFromKind = (_kind: string) => {
104
108
  // E.g., localName, methodName, parameterName, etc.
@@ -117,18 +121,16 @@ const createTooltipRenderer = (themeMode: ThemeMode) => {
117
121
  };
118
122
 
119
123
  return (info: HoverInfo) => {
120
- const div = document.createElement('div');
121
- div.className = 'p-1 rounded border border-separator bg-baseSurface xs:max-w-80 max-w-lg';
122
-
123
- if (info.quickInfo?.displayParts) {
124
- for (const part of info.quickInfo.displayParts) {
125
- const span = div.appendChild(document.createElement('span'));
126
- span.className = classFromKind(part.kind);
127
- span.innerText = part.text;
128
- }
129
- }
130
-
131
- return { dom: div };
124
+ return {
125
+ dom: Domino.of('div')
126
+ .classNames('xs:max-is-80 max-is-lg p-1 bg-baseSurface rounded border border-separator')
127
+ .children(
128
+ ...(info.quickInfo?.displayParts?.map(({ kind, text }) =>
129
+ Domino.of('span').classNames(classFromKind(kind)).text(text),
130
+ ) ?? []),
131
+ )
132
+ .build(),
133
+ };
132
134
  };
133
135
  };
134
136
 
@@ -4,9 +4,12 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
+ export * from './NotebookStack';
7
8
  export * from './Settings';
8
9
  export * from './TestPanel';
10
+
9
11
  export { DEPLOYMENT_DIALOG } from './DeploymentDialog';
10
12
 
11
13
  export const ScriptContainer = lazy(() => import('./ScriptContainer'));
12
14
  export const DeploymentDialog = lazy(() => import('./DeploymentDialog'));
15
+ export const NotebookContainer = lazy(() => import('./NotebookContainer'));
@@ -0,0 +1,64 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { readFile } from 'node:fs/promises';
6
+
7
+ import { describe, expect, test } from 'vitest';
8
+
9
+ import { Client, type Config } from '@dxos/client';
10
+ import { createEdgeIdentity } from '@dxos/client/edge';
11
+ import { configPreset } from '@dxos/config';
12
+ import { bundleFunction } from '@dxos/functions-runtime/bundler';
13
+ import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
14
+ import { invariant } from '@dxos/invariant';
15
+ import { log } from '@dxos/log';
16
+
17
+ describe.runIf(process.env.DX_TEST_TAGS?.includes('functions-e2e'))('Functions deployment', () => {
18
+ test('deploys FOREX (effect) function and invokes it via EDGE (main)', { timeout: 120_000 }, async () => {
19
+ const config = configPreset({ edge: 'main' });
20
+ await testDeploy(config);
21
+ });
22
+
23
+ test('deploys FOREX (effect) function and invokes it via EDGE (production)', { timeout: 120_000 }, async () => {
24
+ const config = configPreset({ edge: 'production' });
25
+ await testDeploy(config);
26
+ });
27
+
28
+ const testDeploy = async (config: Config) => {
29
+ await using client = await new Client({ config }).initialize();
30
+ await client.halo.createIdentity();
31
+
32
+ const space = await client.spaces.create();
33
+ await space.waitUntilReady();
34
+
35
+ // Inline echo function source.
36
+ const source = await readFile(new URL('../templates/forex-effect.ts', import.meta.url), 'utf-8');
37
+
38
+ // Bundle and upload.
39
+ const buildResult = await bundleFunction({ source });
40
+ if ('error' in buildResult) {
41
+ throw buildResult.error ?? new Error('Bundle creation failed');
42
+ }
43
+ const functionsServiceClient = FunctionsServiceClient.fromClient(client);
44
+
45
+ const func = await functionsServiceClient.deploy({
46
+ ownerPublicKey: space.key,
47
+ version: '0.0.1',
48
+ entryPoint: buildResult.entryPoint,
49
+ assets: buildResult.assets,
50
+ });
51
+
52
+ // Invoke deployed function via EDGE directly.
53
+ const edgeClient = client.edge;
54
+ invariant(edgeClient, 'edgeClient is required');
55
+ edgeClient.setIdentity(createEdgeIdentity(client));
56
+
57
+ const input = { from: 'USD', to: 'EUR' };
58
+ const result = await functionsServiceClient.invoke(func, input);
59
+ log.info('>>> result', { result, func });
60
+ const resultNumber = Number(result);
61
+ expect(resultNumber).toBeGreaterThan(0);
62
+ expect(resultNumber).toBeLessThan(100);
63
+ };
64
+ });
package/src/events.ts CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { defineEvent } from '@dxos/app-framework';
6
6
 
7
- import { SCRIPT_PLUGIN } from './meta';
7
+ import { meta } from './meta';
8
8
 
9
9
  export namespace ScriptEvents {
10
- export const SetupCompiler = defineEvent(`${SCRIPT_PLUGIN}/event/setup-compiler`);
10
+ export const SetupCompiler = defineEvent(`${meta.id}/event/setup-compiler`);
11
11
  }