Skip to content

CommandPalette ​

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

Пропы ​

name ​

string · по умолчанию: —

Целевой именованный инстанс палитры (по умолчанию — singleton, если опущен).

placeholder ​

string · по умолчанию: 'Search commands…'

Текст плейсхолдера поля ввода.

maxResults ​

number · по умолчанию: 10

Максимальное число показываемых результатов.

emptyText ​

string · по умолчанию: 'No commands found.'

Текст, показываемый при отсутствии результатов поиска.

loadingText ​

string · по умолчанию: 'Loading…'

Текст, показываемый пока загружаются асинхронные группы.

teleportTo ​

string · по умолчанию: 'body'

CSS-селектор для цели <Teleport>.

theme ​

'default' | 'compact' · по умолчанию: 'default'

Compact использует более узкий и короткий диалог.

animationDuration ​

number · по умолчанию: 150

Длительность fade-перехода в мс.

labels ​

Partial<PaletteLabels> · по умолчанию: —

Переопределение встроенных строк UI (i18n) — см. Локализацию.

groupRecent ​

boolean · по умолчанию: false

Группировать недавние команды по их group с подзаголовками.

modes ​

PaletteMode[] · по умолчанию: —

Активируемые префиксом области поиска — см. Режимы / области.

selectable ​

boolean · по умолчанию: false

Режим множественного выбора — см. Множественный выбор.

preview ​

boolean · по умолчанию: false

Показать панель предпросмотра для активной команды — см. Панель предпросмотра.

previewHotkey ​

string[] · по умолчанию: ['$mod', 'i']

Комбинация клавиш для переключения панели предпросмотра ([] — отключить).

Emits ​

submit-selection ​

Command[]

Генерируется по $mod+Enter в режиме множественного выбора.

Слоты ​

#trigger ​

{ open, toggle }

Кастомный элемент, открывающий палитру.

Контент, вставляемый над полем поиска.

#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).

Контент под списком результатов.

Кастомный слот #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>