Saltar al contenido principal
Neural Nativev0.1.0-beta.1Documentación

Qué cambia un token

NeuTokens expone 28 propiedades de tema. NeuThemeComponent también genera 45 variables CSS a partir del tema resuelto. Las propiedades y las variables permiten utilizar las mismas decisiones de diseño; no son catálogos independientes. Utiliza Partial<NeuTokens> para personalizar solo las propiedades que necesites.

Los tokens afectan a los componentes y estilos que los utilizan. No sobrescriben universalmente todas las primitivas nativas. Por ejemplo, spacing controla el padding de Card y tus estilos que usan --neu-spacing; no sustituye todos los gaps y paddings fijos de la biblioteca.

Tokens de color: valores predeterminados exactos

Todas las propiedades de color son strings. Estos son los valores claros y oscuros distribuidos con Neural Native 0.1.0. Personaliza conjuntamente las parejas semánticas y revisa el contraste del texto en ambos modos.

TokenClaroOscuroFunción
accent#006ee6#b5c4ffAcciones principales y estados seleccionados.
onAccent#ffffff#172955Texto e iconos sobre un fondo accent.
surface#ffffff#1b2230Fondos de tarjetas y controles.
canvas#f4f5f7#111722Fondo del contenedor del tema.
text#172033#edf1faTexto principal y etiquetas.
muted#596477#b4bed0Texto secundario, ayudas y placeholders.
border#a5afbf#6c7a92Bordes funcionales de inputs y otros controles.
tonal#eff6ff#293756Fondo suave para acciones tonales.
danger#dc2626#ffb4abErrores y mensajes de acciones destructivas.
success#15803d#8fdeb1Estados positivos y confirmaciones.
warning#f59e0b#efd48fAvisos que requieren atención.
warningText#92400e#efd48fTexto de advertencia legible en botones transparentes o tonales.
onWarning#111827#111722Texto e indicadores de carga sobre un botón warning sólido.
info#0064d1#7dd3fcMensajes y acciones informativas.

Las variables de estilo utilizan el prefijo --neu-: --neu-accent, --neu-surface, --neu-canvas, --neu-text, --neu-muted, --neu-border, --neu-tonal, --neu-danger, --neu-success, --neu-info y --neu-warning. La propiedad onAccent pasa a llamarse --neu-on-accent.

Texto semántico, superficies y visores de imágenes

Estas propiedades opcionales de NeuTokens también forman parte de la API pública del tema. Los objetos predeterminados proporcionan los valores de superficies y del visor de imágenes. Si se omite una personalización de texto semántico, la biblioteca resuelve un color de texto legible para ese tono.

PropiedadClaroOscuroFunción
accentTextAutomáticoAutomáticoTexto de marca legible; se resuelve automáticamente si se omite.
dangerTextAutomáticoAutomáticoTexto destructivo legible; se resuelve automáticamente si se omite.
successTextAutomáticoAutomáticoTexto de confirmación legible; se resuelve automáticamente si se omite.
infoTextAutomáticoAutomáticoTexto informativo legible; se resuelve automáticamente si se omite.
surfaceBorder#e1e6ed#354052Bordes decorativos de superficies, independientes de los bordes de controles.
divider#e7ebf0#303b4cSeparadores entre contenidos relacionados.
surfaceSecondary#eef1f5#222d3fSuperficies secundarias dentro de una composición.
mediaCanvas#111722#111722Fondo de imágenes a pantalla completa, independiente del tema de la aplicación.
mediaText#edf1fa#edf1faControles legibles del visor sobre el fondo de imágenes.
mediaBarStylelightlightContenido claro u oscuro de las barras del sistema en el visor: light o dark.

Dimensiones, tipografía y movimiento

TokenClaroOscuroUso y unidad
radius1212Radio de esquinas. Número convertido a px en --neu-radius.
spacing1616Espacio base utilizado por consumidores como el padding de Card. Se convierte a px.
fontSize1616Tamaño de fuente en controles que usan --neu-font-size. Se convierte a px.
duration120120Duración de transiciones donde se utiliza. Se convierte a ms; no controla globalmente las animaciones.

