Skip to content

CommandPalette ​

Recherche et exécution de commandes au clavier, ouverte par Ctrl + K (⌘ + K sur Mac) : navigation, actions, préférences.

Exemples d'utilisation ​

Utilisation de base ​

Dernière commande : —

vue
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { Cog6ToothIcon, DocumentPlusIcon } from '@heroicons/vue/24/outline'

const router = useRouter()
const open = ref(false)
const commands = [
  { id: 'settings', label: 'Paramètres', group: 'Navigation', icon: Cog6ToothIcon,
    keywords: ['préférences', 'compte'], onSelect: () => router.push('/settings') },
  { id: 'new', label: 'Nouveau document', group: 'Actions', icon: DocumentPlusIcon,
    shortcut: ['Ctrl', 'N'], onSelect: createDocument }
]
</script>

<template>
  <!-- Une fois dans l'application : Ctrl / ⌘ + K l'ouvre -->
  <SuCommandPalette v-model:open="open" :commands="commands" />
</template>

La démo de cette page désactive le raccourci (:hotkey="false") pour ne pas gêner la recherche de la documentation.

API ​

Props ​

PropTypeDéfautDescription
openbooleanfalseOuverture (v-model:open)
commandsCommandItem[][]Commandes
placeholderstring'Rechercher une commande…'Texte du champ
hotkeystring | false'k'Touche du raccourci avec Ctrl / ⌘ ; false : aucun
emptyTextstring'Aucun résultat'Texte sans résultat
ariaLabelstring'Palette de commandes'Nom du dialog et de la liste

CommandItem ​

PropriétéTypeDescription
idstringIdentifiant
labelstringLibellé
groupstringGroupe d'affichage
descriptionstringTexte secondaire (aussi recherché)
iconComponentIcône
shortcutstring[]Raccourci affiché (SuKbd)
keywordsstring[]Termes de recherche supplémentaires
disabledbooleanCommande indisponible
onSelect() => voidAction, appelée après la fermeture

Événements ​

ÉvénementPayloadDescription
update:openbooleanOuverture ou fermeture
selectCommandItemCommande exécutée

Accessibilité ​

  • SuDialog modal natif nommé « Palette de commandes » ; le focus va dans le champ de recherche et revient au déclencheur à la fermeture.
  • Champ role="combobox" relié à une liste role="listbox" dont les groupes (role="group") sont nommés.
  • Le focus reste dans le champ : ↑ / ↓ parcourent les résultats (aria-activedescendant, commandes indisponibles sautées), Entrée exécute, Échap ferme.
  • Recherche sans accents ni casse ; résultats triés (début du libellé, libellé, puis description et mots-clés). Le nombre de résultats est annoncé.

Publié sous licence MIT.