'use client'; import { forwardRef, HTMLAttributes } from 'react'; export interface CyberSliderProps extends Omit, 'onChange'> { value: number; onChange: (value: number) => void; min?: number; max?: number; step?: number; variant?: 'cyan' | 'pink' | 'green' | 'purple'; showValue?: boolean; } const variantStyles = { cyan: { fill: 'bg-cyan-400 shadow-[0_0_10px_#00f0ff]', text: 'text-cyan-400' }, pink: { fill: 'bg-fuchsia-500 shadow-[0_0_10px_#ff00ff]', text: 'text-fuchsia-500' }, green: { fill: 'bg-emerald-400 shadow-[0_0_10px_#00ff88]', text: 'text-emerald-400' }, purple: { fill: 'bg-purple-500 shadow-[0_0_10px_#a855f7]', text: 'text-purple-500' }, }; export const CyberSlider = forwardRef( ({ value, onChange, min = 0, max = 100, step = 1, variant = 'cyan', showValue = false, className = '', ...props }, ref) => { const percentage = ((value - min) / (max - min)) * 100; const colors = variantStyles[variant]; return (
onChange(Number(e.target.value))} className="absolute inset-0 w-full h-full opacity-0 cursor-pointer" />
{showValue && {value}}
); } ); CyberSlider.displayName = 'CyberSlider'; export default CyberSlider;