import { useEffect, useState } from "react"; import type { TypedEmitter } from "tiny-typed-emitter"; type Events = { [K in Name]: (value: T) => void; }; interface UseFocusOutlineEventProps { value: T; ee: TypedEmitter>; event: Name; defaultIsOutlined?: boolean; } export function useFocusOutlineEvent({ value, ee, event, defaultIsOutlined = false, }: UseFocusOutlineEventProps) { const [isOutlined, setIsOutlined] = useState(defaultIsOutlined); useEffect(() => { ee.on(event, (focusValue: T) => { if (focusValue !== value) return; setIsOutlined(true); }); }, [ee, event, value]); useEffect(() => { if (!isOutlined) return; const timer = setTimeout(() => { setIsOutlined(false); }, 500); return () => { clearTimeout(timer); }; }, [isOutlined]); return isOutlined; }