Communitygithub.com

Paleta de Comandos (cmdk)

Integração cmdk, atalho Cmd+K, pesquisa fuzzy, ações agrupadas, navegação por teclado e registro dinâmico de ações.

O que é Paleta de Comandos (cmdk)?

Esta skill implementa uma paleta de comandos completa para aplicações web, utilizando a biblioteca `cmdk`. Ela oferece uma interface de pesquisa com fuzzy search embutido, acionada pelo atalho global `Cmd+K` (Mac) ou `Ctrl+K` (Windows/Linux). As ações são organizadas visualmente em grupos (ex.: Navegação, Comandos, Recentes) e a navegação por teclado (setas, Enter, Escape) é totalmente gerenciada pelo `cmdk`, garantindo acessibilidade e boa experiência de uso. A skill também suporta registro dinâmico de ações com base no contexto da página (ex.: mostrar "Editar post" apenas na página do post) e armazena os últimos 5-10 itens selecionados em `localStorage` para exibição prioritária. Ideal para desenvolvedores que utilizam frameworks como Next.js ou React, ela evita a reinvenção da roda ao delegar toda a lógica de filtragem, ranqueamento e navegação ao `cmdk`, enquanto oferece flexibilidade para ações assíncronas (com indicador de carregamento) e tratamento de estados vazios.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/command-palette

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Paleta de Comandos

Regras

  • Use a biblioteca cmdk — pesquisa fuzzy rápida, acessível e componível integrada
  • Atalho: Cmd+K (Mac) / Ctrl+K (Windows/Linux) — registre um ouvinte global de teclado
  • Agrupe ações: Navegação (páginas), Comandos (ações), Recentes (últimos usados) — exiba cabeçalhos de grupo
  • Navegação por teclado: setas para mover, Enter para selecionar, Escape para fechar — tudo gerenciado pelo cmdk
  • Pesquisa fuzzy: cmdk filtra automaticamente — destaque de correspondência com ranqueamento baseado em pontuação
  • Itens recentes: armazene os últimos 5-10 itens selecionados em localStorage — mostre no topo quando a entrada estiver vazia
  • Ações dinâmicas: registre ações de diferentes partes do aplicativo — sensível ao contexto (mostre ações diferentes em páginas diferentes)
  • Estado de carregamento: resultados de pesquisa assíncrona (ex.: pesquisa via API) — exiba um indicador de carregamento na área de resultados

Padrões

import { Command } from "cmdk";
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";

function CommandPalette() {
  const [open, setOpen] = useState(false);
  const router = useRouter();

  // Atalho global do teclado
  useEffect(() => {
    const handleKeyDown = (e: KeyboardEvent) => {
      if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
        e.preventDefault();
        setOpen((prev) => !prev);
      }
    };
    document.addEventListener("keydown", handleKeyDown);
    return () => document.removeEventListener("keydown", handleKeyDown);
  }, []);

  return (
    <Command.Dialog open={open} onOpenChange={setOpen} label="Paleta de comandos">
      <Command.Input placeholder="Pesquise ou digite um comando..." />
      <Command.List>
        <Command.Empty>Nenhum resultado encontrado.</Command.Empty>

        <Command.Group heading="Recentes">
          {recentItems.map((item) => (
            <Command.Item key={item.id} onSelect={() => { router.push(item.href); setOpen(false); }}>
              {item.label}
            </Command.Item>
          ))}
        </Command.Group>

        <Command.Group heading="Navegação">
          <Command.Item onSelect={() => { router.push("/dashboard"); setOpen(false); }}>
            Dashboard
          </Command.Item>
          <Command.Item onSelect={() => { router.push("/settings"); setOpen(false); }}>
            Configurações
          </Command.Item>
        </Command.Group>

        <Command.Group heading="Comandos">
          <Command.Item onSelect={() => { toggleTheme(); setOpen(false); }}>
            Alternar modo escuro
          </Command.Item>
          <Command.Item onSelect={() => { logout(); setOpen(false); }}>
            Sair
          </Command.Item>
        </Command.Group>
      </Command.List>
    </Command.Dialog>
  );
}

Evite

  • Criar sua própria pesquisa fuzzy — cmdk lida com filtragem, pontuação e ranqueamento prontos para uso
  • Esquecer e.preventDefault() no Cmd+K — sem isso, a pesquisa padrão ou barra de endereços do navegador será aberta
  • Ignorar o tratamento da tecla Escape — cmdk gerencia isso via onOpenChange, mas garanta que o foco retorne ao elemento anterior
  • Ações apenas estáticas — registre ações dinamicamente a partir do contexto da página (ex.: "Editar este post" apenas na página do post)
  • Sem estado vazio — sempre exiba "Nenhum resultado encontrado" quando a pesquisa não encontrar correspondências

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Tenant isolation (row-level vs schema), subdomain routing, per-tenant config, and data partitioning.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Habilidades Relacionadas