import { Extension } from "@tiptap/core"; import { UndoManager } from "yjs"; import { yUndoPluginKey } from "@tiptap/y-tiptap"; export interface CollaborationUndoOptions { onUndoManagerReady?: (manager: UndoManager) => void; } /** * Thin extension that exposes the UndoManager created by @tiptap/extension-collaboration v3. * The actual undo/redo commands and shortcuts are handled by the Collaboration extension itself. * This extension only reads the UndoManager from the yUndoPlugin state and * exposes it via onUndoManagerReady for external consumers (e.g. agent chat batching). */ export const CollaborationUndo = Extension.create({ name: "collaborationUndoBridge", addOptions() { return { onUndoManagerReady: undefined, }; }, addStorage() { return { undoManager: null as UndoManager | null, }; }, onCreate() { const state = this.editor.state; const undoState = yUndoPluginKey.getState(state); if (undoState?.undoManager) { this.storage.undoManager = undoState.undoManager; this.options.onUndoManagerReady?.(undoState.undoManager); } }, });