From 0e147a0c75990fc8a3700fb0bb3bac06772c4c14 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 10 Oct 2022 17:02:51 +0200 Subject: [PATCH] Fix `useOutsideClick`, add improvements for ShadowDOM (#1914) * Fix `useOutsideClick` not closing when clicking in ShadowDOM https://github.com/tailwindlabs/headlessui/pull/1876#issuecomment-1264742366 * use `getRootNode` in `useOutsideClick` for Vue * update changelog * run prettier Co-authored-by: Theodore Messinezis <7229472+theomessin@users.noreply.github.com> --- packages/@headlessui-react/CHANGELOG.md | 1 + packages/@headlessui-react/src/hooks/use-outside-click.ts | 2 +- packages/@headlessui-vue/CHANGELOG.md | 1 + packages/@headlessui-vue/src/hooks/use-outside-click.ts | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/@headlessui-react/CHANGELOG.md b/packages/@headlessui-react/CHANGELOG.md index 6331be9bf6..d7701e00e3 100644 --- a/packages/@headlessui-react/CHANGELOG.md +++ b/packages/@headlessui-react/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix `` crash ([#1889](https://github.com/tailwindlabs/headlessui/pull/1889)) - Expose `close` function for `Menu` and `Menu.Item` components ([#1897](https://github.com/tailwindlabs/headlessui/pull/1897)) +- Fix `useOutsideClick`, add improvements for ShadowDOM ([#1914](https://github.com/tailwindlabs/headlessui/pull/1914)) ### Added diff --git a/packages/@headlessui-react/src/hooks/use-outside-click.ts b/packages/@headlessui-react/src/hooks/use-outside-click.ts index 7f7360393b..1569d9cedc 100644 --- a/packages/@headlessui-react/src/hooks/use-outside-click.ts +++ b/packages/@headlessui-react/src/hooks/use-outside-click.ts @@ -60,7 +60,7 @@ export function useOutsideClick( } // Ignore if the target doesn't exist in the DOM anymore - if (!target.ownerDocument.documentElement.contains(target)) return + if (!target.getRootNode().contains(target)) return // Ignore if the target exists in one of the containers for (let container of _containers) { diff --git a/packages/@headlessui-vue/CHANGELOG.md b/packages/@headlessui-vue/CHANGELOG.md index 9d7c206212..20fac0e689 100644 --- a/packages/@headlessui-vue/CHANGELOG.md +++ b/packages/@headlessui-vue/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Expose `close` function for `Menu` and `MenuItem` components ([#1897](https://github.com/tailwindlabs/headlessui/pull/1897)) +- Fix `useOutsideClick`, add improvements for ShadowDOM ([#1914](https://github.com/tailwindlabs/headlessui/pull/1914)) ## [1.7.3] - 2022-09-30 diff --git a/packages/@headlessui-vue/src/hooks/use-outside-click.ts b/packages/@headlessui-vue/src/hooks/use-outside-click.ts index b89fead59a..3e25ca49d8 100644 --- a/packages/@headlessui-vue/src/hooks/use-outside-click.ts +++ b/packages/@headlessui-vue/src/hooks/use-outside-click.ts @@ -30,7 +30,7 @@ export function useOutsideClick( } // Ignore if the target doesn't exist in the DOM anymore - if (!target.ownerDocument.documentElement.contains(target)) return + if (!target.getRootNode().contains(target)) return let _containers = (function resolve(containers): ContainerCollection { if (typeof containers === 'function') {