'use client'; import { useEffect, useRef } from 'react'; export type FormEvent = { type: T; payload?: P; timestamp?: number; }; type EventListener = (event: T) => void; class EventBus { private listeners: Set> = new Set(); publish(event: T) { this.listeners.forEach(listener => listener({ ...event, timestamp: event.timestamp || Date.now(), })); } subscribe(listener: EventListener) { this.listeners.add(listener); return () => { this.listeners.delete(listener); }; } } export const events = new EventBus(); export function useEventListener( eventType: T, handler: (payload: P) => void ) { const savedHandler = useRef(handler); useEffect(() => { savedHandler.current = handler; }, [handler]); useEffect(() => { const listener = (event: FormEvent) => { if (event.type === eventType) { savedHandler.current(event.payload); } }; const unsubscribe = events.subscribe(listener); return () => unsubscribe(); }, [eventType]); }