From a37f1369c80c61e49d292fa494402b05f9f44863 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Fri, 7 Aug 2026 18:01:43 +0200 Subject: [PATCH] fix(ui): skip hidden global search results in keyboard nav Limit navigateResults to visible .search-result-item nodes under the search root so hidden command palette entries are not focused. --- resources/views/livewire/global-search.blade.php | 3 ++- tests/Feature/GlobalSearchLoadingStateTest.php | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/resources/views/livewire/global-search.blade.php b/resources/views/livewire/global-search.blade.php index 2c12f72dd..f3c73770d 100644 --- a/resources/views/livewire/global-search.blade.php +++ b/resources/views/livewire/global-search.blade.php @@ -134,7 +134,8 @@ }); }, navigateResults(direction) { - const results = document.querySelectorAll('.search-result-item'); + const results = Array.from(this.$el.querySelectorAll('.search-result-item')) + .filter(item => item.offsetParent !== null); if (results.length === 0) return; if (direction === 'down') { diff --git a/tests/Feature/GlobalSearchLoadingStateTest.php b/tests/Feature/GlobalSearchLoadingStateTest.php index 82a3237b6..929f75f38 100644 --- a/tests/Feature/GlobalSearchLoadingStateTest.php +++ b/tests/Feature/GlobalSearchLoadingStateTest.php @@ -25,3 +25,10 @@ it('uses a single Alpine result renderer for every command palette result type', ->toContain('x-for="(result, index) in searchResults"') ->toContain('x-for="[categoryName, items] in Object.entries(groupedCreatableItems)"'); }); + +it('skips hidden command palette results during keyboard navigation', function () { + $view = file_get_contents(resource_path('views/livewire/global-search.blade.php')); + + expect($view) + ->toContain('filter(item => item.offsetParent !== null)'); +});