@datatechsolutions/ui 3.11.0 → 3.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/astrlabe/index.js +109 -109
  2. package/dist/astrlabe/index.mjs +5 -5
  3. package/dist/astrlabe/workflow-canvas.js +5 -5
  4. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  5. package/dist/{chunk-ZUU7G3PC.js → chunk-22XPYFHJ.js} +2 -2
  6. package/dist/chunk-22XPYFHJ.js.map +1 -0
  7. package/dist/{chunk-6TKCMQ75.js → chunk-3BFQ3SVG.js} +68 -68
  8. package/dist/{chunk-6TKCMQ75.js.map → chunk-3BFQ3SVG.js.map} +1 -1
  9. package/dist/{chunk-BO3RXG6M.js → chunk-3J4E2THD.js} +45 -45
  10. package/dist/{chunk-BO3RXG6M.js.map → chunk-3J4E2THD.js.map} +1 -1
  11. package/dist/{chunk-HUAWGBYL.mjs → chunk-4PUVECVF.mjs} +3 -3
  12. package/dist/{chunk-HUAWGBYL.mjs.map → chunk-4PUVECVF.mjs.map} +1 -1
  13. package/dist/{chunk-G52HXPSB.js → chunk-5JS3UFBF.js} +13 -13
  14. package/dist/{chunk-G52HXPSB.js.map → chunk-5JS3UFBF.js.map} +1 -1
  15. package/dist/{chunk-BCJATFZE.js → chunk-5NKGJV72.js} +25 -25
  16. package/dist/{chunk-BCJATFZE.js.map → chunk-5NKGJV72.js.map} +1 -1
  17. package/dist/{chunk-ZJMYLUZ2.mjs → chunk-5TJR3VJ6.mjs} +85 -73
  18. package/dist/chunk-5TJR3VJ6.mjs.map +1 -0
  19. package/dist/{chunk-PHBZ3TXE.js → chunk-5Y67PZWC.js} +4 -4
  20. package/dist/{chunk-PHBZ3TXE.js.map → chunk-5Y67PZWC.js.map} +1 -1
  21. package/dist/{chunk-ZGVN23J4.js → chunk-6R5Z2IQ5.js} +5 -5
  22. package/dist/{chunk-ZGVN23J4.js.map → chunk-6R5Z2IQ5.js.map} +1 -1
  23. package/dist/{chunk-7V7WEXHS.mjs → chunk-AVLOGVVA.mjs} +3 -3
  24. package/dist/{chunk-7V7WEXHS.mjs.map → chunk-AVLOGVVA.mjs.map} +1 -1
  25. package/dist/{chunk-JTD3BBVI.js → chunk-BGLYJ7GR.js} +35 -35
  26. package/dist/{chunk-JTD3BBVI.js.map → chunk-BGLYJ7GR.js.map} +1 -1
  27. package/dist/{chunk-35P352JX.mjs → chunk-D5FL3ZHC.mjs} +3 -3
  28. package/dist/{chunk-35P352JX.mjs.map → chunk-D5FL3ZHC.mjs.map} +1 -1
  29. package/dist/{chunk-Z6FZQOTW.js → chunk-GDVB7QDZ.js} +28 -28
  30. package/dist/{chunk-Z6FZQOTW.js.map → chunk-GDVB7QDZ.js.map} +1 -1
  31. package/dist/{chunk-35O2X7WY.js → chunk-HLIMHIRH.js} +9 -9
  32. package/dist/{chunk-35O2X7WY.js.map → chunk-HLIMHIRH.js.map} +1 -1
  33. package/dist/{chunk-3US2QXEF.mjs → chunk-JBXNEOFB.mjs} +3 -3
  34. package/dist/{chunk-3US2QXEF.mjs.map → chunk-JBXNEOFB.mjs.map} +1 -1
  35. package/dist/{chunk-K4AJL4BH.mjs → chunk-JXROBMRU.mjs} +3 -3
  36. package/dist/{chunk-K4AJL4BH.mjs.map → chunk-JXROBMRU.mjs.map} +1 -1
  37. package/dist/{chunk-37FWIPYO.mjs → chunk-KGC5CRS7.mjs} +3 -3
  38. package/dist/{chunk-37FWIPYO.mjs.map → chunk-KGC5CRS7.mjs.map} +1 -1
  39. package/dist/{chunk-7KPMLHPR.mjs → chunk-LBCUQ4FY.mjs} +3 -3
  40. package/dist/{chunk-7KPMLHPR.mjs.map → chunk-LBCUQ4FY.mjs.map} +1 -1
  41. package/dist/{chunk-7MPIYSRH.js → chunk-LW2LFJZ7.js} +66 -64
  42. package/dist/chunk-LW2LFJZ7.js.map +1 -0
  43. package/dist/{chunk-KTEEXEAX.mjs → chunk-M64U336M.mjs} +6 -6
  44. package/dist/{chunk-KTEEXEAX.mjs.map → chunk-M64U336M.mjs.map} +1 -1
  45. package/dist/{chunk-O2CUOJ74.js → chunk-MCHTZ63Q.js} +4 -4
  46. package/dist/{chunk-O2CUOJ74.js.map → chunk-MCHTZ63Q.js.map} +1 -1
  47. package/dist/{chunk-GTJGX7IZ.js → chunk-N5FWIT7N.js} +10 -10
  48. package/dist/{chunk-GTJGX7IZ.js.map → chunk-N5FWIT7N.js.map} +1 -1
  49. package/dist/{chunk-NM3YTQ26.mjs → chunk-N7T4X6A7.mjs} +3 -3
  50. package/dist/{chunk-NM3YTQ26.mjs.map → chunk-N7T4X6A7.mjs.map} +1 -1
  51. package/dist/{chunk-IGOMJHC6.mjs → chunk-NBW6WJQT.mjs} +2 -2
  52. package/dist/chunk-NBW6WJQT.mjs.map +1 -0
  53. package/dist/{chunk-7D52TFVL.mjs → chunk-NDGYIHJ3.mjs} +3 -3
  54. package/dist/{chunk-7D52TFVL.mjs.map → chunk-NDGYIHJ3.mjs.map} +1 -1
  55. package/dist/{chunk-NRVV4PHB.mjs → chunk-OZEOBZOW.mjs} +10 -8
  56. package/dist/chunk-OZEOBZOW.mjs.map +1 -0
  57. package/dist/{chunk-R3CGJK7D.mjs → chunk-RUWUH7DW.mjs} +3 -3
  58. package/dist/{chunk-R3CGJK7D.mjs.map → chunk-RUWUH7DW.mjs.map} +1 -1
  59. package/dist/{chunk-62BD4WLW.js → chunk-TXI3QDYE.js} +34 -34
  60. package/dist/{chunk-62BD4WLW.js.map → chunk-TXI3QDYE.js.map} +1 -1
  61. package/dist/{chunk-TCIK6WHT.mjs → chunk-TZA5T4MJ.mjs} +4 -4
  62. package/dist/{chunk-TCIK6WHT.mjs.map → chunk-TZA5T4MJ.mjs.map} +1 -1
  63. package/dist/{chunk-GKI74CPB.js → chunk-V32NUE5U.js} +55 -55
  64. package/dist/{chunk-GKI74CPB.js.map → chunk-V32NUE5U.js.map} +1 -1
  65. package/dist/{chunk-2AJ73ULK.mjs → chunk-WSXP645I.mjs} +3 -3
  66. package/dist/{chunk-2AJ73ULK.mjs.map → chunk-WSXP645I.mjs.map} +1 -1
  67. package/dist/{chunk-H475T2N7.js → chunk-Y4YIGEX6.js} +213 -201
  68. package/dist/chunk-Y4YIGEX6.js.map +1 -0
  69. package/dist/index.js +664 -664
  70. package/dist/index.mjs +3 -3
  71. package/dist/platform/admin/index.js +11 -11
  72. package/dist/platform/admin/index.mjs +5 -5
  73. package/dist/platform/agents-workspace.js +8 -8
  74. package/dist/platform/agents-workspace.mjs +7 -7
  75. package/dist/platform/app-shell.js +5 -5
  76. package/dist/platform/app-shell.mjs +4 -4
  77. package/dist/platform/auth/index.js +23 -23
  78. package/dist/platform/auth/index.mjs +5 -5
  79. package/dist/platform/billing/index.js +5 -5
  80. package/dist/platform/billing/index.mjs +4 -4
  81. package/dist/platform/impersonation/index.js +5 -5
  82. package/dist/platform/impersonation/index.mjs +4 -4
  83. package/dist/platform/index.d.mts +1 -1
  84. package/dist/platform/index.d.ts +1 -1
  85. package/dist/platform/index.js +86 -86
  86. package/dist/platform/index.mjs +19 -19
  87. package/dist/platform/pages/index.d.mts +2 -2
  88. package/dist/platform/pages/index.d.ts +2 -2
  89. package/dist/platform/pages/index.js +472 -474
  90. package/dist/platform/pages/index.js.map +1 -1
  91. package/dist/platform/pages/index.mjs +174 -176
  92. package/dist/platform/pages/index.mjs.map +1 -1
  93. package/dist/platform/settings/index.js +8 -8
  94. package/dist/platform/settings/index.mjs +7 -7
  95. package/dist/platform/workflow-api-client.d.mts +1 -1
  96. package/dist/platform/workflow-api-client.d.ts +1 -1
  97. package/dist/platform/workflow-api-client.js +62 -62
  98. package/dist/platform/workflow-api-client.mjs +1 -1
  99. package/dist/platform/workflow-canvas-shell.js +6 -6
  100. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  101. package/dist/{workflow-api-client-E1QFRgeP.d.ts → workflow-api-client-CThkBj5j.d.ts} +4 -0
  102. package/dist/{workflow-api-client-D9_0Spdz.d.mts → workflow-api-client-crR8L7fy.d.mts} +4 -0
  103. package/package.json +1 -1
  104. package/dist/chunk-7MPIYSRH.js.map +0 -1
  105. package/dist/chunk-H475T2N7.js.map +0 -1
  106. package/dist/chunk-IGOMJHC6.mjs.map +0 -1
  107. package/dist/chunk-NRVV4PHB.mjs.map +0 -1
  108. package/dist/chunk-ZJMYLUZ2.mjs.map +0 -1
  109. package/dist/chunk-ZUU7G3PC.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk6TKCMQ75_js = require('./chunk-6TKCMQ75.js');
