{"version":3,"file":"Checkbox.mjs","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["'use client'\nimport { forwardRef } from 'react'\nimport * as React from 'react'\n\nimport { CheckBoldIcon, HyphenBoldIcon } from '@channel.io/bezier-icons'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport classNames from 'classnames'\n\nimport useId from '~/src/hooks/useId'\nimport { getFormFieldSizeClassName } from '~/src/types/props-helpers'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { useFormFieldProps } from '~/src/components/FormControl'\nimport { Icon } from '~/src/components/Icon'\nimport { Text } from '~/src/components/Text'\n\nimport { type CheckboxProps, type CheckedState } from './Checkbox.types'\n\nimport styles from './Checkbox.module.scss'\n\ninterface CheckIconProps {\n  style: React.CSSProperties\n  'data-state': 'checked' | 'unchecked' | 'indeterminate'\n  'data-disabled': boolean | undefined\n}\n\n/* NOTE: Props are injected at runtime by `CheckboxPrimitive.Indicator`. */\nconst CheckIcon = forwardRef<SVGSVGElement, CheckIconProps>(\n  function CheckIcon(props, forwardedRef) {\n    // eslint-disable-next-line react/destructuring-assignment\n    const state = props['data-state']\n    const isUnchecked = state === 'unchecked'\n    const isIndeterminate = state === 'indeterminate'\n\n    return (\n      <Icon\n        className={styles.CheckIcon}\n        ref={forwardedRef}\n        source={!isIndeterminate ? CheckBoldIcon : HyphenBoldIcon}\n        color={isUnchecked ? 'fill-neutral-heavy' : 'text-absolute-white'}\n        {...props}\n      />\n    )\n  }\n)\n\nfunction CheckboxImpl<Checked extends CheckedState>(\n  { children, className, checked, size = 'm', id: idProp, ...rest }: CheckboxProps<Checked>,\n  forwardedRef: React.Ref<HTMLButtonElement>\n) {\n  const {\n    id: formFieldId,\n    hasError,\n    ...formFieldProps\n  } = useFormFieldProps(rest)\n\n  const id = useId(idProp ?? formFieldId, 'bezier-checkbox')\n  const iconSize = size === 's' ? 'xxs' : 'xs'\n\n  return (\n    <div\n      className={classNames(styles.Container, getFormFieldSizeClassName('m'))}\n    >\n      <CheckboxPrimitive.Root\n        asChild\n        className={classNames(styles.Checkbox, styles[`size-${size}`], className)}\n        ref={forwardedRef}\n        id={id}\n        checked={checked}\n        data-invalid={formFieldProps['aria-invalid']}\n        {...formFieldProps}\n      >\n        <BaseButton>\n          <CheckboxPrimitive.Indicator\n            asChild\n            /* NOTE: To allow the icon to be rendered even if unchecked. */\n            forceMount\n          >\n            {/* @ts-expect-error */}\n            <CheckIcon size={iconSize} />\n          </CheckboxPrimitive.Indicator>\n        </BaseButton>\n      </CheckboxPrimitive.Root>\n      {children && (\n        <Text\n          as=\"label\"\n          // TODO: Apply polymorphic types to `as` prop.\n          // @ts-expect-error\n          htmlFor={id}\n          className={styles.Label}\n          typo=\"14\"\n          color=\"text-neutral\"\n        >\n          {children}\n        </Text>\n      )}\n    </div>\n  )\n}\n\n/* NOTE: This is a workaround to avoid infinite type recursion when directly using `ReturnType` */\ntype ReturnTypeOfCheckboxImpl<Checked extends CheckedState> = ReturnType<\n  typeof CheckboxImpl<Checked>\n>\n\n/**\n * `Checkbox` is a control that allows the user to toggle between checked and not checked.\n * It can be used with labels or standalone.\n * @example\n *\n * ```tsx\n * const [checked, setChecked] = useState(false)\n * // Controlled / With label\n * <Checkbox\n *   checked={checked}\n *   onCheckedChange={setChecked}\n * >\n *   Label\n * </Checkbox>\n * // Controlled / Standalone\n * <Checkbox\n *   checked={checked}\n *   onCheckedChange={setChecked}\n * />\n * // Uncontrolled\n * <Checkbox\n *   defaultChecked={true}\n * >\n *   Label\n * </Checkbox>\n * ```\n */\nexport const Checkbox = forwardRef(CheckboxImpl) as <\n  Checked extends CheckedState,\n>(\n  props: CheckboxProps<Checked> & {\n    ref?: React.ForwardedRef<HTMLButtonElement>\n  }\n) => ReturnTypeOfCheckboxImpl<Checked>\n"],"names":["CheckIcon","forwardRef","props","forwardedRef","state","isUnchecked","isIndeterminate","_jsx","Icon","className","styles","ref","source","CheckBoldIcon","HyphenBoldIcon","color","CheckboxImpl","children","checked","size","id","idProp","rest","formFieldId","hasError","formFieldProps","useFormFieldProps","useId","iconSize","_jsxs","classNames","Container","getFormFieldSizeClassName","CheckboxPrimitive","asChild","Checkbox","BaseButton","forceMount","Text","as","htmlFor","Label","typo"],"mappings":"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"}