From f7622a58078ee5b5e27996e4c628169be23c9ca4 Mon Sep 17 00:00:00 2001 From: Mantas Kantautas Date: Fri, 23 Oct 2026 09:25:48 +0300 Subject: [PATCH] [popups] Skip the focus-out close for a popup that already closed --- .../focus/FloatingFocusManager.test.tsx | 66 +++++++++++++++++++ .../popups/focus/FloatingFocusManager.tsx | 6 +- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/packages/react/src/utils/popups/focus/FloatingFocusManager.test.tsx b/packages/react/src/utils/popups/focus/FloatingFocusManager.test.tsx index 4112e33d09d..27d2af2eb13 100644 --- a/packages/react/src/utils/popups/focus/FloatingFocusManager.test.tsx +++ b/packages/react/src/utils/popups/focus/FloatingFocusManager.test.tsx @@ -2256,6 +2256,72 @@ describe('FloatingFocusManager', () => { }); }); + describe('prop: closeOnFocusOut', () => { + // The floating element stays mounted after it closes, as a popup does during its exit + // animation or after `preventUnmountOnClose()`. + function KeptMountedApp(props: { onOpenChange: (open: boolean, reason: string) => void }) { + const [open, setOpen] = React.useState(true); + const { refs, context } = useFloating({ + open, + onOpenChange(nextOpen, eventDetails) { + props.onOpenChange(nextOpen, eventDetails.reason); + setOpen(nextOpen); + }, + }); + + return ( + <> + +
+ + +