@datatechsolutions/ui 2.8.8 → 2.8.9

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 (76) hide show
  1. package/dist/{workflow → astrlabe}/graph-node.js +6 -6
  2. package/dist/{workflow → astrlabe}/graph-node.mjs +2 -2
  3. package/dist/{workflow → astrlabe}/index.d.mts +17 -4
  4. package/dist/{workflow → astrlabe}/index.d.ts +17 -4
  5. package/dist/{workflow → astrlabe}/index.js +139 -137
  6. package/dist/astrlabe/index.js.map +1 -0
  7. package/dist/{workflow → astrlabe}/index.mjs +13 -11
  8. package/dist/astrlabe/index.mjs.map +1 -0
  9. package/dist/{workflow → astrlabe}/utils.js +7 -7
  10. package/dist/{workflow → astrlabe}/utils.mjs +2 -2
  11. package/dist/{workflow → astrlabe}/workflow-canvas.d.mts +1 -1
  12. package/dist/{workflow → astrlabe}/workflow-canvas.d.ts +1 -1
  13. package/dist/{workflow → astrlabe}/workflow-canvas.js +6 -6
  14. package/dist/astrlabe/workflow-canvas.mjs +11 -0
  15. package/dist/{workflow → astrlabe}/workflow-preview-canvas.js.map +1 -1
  16. package/dist/{workflow → astrlabe}/workflow-preview-canvas.mjs.map +1 -1
  17. package/dist/{chunk-GXCWMPW5.js → chunk-2GTIYAXX.js} +3390 -670
  18. package/dist/chunk-2GTIYAXX.js.map +1 -0
  19. package/dist/{chunk-SHKRLL36.mjs → chunk-2X3BZNSE.mjs} +3234 -667
  20. package/dist/chunk-2X3BZNSE.mjs.map +1 -0
  21. package/dist/{chunk-E42PD4X6.js → chunk-3GE3MBUZ.js} +3 -3
  22. package/dist/{chunk-E42PD4X6.js.map → chunk-3GE3MBUZ.js.map} +1 -1
  23. package/dist/chunk-55H6WZQP.js +5 -0
  24. package/dist/{chunk-2HUN5ZXT.js.map → chunk-55H6WZQP.js.map} +1 -1
  25. package/dist/{chunk-BTJP5QCD.mjs → chunk-AM2TTPYM.mjs} +4 -4
  26. package/dist/{chunk-BTJP5QCD.mjs.map → chunk-AM2TTPYM.mjs.map} +1 -1
  27. package/dist/{chunk-55S2KOTZ.mjs → chunk-BLNXRUC4.mjs} +3 -3
  28. package/dist/{chunk-55S2KOTZ.mjs.map → chunk-BLNXRUC4.mjs.map} +1 -1
  29. package/dist/{chunk-ULPKAD4A.js → chunk-DFR6CMJH.js} +4 -4
  30. package/dist/{chunk-ULPKAD4A.js.map → chunk-DFR6CMJH.js.map} +1 -1
  31. package/dist/{chunk-D3INPADN.mjs → chunk-EOU3POSF.mjs} +422 -7
  32. package/dist/chunk-EOU3POSF.mjs.map +1 -0
  33. package/dist/chunk-JB6RNAD2.mjs +4 -0
  34. package/dist/{chunk-A3B3A43Y.mjs.map → chunk-JB6RNAD2.mjs.map} +1 -1
  35. package/dist/{chunk-UBCSCLUW.mjs → chunk-OZNTQROP.mjs} +3 -3
  36. package/dist/{chunk-UBCSCLUW.mjs.map → chunk-OZNTQROP.mjs.map} +1 -1
  37. package/dist/{chunk-NJ6PBGQM.js → chunk-P4YYEM4B.js} +3 -3
  38. package/dist/{chunk-NJ6PBGQM.js.map → chunk-P4YYEM4B.js.map} +1 -1
  39. package/dist/{chunk-Y2KJSGXS.js → chunk-ZN2F2VHX.js} +481 -66
  40. package/dist/chunk-ZN2F2VHX.js.map +1 -0
  41. package/dist/index.d.mts +342 -3
  42. package/dist/index.d.ts +342 -3
  43. package/dist/index.js +1194 -570
  44. package/dist/index.mjs +2 -2
  45. package/dist/{workflow-canvas-CVkbfTQu.d.ts → workflow-canvas-CGeuIgBQ.d.ts} +1 -1
  46. package/dist/{workflow-canvas-B3k03HVM.d.mts → workflow-canvas-at3LMbkg.d.mts} +1 -1
  47. package/package.json +25 -25
  48. package/dist/chunk-2HUN5ZXT.js +0 -5
  49. package/dist/chunk-A3B3A43Y.mjs +0 -4
  50. package/dist/chunk-D3INPADN.mjs.map +0 -1
  51. package/dist/chunk-GXCWMPW5.js.map +0 -1
  52. package/dist/chunk-SHKRLL36.mjs.map +0 -1
  53. package/dist/chunk-Y2KJSGXS.js.map +0 -1
  54. package/dist/workflow/index.js.map +0 -1
  55. package/dist/workflow/index.mjs.map +0 -1
  56. package/dist/workflow/workflow-canvas.mjs +0 -11
  57. /package/dist/{workflow → astrlabe}/contracts.d.mts +0 -0
  58. /package/dist/{workflow → astrlabe}/contracts.d.ts +0 -0
  59. /package/dist/{workflow → astrlabe}/contracts.js +0 -0
  60. /package/dist/{workflow → astrlabe}/contracts.js.map +0 -0
  61. /package/dist/{workflow → astrlabe}/contracts.mjs +0 -0
  62. /package/dist/{workflow → astrlabe}/contracts.mjs.map +0 -0
  63. /package/dist/{workflow → astrlabe}/graph-node.d.mts +0 -0
  64. /package/dist/{workflow → astrlabe}/graph-node.d.ts +0 -0
  65. /package/dist/{workflow → astrlabe}/graph-node.js.map +0 -0
  66. /package/dist/{workflow → astrlabe}/graph-node.mjs.map +0 -0
  67. /package/dist/{workflow → astrlabe}/utils.d.mts +0 -0
  68. /package/dist/{workflow → astrlabe}/utils.d.ts +0 -0
  69. /package/dist/{workflow → astrlabe}/utils.js.map +0 -0
  70. /package/dist/{workflow → astrlabe}/utils.mjs.map +0 -0
  71. /package/dist/{workflow → astrlabe}/workflow-canvas.js.map +0 -0
  72. /package/dist/{workflow → astrlabe}/workflow-canvas.mjs.map +0 -0
  73. /package/dist/{workflow → astrlabe}/workflow-preview-canvas.d.mts +0 -0
  74. /package/dist/{workflow → astrlabe}/workflow-preview-canvas.d.ts +0 -0
  75. /package/dist/{workflow → astrlabe}/workflow-preview-canvas.js +0 -0
  76. /package/dist/{workflow → astrlabe}/workflow-preview-canvas.mjs +0 -0
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkGXCWMPW5_js = require('./chunk-GXCWMPW5.js');
4
+ var chunk2GTIYAXX_js = require('./chunk-2GTIYAXX.js');
5
+ var chunkP4YYEM4B_js = require('./chunk-P4YYEM4B.js');
6
+ var chunkDFR6CMJH_js = require('./chunk-DFR6CMJH.js');
5
7
  var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
