import type { AnnotationId, AnnotationMarkStates, AnnotationTypes } from '@atlaskit/adf-schema';
export interface AnnotationState<Type> {
    annotationType: Type;
    id: AnnotationId;
    state: AnnotationMarkStates | null;
}
export declare enum AnnotationUpdateEvent {
    SET_ANNOTATION_FOCUS = "SET_ANNOTATION_FOCUS",
    SET_ANNOTATION_STATE = "SET_ANNOTATION_STATE",
    REMOVE_ANNOTATION_FOCUS = "REMOVE_ANNOTATION_FOCUS",
    ON_ANNOTATION_CLICK = "ON_ANNOTATION_CLICK",
    DESELECT_ANNOTATIONS = "DESELECT_ANNOTATIONS"
}
type SetFocusPayload = Record<'annotationId', AnnotationId>;
export type OnAnnotationClickPayload = {
    annotationIds: Array<AnnotationId>;
    eventTarget: HTMLElement;
};
type SetStatePayload = Record<AnnotationId, AnnotationState<AnnotationTypes.INLINE_COMMENT>>;
export type AnnotationUpdateEventPayloads = {
    [AnnotationUpdateEvent.ON_ANNOTATION_CLICK]: OnAnnotationClickPayload;
    [AnnotationUpdateEvent.SET_ANNOTATION_FOCUS]: SetFocusPayload;
    [AnnotationUpdateEvent.SET_ANNOTATION_STATE]: SetStatePayload;
};
type Callback<T> = T extends keyof AnnotationUpdateEventPayloads ? (payload: AnnotationUpdateEventPayloads[T]) => void : () => void;
export declare class AnnotationUpdateEmitter {
    private emitter;
    emit<T extends keyof AnnotationUpdateEventPayloads>(event: T, params: AnnotationUpdateEventPayloads[T]): boolean;
    emit<T extends AnnotationUpdateEvent>(event: T): boolean;
    on<T extends AnnotationUpdateEvent>(event: T, listener: Callback<T>): void;
    off<T extends AnnotationUpdateEvent>(event: T, listener: Callback<T>): void;
    listeners(event: AnnotationUpdateEvent): Function[];
}
export {};
