@dxos/plugin-automation 0.8.4-main.3a94e84 → 0.8.4-main.3eb6e50203

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 (285) 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-56ZKRVM5.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-JFBUK3WR.mjs +14 -0
  12. package/dist/lib/browser/chunk-JFBUK3WR.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-JN7QRQQX.mjs +256 -0
  14. package/dist/lib/browser/chunk-JN7QRQQX.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-JOXPQ27I.mjs +83 -0
  16. package/dist/lib/browser/chunk-JOXPQ27I.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-O5Y2F33G.mjs +8 -0
  18. package/dist/lib/browser/chunk-O5Y2F33G.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-P5AEO35Y.mjs +93 -0
  20. package/dist/lib/browser/chunk-P5AEO35Y.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-PZNBEKO5.mjs +17 -0
  22. package/dist/lib/browser/chunk-PZNBEKO5.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-QNEQ23BF.mjs +98 -0
  24. package/dist/lib/browser/chunk-QNEQ23BF.mjs.map +7 -0
  25. package/dist/lib/browser/cli/index.mjs +1108 -0
  26. package/dist/lib/browser/cli/index.mjs.map +7 -0
  27. package/dist/lib/browser/compute-runtime-BUBHYS4Y.mjs +119 -0
  28. package/dist/lib/browser/compute-runtime-BUBHYS4Y.mjs.map +7 -0
  29. package/dist/lib/browser/hooks/index.mjs +13 -0
  30. package/dist/lib/browser/index.mjs +68 -46
  31. package/dist/lib/browser/index.mjs.map +4 -4
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/operation-resolver-IN2FRGOT.mjs +83 -0
  34. package/dist/lib/browser/operation-resolver-IN2FRGOT.mjs.map +7 -0
  35. package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-246NXXJR.mjs} +26 -24
  36. package/dist/lib/browser/react-surface-246NXXJR.mjs.map +7 -0
  37. package/dist/lib/browser/types/index.mjs +10 -4
  38. package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-RTBY7YFM.mjs} +4 -4
  39. package/dist/lib/node-esm/AutomationSettings-GK4RLSDN.mjs +58 -0
  40. package/dist/lib/node-esm/AutomationSettings-GK4RLSDN.mjs.map +7 -0
  41. package/dist/lib/node-esm/FunctionsContainer-AHHZODM5.mjs +126 -0
  42. package/dist/lib/node-esm/FunctionsContainer-AHHZODM5.mjs.map +7 -0
  43. package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-V2DKWYMU.mjs} +3 -3
  44. package/dist/lib/node-esm/FunctionsPanel-V2DKWYMU.mjs.map +7 -0
  45. package/dist/lib/node-esm/app-graph-builder-Z2TMQHVX.mjs +86 -0
  46. package/dist/lib/node-esm/app-graph-builder-Z2TMQHVX.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-5FXNN3MV.mjs +19 -0
  48. package/dist/lib/node-esm/chunk-5FXNN3MV.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-AENSLAVD.mjs +99 -0
  50. package/dist/lib/node-esm/chunk-AENSLAVD.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-EJPZWAGR.mjs +257 -0
  52. package/dist/lib/node-esm/chunk-EJPZWAGR.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-K5Z4UGIO.mjs +16 -0
  54. package/dist/lib/node-esm/chunk-K5Z4UGIO.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-M3UPTGXF.mjs +10 -0
  56. package/dist/lib/node-esm/chunk-M3UPTGXF.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-OJEFRZEV.mjs +259 -0
  58. package/dist/lib/node-esm/chunk-OJEFRZEV.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-Q7EMIPMW.mjs +94 -0
  60. package/dist/lib/node-esm/chunk-Q7EMIPMW.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-RX52VKI2.mjs +84 -0
  62. package/dist/lib/node-esm/chunk-RX52VKI2.mjs.map +7 -0
  63. package/dist/lib/node-esm/cli/index.mjs +1109 -0
  64. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  65. package/dist/lib/node-esm/compute-runtime-6UEDBN76.mjs +120 -0
  66. package/dist/lib/node-esm/compute-runtime-6UEDBN76.mjs.map +7 -0
  67. package/dist/lib/node-esm/hooks/index.mjs +14 -0
  68. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +68 -46
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/operation-resolver-67CEAKXP.mjs +84 -0
  73. package/dist/lib/node-esm/operation-resolver-67CEAKXP.mjs.map +7 -0
  74. package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-U6762KPI.mjs} +26 -24
  75. package/dist/lib/node-esm/react-surface-U6762KPI.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +10 -4
  77. package/dist/types/src/AutomationPlugin.d.ts +2 -1
  78. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  80. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +6 -0
  84. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/compute-runtime/index.d.ts +3 -0
  86. package/dist/types/src/capabilities/compute-runtime/index.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/index.d.ts +4 -3
  88. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  90. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  92. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  94. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  96. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  97. package/dist/types/src/cli/commands/index.d.ts +2 -0
  98. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  99. package/dist/types/src/cli/commands/trigger/create/index.d.ts +25 -0
  100. package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +1 -0
  101. package/dist/types/src/cli/commands/trigger/create/queue.d.ts +13 -0
  102. package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +1 -0
  103. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts +15 -0
  104. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +1 -0
  105. package/dist/types/src/cli/commands/trigger/create/timer.d.ts +13 -0
  106. package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +1 -0
  107. package/dist/types/src/cli/commands/trigger/index.d.ts +57 -0
  108. package/dist/types/src/cli/commands/trigger/index.d.ts.map +1 -0
  109. package/dist/types/src/cli/commands/trigger/list.d.ts +7 -0
  110. package/dist/types/src/cli/commands/trigger/list.d.ts.map +1 -0
  111. package/dist/types/src/cli/commands/trigger/options.d.ts +11 -0
  112. package/dist/types/src/cli/commands/trigger/options.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/trigger/remove.d.ts +8 -0
  114. package/dist/types/src/cli/commands/trigger/remove.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/trigger/update/index.d.ts +28 -0
  116. package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/trigger/update/queue.d.ts +12 -0
  118. package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts +13 -0
  120. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +1 -0
  121. package/dist/types/src/cli/commands/trigger/update/timer.d.ts +11 -0
  122. package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +1 -0
  123. package/dist/types/src/cli/commands/trigger/util.d.ts +46 -0
  124. package/dist/types/src/cli/commands/trigger/util.d.ts.map +1 -0
  125. package/dist/types/src/cli/index.d.ts +2 -0
  126. package/dist/types/src/cli/index.d.ts.map +1 -0
  127. package/dist/types/src/cli/plugin.d.ts +3 -0
  128. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  129. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +3 -3
  130. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  131. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +49 -4
  132. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/AutomationSettings.d.ts +5 -0
  134. package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
  135. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  137. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  138. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  139. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  140. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  141. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +12 -9
  142. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  143. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  144. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  145. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +11 -8
  146. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  147. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +117 -4
  148. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/TriggerSettings.d.ts +6 -0
  150. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
  151. package/dist/types/src/components/index.d.ts +1 -1
  152. package/dist/types/src/components/index.d.ts.map +1 -1
  153. package/dist/types/src/hooks/index.d.ts +3 -0
  154. package/dist/types/src/hooks/index.d.ts.map +1 -0
  155. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +12 -0
  156. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  157. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +12 -0
  158. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
  159. package/dist/types/src/index.d.ts +2 -0
  160. package/dist/types/src/index.d.ts.map +1 -1
  161. package/dist/types/src/meta.d.ts +2 -3
  162. package/dist/types/src/meta.d.ts.map +1 -1
  163. package/dist/types/src/testing/test-functions.d.ts +202 -3
  164. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  165. package/dist/types/src/translations.d.ts +6 -0
  166. package/dist/types/src/translations.d.ts.map +1 -1
  167. package/dist/types/src/types/capabilities.d.ts +22 -0
  168. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  169. package/dist/types/src/types/events.d.ts +5 -0
  170. package/dist/types/src/types/events.d.ts.map +1 -0
  171. package/dist/types/src/types/index.d.ts +2 -0
  172. package/dist/types/src/types/index.d.ts.map +1 -1
  173. package/dist/types/src/types/schema.d.ts +31 -2
  174. package/dist/types/src/types/schema.d.ts.map +1 -1
  175. package/dist/types/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +81 -41
  177. package/src/AutomationPlugin.tsx +19 -32
  178. package/src/capabilities/app-graph-builder/app-graph-builder.ts +72 -0
  179. package/src/capabilities/app-graph-builder/index.ts +7 -0
  180. package/src/capabilities/compute-runtime/compute-runtime.ts +140 -0
  181. package/src/capabilities/compute-runtime/index.ts +7 -0
  182. package/src/capabilities/index.ts +4 -5
  183. package/src/capabilities/operation-resolver/index.ts +7 -0
  184. package/src/capabilities/operation-resolver/operation-resolver.ts +80 -0
  185. package/src/capabilities/react-surface/index.ts +7 -0
  186. package/src/capabilities/react-surface/react-surface.tsx +61 -0
  187. package/src/cli/commands/index.ts +5 -0
  188. package/src/cli/commands/trigger/create/index.ts +14 -0
  189. package/src/cli/commands/trigger/create/queue.ts +89 -0
  190. package/src/cli/commands/trigger/create/subscription.ts +128 -0
  191. package/src/cli/commands/trigger/create/timer.ts +93 -0
  192. package/src/cli/commands/trigger/index.ts +16 -0
  193. package/src/cli/commands/trigger/list.ts +67 -0
  194. package/src/cli/commands/trigger/options.ts +59 -0
  195. package/src/cli/commands/trigger/remove.ts +45 -0
  196. package/src/cli/commands/trigger/update/index.ts +14 -0
  197. package/src/cli/commands/trigger/update/queue.ts +195 -0
  198. package/src/cli/commands/trigger/update/subscription.ts +278 -0
  199. package/src/cli/commands/trigger/update/timer.ts +193 -0
  200. package/src/cli/commands/trigger/util.ts +395 -0
  201. package/src/cli/index.ts +5 -0
  202. package/src/cli/plugin.ts +24 -0
  203. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +16 -17
  204. package/src/components/AutomationPanel/AutomationPanel.tsx +235 -89
  205. package/src/components/AutomationSettings.tsx +30 -0
  206. package/src/components/FunctionsContainer.tsx +19 -14
  207. package/src/components/FunctionsPanel/FunctionsPanel.tsx +41 -26
  208. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +110 -0
  209. package/src/components/FunctionsRegistry/index.ts +5 -0
  210. package/src/components/TriggerEditor/FunctionInputEditor.tsx +41 -34
  211. package/src/components/TriggerEditor/SpecSelector.tsx +29 -21
  212. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +78 -32
  213. package/src/components/TriggerEditor/TriggerEditor.tsx +81 -48
  214. package/src/components/TriggerSettings.tsx +26 -0
  215. package/src/components/index.ts +1 -1
  216. package/src/hooks/index.ts +6 -0
  217. package/src/hooks/useComputeRuntimeCallback.ts +67 -0
  218. package/src/hooks/useTriggerRuntimeControls.ts +67 -0
  219. package/src/index.ts +2 -0
  220. package/src/meta.ts +8 -7
  221. package/src/testing/test-functions.ts +3 -3
  222. package/src/translations.ts +9 -0
  223. package/src/types/capabilities.ts +42 -0
  224. package/src/types/events.ts +11 -0
  225. package/src/types/index.ts +2 -0
  226. package/src/types/schema.ts +24 -3
  227. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
  228. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
  229. package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
  230. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs +0 -39
  231. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
  232. package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs +0 -80
  233. package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
  235. package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-ERTIGJYE.mjs +0 -147
  237. package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-FSJZXTS2.mjs +0 -230
  239. package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
  241. package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-HN7OHFCB.mjs +0 -38
  243. package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-LYJVTIVD.mjs +0 -94
  245. package/dist/lib/browser/chunk-LYJVTIVD.mjs.map +0 -7
  246. package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs +0 -76
  247. package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
  248. package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
  249. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
  250. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
  251. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs +0 -40
  252. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
  253. package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs +0 -81
  254. package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-AZH66CED.mjs +0 -231
  256. package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs +0 -148
  258. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
  260. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs +0 -39
  262. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs +0 -16
  264. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs +0 -95
  266. package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
  267. package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs +0 -77
  268. package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
  269. package/dist/lib/node-esm/react-surface-3PNW7NDW.mjs.map +0 -7
  270. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  271. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  272. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  273. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  274. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  275. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  276. package/dist/types/src/components/AutomationContainer.d.ts +0 -5
  277. package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
  278. package/src/capabilities/app-graph-builder.ts +0 -86
  279. package/src/capabilities/intent-resolver.ts +0 -72
  280. package/src/capabilities/react-surface.tsx +0 -56
  281. package/src/components/AutomationContainer.tsx +0 -30
  282. /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-C6MZ22CB.mjs.map} +0 -0
  283. /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-RD22LYMR.mjs.map} +0 -0
  284. /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
  285. /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-RTBY7YFM.mjs.map} +0 -0
