diff --git a/dist/VueFinalModal.esm.js b/dist/VueFinalModal.esm.js index 1d8f2273..4abdf66d 100644 --- a/dist/VueFinalModal.esm.js +++ b/dist/VueFinalModal.esm.js @@ -1,2 +1,2 @@ -function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),m=[],p=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return m.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!m.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};m=[].concat(a(m),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},p||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),p=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(m=m.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,p&&0===m.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),p=!1)):m.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,I=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},j="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var N={};var L=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=j?t.media||"default":e,o=N[n]||(N[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?[e._v(e._s(t))]:n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;oe.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),m=[],p=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return m.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!m.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};m=[].concat(a(m),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},p||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),p=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(m=m.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,p&&0===m.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),p=!1)):m.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,I=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},j="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var N={};var L=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=j?t.media||"default":e,o=N[n]||(N[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=I({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_PLUGIN_COMPONENT =\n '[vue-final-modal] Duplicate registration API key and componentName of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_PLUGIN_COMPONENT, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst Plugin = () => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, options)\n const isDuplicateKey = Vue.prototype[_options.key]\n const isDuplicateComponent = Vue.options.components[_options.componentName]\n const isDuplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (isDuplicateComponent || isDuplicateDynamicContainer) {\n if (typeof window !== 'undefined') {\n if (isDuplicateKey) {\n console.error(DUPLICATE_PLUGIN_COMPONENT)\n }\n if (isDuplicateComponent) {\n console.error(DUPLICATE_COMPONENT)\n }\n if (isDuplicateDynamicContainer) {\n console.error(DUPLICATE_DYNAMIC_CONTAINER)\n }\n }\n } else {\n if (!isDuplicateKey) {\n bindPrototype(Vue, _options)\n }\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","install","_options","isDuplicateKey","isDuplicateComponent","components","isDuplicateDynamicContainer","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.esm.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_PLUGIN_COMPONENT =\n '[vue-final-modal] Duplicate registration API key and componentName of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_PLUGIN_COMPONENT, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst Plugin = () => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, options)\n const isDuplicateKey = Vue.prototype[_options.key]\n const isDuplicateComponent = Vue.options.components[_options.componentName]\n const isDuplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (isDuplicateComponent || isDuplicateDynamicContainer) {\n if (typeof window !== 'undefined') {\n if (isDuplicateKey) {\n console.error(DUPLICATE_PLUGIN_COMPONENT)\n }\n if (isDuplicateComponent) {\n console.error(DUPLICATE_COMPONENT)\n }\n if (isDuplicateDynamicContainer) {\n console.error(DUPLICATE_DYNAMIC_CONTAINER)\n }\n }\n } else {\n if (!isDuplicateKey) {\n bindPrototype(Vue, _options)\n }\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","install","_options","isDuplicateKey","isDuplicateComponent","components","isDuplicateDynamicContainer","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js b/dist/VueFinalModal.umd.js index 6741fbb3..0321c65e 100644 --- a/dist/VueFinalModal.umd.js +++ b/dist/VueFinalModal.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).VueFinalModal=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),p=[],m=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return p.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!p.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};p=[].concat(a(p),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},m||(document.addEventListener("touchmove",w,u?{passive:!1}:void 0),m=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(p=p.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,m&&0===p.length&&(document.removeEventListener("touchmove",w,u?{passive:!1}:void 0),m=!1)):p.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,j=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var u,d="function"==typeof n?n.options:n;if(e&&e.render&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0,i&&(d.functional=!0)),o&&(d._scopeId=o),a?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},d._ssrRegister=u):t&&(u=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),u)if(d.functional){var f=d.render;d.render=function(e,t){return u.call(t),f(e,t)}}else{var v=d.beforeCreate;d.beforeCreate=v?[].concat(v,u):[u]}return n},I="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var N={};var L=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=I?t.media||"default":e,o=N[n]||(N[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?[e._v(e._s(t))]:n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;oe.length)&&(t=e.length);for(var n=0,o=new Array(t);n1),p=[],m=!1,y=0,b=-1,g=function(e,t){var n=!1;return function(e){for(var t=[];e;){if(t.push(e),e.classList.contains("vfm"))return t;e=e.parentElement}return t}(e).forEach((function(e){(function(e){if(!e||e.nodeType!==Node.ELEMENT_NODE)return!1;var t=window.getComputedStyle(e);return["auto","scroll"].includes(t.overflowY)&&e.scrollHeight>e.clientHeight})(e)&&function(e,t){return!(0===e.scrollTop&&t<0||e.scrollTop+e.clientHeight+t>=e.scrollHeight&&t>0)}(e,t)&&(n=!0)})),n},E=function(e){return p.some((function(){return g(e,-y)}))},w=function(e){var t=e||window.event;return!!E(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},S=function(e,t){if(e){if(!p.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};p=[].concat(a(p),[n]),h?(e.ontouchstart=function(e){1===e.targetTouches.length&&(b=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){y=e.targetTouches[0].clientY-b,!E(e.target)&&(t&&0===t.scrollTop&&y>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&y<0?w(e):e.stopPropagation())}(t,e)},m||(document.addEventListener("touchmove",w,d?{passive:!1}:void 0),m=!0)):function(e){if(void 0===v){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var o=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);v=document.body.style.paddingRight,document.body.style.paddingRight="".concat(o+n,"px")}}void 0===f&&(f=document.body.style.overflow,document.body.style.overflow="hidden")}(t)}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")},T=function(e){e?(p=p.filter((function(t){return t.targetElement!==e})),h?(e.ontouchstart=null,e.ontouchmove=null,m&&0===p.length&&(document.removeEventListener("touchmove",w,d?{passive:!1}:void 0),m=!1)):p.length||(void 0!==v&&(document.body.style.paddingRight=v,v=void 0),void 0!==f&&(document.body.style.overflow=f,f=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},C="enter",O="entering",k="leave",_="leavng";var x={type:[String,Object,Array],default:""},M={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:x,overlayClass:x,contentClass:x,styles:x,overlayStyle:x,contentStyle:x,lockScroll:{type:Boolean,default:!0},hideOverlay:{type:Boolean,default:!1},clickToClose:{type:Boolean,default:!0},escToClose:{type:Boolean,default:!1},preventClick:{type:Boolean,default:!1},attach:{type:null,default:!1,validator:function(t){var n=e(t);return"boolean"===n||"string"===n||t.nodeType===Node.ELEMENT_NODE}},transition:{type:[String,Object],default:"vfm"},overlayTransition:{type:[String,Object],default:"vfm"},zIndexAuto:{type:Boolean,default:!0},zIndexBase:{type:[String,Number],default:1e3},zIndex:{type:[Boolean,String,Number],default:!1},focusRetain:{type:Boolean,default:!0},focusTrap:{type:Boolean,default:!1}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{}}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===k)&&this.modalTransitionState===k},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return i({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:i({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:i({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return;this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new c,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&T(this.$refs.vfmContainer),null==this||null===(e=this.$el)||void 0===e||e.remove();var n=this.api.modals.findIndex((function(e){return e===t}));this.api.modals.splice(n,1)},methods:{mounted:function(){var e=this;if(this.value){if(this.emitEvent("before-open",!1))return;var t=this.getAttachElement();if(t||!1===this.attach){!1!==this.attach&&t.appendChild(this.$el);var n=this.api.openedModals.findIndex((function(t){return t===e}));-1!==n&&this.api.openedModals.splice(n,1),this.api.openedModals.push(this),this.modalStackIndex=this.api.openedModals.length-1,this.handleLockScroll(),this.api.openedModals.filter((function(t){return t!==e})).forEach((function(e,n){e.getAttachElement()===t&&(e.modalStackIndex=n,e.visibility.overlay=!1)})),this.visible=!0,this.$nextTick((function(){e.startTransitionEnter()}))}else!1!==t&&console.warn("Unable to locate target ".concat(this.attach))}},close:function(){var e=this,t=this.api.openedModals.findIndex((function(t){return t===e}));if(-1!==t&&this.api.openedModals.splice(t,1),this.api.openedModals.length>0){var n=this.api.openedModals[this.api.openedModals.length-1];(n.focusRetain||n.focusTrap)&&n.$refs.vfmContainer.focus(),!n.hideOverlay&&(n.visibility.overlay=!0)}this.startTransitionLeave()},startTransitionEnter:function(){this.visibility.overlay=!0,this.visibility.modal=!0},startTransitionLeave:function(){this.visibility.overlay=!1,this.visibility.modal=!1},handleLockScroll:function(){var e=this;this.value&&this.$nextTick((function(){e.lockScroll?S(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):T(e.$refs.vfmContainer)}))},getAttachElement:function(){return!1!==this.attach&&("string"==typeof this.attach?!!window&&window.document.querySelector(this.attach):this.attach)},beforeOverlayEnter:function(){this.overlayTransitionState=O},afterOverlayEnter:function(){this.overlayTransitionState=C},beforeOverlayLeave:function(){this.overlayTransitionState=_},afterOverlayLeave:function(){this.overlayTransitionState=k},beforeModalEnter:function(){this.modalTransitionState=O},afterModalEnter:function(){this.modalTransitionState=C,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.$emit("opened",this.createModalEvent({type:"opened"}))},beforeModalLeave:function(){this.modalTransitionState=_,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=k,this.modalStackIndex=null,this.lockScroll&&T(this.$refs.vfmContainer);var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),e||(this.params={})},onClickContainer:function(){this.$emit("click-outside",this.createModalEvent({type:"click-outside"})),this.clickToClose&&this.$emit("input",!1)},onEsc:function(){this.visible&&this.escToClose&&this.$emit("input",!1)},createModalEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i({ref:this},e)},emitEvent:function(e,t){var n=!1,o=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,o),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},toggle:function(e,t){var n="boolean"==typeof e?e:!this.value;n&&2===arguments.length&&(this.params=t),this.$emit("input",n)}}};var $,j=function(e,t,n,o,i,a,r,s,l,c){"boolean"!=typeof r&&(l=s,s=r,r=!1);var d,u="function"==typeof n?n.options:n;if(e&&e.render&&(u.render=e.render,u.staticRenderFns=e.staticRenderFns,u._compiled=!0,i&&(u.functional=!0)),o&&(u._scopeId=o),a?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=d):t&&(d=r?function(e){t.call(this,c(e,this.$root.$options.shadowRoot))}:function(e){t.call(this,s(e))}),d)if(u.functional){var f=u.render;u.render=function(e,t){return d.call(t),f(e,t)}}else{var v=u.beforeCreate;u.beforeCreate=v?[].concat(v,d):[d]}return n},I="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var N={};var L=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.ssr||e.visible?n("div",{directives:[{name:"show",rawName:"v-show",value:!e.ssr||e.visible,expression:"!ssr || visible"}],staticClass:"vfm vfm--inset",class:[!1===e.attach?"vfm--fixed":"vfm--absolute",{"vfm--prevent-none":e.preventClick}],style:e.bindStyle,on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.onEsc(t)}}},[n("transition",e._b({ref:"vfmOverlayTransition",on:{"before-enter":e.beforeOverlayEnter,"after-enter":e.afterOverlayEnter,"before-leave":e.beforeOverlayLeave,"after-leave":e.afterOverlayLeave}},"transition",e.computedOverlayTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.hideOverlay&&e.visibility.overlay,expression:"!hideOverlay && visibility.overlay"}],staticClass:"vfm__overlay vfm--overlay vfm--absolute vfm--inset",class:e.overlayClass,style:e.overlayStyle})]),e._v(" "),n("transition",e._b({ref:"vfmTransition",on:{"before-enter":e.beforeModalEnter,"after-enter":e.afterModalEnter,"before-leave":e.beforeModalLeave,"after-leave":e.afterModalLeave}},"transition",e.computedTransition,!1),[n("div",{directives:[{name:"show",rawName:"v-show",value:e.visibility.modal,expression:"visibility.modal"}],ref:"vfmContainer",staticClass:"vfm__container vfm--absolute vfm--inset vfm--outline-none",class:e.classes,style:e.styles,attrs:{"aria-expanded":e.visibility.modal.toString(),role:"dialog","aria-modal":"true",tabindex:"-1"},on:{click:function(t){return t.target!==t.currentTarget?null:e.onClickContainer(t)}}},[n("div",{staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.contentStyle},[e._t("default",null,{params:e.params})],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-0e8f9c81_0",{source:".vfm--fixed[data-v-0e8f9c81]{position:fixed}.vfm--absolute[data-v-0e8f9c81]{position:absolute}.vfm--inset[data-v-0e8f9c81]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-0e8f9c81]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-0e8f9c81]{pointer-events:none}.vfm--prevent-auto[data-v-0e8f9c81]{pointer-events:auto}.vfm--outline-none[data-v-0e8f9c81]:focus{outline:0}.vfm-enter-active[data-v-0e8f9c81],.vfm-leave-active[data-v-0e8f9c81]{transition:opacity .2s}.vfm-enter[data-v-0e8f9c81],.vfm-leave-to[data-v-0e8f9c81]{opacity:0}",map:void 0,media:void 0})}),M,"data-v-0e8f9c81",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=I?t.media||"default":e,o=N[n]||(N[n]={ids:new Set,styles:[]});if(!o.ids.has(e)){o.ids.add(e);var i=t.source;if(t.map&&(i+="\n/*# sourceURL="+t.map.sources[0]+" */",i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),o.element||(o.element=document.createElement("style"),o.element.type="text/css",t.media&&o.element.setAttribute("media",t.media),void 0===$&&($=document.head||document.getElementsByTagName("head")[0]),$.appendChild(o.element)),"styleSheet"in o.element)o.styles.push(i),o.element.styleSheet.cssText=o.styles.filter(Boolean).join("\n");else{var a=o.ids.size-1,r=document.createTextNode(i),s=o.element.childNodes;s[a]&&o.element.removeChild(s[a]),s.length?o.element.insertBefore(r,s[a]):o.element.appendChild(r)}}}(e,t)}}),void 0,void 0),A=j({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"modals-container"},e._l(e.api.dynamicModals,(function(t,o){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(o)},"before-open":function(n){return e.beforeOpen(n,t)}},scopedSlots:e._u([e._l(t.slots,(function(t,o){return{key:o,fn:function(){return[e.isString(t)?n("div",{key:o,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:o,tag:"component"},"component",t.bind,!1),t.on))]},proxy:!0}}))],null,!0),model:{value:t.value,callback:function(n){e.$set(t,"value",n)},expression:"modal.value"}},"component",t.bind,!1),t.on))})),1)},staticRenderFns:[]},undefined,{props:{},computed:{api:function(){return this[this.$_options.key]}},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t){e.ref.params=t.params},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function B(e,t){var n=i({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function D(t,n){var o=function(t,n){var o;return function(){return o={show:function(t){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=0;e--)this.openedModals[e].$emit("input",!1)},toggle:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_PLUGIN_COMPONENT =\n '[vue-final-modal] Duplicate registration API key and componentName of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_PLUGIN_COMPONENT, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst Plugin = () => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, options)\n const isDuplicateKey = Vue.prototype[_options.key]\n const isDuplicateComponent = Vue.options.components[_options.componentName]\n const isDuplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (isDuplicateComponent || isDuplicateDynamicContainer) {\n if (typeof window !== 'undefined') {\n if (isDuplicateKey) {\n console.error(DUPLICATE_PLUGIN_COMPONENT)\n }\n if (isDuplicateComponent) {\n console.error(DUPLICATE_COMPONENT)\n }\n if (isDuplicateDynamicContainer) {\n console.error(DUPLICATE_DYNAMIC_CONTAINER)\n }\n }\n } else {\n if (!isDuplicateKey) {\n bindPrototype(Vue, _options)\n }\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","install","_options","isDuplicateKey","isDuplicateComponent","components","isDuplicateDynamicContainer","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VueFinalModal.umd.js","sources":["../lib/utils/focusTrap.js","../lib/utils/bodyScrollLock.js","../lib/VueFinalModal.vue","../lib/PluginCore.js","../lib/utils/errors.js","../lib/Plugin.js"],"sourcesContent":["// stolen from vue-js-modal\n\nconst FOCUSABLE_ELEMENTS_QUERY =\n 'button:not([disabled]), ' +\n 'select:not([disabled]), ' +\n 'a[href]:not([disabled]), ' +\n 'area[href]:not([disabled]), ' +\n '[contentEditable=\"\"]:not([disabled]), ' +\n '[contentEditable=\"true\"]:not([disabled]), ' +\n '[contentEditable=\"TRUE\"]:not([disabled]), ' +\n 'textarea:not([disabled]), ' +\n 'iframe:not([disabled]), ' +\n 'input:not([disabled]), ' +\n 'summary:not([disabled]), ' +\n '[tabindex]:not([tabindex=\"-1\"])'\n\nconst isTabPressed = event => {\n return event.key === 'Tab' || event.keyCode === 9\n}\n\nconst querySelectorAll = (element, selector) => {\n return [...(element.querySelectorAll(selector) || [])]\n}\n\nconst queryFocusableElements = element => {\n return querySelectorAll(element, FOCUSABLE_ELEMENTS_QUERY)\n}\n\nconst isFocused = element => {\n return element == document.activeElement\n}\n\nconst isNothingFocused = () => {\n return !document.activeElement\n}\n\nclass FocusTrap {\n constructor() {\n this.root = null\n this.elements = []\n\n this.onKeyDown = this.onKeyDown.bind(this)\n this.enable = this.enable.bind(this)\n this.disable = this.disable.bind(this)\n this.firstElement = this.firstElement.bind(this)\n this.lastElement = this.lastElement.bind(this)\n }\n\n lastElement() {\n return this.elements[this.elements.length - 1] || null\n }\n\n firstElement() {\n return this.elements[0] || null\n }\n\n onKeyDown(event) {\n if (!isTabPressed(event)) {\n return\n }\n\n // SHIFT + TAB\n if (event.shiftKey) {\n if (isFocused(this.firstElement())) {\n this.lastElement().focus()\n event.preventDefault()\n }\n return\n }\n\n // TAB\n if (isNothingFocused() || isFocused(this.lastElement())) {\n this.firstElement().focus()\n event.preventDefault()\n return\n }\n }\n\n enabled() {\n return !!this.root\n }\n\n enable(root) {\n if (!root) {\n return\n }\n\n this.root = root\n this.elements = queryFocusableElements(this.root)\n\n this.root.addEventListener('keydown', this.onKeyDown)\n }\n\n disable() {\n this.root.removeEventListener('keydown', this.onKeyDown)\n this.root = null\n }\n}\n\nexport default FocusTrap\n","// stolen from body-scroll-lock\n\n// Older browsers don't support event options, feature detect it.\nlet hasPassiveEvents = false\nif (typeof window !== 'undefined') {\n const passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true\n return undefined\n }\n }\n window.addEventListener('testPassive', null, passiveTestOptions)\n window.removeEventListener('testPassive', null, passiveTestOptions)\n}\n\nconst isIosDevice =\n typeof window !== 'undefined' &&\n window.navigator &&\n window.navigator.platform &&\n (/iP(ad|hone|od)/.test(window.navigator.platform) ||\n (window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1))\n\nlet locks = []\nlet documentListenerAdded = false\nlet clientY = 0\nlet initialClientY = -1\nlet previousBodyOverflowSetting\nlet previousBodyPaddingRight\n\nconst hasScrollbar = el => {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight\n}\n\nconst shouldScroll = (el, delta) => {\n if (el.scrollTop === 0 && delta < 0) return false\n if (el.scrollTop + el.clientHeight + delta >= el.scrollHeight && delta > 0) return false\n return true\n}\n\nconst composedPath = el => {\n const path = []\n while (el) {\n path.push(el)\n if (el.classList.contains('vfm')) return path\n el = el.parentElement\n }\n return path\n}\n\nconst hasAnyScrollableEl = (el, delta) => {\n let hasAnyScrollableEl = false\n const path = composedPath(el)\n path.forEach(el => {\n if (hasScrollbar(el) && shouldScroll(el, delta)) {\n hasAnyScrollableEl = true\n }\n })\n return hasAnyScrollableEl\n}\n\n// returns true if `el` should be allowed to receive touchmove events.\nconst allowTouchMove = el => locks.some(() => hasAnyScrollableEl(el, -clientY))\n\nconst preventDefault = rawEvent => {\n const e = rawEvent || window.event\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true\n }\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true\n\n if (e.preventDefault) e.preventDefault()\n\n return false\n}\n\nconst setOverflowHidden = options => {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n const reserveScrollBarGap = !!options && options.reserveScrollBarGap === true\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth\n\n if (reserveScrollBarGap && scrollBarGap > 0) {\n const computedBodyPaddingRight = parseInt(getComputedStyle(document.body).getPropertyValue('padding-right'), 10)\n previousBodyPaddingRight = document.body.style.paddingRight\n document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`\n }\n }\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n}\n\nconst restoreOverflowSetting = () => {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined\n }\n}\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nconst isTargetElementTotallyScrolled = targetElement =>\n targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false\n\nconst handleScroll = (event, targetElement) => {\n clientY = event.targetTouches[0].clientY - initialClientY\n\n if (allowTouchMove(event.target)) {\n return false\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event)\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event)\n }\n\n event.stopPropagation()\n return true\n}\n\nexport const disableBodyScroll = (targetElement, options) => {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.'\n )\n return\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(lock => lock.targetElement === targetElement)) {\n return\n }\n\n const lock = {\n targetElement,\n options: options || {}\n }\n\n locks = [...locks, lock]\n\n if (isIosDevice) {\n targetElement.ontouchstart = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY\n }\n }\n targetElement.ontouchmove = event => {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement)\n }\n }\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = true\n }\n } else {\n setOverflowHidden(options)\n }\n}\n\nexport const enableBodyScroll = targetElement => {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error(\n 'enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.'\n )\n return\n }\n\n locks = locks.filter(lock => lock.targetElement !== targetElement)\n\n if (isIosDevice) {\n targetElement.ontouchstart = null\n targetElement.ontouchmove = null\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined)\n documentListenerAdded = false\n }\n } else if (!locks.length) {\n restoreOverflowSetting()\n }\n}\n","\n\n\n\n\n","import VueFinalModal from './VueFinalModal.vue'\nimport ModalsContainer from './ModalsContainer.vue'\n\nfunction assignOptions(component, options) {\n const _component = { ...component }\n Object.assign(_component.props, {\n $_options: { type: Object, default: () => options }\n })\n return _component\n}\n\nfunction createVfm(Vue, options) {\n let vfm\n\n return function() {\n vfm = {\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n this.toggle(modal, true, ...args)\n break\n case 'object':\n {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: options.componentName,\n bind: {},\n slots: {},\n on: {},\n params: args[0]\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n }\n break\n }\n },\n hide(...names) {\n this.toggle(names, false)\n },\n hideAll() {\n for (let i = this.openedModals.length - 1; i >= 0; i--) {\n this.openedModals[i].$emit('input', false)\n }\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n modals.forEach(modal => modal.toggle(...args))\n },\n get(...names) {\n return this.modals.filter(modal => names.includes(modal.name))\n },\n dynamicModals: [],\n openedModals: [],\n modals: []\n }\n return Vue.observable(vfm)\n }\n}\n\nexport function bindPrototype(Vue, options) {\n const vfm = createVfm(Vue, options)()\n Object.defineProperty(Vue.prototype, options.key, {\n get() {\n return vfm\n }\n })\n}\n\nexport function registModal(Vue, options) {\n Vue.component(options.componentName, assignOptions(VueFinalModal, options))\n}\nexport function registContainer(Vue, options) {\n Vue.component(options.dynamicContainerName, assignOptions(ModalsContainer, options))\n}\n","export const DUPLICATE_PLUGIN_COMPONENT =\n '[vue-final-modal] Duplicate registration API key and componentName of VueFinalModal.'\n\nexport const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.'\n\nexport const DUPLICATE_DYNAMIC_CONTAINER =\n '[vue-final-modal] Duplicate registration dynamicContainerName of ModalsContainer.'\n","import { bindPrototype, registModal, registContainer } from './PluginCore'\nimport { DUPLICATE_PLUGIN_COMPONENT, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst Plugin = () => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, options)\n const isDuplicateKey = Vue.prototype[_options.key]\n const isDuplicateComponent = Vue.options.components[_options.componentName]\n const isDuplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (isDuplicateComponent || isDuplicateDynamicContainer) {\n if (typeof window !== 'undefined') {\n if (isDuplicateKey) {\n console.error(DUPLICATE_PLUGIN_COMPONENT)\n }\n if (isDuplicateComponent) {\n console.error(DUPLICATE_COMPONENT)\n }\n if (isDuplicateDynamicContainer) {\n console.error(DUPLICATE_DYNAMIC_CONTAINER)\n }\n }\n } else {\n if (!isDuplicateKey) {\n bindPrototype(Vue, _options)\n }\n registModal(Vue, _options)\n registContainer(Vue, _options)\n }\n }\n})\n\nexport default Plugin\n"],"names":["queryFocusableElements","element","selector","querySelectorAll","isFocused","document","activeElement","FocusTrap","root","elements","onKeyDown","this","bind","enable","disable","firstElement","lastElement","length","event","key","keyCode","isTabPressed","shiftKey","focus","preventDefault","addEventListener","removeEventListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","clientY","initialClientY","hasAnyScrollableEl","el","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","e","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","targetTouches","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","passive","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","assignOptions","component","_component","Object","assign","props","$_options","type","default","bindPrototype","Vue","vfm","show","modal","args","toggle","defaultModal","value","id","Symbol","componentName","slots","on","params","dynamicModals","hide","names","hideAll","i","openedModals","$emit","name","Array","isArray","get","modals","observable","createVfm","defineProperty","prototype","defaultOptions","dynamicContainerName","install","_options","isDuplicateKey","isDuplicateComponent","components","isDuplicateDynamicContainer","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/lib/ModalsContainer.vue b/lib/ModalsContainer.vue index a6279ead..782e2f4b 100644 --- a/lib/ModalsContainer.vue +++ b/lib/ModalsContainer.vue @@ -11,7 +11,7 @@ @before-open="e => beforeOpen(e, modal)" >