Estas cuatro propiedades son números. Pasa radius: 16, no radius: "16px". El layout nativo resuelve px según las unidades del framework; no los interpretes como píxeles físicos de la pantalla.

El tema deriva de fontSize los tamaños e interlineados de ayudas, etiquetas, filas, encabezados y métricas; los componentes utilizan esas variables donde corresponde. No selecciona una familia de fuente ni sustituye todos los tamaños fijos. Comprueba la ampliación del texto del sistema. El token duration no desactiva todas las animaciones: el movimiento reducido también depende del componente y del framework.

Referencia CSS completa del tema

Las siguientes variables se generan en neu-theme. Utilízalas en tus estilos nativos para compartir su paleta y escala. Para cambiar el tema de forma coherente, pasa las propiedades correspondientes de NeuTokens mediante [tokens]; una personalización CSS local no actualiza el valor inyectado de NEU_THEME ni los componentes que calculan sus colores a partir de él.

Variable CSSClaroOscuroOrigen en el tema resuelto
--neu-accent#006ee6#b5c4ffaccent
--neu-accent-ink#006bdf#b5c4ffaccentText, o el color semántico de texto resuelto
--neu-danger-ink#ca2323#ffb4abdangerText, o el color semántico de texto resuelto
--neu-success-ink#147a3a#8fdeb1successText, o el color semántico de texto resuelto
--neu-info-ink#0064d1#7dd3fcinfoText, o el color semántico de texto resuelto
--neu-on-accent#ffffff#172955onAccent
--neu-surface#ffffff#1b2230surface
--neu-canvas#f4f5f7#111722canvas
--neu-text#172033#edf1fatext
--neu-muted#596477#b4bed0muted
--neu-border#a5afbf#6c7a92border
--neu-surface-border#e1e6ed#354052surfaceBorder
--neu-divider#e7ebf0#303b4cdivider
--neu-surface-secondary#eef1f5#222d3fsurfaceSecondary
--neu-control-radius10px10pxradius × 5 / 6 px
--neu-surface-radius16px16pxradius × 4 / 3 px
--neu-overlay-radius16px16pxradius × 4 / 3 px
--neu-dialog-radius24px24pxradius × 2 px
--neu-caption-size13px13pxfontSize × 0.8125 px
--neu-label-size14px14pxfontSize × 0.875 px
--neu-row-size15px15pxfontSize × 0.9375 px
--neu-heading-size18px18pxfontSize × 1.125 px
--neu-metric-size32px32pxfontSize × 2 px
--neu-space-44px4pxspacing × 0.25 px
--neu-space-66px6pxspacing × 0.375 px
--neu-space-88px8pxspacing × 0.5 px
--neu-space-1010px10pxspacing × 0.625 px
--neu-space-1212px12pxspacing × 0.75 px
--neu-space-1616px16pxspacing × 1 px
--neu-space-2020px20pxspacing × 1.25 px
--neu-space-2424px24pxspacing × 1.5 px
--neu-tonal#eff6ff#293756tonal
--neu-danger#dc2626#ffb4abdanger
--neu-success#15803d#8fdeb1success
--neu-warning#f59e0b#efd48fwarning
--neu-info#0064d1#7dd3fcinfo
--neu-radius12px12pxradius px
--neu-spacing16px16pxspacing px
--neu-font-size16px16pxfontSize px
--neu-caption-line18px18pxfontSize × 1.125 px
--neu-label-line20px20pxfontSize × 1.25 px
--neu-row-line21px21pxfontSize × 1.3125 px
--neu-heading-line24px24pxfontSize × 1.5 px
--neu-metric-line38px38pxfontSize × 2.375 px
--neu-duration120ms120msduration ms

En las variables numéricas, la columna de origen indica el multiplicador y la unidad resultante. Los radios, tamaños, interlineados y espacios utilizan px; duration utiliza ms. Las variables de texto semántico pueden calcularse a partir del tema en lugar de copiar directamente un color de acento.

Conserva los tokens personalizados en un archivo tipado

