POC de Sistema de Temas Framework-Agnóstico
Descripción
Esta prueba de concepto demuestra un enfoque innovador para la generación de temas que conecta los tokens de diseño con implementaciones específicas de frameworks. El sistema genera dinámicamente temas para frameworks de UI populares (DaisyUI, Material-UI y Shadcn/UI) desde una única fuente de verdad: nuestro paquete de tokens de diseño.
El POC aborda un desafío común en entornos multi-framework: mantener consistencia de diseño entre diferentes librerías de UI mientras se evita la duplicación de código y la sincronización manual.
Desafíos
-
Fragmentación de Frameworks: Cada framework de UI tiene su propio enfoque de tematización - DaisyUI usa propiedades personalizadas CSS, MUI requiere objetos de tema JavaScript, y Shadcn/UI espera convenciones específicas de nomenclatura de variables CSS.
-
Carga Dinámica de Tokens: Crear un sistema que funcione sin problemas tanto en desarrollo (importaciones relativas) como en producción (scope de paquete) sin hardcodear rutas.
-
Seguridad de Tipos en Múltiples Contextos: Mantener la seguridad de tipos de TypeScript mientras se soportan importaciones dinámicas y múltiples variaciones de marca.
-
Optimización Tree-Shaking: Asegurar que los desarrolladores solo empaqueten los temas específicos de framework que usan, evitando bloat innecesario.
-
Arquitectura Multi-Marca: Soportar múltiples identidades de marca (Ixiptla, Obsidiana) con lógica compartida pero salidas visuales distintas.
Soluciones
Sistema Unificado de Carga de Tokens
Implementé una estrategia robusta de importación dinámica que se recupera elegantemente entre scope de paquete y rutas relativas:
export async function loadDesignTokens(brand: BrandName) {
try {
// Producción: scope de paquete
return await import(`@codigo-obsidiana/design-tokens/${brand}`);
} catch (error) {
// Desarrollo: fallback a ruta relativa
return await import(`../../../design-tokens/dist/${brand}/index.js`);
}
}
Generadores Específicos de Framework
Creé generadores especializados que transforman tokens de diseño en formatos nativos de cada framework:
- DaisyUI: Genera CSS con sintaxis
@plugin "daisyui/theme" - Material-UI: Produce objetos de tema JavaScript con estructura MUI apropiada
- Shadcn/UI: Crea propiedades personalizadas CSS siguiendo convenciones Shadcn
Arquitectura Modular
Organicé el código usando el Principio de Responsabilidad Única:
/common: Utilidades y tipos compartidos/daisyui,/mui,/shadcn: Implementaciones específicas de framework- Patrón generador para temas específicos de marca
Estrategia Tree-Shaking
Diseñé las exportaciones del paquete para habilitar importaciones selectivas:
{
"exports": {
"./daisyui/*": "./dist/daisyui/*",
"./mui/*": "./dist/mui/*",
"./shadcn/*": "./dist/shadcn/*"
}
}
Sistema de Marcas Type-Safe
Implementé validación de marcas en tiempo de compilación:
export type BrandName = 'ixiptla' | 'obsidiana';
export type ThemeMode = 'light' | 'dark';
Resultados
El POC demuestra exitosamente:
- 95% de Reutilización de Código: La lógica central de carga y transformación de tokens es compartida entre todos los frameworks
- Configuración Cero: Los desarrolladores pueden generar temas con una sola llamada de función
- Paridad de Frameworks: Los tres frameworks reciben paletas de colores, tipografía y espaciado consistentes
- Optimizado para Rendimiento: Solo el código del framework requerido es empaquetado, reduciendo el tamaño del bundle en ~60% comparado con un enfoque monolítico
- Experiencia de Desarrollador: Soporte IntelliSense y detección de errores en tiempo de compilación para combinaciones inválidas de marca/tema
Estado Actual de Implementación
- ✅ Arquitectura central y utilidades
- ✅ Generación de temas DaisyUI
- ✅ Generación de temas Material-UI
- ✅ Generación de temas Shadcn/UI
- ✅ Soporte multi-marca (Ixiptla, Obsidiana)
- ✅ Definiciones TypeScript
- ✅ Cobertura básica de pruebas
Próximos Pasos para Producción
- API avanzada de personalización de temas
- Soporte adicional de frameworks (Chakra UI, Ant Design)
- Capacidades de cambio de tema en tiempo de ejecución
- Suite de pruebas integral con testing de regresión visual
- Documentación y guías de migración
Enlaces
Este proyecto demuestra patrones avanzados de TypeScript, arquitectura de design systems y enfoques de desarrollo framework-agnóstico. El POC valida la viabilidad de mantener consistencia de diseño entre múltiples frameworks de UI mientras proporciona una excelente experiencia de desarrollador.