import { Component } from 'react';
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
import type { EventDispatcher } from '../event-dispatcher';
import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
import type { ExtensionHandlers, ExtensionProvider, ReferenceEntity } from '../extensions';
import type { ProsemirrorGetPosHandler } from '../react-node-view';
import type { EditorAppearance } from '../types';
import type { ExtensionsPluginInjectionAPI } from './types';
export interface Props {
    editorView: EditorView;
    node: PMNode;
    getPos: ProsemirrorGetPosHandler;
    handleContentDOMRef: (node: HTMLElement | null) => void;
    extensionHandlers: ExtensionHandlers;
    extensionProvider?: Promise<ExtensionProvider>;
    references?: ReferenceEntity[];
    editorAppearance?: EditorAppearance;
    pluginInjectionApi: ExtensionsPluginInjectionAPI;
    eventDispatcher?: EventDispatcher;
    showMacroInteractionDesignUpdates?: boolean;
}
export interface State {
    extensionProvider?: ExtensionProvider;
    extensionHandlersFromProvider?: ExtensionHandlers;
    _privateProps?: {
        __hideFrame?: boolean;
    };
    activeChildIndex?: number;
    isNodeHovered?: boolean;
}
export declare class ExtensionComponent extends Component<Props, State> {
    private privatePropsParsed;
    state: State;
    mounted: boolean;
    UNSAFE_componentWillMount(): void;
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillUnmount(): void;
    UNSAFE_componentWillReceiveProps(nextProps: Props): void;
    getNodeRenderer: import("memoize-one").MemoizedFn<typeof getNodeRenderer>;
    getExtensionModuleNodePrivateProps: import("memoize-one").MemoizedFn<typeof getExtensionModuleNodePrivateProps>;
    setIsNodeHovered: (isHovered: boolean) => void;
    render(): JSX.Element | null;
    private setStateFromPromise;
    /**
     * Parses any private nodes once an extension provider is available.
     *
     * We do this separately from resolving a node renderer component since the
     * private props come from extension provider, rather than an extension
     * handler which only handles `render`/component concerns.
     */
    private parsePrivateNodePropsIfNeeded;
    private tryExtensionHandler;
    private handleExtension;
}
