Kraft102's picture
fix(frontend): copy widgets locally for Vercel deployment
49f9107
import { useEffect, useCallback } from 'react';
interface NeuralEvent {
source: string;
data: any;
options?: { priority?: 'low' | 'medium' | 'high' | 'critical' };
}
type EventHandler = (event: NeuralEvent) => void;
class NeuralEventBus {
private listeners: Map<string, EventHandler[]> = new Map();
on(event: string, handler: EventHandler) {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event)?.push(handler);
}
off(event: string, handler: EventHandler) {
const handlers = this.listeners.get(event);
if (handlers) {
this.listeners.set(event, handlers.filter(h => h !== handler));
}
}
emit(event: string, neuralEvent: NeuralEvent) {
const handlers = this.listeners.get(event);
if (handlers) {
handlers.forEach(h => h(neuralEvent));
}
}
}
export const neuralEventBus = new NeuralEventBus();
export const emitNeuralEvent = (
event: string,
source: string,
data: any,
options?: { priority?: 'low' | 'medium' | 'high' | 'critical' }
) => {
neuralEventBus.emit(event, { source, data, options });
};
export const useNeuralEvent = (event: string, handler: (event: NeuralEvent) => void) => {
const stableHandler = useCallback(handler, []);
useEffect(() => {
neuralEventBus.on(event, stableHandler);
return () => {
neuralEventBus.off(event, stableHandler);
};
}, [event, stableHandler]);
};