import type React from 'react';
import Loadable from 'react-loadable';
import type { Fragment, Node, Mark } from '@atlaskit/editor-prosemirror/model';
import { type EventHandlers } from '@atlaskit/editor-common/ui';
import Blockquote from './blockquote';
import BodiedExtension from './bodiedExtension';
import MultiBodiedExtension from './multiBodiedExtension';
import ExtensionFrame from './extensionFrame';
import BulletList from './bulletList';
import Doc, { DocWithSelectAllTrap } from './doc';
import Extension from './extension';
import HardBreak from './hardBreak';
import Heading from './heading';
import InlineExtension from './inlineExtension';
import LayoutSection from './layoutSection';
import LayoutColumn from './layoutColumn';
import ListItem from './listItem';
import Caption from './caption';
import OrderedList from './orderedList';
import Paragraph from './paragraph';
import Placeholder from './placeholder';
import Rule from './rule';
import Table from './table';
import { TableCell } from './tableCell';
import TableRow from './tableRow';
import UnknownBlock from './unknownBlock';
import type { NodeComponentsProps, RendererAppearance } from '../../ui/Renderer/types';
import type { RichMediaLayout, DatasourceAttributeProperties } from '@atlaskit/adf-schema';
import type { MediaInlineAttrs } from '@atlaskit/editor-common/media-inline';
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
import type { Diff } from '@atlaskit/editor-common/utils';
import type { MediaFeatureFlags } from '@atlaskit/media-common';
import type { WithIntlProps, WrappedComponentProps } from 'react-intl';
import type { MediaSSR } from '../../types/mediaOptions';
import type { SmartLinksOptions } from '../../types/smartLinksOptions';
import type { ExpandProps } from '../../ui/Expand';
import type { WithSmartCardStorageProps } from '../../ui/SmartCardStorage';
import type { NodeProps } from '../types';
import type { Props as CodeBlockNodeProps } from './codeBlock/codeBlock';
import type { Props as DateNodeProps } from './date';
import type { Props as DecisionListNodeProps } from './decisionList';
import type { EmojiProps } from './emoji';
import type { InlineCardProps } from './inlineCard';
import type { MediaProps } from './media';
import type { MediaGroupProps } from './mediaGroup';
import type { Props as MediaSingleNodeProps } from './mediaSingle';
import type { Props as MentionNodeProps } from './mention';
import type { Props as PanelNodeProps } from './panel';
import type { Props as StatusNodeProps } from './status';
import type { Props as TaskItemNodeProps } from './taskItem';
import type { Props as TaskListNodeProps } from './taskList';
declare const WindowedCodeBlock: React.ComponentType<CodeBlockNodeProps> & Loadable.LoadableComponent;
declare const CodeBlock: React.ComponentType<WithIntlProps<CodeBlockNodeProps & WrappedComponentProps>> & Loadable.LoadableComponent;
declare const TaskList: React.ComponentType<TaskListNodeProps> & Loadable.LoadableComponent;
declare const TaskItem: React.ComponentType<NodeProps<TaskItemNodeProps>> & Loadable.LoadableComponent;
declare const DecisionList: React.ComponentType<DecisionListNodeProps> & Loadable.LoadableComponent;
declare const DecisionItem: React.ComponentType<NodeProps> & Loadable.LoadableComponent;
declare const Date: React.ComponentType<DateNodeProps> & Loadable.LoadableComponent;
declare const Status: React.ComponentType<StatusNodeProps> & Loadable.LoadableComponent;
declare const Emoji: React.ComponentType<EmojiProps> & Loadable.LoadableComponent;
declare const Panel: React.ComponentType<PanelNodeProps> & Loadable.LoadableComponent;
declare const EmbedCard: React.ComponentType<{
    data?: object;
    eventHandlers?: EventHandlers;
    isInsideOfBlockNode?: boolean;
    isInsideOfInlineExtension?: boolean;
    layout: RichMediaLayout;
    onSetLinkTarget?: (url: string) => '_blank' | undefined;
    originalHeight?: number;
    originalWidth?: number;
    portal?: HTMLElement;
    rendererAppearance?: RendererAppearance;
    smartLinks?: SmartLinksOptions;
    url?: string;
    width?: number;
}> & Loadable.LoadableComponent;
declare const InlineCard: React.ComponentType<Diff<InlineCardProps & WithSmartCardStorageProps, WithSmartCardStorageProps>> & Loadable.LoadableComponent;
declare const BlockCard: React.ComponentType<{
    data?: object;
    datasource?: DatasourceAttributeProperties;
    eventHandlers?: EventHandlers;
    isNodeNested?: boolean;
    layout?: string;
    localId?: string;
    onSetLinkTarget?: (url: string) => '_blank' | undefined;
    portal?: HTMLElement;
    rendererAppearance?: RendererAppearance;
    smartLinks?: SmartLinksOptions;
    url?: string;
}> & Loadable.LoadableComponent;
declare const Media: React.ComponentType<React.PropsWithChildren<MediaProps>> & Loadable.LoadableComponent;
declare const MediaGroup: React.ComponentType<MediaGroupProps> & Loadable.LoadableComponent;
declare const MediaInline: React.ComponentType<WithIntlProps<{
    collection?: string;
    eventHandlers?: EventHandlers;
    fallbackMediaNameFetcher?: (id: string) => Promise<string>;
    featureFlags?: MediaFeatureFlags;
    id: string;
    marks?: Array<Mark>;
    providers: ProviderFactory;
    rendererAppearance?: RendererAppearance;
    ssr?: MediaSSR;
} & WrappedComponentProps & MediaInlineAttrs>> & Loadable.LoadableComponent;
declare const MediaSingle: React.ComponentType<WithIntlProps<MediaSingleNodeProps & WrappedComponentProps>> & Loadable.LoadableComponent;
declare const Mention: React.ComponentType<MentionNodeProps> & Loadable.LoadableComponent;
declare const Expand: React.ComponentType<WithIntlProps<ExpandProps & WrappedComponentProps>> & Loadable.LoadableComponent;
export declare const nodeToReact: {
    [key: string]: React.ComponentType<React.PropsWithChildren<any>>;
};
interface ToReactFlags {
    allowSelectAllTrap?: boolean;
    allowWindowedCodeBlock?: boolean;
}
export declare const toReact: (node: Node, flags?: ToReactFlags, nodeComponents?: NodeComponentsProps) => React.ComponentType<React.PropsWithChildren<any>>;
export interface TextWrapper {
    content: Node[];
    nodeSize: number;
    type: {
        name: 'textWrapper';
    };
}
interface NodeSimple {
    attrs?: any;
    nodeSize: number;
    text?: string;
    type: {
        name: string;
    };
}
export declare const mergeTextNodes: (nodes: (Node | NodeSimple)[]) => (Node | TextWrapper | NodeSimple)[];
export declare const isText: (type: string) => type is "text";
export declare const isTextWrapper: (node: Node | TextWrapper | NodeSimple) => node is TextWrapper;
export declare function isTextNode(node: Node | Mark): node is Node;
/**
 * Detects whether a fragment contains a single paragraph node
 * whose content satisfies the condition for an emoji block
 */
export declare const isEmojiDoc: (doc: Fragment) => boolean;
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, WindowedCodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, ExtensionFrame, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaInline, MediaSingle, Mention, MultiBodiedExtension, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard, };
