Skip to content

Slider

A range input for selecting a numeric value within a defined range. Displays a track, filled portion, and draggable thumb.

Preview

65
30

States

Features

  • Native <input type="range"> for maximum compatibility.
  • Brand-purple thumb with shadow for visibility.
  • Optional value label displaying the current number.
  • Track uses border token colour for contrast in both themes.

States

StateAppearance
DefaultTrack with brand-purple thumb
HoverThumb scales up slightly
Active/DraggingThumb depressed
FocusBrand-purple ring on thumb
DisabledReduced opacity, no interaction

Props

PropTypeDefaultDescription
minnumber0Minimum value
maxnumber100Maximum value
stepnumber1Step increment
valuenumber--Current value
onChange(value: number) => void--Change handler
labelstring--Visible label
showValuebooleanfalseDisplays current value
disabledbooleanfalseDisables the slider

Code example

React

tsx
import { Slider } from '@thepace/lexicon/components';

<Slider label="Volume" min={0} max={100} value={volume}
        onChange={setVolume} showValue />

Vanilla HTML

html
<div class="lex-slider">
  <div class="lex-slider__row">
    <label class="lex-slider__label">Volume</label>
    <span class="lex-slider__value">65</span>
  </div>
  <input type="range" class="lex-slider__input"
         min="0" max="100" value="65" />
</div>

CSS class reference

ClassPurpose
.lex-sliderContainer
.lex-slider__inputThe range input
.lex-slider__labelLabel text
.lex-slider__valueCurrent value display
.lex-slider__rowLabel + value row

Accessibility

  • Uses native <input type="range"> for keyboard and screen reader support.
  • Arrow keys adjust the value by step increment.
  • aria-valuemin, aria-valuemax, aria-valuenow are natively handled.
  • Label connected via htmlFor/id.

Guidelines

Do

  • Show the current value alongside the slider for precision.
  • Use appropriate step values (e.g. 5 or 10 for coarse adjustments).

Don't

  • Don't use for precise numeric entry — use Number Input instead.
  • Don't use for values below 0 or above 100 without clear min/max labels.

Released under the MIT License. A product by the pace.