@burdenoff/fluidgrids-fe-sdk 2026.825.2 → 2026.829.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExecutionDetailPage-OWNO2BEW.js +11 -0
- package/dist/{ExecutionDetailPage-FF2DYKAZ.js.map → ExecutionDetailPage-OWNO2BEW.js.map} +1 -1
- package/dist/ExecutionsListPage-6O4AS3CM.js +10 -0
- package/dist/{ExecutionsListPage-NKISRFMA.js.map → ExecutionsListPage-6O4AS3CM.js.map} +1 -1
- package/dist/{MissingNodesInstallModal-HA5L3FK2.js → MissingNodesInstallModal-PZYTCNCV.js} +4 -4
- package/dist/{MissingNodesInstallModal-HA5L3FK2.js.map → MissingNodesInstallModal-PZYTCNCV.js.map} +1 -1
- package/dist/{TemplateConfigurationModal-MXNGZQIC.js → TemplateConfigurationModal-TB7DJBTR.js} +11 -8
- package/dist/TemplateConfigurationModal-TB7DJBTR.js.map +1 -0
- package/dist/{TemplateDetailPanel-CJ3NPVTP.js → TemplateDetailPanel-KS3LQIBD.js} +3 -4
- package/dist/TemplateDetailPanel-KS3LQIBD.js.map +1 -0
- package/dist/WorkflowBuilder-426LYWCE.js +19 -0
- package/dist/{WorkflowBuilder-URMQZLQU.js.map → WorkflowBuilder-426LYWCE.js.map} +1 -1
- package/dist/WorkflowsList-XQW7YPZX.js +12 -0
- package/dist/{WorkflowsList-TZAN3YBA.js.map → WorkflowsList-XQW7YPZX.js.map} +1 -1
- package/dist/{chunk-7VNIEIR6.js → chunk-7YWBH2A5.js} +9 -3
- package/dist/chunk-7YWBH2A5.js.map +1 -0
- package/dist/chunk-ACRXNUU2.js +504 -0
- package/dist/chunk-ACRXNUU2.js.map +1 -0
- package/dist/{chunk-6PNRM3KQ.js → chunk-AE7FZRTH.js} +5 -4
- package/dist/chunk-AE7FZRTH.js.map +1 -0
- package/dist/{chunk-YJKZSUNC.js → chunk-BF4YC7XN.js} +32 -15
- package/dist/chunk-BF4YC7XN.js.map +1 -0
- package/dist/chunk-CLPFGB5Y.js +453 -0
- package/dist/chunk-CLPFGB5Y.js.map +1 -0
- package/dist/{chunk-MH4AHYK3.js → chunk-ELB3LXRJ.js} +17 -5
- package/dist/chunk-ELB3LXRJ.js.map +1 -0
- package/dist/{chunk-IWKLEFC7.js → chunk-GBDXBJPH.js} +7 -6
- package/dist/chunk-GBDXBJPH.js.map +1 -0
- package/dist/{chunk-Y36DJHU3.js → chunk-KT72XMAB.js} +4 -176
- package/dist/chunk-KT72XMAB.js.map +1 -0
- package/dist/chunk-LMO5ASOE.js +43 -0
- package/dist/chunk-LMO5ASOE.js.map +1 -0
- package/dist/{chunk-OHGXRM6Z.js → chunk-NH5YCY37.js} +3 -3
- package/dist/{chunk-OHGXRM6Z.js.map → chunk-NH5YCY37.js.map} +1 -1
- package/dist/chunk-NHPGJMJX.js +395 -0
- package/dist/chunk-NHPGJMJX.js.map +1 -0
- package/dist/{chunk-DVPXNC2S.js → chunk-NZ67MDME.js} +7871 -8046
- package/dist/chunk-NZ67MDME.js.map +1 -0
- package/dist/chunk-PYD2V4U6.js +541 -0
- package/dist/chunk-PYD2V4U6.js.map +1 -0
- package/dist/chunk-RXMBIJ5Z.js +3 -0
- package/dist/chunk-RXMBIJ5Z.js.map +1 -0
- package/dist/{chunk-SG7Z2IRQ.js → chunk-UPN73SK4.js} +5 -5
- package/dist/{chunk-SG7Z2IRQ.js.map → chunk-UPN73SK4.js.map} +1 -1
- package/dist/chunk-VJ2NTNDZ.js +4901 -0
- package/dist/chunk-VJ2NTNDZ.js.map +1 -0
- package/dist/chunk-VJDLWE5S.js +505 -0
- package/dist/chunk-VJDLWE5S.js.map +1 -0
- package/dist/{chunk-V5UEEB74.js → chunk-WO3AHQVD.js} +17 -41
- package/dist/chunk-WO3AHQVD.js.map +1 -0
- package/dist/executions.d.ts +7 -0
- package/dist/executions.js +14 -0
- package/dist/executions.js.map +1 -0
- package/dist/history.d.ts +5 -0
- package/dist/history.js +9 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +147 -616
- package/dist/index.js +61 -6870
- package/dist/index.js.map +1 -1
- package/dist/nodes.d.ts +5 -0
- package/dist/nodes.js +6 -0
- package/dist/nodes.js.map +1 -0
- package/dist/settings.d.ts +5 -0
- package/dist/settings.js +4 -0
- package/dist/settings.js.map +1 -0
- package/dist/templates.d.ts +17 -0
- package/dist/templates.js +19 -0
- package/dist/templates.js.map +1 -0
- package/dist/workflow-builder-JKkdIJoP.d.ts +473 -0
- package/dist/workflow-builder.d.ts +5 -0
- package/dist/workflow-builder.js +20 -0
- package/dist/workflow-builder.js.map +1 -0
- package/dist/workflows-list.d.ts +5 -0
- package/dist/workflows-list.js +12 -0
- package/dist/workflows-list.js.map +1 -0
- package/package.json +29 -1
- package/dist/ExecutionDetailPage-FF2DYKAZ.js +0 -10
- package/dist/ExecutionsListPage-NKISRFMA.js +0 -9
- package/dist/TemplateConfigurationModal-MXNGZQIC.js.map +0 -1
- package/dist/TemplateDetailPanel-CJ3NPVTP.js.map +0 -1
- package/dist/WorkflowBuilder-URMQZLQU.js +0 -17
- package/dist/WorkflowsList-TZAN3YBA.js +0 -11
- package/dist/chunk-6PNRM3KQ.js.map +0 -1
- package/dist/chunk-7VNIEIR6.js.map +0 -1
- package/dist/chunk-DVPXNC2S.js.map +0 -1
- package/dist/chunk-IWKLEFC7.js.map +0 -1
- package/dist/chunk-MH4AHYK3.js.map +0 -1
- package/dist/chunk-V5UEEB74.js.map +0 -1
- package/dist/chunk-Y36DJHU3.js.map +0 -1
- package/dist/chunk-YJKZSUNC.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ExecutionDetailPage } from './chunk-GBDXBJPH.js';
|
|
2
|
+
import './chunk-AE7FZRTH.js';
|
|
3
|
+
import './chunk-UIY2HBWA.js';
|
|
4
|
+
import './chunk-3ZYUGTIT.js';
|
|
5
|
+
import './chunk-LMO5ASOE.js';
|
|
6
|
+
import './chunk-WWU2O2SR.js';
|
|
7
|
+
import './chunk-WO3AHQVD.js';
|
|
8
|
+
import './chunk-5BDQNSP3.js';
|
|
9
|
+
import './chunk-7YWBH2A5.js';
|
|
10
|
+
//# sourceMappingURL=ExecutionDetailPage-OWNO2BEW.js.map
|
|
11
|
+
//# sourceMappingURL=ExecutionDetailPage-OWNO2BEW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionDetailPage-OWNO2BEW.js"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { ExecutionsListPage } from './chunk-UPN73SK4.js';
|
|
2
|
+
import './chunk-AE7FZRTH.js';
|
|
3
|
+
import './chunk-ELB3LXRJ.js';
|
|
4
|
+
import './chunk-LMO5ASOE.js';
|
|
5
|
+
import './chunk-WWU2O2SR.js';
|
|
6
|
+
import './chunk-WO3AHQVD.js';
|
|
7
|
+
import './chunk-5BDQNSP3.js';
|
|
8
|
+
import './chunk-7YWBH2A5.js';
|
|
9
|
+
//# sourceMappingURL=ExecutionsListPage-6O4AS3CM.js.map
|
|
10
|
+
//# sourceMappingURL=ExecutionsListPage-6O4AS3CM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ExecutionsListPage-6O4AS3CM.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-
|
|
1
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './chunk-NH5YCY37.js';
|
|
2
2
|
import { Badge, Button } from './chunk-DBOMRIP5.js';
|
|
3
3
|
import './chunk-3ZYUGTIT.js';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-7YWBH2A5.js';
|
|
5
5
|
import { Puzzle, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
7
|
|
|
@@ -181,5 +181,5 @@ function MissingNodesInstallModal({
|
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
export { MissingNodesInstallModal };
|
|
184
|
-
//# sourceMappingURL=MissingNodesInstallModal-
|
|
185
|
-
//# sourceMappingURL=MissingNodesInstallModal-
|
|
184
|
+
//# sourceMappingURL=MissingNodesInstallModal-PZYTCNCV.js.map
|
|
185
|
+
//# sourceMappingURL=MissingNodesInstallModal-PZYTCNCV.js.map
|
package/dist/{MissingNodesInstallModal-HA5L3FK2.js.map → MissingNodesInstallModal-PZYTCNCV.js.map}
RENAMED
|
@@ -1 +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"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder/components/flow-builder/components/templates/MissingNodesInstallModal.tsx"],"names":[],"mappings":"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","file":"MissingNodesInstallModal-PZYTCNCV.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-MXNGZQIC.js → TemplateConfigurationModal-TB7DJBTR.js}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
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-NH5YCY37.js';
|
|
4
4
|
import { Badge, Button } from './chunk-DBOMRIP5.js';
|
|
5
5
|
import './chunk-3ZYUGTIT.js';
|
|
6
|
-
import { useTr } from './chunk-
|
|
7
|
-
import { useState, useMemo } from 'react';
|
|
6
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
7
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
8
8
|
import { Sparkles, KeyRound, Download, CheckCircle2, ShoppingCart, AlertTriangle, ExternalLink, Loader2 } from 'lucide-react';
|
|
9
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ function TemplateConfigurationModal({
|
|
|
23
23
|
content?.defaultWorkflowName || template?.name || ""
|
|
24
24
|
);
|
|
25
25
|
const [inputValues, setInputValues] = useState({});
|
|
26
|
-
|
|
26
|
+
useEffect(() => {
|
|
27
27
|
if (template) {
|
|
28
28
|
setWorkflowName(content?.defaultWorkflowName || template.name || "");
|
|
29
29
|
const defaults = {};
|
|
@@ -36,8 +36,11 @@ function TemplateConfigurationModal({
|
|
|
36
36
|
}
|
|
37
37
|
setInputValues(defaults);
|
|
38
38
|
}
|
|
39
|
-
}, [template
|
|
40
|
-
const requiredInputs =
|
|
39
|
+
}, [content?.defaultWorkflowName, content?.requiredInputs, template]);
|
|
40
|
+
const requiredInputs = useMemo(
|
|
41
|
+
() => content?.requiredInputs || [],
|
|
42
|
+
[content?.requiredInputs]
|
|
43
|
+
);
|
|
41
44
|
const hasRequiredInputs = requiredInputs.length > 0;
|
|
42
45
|
const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;
|
|
43
46
|
const hasRequiredCredentials = (content?.requiredCredentialTypes?.length ?? 0) > 0;
|
|
@@ -374,5 +377,5 @@ function TemplateInputField({
|
|
|
374
377
|
}
|
|
375
378
|
|
|
376
379
|
export { TemplateConfigurationModal };
|
|
377
|
-
//# sourceMappingURL=TemplateConfigurationModal-
|
|
378
|
-
//# sourceMappingURL=TemplateConfigurationModal-
|
|
380
|
+
//# sourceMappingURL=TemplateConfigurationModal-TB7DJBTR.js.map
|
|
381
|
+
//# sourceMappingURL=TemplateConfigurationModal-TB7DJBTR.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-TB7DJBTR.js","sourcesContent":["import { useState, useMemo, useEffect } 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 useEffect(() => {\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 }, [content?.defaultWorkflowName, content?.requiredInputs, template]);\n\n const requiredInputs = useMemo(\n () => content?.requiredInputs || [],\n [content?.requiredInputs],\n );\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,6 +1,6 @@
|
|
|
1
1
|
import { Button, Badge } from './chunk-DBOMRIP5.js';
|
|
2
2
|
import './chunk-3ZYUGTIT.js';
|
|
3
|
-
import { useTr } from './chunk-
|
|
3
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
4
4
|
import { X, Sparkles, Star, Download, Eye, User, Calendar, Tag, ExternalLink } from 'lucide-react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -32,7 +32,6 @@ function TemplateDetailPanel({
|
|
|
32
32
|
}) {
|
|
33
33
|
const tr = useTr();
|
|
34
34
|
const previewImage = template.screenshots?.[0] || template.icon;
|
|
35
|
-
template.videoUrls && template.videoUrls.length > 0;
|
|
36
35
|
return /* @__PURE__ */ jsxs("div", { className: "w-full md:w-1/2 lg:w-2/5 border-l bg-background overflow-y-auto", children: [
|
|
37
36
|
/* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-background border-b", children: [
|
|
38
37
|
/* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold truncate pr-4", children: tr(
|
|
@@ -205,5 +204,5 @@ function TemplateDetailPanel({
|
|
|
205
204
|
}
|
|
206
205
|
|
|
207
206
|
export { TemplateDetailPanel };
|
|
208
|
-
//# sourceMappingURL=TemplateDetailPanel-
|
|
209
|
-
//# sourceMappingURL=TemplateDetailPanel-
|
|
207
|
+
//# sourceMappingURL=TemplateDetailPanel-KS3LQIBD.js.map
|
|
208
|
+
//# sourceMappingURL=TemplateDetailPanel-KS3LQIBD.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-KS3LQIBD.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\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"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { WorkflowBuilder } from './chunk-NHPGJMJX.js';
|
|
2
|
+
import './chunk-NZ67MDME.js';
|
|
3
|
+
import './chunk-P5PKRQAO.js';
|
|
4
|
+
import './chunk-NH5YCY37.js';
|
|
5
|
+
import './chunk-DBOMRIP5.js';
|
|
6
|
+
import './chunk-BQXHJIER.js';
|
|
7
|
+
import './chunk-6LXMUIR3.js';
|
|
8
|
+
import './chunk-XQP33UJR.js';
|
|
9
|
+
import './chunk-KT72XMAB.js';
|
|
10
|
+
import './chunk-UIY2HBWA.js';
|
|
11
|
+
import './chunk-3ZYUGTIT.js';
|
|
12
|
+
import './chunk-ELB3LXRJ.js';
|
|
13
|
+
import './chunk-LMO5ASOE.js';
|
|
14
|
+
import './chunk-WWU2O2SR.js';
|
|
15
|
+
import './chunk-WO3AHQVD.js';
|
|
16
|
+
import './chunk-5BDQNSP3.js';
|
|
17
|
+
import './chunk-7YWBH2A5.js';
|
|
18
|
+
//# sourceMappingURL=WorkflowBuilder-426LYWCE.js.map
|
|
19
|
+
//# sourceMappingURL=WorkflowBuilder-426LYWCE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-426LYWCE.js"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { WorkflowsList } from './chunk-BF4YC7XN.js';
|
|
2
|
+
import './chunk-KT72XMAB.js';
|
|
3
|
+
import './chunk-UIY2HBWA.js';
|
|
4
|
+
import './chunk-3ZYUGTIT.js';
|
|
5
|
+
import './chunk-ELB3LXRJ.js';
|
|
6
|
+
import './chunk-LMO5ASOE.js';
|
|
7
|
+
import './chunk-WWU2O2SR.js';
|
|
8
|
+
import './chunk-WO3AHQVD.js';
|
|
9
|
+
import './chunk-5BDQNSP3.js';
|
|
10
|
+
import './chunk-7YWBH2A5.js';
|
|
11
|
+
//# sourceMappingURL=WorkflowsList-XQW7YPZX.js.map
|
|
12
|
+
//# sourceMappingURL=WorkflowsList-XQW7YPZX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowsList-XQW7YPZX.js"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { createContext, useMemo, useContext } from 'react';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
|
-
var ENGLISH_FALLBACK_TRANSLATOR = (_key, fallback) =>
|
|
4
|
+
var ENGLISH_FALLBACK_TRANSLATOR = (_key, fallback, params) => {
|
|
5
|
+
if (!params) return fallback;
|
|
6
|
+
return Object.entries(params).reduce(
|
|
7
|
+
(str, [k, v]) => str.replace(new RegExp(`\\{\\{${k}\\}\\}`, "g"), String(v)),
|
|
8
|
+
fallback
|
|
9
|
+
);
|
|
10
|
+
};
|
|
5
11
|
var FluidGridsTranslationContext = createContext(
|
|
6
12
|
ENGLISH_FALLBACK_TRANSLATOR
|
|
7
13
|
);
|
|
@@ -17,5 +23,5 @@ function useTr() {
|
|
|
17
23
|
}
|
|
18
24
|
|
|
19
25
|
export { ENGLISH_FALLBACK_TRANSLATOR, FluidGridsTranslationProvider, useTr };
|
|
20
|
-
//# sourceMappingURL=chunk-
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-7YWBH2A5.js.map
|
|
27
|
+
//# sourceMappingURL=chunk-7YWBH2A5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/TranslationBridge.tsx"],"names":[],"mappings":";;;AA4CO,IAAM,2BAAA,GAA0C,CACrD,IAAA,EACA,QAAA,EACA,MAAA,KACG;AACH,EAAA,IAAI,CAAC,QAAQ,OAAO,QAAA;AACpB,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA;AAAA,IAC5B,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,MACT,GAAA,CAAI,OAAA,CAAQ,IAAI,MAAA,CAAO,SAAS,CAAC,CAAA,MAAA,CAAA,EAAU,GAAG,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IAC5D;AAAA,GACF;AACF;AAEA,IAAM,4BAAA,GAA+B,aAAA;AAAA,EACnC;AACF,CAAA;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,CAAA;AAAA,EACA;AACF,CAAA,EAAuC;AAGrC,EAAA,MAAM,QAAQ,OAAA,CAAoB,MAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAC9C,EAAA,uBACE,GAAA,CAAC,4BAAA,CAA6B,QAAA,EAA7B,EAAsC,OACpC,QAAA,EACH,CAAA;AAEJ;AAQO,SAAS,KAAA,GAAoB;AAClC,EAAA,OAAO,WAAW,4BAA4B,CAAA;AAChD","file":"chunk-7YWBH2A5.js","sourcesContent":["/**\n * FluidGrids Translation Bridge\n *\n * Same shape as the permissions bridge next door, and for the same reason: the\n * SDK never resolves translations itself and never imports `@burdenoff/fe-libs`.\n * `@burdenoff/fe-libs` is an OPTIONAL peer dependency here, and its `useI18n()`\n * THROWS when no `I18nProvider` is mounted — so importing it would turn \"this\n * host has no i18n\" into \"the builder crashes\" for every standalone embedder\n * (/embed/workflow, /shared/:id, BigConsole, fluidgrids-embed-test).\n *\n * Instead, hosts that DO have a translator bridge it in:\n *\n * // microfe-workflows, inside the Burdenoff shell:\n * <FluidGridsTranslationProvider t={tr}>…</FluidGridsTranslationProvider>\n *\n * Without a provider the context defaults to the identity translator, which\n * returns each call's English fallback. So the SDK renders correct English with\n * no provider, and the host's language with one. Translation is never the reason\n * a component fails to render.\n *\n * ── On the English argument ──────────────────────────────────────────────────\n * `tr(key, english)` is not \"hardcoded English with extra steps\". The English is\n * the SOURCE STRING: `fluidgrids-app/scripts/extract-i18n-keys.ts` reads it as\n * the value for `key`, which is what gets seeded into `global-i18n-svc` and\n * translated into every other locale. It is also the last-resort render, which\n * is what stops a raw dot-path like `fluidgrids.builder.save` reaching a user\n * when the i18n service is unreachable.\n *\n * Two rules follow, and the extractor enforces neither — you must:\n * 1. the key must be a STRING LITERAL (a template literal or variable is\n * invisible to the extractor, so that key would never reach the bundle);\n * 2. the English must be the real, final copy, never a placeholder.\n * ────────────────────────────────────────────────────────────────────────────\n */\nimport { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\n/** A host-supplied translator: `(key, englishFallback, params?) => string`. */\nexport type Translator = (\n key: string,\n fallback: string,\n params?: Record<string, string | number>,\n) => string;\n\n/** No-provider default: render the English fallback the call site supplied. */\nexport const ENGLISH_FALLBACK_TRANSLATOR: Translator = (\n _key,\n fallback,\n params,\n) => {\n if (!params) return fallback;\n return Object.entries(params).reduce(\n (str, [k, v]) =>\n str.replace(new RegExp(`\\\\{\\\\{${k}\\\\}\\\\}`, \"g\"), String(v)),\n fallback,\n );\n};\n\nconst FluidGridsTranslationContext = createContext<Translator>(\n ENGLISH_FALLBACK_TRANSLATOR,\n);\n\nexport interface FluidGridsTranslationProviderProps {\n /**\n * The host's translator. Must be referentially stable per locale (wrap it in\n * `useCallback` keyed on the locale) — it is a context value, so a new\n * function identity on every render re-renders every consumer.\n */\n t: Translator;\n children: ReactNode;\n}\n\nexport function FluidGridsTranslationProvider({\n t,\n children,\n}: FluidGridsTranslationProviderProps) {\n // Depending on `t` is what makes a locale switch propagate: the host rebuilds\n // `t` when the locale changes, which re-renders every consumer in the SDK.\n const value = useMemo<Translator>(() => t, [t]);\n return (\n <FluidGridsTranslationContext.Provider value={value}>\n {children}\n </FluidGridsTranslationContext.Provider>\n );\n}\n\n/**\n * Translate a UI string, falling back to English.\n *\n * const tr = useTr();\n * <Button>{tr(\"fluidgrids.builder.save\", \"Save\")}</Button>\n */\nexport function useTr(): Translator {\n return useContext(FluidGridsTranslationContext);\n}\n"]}
|