@burdenoff/fluidgrids-fe-sdk 2026.803.4 → 2026.804.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.
Files changed (55) hide show
  1. package/dist/ExecutionDetailPage-FF2DYKAZ.js +10 -0
  2. package/dist/{ExecutionDetailPage-FCY3S336.js.map → ExecutionDetailPage-FF2DYKAZ.js.map} +1 -1
  3. package/dist/ExecutionsListPage-NKISRFMA.js +9 -0
  4. package/dist/{ExecutionsListPage-IZJPACQV.js.map → ExecutionsListPage-NKISRFMA.js.map} +1 -1
  5. package/dist/MissingNodesInstallModal-HA5L3FK2.js +185 -0
  6. package/dist/MissingNodesInstallModal-HA5L3FK2.js.map +1 -0
  7. package/dist/{TemplateConfigurationModal-MTR7VP6G.js → TemplateConfigurationModal-MXNGZQIC.js} +91 -21
  8. package/dist/TemplateConfigurationModal-MXNGZQIC.js.map +1 -0
  9. package/dist/{TemplateDetailPanel-T3ZHXOHX.js → TemplateDetailPanel-CJ3NPVTP.js} +50 -14
  10. package/dist/TemplateDetailPanel-CJ3NPVTP.js.map +1 -0
  11. package/dist/{WorkflowBuilder-WMAHTZEI.js → WorkflowBuilder-ETVB66U6.js} +9 -9
  12. package/dist/{WorkflowBuilder-WMAHTZEI.js.map → WorkflowBuilder-ETVB66U6.js.map} +1 -1
  13. package/dist/WorkflowsList-TZAN3YBA.js +11 -0
  14. package/dist/{WorkflowsList-BXESQVAH.js.map → WorkflowsList-TZAN3YBA.js.map} +1 -1
  15. package/dist/{chunk-WAVGHDYH.js → chunk-6PNRM3KQ.js} +469 -114
  16. package/dist/chunk-6PNRM3KQ.js.map +1 -0
  17. package/dist/chunk-7VNIEIR6.js +21 -0
  18. package/dist/chunk-7VNIEIR6.js.map +1 -0
  19. package/dist/{chunk-F5ACDIYR.js → chunk-IWKLEFC7.js} +205 -51
  20. package/dist/chunk-IWKLEFC7.js.map +1 -0
  21. package/dist/{chunk-MRVS73S2.js → chunk-OHGXRM6Z.js} +7 -23
  22. package/dist/chunk-OHGXRM6Z.js.map +1 -0
  23. package/dist/chunk-P5PKRQAO.js +25 -0
  24. package/dist/chunk-P5PKRQAO.js.map +1 -0
  25. package/dist/{chunk-CQAHXNT2.js → chunk-SG7Z2IRQ.js} +55 -18
  26. package/dist/chunk-SG7Z2IRQ.js.map +1 -0
  27. package/dist/chunk-WQ4QNHDN.js +29639 -0
  28. package/dist/chunk-WQ4QNHDN.js.map +1 -0
  29. package/dist/{chunk-ZM4SSEVI.js → chunk-Y36DJHU3.js} +211 -3
  30. package/dist/chunk-Y36DJHU3.js.map +1 -0
  31. package/dist/{chunk-CBUOMHGH.js → chunk-YJKZSUNC.js} +140 -47
  32. package/dist/chunk-YJKZSUNC.js.map +1 -0
  33. package/dist/index.d.ts +33 -2
  34. package/dist/index.js +643 -182
  35. package/dist/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/ExecutionDetailPage-FCY3S336.js +0 -9
  38. package/dist/ExecutionsListPage-IZJPACQV.js +0 -8
  39. package/dist/TemplateConfigurationModal-MTR7VP6G.js.map +0 -1
  40. package/dist/TemplateDetailPanel-T3ZHXOHX.js.map +0 -1
  41. package/dist/WorkflowsList-BXESQVAH.js +0 -11
  42. package/dist/blocks-7KN7ZRE6.js +0 -11
  43. package/dist/blocks-7KN7ZRE6.js.map +0 -1
  44. package/dist/chunk-7LLCYNKY.js +0 -10910
  45. package/dist/chunk-7LLCYNKY.js.map +0 -1
  46. package/dist/chunk-CBUOMHGH.js.map +0 -1
  47. package/dist/chunk-CQAHXNT2.js.map +0 -1
  48. package/dist/chunk-F5ACDIYR.js.map +0 -1
  49. package/dist/chunk-MRVS73S2.js.map +0 -1
  50. package/dist/chunk-OAPYQFQU.js +0 -197
  51. package/dist/chunk-OAPYQFQU.js.map +0 -1
  52. package/dist/chunk-WAVGHDYH.js.map +0 -1
  53. package/dist/chunk-Z3NRSPTV.js +0 -15355
  54. package/dist/chunk-Z3NRSPTV.js.map +0 -1
  55. package/dist/chunk-ZM4SSEVI.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ export { ExecutionDetailPage } from './chunk-IWKLEFC7.js';
2
+ import './chunk-6PNRM3KQ.js';
3
+ import './chunk-UIY2HBWA.js';
4
+ import './chunk-V5UEEB74.js';
5
+ import './chunk-5BDQNSP3.js';
6
+ import './chunk-WWU2O2SR.js';
7
+ import './chunk-3ZYUGTIT.js';
8
+ import './chunk-7VNIEIR6.js';
9
+ //# sourceMappingURL=ExecutionDetailPage-FF2DYKAZ.js.map
10
+ //# sourceMappingURL=ExecutionDetailPage-FF2DYKAZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-FCY3S336.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-FF2DYKAZ.js"}
@@ -0,0 +1,9 @@
1
+ export { ExecutionsListPage } from './chunk-SG7Z2IRQ.js';
2
+ import './chunk-6PNRM3KQ.js';
3
+ import './chunk-MH4AHYK3.js';
4
+ import './chunk-V5UEEB74.js';
5
+ import './chunk-5BDQNSP3.js';
6
+ import './chunk-WWU2O2SR.js';
7
+ import './chunk-7VNIEIR6.js';
8
+ //# sourceMappingURL=ExecutionsListPage-NKISRFMA.js.map
9
+ //# sourceMappingURL=ExecutionsListPage-NKISRFMA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-IZJPACQV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-NKISRFMA.js"}
@@ -0,0 +1,185 @@
1
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-OHGXRM6Z.js';
2
+ import { Badge, Button } from './chunk-DBOMRIP5.js';
3
+ import './chunk-3ZYUGTIT.js';
4
+ import './chunk-7VNIEIR6.js';
5
+ import { Puzzle, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+
8
+ function MissingNodesInstallModal({
9
+ open,
10
+ onOpenChange,
11
+ workflowName,
12
+ nodeCheckResult,
13
+ onConfirm,
14
+ onSkip,
15
+ installing = false,
16
+ installProgress
17
+ }) {
18
+ const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;
19
+ const hasPaidBlockers = (nodeCheckResult?.missingPaid.length ?? 0) > 0;
20
+ const isInstalling = installing && !!installProgress;
21
+ const buttonLabel = hasPaidBlockers ? "Purchase Required Nodes First" : isInstalling ? `Installing nodes (${installProgress.current}/${installProgress.total})...` : hasMissingFreeNodes ? "Install Missing Nodes" : "Open in Builder";
22
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
23
+ DialogContent,
24
+ {
25
+ size: "lg",
26
+ className: "!flex !flex-col !max-h-[85vh] overflow-hidden p-0 gap-0",
27
+ children: [
28
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "px-6 pt-6 pb-4 border-b shrink-0", children: [
29
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
30
+ /* @__PURE__ */ jsx(Puzzle, { className: "size-5 text-primary" }),
31
+ /* @__PURE__ */ jsx(DialogTitle, { className: "text-xl", children: workflowName ? `Missing nodes for "${workflowName}"` : "Missing workflow nodes" })
32
+ ] }),
33
+ /* @__PURE__ */ jsx(DialogDescription, { children: "This workflow uses nodes that are not installed in your workspace. Install them now, or open the workflow and install them later." })
34
+ ] }),
35
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-6 py-5 space-y-6", children: [
36
+ nodeCheckResult && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
37
+ /* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
38
+ /* @__PURE__ */ jsx(Download, { className: "size-4" }),
39
+ "Node Dependencies"
40
+ ] }),
41
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
42
+ nodeCheckResult.installed.map((node) => /* @__PURE__ */ jsxs(
43
+ "div",
44
+ {
45
+ className: "flex items-center gap-2 text-sm",
46
+ children: [
47
+ /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4 text-green-500 shrink-0" }),
48
+ /* @__PURE__ */ jsxs("span", { children: [
49
+ node.displayName || node.nodeType,
50
+ " v",
51
+ node.nodeVersion
52
+ ] }),
53
+ /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs ml-auto", children: "Installed" })
54
+ ]
55
+ },
56
+ node.nodeType
57
+ )),
58
+ nodeCheckResult.missing.map((node) => /* @__PURE__ */ jsxs(
59
+ "div",
60
+ {
61
+ className: "flex items-center gap-2 text-sm",
62
+ children: [
63
+ /* @__PURE__ */ jsx(Download, { className: "size-4 text-blue-500 shrink-0" }),
64
+ /* @__PURE__ */ jsxs("span", { children: [
65
+ node.displayName || node.nodeType,
66
+ " v",
67
+ node.nodeVersion
68
+ ] }),
69
+ /* @__PURE__ */ jsx(
70
+ Badge,
71
+ {
72
+ variant: "outline",
73
+ className: "text-xs ml-auto border-blue-500/30 text-blue-500",
74
+ children: "Not installed"
75
+ }
76
+ )
77
+ ]
78
+ },
79
+ node.nodeType
80
+ )),
81
+ nodeCheckResult.missingPaid.map((node) => /* @__PURE__ */ jsxs(
82
+ "div",
83
+ {
84
+ className: "flex items-center gap-2 text-sm",
85
+ children: [
86
+ /* @__PURE__ */ jsx(ShoppingCart, { className: "size-4 text-amber-500 shrink-0" }),
87
+ /* @__PURE__ */ jsxs("span", { children: [
88
+ node.displayName || node.nodeType,
89
+ " v",
90
+ node.nodeVersion
91
+ ] }),
92
+ /* @__PURE__ */ jsx(
93
+ Badge,
94
+ {
95
+ variant: "outline",
96
+ className: "text-xs ml-auto border-amber-500/30 text-amber-500",
97
+ children: "Purchase required"
98
+ }
99
+ )
100
+ ]
101
+ },
102
+ node.nodeType
103
+ ))
104
+ ] })
105
+ ] }),
106
+ 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: [
107
+ /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4 mt-0.5 shrink-0" }),
108
+ /* @__PURE__ */ jsxs("div", { children: [
109
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: "Purchase required before installing" }),
110
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs", children: 'The nodes marked "Purchase required" must be purchased from the store before this workflow can use them.' }),
111
+ /* @__PURE__ */ jsxs(
112
+ Button,
113
+ {
114
+ variant: "link",
115
+ size: "sm",
116
+ className: "mt-1 h-auto p-0 text-xs text-amber-700 dark:text-amber-400 underline",
117
+ onClick: () => window.open("/store", "_blank"),
118
+ children: [
119
+ /* @__PURE__ */ jsx(ExternalLink, { className: "size-3 mr-1" }),
120
+ "Go to Store"
121
+ ]
122
+ }
123
+ )
124
+ ] })
125
+ ] })
126
+ ] }),
127
+ /* @__PURE__ */ jsxs(DialogFooter, { className: "px-6 py-4 border-t shrink-0 flex-col gap-2", children: [
128
+ installProgress && /* @__PURE__ */ jsxs("div", { className: "w-full space-y-1.5", children: [
129
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
130
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
131
+ /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin" }),
132
+ "Installing: ",
133
+ installProgress.nodeName
134
+ ] }),
135
+ /* @__PURE__ */ jsxs("span", { children: [
136
+ installProgress.current,
137
+ " / ",
138
+ installProgress.total
139
+ ] })
140
+ ] }),
141
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-full rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
142
+ "div",
143
+ {
144
+ className: "h-full bg-primary transition-all duration-300",
145
+ style: {
146
+ width: `${installProgress.current / installProgress.total * 100}%`
147
+ }
148
+ }
149
+ ) })
150
+ ] }),
151
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full justify-end gap-2", children: [
152
+ onSkip && /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: onSkip, disabled: installing, children: "Open Without Installing" }),
153
+ /* @__PURE__ */ jsx(
154
+ Button,
155
+ {
156
+ variant: "outline",
157
+ onClick: () => onOpenChange(false),
158
+ disabled: installing,
159
+ children: "Cancel"
160
+ }
161
+ ),
162
+ /* @__PURE__ */ jsx(
163
+ Button,
164
+ {
165
+ onClick: onConfirm,
166
+ disabled: installing || hasPaidBlockers,
167
+ children: installing ? /* @__PURE__ */ jsxs(Fragment, { children: [
168
+ /* @__PURE__ */ jsx(Loader2, { className: "size-4 mr-2 animate-spin" }),
169
+ buttonLabel
170
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
171
+ /* @__PURE__ */ jsx(Download, { className: "size-4 mr-2" }),
172
+ buttonLabel
173
+ ] })
174
+ }
175
+ )
176
+ ] })
177
+ ] })
178
+ ]
179
+ }
180
+ ) });
181
+ }
182
+
183
+ export { MissingNodesInstallModal };
184
+ //# sourceMappingURL=MissingNodesInstallModal-HA5L3FK2.js.map
185
+ //# sourceMappingURL=MissingNodesInstallModal-HA5L3FK2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builder/components/flow-builder/components/templates/MissingNodesInstallModal.tsx"],"names":[],"mappings":";;;;;;;AAoCO,SAAS,wBAAA,CAAyB;AAAA,EACvC,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb;AACF,CAAA,EAAkC;AAChC,EAAA,MAAM,mBAAA,GAAA,CAAuB,eAAA,EAAiB,OAAA,CAAQ,MAAA,IAAU,CAAA,IAAK,CAAA;AACrE,EAAA,MAAM,eAAA,GAAA,CAAmB,eAAA,EAAiB,WAAA,CAAY,MAAA,IAAU,CAAA,IAAK,CAAA;AAErE,EAAA,MAAM,YAAA,GAAe,UAAA,IAAc,CAAC,CAAC,eAAA;AAErC,EAAA,MAAM,WAAA,GAAc,eAAA,GAChB,+BAAA,GACA,YAAA,GACE,CAAA,kBAAA,EAAqB,eAAA,CAAgB,OAAO,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAA,IAAA,CAAA,GACrE,mBAAA,GACE,uBAAA,GACA,iBAAA;AAER,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,MAAA,EAAA,EAAO,WAAU,qBAAA,EAAsB,CAAA;AAAA,4BACxC,GAAA,CAAC,eAAY,SAAA,EAAU,SAAA,EACpB,yBACG,CAAA,mBAAA,EAAsB,YAAY,MAClC,wBAAA,EACN;AAAA,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,qBAAkB,QAAA,EAAA,mIAAA,EAGnB;AAAA,SAAA,EACF,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACZ,QAAA,EAAA;AAAA,UAAA,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,UAGD,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,qCAAA,EAE3B,CAAA;AAAA,8BACA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,cAAA,EAAe,QAAA,EAAA,0GAAA,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,EACrB,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,EACZ,QAAA,EAAA;AAAA,YAAA,MAAA,oBACC,GAAA,CAAC,UAAO,OAAA,EAAQ,SAAA,EAAU,SAAS,MAAA,EAAQ,QAAA,EAAU,YAAY,QAAA,EAAA,yBAAA,EAEjE,CAAA;AAAA,4BAEF,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,SAAA;AAAA,gBACR,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,gBACjC,QAAA,EAAU,UAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,SAAA;AAAA,gBACT,UAAU,UAAA,IAAc,eAAA;AAAA,gBAEvB,uCACC,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","file":"MissingNodesInstallModal-HA5L3FK2.js","sourcesContent":["import {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"../../../../../ui/dialog\";\nimport { Button } from \"../../../../../ui/button\";\nimport { Badge } from \"../../../../../ui/badge\";\nimport type { TemplateNodeCheckResult } from \"../../../../../types/workflow-template-content\";\nimport {\n Loader2,\n CheckCircle2,\n Download,\n ShoppingCart,\n AlertTriangle,\n ExternalLink,\n Puzzle,\n} from \"lucide-react\";\n\nexport interface MissingNodesInstallModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n workflowName?: string;\n nodeCheckResult: TemplateNodeCheckResult | null;\n onConfirm: () => void;\n onSkip?: () => void;\n installing?: boolean;\n installProgress?: {\n current: number;\n total: number;\n nodeName: string;\n } | null;\n}\n\nexport function MissingNodesInstallModal({\n open,\n onOpenChange,\n workflowName,\n nodeCheckResult,\n onConfirm,\n onSkip,\n installing = false,\n installProgress,\n}: MissingNodesInstallModalProps) {\n const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;\n const hasPaidBlockers = (nodeCheckResult?.missingPaid.length ?? 0) > 0;\n\n const isInstalling = installing && !!installProgress;\n\n const buttonLabel = hasPaidBlockers\n ? \"Purchase Required Nodes First\"\n : isInstalling\n ? `Installing nodes (${installProgress.current}/${installProgress.total})...`\n : hasMissingFreeNodes\n ? \"Install Missing Nodes\"\n : \"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 <Puzzle className=\"size-5 text-primary\" />\n <DialogTitle className=\"text-xl\">\n {workflowName\n ? `Missing nodes for \"${workflowName}\"`\n : \"Missing workflow nodes\"}\n </DialogTitle>\n </div>\n <DialogDescription>\n This workflow uses nodes that are not installed in your workspace.\n Install them now, or open the workflow and install them later.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"flex-1 overflow-y-auto px-6 py-5 space-y-6\">\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 Not installed\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 {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\">\n Purchase required before installing\n </p>\n <p className=\"mt-1 text-xs\">\n The nodes marked \"Purchase required\" must be purchased from\n the store before this workflow can use them.\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 {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 {onSkip && (\n <Button variant=\"outline\" onClick={onSkip} disabled={installing}>\n Open Without Installing\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={installing}\n >\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n disabled={installing || hasPaidBlockers}\n >\n {installing ? (\n <>\n <Loader2 className=\"size-4 mr-2 animate-spin\" />\n {buttonLabel}\n </>\n ) : (\n <>\n <Download className=\"size-4 mr-2\" />\n {buttonLabel}\n </>\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n"]}
@@ -1,7 +1,9 @@
1
1
  import { Label } from './chunk-6QCBKN3P.js';
