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
solidpor pantalla o por diálogo: es la acción principal. El resto,outline,softoghost. tone="error"para lo que borra o da de baja, mejor dentro de unConfirmAction.startIconyendIconpara acompañar el texto;fullWidthpara 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:
SplitButtonoActionMenu.
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.
| Prop | Tipo | Para qué sirve |
|---|---|---|
childrenobligatoria | ReactNode | — |
className | string | — |
disabled | boolean | Fuera de juego: ni se pulsa, ni se enfoca, ni entra en la tabulacion. |
endIcon | ReactNode | Icono después del texto (una flecha, un chevron de menú). |
excludeFromTabOrder | boolean | Fuera 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. |
fullWidth | boolean | Ocupa todo el ancho disponible. En móvil suele ser lo que se quiere. |
loading | boolean | Estado 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. |
loadingLabel | string | Lo que se anuncia mientras dura el envio. |
loadingText | string | El 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. |
onClick | MouseEventHandler<HTMLButtonElement> | — |
onPress | PressHandler | — |
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" | — |
startIcon | ReactNode | Icono antes del texto. Decorativo: el texto es el que manda. |
style | CSSProperties | Estilo 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.
| Variable | Por defecto |
|---|---|
--amset-button-color | var(--amset-ink) |
--amset-button-ink | var(--amset-surface) |
--amset-button-soft | var(--amset-divider) |
--amset-button-text | var(--amset-ink) |
--amset-button-text-active | var(--amset-button-text) |
--amset-button-border | var(--amset-border-bold) |
--amset-button-height | var(--amset-height-control) |
--amset-button-padding | var(--amset-space-3) |
--amset-button-font | var(--amset-text-base) |
--amset-button-icon | 1rem |
--amset-button-radius | var(--amset-radius) |
--amset-button-weight | var(--amset-weight-bold) |
--amset-button-family | var(--amset-font) |
--amset-button-transform | none |
--amset-button-spacing | normal |
--amset-button-line | 1 |
--amset-button-gap | var(--amset-space-2) |
--amset-button-shadow | none |
--amset-button-background | transparent |
--amset-button-background-hover | var(--amset-button-background) |
--amset-button-background-active | var(--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:
