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

Deslizador

Elección · Slider · .amset-slider

Qué es y cuándo usarlo

Una barra con uno o dos tiradores para elegir un valor, o un rango, a bulto dentro de un intervalo conocido. El rango sale solo de pasarle un array: defaultValue={[120, 480]}.

Cuándo usarlo

  • Un número aproximado, donde importa más dónde cae que la cifra exacta: un precio máximo, un margen, un umbral de aviso.
  • format: number, currency (euros, o el código de currency) o percent (se guarda en tanto por uno: 0.35 se ve 35 %).
  • marks pone rayas en cada paso (o donde diga un array) y ends escribe el mínimo y el máximo debajo. valueText cambia el texto del valor («3 noches», «Gratis»).
  • onChangeEnd avisa solo al soltar, para no pedir datos en cada paso del arrastre.

Cuándo no

  • Si la cifra exacta importa (un importe, unas unidades): NumberField.
  • El filtro de precio de un catálogo, con histograma y campos para escribir: RangeFilter.

Teclado: Tab llega al tirador; en un rango, primero al mínimo y luego al máximo. Las flechas mueven un paso (con Mayúsculas, un salto grande), Re Pág y Av Pág dan un salto grande, Inicio y Fin llevan a los extremos. En un rango, el mínimo no puede pasar del máximo. Deshabilitado no se mueve.

Accesibilidad: cada tirador es un <input type="range"> de verdad, escondido bajo el círculo que se ve, y dice su valor ya formateado. En un rango se llaman «Mínimo» y «Máximo» sin tener que pedirlo (o lo que diga thumbLabels). El deslizador no valida solo: el error y la ayuda (hint) se enlazan a los tiradores, que son los que tienen el foco. hiddenLabel quita la etiqueta de la vista, no del lector. La barra y el tirador se cogen en 24 px con ratón y en 44 px con el dedo, aunque se vean más finos.

Estados: el tirador se oscurece al pasar el ratón y al arrastrarlo, y crece un poco mientras se arrastra. Con el teclado, o con un valor nuevo desde fuera, el tirador y el relleno se deslizan hasta su sitio; arrastrando van pegados al dedo. El foco de teclado es un anillo de 2 px alrededor del tirador. Con error la barra y el tirador pasan a rojo (data-invalid); deshabilitado, a gris y sin cursor de mano.

Tamaños: sm, md (por defecto) y lg: barra de 4, 6 u 8 px, tirador de 14, 18 o 22 px, y la letra de la etiqueta y del apoyo como la de los campos del mismo tamaño.

Contexto: va dentro de LocaleProvider (o de AmsetProvider), que decide cómo se escriben los números y los importes.

Aspecto fino: variables CSS en .amset-slider:

  • Medidas: --amset-slider-thick (la barra), --amset-slider-thumb (el diámetro), --amset-slider-ring (el borde del tirador, 2 px), --amset-slider-brand (el ancho de las rayas, 2 px), --amset-slider-radius (las puntas de la barra) y --amset-slider-grow (cuánto crece el tirador al arrastrarlo: 1,15).
  • Letra: --amset-slider-font (etiqueta y valor), --amset-slider-description (ayuda y error) y --amset-slider-ends.
  • Zona pulsable: --amset-slider-target (24 px con ratón, 44 con el dedo).
  • Colores: --amset-slider-color (relleno y aro: el error y el deshabilitado solo cambian esta), --amset-slider-ink (las marcas sobre el relleno), --amset-slider-slot y --amset-slider-border (la barra vacía), --amset-slider-background-thumb y --amset-slider-color-brand.

Cómo se ve

250 €
120 € – 480 €
35 %

<Slider label="Precio maximo" format="currency" minValue={0} maxValue={500} step={10} defaultValue={250} />
<Slider label="Precio" format="currency" maxValue={1000} defaultValue={[120, 480]} ends />
<Slider label="Margen aplicado" format="percent" maxValue={1} step={0.05} defaultValue={0.35} marks />

Props

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

PropTipoPara qué sirve
labelobligatoriastring—
aria-describedbystring—
aria-detailsstring—
aria-labelstring—
aria-labelledbystring—
classNamestring—
currencystringCodigo ISO cuando el formato es moneda.
customFormatIntl.NumberFormatOptionsEscotilla de salida para un formato que no cubren los tres de arriba.
decimalsnumber—
defaultValueT—
disabledboolean—
endsbooleanNumeros del minimo y del maximo debajo de la barra.
errorstringUn texto aqui lo pinta en error y lo anuncia: el deslizador no valida solo.
formatSliderFormat—
hiddenLabelbooleanQuita la etiqueta de la vista y la pasa a `aria-label`. Para cuando el nombre ya esta escrito al lado (una cabecera propia, una celda de tabla): el lector la sigue leyendo, que es lo que no se puede perder.
hintstring—
idstring—
marksboolean | readonly number[]Rayas bajo la barra: `true` las saca del paso, un array las pone donde diga.
maxValuenumber—
minValuenumber—
namestringPara que el valor viaje en un formulario nativo. Con varios tiradores, cada uno lleva este nombre.
onChange(value: T) => void—
onChangeEnd(value: T) => voidAl soltar: el que vale para pedirle algo a un servidor.
orientation"horizontal" | "vertical"—
showValuebooleanEl valor actual junto a la etiqueta.
size"sm" | "md" | "lg"Grosor de la barra, diametro del tirador y cuerpo de letra: `sm` (4 y 14 px), `md` (6 y 18 px, por defecto) o `lg` (8 y 22 px). La zona que se puede pulsar no baja de 24 px con raton ni de 44 con el dedo.
stepnumber—
thumbLabelsreadonly string[]Como se llama cada tirador en un rango. Por defecto, «Mínimo» y «Máximo».
valueT—
valueText(values: readonly number[], formatted: string) => stringTexto propio para el valor: "3 noches", "Gratis"...

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-slider-thick6px
--amset-slider-thumb1.125rem
--amset-slider-ring2px
--amset-slider-brand2px
--amset-slider-radius999px
--amset-slider-fontvar(--amset-text-sm)
--amset-slider-descriptionvar(--amset-text-sm)
--amset-slider-endsvar(--amset-text-xs)
--amset-slider-target1.5rem
--amset-slider-grow1.15
--amset-slider-colorvar(--amset-accent)
--amset-slider-inkvar(--amset-accent-ink)
--amset-slider-slotvar(--amset-surface-2)
--amset-slider-bordervar(--amset-border)
--amset-slider-background-thumbvar(--amset-surface)
--amset-slider-color-brandvar(--amset-border-bold)

Cómo se cambia

.amset-slider {
  --amset-slider-thick: ...;
  --amset-slider-thumb: ...;
}

En el banco de pruebas

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