Crea src/app/theme-tokens.ts y exporta las personalizaciones que utilizará el tema raíz. El operador satisfies comprueba nombres y tipos sin perder la inferencia de TypeScript. Este ejemplo distingue el texto de controles, las superficies decorativas y el fondo de imágenes a pantalla completa.

src/app/theme-tokens.ts
import type { NeuTokens } from '@neural-ui/native/foundation';

export const brandLight = {
  accent: '#3B5BDB',
  accentText: '#3048A5',
  onAccent: '#FFFFFF',
  tonal: '#EBEFFF',
  surfaceBorder: '#D8DEEB',
  divider: '#E8ECF3',
  surfaceSecondary: '#F0F3FA',
  mediaCanvas: '#101828',
  mediaText: '#F1F5F9',
  mediaBarStyle: 'light',
  radius: 16,
} satisfies Partial<NeuTokens>;

export const brandDark = {
  accent: '#B8C6FF',
  accentText: '#C6D0FF',
  onAccent: '#172955',
  tonal: '#293756',
  surfaceBorder: '#3B4863',
  divider: '#33405A',
  surfaceSecondary: '#263249',
  mediaCanvas: '#101828',
  mediaText: '#F1F5F9',
  mediaBarStyle: 'light',
  radius: 16,
} satisfies Partial<NeuTokens>;

Los cuatro colores opcionales de texto semántico son personalizaciones explícitas: si los proporcionas, se utilizan tal cual. Comprueba su contraste con tus superficies. Los valores de mediaBarStyle son light y dark en ambos idiomas; describen el contenido de las barras del sistema, no el tema de la aplicación.

Si necesitas una paleta completa, combina el valor predeterminado exportado en lugar de mutarlo. Los valores predeterminados son objetos readonly congelados. El siguiente src/app/complete-tokens.ts es una alternativa a los objetos parciales anteriores, útil cuando un servicio necesita un valor NeuTokens completo.

src/app/complete-tokens.ts
import {
  NEU_LIGHT_TOKENS,
  NEU_DARK_TOKENS,
  type NeuTokens,
} from '@neural-ui/native/foundation';

export const completeLight: Readonly<NeuTokens> = {
  ...NEU_LIGHT_TOKENS,
  accent: '#3B5BDB',
  onAccent: '#FFFFFF',
};

export const completeDark: Readonly<NeuTokens> = {
  ...NEU_DARK_TOKENS,
  accent: '#B8C6FF',
  onAccent: '#172955',
};

Utiliza tokens en tus componentes nativos

Crea src/app/summary.component.ts y coloca app-summary dentro del neu-theme raíz. Las variables --neu-* permiten que los estilos nativos compartan la paleta. Para propiedades calculadas en TypeScript o enlaces de estilo, inyecta NEU_THEME y lee su signal. Un valor computed sigue los cambios del tema sin guardar una copia desactualizada.

src/app/summary.component.ts
import { Component, computed, inject } from '@angular/core';
import { Text, View } from '@ng-native/components';
import { NEU_THEME } from '@neural-ui/native/foundation';

@Component({
  selector: 'app-summary',
  imports: [Text, View],
  template: `
    <view class="panel" [style.borderColor]="borderColor()">
      <text class="title">Your workspace</text>
      <text class="description">Shared with your team</text>
    </view>
  `,
  styles: `
    .panel {
      padding: var(--neu-space-20);
      gap: var(--neu-space-8);
      background-color: var(--neu-surface);
      border-width: 1px;
      border-radius: var(--neu-surface-radius);
    }
    .title { color: var(--neu-text); font-size: var(--neu-heading-size); line-height: var(--neu-heading-line); font-weight: 600; }
    .description { color: var(--neu-muted); font-size: var(--neu-caption-size); line-height: var(--neu-caption-line); }
  `,
})
export class SummaryComponent {
  private readonly theme = inject(NEU_THEME);
  readonly borderColor = computed(() => this.theme().surfaceBorder ?? this.theme().border);
}

Este ejemplo necesita un tema antecesor porque inyecta NEU_THEME directamente. Conserva los estilos de tokens nativos dentro de la app o playground nativo. La documentación utiliza Neural UI v2 y su propio tema web; no apliques sus estilos web al preview Native.