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

Interruptor

Elección · Switch · .amset-switch

Qué es y cuándo usarlo

Un interruptor de encendido y apagado para un ajuste que se aplica en el momento, sin botón de Guardar.

Cuándo usarlo

  • Ajustes que surten efecto en cuanto se tocan: «Enviar la factura por email», «Avisarme cuando vuelva a haber existencias».
  • Cuando lo que se decide es encender o apagar algo, no contestar a una pregunta.
  • loading mientras el servidor confirma el cambio: no cambia de valor ni se puede volver a pulsar, pero sigue enfocable y el mando lleva un girador.

Cuándo no

  • Si el cambio necesita un Guardar (un formulario, unas condiciones que se aceptan): Checkbox.
  • Elegir entre dos opciones con nombre propio (mensual o anual, lista o rejilla): SegmentedGroup.

Teclado: es una casilla nativa con papel de interruptor: Tab llega a ella y Espacio la enciende y la apaga. Con disabled sale del orden del Tab.

Accesibilidad: se anuncia como switch, con su estado encendido o apagado. El nombre es el texto, que es obligatorio; la description se lee después, como descripción. La vía y el mando son decorativos. En un idioma de derecha a izquierda el mando va hacia la izquierda sin tocar nada.

Tamaños: vía de 28, 34 o 44 px de ancho, centrada en la primera línea del texto. Con el dedo, la fila llega a 44 px.

Estados: hover, pulsado (el mando se estira hacia donde va), foco de teclado, encendido (el mando cruza la vía), solo lectura (vía discontinua, sin acento) y deshabilitado.

Aspecto fino: variables --amset-switch-width, -height, -knob, -stretch, -font, -description, -track, -track-active y -color-knob.

Cómo se ve

<Switch defaultSelected>Avisos por correo</Switch>
<Switch description="Se aplica al entrar">Modo oscuro</Switch>

Props

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

PropTipoPara qué sirve
childrenobligatoriaReactNodeEl nombre del ajuste: es lo que oye el lector de pantalla.
aria-controlsstringIdentifies the element (or elements) whose contents or presence are controlled by the current element.
aria-describedbystringIdentifies the element (or elements) that describes the object.
aria-detailsstringIdentifies the element that provides a detailed, extended description for the object.
aria-labelstringDefines a string value that labels the current element.
aria-labelledbystringIdentifies the element (or elements) that labels the current element.
autoFocusboolean—
classNamestringSe une a las clases de la biblioteca, no las sustituye.
defaultSelectedbooleanEncendido al empezar, gobernandose por dentro.
descriptionstringLo que hace el ajuste, bajo el nombre. Se lee como descripcion, no como parte del nombre.
disabledboolean—
excludeFromTabOrderbooleanLo saca del recorrido del tabulador sin quitarle el foco por programa.
formstringEl `id` del `<form>` al que pertenece, si no lo envuelve.
idstringVa al `<input>`, que es el nodo enfocable: `WeeklySchedule` lo busca con `getElementById` para llevarle el foco, y en el `<label>` no serviria.
inputRefRef<HTMLInputElement>Para llegar al `<input>` de verdad.
loadingbooleanEsperando a que quien lo monta confirme el cambio (una peticion al servidor). Mientras dura NO cambia de valor y no avisa, pero sigue en el orden del tabulador -no se pierde el foco- y lleva un girador en el tirador. Es lo que evita que se pueda volver a pulsar sin saber que el primer clic aun no ha llegado.
namestringEl nombre con el que viaja en el formulario.
onBlur(event: FocusEvent<HTMLInputElement>) => void—
onChange(selected: boolean) => void—
onChangeEvent(event: ChangeEvent<HTMLInputElement>) => voidComo `onChange`, pero con el evento nativo del `<input>`: `e.target.checked`... Existe para migrar un front que ya escribe sus manejadores con el evento (AMS-735). Si solo quieres saber si esta marcada, `onChange` lo entrega ya.
onFocus(event: FocusEvent<HTMLInputElement>) => void—
onPress(event: ChoicePressEvent) => voidSe avisa al pulsarlo, diciendo con que se ha pulsado.
readOnlybooleanSe lee y se enfoca, pero no cambia.
selectedbooleanEncendido, gobernado desde fuera.
size"sm" | "md" | "lg"Tamaño de la via y del texto: 28, 34 o 44 px de ancho. Con el dedo, la fila llega a 44 px.
valuestringEl valor con el que viaja en el formulario cuando esta encendido.

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-switch-width2.125rem
--amset-switch-height1.25rem
--amset-switch-knob1rem
--amset-switch-stretch0.25rem
--amset-switch-fontvar(--amset-text-base)
--amset-switch-descriptionvar(--amset-text-sm)
--amset-switch-trackvar(--amset-border-bold)
--amset-switch-track-activevar(--amset-accent)
--amset-switch-color-knobvar(--amset-surface)
--amset-switch-slotcalc((var(--amset-switch-height) - var(--amset-switch-knob)) / 2)
--amset-switch-linecalc(var(--amset-switch-font) * var(--amset-line-tight))
--amset-switch-extra0px
--amset-switch-target1.5rem

Cómo se cambia

.amset-switch {
  --amset-switch-width: ...;
  --amset-switch-height: ...;
}

En el banco de pruebas

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