@dxos/plugin-automation 0.8.4-main.7ace549 → 0.8.4-main.8360d9e660

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 (326) hide show
  1. package/dist/lib/browser/AutomationPanel-IGLIQY2N.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs +37 -0
  3. package/dist/lib/browser/AutomationSettings-XGJGVBDD.mjs.map +7 -0
  4. package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs +43 -0
  5. package/dist/lib/browser/FunctionsContainer-R4ZMYSFJ.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-CRW6SJUN.mjs → FunctionsPanel-NMA4RYJL.mjs} +3 -3
  7. package/dist/lib/browser/FunctionsRegistry-TMKAEG5E.mjs +10 -0
  8. package/dist/lib/browser/TriggerSettings-GW5OEM2G.mjs +11 -0
  9. package/dist/lib/browser/app-graph-builder-74ILZP25.mjs +83 -0
  10. package/dist/lib/browser/app-graph-builder-74ILZP25.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-5WMYSXEH.mjs +83 -0
  12. package/dist/lib/browser/chunk-5WMYSXEH.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-75XLBFAG.mjs +97 -0
  14. package/dist/lib/browser/chunk-75XLBFAG.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BWEKRPFJ.mjs +294 -0
  16. package/dist/lib/browser/chunk-BWEKRPFJ.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-LZQFZO3B.mjs → chunk-EL64ZPPN.mjs} +2 -2
  18. package/dist/lib/browser/chunk-EL64ZPPN.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-FUVAC5EC.mjs +96 -0
  20. package/dist/lib/browser/chunk-FUVAC5EC.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-LHJEQVX5.mjs +8 -0
  22. package/dist/lib/browser/chunk-LHJEQVX5.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-O23LHDEX.mjs +269 -0
  24. package/dist/lib/browser/chunk-O23LHDEX.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-PUYY7B5F.mjs +31 -0
  26. package/dist/lib/browser/chunk-PUYY7B5F.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-ZBEMNWNY.mjs +93 -0
  28. package/dist/lib/browser/chunk-ZBEMNWNY.mjs.map +7 -0
  29. package/dist/lib/browser/cli/index.mjs +1115 -0
  30. package/dist/lib/browser/cli/index.mjs.map +7 -0
  31. package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs +130 -0
  32. package/dist/lib/browser/compute-runtime-I3I2BIRE.mjs.map +7 -0
  33. package/dist/lib/browser/hooks/index.mjs +3 -3
  34. package/dist/lib/browser/index.mjs +55 -62
  35. package/dist/lib/browser/index.mjs.map +4 -4
  36. package/dist/lib/browser/meta.json +1 -1
  37. package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs +84 -0
  38. package/dist/lib/browser/operation-resolver-NGN4BEWN.mjs.map +7 -0
  39. package/dist/lib/browser/react-surface-SXDIM3RM.mjs +65 -0
  40. package/dist/lib/browser/react-surface-SXDIM3RM.mjs.map +7 -0
  41. package/dist/lib/browser/types/index.mjs +10 -4
  42. package/dist/lib/node-esm/{AutomationPanel-F5CTC6AT.mjs → AutomationPanel-O2BCQA7P.mjs} +4 -4
  43. package/dist/lib/node-esm/AutomationPanel-O2BCQA7P.mjs.map +7 -0
  44. package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs +38 -0
  45. package/dist/lib/node-esm/AutomationSettings-W52ZO2XI.mjs.map +7 -0
  46. package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs +44 -0
  47. package/dist/lib/node-esm/FunctionsContainer-GYRPQZM7.mjs.map +7 -0
  48. package/dist/lib/node-esm/{FunctionsPanel-RVVCS6VH.mjs → FunctionsPanel-DCXXLSVP.mjs} +3 -3
  49. package/dist/lib/node-esm/FunctionsPanel-DCXXLSVP.mjs.map +7 -0
  50. package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs +11 -0
  51. package/dist/lib/node-esm/FunctionsRegistry-7WCHC64E.mjs.map +7 -0
  52. package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs +12 -0
  53. package/dist/lib/node-esm/TriggerSettings-2GKFPECW.mjs.map +7 -0
  54. package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs +84 -0
  55. package/dist/lib/node-esm/app-graph-builder-VDXPOWCH.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-6JVB3IHW.mjs +97 -0
  57. package/dist/lib/node-esm/chunk-6JVB3IHW.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs +32 -0
  59. package/dist/lib/node-esm/chunk-BNWZ2NNI.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-FPXVLTEY.mjs +270 -0
  61. package/dist/lib/node-esm/chunk-FPXVLTEY.mjs.map +7 -0
  62. package/dist/lib/node-esm/chunk-K7T2MVB7.mjs +98 -0
  63. package/dist/lib/node-esm/chunk-K7T2MVB7.mjs.map +7 -0
  64. package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs +295 -0
  65. package/dist/lib/node-esm/chunk-Q5JSKD6Z.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-V3VUE2NR.mjs +10 -0
  67. package/dist/lib/node-esm/chunk-V3VUE2NR.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-CEVIVRTY.mjs → chunk-WC5AT7B3.mjs} +2 -2
  69. package/dist/lib/node-esm/chunk-WC5AT7B3.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-XCFO2IXT.mjs +84 -0
  71. package/dist/lib/node-esm/chunk-XCFO2IXT.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-7B6NAAI6.mjs → chunk-XQO3HK62.mjs} +30 -37
  73. package/dist/lib/node-esm/chunk-XQO3HK62.mjs.map +7 -0
  74. package/dist/lib/node-esm/cli/index.mjs +1116 -0
  75. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  76. package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs +131 -0
  77. package/dist/lib/node-esm/compute-runtime-7HCSIYFG.mjs.map +7 -0
  78. package/dist/lib/node-esm/hooks/index.mjs +3 -3
  79. package/dist/lib/node-esm/index.mjs +55 -62
  80. package/dist/lib/node-esm/index.mjs.map +4 -4
  81. package/dist/lib/node-esm/meta.json +1 -1
  82. package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs +85 -0
  83. package/dist/lib/node-esm/operation-resolver-ANGACQZG.mjs.map +7 -0
  84. package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs +66 -0
  85. package/dist/lib/node-esm/react-surface-QVLVDEVW.mjs.map +7 -0
  86. package/dist/lib/node-esm/types/index.mjs +10 -4
  87. package/dist/types/src/AutomationPlugin.d.ts +2 -1
  88. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  90. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  92. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts +6 -0
  94. package/dist/types/src/capabilities/compute-runtime/compute-runtime.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/compute-runtime/index.d.ts +3 -0
  96. package/dist/types/src/capabilities/compute-runtime/index.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/index.d.ts +4 -5
  98. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  102. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  106. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  107. package/dist/types/src/cli/commands/index.d.ts +2 -0
  108. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  109. package/dist/types/src/cli/commands/trigger/create/index.d.ts +25 -0
  110. package/dist/types/src/cli/commands/trigger/create/index.d.ts.map +1 -0
  111. package/dist/types/src/cli/commands/trigger/create/queue.d.ts +13 -0
  112. package/dist/types/src/cli/commands/trigger/create/queue.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts +15 -0
  114. package/dist/types/src/cli/commands/trigger/create/subscription.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/trigger/create/timer.d.ts +13 -0
  116. package/dist/types/src/cli/commands/trigger/create/timer.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/trigger/index.d.ts +57 -0
  118. package/dist/types/src/cli/commands/trigger/index.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/trigger/list.d.ts +7 -0
  120. package/dist/types/src/cli/commands/trigger/list.d.ts.map +1 -0
  121. package/dist/types/src/cli/commands/trigger/options.d.ts +11 -0
  122. package/dist/types/src/cli/commands/trigger/options.d.ts.map +1 -0
  123. package/dist/types/src/cli/commands/trigger/remove.d.ts +8 -0
  124. package/dist/types/src/cli/commands/trigger/remove.d.ts.map +1 -0
  125. package/dist/types/src/cli/commands/trigger/update/index.d.ts +28 -0
  126. package/dist/types/src/cli/commands/trigger/update/index.d.ts.map +1 -0
  127. package/dist/types/src/cli/commands/trigger/update/queue.d.ts +12 -0
  128. package/dist/types/src/cli/commands/trigger/update/queue.d.ts.map +1 -0
  129. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts +13 -0
  130. package/dist/types/src/cli/commands/trigger/update/subscription.d.ts.map +1 -0
  131. package/dist/types/src/cli/commands/trigger/update/timer.d.ts +11 -0
  132. package/dist/types/src/cli/commands/trigger/update/timer.d.ts.map +1 -0
  133. package/dist/types/src/cli/commands/trigger/util.d.ts +46 -0
  134. package/dist/types/src/cli/commands/trigger/util.d.ts.map +1 -0
  135. package/dist/types/src/cli/index.d.ts +2 -0
  136. package/dist/types/src/cli/index.d.ts.map +1 -0
  137. package/dist/types/src/cli/plugin.d.ts +3 -0
  138. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  139. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +4 -5
  140. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  141. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +2 -0
  142. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  144. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -1
  145. package/dist/types/src/components/FunctionsRegistry/index.d.ts +3 -1
  146. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -1
  147. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +10 -7
  148. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  149. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  150. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  151. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +7 -6
  152. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  153. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +72 -2
  154. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/index.d.ts +3 -4
  156. package/dist/types/src/components/index.d.ts.map +1 -1
  157. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts +4 -0
  158. package/dist/types/src/containers/AutomationSettings/AutomationSettings.d.ts.map +1 -0
  159. package/dist/types/src/containers/AutomationSettings/index.d.ts +3 -0
  160. package/dist/types/src/containers/AutomationSettings/index.d.ts.map +1 -0
  161. package/dist/types/src/{components → containers/FunctionsContainer}/FunctionsContainer.d.ts +0 -1
  162. package/dist/types/src/containers/FunctionsContainer/FunctionsContainer.d.ts.map +1 -0
  163. package/dist/types/src/containers/FunctionsContainer/index.d.ts +3 -0
  164. package/dist/types/src/containers/FunctionsContainer/index.d.ts.map +1 -0
  165. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts +6 -0
  166. package/dist/types/src/containers/TriggerSettings/TriggerSettings.d.ts.map +1 -0
  167. package/dist/types/src/containers/TriggerSettings/index.d.ts +3 -0
  168. package/dist/types/src/containers/TriggerSettings/index.d.ts.map +1 -0
  169. package/dist/types/src/containers/index.d.ts +5 -0
  170. package/dist/types/src/containers/index.d.ts.map +1 -0
  171. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +6 -6
  172. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -1
  173. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +4 -3
  174. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -1
  175. package/dist/types/src/index.d.ts +1 -2
  176. package/dist/types/src/index.d.ts.map +1 -1
  177. package/dist/types/src/meta.d.ts +2 -2
  178. package/dist/types/src/meta.d.ts.map +1 -1
  179. package/dist/types/src/testing/test-functions.d.ts +202 -2
  180. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  181. package/dist/types/src/translations.d.ts +2 -0
  182. package/dist/types/src/translations.d.ts.map +1 -1
  183. package/dist/types/src/types/capabilities.d.ts +23 -0
  184. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  185. package/dist/types/src/types/events.d.ts +5 -0
  186. package/dist/types/src/types/events.d.ts.map +1 -0
  187. package/dist/types/src/types/index.d.ts +2 -0
  188. package/dist/types/src/types/index.d.ts.map +1 -1
  189. package/dist/types/src/types/schema.d.ts +32 -3
  190. package/dist/types/src/types/schema.d.ts.map +1 -1
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/package.json +67 -50
  193. package/src/AutomationPlugin.tsx +14 -33
  194. package/src/capabilities/app-graph-builder/app-graph-builder.ts +73 -0
  195. package/src/capabilities/app-graph-builder/index.ts +7 -0
  196. package/src/capabilities/compute-runtime/compute-runtime.ts +155 -0
  197. package/src/capabilities/compute-runtime/index.ts +7 -0
  198. package/src/capabilities/index.ts +4 -8
  199. package/src/capabilities/operation-resolver/index.ts +7 -0
  200. package/src/capabilities/operation-resolver/operation-resolver.ts +80 -0
  201. package/src/capabilities/react-surface/index.ts +7 -0
  202. package/src/capabilities/react-surface/react-surface.tsx +57 -0
  203. package/src/cli/commands/index.ts +5 -0
  204. package/src/cli/commands/trigger/create/index.ts +14 -0
  205. package/src/cli/commands/trigger/create/queue.ts +89 -0
  206. package/src/cli/commands/trigger/create/subscription.ts +128 -0
  207. package/src/cli/commands/trigger/create/timer.ts +93 -0
  208. package/src/cli/commands/trigger/index.ts +16 -0
  209. package/src/cli/commands/trigger/list.ts +67 -0
  210. package/src/cli/commands/trigger/options.ts +59 -0
  211. package/src/cli/commands/trigger/remove.ts +45 -0
  212. package/src/cli/commands/trigger/update/index.ts +14 -0
  213. package/src/cli/commands/trigger/update/queue.ts +195 -0
  214. package/src/cli/commands/trigger/update/subscription.ts +278 -0
  215. package/src/cli/commands/trigger/update/timer.ts +193 -0
  216. package/src/cli/commands/trigger/util.ts +404 -0
  217. package/src/cli/index.ts +5 -0
  218. package/src/cli/plugin.ts +24 -0
  219. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +3 -3
  220. package/src/components/AutomationPanel/AutomationPanel.tsx +154 -65
  221. package/src/components/FunctionsPanel/FunctionsPanel.tsx +17 -24
  222. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +17 -34
  223. package/src/components/FunctionsRegistry/index.ts +4 -1
  224. package/src/components/TriggerEditor/FunctionInputEditor.tsx +32 -31
  225. package/src/components/TriggerEditor/SpecSelector.tsx +9 -7
  226. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +73 -28
  227. package/src/components/TriggerEditor/TriggerEditor.tsx +89 -44
  228. package/src/components/index.ts +1 -2
  229. package/src/{components → containers/AutomationSettings}/AutomationSettings.tsx +9 -12
  230. package/src/containers/AutomationSettings/index.ts +7 -0
  231. package/src/{components → containers/FunctionsContainer}/FunctionsContainer.tsx +10 -13
  232. package/src/containers/FunctionsContainer/index.ts +7 -0
  233. package/src/containers/TriggerSettings/TriggerSettings.tsx +26 -0
  234. package/src/containers/TriggerSettings/index.ts +6 -0
  235. package/src/containers/index.ts +9 -0
  236. package/src/hooks/useComputeRuntimeCallback.ts +10 -11
  237. package/src/hooks/useTriggerRuntimeControls.ts +28 -14
  238. package/src/index.ts +1 -2
  239. package/src/meta.ts +3 -3
  240. package/src/testing/test-functions.ts +5 -5
  241. package/src/translations.ts +4 -0
  242. package/src/{capabilities → types}/capabilities.ts +11 -7
  243. package/src/types/events.ts +11 -0
  244. package/src/types/index.ts +2 -0
  245. package/src/types/schema.ts +24 -3
  246. package/dist/lib/browser/AutomationPanel-M4M77L4V.mjs +0 -11
  247. package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs +0 -68
  248. package/dist/lib/browser/AutomationSettings-4HCI6KJR.mjs.map +0 -7
  249. package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs +0 -144
  250. package/dist/lib/browser/FunctionsContainer-CDVBRQCT.mjs.map +0 -7
  251. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs +0 -81
  252. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-4MBM6C6A.mjs +0 -100
  254. package/dist/lib/browser/chunk-4MBM6C6A.mjs.map +0 -7
  255. package/dist/lib/browser/chunk-7W6QMY3L.mjs +0 -267
  256. package/dist/lib/browser/chunk-7W6QMY3L.mjs.map +0 -7
  257. package/dist/lib/browser/chunk-CZVA5NMD.mjs +0 -14
  258. package/dist/lib/browser/chunk-CZVA5NMD.mjs.map +0 -7
  259. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-T6ZESHDY.mjs +0 -191
  261. package/dist/lib/browser/chunk-T6ZESHDY.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-TWWFNOIR.mjs +0 -109
  263. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-XAKZ4ANY.mjs +0 -15
  265. package/dist/lib/browser/chunk-XAKZ4ANY.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-YBPJCY3F.mjs +0 -38
  267. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +0 -7
  268. package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs +0 -113
  269. package/dist/lib/browser/compute-runtime-B4XJVY4Y.mjs.map +0 -7
  270. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs +0 -77
  271. package/dist/lib/browser/intent-resolver-5HR7M7T6.mjs.map +0 -7
  272. package/dist/lib/browser/react-surface-TKU2EQ5A.mjs +0 -64
  273. package/dist/lib/browser/react-surface-TKU2EQ5A.mjs.map +0 -7
  274. package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs +0 -69
  275. package/dist/lib/node-esm/AutomationSettings-BQLJIFRT.mjs.map +0 -7
  276. package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs +0 -145
  277. package/dist/lib/node-esm/FunctionsContainer-ZHHJPQAZ.mjs.map +0 -7
  278. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs +0 -82
  279. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +0 -7
  280. package/dist/lib/node-esm/chunk-3IYSC75Z.mjs +0 -16
  281. package/dist/lib/node-esm/chunk-3IYSC75Z.mjs.map +0 -7
  282. package/dist/lib/node-esm/chunk-7B6NAAI6.mjs.map +0 -7
  283. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-CF2SWXPW.mjs +0 -268
  285. package/dist/lib/node-esm/chunk-CF2SWXPW.mjs.map +0 -7
  286. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs +0 -39
  287. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-F76XVENA.mjs +0 -192
  289. package/dist/lib/node-esm/chunk-F76XVENA.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs +0 -16
  291. package/dist/lib/node-esm/chunk-KB7NFEYY.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-RVK52XGK.mjs +0 -110
  293. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +0 -7
  294. package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs +0 -114
  295. package/dist/lib/node-esm/compute-runtime-JUWTQXOV.mjs.map +0 -7
  296. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs +0 -78
  297. package/dist/lib/node-esm/intent-resolver-KDRYB5BC.mjs.map +0 -7
  298. package/dist/lib/node-esm/react-surface-7QROSEGH.mjs +0 -65
  299. package/dist/lib/node-esm/react-surface-7QROSEGH.mjs.map +0 -7
  300. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  301. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  302. package/dist/types/src/capabilities/capabilities.d.ts +0 -20
  303. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  304. package/dist/types/src/capabilities/compute-runtime.d.ts +0 -5
  305. package/dist/types/src/capabilities/compute-runtime.d.ts.map +0 -1
  306. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  307. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  308. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  309. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  310. package/dist/types/src/components/AutomationSettings.d.ts +0 -5
  311. package/dist/types/src/components/AutomationSettings.d.ts.map +0 -1
  312. package/dist/types/src/components/FunctionsContainer.d.ts.map +0 -1
  313. package/dist/types/src/components/TriggerSettings.d.ts +0 -6
  314. package/dist/types/src/components/TriggerSettings.d.ts.map +0 -1
  315. package/dist/types/src/events.d.ts +0 -4
  316. package/dist/types/src/events.d.ts.map +0 -1
  317. package/src/capabilities/app-graph-builder.ts +0 -87
  318. package/src/capabilities/compute-runtime.ts +0 -129
  319. package/src/capabilities/intent-resolver.ts +0 -72
  320. package/src/capabilities/react-surface.tsx +0 -56
  321. package/src/components/TriggerSettings.tsx +0 -25
  322. package/src/events.ts +0 -11
  323. /package/dist/lib/browser/{AutomationPanel-M4M77L4V.mjs.map → AutomationPanel-IGLIQY2N.mjs.map} +0 -0
  324. /package/dist/lib/browser/{FunctionsPanel-CRW6SJUN.mjs.map → FunctionsPanel-NMA4RYJL.mjs.map} +0 -0
  325. /package/dist/lib/{node-esm/AutomationPanel-F5CTC6AT.mjs.map → browser/FunctionsRegistry-TMKAEG5E.mjs.map} +0 -0
  326. /package/dist/lib/{node-esm/FunctionsPanel-RVVCS6VH.mjs.map → browser/TriggerSettings-GW5OEM2G.mjs.map} +0 -0