2
- import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Input, DialogFooter } from './chunk-MRVS73S2.js';
2
+ import { Input } from './chunk-P5PKRQAO.js';
3
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-OHGXRM6Z.js';
3
4
  import { Badge, Button } from './chunk-DBOMRIP5.js';
4
5
  import './chunk-3ZYUGTIT.js';
6
+ import { useTr } from './chunk-7VNIEIR6.js';
5
7
  import { useState, useMemo } from 'react';
6
8
  import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
7
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -16,6 +18,7 @@ function TemplateConfigurationModal({
16
18
  importing = false,
17
19
  installProgress
18
20
  }) {
21
+ const tr = useTr();
19
22
  const [workflowName, setWorkflowName] = useState(
20
23
  content?.defaultWorkflowName || template?.name || ""
21
24
  );
@@ -60,7 +63,19 @@ function TemplateConfigurationModal({
60
63
  if (!template || !content) return null;
61
64
  const isInstalling = importing && !!installProgress;
62
65
  const isCreating = importing && !installProgress;
63
- 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";
66
+ const buttonLabel = hasPaidBlockers ? tr(
67
+ "fluidgrids.builder.templateConfigModal.purchaseRequiredButton",
68
+ "Purchase Required Nodes First"
69
+ ) : isInstalling ? `Installing nodes (${installProgress.current}/${installProgress.total})...` : isCreating ? tr(
70
+ "fluidgrids.builder.templateConfigModal.creatingWorkflowButton",
71
+ "Creating workflow..."
72
+ ) : hasMissingFreeNodes ? tr(
73
+ "fluidgrids.builder.templateConfigModal.installAndOpenButton",
74
+ "Install & Open in Builder"
75
+ ) : tr(
76
+ "fluidgrids.builder.templateConfigModal.importAndOpenButton",
77
+ "Import & Open in Builder"
78
+ );
64
79
  return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
65
80
  DialogContent,
66
81
  {
@@ -71,30 +86,47 @@ function TemplateConfigurationModal({
71
86
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
72
87
  /* @__PURE__ */ jsx(Sparkles, { className: "size-5 text-primary" }),
73
88
  /* @__PURE__ */ jsxs(DialogTitle, { className: "text-xl", children: [
74
- 'Import "',
89
+ tr(
90
+ "fluidgrids.builder.templateConfigModal.importTitlePrefix",
91
+ "Import"
92
+ ),
93
+ " ",
94
+ '"',
75
95
  template.name,
76
96
  '"'
77
97
  ] })
78
98
  ] }),
79
- /* @__PURE__ */ jsx(DialogDescription, { children: "Configure and import this workflow template into your workspace" })
99
+ /* @__PURE__ */ jsx(DialogDescription, { children: tr(
100
+ "fluidgrids.builder.templateConfigModal.description",
101
+ "Configure and import this workflow template into your workspace"
102
+ ) })
80
103
  ] }),
