'use client'; import * as React from 'react'; import * as SliderPrimitive from '@radix-ui/react-slider'; import { cn } from '../../shared/utils'; /** * Draggable range input for numeric value selection. * * @description * Built on Radix UI Slider with robust mobile touch support. * Supports single thumb and dual-thumb range selection. * * @ai-rules * 1. Pass the initial value as a numeric array: `defaultValue={[50]}` — NOT `defaultValue={50}`. * 2. For dual-thumb range selectors, pass two values: `defaultValue={[20, 80]}`. * 3. Connect to React Hook Form via `onValueChange` — the callback receives `number[]`. */ const Slider = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => { const { defaultValue, value, min = 0, max = 100 } = props; const _values = React.useMemo( () => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]), [value, defaultValue, min, max] ); return ( {Array.from({ length: _values.length }, (_, index) => ( 1 ? `Thumb ${index + 1}` : 'Selecionar valor'} 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" /> ))} ); }); Slider.displayName = SliderPrimitive.Root.displayName; export { Slider };