Slider

1.1.0

O componente Slider permite aos usuários selecionar um valor único ou um intervalo de valores deslizando um controle ao longo de uma faixa horizontal.

import React, { useState } from "react";
import { Slider } from "@nimbus-ds/components";

const Example: React.FC = () => {
  const [value, setValue] = useState(50);

  return (
    <Slider
      value={value}
      min={0}
      max={100}
      onChange={setValue}
    />
  );
};

export default Example;

O componente é composto por uma faixa horizontal (track) que representa o intervalo de valores, um controle (thumb) que se desloca sobre a faixa para selecionar um valor, e a porção ativa da faixa (fill) que indica visualmente o valor selecionado.

Diagrama de anatomia do componente Slider mostrando: 1 - Track inativo, 2 - Fill ou track ativo, 3 - Thumb ou controle
  1. Track: Faixa horizontal que representa o intervalo completo de valores possíveis.
  2. Fill: Porção ativa da faixa que indica visualmente o valor ou intervalo selecionado.
  3. Thumb: Controle que o usuário arrasta para selecionar um valor.

O componente Slider é um controle de entrada que permite aos usuários selecionar um valor único ou um intervalo de valores deslizando um controle ao longo de uma faixa horizontal. É ideal para ajustar configurações que têm um impacto escalar imediato, priorizando a velocidade de seleção sobre a precisão extrema.

  • Para ajustar valores numéricos dentro de um intervalo conhecido e limitado (ex. raio de entrega em quilômetros).
  • Em filtros de busca para definir intervalos de preços ou dimensões (variante Range).
  • Quando o usuário precisa explorar o efeito de uma mudança em tempo real, como volume ou brilho.
  • Para simplificar a entrada de dados em dispositivos móveis onde o teclado pode ser invasivo.
  • Para valores que requerem precisão absoluta (ex. inserir um número de documento ou um preço exato). Nesse caso, usar um Input.
  • Se o intervalo de valores é muito amplo ou indefinido, dificultando a manipulação do controle.
  • Para opções binárias (Sim/Não); nesses casos, é preferível usar um Toggle ou Checkbox.
Diagrama mostrando as variantes do Slider: 1 - Single com um único controle, 2 - Range com dois controles
  1. Single: Um único controle para selecionar um valor escalar único.
  2. Range: Dois controles que permitem definir um intervalo (mínimo e máximo).
Diagrama mostrando os estados do Slider: repouso, hover, ativo e cheio

O componente apresenta os seguintes estados: repouso, hover, ativo e com o valor no máximo.

  • Feedback visual imediato: O valor selecionado deve ser mostrado dinamicamente enquanto o usuário desloca o controle para evitar erros.
  • Zonas de interação amplas: O controle deve ter uma área de toque suficiente (mínimo 44px) para facilitar o uso a partir do app móvel da Nuvemshop.
  • Incrementos lógicos: Definir passos (steps) coerentes com a magnitude do valor para evitar deslocamentos acidentais.
  • Navegação por teclado: O componente responde às teclas ArrowRight/Up para incrementar e ArrowLeft/Down para decrementar o valor. Também suporta Home para ir ao mínimo e End para ir ao máximo.
  • Atributos ARIA: Implementa role="slider" com aria-valuemin, aria-valuemax e aria-valuenow para que os leitores de tela comuniquem o estado do controle.
  • Contraste de cor: A faixa ativa tem um contraste de pelo menos 3:1 em relação ao fundo para garantir sua visibilidade (WCAG AA).
  • Incluir rótulos nas extremidades do slider para dar contexto ao intervalo.
  • Usar a variante Range quando os valores dependem um do outro.
  • Manter o slider alinhado com a largura do contêiner para maximizar a precisão do percurso.
  • Não usar sliders sem um rótulo claro que explique o que está sendo ajustado.
  • Evitar colocar sliders em diálogos muito pequenos que limitem o movimento horizontal.
  • Não omitir o valor numérico atual, pois o usuário pode perder a referência.
  • Label - Para identificar o propósito do slider.
  • Text - Para mostrar os limites (mín/máx) e o valor atual selecionado.
  • Input - Pode ser usado para entrada de valores numéricos quando se requer precisão absoluta.
  • ProgressBar - Para mostrar progresso (não interativo).

Instale o componente via terminal.

npm install @nimbus-ds/components

Propriedades adicionais são repassadas ao elemento <Slider>. Consulte a documentação do elemento input para ver a lista de atributos aceitos pelo elemento <Slider>.

Slider

NameTypeDefaultDescription

value*

number

The current value of the slider (single mode).

onChange

object

Callback fired when the value changes.

onChangeEnd

object

Callback fired when the user finishes interacting with the slider.

ariaLabel

string

'Value'

Accessible label for the slider thumb.

min

number

'0'

The minimum value of the slider range.

max

number

'100'

The maximum value of the slider range.

step

number

'1'

The step increment between values.

appearance

'danger'
'neutral'
'primary'
'success'
'warning'

'primary'

Visual appearance of the slider fill.

disabled

boolean

'false'

Whether the slider is disabled.

data-testid

string

This is an attribute used to identify a DOM node for testing purposes.

Slider.Range

NameTypeDefaultDescription

minValue*

number

The current minimum value selected on the slider.

maxValue*

number

The current maximum value selected on the slider.

onChange

object

Callback fired when the min or max value changes.

onMinChange

object

Callback fired when the min value changes.

onMaxChange

object

Callback fired when the max value changes.

onChangeEnd

object

Callback fired when the user finishes interacting with the slider.

minAriaLabel

string

'Minimum value'

Accessible label for the minimum value thumb.

maxAriaLabel

string

'Maximum value'

Accessible label for the maximum value thumb.

min

number

'0'

The minimum value of the slider range.

max

number

'100'

The maximum value of the slider range.

step

number

'1'

The step increment between values.

appearance

'danger'
'neutral'
'primary'
'success'
'warning'

'primary'

Visual appearance of the slider fill.

disabled

boolean

'false'

Whether the slider is disabled.

data-testid

string

This is an attribute used to identify a DOM node for testing purposes.