{"version":3,"file":"Checkbox.cjs","names":[],"sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { forwardRef, useEffect, useRef } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Checkbox.module.css\";\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n    label?: ReactNode;\n    description?: ReactNode;\n    /** Render the box in the indeterminate state regardless of `checked`. */\n    indeterminate?: boolean;\n    wrapperClassName?: string;\n}\n\n/**\n * Accessible checkbox. Supports a tri-state via `indeterminate` and pairs the\n * input with a label/description column for forms.\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n    { label, description, indeterminate, disabled, wrapperClassName, className, ...props },\n    ref,\n) {\n    const innerRef = useRef<HTMLInputElement | null>(null);\n\n    useEffect(() => {\n        if (innerRef.current) innerRef.current.indeterminate = Boolean(indeterminate);\n    }, [indeterminate]);\n\n    function setRef(node: HTMLInputElement | null): void {\n        innerRef.current = node;\n        if (typeof ref === \"function\") ref(node);\n        else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n    }\n\n    return (\n        <label className={cn(styles.wrapper, disabled && styles.disabled, wrapperClassName)}>\n            <input\n                ref={setRef}\n                type=\"checkbox\"\n                disabled={disabled}\n                className={cn(styles.input, className)}\n                {...props}\n            />\n            <span className={styles.box} aria-hidden>\n                {indeterminate ? <DashIcon /> : <CheckIcon />}\n            </span>\n            {(label || description) && (\n                <span className={styles.labelWrap}>\n                    {label && <span className={styles.label}>{label}</span>}\n                    {description && <span className={styles.description}>{description}</span>}\n                </span>\n            )}\n        </label>\n    );\n});\n\nfunction CheckIcon() {\n    return (\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n            <path\n                d=\"M5 12l5 5L20 7\"\n                stroke=\"currentColor\"\n                strokeWidth=\"3\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n            />\n        </svg>\n    );\n}\n\nfunction DashIcon() {\n    return (\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\">\n            <path d=\"M5 12h14\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" />\n        </svg>\n    );\n}\n"],"mappings":"+HAiBA,IAAa,GAAA,EAAW,EAAA,WAAA,CAA4C,SAChE,CAAE,QAAO,cAAa,gBAAe,WAAU,mBAAkB,YAAW,GAAG,GAC/E,EACF,CACE,IAAM,GAAA,EAAW,EAAA,OAAA,CAAgC,IAAI,GAErD,EAAA,EAAA,UAAA,KAAgB,CACR,EAAS,UAAS,EAAS,QAAQ,cAAgB,EAAQ,EACnE,EAAG,CAAC,CAAa,CAAC,EAElB,SAAS,EAAO,EAAqC,CACjD,EAAS,QAAU,EACf,OAAO,GAAQ,WAAY,EAAI,CAAI,EAC9B,IAAK,EAAyD,QAAU,EACrF,CAEA,OACI,EAAA,EAAA,KAAA,CAAC,QAAD,CAAO,UAAW,EAAA,GAAG,EAAA,QAAO,QAAS,GAAY,EAAA,QAAO,SAAU,CAAgB,EAAlF,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,QAAD,CACI,IAAK,EACL,KAAK,WACK,WACV,UAAW,EAAA,GAAG,EAAA,QAAO,MAAO,CAAS,EACrC,GAAI,CACP,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,IAAK,cAAA,GACxB,SAAA,GAAgB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,CAAA,GAAI,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,CAAA,CAC1C,CAAA,GACJ,GAAS,KACP,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAxB,SAAA,CACK,IAAS,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,MAAQ,SAAA,CAAY,CAAA,EACrD,IAAe,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,YAAc,SAAA,CAAkB,CAAA,CACtE,GAEP,GAEf,CAAC,EAED,SAAS,GAAY,CACjB,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACjD,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,EAAE,iBACF,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,OAClB,CAAA,CACA,CAAA,CAEb,CAEA,SAAS,GAAW,CAChB,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OACjD,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,EAAE,WAAW,OAAO,eAAe,YAAY,IAAI,cAAc,OAAS,CAAA,CAC/E,CAAA,CAEb"}