En el pipeline SSR de tinywasm, assetmin descubre los bloques RootCSS() del grafo de dependencias. El bloque :root (el vocabulario de tokens) es un slot de un solo ganador por reemplazo:
- Si la aplicación (el proyecto raíz) declara
func RootCSS() *css.Stylesheet, ese bloque reemplaza por completo elRootCSS()por defecto de la libreríatinywasm/css. RenderCSS()(la lógica de reglas y bindings) es aditivo: se concatenan las contribuciones de todos los módulos.
Para facilitar el rebrand sin perder el catálogo completo de tokens (escalas de espacio, tipografía, etc.), la librería provee css.Theme(...Override).
Theme() obtiene el catálogo por defecto mediante RootCSS() y añade un bloque :root final con los overrides proporcionados. Esto garantiza que:
- La aplicación no tenga que redeclarar tokens que no desea cambiar.
- Los cambios de la aplicación ganen en la cascada de CSS al aparecer al final del bloque.
- El catálogo se mantenga íntegro para que los componentes sigan funcionando.
El tipo Override es opaco y solo puede construirse mediante css.Set(Token, value). Esto impide estados ilegales como intentar inyectar propiedades CSS arbitrarias en el bloque :root a través del entrypoint de tema, forzando a que solo se sobreescriban tokens del catálogo tipado.
// Uso correcto
css.Theme(css.Set(css.ColorPrimary, "#hex"))
// No compila (Set exige un Token)
// css.Theme(css.Set("padding", "20px"))