@dxos/plugin-automation 0.8.4-main.7ace549 → 0.8.4-main.8baae0fced

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 (329) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/AutomationPanel-GQCS4EPU.mjs +11 -0
  4. package/dist/lib/neutral/AutomationPlugin.mjs +10 -0
  5. package/dist/lib/neutral/AutomationPlugin.node.mjs +1111 -0
  6. package/dist/lib/neutral/AutomationPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/AutomationPlugin.workerd.mjs +23 -0
  8. package/dist/lib/neutral/AutomationPlugin.workerd.mjs.map +7 -0
  9. package/dist/lib/neutral/AutomationSettings-F6AZQV74.mjs +31 -0
  10. package/dist/lib/neutral/AutomationSettings-F6AZQV74.mjs.map +7 -0
  11. package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs +38 -0
  12. package/dist/lib/neutral/FunctionsContainer-2ETGQQR2.mjs.map +7 -0
  13. package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs +97 -0
  14. package/dist/lib/neutral/FunctionsPanel-SVRKRUXZ.mjs.map +7 -0
  15. package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.mjs +95 -0
  16. package/dist/lib/neutral/FunctionsRegistry-7ITCFJCW.mjs.map +7 -0
  17. package/dist/lib/neutral/TriggerSettings-XCHIZPOR.mjs +9 -0
  18. package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs +75 -0
  19. package/dist/lib/neutral/app-graph-builder-4QOUKY5L.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/capabilities/node.mjs +13 -0
  23. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-2JP77CMN.mjs +42 -0
  25. package/dist/lib/neutral/chunk-2JP77CMN.mjs.map +7 -0
  26. package/dist/lib/{browser/chunk-LZQFZO3B.mjs → neutral/chunk-4ETZEEYR.mjs} +8 -4
  27. package/dist/lib/neutral/chunk-4ETZEEYR.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-EIIPEUUP.mjs +303 -0
  29. package/dist/lib/neutral/chunk-EIIPEUUP.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-HRUXURVS.mjs +12 -0
  31. package/dist/lib/neutral/chunk-HRUXURVS.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  33. package/dist/lib/neutral/chunk-K3C5ZTZA.mjs +285 -0
  34. package/dist/lib/neutral/chunk-K3C5ZTZA.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-VCWVO3JE.mjs +8 -0
  36. package/dist/lib/neutral/chunk-VCWVO3JE.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-VRGWNUVV.mjs +36 -0
  38. package/dist/lib/neutral/chunk-VRGWNUVV.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-YA2ZTSOH.mjs +73 -0
  40. package/dist/lib/neutral/chunk-YA2ZTSOH.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +16 -0
  42. package/dist/lib/neutral/containers/index.mjs +13 -0
  43. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  44. package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs +68 -0
  45. package/dist/lib/neutral/create-trigger-from-template-XAJWHKO2.mjs.map +7 -0
  46. package/dist/lib/neutral/hooks/index.mjs +47 -0
  47. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  48. package/dist/lib/neutral/index.mjs +16 -0
  49. package/dist/lib/neutral/layer-specs-XLG75KLY.mjs +161 -0
  50. package/dist/lib/neutral/layer-specs-XLG75KLY.mjs.map +7 -0
  51. package/dist/lib/neutral/meta.json +1 -0
  52. package/dist/lib/neutral/meta.mjs +8 -0
  53. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs +13 -0
  54. package/dist/lib/neutral/operation-handler-YXGYH5W5.mjs.map +7 -0
  55. package/dist/lib/neutral/operations/index.mjs +8 -0
  56. package/dist/lib/neutral/plugin.mjs +16 -0
  57. package/dist/lib/neutral/plugin.mjs.map +7 -0
  58. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs +57 -0
  59. package/dist/lib/neutral/react-surface-3OGMAMKV.mjs.map +7 -0
  60. package/dist/lib/neutral/testing.mjs +8 -0
  61. package/dist/lib/neutral/testing.mjs.map +7 -0
  62. package/dist/lib/neutral/translations.mjs +47 -0
  63. package/dist/lib/neutral/translations.mjs.map +7 -0
  64. package/dist/lib/neutral/types/index.mjs +12 -0
  65. package/dist/lib/neutral/types/index.mjs.map +7 -0
  66. package/dist/types/src/AutomationPlugin.d.ts +3 -1
  67. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  68. package/dist/types/src/AutomationPlugin.node.d.ts +4 -0
  69. package/dist/types/src/AutomationPlugin.node.d.ts.map +1 -0
  70. package/dist/types/src/AutomationPlugin.test.d.ts +2 -0
  71. package/dist/types/src/AutomationPlugin.test.d.ts.map +1 -0
  72. package/dist/types/src/AutomationPlugin.workerd.d.ts +4 -0
  73. package/dist/types/src/AutomationPlugin.workerd.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  75. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/index.d.ts +6 -5
  77. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/layer-specs.d.ts +5 -0
  79. package/dist/types/src/capabilities/layer-specs.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/node.d.ts +6 -0
  81. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  82. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  83. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  85. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/commands/index.d.ts +2 -0
  87. package/dist/types/src/commands/index.d.ts.map +1 -0
  88. package/dist/types/src/commands/trigger/create/index.d.ts +25 -0
  89. package/dist/types/src/commands/trigger/create/index.d.ts.map +1 -0
  90. package/dist/types/src/commands/trigger/create/queue.d.ts +13 -0
  91. package/dist/types/src/commands/trigger/create/queue.d.ts.map +1 -0
  92. package/dist/types/src/commands/trigger/create/subscription.d.ts +15 -0
  93. package/dist/types/src/commands/trigger/create/subscription.d.ts.map +1 -0
  94. package/dist/types/src/commands/trigger/create/timer.d.ts +13 -0
  95. package/dist/types/src/commands/trigger/create/timer.d.ts.map +1 -0
  96. package/dist/types/src/commands/trigger/index.d.ts +57 -0
  97. package/dist/types/src/commands/trigger/index.d.ts.map +1 -0
  98. package/dist/types/src/commands/trigger/list.d.ts +7 -0
  99. package/dist/types/src/commands/trigger/list.d.ts.map +1 -0
  100. package/dist/types/src/commands/trigger/options.d.ts +11 -0
  101. package/dist/types/src/commands/trigger/options.d.ts.map +1 -0
  102. package/dist/types/src/commands/trigger/remove.d.ts +8 -0
  103. package/dist/types/src/commands/trigger/remove.d.ts.map +1 -0
  104. package/dist/types/src/commands/trigger/update/index.d.ts +28 -0
  105. package/dist/types/src/commands/trigger/update/index.d.ts.map +1 -0
  106. package/dist/types/src/commands/trigger/update/queue.d.ts +12 -0
  107. package/dist/types/src/commands/trigger/update/queue.d.ts.map +1 -0
  108. package/dist/types/src/commands/trigger/update/subscription.d.ts +13 -0
  109. package/dist/types/src/commands/trigger/update/subscription.d.ts.map +1 -0
  110. package/dist/types/src/commands/trigger/update/timer.d.ts +11 -0
  111. package/dist/types/src/commands/trigger/update/timer.d.ts.map +1 -0
  112. package/dist/types/src/commands/trigger/util.d.ts +46 -0
  113. package/dist/types/src/commands/trigger/util.d.ts.map +1 -0
  114. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +5 -6
  115. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  116. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +32 -30
  117. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/AutomationPanel/index.d.ts.map +1 -1
  119. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  120. package/dist/types/src/components/FunctionsPanel/index.d.ts.map +1 -1
  121. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
  122. package/dist/types/src/components/FunctionsRegistry/index.d.ts +3 -1
  123. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
  124. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +12 -9
  125. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  126. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  127. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  128. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +8 -7
  129. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  130. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +104 -32
  131. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +3 -4
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +6 -0
  135. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -0
  136. package/dist/types/src/containers/AutomationSettings/index.d.ts +2 -0
  137. package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -0
  138. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts +4 -0
  139. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -0
  140. package/dist/types/src/containers/FunctionsContainer/index.d.ts +2 -0
  141. package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -0
  142. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -0
  143. package/dist/types/src/containers/TriggerSettings/index.d.ts +3 -0
  144. package/dist/types/src/containers/TriggerSettings/index.d.ts.map +1 -0
  145. package/dist/types/src/containers/index.d.ts +5 -0
  146. package/dist/types/src/containers/index.d.ts.map +1 -0
  147. package/dist/types/src/hooks/index.d.ts +0 -1
  148. package/dist/types/src/hooks/index.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +5 -4
  150. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +1 -5
  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/operations/create-trigger-from-template.d.ts +5 -0
  156. package/dist/types/src/operations/create-trigger-from-template.d.ts.map +1 -0
  157. package/dist/types/src/operations/index.d.ts +3 -0
  158. package/dist/types/src/operations/index.d.ts.map +1 -0
  159. package/dist/types/src/plugin.d.ts +4 -0
  160. package/dist/types/src/plugin.d.ts.map +1 -0
  161. package/dist/types/src/testing/test-functions.d.ts +204 -2
  162. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  163. package/dist/types/src/testing.d.ts +2 -0
  164. package/dist/types/src/testing.d.ts.map +1 -0
  165. package/dist/types/src/translations.d.ts +32 -31
  166. package/dist/types/src/translations.d.ts.map +1 -1
  167. package/dist/types/src/types/AutomationOperation.d.ts +19 -0
  168. package/dist/types/src/types/AutomationOperation.d.ts.map +1 -0
  169. package/dist/types/src/types/index.d.ts +1 -0
  170. package/dist/types/src/types/index.d.ts.map +1 -1
  171. package/dist/types/src/types/schema.d.ts +11 -3
  172. package/dist/types/src/types/schema.d.ts.map +1 -1
  173. package/dist/types/tsconfig.tsbuildinfo +1 -1
  174. package/package.json +144 -70
  175. package/src/AutomationPlugin.node.ts +28 -0
  176. package/src/AutomationPlugin.test.ts +27 -0
  177. package/src/AutomationPlugin.tsx +20 -38
  178. package/src/AutomationPlugin.workerd.ts +18 -0
  179. package/src/capabilities/app-graph-builder.ts +59 -80
  180. package/src/capabilities/index.ts +9 -7
  181. package/src/capabilities/layer-specs.ts +231 -0
  182. package/src/capabilities/node.ts +13 -0
  183. package/src/capabilities/operation-handler.ts +16 -0
  184. package/src/capabilities/react-surface.tsx +49 -46
  185. package/src/commands/index.ts +5 -0
  186. package/src/commands/trigger/create/index.ts +14 -0
  187. package/src/commands/trigger/create/queue.ts +86 -0
  188. package/src/commands/trigger/create/subscription.ts +125 -0
  189. package/src/commands/trigger/create/timer.ts +90 -0
  190. package/src/commands/trigger/index.ts +16 -0
  191. package/src/commands/trigger/list.ts +70 -0
  192. package/src/commands/trigger/options.ts +59 -0
  193. package/src/commands/trigger/remove.ts +44 -0
  194. package/src/commands/trigger/update/index.ts +14 -0
  195. package/src/commands/trigger/update/queue.ts +194 -0
  196. package/src/commands/trigger/update/subscription.ts +278 -0
  197. package/src/commands/trigger/update/timer.ts +193 -0
  198. package/src/commands/trigger/util.ts +412 -0
  199. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +15 -8
  200. package/src/components/AutomationPanel/AutomationPanel.tsx +214 -83
  201. package/src/components/FunctionsPanel/FunctionsPanel.tsx +43 -42
  202. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +38 -46
  203. package/src/components/FunctionsRegistry/index.ts +4 -1
  204. package/src/components/TriggerEditor/FunctionInputEditor.tsx +34 -33
  205. package/src/components/TriggerEditor/SpecSelector.tsx +25 -19
  206. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +86 -35
  207. package/src/components/TriggerEditor/TriggerEditor.tsx +88 -47
  208. package/src/components/index.ts +1 -2
  209. package/src/containers/AutomationSettings/AutomationSettings.tsx +31 -0
  210. package/src/containers/AutomationSettings/index.ts +5 -0
  211. package/src/containers/FunctionsContainer/FunctionsContainer.tsx +33 -0
  212. package/src/containers/FunctionsContainer/index.ts +5 -0
  213. package/src/containers/TriggerSettings/TriggerSettings.tsx +48 -0
  214. package/src/containers/TriggerSettings/index.ts +6 -0
  215. package/src/containers/index.ts +9 -0
  216. package/src/hooks/index.ts +1 -1
  217. package/src/hooks/useTriggerRuntimeControls.ts +38 -19
  218. package/src/index.ts +1 -6
  219. package/src/meta.ts +6 -4
  220. package/src/operations/create-trigger-from-template.ts +71 -0
  221. package/src/operations/index.ts +7 -0
  222. package/src/plugin.ts +11 -0
  223. package/src/testing/test-functions.ts +11 -8
  224. package/src/testing.ts +7 -0
  225. package/src/translations.ts +39 -36
  226. package/src/types/AutomationOperation.ts +30 -0
  227. package/src/types/index.ts +2 -0
  228. package/src/types/schema.ts +5 -5
  229. package/dist/lib/browser/AutomationPanel-M4M77L4V.mjs +0 -11
  230. package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs +0 -68
  231. package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs.map +0 -7
  232. package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs +0 -144
  233. package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs.map +0 -7
  234. package/dist/lib/browser/FunctionsPanel-CRW6SJUN.mjs +0 -10
  235. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs +0 -81
  236. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-4MBM6C6A.mjs +0 -100
  238. package/dist/lib/browser/chunk-4MBM6C6A.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-7W6QMY3L.mjs +0 -267
  240. package/dist/lib/browser/chunk-7W6QMY3L.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-CZVA5NMD.mjs +0 -14
  242. package/dist/lib/browser/chunk-CZVA5NMD.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-T6ZESHDY.mjs +0 -191
  245. package/dist/lib/browser/chunk-T6ZESHDY.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-TWWFNOIR.mjs +0 -109
  247. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-XAKZ4ANY.mjs +0 -15
  249. package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-YBPJCY3F.mjs +0 -38
  251. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +0 -7
  252. package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs +0 -113
  253. package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs.map +0 -7
  254. package/dist/lib/browser/hooks/index.mjs +0 -13
  255. package/dist/lib/browser/index.mjs +0 -130
  256. package/dist/lib/browser/index.mjs.map +0 -7
  257. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs +0 -77
  258. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +0 -7
  259. package/dist/lib/browser/meta.json +0 -1
  260. package/dist/lib/browser/react-surface-TKU2EQ5A.mjs +0 -64
  261. package/dist/lib/browser/react-surface-TKU2EQ5A.mjs.map +0 -7
  262. package/dist/lib/browser/types/index.mjs +0 -8
  263. package/dist/lib/node-esm/AutomationPanel-F5CTC6AT.mjs +0 -12
  264. package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs +0 -69
  265. package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs.map +0 -7
  266. package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs +0 -145
  267. package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs.map +0 -7
  268. package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs +0 -11
  269. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs +0 -82
  270. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-3IYSC75Z.mjs +0 -16
  272. package/dist/lib/node-esm/chunk-3IYSC75Z.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-7B6NAAI6.mjs +0 -101
  274. package/dist/lib/node-esm/chunk-7B6NAAI6.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +0 -19
  276. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-CF2SWXPW.mjs +0 -268
  278. package/dist/lib/node-esm/chunk-CF2SWXPW.mjs.map +0 -7
  279. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs +0 -39
  280. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +0 -7
  281. package/dist/lib/node-esm/chunk-F76XVENA.mjs +0 -192
  282. package/dist/lib/node-esm/chunk-F76XVENA.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs +0 -16
  284. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-RVK52XGK.mjs +0 -110
  286. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +0 -7
  287. package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs +0 -114
  288. package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs.map +0 -7
  289. package/dist/lib/node-esm/hooks/index.mjs +0 -14
  290. package/dist/lib/node-esm/index.mjs +0 -131
  291. package/dist/lib/node-esm/index.mjs.map +0 -7
  292. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs +0 -78
  293. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +0 -7
  294. package/dist/lib/node-esm/meta.json +0 -1
  295. package/dist/lib/node-esm/react-surface-7QROSEGH.mjs +0 -65
  296. package/dist/lib/node-esm/react-surface-7QROSEGH.mjs.map +0 -7
  297. package/dist/lib/node-esm/types/index.mjs +0 -9
  298. package/dist/types/src/capabilities/capabilities.d.ts +0 -20
  299. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  300. package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
  301. package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
  302. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  303. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  304. package/dist/types/src/components/AutomationSettings.d.ts +0 -5
  305. package/dist/types/src/components/AutomationSettings.d.ts.map +0 -1
  306. package/dist/types/src/components/FunctionsContainer.d.ts +0 -7
  307. package/dist/types/src/components/FunctionsContainer.d.ts.map +0 -1
  308. package/dist/types/src/components/TriggerSettings.d.ts.map +0 -1
  309. package/dist/types/src/events.d.ts +0 -4
  310. package/dist/types/src/events.d.ts.map +0 -1
  311. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +0 -12
  312. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +0 -1
  313. package/src/capabilities/capabilities.ts +0 -41
  314. package/src/capabilities/compute-runtime.ts +0 -129
  315. package/src/capabilities/intent-resolver.ts +0 -72
  316. package/src/components/AutomationSettings.tsx +0 -30
  317. package/src/components/FunctionsContainer.tsx +0 -36
  318. package/src/components/TriggerSettings.tsx +0 -25
  319. package/src/events.ts +0 -11
  320. package/src/hooks/useComputeRuntimeCallback.ts +0 -68
  321. /package/dist/lib/{browser/AutomationPanel-M4M77L4V.mjs.map → neutral/AutomationPanel-GQCS4EPU.mjs.map} +0 -0
  322. /package/dist/lib/{browser/FunctionsPanel-CRW6SJUN.mjs.map → neutral/AutomationPlugin.mjs.map} +0 -0
  323. /package/dist/lib/{browser/hooks/index.mjs.map → neutral/TriggerSettings-XCHIZPOR.mjs.map} +0 -0
  324. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  325. /package/dist/lib/{node-esm/hooks → neutral/components}/index.mjs.map +0 -0
  326. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  327. /package/dist/lib/{node-esm/AutomationPanel-F5CTC6AT.mjs.map → neutral/meta.mjs.map} +0 -0
  328. /package/dist/lib/{node-esm/FunctionsPanel-RVVCS6VH.mjs.map → neutral/operations/index.mjs.map} +0 -0
  329. /package/dist/types/src/{components → containers/TriggerSettings}/TriggerSettings.d.ts +0 -0
