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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/lib/browser/AutomationPanel-WVLTR65T.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-LOCSJ4XL.mjs +68 -0
  3. package/dist/lib/browser/AutomationSettings-LOCSJ4XL.mjs.map +7 -0
  4. package/dist/lib/browser/FunctionsContainer-CQRS5IQN.mjs +145 -0
  5. package/dist/lib/browser/FunctionsContainer-CQRS5IQN.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-CRW6SJUN.mjs} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-W7LLC6XW.mjs} +13 -12
  8. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-5Q2XVI36.mjs +100 -0
  10. package/dist/lib/browser/chunk-5Q2XVI36.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-6FCNJOBO.mjs +15 -0
  12. package/dist/lib/browser/chunk-6FCNJOBO.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-ABZVRMU7.mjs +14 -0
  14. package/dist/lib/browser/chunk-ABZVRMU7.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BPRH3NBB.mjs +204 -0
  16. package/dist/lib/browser/chunk-BPRH3NBB.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
  18. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-TWWFNOIR.mjs} +30 -15
  20. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-WAZEZHJI.mjs +270 -0
  22. package/dist/lib/browser/chunk-WAZEZHJI.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-YBPJCY3F.mjs} +3 -3
  24. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
  25. package/dist/lib/browser/compute-runtime-GPT45IDG.mjs +115 -0
  26. package/dist/lib/browser/compute-runtime-GPT45IDG.mjs.map +7 -0
  27. package/dist/lib/browser/hooks/index.mjs +13 -0
  28. package/dist/lib/browser/index.mjs +49 -19
  29. package/dist/lib/browser/index.mjs.map +4 -4
  30. package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-MJ7IDWCD.mjs} +17 -14
  31. package/dist/lib/browser/intent-resolver-MJ7IDWCD.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-FF5YP324.mjs} +20 -20
  34. package/dist/lib/browser/react-surface-FF5YP324.mjs.map +7 -0
  35. package/dist/lib/browser/types/index.mjs +2 -2
  36. package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-PKWGKR7X.mjs} +4 -4
  37. package/dist/lib/node-esm/AutomationSettings-V5GZEOOQ.mjs +69 -0
  38. package/dist/lib/node-esm/AutomationSettings-V5GZEOOQ.mjs.map +7 -0
  39. package/dist/lib/node-esm/FunctionsContainer-5BBSN6IG.mjs +146 -0
  40. package/dist/lib/node-esm/FunctionsContainer-5BBSN6IG.mjs.map +7 -0
  41. package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-RVVCS6VH.mjs} +3 -3
  42. package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs.map +7 -0
  43. package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-SLQOO7GH.mjs} +13 -12
  44. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-267XBACB.mjs +101 -0
  46. package/dist/lib/node-esm/chunk-267XBACB.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-6RH5OXPG.mjs +16 -0
  48. package/dist/lib/node-esm/chunk-6RH5OXPG.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +19 -0
  50. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-ECJKIUBO.mjs} +3 -3
  52. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-FOK5AUNF.mjs +16 -0
  54. package/dist/lib/node-esm/chunk-FOK5AUNF.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-JVPWGVIV.mjs +205 -0
  56. package/dist/lib/node-esm/chunk-JVPWGVIV.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-Q7KY3LVQ.mjs} +104 -64
  58. package/dist/lib/node-esm/chunk-Q7KY3LVQ.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-RVK52XGK.mjs} +30 -15
  60. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +7 -0
  61. package/dist/lib/node-esm/compute-runtime-SODV3TDU.mjs +116 -0
  62. package/dist/lib/node-esm/compute-runtime-SODV3TDU.mjs.map +7 -0
  63. package/dist/lib/node-esm/hooks/index.mjs +14 -0
  64. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  65. package/dist/lib/node-esm/index.mjs +49 -19
  66. package/dist/lib/node-esm/index.mjs.map +4 -4
  67. package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-NOBCKCF6.mjs} +17 -14
  68. package/dist/lib/node-esm/intent-resolver-NOBCKCF6.mjs.map +7 -0
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-OQIMKKTP.mjs} +20 -20
  71. package/dist/lib/node-esm/react-surface-OQIMKKTP.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +2 -2
  73. package/dist/types/src/AutomationPlugin.d.ts +1 -1
  74. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  76. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/capabilities.d.ts +21 -0
  78. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  80. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/index.d.ts +5 -3
  82. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  84. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  86. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  87. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -5
  88. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  89. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +49 -4
  90. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  91. package/dist/types/src/components/AutomationSettings.d.ts +5 -0
  92. package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
  93. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  94. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  95. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  96. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  97. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  98. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  99. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +10 -8
  100. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  101. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  102. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  103. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +9 -6
  104. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  105. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +117 -4
  106. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/TriggerSettings.d.ts +6 -0
  108. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
  109. package/dist/types/src/components/index.d.ts +2 -2
  110. package/dist/types/src/components/index.d.ts.map +1 -1
  111. package/dist/types/src/events.d.ts +4 -0
  112. package/dist/types/src/events.d.ts.map +1 -0
  113. package/dist/types/src/hooks/index.d.ts +3 -0
  114. package/dist/types/src/hooks/index.d.ts.map +1 -0
  115. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +13 -0
  116. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  117. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
  118. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
  119. package/dist/types/src/index.d.ts +3 -0
  120. package/dist/types/src/index.d.ts.map +1 -1
  121. package/dist/types/src/meta.d.ts +0 -1
  122. package/dist/types/src/meta.d.ts.map +1 -1
  123. package/dist/types/src/testing/test-functions.d.ts +2 -3
  124. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  125. package/dist/types/src/translations.d.ts +6 -0
  126. package/dist/types/src/translations.d.ts.map +1 -1
  127. package/dist/types/src/types/schema.d.ts +1 -1
  128. package/dist/types/src/types/schema.d.ts.map +1 -1
  129. package/dist/types/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +63 -38
  131. package/src/AutomationPlugin.tsx +37 -31
  132. package/src/capabilities/app-graph-builder.ts +16 -15
  133. package/src/capabilities/capabilities.ts +42 -0
  134. package/src/capabilities/compute-runtime.ts +129 -0
  135. package/src/capabilities/index.ts +3 -0
  136. package/src/capabilities/intent-resolver.ts +20 -15
  137. package/src/capabilities/react-surface.tsx +15 -15
  138. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +16 -17
  139. package/src/components/AutomationPanel/AutomationPanel.tsx +127 -54
  140. package/src/components/AutomationSettings.tsx +30 -0
  141. package/src/components/FunctionsContainer.tsx +18 -13
  142. package/src/components/FunctionsPanel/FunctionsPanel.tsx +35 -16
  143. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +126 -0
  144. package/src/components/FunctionsRegistry/index.ts +5 -0
  145. package/src/components/TriggerEditor/FunctionInputEditor.tsx +40 -24
  146. package/src/components/TriggerEditor/SpecSelector.tsx +29 -21
  147. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +78 -32
  148. package/src/components/TriggerEditor/TriggerEditor.tsx +86 -41
  149. package/src/components/TriggerSettings.tsx +25 -0
  150. package/src/components/index.ts +1 -1
  151. package/src/events.ts +11 -0
  152. package/src/hooks/index.ts +6 -0
  153. package/src/hooks/useComputeRuntimeCallback.ts +68 -0
  154. package/src/hooks/useTriggerRuntimeControls.ts +53 -0
  155. package/src/index.ts +3 -0
  156. package/src/meta.ts +6 -5
  157. package/src/testing/test-functions.ts +3 -3
  158. package/src/translations.ts +9 -0
  159. package/src/types/schema.ts +1 -1
  160. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
  161. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
  162. package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
  163. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs +0 -39
  164. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
  165. package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
  167. package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-ERTIGJYE.mjs +0 -147
  169. package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-FSJZXTS2.mjs +0 -230
  171. package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
  173. package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
  175. package/dist/lib/browser/chunk-LYJVTIVD.mjs.map +0 -7
  176. package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
  177. package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
  178. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
  179. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
  180. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs +0 -40
  181. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
  182. package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
  183. package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs +0 -148
  185. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
  187. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
  188. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
  189. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs +0 -16
  190. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
  191. package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
  192. package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
  193. package/dist/lib/node-esm/react-surface-3PNW7NDW.mjs.map +0 -7
  194. package/dist/types/src/components/AutomationContainer.d.ts +0 -5
  195. package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
  196. package/src/components/AutomationContainer.tsx +0 -30
  197. /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-WVLTR65T.mjs.map} +0 -0
  198. /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-CRW6SJUN.mjs.map} +0 -0
  199. /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
  200. /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-PKWGKR7X.mjs.map} +0 -0
