index.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { RiCheckLine } from '@remixicon/react'
  2. import s from './index.module.css'
  3. import cn from '@/utils/classnames'
  4. type CheckboxProps = {
  5. checked?: boolean
  6. onCheck?: () => void
  7. className?: string
  8. disabled?: boolean
  9. mixed?: boolean
  10. }
  11. const Checkbox = ({ checked, onCheck, className, disabled, mixed }: CheckboxProps) => {
  12. if (!checked) {
  13. return (
  14. <div
  15. className={cn(
  16. 'h-4 w-4 cursor-pointer rounded-[4px] border border-components-checkbox-border bg-components-checkbox-bg-unchecked shadow-xs hover:border-components-checkbox-border-hover',
  17. mixed ? s.mixed : 'hover:bg-components-checkbox-bg-unchecked-hover',
  18. disabled && 'cursor-not-allowed border-components-checkbox-border-disabled bg-components-checkbox-bg-disabled hover:border-components-checkbox-border-disabled hover:bg-components-checkbox-bg-disabled',
  19. className,
  20. )}
  21. onClick={() => {
  22. if (disabled)
  23. return
  24. onCheck?.()
  25. }}
  26. ></div>
  27. )
  28. }
  29. return (
  30. <div
  31. className={cn(
  32. 'flex h-4 w-4 cursor-pointer items-center justify-center rounded-[4px] bg-components-checkbox-bg text-components-checkbox-icon shadow-xs hover:bg-components-checkbox-bg-hover',
  33. disabled && 'cursor-not-allowed bg-components-checkbox-bg-disabled-checked text-components-checkbox-icon-disabled hover:bg-components-checkbox-bg-disabled-checked',
  34. className,
  35. )}
  36. onClick={() => {
  37. if (disabled)
  38. return
  39. onCheck?.()
  40. }}
  41. >
  42. <RiCheckLine className={cn('h-3 w-3')} />
  43. </div>
  44. )
  45. }
  46. export default Checkbox