index.tsx 1.5 KB

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