@datatechsolutions/ui 2.11.19 → 2.11.21

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.
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk4XID6LOC_js = require('./chunk-4XID6LOC.js');
4
+ var chunk6N5UGKD7_js = require('./chunk-6N5UGKD7.js');
5
+ var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
5
6
  var chunkP4YYEM4B_js = require('./chunk-P4YYEM4B.js');
6
7
  var chunkPWBWP5FJ_js = require('./chunk-PWBWP5FJ.js');
7
- var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
8
8
  var react = require('react');
9
9
  var react$1 = require('@xyflow/react');
10
10
  require('@xyflow/react/dist/style.css');
@@ -472,6 +472,24 @@ var MINIMAP_NODE_COLORS = {
472
472
  model_provider: "#64748b",
473
473
  group: "#64748b"
474
474
  };
475
+ var NODE_EXECUTION_ACCENT_COLORS = {
476
+ ...MINIMAP_NODE_COLORS
477
+ };
478
+ function hexToRgb(hexColor) {
479
+ const normalizedHex = hexColor.replace("#", "");
480
+ const parsed = Number.parseInt(normalizedHex, 16);
481
+ if (Number.isNaN(parsed) || normalizedHex.length !== 6) {
482
+ return [99, 102, 241];
483
+ }
484
+ return [parsed >> 16 & 255, parsed >> 8 & 255, parsed & 255];
485
+ }
486
+ function getNodeExecutionAccent(nodeType) {
487
+ return NODE_EXECUTION_ACCENT_COLORS[nodeType ?? ""] ?? NODE_EXECUTION_ACCENT_COLORS.agent;
488
+ }
489
+ function getNodeExecutionAccentRgb(nodeType) {
490
+ const [red, green, blue] = hexToRgb(getNodeExecutionAccent(nodeType));
491
+ return `${red}, ${green}, ${blue}`;
492
+ }
475
493
  var LOGIC_NODE_HANDLE_COLORS = {
476
494
  start: "!bg-green-500",
477
495
  end: "!bg-red-500",
@@ -1174,6 +1192,35 @@ function isModelCompatibleWithFramework(modelId, framework) {
1174
1192
  const provider = modelId.split(".")[0];
1175
1193
  return allowed.includes(provider);
1176
1194
  }
1195
+ var PROVIDER_TYPE_TO_MODEL_PROVIDERS = {
1196
+ aws_bedrock: ["anthropic", "amazon", "meta", "mistral"],
1197
+ openai_api: ["openai"],
1198
+ google_vertex: ["google"],
1199
+ azure_openai: ["openai"],
1200
+ anthropic_api: ["anthropic"],
1201
+ groq: ["meta", "mistral"],
1202
+ mistral: ["mistral"],
1203
+ huggingface: ["meta", "mistral"],
1204
+ ollama: ["meta", "mistral"],
1205
+ // Also handle raw provider names (from ModelProvider.provider field)
1206
+ anthropic: ["anthropic"],
1207
+ amazon: ["anthropic", "amazon", "meta"],
1208
+ google: ["google"],
1209
+ openai: ["openai"],
1210
+ meta: ["meta"]
1211
+ };
1212
+ function isFrameworkCompatibleWithProviders(framework, providerTypes) {
1213
+ const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework];
1214
+ if (!allowed || allowed === "all") return true;
1215
+ const availableModelProviders = /* @__PURE__ */ new Set();
1216
+ for (const providerType of providerTypes) {
1217
+ const mapped = PROVIDER_TYPE_TO_MODEL_PROVIDERS[providerType];
1218
+ if (mapped) {
1219
+ for (const mp of mapped) availableModelProviders.add(mp);
1220
+ }
1221
+ }
1222
+ return allowed.some((allowedProvider) => availableModelProviders.has(allowedProvider));
1223
+ }
1177
1224
  function getCompatibleModels(models, framework) {
1178
1225
  const allowed = FRAMEWORK_ALLOWED_PROVIDERS[framework];
1179
1226
  if (!allowed || allowed === "all") return models;
@@ -1217,6 +1264,7 @@ function NodeCard({
1217
1264
  return /* @__PURE__ */ jsxRuntime.jsx(
1218
1265
  "div",
1219
1266
  {
1267
+ "data-workflow-node-type": nodeType,
1220
1268
  className: `group relative ${width} rounded-xl border liquid-surface ${compact ? "min-h-[84px] p-3" : "p-4"} transition-all ${getNodeStateClass(selected, nodeType, customBorder)}${className ? ` ${className}` : ""}`,
1221
1269
  style,
1222
1270
  role,
@@ -1357,17 +1405,48 @@ function WorkflowDynamicHandles({
1357
1405
  }
1358
1406
  function NodeRunningIndicatorComponent({ nodeId }) {
1359
1407
  const nodeResult = useWorkflowStore((state) => state.nodeResults[nodeId]);
1408
+ const containerRef = react.useRef(null);
1409
+ const [nodeType, setNodeType] = react.useState("agent");
1410
+ const accentColor = react.useMemo(() => getNodeExecutionAccent(nodeType), [nodeType]);
1411
+ const accentRgb = react.useMemo(() => getNodeExecutionAccentRgb(nodeType), [nodeType]);
1412
+ react.useEffect(() => {
1413
+ const indicatorElement = containerRef.current;
1414
+ if (!indicatorElement) return;
1415
+ const nodeWrapper = indicatorElement.closest(".react-flow__node");
1416
+ if (!nodeWrapper) return;
1417
+ const wrapperClass = Array.from(nodeWrapper.classList).find(
1418
+ (className) => className.startsWith("react-flow__node-") && className !== "react-flow__node"
1419
+ );
1420
+ if (!wrapperClass) return;
1421
+ setNodeType(wrapperClass.replace("react-flow__node-", ""));
1422
+ }, []);
1360
1423
  if (!nodeResult) return null;
1361
1424
  const { status, durationMs } = nodeResult;
1362
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute -right-1 -top-1 z-10 flex items-center gap-1", children: [
1425
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "absolute -right-1 -top-1 z-10 flex items-center gap-1", children: [
1363
1426
  status === "pending" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full border border-gray-300 bg-white shadow-sm dark:border-gray-600 dark:bg-gray-800", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-2 w-2 rounded-full bg-gray-400 dark:bg-gray-500" }) }),
1364
- status === "running" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full border border-blue-300 bg-white shadow-sm dark:border-blue-600 dark:bg-gray-800", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "h-3 w-3 animate-spin text-blue-500", viewBox: "0 0 24 24", fill: "none", children: [
1365
- /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
1366
- /* @__PURE__ */ jsxRuntime.jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
1367
- ] }) }),
1368
- status === "success" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full border border-green-300 bg-green-50 shadow-sm dark:border-green-600 dark:bg-green-900/30", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3 w-3 text-green-600 dark:text-green-400", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) }),
1427
+ status === "running" && /* @__PURE__ */ jsxRuntime.jsx(
1428
+ "span",
1429
+ {
1430
+ className: "flex h-5 w-5 items-center justify-center rounded-full border bg-white shadow-sm dark:bg-gray-800",
1431
+ style: {
1432
+ borderColor: `rgba(${accentRgb}, 0.55)`,
1433
+ boxShadow: `0 0 0 1px rgba(${accentRgb}, 0.16), 0 6px 16px rgba(${accentRgb}, 0.18)`
1434
+ },
1435
+ children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "h-3 w-3 animate-spin", style: { color: accentColor }, viewBox: "0 0 24 24", fill: "none", children: [
1436
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
1437
+ /* @__PURE__ */ jsxRuntime.jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
1438
+ ] })
1439
+ }
1440
+ ),
1441
+ status === "success" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full border border-emerald-300 bg-emerald-50 shadow-sm dark:border-emerald-600 dark:bg-emerald-900/30", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3 w-3 text-emerald-600 dark:text-emerald-400", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }) }),
1369
1442
  status === "error" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-red-50 shadow-sm dark:border-red-600 dark:bg-red-900/30", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3 w-3 text-red-600 dark:text-red-400", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z", clipRule: "evenodd" }) }) }),
1370
- (status === "success" || status === "error") && durationMs !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-full bg-gray-100 px-1.5 py-0.5 text-[9px] font-medium text-gray-500 shadow-sm dark:bg-gray-800 dark:text-gray-400", children: durationMs < 1e3 ? `${durationMs}ms` : `${(durationMs / 1e3).toFixed(1)}s` })
1443
+ (status === "success" || status === "error") && durationMs !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
1444
+ "span",
1445
+ {
1446
+ className: `rounded-full px-1.5 py-0.5 text-[9px] font-medium shadow-sm ${status === "success" ? "bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300" : "bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"}`,
1447
+ children: durationMs < 1e3 ? `${durationMs}ms` : `${(durationMs / 1e3).toFixed(1)}s`
1448
+ }
1449
+ )
1371
1450
  ] });
1372
1451
  }
1373
1452
  var NodeRunningIndicator = react.memo(NodeRunningIndicatorComponent);
@@ -2692,7 +2771,7 @@ var NoteFlowNode = react.memo(function NoteFlowNode2({ data, selected }) {
2692
2771
  });
2693
2772
  var DatasourceFlowNode = react.memo(function DatasourceFlowNode2({ id, data, selected }) {
2694
2773
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
2695
- const { config, label, onEdit, onRemoveFromCanvas } = data;
2774
+ const { config, label, datasource, readOnly = false, onEdit, onRemoveFromCanvas } = data;
2696
2775
  const isCompact = data.displayMode === "compact";
2697
2776
  if (!config || config.type !== "datasource") {
2698
2777
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -2712,56 +2791,92 @@ var DatasourceFlowNode = react.memo(function DatasourceFlowNode2({ id, data, sel
2712
2791
  }
2713
2792
  const columnCount = config.selectedColumns?.length ?? 0;
2714
2793
  const filterCount = config.filterVariables ? Object.keys(config.filterVariables).length : 0;
2794
+ const visibleColumns = config.selectedColumns.slice(0, 3);
2795
+ const filterEntries = Object.entries(config.filterVariables ?? {});
2796
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(NodeCard, { compact: isCompact, selected, nodeType: "datasource", children: [
2797
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
2798
+ /* @__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" }) }),
2799
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
2800
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-gray-900 dark:text-white", children: label }),
2801
+ !isCompact && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: [
2802
+ datasource?.name ?? config.datasourceId,
2803
+ " \xB7 ",
2804
+ config.table
2805
+ ] })
2806
+ ] })
2807
+ ] }),
2808
+ /* @__PURE__ */ jsxRuntime.jsxs(NodeCardMeta, { compact: isCompact, children: [
2809
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
2810
+ 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 }),
2811
+ readOnly && /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium bg-slate-100 text-slate-700 dark:bg-slate-500/20 dark:text-slate-300", children: "Sample Data" }),
2812
+ /* @__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 }),
2813
+ /* @__PURE__ */ jsxRuntime.jsx(NodeCardBadge, { className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium bg-blue-50 text-blue-700 dark:bg-blue-900/25 dark:text-blue-300", children: config.outputVariable }),
2814
+ columnCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2815
+ columnCount,
2816
+ " ",
2817
+ t("datasourceColumns")
2818
+ ] }),
2819
+ config.limit > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: t("datasourceLimit", { count: config.limit }) }),
2820
+ filterCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2821
+ filterCount,
2822
+ " ",
2823
+ t("datasourceFilters")
2824
+ ] })
2825
+ ] }),
2826
+ !isCompact && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-1.5", children: [
2827
+ visibleColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
2828
+ NodeCardBadge,
2829
+ {
2830
+ className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium bg-white/70 text-slate-600 dark:bg-white/5 dark:text-slate-300",
2831
+ children: column
2832
+ },
2833
+ column
2834
+ )),
2835
+ columnCount > visibleColumns.length && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2836
+ "+",
2837
+ columnCount - visibleColumns.length,
2838
+ " more"
2839
+ ] })
2840
+ ] }),
2841
+ !isCompact && filterEntries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap items-center gap-1.5", children: filterEntries.map(([field, variableName]) => /* @__PURE__ */ jsxRuntime.jsxs(
2842
+ NodeCardBadge,
2843
+ {
2844
+ className: "inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium bg-cyan-50 text-cyan-700 dark:bg-cyan-900/20 dark:text-cyan-300",
2845
+ children: [
2846
+ field,
2847
+ " \u2192 ",
2848
+ variableName
2849
+ ]
2850
+ },
2851
+ `${field}:${variableName}`
2852
+ )) }),
2853
+ onRemoveFromCanvas && /* @__PURE__ */ jsxRuntime.jsx(
2854
+ "span",
2855
+ {
2856
+ role: "button",
2857
+ tabIndex: 0,
2858
+ onClick: (event) => {
2859
+ event.stopPropagation();
2860
+ event.preventDefault();
2861
+ onRemoveFromCanvas(id);
2862
+ },
2863
+ 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",
2864
+ "aria-label": t("removeFromCanvas"),
2865
+ children: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" })
2866
+ }
2867
+ )
2868
+ ] })
2869
+ ] });
2715
2870
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2716
2871
  /* @__PURE__ */ jsxRuntime.jsx(NodeRunningIndicator, { nodeId: id }),
2717
2872
  /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "target", position: react$1.Position.Left, id: "left-in", colorClass: "!bg-cyan-400" }),
2718
- /* @__PURE__ */ jsxRuntime.jsx(
2873
+ readOnly || !onEdit ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: content }) : /* @__PURE__ */ jsxRuntime.jsx(
2719
2874
  "button",
2720
2875
  {
2721
2876
  type: "button",
2722
- onClick: () => onEdit?.(id),
2877
+ onClick: () => onEdit(id),
2723
2878
  className: "w-full text-left",
2724
- children: /* @__PURE__ */ jsxRuntime.jsxs(NodeCard, { compact: isCompact, selected, nodeType: "datasource", children: [
2725
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
2726
- /* @__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" }) }),
2727
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
2728
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-gray-900 dark:text-white", children: label }),
2729
- !isCompact && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: config.table ?? config.datasourceId })
2730
- ] })
2731
- ] }),
2732
- /* @__PURE__ */ jsxRuntime.jsxs(NodeCardMeta, { compact: isCompact, children: [
2733
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2734
- 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 }),
2735
- 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 }),
2736
- columnCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2737
- columnCount,
2738
- " ",
2739
- t("datasourceColumns")
2740
- ] }),
2741
- config.limit > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: t("datasourceLimit", { count: config.limit }) }),
2742
- filterCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-gray-400 dark:text-gray-500", children: [
2743
- filterCount,
2744
- " ",
2745
- t("datasourceFilters")
2746
- ] })
2747
- ] }),
2748
- onRemoveFromCanvas && /* @__PURE__ */ jsxRuntime.jsx(
2749
- "span",
2750
- {
2751
- role: "button",
2752
- tabIndex: 0,
2753
- onClick: (event) => {
2754
- event.stopPropagation();
2755
- event.preventDefault();
2756
- onRemoveFromCanvas(id);
2757
- },
2758
- 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",
2759
- "aria-label": t("removeFromCanvas"),
2760
- children: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-3.5 w-3.5 text-red-600 dark:text-red-400" })
2761
- }
2762
- )
2763
- ] })
2764
- ] })
2879
+ children: content
2765
2880
  }
2766
2881
  ),
2767
2882
  /* @__PURE__ */ jsxRuntime.jsx(WorkflowHandle, { type: "source", position: react$1.Position.Right, id: "right-out", colorClass: "!bg-cyan-400" })
@@ -3039,8 +3154,8 @@ function ConfigFormActions({
3039
3154
  saveDisabled = false
3040
3155
  }) {
3041
3156
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
3042
- /* @__PURE__ */ jsxRuntime.jsx(chunk4XID6LOC_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3043
- /* @__PURE__ */ jsxRuntime.jsx(chunk4XID6LOC_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3157
+ /* @__PURE__ */ jsxRuntime.jsx(chunk6N5UGKD7_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3158
+ /* @__PURE__ */ jsxRuntime.jsx(chunk6N5UGKD7_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3044
3159
  ] });
3045
3160
  }
3046
3161
  var COLOR_CLASSES = {
@@ -3287,7 +3402,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3287
3402
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
3288
3403
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("conditionsLabel") }),
3289
3404
  /* @__PURE__ */ jsxRuntime.jsx(
3290
- chunk4XID6LOC_js.Button,
3405
+ chunk6N5UGKD7_js.Button,
3291
3406
  {
3292
3407
  type: "button",
3293
3408
  onClick: handleAddCondition,
@@ -3298,7 +3413,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3298
3413
  /* @__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: [
3299
3414
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 grid-cols-3 gap-2", children: [
3300
3415
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3301
- chunk4XID6LOC_js.FormInput,
3416
+ chunk6N5UGKD7_js.FormInput,
3302
3417
  {
3303
3418
  type: "text",
3304
3419
  label: t("variableLabel"),
@@ -3309,7 +3424,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3309
3424
  }
3310
3425
  ) }),
3311
3426
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3312
- chunk4XID6LOC_js.FormSelect,
3427
+ chunk6N5UGKD7_js.FormSelect,
3313
3428
  {
3314
3429
  label: t("operatorLabel"),
3315
3430
  value: condition.operator,
@@ -3319,7 +3434,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3319
3434
  }
3320
3435
  ) }),
3321
3436
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3322
- chunk4XID6LOC_js.FormInput,
3437
+ chunk6N5UGKD7_js.FormInput,
3323
3438
  {
3324
3439
  type: "text",
3325
3440
  label: t("valueLabel"),
@@ -3331,7 +3446,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3331
3446
  ) })
3332
3447
  ] }),
3333
3448
  conditions.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
3334
- chunk4XID6LOC_js.IconButton,
3449
+ chunk6N5UGKD7_js.IconButton,
3335
3450
  {
3336
3451
  onClick: () => handleRemoveCondition(index),
3337
3452
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3486,7 +3601,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3486
3601
  };
3487
3602
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3488
3603
  /* @__PURE__ */ jsxRuntime.jsx(
3489
- chunk4XID6LOC_js.FormSelect,
3604
+ chunk6N5UGKD7_js.FormSelect,
3490
3605
  {
3491
3606
  label: t("methodLabel"),
3492
3607
  value: method,
@@ -3495,7 +3610,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3495
3610
  }
3496
3611
  ),
3497
3612
  /* @__PURE__ */ jsxRuntime.jsx(
3498
- chunk4XID6LOC_js.FormInput,
3613
+ chunk6N5UGKD7_js.FormInput,
3499
3614
  {
3500
3615
  type: "text",
3501
3616
  label: t("urlLabel"),
@@ -3508,7 +3623,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3508
3623
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
3509
3624
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("headersLabel") }),
3510
3625
  /* @__PURE__ */ jsxRuntime.jsx(
3511
- chunk4XID6LOC_js.Button,
3626
+ chunk6N5UGKD7_js.Button,
3512
3627
  {
3513
3628
  type: "button",
3514
3629
  onClick: handleAddHeader,
@@ -3518,7 +3633,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3518
3633
  ] }),
3519
3634
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: headerEntries.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3520
3635
  /* @__PURE__ */ jsxRuntime.jsx(
3521
- chunk4XID6LOC_js.FormInput,
3636
+ chunk6N5UGKD7_js.FormInput,
3522
3637
  {
3523
3638
  type: "text",
3524
3639
  value: entry.key,
@@ -3528,7 +3643,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3528
3643
  }
3529
3644
  ),
3530
3645
  /* @__PURE__ */ jsxRuntime.jsx(
3531
- chunk4XID6LOC_js.FormInput,
3646
+ chunk6N5UGKD7_js.FormInput,
3532
3647
  {
3533
3648
  type: "text",
3534
3649
  value: entry.value,
@@ -3538,7 +3653,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3538
3653
  }
3539
3654
  ),
3540
3655
  /* @__PURE__ */ jsxRuntime.jsx(
3541
- chunk4XID6LOC_js.IconButton,
3656
+ chunk6N5UGKD7_js.IconButton,
3542
3657
  {
3543
3658
  onClick: () => handleRemoveHeader(index),
3544
3659
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3550,7 +3665,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3550
3665
  ] }, index)) })
