Fix workspace board portal layering (#2096)

This commit is contained in:
Neil 2026-05-16 12:24:25 -07:00 committed by GitHub
parent e9029feec1
commit fad2162d87
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 4 deletions

View File

@ -49,7 +49,7 @@ export default function WorkspaceStatusAppearancePopover({
align="end"
side="left"
sideOffset={8}
className="w-72 p-2"
className="z-[80] w-72 p-2"
data-workspace-status-appearance-popover=""
onOpenAutoFocus={(event) => event.preventDefault()}
>

View File

@ -1,11 +1,27 @@
import { useEffect } from 'react'
import type React from 'react'
const WORKSPACE_BOARD_KEEP_OPEN_SELECTOR =
'[data-workspace-board-trigger], [data-workspace-board-preserve-open]'
const WORKSPACE_BOARD_KEEP_OPEN_SELECTOR = [
'[data-workspace-board-trigger]',
'[data-workspace-board-preserve-open]',
'[data-workspace-status-appearance-popover]',
'[data-radix-popper-content-wrapper]',
'[data-slot="dropdown-menu-content"]',
'[data-slot="context-menu-content"]',
'[data-slot="popover-content"]',
'[data-slot="dialog-content"]',
'[data-slot="dialog-overlay"]',
'[role="dialog"][data-state="open"]',
'[role="alertdialog"][data-state="open"]',
'[role="menu"][data-state="open"]'
].join(', ')
export function isWorkspaceBoardKeepOpenTarget(target: EventTarget | null): boolean {
return target instanceof Element && Boolean(target.closest(WORKSPACE_BOARD_KEEP_OPEN_SELECTOR))
const element =
target instanceof Element ? target : target instanceof Node ? target.parentElement : null
// Why: board-owned menus and confirmation dialogs portal to document.body,
// so DOM containment alone would treat their clicks/focus as board exits.
return Boolean(element?.closest(WORKSPACE_BOARD_KEEP_OPEN_SELECTOR))
}
export function useWorkspaceKanbanOutsideDismiss(params: {