import { useCallback, useState } from "react"; import type { Dispatch, SetStateAction } from "react"; type UseBooleanReturn = { value: boolean; setValue: Dispatch>; setTrue: () => void; setFalse: () => void; toggle: () => void; }; export default function useBoolean(defaultValue = false): UseBooleanReturn { if (typeof defaultValue !== "boolean") { throw new Error("defaultValue must be `true` or `false`"); } const [value, setValue] = useState(defaultValue); const setTrue = useCallback(() => { setValue(true); }, []); const setFalse = useCallback(() => { setValue(false); }, []); const toggle = useCallback(() => { setValue((x) => !x); }, []); return { value, setValue, setTrue, setFalse, toggle }; }