Command палитра — это интерфейсный компонент, позволяющий пользователю быстро выполнять команды, искать элементы или навигировать по приложению через текстовый ввод. В SvelteKit она реализуется как динамический и настраиваемый компонент, тесно интегрированный с реактивной архитектурой Svelte.
В типичном SvelteKit-проекте Command палитра состоит из следующих ключевых элементов:
Корневой контейнер –
<Command> Он отвечает за состояние открытия/закрытия,
обработку клавиш и общий контекст команд.
Поле ввода – <CommandInput>
Связывается с реактивной переменной через bind:value и
инициирует фильтрацию списка команд по мере ввода текста.
Список команд – <CommandList>
Включает в себя дочерние компоненты <CommandItem> и
<CommandGroup>. Отвечает за отображение
отфильтрованных команд и управление навигацией через стрелки
клавиатуры.
Элементы команды –
<CommandItem> Каждый элемент содержит уникальный
идентификатор, label и callback-функцию, вызываемую при выборе
команды.
Группы команд –
<CommandGroup> Позволяет структурировать команды по
категориям, добавляя визуальное разделение и улучшая UX.
SvelteKit позволяет реализовать мгновенную фильтрацию команд без перезагрузки DOM. Пример базовой связки:
<script>
import { Command, CommandInput, CommandList, CommandItem } from 'sveltekit-ui';
let query = '';
const commands = [
{ id: 'new_file', label: 'Создать файл', action: () => console.log('Создан файл') },
{ id: 'open_file', label: 'Открыть файл', action: () => console.log('Файл открыт') },
{ id: 'save_file', label: 'Сохранить файл', action: () => console.log('Файл сохранён') },
];
$: filteredCommands = commands.filter(c => c.label.toLowerCase().includes(query.toLowerCase()));
</script>
<Command>
<CommandInput bind:value={query} placeholder="Введите команду..." />
<CommandList>
{#each filteredCommands as cmd}
<CommandItem on:select={() => cmd.action()}>{cmd.label}</CommandItem>
{/each}
</CommandList>
</Command>
Особенности реактивного фильтра:
$: позволяет автоматически обновлять
список команд при изменении переменной query..toLowerCase().Command палитра поддерживает следующие сценарии:
Для реализации можно использовать встроенные обработчики событий или
подписки на on:keydown в
<CommandInput>.
<CommandInput
bind:value={query}
on:keydown={(e) => {
if (e.key === 'Escape') query = '';
}}
placeholder="Введите команду..."
/>
<CommandGroup> позволяет объединять команды
логически:
<CommandList>
<CommandGroup heading="Файлы">
<CommandItem on:select={createFile}>Создать файл</CommandItem>
<CommandItem on:select={openFile}>Открыть файл</CommandItem>
</CommandGroup>
<CommandGroup heading="Редактирование">
<CommandItem on:select={undo}>Отменить</CommandItem>
<CommandItem on:select={redo}>Повторить</CommandItem>
</CommandGroup>
</CommandList>
Преимущества использования групп:
Command палитра в SvelteKit может работать с асинхронными источниками данных. Пример подгрузки команд с сервера:
<script>
import { onMount } from 'svelte';
import { Command, CommandInput, CommandList, CommandItem } from 'sveltekit-ui';
let query = '';
let commands = [];
onMount(async () => {
const response = await fetch('/api/commands');
commands = await response.json();
});
$: filteredCommands = commands.filter(c => c.label.toLowerCase().includes(query.toLowerCase()));
</script>
Асинхронная подгрузка позволяет динамически расширять палитру без переработки фронтенда, что особенно полезно в больших приложениях с плагинами или пользовательскими командами.
SvelteKit UI libs предоставляет возможность стилизовать Command палитру через пропсы и CSS-переменные:
size="sm|md|lg" – регулирует размеры элементов.theme="light|dark" – переключает цветовую схему.class или
class:active для <CommandItem>.<Command class="bg-gray-800 text-white rounded-lg shadow-lg">
<CommandInput class="p-2 text-sm" />
<CommandList class="max-h-60 overflow-auto" />
</Command>
Каждый <CommandItem> может содержать кастомный
шаблон:
<CommandItem on:select={openFile}>
<span class="font-bold">{cmd.label}</span>
<small class="text-gray-400">{cmd.shortcut}</small>
</CommandItem>
Таким образом, Command палитра становится гибкой платформой для любых командных интерфейсов: от поиска по меню до управления функционалом приложения через горячие клавиши.
Благодаря реактивной архитектуре Svelte, асинхронной подгрузке и настраиваемым визуальным стилям, Command палитра в SvelteKit превращается в мощный инструмент для повышения продуктивности пользователя и организации навигации.