@dxos/plugin-automation 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (293) hide show
  1. package/dist/lib/browser/AutomationPanel-C6MZ22CB.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-D7UO5V3Q.mjs +57 -0
  3. package/dist/lib/browser/AutomationSettings-D7UO5V3Q.mjs.map +7 -0
  4. package/dist/lib/browser/FunctionsContainer-5NHAAP5H.mjs +125 -0
  5. package/dist/lib/browser/FunctionsContainer-5NHAAP5H.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-NRIKAPQV.mjs → FunctionsPanel-RD22LYMR.mjs} +3 -3
  7. package/dist/lib/browser/app-graph-builder-HLARI3VW.mjs +85 -0
  8. package/dist/lib/browser/app-graph-builder-HLARI3VW.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-C273ZYLE.mjs +258 -0
  10. package/dist/lib/browser/chunk-C273ZYLE.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-DK7BLEKU.mjs → chunk-JFBUK3WR.mjs} +5 -5
  12. package/dist/lib/browser/chunk-JN7QRQQX.mjs +256 -0
  13. package/dist/lib/browser/chunk-JN7QRQQX.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-JOXPQ27I.mjs +83 -0
  15. package/dist/lib/browser/chunk-JOXPQ27I.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-O5Y2F33G.mjs +8 -0
  17. package/dist/lib/browser/chunk-O5Y2F33G.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-P5AEO35Y.mjs +93 -0
  19. package/dist/lib/browser/chunk-P5AEO35Y.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-PZNBEKO5.mjs +17 -0
  21. package/dist/lib/browser/chunk-PZNBEKO5.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-QNEQ23BF.mjs +98 -0
  23. package/dist/lib/browser/chunk-QNEQ23BF.mjs.map +7 -0
  24. package/dist/lib/browser/cli/index.mjs +1108 -0
  25. package/dist/lib/browser/cli/index.mjs.map +7 -0
  26. package/dist/lib/browser/compute-runtime-BUBHYS4Y.mjs +119 -0
  27. package/dist/lib/browser/compute-runtime-BUBHYS4Y.mjs.map +7 -0
  28. package/dist/lib/browser/hooks/index.mjs +5 -4
  29. package/dist/lib/browser/index.mjs +61 -59
  30. package/dist/lib/browser/index.mjs.map +4 -4
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/operation-resolver-IN2FRGOT.mjs +83 -0
  33. package/dist/lib/browser/operation-resolver-IN2FRGOT.mjs.map +7 -0
  34. package/dist/lib/browser/{react-surface-G7CG7BML.mjs → react-surface-246NXXJR.mjs} +14 -11
  35. package/dist/lib/browser/react-surface-246NXXJR.mjs.map +7 -0
  36. package/dist/lib/browser/types/index.mjs +10 -4
  37. package/dist/lib/node-esm/{AutomationPanel-EETYIR35.mjs → AutomationPanel-RTBY7YFM.mjs} +4 -4
  38. package/dist/lib/node-esm/AutomationSettings-GK4RLSDN.mjs +58 -0
  39. package/dist/lib/node-esm/AutomationSettings-GK4RLSDN.mjs.map +7 -0
  40. package/dist/lib/node-esm/FunctionsContainer-AHHZODM5.mjs +126 -0
  41. package/dist/lib/node-esm/FunctionsContainer-AHHZODM5.mjs.map +7 -0
  42. package/dist/lib/node-esm/{FunctionsPanel-SAMRTELO.mjs → FunctionsPanel-V2DKWYMU.mjs} +3 -3
  43. package/dist/lib/node-esm/app-graph-builder-Z2TMQHVX.mjs +86 -0
  44. package/dist/lib/node-esm/app-graph-builder-Z2TMQHVX.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-5MQJPJR2.mjs → chunk-5FXNN3MV.mjs} +6 -2
  46. package/dist/lib/node-esm/chunk-5FXNN3MV.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-AENSLAVD.mjs +99 -0
  48. package/dist/lib/node-esm/chunk-AENSLAVD.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-EJPZWAGR.mjs +257 -0
  50. package/dist/lib/node-esm/chunk-EJPZWAGR.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-B7N3H45O.mjs → chunk-K5Z4UGIO.mjs} +5 -5
  52. package/dist/lib/node-esm/chunk-M3UPTGXF.mjs +10 -0
  53. package/dist/lib/node-esm/chunk-M3UPTGXF.mjs.map +7 -0
  54. package/dist/lib/node-esm/chunk-OJEFRZEV.mjs +259 -0
  55. package/dist/lib/node-esm/chunk-OJEFRZEV.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-Q7EMIPMW.mjs +94 -0
  57. package/dist/lib/node-esm/chunk-Q7EMIPMW.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-RX52VKI2.mjs +84 -0
  59. package/dist/lib/node-esm/chunk-RX52VKI2.mjs.map +7 -0
  60. package/dist/lib/node-esm/cli/index.mjs +1109 -0
  61. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  62. package/dist/lib/node-esm/compute-runtime-6UEDBN76.mjs +120 -0
  63. package/dist/lib/node-esm/compute-runtime-6UEDBN76.mjs.map +7 -0
  64. package/dist/lib/node-esm/hooks/index.mjs +5 -4
  65. package/dist/lib/node-esm/index.mjs +61 -59
  66. package/dist/lib/node-esm/index.mjs.map +4 -4
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/operation-resolver-67CEAKXP.mjs +84 -0
  69. package/dist/lib/node-esm/operation-resolver-67CEAKXP.mjs.map +7 -0
  70. package/dist/lib/node-esm/{react-surface-OMZSBDHS.mjs → react-surface-U6762KPI.mjs} +14 -11
  71. package/dist/lib/node-esm/react-surface-U6762KPI.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +10 -4
  73. package/dist/types/src/AutomationPlugin.d.ts +2 -1
  74. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  76. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  78. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +6 -0
  80. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/compute-runtime/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/compute-runtime/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/index.d.ts +4 -5
  84. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  86. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  88. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  90. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  92. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  93. package/dist/types/src/cli/commands/index.d.ts +2 -0
  94. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  95. package/dist/types/src/cli/commands/trigger/create/index.d.ts +25 -0
  96. package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +1 -0
  97. package/dist/types/src/cli/commands/trigger/create/queue.d.ts +13 -0
  98. package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +1 -0
  99. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts +15 -0
  100. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +1 -0
  101. package/dist/types/src/cli/commands/trigger/create/timer.d.ts +13 -0
  102. package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +1 -0
  103. package/dist/types/src/cli/commands/trigger/index.d.ts +57 -0
  104. package/dist/types/src/cli/commands/trigger/index.d.ts.map +1 -0
  105. package/dist/types/src/cli/commands/trigger/list.d.ts +7 -0
  106. package/dist/types/src/cli/commands/trigger/list.d.ts.map +1 -0
  107. package/dist/types/src/cli/commands/trigger/options.d.ts +11 -0
  108. package/dist/types/src/cli/commands/trigger/options.d.ts.map +1 -0
  109. package/dist/types/src/cli/commands/trigger/remove.d.ts +8 -0
  110. package/dist/types/src/cli/commands/trigger/remove.d.ts.map +1 -0
  111. package/dist/types/src/cli/commands/trigger/update/index.d.ts +28 -0
  112. package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/trigger/update/queue.d.ts +12 -0
  114. package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts +13 -0
  116. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/trigger/update/timer.d.ts +11 -0
  118. package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/trigger/util.d.ts +46 -0
  120. package/dist/types/src/cli/commands/trigger/util.d.ts.map +1 -0
  121. package/dist/types/src/cli/index.d.ts +2 -0
  122. package/dist/types/src/cli/index.d.ts.map +1 -0
  123. package/dist/types/src/cli/plugin.d.ts +3 -0
  124. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  125. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -7
  126. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  127. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +4 -0
  128. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  131. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  132. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  133. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  134. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  135. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +12 -9
  136. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  137. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  138. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  139. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +9 -8
  140. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  141. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +72 -2
  142. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/TriggerSettings.d.ts +3 -3
  144. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/index.d.ts +1 -1
  146. package/dist/types/src/components/index.d.ts.map +1 -1
  147. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +8 -4
  148. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +6 -5
  150. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +2 -2
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/meta.d.ts +2 -2
  154. package/dist/types/src/meta.d.ts.map +1 -1
  155. package/dist/types/src/testing/test-functions.d.ts +202 -3
  156. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  157. package/dist/types/src/translations.d.ts +4 -0
  158. package/dist/types/src/translations.d.ts.map +1 -1
  159. package/dist/types/src/types/capabilities.d.ts +22 -0
  160. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  161. package/dist/types/src/types/events.d.ts +5 -0
  162. package/dist/types/src/types/events.d.ts.map +1 -0
  163. package/dist/types/src/types/index.d.ts +2 -0
  164. package/dist/types/src/types/index.d.ts.map +1 -1
  165. package/dist/types/src/types/schema.d.ts +30 -1
  166. package/dist/types/src/types/schema.d.ts.map +1 -1
  167. package/dist/types/tsconfig.tsbuildinfo +1 -1
  168. package/package.json +64 -47
  169. package/src/AutomationPlugin.tsx +15 -34
  170. package/src/capabilities/app-graph-builder/app-graph-builder.ts +72 -0
  171. package/src/capabilities/app-graph-builder/index.ts +7 -0
  172. package/src/capabilities/compute-runtime/compute-runtime.ts +140 -0
  173. package/src/capabilities/compute-runtime/index.ts +7 -0
  174. package/src/capabilities/index.ts +4 -8
  175. package/src/capabilities/operation-resolver/index.ts +7 -0
  176. package/src/capabilities/operation-resolver/operation-resolver.ts +80 -0
  177. package/src/capabilities/react-surface/index.ts +7 -0
  178. package/src/capabilities/react-surface/react-surface.tsx +61 -0
  179. package/src/cli/commands/index.ts +5 -0
  180. package/src/cli/commands/trigger/create/index.ts +14 -0
  181. package/src/cli/commands/trigger/create/queue.ts +89 -0
  182. package/src/cli/commands/trigger/create/subscription.ts +128 -0
  183. package/src/cli/commands/trigger/create/timer.ts +93 -0
  184. package/src/cli/commands/trigger/index.ts +16 -0
  185. package/src/cli/commands/trigger/list.ts +67 -0
  186. package/src/cli/commands/trigger/options.ts +59 -0
  187. package/src/cli/commands/trigger/remove.ts +45 -0
  188. package/src/cli/commands/trigger/update/index.ts +14 -0
  189. package/src/cli/commands/trigger/update/queue.ts +195 -0
  190. package/src/cli/commands/trigger/update/subscription.ts +278 -0
  191. package/src/cli/commands/trigger/update/timer.ts +193 -0
  192. package/src/cli/commands/trigger/util.ts +395 -0
  193. package/src/cli/index.ts +5 -0
  194. package/src/cli/plugin.ts +24 -0
  195. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +5 -6
  196. package/src/components/AutomationPanel/AutomationPanel.tsx +182 -87
  197. package/src/components/AutomationSettings.tsx +6 -6
  198. package/src/components/FunctionsContainer.tsx +12 -5
  199. package/src/components/FunctionsPanel/FunctionsPanel.tsx +38 -23
  200. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +110 -0
  201. package/src/components/FunctionsRegistry/index.ts +5 -0
  202. package/src/components/TriggerEditor/FunctionInputEditor.tsx +33 -32
  203. package/src/components/TriggerEditor/SpecSelector.tsx +11 -9
  204. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +39 -35
  205. package/src/components/TriggerEditor/TriggerEditor.tsx +61 -48
  206. package/src/components/TriggerSettings.tsx +7 -6
  207. package/src/hooks/useComputeRuntimeCallback.ts +45 -8
  208. package/src/hooks/useTriggerRuntimeControls.ts +30 -15
  209. package/src/index.ts +2 -2
  210. package/src/meta.ts +7 -4
  211. package/src/testing/test-functions.ts +2 -2
  212. package/src/translations.ts +5 -0
  213. package/src/{capabilities → types}/capabilities.ts +8 -14
  214. package/src/types/events.ts +11 -0
  215. package/src/types/index.ts +2 -0
  216. package/src/types/schema.ts +23 -2
  217. package/dist/lib/browser/AutomationPanel-3PHA5FTJ.mjs +0 -11
  218. package/dist/lib/browser/AutomationSettings-3EYSPFKB.mjs +0 -69
  219. package/dist/lib/browser/AutomationSettings-3EYSPFKB.mjs.map +0 -7
  220. package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs +0 -36
  221. package/dist/lib/browser/FunctionsContainer-HHBMPUOD.mjs.map +0 -7
  222. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs +0 -81
  223. package/dist/lib/browser/app-graph-builder-DV5HMFX4.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-5ARH77PV.mjs +0 -15
  225. package/dist/lib/browser/chunk-5ARH77PV.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-6TUZQIEN.mjs +0 -14
  227. package/dist/lib/browser/chunk-6TUZQIEN.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-DLLE4FKP.mjs +0 -94
  229. package/dist/lib/browser/chunk-DLLE4FKP.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-MVPRI3DB.mjs +0 -53
  231. package/dist/lib/browser/chunk-MVPRI3DB.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-SUKAEYF3.mjs +0 -267
  233. package/dist/lib/browser/chunk-SUKAEYF3.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-VGBZKM3O.mjs +0 -38
  235. package/dist/lib/browser/chunk-VGBZKM3O.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-VL3KSDVL.mjs +0 -183
  237. package/dist/lib/browser/chunk-VL3KSDVL.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-WWURMV25.mjs +0 -13
  239. package/dist/lib/browser/chunk-WWURMV25.mjs.map +0 -7
  240. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs +0 -160
  241. package/dist/lib/browser/compute-runtime-YJREH6WP.mjs.map +0 -7
  242. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs +0 -77
  243. package/dist/lib/browser/intent-resolver-D2OHKQRR.mjs.map +0 -7
  244. package/dist/lib/browser/react-surface-G7CG7BML.mjs.map +0 -7
  245. package/dist/lib/node-esm/AutomationSettings-WKSMWITV.mjs +0 -70
  246. package/dist/lib/node-esm/AutomationSettings-WKSMWITV.mjs.map +0 -7
  247. package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs +0 -37
  248. package/dist/lib/node-esm/FunctionsContainer-ZKVOBUHV.mjs.map +0 -7
  249. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs +0 -82
  250. package/dist/lib/node-esm/app-graph-builder-TR2WXPX2.mjs.map +0 -7
  251. package/dist/lib/node-esm/chunk-2EWXIFEK.mjs +0 -16
  252. package/dist/lib/node-esm/chunk-2EWXIFEK.mjs.map +0 -7
  253. package/dist/lib/node-esm/chunk-5MQJPJR2.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-AKHETVIQ.mjs +0 -184
  255. package/dist/lib/node-esm/chunk-AKHETVIQ.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-CJUI6AKX.mjs +0 -39
  257. package/dist/lib/node-esm/chunk-CJUI6AKX.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-J3XEBEIE.mjs +0 -268
  259. package/dist/lib/node-esm/chunk-J3XEBEIE.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-QCA543ZR.mjs +0 -54
  261. package/dist/lib/node-esm/chunk-QCA543ZR.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs +0 -16
  263. package/dist/lib/node-esm/chunk-WHCSOUNN.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-YQXW3JXD.mjs +0 -95
  265. package/dist/lib/node-esm/chunk-YQXW3JXD.mjs.map +0 -7
  266. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs +0 -161
  267. package/dist/lib/node-esm/compute-runtime-CMEPAYND.mjs.map +0 -7
  268. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs +0 -78
  269. package/dist/lib/node-esm/intent-resolver-2LGBVXT5.mjs.map +0 -7
  270. package/dist/lib/node-esm/react-surface-OMZSBDHS.mjs.map +0 -7
  271. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  272. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  273. package/dist/types/src/capabilities/capabilities.d.ts +0 -19
  274. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  275. package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
  276. package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
  277. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  278. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  279. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  280. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  281. package/dist/types/src/events.d.ts +0 -4
  282. package/dist/types/src/events.d.ts.map +0 -1
  283. package/src/capabilities/app-graph-builder.ts +0 -87
  284. package/src/capabilities/compute-runtime.ts +0 -138
  285. package/src/capabilities/intent-resolver.ts +0 -72
  286. package/src/capabilities/react-surface.tsx +0 -55
  287. package/src/events.ts +0 -11
  288. /package/dist/lib/browser/{AutomationPanel-3PHA5FTJ.mjs.map → AutomationPanel-C6MZ22CB.mjs.map} +0 -0
  289. /package/dist/lib/browser/{FunctionsPanel-NRIKAPQV.mjs.map → FunctionsPanel-RD22LYMR.mjs.map} +0 -0
  290. /package/dist/lib/browser/{chunk-DK7BLEKU.mjs.map → chunk-JFBUK3WR.mjs.map} +0 -0
  291. /package/dist/lib/node-esm/{AutomationPanel-EETYIR35.mjs.map → AutomationPanel-RTBY7YFM.mjs.map} +0 -0
  292. /package/dist/lib/node-esm/{FunctionsPanel-SAMRTELO.mjs.map → FunctionsPanel-V2DKWYMU.mjs.map} +0 -0
  293. /package/dist/lib/node-esm/{chunk-B7N3H45O.mjs.map → chunk-K5Z4UGIO.mjs.map} +0 -0
