import { EventEmitter } from 'events';
import { type KnapsackPattern } from '@knapsack/types';
import type { KnapsackConfig } from '../types/knapsack-config';
declare const EVENTS: {
    CONFIG_READY: string;
    PATTERNS_DATA_READY: string;
    PATTERN_TEMPLATE_ADDED: string;
    PATTERN_TEMPLATE_CHANGED: string;
    PATTERN_TEMPLATE_REMOVED: string;
    PATTERN_ASSET_CHANGED: string;
    PATTERN_CONFIG_CHANGED: string;
    DESIGN_TOKENS_CHANGED: string;
    SHUTDOWN: string;
    REQUEST_RENDERER_CLIENT_RELOAD: string;
    APP_CLIENT_DATA_CHANGED: string;
};
export interface Event {
    type: string;
    data: Record<string, unknown>;
}
export interface PatternAssetChangedEvent extends Event {
    type: typeof EVENTS.PATTERN_ASSET_CHANGED;
    data: {
        /** File path */
        path: string;
    };
}
export interface PatternsDataReadyEvent extends Event {
    type: typeof EVENTS.PATTERNS_DATA_READY;
    data: {
        patterns: KnapsackPattern[];
    };
}
export interface PatternTemplateChangedEvent extends Event {
    type: typeof EVENTS.PATTERN_TEMPLATE_CHANGED;
    data: {
        path: string;
        renderer?: string;
    };
}
export interface DesignTokensChangedEvent extends Event {
    type: typeof EVENTS.DESIGN_TOKENS_CHANGED;
    data: Record<string, unknown>;
}
export interface ConfigReadyEvent extends Event {
    type: typeof EVENTS.CONFIG_READY;
    data: KnapsackConfig;
}
export interface RequestRendererClientReloadEvent extends Event {
    type: typeof EVENTS.REQUEST_RENDERER_CLIENT_RELOAD;
    data: {
        patternId?: string;
        templateId?: string;
        assetSetId?: string;
    };
}
export interface AppClientDataChangedEvent extends Event {
    type: typeof EVENTS.APP_CLIENT_DATA_CHANGED;
}
declare class KnapsackEventEmitter extends EventEmitter {
    debouncedEmit: ((eventName: string, eventData: any) => void) & {
        clear(): void;
    } & {
        flush(): void;
    };
    onPatternAssetChange(handle: (data: PatternAssetChangedEvent['data']) => void): void;
    emitPatternAssetChanged(data: PatternAssetChangedEvent['data']): void;
    onAppClientDataChange(handle: () => void): void;
    emitAppClientDataChanged(): void;
    onPatternsDataReady(handle: (event: PatternsDataReadyEvent['data']) => void): void;
    emitPatternsDataReady(data: PatternsDataReadyEvent['data']): void;
    onPatternTemplateChanged(handle: (data: PatternTemplateChangedEvent['data']) => void): void;
    emitPatternTemplateChanged(data: PatternTemplateChangedEvent['data']): void;
    onShutdown(handle: () => void): void;
    emitShutdown(): void;
    onDesignTokensChanged(handle: (data: DesignTokensChangedEvent['data']) => void): void;
    emitDesignTokensChanged(data?: DesignTokensChangedEvent['data']): void;
    onConfigReady(handle: (data: ConfigReadyEvent['data']) => void): void;
    emitConfigReady(data: ConfigReadyEvent['data']): void;
    onRequestRendererClientReload(handle: (data: RequestRendererClientReloadEvent['data']) => void): void;
    emitRequestRendererClientReload(data?: RequestRendererClientReloadEvent['data']): void;
}
export declare const knapsackEvents: KnapsackEventEmitter;
export {};
//# sourceMappingURL=events.d.ts.map