@@ -0,0 +1,53 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Filter } from '@dxos/echo';
8
+ import { Trigger } from '@dxos/functions';
9
+ import { TriggerDispatcher } from '@dxos/functions-runtime';
10
+ import { type Space, useQuery } from '@dxos/react-client/echo';
11
+ import { useAsyncState } from '@dxos/react-ui';
12
+
13
+ import { useComputeRuntimeCallback } from './useComputeRuntimeCallback';
14
+
15
+ interface TriggerRuntimeControls {
16
+ triggers: Trigger.Trigger[];
17
+ isRunning: boolean;
18
+ start: () => void;
19
+ stop: () => void;
20
+ }
21
+
22
+ export const useTriggerRuntimeControls = (space: Space | undefined): TriggerRuntimeControls => {
23
+ const triggers = useQuery(space, Filter.type(Trigger.Trigger));
24
+
25
+ const [isRunningState, setIsRunningState] = useAsyncState(
26
+ useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))),
27
+ );
28
+
29
+ const start = useComputeRuntimeCallback(
30
+ space,
31
+ Effect.fnUntraced(function* () {
32
+ const dispatcher = yield* TriggerDispatcher;
33
+ yield* dispatcher.start();
34
+ setIsRunningState(true);
35
+ }),
36
+ );
37
+
38
+ const stop = useComputeRuntimeCallback(
39
+ space,
40
+ Effect.fnUntraced(function* () {
41
+ const dispatcher = yield* TriggerDispatcher;
42
+ yield* dispatcher.stop();
43
+ setIsRunningState(false);
44
+ }),
45
+ );
46
+
47
+ return {
48
+ triggers,
49
+ isRunning: isRunningState ?? false,
50
+ start: () => void start(),
51
+ stop: () => void stop(),
52
+ };
53
+ };
package/src/index.ts CHANGED
@@ -2,7 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ export { AutomationCapabilities } from './capabilities';
5
6
  export * from './components';
