diff --git a/src/components/GroupsOverlay.tsx b/src/components/GroupsOverlay.tsx index 1e9e9a1a..6c2a0a1b 100644 --- a/src/components/GroupsOverlay.tsx +++ b/src/components/GroupsOverlay.tsx @@ -1,7 +1,7 @@ "use client"; import { useCallback, useState, useRef, useEffect } from "react"; -import { useReactFlow, ViewportPortal } from "@xyflow/react"; +import { useViewport, ViewportPortal } from "@xyflow/react"; import { useWorkflowStore, GROUP_COLORS } from "@/store/workflowStore"; import { GroupColor } from "@/types"; @@ -280,52 +280,58 @@ function GroupControls({ groupId, zoom }: GroupControlsProps) { }} > {/* Floating group name label - top-left, viewport-scaled */} + {/* Outer wrapper: zero-height anchor at the top edge of the group */}
+ {/* Inner scaled element: bottom-anchored so it grows upward, scale keeps bottom-left fixed */}
- {isEditing ? ( - setEditName(e.target.value)} - onBlur={handleNameSubmit} - onKeyDown={handleKeyDown} - className="bg-transparent border-none outline-none text-xs font-medium text-white px-0 py-0" - style={{ minWidth: 60, maxWidth: 200, width: `${Math.max(60, editName.length * 7)}px` }} - /> - ) : ( - setIsEditing(true)} - > - {group.name} - - )} +
+ {isEditing ? ( + setEditName(e.target.value)} + onBlur={handleNameSubmit} + onKeyDown={handleKeyDown} + className="bg-transparent border-none outline-none text-xs font-medium text-white px-0 py-0" + style={{ minWidth: 60, maxWidth: 200, width: `${Math.max(60, editName.length * 7)}px` }} + /> + ) : ( + { e.stopPropagation(); setIsEditing(true); }} + > + {group.name} + + )} +
- {/* Floating controls - top-right, viewport-scaled */} + {/* Floating controls - top-right, scales naturally with canvas zoom */}
-
+
{/* Color Picker */}