| 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 }; |
|
|