@burdenoff/fluidgrids-fe-sdk 2026.804.1 → 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.
- package/dist/ExecutionDetailPage-FF2DYKAZ.js +10 -0
- package/dist/{ExecutionDetailPage-FCY3S336.js.map → ExecutionDetailPage-FF2DYKAZ.js.map} +1 -1
- package/dist/ExecutionsListPage-NKISRFMA.js +9 -0
- package/dist/{ExecutionsListPage-IZJPACQV.js.map → ExecutionsListPage-NKISRFMA.js.map} +1 -1
- package/dist/{MissingNodesInstallModal-OT3LJZ4M.js → MissingNodesInstallModal-HA5L3FK2.js} +4 -3
- package/dist/MissingNodesInstallModal-HA5L3FK2.js.map +1 -0
- package/dist/{TemplateConfigurationModal-7OT6QBEA.js → TemplateConfigurationModal-MXNGZQIC.js} +90 -21
- package/dist/TemplateConfigurationModal-MXNGZQIC.js.map +1 -0
- package/dist/{TemplateDetailPanel-T3ZHXOHX.js → TemplateDetailPanel-CJ3NPVTP.js} +50 -14
- package/dist/TemplateDetailPanel-CJ3NPVTP.js.map +1 -0
- package/dist/{WorkflowBuilder-42S2S3PO.js → WorkflowBuilder-ETVB66U6.js} +6 -5
- package/dist/{WorkflowBuilder-42S2S3PO.js.map → WorkflowBuilder-ETVB66U6.js.map} +1 -1
- package/dist/WorkflowsList-TZAN3YBA.js +11 -0
- package/dist/{WorkflowsList-L7EJW54K.js.map → WorkflowsList-TZAN3YBA.js.map} +1 -1
- package/dist/{chunk-WAVGHDYH.js → chunk-6PNRM3KQ.js} +469 -114
- package/dist/chunk-6PNRM3KQ.js.map +1 -0
- package/dist/chunk-7VNIEIR6.js +21 -0
- package/dist/chunk-7VNIEIR6.js.map +1 -0
- package/dist/{chunk-F5ACDIYR.js → chunk-IWKLEFC7.js} +205 -51
- package/dist/chunk-IWKLEFC7.js.map +1 -0
- package/dist/{chunk-BRMURCHH.js → chunk-OHGXRM6Z.js} +5 -3
- package/dist/chunk-OHGXRM6Z.js.map +1 -0
- package/dist/{chunk-CQAHXNT2.js → chunk-SG7Z2IRQ.js} +55 -18
- package/dist/chunk-SG7Z2IRQ.js.map +1 -0
- package/dist/{chunk-CN3VSAYR.js → chunk-WQ4QNHDN.js} +4600 -1229
- package/dist/chunk-WQ4QNHDN.js.map +1 -0
- package/dist/{chunk-JPHK5LAL.js → chunk-Y36DJHU3.js} +24 -8
- package/dist/chunk-Y36DJHU3.js.map +1 -0
- package/dist/{chunk-S7FNNFPU.js → chunk-YJKZSUNC.js} +140 -46
- package/dist/chunk-YJKZSUNC.js.map +1 -0
- package/dist/index.d.ts +33 -2
- package/dist/index.js +637 -174
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/ExecutionDetailPage-FCY3S336.js +0 -9
- package/dist/ExecutionsListPage-IZJPACQV.js +0 -8
- package/dist/MissingNodesInstallModal-OT3LJZ4M.js.map +0 -1
- package/dist/TemplateConfigurationModal-7OT6QBEA.js.map +0 -1
- package/dist/TemplateDetailPanel-T3ZHXOHX.js.map +0 -1
- package/dist/WorkflowsList-L7EJW54K.js +0 -10
- package/dist/chunk-BRMURCHH.js.map +0 -1
- package/dist/chunk-CN3VSAYR.js.map +0 -1
- package/dist/chunk-CQAHXNT2.js.map +0 -1
- package/dist/chunk-F5ACDIYR.js.map +0 -1
- package/dist/chunk-JPHK5LAL.js.map +0 -1
- package/dist/chunk-S7FNNFPU.js.map +0 -1
- package/dist/chunk-WAVGHDYH.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-
|
|
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-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-NKISRFMA.js"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-
|
|
1
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-OHGXRM6Z.js';
|
|
2
2
|
import { Badge, Button } from './chunk-DBOMRIP5.js';
|
|
3
3
|
import './chunk-3ZYUGTIT.js';
|
|
4
|
+
import './chunk-7VNIEIR6.js';
|
|
4
5
|
import { Puzzle, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
|
|
5
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
7
|
|
|
@@ -180,5 +181,5 @@ function MissingNodesInstallModal({
|
|
|
180
181
|
}
|
|
181
182
|
|
|
182
183
|
export { MissingNodesInstallModal };
|
|
183
|
-
//# sourceMappingURL=MissingNodesInstallModal-
|
|
184
|
-
//# sourceMappingURL=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":"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","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"]}
|
package/dist/{TemplateConfigurationModal-7OT6QBEA.js → TemplateConfigurationModal-MXNGZQIC.js}
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Label } from './chunk-6QCBKN3P.js';
|
|
2
2
|
import { Input } from './chunk-P5PKRQAO.js';
|
|
3
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-
|
|
3
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-OHGXRM6Z.js';
|
|
4
4
|
import { Badge, Button } from './chunk-DBOMRIP5.js';
|
|
5
5
|
import './chunk-3ZYUGTIT.js';
|
|
6
|
+
import { useTr } from './chunk-7VNIEIR6.js';
|
|
6
7
|
import { useState, useMemo } from 'react';
|
|
7
8
|
import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
|
|
8
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -17,6 +18,7 @@ function TemplateConfigurationModal({
|
|
|
17
18
|
importing = false,
|
|
18
19
|
installProgress
|
|
19
20
|
}) {
|
|
21
|
+
const tr = useTr();
|
|
20
22
|
const [workflowName, setWorkflowName] = useState(
|
|
21
23
|
content?.defaultWorkflowName || template?.name || ""
|
|
22
24
|
);
|
|
@@ -61,7 +63,19 @@ function TemplateConfigurationModal({
|
|
|
61
63
|
if (!template || !content) return null;
|
|
62
64
|
const isInstalling = importing && !!installProgress;
|
|
63
65
|
const isCreating = importing && !installProgress;
|
|
64
|
-
const buttonLabel = hasPaidBlockers ?
|
|
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
|
+
);
|
|
65
79
|
return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
|
|
66
80
|
DialogContent,
|
|
67
81
|
{
|
|
@@ -72,30 +86,47 @@ function TemplateConfigurationModal({
|
|
|
72
86
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
73
87
|
/* @__PURE__ */ jsx(Sparkles, { className: "size-5 text-primary" }),
|
|
74
88
|
/* @__PURE__ */ jsxs(DialogTitle, { className: "text-xl", children: [
|
|
75
|
-
|
|
89
|
+
tr(
|
|
90
|
+
"fluidgrids.builder.templateConfigModal.importTitlePrefix",
|
|
91
|
+
"Import"
|
|
92
|
+
),
|
|
93
|
+
" ",
|
|
94
|
+
'"',
|
|
76
95
|
template.name,
|
|
77
96
|
'"'
|
|
78
97
|
] })
|
|
79
98
|
] }),
|
|
80
|
-
/* @__PURE__ */ jsx(DialogDescription, { children:
|
|
99
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: tr(
|
|
100
|
+
"fluidgrids.builder.templateConfigModal.description",
|
|
101
|
+
"Configure and import this workflow template into your workspace"
|
|
102
|
+
) })
|
|
81
103
|
] }),
|
|
82
104
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-6 py-5 space-y-6", children: [
|
|
83
105
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
84
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "workflow-name", className: "text-sm font-medium", children:
|
|
106
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "workflow-name", className: "text-sm font-medium", children: tr(
|
|
107
|
+
"fluidgrids.builder.templateConfigModal.workflowNameLabel",
|
|
108
|
+
"Workflow Name"
|
|
109
|
+
) }),
|
|
85
110
|
/* @__PURE__ */ jsx(
|
|
86
111
|
Input,
|
|
87
112
|
{
|
|
88
113
|
id: "workflow-name",
|
|
89
114
|
value: workflowName,
|
|
90
115
|
onChange: (e) => setWorkflowName(e.target.value),
|
|
91
|
-
placeholder:
|
|
116
|
+
placeholder: tr(
|
|
117
|
+
"fluidgrids.builder.templateConfigModal.workflowNamePlaceholder",
|
|
118
|
+
"Enter workflow name"
|
|
119
|
+
)
|
|
92
120
|
}
|
|
93
121
|
)
|
|
94
122
|
] }),
|
|
95
123
|
hasRequiredInputs && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
96
124
|
/* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
|
|
97
125
|
/* @__PURE__ */ jsx(KeyRound, { className: "size-4" }),
|
|
98
|
-
|
|
126
|
+
tr(
|
|
127
|
+
"fluidgrids.builder.templateConfigModal.requiredConfigHeading",
|
|
128
|
+
"Required Configuration"
|
|
129
|
+
)
|
|
99
130
|
] }),
|
|
100
131
|
/* @__PURE__ */ jsx("div", { className: "space-y-3", children: requiredInputs.map((input) => /* @__PURE__ */ jsx(
|
|
101
132
|
TemplateInputField,
|
|
@@ -110,7 +141,10 @@ function TemplateConfigurationModal({
|
|
|
110
141
|
nodeCheckResult && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
111
142
|
/* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
|
|
112
143
|
/* @__PURE__ */ jsx(Download, { className: "size-4" }),
|
|
113
|
-
|
|
144
|
+
tr(
|
|
145
|
+
"fluidgrids.builder.templateConfigModal.nodeDependenciesHeading",
|
|
146
|
+
"Node Dependencies"
|
|
147
|
+
)
|
|
114
148
|
] }),
|
|
115
149
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
116
150
|
nodeCheckResult.installed.map((node) => /* @__PURE__ */ jsxs(
|
|
@@ -124,7 +158,10 @@ function TemplateConfigurationModal({
|
|
|
124
158
|
" v",
|
|
125
159
|
node.nodeVersion
|
|
126
160
|
] }),
|
|
127
|
-
/* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs ml-auto", children:
|
|
161
|
+
/* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs ml-auto", children: tr(
|
|
162
|
+
"fluidgrids.builder.templateConfigModal.installedBadge",
|
|
163
|
+
"Installed"
|
|
164
|
+
) })
|
|
128
165
|
]
|
|
129
166
|
},
|
|
130
167
|
node.nodeType
|
|
@@ -145,7 +182,10 @@ function TemplateConfigurationModal({
|
|
|
145
182
|
{
|
|
146
183
|
variant: "outline",
|
|
147
184
|
className: "text-xs ml-auto border-blue-500/30 text-blue-500",
|
|
148
|
-
children:
|
|
185
|
+
children: tr(
|
|
186
|
+
"fluidgrids.builder.templateConfigModal.willInstallBadge",
|
|
187
|
+
"Will install"
|
|
188
|
+
)
|
|
149
189
|
}
|
|
150
190
|
)
|
|
151
191
|
]
|
|
@@ -168,7 +208,10 @@ function TemplateConfigurationModal({
|
|
|
168
208
|
{
|
|
169
209
|
variant: "outline",
|
|
170
210
|
className: "text-xs ml-auto border-amber-500/30 text-amber-500",
|
|
171
|
-
children:
|
|
211
|
+
children: tr(
|
|
212
|
+
"fluidgrids.builder.templateConfigModal.purchaseRequiredBadge",
|
|
213
|
+
"Purchase required"
|
|
214
|
+
)
|
|
172
215
|
}
|
|
173
216
|
)
|
|
174
217
|
]
|
|
@@ -180,9 +223,15 @@ function TemplateConfigurationModal({
|
|
|
180
223
|
hasRequiredCredentials && /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
181
224
|
/* @__PURE__ */ jsxs("h4", { className: "text-sm font-semibold text-foreground flex items-center gap-2", children: [
|
|
182
225
|
/* @__PURE__ */ jsx(KeyRound, { className: "size-4" }),
|
|
183
|
-
|
|
226
|
+
tr(
|
|
227
|
+
"fluidgrids.builder.templateConfigModal.credentialsHeading",
|
|
228
|
+
"Credentials Needed"
|
|
229
|
+
)
|
|
184
230
|
] }),
|
|
185
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children:
|
|
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
|
+
) }),
|
|
186
235
|
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: content.requiredCredentialTypes?.map((cred) => /* @__PURE__ */ jsxs(Badge, { variant: "outline", className: "text-xs", children: [
|
|
187
236
|
/* @__PURE__ */ jsx(KeyRound, { className: "size-3 mr-1" }),
|
|
188
237
|
cred
|
|
@@ -196,8 +245,14 @@ function TemplateConfigurationModal({
|
|
|
196
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: [
|
|
197
246
|
/* @__PURE__ */ jsx(AlertTriangle, { className: "size-4 mt-0.5 shrink-0" }),
|
|
198
247
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
199
|
-
/* @__PURE__ */ jsx("p", { className: "font-medium", children:
|
|
200
|
-
|
|
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
|
+
) }),
|
|
201
256
|
/* @__PURE__ */ jsxs(
|
|
202
257
|
Button,
|
|
203
258
|
{
|
|
@@ -207,7 +262,10 @@ function TemplateConfigurationModal({
|
|
|
207
262
|
onClick: () => window.open("/store", "_blank"),
|
|
208
263
|
children: [
|
|
209
264
|
/* @__PURE__ */ jsx(ExternalLink, { className: "size-3 mr-1" }),
|
|
210
|
-
|
|
265
|
+
tr(
|
|
266
|
+
"fluidgrids.builder.templateConfigModal.goToStoreButton",
|
|
267
|
+
"Go to Store"
|
|
268
|
+
)
|
|
211
269
|
]
|
|
212
270
|
}
|
|
213
271
|
)
|
|
@@ -219,7 +277,11 @@ function TemplateConfigurationModal({
|
|
|
219
277
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
|
|
220
278
|
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
221
279
|
/* @__PURE__ */ jsx(Loader2, { className: "size-3 animate-spin" }),
|
|
222
|
-
|
|
280
|
+
tr(
|
|
281
|
+
"fluidgrids.builder.templateConfigModal.installingLabel",
|
|
282
|
+
"Installing:"
|
|
283
|
+
),
|
|
284
|
+
" ",
|
|
223
285
|
installProgress.nodeName
|
|
224
286
|
] }),
|
|
225
287
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
@@ -245,7 +307,10 @@ function TemplateConfigurationModal({
|
|
|
245
307
|
variant: "outline",
|
|
246
308
|
onClick: () => onOpenChange(false),
|
|
247
309
|
disabled: importing,
|
|
248
|
-
children:
|
|
310
|
+
children: tr(
|
|
311
|
+
"fluidgrids.builder.templateConfigModal.cancelButton",
|
|
312
|
+
"Cancel"
|
|
313
|
+
)
|
|
249
314
|
}
|
|
250
315
|
),
|
|
251
316
|
/* @__PURE__ */ jsx(
|
|
@@ -273,6 +338,7 @@ function TemplateInputField({
|
|
|
273
338
|
value,
|
|
274
339
|
onChange
|
|
275
340
|
}) {
|
|
341
|
+
const tr = useTr();
|
|
276
342
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
277
343
|
/* @__PURE__ */ jsxs(Label, { htmlFor: `template-input-${input.name}`, className: "text-sm", children: [
|
|
278
344
|
input.label,
|
|
@@ -286,7 +352,10 @@ function TemplateInputField({
|
|
|
286
352
|
onChange: (e) => onChange(e.target.value),
|
|
287
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",
|
|
288
354
|
children: [
|
|
289
|
-
/* @__PURE__ */ jsx("option", { value: "", children:
|
|
355
|
+
/* @__PURE__ */ jsx("option", { value: "", children: tr(
|
|
356
|
+
"fluidgrids.builder.templateConfigModal.selectOptionPlaceholder",
|
|
357
|
+
"Select..."
|
|
358
|
+
) }),
|
|
290
359
|
input.options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt.value, children: opt.label }, opt.value))
|
|
291
360
|
]
|
|
292
361
|
}
|
|
@@ -305,5 +374,5 @@ function TemplateInputField({
|
|
|
305
374
|
}
|
|
306
375
|
|
|
307
376
|
export { TemplateConfigurationModal };
|
|
308
|
-
//# sourceMappingURL=TemplateConfigurationModal-
|
|
309
|
-
//# sourceMappingURL=TemplateConfigurationModal-
|
|
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"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Button, Badge } from './chunk-DBOMRIP5.js';
|
|
2
2
|
import './chunk-3ZYUGTIT.js';
|
|
3
|
+
import { useTr } from './chunk-7VNIEIR6.js';
|
|
3
4
|
import { X, Sparkles, Star, Download, Eye, User, Calendar, Tag, ExternalLink } from 'lucide-react';
|
|
4
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
6
|
|
|
@@ -29,11 +30,15 @@ function TemplateDetailPanel({
|
|
|
29
30
|
onClose,
|
|
30
31
|
onUseTemplate
|
|
31
32
|
}) {
|
|
33
|
+
const tr = useTr();
|
|
32
34
|
const previewImage = template.screenshots?.[0] || template.icon;
|
|
33
35
|
template.videoUrls && template.videoUrls.length > 0;
|
|
34
36
|
return /* @__PURE__ */ jsxs("div", { className: "w-full md:w-1/2 lg:w-2/5 border-l bg-background overflow-y-auto", children: [
|
|
35
37
|
/* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-background border-b", children: [
|
|
36
|
-
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold truncate pr-4", children:
|
|
38
|
+
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold truncate pr-4", children: tr(
|
|
39
|
+
"fluidgrids.builder.templateDetailPanel.title",
|
|
40
|
+
"Template Details"
|
|
41
|
+
) }),
|
|
37
42
|
/* @__PURE__ */ jsx(
|
|
38
43
|
Button,
|
|
39
44
|
{
|
|
@@ -60,7 +65,7 @@ function TemplateDetailPanel({
|
|
|
60
65
|
{
|
|
61
66
|
variant: "secondary",
|
|
62
67
|
className: "bg-green-500 text-white border-0",
|
|
63
|
-
children: "Free"
|
|
68
|
+
children: tr("fluidgrids.builder.templateDetailPanel.freeBadge", "Free")
|
|
64
69
|
}
|
|
65
70
|
) : /* @__PURE__ */ jsxs(
|
|
66
71
|
Badge,
|
|
@@ -80,14 +85,20 @@ function TemplateDetailPanel({
|
|
|
80
85
|
className: "bg-gradient-to-r from-yellow-500 to-orange-500 text-white border-0 shadow-lg",
|
|
81
86
|
children: [
|
|
82
87
|
/* @__PURE__ */ jsx(Star, { className: "size-3 mr-1 fill-white" }),
|
|
83
|
-
|
|
88
|
+
tr(
|
|
89
|
+
"fluidgrids.builder.templateDetailPanel.featuredBadge",
|
|
90
|
+
"Featured"
|
|
91
|
+
)
|
|
84
92
|
]
|
|
85
93
|
}
|
|
86
94
|
) })
|
|
87
95
|
] }),
|
|
88
96
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
89
97
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-bold", children: template.name }),
|
|
90
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mt-1.5 leading-relaxed", children: template.longDescription || template.description ||
|
|
98
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mt-1.5 leading-relaxed", children: template.longDescription || template.description || tr(
|
|
99
|
+
"fluidgrids.builder.templateDetailPanel.noDescription",
|
|
100
|
+
"No description available"
|
|
101
|
+
) })
|
|
91
102
|
] }),
|
|
92
103
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 text-sm text-muted-foreground", children: [
|
|
93
104
|
template.rating && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
|
|
@@ -110,20 +121,33 @@ function TemplateDetailPanel({
|
|
|
110
121
|
] }),
|
|
111
122
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
|
|
112
123
|
/* @__PURE__ */ jsx(User, { className: "size-4 text-muted-foreground" }),
|
|
113
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium", children: template.authorName || template.publisher?.name ||
|
|
114
|
-
|
|
124
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium", children: template.authorName || template.publisher?.name || tr(
|
|
125
|
+
"fluidgrids.builder.templateDetailPanel.unknownAuthor",
|
|
126
|
+
"Unknown"
|
|
127
|
+
) }),
|
|
128
|
+
template.publisher?.isVerified && /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs px-1.5 py-0", children: tr(
|
|
129
|
+
"fluidgrids.builder.templateDetailPanel.verifiedBadge",
|
|
130
|
+
"Verified"
|
|
131
|
+
) })
|
|
115
132
|
] }),
|
|
116
133
|
template.publishedAt && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
117
134
|
/* @__PURE__ */ jsx(Calendar, { className: "size-4" }),
|
|
118
135
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
119
|
-
|
|
136
|
+
tr(
|
|
137
|
+
"fluidgrids.builder.templateDetailPanel.publishedLabel",
|
|
138
|
+
"Published"
|
|
139
|
+
),
|
|
140
|
+
" ",
|
|
120
141
|
formatDate(template.publishedAt)
|
|
121
142
|
] })
|
|
122
143
|
] }),
|
|
123
144
|
(template.category || template.tags && template.tags.length > 0) && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
124
145
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
125
146
|
/* @__PURE__ */ jsx(Tag, { className: "size-4" }),
|
|
126
|
-
/* @__PURE__ */ jsx("span", { children:
|
|
147
|
+
/* @__PURE__ */ jsx("span", { children: tr(
|
|
148
|
+
"fluidgrids.builder.templateDetailPanel.categoryAndTagsLabel",
|
|
149
|
+
"Category & Tags"
|
|
150
|
+
) })
|
|
127
151
|
] }),
|
|
128
152
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
|
|
129
153
|
template.category && /* @__PURE__ */ jsx(Badge, { variant: "default", className: "text-xs", children: template.category }),
|
|
@@ -131,11 +155,17 @@ function TemplateDetailPanel({
|
|
|
131
155
|
] })
|
|
132
156
|
] }),
|
|
133
157
|
template.compatibleProducts && template.compatibleProducts.length > 0 && /* @__PURE__ */ jsxs("div", { className: "text-xs text-muted-foreground", children: [
|
|
134
|
-
/* @__PURE__ */ jsx("span", { children:
|
|
158
|
+
/* @__PURE__ */ jsx("span", { children: tr(
|
|
159
|
+
"fluidgrids.builder.templateDetailPanel.compatibleWithLabel",
|
|
160
|
+
"Compatible with: "
|
|
161
|
+
) }),
|
|
135
162
|
/* @__PURE__ */ jsx("span", { className: "font-medium", children: template.compatibleProducts.join(", ") })
|
|
136
163
|
] }),
|
|
137
164
|
template.screenshots && template.screenshots.length > 1 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
138
|
-
/* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold", children:
|
|
165
|
+
/* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold", children: tr(
|
|
166
|
+
"fluidgrids.builder.templateDetailPanel.screenshotsHeading",
|
|
167
|
+
"Screenshots"
|
|
168
|
+
) }),
|
|
139
169
|
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-2", children: template.screenshots.slice(1, 5).map((screenshot, i) => /* @__PURE__ */ jsx(
|
|
140
170
|
"img",
|
|
141
171
|
{
|
|
@@ -149,7 +179,10 @@ function TemplateDetailPanel({
|
|
|
149
179
|
/* @__PURE__ */ jsxs("div", { className: "pt-2 space-y-2", children: [
|
|
150
180
|
/* @__PURE__ */ jsxs(Button, { className: "w-full", onClick: () => onUseTemplate(template), children: [
|
|
151
181
|
/* @__PURE__ */ jsx(Sparkles, { className: "size-4 mr-2" }),
|
|
152
|
-
|
|
182
|
+
tr(
|
|
183
|
+
"fluidgrids.builder.templateDetailPanel.useTemplateButton",
|
|
184
|
+
"Use This Template"
|
|
185
|
+
)
|
|
153
186
|
] }),
|
|
154
187
|
template.publisher?.websiteUrl && /* @__PURE__ */ jsx(Button, { variant: "outline", className: "w-full", asChild: true, children: /* @__PURE__ */ jsxs(
|
|
155
188
|
"a",
|
|
@@ -159,7 +192,10 @@ function TemplateDetailPanel({
|
|
|
159
192
|
rel: "noopener noreferrer",
|
|
160
193
|
children: [
|
|
161
194
|
/* @__PURE__ */ jsx(ExternalLink, { className: "size-4 mr-2" }),
|
|
162
|
-
|
|
195
|
+
tr(
|
|
196
|
+
"fluidgrids.builder.templateDetailPanel.viewPublisherButton",
|
|
197
|
+
"View Publisher"
|
|
198
|
+
)
|
|
163
199
|
]
|
|
164
200
|
}
|
|
165
201
|
) })
|
|
@@ -169,5 +205,5 @@ function TemplateDetailPanel({
|
|
|
169
205
|
}
|
|
170
206
|
|
|
171
207
|
export { TemplateDetailPanel };
|
|
172
|
-
//# sourceMappingURL=TemplateDetailPanel-
|
|
173
|
-
//# sourceMappingURL=TemplateDetailPanel-
|
|
208
|
+
//# sourceMappingURL=TemplateDetailPanel-CJ3NPVTP.js.map
|
|
209
|
+
//# sourceMappingURL=TemplateDetailPanel-CJ3NPVTP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/builder/components/flow-builder/components/templates/TemplateDetailPanel.tsx"],"names":[],"mappings":"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","file":"TemplateDetailPanel-CJ3NPVTP.js","sourcesContent":["import { Button } from \"../../../../../ui/button\";\nimport { Badge } from \"../../../../../ui/badge\";\nimport type { StoreProduct } from \"../../../../../generated/global-types\";\nimport {\n X,\n Star,\n Download,\n Eye,\n Sparkles,\n ExternalLink,\n Calendar,\n User,\n Tag,\n} from \"lucide-react\";\nimport { useTr } from \"../../../../../hooks/useTr\";\n\nexport interface TemplateDetailPanelProps {\n template: StoreProduct;\n onClose: () => void;\n onUseTemplate: (template: StoreProduct) => void;\n}\n\nfunction formatNumber(count: number): string {\n if (count >= 1000000) {\n return `${(count / 1000000).toFixed(1)}M`;\n }\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}k`;\n }\n return count.toString();\n}\n\nfunction formatDate(dateStr: string | null | undefined): string {\n if (!dateStr) return \"Unknown\";\n try {\n return new Date(dateStr).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n } catch {\n return \"Unknown\";\n }\n}\n\n/**\n * Side panel that slides in within the TemplatesModal when a template card is clicked.\n * Shows detailed information about the template before the user decides to import.\n */\nexport function TemplateDetailPanel({\n template,\n onClose,\n onUseTemplate,\n}: TemplateDetailPanelProps) {\n const tr = useTr();\n const previewImage = template.screenshots?.[0] || template.icon;\n const hasVideo = template.videoUrls && template.videoUrls.length > 0;\n\n return (\n <div className=\"w-full md:w-1/2 lg:w-2/5 border-l bg-background overflow-y-auto\">\n {/* Close Button */}\n <div className=\"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-background border-b\">\n <h3 className=\"text-sm font-semibold truncate pr-4\">\n {tr(\n \"fluidgrids.builder.templateDetailPanel.title\",\n \"Template Details\",\n )}\n </h3>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n className=\"size-8 shrink-0\"\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n\n <div className=\"p-4 space-y-5\">\n {/* Preview Image / Video */}\n <div className=\"relative aspect-video w-full rounded-lg overflow-hidden bg-gradient-to-br from-primary/5 to-primary/10\">\n {previewImage ? (\n <img\n src={previewImage}\n alt={template.name}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"w-full h-full flex items-center justify-center\">\n <Sparkles className=\"size-16 text-primary/30\" />\n </div>\n )}\n\n {/* Pricing Badge */}\n <div className=\"absolute top-2 left-2\">\n {template.pricingModel === \"FREE\" ? (\n <Badge\n variant=\"secondary\"\n className=\"bg-green-500 text-white border-0\"\n >\n {tr(\"fluidgrids.builder.templateDetailPanel.freeBadge\", \"Free\")}\n </Badge>\n ) : (\n <Badge\n variant=\"default\"\n className=\"bg-blue-500 text-white border-0\"\n >\n ${template.price?.toString() || \"0\"}\n </Badge>\n )}\n </div>\n\n {template.featured && (\n <div className=\"absolute top-2 right-2\">\n <Badge\n variant=\"default\"\n className=\"bg-gradient-to-r from-yellow-500 to-orange-500 text-white border-0 shadow-lg\"\n >\n <Star className=\"size-3 mr-1 fill-white\" />\n {tr(\n \"fluidgrids.builder.templateDetailPanel.featuredBadge\",\n \"Featured\",\n )}\n </Badge>\n </div>\n )}\n </div>\n\n {/* Title & Description */}\n <div>\n <h2 className=\"text-lg font-bold\">{template.name}</h2>\n <p className=\"text-sm text-muted-foreground mt-1.5 leading-relaxed\">\n {template.longDescription ||\n template.description ||\n tr(\n \"fluidgrids.builder.templateDetailPanel.noDescription\",\n \"No description available\",\n )}\n </p>\n </div>\n\n {/* Stats Row */}\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n {template.rating && (\n <div className=\"flex items-center gap-1\">\n <Star className=\"size-4 fill-yellow-400 text-yellow-400\" />\n <span className=\"font-medium text-foreground\">\n {template.rating.toFixed(1)}\n </span>\n <span>({template.reviewCount || 0})</span>\n </div>\n )}\n <div className=\"flex items-center gap-1\">\n <Download className=\"size-4\" />\n <span>{formatNumber(template.downloads || 0)}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Eye className=\"size-4\" />\n <span>{formatNumber(template.viewCount || 0)}</span>\n </div>\n </div>\n\n {/* Author */}\n <div className=\"flex items-center gap-2 text-sm\">\n <User className=\"size-4 text-muted-foreground\" />\n <span className=\"font-medium\">\n {template.authorName ||\n template.publisher?.name ||\n tr(\n \"fluidgrids.builder.templateDetailPanel.unknownAuthor\",\n \"Unknown\",\n )}\n </span>\n {template.publisher?.isVerified && (\n <Badge variant=\"secondary\" className=\"text-xs px-1.5 py-0\">\n {tr(\n \"fluidgrids.builder.templateDetailPanel.verifiedBadge\",\n \"Verified\",\n )}\n </Badge>\n )}\n </div>\n\n {/* Published Date */}\n {template.publishedAt && (\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Calendar className=\"size-4\" />\n <span>\n {tr(\n \"fluidgrids.builder.templateDetailPanel.publishedLabel\",\n \"Published\",\n )}{\" \"}\n {formatDate(template.publishedAt)}\n </span>\n </div>\n )}\n\n {/* Category & Tags */}\n {(template.category || (template.tags && template.tags.length > 0)) && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Tag className=\"size-4\" />\n <span>\n {tr(\n \"fluidgrids.builder.templateDetailPanel.categoryAndTagsLabel\",\n \"Category & Tags\",\n )}\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1.5\">\n {template.category && (\n <Badge variant=\"default\" className=\"text-xs\">\n {template.category}\n </Badge>\n )}\n {template.tags?.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Compatible Products */}\n {template.compatibleProducts &&\n template.compatibleProducts.length > 0 && (\n <div className=\"text-xs text-muted-foreground\">\n <span>\n {tr(\n \"fluidgrids.builder.templateDetailPanel.compatibleWithLabel\",\n \"Compatible with: \",\n )}\n </span>\n <span className=\"font-medium\">\n {template.compatibleProducts.join(\", \")}\n </span>\n </div>\n )}\n\n {/* Additional Screenshots */}\n {template.screenshots && template.screenshots.length > 1 && (\n <div className=\"space-y-2\">\n <h4 className=\"text-sm font-semibold\">\n {tr(\n \"fluidgrids.builder.templateDetailPanel.screenshotsHeading\",\n \"Screenshots\",\n )}\n </h4>\n <div className=\"grid grid-cols-2 gap-2\">\n {template.screenshots.slice(1, 5).map((screenshot, i) => (\n <img\n key={i}\n src={screenshot}\n alt={`${template.name} screenshot ${i + 2}`}\n className=\"w-full h-auto rounded-md border\"\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Action Buttons */}\n <div className=\"pt-2 space-y-2\">\n <Button className=\"w-full\" onClick={() => onUseTemplate(template)}>\n <Sparkles className=\"size-4 mr-2\" />\n {tr(\n \"fluidgrids.builder.templateDetailPanel.useTemplateButton\",\n \"Use This Template\",\n )}\n </Button>\n {template.publisher?.websiteUrl && (\n <Button variant=\"outline\" className=\"w-full\" asChild>\n <a\n href={template.publisher.websiteUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <ExternalLink className=\"size-4 mr-2\" />\n {tr(\n \"fluidgrids.builder.templateDetailPanel.viewPublisherButton\",\n \"View Publisher\",\n )}\n </a>\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { WorkflowBuilder } from './chunk-
|
|
1
|
+
export { WorkflowBuilder } from './chunk-WQ4QNHDN.js';
|
|
2
2
|
import './chunk-P5PKRQAO.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-OHGXRM6Z.js';
|
|
4
4
|
import './chunk-BQXHJIER.js';
|
|
5
5
|
import './chunk-PNOA7CQV.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-Y36DJHU3.js';
|
|
7
7
|
import './chunk-MH4AHYK3.js';
|
|
8
8
|
import './chunk-UIY2HBWA.js';
|
|
9
9
|
import './chunk-V5UEEB74.js';
|
|
@@ -12,5 +12,6 @@ import './chunk-WWU2O2SR.js';
|
|
|
12
12
|
import './chunk-XQP33UJR.js';
|
|
13
13
|
import './chunk-DBOMRIP5.js';
|
|
14
14
|
import './chunk-3ZYUGTIT.js';
|
|
15
|
-
|
|
16
|
-
//# sourceMappingURL=WorkflowBuilder-
|
|
15
|
+
import './chunk-7VNIEIR6.js';
|
|
16
|
+
//# sourceMappingURL=WorkflowBuilder-ETVB66U6.js.map
|
|
17
|
+
//# sourceMappingURL=WorkflowBuilder-ETVB66U6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-ETVB66U6.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { WorkflowsList } from './chunk-YJKZSUNC.js';
|
|
2
|
+
import './chunk-Y36DJHU3.js';
|
|
3
|
+
import './chunk-MH4AHYK3.js';
|
|
4
|
+
import './chunk-UIY2HBWA.js';
|
|
5
|
+
import './chunk-V5UEEB74.js';
|
|
6
|
+
import './chunk-5BDQNSP3.js';
|
|
7
|
+
import './chunk-WWU2O2SR.js';
|
|
8
|
+
import './chunk-3ZYUGTIT.js';
|
|
9
|
+
import './chunk-7VNIEIR6.js';
|
|
10
|
+
//# sourceMappingURL=WorkflowsList-TZAN3YBA.js.map
|
|
11
|
+
//# sourceMappingURL=WorkflowsList-TZAN3YBA.js.map
|