{"version":3,"file":"Checkbox.cjs","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { useId } from '@raikou/hooks';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\n  extractStyleProps,\n  factory,\n  Factory,\n  getAutoContrastValue,\n  getContrastColor,\n  getRadius,\n  getSize,\n  getThemeColor,\n  parseThemeColor,\n  RaikouColor,\n  RaikouRadius,\n  RaikouSize,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { InlineInput, InlineInputStylesNames } from '../InlineInput';\nimport { CheckboxCard } from './CheckboxCard/CheckboxCard';\nimport { useCheckboxGroupContext } from './CheckboxGroup.context';\nimport { CheckboxGroup } from './CheckboxGroup/CheckboxGroup';\nimport { CheckboxIndicator } from './CheckboxIndicator/CheckboxIndicator';\nimport { CheckboxIcon } from './CheckIcon';\nimport {\n  CheckboxIconStyle,\n  CheckboxInnerStyle,\n  CheckboxInputStyle,\n  CheckboxRootStyle,\n} from './Checkbox.css';\n\nexport type CheckboxVariant = 'filled' | 'outline';\nexport type CheckboxStylesNames = 'icon' | 'inner' | 'input' | InlineInputStylesNames;\nexport type CheckboxCssVariables = {\n  root: '--checkbox-size' | '--checkbox-radius' | '--checkbox-color' | '--checkbox-icon-color';\n};\n\nexport interface CheckboxProps\n  extends BoxProps,\n    StylesApiProps<CheckboxFactory>,\n    ElementProps<'input', 'size' | 'children'> {\n  /** Id used to connect input with the label. If not set, unique id is generated instead. */\n  id?: string;\n\n  /** Content of the `label` associated with the checkbox */\n  label?: React.ReactNode;\n\n  /** Key of `theme.colors` or any valid CSS color to set input background color in checked state, `theme.primaryColor` by default */\n  color?: RaikouColor;\n\n  /** Controls size of the component, `'sm'` by default */\n  size?: RaikouSize | (string & {});\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius,` `theme.defaultRadius` by default */\n  radius?: RaikouRadius;\n\n  /** Props passed down to the root element */\n  wrapperProps?: Record<string, any>;\n\n  /** Position of the label relative to the input, `'right'` by default */\n  labelPosition?: 'left' | 'right';\n\n  /** Description displayed below the label */\n  description?: React.ReactNode;\n\n  /** Error message displayed below the label */\n  error?: React.ReactNode;\n\n  /** Indeterminate state of the checkbox. If set, `checked` prop is ignored. */\n  indeterminate?: boolean;\n\n  /** Icon displayed when checkbox is in checked or indeterminate state */\n  icon?: React.FC<{ indeterminate: boolean | undefined; className: string }>;\n\n  /** Assigns ref of the root element */\n  rootRef?: React.ForwardedRef<HTMLDivElement>;\n\n  /** Key of `theme.colors` or any valid CSS color to set icon color, by default value depends on `theme.autoContrast` */\n  iconColor?: RaikouColor;\n\n  /** Determines whether icon color with filled variant should depend on `background-color`. If luminosity of the `color` prop is less than `theme.luminosityThreshold`, then `theme.white` will be used for text color, otherwise `theme.black`. Overrides `theme.autoContrast`. */\n  autoContrast?: boolean;\n}\n\nexport type CheckboxFactory = Factory<{\n  props: CheckboxProps;\n  ref: HTMLInputElement;\n  stylesNames: CheckboxStylesNames;\n  vars: CheckboxCssVariables;\n  variant: CheckboxVariant;\n  staticComponents: {\n    Group: typeof CheckboxGroup;\n    Indicator: typeof CheckboxIndicator;\n    Card: typeof CheckboxCard;\n  };\n}>;\n\nconst defaultProps: Partial<CheckboxProps> = {\n  labelPosition: 'right',\n  icon: CheckboxIcon,\n};\n\nconst varsResolver = createVarsResolver<CheckboxFactory>(\n  (theme, { radius, color, size, iconColor, variant, autoContrast }) => {\n    const parsedColor = parseThemeColor({ color: color || theme.primaryColor, theme });\n    const outlineColor =\n      parsedColor.isThemeColor && parsedColor.shade === undefined\n        ? `var(--raikou-color-${parsedColor.color}-outline)`\n        : parsedColor.color;\n\n    return {\n      root: {\n        '--checkbox-size': getSize(size, 'checkbox-size'),\n        '--checkbox-radius': radius === undefined ? undefined : getRadius(radius),\n        '--checkbox-color': variant === 'outline' ? outlineColor : getThemeColor(color, theme),\n        '--checkbox-icon-color': iconColor\n          ? getThemeColor(iconColor, theme)\n          : getAutoContrastValue(autoContrast, theme)\n            ? getContrastColor({ color, theme, autoContrast })\n            : undefined,\n      },\n    };\n  }\n);\n\nexport const Checkbox = factory<CheckboxFactory>((_props, ref) => {\n  const props = useProps('Checkbox', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    color,\n    label,\n    id,\n    size,\n    radius,\n    wrapperProps,\n    checked,\n    labelPosition,\n    description,\n    error,\n    disabled,\n    variant,\n    indeterminate,\n    icon,\n    rootRef,\n    iconColor,\n    onChange,\n    autoContrast,\n    mod,\n    ...others\n  } = props;\n\n  const ctx = useCheckboxGroupContext();\n  const _size = size || ctx?.size;\n  const Icon = icon!;\n\n  const getStyles = useStyles<CheckboxFactory>({\n    name: 'Checkbox',\n    props,\n    classes: {\n      root: CheckboxRootStyle,\n      inner: CheckboxInnerStyle,\n      input: CheckboxInputStyle,\n      icon: CheckboxIconStyle,\n    },\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const { styleProps, rest } = extractStyleProps(others);\n  const uuid = useId(id);\n\n  const contextProps = ctx\n    ? {\n        checked: ctx.value.includes(rest.value as string),\n        onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n          ctx.onChange(event);\n          onChange?.(event);\n        },\n      }\n    : {};\n\n  return (\n    <InlineInput\n      {...getStyles('root')}\n      __staticSelector=\"Checkbox\"\n      __stylesApiProps={props}\n      id={uuid}\n      size={_size}\n      labelPosition={labelPosition}\n      label={label}\n      description={description}\n      error={error}\n      disabled={disabled}\n      classNames={classNames}\n      styles={styles}\n      unstyled={unstyled}\n      data-checked={contextProps.checked || checked || undefined}\n      variant={variant}\n      ref={rootRef}\n      mod={mod}\n      {...styleProps}\n      {...wrapperProps}\n    >\n      <Box {...getStyles('inner')} mod={{ 'data-label-position': labelPosition }}>\n        <Box\n          component=\"input\"\n          id={uuid}\n          ref={ref}\n          checked={checked}\n          disabled={disabled}\n          mod={{ error: !!error, indeterminate }}\n          {...getStyles('input', { focusable: true, variant })}\n          onChange={onChange}\n          {...rest}\n          {...contextProps}\n          type=\"checkbox\"\n        />\n\n        <Icon indeterminate={indeterminate} {...getStyles('icon')} />\n      </Box>\n    </InlineInput>\n  );\n});\n\nCheckbox.displayName = '@raikou/core/Checkbox';\nCheckbox.Group = CheckboxGroup;\nCheckbox.Indicator = CheckboxIndicator;\nCheckbox.Card = CheckboxCard;\n"],"names":["CheckboxIcon","createVarsResolver","parseThemeColor","getSize","getRadius","getThemeColor","getAutoContrastValue","getContrastColor","factory","useProps","useCheckboxGroupContext","useStyles","CheckboxRootStyle","CheckboxInnerStyle","CheckboxInputStyle","CheckboxIconStyle","extractStyleProps","useId","jsx","InlineInput","jsxs","Box","CheckboxGroup","CheckboxIndicator","CheckboxCard"],"mappings":"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"}