|
| 1 | +# Architecture Decision Records (ADR) |
| 2 | + |
| 3 | +Este documento registra las decisiones arquitectónicas clave y de diseño técnico del proyecto `@creativecodeco/ui`. |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## PURPOSE |
| 8 | +El objetivo de `@creativecodeco/ui` es proveer el Sistema de Diseño oficial para CreativeCode.com.co, implementando componentes atómicos y controles de formulario altamente configurables, consistentes y optimizados bajo un enfoque CSS-first. |
| 9 | + |
| 10 | +--- |
| 11 | + |
| 12 | +## STACK |
| 13 | +- **Core**: React 19 (v19.2.8) |
| 14 | +- **Estilos**: Tailwind CSS v4 (CSS-first) + DaisyUI v5 (v5.7.0) |
| 15 | +- **Documentación**: Storybook 10 & Chromatic v18 |
| 16 | +- **Tipado**: TypeScript 6 (v6.0.3) |
| 17 | +- **Pruebas**: Jest 30 (v30.4.2) & React Testing Library v16 (v16.3.2) |
| 18 | + |
| 19 | +--- |
| 20 | + |
| 21 | +## ARCHITECTURE |
| 22 | +El proyecto sigue una arquitectura modular en la cual: |
| 23 | +- **`src/ui/components/`**: Componentes de presentación sin dependencias de estado global (Avatar, Badge, Button, Accordion). |
| 24 | +- **`src/ui/forms/`**: Componentes controladores e interactivos (TextBox, Checkbox, Radio, Dropdown, RadioList). |
| 25 | +- **`src/ui/provider/`**: Contiene `CreativeCodeUIProvider` para inyectar el tema visual `creativecode` (usando el atributo HTML `data-theme="creativecode"`). |
| 26 | +- **`src/theme/`**: La capa de diseño visual construida sobre Tailwind CSS v4, gestionada mediante tokens CSS-first en `main.css`. |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## PATTERNS |
| 31 | + |
| 32 | +### 1. React Version Alignment via Overrides |
| 33 | +Durante la actualización de dependencias, diferencias en el árbol resolutivo provocaban que `react` y `react-dom` se instalaran en versiones dispares (`19.2.7` y `19.2.8`), disparando fallos críticos de incompatibilidad en testing-library. |
| 34 | +- **Decisión**: Se forzó la alineación estricta de React a la versión `19.2.8` utilizando la sección `overrides` en `package.json`. |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +## TRADEOFFS |
| 39 | +- **Conservar TypeScript 6.0.3**: |
| 40 | + Se decidió no forzar la actualización a TypeScript 7.0.2 para evitar incompatibilidades críticas con herramientas del ecosistema de testing (como `ts-jest`), las cuales requieren APIs de compilación programática ausentes en la versión Go del compilador nativo de TS 7.0. Esto evita configuraciones complejas de aliasing o el uso de flags de instalación inseguros (`--legacy-peer-deps`). |
| 41 | +- **Babel y ESLint Conservadores**: Se retuvo Babel en la rama 7.x y ESLint en la 9.x debido a incompatibilidades de peer dependencies de los plugins core del ecosistema (`eslint-plugin-react` y `ts-jest`), priorizando la consistencia y la instalación limpia en `npm install`. |
| 42 | + |
| 43 | +--- |
| 44 | + |
| 45 | +## PHILOSOPHY |
| 46 | +- **CSS-First**: Declarar y extender colores y estilos a través de variables y directivas `@theme` nativas en hojas de estilo, minimizando el CSS dinámico inyectado por JS. |
| 47 | +- **Resolución Limpia de Dependencias**: No usar `--legacy-peer-deps` en la instalación del proyecto. Cualquier conflicto de árbol resolutivo debe arreglarse mediante alineación de versiones o anclaje a versiones estables. |
0 commit comments