Communitygithub.com

Pick Library (Seleccionar Librería)

Elige la librería adecuada para una tarea de frontend a partir de una lista curada y verificada, evitando crear soluciones desde cero o instalar paquetes abandonados. Úsalo cuando el usuario pregunte "qué debería usar para…", "hay una librería para…" o nombre un paquete, y cuando estés a punto de construir un toast, menú de comandos, cajón, selector de fecha, tabla, lista virtual, arrastrar y soltar, gráfico, entrada OTP, número animado, cambio de tema, validación de formularios…

¿Qué es Pick Library (Seleccionar Librería)?

Esta habilidad está diseñada para agentes de IA que asisten en el desarrollo frontend. Su propósito es seleccionar la librería más adecuada para una tarea específica, basándose en un catálogo actualizado y verificando el estado de mantenimiento de cada paquete. Primero, revisa si la plataforma (navegador) ya resuelve el problema sin necesidad de librerías adicionales, utilizando APIs nativas como `<dialog>`, `popover`, `Intl`, etc. Si no es suficiente, consulta un catálogo de referencias y recomienda la librería marcada como "Default", pero solo si está mantenida (última publicación en npm en los últimos 12 meses o repositorio activo). También verifica dependencias, licencias y compatibilidad con la versión de React del proyecto. La salida es un bloque único que incluye para qué sirve, cuándo no usarla, licencia, estado actual y comando de instalación. Soporta tareas como modales, popovers, acordeones, selectores de fecha, formato de números, animaciones, arrastrar y soltar, tablas virtuales, toasts, validación de formularios y más. Está diseñada para integrarse con el skill `product-ui` y leer el archivo `package.json` del proyecto.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nkurunziza-saddy/hmm-interfaces/tree/HEAD/pick-library

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Seleccionar una librería

Antes de cualquier decisión, aplica product-ui §1 (el diario de gusto y precedencia) y §5 (qué habilidad es dueña de qué). Una regla del diario que nombre una librería gana.

Cuando se invoque sin una tarea, pide una en una sola línea y detente.

Orden de decisión

Recorre estos pasos de arriba a abajo. Detente en el primer paso que resuelva completamente la tarea.

  1. ¿Qué está ya instalado? Lee package.json. Si una librería listada o un competidor ya hace el trabajo, úsalo. Señala una mejor elección en una línea, y nunca cambies una dependencia sin que te lo pidan. Por qué: una segunda librería para el mismo trabajo duplica el bundle y las convenciones.
  2. ¿La plataforma lo resuelve completamente? Revisa la tabla de abajo. Por qué: la plataforma no tiene coste de bundle, ni ruta de actualización ni riesgo de abandono.
  3. ¿La lista tiene una entrada? Abre references/catalogue.md, encuentra la categoría y toma la entrada marcada como Default. Recomienda una librería, no un menú.
  4. ¿Esa entrada está mantenida? Revisa la columna de estado. Si dice Unmaintained (Sin mantenimiento), nunca la recomiendes; usa el reemplazo nombrado en la entrada.
  5. ¿Nada encaja? Di "esta tarea no está en la lista", luego elige desde tu propio conocimiento y ejecuta la verificación de abajo sobre ella. Por qué: un paquete no verificado es la forma habitual en que el código abandonado se cuela.

"Resuelve completamente" significa que cada requisito de la tarea se cumple, incluyendo comportamiento de teclado, enfoque y lector de pantalla. Si un requisito falla, ve al paso 3.

Plataforma primero

TareaRespuesta de la plataformaPasar a una librería cuando
Modal<dialog> con showModal()Necesitas diálogos apilados con salida animada en los navegadores que soportas, o gestión de enfoque no modal
Popover, panel desplegable, tarjeta tipo tooltipAtributo popover, más posicionamiento con anclaje CSS donde se soporteNecesitas volteo por colisión en todas partes, o un menú con enfoque rotativo
Acordeón, divulgación<details name>Necesitas estado controlado o altura animada más allá de interpolate-size
Modo oscuro sin alternanciaprefers-color-scheme, color-scheme, light-dark()El usuario elige el tema manualmente y debe persistir
Entrada de fecha, hora, mes<input type="date"> y sus hermanosNecesitas rangos, un calendario personalizado o una apariencia consistente
Formato de números, tiempo relativo, plurales, listasIntl.NumberFormat, RelativeTimeFormat, PluralRules, ListFormatNunca. Usa siempre Intl
Código de un solo uso, campo único<input autocomplete="one-time-code" inputmode="numeric">Necesitas una caja por dígito
Movimiento de entrada, salida y diseñoTransiciones CSS, @starting-style, WAAPI, Transiciones de VistaNecesitas muelles, gestos o animación de diseño interrumpible
Validación de formulariosValidación de restricciones (required, pattern, setCustomValidity)Necesitas reglas entre campos o asíncronas, o un esquema tipado
Select con pocas opciones<select>Necesitas búsqueda, selección múltiple o filas enriquecidas
Encabezados fijos, snap de scroll, listas perezosasCSS position: sticky, scroll-snap, content-visibility: autoLa lista tiene 1,000+ filas