3551
3666
  ] }),
3552
3667
  method !== "GET" && /* @__PURE__ */ jsxRuntime.jsx(
3553
- chunk4XID6LOC_js.FormTextarea,
3668
+ chunk6N5UGKD7_js.FormTextarea,
3554
3669
  {
3555
3670
  label: t("bodyLabel"),
3556
3671
  value: body,
@@ -3561,7 +3676,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3561
3676
  }
3562
3677
  ),
3563
3678
  /* @__PURE__ */ jsxRuntime.jsx(
3564
- chunk4XID6LOC_js.FormInput,
3679
+ chunk6N5UGKD7_js.FormInput,
3565
3680
  {
3566
3681
  type: "number",
3567
3682
  label: t("timeoutLabel"),
@@ -3592,7 +3707,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3592
3707
  };
3593
3708
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3594
3709
  /* @__PURE__ */ jsxRuntime.jsx(
3595
- chunk4XID6LOC_js.FormTextarea,
3710
+ chunk6N5UGKD7_js.FormTextarea,
3596
3711
  {
3597
3712
  label: t("templateLabel"),
3598
3713
  value: template,
@@ -3603,7 +3718,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3603
3718
  }
3604
3719
  ),
3605
3720
  /* @__PURE__ */ jsxRuntime.jsx(
3606
- chunk4XID6LOC_js.FormInput,
3721
+ chunk6N5UGKD7_js.FormInput,
3607
3722
  {
3608
3723
  type: "text",
3609
3724
  label: t("outputVariableLabel"),
@@ -3632,7 +3747,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3632
3747
  };
3633
3748
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3634
3749
  /* @__PURE__ */ jsxRuntime.jsx(
3635
- chunk4XID6LOC_js.FormInput,
3750
+ chunk6N5UGKD7_js.FormInput,
3636
3751
  {
3637
3752
  type: "text",
3638
3753
  label: t("iteratorVariableLabel"),
@@ -3642,7 +3757,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3642
3757
  }
3643
3758
  ),
3644
3759
  /* @__PURE__ */ jsxRuntime.jsx(
3645
- chunk4XID6LOC_js.FormInput,
3760
+ chunk6N5UGKD7_js.FormInput,
3646
3761
  {
3647
3762
  type: "number",
3648
3763
  label: t("maxIterationsLabel"),
@@ -3673,7 +3788,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3673
3788
  };
3674
3789
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3675
3790
  /* @__PURE__ */ jsxRuntime.jsx(
3676
- chunk4XID6LOC_js.FormInput,
3791
+ chunk6N5UGKD7_js.FormInput,
3677
3792
  {
3678
3793
  type: "text",
3679
3794
  label: t("sourceIdLabel"),
@@ -3683,7 +3798,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3683
3798
  }
3684
3799
  ),
3685
3800
  /* @__PURE__ */ jsxRuntime.jsx(
3686
- chunk4XID6LOC_js.FormInput,
3801
+ chunk6N5UGKD7_js.FormInput,
3687
3802
  {
3688
3803
  type: "number",
3689
3804
  label: t("topKLabel"),
@@ -3694,7 +3809,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3694
3809
  }
3695
3810
  ),
3696
3811
  /* @__PURE__ */ jsxRuntime.jsx(
3697
- chunk4XID6LOC_js.FormInput,
3812
+ chunk6N5UGKD7_js.FormInput,
3698
3813
  {
3699
3814
  type: "number",
3700
3815
  label: t("similarityThresholdLabel"),
@@ -3725,7 +3840,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3725
3840
  };
3726
3841
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3727
3842
  /* @__PURE__ */ jsxRuntime.jsx(
3728
- chunk4XID6LOC_js.FormTextarea,
3843
+ chunk6N5UGKD7_js.FormTextarea,
3729
3844
  {
3730
3845
  label: t("outputTemplateLabel"),
3731
3846
  hint: t("outputTemplateHelp"),
@@ -4159,7 +4274,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4159
4274
  }
4160
4275
  ),
4161
4276
  /* @__PURE__ */ jsxRuntime.jsx(
4162
- chunk4XID6LOC_js.FormInput,
4277
+ chunk6N5UGKD7_js.FormInput,
4163
4278
  {
4164
4279
  type: "text",
4165
4280
  label: t("outputVariableLabel"),
@@ -4169,7 +4284,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4169
4284
  }
4170
4285
  ),
4171
4286
  /* @__PURE__ */ jsxRuntime.jsx(
4172
- chunk4XID6LOC_js.FormSelect,
4287
+ chunk6N5UGKD7_js.FormSelect,
4173
4288
  {
4174
4289
  label: t("aggregationModeLabel"),
4175
4290
  value: aggregationMode,
@@ -4202,7 +4317,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4202
4317
  };
4203
4318
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4204
4319
  /* @__PURE__ */ jsxRuntime.jsx(
4205
- chunk4XID6LOC_js.FormSelect,
4320
+ chunk6N5UGKD7_js.FormSelect,
4206
4321
  {
4207
4322
  label: t("extractionModeLabel"),
4208
4323
  value: extractionMode,
@@ -4211,7 +4326,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4211
4326
  }
4212
4327
  ),
4213
4328
  /* @__PURE__ */ jsxRuntime.jsx(
4214
- chunk4XID6LOC_js.FormInput,
4329
+ chunk6N5UGKD7_js.FormInput,
4215
4330
  {
4216
4331
  type: "text",
4217
4332
  label: t("outputVariableLabel"),
@@ -4388,7 +4503,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4388
4503
  };
4389
4504
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4390
4505
  /* @__PURE__ */ jsxRuntime.jsx(
4391
- chunk4XID6LOC_js.FormInput,
4506
+ chunk6N5UGKD7_js.FormInput,
4392
4507
  {
4393
4508
  type: "text",
4394
4509
  label: t("iteratorVariableLabel"),
@@ -4398,7 +4513,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4398
4513
  }
4399
4514
  ),
4400
4515
  /* @__PURE__ */ jsxRuntime.jsx(
4401
- chunk4XID6LOC_js.FormInput,
4516
+ chunk6N5UGKD7_js.FormInput,
4402
4517
  {
4403
4518
  type: "text",
4404
4519
  label: t("itemVariableLabel"),
@@ -4408,7 +4523,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4408
4523
  }
4409
4524
  ),
4410
4525
  /* @__PURE__ */ jsxRuntime.jsx(
4411
- chunk4XID6LOC_js.FormInput,
4526
+ chunk6N5UGKD7_js.FormInput,
4412
4527
  {
4413
4528
  type: "text",
4414
4529
  label: t("indexVariableLabel"),
@@ -5002,7 +5117,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5002
5117
  };
5003
5118
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5004
5119
  /* @__PURE__ */ jsxRuntime.jsx(
5005
- chunk4XID6LOC_js.FormInput,
5120
+ chunk6N5UGKD7_js.FormInput,
5006
5121
  {
5007
5122
  type: "text",
5008
5123
  label: translations("labelField"),
@@ -5012,7 +5127,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5012
5127
  }
5013
5128
  ),
5014
5129
  /* @__PURE__ */ jsxRuntime.jsx(
5015
- chunk4XID6LOC_js.FormTextarea,
5130
+ chunk6N5UGKD7_js.FormTextarea,
5016
5131
  {
5017
5132
  label: translations("descriptionField"),
5018
5133
  value: description,
@@ -5170,7 +5285,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5170
5285
  };
5171
5286
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5172
5287
  /* @__PURE__ */ jsxRuntime.jsx(
5173
- chunk4XID6LOC_js.FormInput,
5288
+ chunk6N5UGKD7_js.FormInput,
5174
5289
  {
5175
5290
  type: "text",
5176
5291
  label: t("nameLabel"),
@@ -5180,7 +5295,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5180
5295
  }
5181
5296
  ),
5182
5297
  /* @__PURE__ */ jsxRuntime.jsx(
5183
- chunk4XID6LOC_js.FormSelect,
5298
+ chunk6N5UGKD7_js.FormSelect,
5184
5299
  {
5185
5300
  label: t("providerTypeLabel"),
5186
5301
  value: providerType,
@@ -5189,7 +5304,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5189
5304
  }
5190
5305
  ),
5191
5306
  showRegion && /* @__PURE__ */ jsxRuntime.jsx(
5192
- chunk4XID6LOC_js.FormSelect,
5307
+ chunk6N5UGKD7_js.FormSelect,
5193
5308
  {
5194
5309
  label: t("regionLabel"),
5195
5310
  value: region,
@@ -5198,7 +5313,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5198
5313
  }
5199
5314
  ),
5200
5315
  showEndpoint && /* @__PURE__ */ jsxRuntime.jsx(
5201
- chunk4XID6LOC_js.FormInput,
5316
+ chunk6N5UGKD7_js.FormInput,
5202
5317
  {
5203
5318
  type: "text",
5204
5319
  label: t("endpointLabel"),
@@ -5208,7 +5323,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5208
5323
  }
5209
5324
  ),
5210
5325
  showApiKey && /* @__PURE__ */ jsxRuntime.jsx(
5211
- chunk4XID6LOC_js.FormInput,
5326
+ chunk6N5UGKD7_js.FormInput,
5212
5327
  {
5213
5328
  type: "password",
5214
5329
  label: t("apiKeyLabel"),
@@ -5218,7 +5333,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5218
5333
  }
5219
5334
  ),
5220
5335
  showCredentialRef && /* @__PURE__ */ jsxRuntime.jsx(
5221
- chunk4XID6LOC_js.FormInput,
5336
+ chunk6N5UGKD7_js.FormInput,
5222
5337
  {
5223
5338
  type: "text",
5224
5339
  label: t("credentialRefLabel"),
@@ -5362,7 +5477,7 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
5362
5477
  }
5363
5478
  };
5364
5479
  return /* @__PURE__ */ jsxRuntime.jsx(
5365
- chunk4XID6LOC_js.GlassModalShell,
5480
+ chunk6N5UGKD7_js.GlassModalShell,
5366
5481
  {
5367
5482
  open,
5368
5483
  onClose: closeModal,
@@ -5422,7 +5537,7 @@ function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onC
5422
5537
  }
5423
5538
  ];
5424
5539
  return /* @__PURE__ */ jsxRuntime.jsx(
5425
- chunk4XID6LOC_js.ContextMenu,
5540
+ chunk6N5UGKD7_js.ContextMenu,
5426
5541
  {
5427
5542
  position,
5428
5543
  onClose,
@@ -5479,7 +5594,7 @@ function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView,
5479
5594
  }
5480
5595
  ];
5481
5596
  return /* @__PURE__ */ jsxRuntime.jsx(
5482
- chunk4XID6LOC_js.ContextMenu,
5597
+ chunk6N5UGKD7_js.ContextMenu,
5483
5598
  {
5484
5599
  position,
5485
5600
  onClose,
@@ -5626,7 +5741,7 @@ function SelectionContextMenu({
5626
5741
  }
5627
5742
  ];
5628
5743
  return /* @__PURE__ */ jsxRuntime.jsx(
5629
- chunk4XID6LOC_js.ContextMenu,
5744
+ chunk6N5UGKD7_js.ContextMenu,
5630
5745
  {
5631
5746
  position,
5632
5747
  onClose,
@@ -6034,6 +6149,28 @@ function WorkflowCanvasInner({
6034
6149
  }
6035
6150
  };
6036
6151
  }
6152
+ if (savedNode.type === "datasource") {
6153
+ const datasourceConfig = savedNode.data.config;
6154
+ const datasourceEntity = datasourceConfig ? entityMap.get(datasourceConfig.datasourceId) : void 0;
6155
+ const extendedNodeData = savedNode.data;
6156
+ return {
6157
+ id: savedNode.id,
6158
+ type: "datasource",
6159
+ position: savedNode.position,
6160
+ data: {
6161
+ config: datasourceConfig,
6162
+ datasource: datasourceEntity ? {
6163
+ id: datasourceEntity.id,
6164
+ name: datasourceEntity.label,
6165
+ dialect: datasourceConfig?.dialect ?? "unknown"
6166
+ } : void 0,
6167
+ label: savedNode.data.label,
6168
+ readOnly: extendedNodeData.readOnly === true,
6169
+ onEdit: extendedNodeData.readOnly === true ? void 0 : handleEditLogicNode,
6170
+ onRemoveFromCanvas: handleRemoveNodeFromCanvas
6171
+ }
6172
+ };
6173
+ }
6037
6174
  if (savedNode.type === "group") {
6038
6175
  const groupConfig = savedNode.data.config;
6039
6176
  const defaultGroupConfig = {
@@ -7442,6 +7579,7 @@ exports.ListOperatorFlowNode = ListOperatorFlowNode;
7442
7579
  exports.LogicNodeModal = LogicNodeModal;
7443
7580
  exports.MINIMAP_NODE_COLORS = MINIMAP_NODE_COLORS;
7444
7581
  exports.ModelProviderFlowNode = ModelProviderFlowNode;
7582
+ exports.NODE_EXECUTION_ACCENT_COLORS = NODE_EXECUTION_ACCENT_COLORS;
7445
7583
  exports.NodeCard = NodeCard;
7446
7584
  exports.NodeContextMenu = NodeContextMenu;
7447
7585
  exports.NoteFlowNode = NoteFlowNode;
@@ -7468,10 +7606,13 @@ exports.getEntityHandleColor = getEntityHandleColor;
7468
7606
  exports.getEntityIcon = getEntityIcon;
7469
7607
  exports.getEntityMinimapColor = getEntityMinimapColor;
7470
7608
  exports.getFrameworkMeta = getFrameworkMeta;
7609
+ exports.getNodeExecutionAccent = getNodeExecutionAccent;
7610
+ exports.getNodeExecutionAccentRgb = getNodeExecutionAccentRgb;
7611
+ exports.isFrameworkCompatibleWithProviders = isFrameworkCompatibleWithProviders;
7471
7612
  exports.isModelCompatibleWithFramework = isModelCompatibleWithFramework;
7472
7613
  exports.useModalStore = useModalStore;
7473
7614
  exports.useWorkflowBuilderClient = useWorkflowBuilderClient;
7474
7615
  exports.useWorkflowBuilderClientOptional = useWorkflowBuilderClientOptional;
7475
7616
  exports.useWorkflowStore = useWorkflowStore;
7476
- //# sourceMappingURL=chunk-4X7ITYP2.js.map
7477
- //# sourceMappingURL=chunk-4X7ITYP2.js.map
7617
+ //# sourceMappingURL=chunk-E6ALKSGA.js.map
7618
+ //# sourceMappingURL=chunk-E6ALKSGA.js.map