@burdenoff/fluidgrids-fe-sdk 2026.626.1 → 2026.701.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.
Files changed (33) hide show
  1. package/dist/ExecutionDetailPage-DYWM65JQ.js +6 -0
  2. package/dist/{ExecutionDetailPage-3EVS3WEC.js.map → ExecutionDetailPage-DYWM65JQ.js.map} +1 -1
  3. package/dist/ExecutionsListPage-RD54UMAN.js +8 -0
  4. package/dist/{ExecutionsListPage-NH2JLL2D.js.map → ExecutionsListPage-RD54UMAN.js.map} +1 -1
  5. package/dist/{TemplateConfigurationModal-FPQR7W4M.js → TemplateConfigurationModal-VU3Q4RFX.js} +73 -24
  6. package/dist/TemplateConfigurationModal-VU3Q4RFX.js.map +1 -0
  7. package/dist/{WorkflowBuilder-2K4MMN4U.js → WorkflowBuilder-J2AKCX32.js} +6 -8
  8. package/dist/{WorkflowBuilder-2K4MMN4U.js.map → WorkflowBuilder-J2AKCX32.js.map} +1 -1
  9. package/dist/{chunk-WD52O45G.js → chunk-3IJ4L2HA.js} +8 -4
  10. package/dist/chunk-3IJ4L2HA.js.map +1 -0
  11. package/dist/{chunk-GY66IQWN.js → chunk-64YSUEQW.js} +3 -3
  12. package/dist/{chunk-GY66IQWN.js.map → chunk-64YSUEQW.js.map} +1 -1
  13. package/dist/{chunk-QANP2YKX.js → chunk-IOFNFGWT.js} +10127 -318
  14. package/dist/chunk-IOFNFGWT.js.map +1 -0
  15. package/dist/{chunk-UOCR65PI.js → chunk-ZYEMMWTI.js} +15 -5
  16. package/dist/chunk-ZYEMMWTI.js.map +1 -0
  17. package/dist/index.js +17 -18
  18. package/dist/index.js.map +1 -1
  19. package/package.json +1 -1
  20. package/dist/ExecutionDetailPage-3EVS3WEC.js +0 -6
  21. package/dist/ExecutionsListPage-NH2JLL2D.js +0 -8
  22. package/dist/TemplateConfigurationModal-FPQR7W4M.js.map +0 -1
  23. package/dist/chunk-GSJOLO3A.js +0 -251
  24. package/dist/chunk-GSJOLO3A.js.map +0 -1
  25. package/dist/chunk-KBHRFZXR.js +0 -9488
  26. package/dist/chunk-KBHRFZXR.js.map +0 -1
  27. package/dist/chunk-QANP2YKX.js.map +0 -1
  28. package/dist/chunk-UOCR65PI.js.map +0 -1
  29. package/dist/chunk-WD52O45G.js.map +0 -1
  30. package/dist/useImportWorkflowTemplate-UTPGK45L.js +0 -11
  31. package/dist/useImportWorkflowTemplate-UTPGK45L.js.map +0 -1
  32. package/dist/useTemplateDetail-NK63V3PC.js +0 -6
  33. package/dist/useTemplateDetail-NK63V3PC.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ export { ExecutionDetailPage } from './chunk-64YSUEQW.js';
2
+ import './chunk-3IJ4L2HA.js';
3
+ import './chunk-FGYVIXQ7.js';
4
+ import './chunk-5BDQNSP3.js';
5
+ //# sourceMappingURL=ExecutionDetailPage-DYWM65JQ.js.map
6
+ //# sourceMappingURL=ExecutionDetailPage-DYWM65JQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-3EVS3WEC.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-DYWM65JQ.js"}
@@ -0,0 +1,8 @@
1
+ export { ExecutionsListPage } from './chunk-ZYEMMWTI.js';
2
+ import './chunk-3IJ4L2HA.js';
3
+ import './chunk-4FFPGQD3.js';
4
+ import './chunk-FGYVIXQ7.js';
5
+ import './chunk-5BDQNSP3.js';
6
+ import './chunk-WWU2O2SR.js';
7
+ //# sourceMappingURL=ExecutionsListPage-RD54UMAN.js.map
8
+ //# sourceMappingURL=ExecutionsListPage-RD54UMAN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-NH2JLL2D.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-RD54UMAN.js"}
@@ -2,7 +2,7 @@ import { Label } from './chunk-G7B4SYFM.js';
2
2
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Input, DialogFooter } from './chunk-7VEOUEIN.js';
3
3
  import { Badge, Button } from './chunk-Z54K22LP.js';
