@datatechsolutions/ui 2.11.93 → 3.2.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 (138) hide show
  1. package/dist/astrlabe/contracts.d.mts +3 -3
  2. package/dist/astrlabe/contracts.d.ts +3 -3
  3. package/dist/astrlabe/index.js +108 -108
  4. package/dist/astrlabe/index.mjs +4 -4
  5. package/dist/astrlabe/workflow-canvas.js +4 -4
  6. package/dist/astrlabe/workflow-canvas.mjs +3 -3
  7. package/dist/brand/index.d.mts +1 -15
  8. package/dist/brand/index.d.ts +1 -15
  9. package/dist/brand/index.js +0 -14
  10. package/dist/brand/index.js.map +1 -1
  11. package/dist/brand/index.mjs +0 -14
  12. package/dist/brand/index.mjs.map +1 -1
  13. package/dist/{chunk-24QKSC74.js → chunk-3JJWPOK6.js} +6 -6
  14. package/dist/{chunk-24QKSC74.js.map → chunk-3JJWPOK6.js.map} +1 -1
  15. package/dist/{chunk-HGN5W56D.mjs → chunk-3ZUMJTDT.mjs} +3 -3
  16. package/dist/{chunk-HGN5W56D.mjs.map → chunk-3ZUMJTDT.mjs.map} +1 -1
  17. package/dist/{chunk-LKJZGFM4.mjs → chunk-5GDKCFM5.mjs} +3 -3
  18. package/dist/{chunk-LKJZGFM4.mjs.map → chunk-5GDKCFM5.mjs.map} +1 -1
  19. package/dist/{chunk-ZHUPYX4Q.mjs → chunk-5RM6NGZ6.mjs} +3 -3
  20. package/dist/{chunk-ZHUPYX4Q.mjs.map → chunk-5RM6NGZ6.mjs.map} +1 -1
  21. package/dist/{chunk-DB64YDV2.js → chunk-AOUUZ52N.js} +55 -55
  22. package/dist/{chunk-DB64YDV2.js.map → chunk-AOUUZ52N.js.map} +1 -1
  23. package/dist/{chunk-VGSWSQQU.mjs → chunk-B67DP7MI.mjs} +4 -4
  24. package/dist/{chunk-VGSWSQQU.mjs.map → chunk-B67DP7MI.mjs.map} +1 -1
  25. package/dist/{chunk-NYQAEPC7.js → chunk-EFOXN3LC.js} +159 -168
  26. package/dist/chunk-EFOXN3LC.js.map +1 -0
  27. package/dist/{chunk-ARVLVWUC.js → chunk-F54Q2YJY.js} +97 -15
  28. package/dist/chunk-F54Q2YJY.js.map +1 -0
  29. package/dist/{chunk-GMZ3PTNK.mjs → chunk-H2D2CRTD.mjs} +7 -7
  30. package/dist/{chunk-GMZ3PTNK.mjs.map → chunk-H2D2CRTD.mjs.map} +1 -1
  31. package/dist/{chunk-PTGPQJZJ.js → chunk-HDCUWUNH.js} +15 -15
  32. package/dist/{chunk-PTGPQJZJ.js.map → chunk-HDCUWUNH.js.map} +1 -1
  33. package/dist/{chunk-ZKUYNCAG.js → chunk-I2NZGVBG.js} +1595 -2140
  34. package/dist/chunk-I2NZGVBG.js.map +1 -0
  35. package/dist/{chunk-MLAXYDEU.mjs → chunk-IRPS5UCS.mjs} +3 -3
  36. package/dist/{chunk-MLAXYDEU.mjs.map → chunk-IRPS5UCS.mjs.map} +1 -1
  37. package/dist/{chunk-TEQYIK2B.mjs → chunk-IRT4T3CU.mjs} +92 -101
  38. package/dist/chunk-IRT4T3CU.mjs.map +1 -0
  39. package/dist/{chunk-A3BFURJB.mjs → chunk-JN6IL6OH.mjs} +1595 -2138
  40. package/dist/chunk-JN6IL6OH.mjs.map +1 -0
  41. package/dist/{chunk-NA57KK4O.js → chunk-JSNRCYSO.js} +4 -4
  42. package/dist/{chunk-NA57KK4O.js.map → chunk-JSNRCYSO.js.map} +1 -1
  43. package/dist/{chunk-XSBZNPUO.js → chunk-KR2X2WHJ.js} +53 -53
  44. package/dist/{chunk-XSBZNPUO.js.map → chunk-KR2X2WHJ.js.map} +1 -1
  45. package/dist/{chunk-YEWXDCCI.mjs → chunk-LEKZUS6N.mjs} +4 -4
  46. package/dist/{chunk-YEWXDCCI.mjs.map → chunk-LEKZUS6N.mjs.map} +1 -1
  47. package/dist/{chunk-6NAZVG2O.mjs → chunk-MVBIAXVN.mjs} +4 -4
  48. package/dist/{chunk-6NAZVG2O.mjs.map → chunk-MVBIAXVN.mjs.map} +1 -1
  49. package/dist/{chunk-4TY55HGO.mjs → chunk-OL73LBX5.mjs} +3 -3
  50. package/dist/{chunk-4TY55HGO.mjs.map → chunk-OL73LBX5.mjs.map} +1 -1
  51. package/dist/{chunk-HUGHELRM.mjs → chunk-QYA53LUF.mjs} +6 -6
  52. package/dist/chunk-QYA53LUF.mjs.map +1 -0
  53. package/dist/{chunk-DWFLIXES.mjs → chunk-R4TQWXNG.mjs} +3 -3
  54. package/dist/{chunk-DWFLIXES.mjs.map → chunk-R4TQWXNG.mjs.map} +1 -1
  55. package/dist/{chunk-SMKN4ZVB.js → chunk-RGI74SQH.js} +4 -4
  56. package/dist/{chunk-SMKN4ZVB.js.map → chunk-RGI74SQH.js.map} +1 -1
  57. package/dist/{chunk-FZTOP6EE.js → chunk-RL35XATZ.js} +141 -141
  58. package/dist/chunk-RL35XATZ.js.map +1 -0
  59. package/dist/{chunk-BUI7BCUN.js → chunk-RXZNACMI.js} +33 -33
  60. package/dist/{chunk-BUI7BCUN.js.map → chunk-RXZNACMI.js.map} +1 -1
  61. package/dist/{chunk-ST3GH5OM.js → chunk-SU3YPWFW.js} +26 -26
  62. package/dist/{chunk-ST3GH5OM.js.map → chunk-SU3YPWFW.js.map} +1 -1
  63. package/dist/{chunk-DIMLLLZR.js → chunk-TIJJHW2Z.js} +36 -36
  64. package/dist/{chunk-DIMLLLZR.js.map → chunk-TIJJHW2Z.js.map} +1 -1
  65. package/dist/{chunk-2RDGJXYZ.js → chunk-TVMLV675.js} +67 -67
  66. package/dist/{chunk-2RDGJXYZ.js.map → chunk-TVMLV675.js.map} +1 -1
  67. package/dist/{chunk-Y3WJAYOY.mjs → chunk-UDDZTTLO.mjs} +6 -6
  68. package/dist/chunk-UDDZTTLO.mjs.map +1 -0
  69. package/dist/{chunk-43GCSCQA.js → chunk-W5OEBO6E.js} +12 -12
  70. package/dist/chunk-W5OEBO6E.js.map +1 -0
  71. package/dist/{chunk-3Z366CVM.js → chunk-Y6AEE56Q.js} +67 -67
  72. package/dist/{chunk-3Z366CVM.js.map → chunk-Y6AEE56Q.js.map} +1 -1
  73. package/dist/{chunk-RXFAQFE7.mjs → chunk-YIB2YAM5.mjs} +3 -3
  74. package/dist/{chunk-RXFAQFE7.mjs.map → chunk-YIB2YAM5.mjs.map} +1 -1
  75. package/dist/{chunk-OLXOBT42.mjs → chunk-YV72JM4B.mjs} +4 -4
  76. package/dist/{chunk-OLXOBT42.mjs.map → chunk-YV72JM4B.mjs.map} +1 -1
  77. package/dist/{chunk-MEEFOZC4.js → chunk-ZM5MVWIT.js} +4 -4
  78. package/dist/{chunk-MEEFOZC4.js.map → chunk-ZM5MVWIT.js.map} +1 -1
  79. package/dist/{chunk-PU2KTO4O.mjs → chunk-ZV5EZXXO.mjs} +97 -15
  80. package/dist/chunk-ZV5EZXXO.mjs.map +1 -0
  81. package/dist/index.d.mts +8 -41
  82. package/dist/index.d.ts +8 -41
  83. package/dist/index.js +745 -753
  84. package/dist/index.mjs +2 -2
  85. package/dist/platform/admin/index.js +11 -11
  86. package/dist/platform/admin/index.mjs +5 -5
  87. package/dist/platform/agents-workspace.js +7 -7
  88. package/dist/platform/agents-workspace.mjs +6 -6
  89. package/dist/platform/app-shell.js +4 -4
  90. package/dist/platform/app-shell.mjs +3 -3
  91. package/dist/platform/auth/index.js +28 -28
  92. package/dist/platform/auth/index.mjs +5 -5
  93. package/dist/platform/billing/index.js +4 -4
  94. package/dist/platform/billing/index.mjs +3 -3
  95. package/dist/platform/impersonation/index.js +4 -4
  96. package/dist/platform/impersonation/index.mjs +3 -3
  97. package/dist/platform/index.d.mts +1 -1
  98. package/dist/platform/index.d.ts +1 -1
  99. package/dist/platform/index.js +99 -99
  100. package/dist/platform/index.js.map +1 -1
  101. package/dist/platform/index.mjs +19 -19
  102. package/dist/platform/index.mjs.map +1 -1
  103. package/dist/platform/pages/index.d.mts +4 -5
  104. package/dist/platform/pages/index.d.ts +4 -5
  105. package/dist/platform/pages/index.js +197 -197
  106. package/dist/platform/pages/index.js.map +1 -1
  107. package/dist/platform/pages/index.mjs +9 -9
  108. package/dist/platform/pages/index.mjs.map +1 -1
  109. package/dist/platform/settings/index.js +8 -8
  110. package/dist/platform/settings/index.mjs +7 -7
  111. package/dist/platform/telemetry/index.d.mts +51 -0
  112. package/dist/platform/telemetry/index.d.ts +51 -0
  113. package/dist/platform/telemetry/index.js +96 -0
  114. package/dist/platform/telemetry/index.js.map +1 -0
  115. package/dist/platform/telemetry/index.mjs +89 -0
  116. package/dist/platform/telemetry/index.mjs.map +1 -0
  117. package/dist/platform/workflow-api-client.d.mts +1 -1
  118. package/dist/platform/workflow-api-client.d.ts +1 -1
  119. package/dist/platform/workflow-api-client.js +61 -61
  120. package/dist/platform/workflow-api-client.mjs +1 -1
  121. package/dist/platform/workflow-canvas-shell.js +5 -5
  122. package/dist/platform/workflow-canvas-shell.mjs +4 -4
  123. package/dist/{workflow-api-client-DVLhcpUj.d.ts → workflow-api-client-BKD8OfP_.d.ts} +61 -30
  124. package/dist/{workflow-api-client-DpBxHTHr.d.mts → workflow-api-client-DoYj7nHz.d.mts} +61 -30
  125. package/package.json +7 -1
  126. package/dist/chunk-43GCSCQA.js.map +0 -1
  127. package/dist/chunk-A3BFURJB.mjs.map +0 -1
  128. package/dist/chunk-ARVLVWUC.js.map +0 -1
  129. package/dist/chunk-FZTOP6EE.js.map +0 -1
  130. package/dist/chunk-HUGHELRM.mjs.map +0 -1
  131. package/dist/chunk-NYQAEPC7.js.map +0 -1
  132. package/dist/chunk-PU2KTO4O.mjs.map +0 -1
  133. package/dist/chunk-TEQYIK2B.mjs.map +0 -1
  134. package/dist/chunk-Y3WJAYOY.mjs.map +0 -1
  135. package/dist/chunk-ZKUYNCAG.js.map +0 -1
  136. package/src/brand/logos/fuel-icon.svg +0 -32
  137. package/src/brand/logos/fuel-logo-dark.svg +0 -43
  138. package/src/brand/logos/fuel-logo.svg +0 -43
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkNYQAEPC7_js = require('./chunk-NYQAEPC7.js');
5
- var chunkZKUYNCAG_js = require('./chunk-ZKUYNCAG.js');
4
+ var chunkEFOXN3LC_js = require('./chunk-EFOXN3LC.js');
5
+ var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
6
6
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
7
7
  var chunkC3H4FM4A_js = require('./chunk-C3H4FM4A.js');
