Range Slider

Slider with tick dots and a vertical-bar thumb that bounces as it lands on each step. Drag or keyboard, reduced-motion safe.

Inline Slider

range-slider-inline.tsx

An inset fill and inline label and value. Ten evenly spaced stops span the track; markers under text stay hidden but remain interactive, and the thumb parts around either label as it passes.

Install

$ bunx --bun shadcn add @beui/range-slider-inline

API Reference

step?
number

Rounds snap-stop values. While dragging, the readout keeps this step's decimal precision.

—
label
string

Compact label inside the left edge of the track.

—
format?
((value: number) => string)

Formats the inline value without changing its precision.

—
showTicks?
boolean

Show markers for the ten evenly spaced snap stops, except where they overlap inline text.

true
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Range Slider

range-slider.tsx

Tick dots, and a vertical-bar thumb that bounces as it lands on each step.

Drag the handle40

Install

$ bunx --bun shadcn add @beui/range-slider

API Reference

showTicks?
boolean

Render a tick dot at each step.

true
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
step?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Fluid Slider

range-slider-fluid.tsx

No thumb. The fill slides behind a rounded liquid cap, and the label flips color wherever the fill covers it.

Brightness35%
Brightness35%

Install

$ bunx --bun shadcn add @beui/range-slider-fluid

API Reference

label?
string

Text shown on the left of the track.

—
format?
((value: number) => string)

Formats the value shown on the right.

(v) => `${v}%`
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
step?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Wave Slider

range-slider-wave.tsx

Equalizer bars peak around the handle and drop back once it passes, so the value moves down the track as a wave.

Gain45

Install

$ bunx --bun shadcn add @beui/range-slider-wave

API Reference

bars?
number

Number of bars drawn across the track.

32
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
step?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Bubble Slider

range-slider-bubble.tsx

Grab the thumb and a value bubble pops out of it. The bubble tilts and squashes with how fast you drag, then settles upright.

Drag fast and the bubble leans

Install

$ bunx --bun shadcn add @beui/range-slider-bubble

API Reference

format?
((value: number) => string)

Formats the value shown in the bubble.

—
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
step?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Ruler Slider

range-slider-ruler.tsx

The needle stays put and the scale scrolls under it. A flick keeps going and settles on the nearest tick. Fractional steps read at the step's own precision.

72.5kg
404550556065707580859095100105110115120

Install

$ bunx --bun shadcn add @beui/range-slider-ruler

API Reference

gap?
number

Pixels between two steps.

14
majorEvery?
number

Label every Nth step; those ticks are drawn tall.

5
unit?
string

Unit shown next to the value.

—
className?
string
—
value?
number
—
defaultValue?
number
—
onValueChange?
((value: number) => void)
—
min?
number
—
max?
number
—
step?
number
—
disabled?
boolean
—
aria-label?
string
—
formatValueText?
((value: number) => string)

Announced instead of the raw number — pass one when the value carries a unit or a suffix ("72.5 kg", "35%"); a bare number needs no valueText.

—

Updated