import type { PropsWithChildren } from 'react';
import type { Node as PMNode, NodeType, Schema } from '@atlaskit/editor-prosemirror/model';
import type { ExtensionHandlers } from '@atlaskit/editor-common/extensions';
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
import type { EventHandlers } from '@atlaskit/editor-common/ui';
import type { AnalyticsEventPayload } from '../analytics/events';
import type { Serializer } from '../serializer';
import type { RendererAppearance, HeadingAnchorLinksProps, RendererContentMode, NestedRendererType } from '../ui/Renderer/types';
import type { AnnotationId, AnnotationTypes } from '@atlaskit/adf-schema';
export interface RendererContext {
    adDoc?: any;
    containerAri?: string;
    nestedRendererType?: NestedRendererType;
    objectAri?: string;
    schema?: Schema;
}
export interface NodeMeta {
    [key: string]: any;
    allowCopyToClipboard?: boolean;
    allowCustomPanels?: boolean;
    allowHeadingAnchorLinks?: HeadingAnchorLinksProps;
    allowPlaceholderText?: boolean;
    allowWrapCodeBlock?: boolean;
    asInline?: 'on' | undefined;
    content?: {
        [key: string]: any;
    } | null;
    dataAttributes: {
        'data-renderer-start-pos': number;
    };
    eventHandlers?: EventHandlers | undefined;
    extensionHandlers?: ExtensionHandlers | undefined;
    fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
    marks: PMNode['marks'];
    nodeType: NodeType['name'];
    portal?: HTMLElement | undefined;
    providers?: ProviderFactory | undefined;
    rendererAppearance?: RendererAppearance;
    rendererContentMode?: RendererContentMode;
    rendererContext?: RendererContext;
    serializer: Serializer<JSX.Element>;
    text?: PMNode['text'];
}
export interface MarkMeta {
    [key: string]: any;
    dataAttributes: {
        'data-block-mark'?: true;
        'data-renderer-mark': true;
    };
    eventHandlers?: EventHandlers;
    fireAnalyticsEvent?: (event: AnalyticsEventPayload) => void;
    isInline?: boolean;
    markKey?: any;
}
export interface AnnotationMarkMeta extends MarkMeta {
    allowAnnotations: boolean;
    annotationParentIds: string[];
    annotationType: AnnotationTypes;
    id: AnnotationId;
    isMediaInline?: boolean;
    useBlockLevel?: boolean;
}
export type NodeProps<NodeAttrs = Object> = NodeAttrs & PropsWithChildren<NodeMeta>;
export type MarkProps<MarkAttrs = Object> = MarkAttrs & PropsWithChildren<MarkMeta>;
export type TextHighlighter = {
    component: React.ComponentType<{
        children: React.ReactNode;
        groups: Array<string> | undefined;
        marks: Set<string>;
        match: string;
        startPos: number;
    }>;
    pattern: RegExp;
};
export interface ExtensionViewportSize {
    extensionId?: string;
    viewportSize?: string;
}