@@ -2,60 +2,72 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
6
- import React, { useState } from 'react';
7
-
8
- import { Filter, Obj } from '@dxos/echo';
9
- import {
10
- FunctionType,
11
- FunctionTrigger,
12
- FunctionTriggerSchema,
13
- type FunctionTriggerType,
14
- ScriptType,
15
- TriggerKind,
16
- } from '@dxos/functions';
5
+ import * as Array from 'effect/Array';
6
+ import * as EFn from 'effect/Function';
7
+ import * as Match from 'effect/Match';
8
+ import * as Schema from 'effect/Schema';
9
+ import React, { useCallback, useMemo, useState } from 'react';
10
+
11
+ import { Filter, Obj, Tag } from '@dxos/echo';
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';
15
+ import { useTypeOptions } from '@dxos/plugin-space';
17
16
  import { type Client, useClient } from '@dxos/react-client';
18
- import { useQuery, type Space, getSpace } from '@dxos/react-client/echo';
17
+ import { type Space, useObject, useQuery } from '@dxos/react-client/echo';
19
18
  import { Clipboard, IconButton, Input, Separator, useTranslation } from '@dxos/react-ui';
20
- import { ControlItem, controlItemClasses } from '@dxos/react-ui-form';
19
+ import { Settings } from '@dxos/react-ui-form';
21
20
  import { List } from '@dxos/react-ui-list';
22
- import { ghostHover, mx } from '@dxos/react-ui-theme';
21
+ import { Pipeline } from '@dxos/types';
22
+ import { ghostHover, mx } from '@dxos/ui-theme';
23
+ import { isNonNullable } from '@dxos/util';
23
24
 
24
- import { AUTOMATION_PLUGIN } from '../../meta';
25
+ import { meta } from '../../meta';
25
26
  import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
26
27
 
27
- 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]';
28
29
 
29
30
  export type AutomationPanelProps = {
30
31
  space: Space;
31
- object?: Obj.Any;
32
- initialTrigger?: FunctionTriggerType;
32
+ object?: Obj.Unknown;
33
+ initialTrigger?: Trigger.Trigger;
33
34
  onDone?: () => void;
34
35
  };
35
36
 
36
37
  // TODO(burdon): Factor out common layout with ViewEditor.
37
38
  export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
38
- const { t } = useTranslation(AUTOMATION_PLUGIN);
39
+ const { t } = useTranslation(meta.id);
39
40
  const client = useClient();
40
- const triggers = useQuery(space, Filter.type(FunctionTrigger));
41
- const functions = useQuery(space, Filter.type(FunctionType));
42
- const scripts = useQuery(space, Filter.type(ScriptType));
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));
44
+ const filteredTriggers = useMemo(() => {
45
+ return object ? triggers.filter(triggerMatch(object)) : triggers;
46
+ }, [object, triggers]);
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
+ });
43
56
 
