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

Selector de cantidad

Elección · QuantityPicker · .amset-quantity

Qué es y cuándo usarlo

El menos y el más de una línea de carrito: − 2 +. Por dentro es un campo de texto numérico propio, así que la cifra también se escribe a mano y nunca se sale de los topes.

Cuándo usarlo

  • La cantidad de cada producto en el carrito, o en la ficha antes de «Añadir al carrito».
  • value y onChange para controlarla desde fuera, o initialValue (1 por defecto) para dejarla suelta; name la envía en un formulario nativo. min es la más baja (1 por defecto).
  • max con las existencias: al llegar, el botón de sumar se deshabilita de verdad. Desde warnFrom unidades (5 por defecto) dice cuántas quedan («Quedan 3», o «Sin existencias» con 0); un stock grande no se enseña.
  • Es la caja de NumberField con botones: size (30, 36 o 44 px) y variant (outline, soft, ghost) son los de todos los campos, y en un formulario queda alineado con ellos.
  • readOnly en un pedido ya cerrado: la cifra se lee y se enfoca, pero no cambia; disabled mientras no se puede tocar.

Cuándo no

  • Un número que no es una cantidad de carrito (un importe, un porcentaje, un peso): NumberField.
  • Elegir la talla o el metal antes de la cantidad: VariantPicker.

Teclado: Tab llega a la cifra; flecha arriba y flecha abajo suman y restan uno, Re Pág y Av Pág dan un salto mayor, e Inicio y Fin van a los topes (Fin solo si hay max). Se puede escribir el número: al salir o con Intro, lo que se pasa de un tope se queda en el tope (99 con 4 en stock se queda en 4). Los botones no están en el orden del Tab: con el teclado se usan las flechas.

Accesibilidad: la etiqueta (label) es obligatoria y concreta («Cantidad de Anillo Aurelia»), porque en un carrito hay un selector por línea. Por defecto solo la oye el lector de pantalla (hiddenLabel, puesto de serie); con hiddenLabel={false} a la vista es la etiqueta de los campos. Los botones son botones de verdad, «Quitar uno» y «Añadir uno», con su estado deshabilitado. El aviso de existencias se lee como descripción de la cifra y entra con una transición corta. El foco es el anillo de 2 px de los campos en la caja. Con el dedo, la caja pasa a 48 px, cada botón a 44 px de ancho y la cifra a 16 px, para que el iPhone no amplíe la página.

Contexto: el idioma de LocaleProvider (o de AmsetProvider) decide cómo se escribe la cifra; sin proveedor, es-ES.

Aspecto fino: --amset-quantity-figures (cuántas cifras caben sin que la caja crezca; 3 por defecto) y las variables de los campos, --amset-field-* (alto, relleno, fuente, radio, fondo y borde). Los botones son los de NumberField (amset-number__step) y el aviso, amset-quantity__stock.

Cómo se ve

2 × 89,00 € = 178,00 € · Para el envío gratis faltan 1.

<QuantityPicker label="Unidades" value={unidades} onChange={setUnidades} min={1} max={10} />

Props

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

PropTipoPara qué sirve
labelobligatoriastringObligatoria y concreta: en un carrito hay un selector por linea, y «Cantidad» a secas repetido seis veces no distingue ninguno.
classNamestring—
disabledbooleanNi los botones ni la cifra responden, y salen del orden del Tab.
hiddenLabelbooleanLa etiqueta solo para el lector de pantalla, que es lo normal en un carrito.
initialValuenumberLa cantidad al empezar, sin controlarla desde fuera. Por defecto, 1.
maxnumberLas existencias. Al llegar, el boton de sumar se apaga y se dice por que.
minnumberLa cantidad mas baja. Por defecto, 1.
namestringCon que nombre viaja en un formulario nativo: la cantidad como numero (`12000`), no su texto (`12.000`).
onChange(quantity: number) => void—
readOnlybooleanLa cifra se enfoca y se lee, pero no cambia: un pedido ya cerrado.
size"sm" | "md" | "lg"—
valuenumberLa cantidad, controlada desde fuera (con `onChange`).
variantFieldVariant—
warnFromnumberA partir de cuantas unidades se avisa de que queda poco. Por defecto 5.

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-quantity-figures3

Cómo se cambia

.amset-quantity {
  --amset-quantity-figures: ...;
}

En el banco de pruebas

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