5
- var chunkZGVN23J4_js = require('./chunk-ZGVN23J4.js');
4
+ var chunk3BFQ3SVG_js = require('./chunk-3BFQ3SVG.js');
5
+ var chunk6R5Z2IQ5_js = require('./chunk-6R5Z2IQ5.js');
6
6
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
7
7
  var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
8
8
  var chunk72SWXOD5_js = require('./chunk-72SWXOD5.js');
@@ -41,11 +41,11 @@ var ModelProviderFlowNode = react.memo(function ModelProviderFlowNode2({ id, dat
41
41
  const isCompact = data.displayMode === "compact";
42
42
  if (!config) {
43
43
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
44
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeRunningIndicator, { nodeId: id }),
45
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
46
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "target", position: react$1.Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
47
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeCard, { variant: "error", nodeType: "model_provider", width: "w-[280px]", children: /* @__PURE__ */ jsxRuntime.jsx(
48
- chunk6TKCMQ75_js.NodeCardHeader,
44
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeRunningIndicator, { nodeId: id }),
45
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
46
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "target", position: react$1.Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
47
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeCard, { variant: "error", nodeType: "model_provider", width: "w-[280px]", children: /* @__PURE__ */ jsxRuntime.jsx(
48
+ chunk3BFQ3SVG_js.NodeCardHeader,
49
49
  {
50
50
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ExclamationTriangleIcon, { className: "h-6 w-6 text-white" }),
51
51
  title: data.label || "Model Provider",
@@ -53,8 +53,8 @@ var ModelProviderFlowNode = react.memo(function ModelProviderFlowNode2({ id, dat
53
53
  iconClassName: "flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg"
54
54
  }
55
55
  ) }),
56
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
57
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "source", position: react$1.Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
56
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
57
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "source", position: react$1.Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
58
58
  ] });
59
59
  }
60
60
  const providerLabel = PROVIDER_TYPE_LABELS[config.providerType] ?? config.providerType;
@@ -63,18 +63,18 @@ var ModelProviderFlowNode = react.memo(function ModelProviderFlowNode2({ id, dat
63
63
  const isConfigured = !!(config.credentialRef || config.apiKeyRef);
64
64
  const logo = PROVIDER_LOGOS[config.providerType];
65
65
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
66
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeRunningIndicator, { nodeId: id }),
67
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
68
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "target", position: react$1.Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
66
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeRunningIndicator, { nodeId: id }),
67
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
68
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "target", position: react$1.Position.Top, id: "top-in", colorClass: "!bg-gray-400 dark:!bg-gray-500" }),
69
69
  /* @__PURE__ */ jsxRuntime.jsx(
70
70
  "button",
71
71
  {
72
72
  type: "button",
73
73
  onClick: () => data.onEdit?.(id),
74
74
  className: "w-full text-left",
75
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunk6TKCMQ75_js.NodeCard, { compact: isCompact, selected, nodeType: "model_provider", width: "w-[280px]", children: [
75
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunk3BFQ3SVG_js.NodeCard, { compact: isCompact, selected, nodeType: "model_provider", width: "w-[280px]", children: [
76
76
  /* @__PURE__ */ jsxRuntime.jsx(
77
- chunk6TKCMQ75_js.NodeCardHeader,
77
+ chunk3BFQ3SVG_js.NodeCardHeader,
78
78
  {
79
79
  icon: logo ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo, alt: providerLabel, className: "h-6 w-6 object-contain", loading: "lazy" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.KeyIcon, { className: "h-6 w-6 text-white" }),
80
80
  title: displayName,
@@ -82,7 +82,7 @@ var ModelProviderFlowNode = react.memo(function ModelProviderFlowNode2({ id, dat
82
82
  iconClassName: `flex h-11 w-11 items-center justify-center rounded-xl shadow-lg ${logo ? "bg-white/10 dark:bg-white/5 p-2" : "bg-gradient-to-br from-slate-600 to-slate-700 p-1.5"}`
83
83
  }
84
84
  ),
85
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeCardMeta, { compact: isCompact, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
85
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeCardMeta, { compact: isCompact, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
86
86
  /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Badge, { color: "zinc", size: "xs", children: providerLabel }),
87
87
  regionLabel && /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Badge, { color: "zinc", size: "xs", children: regionLabel }),
88
88
  /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Badge, { color: isConfigured ? "green" : "amber", size: "xs", children: isConfigured ? "Configured" : "Setup needed" }),
@@ -94,8 +94,8 @@ var ModelProviderFlowNode = react.memo(function ModelProviderFlowNode2({ id, dat
94
94
  ] })
95
95
  }
96
96
  ),
97
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
98
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "source", position: react$1.Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
97
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-slate-500" }),
98
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "source", position: react$1.Position.Bottom, id: "bottom-out", colorClass: "!bg-slate-500" })
99
99
  ] });
100
100
  });
101
101
  var S3WriteFlowNode = react.memo(function S3WriteFlowNode2({ id, data, selected }) {
@@ -104,10 +104,10 @@ var S3WriteFlowNode = react.memo(function S3WriteFlowNode2({ id, data, selected
104
104
  const isCompact = data.displayMode === "compact";
105
105
  const keyPreview = config.key ? config.key.slice(0, 30) : "";
106
106
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
107
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeRunningIndicator, { nodeId: id }),
108
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-500" }),
107
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeRunningIndicator, { nodeId: id }),
108
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-500" }),
109
109
  /* @__PURE__ */ jsxRuntime.jsxs(
110
- chunk6TKCMQ75_js.NodeInteractiveCard,
110
+ chunk3BFQ3SVG_js.NodeInteractiveCard,
111
111
  {
112
112
  nodeId: id,
113
113
  onEdit,
@@ -116,27 +116,27 @@ var S3WriteFlowNode = react.memo(function S3WriteFlowNode2({ id, data, selected
116
116
  nodeType: "s3_write",
117
117
  children: [
118
118
  /* @__PURE__ */ jsxRuntime.jsx(
119
- chunk6TKCMQ75_js.NodeCardHeader,
119
+ chunk3BFQ3SVG_js.NodeCardHeader,
120
120
  {
121
- icon: /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeIconBubble, { tone: "s3_write", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CloudArrowUpIcon, { className: "h-5 w-5 text-white" }) }),
121
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeIconBubble, { tone: "s3_write", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CloudArrowUpIcon, { className: "h-5 w-5 text-white" }) }),
122
122
  title: label,
123
123
  description: t("s3WriteNodeDescription"),
124
124
  compact: isCompact,
125
125
  iconClassName: ""
126
126
  }
127
127
  ),
128
- /* @__PURE__ */ jsxRuntime.jsxs(chunk6TKCMQ75_js.NodeCardMeta, { compact: isCompact, children: [
128
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk3BFQ3SVG_js.NodeCardMeta, { compact: isCompact, children: [
129
129
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
130
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeCardBadge, { tone: "s3_write", children: t("s3WriteNode") }),
131
- config.bucket && /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeCardBadge, { tone: "s3_write", soft: true, children: config.bucket }),
130
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeCardBadge, { tone: "s3_write", children: t("s3WriteNode") }),
131
+ config.bucket && /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeCardBadge, { tone: "s3_write", soft: true, children: config.bucket }),
132
132
  keyPreview && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: keyPreview })
133
133
  ] }),
134
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.NodeCardDeleteAction, { nodeId: id, onDelete })
134
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.NodeCardDeleteAction, { nodeId: id, onDelete })
135
135
  ] })
