Expand description
llimphi-theme — paleta compartida entre apps Llimphi.
Define un set de slots semánticos (bg_app, fg_text, accent, etc.)
que cada widget mapea a su propio Palette específico vía
Palette::from_theme(&theme). El analógo Llimphi al nahual-theme
GPUI, pero con colores peniko::Color y sin macros de Background /
gradiente — Llimphi pinta colores sólidos por ahora.
Disponer del Theme en un crate aparte permite:
- Consistencia visual: las apps comparten paleta sin redefinirla.
- Temas intercambiables:
Theme::dark()vsTheme::light()(o más adelante, sobreescritos por config del usuario). - Widgets desacoplados: cada widget acepta su
Palette(no el Theme entero), así un consumidor que sólo necesita un botón con colores no-temáticos puede construir suButtonPalettea mano.
Modules§
- alpha
- Valores de opacidad alfa (0–255) para capas semánticas. Usar siempre que se quiera transparencia coherente. El widget que improvisa su propio alpha rompe la firma visual.
- elevation
- Tokens de elevación — sombras escalonadas. Como
Shadowvive enllimphi-compositor(yllimphi-themeno depende de él para quedarse leaf), cada nivel se expone como(alpha_u8, blur_px, dy_px). Los widgets construyen suShadowpuenteándolo:Shadow { color: Color::from_rgba8(0,0,0, a), blur, dy, dx: 0.0, spread: 0.0 }. Escala perceptual logarítmica: cada nivel ~×2 de blur. - motion
- Duraciones canónicas (segundo nivel: rítmico, no nervioso, no
soporífero). Los widgets eligen
MICROpara tintes de hover/focus que sólo necesitan suavizar el “salto”,FASTpara microinteracciones completas (chip que pulsa),NORMALpara transiciones principales (toast entrar, modal abrir),SLOWpara énfasis o entradas dramáticas (splash de boot, hero shared-element). - radius
- Radios de esquina canónicos. La elegancia se construye en escalera:
XSpara chips e inputs,SMpara botones,MDpara paneles,LGpara superficies grandes (toast, modal, card destacada).
Structs§
- Theme
- Paleta de la app. Slots semánticos que cubren los casos comunes
(fondo, texto, hover, foco, acento). Los widgets reusables toman su
Paletteespecífico desde acá víaPalette::from_theme(&theme).
Constants§
- ENTITY_
PALETTE - Paleta sobria de 8 tonos para colorear entidades por hash (avatares de
contactos, etiquetas de calendario…). Tonos apagados que conviven con
cualquier
Theme. Usada víastable_color.
Functions§
- stable_
color - Color estable derivado de una semilla: hash FNV-1a del texto → índice en
ENTITY_PALETTE. La misma semilla da siempre el mismo color, sin estado. Para avatares (por correo), etiquetas, badges de entidad, etc.