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.

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.

Keep in mind

Some components on this site are inspired by or recreated from existing work across the web. I'm not here to take credit; just to learn, experiment, and sometimes push things a bit further. If something looks familiar and I forgot to mention you, reach out and I'll fix that right away.

Updated