import { h, type FunctionComponent } from 'preact' import { type ChangeEvent } from 'preact/compat' import { useCallback, useEffect, useRef, useState } from 'preact/hooks' import cn from 'classnames' type Styles = { base?: string element?: string label?: string touched?: string } & Record type Props = { autoFocus?: boolean className?: string defaultChecked?: any disabled?: boolean label?: string name?: string onChange?: (e: ChangeEvent) => void required?: boolean style: S value?: string } export default function checkboxFactory(styles: Styles) { const Checkbox: FunctionComponent> = ({ autoFocus, className, defaultChecked, disabled, name, label, onChange, required, style, value = 'true', }) => { const [touched, setTouched] = useState(false) const checkboxRef = useRef(null) const onBlur = useCallback(() => setTouched(true), []) useEffect(() => { const form = checkboxRef.current!.form! const resetTouched = setTouched.bind(null, false) form.addEventListener('reset', resetTouched) return () => form.removeEventListener('reset', resetTouched) }, []) useEffect(() => { if (autoFocus) checkboxRef.current!.focus() }, [autoFocus]) return ( ) } return Checkbox }