Palette de commandes
VCommandPalette ouvre un champ de recherche au-dessus d’une liste de commandes, dans un dialogue modal natif. La saisie filtre la liste, les flèches s’y déplacent et Entrée exécute une commande. La prop shortcut l’ouvre depuis n’importe où dans la page.
Utilisation
Exemples
Groupes
Passez des commandes, des groupes nommés et des séparateurs dans items. Les keywords sont cherchés sans être affichés, et le shortcut d’une commande est seulement affiché.
Liens
Une commande avec href est un lien : Entrée le suit, et un clic modifié l’ouvre dans un nouvel onglet. Avec un routeur, appelez event.preventDefault() dans select et naviguez vous-même.
Recherche asynchrone
Passez filter à false et chargez les commandes sur search, émis avec un délai. loading affiche un indicateur dans le champ.
Commandes récentes
La palette ne garde aucun historique. Retenez les choix depuis select et ajoutez un groupe de commandes récentes tant que v-model:query est vide.
API
Props
| Prop | Type | Défaut |
|---|---|---|
items | CommandPaletteItem[] | aucune |
| Commandes, groupes nommés et séparateurs. | ||
shortcut | string | aucune |
Raccourci global qui ouvre et ferme la palette, comme mod+k. Ignoré pendant la saisie dans un autre champ. Ajoute aria-keyshortcuts au déclencheur. | ||
filter | CommandPaletteFilter | true |
| Filtrage intégré insensible aux accents sur les libellés et les mots-clés, filtrage désactivé, ou fonction personnalisée recevant la commande et la recherche nettoyée. | ||
searchDebounce | number | 250 |
| Délai en millisecondes avant d’émettre une recherche saisie. Zéro émet immédiatement. | ||
loading | boolean | false |
| Affiche un indicateur dans le champ, et une ligne de chargement tant qu’aucune commande n’est disponible. | ||
loadingText | string | aucune |
Texte de chargement annoncé aux lecteurs d’écran. Gardez-le cohérent avec un contenu #loading personnalisé. | ||
emptyText | string | aucune |
Titre du VEmptyState par défaut, également annoncé aux lecteurs d’écran. Gardez-le cohérent avec un contenu #empty personnalisé. | ||
placeholder | string | aucune |
| Texte indicatif du champ de recherche. Par défaut, celui du dictionnaire. | ||
label | string | aucune |
| Nom accessible de la palette et de sa liste. Par défaut, celui du dictionnaire. | ||
searchLabel | string | aucune |
| Nom accessible du champ de recherche. Par défaut, celui du dictionnaire. | ||
hideFooter | boolean | false |
| Masque le pied qui liste les touches. | ||
width | number | string | aucune |
| Largeur de la palette : pixels pour un nombre, sinon une longueur CSS. | ||
v-model:open | boolean | false |
| État d’ouverture. La fermeture native met le modèle à jour. | ||
v-model:query | string | '' |
| Texte recherché. Vidé à la fermeture de la palette. | ||
Événements
| Événement | Type |
|---|---|
search | [query: string] |
Émet le terme recherché après searchDebounce, ou immédiatement à l’ouverture. Deux termes identiques consécutifs ne sont émis qu’une fois. | |
select | [command: CommandPaletteCommand, event: MouseEvent] |
Émis avec la commande et l’événement de clic quand une commande est choisie. La palette se ferme ensuite, sauf si la commande a keepOpen. | |
Slots
| Slot | Type |
|---|---|
trigger | { triggerProps: CommandPaletteTriggerProps; } |
Contrôle d’ouverture. Liez-y les triggerProps fournies. | |
item | CommandPaletteItemSlotProps |
| Libellé et description d’une ligne. Reçoit la commande et son état actif. | |
empty | CommandPaletteEmptySlotProps |
Contenu de l’état vide. Reçoit la recherche ; définissez aussi emptyText. | |
loading | {} |
Contenu de chargement. Définissez aussi loadingText. | |
footer | {} |
| Remplace le pied qui liste les touches. | |
Types
Types utilisés dans les tables d’API. Importez les types exportés depuis vectis-ui.
export interface BuiltinIcon {
name: string
paths: readonly [string] | readonly [string, string]
}export interface CommandPaletteCommand {
label: string
description?: string
keywords?: string[]
icon?: IconSource
shortcut?: string
href?: string
disabled?: boolean
keepOpen?: boolean
id?: string | number
}export interface CommandPaletteEmptySlotProps {
query: string
}export type CommandPaletteFilter = boolean | ((command: CommandPaletteCommand, query: string) => boolean)
export interface CommandPaletteGroup {
label: string
commands: CommandPaletteCommand[]
}export type CommandPaletteItem = CommandPaletteCommand | CommandPaletteGroup | CommandPaletteSeparator
export interface CommandPaletteItemSlotProps {
command: CommandPaletteCommand
active: boolean
}export interface CommandPaletteSeparator {
separator: true
}export type CommandPaletteTriggerProps = {
onClick: () => void
'aria-haspopup': 'dialog'
'aria-keyshortcuts'?: string
}export type IconRender =
| { path: string; viewBox?: string }
| { component: Component; props?: Record<string, unknown> }
| { src: string }
| { text: string; class?: string }
| { class: string }export type IconSource = string | BuiltinIcon | IconRender
Variables CSS
| Token | Valeur |
|---|---|
--vectis-control-size-command-palette-width | 40rem |
--vectis-control-size-command-palette-list-max-block | 20rem |
--vectis-control-size-command-palette-offset | 6rem |