{"version":3,"file":"radio.cjs","sources":["../../../src/components/radio.tsx"],"sourcesContent":["import React, {\n    forwardRef,\n    type HTMLAttributes,\n    type ReactElement,\n    type ReactNode,\n    useCallback,\n    useId,\n    useState,\n} from \"react\";\nimport { mergedCva } from \"../utils/components\";\nimport { Typography } from \"./typography\";\nimport Info from \"../icons/info\";\nimport { type BaseInputWrapperProps, infoIconStyles } from \"./commons/input\";\nimport { Popover } from \"./popover\";\n\nconst inputWrapperStyles = mergedCva(\n    [\"cui-flex\", \"cui-items-center\", \"cui-gap-1.5\"],\n    {\n        variants: {\n            hasLabel: {\n                true: [\"cui-gap-2\"],\n            },\n        },\n    },\n);\n\nconst radioBackgroundStyles = mergedCva(\n    [\n        \"cui-relative\",\n        \"hover:cui-cursor-pointer\",\n        \"cui-rounded-full\",\n        \"cui-border cui-border-black dark:cui-border-white\",\n        \"cui-h-4\",\n        \"cui-w-4\",\n        \"cui-transition-colors\",\n    ],\n    {\n        variants: {\n            checked: {\n                true: [\"cui-bg-orange\"],\n            },\n        },\n    },\n);\n\nconst inputStyles = mergedCva([\n    \"cui-cursor-pointer\",\n    \"cui-absolute\",\n    \"cui-top-0\",\n    \"cui-left-0\",\n    \"cui-w-full\",\n    \"cui-h-full\",\n    \"cui-opacity-0\",\n]);\n\nconst labelStyles = mergedCva([\n    \"cui-flex\",\n    \"cui-items-center\",\n    \"cui-gap-1.5\",\n    \"cui-w-fit\",\n]);\n\nexport interface BaseRadioProps {\n    id?: string;\n    checked?: boolean;\n    value?: string | number;\n    name?: string;\n    disabled?: boolean;\n    info?: ReactNode;\n    className?: BaseInputWrapperProps[\"className\"] & {\n        radioInputWrapper?: string;\n    };\n}\n\nexport type RadioProps = Omit<\n    HTMLAttributes<HTMLInputElement>,\n    \"type\" | \"className\" | \"id\" | keyof BaseRadioProps\n> &\n    Pick<BaseInputWrapperProps, \"label\" | \"className\"> &\n    BaseRadioProps;\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n    {\n        id,\n        label,\n        className,\n        value,\n        name,\n        disabled,\n        info,\n        checked,\n        onChange,\n        ...rest\n    },\n    ref,\n): ReactElement {\n    const generatedId = useId();\n    const [infoIcon, setInfoIcon] = useState<HTMLDivElement | null>(null);\n    const [infoPopoverOpen, setInfoPopoverOpen] = useState(false);\n\n    const resolvedId = id || generatedId;\n\n    const handleInfoMouseEnter = useCallback(() => {\n        setInfoPopoverOpen(true);\n    }, []);\n\n    const handleInfoMouseExit = useCallback(() => {\n        setInfoPopoverOpen(false);\n    }, []);\n\n    return (\n        <div\n            className={inputWrapperStyles({\n                hasLabel: !!label,\n                className: className?.inputWrapper,\n            })}\n        >\n            <div\n                className={radioBackgroundStyles({\n                    checked,\n                    className: className?.radioInputWrapper,\n                })}\n            >\n                <input\n                    type=\"radio\"\n                    ref={ref}\n                    value={value}\n                    checked={checked}\n                    disabled={disabled}\n                    name={name}\n                    onChange={onChange}\n                    {...rest}\n                    id={resolvedId}\n                    className={inputStyles({\n                        className: className?.input,\n                    })}\n                />\n            </div>\n            <label\n                className={labelStyles({ className: className?.label })}\n                htmlFor={resolvedId}\n            >\n                <Typography className={className?.labelText}>\n                    {label}\n                </Typography>\n                {info && (\n                    <>\n                        <div ref={setInfoIcon}>\n                            <Info\n                                className={infoIconStyles({\n                                    className: className?.infoIcon,\n                                })}\n                                onMouseEnter={handleInfoMouseEnter}\n                                onMouseLeave={handleInfoMouseExit}\n                            />\n                        </div>\n                        <Popover\n                            anchor={infoIcon}\n                            open={infoPopoverOpen}\n                            className={{\n                                root: `cui-p-2 ${className?.infoPopover}`,\n                            }}\n                        >\n                            {info}\n                        </Popover>\n                    </>\n                )}\n            </label>\n        </div>\n    );\n});\n"],"names":["mergedCva","forwardRef","Radio","info","useId","useState","useCallback","Typography","Info","infoIconStyles","Popover"],"mappings":"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"}