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.

name

string

Name
Description

Identifies the field when a form is submitted.

Type
string | undefined
defaultValue

number | 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
value

number | number[]

Name
Description

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

Type
number | number[] | undefined
onValueChange

function

Description

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

Type
| ((
    value: number | number[],
    event: Event,
    activeThumbIndex: number,
  ) => void)
| undefined
onValueCommitted

function

Description

Callback function that is fired when the pointerup is triggered.

Type
| ((value: number | number[], event: Event) => void)
| undefined
locale

Intl.LocalesArgument

Name
Description

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

Type
Intl.LocalesArgument | undefined
ref

RefObject<HTMLDivElement>

Name
Type
React.RefObject<HTMLDivElement> | undefined
tabIndex

number

Description

Optional tab index attribute for the thumb components.

Type
number | undefined
step

number

(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

largeStep

number

(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

minStepsBetweenValues

number

(default:

0

)
Description

The minimum steps between values in a range slider.

Type
number | undefined
Default

0

min

number

(default:

0

)
Name
Description

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

Type
number | undefined
Default

0

max

number

(default:

100

)
Name
Description

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

Type
number | undefined
Default

100

format

Intl.NumberFormatOptions

Name
Description

Options to format the input value.

Type
Intl.NumberFormatOptions | undefined
disabled

boolean

(default:

false

)
Description

Whether the slider should ignore user interaction.

Type
boolean | undefined
Default

false

orientation

Orientation

(default:

'horizontal'

)
Description

The component orientation.

Type
'horizontal' | 'vertical' | undefined
Default

'horizontal'

inputRef

Ref<HTMLInputElement>

Description

A ref to access the hidden input element.

Type
React.Ref<HTMLInputElement> | undefined
className

string | 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)
render

ReactElement | 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
className

string | 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)
render

ReactElement | 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.

className

string | 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)
render

ReactElement | 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.

className

string | 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)
render

ReactElement | 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.

className

string | 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)
render

ReactElement | 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.

getAriaLabel

function

Description

Accepts a function which returns a string value that provides a user-friendly name for the input associated with the thumb

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

function

Description

Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider. This is important for screen reader users.

Type
| ((
    formattedValue: string,
    value: number,
    index: number,
  ) => string)
| null
| undefined
disabled

boolean

(default:

false

)
Description

Whether the thumb should ignore user interaction.

Type
boolean | undefined
Default

false

className

string | 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)
render

ReactElement | 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
| ((
    props: ComponentPropsWithRef<
      HTMLAttributes<HTMLDivElement>,
      HTMLDivElement
    >,
    inputProps: ComponentPropsWithRef<
      InputHTMLAttributes<HTMLInputElement>,
      HTMLInputElement
    >,
    state: Slider.Thumb.State,
  ) => ReactElement)
| (ReactElement & { ref: Ref<Element> })
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, provide an array of values with corresponding thumbs: