diff --git a/frontend/src/components/ui-new/containers/ProjectSelectorContainer.tsx b/frontend/src/components/ui-new/containers/ProjectSelectorContainer.tsx index d627720f..e9217ae8 100644 --- a/frontend/src/components/ui-new/containers/ProjectSelectorContainer.tsx +++ b/frontend/src/components/ui-new/containers/ProjectSelectorContainer.tsx @@ -180,6 +180,7 @@ export function ProjectSelectorContainer({ setHighlightedIndex(0)} + preventFocusOnHover icon={PlusIcon} className={cn( 'text-accent', @@ -208,6 +209,7 @@ export function ProjectSelectorContainer({ handleSelect(item)} onMouseEnter={() => setHighlightedIndex(idx + 1)} + preventFocusOnHover className={cn( isSelected && 'bg-secondary', isHighlighted && 'bg-secondary' diff --git a/frontend/src/components/ui-new/primitives/Dropdown.tsx b/frontend/src/components/ui-new/primitives/Dropdown.tsx index eae530cf..717e34e6 100644 --- a/frontend/src/components/ui-new/primitives/Dropdown.tsx +++ b/frontend/src/components/ui-new/primitives/Dropdown.tsx @@ -142,6 +142,8 @@ interface DropdownMenuItemProps icon?: Icon; badge?: string; variant?: 'default' | 'destructive'; + /** When true, prevents hover from stealing focus (useful for searchable dropdowns) */ + preventFocusOnHover?: boolean; } const DropdownMenuItem = React.forwardRef< @@ -154,6 +156,9 @@ const DropdownMenuItem = React.forwardRef< icon: IconComponent, badge, variant = 'default', + preventFocusOnHover = false, + onPointerMove, + onPointerLeave, children, ...props }, @@ -171,6 +176,22 @@ const DropdownMenuItem = React.forwardRef< variant === 'destructive' && 'text-error', className )} + onPointerMove={ + preventFocusOnHover + ? (e) => { + e.preventDefault(); + onPointerMove?.(e); + } + : onPointerMove + } + onPointerLeave={ + preventFocusOnHover + ? (e) => { + e.preventDefault(); + onPointerLeave?.(e); + } + : onPointerLeave + } {...props} > {IconComponent && } diff --git a/frontend/src/components/ui-new/primitives/SearchableDropdown.tsx b/frontend/src/components/ui-new/primitives/SearchableDropdown.tsx index f5ab00e7..8e887311 100644 --- a/frontend/src/components/ui-new/primitives/SearchableDropdown.tsx +++ b/frontend/src/components/ui-new/primitives/SearchableDropdown.tsx @@ -108,6 +108,7 @@ export function SearchableDropdown({ onSelect(item)} onMouseEnter={() => onHighlightedIndexChange(idx)} + preventFocusOnHover badge={getItemBadge?.(item)} className={cn( isSelected && 'bg-secondary',