import { Schema } from 'prosemirror-model';
import { MarkdownSerializer, MarkdownParser } from 'prosemirror-markdown';

type UnnestObjValue<T> = T extends {
    [k: string]: infer U;
} ? U : never;
type MarkdownNodeConfig = {
    toMarkdown: UnnestObjValue<MarkdownSerializer['nodes']>;
    parseMarkdown?: MarkdownParser['tokens'];
};
type MarkdownMarkConfig = {
    toMarkdown: UnnestObjValue<MarkdownSerializer['marks']>;
    parseMarkdown?: MarkdownParser['tokens'];
};
type MarkdownSpec = {
    id: string;
    markdown?: {
        nodes?: Record<string, MarkdownNodeConfig>;
        marks?: Record<string, MarkdownMarkConfig>;
    };
};
declare function markdownLoader(items: Array<MarkdownSpec>, schema: Schema, tokenizers?: ConstructorParameters<typeof MarkdownParser>[1], serializerOptions?: ConstructorParameters<typeof MarkdownSerializer>[2]): {
    parser: MarkdownParser;
    serializer: MarkdownSerializer;
};

export { type MarkdownMarkConfig, type MarkdownNodeConfig, markdownLoader };
