From a9a3e4dd0c9693cc3a70422c02072e92664820b3 Mon Sep 17 00:00:00 2001 From: EduardF1 <50618110+EduardF1@users.noreply.github.com> Date: Tue, 5 May 2026 01:24:56 +0200 Subject: [PATCH 1/2] fix(dismissable-layer): guard isTopMostLayer against empty layers array --- packages/core/src/dismissable-layer/layer-stack.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/dismissable-layer/layer-stack.tsx b/packages/core/src/dismissable-layer/layer-stack.tsx index f3181c063..7b4e31def 100644 --- a/packages/core/src/dismissable-layer/layer-stack.tsx +++ b/packages/core/src/dismissable-layer/layer-stack.tsx @@ -36,7 +36,7 @@ function find(node: HTMLElement | undefined): LayerModel | undefined { } function isTopMostLayer(node: HTMLElement | null) { - return layers[layers.length - 1].node === node; + return layers.length > 0 && layers[layers.length - 1].node === node; } function getPointerBlockingLayers() { From 7eadb77962e2870862556f014f40aef4d3ec6a2a Mon Sep 17 00:00:00 2001 From: Eduard Fischer-Szava Date: Tue, 5 May 2026 23:55:56 +0200 Subject: [PATCH 2/2] chore: add changeset --- .changeset/guard-empty-layer-stack.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/guard-empty-layer-stack.md diff --git a/.changeset/guard-empty-layer-stack.md b/.changeset/guard-empty-layer-stack.md new file mode 100644 index 000000000..52c97b9e8 --- /dev/null +++ b/.changeset/guard-empty-layer-stack.md @@ -0,0 +1,7 @@ +--- +'@kobalte/core': patch +--- + +fix(dismissable-layer): guard `isTopMostLayer` against an empty layer stack. + +When the dismissable-layer stack is empty (e.g. callbacks fired after the last layer has already been removed during teardown), `layers[layers.length - 1]` is `undefined` and reading `.node` on it throws `TypeError: Cannot read properties of undefined (reading 'node')`. Returning `false` early when there are no layers makes the predicate behave consistently with "no top-most layer is currently registered".