Shih-hungg's picture
Migrate to shadcn
8b65a0f
'use client';
import { Slider } from '@/components/ui/slider';
import { Label } from '@/components/ui/label';
export interface RangeInputProps {
label: string;
value?: number;
defaultValue?: number;
min: number;
max: number;
step?: number;
onChange: (value: number) => void;
className?: string;
disabled?: boolean;
showValue?: boolean;
valueUnit?: string;
helpText?: string;
}
export default function RangeInput({
label,
value,
defaultValue = 1,
min,
max,
step = 1,
onChange,
className = '',
disabled = false,
showValue = true,
valueUnit = '',
helpText,
}: RangeInputProps) {
const currentValue = value ?? defaultValue;
return (
<div className={className}>
<Label>
{label}
</Label>
<Slider
min={min}
max={max}
step={step}
value={[currentValue]}
onValueChange={([val]) => onChange(val)}
disabled={disabled}
className="mt-2"
/>
{showValue && (
<div className="text-center text-sm text-muted-foreground mt-1">
{currentValue} {valueUnit} {helpText}
</div>
)}
{!showValue && helpText && (
<div className="text-xs text-muted-foreground mt-1">
{helpText}
</div>
)}
</div>
);
}