Pares

RotoArregladoPor qué
Un modal con <div> y una trampa de enfoque escrita a mano<dialog> y showModal()Trampa de enfoque, Esc y fondo inerte vienen gratis
npm i react-beautiful-dnd@dnd-kit/reactEl primero está obsoleto y sin mantenimiento
npm i vaul para un cajónBase UI Drawer, o <dialog> estilizado como láminaEl propio README de vaul dice que está sin mantenimiento
Un toast construido desde una librería de modalesBase UI ToastApilamiento, pausa al pasar el ratón y deslizar ya están resueltos
setInterval contando un númeroNumberFlowLos dígitos giran con diseño correcto y movimiento reducido
5,000 <tr> renderizadas a la vezTanStack Virtual bajo TanStack Table, o Virtuoso para listasEl coste de renderizado crece con las filas, no con el viewport
new Intl.NumberFormat reemplazado por un paquete de monedaIntl.NumberFormatLas reglas de locale vienen en el navegador

Verificar antes de recomendar

Ejecuta esto en cualquier paquete, esté listado o no. Un estado del catálogo puede ser más antiguo que tu sesión.

npm view <pkg> time.modified license version
  • Mantenido: última publicación en los últimos 12 meses, o un push al repositorio en los últimos 6 meses con una versión publicada.
  • Lento: completo en funcionalidades, sin publicación durante 12–24 meses, el repositorio aún responde issues. Utilizable. Di que es lento.
  • Sin mantenimiento: archivado, un README que lo diga, o sin publicación durante 24+ meses con fallos abiertos. Nunca lo recomiendes.
  • Lee la licencia. Informa de cualquier cosa que no sea MIT, ISC, BSD o Apache-2.0 (MPL-2.0 y AGPL necesitan una nota).
  • Verifica las dependencias pares contra la versión de React del proyecto.

Formato de respuesta

Un bloque, sin menú:

Base UI Toast para toasts. Apila, pausa al pasar el ratón y se desliza. No para nada que necesite acción; eso se queda en pantalla. MIT, mantenido. npm i @base-ui/react.

Siempre da: para qué sirve, cuándo no usarlo, licencia, estado con la fecha que viste.

Antes de terminar

  • Se leyó package.json, y la elección no duplica una librería ya instalada.
  • Se verificó la respuesta de la plataforma y, si se saltó, la razón es una cláusula.
  • Se ejecutó npm view en la elección, y el estado en la respuesta es el de hoy, no el del catálogo.
  • No se recomienda nada marcado como Sin mantenimiento.

Individual skills in this repo

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

nkurunziza-saddy/break

Stress-tests a piece of UI with worst-case data and every reachable state, then reports what broke with a numbered fix for each. Use it when the user types /break, or asks to "break this", "stress-test", "try the worst case", "what happens with long names", "check the empty and error states" or "find the edge cases" on a component or screen.

nkurunziza-saddy/layout

Structure and space in product UI on the web. It sets the spacing scale, grouping, alignment, density (compact or comfortable), hit areas, app shells (sidebar, toolbar, content, inspector), max widths, container-query responsiveness, dropdown and popover sizing, room for long and translated text, layout stability (no shift on load) and sticky elements that must not cover focus.

nkurunziza-saddy/motion

Builds motion for product UI on the web. It decides whether something should move at all, then why, which tool (CSS transition, WAAPI, Motion, spring), which properties, curve, duration, interruption, exit and reduced-motion path, and it writes the code. Also covers stagger and choreography, gestures (drag, flick, sheets), motion tokens and animation performance.

nkurunziza-saddy/surfaces

What product UI is made of on the web. It sets elevation levels with exact shadow recipes for light and dark mode, when to use a shadow and when a border, the transparent border for forced-colours mode, a small radius scale with concentric nesting, image outlines, every interactive state as a surface change (hover, pressed, selected, disabled, focus-visible), icons (one set, currentColor, outline and fill, stroke tha…

Skills relacionados