@@ -3,51 +3,65 @@
3
3
  //
4
4
 
5
5
  import * as Array from 'effect/Array';
6
+ import * as Effect from 'effect/Effect';
6
7
  import * as EFn from 'effect/Function';
7
8
  import * as Match from 'effect/Match';
8
9
  import * as Schema from 'effect/Schema';
9
- import React, { useMemo, useState } from 'react';
10
+ import React, { useCallback, useMemo, useState } from 'react';
10
11
 
11
- import { Filter, Obj, Tag } from '@dxos/echo';
12
- import { Function, Script, Trigger } from '@dxos/functions';
13
- import { useTypeOptions } from '@dxos/plugin-space';
12
+ import { useProcessManagerRuntime } from '@dxos/app-framework/ui';
13
+ import { useTypeOptions } from '@dxos/app-toolkit/ui';
14
+ import { type ComputeEnvironment } from '@dxos/client-protocol';
15
+ import { Operation, Script, ServiceResolver, Trigger, TriggerEvent } from '@dxos/compute';
16
+ import { Context } from '@dxos/context';
17
+ import { Filter, Obj, Query, Tag } from '@dxos/echo';
18
+ import { KEY_QUEUE_CURSOR, TriggerDispatcher } from '@dxos/functions-runtime';
19
+ import { FunctionsServiceClient } from '@dxos/functions-runtime/edge';
20
+ import { log } from '@dxos/log';
14
21
  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';
22
+ import { type Space, useObject, useQuery } from '@dxos/react-client/echo';
23
+ import { Clipboard, IconButton, type IconButtonProps, Input, Separator, useTranslation } from '@dxos/react-ui';
24
+ import { Settings } from '@dxos/react-ui-form';
18
25
  import { List } from '@dxos/react-ui-list';
19
- import { ghostHover, mx } from '@dxos/react-ui-theme';
20
- import { Project } from '@dxos/types';
26
+ import { Pipeline } from '@dxos/types';
27
+ import { ghostHover, mx } from '@dxos/ui-theme';
21
28
  import { isNonNullable } from '@dxos/util';
22
29
 
23
- import { meta } from '../../meta';
30
+ import { meta } from '#meta';
31
+
24
32
  import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
25
33
 
26
- const grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';
34
+ const grid = 'grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]';
27
35
 
28
- export type AutomationPanelProps = ThemedClassName<{
36
+ export type AutomationPanelProps = {
29
37
  space: Space;
30
- object?: Obj.Any;
38
+ object?: Obj.Unknown;
31
39
  initialTrigger?: Trigger.Trigger;
32
40
  onDone?: () => void;
33
- }>;
41
+ };
34
42
 
35
43
  // TODO(burdon): Factor out common layout with ViewEditor.
