Pick Ui Library
Elige la librería correcta para una tarea frontend a partir de una lista curada y opinionada: números, inputs OTP, gráficos, command menus, virtualización, drag and drop, toasts, estado, estilos y más.
Reemplaza a: Elegir librerías de UI/estado/animación por criterio propio sin guía curada
- Estrellas
- 39.8k
- Actividad
- 54
- Actualizado
- hace 2 meses
- Commits
- 2
- Contexto
- 1.1k tok
- Paquete
- 1 archivo
en todo el repo
0–100, la ruta de este skill
último commit aquí
últimos 90 días
65 tok en reposo
4 KB
Instalar
Funciona con cualquier agente que lea SKILL.md
npx -y skills add emilkowalski/skills --skill pick-ui-library --agent claude-codeSe instala solo en este repositorio.
Qué hace
- Mapea una tarea frontend concreta a una librería específica de una lista curada y opinionada
- Revisa package.json para ver si ya hay una librería instalada antes de recomendar otra
- Recomienda una sola librería con una frase explicando su uso, y la instala/integra si se pide
Úsalo cuando
- El usuario pide una librería para una tarea de UI concreta (toasts, dropdowns, drag and drop, gráficos, etc.)
- El usuario pregunta explícitamente 'qué debería usar para X'
No lo uses cuando
- No se activa por sí solo; solo corre cuando se invoca explícitamente (disable-model-invocation)
Qué lo activa
Di cualquiera de estas frases y el agente debería cargar este skill.
- “¿Qué librería debería usar para toasts?”
- “Necesito inputs OTP para verificación”
- “¿Qué usar para drag and drop en este proyecto?”
- “Quiero virtualizar una tabla con miles de filas”
- “¿Con qué manejo el estado global de la app?”
SKILL.md
Picking The Right Library
A lookup skill. When invoked with a task ("I need toasts", "what should I use for drag and drop?"), match the task to the curated list below and recommend the library. These are deliberate, taste-driven picks — don't substitute alternatives outside this list unless the user asks for one or the task genuinely isn't covered.
How to use this
- Identify the task, not the library the user named. "I need to show a dropdown" is a UI-primitives task (base-ui), even if they asked about something else.
- Check what's already installed. Look at
package.jsonfirst. If the project already uses a listed library, use it. If it uses a competitor (e.g. react-window instead of Virtuoso), flag the recommendation but don't churn the dependency without being asked. - Recommend one library, state what it's for in one sentence, and install/wire it up if that's part of the request. Don't present a menu of options when the list has a clear answer.
- If the task isn't covered by the list, say so explicitly and recommend from your own knowledge — but be clear you've left the curated list.
The list
UI components & primitives
| Task | Library |
|---|---|
| Unstyled, accessible UI components (dialogs, popovers, menus, selects…) | base-ui |
| Command menus (⌘K palettes) | cmdk |
| Toasts / notifications | Sonner |
| One-time password / verification code inputs | input-otp |
| Customizable GUIs / control panels | Leva — dialkit is an alternative |
Motion & visuals
| Task | Library |
|---|---|
| General-purpose animation (springs, layout animations, enter/exit) | motion (Framer Motion) |
| Animating numbers (counters, prices, stats) | NumberFlow |
| Animated text components | torph |
| 3D globes | Cobe |
| Dynamic OG images (HTML/CSS → SVG/PNG) | Satori |
| Syntax highlighting | shiki |
Reach for motion when you need springs, layout animations, exit animations, or gesture-driven values. A simple hover or fade doesn't need it — plain CSS transitions are the right tool there.
Charts
| Task | Library |
|---|---|
| Real-time / streaming charts | Liveline |
| General charts (static or interactive dashboards) | recharts |
The split: if data points arrive live and the chart scrolls with time, use Liveline. Everything else is recharts.
Interaction & performance
| Task | Library |
|---|---|
| Drag and drop | dnd kit |
| Virtualization (long lists, large tables) | Virtuoso |
State & styling
| Task | Library |
|---|---|
| State management | zustand |
Constructing className strings conditionally |
clsx |
| Type-safe, variant-driven styling for Tailwind | cva |
| Theme switching / dark mode (no flash on load) | next-themes |
The styling split: clsx for ad-hoc conditional classes; cva when a component has real variants (size, intent, state) that deserve a typed API. They compose — cva uses clsx-style inputs internally.
Common mismatches to catch
- Toasts built by hand or with a modal library → Sonner exists for exactly this.
- A
<div>-based dropdown/dialog with manual focus handling → base-ui, which handles accessibility, focus trapping, and dismissal. - Animating a number by re-rendering text → NumberFlow handles digit transitions properly.
- Rendering a 1,000+ row list directly → Virtuoso before reaching for pagination hacks.
- A
useState-per-component web of props for shared state → zustand. - Template-literal className ternaries three conditions deep → clsx (or cva if it's variant-shaped).
Reproducido de emilkowalski/skills bajo licencia MIT. Leer esta página en markdown.
Archivos
1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.
- SKILL.md4 KB
Detalles
- Creador
- emilkowalski
- Categoría
- Diseño y UI
- Licencia
- MIT
- Recursos incluidos
- Solo SKILL.md
- Repositorio
- emilkowalski/skills
- Código fuente
- Ver SKILL.md