type EventCallback = (...args: any[]) => void; class EventEmitter { private events: Map = new Map(); on(event: string, callback: EventCallback) { if (!this.events.has(event)) { this.events.set(event, []); } this.events.get(event)!.push(callback); } off(event: string, callback: EventCallback) { if (!this.events.has(event)) return; const callbacks = this.events.get(event)!; const index = callbacks.indexOf(callback); if (index > -1) { callbacks.splice(index, 1); } } emit(event: string, ...args: any[]) { if (!this.events.has(event)) return; this.events.get(event)!.forEach(callback => callback(...args)); } } export const eventEmitter = new EventEmitter(); export const EVENT_TYPES = { USER_INFO_UPDATED: 'USER_INFO_UPDATED', MATERIAL_IMPORTED: 'MATERIAL_IMPORTED' } as const;