| import * as React from 'react'; | |
| import { Check } from 'lucide-react'; | |
| import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; | |
| import { cn } from '~/utils'; | |
| type BaseCheckboxProps = Omit< | |
| React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>, | |
| 'aria-label' | 'aria-labelledby' | |
| > & { | |
| asChild?: boolean; | |
| }; | |
| export type CheckboxProps = | |
| | (BaseCheckboxProps & { | |
| 'aria-label': string; | |
| 'aria-labelledby'?: never; | |
| }) | |
| | (BaseCheckboxProps & { | |
| 'aria-labelledby': string; | |
| 'aria-label'?: never; | |
| }); | |
| const Checkbox = React.forwardRef<React.ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>( | |
| ({ className = '', ...props }, ref) => ( | |
| <CheckboxPrimitive.Root | |
| ref={ref} | |
| className={cn( | |
| 'peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground', | |
| className, | |
| )} | |
| {...props} | |
| > | |
| <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center')}> | |
| <Check className="h-4 w-4" /> | |
| </CheckboxPrimitive.Indicator> | |
| </CheckboxPrimitive.Root> | |
| ), | |
| ); | |
| Checkbox.displayName = CheckboxPrimitive.Root.displayName; | |
| export { Checkbox }; | |