File size: 2,075 Bytes
13a0af9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"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 };