@@ -6,48 +6,50 @@ import * as Array from 'effect/Array';
6
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
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, type IconButtonProps, 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 { Project } from '@dxos/types';
21
+ import { Pipeline } from '@dxos/types';
22
+ import { ghostHover, mx } from '@dxos/ui-theme';
21
23
  import { isNonNullable } from '@dxos/util';
22
24
 
23
25
  import { meta } from '../../meta';
24
26
  import { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';
25
27
 
26
- const grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';
28
+ const grid = 'grid grid-cols-[40px_1fr_32px_32px] min-h-[2.5rem]';
27
29
 
28
- export type AutomationPanelProps = ThemedClassName<{
30
+ export type AutomationPanelProps = {
29
31
  space: Space;
30
- object?: Obj.Any;
32
+ object?: Obj.Unknown;
31
33
  initialTrigger?: Trigger.Trigger;
32
34
  onDone?: () => void;
33
- }>;
35
+ };
34
36
 
35
37
  // TODO(burdon): Factor out common layout with ViewEditor.
36
- export const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {
38
+ export const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {
37
39
  const { t } = useTranslation(meta.id);
38
40
  const client = useClient();
39
- const functions = useQuery(space, Filter.type(Function.Function));
40
- const triggers = useQuery(space, Filter.type(Trigger.Trigger));
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));
41
44
  const filteredTriggers = useMemo(() => {
42
45
  return object ? triggers.filter(triggerMatch(object)) : triggers;
43
46
  }, [object, triggers]);
44
- const tags = useQuery(space, Filter.type(Tag.Tag));
47
+ const tags = useQuery(space.db, Filter.type(Tag.Tag));
45
48
  const types = useTypeOptions({
46
49
  space,
47
50
  annotation: {
48
51
  location: ['database', 'runtime'],
49
52
  kind: ['user'],
50
- registered: ['registered'],
51
53
  },
52
54
  });
53
55
 
@@ -72,7 +74,9 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
72
74
 
73
75
  const handleSave: TriggerEditorProps['onSave'] = (trigger) => {
74
76
  if (selected) {
75
- Object.assign(selected, trigger);
77
+ Obj.change(selected, (mutable) => {
78
+ Object.assign(mutable, trigger);
79
+ });
76
80
  } else {
77
81
  space.db.add(Trigger.make(trigger));
78
82
  }
@@ -87,11 +91,22 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
87
91
  onDone?.();
88
92
  };
89
93
 
94
+ const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {
95
+ await functionsServiceClient.forceRunCronTrigger(space.id, trigger.id);
96
+ };
97
+
98
+ const handleResetCursor = async (trigger: Trigger.Trigger) => {
99
+ Obj.change(trigger, (t) => {
100
+ Obj.deleteKeys(t, KEY_QUEUE_CURSOR);
101
+ });
102
+ await space.db.flush({ indexes: true });
103
+ };
104
+
90
105
  if (trigger) {
91
106
  return (
92
- <ControlItem title={t('trigger editor title')}>
107
+ <Settings.Item title={t('trigger editor title')} description={t('trigger editor description')}>
93
108
  <TriggerEditor
94
- space={space}
109
+ db={space.db}
95
110
  trigger={trigger}
96
111
  readonlySpec={Boolean(object)}
97
112
  tags={tags}
@@ -99,12 +114,12 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
99
114
  onSave={handleSave}
100
115
  onCancel={handleCancel}
101
116
  />
102
- </ControlItem>
117
+ </Settings.Item>
103
118
  );
104
119
  }
105
120
 
106
121
  return (
107
- <div className={mx(controlItemClasses, classNames)}>
122
+ <Settings.Container>
108
123
  {filteredTriggers.length > 0 && (
109
124
  <List.Root<Trigger.Trigger>
110
125
  items={filteredTriggers}
@@ -112,67 +127,141 @@ export const AutomationPanel = ({ classNames, space, object, initialTrigger, onD
112
127
  getId={(field) => field.id}
113
128
  >
114
129
  {({ 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>
120
- 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
- })}
130
+ <div role='list' className='flex flex-col w-full'>
131
+ {filteredTriggers?.map((trigger) => (
132
+ <TriggerListItem
133
+ key={trigger.id}
134
+ trigger={trigger}
135
+ functions={functions}
136
+ onSelect={handleSelect}
137
+ onDelete={handleDelete}
138
+ onResetCursor={handleResetCursor}
139
+ onForceRun={handleForceRunTrigger}
140
+ />
141
+ ))}
152
142
  </div>
153
143
  )}
154
144
  </List.Root>
155
145
  )}
156
- {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}
146
+
147
+ {filteredTriggers.length > 0 && <Separator classNames='my-4' />}
157
148
  <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />
158
- </div>
149
+ </Settings.Container>
150
+ );
151
+ };
152
+
153
+ const TriggerListItem = ({
154
+ trigger,
155
+ functions,
156
+ onSelect,
157
+ onDelete,
158
+ onResetCursor,
159
+ onForceRun,
160
+ }: {
161
+ trigger: Trigger.Trigger;
162
+ functions: Function.Function[];
163
+ onSelect?: (trigger: Trigger.Trigger) => void;
164
+ onDelete?: (trigger: Trigger.Trigger) => void;
165
+ onResetCursor?: (trigger: Trigger.Trigger) => void;
166
+ onForceRun?: (trigger: Trigger.Trigger) => void;
167
+ }) => {
168
+ const client = useClient();
169
+ const copyAction = getCopyAction(client, trigger);
170
+ const { t } = useTranslation(meta.id);
171
+ const cursor = Obj.getKeys(trigger, KEY_QUEUE_CURSOR).at(0)?.id;
172
+ const [snapshot, updateTrigger] = useObject(trigger);
173
+
174
+ const enabled = snapshot.enabled ?? false;
175
+ const onEnabledChange = (checked: boolean) => {
176
+ updateTrigger((trigger) => {
177
+ trigger.enabled = checked;
178
+ });
179
+ };
180
+
181
+ const handleSelect = useCallback(() => {
182
+ onSelect?.(trigger);
183
+ }, [onSelect, trigger]);
184
+
185
+ const handleDelete = useCallback(() => {
186
+ onDelete?.(trigger);
187
+ }, [onDelete, trigger]);
188
+
189
+ const handleResetCursor = useCallback(() => {
190
+ onResetCursor?.(trigger);
191
+ }, [onResetCursor, trigger]);
192
+
193
+ const handleForceRun = useCallback(() => {
194
+ onForceRun?.(trigger);
195
+ }, [onForceRun, trigger]);
196
+
197
+ const actionProps = useMemo<IconButtonProps | undefined>(() => {
198
+ if (trigger.spec?.kind === 'timer' && onForceRun) {
199
+ return {
200
+ disabled: !enabled || trigger.spec?.kind !== 'timer',
201
+ icon: 'ph--play--regular',
202
+ label: 'Force run',
203
+ onClick: handleForceRun,
204
+ };
205
+ }
206
+
207
+ if (trigger.spec?.kind === 'queue' && onResetCursor) {
208
+ return {
209
+ disabled: !cursor,
210
+ icon: 'ph--arrow-clockwise--regular',
211
+ label: 'Reset cursor',
212
+ onClick: handleResetCursor,
213
+ };
214
+ }
215
+ }, [enabled, trigger.spec?.kind, handleForceRun]);
216
+
217
+ return (
218
+ <List.Item<Obj.Snapshot<Trigger.Trigger>>
219
+ key={trigger.id}
220
+ item={snapshot}
221
+ classNames={mx(grid, ghostHover, 'items-center', 'px-2')}
222
+ >
223
+ <Input.Root>
224
+ <Input.Switch checked={enabled} onCheckedChange={onEnabledChange} />
225
+ </Input.Root>
226
+
227
+ <div className={'flex'}>
228
+ <List.ItemTitle classNames='px-1 cursor-pointer w-0 shrink truncate' onClick={handleSelect}>
229
+ {getFunctionName(functions, trigger) ?? '∅'}
230
+ {cursor && <div className='text-xs text-description truncate ml-4'>Position: {cursor}</div>}
231
+ </List.ItemTitle>
232
+
233
+ {copyAction && (
234
+ <Clipboard.IconButton label={t(copyAction.translationKey)} value={copyAction.contentProvider()} />
235
+ )}
236
+ </div>
237
+
238
+ {actionProps ? <List.ItemIconButton {...actionProps} autoHide={false} /> : <div />}
239
+
240
+ {onDelete && <List.ItemDeleteButton onClick={handleDelete} />}
241
+ </List.Item>
159
242
  );
160
243
  };