36
- export const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {
44
+ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
37
45
  const { t } = useTranslation(meta.id);
38
46
  const client = useClient();
39
- const functions = useQuery(space, Filter.type(Function.Function));
40
- const triggers = useQuery(space, Filter.type(Trigger.Trigger));
47
+ const processManagerRuntime = useProcessManagerRuntime();
48
+ const [properties] = useObject(space.properties);
49
+ const computeEnvironment = properties.computeEnvironment ?? 'local';
50
+ const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);
51
+ const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
52
+ const triggers = useQuery(
53
+ space.db,
54
+ Query.select(Filter.type(Trigger.Trigger)).debugLabel('plugin-automation.AutomationPanel'),
55
+ );
41
56
  const filteredTriggers = useMemo(() => {
42
57
  return object ? triggers.filter(triggerMatch(object)) : triggers;
43
58
  }, [object, triggers]);
44
- const tags = useQuery(space, Filter.type(Tag.Tag));
59
+ const tags = useQuery(space.db, Filter.type(Tag.Tag));
45
60
  const types = useTypeOptions({
46
- space,
61
+ db: space.db,
47
62
  annotation: {
48
63
  location: ['database', 'runtime'],
49
64
  kind: ['user'],
50
- registered: ['registered'],
51
65
  },
52
66
  });
