import type { BaseMetadata, ThreadData } from "@liveblocks/client"; import type { EmbedBlock, ImageBlock, TextBlock } from "@prismicio/types-internal/lib/content"; import type { Node } from "@tiptap/core"; import type { Node as ProsemirrorNode, Schema } from "@tiptap/pm/model"; import type { BoldExtension } from "../extensions/Bold/BoldModel"; import type { Level } from "../extensions/Heading/Heading"; import type { ItalicExtension } from "../extensions/Italic/ItalicModel"; import type { LabelExtension } from "../extensions/Label/LabelModel"; import type { LinkExtension } from "../extensions/Link/LinkModel"; import type { ExtendedRichTextContent, ExtendedRichTextNodeType, TableBlock } from "../types"; export declare enum ExtensionType { Document = "document", Mark = "mark", Node = "node" } export declare enum NodeType { Text = "text", Embed = "embed", Image = "image", Table = "table" } export type Extension = WidgetExtension | DocumentExtension; export type WidgetExtension = MarkExtension | NodeExtension; export type ExtensionPlaceholder = string | ((nodeAttrs: ProsemirrorNode["attrs"]) => string | undefined) | undefined; export type DocumentConverterReturnType = { fromPrismic(id: string, schema: Schema, nodeTypes: Set, content: T, threads?: ThreadData[]): ProsemirrorNode | undefined; toPrismic(node: ProsemirrorNode): T | undefined; }; export declare class DocumentExtension { readonly name: string; readonly component: (multiLines: boolean) => Node; readonly converter: (extensions: NodeExtension[]) => DocumentConverterReturnType; extType: ExtensionType.Document; constructor(name: string, component: (multiLines: boolean) => Node, converter: (extensions: NodeExtension[]) => DocumentConverterReturnType); } export type MarkExtension = LinkExtension | BoldExtension | ItalicExtension | LabelExtension; export type NodeExtension = TextExtension | EmbedExtension | ImageExtension | TableExtension; export declare class TextExtension { readonly richTextNodeTypes: ExtendedRichTextNodeType[]; readonly name: string; readonly component: Node; readonly converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TextBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): TextBlock | readonly TextBlock[] | undefined; }; readonly placeholder?: ExtensionPlaceholder; readonly lockedFormat: boolean; extType: ExtensionType.Node; nodeType: NodeType.Text; constructor(richTextNodeTypes: ExtendedRichTextNodeType[], name: string, component: Node, converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TextBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): TextBlock | readonly TextBlock[] | undefined; }, placeholder?: ExtensionPlaceholder, lockedFormat?: boolean); } export declare function isTextExtension(extension: WidgetExtension): extension is TextExtension; export declare class EmbedExtension { readonly richTextNodeTypes: ExtendedRichTextNodeType[]; readonly name: string; readonly component: Node; readonly converter: { fromPrismic(schema: Schema): (elmt: EmbedBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): EmbedBlock | undefined; }; extType: ExtensionType; nodeType: NodeType.Embed; constructor(richTextNodeTypes: ExtendedRichTextNodeType[], name: string, component: Node, converter: { fromPrismic(schema: Schema): (elmt: EmbedBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): EmbedBlock | undefined; }); } export declare class ImageExtension { readonly richTextNodeTypes: ExtendedRichTextNodeType[]; readonly name: string; readonly component: Node; readonly converter: { fromPrismic(schema: Schema): (elmt: ImageBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): ImageBlock | undefined; }; extType: ExtensionType.Node; nodeType: NodeType.Image; constructor(richTextNodeTypes: ExtendedRichTextNodeType[], name: string, component: Node, converter: { fromPrismic(schema: Schema): (elmt: ImageBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): ImageBlock | undefined; }); } export declare class HeadingTextExtension extends TextExtension { readonly levels: readonly Level[]; constructor(richTextNodeTypes: ExtendedRichTextNodeType[], Component: Node, levels: readonly Level[], Converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TextBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): TextBlock | undefined; }, placeholder?: ExtensionPlaceholder); } export declare class ListExtension extends TextExtension { constructor(richTextNodeTypes: ExtendedRichTextNodeType[], name: string, Component: Node, Converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TextBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): readonly TextBlock[]; }); } export declare class TableExtension { readonly richTextNodeTypes: ExtendedRichTextNodeType[]; readonly name: string; readonly component: Node[]; readonly converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TableBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): TableBlock | undefined; }; extType: ExtensionType.Node; nodeType: NodeType.Table; constructor(richTextNodeTypes: ExtendedRichTextNodeType[], name: string, component: Node[], converter: { fromPrismic(id: string, schema: Schema, threads?: ThreadData[]): (elmt: TableBlock) => ProsemirrorNode | undefined; toPrismic(elmt: ProsemirrorNode): TableBlock | undefined; }); } export declare function isListExtension(extension: WidgetExtension): extension is ListExtension;