import { useEffect, useId, useState } from "react" import { Minus, Plus } from "lucide-react" import { Label } from "@/components/ui/label" import { cn } from "@/lib/utils" export function NumberStepper({ label, value, onChange, min, max, step = 1, unit = 'px', orientation = 'column' }: { label: string value: number onChange: (value: number) => void min: number max: number step?: number unit?: string orientation?: 'row' | 'column' }) { const id = useId() const clamp = (next: number) => Math.min(max, Math.max(min, next)) const [draft, setDraft] = useState(`${value}${unit}`) useEffect(() => setDraft(`${value}${unit}`), [value, unit]) const commitDraft = () => { const parsed = parseInt(draft, 10) const next = Number.isNaN(parsed) ? value : clamp(parsed) setDraft(`${next}${unit}`) if (next !== value) onChange(next) } const actionClass = "flex size-8 shrink-0 items-center justify-center text-muted-foreground transition-colors hover:text-foreground disabled:opacity-30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" return (