import { ElementType } from '../portfolio/types.js'; import { IElement, IElementMetadata } from '../types/elements/IElement.js'; export type ElementLifecycleEvent = 'element:load:start' | 'element:load:success' | 'element:load:error' | 'element:save:start' | 'element:save:success' | 'element:save:error' | 'element:delete:start' | 'element:delete:success' | 'element:delete:error' | 'element:activate' | 'element:deactivate' | 'element:cache:refresh' | 'element:cache:evict' | 'element:external-change' | 'element:lock-timeout'; export interface ElementEventPayload { correlationId: string; elementType: ElementType; elementId?: string; filePath?: string; metadata?: Partial; generation?: number; error?: unknown; extra?: Record; } export type ElementEventHandler = (payload: ElementEventPayload) => void | Promise; /** * Lightweight dispatcher for element lifecycle events. * Provides minimal EventEmitter wrapper with immutable payload semantics. */ export declare class ElementEventDispatcher { private readonly emitter; private static shared; /** * Subscribe to an event. Returns an unsubscribe function. */ on(event: ElementLifecycleEvent, handler: ElementEventHandler): () => void; /** * Subscribe once. */ once(event: ElementLifecycleEvent, handler: ElementEventHandler): () => void; /** * Emit synchronously (used for start/veto events). */ emit(event: ElementLifecycleEvent, payload: ElementEventPayload): void; /** * Emit asynchronously to decouple observers. */ emitAsync(event: ElementLifecycleEvent, payload: ElementEventPayload): void; /** * Utility helper to snapshot minimal metadata from element instances. */ static snapshotMetadata(element?: IElement): Partial | undefined; /** * Shared singleton dispatcher used when managers don't inject their own. */ static getSharedDispatcher(): ElementEventDispatcher; } //# sourceMappingURL=ElementEventDispatcher.d.ts.map