Skip to content

Компоненты

CommandPalette

Корневой компонент. Рендерит модальный оверлей с полем поиска, списком результатов и опциональными слотами. По умолчанию телепортируется в <body>.

Пропы

ПропТипПо умолчаниюОписание
namestringЦелевой именованный инстанс палитры (по умолчанию — singleton, если опущен)
placeholderstring'Search commands…'Текст плейсхолдера поля ввода
maxResultsnumber10Максимальное число показываемых результатов
emptyTextstring'No commands found.'Текст, показываемый при отсутствии результатов поиска
loadingTextstring'Loading…'Текст, показываемый пока загружаются асинхронные группы
teleportTostring'body'CSS-селектор для цели <Teleport>
theme'default' | 'compact''default'Compact использует более узкий и короткий диалог
animationDurationnumber150Длительность fade-перехода в мс
labelsPartial<PaletteLabels>Переопределение встроенных строк UI (i18n) — см. Локализацию
groupRecentbooleanfalseГруппировать недавние команды по их group с подзаголовками
modesPaletteMode[]Активируемые префиксом области поиска (см. Режимы / области)
selectablebooleanfalseРежим множественного выбора (см. Множественный выбор)
previewbooleanfalseПоказать панель предпросмотра для активной команды (см. Панель предпросмотра)
previewHotkeystring[]['$mod', 'i']Комбинация клавиш для переключения панели предпросмотра ([] — отключить)

Emits

СобытиеPayloadОписание
submit-selectionCommand[]Генерируется по $mod+Enter в режиме множественного выбора

Слоты

СлотОбласть видимостиОписание
#trigger{ open, toggle }Кастомный элемент, открывающий палитру
#headerКонтент, вставляемый над полем поиска
#input{ query, onInput }Полностью заменяет стандартный <input>
#item{ command, active, matches, parents, matchedText }Заменяет всю строку результата (parents — контекст хлебных крошек; matchedText — совпавшее ключевое слово/алиас)
#group-header{ group }Заменяет строку заголовка группы
#empty{ query }Показывается, когда запрос не даёт результатов
#actions{ command, run, activeIndex, close }Заменяет меню дополнительных действий
#preview{ command }Контент панели предпросмотра для активной команды (требует проп preview)
#footerКонтент под списком результатов

Кастомный слот #item

vue
<CommandPalette>
  <template #item="{ command, active, matches }">
    <div :class="['my-item', { 'my-item--active': active }]">
      <span v-if="command.icon" class="my-item__icon">{{ command.icon }}</span>

      <span class="my-item__body">
        <component :is="highlightMatches(command.label, matches)" />
        <span v-if="command.description" class="my-item__desc">
          {{ command.description }}
        </span>
      </span>

      <span v-if="command.shortcut?.length" class="my-item__shortcut">
        <kbd v-for="k in command.shortcut" :key="k">{{ k }}</kbd>
      </span>

      <span v-if="command.subCommands?.length">›</span>
    </div>
  </template>
</CommandPalette>
vue
<CommandPalette>
  <template #footer>
    <div class="my-footer">
      <span><kbd>↑↓</kbd> navigate</span>
      <span><kbd>↵</kbd> select</span>
      <span><kbd>Esc</kbd> close</span>
    </div>
  </template>
</CommandPalette>

Программное открытие через слот #trigger

vue
<CommandPalette>
  <template #trigger="{ toggle }">
    <button @click="toggle">Open palette</button>
  </template>
</CommandPalette>

CommandItem

Рендерит одну строку команды с иконкой, label (с подсветкой совпадений), описанием, бейджем горячей клавиши, спиннером загрузки и состоянием disabled. Используется внутренне; также доступен для кастомных раскладок.

Пропы

ПропТипОписание
commandCommandОтображаемая команда
activebooleanВыбрана ли эта строка с клавиатуры
matchesArray<[number, number]>Диапазоны подсветки от движка нечёткого поиска
itemIdstringАтрибут id для ARIA aria-activedescendant
loadingCommandIdstring | nullID выполняющейся команды; показывает спиннер

Emits

СобытиеОписание
executeПользователь кликнул или нажал Enter на этом пункте
activateПользователь навёл курсор на этот пункт

CommandGroup

Рендерит заголовок группы и следующие за ним строки CommandItem. Пробрасывает все слоты #item, #item-icon и #item-shortcut каждому дочернему элементу.

Пропы

ПропТипОписание
groupCommandGroupМетаданные группы (id, label, priority)
itemsSearchResult[]Отфильтрованные результаты для этой группы
activeIndexnumberГлобальный активный индекс для отслеживания подсветки
globalOffsetnumberСмещение индекса в плоском списке результатов
loadingCommandIdstring | nullПробрасывается в каждый CommandItem