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/web/routes/blocks/cta/preview/+layout@.svelte

31 lines
927 B

feat(blocks): `cta` — el panel que pide el siguiente paso, y tres mentiras que destapó al medirlo F2.8. Slots de snippet (eyebrow · title · description · actions · children), misma forma que `hero`: las partes de un CTA no repiten ni coordinan, así que un compound no se gana nada. Dos disposiciones: `center` para cerrar una página y `justified` —copia al inicio, acciones al final— que es el hueco que nombraba el dossier. Un solo `Motion trigger="viewport"`: el panel llega ENTERO, porque un CTA es una sola afirmación y repartir sus tres partes se leería como duda. Lo que salió al verificarlo en navegador, medido y no a ojo: - `variant='soft'` **fuera de la API**. Su track queda a `oklch(0.9932)` contra un `--color-surface-default` de `oklch(0.9911)`: 0.002 de luminancia, o sea ningún panel en claro. Y `Surface` no tiene borde al que caer. Cortar el prop es más barato que shipear un estado que se esfuma. - La ranura `contrast` de la paleta es blanco en TODO escalón sólido, así que un lienzo de luminancia media deja el cuerpo por debajo de AA: `primary` 5.18 · `indigo` 5.21 · `plum` 4.75 pasan en ambos modos; `neutral` 3.32 · `teal` 3.07 fallan en claro. El block reenvía cualquier `color`; la demo solo ofrece los que pasan. - `Text align` es inerte por defecto: renderiza un `span`, y `text-align` no hace nada sobre una caja inline. `align="center"` dejaba la copia a la izquierda dentro del layout centrado, sin avisar. Rodeado con `as="p"`. Y `Group` no apila: a 420px la etiqueta de la acción secundaria se parte contra el botón primario, así que las acciones van en `Flex direction={{ base: 'column', sm: 'row' }}`. `hero` compone las suyas con `Group` — anotado. Los tres hallazgos de canon quedan en los gaps del README del block y en `PLAN-blocks-quality.md` §6 (F15/F16/F17), sin tocar nada fuera del tier. Verificado: `center` y `justified` en claro/oscuro/RTL y a 420px, tres colores, entrada disparada, descripción en `<p>` centrada, cero errores de página. Gates: `blocks:check` verde (9 blocks) · `svelte-check` sin errores propios. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2 months ago
<script lang="ts">
/**
* The preview is its OWN page — `@` resets the layout. Axes arrive via the URL
* so the demo's iframe can drive them.
*/
import { page } from '$app/state';
import BootUix, { type BootLanguage } from '../../_lib/BootUix.svelte';
import '@/uix/eidos/index.css';
let { children } = $props();
const mode = $derived(page.url.searchParams.get('mode') === 'dark' ? 'dark' : 'light');
const dir = $derived(page.url.searchParams.get('dir') === 'rtl' ? 'rtl' : 'ltr');
const language = $derived((page.url.searchParams.get('lang') ?? 'es') as BootLanguage);
</script>
<svelte:head>
<meta name="color-scheme" content="light dark" />
</svelte:head>
<BootUix {mode} {dir} {language}>
<div
data-theme={mode}
data-mode={mode}
{dir}
style="min-block-size: 100dvh; background: var(--color-surface-default); color: var(--color-content-primary);"
>
{@render children?.()}
</div>
</BootUix>

Powered by TurnKey Linux.