Saltar al contenido
EspañolEnglish
Todos los componentes (204)

Enlace con forma de botón

Acciones · ButtonLink

Qué es y cuándo usarlo

Lo que navega es un enlace, aunque se pinte como un botón. ButtonLink tiene el aspecto de Button (las mismas variantes, tonos y tamaños) y es un <a> de verdad: se abre en otra pestaña con el clic central, se copia la dirección y el lector de pantalla dice «enlace».

Cuándo usarlo

  • La llamada que lleva a otra pantalla: «Ver el pedido», «Ir a pagar», «Seguir comprando».
  • Al pie de una tarjeta, de un aviso o de un estado vacío, cuando la salida es otra página.

Cuándo no

  • Si hace algo en la misma pantalla (guardar, borrar, abrir un diálogo), es un Button. Un <button> que navega por código no se abre en otra pestaña ni se anuncia como enlace.
  • Un enlace dentro de un párrafo se queda como enlace de texto: Link.
  • Varios destinos recogidos en un menú: ActionMenu con href en cada acción.

Teclado: Tab llega a él; Intro lo sigue. Espacio no, como en cualquier enlace. Con disabled deja de llevar a ningún sitio: se sigue anunciando como enlace, con aria-disabled, y sale del orden del Tab. Con RouterProvider, el href pasa por el enrutador de la aplicación, igual que en Link.

Accesibilidad: el nombre es el texto; los iconos son decorativos. Si se abre en otra pestaña (target="_blank"), dilo en el nombre con un aria-label que empiece por el texto que se ve.

Aspecto fino: las variables --amset-button-* de Button; la clase propia es amset-button--link.

Cómo se ve

<ButtonLink href="/componentes/" variant="solid">Ver todos los componentes</ButtonLink>
<ButtonLink href="/empezar/" variant="outline">Como empezar</ButtonLink>
<ButtonLink href="https://ui.amset.tech" variant="ghost">Abrir el banco de pruebas</ButtonLink>

Props

Se importa con import { ButtonLink } from '@amset/ui'. Las obligatorias van marcadas.

PropTipoPara qué sirve
childrenobligatoriaReactNode—
classNamestring—
disabledbooleanApagado: deja de navegar y de entrar en la tabulacion, y se anuncia asi.
endIconReactNodeIcono después del texto (una flecha, un chevron de menú).
fullWidthbooleanOcupa todo el ancho disponible. En móvil suele ser lo que se quiere.
hrefstringA donde lleva. Sin el no es un enlace: es un boton.
onPress() => voidSe llama al pulsar, con raton o con el teclado, ademas de navegar. Sin argumento, igual que en el enlace de texto: lo que haga falta parar se para con `onClick`, que ahi SI trae el evento de verdad.
shape"default" | "pill"La forma: `default` (por defecto) o `pill`, con las esquinas del todo redondeadas. Dentro de un `ButtonGroup` solo quedan redondeadas las esquinas de fuera del grupo. Para el boton redondo de solo icono, `IconButton`.
size"sm" | "md" | "lg"—
startIconReactNodeIcono antes del texto. Decorativo: el texto es el que manda.
styleCSSPropertiesEstilo en linea. El aspecto estable va en las variables CSS `--amset-button-*`, que es lo que se mantiene; esto es para lo que solo se sabe en tiempo de ejecucion: un color que elige quien usa la aplicacion, una posicion calculada, un alto que depende del contenido. Estuvo prohibido y hubo que abrirlo: un front real lo usaba en 40 botones para calcular su halo a partir de un color arbitrario (AMS-735), y sin esto la unica salida era escribir CSS a mano contra nuestras clases.
tone"neutral" | "accent" | "secondary" | "tertiary" | "info" | "success" | "warning" | "error"Que quiere decir. Sin el, un boton solido o suave es de `accent` (la accion principal) y uno de contorno o fantasma es `neutral`. `error` es el de borrar o dar de baja.
variant"solid" | "soft" | "outline" | "ghost"Como se pinta: `solid`, `soft`, `outline` (por defecto) o `ghost`.

Acepta además los atributos del elemento que pinta: className, style, data-*, aria-* y sus eventos.

En el banco de pruebas

Cada estado y cada variante, para tocarlos de uno en uno, en su ficha de ui.amset.tech: