import type { MediaADFAttrs, RichMediaLayout as MediaSingleLayout } from '@atlaskit/adf-schema';
import type { InsertMediaVia } from '@atlaskit/editor-common/analytics';
import type { Dispatch } from '@atlaskit/editor-common/event-dispatcher';
import type { MediaProvider } from '@atlaskit/editor-common/provider-factory';
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
import type { Identifier } from '@atlaskit/media-client';
import type { MediaClientConfig } from '@atlaskit/media-core';
import type { MediaOptions, MediaState, MediaStateEventSubscriber, ProsemirrorGetPosHandler } from '../types';
import type { MediaPluginOptions } from '../types/media-plugin-options';
import type PickerFacade from './picker-facade';
export interface MediaNodeWithPosHandler {
    getPos: ProsemirrorGetPosHandler;
    node: PMNode;
}
export interface MediaPluginState {
    addPendingTask: (promise: Promise<any>) => void;
    allowInlineImages?: boolean;
    allowsUploads: boolean;
    allUploadsFinished: boolean;
    clone: () => MediaPluginState;
    currentMaxWidth?: number;
    destroy: () => void;
    dispatch?: Dispatch;
    editingMediaSinglePos?: number;
    element?: HTMLElement;
    findMediaNode: (id: string) => MediaNodeWithPosHandler | null;
    getMediaOptions: () => MediaPluginOptions;
    handleDrag: (dragState: 'enter' | 'leave') => void;
    handleMediaGroupUpdate: (oldNodes: PMNode[], newNodes: PMNode[]) => void;
    handleMediaNodeMount: (node: PMNode, getPos: ProsemirrorGetPosHandler) => void;
    handleMediaNodeRemoval: (node: PMNode | undefined, getPos: ProsemirrorGetPosHandler) => void;
    handleMediaNodeUnmount: (oldNode: PMNode) => void;
    ignoreLinks: boolean;
    insertFile: (mediaState: MediaState, onMediaStateChanged: MediaStateEventSubscriber, pickerType?: string, insertMediaVia?: InsertMediaVia) => void;
    isFullscreen: boolean;
    isIdentifierInEditorScope: (identifier: Identifier) => boolean;
    isMediaViewerVisible?: boolean;
    isResizing: boolean;
    lastAddedMediaSingleFileIds: {
        id: string;
        selectionPosition: number;
    }[];
    layout: MediaSingleLayout;
    mediaClientConfig?: MediaClientConfig;
    mediaNodes: MediaNodeWithPosHandler[];
    mediaOptions?: MediaOptions;
    mediaProvider?: MediaProvider;
    mediaViewerSelectedMedia?: MediaADFAttrs;
    onPopupPickerClose: () => void;
    onPopupToggle: (onPopupToogleCallback: (isOpen: boolean) => void) => void;
    options: MediaPluginOptions;
    pickerPromises: Array<Promise<PickerFacade>>;
    pickers: PickerFacade[];
    removeSelectedMediaContainer: () => boolean;
    resizingWidth: number;
    selectedMediaContainerNode: () => PMNode | undefined;
    setBrowseFn: (browseFn: () => void) => void;
    setIsResizing: (isResizing: boolean) => void;
    setMediaProvider: (mediaProvider?: Promise<MediaProvider>) => Promise<void>;
    setResizingWidth: (width: number) => void;
    setView: (view: EditorView) => void;
    showDropzone: boolean;
    showEditingDialog?: boolean;
    showMediaPicker: () => void;
    splitMediaGroup: () => boolean;
    subscribeToUploadInProgressState: (fn: (isUploading: boolean) => void) => void;
    trackOutOfScopeIdentifier: (identifier: Identifier) => void;
    unsubscribeFromUploadInProgressState: (fn: (isUploading: boolean) => void) => void;
    updateAndDispatch: (props: Partial<Pick<this, 'allowsUploads' | 'allUploadsFinished' | 'isFullscreen' | 'videoControlsWrapperRef'>>) => void;
    updateElement: () => void;
    updateMediaSingleNodeAttrs: (id: string, attrs: object) => undefined | boolean;
    uploadMediaClientConfig?: MediaClientConfig;
    videoControlsWrapperRef?: HTMLElement;
    waitForMediaUpload: boolean;
    waitForPendingTasks: (timeout?: number, lastTask?: Promise<MediaState | null>) => Promise<MediaState | null>;
}
export type EventInput = 'keyboard' | 'mouse' | 'floatingToolBar';
