Primitiveselection

Elastic Slider

Stable

Slider de um valor que se comporta como um controle físico: o preenchimento vai com mola até onde foi pressionado, um toque perto de um décimo encaixa nele e arrastar além das pontas estica a trilha como um elástico. O rótulo e o valor são desenhados dentro da trilha, que inteira é o controle; faixas de até dez posições mostram cada passo e encaixam em todos eles.

Instalação

npx up-web-ds add elastic-slider

Preview

Default

Stepped

Formatted

Controlled

Aplicado ao painel: 250ms

Disabled

All states

Default

Stepped

Formatted

Controlled

Aplicado ao painel: 250ms

Disabled

Usage

@/components/ui/elastic-slider
import { ElasticSlider } from '@/components/ui/elastic-slider'
Elastic Slider
<ElasticSlider label="Opacidade" defaultValue={0.6} />

Props

Props de ElasticSlider
PropTypeDefaultDescription
label, obrigatóriastringsem valor padrãoLabel drawn inside the track, and the slider's accessible name.
aria-labelstringsem valor padrãoAccessible name, when it should differ from `label`.
classNamestringsem valor padrãoClasses for the wrapper, which is where the width is set.
defaultValuenumbersem valor padrãoInitial value for uncontrolled mode. Falls back to `min`.
disabledbooleanfalseRefuses pointer and keyboard input. The slider stays in the tab sequence and is announced as disabled.
formatValue((value: number) => string)sem valor padrãoFormats the displayed value, which is also what a screen reader announces (`aria-valuetext`). Defaults to the value with as many decimals as `step` has.
maxnumber1Maximum value.
minnumber0Minimum value.
onValueChange((value: number) => void)sem valor padrãoCalled with the new value on drag, click, or key press.
stepnumber0.01Smallest increment.
valuenumbersem valor padrãoControlled value. Use together with `onValueChange`.

prop obrigatória.

Metadata

Notas de acessibilidade

Teclado verificado por teste e em navegador: a trilha entra na sequência de Tab, ArrowRight e ArrowUp sobem um step, ArrowLeft e ArrowDown descem, Shift com seta e Page Up/Page Down andam dez steps, Home e End vão às pontas e nenhuma tecla passa dos limites; o outline de foco aparece para foco de teclado e não para um toque ou clique. Um slider desabilitado continua alcançável por Tab, é anunciado por aria-disabled e recusa teclas e ponteiro. Leitor de tela verificado por teste: a trilha tem papel slider, o rótulo é o nome acessível (sobrescrevível por aria-label), aria-valuemin, aria-valuemax e aria-valuenow acompanham o valor e aria-valuetext anuncia o valor formatado — "40%", não "0.4". O rótulo, o valor, as marcas, o preenchimento e a alça são desenhados com aria-hidden, porque já são o nome e o valuetext: lidos de novo, diriam tudo duas vezes. Touch verificado em viewport de 375px com emulação de toque: a trilha inteira é o alvo, com 36px de altura e a largura do contêiner, acima do piso de 24x24 da política de interação do Up Web DS; tocar define o valor na posição tocada e arrastar o acompanha. Reduced motion verificado em navegador com prefers-reduced-motion: reduce — o valor é o estado e muda na hora em qualquer caso; o que sai é a física por cima dele: a mola do preenchimento salta direto para o destino, o elástico além das pontas não estica e a escala da alça não anima, tudo via useReducedMotion. As transições de cor das marcas e do preenchimento não são movimento e permanecem. Timing: o upstream usava duration-200 nas marcas; a revisão escolheu duration-default, que é o tempo do preenchimento ao lado delas — uma superfície, um tempo.

Classificação

Layer
Primitive
Domínio
Domain-free (compartilhado)
Categoria
selection
Status
Stable

Origem e distribuição

Fonte
ncdai registry / elastic-slider
Licença
MIT
Distribuição
Interna

Acessibilidade

  • Teclado: revisado
  • Leitor de tela: revisado
  • Touch: revisado
  • Reduced motion: revisado

Dependências

Pacotes
motion
Ícones
Nenhum
Construído sobre
Nenhum
Usado por
Nenhum ainda