/ src / components / storybook / slider.tsx
slider.tsx
 1  import React from 'react'
 2  
 3  export interface SliderProps {
 4    label: string
 5    id: string
 6    value?: number
 7    onChange?: (value: number) => void
 8    min?: number
 9    max?: number
10    step?: number
11    showValue?: boolean
12    className?: string
13  }
14  
15  export const Slider: React.FC<SliderProps> = ({
16    label,
17    id,
18    value = 0,
19    onChange,
20    min = 0,
21    max = 100,
22    step = 1,
23    showValue = true,
24    className = '',
25  }) => {
26    return (
27      <div className={`flex flex-col gap-2 ${className}`}>
28        <div className="flex justify-between items-center">
29          <label
30            htmlFor={id}
31            className="text-sm font-medium text-gray-700 dark:text-gray-200"
32          >
33            {label}
34          </label>
35          {showValue && (
36            <span className="text-sm font-semibold text-blue-600 dark:text-blue-400 min-w-12 text-right">
37              {value}
38            </span>
39          )}
40        </div>
41        <input
42          type="range"
43          id={id}
44          value={value}
45          onChange={(e) => onChange?.(Number(e.target.value))}
46          min={min}
47          max={max}
48          step={step}
49          className="w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer accent-blue-600 dark:accent-blue-500"
50        />
51        <div className="flex justify-between text-xs text-gray-500 dark:text-gray-400">
52          <span>{min}</span>
53          <span>{max}</span>
54        </div>
55      </div>
56    )
57  }