@@ -3,60 +3,71 @@
3
3
  //
4
4
 
5
5
  import * as Array from 'effect/Array';
6
- import * as Function from 'effect/Function';
6
+ import * as EFn from 'effect/Function';
7
7
  import * as Match from 'effect/Match';
8
8
  import * as Schema from 'effect/Schema';
9
- import React, { useMemo, useState } from 'react';
9
+ import React, { useCallback, useMemo, useState } from 'react';
10
10
 
11
11
  import { Filter, Obj, Tag } from '@dxos/echo';
12
- import { FunctionTrigger, FunctionType, ScriptType } from '@dxos/functions';
12
+ import { Function, Script, Trigger } from '@dxos/functions';
13
+ import { KEY_QUEUE_CURSOR } from '@dxos/functions-runtime';
14
+ import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
13
15
  import { useTypeOptions } from '@dxos/plugin-space';
14
16
  import { type Client, useClient } from '@dxos/react-client';
15
- import { type Space, getSpace, useQuery } from '@dxos/react-client/echo';
16
- import { Clipboard, IconButton, Input, Separator, type ThemedClassName, useTranslation } from '@dxos/react-ui';
17
- import { ControlItem, controlItemClasses } from '@dxos/react-ui-form';
17
+ import { type Space, useObject, useQuery } from '@dxos/react-client/echo';
18
+ import { Clipboard, IconButton, Input, Separator, useTranslation } from '@dxos/react-ui';
19
+ import { Settings } from '@dxos/react-ui-form';
18
20
  import { List } from '@dxos/react-ui-list';