8
8
  var react = require('react');
@@ -17,10 +17,10 @@ var S3WriteFlowNode = react.memo(function S3WriteFlowNode2({ id, data, selected
17
17
  const isCompact = data.displayMode === "compact";
18
18
  const keyPreview = config.key ? config.key.slice(0, 30) : "";
19
19
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20
- /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.NodeRunningIndicator, { nodeId: id }),
21
- /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-500" }),
20
+ /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.NodeRunningIndicator, { nodeId: id }),
21
+ /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-500" }),
22
22
  /* @__PURE__ */ jsxRuntime.jsxs(
23
- chunkNYQAEPC7_js.NodeInteractiveCard,
23
+ chunkEFOXN3LC_js.NodeInteractiveCard,
24
24
  {
25
25
  nodeId: id,
26
26
  onEdit,
@@ -29,27 +29,27 @@ var S3WriteFlowNode = react.memo(function S3WriteFlowNode2({ id, data, selected
29
29
  nodeType: "s3_write",
30
30
  children: [
31
31
  /* @__PURE__ */ jsxRuntime.jsx(
32
- chunkNYQAEPC7_js.NodeCardHeader,
32
+ chunkEFOXN3LC_js.NodeCardHeader,
33
33
  {
34
- icon: /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.NodeIconBubble, { tone: "s3_write", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CloudArrowUpIcon, { className: "h-5 w-5 text-white" }) }),
34
+ icon: /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.NodeIconBubble, { tone: "s3_write", children: /* @__PURE__ */ jsxRuntime.jsx(outline.CloudArrowUpIcon, { className: "h-5 w-5 text-white" }) }),
35
35
  title: label,
36
36
  description: t("s3WriteNodeDescription"),
37
37
  compact: isCompact,
38
38
  iconClassName: ""
39
39
  }
40
40
  ),
41
- /* @__PURE__ */ jsxRuntime.jsxs(chunkNYQAEPC7_js.NodeCardMeta, { compact: isCompact, children: [
41
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkEFOXN3LC_js.NodeCardMeta, { compact: isCompact, children: [
42
42
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
43
- /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.NodeCardBadge, { tone: "s3_write", children: t("s3WriteNode") }),
44
- config.bucket && /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.NodeCardBadge, { tone: "s3_write", soft: true, children: config.bucket }),
43
+ /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.NodeCardBadge, { tone: "s3_write", children: t("s3WriteNode") }),
44
+ config.bucket && /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.NodeCardBadge, { tone: "s3_write", soft: true, children: config.bucket }),
45
45
  keyPreview && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: keyPreview })
46
46
  ] }),
47
- /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.NodeCardDeleteAction, { nodeId: id, onDelete })
47
+ /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.NodeCardDeleteAction, { nodeId: id, onDelete })
48
48
  ] })
49
49
  ]
50
50
  }
51
51
  ),
52
- /* @__PURE__ */ jsxRuntime.jsx(chunkNYQAEPC7_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-500" })
52
+ /* @__PURE__ */ jsxRuntime.jsx(chunkEFOXN3LC_js.WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-500" })
53
53
  ] });
54
54
  });
55
55
  function AnthropicModelIcon({ className }) {
@@ -113,7 +113,7 @@ function OutputSchemaBuilder({ value, onChange, depth = 0 }) {
113
113
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-dashed border-slate-300 bg-slate-50/40 p-4 text-center dark:border-slate-700 dark:bg-slate-900/30", children: [
114
114
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-3 text-xs text-slate-500 dark:text-slate-400", children: "No schema yet \u2014 agent text is exposed as a raw string. Add a schema to enforce structured output." }),
115
115
  /* @__PURE__ */ jsxRuntime.jsx(
116
- chunkZKUYNCAG_js.Button,
116
+ chunkI2NZGVBG_js.Button,
117
117
  {
118
118
  type: "button",
119
119
  outline: true,
@@ -177,7 +177,7 @@ function OutputSchemaBuilder({ value, onChange, depth = 0 }) {
177
177
  },
178
178
  index
179
179
  )),
180
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", outline: true, onClick: addField, children: "+ Add field" })
180
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", outline: true, onClick: addField, children: "+ Add field" })
181
181
  ] })
