Slider

An easily stylable range input.

View as Markdown

Anatomy

Import the component and assemble its parts:

Anatomy

API reference

Root

Groups all parts of the slider. Renders a <div> element.

namestring
Name
Description

Identifies the field when a form is submitted.

Type
string | undefined
defaultValuenumber | number[]
Description

The uncontrolled value of the slider when it’s initially rendered.

To render a controlled slider, use the value prop instead.

Type
number | number[] | undefined
valuenumber | number[]
Name
Description

The value of the slider. For ranged sliders, provide an array with two values.

Type
number | number[] | undefined
onValueChangefunction
Description

Callback function that is fired when the slider's value changed.

Type
| ((
    value: number | number[],
    eventDetails: Slider.Root.ChangeEventDetails,
    activeThumbIndex: number,
  ) => void)
| undefined
onValueCommittedfunction
Description

Callback function that is fired when the pointerup is triggered.

Type
| ((
    value: number | number[],
    eventDetails: Slider.Root.ChangeEventDetails,
  ) => void)
| undefined
localeIntl.LocalesArgument
Name
Description

The locale used by Intl.NumberFormat when formatting the value. Defaults to the user's runtime locale.

Type
Intl.LocalesArgument | undefined
refRefObject<HTMLDivElement>
Name
Type
React.RefObject<HTMLDivElement> | undefined
stepnumber(default: 1)
Name
Description

The granularity with which the slider can step through values. (A "discrete" slider.) The min prop serves as the origin for the valid values. We recommend (max - min) to be evenly divisible by the step.

Type
number | undefined
Default
1
largeStepnumber(default: 10)
Description

The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.

Type
number | undefined
Default
10
minStepsBetweenValuesnumber(default: 0)
Description

The minimum steps between values in a range slider.

Type
number | undefined
Default
0
minnumber(default: 0)
Name
Description

The minimum allowed value of the slider. Should not be equal to max.

Type
number | undefined
Default
0
maxnumber(default: 100)
Name
Description

The maximum allowed value of the slider. Should not be equal to min.

Type
number | undefined
Default
100
formatIntl.NumberFormatOptions
Name
Description

Options to format the input value.

Type
Intl.NumberFormatOptions | undefined
disabledboolean(default: false)
Description

Whether the slider should ignore user interaction.

Type
boolean | undefined
Default
false
orientationOrientation(default: 'horizontal')
Description

The component orientation.

Type
'horizontal' | 'vertical' | undefined
Default
'horizontal'
classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Root.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).

Value

Displays the current value of the slider as text. Renders an <output> element.

children| ((formattedValues: string[], values: number[]) => ReactNode)
| null
Type
| ((
    formattedValues: string[],
    values: number[],
  ) => ReactNode)
| null
| undefined
classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Root.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).

Control

The clickable, interactive part of the slider. Renders a <div> element.

classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Root.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).

Track

Contains the slider indicator and represents the entire range of the slider. Renders a <div> element.

classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Root.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).

Indicator

Visualizes the current value of the slider. Renders a <div> element.

classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Root.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Root.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).

Thumb

The draggable part of the the slider at the tip of the indicator. Renders a <div> element and a nested <input type="range">.

getAriaLabelfunction
Description

A function which returns a string value for the aria-label attribute of the input.

Type
((index: number) => string) | null | undefined
getAriaValueTextfunction
Description

A function which returns a string value for the aria-valuetext attribute of the input. This is important for screen reader users.

Type
| ((
    formattedValue: string,
    value: number,
    index: number,
  ) => string)
| null
| undefined
indexnumber
Name
Description

The index of the thumb which corresponds to the index of its value in the value or defaultValue array. This prop is required to support server-side rendering for range sliders with multiple thumbs.

Type
number | undefined
Example
<Slider.Root value={[10, 20]}>
  <Slider.Thumb index={0} />
  <Slider.Thumb index={1} />
</Slider.Root>
onBlurfunction
Name
Description

A blur handler forwarded to the input.

Type
| React.FocusEventHandler<HTMLInputElement>
| undefined
onFocusfunction
Description

A focus handler forwarded to the input.

Type
| React.FocusEventHandler<HTMLInputElement>
| undefined
tabIndexnumber
Description

Optional tab index attribute forwarded to the input.

Type
number | undefined
disabledboolean(default: false)
Description

Whether the thumb should ignore user interaction.

Type
boolean | undefined
Default
false
inputRefRef<HTMLInputElement>
Description

A ref to access the nested input element.

Type
React.Ref<HTMLInputElement> | undefined
classNamestring | function
Description

CSS class applied to the element, or a function that returns a class based on the component’s state.

Type
string | ((state: Slider.Thumb.State) => string)
renderReactElement | function
Name
Description

Allows you to replace the component’s HTML element with a different tag, or compose it with another component.

Accepts a ReactElement or a function that returns the element to render.

Type
| ReactElement
| ((
    props: HTMLProps,
    state: Slider.Thumb.State,
  ) => ReactElement)
data-dragging
Present while the user is dragging.
data-orientation
Indicates the orientation of the slider.
data-disabled
Present when the slider is disabled.
data-readonly
Present when the slider is readonly.
data-required
Present when the slider is required.
data-valid
Present when the slider is in valid state (when wrapped in Field.Root).
data-invalid
Present when the slider is in invalid state (when wrapped in Field.Root).
data-dirty
Present when the slider's value has changed (when wrapped in Field.Root).
data-touched
Present when the slider has been touched (when wrapped in Field.Root).
data-focused
Present when the slider is focused (when wrapped in Field.Root).
data-index
Indicates the index of the thumb in range sliders.

Examples

Range slider

To create a range slider:

  1. Pass an array of values and place Slider.Thumbs for each value in the array
  2. Additionally for server-side rendering, specify a numeric index for each thumb that corresponds to the index of its value in the value array