Slider
A range control for selecting one value or a pair of values.
SliderExample
Examples
Range
Pass an array to defaultValue to render a range slider with multiple thumbs.
RangeSliderExample
Step
Use step to control the increment between values.
SteppedSliderExample
Disabled
Use the disabled prop to prevent interaction.
DisabledSliderExample
Controlled
Manage the slider value with React state using value and onValueChange.
ControlledSliderExample
Installation
Copy the source code below into your project:
import { cn } from "@/lib/utils";
import { Slider as BaseSlider } from "@base-ui/react";
import React from "react";
export default function Slider({
className,
value,
defaultValue,
min,
max,
...props
}: BaseSlider.Root.Props) {
const _values = React.useMemo(
() =>
Array.isArray(value)
? value
: typeof value === "number"
? [value]
: Array.isArray(defaultValue)
? defaultValue
: typeof defaultValue === "number"
? [defaultValue]
: [min ?? 0],
[value, defaultValue, min],
);
return (
<BaseSlider.Root
data-slot="slider"
defaultValue={defaultValue}
value={value}
min={min}
max={max}
{...props}
>
<BaseSlider.Control
className={cn("flex w-32 touch-none items-center select-none", className)}
data-slot="slider-control"
>
<BaseSlider.Track
className={cn("h-1 w-full rounded-full bg-muted inset-ring inset-ring-input select-none")}
data-slot="slider-track"
>
<BaseSlider.Indicator
className={cn("rounded-full bg-accent select-none data-disabled:opacity-50")}
data-slot="slider-indicator"
/>
{Array.from({ length: _values.length }).map((_, index) => (
<BaseSlider.Thumb
key={index}
className={(state) =>
cn(
"h-4 w-5 rounded-full bg-white shadow-xs ring ring-input transition-transform select-none before:hidden data-disabled:cursor-not-allowed data-disabled:bg-muted",
state.dragging &&
state.activeThumbIndex === index &&
"scale-120 opacity-80 backdrop-blur-md",
)
}
data-slot="slider-thumb"
index={index}
/>
))}
</BaseSlider.Track>
</BaseSlider.Control>
</BaseSlider.Root>
);
}API Reference
This component does not add any props on top of Base UI Slider.Root. See the Base UI docs for the full API reference.