Command palette (⌘K)
Saltar a cualquier equipo, página o acción desde el teclado. ⌘K o Ctrl+K en todo Moodinary.
Paleta de comandos para navegar páginas, ajustes, organizaciones y acciones desde el teclado. ⌘K o Ctrl+K en el dashboard de Moodinary.
Instalación
shadcn
npx shadcn@latest add https://design.moodinary.com/r/command.jsonimport
import { CommandDialog, CommandTrigger, useCommandShortcut } from "@moodinary/ui/components/command";Ejemplos
Paleta
El disparador muestra el atajo. Los resultados se agrupan y la búsqueda ignora tildes.
Código
palette.tsx
import {
CommandDialog,
CommandTrigger,
useCommandShortcut,
} from "@moodinary/ui/components/command";
import { useCallback } from "react";
const items = [
{
group: "Páginas",
id: "inicio",
label: "Inicio",
onSelect: () => undefined,
},
{
group: "Páginas",
id: "analiticas",
label: "Analíticas",
onSelect: () => undefined,
},
{
group: "Ajustes",
id: "miembros",
keywords: "ajustes configuración",
label: "Miembros y equipos",
onSelect: () => undefined,
},
{
group: "Acciones",
id: "qr",
keywords: "qr código compartir pulso imprimir",
label: "Mostrar QR",
onSelect: () => undefined,
},
{
group: "Organizaciones",
id: "escuela",
label: "Escuela de ejemplo",
onSelect: () => undefined,
trailing: "Actual",
},
{
group: "Organizaciones",
id: "empresa",
label: "Empresa de ejemplo",
onSelect: () => undefined,
},
{
group: "Cuenta",
id: "notificaciones",
label: "Notificaciones",
onSelect: () => undefined,
},
];
export default function CommandPalette() {
const [open, setOpen] = useCommandShortcut();
const show = useCallback(() => setOpen(true), [setOpen]);
return (
<>
<CommandTrigger onClick={show} />
<CommandDialog items={items} onOpenChange={setOpen} open={open} />
</>
);
}Props
CommandDialog
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
| open | boolean | - | Estado controlado. |
| onOpenChange | (open: boolean) => void | - | Se llama al abrir o cerrar; al cerrar limpia la búsqueda. |
| items | CommandItem[] | - | Ítems con group, id, label, leading, trailing, keywords y onSelect. |
| placeholder | string | "Buscar equipos, páginas, acciones…" | Texto del input. |
| empty | string | "Sin resultados." | Texto sin coincidencias. |
CommandTrigger
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
| label | string | "Buscar" | Texto del botón; en mobile queda solo el ícono. |
useCommandShortcut
| Prop | Tipo | Default | Descripción |
|---|---|---|---|
| returns | [boolean, (open: boolean) => void] | - | Estado abierto y setter, con ⌘K / Ctrl+K ya escuchado. |
Cuándo sí y cuándo no
Hacé
- Montá un solo
useCommandShortcutpor app. - Usá
keywordspara sinónimos: configuración para Ajustes. - Marcá la organización actual con
trailing="Actual", como hace el dashboard.
Evitá
- No la uses como única forma de llegar a algo.
- No registres el atajo en más de un lugar.
- No cargues cientos de ítems sin agrupar.
Accesibilidad
- El input es un combobox con
aria-activedescendant. - Flechas navegan, Enter abre, Esc cierra.
- Al cerrar, el foco vuelve a donde estaba.