@datatechsolutions/ui 2.11.32 → 2.11.34

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 chunk3N76EFJM_js = require('./chunk-3N76EFJM.js');
5
- var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
4
+ var chunkYHAVW6OR_js = require('./chunk-YHAVW6OR.js');
6
5
  var chunkP4YYEM4B_js = require('./chunk-P4YYEM4B.js');
7
6
  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');
@@ -30,6 +30,10 @@ var useWorkflowStore = zustand.create((set, get) => ({
30
30
  showVariableInspector: false,
31
31
  showVersionHistory: false,
32
32
  showRunPanel: false,
33
+ showMinimap: true,
34
+ showDots: true,
35
+ showShortcuts: false,
36
+ cardDisplayMode: "detailed",
33
37
  isRunning: false,
34
38
  nodeResults: {},
35
39
  selectedRunId: null,
@@ -173,6 +177,21 @@ var useWorkflowStore = zustand.create((set, get) => ({
173
177
  toggleRunPanel: () => {
174
178
  set((state) => ({ showRunPanel: !state.showRunPanel }));
175
179
  },
180
+ toggleMinimap: () => {
181
+ set((state) => ({ showMinimap: !state.showMinimap }));
182
+ },
183
+ toggleDots: () => {
184
+ set((state) => ({ showDots: !state.showDots }));
185
+ },
186
+ toggleShortcuts: () => {
187
+ set((state) => ({ showShortcuts: !state.showShortcuts }));
188
+ },
189
+ closeShortcuts: () => {
190
+ set({ showShortcuts: false });
191
+ },
192
+ toggleCardDisplayMode: () => {
193
+ set((state) => ({ cardDisplayMode: state.cardDisplayMode === "detailed" ? "compact" : "detailed" }));
194
+ },
176
195
  setIsRunning: (running) => {
177
196
  set({ isRunning: running });
178
197
  },
@@ -203,6 +222,10 @@ var useWorkflowStore = zustand.create((set, get) => ({
203
222
  showVariableInspector: false,
204
223
  showVersionHistory: false,
205
224
  showRunPanel: false,
225
+ showMinimap: true,
226
+ showDots: true,
227
+ showShortcuts: false,
228
+ cardDisplayMode: "detailed",
206
229
  isRunning: false,
207
230
  nodeResults: {},
208
231
  selectedRunId: null,
@@ -677,68 +700,77 @@ function ConditionalEdgeComponent({
677
700
  const hasLabel = Boolean(label && labelStyle);
678
701
  const insertButtonOffset = hasLabel ? -20 : 0;
679
702
  const deleteButtonOffset = hasLabel ? showInsertPopup ? -40 : -40 : showInsertPopup ? -20 : -20;
680
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
681
- /* @__PURE__ */ jsxRuntime.jsx(
682
- "path",
683
- {
684
- d: edgePath,
685
- fill: "none",
686
- stroke: "transparent",
687
- strokeWidth: 20,
688
- onMouseEnter: () => setIsHovered(true),
689
- onMouseLeave: () => setIsHovered(false),
690
- className: "react-flow__edge-interaction"
691
- }
692
- ),
693
- /* @__PURE__ */ jsxRuntime.jsx(react$1.BaseEdge, { id, path: edgePath, markerEnd, style }),
694
- /* @__PURE__ */ jsxRuntime.jsxs(react$1.EdgeLabelRenderer, { children: [
695
- hasLabel && labelStyle && /* @__PURE__ */ jsxRuntime.jsx(
696
- "div",
697
- {
698
- className: `nodrag nopan pointer-events-auto absolute rounded-full px-2 py-0.5 text-[10px] font-semibold ${labelStyle.background} ${labelStyle.text} ${labelStyle.darkBackground} ${labelStyle.darkText}`,
699
- style: {
700
- transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`
701
- },
702
- "data-testid": `edge-label-${id}`,
703
- children: label
704
- }
705
- ),
706
- showControls && !showInsertPopup && /* @__PURE__ */ jsxRuntime.jsx(
707
- "button",
708
- {
709
- type: "button",
710
- className: "nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-teal-300 bg-white shadow-md transition-all hover:scale-110 hover:bg-teal-50 dark:border-teal-600 dark:bg-gray-800 dark:hover:bg-teal-900/30",
711
- style: {
712
- transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + insertButtonOffset}px)`
713
- },
714
- onClick: handleInsertClick,
715
- "aria-label": "Insert node",
716
- children: /* @__PURE__ */ jsxRuntime.jsx(solid.PlusIcon, { className: "h-3 w-3 text-teal-500 dark:text-teal-400" })
717
- }
718
- ),
719
- showInsertPopup && /* @__PURE__ */ jsxRuntime.jsx(
720
- EdgeInsertPopup,
721
- {
722
- position: { x: labelX, y: labelY + insertButtonOffset },
723
- onSelect: handleInsertNodeSelect,
724
- onClose: () => setShowInsertPopup(false)
725
- }
726
- ),
727
- showControls && /* @__PURE__ */ jsxRuntime.jsx(
728
- "button",
729
- {
730
- type: "button",
731
- className: "nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-white shadow-md transition-all hover:scale-110 hover:bg-red-50 dark:border-red-600 dark:bg-gray-800 dark:hover:bg-red-900/30",
732
- style: {
733
- transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + deleteButtonOffset}px)`
734
- },
735
- onClick: handleDeleteEdge,
736
- "aria-label": "Delete connection",
737
- children: /* @__PURE__ */ jsxRuntime.jsx(solid.XMarkIcon, { className: "h-3 w-3 text-red-500 dark:text-red-400" })
738
- }
739
- )
740
- ] })
741
- ] });
703
+ return /* @__PURE__ */ jsxRuntime.jsxs(
704
+ "g",
705
+ {
706
+ onMouseEnter: () => setIsHovered(true),
707
+ onMouseLeave: () => setIsHovered(false),
708
+ children: [
709
+ /* @__PURE__ */ jsxRuntime.jsx(
710
+ "path",
711
+ {
712
+ d: edgePath,
713
+ fill: "none",
714
+ stroke: "transparent",
715
+ strokeWidth: 20,
716
+ className: "react-flow__edge-interaction"
717
+ }
718
+ ),
719
+ /* @__PURE__ */ jsxRuntime.jsx(react$1.BaseEdge, { id, path: edgePath, markerEnd, style }),
720
+ /* @__PURE__ */ jsxRuntime.jsxs(react$1.EdgeLabelRenderer, { children: [
721
+ hasLabel && labelStyle && /* @__PURE__ */ jsxRuntime.jsx(
722
+ "div",
723
+ {
724
+ className: `nodrag nopan pointer-events-auto absolute rounded-full px-2 py-0.5 text-[10px] font-semibold ${labelStyle.background} ${labelStyle.text} ${labelStyle.darkBackground} ${labelStyle.darkText}`,
725
+ style: {
726
+ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`
727
+ },
728
+ "data-testid": `edge-label-${id}`,
729
+ children: label
730
+ }
731
+ ),
732
+ showControls && !showInsertPopup && /* @__PURE__ */ jsxRuntime.jsx(
733
+ "button",
734
+ {
735
+ type: "button",
736
+ className: "nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-teal-300 bg-white shadow-md transition-all hover:scale-110 hover:bg-teal-50 dark:border-teal-600 dark:bg-gray-800 dark:hover:bg-teal-900/30",
737
+ style: {
738
+ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + insertButtonOffset}px)`
739
+ },
740
+ onClick: handleInsertClick,
741
+ onMouseEnter: () => setIsHovered(true),
742
+ onMouseLeave: () => setIsHovered(false),
743
+ "aria-label": "Insert node",
744
+ children: /* @__PURE__ */ jsxRuntime.jsx(solid.PlusIcon, { className: "h-3 w-3 text-teal-500 dark:text-teal-400" })
745
+ }
746
+ ),
747
+ showInsertPopup && /* @__PURE__ */ jsxRuntime.jsx(
748
+ EdgeInsertPopup,
749
+ {
750
+ position: { x: labelX, y: labelY + insertButtonOffset },
751
+ onSelect: handleInsertNodeSelect,
752
+ onClose: () => setShowInsertPopup(false)
753
+ }
754
+ ),
755
+ showControls && /* @__PURE__ */ jsxRuntime.jsx(
756
+ "button",
757
+ {
758
+ type: "button",
759
+ className: "nodrag nopan pointer-events-auto absolute flex h-5 w-5 items-center justify-center rounded-full border border-red-300 bg-white shadow-md transition-all hover:scale-110 hover:bg-red-50 dark:border-red-600 dark:bg-gray-800 dark:hover:bg-red-900/30",
760
+ style: {
761
+ transform: `translate(-50%, -50%) translate(${labelX}px,${labelY + deleteButtonOffset}px)`
762
+ },
763
+ onClick: handleDeleteEdge,
764
+ onMouseEnter: () => setIsHovered(true),
765
+ onMouseLeave: () => setIsHovered(false),
766
+ "aria-label": "Delete connection",
767
+ children: /* @__PURE__ */ jsxRuntime.jsx(solid.XMarkIcon, { className: "h-3 w-3 text-red-500 dark:text-red-400" })
768
+ }
769
+ )
770
+ ] })
771
+ ]
772
+ }
773
+ );
742
774
  }
743
775
  var ConditionalEdge = react.memo(ConditionalEdgeComponent);
744
776
  function CustomConnectionLine({
@@ -795,6 +827,8 @@ var DraggableCommandBar = react.memo(function DraggableCommandBar2({
795
827
  onControlModeChange,
796
828
  showMinimap,
797
829
  onToggleMinimap,
830
+ showDots,
831
+ onToggleDots,
798
832
  cardDisplayMode,
799
833
  onToggleCardDisplayMode,
800
834
  layoutDirection,
@@ -918,6 +952,16 @@ var DraggableCommandBar = react.memo(function DraggableCommandBar2({
918
952
  children: /* @__PURE__ */ jsxRuntime.jsx(outline.MapIcon, { className: "h-4 w-4" })
919
953
  }
920
954
  ),
955
+ /* @__PURE__ */ jsxRuntime.jsx(
956
+ "button",
957
+ {
958
+ type: "button",
959
+ onClick: onToggleDots,
960
+ title: tWorkflow("toggleDots"),
961
+ className: showDots ? activeButtonClassName : inactiveButtonClassName,
962
+ children: /* @__PURE__ */ jsxRuntime.jsx(outline.EllipsisHorizontalIcon, { className: "h-4 w-4" })
963
+ }
964
+ ),
921
965
  /* @__PURE__ */ jsxRuntime.jsx(
922
966
  "button",
923
967
  {
@@ -994,7 +1038,9 @@ var DraggableCommandBar = react.memo(function DraggableCommandBar2({
994
1038
  { keys: "\u21E7 5", label: tWorkflow("shortcutZoom50") },
995
1039
  { keys: "Esc", label: tWorkflow("shortcutDeselect") },
996
1040
  { keys: "\u232B", label: tWorkflow("shortcutDelete") },
997
- { keys: "L", label: tWorkflow("layoutMode") }
1041
+ { keys: "L", label: tWorkflow("layoutMode") },
1042
+ { keys: "G", label: tWorkflow("toggleDots") },
1043
+ { keys: "M", label: tWorkflow("toggleMinimap") }
998
1044
  ].map((shortcut) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
999
1045
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] text-gray-600 dark:text-gray-300", children: shortcut.label }),
1000
1046
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-0.5", children: shortcut.keys.split(" ").map((key) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -1601,7 +1647,7 @@ var AgentToolFlowNode = react.memo(function AgentToolFlowNode2({ id, data, selec
1601
1647
  event.stopPropagation();
1602
1648
  },
1603
1649
  children: /* @__PURE__ */ jsxRuntime.jsx(
1604
- chunk3N76EFJM_js.ToggleSwitch,
1650
+ chunkYHAVW6OR_js.ToggleSwitch,
1605
1651
  {
1606
1652
  checked: Boolean(agentTool.enabled),
1607
1653
  onChange: () => data.onToggle?.(agentTool),
@@ -1709,7 +1755,7 @@ var ToolFlowNode = react.memo(function ToolFlowNode2({ id, data, selected }) {
1709
1755
  event.preventDefault();
1710
1756
  },
1711
1757
  children: /* @__PURE__ */ jsxRuntime.jsx(
1712
- chunk3N76EFJM_js.ToggleSwitch,
1758
+ chunkYHAVW6OR_js.ToggleSwitch,
1713
1759
  {
1714
1760
  checked: Boolean(tool.enabled),
1715
1761
  onChange: () => onToggle(tool),
@@ -1861,7 +1907,7 @@ var RuleFlowNode = react.memo(function RuleFlowNode2({ id, data, selected }) {
1861
1907
  event.preventDefault();
1862
1908
  },
1863
1909
  children: /* @__PURE__ */ jsxRuntime.jsx(
1864
- chunk3N76EFJM_js.ToggleSwitch,
1910
+ chunkYHAVW6OR_js.ToggleSwitch,
1865
1911
  {
1866
1912
  checked: Boolean(rule.enabled),
1867
1913
  onChange: () => onToggle(rule),
@@ -3153,8 +3199,8 @@ function ConfigFormActions({
3153
3199
  saveDisabled = false
3154
3200
  }) {
3155
3201
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 border-t border-gray-200 pt-4 dark:border-gray-700", children: [
3156
- /* @__PURE__ */ jsxRuntime.jsx(chunk3N76EFJM_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3157
- /* @__PURE__ */ jsxRuntime.jsx(chunk3N76EFJM_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3202
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYHAVW6OR_js.Button, { type: "button", outline: true, onClick: onCancel, children: cancelLabel }),
3203
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYHAVW6OR_js.Button, { type: "button", onClick: onSave, disabled: saveDisabled, children: saveLabel })
3158
3204
  ] });
3159
3205
  }
3160
3206
  var COLOR_CLASSES = {
@@ -3401,7 +3447,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3401
3447
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-center justify-between", children: [
3402
3448
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("conditionsLabel") }),
3403
3449
  /* @__PURE__ */ jsxRuntime.jsx(
3404
- chunk3N76EFJM_js.Button,
3450
+ chunkYHAVW6OR_js.Button,
3405
3451
  {
3406
3452
  type: "button",
3407
3453
  onClick: handleAddCondition,
@@ -3412,7 +3458,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3412
3458
  /* @__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: [
3413
3459
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid flex-1 grid-cols-3 gap-2", children: [
3414
3460
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3415
- chunk3N76EFJM_js.FormInput,
3461
+ chunkYHAVW6OR_js.FormInput,
3416
3462
  {
3417
3463
  type: "text",
3418
3464
  label: t("variableLabel"),
@@ -3423,7 +3469,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3423
3469
  }
3424
3470
  ) }),
3425
3471
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3426
- chunk3N76EFJM_js.FormSelect,
3472
+ chunkYHAVW6OR_js.FormSelect,
3427
3473
  {
3428
3474
  label: t("operatorLabel"),
3429
3475
  value: condition.operator,
@@ -3433,7 +3479,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3433
3479
  }
3434
3480
  ) }),
3435
3481
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
3436
- chunk3N76EFJM_js.FormInput,
3482
+ chunkYHAVW6OR_js.FormInput,
3437
3483
  {
3438
3484
  type: "text",
3439
3485
  label: t("valueLabel"),
@@ -3445,7 +3491,7 @@ function IfElseNodeConfigForm({ config, onSave, onCancel }) {
3445
3491
  ) })
3446
3492
  ] }),
3447
3493
  conditions.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
3448
- chunk3N76EFJM_js.IconButton,
3494
+ chunkYHAVW6OR_js.IconButton,
3449
3495
  {
3450
3496
  onClick: () => handleRemoveCondition(index),
3451
3497
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3600,7 +3646,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3600
3646
  };
3601
3647
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3602
3648
  /* @__PURE__ */ jsxRuntime.jsx(
3603
- chunk3N76EFJM_js.FormSelect,
3649
+ chunkYHAVW6OR_js.FormSelect,
3604
3650
  {
3605
3651
  label: t("methodLabel"),
3606
3652
  value: method,
@@ -3609,7 +3655,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3609
3655
  }
3610
3656
  ),
3611
3657
  /* @__PURE__ */ jsxRuntime.jsx(
3612
- chunk3N76EFJM_js.FormInput,
3658
+ chunkYHAVW6OR_js.FormInput,
3613
3659
  {
3614
3660
  type: "text",
3615
3661
  label: t("urlLabel"),
@@ -3622,7 +3668,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3622
3668
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
3623
3669
  /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: t("headersLabel") }),
3624
3670
  /* @__PURE__ */ jsxRuntime.jsx(
3625
- chunk3N76EFJM_js.Button,
3671
+ chunkYHAVW6OR_js.Button,
3626
3672
  {
3627
3673
  type: "button",
3628
3674
  onClick: handleAddHeader,
@@ -3632,7 +3678,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3632
3678
  ] }),
3633
3679
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: headerEntries.map((entry, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3634
3680
  /* @__PURE__ */ jsxRuntime.jsx(
3635
- chunk3N76EFJM_js.FormInput,
3681
+ chunkYHAVW6OR_js.FormInput,
3636
3682
  {
3637
3683
  type: "text",
3638
3684
  value: entry.key,
@@ -3642,7 +3688,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3642
3688
  }
3643
3689
  ),
3644
3690
  /* @__PURE__ */ jsxRuntime.jsx(
3645
- chunk3N76EFJM_js.FormInput,
3691
+ chunkYHAVW6OR_js.FormInput,
3646
3692
  {
3647
3693
  type: "text",
3648
3694
  value: entry.value,
@@ -3652,7 +3698,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3652
3698
  }
3653
3699
  ),
3654
3700
  /* @__PURE__ */ jsxRuntime.jsx(
3655
- chunk3N76EFJM_js.IconButton,
3701
+ chunkYHAVW6OR_js.IconButton,
3656
3702
  {
3657
3703
  onClick: () => handleRemoveHeader(index),
3658
3704
  icon: /* @__PURE__ */ jsxRuntime.jsx(outline.TrashIcon, { className: "h-4 w-4" }),
@@ -3664,7 +3710,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3664
3710
  ] }, index)) })
3665
3711
  ] }),
3666
3712
  method !== "GET" && /* @__PURE__ */ jsxRuntime.jsx(
3667
- chunk3N76EFJM_js.FormTextarea,
3713
+ chunkYHAVW6OR_js.FormTextarea,
3668
3714
  {
3669
3715
  label: t("bodyLabel"),
3670
3716
  value: body,
@@ -3675,7 +3721,7 @@ function HttpRequestNodeConfigForm({ config, onSave, onCancel }) {
3675
3721
  }
3676
3722
  ),
3677
3723
  /* @__PURE__ */ jsxRuntime.jsx(
3678
- chunk3N76EFJM_js.FormInput,
3724
+ chunkYHAVW6OR_js.FormInput,
3679
3725
  {
3680
3726
  type: "number",
3681
3727
  label: t("timeoutLabel"),
@@ -3706,7 +3752,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3706
3752
  };
3707
3753
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3708
3754
  /* @__PURE__ */ jsxRuntime.jsx(
3709
- chunk3N76EFJM_js.FormTextarea,
3755
+ chunkYHAVW6OR_js.FormTextarea,
3710
3756
  {
3711
3757
  label: t("templateLabel"),
3712
3758
  value: template,
@@ -3717,7 +3763,7 @@ function TemplateTransformNodeConfigForm({ config, onSave, onCancel }) {
3717
3763
  }
3718
3764
  ),
3719
3765
  /* @__PURE__ */ jsxRuntime.jsx(
3720
- chunk3N76EFJM_js.FormInput,
3766
+ chunkYHAVW6OR_js.FormInput,
3721
3767
  {
3722
3768
  type: "text",
3723
3769
  label: t("outputVariableLabel"),
@@ -3746,7 +3792,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3746
3792
  };
3747
3793
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3748
3794
  /* @__PURE__ */ jsxRuntime.jsx(
3749
- chunk3N76EFJM_js.FormInput,
3795
+ chunkYHAVW6OR_js.FormInput,
3750
3796
  {
3751
3797
  type: "text",
3752
3798
  label: t("iteratorVariableLabel"),
@@ -3756,7 +3802,7 @@ function IterationNodeConfigForm({ config, onSave, onCancel }) {
3756
3802
  }
3757
3803
  ),
3758
3804
  /* @__PURE__ */ jsxRuntime.jsx(
3759
- chunk3N76EFJM_js.FormInput,
3805
+ chunkYHAVW6OR_js.FormInput,
3760
3806
  {
3761
3807
  type: "number",
3762
3808
  label: t("maxIterationsLabel"),
@@ -3787,7 +3833,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3787
3833
  };
3788
3834
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3789
3835
  /* @__PURE__ */ jsxRuntime.jsx(
3790
- chunk3N76EFJM_js.FormInput,
3836
+ chunkYHAVW6OR_js.FormInput,
3791
3837
  {
3792
3838
  type: "text",
3793
3839
  label: t("sourceIdLabel"),
@@ -3797,7 +3843,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3797
3843
  }
3798
3844
  ),
3799
3845
  /* @__PURE__ */ jsxRuntime.jsx(
3800
- chunk3N76EFJM_js.FormInput,
3846
+ chunkYHAVW6OR_js.FormInput,
3801
3847
  {
3802
3848
  type: "number",
3803
3849
  label: t("topKLabel"),
@@ -3808,7 +3854,7 @@ function KnowledgeBaseNodeConfigForm({ config, onSave, onCancel }) {
3808
3854
  }
3809
3855
  ),
3810
3856
  /* @__PURE__ */ jsxRuntime.jsx(
3811
- chunk3N76EFJM_js.FormInput,
3857
+ chunkYHAVW6OR_js.FormInput,
3812
3858
  {
3813
3859
  type: "number",
3814
3860
  label: t("similarityThresholdLabel"),
@@ -3839,7 +3885,7 @@ function AnswerNodeConfigForm({ config, onSave, onCancel }) {
3839
3885
  };
3840
3886
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
3841
3887
  /* @__PURE__ */ jsxRuntime.jsx(
3842
- chunk3N76EFJM_js.FormTextarea,
3888
+ chunkYHAVW6OR_js.FormTextarea,
3843
3889
  {
3844
3890
  label: t("outputTemplateLabel"),
3845
3891
  hint: t("outputTemplateHelp"),
@@ -4273,7 +4319,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4273
4319
  }
4274
4320
  ),
4275
4321
  /* @__PURE__ */ jsxRuntime.jsx(
4276
- chunk3N76EFJM_js.FormInput,
4322
+ chunkYHAVW6OR_js.FormInput,
4277
4323
  {
4278
4324
  type: "text",
4279
4325
  label: t("outputVariableLabel"),
@@ -4283,7 +4329,7 @@ function VariableAggregatorNodeConfigForm({ config, onSave, onCancel }) {
4283
4329
  }
4284
4330
  ),
4285
4331
  /* @__PURE__ */ jsxRuntime.jsx(
4286
- chunk3N76EFJM_js.FormSelect,
4332
+ chunkYHAVW6OR_js.FormSelect,
4287
4333
  {
4288
4334
  label: t("aggregationModeLabel"),
4289
4335
  value: aggregationMode,
@@ -4316,7 +4362,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4316
4362
  };
4317
4363
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4318
4364
  /* @__PURE__ */ jsxRuntime.jsx(
4319
- chunk3N76EFJM_js.FormSelect,
4365
+ chunkYHAVW6OR_js.FormSelect,
4320
4366
  {
4321
4367
  label: t("extractionModeLabel"),
4322
4368
  value: extractionMode,
@@ -4325,7 +4371,7 @@ function DocumentExtractorNodeConfigForm({ config, onSave, onCancel }) {
4325
4371
  }
4326
4372
  ),
4327
4373
  /* @__PURE__ */ jsxRuntime.jsx(
4328
- chunk3N76EFJM_js.FormInput,
4374
+ chunkYHAVW6OR_js.FormInput,
4329
4375
  {
4330
4376
  type: "text",
4331
4377
  label: t("outputVariableLabel"),
@@ -4502,7 +4548,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4502
4548
  };
4503
4549
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
4504
4550
  /* @__PURE__ */ jsxRuntime.jsx(
4505
- chunk3N76EFJM_js.FormInput,
4551
+ chunkYHAVW6OR_js.FormInput,
4506
4552
  {
4507
4553
  type: "text",
4508
4554
  label: t("iteratorVariableLabel"),
@@ -4512,7 +4558,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4512
4558
  }
4513
4559
  ),
4514
4560
  /* @__PURE__ */ jsxRuntime.jsx(
4515
- chunk3N76EFJM_js.FormInput,
4561
+ chunkYHAVW6OR_js.FormInput,
4516
4562
  {
4517
4563
  type: "text",
4518
4564
  label: t("itemVariableLabel"),
@@ -4522,7 +4568,7 @@ function IterationStartNodeConfigForm({ config, onSave, onCancel }) {
4522
4568
  }
4523
4569
  ),
4524
4570
  /* @__PURE__ */ jsxRuntime.jsx(
4525
- chunk3N76EFJM_js.FormInput,
4571
+ chunkYHAVW6OR_js.FormInput,
4526
4572
  {
4527
4573
  type: "text",
4528
4574
  label: t("indexVariableLabel"),
@@ -5116,7 +5162,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5116
5162
  };
5117
5163
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5118
5164
  /* @__PURE__ */ jsxRuntime.jsx(
5119
- chunk3N76EFJM_js.FormInput,
5165
+ chunkYHAVW6OR_js.FormInput,
5120
5166
  {
5121
5167
  type: "text",
5122
5168
  label: translations("labelField"),
@@ -5126,7 +5172,7 @@ function GroupNodeConfigForm({ config, onSave, onCancel }) {
5126
5172
  }
5127
5173
  ),
5128
5174
  /* @__PURE__ */ jsxRuntime.jsx(
5129
- chunk3N76EFJM_js.FormTextarea,
5175
+ chunkYHAVW6OR_js.FormTextarea,
5130
5176
  {
5131
5177
  label: translations("descriptionField"),
5132
5178
  value: description,
@@ -5284,7 +5330,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5284
5330
  };
5285
5331
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
5286
5332
  /* @__PURE__ */ jsxRuntime.jsx(
5287
- chunk3N76EFJM_js.FormInput,
5333
+ chunkYHAVW6OR_js.FormInput,
5288
5334
  {
5289
5335
  type: "text",
5290
5336
  label: t("nameLabel"),
@@ -5294,7 +5340,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5294
5340
  }
5295
5341
  ),
5296
5342
  /* @__PURE__ */ jsxRuntime.jsx(
5297
- chunk3N76EFJM_js.FormSelect,
5343
+ chunkYHAVW6OR_js.FormSelect,
5298
5344
  {
5299
5345
  label: t("providerTypeLabel"),
5300
5346
  value: providerType,
@@ -5303,7 +5349,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5303
5349
  }
5304
5350
  ),
5305
5351
  showRegion && /* @__PURE__ */ jsxRuntime.jsx(
5306
- chunk3N76EFJM_js.FormSelect,
5352
+ chunkYHAVW6OR_js.FormSelect,
5307
5353
  {
5308
5354
  label: t("regionLabel"),
5309
5355
  value: region,
@@ -5312,7 +5358,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5312
5358
  }
5313
5359
  ),
5314
5360
  showEndpoint && /* @__PURE__ */ jsxRuntime.jsx(
5315
- chunk3N76EFJM_js.FormInput,
5361
+ chunkYHAVW6OR_js.FormInput,
5316
5362
  {
5317
5363
  type: "text",
5318
5364
  label: t("endpointLabel"),
@@ -5322,7 +5368,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5322
5368
  }
5323
5369
  ),
5324
5370
  showApiKey && /* @__PURE__ */ jsxRuntime.jsx(
5325
- chunk3N76EFJM_js.FormInput,
5371
+ chunkYHAVW6OR_js.FormInput,
5326
5372
  {
5327
5373
  type: "password",
5328
5374
  label: t("apiKeyLabel"),
@@ -5332,7 +5378,7 @@ function ModelProviderNodeConfigForm({ config, onSave, onCancel }) {
5332
5378
  }
5333
5379
  ),
5334
5380
  showCredentialRef && /* @__PURE__ */ jsxRuntime.jsx(
5335
- chunk3N76EFJM_js.FormInput,
5381
+ chunkYHAVW6OR_js.FormInput,
5336
5382
  {
5337
5383
  type: "text",
5338
5384
  label: t("credentialRefLabel"),
@@ -5476,7 +5522,7 @@ function LogicNodeModal({ onSave, entities = [], datasources = [], onLoadTables,
5476
5522
  }
5477
5523
  };
5478
5524
  return /* @__PURE__ */ jsxRuntime.jsx(
5479
- chunk3N76EFJM_js.GlassModal,
5525
+ chunkYHAVW6OR_js.GlassModal,
5480
5526
  {
5481
5527
  open,
5482
5528
  onClose: closeModal,
@@ -5536,7 +5582,7 @@ function NodeContextMenu({ position, targetId, onClose, onEdit, onDuplicate, onC
5536
5582
  }
5537
5583
  ];
5538
5584
  return /* @__PURE__ */ jsxRuntime.jsx(
5539
- chunk3N76EFJM_js.ContextMenu,
5585
+ chunkYHAVW6OR_js.ContextMenu,
5540
5586
  {
5541
5587
  position,
5542
5588
  onClose,
@@ -5593,7 +5639,7 @@ function PanelContextMenu({ position, onClose, onPaste, onSelectAll, onFitView,
5593
5639
  }
5594
5640
  ];
5595
5641
  return /* @__PURE__ */ jsxRuntime.jsx(
5596
- chunk3N76EFJM_js.ContextMenu,
5642
+ chunkYHAVW6OR_js.ContextMenu,
5597
5643
  {
5598
5644
  position,
5599
5645
  onClose,
@@ -5740,7 +5786,7 @@ function SelectionContextMenu({
5740
5786
  }
5741
5787
  ];
5742
5788
  return /* @__PURE__ */ jsxRuntime.jsx(
5743
- chunk3N76EFJM_js.ContextMenu,
5789
+ chunkYHAVW6OR_js.ContextMenu,
5744
5790
  {
5745
5791
  position,
5746
5792
  onClose,
@@ -5956,10 +6002,16 @@ function WorkflowCanvasInner({
5956
6002
  const canRedo = useWorkflowStore((state) => state.future.length > 0);
5957
6003
  const controlMode = useWorkflowStore((state) => state.controlMode);
5958
6004
  const setControlMode = useWorkflowStore((state) => state.setControlMode);
5959
- const [showMinimap, setShowMinimap] = react.useState(true);
5960
- const [showShortcuts, setShowShortcuts] = react.useState(false);
5961
- const [cardDisplayMode, setCardDisplayMode] = react.useState("detailed");
6005
+ const showMinimap = useWorkflowStore((s) => s.showMinimap);
6006
+ const showDots = useWorkflowStore((s) => s.showDots);
6007
+ const showShortcuts = useWorkflowStore((s) => s.showShortcuts);
6008
+ const cardDisplayMode = useWorkflowStore((s) => s.cardDisplayMode);
5962
6009
  const layoutDirection = useWorkflowStore((s) => s.layoutDirection);
6010
+ const toggleMinimap = useWorkflowStore((s) => s.toggleMinimap);
6011
+ const toggleDots = useWorkflowStore((s) => s.toggleDots);
6012
+ const toggleShortcuts = useWorkflowStore((s) => s.toggleShortcuts);
6013
+ const closeShortcuts = useWorkflowStore((s) => s.closeShortcuts);
6014
+ const toggleCardDisplayMode = useWorkflowStore((s) => s.toggleCardDisplayMode);
5963
6015
  const setLayoutDirection = useWorkflowStore((s) => s.setLayoutDirection);
5964
6016
  const [editingLogicNodeId, setEditingLogicNodeId] = react.useState(null);
5965
6017
  const handleEditLogicNode = react.useCallback((nodeId) => {
@@ -6734,6 +6786,14 @@ function WorkflowCanvasInner({
6734
6786
  setControlMode("hand");
6735
6787
  return;
6736
6788
  }
6789
+ if (event.key.toLowerCase() === "g") {
6790
+ toggleDots();
6791
+ return;
6792
+ }
6793
+ if (event.key.toLowerCase() === "m") {
6794
+ toggleMinimap();
6795
+ return;
6796
+ }
6737
6797
  if (event.shiftKey && event.key === "!") {
6738
6798
  event.preventDefault();
6739
6799
  zoomTo(1);
@@ -7299,7 +7359,7 @@ function WorkflowCanvasInner({
7299
7359
  deleteKeyCode: ["Backspace", "Delete"],
7300
7360
  connectionLineStyle: { stroke: GRAPH_ACTIVE_EDGE_COLOR, strokeWidth: 2 },
7301
7361
  children: [
7302
- /* @__PURE__ */ jsxRuntime.jsx(
7362
+ showDots && /* @__PURE__ */ jsxRuntime.jsx(
7303
7363
  Background,
7304
7364
  {
7305
7365
  variant: react$1.BackgroundVariant.Dots,
@@ -7335,14 +7395,16 @@ function WorkflowCanvasInner({
7335
7395
  controlMode,
7336
7396
  onControlModeChange: setControlMode,
7337
7397
  showMinimap,
7338
- onToggleMinimap: () => setShowMinimap((previous) => !previous),
7398
+ onToggleMinimap: toggleMinimap,
7399
+ showDots,
7400
+ onToggleDots: toggleDots,
7339
7401
  cardDisplayMode,
7340
- onToggleCardDisplayMode: () => setCardDisplayMode((previous) => previous === "detailed" ? "compact" : "detailed"),
7402
+ onToggleCardDisplayMode: toggleCardDisplayMode,
7341
7403
  layoutDirection,
7342
7404
  onLayoutDirectionChange: handleLayoutDirectionChange,
7343
7405
  showShortcuts,
7344
- onToggleShortcuts: () => setShowShortcuts((previous) => !previous),
7345
- onCloseShortcuts: () => setShowShortcuts(false),
7406
+ onToggleShortcuts: toggleShortcuts,
7407
+ onCloseShortcuts: closeShortcuts,
7346
7408
  tWorkflow
7347
7409
  }
7348
7410
  ),
@@ -7613,5 +7675,5 @@ exports.useModalStore = useModalStore;
7613
7675
  exports.useWorkflowBuilderClient = useWorkflowBuilderClient;
7614
7676
  exports.useWorkflowBuilderClientOptional = useWorkflowBuilderClientOptional;
7615
7677
  exports.useWorkflowStore = useWorkflowStore;
7616
- //# sourceMappingURL=chunk-7O3FQ2PW.js.map
7617
- //# sourceMappingURL=chunk-7O3FQ2PW.js.map
7678
+ //# sourceMappingURL=chunk-D6MUVAMK.js.map
7679
+ //# sourceMappingURL=chunk-D6MUVAMK.js.map