136
136
  ]
137
137
  }
138
138
  ),
139
- /* @__PURE__ */ jsxRuntime.jsx(chunk6TKCMQ75_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-500" })
139
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3BFQ3SVG_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-500" })
140
140
  ] });
141
141
  });
142
142
  function AnthropicModelIcon({ className }) {
@@ -287,7 +287,7 @@ function FieldEditor({
287
287
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
288
288
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_140px_auto_auto] items-end gap-2", children: [
289
289
  /* @__PURE__ */ jsxRuntime.jsx(
290
- chunkZGVN23J4_js.FormInput,
290
+ chunk6R5Z2IQ5_js.FormInput,
291
291
  {
292
292
  label: "Name",
293
293
  value: field.name,
@@ -296,7 +296,7 @@ function FieldEditor({
296
296
  }
297
297
  ),
298
298
  /* @__PURE__ */ jsxRuntime.jsx(
299
- chunkZGVN23J4_js.FormSelect,
299
+ chunk6R5Z2IQ5_js.FormSelect,
300
300
  {
301
301
  label: "Type",
302
302
  value: field.type,
@@ -319,7 +319,7 @@ function FieldEditor({
319
319
  /* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
320
320
  ] }),
321
321
  /* @__PURE__ */ jsxRuntime.jsx(
322
- chunkZGVN23J4_js.FormInput,
322
+ chunk6R5Z2IQ5_js.FormInput,
323
323
  {
324
324
  label: "Description (optional)",
325
325
  value: field.description,
@@ -612,13 +612,13 @@ function AgentCapabilityCard({ elo, setElo, models, selectedModelId, setSelected
612
612
  ] });
613
613
  }
614
614
  function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework, markDirty, connectedProviderTypes }) {
615
- const frameworkKeys = Object.keys(chunk6TKCMQ75_js.FRAMEWORK_META);
615
+ const frameworkKeys = Object.keys(chunk3BFQ3SVG_js.FRAMEWORK_META);
616
616
  const hasProviderConstraints = connectedProviderTypes.length > 0;
617
- const compatibleModels = chunk6TKCMQ75_js.getCompatibleModels(models, selectedFramework);
617
+ const compatibleModels = chunk3BFQ3SVG_js.getCompatibleModels(models, selectedFramework);
618
618
  const handleFrameworkChange = react.useCallback((newFramework) => {
619
619
  setSelectedFramework(newFramework);
620
- if (!chunk6TKCMQ75_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
621
- const compatible = chunk6TKCMQ75_js.getCompatibleModels(models, newFramework);
620
+ if (!chunk3BFQ3SVG_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
621
+ const compatible = chunk3BFQ3SVG_js.getCompatibleModels(models, newFramework);
622
622
  if (compatible.length > 0) {
623
623
  setSelectedModelId(compatible[0].id);
624
624
  }
@@ -629,10 +629,10 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
629
629
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
630
630
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
631
631
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
632
- const meta = chunk6TKCMQ75_js.FRAMEWORK_META[key];
632
+ const meta = chunk3BFQ3SVG_js.FRAMEWORK_META[key];
633
633
  const isSelected = key === selectedFramework;
634
- const compatCount = chunk6TKCMQ75_js.getCompatibleModels(models, key).length;
635
- const isCompatibleWithProviders = !hasProviderConstraints || chunk6TKCMQ75_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
634
+ const compatCount = chunk3BFQ3SVG_js.getCompatibleModels(models, key).length;
635
+ const isCompatibleWithProviders = !hasProviderConstraints || chunk3BFQ3SVG_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
636
636
  return /* @__PURE__ */ jsxRuntime.jsxs(
637
637
  "button",
638
638
  {
@@ -664,7 +664,7 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
664
664
  ] }),
665
665
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
666
666
  const isSelected = model.id === selectedModelId;
667
- const isCompatible = chunk6TKCMQ75_js.isModelCompatibleWithFramework(model.id, selectedFramework);
667
+ const isCompatible = chunk3BFQ3SVG_js.isModelCompatibleWithFramework(model.id, selectedFramework);
668
668
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
669
669
  return /* @__PURE__ */ jsxRuntime.jsxs(
670
670
  "button",
@@ -822,7 +822,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
822
822
  ] }),
823
823
  tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
824
824
  tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
825
- const meta = chunk6TKCMQ75_js.getFrameworkMeta(framework);
825
+ const meta = chunk3BFQ3SVG_js.getFrameworkMeta(framework);
826
826
  const isCurrentFw = framework === agentFramework;
827
827
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[8px] font-medium ${isCurrentFw ? meta.badgeColor : "bg-gray-100 text-gray-500 dark:bg-white/5 dark:text-gray-400"}`, children: [
828
828
  /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
@@ -839,7 +839,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
839
839
  event.stopPropagation();
840
840
  },
841
841
  children: /* @__PURE__ */ jsxRuntime.jsx(
842
- chunkZGVN23J4_js.ToggleSwitch,
842
+ chunk6R5Z2IQ5_js.ToggleSwitch,
843
843
  {
844
844
  checked: isEnabled,
845
845
  onChange: () => onToggle(tool.agentToolId),
@@ -887,7 +887,7 @@ function EngineTab({
887
887
  const compatibleProviders = findCompatibleProviders(selectedModelId, modelProviders);
888
888
  const configuredCompatible = compatibleProviders.filter((p) => p.configured);
889
889
  const effectiveProvider = compatibleProviders.find((p) => p.id === selectedProviderId) ?? configuredCompatible[0] ?? compatibleProviders[0];
890
- const frameworkMeta = chunk6TKCMQ75_js.getFrameworkMeta(selectedFramework);
890
+ const frameworkMeta = chunk3BFQ3SVG_js.getFrameworkMeta(selectedFramework);
891
891
  const inputCard = "liquid-surface w-full rounded-lg px-3 py-1.5 text-sm text-gray-800 outline-none transition-colors focus:ring-1 focus:ring-indigo-300/40 dark:text-gray-200 dark:focus:ring-indigo-500/20";
892
892
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-5", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-2xl border border-indigo-500/20 bg-gradient-to-b from-indigo-500/[0.04] via-violet-500/[0.03] to-purple-500/[0.04] dark:border-indigo-400/20 dark:from-indigo-500/[0.10] dark:via-violet-500/[0.06] dark:to-purple-500/[0.08]", children: [
893
893
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-3 pt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1031,9 +1031,9 @@ function EngineTab({
1031
1031
  }
1032
1032
  function AgentModal({ onSaved, onPersist }) {
1033
1033
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1034
- const activeModal = chunk6TKCMQ75_js.useModalStore((s) => s.activeModal);
1035
- const agentData = chunk6TKCMQ75_js.useModalStore((s) => s.agentData);
1036
- const closeModal = chunk6TKCMQ75_js.useModalStore((s) => s.closeModal);
1034
+ const activeModal = chunk3BFQ3SVG_js.useModalStore((s) => s.activeModal);
1035
+ const agentData = chunk3BFQ3SVG_js.useModalStore((s) => s.agentData);
1036
+ const closeModal = chunk3BFQ3SVG_js.useModalStore((s) => s.closeModal);
1037
1037
  const open = activeModal === "agent";
1038
1038
  const agent = agentData?.agent ?? null;
1039
1039
  const models = agentData?.models ?? [];
@@ -1181,7 +1181,7 @@ function AgentModal({ onSaved, onPersist }) {
1181
1181
  const fieldLabel = "text-[9px] font-semibold uppercase tracking-wider text-slate-500 dark:text-slate-400";
1182
1182
  const avatarInitial = (displayName || agent.name).charAt(0).toUpperCase();
1183
1183
  const avatarNode = /* @__PURE__ */ jsxRuntime.jsx(
1184
- chunkZGVN23J4_js.Avatar,
1184
+ chunk6R5Z2IQ5_js.Avatar,
1185
1185
  {
1186
1186
  src: effectiveAvatarUrl || void 0,
1187
1187
  alt: displayName || agent.name,
@@ -1193,7 +1193,7 @@ function AgentModal({ onSaved, onPersist }) {
1193
1193
  const statusPill = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
1194
1194
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-[9px] font-semibold ${status === "active" ? "text-emerald-600 dark:text-emerald-400" : "text-slate-500"}`, children: status === "active" ? t("agentDrawer.statusActive", { _: "Active" }) : t("agentDrawer.statusInactive", { _: "Inactive" }) }),
1195
1195
  /* @__PURE__ */ jsxRuntime.jsx(
1196
- chunkZGVN23J4_js.ToggleSwitch,
1196
+ chunk6R5Z2IQ5_js.ToggleSwitch,
1197
1197
  {
1198
1198
  size: "sm",
1199
1199
  color: "green",
@@ -1207,7 +1207,7 @@ function AgentModal({ onSaved, onPersist }) {
1207
1207
  )
1208
1208
  ] });
1209
1209
  const identityCard = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "liquid-surface rounded-2xl p-3 ring-1 ring-slate-200/50 dark:ring-white/10", children: /* @__PURE__ */ jsxRuntime.jsx(
1210
- chunkZGVN23J4_js.HeroBlock,
1210
+ chunk6R5Z2IQ5_js.HeroBlock,
1211
1211
  {
1212
1212
  icon: avatarNode,
1213
1213
  iconBackground: "none",
@@ -1270,7 +1270,7 @@ function AgentModal({ onSaved, onPersist }) {
1270
1270
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: `font-medium ${autosaveColor}`, children: autosaveLabel })
1271
1271
  ] });
1272
1272
  return /* @__PURE__ */ jsxRuntime.jsx(
1273
- chunkZGVN23J4_js.GlassModal,
1273
+ chunk6R5Z2IQ5_js.GlassModal,
1274
1274
  {
1275
1275
  open,
1276
1276
  onClose: handleClose,
@@ -1287,7 +1287,7 @@ function AgentModal({ onSaved, onPersist }) {
1287
1287
  },
1288
1288
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
1289
1289
  /* @__PURE__ */ jsxRuntime.jsx(
1290
- chunkZGVN23J4_js.SectionCard,
1290
+ chunk6R5Z2IQ5_js.SectionCard,
1291
1291
  {
1292
1292
  variant: "glass",
1293
1293
  padded: false,
@@ -1327,7 +1327,7 @@ function AgentModal({ onSaved, onPersist }) {
1327
1327
  }
1328
1328
  ),
1329
1329
  /* @__PURE__ */ jsxRuntime.jsx(
1330
- chunkZGVN23J4_js.SectionCard,
1330
+ chunk6R5Z2IQ5_js.SectionCard,
1331
1331
  {
1332
1332
  variant: "glass",
1333
1333
  padded: false,
@@ -1355,7 +1355,7 @@ function AgentModal({ onSaved, onPersist }) {
1355
1355
  }
1356
1356
  ),
1357
1357
  /* @__PURE__ */ jsxRuntime.jsx(
1358
- chunkZGVN23J4_js.SectionCard,
1358
+ chunk6R5Z2IQ5_js.SectionCard,
1359
1359
  {
1360
1360
  variant: "glass",
1361
1361
  padded: false,
@@ -1478,7 +1478,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1478
1478
  const markDirty = useSubworkflowStore((s) => s.markDirty);
1479
1479
  const markSaved = useSubworkflowStore((s) => s.markSaved);
1480
1480
  const closeModal = useSubworkflowStore((s) => s.closeModal);
1481
- const agentBehind = chunk6TKCMQ75_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1481
+ const agentBehind = chunk3BFQ3SVG_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1482
1482
  const isCreateMode = !tool?.toolId;
1483
1483
  const initialGraph = react.useMemo(() => {
1484
1484
  const config = tool?.config;
@@ -1507,9 +1507,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1507
1507
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
1508
1508
  if (!tool) return null;
1509
1509
  const categoryKey = category ?? "external";
1510
- const gradient = tool.color ?? chunk6TKCMQ75_js.CATEGORY_COLORS[categoryKey] ?? chunk6TKCMQ75_js.CATEGORY_COLORS.external;
1511
- const categoryPill = chunk6TKCMQ75_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunk6TKCMQ75_js.CATEGORY_PILL_COLORS.external;
1512
- const IconComponent = chunk6TKCMQ75_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1510
+ const gradient = tool.color ?? chunk3BFQ3SVG_js.CATEGORY_COLORS[categoryKey] ?? chunk3BFQ3SVG_js.CATEGORY_COLORS.external;
1511
+ const categoryPill = chunk3BFQ3SVG_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunk3BFQ3SVG_js.CATEGORY_PILL_COLORS.external;
1512
+ const IconComponent = chunk3BFQ3SVG_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1513
1513
  const graph = latestGraphRef.current;
1514
1514
  const startNode = graph.nodes.find((n) => n.type === "start");
1515
1515
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -1542,7 +1542,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1542
1542
  ] })
1543
1543
  ] });
1544
1544
  return /* @__PURE__ */ jsxRuntime.jsx(
1545
- chunkZGVN23J4_js.GlassModal,
1545
+ chunk6R5Z2IQ5_js.GlassModal,
1546
1546
  {
1547
1547
  open,
1548
1548
  onClose: closeModal,
@@ -1574,7 +1574,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1574
1574
  {
1575
1575
  type: "button",
1576
1576
  onClick: () => setCategory(cat),
1577
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunk6TKCMQ75_js.CATEGORY_PILL_COLORS[cat] ?? chunk6TKCMQ75_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
1577
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunk3BFQ3SVG_js.CATEGORY_PILL_COLORS[cat] ?? chunk3BFQ3SVG_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
1578
1578
  children: cat
1579
1579
  },
1580
1580
  cat
@@ -1661,7 +1661,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1661
1661
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
1662
1662
  ] }),
1663
1663
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1664
- chunk6TKCMQ75_js.WorkflowCanvas,
1664
+ chunk3BFQ3SVG_js.WorkflowCanvas,
1665
1665
  {
1666
1666
  initialGraph,
1667
1667
  agents: [],
@@ -1677,9 +1677,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1677
1677
  }
1678
1678
  function PipelineSettingsModal({ onSave }) {
1679
1679
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1680
- const activeModal = chunk6TKCMQ75_js.useModalStore((s) => s.activeModal);
1681
- const data = chunk6TKCMQ75_js.useModalStore((s) => s.pipelineSettingsData);
1682
- const closeModal = chunk6TKCMQ75_js.useModalStore((s) => s.closeModal);
1680
+ const activeModal = chunk3BFQ3SVG_js.useModalStore((s) => s.activeModal);
1681
+ const data = chunk3BFQ3SVG_js.useModalStore((s) => s.pipelineSettingsData);
1682
+ const closeModal = chunk3BFQ3SVG_js.useModalStore((s) => s.closeModal);
1683
1683
  const open = activeModal === "pipeline-settings";
1684
1684
  const [nameValue, setNameValue] = react.useState("");
1685
1685
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1700,8 +1700,7 @@ function PipelineSettingsModal({ onSave }) {
1700
1700
  setIsActive(data.isActive ?? true);
1701
1701
  }
1702
1702
  }, [data]);
1703
- const handleSubmit = async (event) => {
1704
- event.preventDefault();
1703
+ const submitChanges = async () => {
1705
1704
  const trimmedName = nameValue.trim();
1706
1705
  if (!trimmedName) return;
1707
1706
  const trimmedDescription = descriptionValue.trim();
@@ -1743,8 +1742,10 @@ function PipelineSettingsModal({ onSave }) {
1743
1742
  /* @__PURE__ */ jsxRuntime.jsxs(
1744
1743
  chunkBHOT22QL_js.Button,
1745
1744
  {
1746
- type: "submit",
1747
- form: "pipeline-settings-form",
1745
+ type: "button",
1746
+ onClick: () => {
1747
+ void submitChanges();
1748
+ },
1748
1749
  color: "ios-glass-blue",
1749
1750
  loading: isSaving,
1750
1751
  loadingText: t("saving"),
@@ -1756,7 +1757,7 @@ function PipelineSettingsModal({ onSave }) {
1756
1757
  )
1757
1758
  ] });
1758
1759
  return /* @__PURE__ */ jsxRuntime.jsx(
1759
- chunkZGVN23J4_js.GlassModal,
1760
+ chunk6R5Z2IQ5_js.GlassModal,
1760
1761
  {
1761
1762
  open,
1762
1763
  onClose: closeModal,
@@ -1767,76 +1768,87 @@ function PipelineSettingsModal({ onSave }) {
1767
1768
  gradient: "from-indigo-500 to-purple-600",
1768
1769
  maxWidth: "md",
1769
1770
  footer,
1770
- onSubmit: handleSubmit,
1771
- children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-5", children: [
1772
- /* @__PURE__ */ jsxRuntime.jsx(
1773
- chunkZGVN23J4_js.FormInput,
1774
- {
1775
- label: t("pipelineName"),
1776
- value: nameValue,
1777
- onValueChange: setNameValue,
1778
- placeholder: t("pipelineNamePlaceholder"),
1779
- required: true
1780
- }
1781
- ),
1782
- /* @__PURE__ */ jsxRuntime.jsx(
1783
- chunkZGVN23J4_js.FormTextarea,
1784
- {
1785
- label: t("pipelineDescription"),
1786
- value: descriptionValue,
1787
- onValueChange: setDescriptionValue,
1788
- placeholder: t("pipelineDescriptionPlaceholder"),
1789
- rows: 4
1790
- }
1791
- ),
1792
- lifecycleAvailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1793
- /* @__PURE__ */ jsxRuntime.jsx(
1794
- chunkZGVN23J4_js.FormInput,
1795
- {
1796
- label: t("pipelineSlug", { _: "Slug" }),
1797
- value: slugValue,
1798
- onValueChange: setSlugValue,
1799
- placeholder: "product-pricing",
1800
- hint: t("pipelineSlugHint", {
1801
- _: "URL-friendly identifier. Leave blank to use the auto-generated one."
1802
- })
1771
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1772
+ "div",
1773
+ {
1774
+ className: "space-y-5",
1775
+ onKeyDown: (event) => {
1776
+ if (event.key === "Enter" && !(event.target instanceof HTMLTextAreaElement) && !event.shiftKey) {
1777
+ event.preventDefault();
1778
+ void submitChanges();
1803
1779
  }
1804
- ),
1805
- /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-2 rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
1806
- /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "px-1 text-xs font-medium text-gray-600 dark:text-gray-300", children: t("pipelineLifecycle", { _: "Lifecycle" }) }),
1807
- /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1808
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1809
- t("pipelineIsDraft", { _: "Draft mode" }),
1810
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isDraft ? t("pipelineIsDraftOn", { _: "Editable \u2014 changes do not affect runs." }) : t("pipelineIsDraftOff", { _: "Published \u2014 edits require a new version." }) })
1811
- ] }),
1812
- /* @__PURE__ */ jsxRuntime.jsx(
1813
- "input",
1814
- {
1815
- type: "checkbox",
1816
- checked: isDraft,
1817
- onChange: (event) => setIsDraft(event.target.checked),
1818
- className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1819
- }
1820
- )
1821
- ] }),
1822
- /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1823
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1824
- t("pipelineIsActive", { _: "Active" }),
1825
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isActive ? t("pipelineIsActiveOn", { _: "Visible in listings and runnable." }) : t("pipelineIsActiveOff", { _: "Archived \u2014 hidden from the default listing." }) })
1826
- ] }),
1780
+ },
1781
+ children: [
1782
+ /* @__PURE__ */ jsxRuntime.jsx(
1783
+ chunk6R5Z2IQ5_js.FormInput,
1784
+ {
1785
+ label: t("pipelineName"),
1786
+ value: nameValue,
1787
+ onValueChange: setNameValue,
1788
+ placeholder: t("pipelineNamePlaceholder"),
1789
+ required: true
1790
+ }
1791
+ ),
1792
+ /* @__PURE__ */ jsxRuntime.jsx(
1793
+ chunk6R5Z2IQ5_js.FormTextarea,
1794
+ {
1795
+ label: t("pipelineDescription"),
1796
+ value: descriptionValue,
1797
+ onValueChange: setDescriptionValue,
1798
+ placeholder: t("pipelineDescriptionPlaceholder"),
1799
+ rows: 4
1800
+ }
1801
+ ),
1802
+ lifecycleAvailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1827
1803
  /* @__PURE__ */ jsxRuntime.jsx(
1828
- "input",
1804
+ chunk6R5Z2IQ5_js.FormInput,
1829
1805
  {
1830
- type: "checkbox",
1831
- checked: isActive,
1832
- onChange: (event) => setIsActive(event.target.checked),
1833
- className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1806
+ label: t("pipelineSlug", { _: "Slug" }),
1807
+ value: slugValue,
1808
+ onValueChange: setSlugValue,
1809
+ placeholder: "product-pricing",
1810
+ hint: t("pipelineSlugHint", {
1811
+ _: "URL-friendly identifier. Leave blank to use the auto-generated one."
1812
+ })
1834
1813
  }
1835
- )
1814
+ ),
1815
+ /* @__PURE__ */ jsxRuntime.jsxs("fieldset", { className: "space-y-2 rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
1816
+ /* @__PURE__ */ jsxRuntime.jsx("legend", { className: "px-1 text-xs font-medium text-gray-600 dark:text-gray-300", children: t("pipelineLifecycle", { _: "Lifecycle" }) }),
1817
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1818
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1819
+ t("pipelineIsDraft", { _: "Draft mode" }),
1820
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isDraft ? t("pipelineIsDraftOn", { _: "Editable \u2014 changes do not affect runs." }) : t("pipelineIsDraftOff", { _: "Published \u2014 edits require a new version." }) })
1821
+ ] }),
1822
+ /* @__PURE__ */ jsxRuntime.jsx(
1823
+ "input",
1824
+ {
1825
+ type: "checkbox",
1826
+ checked: isDraft,
1827
+ onChange: (event) => setIsDraft(event.target.checked),
1828
+ className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1829
+ }
1830
+ )
1831
+ ] }),
1832
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
1833
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1834
+ t("pipelineIsActive", { _: "Active" }),
1835
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isActive ? t("pipelineIsActiveOn", { _: "Visible in listings and runnable." }) : t("pipelineIsActiveOff", { _: "Archived \u2014 hidden from the default listing." }) })
1836
+ ] }),
1837
+ /* @__PURE__ */ jsxRuntime.jsx(
1838
+ "input",
1839
+ {
1840
+ type: "checkbox",
1841
+ checked: isActive,
1842
+ onChange: (event) => setIsActive(event.target.checked),
1843
+ className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
1844
+ }
1845
+ )
1846
+ ] })
1847
+ ] })
1836
1848
  ] })
