{"version":3,"file":"RadioIndicator.cjs","sources":["../../../../src/components/Radio/RadioIndicator/RadioIndicator.tsx"],"sourcesContent":["import {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  ElementProps,\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 { useRadioCardContext } from '../RadioCard/RadioCard.context';\nimport { RadioIcon, RadioIconProps } from '../RadioIcon';\nimport { RadioIndicatorIconStyle, RadioIndicatorStyle } from './RadioIndicator.css';\n\nexport type RadioIndicatorStylesNames = 'indicator' | 'icon';\nexport type RadioIndicatorVariant = 'filled' | 'outline';\nexport type RadioIndicatorCssVariables = {\n  indicator:\n    | '--radio-size'\n    | '--radio-radius'\n    | '--radio-color'\n    | '--radio-icon-color'\n    | '--radio-icon-size';\n};\n\nexport interface RadioIndicatorProps\n  extends BoxProps,\n    StylesApiProps<RadioIndicatorFactory>,\n    ElementProps<'div'> {\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  /** 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  /** A component that replaces default check icon */\n  icon?: React.FC<RadioIconProps>;\n\n  /** Determines whether the component should have checked styles */\n  checked?: boolean;\n\n  /** Determines whether the component should have disabled styles */\n  disabled?: boolean;\n}\n\nexport type RadioIndicatorFactory = Factory<{\n  props: RadioIndicatorProps;\n  ref: HTMLDivElement;\n  stylesNames: RadioIndicatorStylesNames;\n  vars: RadioIndicatorCssVariables;\n  variant: RadioIndicatorVariant;\n}>;\n\nconst defaultProps: Partial<RadioIndicatorProps> = {\n  icon: RadioIcon,\n};\n\nconst varsResolver = createVarsResolver<RadioIndicatorFactory>(\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      indicator: {\n        '--radio-size': getSize(size, 'radio-size'),\n        '--radio-radius': radius === undefined ? undefined : getRadius(radius),\n        '--radio-color': variant === 'outline' ? outlineColor : getThemeColor(color, theme),\n        '--radio-icon-size': getSize(size, 'radio-icon-size'),\n        '--radio-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 RadioIndicator = factory<RadioIndicatorFactory>((_props, ref) => {\n  const props = useProps('RadioIndicator', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    icon,\n    radius,\n    color,\n    iconColor,\n    autoContrast,\n    checked,\n    mod,\n    variant,\n    disabled,\n    ...others\n  } = props;\n  const Icon = icon!;\n\n  const getStyles = useStyles<RadioIndicatorFactory>({\n    name: 'RadioIndicator',\n    classes: {\n      indicator: RadioIndicatorStyle,\n      icon: RadioIndicatorIconStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n    rootSelector: 'indicator',\n  });\n\n  const ctx = useRadioCardContext();\n  const _checked = typeof checked === 'boolean' ? checked : ctx?.checked || false;\n\n  return (\n    <Box\n      ref={ref}\n      {...getStyles('indicator', { variant })}\n      variant={variant}\n      mod={[{ checked: _checked, disabled }, mod]}\n      {...others}\n    >\n      <Icon {...getStyles('icon')} />\n    </Box>\n  );\n});\n\nRadioIndicator.displayName = '@raikou/core/RadioIndicator';\n"],"names":["RadioIcon","createVarsResolver","parseThemeColor","getSize","getRadius","getThemeColor","getAutoContrastValue","getContrastColor","factory","useProps","useStyles","RadioIndicatorStyle","RadioIndicatorIconStyle","useRadioCardContext","jsx","Box"],"mappings":"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"}