44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
'use client'
|
|
|
|
import * as React from 'react'
|
|
import * as SliderPrimitive from '@radix-ui/react-slider'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
function Slider({
|
|
className,
|
|
defaultValue,
|
|
value,
|
|
min = 0,
|
|
max = 100,
|
|
...props
|
|
}: React.ComponentProps<typeof SliderPrimitive.Root>) {
|
|
const _values = value ?? defaultValue ?? [min]
|
|
|
|
return (
|
|
<SliderPrimitive.Root
|
|
data-slot="slider"
|
|
defaultValue={defaultValue}
|
|
value={value}
|
|
min={min}
|
|
max={max}
|
|
className={cn(
|
|
'relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50',
|
|
className
|
|
)}
|
|
{...props}
|
|
>
|
|
<SliderPrimitive.Track className="bg-muted relative h-1.5 w-full grow overflow-hidden rounded-full">
|
|
<SliderPrimitive.Range className="bg-primary absolute h-full" />
|
|
</SliderPrimitive.Track>
|
|
{_values.map((_, i) => (
|
|
<SliderPrimitive.Thumb
|
|
key={i}
|
|
className="border-primary/50 bg-background block size-4 rounded-full border shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none"
|
|
/>
|
|
))}
|
|
</SliderPrimitive.Root>
|
|
)
|
|
}
|
|
|
|
export { Slider }
|