import { Extension } from '@tiptap/core' import { toast } from 'sonner' /** * Extension TipTap qui intercepte les commandes d'annulation (Undo) et de rétablissement (Redo) * pour lever un toast discret (2 secondes) de confirmation, en indiquant dynamiquement le raccourci de l'action inverse selon l'OS. */ export const UndoRedoFeedbackExtension = Extension.create({ name: 'undoRedoFeedback', addOptions() { return { undoText: 'Action annulée', undoHint: 'Faites {key}+Maj+Z pour rétablir.', redoText: 'Action rétablie', redoHint: 'Faites {key}+Z pour annuler.', } }, addKeyboardShortcuts() { const isMac = typeof window !== 'undefined' && /Mac|iPod|iPhone|iPad/.test(navigator.userAgent) const modKey = isMac ? '⌘' : 'Ctrl' const o = this.options return { 'Mod-z': () => { const success = this.editor.commands.undo() if (success) { toast.info(o.undoText, { description: o.undoHint.replace('{key}', modKey), duration: 2000, }) } return success }, 'Mod-y': () => { const success = this.editor.commands.redo() if (success) { toast.info(o.redoText, { description: o.redoHint.replace('{key}', modKey), duration: 2000, }) } return success }, 'Mod-Shift-z': () => { const success = this.editor.commands.redo() if (success) { toast.info(o.redoText, { description: o.redoHint.replace('{key}', modKey), duration: 2000, }) } return success }, } }, })