diff --git a/web/routes/temas/+page.svelte b/web/routes/temas/+page.svelte index de5f3cbc4..07bb33c01 100644 --- a/web/routes/temas/+page.svelte +++ b/web/routes/temas/+page.svelte @@ -1,12 +1,12 @@ diff --git a/web/routes/temas/_lib/untitled-ui.ts b/web/routes/temas/_lib/grafito.ts similarity index 80% rename from web/routes/temas/_lib/untitled-ui.ts rename to web/routes/temas/_lib/grafito.ts index 648738ad1..8f6268f96 100644 --- a/web/routes/temas/_lib/untitled-ui.ts +++ b/web/routes/temas/_lib/grafito.ts @@ -1,5 +1,5 @@ /** - * Untitled UI — tema para activeUIX / Eidos. + * Grafito — tema para activeUIX / Eidos (paleta derivada de Untitled UI, variada). * * Reproduce el lenguaje visual de https://www.untitledui.com con el * sistema de theming canónico de Eidos: NO inventa variants ni roles @@ -31,7 +31,11 @@ * escalas no coincide con los roles, y el validador de Eidos lo * rechazaría.) */ -import { createThemeBaseEidosConfig } from '$uix/eidos/lib/themes/base' +import { + createThemeBaseEidosConfig, + THEME_BASE_LIGHT_COLOR_SCALES, + THEME_BASE_DARK_COLOR_SCALES +} from '$uix/eidos/lib/themes/base' import type { ColorScale, ColorRoleMap, EidosConfig } from '$uix/eidos/lib/config-types' const s = ( @@ -65,6 +69,10 @@ const s = ( // ── Escalas — modo claro ────────────────────────────────────────────── // prettier-ignore const LIGHT = { + // Hereda la paleta base del framework (31 escalas Radix). Grafito sobreescribe + // abajo las escalas de marca (carbon, gray, violet, blue + intents UUI-tuned) y + // hereda las demás → ~32 escalas en la paleta del tema. + ...THEME_BASE_LIGHT_COLOR_SCALES, // Carbon — grafito casi negro. Primario monocromo (Vercel / Linear style). // 9 = sólido oscuro del botón; con slots.contrast='1' el texto (step 1) // queda casi blanco. En dark la escala se invierte y todo encaja solo. @@ -95,6 +103,8 @@ const LIGHT = { // 10 = `-500` (más claro para hover sobre oscuro). // prettier-ignore const DARK = { + ...THEME_BASE_DARK_COLOR_SCALES, + // ── Escalas de marca Grafito (dark) ── // Carbon invertido: 1 = casi negro, 9 = botón claro, contrast(1) = oscuro. carbon: s('#0b0c0e','#131418','#1b1c20','#232428','#2c2d32','#3a3b41','#565760','#7c7d86','#f4f4f6','#ffffff','#cdced4','#fbfbfc'), gray: s('#0c111d','#101828','#1d2939','#243144','#2c3a4f','#344054','#475467','#5d6b7e','#667085','#98a2b3','#ced5de','#f5f6f8'), @@ -109,18 +119,17 @@ const DARK = { // ── Mapeo role → escala (los 9 roles canónicos de Eidos) ────────────── const ROLES: ColorRoleMap = { - // Carbon monocromo. `slots.contrast: '1'` hace que el texto sobre el - // sólido sea el step 1 — casi blanco en claro, casi negro en oscuro — - // invirtiéndose solo con el modo (el step 9 también se invierte). + // Solo la JERARQUÍA se mapea explícitamente (decisión de marca). Carbon + // monocromo: `slots.contrast: '1'` hace que el texto sobre el sólido sea el + // step 1 — casi blanco en claro, casi negro en oscuro — invirtiéndose con el + // modo (el step 9 también se invierte). primary: { scale: 'carbon', slots: { contrast: '1' } }, secondary: 'violet', - tertiary: 'blue', - neutral: 'gray', - affirm: 'teal', - fulfill: 'green', - risk: 'amber', - threat: 'red', - loss: 'plum' + tertiary: 'blue' + // Los 6 intents (neutral + affirm/fulfill/risk/threat/loss) NO se cablean: + // auto-derivan de la paleta por la convención del libro + // (gray/teal/green/amber/red/plum — todas presentes arriba), identidad = step 9. + // Un tema puede overridear un intent mapeándolo explícitamente. } // ── Superficies / contenido / bordes / focus ────────────────────────── @@ -253,19 +262,19 @@ const base = createThemeBaseEidosConfig({ }) /** - * Config completo del tema Untitled UI. Se pasa a - * `ActiveEidos.create({ config: untitledUiConfig, theme: 'untitled-ui' })`. + * Config completo del tema Grafito. Se pasa a + * `ActiveEidos.create({ config: grafitoConfig, theme: 'grafito' })`. */ -export const untitledUiConfig: EidosConfig = { +export const grafitoConfig: EidosConfig = { primitives: base.primitives, recipes: base.recipes, semantics: { color: { roles: ROLES } }, themes: { - 'untitled-ui-light': { + 'grafito-light': { color: { scales: LIGHT, ...LIGHT_SEMANTICS }, shadow: LIGHT_SHADOW }, - 'untitled-ui-dark': { + 'grafito-dark': { color: { scales: DARK, ...DARK_SEMANTICS }, shadow: DARK_SHADOW } @@ -281,30 +290,35 @@ export interface ThemeRoleInfo { readonly note: string } -/** Los 9 roles canónicos, con la escala Untitled UI a la que mapean. */ -export const THEME_ROLES: readonly ThemeRoleInfo[] = [ +/** Roles de JERARQUÍA — alias explícito a una escala de la paleta (marca). Los + * intents NO van aquí: auto-derivan de la paleta por convención (ver THEME_INTENTS). */ +export const THEME_HIERARCHY: readonly ThemeRoleInfo[] = [ { role: 'primary', scale: 'carbon', label: 'Primary', note: 'Carbón · grafito #1F2024' }, - { role: 'secondary', scale: 'violet', label: 'Secondary', note: 'Brand UUI · violeta #7F56D9' }, - { role: 'tertiary', scale: 'blue', label: 'Tertiary', note: 'Acento · azul #1570EF' }, - { role: 'neutral', scale: 'gray', label: 'Neutral', note: 'Gris frío Untitled UI' }, - { role: 'affirm', scale: 'teal', label: 'Affirm', note: 'Positivo ligero · teal' }, - { role: 'fulfill', scale: 'green', label: 'Fulfill', note: 'Éxito / completado · verde' }, - { role: 'risk', scale: 'amber', label: 'Risk', note: 'Aviso · warning #DC6803' }, - { role: 'threat', scale: 'red', label: 'Threat', note: 'Error / peligro · #D92D20' }, - { role: 'loss', scale: 'plum', label: 'Loss', note: 'Pérdida grave · violeta sombrío' } + { role: 'secondary', scale: 'violet', label: 'Secondary', note: 'Violeta de marca #7F56D9' }, + { role: 'tertiary', scale: 'blue', label: 'Tertiary', note: 'Azul acento #1570EF' } ] -/** Escalas físicas del theme, en orden de presentación. */ -export const THEME_SCALES: readonly { name: string; label: string }[] = [ - { name: 'carbon', label: 'Carbon' }, - { name: 'violet', label: 'Violet · brand' }, - { name: 'blue', label: 'Blue' }, - { name: 'gray', label: 'Gray' }, - { name: 'teal', label: 'Teal' }, - { name: 'green', label: 'Success' }, - { name: 'amber', label: 'Warning' }, - { name: 'red', label: 'Error' }, - { name: 'plum', label: 'Plum · grave' } +/** + * La paleta COMPLETA del tema (~32 escalas), derivada de las claves de `LIGHT` + * para no desincronizarse. Etiquetada por NOMBRE DE COLOR — nunca por intent + * (los intents son una capa semántica encima; ver THEME_INTENTS). + */ +export const THEME_SCALES: readonly { name: string; label: string }[] = Object.keys(LIGHT) + .sort() + .map((name) => ({ name, label: name })) + +/** + * Los 6 intents y la escala de la paleta de la que **auto-derivan** (convención + * del libro). El tema NO los cablea — el engine los rellena por nombre, + * identidad = step 9. Esto son solo metadatos para documentar el mapeo en el demo. + */ +export const THEME_INTENTS: readonly { role: string; label: string; scale: string; note: string }[] = [ + { role: 'neutral', label: 'Neutral', scale: 'gray', note: 'Sin valencia · gris de trabajo' }, + { role: 'affirm', label: 'Affirm', scale: 'teal', note: 'Positivo ligero · teal' }, + { role: 'fulfill', label: 'Fulfill', scale: 'green', note: 'Éxito / completado · verde' }, + { role: 'risk', label: 'Risk', scale: 'amber', note: 'Aviso · ámbar' }, + { role: 'threat', label: 'Threat', scale: 'red', note: 'Error / peligro · rojo' }, + { role: 'loss', label: 'Loss', scale: 'plum', note: 'Pérdida grave · violeta sombrío' } ] export const COLOR_STEPS = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'] as const diff --git a/web/routes/temas/untitled-ui/+layout.ts b/web/routes/temas/grafito/+layout.ts similarity index 100% rename from web/routes/temas/untitled-ui/+layout.ts rename to web/routes/temas/grafito/+layout.ts diff --git a/web/routes/temas/untitled-ui/+layout@.svelte b/web/routes/temas/grafito/+layout@.svelte similarity index 84% rename from web/routes/temas/untitled-ui/+layout@.svelte rename to web/routes/temas/grafito/+layout@.svelte index b56893b62..cbb1af7e9 100644 --- a/web/routes/temas/untitled-ui/+layout@.svelte +++ b/web/routes/temas/grafito/+layout@.svelte @@ -1,6 +1,6 @@ + +{#snippet plusIcon()} + +{/snippet} + +{#snippet arrowIcon()} + +{/snippet} + + +
+

Grafito

+

+ Tema para activeUIX sobre el sistema de theming de Eidos. Primario carbón + monocromo, tipografía Inter, paleta derivada de Untitled UI (31 escalas), radios de 8px, + sombras en capas. Los 3 roles de jerarquía aliasan la paleta; los 6 intents auto-derivan por + la convención del libro — sin inventar variants ni roles nuevos. +

+
+ Carbon · #1F2024 + Inter + 9 roles · 5 variants + Light · Dark · Density · Scaling +
+
+ +
+ + +
+

Fundamentos

+ + +
+
+

Color

+

+ Tres capas: la Paleta (escalas, directamente usables) → los + Roles de jerarquía la aliasan → los Intents auto-derivan + de la paleta por la convención del libro (identidad = step 9). Los componentes pueden + override su color a cualquier escala. Los 9 roles son canon fijo; el tema solo trae la + paleta y mapea la jerarquía. +

+
+ +
+

Paleta · escalas de 12 pasos

+

Cada paso es directamente usable — p. ej. var(--scale-teal-10).

+ {#each THEME_SCALES as sc} +
+
+ {sc.label} + {hex[`${sc.name}-9`] ?? `--scale-${sc.name}-9`} +
+
+ {#each COLOR_STEPS as step} +
+ {step} +
+ {/each} +
+
+ {/each} +
+ 1–2 fondos + 3–5 componente + 6–8 bordes + 9–10 sólido + 11–12 texto +
+
+ +
+

Roles de jerarquía · alias explícito a una escala

+
+ {#each [{ role: 'primary', label: 'Primary', scale: 'carbon' }, { role: 'secondary', label: 'Secondary', scale: 'violet' }, { role: 'tertiary', label: 'Tertiary', scale: 'blue' }] as h} +
+
+
+ {h.label} + alias → {h.scale} +
+ + + + +
+
+
+ {/each} +
+
+ +
+

Intents · auto-derivados de la paleta (convención del libro)

+
+ {#each THEME_INTENTS as it} +
+
+
+ {it.label} + auto → {it.scale} +
+ + + + + + +
+
+
+ {/each} +
+
+ +
+

Superficies, contenido y bordes

+
+
+ surfacedefault +
+
+ surfaceraised +
+
+ surfacemuted +
+
+ contentprimary +
+
+ contentsecondary +
+
+ borderstrong +
+
+
+
+ + +
+
+

Tipografía

+

Inter para display y texto. Named styles del sistema (hero → caption + code).

+
+
+ {#each TYPE_STYLES as t} +
+
+ {t.label} + --style-{t.key} +
+
+ {t.sample} +
+
+ {/each} +
+
+ + +
+
+

Espaciado, radio, sombra y tamaño

+

Primitivas estables del tema. La escala base es de 4px; controles a 8px de radio.

+
+ +
+
+

Spacing

+ {#each SPACE as k} +
+ --space-{k} +
+
+ {/each} +
+ +
+
+

Radius

+
+ {#each RADII as k} +
{k}
+ {/each} +
+
+ +
+

Sizes · control-height

+ {#each SIZES as k} +
+
{k}
+ var(--size-{k}-control-height) +
+ {/each} +
+
+
+ +
+

Shadows

+
+ {#each SHADOWS as k} +
shadow-{k}
+ {/each} +
+
+
+ + +
+
+

Densidad & Scaling

+

Dos ejes ortogonales que se multiplican. Cámbialos en la barra superior y mira cómo reaccionan estas métricas y el specimen en vivo.

+
+ +
+
+

Densidad · {axis.density}

+

Ritmo de layout (espacio) + altura de control. La tipografía NO cambia con la densidad.

+
+
--space-4{axis.space4 || '—'}
+
--control-height-md{axis.ctrlMd || '—'}
+
+
+ +
+

Scaling · {axis.scaling}%

+

Zoom global (paridad Radix) — escala TODO proporcionalmente, incluida la tipografía. No toca radio, borde ni sombra.

+
+
--font-size-md{axis.fontMd || '—'}
+
--space-4 × scaling{axis.space4 || '—'}
+
+
+ +
+

Specimen en vivo

+
+ + v2.4 +
+

+ Texto de cuerpo: escala con scaling, estable bajo densidad. +

+
+
+ + + +
+ +

Componentes

+ + +
+
+

Botones

+

6 variants · 9 roles · 5 tamaños · estados. El primario es carbón; el texto sobre sólidos claros resuelve a oscuro por luminancia.

+
+ +
+
+

Variants

+
+ {#each BTN_VARIANTS as v} + + {/each} +
+
+ +
+

Roles e intents

+
+ + + + + + + + +
+
+ +
+

Tamaños

+
+ {#each BTN_SIZES as sz} + + {/each} +
+
+ +
+

Con icono y estados

+
+ + + + + +
+
+
+
+ + +
+
+

Badges

+

Pills de estado en los 4 chip-variants y la paleta completa de roles.

+
+
+
+

Colores (soft)

+
+ {#each BADGE_COLORS as c} + {c} + {/each} +
+
+
+

Variants

+
+ {#each CHIP_VARIANTS as v} + {v} + {/each} + Activo + {}}>Filtro +
+
+
+
+ + +
+
+

Controles de formulario

+

Field, Select, Checkbox, Radio, Switch y Slider con el aspecto del tema.

+
+ +
+
+ + Email + + + + Usaremos esto para iniciar sesión. + + + + Fruta favorita + + +
+ +
+

Selección

+ + + + + + + Plan + + + + +
+ +
+

Switch & Slider

+ + + + + +
+ Volumen · {volume[0]}% + + + + +
+
+
+
+ + +
+
+

Feedback y estado

+

Banners por intent, progreso, avatares y tarjetas.

+
+ +
+ Tu prueba gratuita termina en 7 días. Mejora tu plan cuando quieras. + Cambios guardados correctamente. + Tu método de pago caduca pronto. + No se pudo procesar el pago. Revisa tus datos. +
+ +
+
+

Progress

+ + Subiendo archivo + + + +
+ + +
+
+ +
+

Avatares

+
+ OV + AM + + JV + + + SK +
+
+ + + + Plan Pro + Todo lo del Starter, más colaboración ilimitada. + + + $29 + / mes + + + + + +
+
+ + +
+
+

Tabs

+

Variantes line y pills. Indicador animado, foco con anillo carbón, activo en color primario.

+
+
+
+

Line

+ + + Overview + Activity + Settings + + + Resumen de la cuenta y métricas clave del mes. + Registro de actividad reciente del equipo. + Preferencias de notificación y seguridad. + +
+
+

Pills

+ + + Account + Team + Billing + + + Datos de perfil y sesión. + Miembros e invitaciones. + Plan, método de pago y facturas. + +
+
+
+ + +
+
+

Disclosure

+

Accordion (outline) — apertura única, chevron y foco coherentes con el tema.

+
+
+ + + ¿Qué es activeUIX? + + Un sistema de UI en cuatro capas — morfo, soma, sema y eidos — donde el theming vive en + eidos y retinta los roles canónicos. + + + + ¿Cómo se crea un tema? + + Con ActiveEidos.create({ config }): se remapean los 9 roles a paletas + y se ajustan primitivas estables (tipografía, radio, sombra). + + + + ¿Y el modo oscuro? + + El tema declara escalas light y dark; el primario carbón se invierte solo gracias al slot + contrast. + + + +
+
+ + +
+
+

Toggles

+

Toggle suelto y toggle-group (segmentado, single + multiple). Activo en color primario.

+
+
+
+

Toggle

+
+ Bold + Outline + Ghost + Disabled +
+
+
+

Toggle group · segmentado

+
+ + B + I + U + + + Izq. + Centro + Der. + +
+
+
+
+ + +
+
+

Toolbar

+

Barra de herramientas con botones, separador y grupo segmentado.

+
+
+ + Deshacer + Rehacer + + + B + I + U + + + Compartir + +
+
+ + +
+
+

Overlays

+

Popover y dialog — paneles portaleados con la superficie, borde y sombra del tema.

+
+
+ + Abrir popover + + + + Dimensiones + Ajusta el ancho del panel lateral. +
+ + Cerrar +
+
+
+
+ + + Abrir dialog + + + + + ¿Eliminar proyecto? + + Esta acción es permanente y no se puede deshacer. + + + + Cancelar + + + + + +
+
+ + + + +

Sistema

+ + +
+
+

Semántica (sema)

+

+ La capa perceptual está activa: cada interacción emite una señal con familia + intent que se + materializa en sonido (earcon), haptic (Vibration API) y una + reacción visual data-event-* teñida por el intent del tema. + Pulsa los botones — en un navegador con gesto de usuario sonarán. +

+
+
+

Intents perceptuales

+
+ + + + + +
+

+ El motor (EngineSemantic) se cablea en el layout vía + createActiveUix({ events: { sound, haptic, components } }) con + los packs sema por componente. Sonido y haptic son opt-in; aquí están encendidos. +

+
+
+ + +
+
diff --git a/web/routes/temas/untitled-ui/+page.ts b/web/routes/temas/grafito/+page.ts similarity index 100% rename from web/routes/temas/untitled-ui/+page.ts rename to web/routes/temas/grafito/+page.ts diff --git a/web/routes/temas/untitled-ui/OverlaysIsland.svelte b/web/routes/temas/grafito/OverlaysIsland.svelte similarity index 100% rename from web/routes/temas/untitled-ui/OverlaysIsland.svelte rename to web/routes/temas/grafito/OverlaysIsland.svelte diff --git a/web/routes/temas/untitled-ui/README.md b/web/routes/temas/grafito/README.md similarity index 100% rename from web/routes/temas/untitled-ui/README.md rename to web/routes/temas/grafito/README.md diff --git a/web/routes/temas/untitled-ui/untitled-ui.css b/web/routes/temas/grafito/grafito.css similarity index 100% rename from web/routes/temas/untitled-ui/untitled-ui.css rename to web/routes/temas/grafito/grafito.css diff --git a/web/routes/temas/untitled-ui/theme.css b/web/routes/temas/grafito/theme.css similarity index 77% rename from web/routes/temas/untitled-ui/theme.css rename to web/routes/temas/grafito/theme.css index 139c7e2ae..d774cd6cf 100644 --- a/web/routes/temas/untitled-ui/theme.css +++ b/web/routes/temas/grafito/theme.css @@ -122,14 +122,103 @@ /* ── Canvas ─────────────────────────────────────────────────────── */ [data-temas-canvas] { - max-inline-size: 1120px; + max-inline-size: 1240px; margin-inline: auto; padding: var(--space-10) var(--space-6) var(--space-16); display: flex; flex-direction: column; + gap: var(--space-12); +} + +/* ── 2-pane: TOC sticky + contenido ─────────────────────────────── */ +[data-temas-layout] { + display: grid; + grid-template-columns: 220px minmax(0, 1fr); + gap: var(--space-10); + align-items: start; +} + +[data-temas-toc] { + position: sticky; + inset-block-start: var(--space-16); + align-self: start; + max-block-size: calc(100dvh - var(--space-16) - var(--space-4)); + overflow-y: auto; +} +[data-temas-toc] nav { + display: flex; + flex-direction: column; +} +[data-temas-toc-group] { + margin: var(--space-4) 0 var(--space-1-5); + font-size: var(--font-size-xs); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.07em; + color: var(--color-content-muted); +} +[data-temas-toc-group]:first-child { + margin-block-start: 0; +} +[data-temas-toc] ul { + list-style: none; + margin: 0 0 var(--space-1); + padding: 0; + display: flex; + flex-direction: column; + gap: 1px; +} +[data-temas-toc] a { + display: block; + padding: var(--space-1-5) var(--space-2-5); + border-radius: var(--radius-md); + border-inline-start: 2px solid transparent; + color: var(--color-content-secondary); + text-decoration: none; + font-size: var(--font-size-sm); + transition: background 120ms, color 120ms, border-color 120ms; +} +[data-temas-toc] a:hover { + background: var(--color-surface-raised); + color: var(--color-content-primary); +} +[data-temas-toc] a[data-active='true'] { + background: var(--color-primary-surface); + border-inline-start-color: var(--color-primary-solid); + color: var(--color-primary-text); + font-weight: 600; +} + +[data-temas-content] { + min-inline-size: 0; + display: flex; + flex-direction: column; gap: var(--space-16); } +[data-temas-group-head] { + margin: 0; + font-size: var(--font-size-sm); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--color-content-muted); + padding-block-end: var(--space-2); + border-block-end: 2px solid var(--color-border-default); +} +[data-temas-group-head]:not(:first-child) { + margin-block-start: var(--space-4); +} + +@media (max-width: 768px) { + [data-temas-layout] { + grid-template-columns: minmax(0, 1fr); + } + [data-temas-toc] { + display: none; + } +} + /* ── Hero ───────────────────────────────────────────────────────── */ [data-temas-hero] { display: flex; @@ -180,6 +269,7 @@ display: flex; flex-direction: column; gap: var(--space-5); + scroll-margin-block-start: var(--space-16); } [data-temas-section-head] { display: flex; @@ -322,6 +412,23 @@ font-variant-numeric: tabular-nums; } +/* leyenda de anatomía de los 12 pasos (estilo Radix) */ +[data-temas-step-legend] { + display: flex; + flex-wrap: wrap; + gap: var(--space-2); + margin-block-start: var(--space-1); +} +[data-temas-step-legend] span { + font-size: var(--font-size-xs); + color: var(--color-content-secondary); + padding: var(--space-1) var(--space-2); + background: var(--color-surface-muted); + border: 1px solid var(--color-border-subtle); + border-radius: var(--radius-sm); + font-variant-numeric: tabular-nums; +} + /* ── Surfaces row ───────────────────────────────────────────────── */ [data-temas-surfaces] { display: grid; @@ -477,3 +584,41 @@ font-size: var(--font-size-xs); color: var(--color-content-secondary); } + +/* ── Densidad & Scaling: notas + métricas en vivo ───────────────── */ +[data-temas-axis-note] { + margin: 0; + font-size: var(--font-size-sm); + color: var(--color-content-secondary); + line-height: 1.5; +} +[data-temas-axis-metrics] { + display: flex; + flex-direction: column; + gap: var(--space-2); + margin-block-start: var(--space-1); +} +[data-temas-axis-metrics] > div { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: var(--space-3); + padding: var(--space-2) var(--space-3); + background: var(--color-surface-muted); + border-radius: var(--radius-md); +} +[data-temas-axis-metrics] code { + font-family: var(--font-mono); + font-size: var(--font-size-xs); + color: var(--color-content-muted); +} +[data-temas-axis-metrics] strong { + font-variant-numeric: tabular-nums; + font-size: var(--font-size-sm); + font-weight: 600; +} + +/* scroll suave para los anclajes del TOC (solo aplica en esta ruta) */ +html { + scroll-behavior: smooth; +} diff --git a/web/routes/temas/untitled-ui/+page.svelte b/web/routes/temas/untitled-ui/+page.svelte deleted file mode 100644 index 7119d537d..000000000 --- a/web/routes/temas/untitled-ui/+page.svelte +++ /dev/null @@ -1,836 +0,0 @@ - - -{#snippet plusIcon()} - -{/snippet} - -{#snippet arrowIcon()} - -{/snippet} - - -
-

Untitled UI · Carbon

-

- Tema para activeUIX sobre el sistema de theming de Eidos. Primario carbón - monocromo, tipografía Inter, grises fríos, radios de 8px, sombras en capas y anillos de foco - suaves — los 9 roles canónicos retintados, sin inventar variants ni roles nuevos. -

-
- Carbon · #1F2024 - Inter - 9 roles · 5 variants - Light · Dark · Density -
-
- - -
-
-

Color

-

Los 9 roles canónicos mapeados a las paletas de Untitled UI. El theme retinta; los roles son canon fijo del framework.

-
- -
-

Roles semánticos

-
- {#each THEME_ROLES as r} -
-
-
- {r.label} - {r.note} -
- - - - -
-
-
- {/each} -
-
- -
-

Escalas físicas · 12 pasos

- {#each THEME_SCALES as sc} -
-
- {sc.label} - {hex[`${sc.name}-9`] ?? `--scale-${sc.name}-9`} -
-
- {#each COLOR_STEPS as step} -
- {step} -
- {/each} -
-
- {/each} -
- -
-

Superficies, contenido y bordes

-
-
- surfacedefault -
-
- surfaceraised -
-
- surfacemuted -
-
- contentprimary -
-
- contentsecondary -
-
- borderstrong -
-
-
-
- - -
-
-

Tipografía

-

Inter para display y texto. Named styles del sistema (hero → caption + code).

-
-
- {#each TYPE_STYLES as t} -
-
- {t.label} - --style-{t.key} -
-
- {t.sample} -
-
- {/each} -
-
- - -
-
-

Espaciado, radio, sombra y tamaño

-

Primitivas estables del tema. La escala base es de 4px; controles a 8px de radio.

-
- -
-
-

Spacing

- {#each SPACE as k} -
- --space-{k} -
-
- {/each} -
- -
-
-

Radius

-
- {#each RADII as k} -
{k}
- {/each} -
-
- -
-

Sizes · control-height

- {#each SIZES as k} -
-
{k}
- var(--size-{k}-control-height) -
- {/each} -
-
-
- -
-

Shadows

-
- {#each SHADOWS as k} -
shadow-{k}
- {/each} -
-
-
- - -
-
-

Botones

-

6 variants · 9 roles · 5 tamaños · estados. El primario es carbón; el texto sobre sólidos de color resuelve a blanco.

-
- -
-
-

Variants

-
- {#each BTN_VARIANTS as v} - - {/each} -
-
- -
-

Roles e intents

-
- - - - - - - - -
-
- -
-

Tamaños

-
- {#each BTN_SIZES as sz} - - {/each} -
-
- -
-

Con icono y estados

-
- - - - - -
-
-
-
- - -
-
-

Badges

-

Pills de estado en los 4 chip-variants y la paleta completa de roles.

-
-
-
-

Colores (soft)

-
- {#each BADGE_COLORS as c} - {c} - {/each} -
-
-
-

Variants

-
- {#each CHIP_VARIANTS as v} - {v} - {/each} - Activo - {}}>Filtro -
-
-
-
- - -
-
-

Controles de formulario

-

Field, Select, Checkbox, Radio, Switch y Slider con el aspecto del tema.

-
- -
-
- - Email - - - - Usaremos esto para iniciar sesión. - - - - Fruta favorita - - -
- -
-

Selección

- - - - - - - Plan - - - - -
- -
-

Switch & Slider

- - - - - -
- Volumen · {volume[0]}% - - - - -
-
-
-
- - -
-
-

Feedback y estado

-

Banners por intent, progreso, avatares y tarjetas.

-
- -
- Tu prueba gratuita termina en 7 días. Mejora tu plan cuando quieras. - Cambios guardados correctamente. - Tu método de pago caduca pronto. - No se pudo procesar el pago. Revisa tus datos. -
- -
-
-

Progress

- - Subiendo archivo - - - -
- - -
-
- -
-

Avatares

-
- OV - AM - - JV - - - SK -
-
- - - - Plan Pro - Todo lo del Starter, más colaboración ilimitada. - - - $29 - / mes - - - - - -
-
- - -
-
-

Tabs

-

Variantes line y pills. Indicador animado, foco con anillo carbón, activo en color primario.

-
-
-
-

Line

- - - Overview - Activity - Settings - - - Resumen de la cuenta y métricas clave del mes. - Registro de actividad reciente del equipo. - Preferencias de notificación y seguridad. - -
-
-

Pills

- - - Account - Team - Billing - - - Datos de perfil y sesión. - Miembros e invitaciones. - Plan, método de pago y facturas. - -
-
-
- - -
-
-

Disclosure

-

Accordion (outline) — apertura única, chevron y foco coherentes con el tema.

-
-
- - - ¿Qué es activeUIX? - - Un sistema de UI en cuatro capas — morfo, soma, sema y eidos — donde el theming vive en - eidos y retinta los roles canónicos. - - - - ¿Cómo se crea un tema? - - Con ActiveEidos.create({ config }): se remapean los 9 roles a paletas - y se ajustan primitivas estables (tipografía, radio, sombra). - - - - ¿Y el modo oscuro? - - El tema declara escalas light y dark; el primario carbón se invierte solo gracias al slot - contrast. - - - -
-
- - - -
-
-

Toggles

-

Toggle suelto y toggle-group (segmentado, single + multiple). Activo en color primario.

-
-
-
-

Toggle

-
- Bold - Outline - Ghost - Disabled -
-
-
-

Toggle group · segmentado

-
- - B - I - U - - - Izq. - Centro - Der. - -
-
-
-
- - -
-
-

Toolbar

-

Barra de herramientas con botones, separador y grupo segmentado.

-
-
- - Deshacer - Rehacer - - - B - I - U - - - Compartir - -
-
- - - -
-
-

Overlays

-

Popover y dialog — paneles portaleados con la superficie, borde y sombra del tema.

-
-
- - Abrir popover - - - - Dimensiones - Ajusta el ancho del panel lateral. -
- - Cerrar -
-
-
-
- - - Abrir dialog - - - - - ¿Eliminar proyecto? - - Esta acción es permanente y no se puede deshacer. - - - - Cancelar - - - - - -
-
- - -
-
-

Menús

-

Dropdown, menubar, context menu y tooltip — todos portaleados, con la sombra del tema.

-
-
-

Menubar

- - - Archivo - - - Nuevo documento - Abrir… - - Guardar - - - - - Editar - - - Deshacer - Rehacer - - - - - Ver - - - - Mostrar barra lateral - - - - - - -
- - Opciones - - - Cuenta - Perfil - Facturación - - - - Notificaciones - - - - Claro - Oscuro - Sistema - - - - - - - Pasa el ratón - - - - Tooltip con la superficie y la sombra del tema - - - - -
- - - -
Click derecho aquí
-
- - Copiar - Pegar - - Duplicar - -
-
-
- - -
-
-

Semántica (sema)

-

- La capa perceptual está activa: cada interacción emite una señal con familia + intent que se - materializa en sonido (earcon), haptic (Vibration API) y una - reacción visual data-event-* teñida por el intent del tema. - Pulsa los botones — en un navegador con gesto de usuario sonarán. -

-
-
-

Intents perceptuales

-
- - - - - -
-

- El motor (EngineSemantic) se cablea en el layout vía - createActiveUix({ events: { sound, haptic, components } }) con - los packs sema por componente. Sonido y haptic son opt-in; aquí están encendidos. -

-
-
- -