6
- var chunkNJ6PBGQM_js = require('./chunk-NJ6PBGQM.js');
7
- var chunkULPKAD4A_js = require('./chunk-ULPKAD4A.js');
8
8
  var react = require('react');
9
9
  var react$1 = require('@xyflow/react');
10
10
  require('@xyflow/react/dist/style.css');
@@ -1213,17 +1213,17 @@ function NodeInteractiveCard({
1213
1213
  );
1214
1214
  }
1215
1215
  function NodeIconBubble({ tone, children }) {
1216
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNJ6PBGQM_js.GraphNodeIconBubble, { className: `bg-gradient-to-br ${LOGIC_NODE_GRADIENTS[tone]}`, children });
1216
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP4YYEM4B_js.GraphNodeIconBubble, { className: `bg-gradient-to-br ${LOGIC_NODE_GRADIENTS[tone]}`, children });
1217
1217
  }
1218
1218
  function NodeCardHeader({ icon, title, description, compact = false, iconClassName }) {
1219
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNJ6PBGQM_js.GraphNodeHeader, { icon, title, description, compact, iconClassName });
1219
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP4YYEM4B_js.GraphNodeHeader, { icon, title, description, compact, iconClassName });
1220
1220
  }
1221
1221
  function NodeCardMeta({ compact = false, children }) {
1222
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNJ6PBGQM_js.GraphNodeMeta, { compact, children });
1222
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP4YYEM4B_js.GraphNodeMeta, { compact, children });
1223
1223
  }
1224
1224
  function NodeCardBadge({ children, className, tone, soft = false }) {
1225
1225
  const toneClass = tone ? soft ? LOGIC_NODE_BADGE_SOFT_COLORS[tone] : LOGIC_NODE_BADGE_COLORS[tone] : "";
1226
- return /* @__PURE__ */ jsxRuntime.jsx(chunkNJ6PBGQM_js.GraphNodeBadge, { className: className ?? `inline-flex items-center rounded-full px-2 py-0.5 text-[10px] ${soft ? "font-medium" : "font-semibold"} ${toneClass}`, children });
1226
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkP4YYEM4B_js.GraphNodeBadge, { className: className ?? `inline-flex items-center rounded-full px-2 py-0.5 text-[10px] ${soft ? "font-medium" : "font-semibold"} ${toneClass}`, children });
1227
1227
  }
