← Volver al blog

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

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:

Arquitectura Modular

Organicé el código usando el Principio de Responsabilidad Única:

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:

Estado Actual de Implementación

Próximos Pasos para Producció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.