mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-03 20:33:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { RiCheckLine } from '@remixicon/react'
 | 
						|
import cn from '@/utils/classnames'
 | 
						|
import IndeterminateIcon from './assets/indeterminate-icon'
 | 
						|
 | 
						|
type CheckboxProps = {
 | 
						|
  id?: string
 | 
						|
  checked?: boolean
 | 
						|
  onCheck?: () => void
 | 
						|
  className?: string
 | 
						|
  disabled?: boolean
 | 
						|
  indeterminate?: boolean
 | 
						|
}
 | 
						|
 | 
						|
const Checkbox = ({
 | 
						|
    id,
 | 
						|
    checked,
 | 
						|
    onCheck,
 | 
						|
    className,
 | 
						|
    disabled,
 | 
						|
    indeterminate,
 | 
						|
}: CheckboxProps) => {
 | 
						|
  const checkClassName = (checked || indeterminate)
 | 
						|
    ? 'bg-components-checkbox-bg text-components-checkbox-icon hover:bg-components-checkbox-bg-hover'
 | 
						|
    : 'border border-components-checkbox-border bg-components-checkbox-bg-unchecked hover:bg-components-checkbox-bg-unchecked-hover hover:border-components-checkbox-border-hover'
 | 
						|
  const disabledClassName = (checked || indeterminate)
 | 
						|
    ? 'cursor-not-allowed bg-components-checkbox-bg-disabled-checked text-components-checkbox-icon-disabled hover:bg-components-checkbox-bg-disabled-checked'
 | 
						|
    : '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'
 | 
						|
 | 
						|
  return (
 | 
						|
    <div
 | 
						|
      id={id}
 | 
						|
      className={cn(
 | 
						|
        'flex h-4 w-4 cursor-pointer items-center justify-center rounded-[4px] shadow-xs shadow-shadow-shadow-3',
 | 
						|
        checkClassName,
 | 
						|
        disabled && disabledClassName,
 | 
						|
        className,
 | 
						|
      )}
 | 
						|
      onClick={() => {
 | 
						|
        if (disabled)
 | 
						|
          return
 | 
						|
        onCheck?.()
 | 
						|
      }}
 | 
						|
      data-testid={`checkbox-${id}`}
 | 
						|
    >
 | 
						|
      {!checked && indeterminate && <IndeterminateIcon />}
 | 
						|
      {checked && <RiCheckLine className='h-3 w-3' data-testid={`check-icon-${id}`} />}
 | 
						|
    </div>
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
export default Checkbox
 |