8.4 KiB
8.4 KiB
Plan: Crear el Design System de BL Consultores como Component Library React
Context
BL Consultores tiene un design system completo definido en Penpot (páginas Foundations, Components, Screens) con colores, tipografía, botones, formularios, navegación, tablas, gráficos, alertas y modales. El objetivo es exportar estos diseños desde Penpot y crear una librería de componentes React reutilizable usando la herramienta create-react-component-library (aleleba/create-react-component-library), que ya soporta Storybook, testing y publicación npm.
La librería se integrará en blconsultores_app como dependencia local o npm para estandarizar toda la UI del proyecto.
Fundamentos del Design System (desde Penpot)
Paleta de Colores
| Token | Hex | Uso |
|---|---|---|
| Blanco | #FFFFFF |
Fondos, texto sobre oscuro |
| Azul Navy | #1B2A4A |
Brand principal, headers, texto oscuro |
| Ámbar | #D4880F |
Brand secundario, acentos |
| Dorado Institucional | #EABF2D |
Brand primario, CTAs, highlights |
| Gris Oscuro | #2D2D3F |
Texto body, bordes |
| Gris Medio | #6B6B7B |
Texto secundario, placeholders |
| Gris Claro | #F5F5F7 |
Fondos de sección, cards |
| Negro Profundo | #1A1A2E |
Texto principal, headers |
| Encuesta: Totalmente de Acuerdo | #2CDEA3 |
Semántica encuesta |
| Encuesta: De Acuerdo | #F5E53E |
Semántica encuesta |
| Encuesta: En Desacuerdo | #FAC132 |
Semántica encuesta |
| Encuesta: Totalmente en Desacuerdo | #DE3626 |
Semántica encuesta |
Tipografía
| Token | Font | Size | Weight | Uso |
|---|---|---|---|---|
| Heading 50 | Montserrat | 50px | Bold | Hero titles |
| Heading 25 | Montserrat | 25px | Bold | Page titles |
| Heading 18 | Montserrat | 18px | Bold | Section headers |
| Subheading 22 | Montserrat | 22px | Normal | Subheaders |
| Montserrat Heading | Montserrat | 14px | Bold | Card titles |
| Montserrat Subheading | Montserrat | 14px | Bold | Subtitles |
| Montserrat SemiBold | Montserrat | 14px | Semibold | Labels, buttons |
| Montserrat Body | Montserrat | 14px | Normal | Body text |
| Montserrat Regular | Montserrat | 14px | Normal | Body text |
| Noeteric Bold | Noeteric-Bold | 14px | Bold | Logo, branding |
Tipografías del Library
Montserrat(Regular, SemiBold, Bold)Noeteric-Bold
Componentes a Implementar
1. Buttons (7 variantes)
Button/Primary— Dorado bg, Azul Navy text, roundedButton/Outline Gold— Dorado border, transparent bgButton/Outline Dark Default— Gris Oscuro borderButton/Outline Dark Hover— Hover stateButton/Outline Light BG— Light bg variantButton/Ghost Default— Transparent, text onlyButton/Ghost Hover— Hover stateButton/Circular— Circle shape, iconButton/Icon Delete— Red icon buttonButton/Icon Edit— Edit icon button
2. Forms
Input/Text— Default state (border Gris Medio)Input/Text Focus— Focus state (border Dorado)Input/Search— Con icono de búsquedaSelect/Dropdown— Custom select componentToggle Track— Toggle switchButton/File Upload— File upload button
3. Navigation
Breadcrumb— Navegación jerárquicaTabs— Tab navigationNavbar/Admin— Admin panel navbarNavbar/Admin Mobile— Mobile collapsedNavbar/Admin Mobile Overlay— Mobile overlayNavbar/Pública— Public site navbar
4. Data Display
Table/Encuestados— Tabla de encuestados con statusTable/Climas— Tabla de climas organizacionalesTable/Semáforo— Tabla con indicadores de colorPagination— PaginaciónCard/Editor Section— Card para editorCard/Servicio— Card de servicio (marketing)Card/Login BG— Card con fondo loginBadge/Status Check— Badge de estadoBadge/Order Number— Badge numéricoChip/Removable— Chip con botón de eliminarListItem/Factor— List item para factores
5. Feedback
Alert/Danger— Error alertAlert/Info— Info alertAlert/Success— Success alertModal/Content— Modal containerLoader— Loading spinner
6. Charts
Chart/Bar Comparative— Gráfica de barras comparativaChart/Bar Single— Gráfica de barra simpleChart/Donut— Gráfica donut
7. Layout
Footer— Pie de página
Arquitectura de la Library
create-react-component-library/
├── src/
│ ├── components/
│ │ ├── Button/
│ │ │ ├── index.tsx
│ │ │ ├── Button.stories.tsx
│ │ │ ├── Button.test.tsx
│ │ │ ├── Button.cy.tsx
│ │ │ └── style.scss
│ │ ├── Input/
│ │ ├── Select/
│ │ ├── Toggle/
│ │ ├── Navbar/
│ │ ├── Breadcrumb/
│ │ ├── Tabs/
│ │ ├── Table/
│ │ ├── Card/
│ │ ├── Alert/
│ │ ├── Modal/
│ │ ├── Badge/
│ │ ├── Chip/
│ │ ├── ListItem/
│ │ ├── Pagination/
│ │ ├── Loader/
│ │ ├── Footer/
│ │ ├── Chart/
│ │ └── index.tsx # barrel export
│ ├── tokens/
│ │ ├── colors.ts # Design tokens (colores)
│ │ ├── typography.ts # Design tokens (tipografía)
│ │ └── index.ts
│ └── stories/
│ ├── Introduction.mdx
│ └── ...
├── .storybook/
│ ├── main.js
│ └── preview.js
├── package.json
├── tsconfig.json
└── README.md
Tokens de diseño (src/tokens/)
colors.ts— Exportar todos los colores como constantes TypeScripttypography.ts— Exportar todas las tipografías como objetos con fontFamily, fontSize, fontWeight, lineHeight- Estos tokens se reutilizan en cada componente SCSS y TSX
Cada componente sigue el patrón:
index.tsx— Componente React con props tipadas*.stories.tsx— Storybook stories (variantes, estados)*.test.tsx— Tests unitarios Jest*.cy.tsx— Tests de componentes Cypressstyle.scss— Estilos SCSS que usan los tokens
Pasos de Implementación
Fase 1: Configuración del proyecto
- Clonar/crear
create-react-component-librarycomo base - Configurar
package.jsoncon nombre@blconsultores/design-system - Configurar Storybook con soporte SCSS
- Configurar Jest + Testing Library + Cypress Component Testing
- Configurar tsconfig para la library
Fase 2: Crear tokens de diseño
src/tokens/colors.ts— Todas las variables de color del design systemsrc/tokens/typography.ts— Todas las tipografías con sus propiedadessrc/tokens/index.ts— Barrel export
Fase 3: Implementar componentes (por categoría)
- Buttons — 7+ variantes con estados hover/active/disabled
- Forms — Input, Select, Toggle, File Upload
- Navigation — Breadcrumb, Tabs, Navbar (Admin + Pública)
- Data Display — Table, Card, Badge, Chip, ListItem, Pagination
- Feedback — Alert, Modal, Loader
- Charts — Bar Comparative, Bar Single, Donut
- Layout — Footer
Fase 4: Export barrel y documentación
src/components/index.ts— Exportar todos los componentes- Storybook Introduction page con guía de uso
- README con instrucciones de instalación y uso
Fase 5: Testing
- Unit tests para cada componente
- Component tests con Cypress
- Visual regression (opcional)
Fase 6: Integración
- Publicar como package npm local (
npm link) - Instalar en
blconsultores_appcomo dependencia - Migrar componentes existentes del proyecto para usar la library
Integración con blconsultores_app
package.json de blconsultores_app:
{
"dependencies": {
"@blconsultores/design-system": "file:../create-react-component-library"
}
}
Uso en componentes existentes:
// Antes (Bootstrap inline)
<div className="btn btn-primary" style={{...}}>
// Después (Design System)
import { Button } from '@blconsultores/design-system'
<Button variant="primary" size="md">Click</Button>
Verificación
- Storybook abre y muestra todos los componentes
- Todos los colores y tipografías coinciden con Penpot
- Tests unitarios pasan (Jest)
- Tests de componentes pasan (Cypress)
npm linkfunciona y los componentes se importan en blconsultores_app- Export barrel funciona:
import { Button, Input, Table } from '@blconsultores/design-system'