1837
- ] })
1838
- ] })
1839
- ] })
1849
+ ]
1850
+ }
1851
+ )
1840
1852
  }
1841
1853
  );
1842
1854
  }
@@ -1933,7 +1945,7 @@ function RunReplayModal({
1933
1945
  ] })
1934
1946
  ] });
1935
1947
  return /* @__PURE__ */ jsxRuntime.jsx(
1936
- chunkZGVN23J4_js.GlassModal,
1948
+ chunk6R5Z2IQ5_js.GlassModal,
1937
1949
  {
1938
1950
  open,
1939
1951
  onClose,
@@ -2007,7 +2019,7 @@ function RowEditor({
2007
2019
  ]
2008
2020
  }
2009
2021
  ) : isJson ? /* @__PURE__ */ jsxRuntime.jsx(
2010
- chunkZGVN23J4_js.FormTextarea,
2022
+ chunk6R5Z2IQ5_js.FormTextarea,
2011
2023
  {
2012
2024
  value: row.value,
2013
2025
  onValueChange: (v) => onChange({ value: v }),
@@ -2015,7 +2027,7 @@ function RowEditor({
2015
2027
  className: "font-mono"
2016
2028
  }
2017
2029
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2018
- chunkZGVN23J4_js.FormInput,
2030
+ chunk6R5Z2IQ5_js.FormInput,
2019
2031
  {
2020
2032
  type: row.kind === "number" ? "number" : "text",
2021
2033
  value: row.value,
@@ -2319,7 +2331,7 @@ function RuleConditionBuilder({ value, onChange, depth = 0 }) {
2319
2331
  };
2320
2332
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
2321
2333
  /* @__PURE__ */ jsxRuntime.jsx(
2322
- chunkZGVN23J4_js.FormSelect,
2334
+ chunk6R5Z2IQ5_js.FormSelect,
2323
2335
  {
2324
2336
  label: "Operator",
2325
2337
  value: value.operator,
@@ -2342,7 +2354,7 @@ function SimpleEditor({
2342
2354
  const isTruthy = value.operator === "truthy";
2343
2355
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2344
2356
  /* @__PURE__ */ jsxRuntime.jsx(
2345
- chunkZGVN23J4_js.FormInput,
2357
+ chunk6R5Z2IQ5_js.FormInput,
2346
2358
  {
2347
2359
  label: "Field",
2348
2360
  hint: "Dotted reference into the variable pool \u2014 e.g. `parse-pricing.margin`, `inputs.category`",
@@ -2352,7 +2364,7 @@ function SimpleEditor({
2352
2364
  }
2353
2365
  ),
2354
2366
  !isTruthy && /* @__PURE__ */ jsxRuntime.jsx(
2355
- chunkZGVN23J4_js.FormInput,
2367
+ chunk6R5Z2IQ5_js.FormInput,
2356
2368
  {
2357
2369
  label: "Value",
2358
2370
  hint: "Literal. Numeric operators coerce via `as f64`.",
@@ -2368,7 +2380,7 @@ function ThresholdEditor({
2368
2380
  }) {
2369
2381
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-3", children: [
2370
2382
  /* @__PURE__ */ jsxRuntime.jsx(
2371
- chunkZGVN23J4_js.FormInput,
2383
+ chunk6R5Z2IQ5_js.FormInput,
2372
2384
  {
2373
2385
  label: "Field",
2374
2386
  value: value.field ?? "",
@@ -2377,7 +2389,7 @@ function ThresholdEditor({
2377
2389
  }
2378
2390
  ),
2379
2391
  /* @__PURE__ */ jsxRuntime.jsx(
2380
- chunkZGVN23J4_js.FormSelect,
2392
+ chunk6R5Z2IQ5_js.FormSelect,
2381
2393
  {
2382
2394
  label: "Direction",
2383
2395
  value: value.comparison ?? "gte",
@@ -2391,7 +2403,7 @@ function ThresholdEditor({
2391
2403
  }
2392
2404
  ),
2393
2405
  /* @__PURE__ */ jsxRuntime.jsx(
2394
- chunkZGVN23J4_js.FormInput,
2406
+ chunk6R5Z2IQ5_js.FormInput,
2395
2407
  {
2396
2408
  label: "Threshold",
2397
2409
  type: "number",
@@ -2408,7 +2420,7 @@ function RegexEditor({
2408
2420
  }) {
2409
2421
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2410
2422
  /* @__PURE__ */ jsxRuntime.jsx(
2411
- chunkZGVN23J4_js.FormInput,
2423
+ chunk6R5Z2IQ5_js.FormInput,
2412
2424
  {
2413
2425
  label: "Field",
2414
2426
  value: value.field ?? "",
@@ -2417,7 +2429,7 @@ function RegexEditor({
2417
2429
  }
2418
2430
  ),
2419
2431
  /* @__PURE__ */ jsxRuntime.jsx(
2420
- chunkZGVN23J4_js.FormInput,
2432
+ chunk6R5Z2IQ5_js.FormInput,
2421
2433
  {
2422
2434
  label: "Pattern",
2423
2435
  hint: "Rust regex syntax \u2014 `(?i)` etc. supported.",
@@ -2445,7 +2457,7 @@ function TimeWindowEditor({
2445
2457
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2446
2458
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2447
2459
  /* @__PURE__ */ jsxRuntime.jsx(
2448
- chunkZGVN23J4_js.FormSelect,
2460
+ chunk6R5Z2IQ5_js.FormSelect,
2449
2461
  {
2450
2462
  label: "Timezone",
2451
2463
  value: value.timezone ?? "UTC",
@@ -2454,7 +2466,7 @@ function TimeWindowEditor({
2454
2466
  }
2455
2467
  ),
2456
2468
  /* @__PURE__ */ jsxRuntime.jsx(
2457
- chunkZGVN23J4_js.FormInput,
2469
+ chunk6R5Z2IQ5_js.FormInput,
2458
2470
  {
2459
2471
  label: "Timestamp field (optional)",
2460
2472
  hint: "Pulls a timestamp from the pool. Leave blank to use the run's wall-clock.",
@@ -2467,7 +2479,7 @@ function TimeWindowEditor({
2467
2479
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2468
2480
  windows.map((win, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-end gap-2 rounded-lg border border-slate-200 p-2 dark:border-slate-700", children: [
2469
2481
  /* @__PURE__ */ jsxRuntime.jsx(
2470
- chunkZGVN23J4_js.FormInput,
2482
+ chunk6R5Z2IQ5_js.FormInput,
2471
2483
  {
2472
2484
  label: `Start (hour)`,
2473
2485
  type: "number",
@@ -2478,7 +2490,7 @@ function TimeWindowEditor({
2478
2490
  }
2479
2491
  ),
2480
2492
  /* @__PURE__ */ jsxRuntime.jsx(
2481
- chunkZGVN23J4_js.FormInput,
2493
+ chunk6R5Z2IQ5_js.FormInput,
2482
2494
  {
2483
2495
  label: `End (hour)`,
2484
2496
  type: "number",
@@ -2513,7 +2525,7 @@ function BooleanGroupEditor({
2513
2525
  });
2514
2526
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2515
2527
  /* @__PURE__ */ jsxRuntime.jsx(
2516
- chunkZGVN23J4_js.FormSelect,
2528
+ chunk6R5Z2IQ5_js.FormSelect,
2517
2529
  {
2518
2530
  label: "Combinator",
2519
2531
  value: value.combinator ?? "and",
@@ -2569,7 +2581,7 @@ function RuleActionBuilder({ value, onChange }) {
2569
2581
  };
2570
2582
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
2571
2583
  /* @__PURE__ */ jsxRuntime.jsx(
2572
- chunkZGVN23J4_js.FormSelect,
2584
+ chunk6R5Z2IQ5_js.FormSelect,
2573
2585
  {
2574
2586
  label: "Action type",
2575
2587
  value: type,
@@ -2579,7 +2591,7 @@ function RuleActionBuilder({ value, onChange }) {
2579
2591
  ),
2580
2592
  type === "adjust_price" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2581
2593
  /* @__PURE__ */ jsxRuntime.jsx(
2582
- chunkZGVN23J4_js.FormInput,
2594
+ chunk6R5Z2IQ5_js.FormInput,
2583
2595
  {
2584
2596
  label: "Multiplier",
2585
2597
  type: "number",
@@ -2589,7 +2601,7 @@ function RuleActionBuilder({ value, onChange }) {
2589
2601
  }
2590
2602
  ),
2591
2603
  /* @__PURE__ */ jsxRuntime.jsx(
2592
- chunkZGVN23J4_js.FormInput,
2604
+ chunk6R5Z2IQ5_js.FormInput,
2593
2605
  {
2594
2606
  label: "Reason code",
2595
2607
  value: stringParam(params.reason),
@@ -2599,7 +2611,7 @@ function RuleActionBuilder({ value, onChange }) {
2599
2611
  )
2600
2612
  ] }),
2601
2613
  type === "enforce_min_margin" && /* @__PURE__ */ jsxRuntime.jsx(
2602
- chunkZGVN23J4_js.FormInput,
2614
+ chunk6R5Z2IQ5_js.FormInput,
2603
2615
  {
2604
2616
  label: "Floor (fraction, e.g. 0.08)",
2605
2617
  type: "number",
@@ -2609,7 +2621,7 @@ function RuleActionBuilder({ value, onChange }) {
2609
2621
  }
2610
2622
  ),
2611
2623
  type === "realign_to_competitor" && /* @__PURE__ */ jsxRuntime.jsx(
2612
- chunkZGVN23J4_js.FormInput,
2624
+ chunk6R5Z2IQ5_js.FormInput,
2613
2625
  {
2614
2626
  label: "Tolerance (fraction)",
2615
2627
  type: "number",
@@ -2619,7 +2631,7 @@ function RuleActionBuilder({ value, onChange }) {
2619
2631
  }
2620
2632
  ),
2621
2633
  type === "request_manager_approval" && /* @__PURE__ */ jsxRuntime.jsx(
2622
- chunkZGVN23J4_js.FormInput,
2634
+ chunk6R5Z2IQ5_js.FormInput,
2623
2635
  {
2624
2636
  label: "Approval limit (fraction)",
2625
2637
  type: "number",
@@ -2629,7 +2641,7 @@ function RuleActionBuilder({ value, onChange }) {
2629
2641
  }
2630
2642
  ),
2631
2643
  type === "round_to" && /* @__PURE__ */ jsxRuntime.jsx(
2632
- chunkZGVN23J4_js.FormInput,
2644
+ chunk6R5Z2IQ5_js.FormInput,
2633
2645
  {
2634
2646
  label: "Step (e.g. 0.009)",
2635
2647
  type: "number",
@@ -2640,7 +2652,7 @@ function RuleActionBuilder({ value, onChange }) {
2640
2652
  ),
2641
2653
  type === "alert" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2642
2654
  /* @__PURE__ */ jsxRuntime.jsx(
2643
- chunkZGVN23J4_js.FormInput,
2655
+ chunk6R5Z2IQ5_js.FormInput,
2644
2656
  {
2645
2657
  label: "Channel",
2646
2658
  value: stringParam(params.channel),
@@ -2649,7 +2661,7 @@ function RuleActionBuilder({ value, onChange }) {
2649
2661
  }
2650
2662
  ),
2651
2663
  /* @__PURE__ */ jsxRuntime.jsx(
2652
- chunkZGVN23J4_js.FormInput,
2664
+ chunk6R5Z2IQ5_js.FormInput,
2653
2665
  {
2654
2666
  label: "Severity",
2655
2667
  value: stringParam(params.severity),
@@ -2687,7 +2699,7 @@ function CustomParamsEditor({
2687
2699
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2688
2700
  entries.map(([key, value], index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-end gap-2", children: [
2689
2701
  /* @__PURE__ */ jsxRuntime.jsx(
2690
- chunkZGVN23J4_js.FormInput,
2702
+ chunk6R5Z2IQ5_js.FormInput,
2691
2703
  {
2692
2704
  label: "Key",
2693
2705
  value: key,
@@ -2695,7 +2707,7 @@ function CustomParamsEditor({
2695
2707
  }
2696
2708
  ),
2697
2709
  /* @__PURE__ */ jsxRuntime.jsx(
2698
- chunkZGVN23J4_js.FormInput,
2710
+ chunk6R5Z2IQ5_js.FormInput,
2699
2711
  {
2700
2712
  label: "Value",
2701
2713
  value: String(value ?? ""),
@@ -2734,9 +2746,9 @@ function RuleForm({ value, onChange }) {
2734
2746
  );
2735
2747
  const update = (key, v) => onChange({ ...value, [key]: v });
2736
2748
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
2737
- /* @__PURE__ */ jsxRuntime.jsxs(chunkZGVN23J4_js.FormGrid, { children: [
2749
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk6R5Z2IQ5_js.FormGrid, { children: [
2738
2750
  /* @__PURE__ */ jsxRuntime.jsx(
2739
- chunkZGVN23J4_js.FormInput,
2751
+ chunk6R5Z2IQ5_js.FormInput,
2740
2752
  {
2741
2753
  label: "Name",
2742
2754
  required: true,
@@ -2745,7 +2757,7 @@ function RuleForm({ value, onChange }) {
2745
2757
  }
2746
2758
  ),
2747
2759
  /* @__PURE__ */ jsxRuntime.jsx(
2748
- chunkZGVN23J4_js.FormInput,
2760
+ chunk6R5Z2IQ5_js.FormInput,
2749
2761
  {
2750
2762
  label: "Priority",
2751
2763
  type: "number",
@@ -2755,7 +2767,7 @@ function RuleForm({ value, onChange }) {
2755
2767
  }
2756
2768
  ),
2757
2769
  /* @__PURE__ */ jsxRuntime.jsx(
2758
- chunkZGVN23J4_js.FormSelect,
2770
+ chunk6R5Z2IQ5_js.FormSelect,
2759
2771
  {
2760
2772
  label: "Enabled",
2761
2773
  value: value.enabled ? "true" : "false",
@@ -2767,7 +2779,7 @@ function RuleForm({ value, onChange }) {
2767
2779
  }
2768
2780
  ),
2769
2781
  /* @__PURE__ */ jsxRuntime.jsx(
2770
- chunkZGVN23J4_js.FormTextarea,
2782
+ chunk6R5Z2IQ5_js.FormTextarea,
2771
2783
  {
2772
2784
  label: "Description",
2773
2785
  rows: 2,
@@ -2814,7 +2826,7 @@ function RuleForm({ value, onChange }) {
2814
2826
  ),
2815
2827
  showAdvanced && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2816
2828
  /* @__PURE__ */ jsxRuntime.jsx(
2817
- chunkZGVN23J4_js.FormInput,
2829
+ chunk6R5Z2IQ5_js.FormInput,
2818
2830
  {
2819
2831
  label: "Valid from (ISO 8601)",
2820
2832
  type: "datetime-local",
@@ -2823,7 +2835,7 @@ function RuleForm({ value, onChange }) {
2823
2835
  }
2824
2836
  ),
2825
2837
  /* @__PURE__ */ jsxRuntime.jsx(
2826
- chunkZGVN23J4_js.FormInput,
2838
+ chunk6R5Z2IQ5_js.FormInput,
2827
2839
  {
2828
2840
  label: "Valid until (ISO 8601)",
2829
2841
  type: "datetime-local",
@@ -2832,7 +2844,7 @@ function RuleForm({ value, onChange }) {
2832
2844
  }
2833
2845
  ),
2834
2846
  /* @__PURE__ */ jsxRuntime.jsx(
2835
- chunkZGVN23J4_js.FormSelect,
2847
+ chunk6R5Z2IQ5_js.FormSelect,
2836
2848
  {
2837
2849
  label: "Status",
2838
2850
  value: value.status ?? "active",
@@ -2841,7 +2853,7 @@ function RuleForm({ value, onChange }) {
2841
2853
  }
2842
2854
  ),
2843
2855
  /* @__PURE__ */ jsxRuntime.jsx(
2844
- chunkZGVN23J4_js.FormInput,
2856
+ chunk6R5Z2IQ5_js.FormInput,
2845
2857
  {
2846
2858
  label: "Tags (comma-separated)",
2847
2859
  value: (value.tags ?? []).join(", "),
@@ -3028,8 +3040,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
3028
3040
  ] });
3029
3041
  }
3030
3042
  function LogicNodeItemCard({ item, translationFunction }) {
3031
- const IconComponent = chunk6TKCMQ75_js.LOGIC_ICON_MAP[item.nodeType];
3032
- const gradient = chunk6TKCMQ75_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
3043
+ const IconComponent = chunk3BFQ3SVG_js.LOGIC_ICON_MAP[item.nodeType];
3044
+ const gradient = chunk3BFQ3SVG_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
3033
3045
  const defaultConfig = chunk72SWXOD5_js.createDefaultLogicNodeConfig(item.nodeType);
3034
3046
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
3035
3047
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3100,7 +3112,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3100
3112
  [entityTypes, normalizedQuery]
3101
3113
  );
3102
3114
  const filteredLogicItems = react.useMemo(() => {
3103
- const visibleByDefault = LOGIC_NODE_ITEMS.filter((item) => !chunk6TKCMQ75_js.EXPERIMENTAL_NODE_TYPES.has(item.nodeType));
3115
+ const visibleByDefault = LOGIC_NODE_ITEMS.filter((item) => !chunk3BFQ3SVG_js.EXPERIMENTAL_NODE_TYPES.has(item.nodeType));
3104
3116
  if (!normalizedQuery) return visibleByDefault;
3105
3117
  return visibleByDefault.filter(
3106
3118
  (item) => t(item.nameKey).toLowerCase().includes(normalizedQuery) || t(item.descriptionKey).toLowerCase().includes(normalizedQuery)
@@ -3236,7 +3248,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3236
3248
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.category })
3237
3249
  ] }),
3238
3250
  /* @__PURE__ */ jsxRuntime.jsx(
3239
- chunkZGVN23J4_js.ToggleSwitch,
3251
+ chunk6R5Z2IQ5_js.ToggleSwitch,
3240
3252
  {
3241
3253
  checked: Boolean(tool.enabled),
3242
3254
  onChange: () => {
@@ -3277,7 +3289,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3277
3289
  ] })
3278
3290
  ] }),
3279
3291
  /* @__PURE__ */ jsxRuntime.jsx(
3280
- chunkZGVN23J4_js.ToggleSwitch,
3292
+ chunk6R5Z2IQ5_js.ToggleSwitch,
3281
3293
  {
3282
3294
  checked: Boolean(rule.enabled),
3283
3295
  onChange: () => {
@@ -3313,8 +3325,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3313
3325
  limit: entity.defaultLimit
3314
3326
  });
3315
3327
  const dsLogo = getDatasourceLogo(entity.id);
3316
- const EntityIcon = chunk6TKCMQ75_js.getEntityIcon(entity.id);
3317
- const entityGradient = chunk6TKCMQ75_js.getEntityGradient(entity.id);
3328
+ const EntityIcon = chunk3BFQ3SVG_js.getEntityIcon(entity.id);
3329
+ const entityGradient = chunk3BFQ3SVG_js.getEntityGradient(entity.id);
3318
3330
  return /* @__PURE__ */ jsxRuntime.jsxs(
3319
3331
  "div",
3320
3332
  {
@@ -3334,7 +3346,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3334
3346
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3335
3347
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-slate-500/15 px-1.5 py-0.5 text-[9px] font-medium text-slate-700 dark:bg-slate-500/20 dark:text-slate-300", children: "Read only" }),
3336
3348
  /* @__PURE__ */ jsxRuntime.jsx(
3337
- chunkZGVN23J4_js.ToggleSwitch,
3349
+ chunk6R5Z2IQ5_js.ToggleSwitch,
3338
3350
  {
3339
3351
  checked: true,
3340
3352
  onChange: () => {
@@ -3669,9 +3681,9 @@ function formatDuration2(durationMs) {
3669
3681
  }
3670
3682
  function RunPanel({ open, onClose, onRun, onStop }) {
3671
3683
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
3672
- const nodes = chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodes);
3673
- const isRunning = chunk6TKCMQ75_js.useWorkflowStore((state) => state.isRunning);
3674
- const nodeResults = chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodeResults);
3684
+ const nodes = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodes);
3685
+ const isRunning = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.isRunning);
3686
+ const nodeResults = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodeResults);
3675
3687
  const startNode = nodes.find((node) => node.type === "start");
3676
3688
  const hasEndNode = nodes.some((node) => node.type === "end");
3677
3689
  const hasValidStartConfig = Boolean(
@@ -4002,8 +4014,8 @@ function inferVariables(config, nodeType) {
4002
4014
  }
4003
4015
  function VariableInspector({ open, onClose }) {
4004
4016
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
4005
- const nodes = chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodes);
4006
- const edges = chunk6TKCMQ75_js.useWorkflowStore((state) => state.edges);
4017
+ const nodes = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodes);
4018
+ const edges = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.edges);
4007
4019
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
4008
4020
  const toggleNodeExpansion = react.useCallback((nodeId) => {
4009
4021
  setExpandedNodes((current) => {
@@ -4065,8 +4077,8 @@ function VariableInspector({ open, onClose }) {
4065
4077
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
4066
4078
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
4067
4079
  const isExpanded = expandedNodes.has(entry.nodeId);
4068
- const IconComponent = chunk6TKCMQ75_js.LOGIC_ICON_MAP[entry.nodeType];
4069
- const gradient = chunk6TKCMQ75_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
4080
+ const IconComponent = chunk3BFQ3SVG_js.LOGIC_ICON_MAP[entry.nodeType];
4081
+ const gradient = chunk3BFQ3SVG_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
4070
4082
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
4071
4083
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
4072
4084
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -4132,7 +4144,7 @@ function RunInputDialog({
4132
4144
  onRun
4133
4145
  }) {
4134
4146
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
4135
- const nodes = chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodes);
4147
+ const nodes = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodes);
4136
4148
  const [values, setValues] = react.useState({});
4137
4149
  const inputVariableNames = react.useMemo(() => {
4138
4150
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -4159,7 +4171,7 @@ function RunInputDialog({
4159
4171
  }, [onClose]);
4160
4172
  if (!open) return null;
4161
4173
  return /* @__PURE__ */ jsxRuntime.jsxs(
4162
- chunkZGVN23J4_js.GlassModal,
4174
+ chunk6R5Z2IQ5_js.GlassModal,
4163
4175
  {
4164
4176
  open,
4165
4177
  onClose: handleClose,
@@ -4170,7 +4182,7 @@ function RunInputDialog({
4170
4182
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: inputVariableNames.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: t("noInputs") }) : inputVariableNames.map((variableName) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4171
4183
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: variableName }),
4172
4184
  /* @__PURE__ */ jsxRuntime.jsx(
4173
- chunkZGVN23J4_js.Input,
4185
+ chunk6R5Z2IQ5_js.Input,
4174
4186
  {
4175
4187
  value: values[variableName] ?? "",
4176
4188
  onChange: (event) => handleValueChange(variableName, event.target.value),
@@ -4213,8 +4225,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
4213
4225
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
4214
4226
  const [selectedRun, setSelectedRun] = react.useState(null);
4215
4227
  const [selectedNode, setSelectedNode] = react.useState(null);
4216
- const isRunning = chunk6TKCMQ75_js.useWorkflowStore((state) => state.isRunning);
4217
- const nodeResults = chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodeResults);
4228
+ const isRunning = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.isRunning);
4229
+ const nodeResults = chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodeResults);
4218
4230
  const refreshRuns = react.useCallback(async () => {
4219
4231
  setIsLoadingRuns(true);
4220
4232
  try {
@@ -4392,7 +4404,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4392
4404
  onAutoSaveGraph(graph);
4393
4405
  }, [onAutoSaveGraph, onGraphSnapshot]);
4394
4406
  return /* @__PURE__ */ jsxRuntime.jsx(
4395
- chunk6TKCMQ75_js.Workspace,
4407
+ chunk3BFQ3SVG_js.Workspace,
4396
4408
  {
4397
4409
  ...workspaceProps,
4398
4410
  onGraphChange: handleGraphChange
@@ -4400,7 +4412,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4400
4412
  );
4401
4413
  });
4402
4414
  function DynamicIslandConfirm2(props) {
4403
- return /* @__PURE__ */ jsxRuntime.jsx(chunkZGVN23J4_js.DynamicIslandConfirm, { ...props });
4415
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6R5Z2IQ5_js.DynamicIslandConfirm, { ...props });
4404
4416
  }
4405
4417
  var JSON_PREVIEW_LINE_LIMIT = 50;
4406
4418
  function DslExportModal({ open, onClose, workflow, graph }) {
@@ -4454,7 +4466,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4454
4466
  }, [jsonString, workflow.name, workflow.version]);
4455
4467
  if (!open) return null;
4456
4468
  return /* @__PURE__ */ jsxRuntime.jsx(
4457
- chunkZGVN23J4_js.GlassModal,
4469
+ chunk6R5Z2IQ5_js.GlassModal,
4458
4470
  {
4459
4471
  open,
4460
4472
  onClose,
@@ -4672,7 +4684,7 @@ function DslImportModal({ open, onClose, onImport }) {
4672
4684
  }, []);
4673
4685
  if (!open) return null;
4674
4686
  return /* @__PURE__ */ jsxRuntime.jsx(
4675
- chunkZGVN23J4_js.GlassModal,
4687
+ chunk6R5Z2IQ5_js.GlassModal,
4676
4688
  {
4677
4689
  open,
4678
4690
  onClose,
@@ -4763,14 +4775,14 @@ function DslImportModal({ open, onClose, onImport }) {
4763
4775
  }
4764
4776
 
4765
4777
  // src/astrlabe/store/selectors.ts
4766
- var useCanUndo = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.past.length > 0);
4767
- var useCanRedo = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.future.length > 0);
4768
- var useHasCopied = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.clipboard !== null);
4769
- var useContextMenu = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.contextMenu);
4770
- var useEditingNodeId = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.editingNodeId);
4771
- var useSelectedNodeCount = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4772
- var useIsRunning = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.isRunning);
4773
- var useNodeResults = () => chunk6TKCMQ75_js.useWorkflowStore((state) => state.nodeResults);
4778
+ var useCanUndo = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.past.length > 0);
4779
+ var useCanRedo = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.future.length > 0);
4780
+ var useHasCopied = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.clipboard !== null);
4781
+ var useContextMenu = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.contextMenu);
4782
+ var useEditingNodeId = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.editingNodeId);
4783
+ var useSelectedNodeCount = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4784
+ var useIsRunning = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.isRunning);
4785
+ var useNodeResults = () => chunk3BFQ3SVG_js.useWorkflowStore((state) => state.nodeResults);
4774
4786
  var DEFAULT_MAX_HISTORY = 50;
4775
4787
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
4776
4788
  const pastRef = react.useRef([]);
@@ -5094,5 +5106,5 @@ exports.useNodeResults = useNodeResults;
5094
5106
  exports.useSelectedNodeCount = useSelectedNodeCount;
5095
5107
  exports.useSubworkflowStore = useSubworkflowStore;
5096
5108
  exports.useUndoRedo = useUndoRedo;
5097
- //# sourceMappingURL=chunk-H475T2N7.js.map
5098
- //# sourceMappingURL=chunk-H475T2N7.js.map
5109
+ //# sourceMappingURL=chunk-Y4YIGEX6.js.map
5110
+ //# sourceMappingURL=chunk-Y4YIGEX6.js.map