You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/CONTINUE-icon-type-scale.md

6.8 KiB

CONTINUAR — Escala de iconos ↔ tipografía (correlación 1:1)

Sesión pausada 2026-06-13 "al límite". Retomar el próximo domingo. Este archivo es el contexto completo para continuar SIN re-litigar decisiones.

✅ RESUELTO 2026-06-13 (continuación)

Se eligió la opción (1), NO la "1:1 total" que describía el plan de abajo:

  • NO se sube el font de los controles. El "bajón" del font (un control md muestra font-sm) resultó ser la convención generalizada (~20 recipes, densidad de controles) — deliberada y correcta. NO se toca STATIC_SIZE.
  • Regla final: el icono acompaña el font que el componente realmente usa (no el nombre del size). icon = icon-{name} del font-{name} que muestra.
  • button: icon-size-sm corregido icon-xs→icon-sm (sigue su font). Render ahora 14/16/16/18/20. Verificado visual.
  • radio-cards: iconos siguen el font del título → 16/16/18/18/20 (antes 18-32 inflados a mano). Verificado visual.
  • Bug pre-existente arreglado (button.css): el <svg> del Icon lleva width: var(--icon-size) inline, que vencía al [data-button] svg { inline-size } → el icono del button quedaba fijo en 18, NO respondía al size. Fix: el button alimenta --icon-size: var(--_button-icon-size). Ahora responde.

Pendiente (menor, futuro)

  • Auditar si OTROS componentes tienen el mismo bug del icono (dimensionan el svg por CSS externo y el inline width:var(--icon-size) del Icon lo vence). radio-cards NO lo tiene (responde bien). Patrón de fix: --icon-size: var(--_x-icon-size).
  • Decidir si se borra el banco de pruebas /uix/icon-scale-study.

(Plan original abajo — premisa "1:1 total" SUPERADA por la opción 1.)

Dónde estamos (committeado en este punto)

La escala de iconos se ata a la tipografía. Decisión firme: font-{name} ↔ icon-{name} 1:1 por nombre (el icono acompaña al texto, no se infla ni se hardcodea).

Ya hecho y committeado (punto de reversión):

  • Escala de iconos ajustada (lib/primitives/static.ts → STATIC_ICON.size): xl 24→32, xxl 48→52. Validado por ojo en el banco de pruebas. create-icon.ts ICON_SIZE_PX_MAP actualizado igual. Impacto 0 (nadie consumía esos steps).
  • button: icon-size-{size} del recipe pasó de px hardcodeado a var(--icon-size-X) mapeado por valor (cero cambio visual, ya escalable). ⚠️ ESTO ES INTERMEDIO — se va a re-hacer a 1:1 (ver abajo).
  • Docs: THEMING.md §5 "Escala tipográfica ↔ escala de iconos" + comentario en static.ts.
  • Banco de pruebas: /uix/icon-scale-study (web/routes/uix/icon-scale-study/+page.svelte). Compara modelos icon/font. Pendiente decidir si se borra o se deja.

Tabla de correlación canónica (LA referencia)

size font (px) line-height icon (px) icon − font
xxs 10 15 12 +2
xs 12 18 14 +2
sm 14 20 16 +2
md 16 23 18 +2
lg 20 27 20 0
xl 24→28 34 32 +4
xxl 32→48 50 52 +4

(headings lg–xxl fluidos clamp(); col font = max desktop. Salto icon 20→32 es fiel al salto del texto 20→28: la tipografía tampoco tiene nada entre medias.)

SIGUIENTE PASO — lo que estábamos a punto de hacer (NO implementado)

1:1 TOTAL (opción A, confirmada por el usuario): size md = font-md (16) = icon-md (18), sin "bajones".

El problema a resolver: hoy el size canon (STATIC_SIZE en lib/primitives/static.ts) y varios recipes (button incluido) bajan el font un escalón:

  • STATIC_SIZE: md → fontSize 'sm', lg → 'md', xl → 'lg', xxl → 'xl'.
  • button recipe: font-size-md: var(--font-size-sm), lg→md, xl→lg.

Para 1:1 hay que quitar ese bajón → md → font-md, etc. Consecuencia: el texto de los controles SUBE (button/input md: 14→16px). Cambio visual amplio.

Tareas concretas para retomar

  1. MEDIR el impacto primero (el grep se quedó sin ejecutar). Saber:
    • Qué recipes bajan su font a mano ('font-size-(md|lg|xl)': 'var(--font-size-(xs|sm|md|lg))').
    • Quién consume var(--size-{name}-font-size) (heredan del canon).
    • → dimensionar si el cambio es 5 recipes o 40.
  2. Implementar 1:1:
    • STATIC_SIZE: cada size → fontSize del MISMO nombre (md→'md', lg→'lg', xl→'xl', xxl→'xxl').
    • button recipe: font-size-{size} → var(--font-size-{size}) (1:1) + icon-size-{size} → var(--icon-size-{size}) (1:1). Resultado button: xs/sm/md/lg/xl = font 12/14/16/18-20/24-28 + icon 14/16/18/20/32. ⚠️ button xl queda GRANDE (font 24-28 + icon 32) — MIRAR si convence; quizá button no debe llegar a xl tan grande.
    • Demás recipes que bajan: alinear a 1:1.
  3. radio-cards (recipes/base.ts ~1975): migrar a la correlación. Hoy usa iconos PROMINENTES hardcodeados (18/20/24/28/32) más grandes que sus títulos (14/14/16/16/18-20). Bajo la regla "sin inflar", el icono acompaña el título → 16/16/18/18/20 (ENCOGEN). Si una card quiere icono grande, la vía canónica es subir el font del título (el icono lo sigue), NO inflar el icono.
  4. Regenerar (npm run generate:eidos-css) + verificar visual dark/light (button gallery /uix/components/button, radio-cards, varios controles) + commitear.

Decisiones de la sesión (NO re-litigar)

  • ❌ NO más escalas ni steps prominentes (24/28/40). "No vamos a meter más escalas que suban o bajen ni que el diseñador lo hardcodee."
  • ❌ NO Fluent puro (14/16/20/24/32/40/48/64). Se ajustó la escala actual atada a texto (solo xl→32, xxl→52).
  • ✅ Regla única: el icono SIEMPRE acompaña al texto del componente (icon = icon-{name} del font que el componente muestra). 1:1.
  • ✅ Coherencia total: size = font = icon por nombre (sin bajones). El usuario prefiere subir el font de los controles a mantener el bajón.

Archivos clave

Archivo Qué
src/uix/eidos/lib/primitives/static.ts STATIC_ICON.size (escala iconos) + STATIC_SIZE (size canon que BAJA el font — a corregir)
src/uix/eidos/lib/primitives/typography.ts escala tipográfica (sizes: 10/12/14/16/20/28/48...)
src/uix/eidos/components/icon/create-icon.ts ICON_SIZE_PX_MAP (espejo de la escala)
src/uix/eidos/lib/recipes/base.ts button ~1470 · radio-cards ~1975
src/uix/eidos/THEMING.md §5 doc de la correlación
web/routes/uix/icon-scale-study/+page.svelte banco de pruebas visual

Regenerar siempre tras tocar la escala: npm run generate:eidos-css.

Estado git al pausar

Rama active-uix. Excluir SIEMPRE de commits: palabras/**, .claude/launch.json, y lo ajeno del usuario en el árbol (ogl en package.json, web/routes/demos/animations/, web/routes/demos/+page.svelte).

Powered by TurnKey Linux.