19
- import { ghostHover, mx } from '@dxos/react-ui-theme';
20
- import { DataType } from '@dxos/schema';
21
+ import { Pipeline } from '@dxos/types';
22
+ import { ghostHover, mx } from '@dxos/ui-theme';
23
+ import { isNonNullable } from '@dxos/util';
21
24
 
22
25
  import { meta } from '../../meta';
23
26
  import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
24
27
 
25
- const grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';
28
+ const grid = 'grid grid-cols-[40px_1fr_32px_32px] min-bs-[2.5rem]';
26
29
 
27
- export type AutomationPanelProps = ThemedClassName<{
30
+ export type AutomationPanelProps = {
28
31
  space: Space;
29
- object?: Obj.Any;
30
- initialTrigger?: FunctionTrigger;
32
+ object?: Obj.Unknown;
33
+ initialTrigger?: Trigger.Trigger;
31
34
  onDone?: () => void;
32
- }>;
35
+ };
33
36
 
34
37
  // TODO(burdon): Factor out common layout with ViewEditor.
35
- export const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {
38
+ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
36
39
  const { t } = useTranslation(meta.id);
37
40
  const client = useClient();
38
- const functions = useQuery(space, Filter.type(FunctionType));
39
- const triggers = useQuery(space, Filter.type(FunctionTrigger));
41
+ const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);
42
+ const functions = useQuery(space.db, Filter.type(Function.Function));
43
+ const triggers = useQuery(space.db, Filter.type(Trigger.Trigger));
40
44
  const filteredTriggers = useMemo(() => {
41
45
  return object ? triggers.filter(triggerMatch(object)) : triggers;
42
46
  }, [object, triggers]);
