Skip to content

Slider

A draggable input for selecting a numeric value within a range.

Volume
50
import { Slider } from '@ontoui/react';
<Slider.Root defaultValue={50}>
<Slider.Label>Volume</Slider.Label>
<Slider.Value />
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb aria-label="Volume" />
</Slider.Track>
</Slider.Control>
</Slider.Root>;

Anatomy

PartElementDescription
Slider.Root<div>Groups all parts and holds the slider state.
Slider.Label<div>An accessible label associated with the slider thumbs.
Slider.Value<output>Displays the current value as text.
Slider.Control<div>The clickable, interactive area of the slider.
Slider.Track<div>The full range of the slider; contains indicator and thumbs.
Slider.Indicator<div>Fills the track to visualize the current value.
Slider.Thumb<div>The draggable handle positioned at the current value.

Examples

Range slider

Pass an array of values to Slider.Root and place one Slider.Thumb per value to create a range slider.

Price range
<Slider.Root defaultValue={[20, 80]}>
<Slider.Label>Price range</Slider.Label>
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb index={0} aria-label="Minimum price" />
<Slider.Thumb index={1} aria-label="Maximum price" />
</Slider.Track>
</Slider.Control>
</Slider.Root>

Vertical

Set orientation="vertical" on Slider.Root and give it a height to lay the slider out vertically.

Volume
60
<Slider.Root defaultValue={60} orientation="vertical" style={{ height: '200px' }}>
<Slider.Label>Volume</Slider.Label>
<Slider.Value />
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb aria-label="Volume" />
</Slider.Track>
</Slider.Control>
</Slider.Root>

Disabled

Set disabled on Slider.Root to prevent interaction.

Brightness
40
<Slider.Root defaultValue={40} disabled>
<Slider.Label>Brightness</Slider.Label>
<Slider.Value />
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb aria-label="Brightness" />
</Slider.Track>
</Slider.Control>
</Slider.Root>

API Reference

Slider.Root

Prop Type Default
children? ReactNode
className? string
style? CSSProperties
defaultValue? number | number[]
value? number | number[]
onValueChange? (value: number | number[], eventDetails: { event: Event; activeThumbIndex: number; }) => void
onValueCommitted? (value: number | number[], eventDetails: { event: Event; }) => void
min? number
max? number
step? number
largeStep? number
disabled? boolean
orientation? "horizontal" | "vertical"
name? string
ref? Ref<HTMLDivElement>

Slider.Label

Prop Type Default
children? ReactNode
className? string
ref? Ref<HTMLDivElement>

Slider.Value

Prop Type Default
className? string
children? (formattedValues: readonly string[], values: readonly number[]) => ReactNode
ref? Ref<HTMLDivElement>

Slider.Control

Prop Type Default
children? ReactNode
className? string
ref? Ref<HTMLDivElement>

Slider.Track

Prop Type Default
children? ReactNode
className? string
ref? Ref<HTMLDivElement>

Slider.Indicator

Prop Type Default
className? string
ref? Ref<HTMLDivElement>

Slider.Thumb

Prop Type Default
className? string
index? number
aria-label? string
disabled? boolean
tabIndex? number
ref? Ref<HTMLDivElement>