From 0f6e40a5ba545436ee73f9361b90cb6b55b5d5f9 Mon Sep 17 00:00:00 2001 From: Kyle Pope Date: Wed, 18 Mar 2026 01:20:57 +0800 Subject: [PATCH] Fix dropdown clipping: remove overflow constraints on parent containers Revert fixed-positioning approach (caused z-index and placement issues). Instead fix the root cause: parent containers with overflow that clipped absolutely-positioned dropdowns. - IAMPage: Remove overflow-x-auto on table wrapper (columns already hide via responsive classes, no horizontal scroll needed) - AlertBanner: Remove max-h-48 overflow-y-auto on alerts list (alerts are naturally bounded, constraint clipped SnoozeDropdown) - Revert UserActionsMenu and SnoozeDropdown to simple absolute positioning Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/components/admin/IAMPage.tsx | 2 +- .../src/components/admin/UserActionsMenu.tsx | 16 ++----------- .../src/components/dashboard/AlertBanner.tsx | 2 +- .../components/reminders/SnoozeDropdown.tsx | 23 ++++--------------- 4 files changed, 8 insertions(+), 35 deletions(-) diff --git a/frontend/src/components/admin/IAMPage.tsx b/frontend/src/components/admin/IAMPage.tsx index 03024f5..68560c6 100644 --- a/frontend/src/components/admin/IAMPage.tsx +++ b/frontend/src/components/admin/IAMPage.tsx @@ -160,7 +160,7 @@ export default function IAMPage() { {searchQuery ? 'No users match your search.' : 'No users found.'}

) : ( -
+
diff --git a/frontend/src/components/admin/UserActionsMenu.tsx b/frontend/src/components/admin/UserActionsMenu.tsx index b808e7b..60c99d5 100644 --- a/frontend/src/components/admin/UserActionsMenu.tsx +++ b/frontend/src/components/admin/UserActionsMenu.tsx @@ -46,8 +46,6 @@ export default function UserActionsMenu({ user, currentUsername }: UserActionsMe const [roleSubmenuOpen, setRoleSubmenuOpen] = useState(false); const [tempPassword, setTempPassword] = useState(null); const menuRef = useRef(null); - const buttonRef = useRef(null); - const [menuPos, setMenuPos] = useState<{ top: number; right: number } | null>(null); const updateRole = useUpdateRole(); const resetPassword = useResetPassword(); @@ -125,17 +123,10 @@ export default function UserActionsMenu({ user, currentUsername }: UserActionsMe return (
{open && ( -
+
{/* Edit Role */}
-
+
{alerts.map((alert) => (
(null); - const buttonRef = useRef(null); - const [menuPos, setMenuPos] = useState<{ top?: number; bottom?: number; right: number } | null>(null); useEffect(() => { if (!open) return; @@ -41,18 +39,7 @@ export default function SnoozeDropdown({ onSnooze, label, direction = 'up', opti return (
{open && ( -
+
{options.map((opt) => (