81
104
  /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-6 py-5 space-y-6", children: [
82
105
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
83
- /* @__PURE__ */ jsx(Label, { htmlFor: "workflow-name", className: "text-sm font-medium", children: "Workflow Name" }),
106
+ /* @__PURE__ */ jsx(Label, { htmlFor: "workflow-name", className: "text-sm font-medium", children: tr(
107
+ "fluidgrids.builder.templateConfigModal.workflowNameLabel",
108
+ "Workflow Name"
109
+ ) }),
84
110
  /* @__PURE__ */ jsx(
85
111
  Input,
86
112
  {
87
113
  id: "workflow-name",
88
114
  value: workflowName,
89
115
  onChange: (e) => setWorkflowName(e.target.value),
90
- placeholder: "Enter workflow name"
116
+ placeholder: tr(
117
+ "fluidgrids.builder.templateConfigModal.workflowNamePlaceholder",
118
+ "Enter workflow name"
119
+ )
91
120
  }
92
121
  )
93
122
  ] }),
94
123
  hasRequiredInputs && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
95
124
  /* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
96
125
  /* @__PURE__ */ jsx(KeyRound, { className: "size-4" }),
97
- "Required Configuration"
126
+ tr(
127
+ "fluidgrids.builder.templateConfigModal.requiredConfigHeading",
128
+ "Required Configuration"
129
+ )
98
130
  ] }),