182
182
  ] });
183
183
  }
@@ -200,7 +200,7 @@ function FieldEditor({
200
200
  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: [
201
201
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_140px_auto_auto] items-end gap-2", children: [
202
202
  /* @__PURE__ */ jsxRuntime.jsx(
203
- chunkZKUYNCAG_js.FormInput,
203
+ chunkI2NZGVBG_js.FormInput,
204
204
  {
205
205
  label: "Name",
206
206
  value: field.name,
@@ -209,7 +209,7 @@ function FieldEditor({
209
209
  }
210
210
  ),
211
211
  /* @__PURE__ */ jsxRuntime.jsx(
212
- chunkZKUYNCAG_js.FormSelect,
212
+ chunkI2NZGVBG_js.FormSelect,
213
213
  {
214
214
  label: "Type",
215
215
  value: field.type,
@@ -229,10 +229,10 @@ function FieldEditor({
229
229
  ),
230
230
  "Required"
231
231
  ] }),
232
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
232
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
233
233
  ] }),
234
234
  /* @__PURE__ */ jsxRuntime.jsx(
235
- chunkZKUYNCAG_js.FormInput,
235
+ chunkI2NZGVBG_js.FormInput,
236
236
  {
237
237
  label: "Description (optional)",
238
238
  value: field.description,
@@ -325,7 +325,7 @@ function OutputCard({ label, value }) {
325
325
  function AgentProfileHeader({ agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged }) {
326
326
  const modelName = models.find((model) => model.id === selectedModelId)?.name ?? selectedModelId ?? "\u2014";
327
327
  const avatarUrl = agent.avatar;
328
- const frameworkMeta = chunkNYQAEPC7_js.getFrameworkMeta(selectedFramework);
328
+ const frameworkMeta = chunkEFOXN3LC_js.getFrameworkMeta(selectedFramework);
329
329
  const tierInfo = getEloTier(elo);
330
330
  const difficultyConfig = {
331
331
  beginner: { color: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400", labelKey: "agentDrawer.tierBeginner" },
@@ -601,13 +601,13 @@ function AgentCapabilityCard({ elo, setElo, models, selectedModelId, setSelected
601
601
  ] });
602
602
  }
603
603
  function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFramework, setSelectedFramework, markDirty, connectedProviderTypes }) {
604
- const frameworkKeys = Object.keys(chunkNYQAEPC7_js.FRAMEWORK_META);
604
+ const frameworkKeys = Object.keys(chunkEFOXN3LC_js.FRAMEWORK_META);
605
605
  const hasProviderConstraints = connectedProviderTypes.length > 0;
606
- const compatibleModels = chunkNYQAEPC7_js.getCompatibleModels(models, selectedFramework);
606
+ const compatibleModels = chunkEFOXN3LC_js.getCompatibleModels(models, selectedFramework);
607
607
  const handleFrameworkChange = react.useCallback((newFramework) => {
608
608
  setSelectedFramework(newFramework);
609
- if (!chunkNYQAEPC7_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
610
- const compatible = chunkNYQAEPC7_js.getCompatibleModels(models, newFramework);
609
+ if (!chunkEFOXN3LC_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
610
+ const compatible = chunkEFOXN3LC_js.getCompatibleModels(models, newFramework);
611
611
  if (compatible.length > 0) {
612
612
  setSelectedModelId(compatible[0].id);
613
613
  }
@@ -618,10 +618,10 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
618
618
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
619
619
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
620
620
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
621
- const meta = chunkNYQAEPC7_js.FRAMEWORK_META[key];
621
+ const meta = chunkEFOXN3LC_js.FRAMEWORK_META[key];
622
622
  const isSelected = key === selectedFramework;
623
- const compatCount = chunkNYQAEPC7_js.getCompatibleModels(models, key).length;
624
- const isCompatibleWithProviders = !hasProviderConstraints || chunkNYQAEPC7_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
623
+ const compatCount = chunkEFOXN3LC_js.getCompatibleModels(models, key).length;
624
+ const isCompatibleWithProviders = !hasProviderConstraints || chunkEFOXN3LC_js.isFrameworkCompatibleWithProviders(key, connectedProviderTypes);
625
625
  return /* @__PURE__ */ jsxRuntime.jsxs(
626
626
  "button",
627
627
  {
@@ -653,7 +653,7 @@ function ConfigTab({ models, t, selectedModelId, setSelectedModelId, selectedFra
653
653
  ] }),
654
654
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
655
655
  const isSelected = model.id === selectedModelId;
656
- const isCompatible = chunkNYQAEPC7_js.isModelCompatibleWithFramework(model.id, selectedFramework);
656
+ const isCompatible = chunkEFOXN3LC_js.isModelCompatibleWithFramework(model.id, selectedFramework);
657
657
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
658
658
  return /* @__PURE__ */ jsxRuntime.jsxs(
659
659
  "button",
@@ -777,7 +777,7 @@ function PromptTab({
777
777
  ] });
778
778
  }
779
779
  function ResultsTab({ agentId, t }) {
780
- const nodeResults = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodeResults);
780
+ const nodeResults = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodeResults);
781
781
  const agentResult = react.useMemo(() => {
782
782
  return nodeResults[agentId] ?? null;
783
783
  }, [nodeResults, agentId]);
@@ -867,10 +867,10 @@ function ModelsTab({ modelProviders, selectedProviderId, onSelectProvider, model
867
867
  const providerModels = modelsByProvider.find((p) => p.provider.id === selectedProviderId);
868
868
  if (!providerModels || providerModels.models.length === 0) return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-400 dark:text-gray-500", children: t("agentDrawer.noModelsForProvider") });
869
869
  const compatibleModels = providerModels.models.filter(
870
- (m) => chunkNYQAEPC7_js.isModelCompatibleWithFramework(m.id, agentFramework)
870
+ (m) => chunkEFOXN3LC_js.isModelCompatibleWithFramework(m.id, agentFramework)
871
871
  );
872
872
  const incompatibleModels = providerModels.models.filter(
873
- (m) => !chunkNYQAEPC7_js.isModelCompatibleWithFramework(m.id, agentFramework)
873
+ (m) => !chunkEFOXN3LC_js.isModelCompatibleWithFramework(m.id, agentFramework)
874
874
  );
875
875
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
876
876
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.selectModel") }),
@@ -943,7 +943,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
943
943
  ] }),
944
944
  tool.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.description }),
945
945
  tool.compatibleFrameworks && tool.compatibleFrameworks.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 flex flex-wrap gap-0.5", children: tool.compatibleFrameworks.map((framework) => {
946
- const meta = chunkNYQAEPC7_js.getFrameworkMeta(framework);
946
+ const meta = chunkEFOXN3LC_js.getFrameworkMeta(framework);
947
947
  const isCurrentFw = framework === agentFramework;
948
948
  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: [
949
949
  /* @__PURE__ */ jsxRuntime.jsx(meta.IconComponent, { className: "h-2.5 w-2.5" }),
@@ -960,7 +960,7 @@ function ToolsTab({ agentTools, enabledToolIds, onToggle, agentFramework, t }) {
960
960
  event.stopPropagation();
961
961
  },
962
962
  children: /* @__PURE__ */ jsxRuntime.jsx(
963
- chunkZKUYNCAG_js.ToggleSwitch,
963
+ chunkI2NZGVBG_js.ToggleSwitch,
964
964
  {
965
965
  checked: isEnabled,
966
966
  onChange: () => onToggle(tool.agentToolId),
@@ -1119,9 +1119,9 @@ function AdvancedTab({
1119
1119
  }
1120
1120
  function AgentModal({ onSaved, onPersist }) {
1121
1121
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1122
- const activeModal = chunkNYQAEPC7_js.useModalStore((s) => s.activeModal);
1123
- const agentData = chunkNYQAEPC7_js.useModalStore((s) => s.agentData);
1124
- const closeModal = chunkNYQAEPC7_js.useModalStore((s) => s.closeModal);
1122
+ const activeModal = chunkEFOXN3LC_js.useModalStore((s) => s.activeModal);
1123
+ const agentData = chunkEFOXN3LC_js.useModalStore((s) => s.agentData);
1124
+ const closeModal = chunkEFOXN3LC_js.useModalStore((s) => s.closeModal);
1125
1125
  const open = activeModal === "agent";
1126
1126
  const agent = agentData?.agent ?? null;
1127
1127
  const models = agentData?.models ?? [];
@@ -1283,7 +1283,7 @@ function AgentModal({ onSaved, onPersist }) {
1283
1283
  )
1284
1284
  ] });
1285
1285
  return /* @__PURE__ */ jsxRuntime.jsxs(
1286
- chunkZKUYNCAG_js.GlassModal,
1286
+ chunkI2NZGVBG_js.GlassModal,
1287
1287
  {
1288
1288
  open,
1289
1289
  onClose: handleClose,
@@ -1471,7 +1471,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1471
1471
  const markDirty = useSubworkflowStore((s) => s.markDirty);
1472
1472
  const markSaved = useSubworkflowStore((s) => s.markSaved);
1473
1473
  const closeModal = useSubworkflowStore((s) => s.closeModal);
1474
- const agentBehind = chunkNYQAEPC7_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1474
+ const agentBehind = chunkEFOXN3LC_js.useModalStore((s) => s.activeModal === "agent" ? s.agentData?.agent?.name : null);
1475
1475
  const isCreateMode = !tool?.toolId;
1476
1476
  const initialGraph = react.useMemo(() => {
1477
1477
  const config = tool?.config;
@@ -1500,9 +1500,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1500
1500
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
1501
1501
  if (!tool) return null;
1502
1502
  const categoryKey = category ?? "external";
1503
- const gradient = tool.color ?? chunkNYQAEPC7_js.CATEGORY_COLORS[categoryKey] ?? chunkNYQAEPC7_js.CATEGORY_COLORS.external;
1504
- const categoryPill = chunkNYQAEPC7_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkNYQAEPC7_js.CATEGORY_PILL_COLORS.external;
1505
- const IconComponent = chunkNYQAEPC7_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1503
+ const gradient = tool.color ?? chunkEFOXN3LC_js.CATEGORY_COLORS[categoryKey] ?? chunkEFOXN3LC_js.CATEGORY_COLORS.external;
1504
+ const categoryPill = chunkEFOXN3LC_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkEFOXN3LC_js.CATEGORY_PILL_COLORS.external;
1505
+ const IconComponent = chunkEFOXN3LC_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
1506
1506
  const graph = latestGraphRef.current;
1507
1507
  const startNode = graph.nodes.find((n) => n.type === "start");
1508
1508
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -1535,7 +1535,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1535
1535
  ] })
1536
1536
  ] });
1537
1537
  return /* @__PURE__ */ jsxRuntime.jsx(
1538
- chunkZKUYNCAG_js.GlassModal,
1538
+ chunkI2NZGVBG_js.GlassModal,
1539
1539
  {
1540
1540
  open,
1541
1541
  onClose: closeModal,
@@ -1567,7 +1567,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1567
1567
  {
1568
1568
  type: "button",
1569
1569
  onClick: () => setCategory(cat),
1570
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkNYQAEPC7_js.CATEGORY_PILL_COLORS[cat] ?? chunkNYQAEPC7_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"}`,
1570
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkEFOXN3LC_js.CATEGORY_PILL_COLORS[cat] ?? chunkEFOXN3LC_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"}`,
1571
1571
  children: cat
1572
1572
  },
1573
1573
  cat
@@ -1654,7 +1654,7 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1654
1654
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto" })
1655
1655
  ] }),
1656
1656
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1657
- chunkNYQAEPC7_js.WorkflowCanvas,
1657
+ chunkEFOXN3LC_js.WorkflowCanvas,
1658
1658
  {
1659
1659
  initialGraph,
1660
1660
  agents: [],
@@ -1670,9 +1670,9 @@ function SubworkflowModal({ onSaved, onMaximize }) {
1670
1670
  }
1671
1671
  function PipelineSettingsModal({ onSave }) {
1672
1672
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
1673
- const activeModal = chunkNYQAEPC7_js.useModalStore((s) => s.activeModal);
1674
- const data = chunkNYQAEPC7_js.useModalStore((s) => s.pipelineSettingsData);
1675
- const closeModal = chunkNYQAEPC7_js.useModalStore((s) => s.closeModal);
1673
+ const activeModal = chunkEFOXN3LC_js.useModalStore((s) => s.activeModal);
1674
+ const data = chunkEFOXN3LC_js.useModalStore((s) => s.pipelineSettingsData);
1675
+ const closeModal = chunkEFOXN3LC_js.useModalStore((s) => s.closeModal);
1676
1676
  const open = activeModal === "pipeline-settings";
1677
1677
  const [nameValue, setNameValue] = react.useState("");
1678
1678
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -1734,7 +1734,7 @@ function PipelineSettingsModal({ onSave }) {
1734
1734
  }
1735
1735
  ),
1736
1736
  /* @__PURE__ */ jsxRuntime.jsxs(
1737
- chunkZKUYNCAG_js.Button,
1737
+ chunkI2NZGVBG_js.Button,
1738
1738
  {
1739
1739
  type: "submit",
1740
1740
  form: "pipeline-settings-form",
@@ -1749,7 +1749,7 @@ function PipelineSettingsModal({ onSave }) {
1749
1749
  )
1750
1750
  ] });
1751
1751
  return /* @__PURE__ */ jsxRuntime.jsx(
1752
- chunkZKUYNCAG_js.GlassModal,
1752
+ chunkI2NZGVBG_js.GlassModal,
1753
1753
  {
1754
1754
  open,
1755
1755
  onClose: closeModal,
@@ -1763,7 +1763,7 @@ function PipelineSettingsModal({ onSave }) {
1763
1763
  onSubmit: handleSubmit,
1764
1764
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-5", children: [
1765
1765
  /* @__PURE__ */ jsxRuntime.jsx(
1766
- chunkZKUYNCAG_js.FormInput,
1766
+ chunkI2NZGVBG_js.FormInput,
1767
1767
  {
1768
1768
  label: t("pipelineName"),
1769
1769
  value: nameValue,
@@ -1773,7 +1773,7 @@ function PipelineSettingsModal({ onSave }) {
1773
1773
  }
1774
1774
  ),
1775
1775
  /* @__PURE__ */ jsxRuntime.jsx(
1776
- chunkZKUYNCAG_js.FormTextarea,
1776
+ chunkI2NZGVBG_js.FormTextarea,
1777
1777
  {
1778
1778
  label: t("pipelineDescription"),
1779
1779
  value: descriptionValue,
@@ -1784,12 +1784,12 @@ function PipelineSettingsModal({ onSave }) {
1784
1784
  ),
1785
1785
  lifecycleAvailable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1786
1786
  /* @__PURE__ */ jsxRuntime.jsx(
1787
- chunkZKUYNCAG_js.FormInput,
1787
+ chunkI2NZGVBG_js.FormInput,
1788
1788
  {
1789
1789
  label: t("pipelineSlug", { _: "Slug" }),
1790
1790
  value: slugValue,
1791
1791
  onValueChange: setSlugValue,
1792
- placeholder: "fuel-pricing",
1792
+ placeholder: "product-pricing",
1793
1793
  hint: t("pipelineSlugHint", {
1794
1794
  _: "URL-friendly identifier. Leave blank to use the auto-generated one."
1795
1795
  })
@@ -1911,7 +1911,7 @@ function RunReplayModal({
1911
1911
  }
1912
1912
  ),
1913
1913
  /* @__PURE__ */ jsxRuntime.jsxs(
1914
- chunkZKUYNCAG_js.Button,
1914
+ chunkI2NZGVBG_js.Button,
1915
1915
  {
1916
1916
  type: "submit",
1917
1917
  form: "run-replay-form",
@@ -1926,7 +1926,7 @@ function RunReplayModal({
1926
1926
  ] })
1927
1927
  ] });
1928
1928
  return /* @__PURE__ */ jsxRuntime.jsx(
1929
- chunkZKUYNCAG_js.GlassModal,
1929
+ chunkI2NZGVBG_js.GlassModal,
1930
1930
  {
1931
1931
  open,
1932
1932
  onClose,
@@ -2000,7 +2000,7 @@ function RowEditor({
2000
2000
  ]
2001
2001
  }
2002
2002
  ) : isJson ? /* @__PURE__ */ jsxRuntime.jsx(
2003
- chunkZKUYNCAG_js.FormTextarea,
2003
+ chunkI2NZGVBG_js.FormTextarea,
2004
2004
  {
2005
2005
  value: row.value,
2006
2006
  onValueChange: (v) => onChange({ value: v }),
@@ -2008,7 +2008,7 @@ function RowEditor({
2008
2008
  className: "font-mono"
2009
2009
  }
2010
2010
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2011
- chunkZKUYNCAG_js.FormInput,
2011
+ chunkI2NZGVBG_js.FormInput,
2012
2012
  {
2013
2013
  type: row.kind === "number" ? "number" : "text",
2014
2014
  value: row.value,
@@ -2112,7 +2112,7 @@ function ExecutionTimelinePanel({
2112
2112
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate font-medium text-slate-900 dark:text-white", children: entry.nodeId }),
2113
2113
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-slate-500 dark:text-slate-400", children: entry.nodeType })
2114
2114
  ] }),
2115
- /* @__PURE__ */ jsxRuntime.jsxs(chunkZKUYNCAG_js.Badge, { color: meta.color, children: [
2115
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkI2NZGVBG_js.Badge, { color: meta.color, children: [
2116
2116
  /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "mr-1 h-3 w-3" }),
2117
2117
  labels[entry.status]
2118
2118
  ] })
@@ -2142,7 +2142,7 @@ function NodeInspector({
2142
2142
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "truncate text-base font-semibold text-slate-900 dark:text-white", children: entry.nodeId }),
2143
2143
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-slate-500 dark:text-slate-400", children: entry.nodeType })
2144
2144
  ] }),
2145
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Badge, { color: meta.color, children: labels[entry.status] })
2145
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Badge, { color: meta.color, children: labels[entry.status] })
2146
2146
  ] }),
2147
2147
  /* @__PURE__ */ jsxRuntime.jsxs("dl", { className: "grid grid-cols-2 gap-3 text-xs text-slate-500 dark:text-slate-400", children: [
2148
2148
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -2312,7 +2312,7 @@ function RuleConditionBuilder({ value, onChange, depth = 0 }) {
2312
2312
  };
2313
2313
  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: [
2314
2314
  /* @__PURE__ */ jsxRuntime.jsx(
2315
- chunkZKUYNCAG_js.FormSelect,
2315
+ chunkI2NZGVBG_js.FormSelect,
2316
2316
  {
2317
2317
  label: "Operator",
2318
2318
  value: value.operator,
@@ -2335,17 +2335,17 @@ function SimpleEditor({
2335
2335
  const isTruthy = value.operator === "truthy";
2336
2336
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2337
2337
  /* @__PURE__ */ jsxRuntime.jsx(
2338
- chunkZKUYNCAG_js.FormInput,
2338
+ chunkI2NZGVBG_js.FormInput,
2339
2339
  {
2340
2340
  label: "Field",
2341
- hint: "Dotted reference into the variable pool \u2014 e.g. `parse-pricing.margin`, `inputs.fuelType`",
2341
+ hint: "Dotted reference into the variable pool \u2014 e.g. `parse-pricing.margin`, `inputs.category`",
2342
2342
  value: value.field ?? "",
2343
2343
  onValueChange: (field) => onChange({ ...value, field }),
2344
2344
  placeholder: "node.path"
2345
2345
  }
2346
2346
  ),
2347
2347
  !isTruthy && /* @__PURE__ */ jsxRuntime.jsx(
2348
- chunkZKUYNCAG_js.FormInput,
2348
+ chunkI2NZGVBG_js.FormInput,
2349
2349
  {
2350
2350
  label: "Value",
2351
2351
  hint: "Literal. Numeric operators coerce via `as f64`.",
@@ -2361,7 +2361,7 @@ function ThresholdEditor({
2361
2361
  }) {
2362
2362
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-3", children: [
2363
2363
  /* @__PURE__ */ jsxRuntime.jsx(
2364
- chunkZKUYNCAG_js.FormInput,
2364
+ chunkI2NZGVBG_js.FormInput,
2365
2365
  {
2366
2366
  label: "Field",
2367
2367
  value: value.field ?? "",
@@ -2370,7 +2370,7 @@ function ThresholdEditor({
2370
2370
  }
2371
2371
  ),
2372
2372
  /* @__PURE__ */ jsxRuntime.jsx(
2373
- chunkZKUYNCAG_js.FormSelect,
2373
+ chunkI2NZGVBG_js.FormSelect,
2374
2374
  {
2375
2375
  label: "Direction",
2376
2376
  value: value.comparison ?? "gte",
@@ -2384,7 +2384,7 @@ function ThresholdEditor({
2384
2384
  }
2385
2385
  ),
2386
2386
  /* @__PURE__ */ jsxRuntime.jsx(
2387
- chunkZKUYNCAG_js.FormInput,
2387
+ chunkI2NZGVBG_js.FormInput,
2388
2388
  {
2389
2389
  label: "Threshold",
2390
2390
  type: "number",
@@ -2401,7 +2401,7 @@ function RegexEditor({
2401
2401
  }) {
2402
2402
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2403
2403
  /* @__PURE__ */ jsxRuntime.jsx(
2404
- chunkZKUYNCAG_js.FormInput,
2404
+ chunkI2NZGVBG_js.FormInput,
2405
2405
  {
2406
2406
  label: "Field",
2407
2407
  value: value.field ?? "",
@@ -2410,7 +2410,7 @@ function RegexEditor({
2410
2410
  }
2411
2411
  ),
2412
2412
  /* @__PURE__ */ jsxRuntime.jsx(
2413
- chunkZKUYNCAG_js.FormInput,
2413
+ chunkI2NZGVBG_js.FormInput,
2414
2414
  {
2415
2415
  label: "Pattern",
2416
2416
  hint: "Rust regex syntax \u2014 `(?i)` etc. supported.",
@@ -2438,7 +2438,7 @@ function TimeWindowEditor({
2438
2438
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2439
2439
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2440
2440
  /* @__PURE__ */ jsxRuntime.jsx(
2441
- chunkZKUYNCAG_js.FormSelect,
2441
+ chunkI2NZGVBG_js.FormSelect,
2442
2442
  {
2443
2443
  label: "Timezone",
2444
2444
  value: value.timezone ?? "UTC",
@@ -2447,7 +2447,7 @@ function TimeWindowEditor({
2447
2447
  }
2448
2448
  ),
2449
2449
  /* @__PURE__ */ jsxRuntime.jsx(
2450
- chunkZKUYNCAG_js.FormInput,
2450
+ chunkI2NZGVBG_js.FormInput,
2451
2451
  {
2452
2452
  label: "Timestamp field (optional)",
2453
2453
  hint: "Pulls a timestamp from the pool. Leave blank to use the run's wall-clock.",
@@ -2460,7 +2460,7 @@ function TimeWindowEditor({
2460
2460
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2461
2461
  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: [
2462
2462
  /* @__PURE__ */ jsxRuntime.jsx(
2463
- chunkZKUYNCAG_js.FormInput,
2463
+ chunkI2NZGVBG_js.FormInput,
2464
2464
  {
2465
2465
  label: `Start (hour)`,
2466
2466
  type: "number",
@@ -2471,7 +2471,7 @@ function TimeWindowEditor({
2471
2471
  }
2472
2472
  ),
2473
2473
  /* @__PURE__ */ jsxRuntime.jsx(
2474
- chunkZKUYNCAG_js.FormInput,
2474
+ chunkI2NZGVBG_js.FormInput,
2475
2475
  {
2476
2476
  label: `End (hour)`,
2477
2477
  type: "number",
@@ -2481,9 +2481,9 @@ function TimeWindowEditor({
2481
2481
  onValueChange: (raw) => update(index, { endHour: clampHour(raw, 24) })
2482
2482
  }
2483
2483
  ),
2484
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2484
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2485
2485
  ] }, index)),
2486
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add window" })
2486
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add window" })
2487
2487
  ] })
2488
2488
  ] });
2489
2489
  }
@@ -2506,7 +2506,7 @@ function BooleanGroupEditor({
2506
2506
  });
2507
2507
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
2508
2508
  /* @__PURE__ */ jsxRuntime.jsx(
2509
- chunkZKUYNCAG_js.FormSelect,
2509
+ chunkI2NZGVBG_js.FormSelect,
2510
2510
  {
2511
2511
  label: "Combinator",
2512
2512
  value: value.combinator ?? "and",
@@ -2524,9 +2524,9 @@ function BooleanGroupEditor({
2524
2524
  depth
2525
2525
  }
2526
2526
  ),
2527
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove operand" }) })
2527
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove operand" }) })
2528
2528
  ] }, index)),
2529
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add operand" })
2529
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add operand" })
2530
2530
  ] })
2531
2531
  ] });
2532
2532
  }
@@ -2562,7 +2562,7 @@ function RuleActionBuilder({ value, onChange }) {
2562
2562
  };
2563
2563
  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: [
2564
2564
  /* @__PURE__ */ jsxRuntime.jsx(
2565
- chunkZKUYNCAG_js.FormSelect,
2565
+ chunkI2NZGVBG_js.FormSelect,
2566
2566
  {
2567
2567
  label: "Action type",
2568
2568
  value: type,
@@ -2572,7 +2572,7 @@ function RuleActionBuilder({ value, onChange }) {
2572
2572
  ),
2573
2573
  type === "adjust_price" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2574
2574
  /* @__PURE__ */ jsxRuntime.jsx(
2575
- chunkZKUYNCAG_js.FormInput,
2575
+ chunkI2NZGVBG_js.FormInput,
2576
2576
  {
2577
2577
  label: "Multiplier",
2578
2578
  type: "number",
@@ -2582,7 +2582,7 @@ function RuleActionBuilder({ value, onChange }) {
2582
2582
  }
2583
2583
  ),
2584
2584
  /* @__PURE__ */ jsxRuntime.jsx(
2585
- chunkZKUYNCAG_js.FormInput,
2585
+ chunkI2NZGVBG_js.FormInput,
2586
2586
  {
2587
2587
  label: "Reason code",
2588
2588
  value: stringParam(params.reason),
@@ -2592,7 +2592,7 @@ function RuleActionBuilder({ value, onChange }) {
2592
2592
  )
2593
2593
  ] }),
2594
2594
  type === "enforce_min_margin" && /* @__PURE__ */ jsxRuntime.jsx(
2595
- chunkZKUYNCAG_js.FormInput,
2595
+ chunkI2NZGVBG_js.FormInput,
2596
2596
  {
2597
2597
  label: "Floor (fraction, e.g. 0.08)",
2598
2598
  type: "number",
@@ -2602,7 +2602,7 @@ function RuleActionBuilder({ value, onChange }) {
2602
2602
  }
2603
2603
  ),
2604
2604
  type === "realign_to_competitor" && /* @__PURE__ */ jsxRuntime.jsx(
2605
- chunkZKUYNCAG_js.FormInput,
2605
+ chunkI2NZGVBG_js.FormInput,
2606
2606
  {
2607
2607
  label: "Tolerance (fraction)",
2608
2608
  type: "number",
@@ -2612,7 +2612,7 @@ function RuleActionBuilder({ value, onChange }) {
2612
2612
  }
2613
2613
  ),
2614
2614
  type === "request_manager_approval" && /* @__PURE__ */ jsxRuntime.jsx(
2615
- chunkZKUYNCAG_js.FormInput,
2615
+ chunkI2NZGVBG_js.FormInput,
2616
2616
  {
2617
2617
  label: "Approval limit (fraction)",
2618
2618
  type: "number",
@@ -2622,7 +2622,7 @@ function RuleActionBuilder({ value, onChange }) {
2622
2622
  }
2623
2623
  ),
2624
2624
  type === "round_to" && /* @__PURE__ */ jsxRuntime.jsx(
2625
- chunkZKUYNCAG_js.FormInput,
2625
+ chunkI2NZGVBG_js.FormInput,
2626
2626
  {
2627
2627
  label: "Step (e.g. 0.009)",
2628
2628
  type: "number",
@@ -2633,7 +2633,7 @@ function RuleActionBuilder({ value, onChange }) {
2633
2633
  ),
2634
2634
  type === "alert" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2635
2635
  /* @__PURE__ */ jsxRuntime.jsx(
2636
- chunkZKUYNCAG_js.FormInput,
2636
+ chunkI2NZGVBG_js.FormInput,
2637
2637
  {
2638
2638
  label: "Channel",
2639
2639
  value: stringParam(params.channel),
@@ -2642,7 +2642,7 @@ function RuleActionBuilder({ value, onChange }) {
2642
2642
  }
2643
2643
  ),
2644
2644
  /* @__PURE__ */ jsxRuntime.jsx(
2645
- chunkZKUYNCAG_js.FormInput,
2645
+ chunkI2NZGVBG_js.FormInput,
2646
2646
  {
2647
2647
  label: "Severity",
2648
2648
  value: stringParam(params.severity),
@@ -2680,7 +2680,7 @@ function CustomParamsEditor({
2680
2680
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2681
2681
  entries.map(([key, value], index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[1fr_1fr_auto] items-end gap-2", children: [
2682
2682
  /* @__PURE__ */ jsxRuntime.jsx(
2683
- chunkZKUYNCAG_js.FormInput,
2683
+ chunkI2NZGVBG_js.FormInput,
2684
2684
  {
2685
2685
  label: "Key",
2686
2686
  value: key,
@@ -2688,16 +2688,16 @@ function CustomParamsEditor({
2688
2688
  }
2689
2689
  ),
2690
2690
  /* @__PURE__ */ jsxRuntime.jsx(
2691
- chunkZKUYNCAG_js.FormInput,
2691
+ chunkI2NZGVBG_js.FormInput,
2692
2692
  {
2693
2693
  label: "Value",
2694
2694
  value: String(value ?? ""),
2695
2695
  onValueChange: (raw) => update(index, key, raw)
2696
2696
  }
2697
2697
  ),
2698
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2698
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", plain: true, onClick: () => remove(index), children: "Remove" })
2699
2699
  ] }, index)),
2700
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add param" })
2700
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", outline: true, onClick: add, children: "+ Add param" })
2701
2701
  ] });
2702
2702
  }
2703
2703
  function numberParam(value, fallback) {
@@ -2727,9 +2727,9 @@ function RuleForm({ value, onChange }) {
2727
2727
  );
2728
2728
  const update = (key, v) => onChange({ ...value, [key]: v });
2729
2729
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
2730
- /* @__PURE__ */ jsxRuntime.jsxs(chunkZKUYNCAG_js.FormGrid, { children: [
2730
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkI2NZGVBG_js.FormGrid, { children: [
2731
2731
  /* @__PURE__ */ jsxRuntime.jsx(
2732
- chunkZKUYNCAG_js.FormInput,
2732
+ chunkI2NZGVBG_js.FormInput,
2733
2733
  {
2734
2734
  label: "Name",
2735
2735
  required: true,
@@ -2738,7 +2738,7 @@ function RuleForm({ value, onChange }) {
2738
2738
  }
2739
2739
  ),
2740
2740
  /* @__PURE__ */ jsxRuntime.jsx(
2741
- chunkZKUYNCAG_js.FormInput,
2741
+ chunkI2NZGVBG_js.FormInput,
2742
2742
  {
2743
2743
  label: "Priority",
2744
2744
  type: "number",
@@ -2748,7 +2748,7 @@ function RuleForm({ value, onChange }) {
2748
2748
  }
2749
2749
  ),
2750
2750
  /* @__PURE__ */ jsxRuntime.jsx(
2751
- chunkZKUYNCAG_js.FormSelect,
2751
+ chunkI2NZGVBG_js.FormSelect,
2752
2752
  {
2753
2753
  label: "Enabled",
2754
2754
  value: value.enabled ? "true" : "false",
@@ -2760,7 +2760,7 @@ function RuleForm({ value, onChange }) {
2760
2760
  }
2761
2761
  ),
2762
2762
  /* @__PURE__ */ jsxRuntime.jsx(
2763
- chunkZKUYNCAG_js.FormTextarea,
2763
+ chunkI2NZGVBG_js.FormTextarea,
2764
2764
  {
2765
2765
  label: "Description",
2766
2766
  rows: 2,
@@ -2772,7 +2772,7 @@ function RuleForm({ value, onChange }) {
2772
2772
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
2773
2773
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
2774
2774
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Condition" }),
2775
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Badge, { color: "indigo", children: value.condition.operator })
2775
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Badge, { color: "indigo", children: value.condition.operator })
2776
2776
  ] }),
2777
2777
  /* @__PURE__ */ jsxRuntime.jsx(
2778
2778
  RuleConditionBuilder,
@@ -2785,7 +2785,7 @@ function RuleForm({ value, onChange }) {
2785
2785
  /* @__PURE__ */ jsxRuntime.jsxs("section", { children: [
2786
2786
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
2787
2787
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-700 dark:text-slate-200", children: "Action on match" }),
2788
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Badge, { color: "fuchsia", children: value.action.type })
2788
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Badge, { color: "fuchsia", children: value.action.type })
2789
2789
  ] }),
2790
2790
  /* @__PURE__ */ jsxRuntime.jsx(
2791
2791
  RuleActionBuilder,
@@ -2807,7 +2807,7 @@ function RuleForm({ value, onChange }) {
2807
2807
  ),
2808
2808
  showAdvanced && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
2809
2809
  /* @__PURE__ */ jsxRuntime.jsx(
2810
- chunkZKUYNCAG_js.FormInput,
2810
+ chunkI2NZGVBG_js.FormInput,
2811
2811
  {
2812
2812
  label: "Valid from (ISO 8601)",
2813
2813
  type: "datetime-local",
@@ -2816,7 +2816,7 @@ function RuleForm({ value, onChange }) {
2816
2816
  }
2817
2817
  ),
2818
2818
  /* @__PURE__ */ jsxRuntime.jsx(
2819
- chunkZKUYNCAG_js.FormInput,
2819
+ chunkI2NZGVBG_js.FormInput,
2820
2820
  {
2821
2821
  label: "Valid until (ISO 8601)",
2822
2822
  type: "datetime-local",
@@ -2825,7 +2825,7 @@ function RuleForm({ value, onChange }) {
2825
2825
  }
2826
2826
  ),
2827
2827
  /* @__PURE__ */ jsxRuntime.jsx(
2828
- chunkZKUYNCAG_js.FormSelect,
2828
+ chunkI2NZGVBG_js.FormSelect,
2829
2829
  {
2830
2830
  label: "Status",
2831
2831
  value: value.status ?? "active",
@@ -2834,7 +2834,7 @@ function RuleForm({ value, onChange }) {
2834
2834
  }
2835
2835
  ),
2836
2836
  /* @__PURE__ */ jsxRuntime.jsx(
2837
- chunkZKUYNCAG_js.FormInput,
2837
+ chunkI2NZGVBG_js.FormInput,
2838
2838
  {
2839
2839
  label: "Tags (comma-separated)",
2840
2840
  value: (value.tags ?? []).join(", "),
@@ -3019,8 +3019,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
3019
3019
  ] });
3020
3020
  }
3021
3021
  function LogicNodeItemCard({ item, translationFunction }) {
3022
- const IconComponent = chunkNYQAEPC7_js.LOGIC_ICON_MAP[item.nodeType];
3023
- const gradient = chunkNYQAEPC7_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
3022
+ const IconComponent = chunkEFOXN3LC_js.LOGIC_ICON_MAP[item.nodeType];
3023
+ const gradient = chunkEFOXN3LC_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
3024
3024
  const defaultConfig = chunkC3H4FM4A_js.createDefaultLogicNodeConfig(item.nodeType);
3025
3025
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
3026
3026
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3091,7 +3091,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3091
3091
  [entityTypes, normalizedQuery]
3092
3092
  );
3093
3093
  const filteredLogicItems = react.useMemo(() => {
3094
- const visibleByDefault = LOGIC_NODE_ITEMS.filter((item) => !chunkNYQAEPC7_js.EXPERIMENTAL_NODE_TYPES.has(item.nodeType));
3094
+ const visibleByDefault = LOGIC_NODE_ITEMS.filter((item) => !chunkEFOXN3LC_js.EXPERIMENTAL_NODE_TYPES.has(item.nodeType));
3095
3095
  if (!normalizedQuery) return visibleByDefault;
3096
3096
  return visibleByDefault.filter(
3097
3097
  (item) => t(item.nameKey).toLowerCase().includes(normalizedQuery) || t(item.descriptionKey).toLowerCase().includes(normalizedQuery)
@@ -3188,7 +3188,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3188
3188
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[10px] text-gray-400 dark:text-gray-500", children: tool.category })
3189
3189
  ] }),
3190
3190
  /* @__PURE__ */ jsxRuntime.jsx(
3191
- chunkZKUYNCAG_js.ToggleSwitch,
3191
+ chunkI2NZGVBG_js.ToggleSwitch,
3192
3192
  {
3193
3193
  checked: Boolean(tool.enabled),
3194
3194
  onChange: () => {
@@ -3229,7 +3229,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3229
3229
  ] })
3230
3230
  ] }),
3231
3231
  /* @__PURE__ */ jsxRuntime.jsx(
3232
- chunkZKUYNCAG_js.ToggleSwitch,
3232
+ chunkI2NZGVBG_js.ToggleSwitch,
3233
3233
  {
3234
3234
  checked: Boolean(rule.enabled),
3235
3235
  onChange: () => {
@@ -3265,8 +3265,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3265
3265
  limit: entity.defaultLimit
3266
3266
  });
3267
3267
  const dsLogo = getDatasourceLogo(entity.id);
3268
- const EntityIcon = chunkNYQAEPC7_js.getEntityIcon(entity.id);
3269
- const entityGradient = chunkNYQAEPC7_js.getEntityGradient(entity.id);
3268
+ const EntityIcon = chunkEFOXN3LC_js.getEntityIcon(entity.id);
3269
+ const entityGradient = chunkEFOXN3LC_js.getEntityGradient(entity.id);
3270
3270
  return /* @__PURE__ */ jsxRuntime.jsxs(
3271
3271
  "div",
3272
3272
  {
@@ -3286,7 +3286,7 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], mod
3286
3286
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3287
3287
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-slate-100 px-1.5 py-0.5 text-[9px] font-medium text-slate-600 dark:bg-white/10 dark:text-slate-300", children: "Read only" }),
3288
3288
  /* @__PURE__ */ jsxRuntime.jsx(
3289
- chunkZKUYNCAG_js.ToggleSwitch,
3289
+ chunkI2NZGVBG_js.ToggleSwitch,
3290
3290
  {
3291
3291
  checked: true,
3292
3292
  onChange: () => {
@@ -3664,9 +3664,9 @@ function formatDuration3(durationMs) {
3664
3664
  }
3665
3665
  function RunPanel({ open, onClose, onRun, onStop }) {
3666
3666
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
3667
- const nodes = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodes);
3668
- const isRunning = chunkNYQAEPC7_js.useWorkflowStore((state) => state.isRunning);
3669
- const nodeResults = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodeResults);
3667
+ const nodes = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodes);
3668
+ const isRunning = chunkEFOXN3LC_js.useWorkflowStore((state) => state.isRunning);
3669
+ const nodeResults = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodeResults);
3670
3670
  const startNode = nodes.find((node) => node.type === "start");
3671
3671
  const hasEndNode = nodes.some((node) => node.type === "end");
3672
3672
  const hasValidStartConfig = Boolean(
@@ -3968,8 +3968,8 @@ function inferVariables(config, nodeType) {
3968
3968
  }
3969
3969
  function VariableInspector({ open, onClose }) {
3970
3970
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
3971
- const nodes = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodes);
3972
- const edges = chunkNYQAEPC7_js.useWorkflowStore((state) => state.edges);
3971
+ const nodes = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodes);
3972
+ const edges = chunkEFOXN3LC_js.useWorkflowStore((state) => state.edges);
3973
3973
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
3974
3974
  const toggleNodeExpansion = react.useCallback((nodeId) => {
3975
3975
  setExpandedNodes((current) => {
@@ -4031,8 +4031,8 @@ function VariableInspector({ open, onClose }) {
4031
4031
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
4032
4032
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
4033
4033
  const isExpanded = expandedNodes.has(entry.nodeId);
4034
- const IconComponent = chunkNYQAEPC7_js.LOGIC_ICON_MAP[entry.nodeType];
4035
- const gradient = chunkNYQAEPC7_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
4034
+ const IconComponent = chunkEFOXN3LC_js.LOGIC_ICON_MAP[entry.nodeType];
4035
+ const gradient = chunkEFOXN3LC_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
4036
4036
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
4037
4037
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
4038
4038
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -4098,7 +4098,7 @@ function RunInputDialog({
4098
4098
  onRun
4099
4099
  }) {
4100
4100
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
4101
- const nodes = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodes);
4101
+ const nodes = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodes);
4102
4102
  const [values, setValues] = react.useState({});
4103
4103
  const inputVariableNames = react.useMemo(() => {
4104
4104
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -4125,7 +4125,7 @@ function RunInputDialog({
4125
4125
  }, [onClose]);
4126
4126
  if (!open) return null;
4127
4127
  return /* @__PURE__ */ jsxRuntime.jsxs(
4128
- chunkZKUYNCAG_js.GlassModal,
4128
+ chunkI2NZGVBG_js.GlassModal,
4129
4129
  {
4130
4130
  open,
4131
4131
  onClose: handleClose,
@@ -4136,7 +4136,7 @@ function RunInputDialog({
4136
4136
  /* @__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: [
4137
4137
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: variableName }),
4138
4138
  /* @__PURE__ */ jsxRuntime.jsx(
4139
- chunkZKUYNCAG_js.Input,
4139
+ chunkI2NZGVBG_js.Input,
4140
4140
  {
4141
4141
  value: values[variableName] ?? "",
4142
4142
  onChange: (event) => handleValueChange(variableName, event.target.value),
@@ -4145,8 +4145,8 @@ function RunInputDialog({
4145
4145
  )
4146
4146
  ] }, variableName)) }),
4147
4147
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center justify-end gap-2", children: [
4148
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
4149
- /* @__PURE__ */ jsxRuntime.jsxs(chunkZKUYNCAG_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
4148
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
4149
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkI2NZGVBG_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
4150
4150
  /* @__PURE__ */ jsxRuntime.jsx(outline.PlayIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
4151
4151
  t("run")
4152
4152
  ] })
@@ -4179,8 +4179,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
4179
4179
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
4180
4180
  const [selectedRun, setSelectedRun] = react.useState(null);
4181
4181
  const [selectedNode, setSelectedNode] = react.useState(null);
4182
- const isRunning = chunkNYQAEPC7_js.useWorkflowStore((state) => state.isRunning);
4183
- const nodeResults = chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodeResults);
4182
+ const isRunning = chunkEFOXN3LC_js.useWorkflowStore((state) => state.isRunning);
4183
+ const nodeResults = chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodeResults);
4184
4184
  const refreshRuns = react.useCallback(async () => {
4185
4185
  setIsLoadingRuns(true);
4186
4186
  try {
@@ -4336,7 +4336,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4336
4336
  onAutoSaveGraph(graph);
4337
4337
  }, [onAutoSaveGraph, onGraphSnapshot]);
4338
4338
  return /* @__PURE__ */ jsxRuntime.jsx(
4339
- chunkNYQAEPC7_js.Workspace,
4339
+ chunkEFOXN3LC_js.Workspace,
4340
4340
  {
4341
4341
  ...workspaceProps,
4342
4342
  onGraphChange: handleGraphChange
@@ -4344,7 +4344,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
4344
4344
  );
4345
4345
  });
4346
4346
  function DynamicIslandConfirm2(props) {
4347
- return /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.DynamicIslandConfirm, { ...props });
4347
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.DynamicIslandConfirm, { ...props });
4348
4348
  }
4349
4349
  var JSON_PREVIEW_LINE_LIMIT = 50;
4350
4350
  function DslExportModal({ open, onClose, workflow, graph }) {
@@ -4398,7 +4398,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4398
4398
  }, [jsonString, workflow.name, workflow.version]);
4399
4399
  if (!open) return null;
4400
4400
  return /* @__PURE__ */ jsxRuntime.jsx(
4401
- chunkZKUYNCAG_js.GlassModal,
4401
+ chunkI2NZGVBG_js.GlassModal,
4402
4402
  {
4403
4403
  open,
4404
4404
  onClose,
@@ -4440,7 +4440,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4440
4440
  ] }),
4441
4441
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
4442
4442
  /* @__PURE__ */ jsxRuntime.jsx(
4443
- chunkZKUYNCAG_js.Button,
4443
+ chunkI2NZGVBG_js.Button,
4444
4444
  {
4445
4445
  type: "button",
4446
4446
  onClick: handleCopyToClipboard,
@@ -4457,7 +4457,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
4457
4457
  }
4458
4458
  ),
4459
4459
  /* @__PURE__ */ jsxRuntime.jsxs(
4460
- chunkZKUYNCAG_js.Button,
4460
+ chunkI2NZGVBG_js.Button,
4461
4461
  {
4462
4462
  type: "button",
4463
4463
  onClick: handleDownloadJson,
@@ -4616,7 +4616,7 @@ function DslImportModal({ open, onClose, onImport }) {
4616
4616
  }, []);
4617
4617
  if (!open) return null;
4618
4618
  return /* @__PURE__ */ jsxRuntime.jsx(
4619
- chunkZKUYNCAG_js.GlassModal,
4619
+ chunkI2NZGVBG_js.GlassModal,
4620
4620
  {
4621
4621
  open,
4622
4622
  onClose,
@@ -4656,7 +4656,7 @@ function DslImportModal({ open, onClose, onImport }) {
4656
4656
  ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "import-validation-result", children: [
4657
4657
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
4658
4658
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: fileName }),
4659
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
4659
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
4660
4660
  ] }),
4661
4661
  validationResult.isValid ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-900/20", children: [
4662
4662
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -4684,9 +4684,9 @@ function DslImportModal({ open, onClose, onImport }) {
4684
4684
  ] })
4685
4685
  ] }) }),
4686
4686
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
4687
- /* @__PURE__ */ jsxRuntime.jsx(chunkZKUYNCAG_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
4687
+ /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
4688
4688
  /* @__PURE__ */ jsxRuntime.jsxs(
4689
- chunkZKUYNCAG_js.Button,
4689
+ chunkI2NZGVBG_js.Button,
4690
4690
  {
4691
4691
  type: "button",
4692
4692
  onClick: handleImport,
@@ -4707,14 +4707,14 @@ function DslImportModal({ open, onClose, onImport }) {
4707
4707
  }
4708
4708
 
4709
4709
  // src/astrlabe/store/selectors.ts
4710
- var useCanUndo = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.past.length > 0);
4711
- var useCanRedo = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.future.length > 0);
4712
- var useHasCopied = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.clipboard !== null);
4713
- var useContextMenu = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.contextMenu);
4714
- var useEditingNodeId = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.editingNodeId);
4715
- var useSelectedNodeCount = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4716
- var useIsRunning = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.isRunning);
4717
- var useNodeResults = () => chunkNYQAEPC7_js.useWorkflowStore((state) => state.nodeResults);
4710
+ var useCanUndo = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.past.length > 0);
4711
+ var useCanRedo = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.future.length > 0);
4712
+ var useHasCopied = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.clipboard !== null);
4713
+ var useContextMenu = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.contextMenu);
4714
+ var useEditingNodeId = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.editingNodeId);
4715
+ var useSelectedNodeCount = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
4716
+ var useIsRunning = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.isRunning);
4717
+ var useNodeResults = () => chunkEFOXN3LC_js.useWorkflowStore((state) => state.nodeResults);
4718
4718
  var DEFAULT_MAX_HISTORY = 50;
4719
4719
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
4720
4720
  const pastRef = react.useRef([]);
@@ -5037,5 +5037,5 @@ exports.useNodeResults = useNodeResults;
5037
5037
  exports.useSelectedNodeCount = useSelectedNodeCount;
5038
5038
  exports.useSubworkflowStore = useSubworkflowStore;
5039
5039
  exports.useUndoRedo = useUndoRedo;
5040
- //# sourceMappingURL=chunk-FZTOP6EE.js.map
5041
- //# sourceMappingURL=chunk-FZTOP6EE.js.map
5040
+ //# sourceMappingURL=chunk-RL35XATZ.js.map
5041
+ //# sourceMappingURL=chunk-RL35XATZ.js.map