4
4
  import { useState, useMemo } from 'react';
5
- import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, Loader2 } from 'lucide-react';
5
+ import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
 
8
8
  function TemplateConfigurationModal({
@@ -12,7 +12,8 @@ function TemplateConfigurationModal({
12
12
  content,
13
13
  nodeCheckResult,
14
14
  onConfirm,
15
- importing = false
15
+ importing = false,
16
+ installProgress
16
17
  }) {
17
18
  const [workflowName, setWorkflowName] = useState(
18
19
  content?.defaultWorkflowName || template?.name || ""
@@ -34,7 +35,7 @@ function TemplateConfigurationModal({
34
35
  }, [template?.id]);
35
36
  const requiredInputs = content?.requiredInputs || [];
36
37
  const hasRequiredInputs = requiredInputs.length > 0;
37
- nodeCheckResult && (nodeCheckResult.missing.length > 0 || nodeCheckResult.missingPaid.length > 0);
38
+ const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;
38
39
  const hasRequiredCredentials = (content?.requiredCredentialTypes?.length ?? 0) > 0;
39
40
  const hasPaidBlockers = (nodeCheckResult?.missingPaid.length ?? 0) > 0;
40
41
  const isValid = useMemo(() => {
@@ -56,6 +57,9 @@ function TemplateConfigurationModal({
56
57
  });
57
58
  };
58
59
  if (!template || !content) return null;
60
+ const isInstalling = importing && !!installProgress;
61
+ const isCreating = importing && !installProgress;
62
+ const buttonLabel = hasPaidBlockers ? "Purchase Required Nodes First" : isInstalling ? `Installing nodes (${installProgress.current}/${installProgress.total})...` : isCreating ? "Creating workflow..." : hasMissingFreeNodes ? "Install & Open in Builder" : "Import & Open in Builder";
59
63
  return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
60
64
  DialogContent,
61
65
  {
@@ -190,28 +194,73 @@ function TemplateConfigurationModal({
190
194
  hasPaidBlockers && /* @__PURE__ */ jsxs("div", { className: "rounded-lg bg-amber-500/10 border border-amber-500/30 p-3 text-sm text-amber-700 dark:text-amber-400 flex items-start gap-2", children: [
191
195
  /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4 mt-0.5 shrink-0" }),
192
196
  /* @__PURE__ */ jsxs("div", { children: [
193
- /* @__PURE__ */ jsx("p", { className: "font-medium", children: "Purchase required" }),
194
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs", children: "Some nodes require purchase from the store before this template can be fully imported. The workflow will be created but those nodes may not function until installed." })
197
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: "Purchase required before importing" }),
198
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs", children: 'The nodes marked "Purchase required" must be purchased from the store before this template can be imported.' }),
199
+ /* @__PURE__ */ jsxs(
200
+ Button,
201
+ {
202
+ variant: "link",
203
+ size: "sm",
204
+ className: "mt-1 h-auto p-0 text-xs text-amber-700 dark:text-amber-400 underline",
205
+ onClick: () => window.open("/store", "_blank"),
206
+ children: [
207
+ /* @__PURE__ */ jsx(ExternalLink, { className: "size-3 mr-1" }),
208
+ "Go to Store"
209
+ ]
210
+ }
211
+ )
195
212
  ] })
196
213
  ] })
197
214
  ] }),
198
- /* @__PURE__ */ jsxs(DialogFooter, { className: "px-6 py-4 border-t shrink-0", children: [
199
- /* @__PURE__ */ jsx(
200
- Button,
201
- {
202
- variant: "outline",
203
- onClick: () => onOpenChange(false),
204
- disabled: importing,
205
- children: "Cancel"
206
- }
207
- ),
208
- /* @__PURE__ */ jsx(Button, { onClick: handleConfirm, disabled: !isValid || importing, children: importing ? /* @__PURE__ */ jsxs(Fragment, { children: [
209
- /* @__PURE__ */ jsx(Loader2, { className: "size-4 mr-2 animate-spin" }),
210
- "Importing..."
211
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
212
- /* @__PURE__ */ jsx(Sparkles, { className: "size-4 mr-2" }),
213
- "Import & Open in Builder"
214
- ] }) })
215
+ /* @__PURE__ */ jsxs(DialogFooter, { className: "px-6 py-4 border-t shrink-0 flex-col gap-2", children: [
216
+ installProgress && /* @__PURE__ */ jsxs("div", { className: "w-full space-y-1.5", children: [
217
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
218
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
219
+ /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin" }),
220
+ "Installing: ",
221
+ installProgress.nodeName
222
+ ] }),
223
+ /* @__PURE__ */ jsxs("span", { children: [
224
+ installProgress.current,
225
+ " / ",
226
+ installProgress.total
227
+ ] })
228
+ ] }),
229
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
230
+ "div",
231
+ {
232
+ className: "h-full bg-primary transition-all duration-300",
233
+ style: {
234
+ width: `${installProgress.current / installProgress.total * 100}%`
235
+ }
236
+ }
237
+ ) })
238
+ ] }),
239
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-2", children: [
240
+ /* @__PURE__ */ jsx(
241
+ Button,
242
+ {
243
+ variant: "outline",
244
+ onClick: () => onOpenChange(false),
245
+ disabled: importing,
246
+ children: "Cancel"
247
+ }
248
+ ),
249
+ /* @__PURE__ */ jsx(
250
+ Button,
251
+ {
252
+ onClick: handleConfirm,
253
+ disabled: !isValid || importing || hasPaidBlockers,
254
+ children: importing ? /* @__PURE__ */ jsxs(Fragment, { children: [
255
+ /* @__PURE__ */ jsx(Loader2, { className: "size-4 mr-2 animate-spin" }),
256
+ buttonLabel
257
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
258
+ /* @__PURE__ */ jsx(Sparkles, { className: "size-4 mr-2" }),
259
+ buttonLabel
260
+ ] })
261
+ }
262
+ )
263
+ ] })
215
264
  ] })
