From 605d332d1a54f8f435b8a4b3400e23e9ab081ec3 Mon Sep 17 00:00:00 2001 From: grugbraindev <178141691+grugbraindev@users.noreply.github.com> Date: Fri, 23 Oct 2026 09:53:43 +0800 Subject: [PATCH] Keep parent popovers open when a nested one opens Opening a popover, dropdown menu, select or combobox closed every other open one, including the popover it sits in. Only close the ones that don't contain the source, like native popover=auto. --- src/js/combobox.js | 2 +- src/js/dropdown-menu.js | 2 +- src/js/popover.js | 2 +- src/js/select.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/js/combobox.js b/src/js/combobox.js index 10f727c..555a38e 100644 --- a/src/js/combobox.js +++ b/src/js/combobox.js @@ -503,7 +503,7 @@ if (!root.contains(event.target)) root.close(false); }; const handleDocumentPopover = (event) => { - if (event.detail.source !== root) root.close(false); + if (!root.contains(event.detail.source)) root.close(false); }; state.input.addEventListener('focus', handleInputFocus); diff --git a/src/js/dropdown-menu.js b/src/js/dropdown-menu.js index 04c7e0e..7edb92e 100644 --- a/src/js/dropdown-menu.js +++ b/src/js/dropdown-menu.js @@ -165,7 +165,7 @@ }; const handleDocumentPopover = (event) => { - if (event.detail.source !== root) root.close(false); + if (!root.contains(event.detail.source)) root.close(false); }; state.trigger.addEventListener('click', handleTriggerClick); diff --git a/src/js/popover.js b/src/js/popover.js index 69dd4ff..c789baa 100644 --- a/src/js/popover.js +++ b/src/js/popover.js @@ -60,7 +60,7 @@ }; const handleDocumentPopover = (event) => { - if (event.detail.source !== popoverComponent) { + if (!popoverComponent.contains(event.detail.source)) { closePopover(false); } }; diff --git a/src/js/select.js b/src/js/select.js index c42ce1d..19b04d9 100644 --- a/src/js/select.js +++ b/src/js/select.js @@ -373,7 +373,7 @@ if (!root.contains(event.target)) root.close(false); }; const handleDocumentPopover = (event) => { - if (event.detail.source !== root) root.close(false); + if (!root.contains(event.detail.source)) root.close(false); }; state.trigger.addEventListener('keydown', handleTriggerKeydown);