From 5b51980278e136151e874624855b52bbf12d2dad Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Wed, 29 Apr 2026 01:26:38 +0200 Subject: [PATCH] fix(web): make ConfirmDialog Escape capture-phase to prevent leaking to ancestor modals --- packages/web/src/components/ui/ConfirmDialog.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/web/src/components/ui/ConfirmDialog.tsx b/packages/web/src/components/ui/ConfirmDialog.tsx index 27a34ab2..6d141a9f 100644 --- a/packages/web/src/components/ui/ConfirmDialog.tsx +++ b/packages/web/src/components/ui/ConfirmDialog.tsx @@ -25,13 +25,16 @@ export function ConfirmDialog({ loading = false, }: ConfirmDialogProps) { const handleKeyDown = useCallback((e: KeyboardEvent) => { - if (e.key === 'Escape' && !loading) onClose(); + if (e.key === 'Escape' && !loading) { + e.stopPropagation(); + onClose(); + } }, [onClose, loading]); useEffect(() => { if (isOpen) { - document.addEventListener('keydown', handleKeyDown); - return () => document.removeEventListener('keydown', handleKeyDown); + document.addEventListener('keydown', handleKeyDown, true); + return () => document.removeEventListener('keydown', handleKeyDown, true); } }, [isOpen, handleKeyDown]);