@mesantosrai/pipeline-canvas 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +545 -0
  3. package/dist/_virtual/dynamic-import-helper.mjs +17 -0
  4. package/dist/_virtual/dynamic-import-helper.mjs.map +1 -0
  5. package/dist/components/CustomHandle.d.ts +9 -0
  6. package/dist/components/CustomHandle.d.ts.map +1 -0
  7. package/dist/components/CustomHandle.mjs +18 -0
  8. package/dist/components/CustomHandle.mjs.map +1 -0
  9. package/dist/components/ExecutionLogsPanel.d.ts +3 -0
  10. package/dist/components/ExecutionLogsPanel.d.ts.map +1 -0
  11. package/dist/components/ExecutionLogsPanel.mjs +189 -0
  12. package/dist/components/ExecutionLogsPanel.mjs.map +1 -0
  13. package/dist/components/NodeContextMenu.d.ts +15 -0
  14. package/dist/components/NodeContextMenu.d.ts.map +1 -0
  15. package/dist/components/NodeContextMenu.mjs +110 -0
  16. package/dist/components/NodeContextMenu.mjs.map +1 -0
  17. package/dist/components/PipelineCanvas.d.ts +4 -0
  18. package/dist/components/PipelineCanvas.d.ts.map +1 -0
  19. package/dist/components/PipelineCanvas.mjs +1016 -0
  20. package/dist/components/PipelineCanvas.mjs.map +1 -0
  21. package/dist/components/PipelineCanvasProvider.d.ts +30 -0
  22. package/dist/components/PipelineCanvasProvider.d.ts.map +1 -0
  23. package/dist/components/PipelineCanvasProvider.mjs +7 -0
  24. package/dist/components/PipelineCanvasProvider.mjs.map +1 -0
  25. package/dist/components/PipelineExecution.d.ts +16 -0
  26. package/dist/components/PipelineExecution.d.ts.map +1 -0
  27. package/dist/components/PipelineExecution.mjs +310 -0
  28. package/dist/components/PipelineExecution.mjs.map +1 -0
  29. package/dist/components/PipelineManager.d.ts +8 -0
  30. package/dist/components/PipelineManager.d.ts.map +1 -0
  31. package/dist/components/PipelineManager.mjs +143 -0
  32. package/dist/components/PipelineManager.mjs.map +1 -0
  33. package/dist/components/PipelineNodeConfig.d.ts +11 -0
  34. package/dist/components/PipelineNodeConfig.d.ts.map +1 -0
  35. package/dist/components/PipelineNodeConfig.mjs +1808 -0
  36. package/dist/components/PipelineNodeConfig.mjs.map +1 -0
  37. package/dist/components/PipelineNodePalette.d.ts +3 -0
  38. package/dist/components/PipelineNodePalette.d.ts.map +1 -0
  39. package/dist/components/PipelineNodePalette.mjs +87 -0
  40. package/dist/components/PipelineNodePalette.mjs.map +1 -0
  41. package/dist/components/SavePipelineDialog.d.ts +9 -0
  42. package/dist/components/SavePipelineDialog.d.ts.map +1 -0
  43. package/dist/components/SavePipelineDialog.mjs +140 -0
  44. package/dist/components/SavePipelineDialog.mjs.map +1 -0
  45. package/dist/components/SavedPipelinesList.d.ts +3 -0
  46. package/dist/components/SavedPipelinesList.d.ts.map +1 -0
  47. package/dist/components/SavedPipelinesList.mjs +172 -0
  48. package/dist/components/SavedPipelinesList.mjs.map +1 -0
  49. package/dist/components/index.d.ts +8 -0
  50. package/dist/components/index.d.ts.map +1 -0
  51. package/dist/components/ui/alert.d.ts +9 -0
  52. package/dist/components/ui/alert.d.ts.map +1 -0
  53. package/dist/components/ui/alert.mjs +51 -0
  54. package/dist/components/ui/alert.mjs.map +1 -0
  55. package/dist/components/ui/button.d.ts +12 -0
  56. package/dist/components/ui/button.d.ts.map +1 -0
  57. package/dist/components/ui/button.mjs +45 -0
  58. package/dist/components/ui/button.mjs.map +1 -0
  59. package/dist/components/ui/dialog.d.ts +20 -0
  60. package/dist/components/ui/dialog.d.ts.map +1 -0
  61. package/dist/components/ui/dialog.mjs +99 -0
  62. package/dist/components/ui/dialog.mjs.map +1 -0
  63. package/dist/components/ui/index.d.ts +8 -0
  64. package/dist/components/ui/index.d.ts.map +1 -0
  65. package/dist/components/ui/input.d.ts +6 -0
  66. package/dist/components/ui/input.d.ts.map +1 -0
  67. package/dist/components/ui/input.mjs +22 -0
  68. package/dist/components/ui/input.mjs.map +1 -0
  69. package/dist/components/ui/label.d.ts +6 -0
  70. package/dist/components/ui/label.d.ts.map +1 -0
  71. package/dist/components/ui/label.mjs +20 -0
  72. package/dist/components/ui/label.mjs.map +1 -0
  73. package/dist/components/ui/select.d.ts +14 -0
  74. package/dist/components/ui/select.d.ts.map +1 -0
  75. package/dist/components/ui/select.mjs +121 -0
  76. package/dist/components/ui/select.mjs.map +1 -0
  77. package/dist/components/ui/tooltip.d.ts +8 -0
  78. package/dist/components/ui/tooltip.d.ts.map +1 -0
  79. package/dist/components/ui/tooltip.mjs +24 -0
  80. package/dist/components/ui/tooltip.mjs.map +1 -0
  81. package/dist/context/PipelineContext.d.ts +50 -0
  82. package/dist/context/PipelineContext.d.ts.map +1 -0
  83. package/dist/context/PipelineContext.mjs +36 -0
  84. package/dist/context/PipelineContext.mjs.map +1 -0
  85. package/dist/index.d.ts +12 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.mjs +45 -0
  88. package/dist/index.mjs.map +1 -0
  89. package/dist/lib/utils.d.ts +3 -0
  90. package/dist/lib/utils.d.ts.map +1 -0
  91. package/dist/lib/utils.mjs +9 -0
  92. package/dist/lib/utils.mjs.map +1 -0
  93. package/dist/node_modules/zustand/esm/middleware.mjs +256 -0
  94. package/dist/node_modules/zustand/esm/middleware.mjs.map +1 -0
  95. package/dist/nodes/alphafold_node/node.json.mjs +82 -0
  96. package/dist/nodes/alphafold_node/node.json.mjs.map +1 -0
  97. package/dist/nodes/http_request_node/node.json.mjs +383 -0
  98. package/dist/nodes/http_request_node/node.json.mjs.map +1 -0
  99. package/dist/nodes/input_node/node.json.mjs +51 -0
  100. package/dist/nodes/input_node/node.json.mjs.map +1 -0
  101. package/dist/nodes/message_input_node/node.json.mjs +90 -0
  102. package/dist/nodes/message_input_node/node.json.mjs.map +1 -0
  103. package/dist/nodes/proteinmpnn_node/node.json.mjs +83 -0
  104. package/dist/nodes/proteinmpnn_node/node.json.mjs.map +1 -0
  105. package/dist/nodes/rfdiffusion_node/node.json.mjs +281 -0
  106. package/dist/nodes/rfdiffusion_node/node.json.mjs.map +1 -0
  107. package/dist/store/pipelineStore.d.ts +108 -0
  108. package/dist/store/pipelineStore.d.ts.map +1 -0
  109. package/dist/store/pipelineStore.mjs +633 -0
  110. package/dist/store/pipelineStore.mjs.map +1 -0
  111. package/dist/style.css +1 -0
  112. package/dist/types/dependencies.d.ts +93 -0
  113. package/dist/types/dependencies.d.ts.map +1 -0
  114. package/dist/types/index.d.ts +56 -0
  115. package/dist/types/index.d.ts.map +1 -0
  116. package/dist/types/logger.d.ts +67 -0
  117. package/dist/types/logger.d.ts.map +1 -0
  118. package/dist/types/logger.mjs +22 -0
  119. package/dist/types/logger.mjs.map +1 -0
  120. package/dist/utils/executionEngine.d.ts +27 -0
  121. package/dist/utils/executionEngine.d.ts.map +1 -0
  122. package/dist/utils/executionEngine.mjs +461 -0
  123. package/dist/utils/executionEngine.mjs.map +1 -0
  124. package/dist/utils/index.d.ts +6 -0
  125. package/dist/utils/index.d.ts.map +1 -0
  126. package/dist/utils/logger.d.ts +23 -0
  127. package/dist/utils/logger.d.ts.map +1 -0
  128. package/dist/utils/logger.mjs +29 -0
  129. package/dist/utils/logger.mjs.map +1 -0
  130. package/dist/utils/nodeLoader.d.ts +76 -0
  131. package/dist/utils/nodeLoader.d.ts.map +1 -0
  132. package/dist/utils/nodeLoader.mjs +48 -0
  133. package/dist/utils/nodeLoader.mjs.map +1 -0
  134. package/dist/utils/templateResolver.d.ts +10 -0
  135. package/dist/utils/templateResolver.d.ts.map +1 -0
  136. package/dist/utils/templateResolver.mjs +64 -0
  137. package/dist/utils/templateResolver.mjs.map +1 -0
  138. package/dist/utils/topologicalSort.d.ts +10 -0
  139. package/dist/utils/topologicalSort.d.ts.map +1 -0
  140. package/dist/utils/topologicalSort.mjs +25 -0
  141. package/dist/utils/topologicalSort.mjs.map +1 -0
  142. package/nodes/alphafold_node/node.json +77 -0
  143. package/nodes/http_request_node/node.json +311 -0
  144. package/nodes/input_node/node.json +47 -0
  145. package/nodes/message_input_node/node.json +56 -0
  146. package/nodes/proteinmpnn_node/node.json +78 -0
  147. package/nodes/rfdiffusion_node/node.json +231 -0
  148. package/package.json +94 -0