6
7
  export * from './meta';
8
+ export * from './events';
9
+ export * from './hooks';
7
10
 
8
11
  export * from './AutomationPlugin';
package/src/meta.ts CHANGED
@@ -3,14 +3,15 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const AUTOMATION_PLUGIN = 'dxos.org/plugin/automation';
6
+ import { trim } from '@dxos/util';
8
7
 
9
8
  export const meta: PluginMeta = {
10
- id: AUTOMATION_PLUGIN,
9
+ id: 'dxos.org/plugin/automation',
11
10
  name: 'Automation',
12
- description:
13
- 'The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.',
11
+ description: trim`
12
+ Workflow automation engine that triggers custom actions based on object events and conditions.
13
+ Create automated pipelines that respond to changes and streamline repetitive tasks.
14
+ `,
14
15
  icon: 'ph--robot--regular',
15
16
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-automation',
16
17
  };
@@ -2,9 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
- import { ContactType } from '@dxos/client/testing';
7
+ import { TestSchema } from '@dxos/client/testing';
8
8
  import { Type } from '@dxos/echo';
9
9
 
10
10
  export const functions = [
@@ -35,7 +35,7 @@ export const functions = [
35
35
  version: '0.0.1',
36
36
  inputSchema: Type.toJsonSchema(
37
37
  Schema.Struct({
38
- contact: Type.Ref(ContactType).annotations({ title: 'Contact' }),
38
+ contact: Type.Ref(TestSchema.ContactType).annotations({ title: 'Contact' }),
39
39
  }),
40
40
  ),
41
41
  },
@@ -16,12 +16,21 @@ export const translations = [
16
16
  'automation verbose label': 'Manage automations',
17
17
  'automation description': 'You can manage all the triggers which automate your space here.',
18
18
 
19
+ 'runtime label': 'Enable Local Runtime',
20
+ 'runtime description':
21
+ 'This will start a trigger dispatcher locally for this space to run triggers on your device while Composer is running.',
22
+
19
23
  'functions panel label': 'Functions',
20
24
  'functions verbose label': 'Manage deployed functions',
25
+ 'functions registry verbose label': 'Functions registry',
26
+ 'functions registry description': 'Import functions from the registry',
21
27
  'functions description': 'You can manage all the functions deployed from your space on EDGE here.',
22
28
  'function copy id': 'Copy Function ID',
23
29
  'no functions found': 'No functions found',
24
30
  'go to function source button label': 'Show function source',
31
+ 'delete function button label': 'Delete function',
32
+
33
+ 'function parameters label': 'Function parameters',
25
34
 
26
35
  'trigger editor title': 'Configure Trigger',
27
36
  'new trigger label': 'Add Trigger',
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { SpaceSchema } from '@dxos/react-client/echo';
8
8
 
@@ -1,38 +0,0 @@
1
- import {
2
- AutomationPanel
3
- } from "./chunk-ERTIGJYE.mjs";
4
- import "./chunk-FSJZXTS2.mjs";
5
- import {
6
- AUTOMATION_PLUGIN
7
- } from "./chunk-GW5U2DGT.mjs";
8
-
9
- // src/components/AutomationContainer.tsx
10
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
11
- import React from "react";
12
- import { useTranslation } from "@dxos/react-ui";
13
- import { ControlSection, ControlPage } from "@dxos/react-ui-form";
14
- import { StackItem } from "@dxos/react-ui-stack";
15
- var AutomationContainer = (props) => {
16
- var _effect = _useSignals();
17
- try {
18
- const { t } = useTranslation(AUTOMATION_PLUGIN);
19
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
20
- classNames: "block overflow-y-auto"
21
- }, /* @__PURE__ */ React.createElement(ControlPage, null, /* @__PURE__ */ React.createElement(ControlSection, {
22
- title: t("automation verbose label", {
23
- ns: AUTOMATION_PLUGIN
24
- }),
25
- description: t("automation description", {
26
- ns: AUTOMATION_PLUGIN
27
- })
28
- }, /* @__PURE__ */ React.createElement(AutomationPanel, props))));
29
- } finally {
30
- _effect.f();
31
- }
32
- };
33
- var AutomationContainer_default = AutomationContainer;
34
- export {
35
- AutomationContainer,
36
- AutomationContainer_default as default
37
- };
38
- //# sourceMappingURL=AutomationContainer-VZNV2ZQF.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/AutomationContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlSection, ControlPage } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { AutomationPanel, type AutomationPanelProps } from './AutomationPanel';\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport const AutomationContainer = (props: AutomationPanelProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n return (\n <StackItem.Content classNames='block overflow-y-auto'>\n <ControlPage>\n <ControlSection\n title={t('automation verbose label', { ns: AUTOMATION_PLUGIN })}\n description={t('automation description', { ns: AUTOMATION_PLUGIN })}\n >\n <AutomationPanel {...props} />\n </ControlSection>\n </ControlPage>\n </StackItem.Content>\n );\n};\n\nexport default AutomationContainer;\n"],
5
- "mappings": ";;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,sBAAsB;AAC/B,SAASC,gBAAgBC,mBAAmB;AAC5C,SAASC,iBAAiB;AAKnB,IAAMC,sBAAsB,CAACC,UAAAA;;;AAClC,UAAM,EAAEC,EAAC,IAAKC,eAAeC,iBAAAA;AAC7B,WACE,sBAAA,cAACC,UAAUC,SAAO;MAACC,YAAW;OAC5B,sBAAA,cAACC,aAAAA,MACC,sBAAA,cAACC,gBAAAA;MACCC,OAAOR,EAAE,4BAA4B;QAAES,IAAIP;MAAkB,CAAA;MAC7DQ,aAAaV,EAAE,0BAA0B;QAAES,IAAIP;MAAkB,CAAA;OAEjE,sBAAA,cAACS,iBAAoBZ,KAAAA,CAAAA,CAAAA,CAAAA;;;;AAK/B;AAEA,IAAA,8BAAeD;",
6
- "names": ["React", "useTranslation", "ControlSection", "ControlPage", "StackItem", "AutomationContainer", "props", "t", "useTranslation", "AUTOMATION_PLUGIN", "StackItem", "Content", "classNames", "ControlPage", "ControlSection", "title", "ns", "description", "AutomationPanel"]
7
- }
@@ -1,11 +0,0 @@
1
- import {
2
- AutomationPanel,
3
- AutomationPanel_default
4
- } from "./chunk-ERTIGJYE.mjs";
5
- import "./chunk-FSJZXTS2.mjs";
6
- import "./chunk-GW5U2DGT.mjs";
7
- export {
8
- AutomationPanel,
9
- AutomationPanel_default as default
10
- };
11
- //# sourceMappingURL=AutomationPanel-ZWA6GOFY.mjs.map
@@ -1,39 +0,0 @@
1
- import {
2
- FunctionsPanel
3
- } from "./chunk-LYJVTIVD.mjs";
4
- import {
5
- AUTOMATION_PLUGIN
6
- } from "./chunk-GW5U2DGT.mjs";
7
-
8
- // src/components/FunctionsContainer.tsx
9
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
10
- import React from "react";
11
- import { useTranslation } from "@dxos/react-ui";
12
- import { ControlPage, ControlSection } from "@dxos/react-ui-form";
13
- import { StackItem } from "@dxos/react-ui-stack";
14
- var FunctionsContainer = ({ space }) => {
15
- var _effect = _useSignals();
16
- try {
17
- const { t } = useTranslation(AUTOMATION_PLUGIN);
18
- return /* @__PURE__ */ React.createElement(StackItem.Content, {
19
- classNames: "block overflow-y-auto"
20
- }, /* @__PURE__ */ React.createElement(ControlPage, null, /* @__PURE__ */ React.createElement(ControlSection, {
21
- title: t("functions verbose label", {
22
- ns: AUTOMATION_PLUGIN
23
- }),
24
- description: t("functions description", {
25
- ns: AUTOMATION_PLUGIN
26
- })
27
- }, /* @__PURE__ */ React.createElement(FunctionsPanel, {
28
- space
29
- }))));
30
- } finally {
31
- _effect.f();
32
- }
33
- };
34
- var FunctionsContainer_default = FunctionsContainer;
35
- export {
36
- FunctionsContainer,
37
- FunctionsContainer_default as default
38
- };
39
- //# sourceMappingURL=FunctionsContainer-IOB333TX.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/FunctionsContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlPage, ControlSection } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { FunctionsPanel } from './FunctionsPanel';\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport const FunctionsContainer = ({ space }: { space: Space }) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n return (\n <StackItem.Content classNames='block overflow-y-auto'>\n <ControlPage>\n <ControlSection\n title={t('functions verbose label', { ns: AUTOMATION_PLUGIN })}\n description={t('functions description', { ns: AUTOMATION_PLUGIN })}\n >\n <FunctionsPanel space={space} />\n </ControlSection>\n </ControlPage>\n </StackItem.Content>\n );\n};\n\nexport default FunctionsContainer;\n"],
5
- "mappings": ";;;;;;;;;AAIA,OAAOA,WAAW;AAGlB,SAASC,sBAAsB;AAC/B,SAASC,aAAaC,sBAAsB;AAC5C,SAASC,iBAAiB;AAKnB,IAAMC,qBAAqB,CAAC,EAAEC,MAAK,MAAoB;;;AAC5D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,iBAAAA;AAC7B,WACE,sBAAA,cAACC,UAAUC,SAAO;MAACC,YAAW;OAC5B,sBAAA,cAACC,aAAAA,MACC,sBAAA,cAACC,gBAAAA;MACCC,OAAOR,EAAE,2BAA2B;QAAES,IAAIP;MAAkB,CAAA;MAC5DQ,aAAaV,EAAE,yBAAyB;QAAES,IAAIP;MAAkB,CAAA;OAEhE,sBAAA,cAACS,gBAAAA;MAAeZ;;;;;AAK1B;AAEA,IAAA,6BAAeD;",
6
- "names": ["React", "useTranslation", "ControlPage", "ControlSection", "StackItem", "FunctionsContainer", "space", "t", "useTranslation", "AUTOMATION_PLUGIN", "StackItem", "Content", "classNames", "ControlPage", "ControlSection", "title", "ns", "description", "FunctionsPanel"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { ScriptType } from '@dxos/functions';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension } from '@dxos/plugin-graph';\nimport { SPACE_PLUGIN } from '@dxos/plugin-space';\n\nimport { meta } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/space-settings-automation`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.type === `${SPACE_PLUGIN}/settings` ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: `automation-${node.id}`,\n type: `${meta.id}/space-settings-automation`,\n data: `${meta.id}/space-settings-automation`,\n properties: {\n label: ['automation panel label', { ns: meta.id }],\n icon: 'ph--lightning--regular',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/space-settings-functions`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.type === `${SPACE_PLUGIN}/settings` ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: `functions-${node.id}`,\n type: `${meta.id}/space-settings-functions`,\n data: `${meta.id}/space-settings-functions`,\n properties: {\n label: ['functions panel label', { ns: meta.id }],\n icon: 'ph--function--regular',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${meta.id}/script-companion`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(ScriptType, node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'automation'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'automation',\n properties: {\n label: ['script automation label', { ns: meta.id }],\n icon: 'ph--lightning--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
5
- "mappings": ";;;;;AAIA,SAASA,UAAU;AACnB,SAASC,QAAQC,YAAY;AAE7B,SAASC,cAAcC,mBAAuC;AAC9D,SAASC,WAAW;AACpB,SAASC,kBAAkB;AAC3B,SAASC,sBAAsBC,iCAAiC;AAChE,SAASC,uBAAuB;AAChC,SAASC,oBAAoB;AAI7B,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKO,SAAS,GAAGC,YAAAA,cAA0BH,OAAOI,KAAKT,KAAAA,IAAQK,OAAOK,KAAI,CAAA,GACpGL,OAAOM,IAAI,CAACX,UAAS;MACnB;QACEH,IAAI,cAAcG,MAAKH,EAAE;QACzBU,MAAM,GAAGT,KAAKD,EAAE;QAChBe,MAAM,GAAGd,KAAKD,EAAE;QAChBgB,YAAY;UACVC,OAAO;YAAC;YAA0B;cAAEC,IAAIjB,KAAKD;YAAG;;UAChDmB,MAAM;QACR;MACF;KACD,GACDX,OAAOY,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;EACArB,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKO,SAAS,GAAGC,YAAAA,cAA0BH,OAAOI,KAAKT,KAAAA,IAAQK,OAAOK,KAAI,CAAA,GACpGL,OAAOM,IAAI,CAACX,UAAS;MACnB;QACEH,IAAI,aAAaG,MAAKH,EAAE;QACxBU,MAAM,GAAGT,KAAKD,EAAE;QAChBe,MAAM,GAAGd,KAAKD,EAAE;QAChBgB,YAAY;UACVC,OAAO;YAAC;YAAyB;cAAEC,IAAIjB,KAAKD;YAAG;;UAC/CmB,MAAM;QACR;MACF;KACD,GACDX,OAAOY,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;EACArB,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUkB,IAAIC,WAAWC,YAAYpB,MAAKY,IAAI,IAAIP,OAAOI,KAAKT,KAAAA,IAAQK,OAAOK,KAAI,CAAA,GACjGL,OAAOM,IAAI,CAACX,UAAS;MACnB;QACEH,IAAI;UAACG,MAAKH;UAAI;UAAcwB,KAAKC,yBAAAA;QACjCf,MAAMgB;QACNX,MAAM;QACNC,YAAY;UACVC,OAAO;YAAC;YAA2B;cAAEC,IAAIjB,KAAKD;YAAG;;UACjDmB,MAAM;UACNQ,aAAa;QACf;MACF;KACD,GACDnB,OAAOY,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
6
- "names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "Obj", "ScriptType", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "SPACE_PLUGIN", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "type", "SPACE_PLUGIN", "some", "none", "map", "data", "properties", "label", "ns", "icon", "getOrElse", "Obj", "instanceOf", "ScriptType", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "disposition"]
7
- }
@@ -1,14 +0,0 @@
1
- // src/components/index.ts
2
- import { lazy } from "react";
3
- var AutomationContainer = lazy(() => import("./AutomationContainer-VZNV2ZQF.mjs"));
4
- var AutomationPanel = lazy(() => import("./AutomationPanel-ZWA6GOFY.mjs"));
5
- var FunctionsContainer = lazy(() => import("./FunctionsContainer-IOB333TX.mjs"));
6
- var FunctionsPanel = lazy(() => import("./FunctionsPanel-56ZKRVM5.mjs"));
7
-
8
- export {
9
- AutomationContainer,
10
- AutomationPanel,
11
- FunctionsContainer,
12
- FunctionsPanel
13
- };
14
- //# sourceMappingURL=chunk-ECSTS2UI.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './TriggerEditor';\n\nexport const AutomationContainer = lazy(() => import('./AutomationContainer'));\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const FunctionsContainer = lazy(() => import('./FunctionsContainer'));\nexport const FunctionsPanel = lazy(() => import('./FunctionsPanel'));\n"],
5
- "mappings": ";AAIA,SAASA,YAAY;AAId,IAAMC,sBAAsBC,KAAK,MAAM,OAAO,oCAAA,CAAA;AAC9C,IAAMC,kBAAkBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC1C,IAAME,qBAAqBF,KAAK,MAAM,OAAO,mCAAA,CAAA;AAC7C,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,+BAAA,CAAA;",
6
- "names": ["lazy", "AutomationContainer", "lazy", "AutomationPanel", "FunctionsContainer", "FunctionsPanel"]
7
- }
@@ -1,147 +0,0 @@
1
- import {
2
- TriggerEditor
3
- } from "./chunk-FSJZXTS2.mjs";
4
- import {
5
- AUTOMATION_PLUGIN
6
- } from "./chunk-GW5U2DGT.mjs";
7
-
8
- // src/components/AutomationPanel/AutomationPanel.tsx
9
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
10
- import { Schema } from "effect";
11
- import React, { useState } from "react";
12
- import { Filter, Obj } from "@dxos/echo";
13
- import { FunctionType, FunctionTrigger, FunctionTriggerSchema, ScriptType, TriggerKind } from "@dxos/functions";
14
- import { useClient } from "@dxos/react-client";
15
- import { useQuery, getSpace } from "@dxos/react-client/echo";
16
- import { Clipboard, IconButton, Input, Separator, useTranslation } from "@dxos/react-ui";
17
- import { ControlItem, controlItemClasses } from "@dxos/react-ui-form";
18
- import { List } from "@dxos/react-ui-list";
19
- import { ghostHover, mx } from "@dxos/react-ui-theme";
20
- var grid = "grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]";
21
- var AutomationPanel = ({ space, object, initialTrigger, onDone }) => {
22
- var _effect = _useSignals();
23
- try {
24
- const { t } = useTranslation(AUTOMATION_PLUGIN);
25
- const client = useClient();
26
- const triggers = useQuery(space, Filter.type(FunctionTrigger));
27
- const functions = useQuery(space, Filter.type(FunctionType));
28
- const scripts = useQuery(space, Filter.type(ScriptType));
29
- const [trigger, setTrigger] = useState(initialTrigger);
30
- const [selected, setSelected] = useState();
31
- const handleSelect = (trigger2) => {
32
- const { id: _, ...values } = trigger2;
33
- setTrigger(values);
34
- setSelected(trigger2);
35
- };
36
- const handleAdd = () => {
37
- setTrigger(Obj.make(FunctionTriggerSchema, {}));
38
- setSelected(void 0);
39
- };
40
- const handleDelete = (trigger2) => {
41
- space.db.remove(trigger2);
42
- setTrigger(void 0);
43
- setSelected(void 0);
44
- };
45
- const handleSave = (trigger2) => {
46
- if (selected) {
47
- Object.assign(selected, trigger2);
48
- } else {
49
- space.db.add(Obj.make(FunctionTrigger, trigger2));
50
- }
51
- setTrigger(void 0);
52
- setSelected(void 0);
53
- onDone?.();
54
- };
55
- const handleCancel = () => {
56
- setTrigger(void 0);
57
- onDone?.();
58
- };
59
- if (trigger) {
60
- return /* @__PURE__ */ React.createElement(ControlItem, {
61
- title: t("trigger editor title")
62
- }, /* @__PURE__ */ React.createElement(TriggerEditor, {
63
- space,
64
- trigger,
65
- onSave: handleSave,
66
- onCancel: handleCancel
67
- }));
68
- }
69
- return /* @__PURE__ */ React.createElement("div", {
70
- className: controlItemClasses
71
- }, triggers.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
72
- items: triggers,
73
- isItem: Schema.is(FunctionTrigger),
74
- getId: (field) => field.id
75
- }, ({ items: triggers2 }) => /* @__PURE__ */ React.createElement("div", {
76
- role: "list",
77
- className: "flex flex-col w-full"
78
- }, triggers2?.map((trigger2) => {
79
- const copyAction = getCopyAction(client, trigger2);
80
- return /* @__PURE__ */ React.createElement(List.Item, {
81
- key: trigger2.id,
82
- item: trigger2,
83
- classNames: mx(grid, ghostHover, "items-center", "px-2")
84
- }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
85
- checked: trigger2.enabled,
86
- onCheckedChange: (checked) => trigger2.enabled = checked
87
- })), /* @__PURE__ */ React.createElement("div", {
88
- className: "flex"
89
- }, /* @__PURE__ */ React.createElement(List.ItemTitle, {
90
- classNames: "px-1 cursor-pointer w-0 shrink truncate",
91
- onClick: () => handleSelect(trigger2)
92
- }, getFunctionName(scripts, functions, trigger2) ?? "\u2205"), copyAction && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
93
- label: t(copyAction.translationKey),
94
- value: copyAction.contentProvider()
95
- })), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
96
- onClick: () => handleDelete(trigger2)
97
- }));
98
- }))), triggers.length > 0 && /* @__PURE__ */ React.createElement(Separator, {
99
- classNames: "mlb-4"
100
- }), /* @__PURE__ */ React.createElement(IconButton, {
101
- icon: "ph--plus--regular",
102
- label: t("new trigger label"),
103
- onClick: handleAdd
104
- }));
105
- } finally {
106
- _effect.f();
107
- }
108
- };
109
- var getCopyAction = (client, trigger) => {
110
- if (trigger?.spec?.kind === TriggerKind.Email) {
111
- return {
112
- translationKey: "trigger copy email",
113
- contentProvider: () => `${getSpace(trigger).id}@dxos.network`
114
- };
115
- }
116
- if (trigger?.spec?.kind === TriggerKind.Webhook) {
117
- return {
118
- translationKey: "trigger copy url",
119
- contentProvider: () => getWebhookUrl(client, trigger)
120
- };
121
- }
122
- return void 0;
123
- };
124
- var getWebhookUrl = (client, trigger) => {
125
- const spaceId = getSpace(trigger).id;
126
- const edgeUrl = new URL(client.config.values.runtime.services.edge.url);
127
- const isSecure = edgeUrl.protocol.startsWith("https") || edgeUrl.protocol.startsWith("wss");
128
- edgeUrl.protocol = isSecure ? "https" : "http";
129
- return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();
130
- };
131
- var getFunctionName = (scripts, functions, trigger) => {
132
- const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}\u2026`;
133
- const functionObject = functions.find((fn) => fn === trigger.function?.target);
134
- if (!functionObject) {
135
- return shortId;
136
- }
137
- return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;
138
- };
139
-
140
- // src/components/AutomationPanel/index.ts
141
- var AutomationPanel_default = AutomationPanel;
142
-
143
- export {
144
- AutomationPanel,
145
- AutomationPanel_default
146
- };
147
- //# sourceMappingURL=chunk-ERTIGJYE.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport React, { useState } from 'react';\n\nimport { Filter, Obj } from '@dxos/echo';\nimport {\n FunctionType,\n FunctionTrigger,\n FunctionTriggerSchema,\n type FunctionTriggerType,\n ScriptType,\n TriggerKind,\n} from '@dxos/functions';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { useQuery, type Space, getSpace } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, Input, Separator, useTranslation } from '@dxos/react-ui';\nimport { ControlItem, controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = {\n space: Space;\n object?: Obj.Any;\n initialTrigger?: FunctionTriggerType;\n onDone?: () => void;\n};\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const client = useClient();\n const triggers = useQuery(space, Filter.type(FunctionTrigger));\n const functions = useQuery(space, Filter.type(FunctionType));\n const scripts = useQuery(space, Filter.type(ScriptType));\n\n const [trigger, setTrigger] = useState<FunctionTriggerType | undefined>(initialTrigger);\n const [selected, setSelected] = useState<FunctionTrigger>();\n\n const handleSelect = (trigger: FunctionTrigger) => {\n const { id: _, ...values } = trigger;\n setTrigger(values);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Obj.make(FunctionTriggerSchema, {}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: FunctionTrigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(Obj.make(FunctionTrigger, trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n if (trigger) {\n return (\n <ControlItem title={t('trigger editor title')}>\n <TriggerEditor space={space} trigger={trigger} onSave={handleSave} onCancel={handleCancel} />\n </ControlItem>\n );\n }\n\n return (\n <div className={controlItemClasses}>\n {triggers.length > 0 && (\n <List.Root<FunctionTrigger> items={triggers} isItem={Schema.is(FunctionTrigger)} getId={(field) => field.id}>\n {({ items: triggers }) => (\n <div role='list' className='flex flex-col w-full'>\n {triggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<FunctionTrigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'px-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='px-1 cursor-pointer w-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(scripts, functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Clipboard.IconButton\n label={t(copyAction.translationKey)}\n value={copyAction.contentProvider()}\n />\n )}\n </div>\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n )}\n {triggers.length > 0 && <Separator classNames='mlb-4' />}\n <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: FunctionTrigger | undefined) => {\n if (trigger?.spec?.kind === TriggerKind.Email) {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.kind === TriggerKind.Webhook) {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: FunctionTrigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (scripts: ScriptType[], functions: FunctionType[], trigger: FunctionTriggerType) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n if (!functionObject) {\n return shortId;\n }\n\n return scripts.find((s) => functionObject.source?.target?.id === s.id)?.name ?? shortId;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
5
- "mappings": "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",
6
- "names": ["Schema", "React", "useState", "Filter", "Obj", "FunctionType", "FunctionTrigger", "FunctionTriggerSchema", "ScriptType", "TriggerKind", "useClient", "useQuery", "getSpace", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "grid", "AutomationPanel", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "AUTOMATION_PLUGIN", "client", "useClient", "triggers", "useQuery", "Filter", "type", "FunctionTrigger", "functions", "FunctionType", "scripts", "ScriptType", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "id", "_", "values", "handleAdd", "Obj", "make", "FunctionTriggerSchema", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "ControlItem", "title", "TriggerEditor", "onSave", "onCancel", "div", "className", "controlItemClasses", "length", "List", "Root", "items", "isItem", "Schema", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "classNames", "mx", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Clipboard", "IconButton", "label", "translationKey", "value", "contentProvider", "ItemDeleteButton", "Separator", "icon", "spec", "kind", "TriggerKind", "Email", "getSpace", "Webhook", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "dxn", "slice", "functionObject", "find", "fn", "target", "s", "source", "name", "AutomationPanel"]
7
- }