@burdenoff/fluidgrids-fe-sdk 2026.825.2 → 2026.829.1
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/dist/ExecutionDetailPage-OWNO2BEW.js +11 -0
- package/dist/{ExecutionDetailPage-FF2DYKAZ.js.map → ExecutionDetailPage-OWNO2BEW.js.map} +1 -1
- package/dist/ExecutionsListPage-6O4AS3CM.js +10 -0
- package/dist/{ExecutionsListPage-NKISRFMA.js.map → ExecutionsListPage-6O4AS3CM.js.map} +1 -1
- package/dist/{MissingNodesInstallModal-HA5L3FK2.js → MissingNodesInstallModal-PZYTCNCV.js} +4 -4
- package/dist/{MissingNodesInstallModal-HA5L3FK2.js.map → MissingNodesInstallModal-PZYTCNCV.js.map} +1 -1
- package/dist/{TemplateConfigurationModal-MXNGZQIC.js → TemplateConfigurationModal-TB7DJBTR.js} +11 -8
- package/dist/TemplateConfigurationModal-TB7DJBTR.js.map +1 -0
- package/dist/{TemplateDetailPanel-CJ3NPVTP.js → TemplateDetailPanel-KS3LQIBD.js} +3 -4
- package/dist/TemplateDetailPanel-KS3LQIBD.js.map +1 -0
- package/dist/WorkflowBuilder-426LYWCE.js +19 -0
- package/dist/{WorkflowBuilder-URMQZLQU.js.map → WorkflowBuilder-426LYWCE.js.map} +1 -1
- package/dist/WorkflowsList-XQW7YPZX.js +12 -0
- package/dist/{WorkflowsList-TZAN3YBA.js.map → WorkflowsList-XQW7YPZX.js.map} +1 -1
- package/dist/{chunk-7VNIEIR6.js → chunk-7YWBH2A5.js} +9 -3
- package/dist/chunk-7YWBH2A5.js.map +1 -0
- package/dist/chunk-ACRXNUU2.js +504 -0
- package/dist/chunk-ACRXNUU2.js.map +1 -0
- package/dist/{chunk-6PNRM3KQ.js → chunk-AE7FZRTH.js} +5 -4
- package/dist/chunk-AE7FZRTH.js.map +1 -0
- package/dist/{chunk-YJKZSUNC.js → chunk-BF4YC7XN.js} +32 -15
- package/dist/chunk-BF4YC7XN.js.map +1 -0
- package/dist/chunk-CLPFGB5Y.js +453 -0
- package/dist/chunk-CLPFGB5Y.js.map +1 -0
- package/dist/{chunk-MH4AHYK3.js → chunk-ELB3LXRJ.js} +17 -5
- package/dist/chunk-ELB3LXRJ.js.map +1 -0
- package/dist/{chunk-IWKLEFC7.js → chunk-GBDXBJPH.js} +7 -6
- package/dist/chunk-GBDXBJPH.js.map +1 -0
- package/dist/{chunk-Y36DJHU3.js → chunk-KT72XMAB.js} +4 -176
- package/dist/chunk-KT72XMAB.js.map +1 -0
- package/dist/chunk-LMO5ASOE.js +43 -0
- package/dist/chunk-LMO5ASOE.js.map +1 -0
- package/dist/{chunk-OHGXRM6Z.js → chunk-NH5YCY37.js} +3 -3
- package/dist/{chunk-OHGXRM6Z.js.map → chunk-NH5YCY37.js.map} +1 -1
- package/dist/chunk-NHPGJMJX.js +395 -0
- package/dist/chunk-NHPGJMJX.js.map +1 -0
- package/dist/{chunk-DVPXNC2S.js → chunk-NZ67MDME.js} +7871 -8046
- package/dist/chunk-NZ67MDME.js.map +1 -0
- package/dist/chunk-PYD2V4U6.js +541 -0
- package/dist/chunk-PYD2V4U6.js.map +1 -0
- package/dist/chunk-RXMBIJ5Z.js +3 -0
- package/dist/chunk-RXMBIJ5Z.js.map +1 -0
- package/dist/{chunk-SG7Z2IRQ.js → chunk-UPN73SK4.js} +5 -5
- package/dist/{chunk-SG7Z2IRQ.js.map → chunk-UPN73SK4.js.map} +1 -1
- package/dist/chunk-VJ2NTNDZ.js +4901 -0
- package/dist/chunk-VJ2NTNDZ.js.map +1 -0
- package/dist/chunk-VJDLWE5S.js +505 -0
- package/dist/chunk-VJDLWE5S.js.map +1 -0
- package/dist/{chunk-V5UEEB74.js → chunk-WO3AHQVD.js} +17 -41
- package/dist/chunk-WO3AHQVD.js.map +1 -0
- package/dist/executions.d.ts +7 -0
- package/dist/executions.js +14 -0
- package/dist/executions.js.map +1 -0
- package/dist/history.d.ts +5 -0
- package/dist/history.js +9 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +147 -616
- package/dist/index.js +61 -6870
- package/dist/index.js.map +1 -1
- package/dist/nodes.d.ts +5 -0
- package/dist/nodes.js +6 -0
- package/dist/nodes.js.map +1 -0
- package/dist/settings.d.ts +5 -0
- package/dist/settings.js +4 -0
- package/dist/settings.js.map +1 -0
- package/dist/templates.d.ts +17 -0
- package/dist/templates.js +19 -0
- package/dist/templates.js.map +1 -0
- package/dist/workflow-builder-JKkdIJoP.d.ts +473 -0
- package/dist/workflow-builder.d.ts +5 -0
- package/dist/workflow-builder.js +20 -0
- package/dist/workflow-builder.js.map +1 -0
- package/dist/workflows-list.d.ts +5 -0
- package/dist/workflows-list.js +12 -0
- package/dist/workflows-list.js.map +1 -0
- package/package.json +29 -1
- package/dist/ExecutionDetailPage-FF2DYKAZ.js +0 -10
- package/dist/ExecutionsListPage-NKISRFMA.js +0 -9
- package/dist/TemplateConfigurationModal-MXNGZQIC.js.map +0 -1
- package/dist/TemplateDetailPanel-CJ3NPVTP.js.map +0 -1
- package/dist/WorkflowBuilder-URMQZLQU.js +0 -17
- package/dist/WorkflowsList-TZAN3YBA.js +0 -11
- package/dist/chunk-6PNRM3KQ.js.map +0 -1
- package/dist/chunk-7VNIEIR6.js.map +0 -1
- package/dist/chunk-DVPXNC2S.js.map +0 -1
- package/dist/chunk-IWKLEFC7.js.map +0 -1
- package/dist/chunk-MH4AHYK3.js.map +0 -1
- package/dist/chunk-V5UEEB74.js.map +0 -1
- package/dist/chunk-Y36DJHU3.js.map +0 -1
- package/dist/chunk-YJKZSUNC.js.map +0 -1
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useNavigate } from 'react-router';
|
|
4
|
+
import { Icon } from '@iconify/react';
|
|
5
|
+
import { Button } from '@burdenoff/fe-libs/button';
|
|
6
|
+
import { Tabs, TabsList, TabsTrigger, TabsContent, Input, Switch, Card, CardHeader, Label, TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '@burdenoff/fe-libs/ui';
|
|
7
|
+
import { toast } from 'sonner';
|
|
8
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
9
|
+
|
|
10
|
+
var DEFAULT_SETTINGS = {
|
|
11
|
+
general: {
|
|
12
|
+
workspaceName: "Default Workspace",
|
|
13
|
+
defaultWorkflowPrefix: "wf",
|
|
14
|
+
autoSaveDrafts: true
|
|
15
|
+
},
|
|
16
|
+
execution: {
|
|
17
|
+
defaultTimeoutSeconds: 300,
|
|
18
|
+
maxRetries: 3,
|
|
19
|
+
retryDelaySeconds: 10,
|
|
20
|
+
concurrentExecutionLimit: 5
|
|
21
|
+
},
|
|
22
|
+
notifications: {
|
|
23
|
+
emailOnSuccess: false,
|
|
24
|
+
emailOnFailure: true,
|
|
25
|
+
webhookOnSuccess: false,
|
|
26
|
+
webhookOnFailure: true
|
|
27
|
+
},
|
|
28
|
+
api: {
|
|
29
|
+
gatewayUrl: "/api/v1/workflows",
|
|
30
|
+
webhookUrlFormat: "/api/v1/webhooks/workflow/{workflowKey}/trigger"
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
function ReadOnlyBanner() {
|
|
34
|
+
const tr = useTr();
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6", children: [
|
|
36
|
+
/* @__PURE__ */ jsx(
|
|
37
|
+
Icon,
|
|
38
|
+
{
|
|
39
|
+
icon: "mdi:information",
|
|
40
|
+
width: 18,
|
|
41
|
+
className: "text-amber-400 shrink-0"
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-amber-400", children: tr(
|
|
45
|
+
"fluidgrids.settings.readOnlyBanner.message",
|
|
46
|
+
"Settings are managed at workspace level. Contact your workspace administrator to change these values."
|
|
47
|
+
) })
|
|
48
|
+
] });
|
|
49
|
+
}
|
|
50
|
+
function CopyButton({ value, label }) {
|
|
51
|
+
const tr = useTr();
|
|
52
|
+
const handleCopy = useCallback(async () => {
|
|
53
|
+
try {
|
|
54
|
+
await navigator.clipboard.writeText(value);
|
|
55
|
+
toast.success(
|
|
56
|
+
`${label} ${tr("fluidgrids.settings.copyButton.copiedToast", "copied to clipboard")}`
|
|
57
|
+
);
|
|
58
|
+
} catch {
|
|
59
|
+
toast.error(
|
|
60
|
+
tr(
|
|
61
|
+
"fluidgrids.settings.copyButton.copyFailedToast",
|
|
62
|
+
"Failed to copy to clipboard"
|
|
63
|
+
)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}, [value, label, tr]);
|
|
67
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
68
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
69
|
+
"button",
|
|
70
|
+
{
|
|
71
|
+
onClick: handleCopy,
|
|
72
|
+
className: "p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors",
|
|
73
|
+
children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:content-copy", width: 16 })
|
|
74
|
+
}
|
|
75
|
+
) }),
|
|
76
|
+
/* @__PURE__ */ jsxs(TooltipContent, { children: [
|
|
77
|
+
tr("fluidgrids.settings.copyButton.copyTooltipPrefix", "Copy"),
|
|
78
|
+
" ",
|
|
79
|
+
label
|
|
80
|
+
] })
|
|
81
|
+
] }) });
|
|
82
|
+
}
|
|
83
|
+
function SettingRow({
|
|
84
|
+
label,
|
|
85
|
+
description,
|
|
86
|
+
children
|
|
87
|
+
}) {
|
|
88
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4", children: [
|
|
89
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
90
|
+
/* @__PURE__ */ jsx(Label, { className: "text-sm font-medium text-text-primary", children: label }),
|
|
91
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary mt-0.5", children: description })
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ jsx("div", { className: "shrink-0", children })
|
|
94
|
+
] });
|
|
95
|
+
}
|
|
96
|
+
function GeneralTab() {
|
|
97
|
+
const tr = useTr();
|
|
98
|
+
const settings = DEFAULT_SETTINGS.general;
|
|
99
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
100
|
+
/* @__PURE__ */ jsx(ReadOnlyBanner, {}),
|
|
101
|
+
/* @__PURE__ */ jsxs("div", { className: "divide-y divide-border-secondary", children: [
|
|
102
|
+
/* @__PURE__ */ jsx(
|
|
103
|
+
SettingRow,
|
|
104
|
+
{
|
|
105
|
+
label: tr(
|
|
106
|
+
"fluidgrids.settings.general.workspaceNameLabel",
|
|
107
|
+
"Workspace Name"
|
|
108
|
+
),
|
|
109
|
+
description: tr(
|
|
110
|
+
"fluidgrids.settings.general.workspaceNameDescription",
|
|
111
|
+
"The name of your workspace"
|
|
112
|
+
),
|
|
113
|
+
children: /* @__PURE__ */ jsx(
|
|
114
|
+
Input,
|
|
115
|
+
{
|
|
116
|
+
value: settings.workspaceName,
|
|
117
|
+
readOnly: true,
|
|
118
|
+
className: "w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default"
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
SettingRow,
|
|
125
|
+
{
|
|
126
|
+
label: tr(
|
|
127
|
+
"fluidgrids.settings.general.workflowPrefixLabel",
|
|
128
|
+
"Default Workflow Prefix"
|
|
129
|
+
),
|
|
130
|
+
description: tr(
|
|
131
|
+
"fluidgrids.settings.general.workflowPrefixDescription",
|
|
132
|
+
"Prefix used when generating new workflow keys"
|
|
133
|
+
),
|
|
134
|
+
children: /* @__PURE__ */ jsx(
|
|
135
|
+
Input,
|
|
136
|
+
{
|
|
137
|
+
value: settings.defaultWorkflowPrefix,
|
|
138
|
+
readOnly: true,
|
|
139
|
+
className: "w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default"
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
),
|
|
144
|
+
/* @__PURE__ */ jsx(
|
|
145
|
+
SettingRow,
|
|
146
|
+
{
|
|
147
|
+
label: tr(
|
|
148
|
+
"fluidgrids.settings.general.autoSaveDraftsLabel",
|
|
149
|
+
"Auto-save Drafts"
|
|
150
|
+
),
|
|
151
|
+
description: tr(
|
|
152
|
+
"fluidgrids.settings.general.autoSaveDraftsDescription",
|
|
153
|
+
"Automatically save draft workflows while editing"
|
|
154
|
+
),
|
|
155
|
+
children: /* @__PURE__ */ jsx(Switch, { checked: settings.autoSaveDrafts, disabled: true })
|
|
156
|
+
}
|
|
157
|
+
)
|
|
158
|
+
] })
|
|
159
|
+
] });
|
|
160
|
+
}
|
|
161
|
+
function ExecutionTab() {
|
|
162
|
+
const tr = useTr();
|
|
163
|
+
const settings = DEFAULT_SETTINGS.execution;
|
|
164
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
165
|
+
/* @__PURE__ */ jsx(ReadOnlyBanner, {}),
|
|
166
|
+
/* @__PURE__ */ jsxs("div", { className: "divide-y divide-border-secondary", children: [
|
|
167
|
+
/* @__PURE__ */ jsx(
|
|
168
|
+
SettingRow,
|
|
169
|
+
{
|
|
170
|
+
label: tr(
|
|
171
|
+
"fluidgrids.settings.execution.defaultTimeoutLabel",
|
|
172
|
+
"Default Timeout"
|
|
173
|
+
),
|
|
174
|
+
description: tr(
|
|
175
|
+
"fluidgrids.settings.execution.defaultTimeoutDescription",
|
|
176
|
+
"Maximum time a workflow execution can run (in seconds)"
|
|
177
|
+
),
|
|
178
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
179
|
+
/* @__PURE__ */ jsx(
|
|
180
|
+
Input,
|
|
181
|
+
{
|
|
182
|
+
value: settings.defaultTimeoutSeconds,
|
|
183
|
+
readOnly: true,
|
|
184
|
+
className: "w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default"
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-text-secondary", children: tr(
|
|
188
|
+
"fluidgrids.settings.execution.defaultTimeoutUnit",
|
|
189
|
+
"seconds"
|
|
190
|
+
) })
|
|
191
|
+
] })
|
|
192
|
+
}
|
|
193
|
+
),
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
SettingRow,
|
|
196
|
+
{
|
|
197
|
+
label: tr(
|
|
198
|
+
"fluidgrids.settings.execution.maxRetriesLabel",
|
|
199
|
+
"Max Retries"
|
|
200
|
+
),
|
|
201
|
+
description: tr(
|
|
202
|
+
"fluidgrids.settings.execution.maxRetriesDescription",
|
|
203
|
+
"Number of automatic retries on execution failure"
|
|
204
|
+
),
|
|
205
|
+
children: /* @__PURE__ */ jsx(
|
|
206
|
+
Input,
|
|
207
|
+
{
|
|
208
|
+
value: settings.maxRetries,
|
|
209
|
+
readOnly: true,
|
|
210
|
+
className: "w-[80px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default"
|
|
211
|
+
}
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
),
|
|
215
|
+
/* @__PURE__ */ jsx(
|
|
216
|
+
SettingRow,
|
|
217
|
+
{
|
|
218
|
+
label: tr(
|
|
219
|
+
"fluidgrids.settings.execution.retryDelayLabel",
|
|
220
|
+
"Retry Delay"
|
|
221
|
+
),
|
|
222
|
+
description: tr(
|
|
223
|
+
"fluidgrids.settings.execution.retryDelayDescription",
|
|
224
|
+
"Delay between retry attempts (in seconds)"
|
|
225
|
+
),
|
|
226
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
227
|
+
/* @__PURE__ */ jsx(
|
|
228
|
+
Input,
|
|
229
|
+
{
|
|
230
|
+
value: settings.retryDelaySeconds,
|
|
231
|
+
readOnly: true,
|
|
232
|
+
className: "w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default"
|
|
233
|
+
}
|
|
234
|
+
),
|
|
235
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-text-secondary", children: tr("fluidgrids.settings.execution.retryDelayUnit", "seconds") })
|
|
236
|
+
] })
|
|
237
|
+
}
|
|
238
|
+
),
|
|
239
|
+
/* @__PURE__ */ jsx(
|
|
240
|
+
SettingRow,
|
|
241
|
+
{
|
|
242
|
+
label: tr(
|
|
243
|
+
"fluidgrids.settings.execution.concurrencyLimitLabel",
|
|
244
|
+
"Concurrent Execution Limit"
|
|
245
|
+
),
|
|
246
|
+
description: tr(
|
|
247
|
+
"fluidgrids.settings.execution.concurrencyLimitDescription",
|
|
248
|
+
"Maximum number of workflow executions running simultaneously"
|
|
249
|
+
),
|
|
250
|
+
children: /* @__PURE__ */ jsx(
|
|
251
|
+
Input,
|
|
252
|
+
{
|
|
253
|
+
value: settings.concurrentExecutionLimit,
|
|
254
|
+
readOnly: true,
|
|
255
|
+
className: "w-[80px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default"
|
|
256
|
+
}
|
|
257
|
+
)
|
|
258
|
+
}
|
|
259
|
+
)
|
|
260
|
+
] })
|
|
261
|
+
] });
|
|
262
|
+
}
|
|
263
|
+
function NotificationsTab() {
|
|
264
|
+
const tr = useTr();
|
|
265
|
+
const settings = DEFAULT_SETTINGS.notifications;
|
|
266
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
267
|
+
/* @__PURE__ */ jsx(ReadOnlyBanner, {}),
|
|
268
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-6", children: [
|
|
269
|
+
/* @__PURE__ */ jsxs("h3", { className: "text-sm font-semibold text-text-primary flex items-center gap-2 mb-3", children: [
|
|
270
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:email-outline", width: 18 }),
|
|
271
|
+
tr(
|
|
272
|
+
"fluidgrids.settings.notifications.emailSectionTitle",
|
|
273
|
+
"Email Notifications"
|
|
274
|
+
)
|
|
275
|
+
] }),
|
|
276
|
+
/* @__PURE__ */ jsxs("div", { className: "divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1", children: [
|
|
277
|
+
/* @__PURE__ */ jsx(
|
|
278
|
+
SettingRow,
|
|
279
|
+
{
|
|
280
|
+
label: tr(
|
|
281
|
+
"fluidgrids.settings.notifications.emailOnSuccessLabel",
|
|
282
|
+
"On Success"
|
|
283
|
+
),
|
|
284
|
+
description: tr(
|
|
285
|
+
"fluidgrids.settings.notifications.emailOnSuccessDescription",
|
|
286
|
+
"Send email when a workflow execution completes successfully"
|
|
287
|
+
),
|
|
288
|
+
children: /* @__PURE__ */ jsx(Switch, { checked: settings.emailOnSuccess, disabled: true })
|
|
289
|
+
}
|
|
290
|
+
),
|
|
291
|
+
/* @__PURE__ */ jsx(
|
|
292
|
+
SettingRow,
|
|
293
|
+
{
|
|
294
|
+
label: tr(
|
|
295
|
+
"fluidgrids.settings.notifications.emailOnFailureLabel",
|
|
296
|
+
"On Failure"
|
|
297
|
+
),
|
|
298
|
+
description: tr(
|
|
299
|
+
"fluidgrids.settings.notifications.emailOnFailureDescription",
|
|
300
|
+
"Send email when a workflow execution fails"
|
|
301
|
+
),
|
|
302
|
+
children: /* @__PURE__ */ jsx(Switch, { checked: settings.emailOnFailure, disabled: true })
|
|
303
|
+
}
|
|
304
|
+
)
|
|
305
|
+
] })
|
|
306
|
+
] }),
|
|
307
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
308
|
+
/* @__PURE__ */ jsxs("h3", { className: "text-sm font-semibold text-text-primary flex items-center gap-2 mb-3", children: [
|
|
309
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:webhook", width: 18 }),
|
|
310
|
+
tr(
|
|
311
|
+
"fluidgrids.settings.notifications.webhookSectionTitle",
|
|
312
|
+
"Webhook Notifications"
|
|
313
|
+
)
|
|
314
|
+
] }),
|
|
315
|
+
/* @__PURE__ */ jsxs("div", { className: "divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1", children: [
|
|
316
|
+
/* @__PURE__ */ jsx(
|
|
317
|
+
SettingRow,
|
|
318
|
+
{
|
|
319
|
+
label: tr(
|
|
320
|
+
"fluidgrids.settings.notifications.webhookOnSuccessLabel",
|
|
321
|
+
"On Success"
|
|
322
|
+
),
|
|
323
|
+
description: tr(
|
|
324
|
+
"fluidgrids.settings.notifications.webhookOnSuccessDescription",
|
|
325
|
+
"Send webhook when a workflow execution completes successfully"
|
|
326
|
+
),
|
|
327
|
+
children: /* @__PURE__ */ jsx(Switch, { checked: settings.webhookOnSuccess, disabled: true })
|
|
328
|
+
}
|
|
329
|
+
),
|
|
330
|
+
/* @__PURE__ */ jsx(
|
|
331
|
+
SettingRow,
|
|
332
|
+
{
|
|
333
|
+
label: tr(
|
|
334
|
+
"fluidgrids.settings.notifications.webhookOnFailureLabel",
|
|
335
|
+
"On Failure"
|
|
336
|
+
),
|
|
337
|
+
description: tr(
|
|
338
|
+
"fluidgrids.settings.notifications.webhookOnFailureDescription",
|
|
339
|
+
"Send webhook when a workflow execution fails"
|
|
340
|
+
),
|
|
341
|
+
children: /* @__PURE__ */ jsx(Switch, { checked: settings.webhookOnFailure, disabled: true })
|
|
342
|
+
}
|
|
343
|
+
)
|
|
344
|
+
] })
|
|
345
|
+
] })
|
|
346
|
+
] });
|
|
347
|
+
}
|
|
348
|
+
function ApiTab() {
|
|
349
|
+
const tr = useTr();
|
|
350
|
+
const settings = DEFAULT_SETTINGS.api;
|
|
351
|
+
return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
352
|
+
/* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardHeader, { className: "pb-3", children: [
|
|
353
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
354
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:api", width: 20, className: "text-text-secondary" }),
|
|
355
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-text-primary", children: tr(
|
|
356
|
+
"fluidgrids.settings.api.gatewayUrlTitle",
|
|
357
|
+
"API Gateway URL"
|
|
358
|
+
) })
|
|
359
|
+
] }),
|
|
360
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary mb-3", children: tr(
|
|
361
|
+
"fluidgrids.settings.api.gatewayUrlDescription",
|
|
362
|
+
"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically."
|
|
363
|
+
) }),
|
|
364
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary", children: [
|
|
365
|
+
/* @__PURE__ */ jsx("code", { className: "text-sm text-text-primary flex-1 truncate", children: settings.gatewayUrl }),
|
|
366
|
+
/* @__PURE__ */ jsx(
|
|
367
|
+
CopyButton,
|
|
368
|
+
{
|
|
369
|
+
value: settings.gatewayUrl,
|
|
370
|
+
label: tr(
|
|
371
|
+
"fluidgrids.settings.api.gatewayUrlCopyLabel",
|
|
372
|
+
"API Gateway URL"
|
|
373
|
+
)
|
|
374
|
+
}
|
|
375
|
+
)
|
|
376
|
+
] })
|
|
377
|
+
] }) }),
|
|
378
|
+
/* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardHeader, { className: "pb-3", children: [
|
|
379
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
380
|
+
/* @__PURE__ */ jsx(
|
|
381
|
+
Icon,
|
|
382
|
+
{
|
|
383
|
+
icon: "mdi:webhook",
|
|
384
|
+
width: 20,
|
|
385
|
+
className: "text-text-secondary"
|
|
386
|
+
}
|
|
387
|
+
),
|
|
388
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-text-primary", children: tr(
|
|
389
|
+
"fluidgrids.settings.api.webhookUrlTitle",
|
|
390
|
+
"Webhook URL Format"
|
|
391
|
+
) })
|
|
392
|
+
] }),
|
|
393
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-text-secondary mb-3", children: [
|
|
394
|
+
tr(
|
|
395
|
+
"fluidgrids.settings.api.webhookUrlDescriptionPrefix",
|
|
396
|
+
"URL format for triggering workflows via webhook. Replace"
|
|
397
|
+
),
|
|
398
|
+
" ",
|
|
399
|
+
/* @__PURE__ */ jsx("code", { className: "text-text-primary", children: "{workflowKey}" }),
|
|
400
|
+
" ",
|
|
401
|
+
tr(
|
|
402
|
+
"fluidgrids.settings.api.webhookUrlDescriptionSuffix",
|
|
403
|
+
"with the actual workflow key."
|
|
404
|
+
)
|
|
405
|
+
] }),
|
|
406
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary", children: [
|
|
407
|
+
/* @__PURE__ */ jsx("code", { className: "text-sm text-text-primary flex-1 truncate", children: settings.webhookUrlFormat }),
|
|
408
|
+
/* @__PURE__ */ jsx(
|
|
409
|
+
CopyButton,
|
|
410
|
+
{
|
|
411
|
+
value: settings.webhookUrlFormat,
|
|
412
|
+
label: tr(
|
|
413
|
+
"fluidgrids.settings.api.webhookUrlCopyLabel",
|
|
414
|
+
"Webhook URL"
|
|
415
|
+
)
|
|
416
|
+
}
|
|
417
|
+
)
|
|
418
|
+
] })
|
|
419
|
+
] }) }),
|
|
420
|
+
/* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardHeader, { className: "pb-3", children: [
|
|
421
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
422
|
+
/* @__PURE__ */ jsx(
|
|
423
|
+
Icon,
|
|
424
|
+
{
|
|
425
|
+
icon: "mdi:console",
|
|
426
|
+
width: 20,
|
|
427
|
+
className: "text-text-secondary"
|
|
428
|
+
}
|
|
429
|
+
),
|
|
430
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-text-primary", children: tr(
|
|
431
|
+
"fluidgrids.settings.api.curlExampleTitle",
|
|
432
|
+
"Example: Trigger via cURL"
|
|
433
|
+
) })
|
|
434
|
+
] }),
|
|
435
|
+
/* @__PURE__ */ jsxs("div", { className: "relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary", children: [
|
|
436
|
+
/* @__PURE__ */ jsx("pre", { className: "text-xs text-text-primary overflow-x-auto whitespace-pre-wrap", children: `curl -X POST "${settings.webhookUrlFormat}" \\
|
|
437
|
+
-H "Content-Type: application/json" \\
|
|
438
|
+
-H "Authorization: Bearer <token>" \\
|
|
439
|
+
-d '{"input": {}}'` }),
|
|
440
|
+
/* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2", children: /* @__PURE__ */ jsx(
|
|
441
|
+
CopyButton,
|
|
442
|
+
{
|
|
443
|
+
value: `curl -X POST "${settings.webhookUrlFormat}" \\
|
|
444
|
+
-H "Content-Type: application/json" \\
|
|
445
|
+
-H "Authorization: Bearer <token>" \\
|
|
446
|
+
-d '{"input": {}}'`,
|
|
447
|
+
label: tr(
|
|
448
|
+
"fluidgrids.settings.api.curlCopyLabel",
|
|
449
|
+
"cURL command"
|
|
450
|
+
)
|
|
451
|
+
}
|
|
452
|
+
) })
|
|
453
|
+
] })
|
|
454
|
+
] }) })
|
|
455
|
+
] }) });
|
|
456
|
+
}
|
|
457
|
+
function SettingsPage() {
|
|
458
|
+
const tr = useTr();
|
|
459
|
+
const navigate = useNavigate();
|
|
460
|
+
const [activeTab, setActiveTab] = useState("general");
|
|
461
|
+
return /* @__PURE__ */ jsxs("div", { className: "p-4 sm:p-6 bg-background-primary min-h-screen", children: [
|
|
462
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6", children: [
|
|
463
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
464
|
+
/* @__PURE__ */ jsx("h1", { className: "text-2xl sm:text-3xl font-bold text-text-primary", children: tr("fluidgrids.settings.page.title", "Settings") }),
|
|
465
|
+
/* @__PURE__ */ jsx("p", { className: "text-text-secondary mt-1", children: tr(
|
|
466
|
+
"fluidgrids.settings.page.subtitle",
|
|
467
|
+
"Configure workflow execution and notification preferences"
|
|
468
|
+
) })
|
|
469
|
+
] }),
|
|
470
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => navigate("../list"), children: [
|
|
471
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-left", className: "mr-2", width: 16 }),
|
|
472
|
+
tr("fluidgrids.settings.page.backToWorkflows", "Back to Workflows")
|
|
473
|
+
] })
|
|
474
|
+
] }),
|
|
475
|
+
/* @__PURE__ */ jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "w-full", children: [
|
|
476
|
+
/* @__PURE__ */ jsxs(TabsList, { className: "bg-background-secondary border border-border-secondary mb-6", children: [
|
|
477
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "general", className: "gap-1.5", children: [
|
|
478
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:cog", width: 16 }),
|
|
479
|
+
tr("fluidgrids.settings.page.generalTab", "General")
|
|
480
|
+
] }),
|
|
481
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "execution", className: "gap-1.5", children: [
|
|
482
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:play-circle", width: 16 }),
|
|
483
|
+
tr("fluidgrids.settings.page.executionTab", "Execution")
|
|
484
|
+
] }),
|
|
485
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "notifications", className: "gap-1.5", children: [
|
|
486
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:bell-outline", width: 16 }),
|
|
487
|
+
tr("fluidgrids.settings.page.notificationsTab", "Notifications")
|
|
488
|
+
] }),
|
|
489
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "api", className: "gap-1.5", children: [
|
|
490
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:api", width: 16 }),
|
|
491
|
+
tr("fluidgrids.settings.page.apiTab", "API")
|
|
492
|
+
] })
|
|
493
|
+
] }),
|
|
494
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "general", children: /* @__PURE__ */ jsx(GeneralTab, {}) }),
|
|
495
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "execution", children: /* @__PURE__ */ jsx(ExecutionTab, {}) }),
|
|
496
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "notifications", children: /* @__PURE__ */ jsx(NotificationsTab, {}) }),
|
|
497
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "api", children: /* @__PURE__ */ jsx(ApiTab, {}) })
|
|
498
|
+
] })
|
|
499
|
+
] });
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
export { SettingsPage };
|
|
503
|
+
//# sourceMappingURL=chunk-ACRXNUU2.js.map
|
|
504
|
+
//# sourceMappingURL=chunk-ACRXNUU2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/settings/pages/SettingsPage.tsx"],"names":[],"mappings":";;;;;;;;;AA0BA,IAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS;AAAA,IACP,aAAA,EAAe,mBAAA;AAAA,IACf,qBAAA,EAAuB,IAAA;AAAA,IACvB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,qBAAA,EAAuB,GAAA;AAAA,IACvB,UAAA,EAAY,CAAA;AAAA,IACZ,iBAAA,EAAmB,EAAA;AAAA,IACnB,wBAAA,EAA0B;AAAA,GAC5B;AAAA,EACA,aAAA,EAAe;AAAA,IACb,cAAA,EAAgB,KAAA;AAAA,IAChB,cAAA,EAAgB,IAAA;AAAA,IAChB,gBAAA,EAAkB,KAAA;AAAA,IAClB,gBAAA,EAAkB;AAAA,GACpB;AAAA,EACA,GAAA,EAAK;AAAA,IACH,UAAA,EAAY,mBAAA;AAAA,IACZ,gBAAA,EAAkB;AAAA;AAEtB,CAAA;AAMA,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,iBAAA;AAAA,QACL,KAAA,EAAO,EAAA;AAAA,QACP,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wBAAA,EACV,QAAA,EAAA,EAAA;AAAA,MACC,4CAAA;AAAA,MACA;AAAA,KACF,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAO,KAAA,EAAM,EAAqC;AACtE,EAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,EAAA,MAAM,UAAA,GAAa,YAAY,YAAY;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA;AACzC,MAAA,KAAA,CAAM,OAAA;AAAA,QACJ,GAAG,KAAK,CAAA,CAAA,EAAI,EAAA,CAAG,4CAAA,EAA8C,qBAAqB,CAAC,CAAA;AAAA,OACrF;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA,CAAM,KAAA;AAAA,QACJ,EAAA;AAAA,UACE,gDAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,EAAE,CAAC,CAAA;AAErB,EAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAU,0GAAA;AAAA,QAEV,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,OAAO,EAAA,EAAI;AAAA;AAAA,KAC3C,EACF,CAAA;AAAA,yBACC,cAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,EAAA,CAAG,oDAAoD,MAAM,CAAA;AAAA,MAAG,GAAA;AAAA,MAChE;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CAAW;AAAA,EAClB,KAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yEAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC/D,WAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAEnE,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,QAAA,EAAS;AAAA,GAAA,EACtC,CAAA;AAEJ;AAMA,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,gBAAA,CAAiB,OAAA;AAElC,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAChB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,gDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,sDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAO,QAAA,CAAS,aAAA;AAAA,cAChB,QAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,iDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,uDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAO,QAAA,CAAS,qBAAA;AAAA,cAChB,QAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,iDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,uDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,QAAA,CAAS,cAAA,EAAgB,UAAQ,IAAA,EAAC;AAAA;AAAA;AACrD,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,YAAA,GAAe;AACtB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,gBAAA,CAAiB,SAAA;AAElC,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAChB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,mDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,yDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,OAAO,QAAA,CAAS,qBAAA;AAAA,gBAChB,QAAA,EAAQ,IAAA;AAAA,gBACR,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,4BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA,EAAA;AAAA,cACC,kDAAA;AAAA,cACA;AAAA,aACF,EACF;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,+CAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,qDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAO,QAAA,CAAS,UAAA;AAAA,cAChB,QAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,+CAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,qDAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,OAAO,QAAA,CAAS,iBAAA;AAAA,gBAChB,QAAA,EAAQ,IAAA;AAAA,gBACR,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,gCACC,MAAA,EAAA,EAAK,SAAA,EAAU,+BACb,QAAA,EAAA,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA,EAC/D;AAAA,WAAA,EACF;AAAA;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAA;AAAA,YACL,qDAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAa,EAAA;AAAA,YACX,2DAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEA,QAAA,kBAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAO,QAAA,CAAS,wBAAA;AAAA,cAChB,QAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AACF,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,gBAAA,CAAiB,aAAA;AAElC,EAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,oBAGhB,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,sEAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,mBAAA,EAAoB,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,QACzC,EAAA;AAAA,UACC,qDAAA;AAAA,UACA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAA;AAAA,cACL,uDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAa,EAAA;AAAA,cACX,6DAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,QAAA,CAAS,cAAA,EAAgB,UAAQ,IAAA,EAAC;AAAA;AAAA,SACrD;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAA;AAAA,cACL,uDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAa,EAAA;AAAA,cACX,6DAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,QAAA,CAAS,cAAA,EAAgB,UAAQ,IAAA,EAAC;AAAA;AAAA;AACrD,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,yBAGC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,sEAAA,EACZ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,QACnC,EAAA;AAAA,UACC,uDAAA;AAAA,UACA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wGAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAA;AAAA,cACL,yDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAa,EAAA;AAAA,cACX,+DAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,QAAA,CAAS,gBAAA,EAAkB,UAAQ,IAAA,EAAC;AAAA;AAAA,SACvD;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAA;AAAA,cACL,yDAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,WAAA,EAAa,EAAA;AAAA,cACX,+DAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,8BAAC,MAAA,EAAA,EAAO,OAAA,EAAS,QAAA,CAAS,gBAAA,EAAkB,UAAQ,IAAA,EAAC;AAAA;AAAA;AACvD,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,MAAA,GAAS;AAChB,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,gBAAA,CAAiB,GAAA;AAElC,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,SAAA,EAAU,wDAAA,EACd,QAAA,kBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,MAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAA,EAAI,WAAU,qBAAA,EAAsB,CAAA;AAAA,wBAChE,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,EAAA;AAAA,UACC,yCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EACV,QAAA,EAAA,EAAA;AAAA,QACC,+CAAA;AAAA,QACA;AAAA,OACF,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oGAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA,QAAA,CAAS,UAAA,EACZ,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAO,QAAA,CAAS,UAAA;AAAA,YAChB,KAAA,EAAO,EAAA;AAAA,cACL,6CAAA;AAAA,cACA;AAAA;AACF;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGC,IAAA,EAAA,EAAK,SAAA,EAAU,0DACd,QAAA,kBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,MAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,aAAA;AAAA,YACL,KAAA,EAAO,EAAA;AAAA,YACP,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,EAAA;AAAA,UACC,yCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EACV,QAAA,EAAA;AAAA,QAAA,EAAA;AAAA,UACC,qDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAAG,GAAA;AAAA,wBACH,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,QAAQ,GAAA;AAAA,QAC5D,EAAA;AAAA,UACC,qDAAA;AAAA,UACA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oGAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA,QAAA,CAAS,gBAAA,EACZ,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAO,QAAA,CAAS,gBAAA;AAAA,YAChB,KAAA,EAAO,EAAA;AAAA,cACL,6CAAA;AAAA,cACA;AAAA;AACF;AAAA;AACF,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGC,IAAA,EAAA,EAAK,SAAA,EAAU,0DACd,QAAA,kBAAA,IAAA,CAAC,UAAA,EAAA,EAAW,WAAU,MAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,aAAA;AAAA,YACL,KAAA,EAAO,EAAA;AAAA,YACP,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAA,EACX,QAAA,EAAA,EAAA;AAAA,UACC,0CAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qFAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DAAA,EACZ,QAAA,EAAA,CAAA,cAAA,EAAiB,SAAS,gBAAgB,CAAA;AAAA;AAAA;AAAA,oBAAA,CAAA,EAI7C,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,CAAA,cAAA,EAAiB,QAAA,CAAS,gBAAgB,CAAA;AAAA;AAAA;AAAA,oBAAA,CAAA;AAAA,YACjD,KAAA,EAAO,EAAA;AAAA,cACL,uCAAA;AAAA,cACA;AAAA;AACF;AAAA,SACF,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAMO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,KAAK,KAAA,EAAM;AACjB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,SAAS,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAEb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAG,SAAA,EAAU,kDAAA,EACX,QAAA,EAAA,EAAA,CAAG,gCAAA,EAAkC,UAAU,CAAA,EAClD,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EACV,QAAA,EAAA,EAAA;AAAA,UACC,mCAAA;AAAA,UACA;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,SAAS,MAAM,QAAA,CAAS,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,gBAAA,EAAiB,SAAA,EAAU,MAAA,EAAO,OAAO,EAAA,EAAI,CAAA;AAAA,QACvD,EAAA,CAAG,4CAA4C,mBAAmB;AAAA,OAAA,EACrE;AAAA,KAAA,EACF,CAAA;AAAA,yBAGC,IAAA,EAAA,EAAK,KAAA,EAAO,WAAW,aAAA,EAAe,YAAA,EAAc,WAAU,QAAA,EAC7D,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,QAAA,EAAA,EAAS,WAAU,6DAAA,EAClB,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,SAAA,EAAU,SAAA,EAAU,SAAA,EACrC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,UAC/B,EAAA,CAAG,uCAAuC,SAAS;AAAA,SAAA,EACtD,CAAA;AAAA,wBACA,IAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EAAY,WAAU,SAAA,EACvC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,iBAAA,EAAkB,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,UACvC,EAAA,CAAG,yCAAyC,WAAW;AAAA,SAAA,EAC1D,CAAA;AAAA,wBACA,IAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,eAAA,EAAgB,WAAU,SAAA,EAC3C,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,kBAAA,EAAmB,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,UACxC,EAAA,CAAG,6CAA6C,eAAe;AAAA,SAAA,EAClE,CAAA;AAAA,wBACA,IAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,KAAA,EAAM,WAAU,SAAA,EACjC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,SAAA,EAAU,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,UAC/B,EAAA,CAAG,mCAAmC,KAAK;AAAA,SAAA,EAC9C;AAAA,OAAA,EACF,CAAA;AAAA,0BAEC,WAAA,EAAA,EAAY,KAAA,EAAM,SAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,cAAW,CAAA,EACd,CAAA;AAAA,0BACC,WAAA,EAAA,EAAY,KAAA,EAAM,WAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,gBAAa,CAAA,EAChB,CAAA;AAAA,0BACC,WAAA,EAAA,EAAY,KAAA,EAAM,eAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,oBAAiB,CAAA,EACpB,CAAA;AAAA,0BACC,WAAA,EAAA,EAAY,KAAA,EAAM,KAAA,EACjB,QAAA,kBAAA,GAAA,CAAC,UAAO,CAAA,EACV;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-ACRXNUU2.js","sourcesContent":["import { useState, useCallback } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_SETTINGS = {\n general: {\n workspaceName: \"Default Workspace\",\n defaultWorkflowPrefix: \"wf\",\n autoSaveDrafts: true,\n },\n execution: {\n defaultTimeoutSeconds: 300,\n maxRetries: 3,\n retryDelaySeconds: 10,\n concurrentExecutionLimit: 5,\n },\n notifications: {\n emailOnSuccess: false,\n emailOnFailure: true,\n webhookOnSuccess: false,\n webhookOnFailure: true,\n },\n api: {\n gatewayUrl: \"/api/v1/workflows\",\n webhookUrlFormat: \"/api/v1/webhooks/workflow/{workflowKey}/trigger\",\n },\n};\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction ReadOnlyBanner() {\n const tr = useTr();\n\n return (\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.readOnlyBanner.message\",\n \"Settings are managed at workspace level. Contact your workspace administrator to change these values.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const tr = useTr();\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n toast.success(\n `${label} ${tr(\"fluidgrids.settings.copyButton.copiedToast\", \"copied to clipboard\")}`,\n );\n } catch {\n toast.error(\n tr(\n \"fluidgrids.settings.copyButton.copyFailedToast\",\n \"Failed to copy to clipboard\",\n ),\n );\n }\n }, [value, label, tr]);\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\"\n >\n <Icon icon=\"mdi:content-copy\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\"fluidgrids.settings.copyButton.copyTooltipPrefix\", \"Copy\")}{\" \"}\n {label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction SettingRow({\n label,\n description,\n children,\n}: {\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4\">\n <div className=\"flex-1 min-w-0\">\n <Label className=\"text-sm font-medium text-text-primary\">{label}</Label>\n {description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ============================================================================\n// Tab Content Components\n// ============================================================================\n\nfunction GeneralTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.general;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workspaceNameLabel\",\n \"Workspace Name\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workspaceNameDescription\",\n \"The name of your workspace\",\n )}\n >\n <Input\n value={settings.workspaceName}\n readOnly\n className=\"w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workflowPrefixLabel\",\n \"Default Workflow Prefix\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workflowPrefixDescription\",\n \"Prefix used when generating new workflow keys\",\n )}\n >\n <Input\n value={settings.defaultWorkflowPrefix}\n readOnly\n className=\"w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.autoSaveDraftsLabel\",\n \"Auto-save Drafts\",\n )}\n description={tr(\n \"fluidgrids.settings.general.autoSaveDraftsDescription\",\n \"Automatically save draft workflows while editing\",\n )}\n >\n <Switch checked={settings.autoSaveDrafts} disabled />\n </SettingRow>\n </div>\n </div>\n );\n}\n\nfunction ExecutionTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.execution;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Default Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.defaultTimeoutDescription\",\n \"Maximum time a workflow execution can run (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.defaultTimeoutSeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.maxRetriesLabel\",\n \"Max Retries\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.maxRetriesDescription\",\n \"Number of automatic retries on execution failure\",\n )}\n >\n <Input\n value={settings.maxRetries}\n readOnly\n className=\"w-[80px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.retryDelayLabel\",\n \"Retry Delay\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.retryDelayDescription\",\n \"Delay between retry attempts (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.retryDelaySeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\"fluidgrids.settings.execution.retryDelayUnit\", \"seconds\")}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.concurrencyLimitLabel\",\n \"Concurrent Execution Limit\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.concurrencyLimitDescription\",\n \"Maximum number of workflow executions running simultaneously\",\n )}\n >\n <Input\n value={settings.concurrentExecutionLimit}\n readOnly\n className=\"w-[80px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n </SettingRow>\n </div>\n </div>\n );\n}\n\nfunction NotificationsTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.notifications;\n\n return (\n <div>\n <ReadOnlyBanner />\n\n {/* Email Notifications */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:email-outline\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.emailSectionTitle\",\n \"Email Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessDescription\",\n \"Send email when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.emailOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnFailureDescription\",\n \"Send email when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.emailOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n\n {/* Webhook Notifications */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:webhook\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.webhookSectionTitle\",\n \"Webhook Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessDescription\",\n \"Send webhook when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.webhookOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureDescription\",\n \"Send webhook when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.webhookOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ApiTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.api;\n\n return (\n <div>\n <div className=\"space-y-4\">\n {/* API Gateway URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon icon=\"mdi:api\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlTitle\",\n \"API Gateway URL\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlDescription\",\n \"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.gatewayUrl}\n </code>\n <CopyButton\n value={settings.gatewayUrl}\n label={tr(\n \"fluidgrids.settings.api.gatewayUrlCopyLabel\",\n \"API Gateway URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Webhook URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:webhook\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlTitle\",\n \"Webhook URL Format\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionPrefix\",\n \"URL format for triggering workflows via webhook. Replace\",\n )}{\" \"}\n <code className=\"text-text-primary\">{\"{workflowKey}\"}</code>{\" \"}\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionSuffix\",\n \"with the actual workflow key.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.webhookUrlFormat}\n </code>\n <CopyButton\n value={settings.webhookUrlFormat}\n label={tr(\n \"fluidgrids.settings.api.webhookUrlCopyLabel\",\n \"Webhook URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Example cURL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:console\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.curlExampleTitle\",\n \"Example: Trigger via cURL\",\n )}\n </h3>\n </div>\n <div className=\"relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <pre className=\"text-xs text-text-primary overflow-x-auto whitespace-pre-wrap\">\n {`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -H \"Authorization: Bearer <token>\" \\\\\n -d '{\"input\": {}}'`}\n </pre>\n <div className=\"absolute top-2 right-2\">\n <CopyButton\n value={`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -H \"Authorization: Bearer <token>\" \\\\\\n -d '{\"input\": {}}'`}\n label={tr(\n \"fluidgrids.settings.api.curlCopyLabel\",\n \"cURL command\",\n )}\n />\n </div>\n </div>\n </CardHeader>\n </Card>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport function SettingsPage() {\n const tr = useTr();\n const navigate = useNavigate();\n const [activeTab, setActiveTab] = useState(\"general\");\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.settings.page.title\", \"Settings\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.settings.page.subtitle\",\n \"Configure workflow execution and notification preferences\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.settings.page.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"general\" className=\"gap-1.5\">\n <Icon icon=\"mdi:cog\" width={16} />\n {tr(\"fluidgrids.settings.page.generalTab\", \"General\")}\n </TabsTrigger>\n <TabsTrigger value=\"execution\" className=\"gap-1.5\">\n <Icon icon=\"mdi:play-circle\" width={16} />\n {tr(\"fluidgrids.settings.page.executionTab\", \"Execution\")}\n </TabsTrigger>\n <TabsTrigger value=\"notifications\" className=\"gap-1.5\">\n <Icon icon=\"mdi:bell-outline\" width={16} />\n {tr(\"fluidgrids.settings.page.notificationsTab\", \"Notifications\")}\n </TabsTrigger>\n <TabsTrigger value=\"api\" className=\"gap-1.5\">\n <Icon icon=\"mdi:api\" width={16} />\n {tr(\"fluidgrids.settings.page.apiTab\", \"API\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\">\n <GeneralTab />\n </TabsContent>\n <TabsContent value=\"execution\">\n <ExecutionTab />\n </TabsContent>\n <TabsContent value=\"notifications\">\n <NotificationsTab />\n </TabsContent>\n <TabsContent value=\"api\">\n <ApiTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { throwIfResultError } from './chunk-LMO5ASOE.js';
|
|
2
|
+
import { ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TerminateExecutionDocument, ExecutionsListDocument } from './chunk-WO3AHQVD.js';
|
|
2
3
|
import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
|
|
3
|
-
import { useTr } from './chunk-
|
|
4
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
4
5
|
import { Icon } from '@iconify/react';
|
|
5
6
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
6
7
|
import { create } from 'zustand';
|
|
@@ -2814,5 +2815,5 @@ function useAutoRefresh(refetchFn, enabled = true, interval = 5e3) {
|
|
|
2814
2815
|
}
|
|
2815
2816
|
|
|
2816
2817
|
export { ExecutionCards, ExecutionFilters, ExecutionStats, ExecutionStatusBadge, ExecutionTable, ExecutionTimeline, NodeTimeline, Pagination, RunLogViewer, buildNodeDisplayMap, formatRunVersion, useAutoRefresh, useExecution, useExecutionActions, useExecutionStats, useExecutionsStore, useExecutionsWithStore };
|
|
2817
|
-
//# sourceMappingURL=chunk-
|
|
2818
|
-
//# sourceMappingURL=chunk-
|
|
2818
|
+
//# sourceMappingURL=chunk-AE7FZRTH.js.map
|
|
2819
|
+
//# sourceMappingURL=chunk-AE7FZRTH.js.map
|