44
- const [trigger, setTrigger] = useState<FunctionTriggerType | undefined>(initialTrigger);
45
- const [selected, setSelected] = useState<FunctionTrigger>();
57
+ const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);
58
+ const [selected, setSelected] = useState<Trigger.Trigger>();
46
59
 
47
- const handleSelect = (trigger: FunctionTrigger) => {
48
- const { id: _, ...values } = trigger;
49
- setTrigger(values);
60
+ const handleSelect = (trigger: Trigger.Trigger) => {
61
+ setTrigger(trigger);
50
62
  setSelected(trigger);
51
63
  };
52
64
 
53
65
  const handleAdd = () => {
54
- setTrigger(Obj.make(FunctionTriggerSchema, {}));
66
+ setTrigger(Trigger.make({}));
55
67
  setSelected(undefined);
56
68
  };
57
69
 
58
- const handleDelete = (trigger: FunctionTrigger) => {
70
+ const handleDelete = (trigger: Trigger.Trigger) => {
59
71
  space.db.remove(trigger);
60
72
  setTrigger(undefined);
61
73
  setSelected(undefined);
@@ -63,9 +75,11 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
63
75
 
64
76
  const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
65
77
  if (selected) {
66
- Object.assign(selected, trigger);
78
+ Obj.change(selected, (mutable) => {
79
+ Object.assign(mutable, trigger);
80
+ });
67
81
  } else {
68
- space.db.add(Obj.make(FunctionTrigger, trigger));
82
+ space.db.add(Trigger.make(trigger));
69
83
  }
70
84
 
71
85
  setTrigger(undefined);
@@ -78,94 +92,226 @@ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: Autom
78
92
  onDone?.();
79
93
  };
80
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
+
81
106
  if (trigger) {
82
107
  return (
83
- <ControlItem title={t('trigger editor title')}>
84
- <TriggerEditor space={space} trigger={trigger} onSave={handleSave} onCancel={handleCancel} />
85
- </ControlItem>
108
+ <Settings.Item title={t('trigger editor title')}>
109
+ <TriggerEditor
110
+ db={space.db}
111
+ trigger={trigger}
112
+ readonlySpec={Boolean(object)}
113
+ tags={tags}
114
+ types={types}
115
+ onSave={handleSave}
116
+ onCancel={handleCancel}
117
+ />
118
+ </Settings.Item>
86
119
  );
87
120
  }
88
121
 
89
122
  return (
90
- <div className={controlItemClasses}>
91
- {triggers.length > 0 && (
92
- <List.Root<FunctionTrigger> items={triggers} isItem={Schema.is(FunctionTrigger)} getId={(field) => field.id}>
93
- {({ items: triggers }) => (
94
- <div role='list' className='flex flex-col w-full'>
95
- {triggers?.map((trigger) => {
96
- const copyAction = getCopyAction(client, trigger);
97
- return (
98
- <List.Item<FunctionTrigger>
99
- key={trigger.id}
100
- item={trigger}
101
- classNames={mx(grid, ghostHover, 'items-center', 'px-2')}
102
- >
103
- <Input.Root>
104
- <Input.Switch
105
- checked={trigger.enabled}
106
- onCheckedChange={(checked) => (trigger.enabled = checked)}
107
- />
108
- </Input.Root>
109
-
110
- <div className={'flex'}>
111
- <List.ItemTitle
112
- classNames='px-1 cursor-pointer w-0 shrink truncate'
113
- onClick={() => handleSelect(trigger)}
114
- >
115
- {getFunctionName(scripts, functions, trigger) ?? '∅'}
116
- </List.ItemTitle>
117
-
118
- {/* TODO: a better way to expose copy action */}
119
- {copyAction && (
120
- <Clipboard.IconButton
121
- label={t(copyAction.translationKey)}
122
- value={copyAction.contentProvider()}
123
- />
124
- )}
125
- </div>
126
-
127
- <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />
128
- </List.Item>
129
- );
130
- })}
123
+ <Settings.Container>
124
+ {filteredTriggers.length > 0 && (
125
+ <List.Root<Trigger.Trigger>
126
+ items={filteredTriggers}
127
+ isItem={Schema.is(Trigger.Trigger)}
128
+ getId={(field) => field.id}
129
+ >
130
+ {({ items: filteredTriggers }) => (
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
+ ))}
131
143
  </div>
132
144
  )}
133
145
  </List.Root>
134
146
  )}
135
- {triggers.length > 0 && <Separator classNames='mlb-4' />}
147
+
148
+ {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}
136
149
  <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />
137
- </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>
138
240
  );
139
241
  };
140
242
 
141
- const getCopyAction = (client: Client, trigger: FunctionTrigger | undefined) => {
142
- if (trigger?.spec?.kind === TriggerKind.Email) {
143
- return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };
243
+ const getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {
244
+ if (trigger?.spec?.kind === 'email') {
245
+ return {
246
+ translationKey: 'trigger copy email' as const,
247
+ contentProvider: () => `${Obj.getDatabase(trigger)!.spaceId}@dxos.network`,
248
+ };
144
249
  }
145
250
 
146
- if (trigger?.spec?.kind === TriggerKind.Webhook) {
147
- return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };
251
+ if (trigger?.spec?.kind === 'webhook') {
252
+ return {
253
+ translationKey: 'trigger copy url' as const,
254
+ contentProvider: () => getWebhookUrl(client, trigger!),
255
+ };
148
256
  }
149
257
 
150
258
  return undefined;
151
259
  };
152
260
 
153
- const getWebhookUrl = (client: Client, trigger: FunctionTrigger) => {
154
- const spaceId = getSpace(trigger)!.id;
261
+ const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
262
+ const spaceId = Obj.getDatabase(trigger)!.spaceId;
155
263
  const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);
156
264
  const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');
157
265
  edgeUrl.protocol = isSecure ? 'https' : 'http';
158
266
  return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
159
267
  };
160
268
 
161
- const getFunctionName = (scripts: ScriptType[], functions: FunctionType[], trigger: FunctionTriggerType) => {
269
+ const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {
162
270
  // TODO(wittjosiah): Truncation should be done in the UI.
163
271
  // Warning that the List component is currently a can of worms.
164
272
  const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;
165
273
  const functionObject = functions.find((fn) => fn === trigger.function?.target);
166
- if (!functionObject) {
167
- return shortId;
274
+ return functionObject?.name ?? shortId;
275
+ };
276
+
277
+ const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
278
+ const fn = trigger.function?.target;
279
+ if (!Obj.instanceOf(Function.Function, fn)) {
280
+ return false;
168
281
  }
169
282
 
170
- return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;
283
+ return fn.source?.target === script;
171
284
  };
285
+
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),
291
+ Array.map((view) => Obj.getSnapshot(view).query.ast),
292
+ Array.map((ast) => JSON.stringify(ast)),
293
+ );
294
+
295
+ return (trigger: Trigger.Trigger) => {
296
+ const spec = Obj.getSnapshot(trigger).spec;
297
+ if (spec?.kind !== 'subscription') {
298
+ return false;
299
+ }
300
+
301
+ // TODO(wittjosiah): Implement better way of comparing query ASTs.
302
+ return viewQueries.some((query) => JSON.stringify(spec.query) === query);
303
+ };
304
+ };
305
+
306
+ const triggerMatch = Match.type<Obj.Unknown>().pipe(
307
+ Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),
308
+ Match.when(
309
+ (obj) => Obj.instanceOf(Script.Script, obj),
310
+ (obj) => scriptMatch(obj),
311
+ ),
312
+ Match.when(
313
+ (obj) => Obj.instanceOf(Pipeline.Pipeline, obj),
314
+ (obj) => projectMatch(obj),
315
+ ),
316
+ Match.orElse((_obj) => () => true),
317
+ );
@@ -0,0 +1,30 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { useTranslation } from '@dxos/react-ui';
8
+ import { Settings } from '@dxos/react-ui-form';
9
+
10
+ import { meta } from '../meta';
11
+
12
+ import { AutomationPanel, type AutomationPanelProps } from './AutomationPanel';
13
+ import { TriggersSettings } from './TriggerSettings';
14
+
15
+ export const AutomationSettings = (props: AutomationPanelProps) => {
16
+ const { t } = useTranslation(meta.id);
17
+ return (
18
+ <Settings.Root>
19
+ <Settings.Section
20
+ title={t('automation verbose label', { ns: meta.id })}
21
+ description={t('automation description', { ns: meta.id })}
22
+ >
23
+ <AutomationPanel {...props} />
24
+ <TriggersSettings db={props.space.db} />
25
+ </Settings.Section>
26
+ </Settings.Root>
27
+ );
28
+ };
29
+
30
+ export default AutomationSettings;
@@ -6,25 +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';
10
- import { StackItem } from '@dxos/react-ui-stack';
9
+ import { Settings } from '@dxos/react-ui-form';
10
+
11
+ import { meta } from '../meta';
11
12
 
12
13
  import { FunctionsPanel } from './FunctionsPanel';
13
- import { AUTOMATION_PLUGIN } from '../meta';
14
+ import { FunctionsRegistry } from './FunctionsRegistry';
14
15
 
15
16
  export const FunctionsContainer = ({ space }: { space: Space }) => {
16
- const { t } = useTranslation(AUTOMATION_PLUGIN);
17
+ const { t } = useTranslation(meta.id);
17
18
  return (
18
- <StackItem.Content classNames='block overflow-y-auto'>
19
- <ControlPage>
20
- <ControlSection
21
- title={t('functions verbose label', { ns: AUTOMATION_PLUGIN })}
22
- description={t('functions description', { ns: AUTOMATION_PLUGIN })}
23
- >
24
- <FunctionsPanel space={space} />
25
- </ControlSection>
26
- </ControlPage>
27
- </StackItem.Content>
19
+ <Settings.Root>
20
+ <Settings.Section
21
+ title={t('functions verbose label', { ns: meta.id })}
22
+ description={t('functions description', { ns: meta.id })}
23
+ >
24
+ <FunctionsPanel space={space} />
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>
28
33
  );
29
34
  };
30
35
 
@@ -2,30 +2,31 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
  import React, { useCallback, useMemo } from 'react';
7
7
 
8
- import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
9
- import { FunctionType, ScriptType } from '@dxos/functions';
10
- import { Filter, fullyQualifiedId, useQuery, type Space } 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
- import { AUTOMATION_PLUGIN } from '../../meta';
17
-
18
- const grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';
19
+ import { meta } from '../../meta';
19
20
 
20
21
  export type FunctionsPanelProps = {
21
22
  space: Space;
22
23
  };
23
24
 
24
25
  export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
25
- const { t } = useTranslation(AUTOMATION_PLUGIN);
26
- const functions = useQuery(space, Filter.type(FunctionType));
27
- const scripts = useQuery(space, Filter.type(ScriptType));
28
- const { dispatchPromise: dispatch } = useIntentDispatcher();
26
+ const { t } = useTranslation(meta.id);
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
  };