43
- const tags = useQuery(space, Filter.type(Tag.Tag));
44
- const types = useTypeOptions({ space, annotation: ['dynamic', 'limited-static', 'object-form'] });
47
+ const tags = useQuery(space.db, Filter.type(Tag.Tag));
48
+ const types = useTypeOptions({
49
+ space,
50
+ annotation: {
51
+ location: ['database', 'runtime'],
52
+ kind: ['user'],
53
+ registered: ['registered'],
54
+ },
55
+ });
45
56
 
46
- const [trigger, setTrigger] = useState<FunctionTrigger | undefined>(initialTrigger);
47
- const [selected, setSelected] = useState<FunctionTrigger>();
57
+ const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);
58
+ const [selected, setSelected] = useState<Trigger.Trigger>();
48
59
 
49
- const handleSelect = (trigger: FunctionTrigger) => {
60
+ const handleSelect = (trigger: Trigger.Trigger) => {
50
61
  setTrigger(trigger);
51
62
  setSelected(trigger);
52
63
  };
53
64
 
54
65
  const handleAdd = () => {
55
- setTrigger(Obj.make(FunctionTrigger, {}));
66
+ setTrigger(Trigger.make({}));
56
67
  setSelected(undefined);
57
68
  };
58
69
 
59
- const handleDelete = (trigger: FunctionTrigger) => {
70
+ const handleDelete = (trigger: Trigger.Trigger) => {
60
71
  space.db.remove(trigger);
61
72
  setTrigger(undefined);
62
73
  setSelected(undefined);
@@ -64,9 +75,11 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
64
75
 
65
76
  const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
66
77
  if (selected) {
67
- Object.assign(selected, trigger);
78
+ Obj.change(selected, (mutable) => {
79
+ Object.assign(mutable, trigger);
80
+ });
68
81
  } else {
69
- space.db.add(Obj.make(FunctionTrigger, trigger));
82
+ space.db.add(Trigger.make(trigger));
70
83
  }
71
84
 
72
85
  setTrigger(undefined);
@@ -79,11 +92,22 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
79
92
  onDone?.();
80
93
  };
81
94
 
95
+ const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {
96
+ await functionsServiceClient.forceRunCronTrigger(space.id, trigger.id);
97
+ };
98
+
99
+ const handleResetCursor = async (trigger: Trigger.Trigger) => {
100
+ Obj.change(trigger, (t) => {
101
+ Obj.deleteKeys(t, KEY_QUEUE_CURSOR);
102
+ });
103
+ await space.db.flush({ indexes: true });
104
+ };
105
+
82
106
  if (trigger) {
83
107
  return (
84
- <ControlItem title={t('trigger editor title')}>
108
+ <Settings.Item title={t('trigger editor title')}>
85
109
  <TriggerEditor
86
- space={space}
110
+ db={space.db}
87
111
  trigger={trigger}
88
112
  readonlySpec={Boolean(object)}
89
113
  tags={tags}
@@ -91,87 +115,158 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
91
115
  onSave={handleSave}
92
116
  onCancel={handleCancel}
93
117
  />
94
- </ControlItem>
118
+ </Settings.Item>
95
119
  );
96
120
  }
97
121
 
98
122
  return (
99
- <div className={mx(controlItemClasses, classNames)}>
123
+ <Settings.Container>
100
124
  {filteredTriggers.length > 0 && (
101
- <List.Root<FunctionTrigger>
125
+ <List.Root<Trigger.Trigger>
102
126
  items={filteredTriggers}
103
- isItem={Schema.is(FunctionTrigger)}
127
+ isItem={Schema.is(Trigger.Trigger)}
104
128
  getId={(field) => field.id}
105
129
  >
106
130
  {({ items: filteredTriggers }) => (
107
- <div role='list' className='flex flex-col w-full'>
108
- {filteredTriggers?.map((trigger) => {
109
- const copyAction = getCopyAction(client, trigger);
110
- return (
111
- <List.Item<FunctionTrigger>
112
- key={trigger.id}
113
- item={trigger}
114
- classNames={mx(grid, ghostHover, 'items-center', 'px-2')}
115
- >
116
- <Input.Root>
117
- <Input.Switch
118
- checked={trigger.enabled}
119
- onCheckedChange={(checked) => (trigger.enabled = checked)}
120
- />
121
- </Input.Root>
122
-
123
- <div className={'flex'}>
124
- <List.ItemTitle
125
- classNames='px-1 cursor-pointer w-0 shrink truncate'
126
- onClick={() => handleSelect(trigger)}
127
- >
128
- {getFunctionName(functions, trigger) ?? '∅'}
129
- </List.ItemTitle>
130
-
131
- {/* TODO: a better way to expose copy action */}
132
- {copyAction && (
133
- <Clipboard.IconButton
134
- label={t(copyAction.translationKey)}
135
- value={copyAction.contentProvider()}
136
- />
137
- )}
138
- </div>
139
-
140
- <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />
141
- </List.Item>
142
- );
143
- })}
131
+ <div role='list' className='flex flex-col is-full'>
132
+ {filteredTriggers?.map((trigger) => (
133
+ <TriggerListItem
134
+ key={trigger.id}
135
+ trigger={trigger}
136
+ functions={functions}
137
+ onSelect={handleSelect}
138
+ onDelete={handleDelete}
139
+ onResetCursor={handleResetCursor}
140
+ onForceRun={handleForceRunTrigger}
141
+ />
142
+ ))}
144
143
  </div>
145
144
  )}
146
145
  </List.Root>
147
146
  )}
147
+
148
148
  {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}
149
149
  <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />
150
- </div>
150
+ </Settings.Container>
151
+ );
152
+ };
153
+
154
+ const TriggerListItem = ({
155
+ trigger,
156
+ functions,
157
+ onSelect,
158
+ onDelete,
159
+ onResetCursor,
160
+ onForceRun,
161
+ }: {
162
+ trigger: Trigger.Trigger;
163
+ functions: Function.Function[];
164
+ onSelect?: (trigger: Trigger.Trigger) => void;
165
+ onDelete?: (trigger: Trigger.Trigger) => void;
166
+ onResetCursor?: (trigger: Trigger.Trigger) => void;
167
+ onForceRun?: (trigger: Trigger.Trigger) => void;
168
+ }) => {
169
+ const client = useClient();
170
+ const copyAction = getCopyAction(client, trigger);
171
+ const { t } = useTranslation(meta.id);
172
+ const cursor = Obj.getKeys(trigger, KEY_QUEUE_CURSOR).at(0)?.id;
173
+ const [snapshot, updateTrigger] = useObject(trigger);
174
+
175
+ const enabled = snapshot.enabled ?? false;
176
+ const onEnabledChange = (checked: boolean) => {
177
+ updateTrigger((trigger) => {
178
+ trigger.enabled = checked;
179
+ });
180
+ };
181
+
182
+ const handleSelect = useCallback(() => {
183
+ onSelect?.(trigger);
184
+ }, [onSelect, trigger]);
185
+
186
+ const handleDelete = useCallback(() => {
187
+ onDelete?.(trigger);
188
+ }, [onDelete, trigger]);
189
+
190
+ const handleResetCursor = useCallback(() => {
191
+ onResetCursor?.(trigger);
192
+ }, [onResetCursor, trigger]);
193
+
194
+ const handleForceRun = useCallback(() => {
195
+ onForceRun?.(trigger);
196
+ }, [onForceRun, trigger]);
197
+
198
+ return (
199
+ <List.Item<Obj.Snapshot<Trigger.Trigger>>
200
+ key={trigger.id}
201
+ item={snapshot}
202
+ classNames={mx(grid, ghostHover, 'items-center', 'pli-2')}
203
+ >
204
+ <Input.Root>
205
+ <Input.Switch checked={enabled} onCheckedChange={onEnabledChange} />
206
+ </Input.Root>
207
+
208
+ <div className={'flex'}>
209
+ <List.ItemTitle classNames='pli-1 cursor-pointer is-0 shrink truncate' onClick={handleSelect}>
210
+ {getFunctionName(functions, trigger) ?? '∅'}
211
+ {cursor && <div className='text-xs text-description truncate ml-4'>Position: {cursor}</div>}
212
+ </List.ItemTitle>
213
+
214
+ {copyAction && (
215
+ <Clipboard.IconButton label={t(copyAction.translationKey)} value={copyAction.contentProvider()} />
216
+ )}
217
+ </div>
218
+
219
+ {trigger.spec?.kind === 'timer' && onForceRun && (
220
+ <List.ItemButton
221
+ autoHide={false}
222
+ disabled={!enabled || trigger.spec?.kind !== 'timer'}
223
+ icon='ph--play--regular'
224
+ label='Force run'
225
+ onClick={handleForceRun}
226
+ />
227
+ )}
228
+ {trigger.spec?.kind === 'queue' && onResetCursor && (
229
+ <List.ItemButton
230
+ autoHide={false}
231
+ disabled={!cursor}
232
+ icon='ph--arrow-clockwise--regular'
233
+ label='Reset cursor'
234
+ onClick={handleResetCursor}
235
+ />
236
+ )}
237
+
238
+ {onDelete && <List.ItemDeleteButton onClick={handleDelete} />}
239
+ </List.Item>
151
240
  );
152
241
  };
153
242
 
154
- const getCopyAction = (client: Client, trigger: FunctionTrigger | undefined) => {
243
+ const getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {
155
244
  if (trigger?.spec?.kind === 'email') {
156
- return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };
245
+ return {
246
+ translationKey: 'trigger copy email' as const,
247
+ contentProvider: () => `${Obj.getDatabase(trigger)!.spaceId}@dxos.network`,
248
+ };
157
249
  }
158
250
 
159
251
  if (trigger?.spec?.kind === 'webhook') {
160
- return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };
252
+ return {
253
+ translationKey: 'trigger copy url' as const,
254
+ contentProvider: () => getWebhookUrl(client, trigger!),
255
+ };
161
256
  }
162
257
 
163
258
  return undefined;
164
259
  };
