diff --git a/resources/views/components/command-palette.blade.php b/resources/views/components/command-palette.blade.php index febf23f..7bc5e54 100644 --- a/resources/views/components/command-palette.blade.php +++ b/resources/views/components/command-palette.blade.php @@ -42,6 +42,10 @@ $validMenuItems = collect($menuItems)->filter(fn($item) => Route::has($item['rou @empty
No pages found
@endforelse + @@ -56,6 +60,8 @@ $validMenuItems = collect($menuItems)->filter(fn($item) => Route::has($item['rou var input = document.getElementById('cmdk-input'); var searchInput = document.getElementById('navbarForm'); var cmdkItems = document.querySelectorAll('.cmdk-item'); + var cmdkEmpty = document.getElementById('cmdk-empty'); + var cmdkList = document.getElementById('cmdk-list'); function showPalette() { container.style.display = 'block'; @@ -64,6 +70,25 @@ $validMenuItems = collect($menuItems)->filter(fn($item) => Route::has($item['rou cmdkItems.forEach(function(item) { item.style.display = ''; }); + if (cmdkEmpty) cmdkEmpty.style.display = 'none'; + } + + function hidePalette() { + container.style.display = 'none'; + if (searchInput) searchInput.blur(); + } + + function filterItems(query) { + var visibleCount = 0; + cmdkItems.forEach(function(item) { + var value = item.dataset.value || item.textContent.toLowerCase(); + var matches = query === '' || value.includes(query); + item.style.display = matches ? '' : 'none'; + if (matches) visibleCount++; + }); + if (cmdkEmpty) { + cmdkEmpty.style.display = visibleCount === 0 ? 'flex' : 'none'; + } } function hidePalette() { @@ -77,13 +102,13 @@ $validMenuItems = collect($menuItems)->filter(fn($item) => Route::has($item['rou if (container.style.display === 'none') { showPalette(); } - var query = e.target.value.toLowerCase(); - cmdkItems.forEach(function(item) { - var value = item.dataset.value || item.textContent.toLowerCase(); - item.style.display = (query === '' || value.includes(query)) ? '' : 'none'; - }); + filterItems(e.target.value.toLowerCase()); }); } + + input.addEventListener('input', function(e) { + filterItems(e.target.value.toLowerCase()); + }); document.addEventListener('keydown', function(e) { if ((e.ctrlKey || e.metaKey) && e.key === 'k') { @@ -183,6 +208,19 @@ $validMenuItems = collect($menuItems)->filter(fn($item) => Route::has($item['rou color: var(--bs-secondary-color, #64748b); } +.cmdk-empty-state { + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + padding: 32px; + color: var(--bs-secondary-color, #64748b); +} + +.cmdk-empty-state svg { + opacity: 0.5; +} + [data-bs-theme="dark"] .cmdk { background: #1e293b; border-color: #334155;