"""Event system for inter-component communication.""" from typing import Callable, Any, Dict, List import logging logger = logging.getLogger(__name__) class EventBus: """Simple publish/subscribe event system.""" def __init__(self): self._listeners: Dict[str, List[Callable]] = {} def on(self, event: str, callback: Callable) -> None: """Subscribe to an event.""" self._listeners.setdefault(event, []).append(callback) def off(self, event: str, callback: Callable) -> None: """Unsubscribe from an event.""" if event in self._listeners: self._listeners[event] = [cb for cb in self._listeners[event] if cb != callback] def emit(self, event: str, **data: Any) -> None: """Emit an event to all subscribers.""" for cb in self._listeners.get(event, []): try: cb(**data) except Exception as e: logger.error(f"Event handler error for '{event}': {e}") def clear(self) -> None: """Remove all listeners.""" self._listeners.clear()