Vue
Integración con Vue
@cmd-kit/vue ofrece un componente CommandPalette y una API composable para los casos donde quieres controlar más directamente el estado de la palette.
Instalación
npm install @cmd-kit/vue Uso básico
<script setup lang="ts">
import { CommandPalette } from "@cmd-kit/vue";
const sections = [
{
id: "navigation",
title: "Navigation",
items: [
{ id: "dashboard", title: "Dashboard", href: "/dashboard" }
]
}
];
</script>
<template>
<CommandPalette :sections="sections" title="Comandos del proyecto" />
</template> Qué puedes configurar
sections,itemsysourcemessagespara copy localizado o del productothemeen modo simple o dual ({ light, dark })classNamespara hooks de estilorecentspara recientes automáticosreducedMotionpara desactivar animaciones de hover/movimiento
Slots e iconos
La personalización en Vue se hace con slots. Usa el slot item cuando quieras cambiar iconos o la estructura de la fila.
<CommandPalette :sections="sections" title="Comandos del proyecto">
<template #item="{ item, active }">
<div :class="['palette-row', { 'is-active': active }]">
<MyIcon :name="item.id" />
<div class="palette-row-copy">
<strong>{{ item.title }}</strong>
<span v-if="item.subtitle">{{ item.subtitle }}</span>
</div>
</div>
</template>
</CommandPalette> Ejemplo de mensajes
<CommandPalette
:messages="{
searchPlaceholder: 'Busca docs, páginas o acciones',
noResults: 'No se ha encontrado ningún comando.'
}"
:sections="sections"
title="Comandos del proyecto"
/> Añadir un comando nuevo
Para añadir una opción nueva, agrega un nuevo ítem en tus datos de sección. shortcut es opcional.
<script setup lang="ts">
const sections = [
{
id: "navigation",
title: "Navigation",
items: [
{ id: "dashboard", title: "Dashboard", href: "/dashboard" },
{ id: "billing", title: "Billing", href: "/billing", shortcut: "mod+b" },
{ id: "support", title: "Support", href: "/support" }
]
}
];
</script> Comandos recientes
recents es opcional y está apagado por defecto. Actívalo con :recents="true" o pasando un objeto con limit y sectionTitle. Desactívalo con :recents="false".
<CommandPalette
:sections="sections"
:recents="false"
title="Comandos del proyecto"
/> FAQ
¿Necesito <script setup> para usar el adaptador de Vue?
No. También funciona con componentes Vue tradicionales; <script setup> es solo una comodidad.
¿Cómo personalizo la fila de resultados en Vue?
Usa el slot item para renderizar tus iconos, layout y metadatos según cada comando.
¿Puedo sincronizar el estado abierto/cerrado con un estado padre?
Sí. Vincula v-model:open (o escucha open-change) para integrarlo con tu estado global.
¿Cómo desactivo recientes en Vue?
Deja recents sin pasar (apagado por defecto) o usa :recents="false".
¿Cómo lo estilizo sin rehacer todo el componente?
Usa theme para tokens base y classNames para hooks CSS por slot.
¿Cuándo conviene ir de Vue a Core?
Cuando la personalización por slots ya no sea suficiente y necesites un pipeline de render completamente propio.