@@ -0,0 +1,140 @@
1
+ import { jsx as e, jsxs as a, Fragment as g } from "react/jsx-runtime";
2
+ import { useState as d, useEffect as E } from "react";
3
+ import { usePipelineStore as w } from "../store/pipelineStore.mjs";
4
+ import { usePipelineContext as k } from "../context/PipelineContext.mjs";
5
+ import { Save as S, CheckCircle2 as F, AlertCircle as U } from "lucide-react";
6
+ import { Dialog as A, DialogContent as K, DialogHeader as I, DialogTitle as L, DialogFooter as T } from "./ui/dialog.mjs";
7
+ import { Input as z } from "./ui/input.mjs";
8
+ import { Label as B } from "./ui/label.mjs";
9
+ import { Button as C } from "./ui/button.mjs";
10
+ import { Alert as H, AlertDescription as q } from "./ui/alert.mjs";
11
+ const O = ({
12
+ isOpen: o,
13
+ onClose: u,
14
+ onSave: f
15
+ }) => {
16
+ const { currentPipeline: t, savedPipelines: y } = w(), { apiClient: D, authState: P, sessionId: j } = k(), [r, l] = d(""), [v, s] = d(null), [c, m] = d(!1), [N, x] = d(!1), n = t && y.some((i) => i.id === t.id);
17
+ E(() => {
18
+ o && (t != null && t.name && t.name !== "Unnamed Pipeline" ? l(t.name) : l(""), s(null));
19
+ }, [o, t]);
20
+ const b = async () => {
21
+ const i = r.trim();
22
+ if (!i) {
23
+ s("Pipeline name cannot be empty");
24
+ return;
25
+ }
26
+ if (y.find(
27
+ (h) => h.name.toLowerCase() === i.toLowerCase() && h.id !== (t == null ? void 0 : t.id)
28
+ )) {
29
+ s("A pipeline with this name already exists");
30
+ return;
31
+ }
32
+ m(!0), s(null);
33
+ try {
34
+ f ? f(i) : w.getState().savePipeline(i, void 0, void 0, {
35
+ apiClient: D,
36
+ authState: P,
37
+ sessionId: j
38
+ }), x(!0), setTimeout(() => {
39
+ l(""), s(null), m(!1), x(!1), u();
40
+ }, 800);
41
+ } catch {
42
+ s("Failed to save pipeline. Please try again."), m(!1);
43
+ }
44
+ }, p = () => {
45
+ l(""), s(null), u();
46
+ };
47
+ return /* @__PURE__ */ e(A, { open: o, onOpenChange: (i) => !i && p(), children: /* @__PURE__ */ a(K, { className: "sm:max-w-md bg-[#1e1e32] border-gray-700/50", children: [
48
+ /* @__PURE__ */ e(I, { children: /* @__PURE__ */ a(L, { className: "flex items-center gap-2 text-gray-200", children: [
49
+ /* @__PURE__ */ e(S, { className: "w-5 h-5" }),
50
+ n ? "Update Pipeline" : "Save Pipeline"
51
+ ] }) }),
52
+ /* @__PURE__ */ e("div", { className: "space-y-4", children: N ? /* @__PURE__ */ a("div", { className: "flex flex-col items-center justify-center py-8 space-y-3", children: [
53
+ /* @__PURE__ */ e("div", { className: "w-16 h-16 rounded-full bg-green-500/20 flex items-center justify-center", children: /* @__PURE__ */ e(F, { className: "w-8 h-8 text-green-400" }) }),
54
+ /* @__PURE__ */ a("div", { className: "text-center", children: [
55
+ /* @__PURE__ */ a("h3", { className: "text-lg font-semibold text-gray-200 mb-1", children: [
56
+ "Pipeline ",
57
+ n ? "Updated" : "Saved",
58
+ "!"
59
+ ] }),
60
+ /* @__PURE__ */ a("p", { className: "text-sm text-gray-400", children: [
61
+ r,
62
+ " has been ",
63
+ n ? "updated" : "saved",
64
+ " successfully."
65
+ ] })
66
+ ] })
67
+ ] }) : /* @__PURE__ */ a(g, { children: [
68
+ /* @__PURE__ */ a("div", { className: "space-y-2", children: [
69
+ /* @__PURE__ */ e(B, { htmlFor: "pipeline-name", className: "text-gray-300", children: "Pipeline Name" }),
70
+ /* @__PURE__ */ e(
71
+ z,
72
+ {
73
+ id: "pipeline-name",
74
+ type: "text",
75
+ value: r,
76
+ onChange: (i) => {
77
+ l(i.target.value), s(null);
78
+ },
79
+ onKeyDown: (i) => {
80
+ i.key === "Enter" && !i.shiftKey ? (i.preventDefault(), b()) : i.key === "Escape" && p();
81
+ },
82
+ placeholder: "Enter pipeline name...",
83
+ className: "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500",
84
+ autoFocus: !0,
85
+ disabled: c
86
+ }
87
+ ),
88
+ v && /* @__PURE__ */ a(H, { variant: "destructive", className: "mt-2", children: [
89
+ /* @__PURE__ */ e(U, { className: "h-4 w-4" }),
90
+ /* @__PURE__ */ e(q, { children: v })
91
+ ] })
92
+ ] }),
93
+ t && /* @__PURE__ */ e("div", { className: "p-3 bg-gray-800/50 rounded-lg border border-gray-700/50", children: /* @__PURE__ */ a("div", { className: "text-xs text-gray-400 space-y-1", children: [
94
+ /* @__PURE__ */ a("div", { className: "flex items-center justify-between", children: [
95
+ /* @__PURE__ */ e("span", { children: "Nodes:" }),
96
+ /* @__PURE__ */ e("span", { className: "text-gray-300", children: t.nodes.length })
97
+ ] }),
98
+ /* @__PURE__ */ a("div", { className: "flex items-center justify-between", children: [
99
+ /* @__PURE__ */ e("span", { children: "Edges:" }),
100
+ /* @__PURE__ */ e("span", { className: "text-gray-300", children: t.edges.length })
101
+ ] }),
102
+ /* @__PURE__ */ a("div", { className: "flex items-center justify-between", children: [
103
+ /* @__PURE__ */ e("span", { children: "Status:" }),
104
+ /* @__PURE__ */ e("span", { className: "text-gray-300 capitalize", children: t.status })
105
+ ] })
106
+ ] }) })
107
+ ] }) }),
108
+ !N && /* @__PURE__ */ a(T, { children: [
109
+ /* @__PURE__ */ e(
110
+ C,
111
+ {
112
+ variant: "outline",
113
+ onClick: p,
114
+ disabled: c,
115
+ className: "bg-gray-700 text-gray-300 hover:bg-gray-600",
116
+ children: "Cancel"
117
+ }
118
+ ),
119
+ /* @__PURE__ */ e(
120
+ C,
121
+ {
122
+ onClick: b,
123
+ disabled: !r.trim() || c,
124
+ className: "bg-blue-600 hover:bg-blue-500",
125
+ children: c ? /* @__PURE__ */ a(g, { children: [
126
+ /* @__PURE__ */ e("div", { className: "w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin mr-2" }),
127
+ n ? "Updating..." : "Saving..."
128
+ ] }) : /* @__PURE__ */ a(g, { children: [
129
+ /* @__PURE__ */ e(S, { className: "w-4 h-4 mr-2" }),
130
+ n ? "Update" : "Save"
131
+ ] })
132
+ }
133
+ )
134
+ ] })
135
+ ] }) });
136
+ };
137
+ export {
138
+ O as SavePipelineDialog
139
+ };
140
+ //# sourceMappingURL=SavePipelineDialog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavePipelineDialog.mjs","sources":["../../components/SavePipelineDialog.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { usePipelineContext } from '../context/PipelineContext';\nimport { Save, AlertCircle, CheckCircle2 } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from './ui/dialog';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Button } from './ui/button';\nimport { Alert, AlertDescription } from './ui/alert';\n\ninterface SavePipelineDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onSave?: (name: string) => void;\n}\n\nexport const SavePipelineDialog: React.FC<SavePipelineDialogProps> = ({\n isOpen,\n onClose,\n onSave,\n}) => {\n const { currentPipeline, savedPipelines } = usePipelineStore();\n const { apiClient, authState, sessionId } = usePipelineContext();\n const [pipelineName, setPipelineName] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [isSaving, setIsSaving] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n const isEditing = currentPipeline && savedPipelines.some(p => p.id === currentPipeline.id);\n\n useEffect(() => {\n if (isOpen) {\n // Pre-fill with current pipeline name if editing, or suggest a name\n if (currentPipeline?.name && currentPipeline.name !== 'Unnamed Pipeline') {\n setPipelineName(currentPipeline.name);\n } else {\n setPipelineName('');\n }\n setError(null);\n }\n }, [isOpen, currentPipeline]);\n\n const handleSave = async () => {\n const trimmedName = pipelineName.trim();\n \n if (!trimmedName) {\n setError('Pipeline name cannot be empty');\n return;\n }\n\n // Check for duplicate names (excluding current pipeline)\n const duplicate = savedPipelines.find(\n p => p.name.toLowerCase() === trimmedName.toLowerCase() && \n p.id !== currentPipeline?.id\n );\n \n if (duplicate) {\n setError('A pipeline with this name already exists');\n return;\n }\n\n setIsSaving(true);\n setError(null);\n\n try {\n if (onSave) {\n onSave(trimmedName);\n } else {\n usePipelineStore.getState().savePipeline(trimmedName, undefined, undefined, {\n apiClient,\n authState,\n sessionId,\n });\n }\n \n // Show success state briefly\n setShowSuccess(true);\n setTimeout(() => {\n setPipelineName('');\n setError(null);\n setIsSaving(false);\n setShowSuccess(false);\n onClose();\n }, 800);\n } catch (err) {\n setError('Failed to save pipeline. Please try again.');\n setIsSaving(false);\n }\n };\n\n const handleCancel = () => {\n setPipelineName('');\n setError(null);\n onClose();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSave();\n } else if (e.key === 'Escape') {\n handleCancel();\n }\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleCancel()}>\n <DialogContent className=\"sm:max-w-md bg-[#1e1e32] border-gray-700/50\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2 text-gray-200\">\n <Save className=\"w-5 h-5\" />\n {isEditing ? 'Update Pipeline' : 'Save Pipeline'}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n {showSuccess ? (\n <div className=\"flex flex-col items-center justify-center py-8 space-y-3\">\n <div className=\"w-16 h-16 rounded-full bg-green-500/20 flex items-center justify-center\">\n <CheckCircle2 className=\"w-8 h-8 text-green-400\" />\n </div>\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold text-gray-200 mb-1\">\n Pipeline {isEditing ? 'Updated' : 'Saved'}!\n </h3>\n <p className=\"text-sm text-gray-400\">\n {pipelineName} has been {isEditing ? 'updated' : 'saved'} successfully.\n </p>\n </div>\n </div>\n ) : (\n <>\n <div className=\"space-y-2\">\n <Label htmlFor=\"pipeline-name\" className=\"text-gray-300\">\n Pipeline Name\n </Label>\n <Input\n id=\"pipeline-name\"\n type=\"text\"\n value={pipelineName}\n onChange={(e) => {\n setPipelineName(e.target.value);\n setError(null);\n }}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter pipeline name...\"\n className=\"bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500\"\n autoFocus\n disabled={isSaving}\n />\n {error && (\n <Alert variant=\"destructive\" className=\"mt-2\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n </div>\n\n {currentPipeline && (\n <div className=\"p-3 bg-gray-800/50 rounded-lg border border-gray-700/50\">\n <div className=\"text-xs text-gray-400 space-y-1\">\n <div className=\"flex items-center justify-between\">\n <span>Nodes:</span>\n <span className=\"text-gray-300\">{currentPipeline.nodes.length}</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Edges:</span>\n <span className=\"text-gray-300\">{currentPipeline.edges.length}</span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span>Status:</span>\n <span className=\"text-gray-300 capitalize\">{currentPipeline.status}</span>\n </div>\n </div>\n </div>\n )}\n </>\n )}\n </div>\n\n {!showSuccess && (\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isSaving}\n className=\"bg-gray-700 text-gray-300 hover:bg-gray-600\"\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n disabled={!pipelineName.trim() || isSaving}\n className=\"bg-blue-600 hover:bg-blue-500\"\n >\n {isSaving ? (\n <>\n <div className=\"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin mr-2\" />\n {isEditing ? 'Updating...' : 'Saving...'}\n </>\n ) : (\n <>\n <Save className=\"w-4 h-4 mr-2\" />\n {isEditing ? 'Update' : 'Save'}\n </>\n )}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\n"],"names":["SavePipelineDialog","isOpen","onClose","onSave","currentPipeline","savedPipelines","usePipelineStore","apiClient","authState","sessionId","usePipelineContext","pipelineName","setPipelineName","useState","error","setError","isSaving","setIsSaving","showSuccess","setShowSuccess","isEditing","p","useEffect","handleSave","trimmedName","handleCancel","jsx","Dialog","open","jsxs","DialogContent","DialogHeader","DialogTitle","Save","CheckCircle2","Fragment","Label","Input","e","Alert","AlertCircle","AlertDescription","DialogFooter","Button"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const SavedPipelinesList: React.FC;
3
+ //# sourceMappingURL=SavedPipelinesList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavedPipelinesList.d.ts","sourceRoot":"","sources":["../../components/SavedPipelinesList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAMxC,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAiOtC,CAAC"}
@@ -0,0 +1,172 @@
1
+ import { jsxs as n, jsx as t } from "react/jsx-runtime";
2
+ import E, { useState as x } from "react";
3
+ import { usePipelineStore as o } from "../store/pipelineStore.mjs";
4
+ import { usePipelineContext as A } from "../context/PipelineContext.mjs";
5
+ import { Menu as D, Plus as f, FolderOpen as L, X as _, Edit2 as F, Trash2 as R } from "lucide-react";
6
+ const U = () => {
7
+ const {
8
+ savedPipelines: s,
9
+ loadPipeline: u,
10
+ deletePipeline: b,
11
+ currentPipeline: r,
12
+ setCurrentPipeline: y,
13
+ isPipelinesSidebarCollapsed: v,
14
+ togglePipelinesSidebar: g
15
+ } = o(), { apiClient: d, authState: c } = A(), [N, m] = x(null), [h, l] = x("");
16
+ E.useEffect(() => {
17
+ console.log("[SavedPipelinesList] savedPipelines updated:", {
18
+ count: s.length,
19
+ pipelines: s.map((e) => ({ id: e.id, name: e.name }))
20
+ });
21
+ }, [s]);
22
+ const w = (e) => {
23
+ u(e.id, { apiClient: d, authState: c });
24
+ }, p = () => {
25
+ const { savedPipelines: e } = o.getState(), a = {
26
+ id: `pipeline_${Date.now()}`,
27
+ name: "Unnamed Pipeline",
28
+ nodes: [],
29
+ edges: [],
30
+ createdAt: /* @__PURE__ */ new Date(),
31
+ updatedAt: /* @__PURE__ */ new Date(),
32
+ status: "draft"
33
+ };
34
+ y(a), o.setState({ savedPipelines: [...e, a] });
35
+ }, P = (e, a) => {
36
+ a.stopPropagation(), confirm("Are you sure you want to delete this pipeline?") && b(e);
37
+ }, C = (e, a) => {
38
+ a.stopPropagation(), m(e.id), l(e.name);
39
+ }, k = (e, a) => {
40
+ a.stopPropagation(), s.find((j) => j.id === e) && h.trim() && (u(e, { apiClient: d, authState: c }), setTimeout(() => {
41
+ o.getState().savePipeline(h.trim(), void 0, void 0, {
42
+ apiClient: d,
43
+ authState: c
44
+ });
45
+ }, 0), m(null), l(""));
46
+ }, S = (e) => {
47
+ e.stopPropagation(), m(null), l("");
48
+ };
49
+ return v ? /* @__PURE__ */ n("div", { className: "w-12 bg-[#1e1e32] border-r border-gray-700/50 flex flex-col items-center py-2 space-y-2 flex-shrink-0", children: [
50
+ /* @__PURE__ */ t(
51
+ "button",
52
+ {
53
+ onClick: g,
54
+ className: "w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-200 hover:bg-gray-800/50 rounded transition-colors",
55
+ title: "Expand sidebar",
56
+ children: /* @__PURE__ */ t(D, { className: "w-5 h-5" })
57
+ }
58
+ ),
59
+ /* @__PURE__ */ t(
60
+ "button",
61
+ {
62
+ onClick: p,
63
+ className: "w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-200 hover:bg-gray-800/50 rounded transition-colors",
64
+ title: "New Pipeline",
65
+ children: /* @__PURE__ */ t(f, { className: "w-4 h-4" })
66
+ }
67
+ ),
68
+ r && /* @__PURE__ */ t("div", { className: "w-8 h-8 flex items-center justify-center", children: /* @__PURE__ */ t("div", { className: "w-2 h-2 bg-blue-500 rounded-full", title: "Active pipeline" }) }),
69
+ s.length > 0 && /* @__PURE__ */ t("div", { className: "mt-auto mb-2", children: /* @__PURE__ */ t("div", { className: "w-6 h-6 bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 flex items-center justify-center", children: s.length > 99 ? "99+" : s.length }) })
70
+ ] }) : /* @__PURE__ */ n("div", { className: "w-64 bg-[#1e1e32] border-r border-gray-700/50 p-4 flex flex-col h-full flex-shrink-0 animate-in slide-in-from-left duration-300", children: [
71
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between mb-3 flex-shrink-0", children: [
72
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-2", children: [
73
+ /* @__PURE__ */ t(L, { className: "w-4 h-4 text-gray-300" }),
74
+ /* @__PURE__ */ t("h3", { className: "text-sm font-semibold text-gray-200", children: "Saved Pipelines" })
75
+ ] }),
76
+ /* @__PURE__ */ t(
77
+ "button",
78
+ {
79
+ onClick: g,
80
+ className: "p-1 text-gray-500 hover:text-gray-300 hover:bg-gray-800/50 rounded transition-colors",
81
+ title: "Collapse sidebar",
82
+ children: /* @__PURE__ */ t(_, { className: "w-4 h-4" })
83
+ }
84
+ )
85
+ ] }),
86
+ /* @__PURE__ */ n(
87
+ "button",
88
+ {
89
+ onClick: p,
90
+ className: "w-full mb-3 px-3 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-500 rounded-lg transition-colors flex items-center justify-center gap-2 flex-shrink-0 shadow-lg hover:shadow-blue-500/20",
91
+ children: [
92
+ /* @__PURE__ */ t(f, { className: "w-4 h-4" }),
93
+ "New Pipeline"
94
+ ]
95
+ }
96
+ ),
97
+ /* @__PURE__ */ t("div", { className: "space-y-2 overflow-y-auto flex-1 min-h-0", children: s.length === 0 ? /* @__PURE__ */ n("div", { className: "text-center py-8", children: [
98
+ /* @__PURE__ */ t("p", { className: "text-xs text-gray-500 mb-1", children: "No saved pipelines" }),
99
+ /* @__PURE__ */ t("p", { className: "text-xs text-gray-600", children: "Save a pipeline to see it here" })
100
+ ] }) : s.map((e) => {
101
+ const a = (r == null ? void 0 : r.id) === e.id;
102
+ return /* @__PURE__ */ t(
103
+ "div",
104
+ {
105
+ onClick: () => w(e),
106
+ className: `
107
+ border rounded-lg p-2 cursor-pointer transition-all
108
+ ${a ? "border-blue-500/50 bg-blue-500/10" : "border-gray-700/50 hover:border-gray-600 hover:bg-gray-800/50"}
109
+ `,
110
+ children: N === e.id ? /* @__PURE__ */ n("div", { className: "space-y-2", children: [
111
+ /* @__PURE__ */ t(
112
+ "input",
113
+ {
114
+ type: "text",
115
+ value: h,
116
+ onChange: (i) => l(i.target.value),
117
+ onClick: (i) => i.stopPropagation(),
118
+ className: "w-full px-2 py-1 text-xs bg-gray-800 border border-gray-600 rounded text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500",
119
+ autoFocus: !0
120
+ }
121
+ ),
122
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-1", children: [
123
+ /* @__PURE__ */ t(
124
+ "button",
125
+ {
126
+ onClick: (i) => k(e.id, i),
127
+ className: "flex-1 px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-500",
128
+ children: "Save"
129
+ }
130
+ ),
131
+ /* @__PURE__ */ t(
132
+ "button",
133
+ {
134
+ onClick: (i) => S(i),
135
+ className: "flex-1 px-2 py-1 text-xs bg-gray-700 text-gray-300 rounded hover:bg-gray-600",
136
+ children: "Cancel"
137
+ }
138
+ )
139
+ ] })
140
+ ] }) : /* @__PURE__ */ n("div", { className: "flex items-center justify-between gap-2", children: [
141
+ /* @__PURE__ */ t("h4", { className: "text-xs font-medium text-gray-200 flex-1 line-clamp-1 truncate", children: e.name }),
142
+ /* @__PURE__ */ n("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
143
+ /* @__PURE__ */ t(
144
+ "button",
145
+ {
146
+ onClick: (i) => C(e, i),
147
+ className: "p-1 text-gray-500 hover:text-gray-300 rounded transition-colors",
148
+ title: "Rename",
149
+ children: /* @__PURE__ */ t(F, { className: "w-3 h-3" })
150
+ }
151
+ ),
152
+ /* @__PURE__ */ t(
153
+ "button",
154
+ {
155
+ onClick: (i) => P(e.id, i),
156
+ className: "p-1 text-gray-500 hover:text-red-400 rounded transition-colors",
157
+ title: "Delete",
158
+ children: /* @__PURE__ */ t(R, { className: "w-3 h-3" })
159
+ }
160
+ )
161
+ ] })
162
+ ] })
163
+ },
164
+ e.id
165
+ );
166
+ }) })
167
+ ] });
168
+ };
169
+ export {
170
+ U as SavedPipelinesList
171
+ };
172
+ //# sourceMappingURL=SavedPipelinesList.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavedPipelinesList.mjs","sources":["../../components/SavedPipelinesList.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { usePipelineContext } from '../context/PipelineContext';\nimport { Pipeline } from '../types/index';\nimport { Trash2, Edit2, FolderOpen, Plus, X, Menu } from 'lucide-react';\n\nexport const SavedPipelinesList: React.FC = () => {\n const { \n savedPipelines, \n loadPipeline, \n deletePipeline, \n currentPipeline, \n setCurrentPipeline,\n isPipelinesSidebarCollapsed,\n togglePipelinesSidebar\n } = usePipelineStore();\n const { apiClient, authState } = usePipelineContext();\n const [editingId, setEditingId] = useState<string | null>(null);\n const [editName, setEditName] = useState('');\n\n // Debug: Log when savedPipelines changes\n React.useEffect(() => {\n console.log('[SavedPipelinesList] savedPipelines updated:', {\n count: savedPipelines.length,\n pipelines: savedPipelines.map(p => ({ id: p.id, name: p.name })),\n });\n }, [savedPipelines]);\n\n const handleLoad = (pipeline: Pipeline) => {\n loadPipeline(pipeline.id, { apiClient, authState });\n };\n\n const handleNewPipeline = () => {\n const { savedPipelines } = usePipelineStore.getState();\n const newPipeline: Pipeline = {\n id: `pipeline_${Date.now()}`,\n name: 'Unnamed Pipeline',\n nodes: [],\n edges: [],\n createdAt: new Date(),\n updatedAt: new Date(),\n status: 'draft',\n };\n // Add to saved pipelines list and set as current\n setCurrentPipeline(newPipeline);\n usePipelineStore.setState({ savedPipelines: [...savedPipelines, newPipeline] });\n };\n\n const handleDelete = (pipelineId: string, e: React.MouseEvent) => {\n e.stopPropagation();\n if (confirm('Are you sure you want to delete this pipeline?')) {\n deletePipeline(pipelineId);\n }\n };\n\n const handleStartEdit = (pipeline: Pipeline, e: React.MouseEvent) => {\n e.stopPropagation();\n setEditingId(pipeline.id);\n setEditName(pipeline.name);\n };\n\n const handleSaveEdit = (pipelineId: string, e: React.MouseEvent) => {\n e.stopPropagation();\n const pipeline = savedPipelines.find((p) => p.id === pipelineId);\n if (pipeline && editName.trim()) {\n // Load the pipeline first to set it as current, then save with new name\n loadPipeline(pipelineId, { apiClient, authState });\n // Use setTimeout to ensure the pipeline is loaded before saving\n setTimeout(() => {\n usePipelineStore.getState().savePipeline(editName.trim(), undefined, undefined, {\n apiClient,\n authState,\n });\n }, 0);\n setEditingId(null);\n setEditName('');\n }\n };\n\n const handleCancelEdit = (e: React.MouseEvent) => {\n e.stopPropagation();\n setEditingId(null);\n setEditName('');\n };\n\n // Collapsed sidebar view\n if (isPipelinesSidebarCollapsed) {\n return (\n <div className=\"w-12 bg-[#1e1e32] border-r border-gray-700/50 flex flex-col items-center py-2 space-y-2 flex-shrink-0\">\n {/* Toggle button */}\n <button\n onClick={togglePipelinesSidebar}\n className=\"w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-200 hover:bg-gray-800/50 rounded transition-colors\"\n title=\"Expand sidebar\"\n >\n <Menu className=\"w-5 h-5\" />\n </button>\n\n {/* New pipeline button */}\n <button\n onClick={handleNewPipeline}\n className=\"w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-200 hover:bg-gray-800/50 rounded transition-colors\"\n title=\"New Pipeline\"\n >\n <Plus className=\"w-4 h-4\" />\n </button>\n\n {/* Active pipeline indicator */}\n {currentPipeline && (\n <div className=\"w-8 h-8 flex items-center justify-center\">\n <div className=\"w-2 h-2 bg-blue-500 rounded-full\" title=\"Active pipeline\" />\n </div>\n )}\n\n {/* Pipeline count indicator */}\n {savedPipelines.length > 0 && (\n <div className=\"mt-auto mb-2\">\n <div className=\"w-6 h-6 bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 flex items-center justify-center\">\n {savedPipelines.length > 99 ? '99+' : savedPipelines.length}\n </div>\n </div>\n )}\n </div>\n );\n }\n\n // Expanded sidebar view\n return (\n <div className=\"w-64 bg-[#1e1e32] border-r border-gray-700/50 p-4 flex flex-col h-full flex-shrink-0 animate-in slide-in-from-left duration-300\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-3 flex-shrink-0\">\n <div className=\"flex items-center gap-2\">\n <FolderOpen className=\"w-4 h-4 text-gray-300\" />\n <h3 className=\"text-sm font-semibold text-gray-200\">Saved Pipelines</h3>\n </div>\n <button\n onClick={togglePipelinesSidebar}\n className=\"p-1 text-gray-500 hover:text-gray-300 hover:bg-gray-800/50 rounded transition-colors\"\n title=\"Collapse sidebar\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n \n {/* New Pipeline Button */}\n <button\n onClick={handleNewPipeline}\n className=\"w-full mb-3 px-3 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-500 rounded-lg transition-colors flex items-center justify-center gap-2 flex-shrink-0 shadow-lg hover:shadow-blue-500/20\"\n >\n <Plus className=\"w-4 h-4\" />\n New Pipeline\n </button>\n \n <div className=\"space-y-2 overflow-y-auto flex-1 min-h-0\">\n {savedPipelines.length === 0 ? (\n <div className=\"text-center py-8\">\n <p className=\"text-xs text-gray-500 mb-1\">No saved pipelines</p>\n <p className=\"text-xs text-gray-600\">\n Save a pipeline to see it here\n </p>\n </div>\n ) : (\n savedPipelines.map((pipeline) => {\n const isActive = currentPipeline?.id === pipeline.id;\n return (\n <div\n key={pipeline.id}\n onClick={() => handleLoad(pipeline)}\n className={`\n border rounded-lg p-2 cursor-pointer transition-all\n ${isActive \n ? 'border-blue-500/50 bg-blue-500/10' \n : 'border-gray-700/50 hover:border-gray-600 hover:bg-gray-800/50'\n }\n `}\n >\n {editingId === pipeline.id ? (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={editName}\n onChange={(e) => setEditName(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n className=\"w-full px-2 py-1 text-xs bg-gray-800 border border-gray-600 rounded text-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n autoFocus\n />\n <div className=\"flex items-center gap-1\">\n <button\n onClick={(e) => handleSaveEdit(pipeline.id, e)}\n className=\"flex-1 px-2 py-1 text-xs bg-blue-600 text-white rounded hover:bg-blue-500\"\n >\n Save\n </button>\n <button\n onClick={(e) => handleCancelEdit(e)}\n className=\"flex-1 px-2 py-1 text-xs bg-gray-700 text-gray-300 rounded hover:bg-gray-600\"\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2\">\n <h4 className=\"text-xs font-medium text-gray-200 flex-1 line-clamp-1 truncate\">\n {pipeline.name}\n </h4>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n <button\n onClick={(e) => handleStartEdit(pipeline, e)}\n className=\"p-1 text-gray-500 hover:text-gray-300 rounded transition-colors\"\n title=\"Rename\"\n >\n <Edit2 className=\"w-3 h-3\" />\n </button>\n <button\n onClick={(e) => handleDelete(pipeline.id, e)}\n className=\"p-1 text-gray-500 hover:text-red-400 rounded transition-colors\"\n title=\"Delete\"\n >\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n </div>\n );\n};\n\n"],"names":["SavedPipelinesList","savedPipelines","loadPipeline","deletePipeline","currentPipeline","setCurrentPipeline","isPipelinesSidebarCollapsed","togglePipelinesSidebar","usePipelineStore","apiClient","authState","usePipelineContext","editingId","setEditingId","useState","editName","setEditName","React","p","handleLoad","pipeline","handleNewPipeline","newPipeline","handleDelete","pipelineId","e","handleStartEdit","handleSaveEdit","handleCancelEdit","jsxs","jsx","Menu","Plus","FolderOpen","X","isActive","Edit2","Trash2"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { PipelineCanvas } from './PipelineCanvas';
2
+ export { PipelineNodeConfig } from './PipelineNodeConfig';
3
+ export { PipelineNodePalette } from './PipelineNodePalette';
4
+ export { PipelineExecution } from './PipelineExecution';
5
+ export { PipelineManager } from './PipelineManager';
6
+ export { CustomHandle } from './CustomHandle';
7
+ export { ExecutionLogsPanel } from './ExecutionLogsPanel';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
4
+ variant?: "default" | "destructive" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
7
+ declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
8
+ export { Alert, AlertTitle, AlertDescription };
9
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../components/ui/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAoBjE,QAAA,MAAM,KAAK;;sHAUT,CAAA;AAGF,QAAA,MAAM,UAAU,uHASd,CAAA;AAGF,QAAA,MAAM,gBAAgB,yHASpB,CAAA;AAGF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import * as s from "react";
3
+ import { cva as l } from "class-variance-authority";
4
+ import { cn as i } from "../../lib/utils.mjs";
5
+ const d = l(
6
+ "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
7
+ {
8
+ variants: {
9
+ variant: {
10
+ default: "bg-background text-foreground",
11
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
12
+ }
13
+ },
14
+ defaultVariants: {
15
+ variant: "default"
16
+ }
17
+ }
18
+ ), n = s.forwardRef(({ className: t, variant: e, ...r }, o) => /* @__PURE__ */ a(
19
+ "div",
20
+ {
21
+ ref: o,
22
+ role: "alert",
23
+ className: i(d({ variant: e }), t),
24
+ ...r
25
+ }
26
+ ));
27
+ n.displayName = "Alert";
28
+ const v = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ a(
29
+ "h5",
30
+ {
31
+ ref: r,
32
+ className: i("mb-1 font-medium leading-none tracking-tight", t),
33
+ ...e
34
+ }
35
+ ));
36
+ v.displayName = "AlertTitle";
37
+ const c = s.forwardRef(({ className: t, ...e }, r) => /* @__PURE__ */ a(
38
+ "div",
39
+ {
40
+ ref: r,
41
+ className: i("text-sm [&_p]:leading-relaxed", t),
42
+ ...e
43
+ }
44
+ ));
45
+ c.displayName = "AlertDescription";
46
+ export {
47
+ n as Alert,
48
+ c as AlertDescription,
49
+ v as AlertTitle
50
+ };
51
+ //# sourceMappingURL=alert.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.mjs","sources":["../../../components/ui/alert.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n"],"names":["alertVariants","cva","Alert","React","className","variant","props","ref","jsx","cn","AlertTitle","AlertDescription"],"mappings":";;;;AAKA,MAAMA,IAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEMC,IAAQC,EAAM,WAGlB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,GAAGC,KAASC,MACnC,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,MAAK;AAAA,IACL,WAAWE,EAAGT,EAAc,EAAE,SAAAK,EAAA,CAAS,GAAGD,CAAS;AAAA,IAClD,GAAGE;AAAA,EAAA;AACN,CACD;AACDJ,EAAM,cAAc;AAEpB,MAAMQ,IAAaP,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE,EAAG,gDAAgDL,CAAS;AAAA,IACtE,GAAGE;AAAA,EAAA;AACN,CACD;AACDI,EAAW,cAAc;AAEzB,MAAMC,IAAmBR,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWE,EAAG,iCAAiCL,CAAS;AAAA,IACvD,GAAGE;AAAA,EAAA;AACN,CACD;AACDK,EAAiB,cAAc;"}
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
+ asChild?: boolean;
9
+ }
10
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
11
+ export { Button, buttonVariants };
12
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,cAAc;;;8EA2BnB,CAAA;AAED,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,QAAA,MAAM,MAAM,uFAWX,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import * as s from "react";
3
+ import { Slot as d } from "@radix-ui/react-slot";
4
+ import { cva as c } from "class-variance-authority";
5
+ import { cn as u } from "../../lib/utils.mjs";
6
+ const f = c(
7
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
12
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
13
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
14
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
15
+ ghost: "hover:bg-accent hover:text-accent-foreground",
16
+ link: "text-primary underline-offset-4 hover:underline"
17
+ },
18
+ size: {
19
+ default: "h-10 px-4 py-2",
20
+ sm: "h-9 rounded-md px-3",
21
+ lg: "h-11 rounded-md px-8",
22
+ icon: "h-10 w-10"
23
+ }
24
+ },
25
+ defaultVariants: {
26
+ variant: "default",
27
+ size: "default"
28
+ }
29
+ }
30
+ ), m = s.forwardRef(
31
+ ({ className: e, variant: r, size: t, asChild: o = !1, ...n }, i) => /* @__PURE__ */ a(
32
+ o ? d : "button",
33
+ {
34
+ className: u(f({ variant: r, size: t, className: e })),
35
+ ref: i,
36
+ ...n
37
+ }
38
+ )
39
+ );
40
+ m.displayName = "Button";
41
+ export {
42
+ m as Button,
43
+ f as buttonVariants
44
+ };
45
+ //# sourceMappingURL=button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.mjs","sources":["../../../components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n"],"names":["buttonVariants","cva","Button","React","className","variant","size","asChild","props","ref","jsx","Slot","cn"],"mappings":";;;;;AAMA,MAAMA,IAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAQMC,IAASC,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,MAAAC,GAAM,SAAAC,IAAU,IAAO,GAAGC,EAAA,GAASC,MAGtD,gBAAAC;AAAA,IAFWH,IAAUI,IAAO;AAAA,IAE3B;AAAA,MACC,WAAWC,EAAGZ,EAAe,EAAE,SAAAK,GAAS,MAAAC,GAAM,WAAAF,EAAA,CAAW,CAAC;AAAA,MAC1D,KAAAK;AAAA,MACC,GAAGD;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAN,EAAO,cAAc;"}
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
3
+ declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
4
+ declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
6
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const DialogHeader: {
10
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
11
+ displayName: string;
12
+ };
13
+ declare const DialogFooter: {
14
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
16
+ };
17
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
18
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
19
+ export { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };
20
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../components/ui/dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAKzD,QAAA,MAAM,MAAM,uCAAuB,CAAA;AAEnC,QAAA,MAAM,aAAa,8GAA0B,CAAA;AAE7C,QAAA,MAAM,YAAY,6CAAyB,CAAA;AAE3C,QAAA,MAAM,WAAW,4GAAwB,CAAA;AAEzC,QAAA,MAAM,aAAa,8JAYjB,CAAA;AAGF,QAAA,MAAM,aAAa,8JAqBjB,CAAA;AAGF,QAAA,MAAM,YAAY;8BAGf,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,YAAY;8BAGf,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;;CAQtC,CAAA;AAGD,QAAA,MAAM,WAAW,oKAYf,CAAA;AAGF,QAAA,MAAM,iBAAiB,8KASrB,CAAA;AAGF,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,CAAA"}