HextaUI

Slider: Range

Pass two values for a range. Name each thumb with getAriaLabel, and keep them apart with minStepsBetweenValues. With draggableRange, drag anywhere between the thumbs to move both at once; a tap there still moves the nearest thumb.

Price
$200 – $800
"use client"

import { Slider, SliderLabel, SliderValue } from "@/components/ui/slider"

export function SliderRange() {
  return (
    <Slider
      defaultValue={[200, 800]}
      max={1000}
      step={10}
      minStepsBetweenValues={10}
      draggableRange
      format={{ style: "currency", currency: "USD", maximumFractionDigits: 0 }}
      getAriaLabel={(index) =>
        index === 0 ? "Minimum price" : "Maximum price"
      }
      className="max-w-xs"
    >
      <SliderLabel>Price</SliderLabel>
      <SliderValue />
    </Slider>
  )
}

This adds the example as components/examples/slider/range.tsx, together with the Slider component and the HextaUI theme tokens it needs.

pnpm dlx shadcn@latest add https://hextaui.com/r/slider-range.json

To add only the component, follow the Slider installation.

Props in this example

The Slider props this example sets, from the API reference.

PropTypeDefault
defaultValue
number | number[]–
max
number100
step
number1
minStepsBetweenValues
number0
draggableRangeIn a range, dragging between the thumbs moves them together, keeping the gap.
booleanfalse
format
Intl.NumberFormatOptions–
getAriaLabelNames each thumb of a range.
(index: number) => string–
className
string | (state) => string–

Every prop is in the Slider API reference.

See them all, with keyboard support and accessibility notes, on the Slider page.