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 '../portal';
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
implements NodeView {
private domRef?;
private contentDOMWrapper?;
private reactComponent?;
private portalProviderAPI;
private _viewShouldUpdate?;
protected eventDispatcher?: EventDispatcher;
protected decorations: ReadonlyArray;
reactComponentProps: P;
view: EditorView;
getPos: getPosHandler;
contentDOM: HTMLElement | null | undefined;
node: PMNode;
key: string;
shouldRenderImmediatelyInPortal: boolean;
constructor(node: PMNode, view: EditorView, getPos: getPosHandler, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, reactComponentProps?: P, reactComponent?: React.ComponentType>, viewShouldUpdate?: shouldUpdate, shouldRenderImmediatelyInPortal?: 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(shouldSkipInitRender?: boolean): this;
private renderReactComponent;
createDomRef(): HTMLElement;
getContentDOM(): {
contentDOM?: HTMLElement | null | undefined;
dom: HTMLElement;
} | undefined;
handleRef: (node: HTMLElement | null) => void;
private _handleRef;
render(props: P, forwardRef?: ForwardRef): React.ReactElement | null;
update(node: PMNode, decorations: ReadonlyArray, _innerDecorations?: DecorationSource, validUpdate?: (currentNode: PMNode, newNode: PMNode) => boolean): boolean;
viewShouldUpdate(nextNode: PMNode, _decorations?: Array): 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>, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, props?: ReactComponentProps, viewShouldUpdate?: (nextNode: PMNode) => boolean): (node: PMNode, view: EditorView, getPos: getPosHandler) => ReactNodeView;
}