// frontend\src\components\ui\Checkbox.tsx 'use client' import { useEffect, useRef } from 'react' type Props = { checked: boolean indeterminate?: boolean disabled?: boolean onChange: (checked: boolean) => void ariaLabel?: string id?: string name?: string className?: string } export default function Checkbox({ checked, indeterminate = false, disabled = false, onChange, ariaLabel, id, name, className = '', }: Props) { const ref = useRef(null) useEffect(() => { if (ref.current) { ref.current.indeterminate = indeterminate && !checked } }, [indeterminate, checked]) return (
onChange(e.target.checked)} className="col-start-1 row-start-1 appearance-none rounded-sm border border-gray-300 bg-white checked:border-indigo-600 checked:bg-indigo-600 indeterminate:border-indigo-600 indeterminate:bg-indigo-600 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:checked:bg-gray-100 dark:border-white/20 dark:bg-gray-900 dark:checked:border-indigo-500 dark:checked:bg-indigo-500 dark:indeterminate:border-indigo-500 dark:indeterminate:bg-indigo-500 dark:focus-visible:outline-indigo-500 dark:disabled:border-white/10 dark:disabled:bg-white/10 dark:disabled:checked:bg-white/10 forced-colors:appearance-auto" />
) }