UI Design System - Jefferson S. Pulido M.
UI Design System
Librería transversal de componentes UI reutilizables, accesibles y altamente personalizables, diseñada para estandarizar interfaces, mejorar la mantenibilidad del código y escalar productos digitales en ecosistemas React y Next.js.
Esta implementación hace parte de una prueba técnica y demuestra criterios de arquitectura, accesibilidad, tipado estricto con TypeScript, testing y documentación orientada a equipos de desarrollo frontend en organizaciones como Davivienda y Grupo Bolívar.
Card
El componente Card permite agrupar contenido relacionado de forma clara, consistente y accesible. Es un elemento fundamental para dashboards, listados, vistas de detalle y acciones contextuales dentro del sistema.
| Prop | Tipo | Descripción | Required |
|---|---|---|---|
| title | string | Título principal del Card | Required |
| description | string | Texto descriptivo del contenido (requerido si no se usan children) | Optional |
| children | ReactNode | Contenido personalizado del Card (requerido si no hay description) | Optional |
| image | string | URL de una imagen decorativa superior | Optional |
| imageAlt | string | Texto alternativo accesible para la imagen | Optional |
| size | sm | md | lg | Define el ancho máximo del Card | Optional |
| actions | CardAction[label: string; onClick: () => void; variant?: "primary" | "secondary"; color?: string;] (max 2) | Acciones configurables mostradas como botones | Optional |
| accentColor | string (HEX) | Color de énfasis visual del Card. Se aplica como borde/acento y en hover. | Optional |
| backgroundColor | string (HEX) | Color de fondo visual del Card. | Optional |
| textColor | string (HEX) | Color de texto en title del Card. | Optional |
Input
El componente Input permite capturar información del usuario de forma controlada, accesible y consistente. Soporta múltiples variantes y tipos de entrada, estados visuales, validaciones y manejo estricto de props, siendo una pieza fundamental en formularios, filtros y flujos de interacción.
| Prop | Tipo | Descripción | Required |
|---|---|---|---|
| label | string | Etiqueta descriptiva y accesible del campo | Required |
| variant | input | textarea | select | Define el tipo de campo a renderizar | Optional |
| type | text | password | number | color | date | Tipo de input cuando variant es 'input' | Optional |
| value | string | number | Valor controlado del campo | Optional |
| placeholder | string | Texto de ayuda cuando el campo está vacío | Optional |
| options | { label: string; value: string }[] | Opciones disponibles cuando variant es 'select' | Optional |
| rows | number | Número de filas cuando variant es 'textarea' | Optional |
| disabled | boolean | Deshabilita la interacción del campo | Optional |
| required | boolean | Marca el campo como obligatorio | Optional |
| helperText | string | Texto informativo debajo del campo | Optional |
| error | string | Mensaje de error y estado visual de validación | Optional |
| onChange | (value: string) => void | Evento que se dispara al cambiar el valor | Required |