Slider
An easily stylable range input.
View as MarkdownUsage guidelines
- Form controls must have an accessible name: Prefer
<Slider.Label>, or provide anaria-labelon each<Slider.Thumb>when no visible label is rendered. See Labeling a slider and the forms guide.
Anatomy
Import the component and assemble its parts:
import { Slider } from '@base-ui/react/slider';
<Slider.Root>
<Slider.Label />
<Slider.Value />
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb />
</Slider.Track>
</Slider.Control>
</Slider.Root>Examples
Range slider
To create a range slider:
- Pass an array of values and place a
<Slider.Thumb>for each value in the array - Additionally for server-side rendering, specify a numeric
indexfor each thumb that corresponds to the index of its value in the value array
Thumbs can be configured to behave differently when they collide during pointer interactions using the thumbCollisionBehavior prop on <Slider.Root>.
Thumb alignment
Set thumbAlignment="edge" to inset the thumb such that its edge aligns with the edge of the control when the value is at min or max, without overflowing the control like the default "center" alignment.
A client-only alternative thumbAlignment="edge-client-only" can be used to reduce bundle size but only renders after React hydration.
Labeling a slider
A single-thumb slider without a visible label (such as a volume control) can be labeled using aria-label on <Slider.Thumb>:
<Slider.Root>
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb aria-label="Volume" />
</Slider.Track>
</Slider.Control>
</Slider.Root>A visible label can be created using <Slider.Label>:
<Slider.Root>
<Slider.Label>Volume</Slider.Label>
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb />
</Slider.Track>
</Slider.Control>
</Slider.Root>For a multi-thumb range slider with a visible label, add aria-label on each <Slider.Thumb> to distinguish them:
<Slider.Root defaultValue={[25, 75]}>
<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> to build a vertical slider.
Form integration
To use a slider in a form, pass the slider name to <Slider.Root>:
<Form>
<Slider.Root name="volume">
<Slider.Label>Volume</Slider.Label>
<Slider.Control>
<Slider.Track>
<Slider.Indicator />
<Slider.Thumb />
</Slider.Track>
</Slider.Control>
</Slider.Root>
</Form>For grouped multi-thumb range sliders in forms, Fieldset can provide the shared visible label while each thumb keeps its own aria-label:
<Field.Root>
<Fieldset.Root render={<Slider.Root />}>
<Fieldset.Legend>Price range</Fieldset.Legend>
<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>
</Fieldset.Root>
</Field.Root>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[]—
- Name
- Description
The uncontrolled value of the slider when it’s initially rendered.
To render a controlled slider, use the
valueprop 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—
- Name
- Description
Callback function that is fired when the slider’s value changed. You can pull out the new value by accessing
event.target.value(any).The
eventDetails.reasonindicates what triggered the change:'input-change'when the hidden range input emits a change event (for example, via form integration)'track-press'when the control track is pressed'drag'while dragging a thumb'keyboard'for keyboard input'none'when the change is triggered without a specific interaction
- Type
| (( value: number | number[], eventDetails: Slider.Root.ChangeEventDetails, ) => void) | undefined
onValueCommittedfunction—
- Name
- Description
Callback function that is fired when the
pointerupis triggered. Warning: This is a generic event not a change event.The
eventDetails.reasonindicates what triggered the commit:'drag'while dragging a thumb'track-press'when the control track is pressed'keyboard'for keyboard input'input-change'when the hidden range input emits a change event (for example, via form integration)'none'when the commit occurs without a specific interaction
- Type
| (( value: number | number[], eventDetails: Slider.Root.CommitEventDetails, ) => void) | undefined
formstring—
- Name
- Description
Identifies the form that owns the slider inputs. Useful when the slider is rendered outside the form.
- Type
string | undefined
localeIntl.LocalesArgument—
- Name
- Description
The locale used by
Intl.NumberFormatwhen formatting the value. Defaults to the user’s runtime locale.- Type
Intl.LocalesArgument | undefined
thumbAlignmentUnion'center'
- Name
- Description
How the thumb(s) are aligned relative to
Slider.Controlwhen the value is atminormax:center: The center of the thumb is aligned with the control edgeedge: The thumb is inset within the control such that its edge is aligned with the control edgeedge-client-only: Same asedgebut renders after React hydration on the client, reducing bundle size in return
- Type
'center' | 'edge' | 'edge-client-only' | undefined- Default
'center'
thumbCollisionBehaviorUnion'push'
- Description
Controls how thumbs behave when they collide during pointer interactions.
'push'(default): Thumbs push each other without restoring their previous positions when dragged back.'swap': Thumbs swap places when dragged past each other.'none': Thumbs cannot move past each other; excess movement is ignored.
- Type
'push' | 'swap' | 'none' | undefined- Default
'push'
stepnumber1
- Name
- Description
The granularity with which the slider can step through values. (A “discrete” slider.) The
minprop serves as the origin for the valid values. We recommend (max — min) to be evenly divisible by the step.- Type
number | undefined- Default
1
largeStepnumber10
- Name
- 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
minStepsBetweenValuesnumber0
- Description
The minimum steps between values in a range slider.
- Type
number | undefined- Default
0
minnumber0
- Name
- Description
The minimum allowed value of the slider. Should not be equal to max.
- Type
number | undefined- Default
0
maxnumber100
- 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
disabledbooleanfalse
- Name
- Description
Whether the slider should ignore user interaction.
- Type
boolean | undefined- Default
false
orientationOrientation'horizontal'
- Name
- Description
The component orientation.
- Type
'horizontal' | 'vertical' | undefined- Default
'horizontal'
classNamestring | function—
- Name
- 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 | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Root.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement) | undefined
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-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).
| Attribute | Description | |
|---|---|---|
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-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). | |
Slider.Root.StateHide
type SliderRootState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Slider.Root.ChangeEventReasonHide
type SliderRootChangeEventReason = 'input-change' | 'track-press' | 'drag' | 'keyboard' | 'none'Slider.Root.ChangeEventDetailsHide
type SliderRootChangeEventDetails = (
| { reason: 'none'; event: Event }
| { reason: 'input-change'; event: Event | InputEvent }
| { reason: 'track-press'; event: PointerEvent | MouseEvent | TouchEvent }
| { reason: 'drag'; event: PointerEvent | TouchEvent }
| { reason: 'keyboard'; event: KeyboardEvent }
) & {
/** Cancels Base UI from handling the event. */
cancel: () => void;
/** Allows the event to propagate in cases where Base UI will stop the propagation. */
allowPropagation: () => void;
/** Indicates whether the event has been canceled. */
isCanceled: boolean;
/** Indicates whether the event is allowed to propagate. */
isPropagationAllowed: boolean;
/** The element that triggered the event, if applicable. */
trigger: Element | undefined;
/** The index of the active thumb at the time of the change. */
activeThumbIndex: number;
}Slider.Root.CommitEventReasonHide
type SliderRootCommitEventReason = 'input-change' | 'track-press' | 'drag' | 'keyboard' | 'none'Slider.Root.CommitEventDetailsHide
type SliderRootCommitEventDetails =
| { reason: 'none'; event: Event }
| { reason: 'input-change'; event: Event | InputEvent }
| { reason: 'track-press'; event: PointerEvent | MouseEvent | TouchEvent }
| { reason: 'drag'; event: PointerEvent | TouchEvent }
| { reason: 'keyboard'; event: KeyboardEvent }Label
An accessible label that is automatically associated with the slider thumbs.
Renders a <div> element.
classNamestring | function—
- Name
- 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 | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Root.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Root.State, ) => ReactElement) | undefined
Slider.Label.StateHide
type SliderLabelState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Value
Displays the current value of the slider as text.
Renders an <output> element.
children| ((formattedValues: string[], values: number[]) => React.ReactNode)
| null—
| null
- Name
- Type
| (( formattedValues: string[], values: number[], ) => React.ReactNode) | null | undefined
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
| string | ((state: Slider.Value.State) => string | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Value.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Value.State, ) => ReactElement) | undefined
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-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).
| Attribute | Description | |
|---|---|---|
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-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). | |
Slider.Value.StateHide
type SliderValueState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Control
The clickable, interactive part of the slider.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
| string | ((state: Slider.Control.State) => string | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Control.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Control.State, ) => ReactElement) | undefined
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-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).
| Attribute | Description | |
|---|---|---|
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-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). | |
Slider.Control.StateHide
type SliderControlState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Track
Contains the slider indicator and represents the entire range of the slider.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
| string | ((state: Slider.Track.State) => string | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Track.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Track.State, ) => ReactElement) | undefined
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-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).
| Attribute | Description | |
|---|---|---|
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-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). | |
Slider.Track.StateHide
type SliderTrackState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Indicator
Visualizes the current value of the slider.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
| string | ((state: Slider.Indicator.State) => string | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Indicator.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Indicator.State, ) => ReactElement) | undefined
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-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).
| Attribute | Description | |
|---|---|---|
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-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). | |
Slider.Indicator.StateHide
type SliderIndicatorState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}Thumb
The draggable part of the slider at the tip of the indicator.
Renders a <div> element and a nested <input type="range">.
getAriaLabelfunction—
- Name
- Description
A function which returns a string value for the
aria-labelattribute of theinput.- Type
((index: number) => string) | null | undefined
getAriaValueTextfunction—
- Name
- Description
A function which returns a string value for the
aria-valuetextattribute of theinput. 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
valueordefaultValuearray. 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—
- Name
- Description
A focus handler forwarded to the
input.- Type
| React.FocusEventHandler<HTMLInputElement> | undefined
tabIndexnumber—
- Name
- Description
Optional tab index attribute forwarded to the
input.- Type
number | undefined
disabledbooleanfalse
- Name
- Description
Whether the thumb should ignore user interaction.
- Type
boolean | undefined- Default
false
inputRefReact.Ref<HTMLInputElement>—
- Name
- Description
A ref to access the nested input element.
- Type
React.Ref<HTMLInputElement> | undefined
classNamestring | function—
- Name
- 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 | undefined) | undefined
styleReact.CSSProperties | function—
- Name
- Type
| React.CSSProperties | (( state: Slider.Thumb.State, ) => React.CSSProperties | undefined) | undefined
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
ReactElementor a function that returns the element to render.- Type
| ReactElement | (( props: HTMLProps, state: Slider.Thumb.State, ) => ReactElement) | undefined
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-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.
| Attribute | Description | |
|---|---|---|
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-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. | |
Slider.Thumb.StateHide
type SliderThumbState = {
/** The index of the active thumb. */
activeThumbIndex: number;
/** Whether the component should ignore user interaction. */
disabled: boolean;
/** Whether the thumb is currently being dragged. */
dragging: boolean;
/** The maximum value. */
max: number;
/** The minimum value. */
min: number;
/**
* The minimum steps between values in a range slider.
* @default 0
*/
minStepsBetweenValues: number;
/** The component orientation. */
orientation: 'horizontal' | 'vertical';
/**
* The step increment of the slider when incrementing or decrementing. It will snap
* to multiples of this value. Decimal values are supported.
* @default 1
*/
step: number;
/** The raw number value of the slider. */
values: number[];
/** Whether the field has been touched. */
touched: boolean;
/** Whether the field value has changed from its initial value. */
dirty: boolean;
/** Whether the field is valid. */
valid: boolean | null;
/** Whether the field has a value. */
filled: boolean;
/** Whether the field is focused. */
focused: boolean;
}