New

docx-editor 1.x has shipped. Vue support, i18n, agents. Read the migration guide →

API Referencev1.0.2

@eigenpal/docx-editor-core/prosemirror/extensions

Extension System — Barrel Export

Functions(13)

Create a transaction that clears the change tracker

declare function clearTrackedChanges(state: EditorState): Transaction;

Create a generic extension (plugins, commands, keymaps — no schema contribution)

declare function createExtension<TOptions extends Record<string, unknown> = Record<string, unknown>>(def: ExtensionDefinition<TOptions>): (options?: Partial<TOptions>) => Extension;

Create a mark extension (contributes a MarkSpec to the schema)

declare function createMarkExtension<TOptions extends Record<string, unknown> = Record<string, unknown>>(def: MarkExtensionDefinition<TOptions>): (options?: Partial<TOptions>) => MarkExtension;

Create a node extension (contributes a NodeSpec to the schema)

declare function createNodeExtension<TOptions extends Record<string, unknown> = Record<string, unknown>>(def: NodeExtensionDefinition<TOptions>): (options?: Partial<TOptions>) => NodeExtension;

Create the full set of extensions for the DOCX editor

declare function createStarterKit(options?: StarterKitOptions): AnyExtension[];

Get the set of changed paragraph IDs from an EditorState

declare function getChangedParagraphIds(state: EditorState): Set<string>;

Check if structural changes (paragraph add/delete) occurred

declare function hasStructuralChanges(state: EditorState): boolean;

Check if any changes affected paragraphs without paraId

declare function hasUntrackedChanges(state: EditorState): boolean;
ParagraphChangeTrackerExtension: (options?: Partial<{}> | undefined) => Extension
TableCellExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension
TableHeaderExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension
TableNodeExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension
TableRowExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension

Classes(1)

Extension Manager

Two-phase initialization: 1. buildSchema() — collects NodeSpecs/MarkSpecs from extensions → new Schema 2. initializeRuntime() — calls onSchemaReady() on each extension, collects plugins/commands/keymaps

declare class ExtensionManager
MemberTypeSummary
(constructor)Constructs a new instance of the `ExtensionManager` class
buildSchemaPhase 1: Build schema from node/mark extensions
destroyLifecycle: destroy
getCommandGet a specific command by name
getCommandsGet the flat command registry
getPluginsGet all plugins (raw + keymap merged)
getSchemaGet the built schema
initializeRuntimePhase 2: Initialize runtime (plugins, commands, keymaps) Must be called after buildSchema()

Interfaces(13)

interface Extension
MemberTypeSummary
configExtensionConfig
onSchemaReady
type'extension'
interface ExtensionConfig
MemberTypeSummary
namestring
optionsRecord<string, unknown>
priorityExtensionPriority
interface ExtensionContext
MemberTypeSummary
managerExtensionManagerThe manager that owns this extension. Use this in runtime callbacks (e.g. `handleKeyDown`) that need to dispatch commands, instead of reaching back to the `singletonManager` export — the latter forms a circular import that breaks when the package is consumed as a built bundle.
schemaSchema
interface ExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
namestring
onSchemaReady
priority?ExtensionPriority
interface ExtensionRuntime
MemberTypeSummary
commands?CommandMap
keyboardShortcuts?KeyboardShortcutMap
plugins?Plugin[]
interface MarkExtension
MemberTypeSummary
configMarkExtensionConfig
onSchemaReady
type'mark'
interface MarkExtensionConfig extends ExtensionConfig
MemberTypeSummary
markSpecMarkSpec
schemaMarkNamestring
interface MarkExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
markSpecMarkSpec | ((options: TOptions) => MarkSpec)
namestring
onSchemaReady
priority?ExtensionPriority
schemaMarkNamestring
interface NodeExtension
MemberTypeSummary
configNodeExtensionConfig
onSchemaReady
type'node'
interface NodeExtensionConfig extends ExtensionConfig
MemberTypeSummary
nodeSpecNodeSpec
schemaNodeNamestring
interface NodeExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
namestring
nodeSpecNodeSpec | ((options: TOptions) => NodeSpec)
onSchemaReady
priority?ExtensionPriority
schemaNodeNamestring

StarterKit — bundles all extensions into a ready-to-use set

Usage: const extensions = createStarterKit(); const manager = new ExtensionManager(extensions); manager.buildSchema(); manager.initializeRuntime();

interface StarterKitOptions
MemberTypeSummary
disable?string[]Extensions to disable by name
historyDepth?numberHistory depth (default: 100)
historyNewGroupDelay?numberHistory new group delay (default: 500)
onSelectionChange?SelectionChangeCallbackSelection change callback

Table selection context + navigation helpers.

`getTableContext` walks the selection up from `$from` and reports which table / row / cell the cursor is in, plus the table's row/column counts, whether a multi-cell selection is active, and the current cell's border + fill colors (so the toolbar's color pickers can show the live values).

`goToNextCell` / `goToPrevCell` are tab-stop-style cell navigation commands registered by the plugin extension.

interface TableContextInfo
MemberTypeSummary
canSplitCell?boolean
cellBackgroundColor?stringCurrent cell's background/fill color (RGB hex without #), if any
cellBorderColor?ColorValueCurrent cell's dominant border color, if any
columnCount?number
columnIndex?number
hasMultiCellSelection?boolean
isInTableboolean
rowCount?number
rowIndex?number
table?Node
tablePos?number

Type aliases(4)

type AnyExtension = Extension | NodeExtension | MarkExtension;
type CommandMap = Record<string, (...args: any[]) => Command>;

Extension System Type Definitions

Tiptap-style extension architecture for ProseMirror. Three extension types: - Extension: plugins, commands, keymaps (no schema) - NodeExtension: adds a node spec to the schema - MarkExtension: adds a mark spec to the schema

type ExtensionPriority = number;
type KeyboardShortcutMap = Record<string, Command>;

Variables(1)

Priority: {
    readonly Highest: 0;
    readonly High: 50;
    readonly Default: 100;
    readonly Low: 150;
    readonly Lowest: 200;
}