Spaces:
Sleeping
Sleeping
File size: 1,434 Bytes
e067c2d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import * as React from "react"
import { cn } from "@/lib/utils"
interface SliderProps extends React.InputHTMLAttributes<HTMLInputElement> {
label?: string
showValue?: boolean
}
const Slider = React.forwardRef<HTMLInputElement, SliderProps>(
({ className, label, showValue, ...props }, ref) => {
return (
<div className="space-y-2">
{(label || showValue) && (
<div className="flex justify-between text-xs text-zinc-400">
{label && <span>{label}</span>}
{showValue && <span className="font-mono">{props.value}</span>}
</div>
)}
<input
type="range"
ref={ref}
className={cn(
"w-full h-1.5 bg-zinc-800 rounded-full appearance-none cursor-pointer",
"[&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-3 [&::-webkit-slider-thumb]:h-3 [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-zinc-50 [&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:transition-all [&::-webkit-slider-thumb]:hover:bg-zinc-200",
"[&::-moz-range-thumb]:w-3 [&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-zinc-50 [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:cursor-pointer",
className
)}
{...props}
/>
</div>
)
}
)
Slider.displayName = "Slider"
export { Slider }
|