53
67
 
@@ -72,7 +86,9 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
72
86
 
73
87
  const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
74
88
  if (selected) {
75
- Object.assign(selected, trigger);
89
+ Obj.update(selected, (selected) => {
90
+ Object.assign(selected, trigger);
91
+ });
76
92
  } else {
77
93
  space.db.add(Trigger.make(trigger));
78
94
  }
@@ -87,11 +103,47 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
87
103
  onDone?.();
88
104
  };
89
105
 
106
+ const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {
107
+ if (computeEnvironment === 'disabled') {
108
+ return;
109
+ }
110
+
111
+ if (computeEnvironment === 'local') {
112
+ try {
113
+ await processManagerRuntime.runPromise(
114
+ Effect.gen(function* () {
115
+ const dispatcher = yield* TriggerDispatcher;
116
+ yield* dispatcher.invokeTrigger({
117
+ trigger,
118
+ event: { tick: Date.now() } satisfies TriggerEvent.TimerEvent,
119
+ });
120
+ }).pipe(Effect.provide(ServiceResolver.provide({ space: space.id }, TriggerDispatcher))),
121
+ );
122
+ } catch (error) {
123
+ log.catch(error);
124
+ }
125
+ return;
126
+ }
127
+
128
+ try {
129
+ await functionsServiceClient.forceRunCronTrigger(Context.default(), space.id, trigger.id);
130
+ } catch (error) {
131
+ log.catch(error);
132
+ }
133
+ };
134
+
135
+ const handleResetCursor = async (trigger: Trigger.Trigger) => {
136
+ Obj.update(trigger, (trigger) => {
137
+ Obj.deleteKeys(trigger, KEY_QUEUE_CURSOR);
138
+ });
139
+ await space.db.flush({ indexes: true });
140
+ };
141
+
90
142
  if (trigger) {
91
143
  return (
92
- <ControlItem title={t('trigger editor title')}>
144
+ <Settings.Item title={t('trigger-editor.title')} description={t('trigger-editor.description')}>
93
145
  <TriggerEditor
94
- space={space}
146
+ db={space.db}
95
147
  trigger={trigger}
96
148
  readonlySpec={Boolean(object)}
97
149
  tags={tags}
@@ -99,87 +151,166 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
99
151
  onSave={handleSave}
100
152
  onCancel={handleCancel}
101
153
  />
102
- </ControlItem>
154
+ </Settings.Item>
103
155
  );
104
156
  }
105
157
 