99
131
  /* @__PURE__ */ jsx("div", { className: "space-y-3", children: requiredInputs.map((input) => /* @__PURE__ */ jsx(
100
132
  TemplateInputField,
@@ -109,7 +141,10 @@ function TemplateConfigurationModal({
109
141
  nodeCheckResult && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
110
142
  /* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
111
143
  /* @__PURE__ */ jsx(Download, { className: "size-4" }),
112
- "Node Dependencies"
144
+ tr(
145
+ "fluidgrids.builder.templateConfigModal.nodeDependenciesHeading",
146
+ "Node Dependencies"
147
+ )
113
148
  ] }),
114
149
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
115
150
  nodeCheckResult.installed.map((node) => /* @__PURE__ */ jsxs(
@@ -123,7 +158,10 @@ function TemplateConfigurationModal({
123
158
  " v",
124
159
  node.nodeVersion
125
160
  ] }),
126
- /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs ml-auto", children: "Installed" })
161
+ /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs ml-auto", children: tr(
162
+ "fluidgrids.builder.templateConfigModal.installedBadge",
163
+ "Installed"
164
+ ) })
127
165
  ]
128
166
  },
129
167
  node.nodeType
@@ -144,7 +182,10 @@ function TemplateConfigurationModal({
144
182
  {
145
183
  variant: "outline",
146
184
  className: "text-xs ml-auto border-blue-500/30 text-blue-500",
147
- children: "Will install"
185
+ children: tr(
186
+ "fluidgrids.builder.templateConfigModal.willInstallBadge",
187
+ "Will install"
188
+ )
148
189
  }
149
190
  )
150
191
  ]
