Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

Button

Botón de acción nativo con inputs signal, estado de carga y evento semántico de activación.

Categoría
Acciones
Import
@neural-ui/core/button
Selector
button[neu-button]
import { NeuButtonComponent } from '@neural-ui/core/button';

Visión general

Usa un botón nativo para una acción inmediata. NeuButton añade inputs signal para tono, variante visual, tamaño, carga y posición del icono sin perder la semántica nativa. Usa un enlace para navegar y un control de selección para elecciones persistentes; este componente no gestiona estado de formulario ni selección.

Interacción básica

Importa Button y escucha neuClick para ejecutar una acción. Prueba el botón y abre Código para copiar el ejemplo completo.

Interacción básica
Activaciones: 0

Estados y variantes

Usa tone para el color semántico: neutral, success, info, warning o danger. brand sigue disponible para la acción principal. Los seis tonos admiten las variantes solid, outline y ghost. size cambia las dimensiones del control. El estado de carga impide la activación e informa de que la acción está en curso.

Estados y variantes
Activaciones: 0

Tamaños y anchos

size elige las dimensiones sm, md o lg del control; no es un input de ancho. Un Button normal se ajusta al contenido. fullWidth=true hace que ocupe la superficie contenedora.

Para un ancho fijo o responsive de la aplicación, utiliza CSS como inline-size: min(100%, 240px). No existe un input width que conectar. iconOnly usa dimensiones cuadradas según size; separa ese modo de una acción de texto a ancho completo.

template.html
<button neu-button>Fit content</button>
<button neu-button [fullWidth]="true">Fill container</button>
<button neu-button style="inline-size: min(100%, 240px)">CSS width</button>

Iconos

Elige una de dos formas de integración: asigna al input icon una clave de aplicación que resuelva provideNeuIconResolver, o coloca un componente de icono o un SVG directamente dentro del botón. La proyección no necesita el input icon ni un resolver de Core. Neural Icons es una opción, no un requisito; Core sigue siendo independiente de la librería de iconos.

Con el input icon, iconPosition selecciona start o end. Con contenido proyectado, coloca el icono antes o después del texto en el template. La clave add también tiene un dibujo de respaldo mínimo en Button que funciona sin resolver; las demás claves de aplicación necesitan un resolver y no cargan automáticamente un catálogo de iconos.

Para una acción solo con icono, usa iconOnly con cualquiera de las dos formas, omite el texto visible y proporciona ariaLabel. iconOnly aplica dimensiones cuadradas; no elimina el contenido proyectado. La demo muestra estas opciones y sus pestañas de TypeScript, HTML y provider contienen el código que las ejecuta.

Iconos

Icono mínimo de Core

La clave add tiene un dibujo de respaldo en Button y funciona sin resolver. No implica que Core incluya un catálogo de iconos.

Input icon y resolver de la aplicación

icon="save" es una clave que resuelve la aplicación. iconPosition coloca ese icono al inicio o al final. La pestaña del provider incluye el registro necesario.

Componente de icono dentro del botón

Aquí se proyecta Neural Icons directamente. También puedes proyectar un componente propio o de otra librería: no necesitas el input icon ni un resolver de Core. El orden del contenido determina la posición.

SVG dentro del botón, sin librería de iconos

El SVG forma parte del contenido del botón. Usa currentColor para heredar su color y aria-hidden="true" cuando el texto ya identifica la acción.

Solo icono: input o contenido proyectado

iconOnly aplica dimensiones cuadradas; no elimina el contenido. Omite el texto visible y proporciona ariaLabel. Estos tres botones usan, respectivamente, el input, Neural Icons proyectado y un SVG proyectado.

Activaciones: 0

Contrato de iconos

Configura Button

Cambia apariencia, texto, icono, ancho y estado de interacción, y copia el código del componente. El resultado utiliza los mismos valores que el template generado. Activa el botón habilitado para ver el contador de neuClick.

Las opciones de ancho distinguen el input fullWidth de Core de un inline-size CSS. Los iconos de aplicación muestran además los providers que necesitan; Add puede usar el fallback sin esa configuración.

Resultado

Eventos neuClick: 0

Código generado

El resultado y el código se actualizan al cambiar las opciones.

template.html
<button neu-button>Guardar cambios</button>
Apariencia
Contenido e icono

El texto se coloca dentro del botón. Añadir utiliza el icono mínimo de Core; Guardar, Descargar y Eliminar utilizan Neural Icons mediante el resolver de esta aplicación.

Ancho

fullWidth ocupa el contenedor. Un ancho concreto es CSS, no un input width. iconOnly mantiene el tamaño cuadrado definido por size.

Estado y accesibilidad

Un botón solo con icono necesita un nombre accesible. disabled y loading bloquean neuClick.

Accesibilidad y teclado

Core se encarga de la activación nativa por teclado, los estados deshabilitado/cargando y el atributo de estado ocupado.

