import { Naja, Options } from '../Naja';
import { TypedEventListener } from '../utils';
declare module '../Naja' {
    interface Payload {
        snippets?: Record<string, string>;
    }
}
export type SnippetUpdateOperation = ((snippet: Element, content: string) => void | Promise<void>) | {
    updateElement(snippet: Element, content: string): void | Promise<void>;
    updateIndex(currentContent: string, newContent: string): string;
};
export declare class SnippetHandler extends EventTarget {
    readonly op: Record<'replace' | 'prepend' | 'append', SnippetUpdateOperation>;
    constructor(naja: Naja);
    static findSnippets(predicate?: (snippet: Element) => boolean, document?: Document): Record<string, string>;
    updateSnippets(snippets: Record<string, string>, fromCache?: boolean, options?: Options): Promise<void>;
    updateSnippet(snippet: Element, content: string, fromCache: boolean, options: Options): Promise<void>;
    addEventListener: <K extends keyof SnippetHandlerEventMap | string>(type: K, listener: TypedEventListener<SnippetHandler, K extends keyof SnippetHandlerEventMap ? SnippetHandlerEventMap[K] : CustomEvent>, options?: boolean | AddEventListenerOptions) => void;
    removeEventListener: <K extends keyof SnippetHandlerEventMap | string>(type: K, listener: TypedEventListener<SnippetHandler, K extends keyof SnippetHandlerEventMap ? SnippetHandlerEventMap[K] : CustomEvent>, options?: boolean | AddEventListenerOptions) => void;
}
export type BeforeUpdateEvent = CustomEvent<{
    snippet: Element;
    content: string;
    fromCache: boolean;
    operation: SnippetUpdateOperation;
    changeOperation: (value: SnippetUpdateOperation) => void;
    options: Options;
}>;
export type PendingUpdateEvent = CustomEvent<{
    snippet: Element;
    content: string;
    fromCache: boolean;
    operation: SnippetUpdateOperation;
    options: Options;
}>;
export type AfterUpdateEvent = CustomEvent<{
    snippet: Element;
    content: string;
    fromCache: boolean;
    operation: SnippetUpdateOperation;
    options: Options;
}>;
interface SnippetHandlerEventMap {
    beforeUpdate: BeforeUpdateEvent;
    pendingUpdate: PendingUpdateEvent;
    afterUpdate: AfterUpdateEvent;
}
export {};