165
260
 
166
- const getWebhookUrl = (client: Client, trigger: FunctionTrigger) => {
167
- const spaceId = getSpace(trigger)!.id;
261
+ const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
262
+ const spaceId = Obj.getDatabase(trigger)!.spaceId;
168
263
  const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);
169
264
  const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');
170
265
  edgeUrl.protocol = isSecure ? 'https' : 'http';
171
266
  return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
172
267
  };
173
268
 
174
- const getFunctionName = (functions: FunctionType[], trigger: FunctionTrigger) => {
269
+ const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {
175
270
  // TODO(wittjosiah): Truncation should be done in the UI.
176
271
  // Warning that the List component is currently a can of worms.
177
272
  const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;
@@ -179,25 +274,25 @@ const getFunctionName = (functions: FunctionType[], trigger: FunctionTrigger) =>
179
274
  return functionObject?.name ?? shortId;
180
275
  };
181
276
 
182
- const scriptMatch = (script: ScriptType) => (trigger: FunctionTrigger) => {
277
+ const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
183
278
  const fn = trigger.function?.target;
184
- if (!Obj.instanceOf(FunctionType, fn)) {
279
+ if (!Obj.instanceOf(Function.Function, fn)) {
185
280
  return false;
186
281
  }
187
282
 
188
283
  return fn.source?.target === script;
189
284
  };
190
285
 
191
- const projectMatch = (project: DataType.Project) => {
192
- const viewQueries = Function.pipe(
193
- project.collections,
194
- Array.map((collection) => collection.target),
195
- Array.filter(Schema.is(DataType.View)),
286
+ const projectMatch = (project: Pipeline.Pipeline) => {
287
+ const viewQueries = EFn.pipe(
288
+ project.columns,
289
+ Array.map((column) => column.view.target),
290
+ Array.filter(isNonNullable),
196
291
  Array.map((view) => Obj.getSnapshot(view).query.ast),
197
292
  Array.map((ast) => JSON.stringify(ast)),
198
293
  );
199
294
 
200
- return (trigger: FunctionTrigger) => {
295
+ return (trigger: Trigger.Trigger) => {
201
296
  const spec = Obj.getSnapshot(trigger).spec;
202
297
  if (spec?.kind !== 'subscription') {
203
298
  return false;
@@ -208,14 +303,14 @@ const projectMatch = (project: DataType.Project) => {
208
303
  };
209
304
  };
210
305
 
211
- const triggerMatch = Match.type<Obj.Any>().pipe(
212
- Match.withReturnType<(trigger: FunctionTrigger) => boolean>(),
306
+ const triggerMatch = Match.type<Obj.Unknown>().pipe(
307
+ Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),
213
308
  Match.when(
214
- (obj) => Obj.instanceOf(ScriptType, obj),
309
+ (obj) => Obj.instanceOf(Script.Script, obj),
215
310
  (obj) => scriptMatch(obj),
216
311
  ),
217
312
  Match.when(
218
- (obj) => Obj.instanceOf(DataType.Project, obj),
313
+ (obj) => Obj.instanceOf(Pipeline.Pipeline, obj),
219
314
  (obj) => projectMatch(obj),
220
315
  ),
221
316
  Match.orElse((_obj) => () => true),
@@ -5,7 +5,7 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { useTranslation } from '@dxos/react-ui';
8
- import { ControlPage, ControlSection } from '@dxos/react-ui-form';
8
+ import { Settings } from '@dxos/react-ui-form';
9
9
 
10
10
  import { meta } from '../meta';
11
11
 
@@ -15,15 +15,15 @@ import { TriggersSettings } from './TriggerSettings';
15
15
  export const AutomationSettings = (props: AutomationPanelProps) => {
16
16
  const { t } = useTranslation(meta.id);
17
17
  return (
18
- <ControlPage>
19
- <ControlSection
18
+ <Settings.Root>
19
+ <Settings.Section
20
20
  title={t('automation verbose label', { ns: meta.id })}
21
21
  description={t('automation description', { ns: meta.id })}
22
22
  >
23
23
  <AutomationPanel {...props} />
24
- <TriggersSettings space={props.space} />
25
- </ControlSection>
26
- </ControlPage>
24
+ <TriggersSettings db={props.space.db} />
25
+ </Settings.Section>
26
+ </Settings.Root>
27
27
  );
28
28
  };
29
29
 
@@ -6,23 +6,30 @@ import React from 'react';
6
6
 
7
7
  import { type Space } from '@dxos/react-client/echo';
8
8
  import { useTranslation } from '@dxos/react-ui';
9
- import { ControlPage, ControlSection } from '@dxos/react-ui-form';
9
+ import { Settings } from '@dxos/react-ui-form';
10
10
 
11
11
  import { meta } from '../meta';
12
12
 
13
13
  import { FunctionsPanel } from './FunctionsPanel';
14
+ import { FunctionsRegistry } from './FunctionsRegistry';
14
15
 
15
16
  export const FunctionsContainer = ({ space }: { space: Space }) => {
16
17
  const { t } = useTranslation(meta.id);
17
18
  return (
18
- <ControlPage>
19
- <ControlSection
19
+ <Settings.Root>
20
+ <Settings.Section
20
21
  title={t('functions verbose label', { ns: meta.id })}
21
22
  description={t('functions description', { ns: meta.id })}
22
23
  >
23
24
  <FunctionsPanel space={space} />
24
- </ControlSection>
25
- </ControlPage>
25
+ </Settings.Section>
26
+ <Settings.Section
27
+ title={t('functions registry verbose label', { ns: meta.id })}
28
+ description={t('functions registry description', { ns: meta.id })}
29
+ >
30
+ <FunctionsRegistry space={space} />
31
+ </Settings.Section>
32
+ </Settings.Root>
26
33
  );
27
34
  };
28
35
 
@@ -5,27 +5,28 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import React, { useCallback, useMemo } from 'react';
7
7
 
8
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
9
- import { FunctionType, ScriptType } from '@dxos/functions';
10
- import { Filter, type Space, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
11
- import { Button, useTranslation } from '@dxos/react-ui';
12
- import { controlItemClasses } from '@dxos/react-ui-form';
8
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { LayoutOperation } from '@dxos/app-toolkit';
10
+ import { Obj } from '@dxos/echo';
11
+ import { Function, Script } from '@dxos/functions';
12
+ import { SpaceOperation } from '@dxos/plugin-space/types';
13
+ import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
14
+ import { Button, IconButton, useTranslation } from '@dxos/react-ui';
15
+ import { Settings } from '@dxos/react-ui-form';
13
16
  import { List } from '@dxos/react-ui-list';
14
- import { ghostHover, mx } from '@dxos/react-ui-theme';
17
+ import { ghostHover, mx } from '@dxos/ui-theme';
15
18
 
16
19
  import { meta } from '../../meta';
17
20
 
18
- const grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';
19
-
20
21
  export type FunctionsPanelProps = {
21
22
  space: Space;
22
23
  };
23
24
 
24
25
  export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
25
26
  const { t } = useTranslation(meta.id);
26
- const functions = useQuery(space, Filter.type(FunctionType));
27
- const scripts = useQuery(space, Filter.type(ScriptType));
28
- const { dispatchPromise: dispatch } = useIntentDispatcher();
27
+ const functions = useQuery(space.db, Filter.type(Function.Function));
28
+ const scripts = useQuery(space.db, Filter.type(Script.Script));
29
+ const { invokePromise } = useOperationInvoker();
29
30
 
30
31
  const functionToScriptMap = useMemo(
31
32
  () =>
@@ -40,13 +41,13 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
40
41
  }
41
42
  return map;
42
43
  },
43
- {} as Record<string, ScriptType>,
44
+ {} as Record<string, Script.Script>,
44
45
  ),
45
46
  [functions, scripts],
46
47
  );
47
48
 
48
49
  const getScriptName = useCallback(
49
- (func: FunctionType) => {
50
+ (func: Function.Function) => {
50
51
  const script = functionToScriptMap[func.id];
51
52
  return script?.name;
52
53
  },
@@ -54,26 +55,34 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
54
55
  );
55
56
 
56
57
  const handleGoToScript = useCallback(
57
- (func: FunctionType) => {
58
+ (func: Function.Function) => {
58
59
  const script = functionToScriptMap[func.id];
59
60
  if (script) {
60
- void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [fullyQualifiedId(script)] }));
61
+ void invokePromise(LayoutOperation.Open, { subject: [Obj.getDXN(script).toString()] });
61
62
  }
62
63
  },
63
- [functionToScriptMap, dispatch],
64
+ [functionToScriptMap, invokePromise],
65
+ );
66
+
67
+ const handleDelete = useCallback(
68
+ (func: Function.Function) => invokePromise(SpaceOperation.RemoveObjects, { objects: [func] }),
69
+ [invokePromise],
64
70
  );
65
71
 
66
72
  return (
67
- <div role='none' className={mx(controlItemClasses)}>
73
+ <Settings.Container>
68
74
  {functions.length > 0 && (
69
- <List.Root<FunctionType> items={functions} isItem={Schema.is(FunctionType)} getId={(func) => func.id}>
75
+ <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>
70
76
  {({ items }) => (
71
- <div role='list' className='flex flex-col w-full'>
77
+ <div role='list' className='flex flex-col is-full'>
72
78
  {items?.map((func) => (
73
- <List.Item<FunctionType>
79
+ <List.Item<Function.Function>
74
80
  key={func.id}
75
81
  item={func}
76
- classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}
82
+ classNames={mx(
83
+ 'grid grid-cols-[1fr_auto] min-bs-[2.5rem] min-bs-[3rem] pli-2 items-center',
84
+ ghostHover,
85
+ )}
77
86
  >
78
87
  <div className='flex flex-col truncate'>
79
88
  <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>
@@ -84,6 +93,12 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
84
93
  {functionToScriptMap[func.id] && (
85
94
  <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>
86
95
  )}
96
+ <IconButton
97
+ iconOnly
98
+ icon='ph--trash--regular'
99
+ label={t('delete function button label')}
100
+ onClick={() => handleDelete(func)}
101
+ />
87
102
  </List.Item>
88
103
  ))}
89
104
  </div>
@@ -91,7 +106,7 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
91
106
  </List.Root>
92
107
  )}
93
108
 
94
- {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}
95
- </div>
109
+ {functions.length === 0 && <div className='text-center plb-4 text-description'>{t('no functions found')}</div>}
110
+ </Settings.Container>
96
111
  );
97
112
  };