import { ActivityProvider } from '@uidu/activity-provider';
import { ErrorReportingHandler, ExtensionHandlers, ExtensionProvider, Providers, Transformer } from '@uidu/editor-common';
import { MentionProvider } from '@uidu/mentions';
import { TaskDecisionProvider } from '@uidu/task-decision';
import { Node, Schema } from 'prosemirror-model';
import { EditorView } from 'prosemirror-view';
import { ReactElement } from 'react';
import EditorActions from "../actions/index.js";
import { AnalyticsHandler } from "../analytics/handler.js";
import { AnnotationProvider } from "../plugins/annotation/types.js";
import { CollabEditOptions } from "../plugins/collab-edit/types.js";
import { MediaState } from "../plugins/media/types.js";
import { QuickInsertOptions } from "../plugins/quick-insert/types.js";
import { TextFormattingOptions } from "../plugins/text-formatting/types.js";
import { MenuItem } from "../ui/DropdownMenu/types.js";
import { EditorAppearance } from "./editor-appearance.js";
import { EditorOnChangeHandler } from "./editor-onchange.js";
import { EditorPlugin } from "./editor-plugin.js";
export declare type ReactComponents = ReactElement<any> | ReactElement<any>[];
export declare type FeedbackInfo = {
    product?: string;
    packageVersion?: string;
    packageName?: string;
    labels?: Array<string>;
};
export interface EditorProps {
    appearance?: EditorAppearance;
    children?: (editorProps: any) => any;
    containerElement?: HTMLElement | undefined;
    analyticsHandler?: AnalyticsHandler;
    contentComponents?: ReactComponents;
    primaryToolbarComponents?: ReactComponents;
    secondaryToolbarComponents?: ReactComponents;
    plugins?: (EditorPlugin[] | EditorPlugin)[];
    quickInsert?: QuickInsertOptions;
    allowExpand?: boolean | {
        allowInsertion?: boolean;
        allowInteractiveExpand?: boolean;
    };
    saveOnEnter?: boolean;
    shouldFocus?: boolean;
    disabled?: boolean;
    contextPanel?: ReactComponents;
    errorReporterHandler?: ErrorReportingHandler;
    uploadErrorHandler?: (state: MediaState) => void;
    activityProvider?: Promise<ActivityProvider>;
    annotationProvider?: AnnotationProvider;
    collabEditProvider?: Providers['collabEditProvider'];
    presenceProvider?: Promise<any>;
    emojiProvider?: Providers['emojiProvider'];
    taskDecisionProvider?: Promise<TaskDecisionProvider>;
    allowNestedTasks?: boolean;
    legacyImageUploadProvider?: Providers['imageUploadProvider'];
    mentionProvider?: Promise<MentionProvider>;
    tokenProvider?: Providers['tokenProvider'];
    autoformattingProvider?: Providers['autoformattingProvider'];
    macroProvider?: Providers['macroProvider'];
    waitForMediaUpload?: boolean;
    contentTransformerProvider?: (schema: Schema) => Transformer<string>;
    mediaProvider?: Providers['mediaProvider'];
    collabEdit?: CollabEditOptions;
    textFormatting?: TextFormattingOptions;
    maxHeight?: number;
    maxContentSize?: number;
    placeholder?: string;
    placeholderHints?: string[];
    placeholderBracketHint?: string;
    defaultValue?: Node | string | Object;
    popupsMountPoint?: HTMLElement;
    popupsBoundariesElement?: HTMLElement;
    popupsScrollableElement?: HTMLElement;
    insertMenuItems?: MenuItem[];
    editorActions?: EditorActions;
    onEditorReady?: (editorActions: EditorActions) => void;
    onDestroy?: () => void;
    onChange?: EditorOnChangeHandler;
    onSave?: (editorView: EditorView) => void;
    onCancel?: (editorView: EditorView) => void;
    extensionHandlers?: ExtensionHandlers;
    sanitizePrivateContent?: boolean;
    mentionInsertDisplayName?: boolean;
    inputSamplingLimit?: number;
    extensionProviders?: Array<ExtensionProvider>;
    transactionTracking?: {
        enabled: boolean;
        samplingRate?: number;
        slowThreshold?: number;
        outlierThreshold?: number;
        outlierFactor?: number;
    };
}
