import { Plugin, PluginSpec, PluginKey, Transaction, StateField, EditorState, EditorStateConfig } from "prosemirror-state"; import { EditorView } from "prosemirror-view"; /** * Extended StateField that overrides the `this` of all methods to be `StatefulPlugin` instead of just `Plugin` */ interface StatefulPluginStateField = StatefulPlugin> extends StateField { /** @inheritdoc */ init(this: TThis, config: EditorStateConfig, instance: EditorState): T; /** @inheritdoc */ apply(this: TThis, tr: Transaction, value: T, oldState: EditorState, newState: EditorState): T; /** @inheritdoc */ toJSON?: (this: TThis, value: T) => unknown; /** @inheritdoc */ fromJSON?: (this: TThis, config: EditorStateConfig, value: unknown, state: EditorState) => T; } export interface StatefulPluginSpec = StatefulPlugin> extends PluginSpec { /** @inheritdoc */ key: StatefulPluginKey; /** @inheritdoc */ state: StatefulPluginStateField | null; } export declare class StatefulPluginKey extends PluginKey { constructor(name?: string); /** @inheritdoc */ get(state: EditorState): StatefulPlugin | null | undefined; setMeta(tr: Transaction, data: T): Transaction; } export declare class StatefulPlugin extends Plugin { spec: StatefulPluginSpec; constructor(spec: StatefulPluginSpec); get transactionKey(): StatefulPluginKey; getMeta(tr: Transaction): T; } export declare class AsyncPluginKey extends StatefulPluginKey { constructor(name?: string); /** @inheritdoc */ setMeta(tr: Transaction, data: T): Transaction; setCallbackData(tr: Transaction, data: TCallback): Transaction; dispatchCallbackData(view: EditorView, data: TCallback): Transaction; } export interface AsyncPluginSpec extends StatefulPluginSpec> { key: AsyncPluginKey; asyncCallback: (view: EditorView, prevState: EditorState) => Promise; } /** * Shortcut wrapper for a plugin with async functionality; * Overrides the spec's `view` property to manually handle async functionality */ export declare class AsyncPlugin extends StatefulPlugin { constructor(spec: AsyncPluginSpec); /** @inheritdoc */ getMeta(tr: Transaction): T; getCallbackData(tr: Transaction): TCallback; } export {};