@@ -167,7 +208,10 @@ function TemplateConfigurationModal({
167
208
  {
168
209
  variant: "outline",
169
210
  className: "text-xs ml-auto border-amber-500/30 text-amber-500",
170
- children: "Purchase required"
211
+ children: tr(
212
+ "fluidgrids.builder.templateConfigModal.purchaseRequiredBadge",
213
+ "Purchase required"
214
+ )
171
215
  }
172
216
  )
173
217
  ]
@@ -179,9 +223,15 @@ function TemplateConfigurationModal({
179
223
  hasRequiredCredentials && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
180
224
  /* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
181
225
  /* @__PURE__ */ jsx(KeyRound, { className: "size-4" }),
182
- "Credentials Needed"
226
+ tr(
227
+ "fluidgrids.builder.templateConfigModal.credentialsHeading",
228
+ "Credentials Needed"
229
+ )
183
230
  ] }),
184
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "You'll need to configure these credentials after importing:" }),
231
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: tr(
232
+ "fluidgrids.builder.templateConfigModal.credentialsHint",
233
+ "You'll need to configure these credentials after importing:"
234
+ ) }),
185
235
  /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: content.requiredCredentialTypes?.map((cred) => /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: "text-xs", children: [
186
236
  /* @__PURE__ */ jsx(KeyRound, { className: "size-3 mr-1" }),
187
237
  cred
@@ -195,8 +245,14 @@ function TemplateConfigurationModal({
195
245
  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: [
196
246
  /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4 mt-0.5 shrink-0" }),
197
247
  /* @__PURE__ */ jsxs("div", { children: [
198
- /* @__PURE__ */ jsx("p", { className: "font-medium", children: "Purchase required before importing" }),
199
- /* @__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.' }),
248
+ /* @__PURE__ */ jsx("p", { className: "font-medium", children: tr(
249
+ "fluidgrids.builder.templateConfigModal.paidBlockerTitle",
250
+ "Purchase required before importing"
251
+ ) }),
252
+ /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs", children: tr(
253
+ "fluidgrids.builder.templateConfigModal.paidBlockerDescription",
254
+ 'The nodes marked "Purchase required" must be purchased from the store before this template can be imported.'
255
+ ) }),
200
256
  /* @__PURE__ */ jsxs(
201
257
  Button,
202
258
  {
@@ -206,7 +262,10 @@ function TemplateConfigurationModal({
206
262
  onClick: () => window.open("/store", "_blank"),
207
263
  children: [
208
264
  /* @__PURE__ */ jsx(ExternalLink, { className: "size-3 mr-1" }),
209
- "Go to Store"
265
+ tr(
266
+ "fluidgrids.builder.templateConfigModal.goToStoreButton",
267
+ "Go to Store"
268
+ )
210
269
  ]
211
270
  }
212
271
  )
@@ -218,7 +277,11 @@ function TemplateConfigurationModal({
218
277
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
219
278
  /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
220
279
  /* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin" }),
221
- "Installing: ",
280
+ tr(
281
+ "fluidgrids.builder.templateConfigModal.installingLabel",
282
+ "Installing:"
283
+ ),
284
+ " ",
222
285
  installProgress.nodeName
223
286
  ] }),
224
287
  /* @__PURE__ */ jsxs("span", { children: [
@@ -244,7 +307,10 @@ function TemplateConfigurationModal({
244
307
  variant: "outline",
245
308
  onClick: () => onOpenChange(false),
246
309
  disabled: importing,
247
- children: "Cancel"
310
+ children: tr(
311
+ "fluidgrids.builder.templateConfigModal.cancelButton",
312
+ "Cancel"
313
+ )
248
314
  }
249
315
  ),
250
316
  /* @__PURE__ */ jsx(
@@ -272,6 +338,7 @@ function TemplateInputField({
272
338
  value,
273
339
  onChange
274
340
  }) {
341
+ const tr = useTr();
275
342
  return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
276
343
  /* @__PURE__ */ jsxs(Label, { htmlFor: `template-input-${input.name}`, className: "text-sm", children: [
277
344
  input.label,
@@ -285,7 +352,10 @@ function TemplateInputField({
285
352
  onChange: (e) => onChange(e.target.value),
286
353
  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",
287
354
  children: [
288
- /* @__PURE__ */ jsx("option", { value: "", children: "Select..." }),
355
+ /* @__PURE__ */ jsx("option", { value: "", children: tr(
356
+ "fluidgrids.builder.templateConfigModal.selectOptionPlaceholder",
357
+ "Select..."
358
+ ) }),
289
359
  input.options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt.value, children: opt.label }, opt.value))
290
360
  ]
291
361
  }
@@ -304,5 +374,5 @@ function TemplateInputField({
304
374
  }
305
375
 
306
376
  export { TemplateConfigurationModal };
307
- //# sourceMappingURL=TemplateConfigurationModal-MTR7VP6G.js.map
308
- //# sourceMappingURL=TemplateConfigurationModal-MTR7VP6G.js.map
377
+ //# sourceMappingURL=TemplateConfigurationModal-MXNGZQIC.js.map
378
+ //# sourceMappingURL=TemplateConfigurationModal-MXNGZQIC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builder/components/flow-builder/components/templates/TemplateConfigurationModal.tsx"],"names":[],"mappings":"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","file":"TemplateConfigurationModal-MXNGZQIC.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\";\nimport { useTr } from \"../../../../../hooks/useTr\";\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 tr = useTr();\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 ? tr(\n \"fluidgrids.builder.templateConfigModal.purchaseRequiredButton\",\n \"Purchase Required Nodes First\",\n )\n : isInstalling\n ? `Installing nodes (${installProgress.current}/${installProgress.total})...`\n : isCreating\n ? tr(\n \"fluidgrids.builder.templateConfigModal.creatingWorkflowButton\",\n \"Creating workflow...\",\n )\n : hasMissingFreeNodes\n ? tr(\n \"fluidgrids.builder.templateConfigModal.installAndOpenButton\",\n \"Install & Open in Builder\",\n )\n : tr(\n \"fluidgrids.builder.templateConfigModal.importAndOpenButton\",\n \"Import & Open in Builder\",\n );\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 {tr(\n \"fluidgrids.builder.templateConfigModal.importTitlePrefix\",\n \"Import\",\n )}{\" \"}\n \"{template.name}\"\n </DialogTitle>\n </div>\n <DialogDescription>\n {tr(\n \"fluidgrids.builder.templateConfigModal.description\",\n \"Configure and import this workflow template into your workspace\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.workflowNameLabel\",\n \"Workflow Name\",\n )}\n </Label>\n <Input\n id=\"workflow-name\"\n value={workflowName}\n onChange={(e) => setWorkflowName(e.target.value)}\n placeholder={tr(\n \"fluidgrids.builder.templateConfigModal.workflowNamePlaceholder\",\n \"Enter workflow name\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.requiredConfigHeading\",\n \"Required Configuration\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.nodeDependenciesHeading\",\n \"Node Dependencies\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.installedBadge\",\n \"Installed\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.willInstallBadge\",\n \"Will install\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.purchaseRequiredBadge\",\n \"Purchase required\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.credentialsHeading\",\n \"Credentials Needed\",\n )}\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n \"fluidgrids.builder.templateConfigModal.credentialsHint\",\n \"You'll need to configure these credentials after importing:\",\n )}\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\">\n {tr(\n \"fluidgrids.builder.templateConfigModal.paidBlockerTitle\",\n \"Purchase required before importing\",\n )}\n </p>\n <p className=\"mt-1 text-xs\">\n {tr(\n \"fluidgrids.builder.templateConfigModal.paidBlockerDescription\",\n 'The nodes marked \"Purchase required\" must be purchased from the store before this template can be imported.',\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.goToStoreButton\",\n \"Go to Store\",\n )}\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 {tr(\n \"fluidgrids.builder.templateConfigModal.installingLabel\",\n \"Installing:\",\n )}{\" \"}\n {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 {tr(\n \"fluidgrids.builder.templateConfigModal.cancelButton\",\n \"Cancel\",\n )}\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 const tr = useTr();\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=\"\">\n {tr(\n \"fluidgrids.builder.templateConfigModal.selectOptionPlaceholder\",\n \"Select...\",\n )}\n </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"]}