import type { ErrorReportingHandler } from '@atlaskit/editor-common/utils';
import type { MediaFeatureFlags } from '@atlaskit/media-common/mediaFeatureFlags';
import type { MediaClientConfig } from '@atlaskit/media-core';
import type { UploadEndEventPayload, UploadErrorEventPayload, UploadParams, UploadPreviewUpdateEventPayload } from '@atlaskit/media-picker/types';
import type { CustomMediaPicker, MediaState, MobileUploadEndEventPayload } from './types';
export type PickerType = 'clipboard' | 'dropzone' | 'customMediaPicker';
export type ExtendedComponentConfigs = {
    customMediaPicker: CustomMediaPicker;
    dropzone: null;
    clipboard: null;
};
export type PickerFacadeConfig = {
    mediaClientConfig: MediaClientConfig;
    errorReporter: ErrorReportingHandler;
    featureFlags?: MediaFeatureFlags;
};
export type MediaStateEvent = MediaState;
export type MediaStateEventListener = (evt: MediaStateEvent) => void;
export type MediaStateEventSubscriber = (listener: MediaStateEventListener) => void;
export type NewMediaEvent = (state: MediaState, onStateChanged: MediaStateEventSubscriber, pickerType?: string) => void;
export default class PickerFacade {
    readonly config: PickerFacadeConfig;
    readonly pickerConfig?: CustomMediaPicker | null | undefined;
    private picker?;
    private onDragListeners;
    private pickerType;
    private onStartListeners;
    private eventListeners;
    private analyticsName;
    erroredFiles: Set<string>;
    constructor(pickerType: PickerType, config: PickerFacadeConfig, pickerConfig?: CustomMediaPicker | null | undefined, analyticsName?: string);
    init(): Promise<PickerFacade>;
    get type(): PickerType;
    get mediaPicker(): CustomMediaPicker | undefined;
    destroy(): void;
    setUploadParams(params: UploadParams): void;
    onNewMedia(cb: NewMediaEvent): void;
    onDrag(cb: (state: 'enter' | 'leave') => any): void;
    handleUploadPreviewUpdate: (event: UploadPreviewUpdateEventPayload) => void;
    private subscribeStateChanged;
    handleUploadError: ({ error, fileId }: UploadErrorEventPayload) => void;
    handleMobileUploadEnd: (event: MobileUploadEndEventPayload) => void;
    handleReady: (event: UploadEndEventPayload) => void;
}
