import type { ResolvedPos, Node as ProseMirrorNode, Mark, ParseOptions, NodeSpec, DOMOutputSpec, MarkSpec } from 'prosemirror-model';
import type { EditorView } from 'prosemirror-view';
import type { Messages } from './util/messages';
import type { Editor } from './Editor';
import type { Icons } from './util/icons';
import type { Feature } from './Feature';
export interface Commands {
}
export interface SchemaOptions extends EditorOptionsBase {
    /** Enable it if you want to generate a published content */
    published?: boolean;
}
interface EditorOptionsBase {
}
export interface EditorOptions extends EditorOptionsBase {
    readonly element: Element | HTMLElement;
    content: Content;
    /**
     * Add Features or Plugins to the editor
     *
     * @example
     * features: [
     *    HighlightMenu, // Add highlight menu
     *    Media,         // Adds support for embedding media (images, videos, etc.)
     *    Unsplash,      // Integrates with Unsplash
     * ]
     */
    features?: Feature[];
    /**
     * Customize built-in editor formatting options.
     *
     * By default, all formats are enabled (`true`).
     * Set a format to `false` to disable it.
     *
     * @example:
     * // This disables `<h3>` and blockquotes while keeping all other formats active.
     * formats: { h3: false, quote: false }
     */
    formats?: Partial<Record<keyof Formats, boolean>>;
    /**
     * Enables Markdown shortcuts.
     *
     * Converts Markdown-style text into rich formatting as you type or paste.
     *
     * Example shortcuts:
     * - `**bold**` → **bold**
     * - `*italic*` → *italic*
     * - `# Heading` → Heading
     * - `- List item` → • List item
     *
     * @default true
     */
    markdownShortcuts?: boolean;
    /**
     * Custom messages or translations for the editor's UI elements.
     * This is useful for localization or customizing default messages.
     * @example { mainPlaceholder: 'Tell your story...' }
     */
    messages: Messages;
    onUpdate?: ({ editor }: {
        editor: Editor;
    }) => void;
    parseOptions?: ParseOptions;
    /**
     * Additional attributes for the editor container element.
     * @example { role: 'textbox', id: 'editor-1' }
     */
    editorAttributes?: Record<string, string>;
    onCharacterCount?: ({ editor, charCount, wordCount, }: {
        editor: Editor;
        charCount: number;
        wordCount: number;
    }) => void;
    editable?: boolean;
    /** Customize Editor Icons as HTML content includes SVG */
    icons: Icons;
    /**
     * If `true`, the editor will check the content for errors on initialization.
     * Calling `onContentError` callback
     * Which can be used to show a warning or error message to the user.
     * @default false
     */
    errorOnInvalidContent?: boolean;
    onContentError?: ({ editor, error }: {
        editor: Editor;
        error: Error;
    }) => void;
    /**
     * Enables or disables automatic text direction detection based on the typed text.
     * useful for multilingual content.
     *
     * @default true
     */
    autoTextDirection?: boolean;
}
export interface Formats {
    /** Enables core editor functionality (Required). */
    core: false;
    /** Large heading (`<h3>`). */
    h3: false;
    /** Small heading (`<h4>`). */
    h4: false;
    /** Bold text (`<strong>`). */
    bold: false;
    /** Italic text (`<em>`). */
    italic: false;
    /** Hyperlinks (`<a>`). */
    link: false;
    /** Blockquotes and pull quotes (`<blockquote>`). */
    quote: false;
    /** Line break (`<br>`). */
    br: false;
    /** Inline code (`<code>`). */
    code: false;
    /** Section divider (`<hr>`). */
    divider: false;
    /** Bullet and numbered lists (`<ul>`, `<ol>`). */
    lists: false;
}
export interface NodeExtendedSpec extends NodeSpec {
    toDOM?: (props: {
        node: ProseMirrorNode;
        HTMLAttributes: Record<string, any>;
    }) => DOMOutputSpec;
}
export interface MarkExtendedSpec extends MarkSpec {
    toDOM?: (props: {
        mark: Mark;
        HTMLAttributes: Record<string, any>;
    }) => DOMOutputSpec;
}
export interface EmbedMedia {
    mediaId: string;
    title?: string;
    description?: string;
    authorName?: string;
    href?: string;
    domain?: string;
    iframeWidth?: number;
    iframeHeight?: number;
    thumbnailUrl?: string;
    thumbnailWidth?: number;
    thumbnailHeight?: number;
    thumbnailImageId?: string;
    iframeSrc?: string;
    /** Additional iframe element attributes */
    iframeAttr?: Record<string, string>;
}
export type Range = {
    from: number;
    to: number;
};
export type MarkRange = {
    mark: Mark;
    from: number;
    to: number;
};
export type NodeRange = {
    node: ProseMirrorNode;
    from: number;
    to: number;
};
export interface Trigger {
    char: string;
    allowSpaces: boolean;
    allowToIncludeChar: boolean;
    allowedPrefixes: string[] | null;
    startOfLine: boolean;
    $position: ResolvedPos;
}
export type SuggestionMatch = {
    range: Range;
    query: string;
    text: string;
} | null;
export interface SuggestionKeyDownProps {
    view: EditorView;
    event: KeyboardEvent;
    range: Range;
}
export type Predicate = (node: ProseMirrorNode) => boolean;
export type NodeWithPos = {
    node: ProseMirrorNode;
    pos: number;
};
export type ChangedRange = {
    oldRange: Range;
    newRange: Range;
};
export type HTMLContent = string;
export type JSONContent = {
    type?: string;
    attrs?: Record<string, any>;
    content?: JSONContent[];
    marks?: {
        type: string;
        attrs?: Record<string, any>;
        [key: string]: any;
    }[];
    text?: string;
    [key: string]: any;
};
export type Content = HTMLContent | JSONContent | JSONContent[] | null;
export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null;
export type TextSerializer = (props: {
    node: ProseMirrorNode;
    pos: number;
    parent: ProseMirrorNode;
    index: number;
    range: Range;
}) => string;
export type ExtendedRegExpMatchArray = RegExpMatchArray & {
    data?: Record<string, any>;
};
export type Image = {
    url: string;
    naturalWidth: number;
    naturalHeight: number;
    file: File;
};
export interface Attribute {
    default: any;
    rendered?: boolean;
    renderedOnMode?: 'published' | 'edit';
    toDOM?: (attributes: Record<string, any>) => Record<string, any>;
    parseDOM?: (element: HTMLElement) => any;
}
export interface GlobalAttribute {
    type: string;
    name: string;
    isModeMatch?: boolean;
    attribute: Attribute;
}
export type AddGlobalAttributes = Array<{
    mode?: 'published' | 'edit';
    types: string[];
    attributes: Record<string, Attribute>;
}>;
export interface GetHTMLOptions {
    /** If true, removes the title, subtitle, and kicker from the output (if they exist). */
    stripHeadlines?: boolean;
}
export {};
//# sourceMappingURL=types.d.ts.map