Spaces:
Running
Running
| "use client"; | |
| import * as React from "react"; | |
| import * as SliderPrimitive from "@radix-ui/react-slider@1.2.3"; | |
| import { cn } from "./utils"; | |
| function Slider({ | |
| className, | |
| defaultValue, | |
| value, | |
| min = 0, | |
| max = 100, | |
| ...props | |
| }: React.ComponentProps<typeof SliderPrimitive.Root>) { | |
| const _values = React.useMemo( | |
| () => | |
| Array.isArray(value) | |
| ? value | |
| : Array.isArray(defaultValue) | |
| ? defaultValue | |
| : [min, max], | |
| [value, defaultValue, min, max], | |
| ); | |
| 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 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col", | |
| className, | |
| )} | |
| {...props} | |
| > | |
| <SliderPrimitive.Track | |
| data-slot="slider-track" | |
| className={cn( | |
| "bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-4 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5", | |
| )} | |
| > | |
| <SliderPrimitive.Range | |
| data-slot="slider-range" | |
| className={cn( | |
| "bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full", | |
| )} | |
| /> | |
| </SliderPrimitive.Track> | |
| {Array.from({ length: _values.length }, (_, index) => ( | |
| <SliderPrimitive.Thumb | |
| data-slot="slider-thumb" | |
| key={index} | |
| className="border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50" | |
| /> | |
| ))} | |
| </SliderPrimitive.Root> | |
| ); | |
| } | |
| export { Slider }; | |