export default function(e,n,o){let r={config:{actionNameSeparator:"→"},el:{},commandClasses:new Map,undoManager:null,trackedInputs:new Map,trackedElements:new Map,suppressCount:0,executeTriggerEvents:!0,preventRunCommand:!1,preventRecordingCommand:!1,init(){r.undoManager=new Oops({maxStackSize:100,mergeWindow:50,snapshotInterval:0,compressThreshold:100}),r.setup(),r.el.$builder.on("wpformsBuilderReady",_.debounce(r.ready,250))},setup(){r.el.$document=o(e),r.el.$builder=o("#wpforms-builder")},ready(){try{r.KeyboardShortcuts=WPForms.Admin.Builder.KeyboardShortcuts}catch(e){return void wpf.debug("UndoRedo: Dependency modules are not available.")}(WPFormsBuilder.UndoRedo=r).setupUI(),r.events(),wpf.debug("Undo/Redo initialized")},events(){r.undoManager.addChangeListener(r.updateUI),r.el.$builder.on("wpformsPanelSwitched",r.onPanelSwitched)},registerCommand(e){r.commandClasses.set(e.id??e.name,e)},getCommand(e,...n){var o=r.commandClasses.get(e);return o?new o(...n):(wpf.debug(`Undo/Redo Command "${e}" not found.`),null)},beginSuppress(){r.suppressCount++},endSuppress(){0{r.endSuppress()})}},preventRecord(e){r.preventRecordingStack=r.preventRecordingStack??[],"continue"===e?(r.preventRecordingStack.pop(),r.preventRecordingCommand=Boolean(r.preventRecordingStack[r.preventRecordingStack.length-1])):e?(r.preventRecordingStack.push(e),r.preventRecordingCommand=!0):(r.preventRecordingStack=[],r.preventRecordingCommand=!1)},isRecordPrevented(){return r.preventRecordingCommand},record(e){r.preventRecordingCommand||(r.execute(e,!1),r.preventRecord("continue"),wpf.debug("Undo/Redo command recorded:",e.actionName??"",e))},getCurrentCommand(e="undo"){e="undo"===e?r.undoManager.undoStack:r.undoManager.redoStack;return e?.[e?.length-1]??null},run(n="undo"){if(n="undo"===n?"undo":"redo",r.canRun(n)){let e=r.getCurrentCommand(n);var o=e?.getActionName?.()||wp.i18n.__("Change","wpforms");try{r.undoManager[n]()}finally{Promise.resolve().then(()=>{r.endSuppress(),r.el.$builder.trigger("wpformsUndoRedoRun",[n,e])})}var d="undo"===n?wp.i18n.__("Undone","wpforms"):wp.i18n.__("Redone","wpforms");r.lastExecuted={commandType:n,command:e},r.showNotification([d+":",o].join(" "))}},revertRun(){r.lastExecuted&&r.run("undo"===r.lastExecuted.commandType?"redo":"undo")},undo(){r.run("undo")},redo(){r.run("redo")},setupUI(){var e,n=o(".wpforms-panel-revisions-button");0!==n.length&&((e=o(`
`)).find(".wpforms-btn-undo").attr("title",wp.i18n.__("Undo (Ctrl+Z)","wpforms")),e.find(".wpforms-btn-redo").attr("title",wp.i18n.__("Redo (Ctrl+Y)","wpforms")),n.before(e),r.el.$btnUndo=e.find(".wpforms-btn-undo"),r.el.$btnRedo=e.find(".wpforms-btn-redo"),r.el.$btnsUndoRedo=e,r.el.$btnUndo.on("click",r.undo),r.el.$btnRedo.on("click",r.redo))},updateUI(){var e;r.el.$btnsUndoRedo?.length&&(e=!r.canUndo()&&!r.canRedo()&&!r.preventRunCommand,r.el.$btnsUndoRedo.toggleClass("wpforms-hidden",e),r.updateButton("undo"),r.updateButton("redo"))},updateButton(e="undo"){e="undo"===e?"undo":"redo";var n=r.canRun(e);let o=r.getCurrentCommand(e)?.getActionName?.();o=o?(d=r.config.actionNameSeparator.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=new RegExp(String.raw`\s${d}$`),o.replace(d,"")):"";var d=r.KeyboardShortcuts.isMac()?"⌘":"Ctrl",d={undo:`(${d}+Z)`,redo:`(${d}+Shift+Z)`},d=[{undo:wp.i18n.__("Undo","wpforms"),redo:wp.i18n.__("Redo","wpforms")}[e],o,d[e]].filter(Boolean).join(" ");({undo:r.el.$btnUndo,redo:r.el.$btnRedo})[e].prop("disabled",!n).attr("title",d)},showNotification(e){wpf.debug(e)},onPanelSwitched(e,n){r.el.$btnsUndoRedo.toggleClass("wpforms-hidden","setup"===n)}};return r}