import React from 'react';
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
import type { Decoration, DecorationSource, EditorView, NodeView } from '@atlaskit/editor-prosemirror/view';
import type { EventDispatcher } from '../event-dispatcher';
import type { PortalProviderAPI } from '../ui/PortalProvider';
import type { ForwardRef, getPosHandler, ProsemirrorGetPosHandler, ReactComponentProps, shouldUpdate } from './types';
export type { getPosHandler, ReactComponentProps, shouldUpdate, ProsemirrorGetPosHandler, ForwardRef, };
export type { InlineNodeViewComponentProps } from './getInlineNodeViewProducer';
export { getInlineNodeViewProducer, inlineNodeViewClassname, } from './getInlineNodeViewProducer';
export default class ReactNodeView<P = ReactComponentProps> implements NodeView {
    private domRef?;
    private contentDOMWrapper?;
    private reactComponent?;
    private portalProviderAPI;
    private hasAnalyticsContext;
    private _viewShouldUpdate?;
    protected eventDispatcher?: EventDispatcher;
    private hasIntlContext;
    protected decorations: ReadonlyArray<Decoration>;
    reactComponentProps: P;
    view: EditorView;
    getPos: getPosHandler;
    contentDOM: HTMLElement | null | undefined;
    node: PMNode;
    constructor(node: PMNode, view: EditorView, getPos: getPosHandler, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, reactComponentProps?: P, reactComponent?: React.ComponentType<React.PropsWithChildren<any>>, hasAnalyticsContext?: boolean, viewShouldUpdate?: shouldUpdate, hasIntlContext?: boolean);
    /**
     * This method exists to move initialization logic out of the constructor,
     * so object can be initialized properly before calling render first time.
     *
     * Example:
     * Instance properties get added to an object only after super call in
     * constructor, which leads to some methods being undefined during the
     * first render.
     */
    init(): this;
    private renderReactComponent;
    createDomRef(): HTMLElement;
    getContentDOM(): {
        dom: HTMLElement;
        contentDOM?: HTMLElement | null | undefined;
    } | undefined;
    handleRef: (node: HTMLElement | null) => void;
    private _handleRef;
    render(props: P, forwardRef?: ForwardRef): React.ReactElement<any> | null;
    update(node: PMNode, decorations: ReadonlyArray<Decoration>, _innerDecorations?: DecorationSource, validUpdate?: (currentNode: PMNode, newNode: PMNode) => boolean): boolean;
    viewShouldUpdate(nextNode: PMNode, decorations?: Array<Decoration>): boolean;
    /**
     * Copies the attributes from a ProseMirror Node to a DOM node.
     * @param node The Prosemirror Node from which to source the attributes
     */
    setDomAttrs(node: PMNode, element: HTMLElement): void;
    get dom(): HTMLElement;
    destroy(): void;
    private dispatchAnalyticsEvent;
    static fromComponent(component: React.ComponentType<React.PropsWithChildren<any>>, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, props?: ReactComponentProps, viewShouldUpdate?: (nextNode: PMNode) => boolean, hasIntlContext?: boolean): (node: PMNode, view: EditorView, getPos: getPosHandler) => ReactNodeView<ReactComponentProps>;
}
