"use client" import { useState, useCallback } from "react" import { Star } from "lucide-react" import { cn } from "@/lib/utils" interface StarRatingProps { value: number onChange?: (value: number) => void size?: "sm" | "md" | "lg" readOnly?: boolean className?: string } const sizeClasses = { sm: "h-4 w-4", md: "h-6 w-6", lg: "h-8 w-8", } const gapClasses = { sm: "gap-0.5", md: "gap-1", lg: "gap-1.5", } export function StarRating({ value, onChange, size = "md", readOnly = false, className, }: StarRatingProps) { const [hoverValue, setHoverValue] = useState(0) const [, setIsFocused] = useState(false) const handleClick = useCallback( (starValue: number) => { if (!readOnly && onChange) { onChange(starValue) } }, [readOnly, onChange] ) const handleKeyDown = useCallback( (e: React.KeyboardEvent) => { if (readOnly || !onChange) return switch (e.key) { case "ArrowRight": case "ArrowUp": e.preventDefault() onChange(Math.min(5, value + 1)) break case "ArrowLeft": case "ArrowDown": e.preventDefault() onChange(Math.max(1, value - 1)) break case "Home": e.preventDefault() onChange(1) break case "End": e.preventDefault() onChange(5) break } }, [readOnly, onChange, value] ) const displayValue = hoverValue || value return (