# Eidos Text Universal inline-flow typography primitive. Aplica uno de los named styles del foundation (`body` / `prose` / `label` / `caption`) y permite sobrescribir per-axis (size / family / weight / color / align) sin tocar el resto. Render por defecto `` — composable dentro de cualquier contenedor. ## Superficie ```svelte Body copy. Longer reading passage. Image credit. Single-line label that may overflow… Three-line clamped paragraph. Centered block paragraph. ``` ## Baseline Origen: `air/components/typography/text` (rama `morfo-runtime`). Adaptaciones para eidos: - **Sizes**: air `1..12` → eidos `xxs/xs/sm/md/lg/xl/xxl/xxxl`. Sin escala separada — usamos el contrato existente `--font-size-{key}` / `--font-line-height-{key}` / `--font-letter-spacing-{key}` del foundation. - **Families**: air `'ui'|'prose'|'code'` → eidos `primary/secondary/mono/display`. El foundation ya emite los aliases `--font-ui` / `--font-prose` / `--font-code` pero preferimos referencias directas a `--font-family-{key}` para claridad de origen. - **Named styles**: nuevo respecto a air. Cuando se pasa `style="body"` (default), `"prose"`, `"label"` o `"caption"`, el recipe consume los tokens `--style-{name}-*` que el foundation emite (familia + size + weight + line-height + letter-spacing + color, con overrides responsive cuando aplica). Los per-prop overrides ganan vía local `--_text-{axis}` declaradas inline por el componente. - **Canvas measurement** del air (clamp con conteo exacto de líneas vía canvas) se simplifica a CSS `-webkit-line-clamp` en este port — ver Gaps. ## Comparativa | Capacidad | UIX Text | Radix Themes Text | Chakra Text | Mantine Text | | --- | --- | --- | --- | --- | | Named style prop (body/prose/label/caption) | Sí (`style`) | Sí (`as` + `size`) | Sí (`textStyle`) | Sí (`size`) | | Size scale | xxs..xxxl (8 steps) | 1..9 | xs..6xl | xs..xxl | | Family override | Sí (`family`) | Sí | Sí (`fontFamily`) | Sí (`ff`) | | Weight override | Sí (`weight`) | Sí | Sí (`fontWeight`) | Sí (`fw`) | | Color override | Sí (`color` → content-role slot) | Sí (intent) | Sí (free) | Sí (free) | | Align | Sí | Sí | Sí (`textAlign`) | Sí (`ta`) | | Italic shorthand | Sí (`italic`) | No (style) | Sí (`fontStyle`) | Sí (`fs`) | | Underline shorthand | Sí (`underline`) | Sí (`underline`) | Sí (`textDecoration`) | Sí (`td`) | | Truncate (single-line ellipsis) | Sí (`truncate`) | Sí (`truncate`) | Sí (`isTruncated`) | Sí (`truncate`) | | Line-clamp (multi-line) | Sí (`clamp={N}`, CSS only) | Sí (`truncate` + `weight`) | Sí (`noOfLines`) | Sí (`lineClamp`) | | Canvas line-count measurement | **No** — gap | No | No | No | | Bindable `lineCount` output | **No** — gap | No | No | No | | `as` prop polymorphism | Sí | Sí | Sí | Sí | | Responsive props | Sí (`ResponsiveProp`) | Sí | Sí | Sí | ## Decisiones - **`style` prop apunta a named foundation tokens** — no recreamos los combos family+size+weight. Cuando cambias el design system, los Text con `style="body"` actualizan sin tocar componentes. - **Per-prop overrides vía local CSS vars `--_text-*`** — escritas inline en el span. El recipe usa `var(--_text-x, var(--style-{name}-x))` para cascade limpio. - **Default ``, no `

`** — Text es inline-flow primitive. Composable dentro de un `

`, `