diff --git a/src/uix/eidos/README.md b/src/uix/eidos/README.md index 7b9448300..c7319dc70 100644 --- a/src/uix/eidos/README.md +++ b/src/uix/eidos/README.md @@ -564,6 +564,9 @@ Resumen rápido de lo que cubre, para no duplicar aquí: | Cobertura universal de TSC (sin excepciones) | §18 | | Variants son canon del eidos, NO del theme (con `EIDOS_VARIANTS`) | §19 | | **Correcciones del engine: densidad viva + `contrast` on-solid (2026-06-01)** | §20 | +| **Eje de `scaling` (zoom global), separado de densidad** | §23 | +| **Correcciones P2: texto on-solid por luminancia + superficies translúcidas** | §24 | +| **Modelo de color: paleta (31 escalas) + roles (alias) + intents (auto-derivados)** | §25 | Lo que sigue en este README son las decisiones operativas de la **capa visual como módulo** (typography sourcing, picker patterns, API diff --git a/src/uix/eidos/THEMING.md b/src/uix/eidos/THEMING.md index 635176aac..ace951a3b 100644 --- a/src/uix/eidos/THEMING.md +++ b/src/uix/eidos/THEMING.md @@ -17,9 +17,12 @@ valida transitividad al generar. - **226 KB raw / 25 KB gzip** de CSS foundation por defecto. Usa `npm run eidos:purge` para apps en producción → −46 a −55%. +- **Modelo de color**: paleta de 31 escalas (diseñable) → roles de + jerarquía (alias explícito) → intents (auto-derivados por convención + del libro, identidad = step 9). Ver §25. - **Compatible con** persistencia versionada, themes CSS-only, runtime overrides, dark/light, density (compact/comfortable/spacious), - reduced motion, multi-axis breakpoints. + scaling (zoom 90–110, eje aparte), reduced motion, multi-axis breakpoints. --- @@ -46,8 +49,11 @@ 18. [Cobertura universal de TSC](#18-cobertura-universal-de-tsc) 19. [Variants son canon del eidos, NO del theme](#19-variants-son-canon-del-eidos-no-del-theme) 20. [Correcciones del engine de theming (2026-06-01)](#20-correcciones-del-engine-de-theming-2026-06-01) -21. [Propuesta abierta — modelo de color de dos niveles (RFC, NO implementado)](#21-propuesta-abierta--modelo-de-color-de-dos-niveles-rfc-no-implementado) +21. [Modelo de color de dos niveles (RFC — RESUELTO en §25)](#21-modelo-de-color-de-dos-niveles-rfc--resuelto-en-25) 22. [Mejoras pendientes del theming](#22-mejoras-pendientes-del-theming) +23. [Eje de `scaling` (zoom global)](#23-eje-de-scaling-zoom-global--2026-06-02) +24. [Correcciones P2 del engine (2026-06-02)](#24-correcciones-p2-del-engine-2026-06-02) +25. [Modelo de color — paleta + roles/intents derivados](#25-modelo-de-color--paleta--rolesintents-derivados-2026-06-02) --- @@ -384,7 +390,9 @@ En la práctica, **la mayoría de las apps SÓLO tocan las capas 1-3** ### Cuándo crear un token nuevo en cada capa -- **Capa 1** (scale): jamás añades. Usa las 30 escalas Radix existentes. +- **Capa 1** (scale): una app rara vez; un **tema de marca** SÍ trae o + amplía su propia paleta (§25.7). Las **31 escalas** por defecto cubren + el caso general. - **Capa 2** (primitive): rara vez. Sólo si añades un role canónico nuevo (lo cual cambiaría el book canon — no lo hagas). - **Capa 3** (color): si añades un nuevo `{slot}` (raro). Hoy hay 9 @@ -438,12 +446,19 @@ neutral — gray default threat — active negative consequence | neutral | gray | Sin carga | | affirm | teal | Light positive, mint-fresh | | fulfill | green | Completion, classic success | -| risk | orange | Caution, warning | +| risk | amber | Caution, warning | | threat | red | Active danger | -| loss | purple | Posterior gravity, deep | +| loss | plum | Posterior gravity, deep | -Cada escala genera 12 steps + 12 alpha steps = 24 tokens × 9 roles = -**216 color primitives**. Es la mayor parte del bloat del foundation. +> **Los intents auto-derivan de la paleta** (`CANONICAL_INTENT_SCALES`, +> identidad = step 9): `neutral→gray · affirm→teal · fulfill→green · +> risk→amber · threat→red · loss→plum`. La jerarquía (`primary` / +> `secondary` / `tertiary`) la elige el tema. Modelo completo en **§25**. + +La **paleta** son **31 escalas** de 12 steps + 12 alpha = 24 tokens c/u +(**744 tokens `--scale-*`** — el grueso del bloat del foundation). Sobre +ella, los 9 roles aliasan vía `--primitive-{role}-{step}` (9 × 24 = +**216 primitives**). ### Por qué 9 roles y no 4 (como shadcn) o 14 (como Mantine) @@ -1433,10 +1448,12 @@ eidos.dom.apply(...); Es output. Cualquier cambio se sobrescribe al regenerar. Si necesitas cambiar algo, edita `lib/themes/base.ts` o `lib/recipes/base.ts`. -### G. Crear nuevas escalas físicas +### G. Crear escalas físicas sueltas dentro de una app -Las 30 escalas Radix cubren todas las paletas razonables. Si crees -necesitar una nueva, replantéate el role mapping antes. +Las **31 escalas** por defecto cubren las paletas razonables. Un **tema +de marca** SÍ trae su propia paleta como escalas (§25.7) — eso es +legítimo. Lo que NO debes hacer es añadir una escala one-off dentro de +una app cuando remapear un role a una escala existente ya resuelve el caso. ### H. Re-exportar entre layers @@ -1859,9 +1876,9 @@ un ramp interactivo. La propuesta (dos niveles: accents/neutral ricos + intents de **un solo color ancla** con slots derivados por `color-mix()`, más ampliar la librería hacia paridad Radix) está documentada como RFC en -[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). **Estado: propuesta — no -implementada.** El modelo actual descrito en este documento (rol → escala de 12 -pasos) sigue siendo el vigente. +[`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). _(Estado original: propuesta. +**Resuelto en §25** — se adoptó paleta rica + alias / auto-derivación y se +descartó el ancla de un solo color.)_ --- @@ -1874,10 +1891,12 @@ pasos) sigue siendo el vigente. Backlog vivo de mejoras al sistema. Ordenado por impacto, no por prioridad. -1. **Modelo de color de dos niveles** _(mayor)_ — accents/neutral ricos + - intents de **un solo color ancla** con slots derivados, y ampliar la librería - de paletas hacia paridad Radix (~24–30 escalas). Diseño completo en §21 / - [`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). Estado: propuesta. +1. ✅ **Modelo de color — paleta + roles/intents derivados** _(mayor · resuelto 2026-06-02)_ + — adoptado el modelo Radix-style: **paleta** de 31 escalas (diseñable por el + tema) + **roles de jerarquía** como alias explícito + **intents auto-derivados** + por convención del libro (identidad = step 9). Se **descartó** el "intent = + ancla de un solo color". Modelo completo en §25 / + [`COLOR_MODEL_RFC.md`](./COLOR_MODEL_RFC.md). 2. ✅ **Variant `surface`/`soft` vía alpha en vez de tinte opaco** _(resuelto 2026-06-02)_ — el tinte `soft` por rol (Button + Badge `{role}-soft-bg`) se computaba