161
244
 
162
245
  const getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {
163
246
  if (trigger?.spec?.kind === 'email') {
164
- return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };
247
+ return {
248
+ translationKey: 'trigger copy email' as const,
249
+ contentProvider: () => `${Obj.getDatabase(trigger)!.spaceId}@dxos.network`,
250
+ };
165
251
  }
166
252
 
167
253
  if (trigger?.spec?.kind === 'webhook') {
168
- return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };
254
+ return {
255
+ translationKey: 'trigger copy url' as const,
256
+ contentProvider: () => getWebhookUrl(client, trigger!),
257
+ };
169
258
  }
170
259
 
171
260
  return undefined;
172
261
  };
173
262
 
174
263
  const getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {
175
- const spaceId = getSpace(trigger)!.id;
264
+ const spaceId = Obj.getDatabase(trigger)!.spaceId;
176
265
  const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);
177
266
  const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');
178
267
  edgeUrl.protocol = isSecure ? 'https' : 'http';
@@ -196,7 +285,7 @@ const scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {
196
285
  return fn.source?.target === script;
197
286
  };
198
287
 
199
- const projectMatch = (project: Project.Project) => {
288
+ const projectMatch = (project: Pipeline.Pipeline) => {
200
289
  const viewQueries = EFn.pipe(
201
290
  project.columns,
202
291
  Array.map((column) => column.view.target),
@@ -216,14 +305,14 @@ const projectMatch = (project: Project.Project) => {
216
305
  };
217
306
  };
218
307
 
219
- const triggerMatch = Match.type<Obj.Any>().pipe(
308
+ const triggerMatch = Match.type<Obj.Unknown>().pipe(
220
309
  Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),
221
310
  Match.when(
222
311
  (obj) => Obj.instanceOf(Script.Script, obj),
223
312
  (obj) => scriptMatch(obj),
224
313
  ),
225
314
  Match.when(
226
- (obj) => Obj.instanceOf(Project.Project, obj),
315
+ (obj) => Obj.instanceOf(Pipeline.Pipeline, obj),
227
316
  (obj) => projectMatch(obj),
228
317
  ),
229
318
  Match.orElse((_obj) => () => true),
@@ -5,30 +5,28 @@
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';
8
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { LayoutOperation, getObjectPathFromObject } from '@dxos/app-toolkit';
10
10
  import { Obj } from '@dxos/echo';
11
11
  import { Function, Script } from '@dxos/functions';
12
- import { SpaceAction } from '@dxos/plugin-space/types';
12
+ import { SpaceOperation } from '@dxos/plugin-space/types';
13
13
  import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
14
14
  import { Button, IconButton, useTranslation } from '@dxos/react-ui';
15
- import { controlItemClasses } from '@dxos/react-ui-form';
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
19
  import { meta } from '../../meta';
20
20
 
21
- const grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';
22
-
23
21
  export type FunctionsPanelProps = {
24
22
  space: Space;
25
23
  };
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(Function.Function));
28
+ const scripts = useQuery(space.db, Filter.type(Script.Script));
29
+ const { invokePromise } = useOperationInvoker();
32
30
 
33
31
  const functionToScriptMap = useMemo(
34
32
  () =>
@@ -60,33 +58,28 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
60
58
  (func: Function.Function) => {
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: Function.Function) => invokePromise(SpaceOperation.RemoveObjects, { objects: [func] }),
69
+ [invokePromise],
77
70
  );
78
71
 
79
72
  return (
80
- <div role='none' className={mx(controlItemClasses)}>
73
+ <Settings.Container>
81
74
  {functions.length > 0 && (
82
75
  <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>
83
76
  {({ items }) => (
84
- <div role='list' className='flex flex-col is-full'>
77
+ <div role='list' className='flex flex-col w-full'>
85
78
  {items?.map((func) => (
86
79
  <List.Item<Function.Function>
87
80
  key={func.id}
88
81
  item={func}
89
- classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}
82
+ classNames={mx('grid grid-cols-[1fr_auto] min-h-[2.5rem] min-h-[3rem] px-2 items-center', ghostHover)}
90
83
  >
91
84
  <div className='flex flex-col truncate'>
92
85
  <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>
@@ -110,7 +103,7 @@ export const FunctionsPanel = ({ space }: FunctionsPanelProps) => {
110
103
  </List.Root>
111
104
  )}
112
105
 
113
- {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}
114
- </div>
106
+ {functions.length === 0 && <div className='text-center py-4 text-description'>{t('no functions found')}</div>}
107
+ </Settings.Container>
115
108
  );
116
109
  };
@@ -2,9 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as Array from 'effect/Array';
6
- import * as EffectFunction from 'effect/Function';
7
- import * as Order from 'effect/Order';
8
5
  import * as Schema from 'effect/Schema';
9
6
  import { useState } from 'react';
10
7
  import React, { useCallback } from 'react';
@@ -13,15 +10,14 @@ import { Function } from '@dxos/functions';
13
10
  import { getDeployedFunctions } from '@dxos/functions-runtime/edge';
14
11
  import { useClient } from '@dxos/react-client';
15
12
  import { Filter, Query, type Space, useQuery } from '@dxos/react-client/echo';
16
- import { useAsyncEffect } from '@dxos/react-ui';
17
- import { IconButton, useTranslation } from '@dxos/react-ui';
18
- import { controlItemClasses } from '@dxos/react-ui-form';
13
+ import { IconButton, useAsyncEffect, useTranslation } from '@dxos/react-ui';
14
+ import { Settings } from '@dxos/react-ui-form';
19
15
  import { List } from '@dxos/react-ui-list';
20
- import { ghostHover, mx } from '@dxos/react-ui-theme';
16
+ import { ghostHover, mx } from '@dxos/ui-theme';
21
17
 
22
18
  import { meta } from '../../meta';
23
19
 
24
- const grid = 'grid grid-cols-[1fr_1fr_auto] min-bs-[2.5rem]';
20
+ const grid = 'grid grid-cols-[1fr_1fr_auto] min-h-[2.5rem]';
25
21
 
26
22
  type FunctionsRegistryProps = {
27
23
  space: Space;
@@ -33,7 +29,7 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
33
29
  const [functions, setFunctions] = useState<Function.Function[]>([]);
34
30
  const { t } = useTranslation(meta.id);
35
31
 
36
- const dbFunctions = useQuery(space, Filter.type(Function.Function));
32
+ const dbFunctions = useQuery(space.db, Filter.type(Function.Function));
37
33
 
38
34
  const state = (func: Function.Function) => {
39
35
  const dbFunction = dbFunctions.find((f) => f.key === func.key);
@@ -48,24 +44,15 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
48
44
 
49
45
  useAsyncEffect(async () => {
50
46
  setLoading(true);
51
- const functions = await getDeployedFunctions(client);
47
+ const functions = await getDeployedFunctions(client, true);
52
48
  setFunctions(functions);
53
49
  setLoading(false);
54
50
  }, []);
55
51
 
56
- const dedupedFunctions = EffectFunction.pipe(
57
- functions,
58
- Array.filter((_) => _.key !== undefined),
59
- Array.sort(Order.reverse(Order.mapInput(Order.string, (_: Function.Function) => _.updated ?? ''))),
60
- Array.dedupeWith((self, that) => self.key === that.key),
61
- Array.sort(Order.mapInput(Order.string, (_: Function.Function) => _.key ?? '')),
62
- );
63
-
64
52
  const hanleImportOrUpdate = useCallback(
65
53
  async (func: Function.Function) => {
66
- const {
67
- objects: [existingFunc],
68
- } = await space.db.query(Query.type(Function.Function, { key: func.key })).run();
54
+ const functions = await space.db.query(Query.type(Function.Function, { key: func.key })).run();
55
+ const [existingFunc] = functions;
69
56
  if (!existingFunc) {
70
57
  space.db.add(func);
71
58
  return;
@@ -76,20 +63,16 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
76
63
  );
77
64
 
78
65
  return (
79
- <div role='none' className={mx(controlItemClasses)}>
80
- {dedupedFunctions.length > 0 && (
81
- <List.Root<Function.Function>
82
- items={dedupedFunctions}
83
- isItem={Schema.is(Function.Function)}
84
- getId={(func) => func.id}
85
- >
66
+ <Settings.Container>
67
+ {functions.length > 0 && (
68
+ <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>
86
69
  {({ items }) => (
87
- <div role='list' className='flex flex-col is-full'>
70
+ <div role='list' className='flex flex-col w-full'>
88
71
  {items?.map((func) => (
89
72
  <List.Item<Function.Function>
90
73
  key={func.id}
91
74
  item={func}
92
- classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}
75
+ classNames={mx(grid, ghostHover, 'items-center', 'px-2', 'min-h-[3rem]')}
93
76
  >
94
77
  <div className='flex flex-col truncate'>
95
78
  <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>
@@ -118,10 +101,10 @@ export const FunctionsRegistry = ({ space }: FunctionsRegistryProps) => {
118
101
  </List.Root>
119
102
  )}
120
103
 
121
- {dedupedFunctions.length === 0 && !loading && (
122
- <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>
104
+ {functions.length === 0 && !loading && (
105
+ <div className='text-center py-4 text-gray-500'>{t('no functions found')}</div>
123
106
  )}
124
- {loading && <div className='text-center plb-4 text-gray-500'>{t('loading functions')}</div>}
125
- </div>
107
+ {loading && <div className='text-center py-4 text-gray-500'>{t('loading functions')}</div>}
108
+ </Settings.Container>
126
109
  );
127
110
  };
@@ -2,4 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export { FunctionsRegistry } from './FunctionsRegistry';
5
+ import { FunctionsRegistry } from './FunctionsRegistry';
6
+
7
+ export { FunctionsRegistry };
8
+ export default FunctionsRegistry;
@@ -2,29 +2,26 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import type * as SchemaAST from 'effect/SchemaAST';
5
6
  import React, { useCallback, useMemo } from 'react';
6
7
 
7
- import { Ref, Type } from '@dxos/echo';
8
+ import { type Database, JsonSchema, Obj, Ref } from '@dxos/echo';
8
9
  import { type JsonPath } from '@dxos/echo/internal';
9
10
  import { type Function } from '@dxos/functions';
10
- import { useOnTransition } from '@dxos/react-ui';
11
- import { Form, type FormInputStateProps, type QueryRefOptions, useFormValues } from '@dxos/react-ui-form';
11
+ import { useOnTransition, useTranslation } from '@dxos/react-ui';
12
+ import { Form, type FormFieldStateProps, type FormRootProps, useFormValues } from '@dxos/react-ui-form';
13
+
14
+ import { meta } from '../../meta';
12
15
 
13
16
  export type FunctionInputEditorProps = {
17
+ type: SchemaAST.AST;
14
18
  functions: Function.Function[];
15
- onQueryRefOptions: QueryRefOptions;
16
- } & FormInputStateProps;
19
+ db?: Database.Database;
20
+ } & FormFieldStateProps;
17
21
 
18
- /**
19
- * Editor component for function input parameters.
20
- */
21
- export const FunctionInputEditor = ({
22
- functions,
23
- getValue,
24
- onValueChange,
25
- onQueryRefOptions,
26
- }: FunctionInputEditorProps) => {
27
- const selectedFunctionValue = useFormValues(['function' as JsonPath]);
22
+ export const FunctionInputEditor = ({ type, functions, db, getValue, onValueChange }: FunctionInputEditorProps) => {
23
+ const { t } = useTranslation(meta.id);
24
+ const selectedFunctionValue = useFormValues(FunctionInputEditor.displayName, ['function' as JsonPath]);
28
25
  const selectedFunctionId = useMemo(() => {
29
26
  if (Ref.isRef(selectedFunctionValue)) {
30
27
  return selectedFunctionValue.dxn.toString().split('dxn:echo:@:').at(1);
@@ -47,20 +44,22 @@ export const FunctionInputEditor = ({
47
44
  return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
48
45
  },
49
46
  (currValue) => currValue !== undefined,
50
- () => onValueChange('object', {}),
47
+ () => onValueChange(type, {}),
51
48
  );
52
49
 
53
50
  const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);
54
- const effectSchema = useMemo(() => (inputSchema ? Type.toEffectSchema(inputSchema) : undefined), [inputSchema]);
51
+ const effectSchema = useMemo(() => (inputSchema ? JsonSchema.toEffectSchema(inputSchema) : undefined), [inputSchema]);
55
52
  const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;
53
+ const defaultValues = useMemo(() => {
54
+ const raw = getValue() ?? {};
55
+ return Obj.isObject(raw) ? { ...Obj.getSnapshot(raw) } : { ...raw };
56
+ }, [getValue]);
56
57
 
57
- const values = useMemo(() => getValue() ?? {}, [getValue]);
58
-
59
- const handleValuesChanged = useCallback(
60
- (values: any) => {
61
- onValueChange('object', values);
58
+ const handleValuesChanged = useCallback<NonNullable<FormRootProps['onValuesChanged']>>(
59
+ (values) => {
60
+ onValueChange(type, values);
62
61
  },
63
- [onValueChange],
62
+ [type, onValueChange],
64
63
  );
65
64
 
66
65
  if (selectedFunction === undefined || effectSchema === undefined || propertyCount === 0) {
@@ -69,16 +68,18 @@ export const FunctionInputEditor = ({
69
68
 
70
69
  return (
71
70
  <>
72
- <h3 className='text-md'>Function parameters</h3>
73
- {/* TODO(ZaymonFC): Try using <FormFields /> internal component for this nesting.
74
- This would allow errors to flow up to the root context. */}
75
- <Form
71
+ <Form.Label label={t('function parameters label')} asChild />
72
+ <Form.Root
73
+ key={selectedFunction.id}
76
74
  schema={effectSchema}
77
- values={values}
75
+ defaultValues={defaultValues}
76
+ db={db}
78
77
  onValuesChanged={handleValuesChanged}
79
- onQueryRefOptions={onQueryRefOptions}
80
- outerSpacing={false}
81
- />
78
+ >
79
+ <Form.FieldSet />
80
+ </Form.Root>
82
81
  </>
83
82
  );
84
83
  };
84
+
85
+ FunctionInputEditor.displayName = 'AutomationTrigger.FunctionInputEditor';