1228
1228
  function NodeCardDeleteAction({ nodeId, onDelete }) {
1229
1229
  if (!onDelete) return null;
@@ -1369,7 +1369,7 @@ var AgentFlowNode = react.memo(function AgentFlowNode2({ id, data, selected }) {
1369
1369
  /* @__PURE__ */ jsxRuntime.jsx(NodeCardMeta, { compact: isCompact, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
1370
1370
  /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "rounded-full bg-indigo-100 px-2 py-0.5 text-[10px] font-semibold text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300", children: "Agent" }),
1371
1371
  (() => {
1372
- const tier = chunkULPKAD4A_js.getAgentTier(Number(data.agent.elo ?? 0));
1372
+ const tier = chunkDFR6CMJH_js.getAgentTier(Number(data.agent.elo ?? 0));
1373
1373
  return /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: `rounded-full px-2 py-0.5 text-[10px] font-bold ${tier.pillColor}`, children: tier.key });
1374
1374
  })(),
1375
1375
  /* @__PURE__ */ jsxRuntime.jsxs(NodeCardBadge, { className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${frameworkMeta.badgeColor}`, children: [
@@ -2635,6 +2635,83 @@ var NoteFlowNode = react.memo(function NoteFlowNode2({ data, selected }) {
2635
2635
  }
2636
2636
  );
2637
2637
  });
2638
+ var DatasourceFlowNode = react.memo(function DatasourceFlowNode2({ id, data, selected }) {
2639
+ const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
2640
+ const { config, label, onEdit, onRemoveFromCanvas } = data;
2641
+ const isCompact = data.displayMode === "compact";
2642
+ if (!config || config.type !== "datasource") {
2643
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2644
+ /* @__PURE__ */ jsxRuntime.jsx(NodeRunningIndicator, { nodeId: id }),
2645
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-400" }),
2646
+ /* @__PURE__ */ jsxRuntime.jsx(NodeCard, { variant: "error", nodeType: "datasource", children: /* @__PURE__ */ jsxRuntime.jsx(
2647
+ NodeCardHeader,
2648
+ {
2649
+ icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ExclamationTriangleIcon, { className: "h-5 w-5 text-white" }),
2650
+ title: label || t("datasourceNodeType"),
2651
+ description: t("datasourceNotConfigured"),
2652
+ iconClassName: "flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-400 to-orange-500 shadow-lg"
2653
+ }
2654
+ ) }),
2655
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-400" })
2656
+ ] });
2657
+ }
2658
+ const columnCount = config.selectedColumns?.length ?? 0;
2659
+ const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0;
2660
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2661
+ /* @__PURE__ */ jsxRuntime.jsx(NodeRunningIndicator, { nodeId: id }),
2662
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-400" }),
2663
+ /* @__PURE__ */ jsxRuntime.jsx(
2664
+ "button",
2665
+ {
2666
+ type: "button",
2667
+ onClick: () => onEdit?.(id),
2668
+ className: "w-full text-left",
2669
+ children: /* @__PURE__ */ jsxRuntime.jsxs(NodeCard, { compact: isCompact, selected, nodeType: "datasource", children: [
2670
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
2671
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-cyan-500 to-blue-600 shadow-lg", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ServerStackIcon, { className: "h-5 w-5 text-white" }) }),
2672
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
2673
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-gray-900 dark:text-white", children: label }),
2674
+ !isCompact && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: config.table ?? config.datasourceId })
2675
+ ] })
2676
+ ] }),
2677
+ /* @__PURE__ */ jsxRuntime.jsxs(NodeCardMeta, { compact: isCompact, children: [
2678
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2679
+ config.dialect && /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-semibold bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300", children: config.dialect }),
2680
+ config.table && /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300", children: config.table }),
2681
+ columnCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2682
+ columnCount,
2683
+ " ",
2684
+ t("datasourceColumns")
2685
+ ] }),
2686
+ config.limit > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: t("datasourceLimit", { count: config.limit }) }),
2687
+ filterCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2688
+ filterCount,
2689
+ " ",
2690
+ t("datasourceFilters")
2691
+ ] })
2692
+ ] }),
2693
+ onRemoveFromCanvas && /* @__PURE__ */ jsxRuntime.jsx(
2694
+ "span",
2695
+ {
2696
+ role: "button",
2697
+ tabIndex: 0,
2698
+ onClick: (event) => {
2699
+ event.stopPropagation();
2700
+ event.preventDefault();
2701
+ onRemoveFromCanvas(id);
2702
+ },
2703
+ className: "nodrag nopan cursor-pointer rounded-lg p-1 opacity-0 transition hover:bg-red-50 group-hover:opacity-100 dark:hover:bg-red-900/20",
2704
+ "aria-label": t("removeFromCanvas"),
2705
+ children: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" })
2706
+ }
2707
+ )
2708
+ ] })
2709
+ ] })
2710
+ }
2711
+ ),
2712
+ /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-400" })
2713
+ ] });
2714
+ });
2638
2715
  var GROUP_COLORS = {
2639
2716
  indigo: {
2640
2717
  border: "border-indigo-300/50 dark:border-indigo-600/50",
@@ -2825,7 +2902,7 @@ function WorkspaceDrawer({
2825
2902
  children
2826
2903
  }) {
2827
2904
  return /* @__PURE__ */ jsxRuntime.jsx(
2828
- chunkGXCWMPW5_js.EntityDrawer,
2905
+ chunk2GTIYAXX_js.EntityDrawer,
2829
2906
  {
2830
2907
  open,
2831
2908
  onClose,
@@ -2868,7 +2945,7 @@ function StartNodeConfigForm({ config, onSave, onCancel }) {
2868
2945
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("inputVariablesHelp") }),
2869
2946
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
2870
2947
  /* @__PURE__ */ jsxRuntime.jsx(
2871
- chunkGXCWMPW5_js.Input,
2948
+ chunk2GTIYAXX_js.Input,
2872
2949
  {
2873
2950
  value: newVariable,
2874
2951
  onChange: (event) => setNewVariable(event.target.value),
@@ -2878,7 +2955,7 @@ function StartNodeConfigForm({ config, onSave, onCancel }) {
2878
2955
  }
2879
2956
  ),
2880
2957
  /* @__PURE__ */ jsxRuntime.jsx(
2881
- chunkGXCWMPW5_js.Button,
2958
+ chunk2GTIYAXX_js.Button,
2882
2959
  {
2883
2960
  type: "button",
2884
2961
  onClick: handleAddVariable,
@@ -2895,7 +2972,7 @@ function StartNodeConfigForm({ config, onSave, onCancel }) {
2895
2972
  children: [
2896
2973
  variable,
2897
2974
  /* @__PURE__ */ jsxRuntime.jsx(
2898
- chunkGXCWMPW5_js.IconButton,
2975
+ chunk2GTIYAXX_js.IconButton,
2899
2976
  {
2900
2977
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.XMarkIcon, { className: "h-3 w-3" }),
2901
2978
  label: `Remove ${variable}`,
@@ -2912,7 +2989,7 @@ function StartNodeConfigForm({ config, onSave, onCancel }) {
2912
2989
  ] }),
2913
2990
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
2914
2991
  /* @__PURE__ */ jsxRuntime.jsx(
2915
- chunkGXCWMPW5_js.Button,
2992
+ chunk2GTIYAXX_js.Button,
2916
2993
  {
2917
2994
  type: "button",
2918
2995
  onClick: onCancel,
@@ -2922,7 +2999,7 @@ function StartNodeConfigForm({ config, onSave, onCancel }) {
2922
2999
  }
2923
3000
  ),
2924
3001
  /* @__PURE__ */ jsxRuntime.jsx(
2925
- chunkGXCWMPW5_js.Button,
3002
+ chunk2GTIYAXX_js.Button,
2926
3003
  {
2927
3004
  type: "button",
2928
3005
  onClick: handleSave,
@@ -3034,8 +3111,8 @@ function ConfigFormActions({
3034
3111
  saveDisabled = false
3035
3112
  }) {
3036
3113
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
3037
- /* @__PURE__ */ jsxRuntime.jsx(chunkGXCWMPW5_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3038
- /* @__PURE__ */ jsxRuntime.jsx(chunkGXCWMPW5_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3114
+ /* @__PURE__ */ jsxRuntime.jsx(chunk2GTIYAXX_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3115
+ /* @__PURE__ */ jsxRuntime.jsx(chunk2GTIYAXX_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3039
3116
  ] });
3040
3117
  }
3041
3118
  var OPERATOR_OPTIONS = [
@@ -3084,7 +3161,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3084
3161
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
3085
3162
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("conditionsLabel") }),
3086
3163
  /* @__PURE__ */ jsxRuntime.jsx(
3087
- chunkGXCWMPW5_js.Button,
3164
+ chunk2GTIYAXX_js.Button,
3088
3165
  {
3089
3166
  type: "button",
3090
3167
  onClick: handleAddCondition,
@@ -3095,7 +3172,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3095
3172
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: conditions.map((condition, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-2 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50", children: [
3096
3173
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 grid-cols-3 gap-2", children: [
3097
3174
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3098
- chunkGXCWMPW5_js.FormInput,
3175
+ chunk2GTIYAXX_js.FormInput,
3099
3176
  {
3100
3177
  type: "text",
3101
3178
  label: t("variableLabel"),
@@ -3106,7 +3183,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3106
3183
  }
3107
3184
  ) }),
3108
3185
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3109
- chunkGXCWMPW5_js.FormSelect,
3186
+ chunk2GTIYAXX_js.FormSelect,
3110
3187
  {
3111
3188
  label: t("operatorLabel"),
3112
3189
  value: condition.operator,
@@ -3116,7 +3193,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3116
3193
  }
3117
3194
  ) }),
3118
3195
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3119
- chunkGXCWMPW5_js.FormInput,
3196
+ chunk2GTIYAXX_js.FormInput,
3120
3197
  {
3121
3198
  type: "text",
3122
3199
  label: t("valueLabel"),
@@ -3128,7 +3205,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3128
3205
  ) })
3129
3206
  ] }),
3130
3207
  conditions.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
3131
- chunkGXCWMPW5_js.IconButton,
3208
+ chunk2GTIYAXX_js.IconButton,
3132
3209
  {
3133
3210
  onClick: () => handleRemoveCondition(index),
3134
3211
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3283,7 +3360,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3283
3360
  };
3284
3361
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3285
3362
  /* @__PURE__ */ jsxRuntime.jsx(
3286
- chunkGXCWMPW5_js.FormSelect,
3363
+ chunk2GTIYAXX_js.FormSelect,
3287
3364
  {
3288
3365
  label: t("methodLabel"),
3289
3366
  value: method,
@@ -3292,7 +3369,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3292
3369
  }
3293
3370
  ),
3294
3371
  /* @__PURE__ */ jsxRuntime.jsx(
3295
- chunkGXCWMPW5_js.FormInput,
3372
+ chunk2GTIYAXX_js.FormInput,
3296
3373
  {
3297
3374
  type: "text",
3298
3375
  label: t("urlLabel"),
@@ -3305,7 +3382,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3305
3382
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
3306
3383
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("headersLabel") }),
3307
3384
  /* @__PURE__ */ jsxRuntime.jsx(
3308
- chunkGXCWMPW5_js.Button,
3385
+ chunk2GTIYAXX_js.Button,
3309
3386
  {
3310
3387
  type: "button",
3311
3388
  onClick: handleAddHeader,
@@ -3315,7 +3392,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3315
3392
  ] }),
3316
3393
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: headerEntries.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3317
3394
  /* @__PURE__ */ jsxRuntime.jsx(
3318
- chunkGXCWMPW5_js.FormInput,
3395
+ chunk2GTIYAXX_js.FormInput,
3319
3396
  {
3320
3397
  type: "text",
3321
3398
  value: entry.key,
@@ -3325,7 +3402,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3325
3402
  }
3326
3403
  ),
3327
3404
  /* @__PURE__ */ jsxRuntime.jsx(
3328
- chunkGXCWMPW5_js.FormInput,
3405
+ chunk2GTIYAXX_js.FormInput,
3329
3406
  {
3330
3407
  type: "text",
3331
3408
  value: entry.value,
@@ -3335,7 +3412,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3335
3412
  }
3336
3413
  ),
3337
3414
  /* @__PURE__ */ jsxRuntime.jsx(
3338
- chunkGXCWMPW5_js.IconButton,
3415
+ chunk2GTIYAXX_js.IconButton,
3339
3416
  {
3340
3417
  onClick: () => handleRemoveHeader(index),
3341
3418
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3347,7 +3424,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3347
3424
  ] }, index)) })
3348
3425
  ] }),
3349
3426
  method !== "GET" && /* @__PURE__ */ jsxRuntime.jsx(
3350
- chunkGXCWMPW5_js.FormTextarea,
3427
+ chunk2GTIYAXX_js.FormTextarea,
3351
3428
  {
3352
3429
  label: t("bodyLabel"),
3353
3430
  value: body,
@@ -3358,7 +3435,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3358
3435
  }
3359
3436
  ),
3360
3437
  /* @__PURE__ */ jsxRuntime.jsx(
3361
- chunkGXCWMPW5_js.FormInput,
3438
+ chunk2GTIYAXX_js.FormInput,
3362
3439
  {
3363
3440
  type: "number",
3364
3441
  label: t("timeoutLabel"),
@@ -3389,7 +3466,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3389
3466
  };
3390
3467
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3391
3468
  /* @__PURE__ */ jsxRuntime.jsx(
3392
- chunkGXCWMPW5_js.FormTextarea,
3469
+ chunk2GTIYAXX_js.FormTextarea,
3393
3470
  {
3394
3471
  label: t("templateLabel"),
3395
3472
  value: template,
@@ -3400,7 +3477,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3400
3477
  }
3401
3478
  ),
3402
3479
  /* @__PURE__ */ jsxRuntime.jsx(
3403
- chunkGXCWMPW5_js.FormInput,
3480
+ chunk2GTIYAXX_js.FormInput,
3404
3481
  {
3405
3482
  type: "text",
3406
3483
  label: t("outputVariableLabel"),
@@ -3429,7 +3506,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3429
3506
  };
3430
3507
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3431
3508
  /* @__PURE__ */ jsxRuntime.jsx(
3432
- chunkGXCWMPW5_js.FormInput,
3509
+ chunk2GTIYAXX_js.FormInput,
3433
3510
  {
3434
3511
  type: "text",
3435
3512
  label: t("iteratorVariableLabel"),
@@ -3439,7 +3516,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3439
3516
  }
3440
3517
  ),
3441
3518
  /* @__PURE__ */ jsxRuntime.jsx(
3442
- chunkGXCWMPW5_js.FormInput,
3519
+ chunk2GTIYAXX_js.FormInput,
3443
3520
  {
3444
3521
  type: "number",
3445
3522
  label: t("maxIterationsLabel"),
@@ -3470,7 +3547,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3470
3547
  };
3471
3548
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3472
3549
  /* @__PURE__ */ jsxRuntime.jsx(
3473
- chunkGXCWMPW5_js.FormInput,
3550
+ chunk2GTIYAXX_js.FormInput,
3474
3551
  {
3475
3552
  type: "text",
3476
3553
  label: t("sourceIdLabel"),
@@ -3480,7 +3557,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3480
3557
  }
3481
3558
  ),
3482
3559
  /* @__PURE__ */ jsxRuntime.jsx(
3483
- chunkGXCWMPW5_js.FormInput,
3560
+ chunk2GTIYAXX_js.FormInput,
3484
3561
  {
3485
3562
  type: "number",
3486
3563
  label: t("topKLabel"),
@@ -3491,7 +3568,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3491
3568
  }
3492
3569
  ),
3493
3570
  /* @__PURE__ */ jsxRuntime.jsx(
3494
- chunkGXCWMPW5_js.FormInput,
3571
+ chunk2GTIYAXX_js.FormInput,
3495
3572
  {
3496
3573
  type: "number",
3497
3574
  label: t("similarityThresholdLabel"),
@@ -3539,7 +3616,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3539
3616
  };
3540
3617
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3541
3618
  /* @__PURE__ */ jsxRuntime.jsx(
3542
- chunkGXCWMPW5_js.FormTextarea,
3619
+ chunk2GTIYAXX_js.FormTextarea,
3543
3620
  {
3544
3621
  label: t("outputTemplateLabel"),
3545
3622
  hint: t("outputTemplateHelp"),
@@ -3554,7 +3631,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3554
3631
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("outputVariablesLabel") }),
3555
3632
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
3556
3633
  /* @__PURE__ */ jsxRuntime.jsx(
3557
- chunkGXCWMPW5_js.FormInput,
3634
+ chunk2GTIYAXX_js.FormInput,
3558
3635
  {
3559
3636
  type: "text",
3560
3637
  value: newVariable,
@@ -3565,7 +3642,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3565
3642
  }
3566
3643
  ),
3567
3644
  /* @__PURE__ */ jsxRuntime.jsx(
3568
- chunkGXCWMPW5_js.Button,
3645
+ chunk2GTIYAXX_js.Button,
3569
3646
  {
3570
3647
  type: "button",
3571
3648
  onClick: handleAddVariable,
@@ -3580,7 +3657,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3580
3657
  children: [
3581
3658
  variable,
3582
3659
  /* @__PURE__ */ jsxRuntime.jsx(
3583
- chunkGXCWMPW5_js.IconButton,
3660
+ chunk2GTIYAXX_js.IconButton,
3584
3661
  {
3585
3662
  onClick: () => handleRemoveVariable(variable),
3586
3663
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.XMarkIcon, { className: "h-3 w-3" }),
@@ -4016,7 +4093,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4016
4093
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("inputVariablesLabel") }),
4017
4094
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
4018
4095
  /* @__PURE__ */ jsxRuntime.jsx(
4019
- chunkGXCWMPW5_js.FormInput,
4096
+ chunk2GTIYAXX_js.FormInput,
4020
4097
  {
4021
4098
  type: "text",
4022
4099
  value: newVariable,
@@ -4027,7 +4104,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4027
4104
  }
4028
4105
  ),
4029
4106
  /* @__PURE__ */ jsxRuntime.jsx(
4030
- chunkGXCWMPW5_js.Button,
4107
+ chunk2GTIYAXX_js.Button,
4031
4108
  {
4032
4109
  type: "button",
4033
4110
  onClick: handleAddVariable,
@@ -4035,10 +4112,10 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4035
4112
  }
4036
4113
  )
4037
4114
  ] }),
4038
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 space-y-2", children: inputVariables.map((variable, index) => /* @__PURE__ */ jsxRuntime.jsx(chunkGXCWMPW5_js.Card, { className: "border-purple-200/70 dark:border-purple-500/30", children: /* @__PURE__ */ jsxRuntime.jsx(chunkGXCWMPW5_js.CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4115
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 space-y-2", children: inputVariables.map((variable, index) => /* @__PURE__ */ jsxRuntime.jsx(chunk2GTIYAXX_js.Card, { className: "border-purple-200/70 dark:border-purple-500/30", children: /* @__PURE__ */ jsxRuntime.jsx(chunk2GTIYAXX_js.CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4039
4116
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex min-w-6 items-center justify-center rounded-full bg-purple-100 px-1.5 py-0.5 text-[10px] font-semibold text-purple-700 dark:bg-purple-500/20 dark:text-purple-300", children: index + 1 }),
4040
4117
  /* @__PURE__ */ jsxRuntime.jsx(
4041
- chunkGXCWMPW5_js.FormInput,
4118
+ chunk2GTIYAXX_js.FormInput,
4042
4119
  {
4043
4120
  type: "text",
4044
4121
  value: variable,
@@ -4048,7 +4125,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4048
4125
  }
4049
4126
  ),
4050
4127
  /* @__PURE__ */ jsxRuntime.jsx(
4051
- chunkGXCWMPW5_js.IconButton,
4128
+ chunk2GTIYAXX_js.IconButton,
4052
4129
  {
4053
4130
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.XMarkIcon, { className: "h-3 w-3" }),
4054
4131
  label: `Remove ${variable || index + 1}`,
@@ -4060,7 +4137,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4060
4137
  ] }) }) }, `${index}-${variable}`)) })
4061
4138
  ] }),
4062
4139
  /* @__PURE__ */ jsxRuntime.jsx(
4063
- chunkGXCWMPW5_js.FormInput,
4140
+ chunk2GTIYAXX_js.FormInput,
4064
4141
  {
4065
4142
  type: "text",
4066
4143
  label: t("outputVariableLabel"),
@@ -4070,7 +4147,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4070
4147
  }
4071
4148
  ),
4072
4149
  /* @__PURE__ */ jsxRuntime.jsx(
4073
- chunkGXCWMPW5_js.FormSelect,
4150
+ chunk2GTIYAXX_js.FormSelect,
4074
4151
  {
4075
4152
  label: t("aggregationModeLabel"),
4076
4153
  value: aggregationMode,
@@ -4103,7 +4180,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4103
4180
  };
4104
4181
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4105
4182
  /* @__PURE__ */ jsxRuntime.jsx(
4106
- chunkGXCWMPW5_js.FormSelect,
4183
+ chunk2GTIYAXX_js.FormSelect,
4107
4184
  {
4108
4185
  label: t("extractionModeLabel"),
4109
4186
  value: extractionMode,
@@ -4112,7 +4189,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4112
4189
  }
4113
4190
  ),
4114
4191
  /* @__PURE__ */ jsxRuntime.jsx(
4115
- chunkGXCWMPW5_js.FormInput,
4192
+ chunk2GTIYAXX_js.FormInput,
4116
4193
  {
4117
4194
  type: "text",
4118
4195
  label: t("outputVariableLabel"),
@@ -4289,7 +4366,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4289
4366
  };
4290
4367
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4291
4368
  /* @__PURE__ */ jsxRuntime.jsx(
4292
- chunkGXCWMPW5_js.FormInput,
4369
+ chunk2GTIYAXX_js.FormInput,
4293
4370
  {
4294
4371
  type: "text",
4295
4372
  label: t("iteratorVariableLabel"),
@@ -4299,7 +4376,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4299
4376
  }
4300
4377
  ),
4301
4378
  /* @__PURE__ */ jsxRuntime.jsx(
4302
- chunkGXCWMPW5_js.FormInput,
4379
+ chunk2GTIYAXX_js.FormInput,
4303
4380
  {
4304
4381
  type: "text",
4305
4382
  label: t("itemVariableLabel"),
@@ -4309,7 +4386,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4309
4386
  }
4310
4387
  ),
4311
4388
  /* @__PURE__ */ jsxRuntime.jsx(
4312
- chunkGXCWMPW5_js.FormInput,
4389
+ chunk2GTIYAXX_js.FormInput,
4313
4390
  {
4314
4391
  type: "text",
4315
4392
  label: t("indexVariableLabel"),
@@ -4557,6 +4634,328 @@ function EntityNodeConfigForm({ config, entities = [], onSave, onCancel }) {
4557
4634
  ] })
4558
4635
  ] });
4559
4636
  }
4637
+ var COLUMN_TYPE_BADGE_COLORS = {
4638
+ string: "bg-gray-100 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300",
4639
+ varchar: "bg-gray-100 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300",
4640
+ text: "bg-gray-100 text-gray-600 dark:bg-gray-500/20 dark:text-gray-300",
4641
+ integer: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4642
+ int: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4643
+ bigint: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4644
+ number: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4645
+ decimal: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4646
+ float: "bg-blue-100 text-blue-600 dark:bg-blue-500/20 dark:text-blue-300",
4647
+ boolean: "bg-green-100 text-green-600 dark:bg-green-500/20 dark:text-green-300",
4648
+ date: "bg-amber-100 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300",
4649
+ timestamp: "bg-amber-100 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300",
4650
+ datetime: "bg-amber-100 text-amber-600 dark:bg-amber-500/20 dark:text-amber-300",
4651
+ json: "bg-purple-100 text-purple-600 dark:bg-purple-500/20 dark:text-purple-300",
4652
+ jsonb: "bg-purple-100 text-purple-600 dark:bg-purple-500/20 dark:text-purple-300",
4653
+ uuid: "bg-teal-100 text-teal-600 dark:bg-teal-500/20 dark:text-teal-300"
4654
+ };
4655
+ function DatasourceNodeConfigForm({
4656
+ nodeId,
4657
+ config,
4658
+ onSave,
4659
+ onCancel,
4660
+ datasources,
4661
+ onLoadTables,
4662
+ onLoadSchema
4663
+ }) {
4664
+ const t = chunkYXN2K77G_js.useTranslations("agents.workflow.datasourceNodeConfig");
4665
+ const [selectedDatasourceId, setSelectedDatasourceId] = react.useState(config.datasourceId ?? "");
4666
+ const [selectedTable, setSelectedTable] = react.useState(config.table ?? "");
4667
+ const [availableTables, setAvailableTables] = react.useState([]);
4668
+ const [availableColumns, setAvailableColumns] = react.useState([]);
4669
+ const [selectedColumns, setSelectedColumns] = react.useState([...config.selectedColumns]);
4670
+ const [outputVariable, setOutputVariable] = react.useState(config.outputVariable);
4671
+ const [limit, setLimit] = react.useState(config.limit);
4672
+ const [filterVariables, setFilterVariables] = react.useState({ ...config.filterVariables });
4673
+ const allColumnNames = availableColumns.map((column) => column.name);
4674
+ const allSelected = selectedColumns.length > 0 && selectedColumns.length === allColumnNames.length;
4675
+ const selectedDatasource = datasources.find((datasource) => datasource.id === selectedDatasourceId);
4676
+ const loadTables = react.useCallback(async (datasourceId) => {
4677
+ if (!datasourceId) {
4678
+ setAvailableTables([]);
4679
+ return;
4680
+ }
4681
+ const tables = await onLoadTables(datasourceId);
4682
+ setAvailableTables(tables);
4683
+ }, [onLoadTables]);
4684
+ const loadSchema = react.useCallback(async (datasourceId, table) => {
4685
+ if (!datasourceId || !table) {
4686
+ setAvailableColumns([]);
4687
+ return;
4688
+ }
4689
+ const columns = await onLoadSchema(datasourceId, table);
4690
+ setAvailableColumns(columns);
4691
+ }, [onLoadSchema]);
4692
+ react.useEffect(() => {
4693
+ if (selectedDatasourceId) {
4694
+ loadTables(selectedDatasourceId);
4695
+ }
4696
+ }, [selectedDatasourceId, loadTables]);
4697
+ react.useEffect(() => {
4698
+ if (selectedDatasourceId && selectedTable) {
4699
+ loadSchema(selectedDatasourceId, selectedTable);
4700
+ }
4701
+ }, [selectedDatasourceId, selectedTable, loadSchema]);
4702
+ const handleDatasourceChange = (datasourceId) => {
4703
+ setSelectedDatasourceId(datasourceId);
4704
+ setSelectedTable("");
4705
+ setAvailableTables([]);
4706
+ setAvailableColumns([]);
4707
+ setSelectedColumns([]);
4708
+ setFilterVariables({});
4709
+ };
4710
+ const handleTableChange = (table) => {
4711
+ setSelectedTable(table);
4712
+ setAvailableColumns([]);
4713
+ setSelectedColumns([]);
4714
+ setFilterVariables({});
4715
+ };
4716
+ const handleToggleSelectAll = () => {
4717
+ if (allSelected) {
4718
+ setSelectedColumns([]);
4719
+ } else {
4720
+ setSelectedColumns([...allColumnNames]);
4721
+ }
4722
+ };
4723
+ const handleToggleColumn = (columnName) => {
4724
+ setSelectedColumns(
4725
+ (previous) => previous.includes(columnName) ? previous.filter((name) => name !== columnName) : [...previous, columnName]
4726
+ );
4727
+ };
4728
+ const handleAddFilter = () => {
4729
+ setFilterVariables((previous) => ({ ...previous, "": "" }));
4730
+ };
4731
+ const handleUpdateFilterVariable = (oldKey, newKey) => {
4732
+ setFilterVariables((previous) => {
4733
+ const updated = { ...previous };
4734
+ const value = updated[oldKey] ?? "";
4735
+ delete updated[oldKey];
4736
+ updated[newKey] = value;
4737
+ return updated;
4738
+ });
4739
+ };
4740
+ const handleUpdateFilterField = (key, newValue) => {
4741
+ setFilterVariables((previous) => ({ ...previous, [key]: newValue }));
4742
+ };
4743
+ const handleRemoveFilter = (key) => {
4744
+ setFilterVariables((previous) => {
4745
+ const updated = { ...previous };
4746
+ delete updated[key];
4747
+ return updated;
4748
+ });
4749
+ };
4750
+ const handleSave = () => {
4751
+ const cleanedFilters = {};
4752
+ for (const [key, value] of Object.entries(filterVariables)) {
4753
+ if (key.trim() && value.trim()) {
4754
+ cleanedFilters[key.trim()] = value.trim();
4755
+ }
4756
+ }
4757
+ onSave({
4758
+ ...config,
4759
+ datasourceId: selectedDatasourceId,
4760
+ dialect: selectedDatasource?.dialect ?? "",
4761
+ table: selectedTable,
4762
+ selectedColumns,
4763
+ outputVariable: outputVariable.trim(),
4764
+ limit,
4765
+ filterVariables: cleanedFilters
4766
+ });
4767
+ };
4768
+ const filterEntries = Object.entries(filterVariables);
4769
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
4770
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4771
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("datasourceLabel") }),
4772
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("datasourceHelp") }),
4773
+ /* @__PURE__ */ jsxRuntime.jsxs(
4774
+ "select",
4775
+ {
4776
+ value: selectedDatasourceId,
4777
+ onChange: (event) => handleDatasourceChange(event.target.value),
4778
+ className: "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white",
4779
+ children: [
4780
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("selectDatasource") }),
4781
+ datasources.map((datasource) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: datasource.id, children: [
4782
+ datasource.name,
4783
+ " (",
4784
+ datasource.dialect,
4785
+ ")"
4786
+ ] }, datasource.id))
4787
+ ]
4788
+ }
4789
+ ),
4790
+ selectedDatasource && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300", children: selectedDatasource.dialect }) })
4791
+ ] }),
4792
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4793
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("tableLabel") }),
4794
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("tableHelp") }),
4795
+ /* @__PURE__ */ jsxRuntime.jsxs(
4796
+ "select",
4797
+ {
4798
+ value: selectedTable,
4799
+ onChange: (event) => handleTableChange(event.target.value),
4800
+ disabled: !selectedDatasourceId,
4801
+ className: "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-white",
4802
+ children: [
4803
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("selectTable") }),
4804
+ availableTables.map((table) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: table, children: table }, table))
4805
+ ]
4806
+ }
4807
+ )
4808
+ ] }),
4809
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4810
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("outputVariableLabel") }),
4811
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("outputVariableHelp") }),
4812
+ /* @__PURE__ */ jsxRuntime.jsx(
4813
+ "input",
4814
+ {
4815
+ type: "text",
4816
+ value: outputVariable,
4817
+ onChange: (event) => setOutputVariable(event.target.value),
4818
+ placeholder: "datasourceResult",
4819
+ className: "w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500"
4820
+ }
4821
+ )
4822
+ ] }),
4823
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4824
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300", children: t("limitLabel") }),
4825
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("limitHelp") }),
4826
+ /* @__PURE__ */ jsxRuntime.jsx(
4827
+ "input",
4828
+ {
4829
+ type: "number",
4830
+ value: limit,
4831
+ onChange: (event) => setLimit(Math.max(1, Number.parseInt(event.target.value, 10) || 1)),
4832
+ min: 1,
4833
+ max: 1e4,
4834
+ className: "w-32 rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm text-gray-900 outline-none focus:border-indigo-400 focus:ring-2 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white"
4835
+ }
4836
+ )
4837
+ ] }),
4838
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4839
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
4840
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("columnsLabel") }),
4841
+ /* @__PURE__ */ jsxRuntime.jsx(
4842
+ "button",
4843
+ {
4844
+ type: "button",
4845
+ onClick: handleToggleSelectAll,
4846
+ disabled: availableColumns.length === 0,
4847
+ className: "text-xs font-medium text-indigo-600 hover:text-indigo-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-indigo-400 dark:hover:text-indigo-300",
4848
+ children: allSelected ? t("deselectAll") : t("selectAll")
4849
+ }
4850
+ )
4851
+ ] }),
4852
+ selectedColumns.length === 0 && availableColumns.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-amber-600 dark:text-amber-400", children: t("noColumnsSelected") }),
4853
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-h-48 space-y-1 overflow-y-auto rounded-lg border border-gray-200 p-2 dark:border-gray-700", children: [
4854
+ availableColumns.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-2 py-2 text-xs text-gray-500 dark:text-gray-400", children: t("noColumnsAvailable") }),
4855
+ availableColumns.map((column) => {
4856
+ const isSelected = selectedColumns.includes(column.name);
4857
+ const typeBadgeColor = COLUMN_TYPE_BADGE_COLORS[column.type.toLowerCase()] ?? COLUMN_TYPE_BADGE_COLORS.string;
4858
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4859
+ "label",
4860
+ {
4861
+ className: `flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 transition-colors ${isSelected ? "bg-indigo-50 dark:bg-indigo-500/10" : "hover:bg-gray-50 dark:hover:bg-gray-800"}`,
4862
+ children: [
4863
+ /* @__PURE__ */ jsxRuntime.jsx(
4864
+ "input",
4865
+ {
4866
+ type: "checkbox",
4867
+ checked: isSelected,
4868
+ onChange: () => handleToggleColumn(column.name),
4869
+ className: "h-3.5 w-3.5 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 dark:border-gray-600"
4870
+ }
4871
+ ),
4872
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1 text-xs font-medium text-gray-900 dark:text-white", children: [
4873
+ column.name,
4874
+ column.nullable && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-[9px] text-gray-400 dark:text-gray-500", children: "?" })
4875
+ ] }),
4876
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `rounded-full px-1.5 py-0.5 text-[9px] font-medium ${typeBadgeColor}`, children: column.type })
4877
+ ]
4878
+ },
4879
+ column.name
4880
+ );
4881
+ })
4882
+ ] })
4883
+ ] }),
4884
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4885
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-1 flex items-center justify-between", children: [
4886
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("filtersLabel") }),
4887
+ /* @__PURE__ */ jsxRuntime.jsxs(
4888
+ "button",
4889
+ {
4890
+ type: "button",
4891
+ onClick: handleAddFilter,
4892
+ className: "flex items-center gap-1 text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300",
4893
+ children: [
4894
+ /* @__PURE__ */ jsxRuntime.jsx(outline.PlusIcon, { className: "h-3 w-3" }),
4895
+ t("addFilter")
4896
+ ]
4897
+ }
4898
+ )
4899
+ ] }),
4900
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-2 text-xs text-gray-500 dark:text-gray-400", children: t("filtersHelp") }),
4901
+ filterEntries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: filterEntries.map(([variableName, columnName], index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4902
+ /* @__PURE__ */ jsxRuntime.jsxs(
4903
+ "select",
4904
+ {
4905
+ value: columnName,
4906
+ onChange: (event) => handleUpdateFilterField(variableName, event.target.value),
4907
+ className: "flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white",
4908
+ children: [
4909
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: t("columnName") }),
4910
+ availableColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: column.name, children: column.name }, column.name))
4911
+ ]
4912
+ }
4913
+ ),
4914
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-gray-400", children: "=" }),
4915
+ /* @__PURE__ */ jsxRuntime.jsx(
4916
+ "input",
4917
+ {
4918
+ type: "text",
4919
+ value: variableName,
4920
+ onChange: (event) => handleUpdateFilterVariable(variableName, event.target.value),
4921
+ placeholder: t("variableReference"),
4922
+ className: "flex-1 rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-xs text-gray-900 placeholder-gray-400 outline-none focus:border-indigo-400 focus:ring-1 focus:ring-indigo-400/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder-gray-500"
4923
+ }
4924
+ ),
4925
+ /* @__PURE__ */ jsxRuntime.jsx(
4926
+ "button",
4927
+ {
4928
+ type: "button",
4929
+ onClick: () => handleRemoveFilter(variableName),
4930
+ className: "rounded-md p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20",
4931
+ children: /* @__PURE__ */ jsxRuntime.jsx(outline.XMarkIcon, { className: "h-3.5 w-3.5" })
4932
+ }
4933
+ )
4934
+ ] }, index)) })
4935
+ ] }),
4936
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
4937
+ /* @__PURE__ */ jsxRuntime.jsx(
4938
+ "button",
4939
+ {
4940
+ type: "button",
4941
+ onClick: onCancel,
4942
+ className: "rounded-lg border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800",
4943
+ children: t("cancel")
4944
+ }
4945
+ ),
4946
+ /* @__PURE__ */ jsxRuntime.jsx(
4947
+ "button",
4948
+ {
4949
+ type: "button",
4950
+ onClick: handleSave,
4951
+ disabled: !selectedDatasourceId || !selectedTable || selectedColumns.length === 0,
4952
+ className: "rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-indigo-500 dark:hover:bg-indigo-600",
4953
+ children: t("save")
4954
+ }
4955
+ )
4956
+ ] })
4957
+ ] });
4958
+ }
4560
4959
  var GROUP_COLOR_OPTIONS = [
4561
4960
  { value: "indigo", ring: "ring-indigo-500", fill: "bg-indigo-500" },
4562
4961
  { value: "teal", ring: "ring-teal-500", fill: "bg-teal-500" },
@@ -4581,7 +4980,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
4581
4980
  };
4582
4981
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4583
4982
  /* @__PURE__ */ jsxRuntime.jsx(
4584
- chunkGXCWMPW5_js.FormInput,
4983
+ chunk2GTIYAXX_js.FormInput,
4585
4984
  {
4586
4985
  type: "text",
4587
4986
  label: translations("labelField"),
@@ -4591,7 +4990,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
4591
4990
  }
4592
4991
  ),
4593
4992
  /* @__PURE__ */ jsxRuntime.jsx(
4594
- chunkGXCWMPW5_js.FormTextarea,
4993
+ chunk2GTIYAXX_js.FormTextarea,
4595
4994
  {
4596
4995
  label: translations("descriptionField"),
4597
4996
  value: description,
@@ -4643,9 +5042,10 @@ var NODE_TITLE_KEYS = {
4643
5042
  list_operator: "listOperatorNodeConfig",
4644
5043
  iteration_start: "iterationStartNodeConfig",
4645
5044
  entity: "entityNodeConfig",
5045
+ datasource: "datasourceNodeConfig",
4646
5046
  group: "groupNodeConfig"
4647
5047
  };
4648
- function LogicNodeDrawer({ onSave, entities = [] }) {
5048
+ function LogicNodeDrawer({ onSave, entities = [], datasources = [], onLoadTables, onLoadSchema }) {
4649
5049
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
4650
5050
  const activeDrawer = useDrawerStore((s) => s.activeDrawer);
4651
5051
  const logicNodeData = useDrawerStore((s) => s.logicNodeData);
@@ -4697,6 +5097,19 @@ function LogicNodeDrawer({ onSave, entities = [] }) {
4697
5097
  return /* @__PURE__ */ jsxRuntime.jsx(ListOperatorNodeConfigForm, { config, onSave: handleSave, onCancel: closeDrawer });
4698
5098
  case "iteration_start":
4699
5099
  return /* @__PURE__ */ jsxRuntime.jsx(IterationStartNodeConfigForm, { config, onSave: handleSave, onCancel: closeDrawer });
5100
+ case "datasource":
5101
+ return /* @__PURE__ */ jsxRuntime.jsx(
5102
+ DatasourceNodeConfigForm,
5103
+ {
5104
+ nodeId,
5105
+ config,
5106
+ onSave: handleSave,
5107
+ onCancel: closeDrawer,
5108
+ datasources,
5109
+ onLoadTables: onLoadTables ?? (async () => []),
5110
+ onLoadSchema: onLoadSchema ?? (async () => [])
5111
+ }
5112
+ );
4700
5113
  case "entity":
4701
5114
  return /* @__PURE__ */ jsxRuntime.jsx(EntityNodeConfigForm, { config, entities, onSave: handleSave, onCancel: closeDrawer });
4702
5115
  case "group":
@@ -4764,7 +5177,7 @@ function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onC
4764
5177
  }
4765
5178
  ];
4766
5179
  return /* @__PURE__ */ jsxRuntime.jsx(
4767
- chunkGXCWMPW5_js.ContextMenu,
5180
+ chunk2GTIYAXX_js.ContextMenu,
4768
5181
  {
4769
5182
  position,
4770
5183
  onClose,
@@ -4821,7 +5234,7 @@ function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView,
4821
5234
  }
4822
5235
  ];
4823
5236
  return /* @__PURE__ */ jsxRuntime.jsx(
4824
- chunkGXCWMPW5_js.ContextMenu,
5237
+ chunk2GTIYAXX_js.ContextMenu,
4825
5238
  {
4826
5239
  position,
4827
5240
  onClose,
@@ -4968,7 +5381,7 @@ function SelectionContextMenu({
4968
5381
  }
4969
5382
  ];
4970
5383
  return /* @__PURE__ */ jsxRuntime.jsx(
4971
- chunkGXCWMPW5_js.ContextMenu,
5384
+ chunk2GTIYAXX_js.ContextMenu,
4972
5385
  {
4973
5386
  position,
4974
5387
  onClose,
@@ -5068,6 +5481,7 @@ var BUILT_IN_NODE_TYPES = {
5068
5481
  list_operator: ListOperatorFlowNode,
5069
5482
  iteration_start: IterationStartFlowNode,
5070
5483
  note: NoteFlowNode,
5484
+ datasource: DatasourceFlowNode,
5071
5485
  group: GroupFlowNode
5072
5486
  };
5073
5487
  var ALL_LOGIC_NODE_TYPES = [
@@ -5092,6 +5506,7 @@ var ALL_LOGIC_NODE_TYPES = [
5092
5506
  "tool",
5093
5507
  "rule",
5094
5508
  "entity",
5509
+ "datasource",
5095
5510
  "group"
5096
5511
  ];
5097
5512
  function isLogicNodeType(nodeType) {
@@ -5398,7 +5813,7 @@ function WorkflowCanvasInner({
5398
5813
  };
5399
5814
  }
5400
5815
  if (isLogicNodeType(savedNode.type)) {
5401
- const config = savedNode.data.config ?? chunkULPKAD4A_js.createDefaultLogicNodeConfig(savedNode.type);
5816
+ const config = savedNode.data.config ?? chunkDFR6CMJH_js.createDefaultLogicNodeConfig(savedNode.type);
5402
5817
  if (config) {
5403
5818
  const baseNode = {
5404
5819
  id: savedNode.id,
@@ -5567,7 +5982,7 @@ function WorkflowCanvasInner({
5567
5982
  }
5568
5983
  storeTakeSnapshot();
5569
5984
  const isTB = direction === "TB";
5570
- const repositionedNodes = chunkULPKAD4A_js.applyDagreLayout(nodes, edges, direction).map((node) => ({
5985
+ const repositionedNodes = chunkDFR6CMJH_js.applyDagreLayout(nodes, edges, direction).map((node) => ({
5571
5986
  ...node,
5572
5987
  sourcePosition: isTB ? react$1.Position.Bottom : react$1.Position.Right,
5573
5988
  targetPosition: isTB ? react$1.Position.Top : react$1.Position.Left
@@ -5696,7 +6111,7 @@ function WorkflowCanvasInner({
5696
6111
  }, [storePaste]);
5697
6112
  const contextMenuAddNote = react.useCallback((flowPosition) => {
5698
6113
  storeTakeSnapshot();
5699
- const noteConfig = chunkULPKAD4A_js.createDefaultLogicNodeConfig("note");
6114
+ const noteConfig = chunkDFR6CMJH_js.createDefaultLogicNodeConfig("note");
5700
6115
  const noteNode = {
5701
6116
  id: crypto.randomUUID(),
5702
6117
  type: "note",
@@ -6199,7 +6614,7 @@ function WorkflowCanvasInner({
6199
6614
  };
6200
6615
  setNodes((currentNodes) => [...currentNodes, newNode]);
6201
6616
  } else if (nodeType === "group") {
6202
- const groupConfig = configRaw ? JSON.parse(configRaw) : chunkULPKAD4A_js.createDefaultLogicNodeConfig("group");
6617
+ const groupConfig = configRaw ? JSON.parse(configRaw) : chunkDFR6CMJH_js.createDefaultLogicNodeConfig("group");
6203
6618
  if (!groupConfig) return;
6204
6619
  const newNode = {
6205
6620
  id: newNodeId,
@@ -6216,7 +6631,7 @@ function WorkflowCanvasInner({
6216
6631
  };
6217
6632
  setNodes((currentNodes) => [...currentNodes, newNode]);
6218
6633
  } else if (isLogicNodeType(nodeType)) {
6219
- const config = configRaw ? JSON.parse(configRaw) : chunkULPKAD4A_js.createDefaultLogicNodeConfig(nodeType);
6634
+ const config = configRaw ? JSON.parse(configRaw) : chunkDFR6CMJH_js.createDefaultLogicNodeConfig(nodeType);
6220
6635
  if (!config) return;
6221
6636
  const newNode = {
6222
6637
  id: newNodeId,
@@ -6333,7 +6748,7 @@ function WorkflowCanvasInner({
6333
6748
  (edgeId, nodeType, position) => {
6334
6749
  if (!isLogicNodeType(nodeType)) return;
6335
6750
  storeTakeSnapshot();
6336
- const config = chunkULPKAD4A_js.createDefaultLogicNodeConfig(nodeType);
6751
+ const config = chunkDFR6CMJH_js.createDefaultLogicNodeConfig(nodeType);
6337
6752
  if (!config) return;
6338
6753
  const newNodeId = crypto.randomUUID();
6339
6754
  const newNode = {
@@ -6809,5 +7224,5 @@ exports.useDrawerStore = useDrawerStore;
6809
7224
  exports.useWorkflowBuilderClient = useWorkflowBuilderClient;
6810
7225
  exports.useWorkflowBuilderClientOptional = useWorkflowBuilderClientOptional;
6811
7226
  exports.useWorkflowStore = useWorkflowStore;
6812
- //# sourceMappingURL=chunk-Y2KJSGXS.js.map
6813
- //# sourceMappingURL=chunk-Y2KJSGXS.js.map
7227
+ //# sourceMappingURL=chunk-ZN2F2VHX.js.map
7228
+ //# sourceMappingURL=chunk-ZN2F2VHX.js.map