@agent-native/dispatch 0.40.0-nightly-20260929180759 → 0.40.2
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.
- package/CHANGELOG.md +42 -93
- package/dist/actions/provider-api-register.d.ts +7 -7
- package/dist/components/app-open-actions.d.ts +1 -1
- package/dist/components/app-open-actions.d.ts.map +1 -1
- package/dist/components/app-open-actions.js +1 -1
- package/dist/components/app-open-actions.js.map +1 -1
- package/dist/components/app-row-settings.js +1 -1
- package/dist/components/app-row-settings.js.map +1 -1
- package/dist/components/automation-create-dialog.js +2 -2
- package/dist/components/automation-create-dialog.js.map +1 -1
- package/dist/components/automation-details-panel.js +1 -1
- package/dist/components/automation-details-panel.js.map +1 -1
- package/dist/components/chat-home-apps.js +1 -1
- package/dist/components/chat-home-apps.js.map +1 -1
- package/dist/components/create-app-popover.js +3 -3
- package/dist/components/create-app-popover.js.map +1 -1
- package/dist/components/dispatch-control-plane.d.ts.map +1 -1
- package/dist/components/dispatch-control-plane.js +9 -30
- package/dist/components/dispatch-control-plane.js.map +1 -1
- package/dist/components/layout/Header.js +2 -2
- package/dist/components/layout/Header.js.map +1 -1
- package/dist/components/layout/Layout.d.ts +6 -5
- package/dist/components/layout/Layout.d.ts.map +1 -1
- package/dist/components/layout/Layout.js +73 -113
- package/dist/components/layout/Layout.js.map +1 -1
- package/dist/components/layout/workspace-apps-rail.d.ts.map +1 -1
- package/dist/components/layout/workspace-apps-rail.js +7 -19
- package/dist/components/layout/workspace-apps-rail.js.map +1 -1
- package/dist/components/messaging-setup-panel.js +2 -1
- package/dist/components/messaging-setup-panel.js.map +1 -1
- package/dist/components/workspace-app-card.js +2 -2
- package/dist/components/workspace-app-card.js.map +1 -1
- package/dist/components/workspace-app-host.d.ts +1 -1
- package/dist/components/workspace-app-host.d.ts.map +1 -1
- package/dist/components/workspace-app-host.js +7 -74
- package/dist/components/workspace-app-host.js.map +1 -1
- package/dist/hooks/use-navigation-state.js +1 -1
- package/dist/hooks/use-navigation-state.js.map +1 -1
- package/dist/lib/workspace-apps.js +1 -1
- package/dist/lib/workspace-apps.js.map +1 -1
- package/dist/routes/pages/$appId.js +1 -1
- package/dist/routes/pages/$appId.js.map +1 -1
- package/dist/routes/pages/_index.js +1 -1
- package/dist/routes/pages/_index.js.map +1 -1
- package/dist/routes/pages/admin._index.js +1 -1
- package/dist/routes/pages/admin._index.js.map +1 -1
- package/dist/routes/pages/agent-integrations.js +1 -1
- package/dist/routes/pages/agent-integrations.js.map +1 -1
- package/dist/routes/pages/apps.d.ts.map +1 -1
- package/dist/routes/pages/apps.js +3 -43
- package/dist/routes/pages/apps.js.map +1 -1
- package/dist/routes/pages/browser-chat.js +1 -1
- package/dist/routes/pages/browser-chat.js.map +1 -1
- package/dist/routes/pages/chat.d.ts.map +1 -1
- package/dist/routes/pages/chat.js +24 -43
- package/dist/routes/pages/chat.js.map +1 -1
- package/dist/routes/pages/extensions.$id.js +1 -1
- package/dist/routes/pages/extensions.$id.js.map +1 -1
- package/dist/routes/pages/extensions._index.js +1 -1
- package/dist/routes/pages/extensions._index.js.map +1 -1
- package/dist/routes/pages/integrations.js +1 -1
- package/dist/routes/pages/integrations.js.map +1 -1
- package/dist/routes/pages/new-app.js +1 -1
- package/dist/routes/pages/new-app.js.map +1 -1
- package/dist/routes/pages/operations.js +2 -2
- package/dist/routes/pages/operations.js.map +1 -1
- package/dist/routes/pages/overview.d.ts +2 -2
- package/dist/routes/pages/settings.d.ts.map +1 -1
- package/dist/routes/pages/settings.js +26 -8
- package/dist/routes/pages/settings.js.map +1 -1
- package/dist/routes/pages/tools.$id.js +1 -1
- package/dist/routes/pages/tools.$id.js.map +1 -1
- package/dist/routes/pages/tools._index.js +1 -1
- package/dist/routes/pages/tools._index.js.map +1 -1
- package/dist/routes/pages/vault.d.ts +1 -1
- package/dist/routes/pages/vault.js +1 -1
- package/dist/routes/pages/vault.js.map +1 -1
- package/dist/shared/app-roles.js.map +1 -1
- package/package.json +4 -4
- package/src/components/app-open-actions.tsx +1 -1
- package/src/components/app-row-settings.tsx +1 -1
- package/src/components/automation-create-dialog.tsx +7 -7
- package/src/components/automation-details-panel.tsx +1 -1
- package/src/components/chat-home-apps.tsx +1 -1
- package/src/components/create-app-popover.spec.tsx +5 -7
- package/src/components/create-app-popover.tsx +3 -3
- package/src/components/dispatch-control-plane.spec.tsx +12 -19
- package/src/components/dispatch-control-plane.tsx +10 -84
- package/src/components/layout/Header.tsx +2 -2
- package/src/components/layout/Layout.app-chat.spec.ts +1 -0
- package/src/components/layout/Layout.spec.tsx +18 -20
- package/src/components/layout/Layout.tsx +153 -205
- package/src/components/layout/workspace-apps-rail.spec.tsx +79 -0
- package/src/components/layout/workspace-apps-rail.tsx +6 -30
- package/src/components/messaging-setup-panel.tsx +1 -1
- package/src/components/workspace-app-card.tsx +2 -2
- package/src/components/workspace-app-chat-rail.spec.tsx +1 -1
- package/src/components/workspace-app-host.spec.tsx +19 -19
- package/src/components/workspace-app-host.tsx +12 -129
- package/src/hooks/use-navigation-state.ts +1 -1
- package/src/lib/workspace-apps.ts +1 -1
- package/src/routes/pages/$appId.tsx +1 -1
- package/src/routes/pages/_index.tsx +1 -1
- package/src/routes/pages/admin._index.tsx +1 -1
- package/src/routes/pages/agent-integrations.tsx +1 -1
- package/src/routes/pages/apps.tsx +2 -86
- package/src/routes/pages/automations.spec.tsx +1 -1
- package/src/routes/pages/browser-chat.tsx +1 -1
- package/src/routes/pages/chat.spec.tsx +23 -46
- package/src/routes/pages/chat.tsx +20 -57
- package/src/routes/pages/extensions.$id.tsx +1 -1
- package/src/routes/pages/extensions._index.tsx +1 -1
- package/src/routes/pages/integrations.tsx +1 -1
- package/src/routes/pages/new-app.tsx +1 -1
- package/src/routes/pages/operations.tsx +2 -2
- package/src/routes/pages/settings.spec.tsx +30 -8
- package/src/routes/pages/settings.tsx +75 -7
- package/src/routes/pages/tools.$id.tsx +1 -1
- package/src/routes/pages/tools._index.tsx +1 -1
- package/src/routes/pages/vault.tsx +1 -1
- package/src/shared/app-roles.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,44 @@
|
|
|
1
1
|
# @agent-native/dispatch
|
|
2
2
|
|
|
3
|
-
## 0.40.
|
|
3
|
+
## 0.40.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d09fdb0: Keep full-page chat headers and history controls aligned with the conversation surface.
|
|
8
|
+
- Release all public npm packages with a patch version bump.
|
|
9
|
+
- Updated dependencies [0b127e9]
|
|
10
|
+
- Updated dependencies [4873d09]
|
|
11
|
+
- Updated dependencies [d09fdb0]
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- Updated dependencies [d25ddc1]
|
|
14
|
+
- Updated dependencies [affa25c]
|
|
15
|
+
- Updated dependencies [b1bbe7e]
|
|
16
|
+
- Updated dependencies [905b078]
|
|
17
|
+
- Updated dependencies [6a627af]
|
|
18
|
+
- @agent-native/toolkit@0.198.1
|
|
19
|
+
|
|
20
|
+
## 0.40.1
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Release all public npm packages with a patch version bump.
|
|
25
|
+
- fb3eacd: Show only apps mounted in the active workspace in Dispatch app views.
|
|
26
|
+
- Updated dependencies [20cd76f]
|
|
27
|
+
- Updated dependencies [bbe8cbf]
|
|
28
|
+
- Updated dependencies [8853f61]
|
|
29
|
+
- Updated dependencies [8853f61]
|
|
30
|
+
- Updated dependencies
|
|
31
|
+
- Updated dependencies [8853f61]
|
|
32
|
+
- Updated dependencies [afbee14]
|
|
33
|
+
- Updated dependencies [8853f61]
|
|
34
|
+
- Updated dependencies [8853f61]
|
|
35
|
+
- Updated dependencies [8853f61]
|
|
36
|
+
- Updated dependencies [8853f61]
|
|
37
|
+
- Updated dependencies [b6ffae6]
|
|
38
|
+
- Updated dependencies [8853f61]
|
|
39
|
+
- @agent-native/toolkit@0.198.0
|
|
40
|
+
|
|
41
|
+
## 0.40.0
|
|
4
42
|
|
|
5
43
|
### Minor Changes
|
|
6
44
|
|
|
@@ -12,86 +50,15 @@
|
|
|
12
50
|
- b8845eb: Bound framework list reads and remove the vault-wide resync from process startup.
|
|
13
51
|
- 9e87b45: Align settings content widths and controls with the shared settings layout.
|
|
14
52
|
- 29d7dfa: Include CHANGELOG.md in the published package so the Settings route no longer fails to load with an Internal Server Error.
|
|
53
|
+
- Release all public npm packages with a patch version bump.
|
|
15
54
|
- bee46b1: Dispatch always renders the redesigned Settings, with no feature flag.
|
|
16
55
|
- b8845eb: Scope ownable reads and writes to their authorized user, organization, or share.
|
|
17
|
-
- Updated dependencies [c3a770e]
|
|
18
|
-
- Updated dependencies [b99ba49]
|
|
19
|
-
- Updated dependencies [b8845eb]
|
|
20
|
-
- Updated dependencies [fa62fdf]
|
|
21
|
-
- Updated dependencies [4dae8b5]
|
|
22
56
|
- Updated dependencies [f2e8ffe]
|
|
23
|
-
- Updated dependencies [f396b49]
|
|
24
|
-
- Updated dependencies [7032734]
|
|
25
|
-
- Updated dependencies [9e87b45]
|
|
26
|
-
- Updated dependencies [320d884]
|
|
27
|
-
- Updated dependencies [4dae8b5]
|
|
28
|
-
- Updated dependencies [c9129d5]
|
|
29
|
-
- Updated dependencies [23c2487]
|
|
30
|
-
- Updated dependencies [4b0cea2]
|
|
31
|
-
- Updated dependencies [c37bd18]
|
|
32
|
-
- Updated dependencies [b6ce4c6]
|
|
33
|
-
- Updated dependencies [8fd97ec]
|
|
34
|
-
- Updated dependencies [f12a2de]
|
|
35
|
-
- Updated dependencies [f12a2de]
|
|
36
|
-
- Updated dependencies [0ca16fe]
|
|
37
|
-
- Updated dependencies [57e0a0f]
|
|
38
|
-
- Updated dependencies [4af4f69]
|
|
39
|
-
- Updated dependencies [1fd5c7a]
|
|
40
|
-
- Updated dependencies [f12a2de]
|
|
41
|
-
- Updated dependencies [7220a4d]
|
|
42
|
-
- Updated dependencies [19256a9]
|
|
43
|
-
- Updated dependencies [56d047a]
|
|
44
|
-
- Updated dependencies [f2f6f43]
|
|
45
|
-
- Updated dependencies [4a681b7]
|
|
46
57
|
- Updated dependencies [023ee9b]
|
|
47
|
-
- Updated dependencies [4969087]
|
|
48
|
-
- Updated dependencies [2197b46]
|
|
49
|
-
- Updated dependencies [47985fe]
|
|
50
|
-
- Updated dependencies [a8ec661]
|
|
51
|
-
- Updated dependencies [82ad87c]
|
|
52
|
-
- Updated dependencies [0a86389]
|
|
53
|
-
- Updated dependencies [83f709e]
|
|
54
|
-
- Updated dependencies [df7e3ce]
|
|
55
|
-
- Updated dependencies [3f9c125]
|
|
56
|
-
- Updated dependencies [5430f9c]
|
|
57
|
-
- Updated dependencies [b8845eb]
|
|
58
|
-
- Updated dependencies [0ea21e5]
|
|
59
|
-
- Updated dependencies [61770e5]
|
|
60
|
-
- Updated dependencies [6d1b545]
|
|
61
|
-
- Updated dependencies [ebf5f34]
|
|
62
|
-
- Updated dependencies [b8845eb]
|
|
63
|
-
- Updated dependencies [9c186fc]
|
|
64
|
-
- Updated dependencies [c86c6fa]
|
|
65
|
-
- Updated dependencies [15d1110]
|
|
66
|
-
- Updated dependencies [369632b]
|
|
67
|
-
- Updated dependencies [b6ce4c6]
|
|
68
58
|
- Updated dependencies [47985fe]
|
|
69
|
-
- Updated dependencies
|
|
70
|
-
- Updated dependencies [f25679f]
|
|
71
|
-
- Updated dependencies [cfedd43]
|
|
72
|
-
- Updated dependencies [7032734]
|
|
73
|
-
- Updated dependencies [cae86e4]
|
|
74
|
-
- Updated dependencies [7342b95]
|
|
75
|
-
- Updated dependencies [bee46b1]
|
|
59
|
+
- Updated dependencies
|
|
76
60
|
- Updated dependencies [fa62fdf]
|
|
77
|
-
-
|
|
78
|
-
- Updated dependencies [9071b38]
|
|
79
|
-
- Updated dependencies [7161ec2]
|
|
80
|
-
- Updated dependencies [d2ba564]
|
|
81
|
-
- Updated dependencies [b8845eb]
|
|
82
|
-
- Updated dependencies [9e35bba]
|
|
83
|
-
- Updated dependencies [b8845eb]
|
|
84
|
-
- Updated dependencies [5430f9c]
|
|
85
|
-
- Updated dependencies [58fe222]
|
|
86
|
-
- Updated dependencies [0e8e6f8]
|
|
87
|
-
- Updated dependencies [734137b]
|
|
88
|
-
- Updated dependencies [4dae8b5]
|
|
89
|
-
- Updated dependencies [92020c0]
|
|
90
|
-
- Updated dependencies [09b3645]
|
|
91
|
-
- Updated dependencies [8d5f335]
|
|
92
|
-
- Updated dependencies [90048ab]
|
|
93
|
-
- @agent-native/core@0.197.0-nightly-20260929180759
|
|
94
|
-
- @agent-native/toolkit@0.23.1-nightly-20260929180759
|
|
61
|
+
- @agent-native/toolkit@0.23.1
|
|
95
62
|
|
|
96
63
|
## 0.39.0
|
|
97
64
|
|
|
@@ -1118,22 +1085,4 @@
|
|
|
1118
1085
|
- Updated dependencies [2db503b]
|
|
1119
1086
|
- @agent-native/toolkit@0.14.2
|
|
1120
1087
|
|
|
1121
|
-
## 0.24.5
|
|
1122
|
-
|
|
1123
|
-
### Patch Changes
|
|
1124
|
-
|
|
1125
|
-
- 8008dfe: Centralize product docs links behind `docsUrl()` and retarget Settings, Team, onboarding, and template help links at live agent-native.com docs pages.
|
|
1126
|
-
|
|
1127
|
-
## 0.24.4
|
|
1128
|
-
|
|
1129
|
-
### Patch Changes
|
|
1130
|
-
|
|
1131
|
-
- 47ba57a: Gate connected-agent mutations to workspace owners and admins instead of issuing failed shared-resource writes for organization members.
|
|
1132
|
-
|
|
1133
|
-
## 0.24.3
|
|
1134
|
-
|
|
1135
|
-
### Patch Changes
|
|
1136
|
-
|
|
1137
|
-
- 405e17e: Gate connected-agent mutations to workspace owners and admins instead of issuing failed shared-resource writes for organization members.
|
|
1138
|
-
|
|
1139
1088
|
For the full list of releases, see the [changelog archive](./changelog/archive/CHANGELOG.md).
|
|
@@ -47,6 +47,7 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
47
47
|
notes?: string | undefined;
|
|
48
48
|
scope?: "org" | "user" | undefined;
|
|
49
49
|
}, {
|
|
50
|
+
message?: undefined;
|
|
50
51
|
id?: undefined;
|
|
51
52
|
deleted?: undefined;
|
|
52
53
|
providers: {
|
|
@@ -63,28 +64,28 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
63
64
|
found?: undefined;
|
|
64
65
|
registered?: undefined;
|
|
65
66
|
label?: undefined;
|
|
66
|
-
message?: undefined;
|
|
67
67
|
} | {
|
|
68
|
+
message?: undefined;
|
|
68
69
|
id?: undefined;
|
|
69
|
-
count?: undefined;
|
|
70
70
|
deleted?: undefined;
|
|
71
|
+
count?: undefined;
|
|
71
72
|
providers?: undefined;
|
|
72
73
|
found: boolean;
|
|
73
74
|
provider: import("node_modules/@agent-native/core/dist/provider-api").CustomProviderConfig;
|
|
74
75
|
registered?: undefined;
|
|
75
76
|
label?: undefined;
|
|
76
|
-
message?: undefined;
|
|
77
77
|
} | {
|
|
78
|
-
|
|
78
|
+
message?: undefined;
|
|
79
79
|
deleted?: undefined;
|
|
80
|
+
count?: undefined;
|
|
80
81
|
providers?: undefined;
|
|
81
82
|
provider?: undefined;
|
|
82
83
|
found: boolean;
|
|
83
84
|
id: string;
|
|
84
85
|
registered?: undefined;
|
|
85
86
|
label?: undefined;
|
|
86
|
-
message?: undefined;
|
|
87
87
|
} | {
|
|
88
|
+
message?: undefined;
|
|
88
89
|
count?: undefined;
|
|
89
90
|
providers?: undefined;
|
|
90
91
|
provider?: undefined;
|
|
@@ -93,10 +94,9 @@ declare const _default: import("node_modules/@agent-native/core/dist").ActionDef
|
|
|
93
94
|
id: string;
|
|
94
95
|
registered?: undefined;
|
|
95
96
|
label?: undefined;
|
|
96
|
-
message?: undefined;
|
|
97
97
|
} | {
|
|
98
|
-
count?: undefined;
|
|
99
98
|
deleted?: undefined;
|
|
99
|
+
count?: undefined;
|
|
100
100
|
providers?: undefined;
|
|
101
101
|
provider?: undefined;
|
|
102
102
|
found?: undefined;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AppOpenActions, type AppOpenActionLabels, type AppOpenActionMenuItem, } from "@agent-native/
|
|
1
|
+
export { AppOpenActions, type AppOpenActionLabels, type AppOpenActionMenuItem, } from "@agent-native/toolkit/app/chat/chat-first";
|
|
2
2
|
//# sourceMappingURL=app-open-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-open-actions.d.ts","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"app-open-actions.d.ts","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,2CAA2C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AppOpenActions, } from "@agent-native/
|
|
1
|
+
export { AppOpenActions, } from "@agent-native/toolkit/app/chat/chat-first";
|
|
2
2
|
//# sourceMappingURL=app-open-actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-open-actions.js","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,
|
|
1
|
+
{"version":3,"file":"app-open-actions.js","sourceRoot":"","sources":["../../src/components/app-open-actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,2CAA2C,CAAC","sourcesContent":["export {\n AppOpenActions,\n type AppOpenActionLabels,\n type AppOpenActionMenuItem,\n} from \"@agent-native/toolkit/app/chat/chat-first\";\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { APP_ACTION_MENU_CONTENT_CLASS } from "@agent-native/
|
|
2
|
+
import { APP_ACTION_MENU_CONTENT_CLASS } from "@agent-native/toolkit/app/chat/chat-first";
|
|
3
3
|
import { IconPlus, IconSettings } from "@tabler/icons-react";
|
|
4
4
|
import { Button } from "./ui/button.js";
|
|
5
5
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "./ui/dropdown-menu.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-row-settings.js","sourceRoot":"","sources":["../../src/components/app-row-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"app-row-settings.js","sourceRoot":"","sources":["../../src/components/app-row-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,oBAAoB,GACxB,6PAA6P,CAAC;AAEhQ,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,WAAW,GAAG,SAAS,EACvB,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,YAAY,eACX,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,gBACG,gBAAgB,IAAI,EAAE,EAClC,SAAS,EAAE,oBAAoB,YAE/B,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,GACnB,GACW,GACP,EACjB,KAAC,cAAc,+BAA8B,IACrC,EACV,KAAC,mBAAmB,IAClB,KAAK,EAAC,KAAK,EACX,SAAS,EAAE,6BAA6B,YAExC,MAAC,gBAAgB,IAAC,QAAQ,EAAE,QAAQ,aAClC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EACxC,WAAW,IACK,GACC,IACT,CAChB,CAAC;AACJ,CAAC","sourcesContent":["import { APP_ACTION_MENU_CONTENT_CLASS } from \"@agent-native/toolkit/app/chat/chat-first\";\nimport { IconPlus, IconSettings } from \"@tabler/icons-react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"./ui/dropdown-menu\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./ui/tooltip\";\n\nconst APP_ROW_ACTION_CLASS =\n \"size-7 rounded-md p-0 text-muted-foreground transition-[background-color,color] hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:bg-accent data-[state=open]:text-foreground\";\n\nexport function AppRowSettings({\n name,\n addAppLabel = \"Add app\",\n onAddApp,\n}: {\n name: string;\n addAppLabel?: string;\n onAddApp: () => void;\n}) {\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={`Settings for ${name}`}\n className={APP_ROW_ACTION_CLASS}\n >\n <IconSettings size={15} />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>App settings</TooltipContent>\n </Tooltip>\n <DropdownMenuContent\n align=\"end\"\n className={APP_ACTION_MENU_CONTENT_CLASS}\n >\n <DropdownMenuItem onSelect={onAddApp}>\n <IconPlus size={14} aria-hidden=\"true\" />\n {addAppLabel}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { DEFAULT_AUTOMATION_SCHEDULE_DRAFT, AUTOMATION_WEEKDAYS, automationScheduleToCron, formatAutomationTime, } from "@agent-native/core/client/agent-page/automation-schedule";
|
|
3
|
-
import { TimezoneSelect, browserTimezone, } from "@agent-native/core/client/agent-page/timezone-select";
|
|
4
2
|
import { useActionMutation, useActionQuery, } from "@agent-native/core/client/hooks";
|
|
5
3
|
import { useT } from "@agent-native/core/client/i18n";
|
|
4
|
+
import { DEFAULT_AUTOMATION_SCHEDULE_DRAFT, AUTOMATION_WEEKDAYS, automationScheduleToCron, formatAutomationTime, } from "@agent-native/toolkit/app/agent-page/automation-schedule";
|
|
5
|
+
import { TimezoneSelect, browserTimezone, } from "@agent-native/toolkit/app/agent-page/TimezoneSelect";
|
|
6
6
|
import { IconBolt, IconCalendarEvent, IconClock, IconCode, IconLoader2, } from "@tabler/icons-react";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { Button } from "./ui/button.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation-create-dialog.js","sourceRoot":"","sources":["../../src/components/automation-create-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n AUTOMATION_WEEKDAYS,\n automationScheduleToCron,\n formatAutomationTime,\n type AutomationScheduleDraft,\n type AutomationSchedulePreset,\n type AutomationScheduleUnit,\n} from \"@agent-native/core/client/agent-page/automation-schedule\";\nimport {\n TimezoneSelect,\n browserTimezone,\n} from \"@agent-native/core/client/agent-page/timezone-select\";\nimport {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconBolt,\n IconCalendarEvent,\n IconClock,\n IconCode,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ntype TriggerType = \"schedule\" | \"event\" | \"webhook\";\n\ninterface AutomationEvent {\n name: string;\n description?: string;\n}\n\ninterface CreateAutomationInput {\n operation: \"create\";\n name: string;\n scope: \"personal\" | \"organization\";\n triggerType: TriggerType;\n body: string;\n schedule?: string;\n timezone?: string;\n event?: string;\n}\n\ninterface CreateAutomationResult {\n created: true;\n name: string;\n triggerType: TriggerType;\n webhookPath: string | null;\n}\n\nconst PRESETS: {\n value: AutomationSchedulePreset;\n labelKey: string;\n detailKey: string;\n label: string;\n detail: string;\n draft: Partial<AutomationScheduleDraft>;\n}[] = [\n {\n value: \"hourly\",\n labelKey: \"jobs.schedulePreset.hourly\",\n detailKey: \"jobs.schedulePreset.hourlyDetail\",\n label: \"Every hour\",\n detail: \"At the top of the hour\",\n draft: { preset: \"hourly\" },\n },\n {\n value: \"daily-midnight\",\n labelKey: \"jobs.schedulePreset.dailyMidnight\",\n detailKey: \"jobs.schedulePreset.dailyMidnightDetail\",\n label: \"Every day at midnight\",\n detail: \"12:00 AM\",\n draft: { preset: \"daily-midnight\" },\n },\n {\n value: \"daily-noon\",\n labelKey: \"jobs.schedulePreset.dailyNoon\",\n detailKey: \"jobs.schedulePreset.dailyNoonDetail\",\n label: \"Every day at noon\",\n detail: \"12:00 PM\",\n draft: { preset: \"daily-noon\" },\n },\n {\n value: \"weekdays\",\n labelKey: \"jobs.schedulePreset.weekdays\",\n detailKey: \"jobs.schedulePreset.weekdaysDetail\",\n label: \"Every weekday\",\n detail: \"Monday to Friday at 9:00 AM\",\n draft: { preset: \"weekdays\", time: \"09:00\" },\n },\n {\n value: \"weekly\",\n labelKey: \"jobs.schedulePreset.weekly\",\n detailKey: \"jobs.schedulePreset.weeklyDetail\",\n label: \"Every week\",\n detail: \"Sunday at 9:00 AM\",\n draft: { preset: \"weekly\", weekday: 0, time: \"09:00\" },\n },\n];\n\nfunction presetClass(selected: boolean): string {\n return (\n \"rounded-lg border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/5 text-foreground\"\n : \"border-border/70 bg-background hover:bg-muted/50\")\n );\n}\n\nfunction scheduleIsValid(value: string): boolean {\n return value.trim().split(/\\s+/).length === 5;\n}\n\nfunction ScheduleFields({\n draft,\n saving,\n onChange,\n}: {\n draft: AutomationScheduleDraft;\n saving: boolean;\n onChange: (patch: Partial<AutomationScheduleDraft>) => void;\n}) {\n const t = useT();\n const customMinute = Number(draft.time.split(\":\")[1] ?? 0);\n return (\n <div className=\"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_1fr]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.repeatEvery\", { defaultValue: \"Repeat every\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.interval}\n disabled={saving}\n onChange={(event) =>\n onChange({\n interval: Math.min(\n draft.unit === \"day\" ? 1 : 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scheduleUnit\", { defaultValue: \"Unit\" })}</span>\n <Select\n value={draft.unit}\n disabled={saving}\n onValueChange={(value) =>\n onChange({\n unit: value as AutomationScheduleUnit,\n ...(value === \"day\" ? { interval: 1 } : {}),\n })\n }\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"hour\">\n {t(\"jobs.hours\", { defaultValue: \"hour(s)\" })}\n </SelectItem>\n <SelectItem value=\"day\">\n {t(\"jobs.day\", { defaultValue: \"day\" })}\n </SelectItem>\n <SelectItem value=\"week\">\n {t(\"jobs.weeks\", { defaultValue: \"week(s)\" })}\n </SelectItem>\n <SelectItem value=\"month\">\n {t(\"jobs.months\", { defaultValue: \"month(s)\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {draft.unit === \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atMinute\", { defaultValue: \"At minute\" })}</span>\n <Input\n type=\"number\"\n min={0}\n max={59}\n value={customMinute}\n disabled={saving}\n onChange={(event) =>\n onChange({\n time:\n \"00:\" +\n String(\n Math.min(59, Math.max(0, Number(event.target.value) || 0)),\n ).padStart(2, \"0\"),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit === \"week\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.onDay\", { defaultValue: \"On\" })}</span>\n <Select\n value={String(draft.weekday)}\n disabled={saving}\n onValueChange={(value) => onChange({ weekday: Number(value) })}\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {AUTOMATION_WEEKDAYS.map((day) => (\n <SelectItem key={day.value} value={String(day.value)}>\n {day.short}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n\n {draft.unit === \"month\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.dayOfMonth\", { defaultValue: \"Day of month\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.monthDay}\n disabled={saving}\n onChange={(event) =>\n onChange({\n monthDay: Math.min(\n 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit !== \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atTime\", { defaultValue: \"At\" })}</span>\n <Input\n type=\"time\"\n value={draft.time}\n disabled={saving}\n onChange={(event) => onChange({ time: event.target.value })}\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n </div>\n );\n}\n\nfunction ScheduleBuilder({\n saving,\n timezone,\n onTimezoneChange,\n onChange,\n}: {\n saving: boolean;\n timezone: string;\n onTimezoneChange: (value: string) => void;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const [draft, setDraft] = useState<AutomationScheduleDraft>(\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n );\n const [advanced, setAdvanced] = useState(false);\n const [advancedValue, setAdvancedValue] = useState(\"0 * * * *\");\n const friendly = automationScheduleToCron(draft);\n const activeSchedule = advanced\n ? advancedValue.trim()\n : (friendly.schedule ?? \"\");\n const valid =\n scheduleIsValid(activeSchedule) && (!friendly.error || advanced);\n\n useEffect(() => {\n onChange(valid ? activeSchedule : \"\");\n }, [activeSchedule, onChange, valid]);\n\n function choosePreset(\n value: AutomationSchedulePreset,\n presetDraft: Partial<AutomationScheduleDraft>,\n ) {\n setDraft((current) => ({ ...current, ...presetDraft, preset: value }));\n setAdvanced(false);\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.repeat\", { defaultValue: \"Repeat\" })}\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {PRESETS.map((preset) => (\n <button\n key={preset.value}\n type=\"button\"\n aria-pressed={!advanced && draft.preset === preset.value}\n disabled={saving}\n className={presetClass(\n !advanced && draft.preset === preset.value,\n )}\n onClick={() => choosePreset(preset.value, preset.draft)}\n >\n <span className=\"block text-sm font-medium\">\n {t(preset.labelKey, { defaultValue: preset.label })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(preset.detailKey, { defaultValue: preset.detail })}\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n aria-pressed={!advanced && draft.preset === \"custom\"}\n disabled={saving}\n className={presetClass(!advanced && draft.preset === \"custom\")}\n onClick={() =>\n choosePreset(\"custom\", {\n preset: \"custom\",\n unit: draft.unit || \"day\",\n })\n }\n >\n <span className=\"block text-sm font-medium\">\n {t(\"jobs.schedulePreset.custom\", { defaultValue: \"Custom\" })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreset.customDetail\", {\n defaultValue: \"Set your own repeat pattern\",\n })}\n </span>\n </button>\n </div>\n </div>\n\n {!advanced && draft.preset === \"custom\" ? (\n <ScheduleFields\n draft={draft}\n saving={saving}\n onChange={(patch) =>\n setDraft((current) => ({ ...current, ...patch }))\n }\n />\n ) : null}\n\n {!advanced && friendly.schedule ? (\n <p className=\"text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreview\", {\n defaultValue: \"Runs {{time}}.\",\n time:\n draft.preset === \"hourly\"\n ? t(\"jobs.schedulePreview.hourly\", {\n defaultValue: \"at the start of every hour\",\n })\n : draft.preset === \"daily-midnight\"\n ? t(\"jobs.schedulePreview.dailyMidnight\", {\n defaultValue: \"every day at midnight\",\n })\n : draft.preset === \"daily-noon\"\n ? t(\"jobs.schedulePreview.dailyNoon\", {\n defaultValue: \"every day at noon\",\n })\n : t(\"jobs.schedulePreview.atTime\", {\n defaultValue: \"at {{time}}\",\n time: formatAutomationTime(draft.time),\n }),\n })}\n </p>\n ) : null}\n {!advanced && friendly.error ? (\n <p className=\"text-xs text-destructive\">\n {friendly.error === \"daily-interval\"\n ? t(\"jobs.dailyIntervalAdvanced\", {\n defaultValue:\n \"Every few days needs the Advanced cron editor below.\",\n })\n : t(\"jobs.weeklyIntervalAdvanced\", {\n defaultValue:\n \"Custom weekly intervals beyond one week are available under Advanced.\",\n })}\n </p>\n ) : null}\n\n <div>\n <label className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.timezone\", { defaultValue: \"Timezone\" })}\n </label>\n <div className=\"mt-1\">\n <TimezoneSelect\n value={timezone}\n disabled={saving}\n onChange={onTimezoneChange}\n suggested={[browserTimezone()]}\n />\n </div>\n </div>\n\n <details\n className=\"group rounded-lg border border-border/70 bg-muted/20\"\n open={advanced}\n onToggle={(event) => {\n const next = event.currentTarget.open;\n if (next && !advanced && friendly.schedule) {\n setAdvancedValue(friendly.schedule);\n }\n setAdvanced(next);\n }}\n >\n <summary className=\"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-xs font-medium text-foreground [&::-webkit-details-marker]:hidden\">\n <IconCode className=\"size-4 text-muted-foreground\" />\n {t(\"jobs.advancedSchedule\", {\n defaultValue: \"Advanced - cron expression\",\n })}\n <span className=\"ms-auto text-muted-foreground group-open:hidden\">\n {t(\"jobs.show\", { defaultValue: \"Show\" })}\n </span>\n <span className=\"ms-auto hidden text-muted-foreground group-open:inline\">\n {t(\"jobs.hide\", { defaultValue: \"Hide\" })}\n </span>\n </summary>\n <div className=\"border-t border-border/60 px-3 pb-3 pt-2.5\">\n <Input\n className=\"font-mono text-sm\"\n value={advancedValue}\n spellCheck={false}\n autoComplete=\"off\"\n disabled={saving}\n onFocus={() => setAdvanced(true)}\n onChange={(event) => {\n setAdvanced(true);\n setAdvancedValue(event.target.value);\n }}\n />\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n {t(\"jobs.cronFormatHint\", {\n defaultValue: \"minute hour day-of-month month day-of-week\",\n })}\n </p>\n </div>\n </details>\n\n {activeSchedule && !valid ? (\n <p className=\"text-xs text-destructive\">\n {t(\"jobs.cronFieldCount\", {\n defaultValue: \"A cron expression needs exactly 5 fields.\",\n })}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction EventFields({\n open,\n event,\n onChange,\n}: {\n open: boolean;\n event: string;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const eventsQuery = useActionQuery<AutomationEvent[]>(\n \"list-automation-events\",\n {},\n { enabled: open, staleTime: 60_000 },\n );\n\n return (\n <>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.startWhen\", { defaultValue: \"Start when\" })}</span>\n <Select value={event} onValueChange={onChange}>\n <SelectTrigger>\n <SelectValue\n placeholder={\n eventsQuery.isLoading\n ? t(\"jobs.loadingEventTypes\", {\n defaultValue: \"Loading event types...\",\n })\n : t(\"jobs.chooseAppEvent\", {\n defaultValue: \"Choose an app event\",\n })\n }\n />\n </SelectTrigger>\n <SelectContent>\n {(eventsQuery.data ?? []).map((item) => (\n <SelectItem key={item.name} value={item.name}>\n {item.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n {eventsQuery.data?.find((item) => item.name === event)?.description ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {eventsQuery.data.find((item) => item.name === event)?.description}\n </p>\n ) : null}\n {eventsQuery.error ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {t(\"jobs.loadEventTypesError\", {\n defaultValue: \"Could not load event types.\",\n })}\n </p>\n ) : null}\n </>\n );\n}\n\nexport interface AutomationCreateDialogProps {\n open: boolean;\n initialScope?: \"personal\" | \"organization\";\n onOpenChange: (open: boolean) => void;\n onCreated: (result: CreateAutomationResult) => void;\n}\n\nexport function AutomationCreateDialog({\n open,\n initialScope = \"personal\",\n onOpenChange,\n onCreated,\n}: AutomationCreateDialogProps) {\n const t = useT();\n const [name, setName] = useState(\"\");\n const [scope, setScope] = useState<\"personal\" | \"organization\">(initialScope);\n const [triggerType, setTriggerType] = useState<TriggerType>(\"schedule\");\n const [schedule, setSchedule] = useState(\"0 * * * *\");\n const [timezone, setTimezone] = useState(browserTimezone());\n const [event, setEvent] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const create = useActionMutation<\n CreateAutomationResult,\n CreateAutomationInput\n >(\"manage-automation\", {\n onSuccess: onCreated,\n });\n\n const resetCreate = create.reset;\n\n useEffect(() => {\n if (!open) return;\n setName(\"\");\n setScope(initialScope);\n setTriggerType(\"schedule\");\n setSchedule(\"0 * * * *\");\n setTimezone(browserTimezone());\n setEvent(\"\");\n setBody(\"\");\n resetCreate();\n }, [initialScope, open, resetCreate]);\n\n const canSubmit =\n name.trim().length > 0 &&\n body.trim().length > 0 &&\n (triggerType !== \"event\" || event.length > 0) &&\n (triggerType !== \"schedule\" || scheduleIsValid(schedule));\n\n function submit() {\n if (!canSubmit) return;\n create.mutate({\n operation: \"create\",\n name: name.trim(),\n scope,\n triggerType,\n body: body.trim(),\n ...(triggerType === \"schedule\"\n ? { schedule, timezone }\n : triggerType === \"event\"\n ? { event }\n : {}),\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {t(\"jobs.newAutomation\", { defaultValue: \"New automation\" })}\n </DialogTitle>\n <DialogDescription>\n {t(\"jobs.createAutomationDescription\", {\n defaultValue:\n \"Choose what starts it, then describe the work in plain language.\",\n })}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_12rem]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.name\", { defaultValue: \"Name\" })}</span>\n <Input\n value={name}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationNamePlaceholder\", {\n defaultValue: \"morning-digest\",\n })}\n onChange={(event) => setName(event.target.value)}\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scope\", { defaultValue: \"Scope\" })}</span>\n <Select\n value={scope}\n disabled={create.isPending}\n onValueChange={(value) =>\n setScope(value as \"personal\" | \"organization\")\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"personal\">\n {t(\"jobs.personal\", { defaultValue: \"Personal\" })}\n </SelectItem>\n <SelectItem value=\"organization\">\n {t(\"jobs.organization\", { defaultValue: \"Organization\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <Tabs\n value={triggerType}\n onValueChange={(value) => setTriggerType(value as TriggerType)}\n >\n <TabsList className=\"grid h-auto w-full grid-cols-3\">\n <TabsTrigger value=\"schedule\" className=\"gap-2 py-2 text-xs\">\n <IconClock className=\"size-3.5\" />\n {t(\"jobs.schedule\", { defaultValue: \"Schedule\" })}\n </TabsTrigger>\n <TabsTrigger value=\"webhook\" className=\"gap-2 py-2 text-xs\">\n <IconBolt className=\"size-3.5\" />\n {t(\"jobs.webhook\", { defaultValue: \"Webhook\" })}\n </TabsTrigger>\n <TabsTrigger value=\"event\" className=\"gap-2 py-2 text-xs\">\n <IconCalendarEvent className=\"size-3.5\" />\n {t(\"jobs.appEvent\", { defaultValue: \"App event\" })}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"schedule\" className=\"mt-3\">\n <ScheduleBuilder\n key={open ? \"schedule-open\" : \"schedule-closed\"}\n saving={create.isPending}\n timezone={timezone}\n onTimezoneChange={setTimezone}\n onChange={setSchedule}\n />\n </TabsContent>\n <TabsContent value=\"webhook\" className=\"mt-3\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-start gap-2\">\n <IconBolt className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {t(\"jobs.webhookTriggerDescription\", {\n defaultValue: \"Run when a service sends an HTTP POST\",\n })}\n </p>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {t(\"jobs.webhookSetupDescription\", {\n defaultValue:\n \"After you save, Dispatch gives you a private URL to paste into GitHub, Stripe, or another webhook provider.\",\n })}\n </p>\n </div>\n </div>\n </div>\n </TabsContent>\n <TabsContent value=\"event\" className=\"mt-3\">\n <EventFields open={open} event={event} onChange={setEvent} />\n </TabsContent>\n </Tabs>\n\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>\n {t(\"jobs.whatShouldItDo\", { defaultValue: \"What should it do?\" })}\n </span>\n <Textarea\n value={body}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationBodyPlaceholder\", {\n defaultValue:\n \"Review new support requests and summarize anything urgent in a shared note.\",\n })}\n rows={5}\n onChange={(event) => setBody(event.target.value)}\n />\n </label>\n\n {create.error ? (\n <p className=\"text-xs text-destructive\">{create.error.message}</p>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={create.isPending}\n onClick={() => onOpenChange(false)}\n >\n {t(\"jobs.cancel\", { defaultValue: \"Cancel\" })}\n </Button>\n <Button\n type=\"button\"\n disabled={!canSubmit || create.isPending}\n onClick={submit}\n >\n {create.isPending ? (\n <IconLoader2 className=\"size-4 animate-spin\" />\n ) : null}\n {t(\"jobs.createAutomation\", { defaultValue: \"Create automation\" })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"automation-create-dialog.js","sourceRoot":"","sources":["../../src/components/automation-create-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useActionMutation,\n useActionQuery,\n} from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n AUTOMATION_WEEKDAYS,\n automationScheduleToCron,\n formatAutomationTime,\n type AutomationScheduleDraft,\n type AutomationSchedulePreset,\n type AutomationScheduleUnit,\n} from \"@agent-native/toolkit/app/agent-page/automation-schedule\";\nimport {\n TimezoneSelect,\n browserTimezone,\n} from \"@agent-native/toolkit/app/agent-page/TimezoneSelect\";\nimport {\n IconBolt,\n IconCalendarEvent,\n IconClock,\n IconCode,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { useEffect, useState } from \"react\";\n\nimport { Button } from \"./ui/button\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"./ui/dialog\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"./ui/tabs\";\nimport { Textarea } from \"./ui/textarea\";\n\ntype TriggerType = \"schedule\" | \"event\" | \"webhook\";\n\ninterface AutomationEvent {\n name: string;\n description?: string;\n}\n\ninterface CreateAutomationInput {\n operation: \"create\";\n name: string;\n scope: \"personal\" | \"organization\";\n triggerType: TriggerType;\n body: string;\n schedule?: string;\n timezone?: string;\n event?: string;\n}\n\ninterface CreateAutomationResult {\n created: true;\n name: string;\n triggerType: TriggerType;\n webhookPath: string | null;\n}\n\nconst PRESETS: {\n value: AutomationSchedulePreset;\n labelKey: string;\n detailKey: string;\n label: string;\n detail: string;\n draft: Partial<AutomationScheduleDraft>;\n}[] = [\n {\n value: \"hourly\",\n labelKey: \"jobs.schedulePreset.hourly\",\n detailKey: \"jobs.schedulePreset.hourlyDetail\",\n label: \"Every hour\",\n detail: \"At the top of the hour\",\n draft: { preset: \"hourly\" },\n },\n {\n value: \"daily-midnight\",\n labelKey: \"jobs.schedulePreset.dailyMidnight\",\n detailKey: \"jobs.schedulePreset.dailyMidnightDetail\",\n label: \"Every day at midnight\",\n detail: \"12:00 AM\",\n draft: { preset: \"daily-midnight\" },\n },\n {\n value: \"daily-noon\",\n labelKey: \"jobs.schedulePreset.dailyNoon\",\n detailKey: \"jobs.schedulePreset.dailyNoonDetail\",\n label: \"Every day at noon\",\n detail: \"12:00 PM\",\n draft: { preset: \"daily-noon\" },\n },\n {\n value: \"weekdays\",\n labelKey: \"jobs.schedulePreset.weekdays\",\n detailKey: \"jobs.schedulePreset.weekdaysDetail\",\n label: \"Every weekday\",\n detail: \"Monday to Friday at 9:00 AM\",\n draft: { preset: \"weekdays\", time: \"09:00\" },\n },\n {\n value: \"weekly\",\n labelKey: \"jobs.schedulePreset.weekly\",\n detailKey: \"jobs.schedulePreset.weeklyDetail\",\n label: \"Every week\",\n detail: \"Sunday at 9:00 AM\",\n draft: { preset: \"weekly\", weekday: 0, time: \"09:00\" },\n },\n];\n\nfunction presetClass(selected: boolean): string {\n return (\n \"rounded-lg border px-3 py-2 text-left transition-colors \" +\n (selected\n ? \"border-primary bg-primary/5 text-foreground\"\n : \"border-border/70 bg-background hover:bg-muted/50\")\n );\n}\n\nfunction scheduleIsValid(value: string): boolean {\n return value.trim().split(/\\s+/).length === 5;\n}\n\nfunction ScheduleFields({\n draft,\n saving,\n onChange,\n}: {\n draft: AutomationScheduleDraft;\n saving: boolean;\n onChange: (patch: Partial<AutomationScheduleDraft>) => void;\n}) {\n const t = useT();\n const customMinute = Number(draft.time.split(\":\")[1] ?? 0);\n return (\n <div className=\"space-y-3 rounded-lg border border-border/70 bg-muted/20 p-3\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_1fr]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.repeatEvery\", { defaultValue: \"Repeat every\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.interval}\n disabled={saving}\n onChange={(event) =>\n onChange({\n interval: Math.min(\n draft.unit === \"day\" ? 1 : 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scheduleUnit\", { defaultValue: \"Unit\" })}</span>\n <Select\n value={draft.unit}\n disabled={saving}\n onValueChange={(value) =>\n onChange({\n unit: value as AutomationScheduleUnit,\n ...(value === \"day\" ? { interval: 1 } : {}),\n })\n }\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"hour\">\n {t(\"jobs.hours\", { defaultValue: \"hour(s)\" })}\n </SelectItem>\n <SelectItem value=\"day\">\n {t(\"jobs.day\", { defaultValue: \"day\" })}\n </SelectItem>\n <SelectItem value=\"week\">\n {t(\"jobs.weeks\", { defaultValue: \"week(s)\" })}\n </SelectItem>\n <SelectItem value=\"month\">\n {t(\"jobs.months\", { defaultValue: \"month(s)\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {draft.unit === \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atMinute\", { defaultValue: \"At minute\" })}</span>\n <Input\n type=\"number\"\n min={0}\n max={59}\n value={customMinute}\n disabled={saving}\n onChange={(event) =>\n onChange({\n time:\n \"00:\" +\n String(\n Math.min(59, Math.max(0, Number(event.target.value) || 0)),\n ).padStart(2, \"0\"),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit === \"week\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.onDay\", { defaultValue: \"On\" })}</span>\n <Select\n value={String(draft.weekday)}\n disabled={saving}\n onValueChange={(value) => onChange({ weekday: Number(value) })}\n >\n <SelectTrigger className=\"bg-background text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {AUTOMATION_WEEKDAYS.map((day) => (\n <SelectItem key={day.value} value={String(day.value)}>\n {day.short}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n\n {draft.unit === \"month\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.dayOfMonth\", { defaultValue: \"Day of month\" })}</span>\n <Input\n type=\"number\"\n min={1}\n max={31}\n value={draft.monthDay}\n disabled={saving}\n onChange={(event) =>\n onChange({\n monthDay: Math.min(\n 31,\n Math.max(1, Number(event.target.value) || 1),\n ),\n })\n }\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n\n {draft.unit !== \"hour\" ? (\n <label className=\"block space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.atTime\", { defaultValue: \"At\" })}</span>\n <Input\n type=\"time\"\n value={draft.time}\n disabled={saving}\n onChange={(event) => onChange({ time: event.target.value })}\n className=\"bg-background text-sm\"\n />\n </label>\n ) : null}\n </div>\n );\n}\n\nfunction ScheduleBuilder({\n saving,\n timezone,\n onTimezoneChange,\n onChange,\n}: {\n saving: boolean;\n timezone: string;\n onTimezoneChange: (value: string) => void;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const [draft, setDraft] = useState<AutomationScheduleDraft>(\n DEFAULT_AUTOMATION_SCHEDULE_DRAFT,\n );\n const [advanced, setAdvanced] = useState(false);\n const [advancedValue, setAdvancedValue] = useState(\"0 * * * *\");\n const friendly = automationScheduleToCron(draft);\n const activeSchedule = advanced\n ? advancedValue.trim()\n : (friendly.schedule ?? \"\");\n const valid =\n scheduleIsValid(activeSchedule) && (!friendly.error || advanced);\n\n useEffect(() => {\n onChange(valid ? activeSchedule : \"\");\n }, [activeSchedule, onChange, valid]);\n\n function choosePreset(\n value: AutomationSchedulePreset,\n presetDraft: Partial<AutomationScheduleDraft>,\n ) {\n setDraft((current) => ({ ...current, ...presetDraft, preset: value }));\n setAdvanced(false);\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n <div className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.repeat\", { defaultValue: \"Repeat\" })}\n </div>\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {PRESETS.map((preset) => (\n <button\n key={preset.value}\n type=\"button\"\n aria-pressed={!advanced && draft.preset === preset.value}\n disabled={saving}\n className={presetClass(\n !advanced && draft.preset === preset.value,\n )}\n onClick={() => choosePreset(preset.value, preset.draft)}\n >\n <span className=\"block text-sm font-medium\">\n {t(preset.labelKey, { defaultValue: preset.label })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(preset.detailKey, { defaultValue: preset.detail })}\n </span>\n </button>\n ))}\n <button\n type=\"button\"\n aria-pressed={!advanced && draft.preset === \"custom\"}\n disabled={saving}\n className={presetClass(!advanced && draft.preset === \"custom\")}\n onClick={() =>\n choosePreset(\"custom\", {\n preset: \"custom\",\n unit: draft.unit || \"day\",\n })\n }\n >\n <span className=\"block text-sm font-medium\">\n {t(\"jobs.schedulePreset.custom\", { defaultValue: \"Custom\" })}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreset.customDetail\", {\n defaultValue: \"Set your own repeat pattern\",\n })}\n </span>\n </button>\n </div>\n </div>\n\n {!advanced && draft.preset === \"custom\" ? (\n <ScheduleFields\n draft={draft}\n saving={saving}\n onChange={(patch) =>\n setDraft((current) => ({ ...current, ...patch }))\n }\n />\n ) : null}\n\n {!advanced && friendly.schedule ? (\n <p className=\"text-xs text-muted-foreground\">\n {t(\"jobs.schedulePreview\", {\n defaultValue: \"Runs {{time}}.\",\n time:\n draft.preset === \"hourly\"\n ? t(\"jobs.schedulePreview.hourly\", {\n defaultValue: \"at the start of every hour\",\n })\n : draft.preset === \"daily-midnight\"\n ? t(\"jobs.schedulePreview.dailyMidnight\", {\n defaultValue: \"every day at midnight\",\n })\n : draft.preset === \"daily-noon\"\n ? t(\"jobs.schedulePreview.dailyNoon\", {\n defaultValue: \"every day at noon\",\n })\n : t(\"jobs.schedulePreview.atTime\", {\n defaultValue: \"at {{time}}\",\n time: formatAutomationTime(draft.time),\n }),\n })}\n </p>\n ) : null}\n {!advanced && friendly.error ? (\n <p className=\"text-xs text-destructive\">\n {friendly.error === \"daily-interval\"\n ? t(\"jobs.dailyIntervalAdvanced\", {\n defaultValue:\n \"Every few days needs the Advanced cron editor below.\",\n })\n : t(\"jobs.weeklyIntervalAdvanced\", {\n defaultValue:\n \"Custom weekly intervals beyond one week are available under Advanced.\",\n })}\n </p>\n ) : null}\n\n <div>\n <label className=\"text-xs font-medium text-foreground\">\n {t(\"jobs.timezone\", { defaultValue: \"Timezone\" })}\n </label>\n <div className=\"mt-1\">\n <TimezoneSelect\n value={timezone}\n disabled={saving}\n onChange={onTimezoneChange}\n suggested={[browserTimezone()]}\n />\n </div>\n </div>\n\n <details\n className=\"group rounded-lg border border-border/70 bg-muted/20\"\n open={advanced}\n onToggle={(event) => {\n const next = event.currentTarget.open;\n if (next && !advanced && friendly.schedule) {\n setAdvancedValue(friendly.schedule);\n }\n setAdvanced(next);\n }}\n >\n <summary className=\"flex cursor-pointer list-none items-center gap-2 px-3 py-2.5 text-xs font-medium text-foreground [&::-webkit-details-marker]:hidden\">\n <IconCode className=\"size-4 text-muted-foreground\" />\n {t(\"jobs.advancedSchedule\", {\n defaultValue: \"Advanced - cron expression\",\n })}\n <span className=\"ms-auto text-muted-foreground group-open:hidden\">\n {t(\"jobs.show\", { defaultValue: \"Show\" })}\n </span>\n <span className=\"ms-auto hidden text-muted-foreground group-open:inline\">\n {t(\"jobs.hide\", { defaultValue: \"Hide\" })}\n </span>\n </summary>\n <div className=\"border-t border-border/60 px-3 pb-3 pt-2.5\">\n <Input\n className=\"font-mono text-sm\"\n value={advancedValue}\n spellCheck={false}\n autoComplete=\"off\"\n disabled={saving}\n onFocus={() => setAdvanced(true)}\n onChange={(event) => {\n setAdvanced(true);\n setAdvancedValue(event.target.value);\n }}\n />\n <p className=\"mt-1 text-[11px] text-muted-foreground\">\n {t(\"jobs.cronFormatHint\", {\n defaultValue: \"minute hour day-of-month month day-of-week\",\n })}\n </p>\n </div>\n </details>\n\n {activeSchedule && !valid ? (\n <p className=\"text-xs text-destructive\">\n {t(\"jobs.cronFieldCount\", {\n defaultValue: \"A cron expression needs exactly 5 fields.\",\n })}\n </p>\n ) : null}\n </div>\n );\n}\n\nfunction EventFields({\n open,\n event,\n onChange,\n}: {\n open: boolean;\n event: string;\n onChange: (value: string) => void;\n}) {\n const t = useT();\n const eventsQuery = useActionQuery<AutomationEvent[]>(\n \"list-automation-events\",\n {},\n { enabled: open, staleTime: 60_000 },\n );\n\n return (\n <>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.startWhen\", { defaultValue: \"Start when\" })}</span>\n <Select value={event} onValueChange={onChange}>\n <SelectTrigger>\n <SelectValue\n placeholder={\n eventsQuery.isLoading\n ? t(\"jobs.loadingEventTypes\", {\n defaultValue: \"Loading event types...\",\n })\n : t(\"jobs.chooseAppEvent\", {\n defaultValue: \"Choose an app event\",\n })\n }\n />\n </SelectTrigger>\n <SelectContent>\n {(eventsQuery.data ?? []).map((item) => (\n <SelectItem key={item.name} value={item.name}>\n {item.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n {eventsQuery.data?.find((item) => item.name === event)?.description ? (\n <p className=\"mt-2 text-xs text-muted-foreground\">\n {eventsQuery.data.find((item) => item.name === event)?.description}\n </p>\n ) : null}\n {eventsQuery.error ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {t(\"jobs.loadEventTypesError\", {\n defaultValue: \"Could not load event types.\",\n })}\n </p>\n ) : null}\n </>\n );\n}\n\nexport interface AutomationCreateDialogProps {\n open: boolean;\n initialScope?: \"personal\" | \"organization\";\n onOpenChange: (open: boolean) => void;\n onCreated: (result: CreateAutomationResult) => void;\n}\n\nexport function AutomationCreateDialog({\n open,\n initialScope = \"personal\",\n onOpenChange,\n onCreated,\n}: AutomationCreateDialogProps) {\n const t = useT();\n const [name, setName] = useState(\"\");\n const [scope, setScope] = useState<\"personal\" | \"organization\">(initialScope);\n const [triggerType, setTriggerType] = useState<TriggerType>(\"schedule\");\n const [schedule, setSchedule] = useState(\"0 * * * *\");\n const [timezone, setTimezone] = useState(browserTimezone());\n const [event, setEvent] = useState(\"\");\n const [body, setBody] = useState(\"\");\n const create = useActionMutation<\n CreateAutomationResult,\n CreateAutomationInput\n >(\"manage-automation\", {\n onSuccess: onCreated,\n });\n\n const resetCreate = create.reset;\n\n useEffect(() => {\n if (!open) return;\n setName(\"\");\n setScope(initialScope);\n setTriggerType(\"schedule\");\n setSchedule(\"0 * * * *\");\n setTimezone(browserTimezone());\n setEvent(\"\");\n setBody(\"\");\n resetCreate();\n }, [initialScope, open, resetCreate]);\n\n const canSubmit =\n name.trim().length > 0 &&\n body.trim().length > 0 &&\n (triggerType !== \"event\" || event.length > 0) &&\n (triggerType !== \"schedule\" || scheduleIsValid(schedule));\n\n function submit() {\n if (!canSubmit) return;\n create.mutate({\n operation: \"create\",\n name: name.trim(),\n scope,\n triggerType,\n body: body.trim(),\n ...(triggerType === \"schedule\"\n ? { schedule, timezone }\n : triggerType === \"event\"\n ? { event }\n : {}),\n });\n }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto sm:max-w-2xl\">\n <DialogHeader>\n <DialogTitle>\n {t(\"jobs.newAutomation\", { defaultValue: \"New automation\" })}\n </DialogTitle>\n <DialogDescription>\n {t(\"jobs.createAutomationDescription\", {\n defaultValue:\n \"Choose what starts it, then describe the work in plain language.\",\n })}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-[1fr_12rem]\">\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.name\", { defaultValue: \"Name\" })}</span>\n <Input\n value={name}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationNamePlaceholder\", {\n defaultValue: \"morning-digest\",\n })}\n onChange={(event) => setName(event.target.value)}\n />\n </label>\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>{t(\"jobs.scope\", { defaultValue: \"Scope\" })}</span>\n <Select\n value={scope}\n disabled={create.isPending}\n onValueChange={(value) =>\n setScope(value as \"personal\" | \"organization\")\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"personal\">\n {t(\"jobs.personal\", { defaultValue: \"Personal\" })}\n </SelectItem>\n <SelectItem value=\"organization\">\n {t(\"jobs.organization\", { defaultValue: \"Organization\" })}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <Tabs\n value={triggerType}\n onValueChange={(value) => setTriggerType(value as TriggerType)}\n >\n <TabsList className=\"grid h-auto w-full grid-cols-3\">\n <TabsTrigger value=\"schedule\" className=\"gap-2 py-2 text-xs\">\n <IconClock className=\"size-3.5\" />\n {t(\"jobs.schedule\", { defaultValue: \"Schedule\" })}\n </TabsTrigger>\n <TabsTrigger value=\"webhook\" className=\"gap-2 py-2 text-xs\">\n <IconBolt className=\"size-3.5\" />\n {t(\"jobs.webhook\", { defaultValue: \"Webhook\" })}\n </TabsTrigger>\n <TabsTrigger value=\"event\" className=\"gap-2 py-2 text-xs\">\n <IconCalendarEvent className=\"size-3.5\" />\n {t(\"jobs.appEvent\", { defaultValue: \"App event\" })}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"schedule\" className=\"mt-3\">\n <ScheduleBuilder\n key={open ? \"schedule-open\" : \"schedule-closed\"}\n saving={create.isPending}\n timezone={timezone}\n onTimezoneChange={setTimezone}\n onChange={setSchedule}\n />\n </TabsContent>\n <TabsContent value=\"webhook\" className=\"mt-3\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-3\">\n <div className=\"flex items-start gap-2\">\n <IconBolt className=\"mt-0.5 size-4 shrink-0 text-primary\" />\n <div>\n <p className=\"text-sm font-medium text-foreground\">\n {t(\"jobs.webhookTriggerDescription\", {\n defaultValue: \"Run when a service sends an HTTP POST\",\n })}\n </p>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {t(\"jobs.webhookSetupDescription\", {\n defaultValue:\n \"After you save, Dispatch gives you a private URL to paste into GitHub, Stripe, or another webhook provider.\",\n })}\n </p>\n </div>\n </div>\n </div>\n </TabsContent>\n <TabsContent value=\"event\" className=\"mt-3\">\n <EventFields open={open} event={event} onChange={setEvent} />\n </TabsContent>\n </Tabs>\n\n <label className=\"space-y-1.5 text-xs text-muted-foreground\">\n <span>\n {t(\"jobs.whatShouldItDo\", { defaultValue: \"What should it do?\" })}\n </span>\n <Textarea\n value={body}\n disabled={create.isPending}\n placeholder={t(\"jobs.automationBodyPlaceholder\", {\n defaultValue:\n \"Review new support requests and summarize anything urgent in a shared note.\",\n })}\n rows={5}\n onChange={(event) => setBody(event.target.value)}\n />\n </label>\n\n {create.error ? (\n <p className=\"text-xs text-destructive\">{create.error.message}</p>\n ) : null}\n </div>\n\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={create.isPending}\n onClick={() => onOpenChange(false)}\n >\n {t(\"jobs.cancel\", { defaultValue: \"Cancel\" })}\n </Button>\n <Button\n type=\"button\"\n disabled={!canSubmit || create.isPending}\n onClick={submit}\n >\n {create.isPending ? (\n <IconLoader2 className=\"size-4 animate-spin\" />\n ) : null}\n {t(\"jobs.createAutomation\", { defaultValue: \"Create automation\" })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { appPath } from "@agent-native/core/client/api-path";
|
|
3
|
-
import { writeClipboardText } from "@agent-native/core/client/clipboard";
|
|
4
3
|
import { useActionQuery } from "@agent-native/core/client/hooks";
|
|
5
4
|
import { useT } from "@agent-native/core/client/i18n";
|
|
5
|
+
import { writeClipboardText } from "@agent-native/toolkit/clipboard";
|
|
6
6
|
import { IconAlertTriangle, IconCheck, IconCopy, IconClock, IconExternalLink, IconPlayerPause, IconPlayerPlay, } from "@tabler/icons-react";
|
|
7
7
|
import { useState } from "react";
|
|
8
8
|
import { Link } from "react-router";
|