@datatechsolutions/ui 2.10.3 → 2.10.4

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.
@@ -3,8 +3,8 @@
3
3
 
4
4
  require('../chunk-55H6WZQP.js');
5
5
  var chunk3GE3MBUZ_js = require('../chunk-3GE3MBUZ.js');
6
- var chunk5H553L6R_js = require('../chunk-5H553L6R.js');
7
- var chunkQ5ILCWVP_js = require('../chunk-Q5ILCWVP.js');
6
+ var chunkOQAALOP2_js = require('../chunk-OQAALOP2.js');
7
+ var chunkMRXTY7XN_js = require('../chunk-MRXTY7XN.js');
8
8
  require('../chunk-S7KHTUHA.js');
9
9
  require('../chunk-UZ3CMNUJ.js');
10
10
  var chunkP4YYEM4B_js = require('../chunk-P4YYEM4B.js');
@@ -84,7 +84,7 @@ function OutputCard({ label, value }) {
84
84
  function AgentProfileHeader({ agent, models, t, selectedModelId, setSelectedModelId, selectedFramework, temperature, setTemperature, elo, setElo, onChanged }) {
85
85
  const modelName = models.find((model) => model.id === selectedModelId)?.name ?? selectedModelId ?? "\u2014";
86
86
  const avatarUrl = agent.avatar;
87
- const frameworkMeta = chunk5H553L6R_js.getFrameworkMeta(selectedFramework);
87
+ const frameworkMeta = chunkOQAALOP2_js.getFrameworkMeta(selectedFramework);
88
88
  const tierInfo = getEloTier(elo);
89
89
  const difficultyConfig = {
90
90
  beginner: { color: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-400", labelKey: "agentDrawer.tierBeginner" },
@@ -369,12 +369,12 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
369
369
  const isPrecise = temperature <= 0.3;
370
370
  const isBalanced = temperature > 0.3 && temperature <= 0.7;
371
371
  const isCreative = temperature > 0.7;
372
- const frameworkKeys = Object.keys(chunk5H553L6R_js.FRAMEWORK_META);
373
- const compatibleModels = chunk5H553L6R_js.getCompatibleModels(models, selectedFramework);
372
+ const frameworkKeys = Object.keys(chunkOQAALOP2_js.FRAMEWORK_META);
373
+ const compatibleModels = chunkOQAALOP2_js.getCompatibleModels(models, selectedFramework);
374
374
  const handleFrameworkChange = react.useCallback((newFramework) => {
375
375
  setSelectedFramework(newFramework);
376
- if (!chunk5H553L6R_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
377
- const compatible = chunk5H553L6R_js.getCompatibleModels(models, newFramework);
376
+ if (!chunkOQAALOP2_js.isModelCompatibleWithFramework(selectedModelId, newFramework)) {
377
+ const compatible = chunkOQAALOP2_js.getCompatibleModels(models, newFramework);
378
378
  if (compatible.length > 0) {
379
379
  setSelectedModelId(compatible[0].id);
380
380
  }
@@ -385,9 +385,9 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
385
385
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
386
386
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-2 block text-xs font-medium text-gray-500 dark:text-gray-400", children: t("agentDrawer.framework") }),
387
387
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5", children: frameworkKeys.map((key) => {
388
- const meta = chunk5H553L6R_js.FRAMEWORK_META[key];
388
+ const meta = chunkOQAALOP2_js.FRAMEWORK_META[key];
389
389
  const isSelected = key === selectedFramework;
390
- const compatCount = chunk5H553L6R_js.getCompatibleModels(models, key).length;
390
+ const compatCount = chunkOQAALOP2_js.getCompatibleModels(models, key).length;
391
391
  return /* @__PURE__ */ jsxRuntime.jsxs(
392
392
  "button",
393
393
  {
@@ -417,7 +417,7 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
417
417
  ] }),
418
418
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-2", children: models.map((model) => {
419
419
  const isSelected = model.id === selectedModelId;
420
- const isCompatible = chunk5H553L6R_js.isModelCompatibleWithFramework(model.id, selectedFramework);
420
+ const isCompatible = chunkOQAALOP2_js.isModelCompatibleWithFramework(model.id, selectedFramework);
421
421
  const { IconComponent, color, providerLabel } = getModelIcon(model.id);
422
422
  return /* @__PURE__ */ jsxRuntime.jsxs(
423
423
  "button",
@@ -521,7 +521,7 @@ function ConfigTab({ agent, models, t, selectedModelId, setSelectedModelId, sele
521
521
  ] });
522
522
  }
523
523
  function ResultsTab({ agentId, t }) {
524
- const nodeResults = chunk5H553L6R_js.useWorkflowStore((state) => state.nodeResults);
524
+ const nodeResults = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodeResults);
525
525
  const agentResult = react.useMemo(() => {
526
526
  return nodeResults[agentId] ?? null;
527
527
  }, [nodeResults, agentId]);
@@ -550,9 +550,9 @@ function ResultsTab({ agentId, t }) {
550
550
  }
551
551
  function AgentDrawer({ onSaved }) {
552
552
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
553
- const activeDrawer = chunk5H553L6R_js.useDrawerStore((s) => s.activeDrawer);
554
- const agentData = chunk5H553L6R_js.useDrawerStore((s) => s.agentData);
555
- const closeDrawer = chunk5H553L6R_js.useDrawerStore((s) => s.closeDrawer);
553
+ const activeDrawer = chunkOQAALOP2_js.useDrawerStore((s) => s.activeDrawer);
554
+ const agentData = chunkOQAALOP2_js.useDrawerStore((s) => s.agentData);
555
+ const closeDrawer = chunkOQAALOP2_js.useDrawerStore((s) => s.closeDrawer);
556
556
  const open = activeDrawer === "agent";
557
557
  const agent = agentData?.agent ?? null;
558
558
  const models = agentData?.models ?? [];
@@ -595,7 +595,7 @@ function AgentDrawer({ onSaved }) {
595
595
  tab
596
596
  )) });
597
597
  return /* @__PURE__ */ jsxRuntime.jsxs(
598
- chunk5H553L6R_js.WorkspaceDrawer,
598
+ chunkOQAALOP2_js.WorkspaceDrawer,
599
599
  {
600
600
  open,
601
601
  onClose: handleClose,
@@ -743,9 +743,9 @@ function SubworkflowDrawer({ onSaved, onMaximize }) {
743
743
  }, [tool, onSaved, name, category, description, timeoutMs, latestGraphRef, markSaved]);
744
744
  if (!tool) return null;
745
745
  const categoryKey = category ?? "external";
746
- const gradient = tool.color ?? chunk5H553L6R_js.CATEGORY_COLORS[categoryKey] ?? chunk5H553L6R_js.CATEGORY_COLORS.external;
747
- const categoryPill = chunk5H553L6R_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunk5H553L6R_js.CATEGORY_PILL_COLORS.external;
748
- const IconComponent = chunk5H553L6R_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
746
+ const gradient = tool.color ?? chunkOQAALOP2_js.CATEGORY_COLORS[categoryKey] ?? chunkOQAALOP2_js.CATEGORY_COLORS.external;
747
+ const categoryPill = chunkOQAALOP2_js.CATEGORY_PILL_COLORS[categoryKey] ?? chunkOQAALOP2_js.CATEGORY_PILL_COLORS.external;
748
+ const IconComponent = chunkOQAALOP2_js.ICON_MAP[tool.icon ?? ""] ?? outline.ArrowPathRoundedSquareIcon;
749
749
  const graph = latestGraphRef.current;
750
750
  const startNode = graph.nodes.find((n) => n.type === "start");
751
751
  const endNode = graph.nodes.find((n) => n.type === "end");
@@ -754,7 +754,7 @@ function SubworkflowDrawer({ onSaved, onMaximize }) {
754
754
  const inputVariables = (startConfig?.inputVariables ?? []).map((v) => ({ name: v, type: "string" }));
755
755
  const outputVariables = (endConfig?.outputVariables ?? []).map((v) => ({ name: v, type: "string" }));
756
756
  return /* @__PURE__ */ jsxRuntime.jsx(
757
- chunk5H553L6R_js.WorkspaceDrawer,
757
+ chunkOQAALOP2_js.WorkspaceDrawer,
758
758
  {
759
759
  open,
760
760
  onClose: closeDrawer,
@@ -783,7 +783,7 @@ function SubworkflowDrawer({ onSaved, onMaximize }) {
783
783
  {
784
784
  type: "button",
785
785
  onClick: () => setCategory(cat),
786
- className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunk5H553L6R_js.CATEGORY_PILL_COLORS[cat] ?? chunk5H553L6R_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
786
+ className: `rounded-full px-2 py-1 text-[9px] font-semibold transition-all ${cat === category ? `${chunkOQAALOP2_js.CATEGORY_PILL_COLORS[cat] ?? chunkOQAALOP2_js.CATEGORY_PILL_COLORS.external} ring-1 ring-current/20` : "bg-white/30 text-gray-500 hover:bg-white/50 dark:bg-white/5 dark:text-gray-400"}`,
787
787
  children: cat
788
788
  },
789
789
  cat
@@ -874,7 +874,7 @@ function SubworkflowDrawer({ onSaved, onMaximize }) {
874
874
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-[10px] font-medium text-emerald-500", children: t("subworkflowDrawer.saved") }) })
875
875
  ] }),
876
876
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
877
- chunk5H553L6R_js.WorkflowCanvas,
877
+ chunkOQAALOP2_js.WorkflowCanvas,
878
878
  {
879
879
  initialGraph,
880
880
  agents: [],
@@ -890,9 +890,9 @@ function SubworkflowDrawer({ onSaved, onMaximize }) {
890
890
  }
891
891
  function PipelineSettingsDrawer({ onSave }) {
892
892
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow");
893
- const activeDrawer = chunk5H553L6R_js.useDrawerStore((s) => s.activeDrawer);
894
- const data = chunk5H553L6R_js.useDrawerStore((s) => s.pipelineSettingsData);
895
- const closeDrawer = chunk5H553L6R_js.useDrawerStore((s) => s.closeDrawer);
893
+ const activeDrawer = chunkOQAALOP2_js.useDrawerStore((s) => s.activeDrawer);
894
+ const data = chunkOQAALOP2_js.useDrawerStore((s) => s.pipelineSettingsData);
895
+ const closeDrawer = chunkOQAALOP2_js.useDrawerStore((s) => s.closeDrawer);
896
896
  const open = activeDrawer === "pipeline-settings";
897
897
  const [nameValue, setNameValue] = react.useState("");
898
898
  const [descriptionValue, setDescriptionValue] = react.useState("");
@@ -917,7 +917,7 @@ function PipelineSettingsDrawer({ onSave }) {
917
917
  }
918
918
  };
919
919
  return /* @__PURE__ */ jsxRuntime.jsx(
920
- chunk5H553L6R_js.WorkspaceDrawer,
920
+ chunkOQAALOP2_js.WorkspaceDrawer,
921
921
  {
922
922
  open,
923
923
  onClose: closeDrawer,
@@ -927,7 +927,7 @@ function PipelineSettingsDrawer({ onSave }) {
927
927
  gradient: "from-indigo-500 to-purple-600",
928
928
  children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
929
929
  /* @__PURE__ */ jsxRuntime.jsx(
930
- chunkQ5ILCWVP_js.FormInput,
930
+ chunkMRXTY7XN_js.FormInput,
931
931
  {
932
932
  label: t("pipelineName"),
933
933
  value: nameValue,
@@ -937,7 +937,7 @@ function PipelineSettingsDrawer({ onSave }) {
937
937
  }
938
938
  ),
939
939
  /* @__PURE__ */ jsxRuntime.jsx(
940
- chunkQ5ILCWVP_js.FormTextarea,
940
+ chunkMRXTY7XN_js.FormTextarea,
941
941
  {
942
942
  label: t("pipelineDescription"),
943
943
  value: descriptionValue,
@@ -947,7 +947,7 @@ function PipelineSettingsDrawer({ onSave }) {
947
947
  }
948
948
  ),
949
949
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-2", children: /* @__PURE__ */ jsxRuntime.jsxs(
950
- chunkQ5ILCWVP_js.Button,
950
+ chunkMRXTY7XN_js.Button,
951
951
  {
952
952
  type: "submit",
953
953
  color: "ios-glass-blue",
@@ -1060,8 +1060,8 @@ function CollapsibleSection({ title, icon, colorClass, defaultOpen = true, count
1060
1060
  ] });
1061
1061
  }
1062
1062
  function LogicNodeItemCard({ item, translationFunction }) {
1063
- const IconComponent = chunk5H553L6R_js.LOGIC_ICON_MAP[item.nodeType];
1064
- const gradient = chunk5H553L6R_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1063
+ const IconComponent = chunkOQAALOP2_js.LOGIC_ICON_MAP[item.nodeType];
1064
+ const gradient = chunkOQAALOP2_js.LOGIC_NODE_GRADIENTS[item.nodeType] ?? "from-gray-400 to-gray-500";
1065
1065
  const defaultConfig = chunkDFR6CMJH_js.createDefaultLogicNodeConfig(item.nodeType);
1066
1066
  const configJson = defaultConfig ? JSON.stringify(defaultConfig) : void 0;
1067
1067
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1301,8 +1301,8 @@ function NodePalette({ agents, tools, agentTools = [], rules, entities = [], onC
1301
1301
  outputVariable: `${entity.label.replace(/\s+/g, "")}Data`,
1302
1302
  limit: entity.defaultLimit
1303
1303
  });
1304
- const EntityIcon = chunk5H553L6R_js.getEntityIcon(entity.id);
1305
- const entityGradient = chunk5H553L6R_js.getEntityGradient(entity.id);
1304
+ const EntityIcon = chunkOQAALOP2_js.getEntityIcon(entity.id);
1305
+ const entityGradient = chunkOQAALOP2_js.getEntityGradient(entity.id);
1306
1306
  return /* @__PURE__ */ jsxRuntime.jsxs(
1307
1307
  "div",
1308
1308
  {
@@ -1641,9 +1641,9 @@ function formatDuration2(durationMs) {
1641
1641
  }
1642
1642
  function RunPanel({ open, onClose, onRun, onStop }) {
1643
1643
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.runPanel");
1644
- const nodes = chunk5H553L6R_js.useWorkflowStore((state) => state.nodes);
1645
- const isRunning = chunk5H553L6R_js.useWorkflowStore((state) => state.isRunning);
1646
- const nodeResults = chunk5H553L6R_js.useWorkflowStore((state) => state.nodeResults);
1644
+ const nodes = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodes);
1645
+ const isRunning = chunkOQAALOP2_js.useWorkflowStore((state) => state.isRunning);
1646
+ const nodeResults = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodeResults);
1647
1647
  const startNode = nodes.find((node) => node.type === "start");
1648
1648
  const hasEndNode = nodes.some((node) => node.type === "end");
1649
1649
  const hasValidStartConfig = Boolean(
@@ -1928,8 +1928,8 @@ function inferVariables(config, nodeType) {
1928
1928
  }
1929
1929
  function VariableInspector({ open, onClose }) {
1930
1930
  const translations = chunkYXN2K77G_js.useTranslations("agents.workflow.variableInspector");
1931
- const nodes = chunk5H553L6R_js.useWorkflowStore((state) => state.nodes);
1932
- const edges = chunk5H553L6R_js.useWorkflowStore((state) => state.edges);
1931
+ const nodes = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodes);
1932
+ const edges = chunkOQAALOP2_js.useWorkflowStore((state) => state.edges);
1933
1933
  const [expandedNodes, setExpandedNodes] = react.useState(/* @__PURE__ */ new Set());
1934
1934
  const toggleNodeExpansion = react.useCallback((nodeId) => {
1935
1935
  setExpandedNodes((current) => {
@@ -1991,8 +1991,8 @@ function VariableInspector({ open, onClose }) {
1991
1991
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-gray-500 dark:text-gray-400", children: translations("noNodes") })
1992
1992
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-gray-100 dark:divide-gray-800", children: nodeVariableEntries.map((entry) => {
1993
1993
  const isExpanded = expandedNodes.has(entry.nodeId);
1994
- const IconComponent = chunk5H553L6R_js.LOGIC_ICON_MAP[entry.nodeType];
1995
- const gradient = chunk5H553L6R_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
1994
+ const IconComponent = chunkOQAALOP2_js.LOGIC_ICON_MAP[entry.nodeType];
1995
+ const gradient = chunkOQAALOP2_js.LOGIC_NODE_GRADIENTS[entry.nodeType] ?? "from-gray-400 to-gray-500";
1996
1996
  const inputVariables = entry.variables.filter((variable) => variable.direction === "input");
1997
1997
  const outputVariables = entry.variables.filter((variable) => variable.direction === "output");
1998
1998
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": `variable-node-${entry.nodeId}`, children: [
@@ -2058,7 +2058,7 @@ function RunInputDialog({
2058
2058
  onRun
2059
2059
  }) {
2060
2060
  const t = chunkYXN2K77G_js.useTranslations("agents.workflow.runInputDialog");
2061
- const nodes = chunk5H553L6R_js.useWorkflowStore((state) => state.nodes);
2061
+ const nodes = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodes);
2062
2062
  const [values, setValues] = react.useState({});
2063
2063
  const inputVariableNames = react.useMemo(() => {
2064
2064
  const storeStartNode = nodes.find((node) => node.type === "start");
@@ -2085,7 +2085,7 @@ function RunInputDialog({
2085
2085
  }, [onClose]);
2086
2086
  if (!open) return null;
2087
2087
  return /* @__PURE__ */ jsxRuntime.jsxs(
2088
- chunkQ5ILCWVP_js.GlassFormModal,
2088
+ chunkMRXTY7XN_js.GlassFormModal,
2089
2089
  {
2090
2090
  open,
2091
2091
  onClose: handleClose,
@@ -2097,7 +2097,7 @@ function RunInputDialog({
2097
2097
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: inputVariableNames.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-gray-500 dark:text-gray-400", children: t("noInputs") }) : inputVariableNames.map((variableName) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2098
2098
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300", children: variableName }),
2099
2099
  /* @__PURE__ */ jsxRuntime.jsx(
2100
- chunkQ5ILCWVP_js.Input,
2100
+ chunkMRXTY7XN_js.Input,
2101
2101
  {
2102
2102
  value: values[variableName] ?? "",
2103
2103
  onChange: (event) => handleValueChange(variableName, event.target.value),
@@ -2106,8 +2106,8 @@ function RunInputDialog({
2106
2106
  )
2107
2107
  ] }, variableName)) }),
2108
2108
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex items-center justify-end gap-2", children: [
2109
- /* @__PURE__ */ jsxRuntime.jsx(chunkQ5ILCWVP_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
2110
- /* @__PURE__ */ jsxRuntime.jsxs(chunkQ5ILCWVP_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
2109
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMRXTY7XN_js.Button, { size: "sm", plain: true, onClick: handleClose, children: t("cancel") }),
2110
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkMRXTY7XN_js.Button, { size: "sm", gradient: true, onClick: handleSubmit, children: [
2111
2111
  /* @__PURE__ */ jsxRuntime.jsx(outline.PlayIcon, { className: "h-3.5 w-3.5", "data-slot": "icon" }),
2112
2112
  t("run")
2113
2113
  ] })
@@ -2140,8 +2140,8 @@ function PreviewPanel({ open, onClose, workflowId, loadRuns }) {
2140
2140
  const [isLoadingRuns, setIsLoadingRuns] = react.useState(false);
2141
2141
  const [selectedRun, setSelectedRun] = react.useState(null);
2142
2142
  const [selectedNode, setSelectedNode] = react.useState(null);
2143
- const isRunning = chunk5H553L6R_js.useWorkflowStore((state) => state.isRunning);
2144
- const nodeResults = chunk5H553L6R_js.useWorkflowStore((state) => state.nodeResults);
2143
+ const isRunning = chunkOQAALOP2_js.useWorkflowStore((state) => state.isRunning);
2144
+ const nodeResults = chunkOQAALOP2_js.useWorkflowStore((state) => state.nodeResults);
2145
2145
  const refreshRuns = react.useCallback(async () => {
2146
2146
  setIsLoadingRuns(true);
2147
2147
  try {
@@ -2297,7 +2297,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2297
2297
  onAutoSaveGraph(graph);
2298
2298
  }, [onAutoSaveGraph, onGraphSnapshot]);
2299
2299
  return /* @__PURE__ */ jsxRuntime.jsx(
2300
- chunk5H553L6R_js.Workspace,
2300
+ chunkOQAALOP2_js.Workspace,
2301
2301
  {
2302
2302
  ...workspaceProps,
2303
2303
  onGraphChange: handleGraphChange
@@ -2305,7 +2305,7 @@ var AutoSaveWorkspace = react.memo(function AutoSaveWorkspace2({
2305
2305
  );
2306
2306
  });
2307
2307
  function DynamicIslandConfirm2(props) {
2308
- return /* @__PURE__ */ jsxRuntime.jsx(chunkQ5ILCWVP_js.DynamicIslandConfirm, { ...props });
2308
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkMRXTY7XN_js.DynamicIslandConfirm, { ...props });
2309
2309
  }
2310
2310
  var JSON_PREVIEW_LINE_LIMIT = 50;
2311
2311
  function DslExportModal({ open, onClose, workflow, graph }) {
@@ -2359,7 +2359,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2359
2359
  }, [jsonString, workflow.name, workflow.version]);
2360
2360
  if (!open) return null;
2361
2361
  return /* @__PURE__ */ jsxRuntime.jsx(
2362
- chunkQ5ILCWVP_js.GlassFormModal,
2362
+ chunkMRXTY7XN_js.GlassFormModal,
2363
2363
  {
2364
2364
  open,
2365
2365
  onClose,
@@ -2402,7 +2402,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2402
2402
  ] }),
2403
2403
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
2404
2404
  /* @__PURE__ */ jsxRuntime.jsx(
2405
- chunkQ5ILCWVP_js.Button,
2405
+ chunkMRXTY7XN_js.Button,
2406
2406
  {
2407
2407
  type: "button",
2408
2408
  onClick: handleCopyToClipboard,
@@ -2419,7 +2419,7 @@ function DslExportModal({ open, onClose, workflow, graph }) {
2419
2419
  }
2420
2420
  ),
2421
2421
  /* @__PURE__ */ jsxRuntime.jsxs(
2422
- chunkQ5ILCWVP_js.Button,
2422
+ chunkMRXTY7XN_js.Button,
2423
2423
  {
2424
2424
  type: "button",
2425
2425
  onClick: handleDownloadJson,
@@ -2578,7 +2578,7 @@ function DslImportModal({ open, onClose, onImport }) {
2578
2578
  }, []);
2579
2579
  if (!open) return null;
2580
2580
  return /* @__PURE__ */ jsxRuntime.jsx(
2581
- chunkQ5ILCWVP_js.GlassFormModal,
2581
+ chunkMRXTY7XN_js.GlassFormModal,
2582
2582
  {
2583
2583
  open,
2584
2584
  onClose,
@@ -2616,7 +2616,7 @@ function DslImportModal({ open, onClose, onImport }) {
2616
2616
  ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-testid": "import-validation-result", children: [
2617
2617
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
2618
2618
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: fileName }),
2619
- /* @__PURE__ */ jsxRuntime.jsx(chunkQ5ILCWVP_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
2619
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMRXTY7XN_js.Button, { type: "button", plain: true, size: "sm", onClick: handleReset, children: translations("chooseAnother") })
2620
2620
  ] }),
2621
2621
  validationResult.isValid ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-4 dark:border-green-800 dark:bg-green-900/20", children: [
2622
2622
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -2644,9 +2644,9 @@ function DslImportModal({ open, onClose, onImport }) {
2644
2644
  ] })
2645
2645
  ] }) }),
2646
2646
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 border-t border-gray-200 px-1 py-4 dark:border-gray-700", children: [
2647
- /* @__PURE__ */ jsxRuntime.jsx(chunkQ5ILCWVP_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
2647
+ /* @__PURE__ */ jsxRuntime.jsx(chunkMRXTY7XN_js.Button, { type: "button", onClick: onClose, outline: true, size: "sm", "data-testid": "import-cancel-button", children: translations("cancel") }),
2648
2648
  /* @__PURE__ */ jsxRuntime.jsxs(
2649
- chunkQ5ILCWVP_js.Button,
2649
+ chunkMRXTY7XN_js.Button,
2650
2650
  {
2651
2651
  type: "button",
2652
2652
  onClick: handleImport,
@@ -2667,14 +2667,14 @@ function DslImportModal({ open, onClose, onImport }) {
2667
2667
  }
2668
2668
 
2669
2669
  // src/astrlabe/store/selectors.ts
2670
- var useCanUndo = () => chunk5H553L6R_js.useWorkflowStore((state) => state.past.length > 0);
2671
- var useCanRedo = () => chunk5H553L6R_js.useWorkflowStore((state) => state.future.length > 0);
2672
- var useHasCopied = () => chunk5H553L6R_js.useWorkflowStore((state) => state.clipboard !== null);
2673
- var useContextMenu = () => chunk5H553L6R_js.useWorkflowStore((state) => state.contextMenu);
2674
- var useEditingNodeId = () => chunk5H553L6R_js.useWorkflowStore((state) => state.editingNodeId);
2675
- var useSelectedNodeCount = () => chunk5H553L6R_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2676
- var useIsRunning = () => chunk5H553L6R_js.useWorkflowStore((state) => state.isRunning);
2677
- var useNodeResults = () => chunk5H553L6R_js.useWorkflowStore((state) => state.nodeResults);
2670
+ var useCanUndo = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.past.length > 0);
2671
+ var useCanRedo = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.future.length > 0);
2672
+ var useHasCopied = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.clipboard !== null);
2673
+ var useContextMenu = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.contextMenu);
2674
+ var useEditingNodeId = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.editingNodeId);
2675
+ var useSelectedNodeCount = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.nodes.filter((node) => node.selected).length);
2676
+ var useIsRunning = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.isRunning);
2677
+ var useNodeResults = () => chunkOQAALOP2_js.useWorkflowStore((state) => state.nodeResults);
2678
2678
  var DEFAULT_MAX_HISTORY = 50;
2679
2679
  function useUndoRedo(nodes, edges, setNodes, setEdges, maxHistory = DEFAULT_MAX_HISTORY) {
2680
2680
  const pastRef = react.useRef([]);
@@ -2962,227 +2962,227 @@ Object.defineProperty(exports, "validateWorkflowGraph", {
2962
2962
  });
2963
2963
  Object.defineProperty(exports, "AgentFlowNode", {
2964
2964
  enumerable: true,
2965
- get: function () { return chunk5H553L6R_js.AgentFlowNode; }
2965
+ get: function () { return chunkOQAALOP2_js.AgentFlowNode; }
2966
2966
  });
2967
2967
  Object.defineProperty(exports, "AgentToolFlowNode", {
2968
2968
  enumerable: true,
2969
- get: function () { return chunk5H553L6R_js.AgentToolFlowNode; }
2969
+ get: function () { return chunkOQAALOP2_js.AgentToolFlowNode; }
2970
2970
  });
2971
2971
  Object.defineProperty(exports, "AnswerFlowNode", {
2972
2972
  enumerable: true,
2973
- get: function () { return chunk5H553L6R_js.AnswerFlowNode; }
2973
+ get: function () { return chunkOQAALOP2_js.AnswerFlowNode; }
2974
2974
  });
2975
2975
  Object.defineProperty(exports, "AnthropicIcon", {
2976
2976
  enumerable: true,
2977
- get: function () { return chunk5H553L6R_js.AnthropicIcon; }
2977
+ get: function () { return chunkOQAALOP2_js.AnthropicIcon; }
2978
2978
  });
2979
2979
  Object.defineProperty(exports, "CodeFlowNode", {
2980
2980
  enumerable: true,
2981
- get: function () { return chunk5H553L6R_js.CodeFlowNode; }
2981
+ get: function () { return chunkOQAALOP2_js.CodeFlowNode; }
2982
2982
  });
2983
2983
  Object.defineProperty(exports, "CrewAIIcon", {
2984
2984
  enumerable: true,
2985
- get: function () { return chunk5H553L6R_js.CrewAIIcon; }
2985
+ get: function () { return chunkOQAALOP2_js.CrewAIIcon; }
2986
2986
  });
2987
2987
  Object.defineProperty(exports, "DocumentExtractorFlowNode", {
2988
2988
  enumerable: true,
2989
- get: function () { return chunk5H553L6R_js.DocumentExtractorFlowNode; }
2989
+ get: function () { return chunkOQAALOP2_js.DocumentExtractorFlowNode; }
2990
2990
  });
2991
2991
  Object.defineProperty(exports, "EndFlowNode", {
2992
2992
  enumerable: true,
2993
- get: function () { return chunk5H553L6R_js.EndFlowNode; }
2993
+ get: function () { return chunkOQAALOP2_js.EndFlowNode; }
2994
2994
  });
2995
2995
  Object.defineProperty(exports, "EntityFlowNode", {
2996
2996
  enumerable: true,
2997
- get: function () { return chunk5H553L6R_js.EntityFlowNode; }
2997
+ get: function () { return chunkOQAALOP2_js.EntityFlowNode; }
2998
2998
  });
2999
2999
  Object.defineProperty(exports, "FRAMEWORK_META", {
3000
3000
  enumerable: true,
3001
- get: function () { return chunk5H553L6R_js.FRAMEWORK_META; }
3001
+ get: function () { return chunkOQAALOP2_js.FRAMEWORK_META; }
3002
3002
  });
3003
3003
  Object.defineProperty(exports, "GoogleADKIcon", {
3004
3004
  enumerable: true,
3005
- get: function () { return chunk5H553L6R_js.GoogleADKIcon; }
3005
+ get: function () { return chunkOQAALOP2_js.GoogleADKIcon; }
3006
3006
  });
3007
3007
  Object.defineProperty(exports, "GroupFlowNode", {
3008
3008
  enumerable: true,
3009
- get: function () { return chunk5H553L6R_js.GroupFlowNode; }
3009
+ get: function () { return chunkOQAALOP2_js.GroupFlowNode; }
3010
3010
  });
3011
3011
  Object.defineProperty(exports, "HttpRequestFlowNode", {
3012
3012
  enumerable: true,
3013
- get: function () { return chunk5H553L6R_js.HttpRequestFlowNode; }
3013
+ get: function () { return chunkOQAALOP2_js.HttpRequestFlowNode; }
3014
3014
  });
3015
3015
  Object.defineProperty(exports, "IfElseFlowNode", {
3016
3016
  enumerable: true,
3017
- get: function () { return chunk5H553L6R_js.IfElseFlowNode; }
3017
+ get: function () { return chunkOQAALOP2_js.IfElseFlowNode; }
3018
3018
  });
3019
3019
  Object.defineProperty(exports, "IterationFlowNode", {
3020
3020
  enumerable: true,
3021
- get: function () { return chunk5H553L6R_js.IterationFlowNode; }
3021
+ get: function () { return chunkOQAALOP2_js.IterationFlowNode; }
3022
3022
  });
3023
3023
  Object.defineProperty(exports, "IterationStartFlowNode", {
3024
3024
  enumerable: true,
3025
- get: function () { return chunk5H553L6R_js.IterationStartFlowNode; }
3025
+ get: function () { return chunkOQAALOP2_js.IterationStartFlowNode; }
3026
3026
  });
3027
3027
  Object.defineProperty(exports, "KnowledgeBaseFlowNode", {
3028
3028
  enumerable: true,
3029
- get: function () { return chunk5H553L6R_js.KnowledgeBaseFlowNode; }
3029
+ get: function () { return chunkOQAALOP2_js.KnowledgeBaseFlowNode; }
3030
3030
  });
3031
3031
  Object.defineProperty(exports, "LOGIC_ICON_MAP", {
3032
3032
  enumerable: true,
3033
- get: function () { return chunk5H553L6R_js.LOGIC_ICON_MAP; }
3033
+ get: function () { return chunkOQAALOP2_js.LOGIC_ICON_MAP; }
3034
3034
  });
3035
3035
  Object.defineProperty(exports, "LOGIC_NODE_BADGE_COLORS", {
3036
3036
  enumerable: true,
3037
- get: function () { return chunk5H553L6R_js.LOGIC_NODE_BADGE_COLORS; }
3037
+ get: function () { return chunkOQAALOP2_js.LOGIC_NODE_BADGE_COLORS; }
3038
3038
  });
3039
3039
  Object.defineProperty(exports, "LOGIC_NODE_GRADIENTS", {
3040
3040
  enumerable: true,
3041
- get: function () { return chunk5H553L6R_js.LOGIC_NODE_GRADIENTS; }
3041
+ get: function () { return chunkOQAALOP2_js.LOGIC_NODE_GRADIENTS; }
3042
3042
  });
3043
3043
  Object.defineProperty(exports, "LOGIC_NODE_HANDLE_COLORS", {
3044
3044
  enumerable: true,
3045
- get: function () { return chunk5H553L6R_js.LOGIC_NODE_HANDLE_COLORS; }
3045
+ get: function () { return chunkOQAALOP2_js.LOGIC_NODE_HANDLE_COLORS; }
3046
3046
  });
3047
3047
  Object.defineProperty(exports, "LangChainIcon", {
3048
3048
  enumerable: true,
3049
- get: function () { return chunk5H553L6R_js.LangChainIcon; }
3049
+ get: function () { return chunkOQAALOP2_js.LangChainIcon; }
3050
3050
  });
3051
3051
  Object.defineProperty(exports, "ListOperatorFlowNode", {
3052
3052
  enumerable: true,
3053
- get: function () { return chunk5H553L6R_js.ListOperatorFlowNode; }
3053
+ get: function () { return chunkOQAALOP2_js.ListOperatorFlowNode; }
3054
3054
  });
3055
3055
  Object.defineProperty(exports, "LogicNodeDrawer", {
3056
3056
  enumerable: true,
3057
- get: function () { return chunk5H553L6R_js.LogicNodeDrawer; }
3057
+ get: function () { return chunkOQAALOP2_js.LogicNodeDrawer; }
3058
3058
  });
3059
3059
  Object.defineProperty(exports, "MINIMAP_NODE_COLORS", {
3060
3060
  enumerable: true,
3061
- get: function () { return chunk5H553L6R_js.MINIMAP_NODE_COLORS; }
3061
+ get: function () { return chunkOQAALOP2_js.MINIMAP_NODE_COLORS; }
3062
3062
  });
3063
3063
  Object.defineProperty(exports, "NodeCard", {
3064
3064
  enumerable: true,
3065
- get: function () { return chunk5H553L6R_js.NodeCard; }
3065
+ get: function () { return chunkOQAALOP2_js.NodeCard; }
3066
3066
  });
3067
3067
  Object.defineProperty(exports, "NodeContextMenu", {
3068
3068
  enumerable: true,
3069
- get: function () { return chunk5H553L6R_js.NodeContextMenu; }
3069
+ get: function () { return chunkOQAALOP2_js.NodeContextMenu; }
3070
3070
  });
3071
3071
  Object.defineProperty(exports, "NoteFlowNode", {
3072
3072
  enumerable: true,
3073
- get: function () { return chunk5H553L6R_js.NoteFlowNode; }
3073
+ get: function () { return chunkOQAALOP2_js.NoteFlowNode; }
3074
3074
  });
3075
3075
  Object.defineProperty(exports, "OpenAIIcon", {
3076
3076
  enumerable: true,
3077
- get: function () { return chunk5H553L6R_js.OpenAIIcon; }
3077
+ get: function () { return chunkOQAALOP2_js.OpenAIIcon; }
3078
3078
  });
3079
3079
  Object.defineProperty(exports, "PanelContextMenu", {
3080
3080
  enumerable: true,
3081
- get: function () { return chunk5H553L6R_js.PanelContextMenu; }
3081
+ get: function () { return chunkOQAALOP2_js.PanelContextMenu; }
3082
3082
  });
3083
3083
  Object.defineProperty(exports, "ParameterExtractorFlowNode", {
3084
3084
  enumerable: true,
3085
- get: function () { return chunk5H553L6R_js.ParameterExtractorFlowNode; }
3085
+ get: function () { return chunkOQAALOP2_js.ParameterExtractorFlowNode; }
3086
3086
  });
3087
3087
  Object.defineProperty(exports, "QuestionClassifierFlowNode", {
3088
3088
  enumerable: true,
3089
- get: function () { return chunk5H553L6R_js.QuestionClassifierFlowNode; }
3089
+ get: function () { return chunkOQAALOP2_js.QuestionClassifierFlowNode; }
3090
3090
  });
3091
3091
  Object.defineProperty(exports, "RuleFlowNode", {
3092
3092
  enumerable: true,
3093
- get: function () { return chunk5H553L6R_js.RuleFlowNode; }
3093
+ get: function () { return chunkOQAALOP2_js.RuleFlowNode; }
3094
3094
  });
3095
3095
  Object.defineProperty(exports, "SelectionContextMenu", {
3096
3096
  enumerable: true,
3097
- get: function () { return chunk5H553L6R_js.SelectionContextMenu; }
3097
+ get: function () { return chunkOQAALOP2_js.SelectionContextMenu; }
3098
3098
  });
3099
3099
  Object.defineProperty(exports, "StartFlowNode", {
3100
3100
  enumerable: true,
3101
- get: function () { return chunk5H553L6R_js.StartFlowNode; }
3101
+ get: function () { return chunkOQAALOP2_js.StartFlowNode; }
3102
3102
  });
3103
3103
  Object.defineProperty(exports, "StrandsIcon", {
3104
3104
  enumerable: true,
3105
- get: function () { return chunk5H553L6R_js.StrandsIcon; }
3105
+ get: function () { return chunkOQAALOP2_js.StrandsIcon; }
3106
3106
  });
3107
3107
  Object.defineProperty(exports, "TemplateTransformFlowNode", {
3108
3108
  enumerable: true,
3109
- get: function () { return chunk5H553L6R_js.TemplateTransformFlowNode; }
3109
+ get: function () { return chunkOQAALOP2_js.TemplateTransformFlowNode; }
3110
3110
  });
3111
3111
  Object.defineProperty(exports, "ToolFlowNode", {
3112
3112
  enumerable: true,
3113
- get: function () { return chunk5H553L6R_js.ToolFlowNode; }
3113
+ get: function () { return chunkOQAALOP2_js.ToolFlowNode; }
3114
3114
  });
3115
3115
  Object.defineProperty(exports, "VariableAggregatorFlowNode", {
3116
3116
  enumerable: true,
3117
- get: function () { return chunk5H553L6R_js.VariableAggregatorFlowNode; }
3117
+ get: function () { return chunkOQAALOP2_js.VariableAggregatorFlowNode; }
3118
3118
  });
3119
3119
  Object.defineProperty(exports, "VariableAssignerFlowNode", {
3120
3120
  enumerable: true,
3121
- get: function () { return chunk5H553L6R_js.VariableAssignerFlowNode; }
3121
+ get: function () { return chunkOQAALOP2_js.VariableAssignerFlowNode; }
3122
3122
  });
3123
3123
  Object.defineProperty(exports, "WorkflowBuilderProvider", {
3124
3124
  enumerable: true,
3125
- get: function () { return chunk5H553L6R_js.WorkflowBuilderProvider; }
3125
+ get: function () { return chunkOQAALOP2_js.WorkflowBuilderProvider; }
3126
3126
  });
3127
3127
  Object.defineProperty(exports, "Workspace", {
3128
3128
  enumerable: true,
3129
- get: function () { return chunk5H553L6R_js.Workspace; }
3129
+ get: function () { return chunkOQAALOP2_js.Workspace; }
3130
3130
  });
3131
3131
  Object.defineProperty(exports, "WorkspaceDrawer", {
3132
3132
  enumerable: true,
3133
- get: function () { return chunk5H553L6R_js.WorkspaceDrawer; }
3133
+ get: function () { return chunkOQAALOP2_js.WorkspaceDrawer; }
3134
3134
  });
3135
3135
  Object.defineProperty(exports, "getCompatibleModels", {
3136
3136
  enumerable: true,
3137
- get: function () { return chunk5H553L6R_js.getCompatibleModels; }
3137
+ get: function () { return chunkOQAALOP2_js.getCompatibleModels; }
3138
3138
  });
3139
3139
  Object.defineProperty(exports, "getDefaultFrameworkForModel", {
3140
3140
  enumerable: true,
3141
- get: function () { return chunk5H553L6R_js.getDefaultFrameworkForModel; }
3141
+ get: function () { return chunkOQAALOP2_js.getDefaultFrameworkForModel; }
3142
3142
  });
3143
3143
  Object.defineProperty(exports, "getEntityBadgeColor", {
3144
3144
  enumerable: true,
3145
- get: function () { return chunk5H553L6R_js.getEntityBadgeColor; }
3145
+ get: function () { return chunkOQAALOP2_js.getEntityBadgeColor; }
3146
3146
  });
3147
3147
  Object.defineProperty(exports, "getEntityGradient", {
3148
3148
  enumerable: true,
3149
- get: function () { return chunk5H553L6R_js.getEntityGradient; }
3149
+ get: function () { return chunkOQAALOP2_js.getEntityGradient; }
3150
3150
  });
3151
3151
  Object.defineProperty(exports, "getEntityHandleColor", {
3152
3152
  enumerable: true,
3153
- get: function () { return chunk5H553L6R_js.getEntityHandleColor; }
3153
+ get: function () { return chunkOQAALOP2_js.getEntityHandleColor; }
3154
3154
  });
3155
3155
  Object.defineProperty(exports, "getEntityIcon", {
3156
3156
  enumerable: true,
3157
- get: function () { return chunk5H553L6R_js.getEntityIcon; }
3157
+ get: function () { return chunkOQAALOP2_js.getEntityIcon; }
3158
3158
  });
3159
3159
  Object.defineProperty(exports, "getEntityMinimapColor", {
3160
3160
  enumerable: true,
3161
- get: function () { return chunk5H553L6R_js.getEntityMinimapColor; }
3161
+ get: function () { return chunkOQAALOP2_js.getEntityMinimapColor; }
3162
3162
  });
3163
3163
  Object.defineProperty(exports, "getFrameworkMeta", {
3164
3164
  enumerable: true,
3165
- get: function () { return chunk5H553L6R_js.getFrameworkMeta; }
3165
+ get: function () { return chunkOQAALOP2_js.getFrameworkMeta; }
3166
3166
  });
3167
3167
  Object.defineProperty(exports, "isModelCompatibleWithFramework", {
3168
3168
  enumerable: true,
3169
- get: function () { return chunk5H553L6R_js.isModelCompatibleWithFramework; }
3169
+ get: function () { return chunkOQAALOP2_js.isModelCompatibleWithFramework; }
3170
3170
  });
3171
3171
  Object.defineProperty(exports, "useDrawerStore", {
3172
3172
  enumerable: true,
3173
- get: function () { return chunk5H553L6R_js.useDrawerStore; }
3173
+ get: function () { return chunkOQAALOP2_js.useDrawerStore; }
3174
3174
  });
3175
3175
  Object.defineProperty(exports, "useWorkflowBuilderClient", {
3176
3176
  enumerable: true,
3177
- get: function () { return chunk5H553L6R_js.useWorkflowBuilderClient; }
3177
+ get: function () { return chunkOQAALOP2_js.useWorkflowBuilderClient; }
3178
3178
  });
3179
3179
  Object.defineProperty(exports, "useWorkflowBuilderClientOptional", {
3180
3180
  enumerable: true,
3181
- get: function () { return chunk5H553L6R_js.useWorkflowBuilderClientOptional; }
3181
+ get: function () { return chunkOQAALOP2_js.useWorkflowBuilderClientOptional; }
3182
3182
  });
3183
3183
  Object.defineProperty(exports, "useWorkflowStore", {
3184
3184
  enumerable: true,
3185
- get: function () { return chunk5H553L6R_js.useWorkflowStore; }
3185
+ get: function () { return chunkOQAALOP2_js.useWorkflowStore; }
3186
3186
  });
3187
3187
  Object.defineProperty(exports, "GraphNodeBadge", {
3188
3188
  enumerable: true,