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;