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

Botón

Acciones · Button · .amset-button

Qué es y cuándo usarlo

El botón de siempre: hace algo en la misma pantalla (guardar, enviar, borrar, abrir un diálogo).

Cuándo usarlo

  • Para una acción. Si lo que hace es llevar a otra página, es un ButtonLink: se abre en otra pestaña y el lector de pantalla dice «enlace».
  • Un solo botón solid por pantalla o por diálogo: es la acción principal. El resto, outline, soft o ghost.
  • tone="error" para lo que borra o da de baja, mejor dentro de un ConfirmAction.
  • startIcon y endIcon para acompañar el texto; fullWidth para que ocupe todo el ancho; shape="pill" para las esquinas redondas.

Cuándo no

  • Solo con icono: IconButton, que obliga a ponerle nombre.
  • Varias acciones que pesan lo mismo: SplitButton o ActionMenu.

Teclado: es un <button> nativo: Tab llega a él; Intro y Espacio lo pulsan. Con disabled sale del orden del Tab. Con loading sigue enfocable (lleva aria-disabled, no disabled), deja de responder a los clics y anuncia el envío; con loadingText el texto de envío sustituye al contenido, sin girador.

Accesibilidad: el nombre es el texto. Los iconos son decorativos: nunca llevan información que no esté en el texto.

Aspecto fino: variables CSS --amset-button-*.

Cómo se ve

Último cambio hace 2 min.

<Button variant="solid" tone="accent" startIcon={<SaveIcon />} loading={guardando} loadingLabel="Guardando" onPress={guardar}>
  Guardar cambios
</Button>
<Button variant="outline" startIcon={<PlusIcon />}>Nuevo pedido</Button>
<Button variant="outline" endIcon={<DownloadIcon />}>Exportar</Button>
<Button variant="soft" tone="error" startIcon={<TrashIcon />}>Eliminar</Button>
<Button variant="ghost">Cancelar</Button>
<Button variant="solid" disabled>No disponible</Button>
<Button variant="solid" size="sm" shape="pill">Pequeño y redondo</Button>
<ToggleButton label="Favorito" icon={<StarIcon />} defaultSelected variant="outline" />
<TextButton onPress={deshacer}>Deshacer</TextButton>

Props

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

PropTipoPara qué sirve
childrenobligatoriaReactNode—
classNamestring—
disabledbooleanFuera de juego: ni se pulsa, ni se enfoca, ni entra en la tabulacion.
endIconReactNodeIcono después del texto (una flecha, un chevron de menú).
excludeFromTabOrderbooleanFuera de la tabulacion pero pulsable. Para un boton que duplica algo que ya esta en ella: el de abrir la lista de un buscador, que no hace nada que no haga la flecha de abajo.
fullWidthbooleanOcupa todo el ancho disponible. En móvil suele ser lo que se quiere.
loadingbooleanEstado de envio. El boton sigue enfocable (`aria-disabled`), deja de responder a la pulsacion y anuncia el cambio al lector de pantalla. No cambia de ancho: el girador se pone encima del texto, no al lado.
loadingLabelstringLo que se anuncia mientras dura el envio.
loadingTextstringEl texto que sale EN LUGAR del contenido mientras dura el envio: «Guardando…». Sin girador encima: el texto es el aviso, y se anuncia al cambiar. Es lo que hacia un front que cambiaba sus `children` a mano. El boton cambia de ancho si el texto nuevo mide otra cosa.
onClickMouseEventHandler<HTMLButtonElement>—
onPressPressHandler—
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.

Mandos

Estas variables CSS son la forma de adaptarlo. Se declaran sobre el selector del componente, no en :root: la hoja las redeclara en la propia regla y una declaración en el mismo elemento gana siempre.

VariablePor defecto
--amset-button-colorvar(--amset-ink)
--amset-button-inkvar(--amset-surface)
--amset-button-softvar(--amset-divider)
--amset-button-textvar(--amset-ink)
--amset-button-text-activevar(--amset-button-text)
--amset-button-bordervar(--amset-border-bold)
--amset-button-heightvar(--amset-height-control)
--amset-button-paddingvar(--amset-space-3)
--amset-button-fontvar(--amset-text-base)
--amset-button-icon1rem
--amset-button-radiusvar(--amset-radius)
--amset-button-weightvar(--amset-weight-bold)
--amset-button-familyvar(--amset-font)
--amset-button-transformnone
--amset-button-spacingnormal
--amset-button-line1
--amset-button-gapvar(--amset-space-2)
--amset-button-shadownone
--amset-button-backgroundtransparent
--amset-button-background-hovervar(--amset-button-background)
--amset-button-background-activevar(--amset-button-background)

Cómo se cambia

.amset-button {
  --amset-button-color: ...;
  --amset-button-ink: ...;
}

En el banco de pruebas

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