From 04683724577137091ee4e77d2b5e161bf0c6f788 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Thu, 30 May 2024 17:29:40 +0200 Subject: [PATCH] Filter focusable elements. --- .changeset/strange-planets-fold.md | 5 +++++ src/focusManager.ts | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 .changeset/strange-planets-fold.md diff --git a/.changeset/strange-planets-fold.md b/.changeset/strange-planets-fold.md new file mode 100644 index 0000000..81ebf2d --- /dev/null +++ b/.changeset/strange-planets-fold.md @@ -0,0 +1,5 @@ +--- +"@chialab/loock": patch +--- + +Filter focusable elements. diff --git a/src/focusManager.ts b/src/focusManager.ts index 34ea12f..6ee3d48 100644 --- a/src/focusManager.ts +++ b/src/focusManager.ts @@ -15,6 +15,14 @@ export interface FocusManagerOptions { exclude?: string[]; } +function isFocusableElement(element: HTMLElement) { + if (!element.isConnected) { + return false; + } + const { width, height } = element.getBoundingClientRect(); + return !!height && !!width; +} + /** * Find all focusable elements by options. * @param node The target node. @@ -34,10 +42,10 @@ function findFocusableByOptions( } if (typeof elements === 'function') { - return elements(); + return elements().filter(isFocusableElement); } - return elements; + return elements.filter(isFocusableElement); } /** @@ -70,8 +78,7 @@ function findFocusableChildren( } } - const { width, height } = element.getBoundingClientRect(); - return !!height && !!width; + return isFocusableElement(element); }); }