import React from 'react';
import type { EventDispatcher } from '@atlaskit/editor-common/event-dispatcher';
import type { PortalProviderAPI } from '@atlaskit/editor-common/portal';
import ReactNodeView from '@atlaskit/editor-common/react-node-view';
import type { getPosHandler } from '@atlaskit/editor-common/react-node-view';
import type { ReactComponentProps } from '@atlaskit/editor-common/react-node-view';
import type { ExtractInjectionAPI, getPosHandlerNode, PMPluginFactoryParams } from '@atlaskit/editor-common/types';
import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
import type { EditorView, Decoration, DecorationSource } from '@atlaskit/editor-prosemirror/view';
import type { SyncBlockStoreManager } from '@atlaskit/editor-synced-block-provider';
import type { SyncedBlockPlugin, SyncedBlockPluginOptions } from '../syncedBlockPluginType';
export interface SyncBlockNodeViewProps extends ReactComponentProps {
    api?: ExtractInjectionAPI<SyncedBlockPlugin>;
    eventDispatcher: EventDispatcher;
    getPos: getPosHandlerNode;
    isNodeNested?: boolean;
    node: PMNode;
    options: SyncedBlockPluginOptions | undefined;
    portalProviderAPI: PortalProviderAPI;
    syncBlockStore?: SyncBlockStoreManager;
    view: EditorView;
}
export declare class SyncBlock extends ReactNodeView<SyncBlockNodeViewProps> {
    private options;
    private api?;
    private syncBlockStore?;
    constructor(props: SyncBlockNodeViewProps);
    unsubscribe: (() => void) | undefined;
    createDomRef(): HTMLElement;
    validUpdate(currentNode: PMNode, newNode: PMNode): boolean;
    update(node: PMNode, decorations: ReadonlyArray<Decoration>, innerDecorations?: DecorationSource): boolean;
    render({ getPos }: SyncBlockNodeViewProps): React.JSX.Element | null;
    destroy(): void;
}
export interface SyncBlockNodeViewProperties {
    api?: ExtractInjectionAPI<SyncedBlockPlugin>;
    options: SyncedBlockPluginOptions | undefined;
    pmPluginFactoryParams: PMPluginFactoryParams;
}
export declare const syncBlockNodeView: (props: SyncBlockNodeViewProperties) => (node: PMNode, view: EditorView, getPos: getPosHandler) => ReactNodeView<SyncBlockNodeViewProps>;