216
265
  ]
217
266
  }
@@ -254,5 +303,5 @@ function TemplateInputField({
254
303
  }
255
304
 
256
305
  export { TemplateConfigurationModal };
257
- //# sourceMappingURL=TemplateConfigurationModal-FPQR7W4M.js.map
258
- //# sourceMappingURL=TemplateConfigurationModal-FPQR7W4M.js.map
306
+ //# sourceMappingURL=TemplateConfigurationModal-VU3Q4RFX.js.map
307
+ //# sourceMappingURL=TemplateConfigurationModal-VU3Q4RFX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builder/components/flow-builder/components/templates/TemplateConfigurationModal.tsx"],"names":[],"mappings":";;;;;;;AAgDO,SAAS,0BAAA,CAA2B;AAAA,EACzC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,EAAoC;AAClC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA;AAAA,IACtC,OAAA,EAAS,mBAAA,IAAuB,QAAA,EAAU,IAAA,IAAQ;AAAA,GACpD;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,CAAiC,EAAE,CAAA;AAEzE,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,eAAA,CAAgB,OAAA,EAAS,mBAAA,IAAuB,QAAA,CAAS,IAAA,IAAQ,EAAE,CAAA;AACnE,MAAA,MAAM,WAAmC,EAAC;AAC1C,MAAA,IAAI,SAAS,cAAA,EAAgB;AAC3B,QAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,cAAA,EAAgB;AAC1C,UAAA,IAAI,MAAM,YAAA,EAAc;AACtB,YAAA,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAM,YAAA;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AACA,MAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,IACzB;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,EAAE,CAAC,CAAA;AAEjB,EAAA,MAAM,cAAA,GAAiB,OAAA,EAAS,cAAA,IAAkB,EAAC;AACnD,EAAA,MAAM,iBAAA,GAAoB,eAAe,MAAA,GAAS,CAAA;AAClD,EAAA,MAAM,mBAAA,GAAA,CAAuB,eAAA,EAAiB,OAAA,CAAQ,MAAA,IAAU,CAAA,IAAK,CAAA;AACrE,EAAA,MAAM,sBAAA,GAAA,CACH,OAAA,EAAS,uBAAA,EAAyB,MAAA,IAAU,CAAA,IAAK,CAAA;AACpD,EAAA,MAAM,eAAA,GAAA,CAAmB,eAAA,EAAiB,WAAA,CAAY,MAAA,IAAU,CAAA,IAAK,CAAA;AAErE,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC5B,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG,OAAO,KAAA;AACjC,IAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAClC,MAAA,IAAI,KAAA,CAAM,YAAY,CAAC,WAAA,CAAY,MAAM,IAAI,CAAA,EAAG,MAAK,EAAG;AACtD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,CAAC,YAAA,EAAc,WAAA,EAAa,cAAc,CAAC,CAAA;AAE9C,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,EAAc,KAAA,KAAkB;AACzD,IAAA,cAAA,CAAe,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,GAAG,KAAA,EAAM,CAAE,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,SAAA,CAAU;AAAA,MACR,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,MACxB,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAA,EAAS,OAAO,IAAA;AAElC,EAAA,MAAM,YAAA,GAAe,SAAA,IAAa,CAAC,CAAC,eAAA;AACpC,EAAA,MAAM,UAAA,GAAa,aAAa,CAAC,eAAA;AAEjC,EAAA,MAAM,WAAA,GAAc,eAAA,GAChB,+BAAA,GACA,YAAA,GACE,qBAAqB,eAAA,CAAgB,OAAO,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAA,IAAA,CAAA,GACrE,UAAA,GACE,sBAAA,GACA,sBACE,2BAAA,GACA,0BAAA;AAEV,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAY,YAAA,EAClB,QAAA,kBAAA,IAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,yDAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,YAAA,EAAA,EAAa,WAAU,kCAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,qBAAA,EAAsB,CAAA;AAAA,4BAC1C,IAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cACtB,QAAA,CAAS,IAAA;AAAA,cAAK;AAAA,aAAA,EACzB;AAAA,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,qBAAkB,QAAA,EAAA,iEAAA,EAEnB;AAAA,SAAA,EACF,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAEb,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAQ,eAAA,EAAgB,SAAA,EAAU,uBAAsB,QAAA,EAAA,eAAA,EAE/D,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,eAAA;AAAA,gBACH,KAAA,EAAO,YAAA;AAAA,gBACP,UAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,gBAC/C,WAAA,EAAY;AAAA;AAAA;AACd,WAAA,EACF,CAAA;AAAA,UAGC,iBAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+DAAA,EACZ,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,cAAE;AAAA,aAAA,EAEjC,CAAA;AAAA,gCACC,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,KAAA,qBACnB,GAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBAEC,KAAA;AAAA,gBACA,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AAAA,gBAClC,UAAU,CAAC,KAAA,KAAU,iBAAA,CAAkB,KAAA,CAAM,MAAM,KAAK;AAAA,eAAA;AAAA,cAHnD,KAAA,CAAM;AAAA,aAKd,CAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,UAID,eAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+DAAA,EACZ,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,cAAE;AAAA,aAAA,EAEjC,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,cAAA,eAAA,CAAgB,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,qBAC9B,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,iCAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,gCAAA,EAAiC,CAAA;AAAA,yCACxD,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,eAAe,IAAA,CAAK,QAAA;AAAA,sBAAS,IAAA;AAAA,sBAAG,IAAA,CAAK;AAAA,qBAAA,EAC7C,CAAA;AAAA,wCACC,KAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,SAAA,EAAU,mBAAkB,QAAA,EAAA,WAAA,EAEvD;AAAA;AAAA,iBAAA;AAAA,gBATK,IAAA,CAAK;AAAA,eAWb,CAAA;AAAA,cAEA,eAAA,CAAgB,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,qBAC5B,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,iCAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,+BAAA,EAAgC,CAAA;AAAA,yCACnD,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,eAAe,IAAA,CAAK,QAAA;AAAA,sBAAS,IAAA;AAAA,sBAAG,IAAA,CAAK;AAAA,qBAAA,EAC7C,CAAA;AAAA,oCACA,GAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,SAAA;AAAA,wBACR,SAAA,EAAU,kDAAA;AAAA,wBACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,iBAAA;AAAA,gBAZK,IAAA,CAAK;AAAA,eAcb,CAAA;AAAA,cAEA,eAAA,CAAgB,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,qBAChC,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,iCAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,gCAAA,EAAiC,CAAA;AAAA,yCACxD,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,eAAe,IAAA,CAAK,QAAA;AAAA,sBAAS,IAAA;AAAA,sBAAG,IAAA,CAAK;AAAA,qBAAA,EAC7C,CAAA;AAAA,oCACA,GAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,OAAA,EAAQ,SAAA;AAAA,wBACR,SAAA,EAAU,oDAAA;AAAA,wBACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,iBAAA;AAAA,gBAZK,IAAA,CAAK;AAAA,eAcb;AAAA,aAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,UAID,sBAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,IAAA,EAAA,EAAG,WAAU,+DAAA,EACZ,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,QAAA,EAAS,CAAA;AAAA,cAAE;AAAA,aAAA,EAEjC,CAAA;AAAA,4BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,6DAAA,EAE7C,CAAA;AAAA,4BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,kBAAQ,uBAAA,EAAyB,GAAA,CAAI,CAAC,IAAA,qBACrC,IAAA,CAAC,KAAA,EAAA,EAAiB,OAAA,EAAQ,SAAA,EAAU,WAAU,SAAA,EAC5C,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,aAAA,EAAc,CAAA;AAAA,cACjC;AAAA,aAAA,EAAA,EAFS,IAGZ,CACD,CAAA,EACH;AAAA,WAAA,EACF,CAAA;AAAA,0BAIF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACb,+BAAC,GAAA,EAAA,EAAE,QAAA,EAAA;AAAA,YAAA,oCAAA;AAAA,4BACiC,GAAA,CAAC,YAAO,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,YAAS;AAAA,WAAA,EAE1D,CAAA,EACF,CAAA;AAAA,UAGC,eAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6HAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,wBAAA,EAAyB,CAAA;AAAA,iCACjD,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,oCAAA,EAAkC,CAAA;AAAA,8BAC7D,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,6GAAA,EAG5B,CAAA;AAAA,8BACA,IAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,MAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,SAAA,EAAU,sEAAA;AAAA,kBACV,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,kBAE7C,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,YAAA,EAAA,EAAa,WAAU,aAAA,EAAc,CAAA;AAAA,oBAAE;AAAA;AAAA;AAAA;AAE1C,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAEA,IAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,4CAAA,EAErB,QAAA,EAAA;AAAA,UAAA,eAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,2BAAA,EACd,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,qBAAA,EAAsB,CAAA;AAAA,gBAAE,cAAA;AAAA,gBAC9B,eAAA,CAAgB;AAAA,eAAA,EAC/B,CAAA;AAAA,mCACC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,eAAA,CAAgB,OAAA;AAAA,gBAAQ,KAAA;AAAA,gBAAI,eAAA,CAAgB;AAAA,eAAA,EAC/C;AAAA,aAAA,EACF,CAAA;AAAA,4BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,+CAAA;AAAA,gBACV,KAAA,EAAO;AAAA,kBACL,OAAO,CAAA,EAAI,eAAA,CAAgB,OAAA,GAAU,eAAA,CAAgB,QAAS,GAAG,CAAA,CAAA;AAAA;AACnE;AAAA,aACF,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAGF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,gBACjC,QAAA,EAAU,SAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,aAAA;AAAA,gBACT,QAAA,EAAU,CAAC,OAAA,IAAW,SAAA,IAAa,eAAA;AAAA,gBAElC,sCACC,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,0BAAA,EAA2B,CAAA;AAAA,kBAC7C;AAAA,iBAAA,EACH,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,aAAA,EAAc,CAAA;AAAA,kBACjC;AAAA,iBAAA,EACH;AAAA;AAAA;AAEJ,WAAA,EACF;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAMA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,SAAM,OAAA,EAAS,CAAA,eAAA,EAAkB,MAAM,IAAI,CAAA,CAAA,EAAI,WAAU,SAAA,EACvD,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,KAAA;AAAA,MACN,MAAM,QAAA,oBAAY,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EAC9D,CAAA;AAAA,IACC,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,OAAA,mBAChC,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,QAChC,KAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,SAAA,EAAU,qLAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,EAAA,EAAG,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,UACzB,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,wBAClB,GAAA,CAAC,QAAA,EAAA,EAAuB,KAAA,EAAO,GAAA,CAAI,KAAA,EAChC,QAAA,EAAA,GAAA,CAAI,KAAA,EAAA,EADM,GAAA,CAAI,KAEjB,CACD;AAAA;AAAA;AAAA,KACH,mBAEA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,QAChC,IAAA,EACE,MAAM,IAAA,KAAS,QAAA,GACX,aACA,KAAA,CAAM,IAAA,KAAS,WACb,QAAA,GACA,MAAA;AAAA,QAER,KAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,aAAa,KAAA,CAAM;AAAA;AAAA,KACrB;AAAA,IAED,MAAM,QAAA,oBACL,GAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAiC,gBAAM,QAAA,EAAS;AAAA,GAAA,EAEjE,CAAA;AAEJ","file":"TemplateConfigurationModal-VU3Q4RFX.js","sourcesContent":["import { useState, useMemo } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"../../../../../ui/dialog\";\nimport { Input } from \"../../../../../ui/input\";\nimport { Button } from \"../../../../../ui/button\";\nimport { Badge } from \"../../../../../ui/badge\";\nimport { Label } from \"../../../../../ui/label\";\nimport type { StoreProduct } from \"../../../../../generated/global-types\";\nimport type {\n WorkflowTemplateContent,\n TemplateNodeCheckResult,\n TemplateRequiredInput,\n} from \"../../../../../types/workflow-template-content\";\nimport {\n Loader2,\n CheckCircle2,\n Download,\n ShoppingCart,\n KeyRound,\n Sparkles,\n AlertTriangle,\n ExternalLink,\n} from \"lucide-react\";\n\nexport interface TemplateConfigurationModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n template: StoreProduct | null;\n content: WorkflowTemplateContent | null;\n nodeCheckResult: TemplateNodeCheckResult | null;\n onConfirm: (config: {\n name: string;\n templateInputs: Record<string, string | number>;\n }) => void;\n importing?: boolean;\n installProgress?: {\n current: number;\n total: number;\n nodeName: string;\n } | null;\n}\n\nexport function TemplateConfigurationModal({\n open,\n onOpenChange,\n template,\n content,\n nodeCheckResult,\n onConfirm,\n importing = false,\n installProgress,\n}: TemplateConfigurationModalProps) {\n const [workflowName, setWorkflowName] = useState(\n content?.defaultWorkflowName || template?.name || \"\",\n );\n const [inputValues, setInputValues] = useState<Record<string, string>>({});\n\n useMemo(() => {\n if (template) {\n setWorkflowName(content?.defaultWorkflowName || template.name || \"\");\n const defaults: Record<string, string> = {};\n if (content?.requiredInputs) {\n for (const input of content.requiredInputs) {\n if (input.defaultValue) {\n defaults[input.name] = input.defaultValue;\n }\n }\n }\n setInputValues(defaults);\n }\n }, [template?.id]);\n\n const requiredInputs = content?.requiredInputs || [];\n const hasRequiredInputs = requiredInputs.length > 0;\n const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;\n const hasRequiredCredentials =\n (content?.requiredCredentialTypes?.length ?? 0) > 0;\n const hasPaidBlockers = (nodeCheckResult?.missingPaid.length ?? 0) > 0;\n\n const isValid = useMemo(() => {\n if (!workflowName.trim()) return false;\n for (const input of requiredInputs) {\n if (input.required && !inputValues[input.name]?.trim()) {\n return false;\n }\n }\n return true;\n }, [workflowName, inputValues, requiredInputs]);\n\n const handleInputChange = (name: string, value: string) => {\n setInputValues((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleConfirm = () => {\n onConfirm({\n name: workflowName.trim(),\n templateInputs: inputValues,\n });\n };\n\n if (!template || !content) return null;\n\n const isInstalling = importing && !!installProgress;\n const isCreating = importing && !installProgress;\n\n const buttonLabel = hasPaidBlockers\n ? \"Purchase Required Nodes First\"\n : isInstalling\n ? `Installing nodes (${installProgress.current}/${installProgress.total})...`\n : isCreating\n ? \"Creating workflow...\"\n : hasMissingFreeNodes\n ? \"Install & Open in Builder\"\n : \"Import & Open in Builder\";\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n size=\"lg\"\n className=\"!flex !flex-col !max-h-[85vh] overflow-hidden p-0 gap-0\"\n >\n <DialogHeader className=\"px-6 pt-6 pb-4 border-b shrink-0\">\n <div className=\"flex items-center gap-2\">\n <Sparkles className=\"size-5 text-primary\" />\n <DialogTitle className=\"text-xl\">\n Import \"{template.name}\"\n </DialogTitle>\n </div>\n <DialogDescription>\n Configure and import this workflow template into your workspace\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"flex-1 overflow-y-auto px-6 py-5 space-y-6\">\n {/* Workflow Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"workflow-name\" className=\"text-sm font-medium\">\n Workflow Name\n </Label>\n <Input\n id=\"workflow-name\"\n value={workflowName}\n onChange={(e) => setWorkflowName(e.target.value)}\n placeholder=\"Enter workflow name\"\n />\n </div>\n\n {/* Required Configuration Inputs */}\n {hasRequiredInputs && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <KeyRound className=\"size-4\" />\n Required Configuration\n </h4>\n <div className=\"space-y-3\">\n {requiredInputs.map((input) => (\n <TemplateInputField\n key={input.name}\n input={input}\n value={inputValues[input.name] || \"\"}\n onChange={(value) => handleInputChange(input.name, value)}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Node Dependencies */}\n {nodeCheckResult && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <Download className=\"size-4\" />\n Node Dependencies\n </h4>\n <div className=\"space-y-2\">\n {nodeCheckResult.installed.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <CheckCircle2 className=\"size-4 text-green-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs ml-auto\">\n Installed\n </Badge>\n </div>\n ))}\n\n {nodeCheckResult.missing.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <Download className=\"size-4 text-blue-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge\n variant=\"outline\"\n className=\"text-xs ml-auto border-blue-500/30 text-blue-500\"\n >\n Will install\n </Badge>\n </div>\n ))}\n\n {nodeCheckResult.missingPaid.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <ShoppingCart className=\"size-4 text-amber-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge\n variant=\"outline\"\n className=\"text-xs ml-auto border-amber-500/30 text-amber-500\"\n >\n Purchase required\n </Badge>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Required Credentials */}\n {hasRequiredCredentials && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <KeyRound className=\"size-4\" />\n Credentials Needed\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n You'll need to configure these credentials after importing:\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {content.requiredCredentialTypes?.map((cred) => (\n <Badge key={cred} variant=\"outline\" className=\"text-xs\">\n <KeyRound className=\"size-3 mr-1\" />\n {cred}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Info Banner */}\n <div className=\"rounded-lg bg-muted/50 p-3 text-sm text-muted-foreground\">\n <p>\n The workflow will be created as a <strong>DRAFT</strong>. You can\n review and edit it in the builder before activating.\n </p>\n </div>\n\n {/* Paid Node Blocker Warning */}\n {hasPaidBlockers && (\n <div className=\"rounded-lg bg-amber-500/10 border border-amber-500/30 p-3 text-sm text-amber-700 dark:text-amber-400 flex items-start gap-2\">\n <AlertTriangle className=\"size-4 mt-0.5 shrink-0\" />\n <div>\n <p className=\"font-medium\">Purchase required before importing</p>\n <p className=\"mt-1 text-xs\">\n The nodes marked \"Purchase required\" must be purchased from the\n store before this template can be imported.\n </p>\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-1 h-auto p-0 text-xs text-amber-700 dark:text-amber-400 underline\"\n onClick={() => window.open(\"/store\", \"_blank\")}\n >\n <ExternalLink className=\"size-3 mr-1\" />\n Go to Store\n </Button>\n </div>\n </div>\n )}\n </div>\n\n <DialogFooter className=\"px-6 py-4 border-t shrink-0 flex-col gap-2\">\n {/* Install progress bar */}\n {installProgress && (\n <div className=\"w-full space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"size-3 animate-spin\" />\n Installing: {installProgress.nodeName}\n </span>\n <span>\n {installProgress.current} / {installProgress.total}\n </span>\n </div>\n <div className=\"h-1.5 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{\n width: `${(installProgress.current / installProgress.total) * 100}%`,\n }}\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={importing}\n >\n Cancel\n </Button>\n <Button\n onClick={handleConfirm}\n disabled={!isValid || importing || hasPaidBlockers}\n >\n {importing ? (\n <>\n <Loader2 className=\"size-4 mr-2 animate-spin\" />\n {buttonLabel}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4 mr-2\" />\n {buttonLabel}\n </>\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// Sub-component: Template Input Field\n// ============================================================================\n\nfunction TemplateInputField({\n input,\n value,\n onChange,\n}: {\n input: TemplateRequiredInput;\n value: string;\n onChange: (value: string) => void;\n}) {\n return (\n <div className=\"space-y-1.5\">\n <Label htmlFor={`template-input-${input.name}`} className=\"text-sm\">\n {input.label}\n {input.required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n {input.type === \"select\" && input.options ? (\n <select\n id={`template-input-${input.name}`}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <option value=\"\">Select...</option>\n {input.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={`template-input-${input.name}`}\n type={\n input.type === \"secret\"\n ? \"password\"\n : input.type === \"number\"\n ? \"number\"\n : \"text\"\n }\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={input.placeholder}\n />\n )}\n {input.helpText && (\n <p className=\"text-xs text-muted-foreground\">{input.helpText}</p>\n )}\n </div>\n );\n}\n"]}
@@ -1,15 +1,13 @@
1
- export { WorkflowBuilder } from './chunk-QANP2YKX.js';
2
- import './chunk-KBHRFZXR.js';
1
+ export { WorkflowBuilder } from './chunk-IOFNFGWT.js';
3
2
  import './chunk-7VEOUEIN.js';
4
- import './chunk-Z54K22LP.js';
3
+ import './chunk-BQXHJIER.js';
5
4
  import './chunk-KU64CCSV.js';
6
5
  import './chunk-4FFPGQD3.js';
7
6
  import './chunk-FGYVIXQ7.js';
8
- import './chunk-LUGJJ7LL.js';
9
- import './chunk-GSJOLO3A.js';
10
- import './chunk-BQXHJIER.js';
11
7
  import './chunk-5BDQNSP3.js';
12
8
  import './chunk-WWU2O2SR.js';
9
+ import './chunk-LUGJJ7LL.js';
13
10
  import './chunk-XQP33UJR.js';
14
- //# sourceMappingURL=WorkflowBuilder-2K4MMN4U.js.map
15
- //# sourceMappingURL=WorkflowBuilder-2K4MMN4U.js.map
11
+ import './chunk-Z54K22LP.js';
12
+ //# sourceMappingURL=WorkflowBuilder-J2AKCX32.js.map
13
+ //# sourceMappingURL=WorkflowBuilder-J2AKCX32.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-2K4MMN4U.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-J2AKCX32.js"}
@@ -3,7 +3,7 @@ import { getFluidGridsClient } from './chunk-5BDQNSP3.js';
3
3
  import { Icon } from '@iconify/react';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
  import { create } from 'zustand';
6
- import { useState, useCallback, useMemo, useEffect } from 'react';
6
+ import { useState, useCallback, useMemo, useEffect, useRef } from 'react';
7
7
  import { Button } from '@burdenoff/fe-libs/button';
8
8
  import { useNavigate } from 'react-router-dom';
9
9
  import { gql } from '@apollo/client';
@@ -1737,7 +1737,9 @@ function useExecutions(input = {}) {
1737
1737
  const [loading, setLoading] = useState(true);
1738
1738
  const [error, setError] = useState(null);
1739
1739
  const inputKey = JSON.stringify(input);
1740
+ const reqIdRef = useRef(0);
1740
1741
  const fetchData = useCallback(async () => {
1742
+ const reqId = ++reqIdRef.current;
1741
1743
  setLoading(true);
1742
1744
  setError(null);
1743
1745
  try {
@@ -1747,13 +1749,15 @@ function useExecutions(input = {}) {
1747
1749
  variables: { input: JSON.parse(inputKey) },
1748
1750
  fetchPolicy: "network-only"
1749
1751
  });
1752
+ if (reqId !== reqIdRef.current) return;
1750
1753
  setExecutions(result.data?.workflowRuns?.items ?? []);
1751
1754
  setTotal(result.data?.workflowRuns?.total ?? 0);
1752
1755
  setHasMore(result.data?.workflowRuns?.hasMore ?? false);
1753
1756
  } catch (err) {
1757
+ if (reqId !== reqIdRef.current) return;
1754
1758
  setError(err);
1755
1759
  } finally {
1756
- setLoading(false);
1760
+ if (reqId === reqIdRef.current) setLoading(false);
1757
1761
  }
1758
1762
  }, [inputKey]);
1759
1763
  useEffect(() => {
@@ -2011,5 +2015,5 @@ function useAutoRefresh(refetchFn, enabled = true, interval = 5e3) {
2011
2015
  }
2012
2016
 
2013
2017
  export { ExecutionCards, ExecutionFilters, ExecutionStats, ExecutionStatusBadge, ExecutionTable, ExecutionTimeline, NodeTimeline, Pagination, useAutoRefresh, useExecution, useExecutionActions, useExecutionLogs, useExecutionStats, useExecutionsStore, useExecutionsWithStore };
2014
- //# sourceMappingURL=chunk-WD52O45G.js.map
2015
- //# sourceMappingURL=chunk-WD52O45G.js.map
2018
+ //# sourceMappingURL=chunk-3IJ4L2HA.js.map
2019
+ //# sourceMappingURL=chunk-3IJ4L2HA.js.map