106
158
  return (
107
- <div className={mx(controlItemClasses, classNames)}>
108
- {filteredTriggers.length > 0 && (
109
- <List.Root<Trigger.Trigger>
110
- items={filteredTriggers}
111
- isItem={Schema.is(Trigger.Trigger)}
112
- getId={(field) => field.id}
113
- >
114
- {({ items: filteredTriggers }) => (
115
- <div role='list' className='flex flex-col is-full'>
116
- {filteredTriggers?.map((trigger) => {
117
- const copyAction = getCopyAction(client, trigger);
118
- return (
119
- <List.Item<Trigger.Trigger>
159
+ <Settings.Panel>
160
+ <Clipboard.Provider>
161
+ {filteredTriggers.length > 0 && (
162
+ <List.Root<Trigger.Trigger>
163
+ items={filteredTriggers}
164
+ isItem={Schema.is(Trigger.Trigger)}
165
+ getId={(field) => field.id}
166
+ >
167
+ {({ items: filteredTriggers }) => (
168
+ <div role='list' className='flex flex-col w-full'>
169
+ {filteredTriggers?.map((trigger) => (
170
+ <TriggerListItem
120
171
  key={trigger.id}
121
- item={trigger}
122
- classNames={mx(grid, ghostHover, 'items-center', 'pli-2')}
123
- >
124
- <Input.Root>
125
- <Input.Switch
126
- checked={trigger.enabled}
127
- onCheckedChange={(checked) => (trigger.enabled = checked)}
128
- />
129
- </Input.Root>
130
-
131
- <div className={'flex'}>
132
- <List.ItemTitle
133
- classNames='pli-1 cursor-pointer is-0 shrink truncate'
134
- onClick={() => handleSelect(trigger)}
135
- >
136
- {getFunctionName(functions, trigger) ?? '∅'}
137
- </List.ItemTitle>
138
-
139
- {/* TODO: a better way to expose copy action */}
140
- {copyAction && (
141
- <Clipboard.IconButton
142
- label={t(copyAction.translationKey)}
143
- value={copyAction.contentProvider()}
144
- />
145
- )}
146
- </div>
147
-
148
- <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />
149
- </List.Item>
150
- );
151
- })}
152
- </div>
153
- )}
154
- </List.Root>
155
- )}
156
- {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}
157
- <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />
158
- </div>
172
+ trigger={trigger}
173
+ functions={functions}
174
+ computeEnvironment={computeEnvironment}
175
+ onSelect={handleSelect}
176
+ onDelete={handleDelete}
177
+ onResetCursor={handleResetCursor}
178
+ onForceRun={handleForceRunTrigger}
179
+ />
180
+ ))}
181
+ </div>
182
+ )}
183
+ </List.Root>
184
+ )}
185
+
186
+ {filteredTriggers.length > 0 && <Separator classNames='my-4' />}
187
+ <IconButton icon='ph--plus--regular' label={t('new-trigger.label')} onClick={handleAdd} />
188
+ </Clipboard.Provider>
189
+ </Settings.Panel>
190
+ );
191
+ };
192
+
193
+ const TriggerListItem = ({
194
+ trigger,
195
+ functions,
196
+ computeEnvironment,
197
+ onSelect,
198
+ onDelete,
199
+ onResetCursor,
200
+ onForceRun,
201
+ }: {
202
+ trigger: Trigger.Trigger;
203
+ functions: Operation.PersistentOperation[];
204
+ computeEnvironment: ComputeEnvironment;
205
+ onSelect?: (trigger: Trigger.Trigger) => void;
206
+ onDelete?: (trigger: Trigger.Trigger) => void;
207
+ onResetCursor?: (trigger: Trigger.Trigger) => void;
208
+ onForceRun?: (trigger: Trigger.Trigger) => void;
209
+ }) => {
210
+ const client = useClient();
211
+ const copyAction = getCopyAction(client, trigger);
212
+ const { t } = useTranslation(meta.id);
213
+ const cursor = Obj.getKeys(trigger, KEY_QUEUE_CURSOR).at(0)?.id;
214
+ const [snapshot, updateTrigger] = useObject(trigger);
215
+
216
+ const enabled = snapshot.enabled ?? false;
217
+ const onEnabledChange = (checked: boolean) => {
218
+ updateTrigger((trigger) => {
219
+ trigger.enabled = checked;
220
+ });
221
+ };
222
+
223
+ const handleSelect = useCallback(() => {
224
+ onSelect?.(trigger);
225
+ }, [onSelect, trigger]);
226
+
227
+ const handleDelete = useCallback(() => {
228
+ onDelete?.(trigger);
229
+ }, [onDelete, trigger]);
230
+
231
+ const handleResetCursor = useCallback(() => {
232
+ onResetCursor?.(trigger);
233
+ }, [onResetCursor, trigger]);
234
+
235
+ const handleForceRun = useCallback(() => {
236
+ onForceRun?.(trigger);
237
+ }, [onForceRun, trigger]);
238
+
239
+ const actionProps = useMemo<IconButtonProps | undefined>(() => {
240
+ if (trigger.spec?.kind === 'timer' && onForceRun) {
241
+ return {
242
+ disabled: !enabled || computeEnvironment === 'disabled',
243
+ icon: 'ph--play--regular',
244
+ label: 'Force run',
245
+ onClick: handleForceRun,
246
+ };
247
+ }
248
+
249
+ if (trigger.spec?.kind === 'queue' && onResetCursor) {
250
+ return {
251
+ disabled: !cursor,
252
+ icon: 'ph--arrow-clockwise--regular',
253
+ label: 'Reset cursor',
254
+ onClick: handleResetCursor,
255
+ };
256
+ }
257
+ }, [computeEnvironment, enabled, trigger.spec?.kind, handleForceRun, onResetCursor]);
258
+
259
+ return (
260
+ <List.Item<Obj.Snapshot<Trigger.Trigger>>
261
+ key={trigger.id}
262
+ item={snapshot}
263
+ classNames={mx(grid, ghostHover, 'items-center', 'px-2')}
264
+ >
265
+ <Input.Root>
266
+ <Input.Switch checked={enabled} onCheckedChange={onEnabledChange} />
267
+ </Input.Root>
268
+
269
+ <div className={'flex'}>
270
+ <List.ItemTitle classNames='px-1 cursor-pointer w-0 shrink truncate' onClick={handleSelect}>
271
+ {getFunctionName(functions, trigger) ?? '∅'}
272
+ {cursor && <div className='text-xs text-description truncate ml-4'>Position: {cursor}</div>}
273
+ </List.ItemTitle>
274
+
275
+ {copyAction && (
276
+ <Clipboard.IconButton label={t(copyAction.translationKey)} value={copyAction.contentProvider()} />
277
+ )}
278
+ </div>
279
+
280
+ {actionProps ? <List.ItemIconButton {...actionProps} autoHide={false} /> : <div />}
281
+
282
+ {onDelete && <List.ItemDeleteButton onClick={handleDelete} />}
283
+ </List.Item>
159
284
  );
160
285
  };
