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

Extension System — Barrel Export

Functions (13)

clearTrackedChangesfunctionSource ↗

Create a transaction that clears the change tracker

declare function clearTrackedChanges(state: EditorState): Transaction;

createExtensionfunctionSource ↗

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;

createMarkExtensionfunctionSource ↗

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;

createNodeExtensionfunctionSource ↗

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;

createStarterKitfunctionSource ↗

Create the full set of extensions for the DOCX editor

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

getChangedParagraphIdsfunctionSource ↗

Get the set of changed paragraph IDs from an EditorState

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

hasStructuralChangesfunctionSource ↗

Check if structural changes (paragraph add/delete) occurred

declare function hasStructuralChanges(state: EditorState): boolean;

hasUntrackedChangesfunctionSource ↗

Check if any changes affected paragraphs without paraId

declare function hasUntrackedChanges(state: EditorState): boolean;

ParagraphChangeTrackerExtensionfunctionSource ↗

ParagraphChangeTrackerExtension: (options?: Partial<{}> | undefined) => Extension

TableCellExtensionfunctionSource ↗

TableCellExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension

TableHeaderExtensionfunctionSource ↗

TableHeaderExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension

TableNodeExtensionfunctionSource ↗

TableNodeExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension

TableRowExtensionfunctionSource ↗

TableRowExtension: (options?: Partial<Record<string, unknown>> | undefined) => NodeExtension

Classes (1)

ExtensionManagerclassSource ↗

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)

ExtensioninterfaceSource ↗

interface Extension
MemberTypeSummary
configExtensionConfig
onSchemaReady
type'extension'

ExtensionConfiginterfaceSource ↗

interface ExtensionConfig
MemberTypeSummary
namestring
optionsRecord<string, unknown>
priorityExtensionPriority

ExtensionContextinterfaceSource ↗

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

ExtensionDefinitioninterfaceSource ↗

interface ExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
namestring
onSchemaReady
priority?ExtensionPriority

ExtensionRuntimeinterfaceSource ↗

interface ExtensionRuntime
MemberTypeSummary
commands?CommandMap
keyboardShortcuts?KeyboardShortcutMap
plugins?Plugin[]

MarkExtensioninterfaceSource ↗

interface MarkExtension
MemberTypeSummary
configMarkExtensionConfig
onSchemaReady
type'mark'

MarkExtensionConfiginterfaceSource ↗

interface MarkExtensionConfig extends ExtensionConfig
MemberTypeSummary
markSpecMarkSpec
schemaMarkNamestring

MarkExtensionDefinitioninterfaceSource ↗

interface MarkExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
markSpecMarkSpec | ((options: TOptions) => MarkSpec)
namestring
onSchemaReady
priority?ExtensionPriority
schemaMarkNamestring

NodeExtensioninterfaceSource ↗

interface NodeExtension
MemberTypeSummary
configNodeExtensionConfig
onSchemaReady
type'node'

NodeExtensionConfiginterfaceSource ↗

interface NodeExtensionConfig extends ExtensionConfig
MemberTypeSummary
nodeSpecNodeSpec
schemaNodeNamestring

NodeExtensionDefinitioninterfaceSource ↗

interface NodeExtensionDefinition<TOptions = Record<string, unknown>>
MemberTypeSummary
defaultOptions?TOptions
namestring
nodeSpecNodeSpec | ((options: TOptions) => NodeSpec)
onSchemaReady
priority?ExtensionPriority
schemaNodeNamestring

StarterKitOptionsinterfaceSource ↗

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

TableContextInfointerfaceSource ↗

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)

AnyExtensiontypeSource ↗

type AnyExtension = Extension | NodeExtension | MarkExtension;

CommandMaptypeSource ↗

type CommandMap = Record<string, (...args: any[]) => Command>;

ExtensionPrioritytypeSource ↗

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;

KeyboardShortcutMaptypeSource ↗

type KeyboardShortcutMap = Record<string, Command>;

Variables (1)

PriorityconstSource ↗

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

On this page