From 3769942ccce2b3517fa5d345ae7adad6bb5d6fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E4=BB=81?= Date: Wed, 9 Sep 2026 16:16:35 +0800 Subject: [PATCH] fix: take the closing flag back when a close is vetoed The dialog is flagged as closing a beat before it actually closes, so that a paint landing between close() and the native close event does not make it blink out and back in. The flag was optimistic with no way back: a submit or cancel handler bound after dialogify's own can still call preventDefault(), and the dialog was then left open wearing a class whose `pointer-events: none` made it impossible to interact with. The flag now schedules a guard that takes it back on the next task if the dialog is still open, which covers every veto path rather than each one in turn. The guard is cleared once a close goes through, so an exit animation is never cut short. The closing styles now also require the dialog to have actually closed, so a lingering flag can no longer disable an open dialog on its own. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- CHANGELOG.md | 4 +++ dist/dialogify.cjs | 2 +- dist/dialogify.cjs.map | 4 +-- dist/dialogify.css | 2 +- dist/dialogify.min.js | 2 +- dist/dialogify.min.js.map | 4 +-- dist/dialogify.mjs | 2 +- dist/dialogify.mjs.map | 4 +-- docs/css/dialogify.css | 2 +- docs/js/dialogify.min.js | 2 +- package-lock.json | 4 +-- package.json | 4 +-- src/css/dialogify.css | 2 +- src/js/core.js | 32 ++++++++++++++++++-- src/scss/dialogify.scss | 9 ++++-- test/features.test.js | 64 +++++++++++++++++++++++++++++++++++++++ 16 files changed, 121 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97e2a46..117a707 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 2.3.1 + fix: a close vetoed by a submit or cancel handler bound after dialogify's own no longer leaves the dialog stuck in the closing state, where pointer-events: none made it impossible to interact with + fix: the closing styles now require the dialog to have actually closed, so a lingering flag can never take an open dialog's pointer events away + ## 2.3.0 BREAKING: a modal dialog now freezes the page behind it by default; pass backgroundScroll: true to restore the old behaviour (non-modal dialogs are unchanged) fix: locking the page no longer shifts fixed elements sideways, because the scrollbar gutter is reserved instead of padded away diff --git a/dist/dialogify.cjs b/dist/dialogify.cjs index b1cdf7d..2dc8c34 100644 --- a/dist/dialogify.cjs +++ b/dist/dialogify.cjs @@ -1,3 +1,3 @@ -var Y=Object.create;var S=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var Q=(e,i)=>{for(var t in i)S(e,t,{get:i[t],enumerable:!0})},A=(e,i,t,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of V(i))!F.call(e,a)&&a!==t&&S(e,a,{get:()=>i[a],enumerable:!(o=$(i,a))||o.enumerable});return e};var B=(e,i,t)=>(t=e!=null?Y(U(e)):{},A(i||!e||!e.__esModule?S(t,"default",{value:e,enumerable:!0}):t,e)),X=e=>A(S({},"__esModule",{value:!0}),e);var _i={};Q(_i,{default:()=>Ii});module.exports=X(_i);var n=B(require("jquery"),1);function D(){let e=window.dialogifyConfig;return(e==null||typeof e!="object")&&(e={}),e.locale=e.locale||"zh_TW",e}function z(e,i,t){if(!Object.prototype.hasOwnProperty.call(e,i)){let o=window.HTMLDialogElement&&window.HTMLDialogElement.prototype;if(o&&typeof o[i]=="function")return o[i].apply(e,t||[])}return e[i].apply(e,t||[])}function b(e,i,t){if(typeof window.CustomEvent!="function")return!0;let o=new window.CustomEvent(i,{bubbles:!1,cancelable:!0,detail:t});return e.dispatchEvent(o),!o.defaultPrevented}function I(){let e=D();return r.LOCALE[e.locale]||r.LOCALE.zh_TW}var K=["left","right","top","bottom"],q=["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],E="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMzZweCcgaGVpZ2h0PSczNnB4JyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCIgY2xhc3M9InVpbC1kZWZhdWx0Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgY2xhc3M9ImJrIj48L3JlY3Q+PHJlY3QgIHg9JzQ2LjUnIHk9JzQwJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgcng9JzUnIHJ5PSc1JyBmaWxsPScjMDA5NDk5JyB0cmFuc2Zvcm09J3JvdGF0ZSgwIDUwIDUwKSB0cmFuc2xhdGUoMCAtMzApJz4gIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J29wYWNpdHknIGZyb209JzEnIHRvPScwJyBkdXI9JzFzJyBiZWdpbj0nMHMnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJy8+PC9yZWN0PjxyZWN0ICB4PSc0Ni41JyB5PSc0MCcgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHJ4PSc1JyByeT0nNScgZmlsbD0nIzAwOTQ5OScgdHJhbnNmb3JtPSdyb3RhdGUoMzAgNTAgNTApIHRyYW5zbGF0ZSgwIC0zMCknPiAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0nb3BhY2l0eScgZnJvbT0nMScgdG89JzAnIGR1cj0nMXMnIGJlZ2luPScwLjA4MzMzMzMzMzMzMzMzMzMzcycgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnLz48L3JlY3Q+PHJlY3QgIHg9JzQ2LjUnIHk9JzQwJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgcng9JzUnIHJ5PSc1JyBmaWxsPScjMDA5NDk5JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA1MCA1MCkgdHJhbnNsYXRlKDAgLTMwKSc+ICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdvcGFjaXR5JyBmcm9tPScxJyB0bz0nMCcgZHVyPScxcycgYmVnaW49JzAuMTY2NjY2NjY2NjY2NjY2NjZzJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScvPjwvcmVjdD48cmVjdCAgeD0nNDYuNScgeT0nNDAnIHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyByeD0nNScgcnk9JzUnIGZpbGw9JyMwMDk0OTknIHRyYW5zZm9ybT0ncm90YXRlKDkwIDUwIDUwKSB0cmFuc2xhdGUoMCAtMzApJz4gIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J29wYWNpdHknIGZyb209JzEnIHRvPScwJyBkdXI9JzFzJyBiZWdpbj0nMC4yNXMnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJy8+PC9yZWN0PjxyZWN0ICB4PSc0Ni41JyB5PSc0MCcgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHJ4PSc1JyByeT0nNScgZmlsbD0nIzAwOTQ5OScgdHJhbnNmb3JtPSdyb3RhdGUoMTIwIDUwIDUwKSB0cmFuc2xhdGUoMCAtMzApJz4gIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J29wYWNpdHknIGZyb209JzEnIHRvPScwJyBkdXI9JzFzJyBiZWdpbj0nMC4zMzMzMzMzMzMzMzMzMzMzcycgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnLz48L3JlY3Q+PHJlY3QgIHg9JzQ2LjUnIHk9JzQwJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgcng9JzUnIHJ5PSc1JyBmaWxsPScjMDA5NDk5JyB0cmFuc2Zvcm09J3JvdGF0ZSgxNTAgNTAgNTApIHRyYW5zbGF0ZSgwIC0zMCknPiAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0nb3BhY2l0eScgZnJvbT0nMScgdG89JzAnIGR1cj0nMXMnIGJlZ2luPScwLjQxNjY2NjY2NjY2NjY2NjdzJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScvPjwvcmVjdD48cmVjdCAgeD0nNDYuNScgeT0nNDAnIHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyByeD0nNScgcnk9JzUnIGZpbGw9JyMwMDk0OTknIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA1MCkgdHJhbnNsYXRlKDAgLTMwKSc+ICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdvcGFjaXR5JyBmcm9tPScxJyB0bz0nMCcgZHVyPScxcycgYmVnaW49JzAuNXMnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJy8+PC9yZWN0PjxyZWN0ICB4PSc0Ni41JyB5PSc0MCcgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHJ4PSc1JyByeT0nNScgZmlsbD0nIzAwOTQ5OScgdHJhbnNmb3JtPSdyb3RhdGUoMjEwIDUwIDUwKSB0cmFuc2xhdGUoMCAtMzApJz4gIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J29wYWNpdHknIGZyb209JzEnIHRvPScwJyBkdXI9JzFzJyBiZWdpbj0nMC41ODMzMzMzMzMzMzMzMzM0cycgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnLz48L3JlY3Q+PHJlY3QgIHg9JzQ2LjUnIHk9JzQwJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgcng9JzUnIHJ5PSc1JyBmaWxsPScjMDA5NDk5JyB0cmFuc2Zvcm09J3JvdGF0ZSgyNDAgNTAgNTApIHRyYW5zbGF0ZSgwIC0zMCknPiAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0nb3BhY2l0eScgZnJvbT0nMScgdG89JzAnIGR1cj0nMXMnIGJlZ2luPScwLjY2NjY2NjY2NjY2NjY2NjZzJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScvPjwvcmVjdD48cmVjdCAgeD0nNDYuNScgeT0nNDAnIHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyByeD0nNScgcnk9JzUnIGZpbGw9JyMwMDk0OTknIHRyYW5zZm9ybT0ncm90YXRlKDI3MCA1MCA1MCkgdHJhbnNsYXRlKDAgLTMwKSc+ICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdvcGFjaXR5JyBmcm9tPScxJyB0bz0nMCcgZHVyPScxcycgYmVnaW49JzAuNzVzJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScvPjwvcmVjdD48cmVjdCAgeD0nNDYuNScgeT0nNDAnIHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyByeD0nNScgcnk9JzUnIGZpbGw9JyMwMDk0OTknIHRyYW5zZm9ybT0ncm90YXRlKDMwMCA1MCA1MCkgdHJhbnNsYXRlKDAgLTMwKSc+ICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSdvcGFjaXR5JyBmcm9tPScxJyB0bz0nMCcgZHVyPScxcycgYmVnaW49JzAuODMzMzMzMzMzMzMzMzMzNHMnIHJlcGVhdENvdW50PSdpbmRlZmluaXRlJy8+PC9yZWN0PjxyZWN0ICB4PSc0Ni41JyB5PSc0MCcgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHJ4PSc1JyByeT0nNScgZmlsbD0nIzAwOTQ5OScgdHJhbnNmb3JtPSdyb3RhdGUoMzMwIDUwIDUwKSB0cmFuc2xhdGUoMCAtMzApJz4gIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9J29wYWNpdHknIGZyb209JzEnIHRvPScwJyBkdXI9JzFzJyBiZWdpbj0nMC45MTY2NjY2NjY2NjY2NjY2cycgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnLz48L3JlY3Q+PC9zdmc+";function ii(e){return String(e??"").replace(/[&<>"']/g,function(i){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[i]})}function O(e,i,t){return Math.min(Math.max(e,i),t)}function Z(e,i,t,o){return e=="center"?i+t/2-o/2:e=="end"?i+t-o:i}function H(e,i,t,o,a){let d=O(e,0,Math.max(0,i-t));return O(d,o-t,a)}var ti=600;function oi(e,i){let t=typeof e.getAnimations=="function"?e.getAnimations():[];if(!t.length){i();return}let o=!1,a=function(){o||(o=!0,i())};Promise.all(t.map(function(d){return d.finished.catch(function(){})})).then(a),window.setTimeout(a,ti)}function ei(e,i){let t=e.getBoundingClientRect();return!t.width&&!t.height?!0:i.clientXt.right||i.clientYt.bottom}var r=class e{constructor(i,t){this._setup(window.document.createElement("dialog"),i,t,{append:!0})}_setup(i,t,o,a){let d=D();(a==null||typeof a!="object")&&(a={}),window.dialogPolyfill&&typeof window.dialogPolyfill.registerDialog=="function"&&window.dialogPolyfill.registerDialog(i),(o==null||typeof o!="object")&&(o={}),this.options=o;let s=o.ajaxPrefix===void 0?"/ajax/":o.ajaxPrefix,l=this,c,f=!1,m=a.content||null;m?c=null:t.charAt(0)=="#"?c=(0,n.default)(t).html():t.indexOf(s)==0?(c=`
${ii(I().loading)}
`,f=!0):c=t,c=c==null?null:`
${c}
`;let _=o.size||"dialogify__fixedwidth",v="dialogify";o.fixed!==!1&&(v+=" fixed"),K.indexOf(o.position)>=0&&(v+=` dialogify--drawer dialogify--${o.position}`),o.variant&&(v+=` dialogify--${o.variant}`);let C=`
`;o.useDialogForm!==!1&&(C=`
${C}
`),e.counter++,this.id=i.id||`dialogify_${e.counter}`;let P=(0,n.default)(i).attr("id",this.id).addClass(v).append(C).on("close",function(){l._teardownAnchor(),(0,n.default)(l).triggerHandler("close"),l._unlockScroll(),(0,n.default)(i).addClass("dialogify--closing"),l._onClosing&&l._onClosing(),oi(i,function(){(0,n.default)(i).removeClass("dialogify--closing"),o.autoRemove!==!1&&(l._resizeObserver&&l._resizeObserver.disconnect(),(0,n.default)(i).remove()),l._onExit&&l._onExit()}),l._resolveClosePromise()}).on("cancel",function(g){(0,n.default)(l).triggerHandler("cancel"),o.closable===!1||!l._fireBeforeClose()?g.preventDefault():l._markClosing()}).on("click",function(g){o.closable!==!1&&g.target==i&&ei(i,g)&&b(i,"cancel")&&l.close()});if(o.useDialogForm!==!1&&P.find('form[method="dialog"]').on("submit",function(g){l._fireBeforeClose(this.returnValue)?l._markClosing():g.preventDefault()}),a.append!==!1&&P.appendTo("body"),o.closable!==!1){let g="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe2ZpbGw6IzA1NTY2Njt9PC9zdHlsZT48cmVjdCB4PSIzLjEiIHk9IjEiIGNsYXNzPSJzdDAiIHdpZHRoPSIxLjciIGhlaWdodD0iMSIvPjxyZWN0IHg9IjIuMSIgeT0iMi4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMSIgeT0iMy4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxLjciLz48cmVjdCB4PSIxIiB5PSIxMS4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxLjciLz48cmVjdCB4PSIyLjEiIHk9IjEyLjkiIGNsYXNzPSJzdDAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIzLjEiIHk9IjEzLjkiIGNsYXNzPSJzdDAiIHdpZHRoPSIxLjciIGhlaWdodD0iMSIvPjxnPjxyZWN0IHg9IjQuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjYuMyIgaGVpZ2h0PSIxIi8+PC9nPjxyZWN0IHg9IjQuOSIgeT0iMTUiIGNsYXNzPSJzdDAiIHdpZHRoPSI2LjMiIGhlaWdodD0iMSIvPjxyZWN0IHk9IjQuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjEiIGhlaWdodD0iNi4zIi8+PHJlY3QgeD0iMTEuMSIgeT0iMSIgY2xhc3M9InN0MCIgd2lkdGg9IjEuNyIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMTIuOSIgeT0iMi4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMTMuOSIgeT0iMy4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxLjciLz48cmVjdCB4PSIxMy45IiB5PSIxMS4xIiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxLjciLz48cmVjdCB4PSIxMi45IiB5PSIxMi45IiBjbGFzcz0ic3QwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMTEuMSIgeT0iMTMuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjEuNyIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMTUiIHk9IjQuOSIgY2xhc3M9InN0MCIgd2lkdGg9IjEiIGhlaWdodD0iNi4zIi8+PHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI5LjcsMy44IDkuNyw0LjkgOC43LDQuOSA4LjcsNS45IDcuMyw1LjkgNy4zLDQuOSA2LjMsNC45IDYuMywzLjggMy44LDMuOCAzLjgsNS4yIDQuOSw1LjIgNC45LDYuMyA1LjksNi4zIDUuOSw3LjMgNyw3LjMgNyw4LjMgNS45LDguMyA1LjksOS40IDQuOSw5LjQgNC45LDEwLjQgMy44LDEwLjQgMy44LDEwLjggMy44LDExLjggNi4zLDExLjggNi4zLDEwLjggNy4zLDEwLjggNy4zLDkuNyA4LjcsOS43IDguNywxMC44IDkuNywxMC44IDkuNywxMS44IDEyLjIsMTEuOCAxMi4yLDEwLjQgMTEuMSwxMC40IDExLjEsOS40IDEwLjEsOS40IDEwLjEsOC4zIDksOC4zIDksNy4zIDEwLjEsNy4zIDEwLjEsNi4zIDExLjEsNi4zIDExLjEsNS4yIDEyLjIsNS4yIDEyLjIsNC45IDEyLjIsMy44ICIvPjwvc3ZnPg==",x="",h={},p=o.closeButton||d.closeButton;p!=null&&typeof p=="object"&&(g=p.image||g,x=p.className||x,h=p.style||h);let G=(0,n.default)("").attr({src:g,alt:""}),J=(0,n.default)("").addClass("dialogify__close").attr({role:"button",tabindex:0,"aria-label":I().close}).css(h).append(G).on("click",function(){b(i,"cancel")&&l.close()}).on("keydown",function(M){(M.key=="Enter"||M.key==" "||M.key=="Spacebar")&&(M.preventDefault(),(0,n.default)(this).trigger("click"))});x&&J.addClass(x),(0,n.default)(i).append(J)}let u=o.dialog||d.dialog;if(u!=null&&typeof u=="object"){(0,n.default)(i).css(u.style||{}),u.className&&(0,n.default)(i).addClass(u.className);let g=(0,n.default)(i).find(".dialogify__content");g.css(u.contentStyle||{}),u.contentClassName&&g.addClass(u.contentClassName)}if(this.$content=(0,n.default)(i).find(".dialogify__content > div"),m?this.$content.append((0,n.default)("
").addClass("dialogify__body").append(m)):this.$content.append(c),this.$body=this.$content.find(".dialogify__body"),this.$form=(0,n.default)(i).find('form[method="dialog"]'),f){let g=t,x=o.ajaxData||{};try{let h=new URL(t,window.location.href);Object.keys(x).forEach(function(p){h.searchParams.append(p,x[p])}),g=h.toString()}catch{}window.fetch(g,{headers:{"X-Requested-With":"XMLHttpRequest"}}).then(function(h){return h.text()}).then(function(h){o.ajaxComplete&&o.ajaxComplete.call(l),l.$content.find(".dialogify-ajax-content").html(h)})}this.dialog=i,window.ResizeObserver&&!(0,n.default)(i).is(".dialogify--drawer, .dialogify--toast")&&(this._resizeObserver=new window.ResizeObserver(function(){(0,n.default)(i).is(".dialogify--popover")||ci(i)}),this._resizeObserver.observe(i))}_fireBeforeClose(i){let t=n.default.Event("beforeclose");return t.returnValue=i,(0,n.default)(this).triggerHandler(t),b(this.dialog,"beforeclose",{returnValue:i})&&!t.isDefaultPrevented()}_resolveClosePromise(){if(this._closeResolver){let i=this._closeResolver;this._closeResolver=null,this._closePromise=null,i(this.dialog.returnValue)}}_openPromise(){let i=this;return(0,n.default)(this.dialog).removeClass("dialogify--closing"),this._closePromise||(this._closePromise=new Promise(function(t){i._closeResolver=t})),this._closePromise}showModal(){this._lockScroll(this.options.backgroundScroll!==!0);let i=this._openPromise();return z(this.dialog,"showModal"),b(this.dialog,"show"),(0,n.default)(this).triggerHandler("show"),i}show(){this._lockScroll(this.options.backgroundScroll===!1);let i=this._openPromise();return z(this.dialog,"show"),b(this.dialog,"show"),(0,n.default)(this).triggerHandler("show"),i}_lockScroll(i){i&&!this._scrollLocked&&(this._scrollLocked=!0,si())}_unlockScroll(){this._scrollLocked&&(this._scrollLocked=!1,fi())}showAt(i,t){let o=(0,n.default)(i);if(!o.length)return this.show();(t==null||typeof t!="object")&&(t={}),this._anchor=o[0],this._anchorOptions=t,(0,n.default)(this.dialog).addClass("dialogify--popover").removeClass("fixed");let a=this.show();this.reposition();let d=this;return this._anchorListener=function(){d.reposition()},window.addEventListener("scroll",this._anchorListener,!0),window.addEventListener("resize",this._anchorListener),this.options.closable!==!1&&(this._outsideListener=function(s){if(d.dialog.contains(s.target))return;let l=t.toggle!==!1&&d._anchor.contains(s.target);b(d.dialog,"cancel")&&(l&&(s.preventDefault(),s.stopImmediatePropagation()),d.close())},this._outsideTimer=window.setTimeout(function(){d._outsideListener&&window.document.addEventListener("click",d._outsideListener,!0)},0)),a}reposition(){if(!this._anchor||!this.dialog.open)return this;let i=this._anchorOptions||{},t=i.offset===void 0?8:i.offset,o=i.align||"start",a=this._anchor.getBoundingClientRect(),d=this.dialog.getBoundingClientRect(),s=window.innerWidth||0,l=window.innerHeight||0,c=a.bottom>0&&a.top0&&a.leftl?f="top":f=="top"&&a.top-t-d.height<0?f="bottom":f=="right"&&a.right+t+d.width>s?f="left":f=="left"&&a.left-t-d.width<0&&(f="right"));let m,_;return f=="top"||f=="bottom"?(m=f=="bottom"?a.bottom+t:a.top-t-d.height,_=H(Z(o,a.left,a.width,d.width),s,d.width,a.left,a.right)):(_=f=="right"?a.right+t:a.left-t-d.width,m=H(Z(o,a.top,a.height,d.height),l,d.height,a.top,a.bottom)),(0,n.default)(this.dialog).attr("data-placement",f).css({position:"fixed",top:`${Math.round(m)}px`,left:`${Math.round(_)}px`,right:"auto",bottom:"auto",transform:"none",margin:0}),this}_teardownAnchor(){this._anchorListener&&(window.removeEventListener("scroll",this._anchorListener,!0),window.removeEventListener("resize",this._anchorListener),this._anchorListener=null),this._outsideTimer&&(window.clearTimeout(this._outsideTimer),this._outsideTimer=null),this._outsideListener&&(window.document.removeEventListener("click",this._outsideListener,!0),this._outsideListener=null),this._anchor=null}_markClosing(){this.dialog.open&&(0,n.default)(this.dialog).addClass("dialogify--closing")}close(i){return this._fireBeforeClose(i)?(this._markClosing(),z(this.dialog,"close",i===void 0?[]:[i]),this):this}isOpen(){return this.dialog.open}on(i,t){return(0,n.default)(this).on(i,t),this}off(i,t){return(0,n.default)(this).off(i,t),this}setContent(i){return i instanceof window.Node||i instanceof n.default?this.$body.empty().append(i):this.$body.html(i??""),this}getContent(){return this.$body.html()}load(i,t){let o=this,a=i;try{let d=new URL(i,window.location.href),s=t||{};Object.keys(s).forEach(function(l){d.searchParams.append(l,s[l])}),a=d.toString()}catch{}return this.setLoading(!0),window.fetch(a,{headers:{"X-Requested-With":"XMLHttpRequest"}}).then(function(d){return d.text()}).then(function(d){return o.setContent(d),o.setLoading(!1),o.options.ajaxComplete&&o.options.ajaxComplete.call(o),o}).catch(function(d){throw o.setLoading(!1),d})}setLoading(i){if(i===!1)return this.$content.find(".dialogify__loading").remove(),(0,n.default)(this.dialog).removeClass("is-loading"),this;if(!this.$content.find(".dialogify__loading").length){let t=typeof i=="string"?i:I().loading;this.$content.append((0,n.default)("
").addClass("dialogify__loading").attr({role:"status","aria-live":"polite"}).append((0,n.default)("").attr({src:E,alt:t}))),(0,n.default)(this.dialog).addClass("is-loading")}return this}isLoading(){return this.$content.find(".dialogify__loading").length>0}validate(){let i=this.$form[0];return!i||typeof i.reportValidity!="function"?!0:i.reportValidity()}formData(){let i=this.$form[0];return!i||typeof window.FormData!="function"?null:new window.FormData(i)}formValues(){let i=this.formData();if(!i)return{};let t={};return i.forEach(function(o,a){Object.prototype.hasOwnProperty.call(t,a)?(Array.isArray(t[a])||(t[a]=[t[a]]),t[a].push(o)):t[a]=o}),t}title(i){let t=`${this.id}_title`,o=(0,n.default)("
").addClass("dialogify_title").attr("id",t).append('').append(i);return this.$content.find(".dialogify_title").length?this.$content.find(".dialogify_title").replaceWith(o):this.$content.prepend(o),(0,n.default)(this.dialog).attr("aria-labelledby",t),this}_createButton(i,t){let o=this;if(typeof i=="string"){let d=(0,n.default)(i);return{id:d.attr("id")||t,$button:d}}(i==null||typeof i!="object")&&(i={});let a=(0,n.default)('