161
286
 
162
287
  const getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {
163
288
  if (trigger?.spec?.kind === 'email') {
164
- return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };
289
+ return {
290
+ translationKey: 'trigger copy email' as const,
291
+ contentProvider: () => `${Obj.getDatabase(trigger)!.spaceId}@dxos.network`,
292
+ };
165
293
  }
166
294
 
167
295
  if (trigger?.spec?.kind === 'webhook') {
168
- return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };
296
+ return {
297
+ translationKey: 'trigger copy url' as const,
298
+ contentProvider: () => getWebhookUrl(client, trigger!),
299
+ };
169
300
  }
170
301
 
171
302
  return undefined;
172
303
  };
173
304
 
174
305
  const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
175
- const spaceId = getSpace(trigger)!.id;
306
+ const spaceId = Obj.getDatabase(trigger)!.spaceId;
176
307
  const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);
177
308
  const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');
178
309
  edgeUrl.protocol = isSecure ? 'https' : 'http';
179
310
  return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
180
311
  };
181
312
 
182
- const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {
313
+ const getFunctionName = (functions: Operation.PersistentOperation[], trigger: Trigger.Trigger) => {
183
314
  // TODO(wittjosiah): Truncation should be done in the UI.
184
315
  // Warning that the List component is currently a can of worms.
185
316
  const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;
@@ -189,14 +320,14 @@ const getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigge
189
320
 
190
321
  const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
191
322
  const fn = trigger.function?.target;
192
- if (!Obj.instanceOf(Function.Function, fn)) {
323
+ if (!Obj.instanceOf(Operation.PersistentOperation, fn)) {
193
324
  return false;
194
325
  }
195
326
 
196
327
  return fn.source?.target === script;
197
328
  };
198
329
 
199
- const projectMatch = (project: Project.Project) => {
330
+ const projectMatch = (project: Pipeline.Pipeline) => {
200
331
  const viewQueries = EFn.pipe(
201
332
  project.columns,
202
333
  Array.map((column) => column.view.target),
@@ -216,14 +347,14 @@ const projectMatch = (project: Project.Project) => {
216
347
  };
217
348
  };
218
349
 
219
- const triggerMatch = Match.type<Obj.Any>().pipe(
350
+ const triggerMatch = Match.type<Obj.Unknown>().pipe(
220
351
  Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),
221
352
  Match.when(
222
353
  (obj) => Obj.instanceOf(Script.Script, obj),
223
354
  (obj) => scriptMatch(obj),
224
355
  ),
225
356
  Match.when(
226
- (obj) => Obj.instanceOf(Project.Project, obj),
357
+ (obj) => Obj.instanceOf(Pipeline.Pipeline, obj),
227
358
  (obj) => projectMatch(obj),
228
359
  ),
229
360
  Match.orElse((_obj) => () => true),
@@ -5,20 +5,18 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import React, { useCallback, useMemo } from 'react';
7
7
 
8
- import { LayoutAction, createIntent } from '@dxos/app-framework';
9
- import { useIntentDispatcher } from '@dxos/app-framework/react';
10
- import { Obj } from '@dxos/echo';
11
- import { Function, Script } from '@dxos/functions';
12
- import { SpaceAction } 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 { controlItemClasses } from '@dxos/react-ui-form';
8
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { LayoutOperation, getObjectPathFromObject } from '@dxos/app-toolkit';
10
+ import { Operation, Script } from '@dxos/compute';
11
+ import { Filter } from '@dxos/echo';
12
+ import { SpaceOperation } from '@dxos/plugin-space';
13
+ import { type Space, useQuery } from '@dxos/react-client/echo';
14
+ import { IconButton, useTranslation } from '@dxos/react-ui';
15
+ import { Settings } from '@dxos/react-ui-form';
16
16
  import { List } from '@dxos/react-ui-list';
17
- import { ghostHover, mx } from '@dxos/react-ui-theme';
17
+ import { ghostHover, mx } from '@dxos/ui-theme';
18
18
 
19
- import { meta } from '../../meta';
20
-
21
- const grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';
19
+ import { meta } from '#meta';
22
20
 
23
21
  export type FunctionsPanelProps = {
24
22
  space: Space;
@@ -26,9 +24,9 @@ export type FunctionsPanelProps = {
26
24
 
27
25
  export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
28
26
  const { t } = useTranslation(meta.id);
29
- const functions = useQuery(space, Filter.type(Function.Function));
30
- const scripts = useQuery(space, Filter.type(Script.Script));
31
- const { dispatchPromise: dispatch } = useIntentDispatcher();
27
+ const functions = useQuery(space.db, Filter.type(Operation.PersistentOperation));
28
+ const scripts = useQuery(space.db, Filter.type(Script.Script));
29
+ const { invokePromise } = useOperationInvoker();
32
30
 
33
31
  const functionToScriptMap = useMemo(
34
32
  () =>
@@ -49,7 +47,7 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
49
47
  );
50
48
 
51
49
  const getScriptName = useCallback(
52
- (func: Function.Function) => {
50
+ (func: Operation.PersistentOperation) => {
53
51
  const script = functionToScriptMap[func.id];
54
52
  return script?.name;
55
53
  },
@@ -57,50 +55,55 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
57
55
  );
58
56
 
59
57
  const handleGoToScript = useCallback(
60
- (func: Function.Function) => {
58
+ (func: Operation.PersistentOperation) => {
61
59
  const script = functionToScriptMap[func.id];
62
60
  if (script) {
63
- void dispatch(
64
- createIntent(LayoutAction.Open, {
65
- part: 'main',
66
- subject: [Obj.getDXN(script).toString()],
67
- }),
68
- );
61
+ void invokePromise(LayoutOperation.Open, { subject: [getObjectPathFromObject(script)] });
69
62
  }
70
63
  },
71
- [functionToScriptMap, dispatch],
64
+ [functionToScriptMap, invokePromise],
72
65
  );
73
66
 
74
67
  const handleDelete = useCallback(
75
- (func: Function.Function) => dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [func] })),
76
- [dispatch],
68
+ (func: Operation.PersistentOperation) => invokePromise(SpaceOperation.RemoveObjects, { objects: [func] }),
69
+ [invokePromise],
77
70
  );
78
71
 
79
72
  return (
80
- <div role='none' className={mx(controlItemClasses)}>
73
+ <Settings.Panel>
81
74
  {functions.length > 0 && (
82
- <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>
75
+ <List.Root<Operation.PersistentOperation>
76
+ items={functions}
77
+ isItem={Schema.is(Operation.PersistentOperation)}
78
+ getId={(func) => func.id}
79
+ >
83
80
  {({ items }) => (
84
- <div role='list' className='flex flex-col is-full'>
81
+ <div role='list' className='flex flex-col w-full'>
85
82
  {items?.map((func) => (
86
- <List.Item<Function.Function>
83
+ <List.Item<Operation.PersistentOperation>
87
84
  key={func.id}
88
85
  item={func}
89
- classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}
86
+ classNames={mx(
87
+ 'grid grid-cols-[1fr_min-content_auto] min-h-[2.5rem] min-h-[3rem] px-2 items-center',
88
+ ghostHover,
89
+ )}
90
90
  >
91
91
  <div className='flex flex-col truncate'>
92
92
  <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>
93
- {getScriptName(func) && (
94
- <div className='text-xs text-description truncate'>{getScriptName(func)}</div>
95
- )}
93
+ {getScriptName(func) && <p className='text-xs text-description truncate'>{getScriptName(func)}</p>}
96
94
  </div>
97
- {functionToScriptMap[func.id] && (
98
- <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>
99
- )}
95
+ {(functionToScriptMap[func.id] && (
96
+ <IconButton
97
+ icon='ph--arrow-square-out--regular'
98
+ iconOnly
99
+ label={t('show-source-button.label')}
100
+ onClick={() => handleGoToScript(func)}
101
+ />
102
+ )) || <div />}
100
103
  <IconButton
101
- iconOnly
102
104
  icon='ph--trash--regular'
103
- label={t('delete function button label')}
105
+ iconOnly
106
+ label={t('delete-function-button.label')}
104
107
  onClick={() => handleDelete(func)}
105
108
  />
106
109
  </List.Item>
@@ -109,8 +112,6 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
109
112
  )}
110
113
  </List.Root>
111
114
  )}
112
-
113
- {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}
114
- </div>
115
+ </Settings.Panel>
115
116
  );
116
117
  };