import * as Ariakit from '@ariakit/react'; import { getClassNames } from '@websolutespa/bom-core'; import { forwardRef, useContext } from 'react'; import styled from 'styled-components'; import { UIComponentWithRef, UIStyledComponentProps } from '../../components/types'; import { getCssResponsive } from '../../components/utils'; import { getVariantKey, useVariants } from '../../variants'; import { CheckboxIcon } from './checkbox-icon'; import { CheckboxContext } from './checkbox.context'; import { checkboxVariants, ICheckboxVariants } from './checkbox.variants'; const StyledCheckbox = styled.div` ${props => getVariantKey('checkbox', props.variant, props.variants)} ${props => getCssResponsive(props)} `; const StyledCheckboxInput = styled(Ariakit.Checkbox) ` ${props => getVariantKey('input', props.variant, props.variants)} `; const StyledCheckboxIcon = styled(CheckboxIcon) ` ${props => getVariantKey('icon', props.variant, props.variants)} `; type Props = { variant?: keyof typeof checkboxVariants | (string & {}); variants?: ICheckboxVariants; }; export type CheckboxProps = Ariakit.CheckboxProps & UIStyledComponentProps; export type CheckboxComponent = UIComponentWithRef; export const Checkbox: CheckboxComponent = forwardRef( function Checkbox({ className, variant = 'default', variants, ...props }, ref) { const context = useContext(CheckboxContext); const classNames = getClassNames('checkbox', className); const globalVariants = useVariants('checkbox', checkboxVariants); variants = variants || globalVariants; return ( ); } );