{"version":3,"file":"RatingStars.cjs","names":[],"sources":["../../../src/components/RatingStars/RatingStars.tsx"],"sourcesContent":["/**\n * @tempest-limits props-count — value, max, onChange, size, readonly, disabled,\n * label, className — a rating is a radio group drawn as stars, and readonly and\n * disabled are genuinely different (a shown rating versus a control you cannot use).\n */\nimport { useState } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./RatingStars.module.css\";\n\nexport type RatingSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface RatingStarsProps {\n    /** Current selected value (1..max). 0 means none. */\n    value: number;\n    /** Total number of stars. Default 5. */\n    max?: number;\n    onChange?: (value: number) => void;\n    size?: RatingSize;\n    readonly?: boolean;\n    disabled?: boolean;\n    /** Accessible label for the rating group. */\n    label?: string;\n    className?: string;\n}\n\n/**\n * Star rating control. Renders `max` stars, fills the first `value`. Click a\n * star to set rating (when not readonly). Hovering previews the value.\n */\nexport function RatingStars({\n    value,\n    max = 5,\n    onChange,\n    size = \"md\",\n    readonly = false,\n    disabled = false,\n    label = \"Avaliação\",\n    className,\n}: RatingStarsProps) {\n    const [hover, setHover] = useState<number>(0);\n    const displayed = hover > 0 ? hover : value;\n\n    const handleClick = (next: number): void => {\n        if (readonly || disabled) return;\n        onChange?.(next);\n    };\n\n    return (\n        <span\n            role=\"radiogroup\"\n            aria-label={label}\n            className={cn(\n                styles.wrapper,\n                styles[size],\n                disabled && styles.disabled,\n                readonly && styles.readonly,\n                className,\n            )}\n            onMouseLeave={() => setHover(0)}\n        >\n            {Array.from({ length: max }, (_, i) => {\n                const starIndex = i + 1;\n                const filled = starIndex <= displayed;\n                return (\n                    <button\n                        key={starIndex}\n                        type=\"button\"\n                        role=\"radio\"\n                        aria-checked={value === starIndex}\n                        aria-label={`${starIndex} ${starIndex === 1 ? \"estrela\" : \"estrelas\"}`}\n                        className={cn(styles.star, filled && styles.filled)}\n                        disabled={disabled}\n                        onMouseEnter={() => !readonly && !disabled && setHover(starIndex)}\n                        onClick={() => handleClick(starIndex)}\n                    >\n                        <StarIcon filled={filled} />\n                    </button>\n                );\n            })}\n        </span>\n    );\n}\n\nfunction StarIcon({ filled }: { filled: boolean }) {\n    return (\n        <svg\n            width=\"20\"\n            height=\"20\"\n            viewBox=\"0 0 24 24\"\n            fill={filled ? \"currentColor\" : \"none\"}\n            stroke=\"currentColor\"\n            strokeWidth=\"1.5\"\n            strokeLinejoin=\"round\"\n            aria-hidden\n        >\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 22 12 18.56 5.82 22 7 14.14 2 9.27l6.91-1.01L12 2z\" />\n        </svg>\n    );\n}\n"],"mappings":"kIA6BA,SAAgB,EAAY,CACxB,QACA,MAAM,EACN,WACA,OAAO,KACP,WAAW,GACX,WAAW,GACX,QAAQ,YACR,aACiB,CACjB,GAAM,CAAC,EAAO,IAAA,EAAY,EAAA,SAAA,CAAiB,CAAC,EACtC,EAAY,EAAQ,EAAI,EAAQ,EAEhC,EAAe,GAAuB,CACpC,GAAY,GAChB,IAAW,CAAI,CACnB,EAEA,OACI,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,KAAK,aACL,aAAY,EACZ,UAAW,EAAA,GACP,EAAA,QAAO,QACP,EAAA,QAAO,GACP,GAAY,EAAA,QAAO,SACnB,GAAY,EAAA,QAAO,SACnB,CACJ,EACA,iBAAoB,EAAS,CAAC,EAE7B,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAI,GAAI,EAAG,IAAM,CACnC,IAAM,EAAY,EAAI,EAChB,EAAS,GAAa,EAC5B,OACI,EAAA,EAAA,IAAA,CAAC,SAAD,CAEI,KAAK,SACL,KAAK,QACL,eAAc,IAAU,EACxB,aAAY,GAAG,EAAU,GAAG,IAAc,EAAI,UAAY,aAC1D,UAAW,EAAA,GAAG,EAAA,QAAO,KAAM,GAAU,EAAA,QAAO,MAAM,EACxC,WACV,iBAAoB,CAAC,GAAY,CAAC,GAAY,EAAS,CAAS,EAChE,YAAe,EAAY,CAAS,EAEpC,UAAA,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,QAAS,CAAA,CACvB,EAXC,CAWD,CAEhB,CAAC,CACC,CAAA,CAEd,CAEA,SAAS,EAAS,CAAE,UAA+B,CAC/C,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAM,EAAS,eAAiB,OAChC,OAAO,eACP,YAAY,MACZ,eAAe,QACf,cAAA,GAEA,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,0FAA4F,CAAA,CACnG,CAAA,CAEb"}