Tu aplicación proporciona una etiqueta clara para la acción. En un botón solo con icono, define ariaLabel. Oculta los iconos decorativos proyectados a las tecnologías de asistencia.

Tecla
Acción
Enter Activa el botón nativo enfocado.
Space Activa el botón nativo enfocado.
Tab Mueve el foco hacia o desde un botón habilitado según el orden del documento.

API

Los inputs configuran el estado aplicado: utiliza [propiedad]="valor" para un valor dinámico o un atributo literal para una cadena fija. Button tiene diez inputs y no mantiene un modelo de valor editable. Su texto visible se proyecta entre las etiquetas de apertura y cierre; no existe un input label.

El output neuClick emite un MouseEvent al activar un botón habilitado. Escúchalo con (neuClick)="save($event)". El evento no gobierna disabled ni loading: tu aplicación gestiona la operación y devuelve el estado actual a Button.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
ariaLabelstring''[ariaLabel]Nombre accesible alternativo, obligatorio para una acción solo con icono.
disabledbooleanfalse[disabled]Bloquea la activación nativa y neuClick.
fullWidthbooleanfalse[fullWidth]Ajusta el botón al 100% de su contenedor. Para otro ancho, utiliza CSS; no existe un input width.
iconstring | nullnull[icon]Clave de aplicación (string), no una definición ni un nombre de catálogo incluido. Resuelve claves propias con provideNeuIconResolver; add tiene un fallback mínimo en Button.
iconOnlybooleanfalse[iconOnly]Utiliza dimensiones cuadradas con un icono del input o un icono proyectado. No elimina el contenido proyectado: omite el texto visible y proporciona un ariaLabel accesible.
iconPositionNeuButtonIconPosition'start'[iconPosition]Coloca el icono del input icon antes o después del contenido. No reordena iconos proyectados dentro del botón.
loadingbooleanfalse[loading]Muestra un spinner, marca el botón como ocupado y bloquea la activación.
sizeNeuButtonSize'md'[size]sm, md o lg ajusta padding, texto y dimensiones del icono. No establece el ancho del contenedor.
toneNeuButtonTone'brand'[tone]Selecciona la intención semántica neutral, brand o danger.
variantNeuButtonVariant'solid'[variant]Selecciona el tratamiento visual solid, outline o ghost.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
neuClickMouseEvent(neuClick)="onNeuClick($event)"Emite MouseEvent en una activación habilitada. Escúchalo con (neuClick); disabled o loading lo bloquea. Tu aplicación gestiona la acción.

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Nombre
Mecanismo
Contrato
*

Contenido del botón

Proyección de contenido

El texto y el SVG se proyectan dentro del botón; no requieren un proveedor de iconos.

<ng-content />

Contexto utilizado: —

Ejemplo de uso

El contenido entre las etiquetas del botón es su contenido proyectado. Puedes colocar texto, un componente de icono o un SVG; la sección Iconos muestra esas variantes. Para iconOnly, omite el texto visible y proporciona ariaLabel: el contenido proyectado no se elimina automáticamente.

Personalizar contenido
Activaciones: 0

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Tematización

Usa los tokens públicos --neu-button-* siguientes o un preset reutilizable de la guía Temas. Limita los cambios locales a la superficie de la aplicación que quieras personalizar.

Tematización
Tema heredado
Cambio local

Tokens específicos

Token
Efecto
Estado / variante
Valor / origen
Alternativa
--neu-button-background Fondo de Button con variant="solid" y tone="brand". solid / brand var(--neu-primary-solid)Alternativa del componente--neu-primary-solid
--neu-button-background-hover Fondo al pasar el puntero sobre Button solid/brand. solid / brand / hover var(--neu-primary-solid-hover)Alternativa del componente--neu-primary-solid-hover
--neu-button-border Color del borde de Button solid/brand. solid / brand var(--neu-primary-solid)Alternativa del componente--neu-primary-solid
--neu-button-foreground Color del texto y de los iconos que lo heredan en Button solid/brand. solid / brand var(--neu-primary-solid-fg)Alternativa del componente--neu-primary-solid-fg

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-error Color del campo no válido o de la acción de peligro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #dc2626
--neu-error-bg Fondo de estados de error o peligro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #fee2e2
--neu-error-text Texto de error y de Button danger outline/ghost en ambos temas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #991b1b
--neu-focus-ring-strong Tratamiento de foco destacado Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 0 0 var(--neu-focus-ring-width) rgba(0, 122, 255, 0.35)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-primary-50 Superficie tenue de marca para estados de puntero y foco Compartido con otros consumidores de Core; limita el cambio a un ámbito. #eff6ff
--neu-primary-dark Tono oscuro de marca; texto de Button outline y ghost en el tema claro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #005fcc
--neu-primary-fg Contenido dibujado sobre el fondo primario Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff