import type { ExtensionConfig, isMarkActive as isMarkActiveFn, MarkConfig, markInputRule as markInputRuleFn, markPasteRule as markPasteRuleFn, mergeAttributes as mergeAttributesFn, NodeConfig, NodeViewRendererProps, textblockTypeInputRule as textblockTypeInputRuleFn } from '@tiptap/core'; import type { Node as ProsemirrorNode } from '@tiptap/pm/model'; import type { Plugin as IPlugin, PluginKey as IPluginKey, Selection } from '@tiptap/pm/state'; import type { Editor, JSONContent, NodeViewContent } from '@tiptap/react'; import type { ComponentType } from 'react'; import type { ComponentData } from 'ricos-content'; import type { Decoration_Type, DocumentStyle } from 'ricos-schema'; import type { LinkSettings, RicosEditorAPI, RicosServices, RicosTheme, TextAlignment } from '.'; import type { TFunction } from './commonTypes'; import type { EditorPlugin, LegacyEditorPluginConfig, Node_Type } from './pluginTypes'; export type PluginProps = NodeViewRendererProps & { settings: LegacyEditorPluginConfig; componentData: ComponentData; updateAttributes: (data: unknown) => null; selected: boolean; NodeViewContent: typeof NodeViewContent; }; export type RicosNodeProps = NodeViewRendererProps & RicosTiptapContextValue & { componentData: NodeViewRendererProps['node']['attrs']; }; export type TiptapExtensionConfig = NodeConfig | MarkConfig | RicosExtensionConfig; export declare const isNodeConfig: (c: TiptapExtensionConfig) => c is NodeConfig; export declare const isMarkConfig: (c: TiptapExtensionConfig) => c is MarkConfig; export declare const isExtensionConfig: (c: TiptapExtensionConfig) => c is RicosExtensionConfig; export type NodeHoc = (Component: ComponentType) => ComponentType; export type NodeViewHocMap = { [type: string]: NodeHoc[]; }; export type RicosTiptapContextValue = { context: { t?: TFunction; }; }; export interface RicosExtensionConfig extends ExtensionConfig { addNodeHoc?: () => NodeHocDescriptor; } export type NodeHocDescriptor = { nodeTypes: string[]; nodeHoc: NodeHoc; priority: number; }; export type Group = 'text' | 'spoilerable' | 'shortcuts-enabled' | 'overlay' | 'custom-styles' | 'resizable' | 'draggable' | 'no-trailing-node' | 'node-container' | 'footer-disabled' | 'hide-selection' | 'not-overtypable'; export type RicosNodeExtension = ReactRicosNodeExtension | HtmlRicosNodeExtension; export type RicosNodeExtensionBase = { name: Node_Type | string; groups: Group[]; settings?: Record; reconfigure?: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, config: NodeConfig, extensions: RicosExtension[], ricosProps: ExtensionProps, settings: Record, services: RicosServices) => NodeConfig; createExtensionConfig: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, { textblockTypeInputRule, mergeAttributes, markPasteRule, markInputRule, Plugin, PluginKey, }: { textblockTypeInputRule: typeof textblockTypeInputRuleFn; mergeAttributes: typeof mergeAttributesFn; markPasteRule: typeof markPasteRuleFn; markInputRule: typeof markInputRuleFn; Plugin: typeof IPlugin; PluginKey: typeof IPluginKey; }) => NodeConfig; placeholder?: { predicate: (PlaceholderProps: { doc: ProsemirrorNode; node: ProsemirrorNode; selection: Selection; pos: number; }) => boolean; content: string; alwaysVisible?: boolean; }; } & NodeType; type ReactRicosNode = { type: 'react-node'; Component: ComponentType; }; export type ReactRicosNodeExtension = RicosNodeExtensionBase; type HTMLRicosNode = { type: 'html-node'; }; export type HtmlRicosNodeExtension = RicosNodeExtensionBase; export type Mark_Type = Exclude<`${Decoration_Type}`, 'COLOR'> | 'COLOR_BACKGROUND' | 'COLOR_FOREGROUND' | 'HASHTAG'; export declare const Mark_Type: { [key in Mark_Type]: Mark_Type; }; export type RicosMarkExtension = { name: Mark_Type; type: 'mark'; groups: Group[]; settings?: Record; reconfigure?: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, config: MarkConfig, extensions: RicosExtension[], ricosProps: ExtensionProps, settings: Record, services: RicosServices) => MarkConfig; createExtensionConfig: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, { isMarkActive, textblockTypeInputRule, mergeAttributes, markPasteRule, markInputRule, Plugin, PluginKey, }: { isMarkActive: typeof isMarkActiveFn; textblockTypeInputRule: typeof textblockTypeInputRuleFn; mergeAttributes: typeof mergeAttributesFn; markPasteRule: typeof markPasteRuleFn; markInputRule: typeof markInputRuleFn; Plugin: typeof IPlugin; PluginKey: typeof IPluginKey; }) => MarkConfig; }; export type RicosFunctionalExtension = { name: string; type: 'extension'; groups: Group[]; placeholder?: { predicate: (PlaceholderProps: { doc: ProsemirrorNode; node: ProsemirrorNode; selection: Selection; pos: number; }) => boolean; content: string; alwaysVisible?: boolean; }; settings?: Record; reconfigure?: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, config: RicosExtensionConfig, extensions: RicosExtension[], ricosProps: ExtensionProps, settings: Record, services: RicosServices) => RicosExtensionConfig; createExtensionConfig: (this: Exclude, 'reconfigure' | 'createExtensionConfig'>, { mergeAttributes, }: { mergeAttributes: typeof mergeAttributesFn; }) => RicosExtensionConfig; }; export declare const isRicosNodeExtension: (ext: RicosExtension) => ext is RicosNodeExtension; export declare const isRicosMarkExtension: (ext: RicosExtension) => ext is RicosMarkExtension; export declare const isRicosFunctionalExtension: (ext: RicosExtension) => ext is RicosFunctionalExtension; export type RicosExtension = RicosNodeExtension | RicosMarkExtension | RicosFunctionalExtension; export interface TiptapEditorPlugin extends EditorPlugin { tiptapExtensions: RicosExtension[]; } export type { DOMOutputSpec } from '@tiptap/pm/model'; export { MarkConfig, NodeConfig }; export type ExtensionProps = { placeholder?: string; textAlignment?: TextAlignment; iframeSandboxDomain?: string; isTextWrap?: boolean; maxTextLength?: number; anchorTarget?: LinkSettings['anchorTarget']; rel?: LinkSettings['rel']; relValue?: LinkSettings['relValue']; breakoutRule?: NonNullable['rule']; }; export type HtmlAttributes = { autoCapitalize: string; /** * true/false enumeration as required by the HTML spec * @default: true */ spellCheck: 'true' | 'false'; autoComplete: string; autoCorrect: string; tabIndex: number; }; export type TiptapEditor = Editor; export interface TiptapAdapter { getEditorCommands: RicosEditorAPI['getEditorCommands']; getToolbarProps: RicosEditorAPI['getToolbarProps']; focus: RicosEditorAPI['focus']; blur: RicosEditorAPI['blur']; tiptapEditor: TiptapEditor; getDocumentStyle: () => DocumentStyle; setTiptapContent: (content: JSONContent) => void; } //# sourceMappingURL=tiptap.d.ts.map