From b273ecfb695267f08f095731e876e5d231ed824e Mon Sep 17 00:00:00 2001 From: dev Date: Fri, 5 Jun 2026 02:07:58 +0200 Subject: [PATCH] =?UTF-8?q?docs(eidos):=20TYPOGRAPHY=5FENGINE=5FRFC=20?= =?UTF-8?q?=E2=80=94=20plan=20to=20reach=20reference-grade=20typography?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors the color RFC approach (audit -> compare -> extend additively behind the frozen token contract, by phases). Covers: the current state + the gap vs Utopia/Tailwind v4/ Material 3/Apple/Carbon; the inclusion model (extend TypographyPrimitiveSet, never rename tokens); the fluid clamp() formula (rem-based, with --scaling composing on top); woff2 + variable fonts + anti-CLS metric-override fallbacks; tracking/leading/features/ measure/text-wrap; the measurement link; canon-vs-theme doctrine; token contract additions; and a 5-phase plan. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/uix/eidos/TYPOGRAPHY_ENGINE_RFC.md | 161 +++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/uix/eidos/TYPOGRAPHY_ENGINE_RFC.md diff --git a/src/uix/eidos/TYPOGRAPHY_ENGINE_RFC.md b/src/uix/eidos/TYPOGRAPHY_ENGINE_RFC.md new file mode 100644 index 000000000..1839410b1 --- /dev/null +++ b/src/uix/eidos/TYPOGRAPHY_ENGINE_RFC.md @@ -0,0 +1,161 @@ +# RFC — Motor de tipografía reference-grade (eidos) + +> **Estado: PROPUESTA (2026-06-05).** Plan para elevar la tipografía de eidos a la par +> o por encima de los frameworks de referencia, replicando el enfoque del color +> (`COLOR_ENGINE_RFC.md`): auditar → comparar → extender de forma ADITIVA detrás del +> contrato de tokens congelado, por fases. + +## 1. Estado actual (auditoría) + +`TypographyPrimitiveSet` (`lib/primitives/typography.ts` + `config-types.ts`) → +emisión en `render-css.ts` → tokens → componentes `` / `` / ``. + +- **4 familias** (primary Instrument Sans · secondary/display Lora · mono Azeret Mono). +- **8 tamaños** `xxs 10px … xxxl 80px`, cada uno `size` / `lineHeight` / `letterSpacing` + **fijos en px**. +- **4 pesos** (400/500/600/700). +- **13 estilos nombrados** (hero, h1–h6, body, prose, label, caption, code) con size + responsive por breakpoint en algunos (`{ base, md }`). +- **Eje `--scaling`** (zoom global 90–110%) que multiplica los px. +- Tokens: `--font-family-*`, `--font-size-*` (`calc(px * --scaling)`), + `--font-line-height-*`, `--font-letter-spacing-*`, `--font-weight-*`, `--style-{name}-*`. +- **Brazo de medición**: el motor `canvas-text` (``) cuenta líneas exactas + replicando el navegador (productionizado — ver `lib/canvas-text/fix-stext.md`). + +**Bueno hoy**: estilos semánticos nombrados, sizes responsive, eje de scaling (poco +común), contrato de tokens + theming, medición exacta de líneas. + +## 2. Comparación con referencia (el gap) + +| Capacidad | Referencia | Eidos hoy | +|---|---|---| +| Tipografía **fluida** (`clamp()` por viewport) | Utopia, Carbon, Tailwind(opt) | ❌ px fijos + breakpoints manuales | +| **Variable fonts** (1 archivo, wght + opsz) | Material 3, Apple | ❌ TTF estáticas por peso | +| **WOFF2 + subsetting + fallback con métricas** (anti-CLS) | Next/Fontaine | ❌ TTF, sin subset, sin `size-adjust` | +| **Optical sizing** (`opsz`) | Apple, Material | ❌ | +| **Tracking por tamaño** (óptico) | Material, Apple, Radix | ❌ todo `0` | +| **`text-wrap: balance`/`pretty`** | Tailwind, Chakra | ❌ | +| **Measure** (ancho de línea ~65ch) | clásico, Tailwind prose | ❌ | +| **`font-feature-settings`** (tabular-nums…) | Tailwind, Radix | ❌ | +| Estilos nombrados · eje de scaling | Chakra/Material · Apple(parcial) | ✅ | + +## 3. Modelo de inclusión: extender, no reemplazar + +**Principio rector (idéntico a color)**: todo lo nuevo es **ADITIVO** sobre +`TypographyPrimitiveSet`, detrás del **contrato de tokens congelado**. Lo viejo (px +fijos) sigue funcionando; lo nuevo se activa por config. Los nombres de token +(`--font-size-X`, `--style-Y-*`) **no cambian** — solo cambia la *fórmula del valor* +(igual que en color el token `--scale-*` pasó de hex a `oklch()` sin renombrar). + +Capas de la implementación, paralelas a color: + +| Pieza | Dónde | Análogo en color | +|---|---|---| +| Matemática pura (fluid scale Utopia) | `eidos/lib/type-scale.ts` (puro) | `arts/color` / `build-scheme.ts` | +| Tipo + config | `config-types.ts` (`TypographyPrimitiveSet`) | `EidosConfig` | +| Emisión CSS | `render-css.ts` (`appendTypographyDeclarations`) | `appendColorScaleDeclarations` | +| Fuentes | `themes/fonts.css` (woff2/variable) | `themes/base` (paleta) | +| Componentes | `` / `` (props nuevas) | `