Command Palette
Command+K палитра для Vue 3. Нечёткий поиск с подсветкой совпадений, группировка команд, вложенные под-палитры, глобальные горячие клавиши, асинхронный поиск, диалоги подтверждения, история недавних команд и полная headless-кастомизация через слоты — и всего одна peer-зависимость (Vue 3).
Возможности
- Нечёткий поиск — ранжирование: точное совпадение (100) › префикс (80) › подстрока (60) › нечёткое (1–40). Ищет по label,
description,keywordsиaliases; подсветка label сохраняется, даже если счёт выиграло другое поле. Нормализация диакритики, так чтоcaféсовпадает сcafe. Подсветка совпадений через<mark>. - Подключаемый поиск — замените встроенный скорер на свой (например, Fuse.js) через опцию
search. - Привязываемые горячие клавиши —
bindShortcuts: trueпревращаетshortcutкаждой команды в настоящую глобальную горячую клавишу. - Поиск по вложенным командам — под-команды напрямую всплывают в поиске с хлебными крошками (
Change Theme › Light); шеврон›отмечает пункты, открывающие под-палитру/страницу. - Страницы команд — команда может открыть
pageсо своим плейсхолдером и асинхронным поиском (фильтры, удалённые пикеры, многошаговые сценарии). - Множественные инстансы — запустите несколько независимых именованных палитр в одном приложении через
createCommandPalette(). - Вид «все команды» — палитра при открытии показывает все зарегистрированные команды по группам; никакого пустого экрана.
- Группировка команд — группы с заголовками, приоритетным порядком и визуальными разделителями секций.
- Недавние команды — история последних N выполненных команд на основе
localStorage, показывается сверху при пустом запросе. - Вложенные палитры —
subCommandsоткрывает дочернюю палитру с хлебными крошками;Backspace/Escвозвращают назад. - Асинхронный поиск —
onSearch: (query) => Promise<Command[]>на группу, с debounce 200 мс, объединяется с синхронными результатами. - Шаг подтверждения —
confirm: stringпоказывает диалог да/нет перед выполнением команды. - Состояние загрузки — спиннер на пункте, пока выполняется асинхронный
perform(). - Guard
enabled()— динамическая доступность команды, вычисляется на каждом цикле рендера. - Алиасы и ключевые слова — ищутся наравне с label; алиасы дают тот же счёт, что и совпадение по label.
- Глобальный менеджер клавиатуры —
$mod(⌘ на macOS, Ctrl на Windows/Linux), комбинации модификаторов, последовательности голых клавиш (g→hв пределах 500 мс). - Headless-слоты —
#trigger,#header,#input,#item,#group-header,#empty,#footerдля полного контроля над UI. - 20+ CSS custom properties — полная кастомизация темы без изменения исходного кода. Автоматическая тёмная тема через
prefers-color-scheme. - Кастомный скроллбар — тонкий 4-пиксельный скроллбар, стилизованный под тему палитры.
- Виртуальный список — собственная реализация для наборов результатов > 50 элементов, без дополнительных зависимостей.
- Модуль Nuxt — автоматически устанавливает плагин через
nuxt.config.ts. - Утилиты для тестирования —
createPaletteContext+PaletteProviderдля изолированных юнит-тестов. - SSR-безопасность — все обращения к браузерным API защищены проверкой
typeof document !== 'undefined'. - Ноль runtime-зависимостей — только Vue 3 как peer-зависимость. ~11 КБ gzip.