UI
Las 28 primitivas shadcn que sostienen a los formularios, más los extras FESA.
import { Button, Input, Dialog, Combobox, PasswordInput } from "@fesa/components/ui";El set de primitivas contra el que están escritos los formularios (y disponible para las apps que quieran consumirlo directamente — sobre todo los satélites que hoy duplican todo el set).
Primitivas incluidas
accordion · avatar · badge · button · calendar · checkbox · collapsible · command · dialog · field · form · hover-card · input · input-otp · label · popover · radio-group · scroll-area · select · separator · skeleton · slider · switch · tabs · textarea · toggle · toggle-group
Base Radix (importado por paquete individual, no el bundle radix-ui — ver nota técnica abajo) + Tailwind v4 con los tokens shadcn de la app consumidora: la librería hereda tu tema, claro y oscuro, sin configurar nada.
Extras FESA
PasswordInput
Input de contraseña con toggle de visibilidad; aria-labels en español por props:
<PasswordInput showPasswordLabel="Mostrar contraseña" hidePasswordLabel="Ocultar contraseña" />Combobox
Combobox completo con chips, búsqueda y clear.
SearchableCombobox
Búsqueda async contra una server action con debounce y paginación — la base de FormSearchableCombobox.
Nota técnica: radix por paquete
La librería importa @radix-ui/react-* individuales, nunca el meta-paquete radix-ui: el
bundle anida sus propias copias de cada primitiva y turbopack en dev falla al instanciar los
duplicados. Si tu app usa el meta-paquete para SUS componentes no hay conflicto — pero no
mezcles los dos estilos dentro de la librería.
Convivencia con el shadcn de tu app
Tu components/ui local sigue siendo tuyo para tus pantallas. Estas primitivas existen para que
los módulos de la librería sean autocontenidos; consumirlas directamente es opcional.