From c611a0f9f7cd08ace5a398d3df6326ddec581b7e Mon Sep 17 00:00:00 2001 From: Hunter Date: Mon, 5 Apr 2021 12:20:04 +0800 Subject: [PATCH 1/8] chore: add favicon --- example/public/favicon.ico | Bin 4286 -> 0 bytes example/public/favicon.png | Bin 0 -> 23583 bytes example/public/index.html | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 example/public/favicon.ico create mode 100644 example/public/favicon.png diff --git a/example/public/favicon.ico b/example/public/favicon.ico deleted file mode 100644 index df36fcfb72584e00488330b560ebcf34a41c64c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/example/public/favicon.png b/example/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..df97e88da74afe16ecf7f01b86f4e50f66ec1acc GIT binary patch literal 23583 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 literal 0 HcmV?d00001 diff --git a/example/public/index.html b/example/public/index.html index 0329537f..cb9b449a 100644 --- a/example/public/index.html +++ b/example/public/index.html @@ -4,7 +4,7 @@ - + Vue Final Modal From 19a005a4b174bc2bf426893def0a57e1c9d77a4f Mon Sep 17 00:00:00 2001 From: Hunter Date: Mon, 5 Apr 2021 17:49:04 +0800 Subject: [PATCH 2/8] feat: support v-html in dynamic modal slot --- dist/VueFinalModal.esm.js | 2 +- dist/VueFinalModal.esm.js.map | 2 +- dist/VueFinalModal.umd.js | 2 +- dist/VueFinalModal.umd.js.map | 2 +- lib/ModalsContainer.vue | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) 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)" > From 0231bc43861133e8c2bc4faaf644f2120cada041 Mon Sep 17 00:00:00 2001 From: Hunter Date: Mon, 5 Apr 2021 16:50:29 +0800 Subject: [PATCH 3/8] docs: Bump @nuxt/content-theme-docs --- docs/package.json | 2 +- docs/yarn.lock | 582 ++++++++++++++++++++++++++++------------------ 2 files changed, 355 insertions(+), 229 deletions(-) diff --git a/docs/package.json b/docs/package.json index e62a8a5d..370804b2 100644 --- a/docs/package.json +++ b/docs/package.json @@ -9,7 +9,7 @@ "generate": "nuxt generate" }, "dependencies": { - "@nuxt/content-theme-docs": "^0.8.2", + "@nuxt/content-theme-docs": "0.10.0", "nuxt": "^2.14.12", "vue-final-modal": "^2.1.0" }, diff --git a/docs/yarn.lock b/docs/yarn.lock index 42f601c4..e77404ee 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -1245,59 +1245,59 @@ rc9 "^1.2.0" std-env "^2.2.1" -"@nuxt/content-theme-docs@^0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@nuxt/content-theme-docs/-/content-theme-docs-0.8.2.tgz#5a50a0a1b1b0a5a0e66ba7df6cccf9db64edcfd8" - integrity sha512-pU6mqvJfA8Rg8P57CSAaR83Irw7TolfQPjYofyBBN2BmA8RqAUx7S+iJg++nbq81VfNdtuYorTIY+JLGk9XWCw== +"@nuxt/content-theme-docs@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@nuxt/content-theme-docs/-/content-theme-docs-0.10.0.tgz#75c5954c6c18a908ca5087687abe8113d35293bb" + integrity sha512-d/UUsLK5i7M5qmIUs2mW04cKEe+y2w1IxkiIWjAnfudZzFj2v8eTqFYgNWLhfZrfH/AvocPNFbPCqRsgID1Vtg== dependencies: "@docsearch/css" "^1.0.0-alpha.28" "@docsearch/js" "^1.0.0-alpha.28" - "@nuxt/content" "^1.11.1" - "@nuxt/types" "^2.14.7" - "@nuxtjs/color-mode" "^2.0.0" + "@nuxt/content" "^1.13.0" + "@nuxt/types" "^2.14.12" + "@nuxtjs/color-mode" "^2.0.3" "@nuxtjs/google-fonts" "1.2.0" - "@nuxtjs/pwa" "^3.2.2" - "@nuxtjs/tailwindcss" "^3.2.0" + "@nuxtjs/pwa" "^3.3.5" + "@nuxtjs/tailwindcss" "^3.4.2" "@tailwindcss/typography" "0.2.0" clipboard "^2.0.6" defu "^3.2.2" lodash.groupby "^4.6.0" - marked "^1.2.4" - nuxt-i18n "^6.15.4" + marked "^2.0.0" + nuxt-i18n "^6.20.0" prism-themes "^1.5.0" tailwind-css-variables "^2.0.3" theme-colors "^0.0.5" vue-scrollactive "^0.9.3" -"@nuxt/content@^1.11.1": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@nuxt/content/-/content-1.12.0.tgz#2e37e31a2cc4c821a7ac350045ead56059cccb54" - integrity sha512-UWVQ1NvUjUHP3dyFlNdrjTT6Nj5F098ChtlW0KrFQ2ObidK/+KKwq7t/nE+7YTsH0hOsuekSHihDIcTkWPR2QA== +"@nuxt/content@^1.13.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@nuxt/content/-/content-1.14.0.tgz#5775b596d2db1ae65c41d461c0a6734fc276cb82" + integrity sha512-MYx+dTu2ZRUHWGp9EgVtFfXJHFeCKrzazaM4a9785OCipItp6zmm1hTlbfdCYenwa0HgaOXCxYAiN0h6tjyUZw== dependencies: "@lokidb/full-text-search" "^2.1.0" "@lokidb/loki" "^2.1.0" - "@nuxt/types" "^2.14.7" + "@nuxt/types" "^2.15.2" "@types/js-yaml" "^4.0.0" - "@types/xml2js" "^0.4.7" - change-case "^4.1.1" - chokidar "^3.4.3" - consola "^2.15.0" + "@types/xml2js" "^0.4.8" + change-case "^4.1.2" + chokidar "^3.5.1" + consola "^2.15.3" csvtojson "^2.0.10" defu "^3.2.2" detab "^2.0.4" escape-html "^1.0.3" - graceful-fs "^4.2.4" + graceful-fs "^4.2.6" gray-matter "^4.0.2" hasha "^5.2.2" - hookable "^4.3.1" + hookable "^4.4.1" html-tags "^3.1.0" js-yaml "4.0.0" - mdast-util-to-hast "^10.0.1" + mdast-util-to-hast "^10.2.0" mkdirp "^1.0.4" node-req "^2.1.2" node-res "^5.0.1" p-queue "6.6.2" - prismjs "^1.22.0" + prismjs "^1.23.0" property-information "^5.6.0" rehype-raw "^5.0.0" rehype-sort-attribute-values "^3.0.2" @@ -1310,9 +1310,9 @@ remark-rehype "^8.0.0" remark-slug "^6.0.0" remark-squeeze-paragraphs "^4.0.0" - unified "^9.2.0" + unified "^9.2.1" unist-builder "^2.0.3" - ws "^7.4.0" + ws "^7.4.3" xml2js "^0.4.23" "@nuxt/core@2.14.12": @@ -1431,31 +1431,31 @@ rc9 "^1.2.0" std-env "^2.2.1" -"@nuxt/types@^2.14.7": - version "2.14.12" - resolved "https://registry.yarnpkg.com/@nuxt/types/-/types-2.14.12.tgz#4e5aa642b67081890b3b7aab03db62855ef71a25" - integrity sha512-x58uEVygHual/kHDTrLAwXjKNYn+5udR4HJOmHd2gXgYonZu8E2UpsShIkyMRZ0nRoEAZ72i4OfcHKqGsVSI6w== +"@nuxt/types@^2.14.12", "@nuxt/types@^2.15.2": + version "2.15.4" + resolved "https://registry.yarnpkg.com/@nuxt/types/-/types-2.15.4.tgz#7d385757eb4faa28bb03cddc5f677c5c6677ab42" + integrity sha512-caDwN0mFIBd5E3y9Gtgb8nAfg+Uqz2QlLKW1qHwLP546A97lC3jIdGlRGoiEUblIxXjEOOBYJ/G5sUBWThXZLQ== dependencies: "@types/autoprefixer" "^9.7.2" - "@types/babel__core" "^7.1.12" + "@types/babel__core" "^7.1.14" "@types/compression" "^1.7.0" - "@types/connect" "^3.4.33" + "@types/connect" "^3.4.34" "@types/etag" "^1.8.0" - "@types/file-loader" "^4.2.0" + "@types/file-loader" "^4.2.1" "@types/html-minifier" "^4.0.0" - "@types/less" "^3.0.1" - "@types/node" "^12.19.8" - "@types/node-sass" "^4.11.1" - "@types/optimize-css-assets-webpack-plugin" "^5.0.1" + "@types/less" "^3.0.2" + "@types/node" "^12.20.7" + "@types/optimize-css-assets-webpack-plugin" "^5.0.3" "@types/pug" "^2.0.4" - "@types/serve-static" "^1.13.8" - "@types/terser-webpack-plugin" "^2.2.0" - "@types/webpack" "^4.41.25" - "@types/webpack-bundle-analyzer" "^3.9.0" - "@types/webpack-dev-middleware" "^3.7.2" - "@types/webpack-hot-middleware" "^2.25.3" - -"@nuxt/ufo@^0.5.0", "@nuxt/ufo@^0.5.2": + "@types/sass-loader" "8.0.1" + "@types/serve-static" "^1.13.9" + "@types/webpack" "^4.41.27" + "@types/webpack-bundle-analyzer" "^3.9.2" + "@types/webpack-dev-middleware" "^4.1.2" + "@types/webpack-hot-middleware" "^2.25.4" + sass-loader "^10.1.1" + +"@nuxt/ufo@^0.5.0": version "0.5.4" resolved "https://registry.yarnpkg.com/@nuxt/ufo/-/ufo-0.5.4.tgz#2e1428e2c947cc559d566c27786525bf0f40fbc8" integrity sha512-JZOGDlt2BvLCBmLhrchhRJ6tP9PBfSWLdsHC+JVJ5Qp8/hT/2u61cSsLS30zUOwcPRaQ3y2oHNkEiKJ5v90iEQ== @@ -1554,10 +1554,10 @@ webpack-node-externals "^2.5.2" webpackbar "^4.0.0" -"@nuxtjs/color-mode@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nuxtjs/color-mode/-/color-mode-2.0.3.tgz#6ba5ab0a6364c966b48386867f2660bf0dcd7b5d" - integrity sha512-yfTkUbXcq42YW7qCv66kqAttnjr+sLpxY+HIJq7nlLadDQeEyjl+QMR8AHKS2KQMVfMwd7rbJyE+jU2PKjwDcQ== +"@nuxtjs/color-mode@^2.0.3": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nuxtjs/color-mode/-/color-mode-2.0.5.tgz#79a5c70384bd245ebc9c6499e9dac5ded301c54b" + integrity sha512-upPCVTLQ2vZGvOjt0geLanPSS+ailgFRjqRsCUcbCQOwEesEO/zoLmbWBO35t3lV5nRXF7CLCX65KwBiogXE9g== dependencies: defu "^3.2.2" lodash.template "^4.5.0" @@ -1577,7 +1577,7 @@ consola "^2.15.0" google-fonts-helper "^1.1.1" -"@nuxtjs/pwa@^3.2.2": +"@nuxtjs/pwa@^3.3.5": version "3.3.5" resolved "https://registry.yarnpkg.com/@nuxtjs/pwa/-/pwa-3.3.5.tgz#db7c905536ebe8a464a347b6ae3215810642c044" integrity sha512-8tTmW8DBspWxlJwTimOHTkwfkwPpL9wIcGmy75Gcmin+c9YtX2Ehxmhgt/TLFOC9XsLAqojqynw3/Agr/9OE1w== @@ -1607,19 +1607,19 @@ minimatch "^3.0.4" sitemap "^4.1.1" -"@nuxtjs/tailwindcss@^3.2.0": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-3.4.2.tgz#2376877b7e3fff35c044e99828d5e7cacfec5621" - integrity sha512-Hv1b/4zYaffNc0JHss3jqKLZoPRQfG7upxGguP749Zx2VgMyFExeT3NMAxntLHctKvv/ohN+5kFGiewZGI5n2A== +"@nuxtjs/tailwindcss@^3.4.2": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-3.4.3.tgz#8239b11857d395000d9ff5df52b18644d631629d" + integrity sha512-W2FIB5zzvkPkNayQ3mTy7jcP0rTDwnrjv79v96/CRTptFbY5TxvZVJI7N0r8ova/IWPSdkgjdCb7wbzolzzgjg== dependencies: - "@nuxt/ufo" "^0.5.2" chalk "^4.1.0" clear-module "^4.1.1" - consola "^2.15.0" + consola "^2.15.3" defu "^3.2.2" - fs-extra "^9.0.1" - tailwind-config-viewer "^1.4.0" + fs-extra "^9.1.0" + tailwind-config-viewer "^1.5.0" tailwindcss "^1.9.6" + ufo "^0.6.9" "@nuxtjs/youch@^4.2.3": version "4.2.3" @@ -1660,10 +1660,10 @@ "@types/browserslist" "*" postcss "7.x.x" -"@types/babel__core@^7.1.12": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== +"@types/babel__core@^7.1.14": + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1735,13 +1735,20 @@ dependencies: "@types/express" "*" -"@types/connect@*", "@types/connect@^3.4.33": +"@types/connect@*": version "3.4.33" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546" integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A== dependencies: "@types/node" "*" +"@types/connect@^3.4.34": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + "@types/etag@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@types/etag/-/etag-1.8.0.tgz#37f0b1f3ea46da7ae319bbedb607e375b4c99f7e" @@ -1768,12 +1775,12 @@ "@types/qs" "*" "@types/serve-static" "*" -"@types/file-loader@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/file-loader/-/file-loader-4.2.0.tgz#ec8e793e275b7f90cdec3ff286518c6bf7bb8fc3" - integrity sha512-N3GMqKiKSNd41q4/lZlkdvNXKKWVdOXrA8Rniu64+25X0K2U1mWmTSu1CIqXKKsZUCwfaFcaioviLQtQ+EowLg== +"@types/file-loader@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@types/file-loader/-/file-loader-4.2.1.tgz#f41154dc90d578002df8ae94db80c315e844720e" + integrity sha512-ImtIwnIEEMgyE7DK1JduhiDv+8WzfRWb3BPuf6RiBD1ySz05vyDRhGiKvIcuUPxUzMNBRZHN0pB+bWXSX3+t1w== dependencies: - "@types/webpack" "*" + "@types/webpack" "^4" "@types/hast@^2.0.0": version "2.3.1" @@ -1818,10 +1825,10 @@ dependencies: "@types/node" "*" -"@types/less@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/less/-/less-3.0.1.tgz#625694093c72f8356c4042754e222407e50d6b08" - integrity sha512-dBp05MtWN/w1fGVjj5LVrDw6VrdYllpWczbUkCsrzBj08IHsSyRLOFvUrCFqZFVR+nsqkrRLNg6oOlvqMLPaSA== +"@types/less@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/less/-/less-3.0.2.tgz#2761d477678c8374cb9897666871662eb1d1115e" + integrity sha512-62vfe65cMSzYaWmpmhqCMMNl0khen89w57mByPi1OseGfcV/LV03fO8YVrNj7rFQsRWNJo650WWyh6m7p8vZmA== "@types/mdast@^3.0.0": version "3.0.3" @@ -1830,13 +1837,6 @@ dependencies: "@types/unist" "*" -"@types/memory-fs@*": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@types/memory-fs/-/memory-fs-0.3.2.tgz#5d4753f9b390cb077c8c8af97bc96463399ceccd" - integrity sha512-j5AcZo7dbMxHoOimcHEIh0JZe5e1b8q8AqGSpZJrYc7xOgCIP79cIjTdx5jSDLtySnQDwkDTqwlC7Xw7uXw7qg== - dependencies: - "@types/node" "*" - "@types/mime@*": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a" @@ -1847,7 +1847,7 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/node-sass@^4.11.1": +"@types/node-sass@*": version "4.11.1" resolved "https://registry.yarnpkg.com/@types/node-sass/-/node-sass-4.11.1.tgz#bda27c5181cbf7c090c3058e119633dfb2b6504c" integrity sha512-wPOmOEEtbwQiPTIgzUuRSQZ3H5YHinsxRGeZzPSDefAm4ylXWnZG9C0adses8ymyplKK0gwv3JkDNO8GGxnWfg== @@ -1864,17 +1864,17 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.62.tgz#733923d73669188d35950253dd18a21570085d2b" integrity sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg== -"@types/node@^12.19.8": - version "12.19.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.15.tgz#0de7e978fb43db62da369db18ea088a63673c182" - integrity sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw== +"@types/node@^12.20.7": + version "12.20.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" + integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== -"@types/optimize-css-assets-webpack-plugin@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#1f437ef9ef937b393687a8819be2d2fddc03b069" - integrity sha512-qyi5xmSl+DTmLFtVtelhso3VnNQYxltfgMa+Ed02xqNZCZBD0uYR6i64FmcwfieDzZRdwkJxt9o2JHq/5PBKQg== +"@types/optimize-css-assets-webpack-plugin@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#9bf5bdbb57b379f59a37a6775336f42cd6701852" + integrity sha512-PJgbI4KplJfyxKWVrBbEL+rePEBqeozJRMT0mBL3ynhvngASBV/XJ+BneLuJN74RjjMzO0gA5ns80mgubQdZAA== dependencies: - "@types/webpack" "*" + "@types/webpack" "^4" "@types/parse5@^5.0.0": version "5.0.3" @@ -1913,6 +1913,22 @@ dependencies: "@types/node" "*" +"@types/sass-loader@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@types/sass-loader/-/sass-loader-8.0.1.tgz#628eb80c30cb34ce622056f9b9a1606a8147dcd0" + integrity sha512-kum0/5Im5K2WdDTRsLtrXXvX2VJc3rgq9favK+vIdWLn35miWUIYuPkiQlLCHks9//sZ3GWYs4uYzCdmoKKLcQ== + dependencies: + "@types/node-sass" "*" + "@types/sass" "*" + "@types/webpack" "^4" + +"@types/sass@*": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.16.0.tgz#b41ac1c17fa68ffb57d43e2360486ef526b3d57d" + integrity sha512-2XZovu4NwcqmtZtsBR5XYLw18T8cBCnU2USFHTnYLLHz9fkhnoEMoDsqShJIOFsFhn5aJHjweiUUdTrDGujegA== + dependencies: + "@types/node" "*" + "@types/sax@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.1.tgz#e0248be936ece791a82db1a57f3fb5f7c87e8172" @@ -1928,7 +1944,7 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" -"@types/serve-static@^1.13.8": +"@types/serve-static@^1.13.9": version "1.13.9" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== @@ -1946,13 +1962,10 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== -"@types/terser-webpack-plugin@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@types/terser-webpack-plugin/-/terser-webpack-plugin-2.2.1.tgz#d6687ed29026532764b031209a5d6dc6d44b33f2" - integrity sha512-Z/6t/7qz4LeO64owJ9x7JQ6X791qfLxp1M1eCp6hFQlj7xuB5+Ol7DpEn5kWClTARZ7GlPLRsEWzFzQjZShF6w== - dependencies: - "@types/webpack" "*" - terser "^4.3.9" +"@types/tapable@^1": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.7.tgz#545158342f949e8fd3bfd813224971ecddc3fac4" + integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== "@types/uglify-js@*": version "3.11.0" @@ -1966,30 +1979,28 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== -"@types/webpack-bundle-analyzer@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#bf2f3fd7f1fe6a71dff8968afeb12785d1ce737b" - integrity sha512-O4Dsmml4T+emssdk3t6/N1vwtYRx1VfWCx0Oph4jRY62DZGNOL9IAS6mSX0XG1LdZuFSX0g42DXj1otQuPXRGQ== +"@types/webpack-bundle-analyzer@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.2.tgz#a20936d3848ddbbe3a0678ba2e225f790ab0d344" + integrity sha512-+LirhEpWEPRMyOW0HCy/lTTGzfdEWL26ximknO+/oaAQkigJJktxMr/QE7EWVNMRv+hpwW20Mv3YfLs42q2kjA== dependencies: - "@types/webpack" "*" + "@types/webpack" "^4" -"@types/webpack-dev-middleware@^3.7.2": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@types/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#31030c7cca7f98d56debfd859bb57f9040f0d3c5" - integrity sha512-PvETiS//pjVZBK48aJfbxzT7+9LIxanbnk9eXXYUfefGyPdsCkNrMDxRlOVrBvxukXUhD5B6N/pkPMdWrtuFkA== +"@types/webpack-dev-middleware@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/webpack-dev-middleware/-/webpack-dev-middleware-4.1.2.tgz#c683adc6a44d0b66e98f1932ab33d1c32d558142" + integrity sha512-SxXzPCqeZ03fJ2dg3iD7cSXvqZymmS5/2GD9fANRcyWN7HYK1H3ty6q7IInXZKvPrdUqij831G3RLIeKK6aGdw== dependencies: "@types/connect" "*" - "@types/memory-fs" "*" - "@types/webpack" "*" - loglevel "^1.6.2" + "@types/webpack" "^4" -"@types/webpack-hot-middleware@^2.25.3": - version "2.25.3" - resolved "https://registry.yarnpkg.com/@types/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz#ba6265ada359cae4f437d8ac08ac5b8c616f7521" - integrity sha512-zGkTzrwQnhSadIXGYGZLu7tpXQwn4+6y9nGeql+5UeRtW/k54Jp4SnzB0Qw00ednw0ZFoZOvqTFfXSbFXohc5Q== +"@types/webpack-hot-middleware@^2.25.4": + version "2.25.4" + resolved "https://registry.yarnpkg.com/@types/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz#e439e9a3694158badf23b094bc1ad6051767ca05" + integrity sha512-6tQb9EBKIANZYUVLQYWiWfDFVe7FhXSj4bB2EF5QB7VtYWL3HDR+y/zqjZPAnCorv0spLqVMRqjRK8AmhfocMw== dependencies: "@types/connect" "*" - "@types/webpack" "*" + "@types/webpack" "^4" "@types/webpack-sources@*": version "1.4.2" @@ -2000,22 +2011,22 @@ "@types/source-list-map" "*" source-map "^0.7.3" -"@types/webpack@*", "@types/webpack@^4.41.8": - version "4.41.22" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.22.tgz#ff9758a17c6bd499e459b91e78539848c32d0731" - integrity sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ== +"@types/webpack@^4", "@types/webpack@^4.41.27": + version "4.41.27" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" + integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== dependencies: "@types/anymatch" "*" "@types/node" "*" - "@types/tapable" "*" + "@types/tapable" "^1" "@types/uglify-js" "*" "@types/webpack-sources" "*" source-map "^0.6.0" -"@types/webpack@^4.41.25": - version "4.41.26" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.26.tgz#27a30d7d531e16489f9c7607c747be6bc1a459ef" - integrity sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA== +"@types/webpack@^4.41.8": + version "4.41.22" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.22.tgz#ff9758a17c6bd499e459b91e78539848c32d0731" + integrity sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -2024,7 +2035,7 @@ "@types/webpack-sources" "*" source-map "^0.6.0" -"@types/xml2js@^0.4.7": +"@types/xml2js@^0.4.8": version "0.4.8" resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.8.tgz#84c120c864a5976d0b5cf2f930a75d850fc2b03a" integrity sha512-EyvT83ezOdec7BhDaEcsklWy7RSIdi6CNe95tmOAK0yx/Lm30C9K75snT3fYayK59ApC2oyW+rcHErdG05FHJA== @@ -3093,6 +3104,14 @@ camel-case@^4.1.1: pascal-case "^3.1.1" tslib "^1.10.0" +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + camelcase-css@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" @@ -3136,14 +3155,14 @@ caniuse-lite@^1.0.30001164: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz#32955490d2f60290bb186bb754f2981917fa744f" integrity sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA== -capital-case@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.3.tgz#339bd77e8fab6cf75111d4fca509b3edf7c117c8" - integrity sha512-OlUSJpUr7SY0uZFOxcwnDOU7/MpHlKTZx2mqnDYQFrDudXLFm0JJ9wr/l4csB+rh2Ug0OPuoSO53PqiZBqno9A== +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case-first "^2.0.1" + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" caseless@~0.12.0: version "0.12.0" @@ -3191,23 +3210,23 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -change-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.1.tgz#d5005709275952e7963fed7b91e4f9fdb6180afa" - integrity sha512-qRlUWn/hXnX1R1LBDF/RelJLiqNjKjUqlmuBVSEIyye8kq49CXqkZWKmi8XeUAdDXWFOcGLUMZ+aHn3Q5lzUXw== - dependencies: - camel-case "^4.1.1" - capital-case "^1.0.3" - constant-case "^3.0.3" - dot-case "^3.0.3" - header-case "^2.0.3" - no-case "^3.0.3" - param-case "^3.0.3" - pascal-case "^3.1.1" - path-case "^3.0.3" - sentence-case "^3.0.3" - snake-case "^3.0.3" - tslib "^1.10.0" +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" character-entities-legacy@^1.0.0: version "1.1.4" @@ -3283,6 +3302,21 @@ chokidar@^3.4.3: optionalDependencies: fsevents "~2.1.2" +chokidar@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -3567,6 +3601,11 @@ consola@^2.10.0, consola@^2.13.0, consola@^2.15.0, consola@^2.6.0, consola@^2.9. resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.0.tgz#40fc4eefa4d2f8ef2e2806147f056ea207fcc0e9" integrity sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ== +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -3584,14 +3623,14 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" -constant-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a" - integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA== +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case "^2.0.1" + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" constants-browserify@^1.0.0: version "1.0.0" @@ -4272,6 +4311,14 @@ dot-case@^3.0.3: no-case "^3.0.3" tslib "^1.10.0" +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -4958,6 +5005,11 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -5153,11 +5205,16 @@ got@^11.8.1: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.6: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + gray-matter@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" @@ -5391,13 +5448,13 @@ he@1.2.0, he@^1.1.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -header-case@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.3.tgz#8a7407d16edfd5c970f8ebb116e6383f855b5a72" - integrity sha512-LChe/V32mnUQnTwTxd3aAlNMk8ia9tjCDb/LjYtoMrdAPApxLB+azejUk5ERZIZdIqvinwv6BAUuFXH/tQPdZA== +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== dependencies: - capital-case "^1.0.3" - tslib "^1.10.0" + capital-case "^1.0.4" + tslib "^2.0.3" hex-color-regex@^1.1.0: version "1.1.0" @@ -5413,10 +5470,10 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hookable@^4.3.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/hookable/-/hookable-4.4.0.tgz#536d3dd95b89cedd1c7114c8efacdf186ab3c466" - integrity sha512-Nuax19F4uk+qTnt5IImF0RwdeBq2Mrf+a7ZRdg8CC2739xlnSGcyN+t+Etm67h7mRAjTbdyQzLY1X+LwkPs1PQ== +hookable@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-4.4.1.tgz#3d7154ac7e1f6f147e50fef583832f2645b9f04f" + integrity sha512-KWjZM8C7IVT2qne5HTXjM6R6VnRfjfRlf/oCnHd+yFxoHO1DzOl6B9LzV/VqGQK/IrFewq+EG+ePVrE9Tpc3fg== hoopy@^0.1.4: version "0.1.4" @@ -6427,6 +6484,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -6462,11 +6524,6 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -loglevel@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== - longest-streak@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" @@ -6492,6 +6549,13 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -6565,10 +6629,10 @@ markdown-table@^2.0.0: dependencies: repeat-string "^1.0.0" -marked@^1.2.4: - version "1.2.9" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.9.tgz#53786f8b05d4c01a2a5a76b7d1ec9943d29d72dc" - integrity sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw== +marked@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.1.tgz#5e7ed7009bfa5c95182e4eb696f85e948cefcee3" + integrity sha512-5+/fKgMv2hARmMW7DOpykr2iLhl0NgjyELk5yn92iE7z8Se1IS9n3UsFm86hFXIkvMBmVxki8+ckcpjBeyo/hw== md5.js@^1.3.4: version "1.3.5" @@ -6663,7 +6727,7 @@ mdast-util-gfm@^0.1.0: mdast-util-gfm-task-list-item "^0.1.0" mdast-util-to-markdown "^0.6.1" -mdast-util-to-hast@^10.0.0, mdast-util-to-hast@^10.0.1: +mdast-util-to-hast@^10.0.0: version "10.1.1" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.1.1.tgz#4dce367abdc57311a87cf95da54a4d115b9d25da" integrity sha512-+hvJrYiUgK2aY0Q1h1LaHQ4h0P7VVumWdAcUuG9k49lYglyU9GtTrA4O8hMh5gRnyT22wC15takM2qrrlpvNxQ== @@ -6677,6 +6741,20 @@ mdast-util-to-hast@^10.0.0, mdast-util-to-hast@^10.0.1: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" +mdast-util-to-hast@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" + integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.2.tgz#8fe6f42a2683c43c5609dfb40407c095409c85b4" @@ -7102,6 +7180,14 @@ no-case@^3.0.3: lower-case "^2.0.1" tslib "^1.10.0" +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-emoji@^1.8.1: version "1.10.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" @@ -7322,20 +7408,23 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nuxt-i18n@^6.15.4: - version "6.20.0" - resolved "https://registry.yarnpkg.com/nuxt-i18n/-/nuxt-i18n-6.20.0.tgz#09d7839c56b2f4eec6b37e55ee7be0b0d18563d4" - integrity sha512-R6NrAskfaaUvs7xAvApZ+Piakqx3x50EAF5wOsxQZLc2Yx2/pN0C3sktxlFhrf0lr9lD1F9WhgUwz3GJV1ul3A== +nuxt-i18n@^6.20.0: + version "6.22.3" + resolved "https://registry.yarnpkg.com/nuxt-i18n/-/nuxt-i18n-6.22.3.tgz#5e9e5c060bedc1c480827ada014f05f1fed11c7c" + integrity sha512-IZ4OLOYHsF6cKB0ik7j9rFr81xFmij/HQNgepcc63dFJFU6SSHJ6uO2RkGo7v8e0ttr9QDIiTM3xJrmd5W1PVQ== dependencies: "@babel/parser" "^7.5.5" "@babel/traverse" "^7.5.5" "@intlify/vue-i18n-extensions" "^1.0.1" "@intlify/vue-i18n-loader" "^1.0.0" cookie "^0.4.0" + devalue "^2.0.1" is-https "^3.0.0" js-cookie "^2.2.1" klona "^2.0.4" - vue-i18n "^8.18.1" + lodash.merge "^4.6.2" + ufo "^0.6.7" + vue-i18n "^8.23.0" nuxt@^2.14.12: version "2.14.12" @@ -7595,6 +7684,14 @@ param-case@^3.0.3: dot-case "^3.0.3" tslib "^1.10.0" +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-2.0.0.tgz#fa71f88ff1a50c27e15d8ff74e0e3a9523bf8708" @@ -7684,6 +7781,14 @@ pascal-case@^3.1.1: no-case "^3.0.3" tslib "^1.10.0" +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -7694,13 +7799,13 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== -path-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.3.tgz#d48119aed52c4712e036ca40c6b15984f909554f" - integrity sha512-UMFU6UETFpCNWbIWNczshPrnK/7JAXBP2NYw80ojElbQ2+JYxdqWDBkvvqM93u4u6oLmuJ/tPOf2tM8KtXv4eg== +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" + dot-case "^3.0.4" + tslib "^2.0.3" path-dirname@^1.0.0: version "1.0.2" @@ -8575,7 +8680,7 @@ prism-themes@^1.5.0: resolved "https://registry.yarnpkg.com/prism-themes/-/prism-themes-1.5.0.tgz#92925e4aa0ab5e0afefcea1032df7d61bbcdc1a5" integrity sha512-aqKD610WNYO90MVXm0xM8P1pX5jPHyTjbAefV0TtWFLZk7eNWnGqLGx+HH6Xxlf9hiC66VjBeCP7m3P72FS+ZQ== -prismjs@^1.22.0: +prismjs@^1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA== @@ -9263,6 +9368,17 @@ sass-graph@2.2.5: scss-tokenizer "^0.2.3" yargs "^13.3.2" +sass-loader@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + sass-loader@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-9.0.3.tgz#086adcf0bfdcc9d920413e2cdc3ba3321373d547" @@ -9378,14 +9494,14 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -sentence-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.3.tgz#47576e4adff7abf42c63c815b0543c9d2f85a930" - integrity sha512-ZPr4dgTcNkEfcGOMFQyDdJrTU9uQO1nb1cjf+nuzb6FxgMDgKddZOM29qEsB7jvsZSMruLRcL2KfM4ypKpa0LA== +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case-first "^2.0.1" + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" serialize-javascript@^3.1.0: version "3.1.0" @@ -9525,13 +9641,13 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snake-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.3.tgz#c598b822ab443fcbb145ae8a82c5e43526d5bbee" - integrity sha512-WM1sIXEO+rsAHBKjGf/6R1HBBcgbncKS08d2Aqec/mrDSpU80SiOU41hO7ny6DToHSyrlwTYzQBIK1FPSx4Y3Q== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" + dot-case "^3.0.4" + tslib "^2.0.3" snapdragon-node@^2.0.1: version "2.1.1" @@ -9977,10 +10093,10 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" -tailwind-config-viewer@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/tailwind-config-viewer/-/tailwind-config-viewer-1.5.0.tgz#b0a345a70f4282f305bf012fdb2d54e48a4e885f" - integrity sha512-yiQjFh/Hv9MgCmqJgIzCp74TDfwhBSS3no3vwEa094DGSk1eoaAKbzJskFFma91a0IxI8oVFOPZ+HCPiSZR16A== +tailwind-config-viewer@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/tailwind-config-viewer/-/tailwind-config-viewer-1.5.1.tgz#c8ba81593ae8bc64d3625be983ebcf25aea3cc30" + integrity sha512-vlrZjC+sJMgtj5Pz9GsJsJMVVWi1Pv/F3xU54OuOHM8fD+Pb8KSB3Ja2lFVD8KN//wsvkpuJST8OctbApb3mMw== dependencies: "@koa/router" "^9.0.1" commander "^6.0.0" @@ -10073,7 +10189,7 @@ terser-webpack-plugin@^2.3.5: terser "^4.6.12" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.3.9, terser@^4.6.12, terser@^4.6.3: +terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -10225,6 +10341,11 @@ tslib@^1.10.0, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" @@ -10275,6 +10396,11 @@ ua-parser-js@^0.7.22: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== +ufo@^0.6.7, ufo@^0.6.9: + version "0.6.10" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.6.10.tgz#c7ace9b8f72cb08c35e3a8c8edc76f062fbaa7d0" + integrity sha512-sMbJnrBcKKsbVyr6++hb0n9lCmrMqkJrNnJIOJ3sckeqY6NMfAULcRGbBWcASSnN1HDV3YqiGCPzi9RVs511bw== + uglify-js@^3.5.1: version "3.11.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.0.tgz#67317658d76c21e0e54d3224aee2df4ee6c3e1dc" @@ -10308,10 +10434,10 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -unified@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" - integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== +unified@^9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" + integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -10448,24 +10574,24 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -upper-case-first@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.1.tgz#32ab436747d891cc20ab1e43d601cb4d0a7fbf4a" - integrity sha512-105J8XqQ+9RxW3l9gHZtgve5oaiR9TIwvmZAMAIZWRHe00T21cdvewKORTlOJf/zXW6VukuTshM+HXZNWz7N5w== +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== dependencies: - tslib "^1.10.0" + tslib "^2.0.3" upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= -upper-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" - integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== dependencies: - tslib "^1.10.0" + tslib "^2.0.3" uri-js@^4.2.2: version "4.4.0" @@ -10631,10 +10757,10 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== -vue-i18n@^8.18.1: - version "8.21.1" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.21.1.tgz#afa8e6390a5de3b65bd17533c4269181f86f1d61" - integrity sha512-KEakJLI7R6+UCmhJOMZ0K7C+Zf5FcMh7QDkBRaEq39V7d9JgSrTDBf/9HuHU3TaxQYXx4fUi5PTIPdwLXq+iow== +vue-i18n@^8.23.0: + version "8.24.2" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.24.2.tgz#4bfba15a89c0697220b55f787bbcb05a461d5482" + integrity sha512-+TkAPBQw4Cp2bQrSPtPNkhET7XcWYjjDt1UjWYQs+xbT41q5OAl1I3IZyhg0drjn1nlC1K0f8sLVB/nshUcF1Q== vue-loader@^15.9.5: version "15.9.5" @@ -10948,10 +11074,10 @@ ws@^6.0.0: dependencies: async-limiter "~1.0.0" -ws@^7.4.0: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +ws@^7.4.3: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== x-is-array@^0.1.0: version "0.1.0" From 7d9632b4d40c4e4f2ab33aa10464c3a94be9e8e2 Mon Sep 17 00:00:00 2001 From: Hunter Liu Date: Tue, 6 Apr 2021 19:31:44 +0800 Subject: [PATCH 4/8] feat: add postcss plugin autoprefixer (#71) --- rollup.config.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index d732d1ae..41055899 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -5,6 +5,7 @@ import commonJS from 'rollup-plugin-commonjs' import { terser } from 'rollup-plugin-terser' import cleanup from 'rollup-plugin-cleanup' import sizes from '@atomico/rollup-plugin-sizes' +import autoprefixer from 'autoprefixer' const pkg = require('./package.json') @@ -13,7 +14,10 @@ const plugins = [ commonJS(), VuePlugin({ normalizer: '~vue-runtime-helpers/dist/normalize-component.js', - styleInjector: '~vue-runtime-helpers/dist/inject-style/browser.js' + styleInjector: '~vue-runtime-helpers/dist/inject-style/browser.js', + style: { + postcssPlugins: [autoprefixer()] + } }), babel({ babelHelpers: 'bundled', From a9efa8105bf9c610a8dedfd22544de640a593d08 Mon Sep 17 00:00:00 2001 From: Hunter Liu Date: Tue, 6 Apr 2021 19:34:03 +0800 Subject: [PATCH 5/8] refactor: plugin validation, unit test (#70) fix: build lib refactor validPlugin function refactor: validPlugin and unit test test: watch hideOverlay --- dist/VueFinalModal.esm.js | 2 +- dist/VueFinalModal.esm.js.map | 2 +- dist/VueFinalModal.umd.js | 2 +- dist/VueFinalModal.umd.js.map | 2 +- lib/Plugin.js | 44 +++++++++--------- lib/utils/errors.js | 3 +- tests/unit/Plugin.spec.js | 79 ++++++++++++++++++++++++++++++++ tests/unit/VueFinalModal.spec.js | 66 +++++++++++++++----------- 8 files changed, 143 insertions(+), 57 deletions(-) create mode 100644 tests/unit/Plugin.spec.js diff --git a/dist/VueFinalModal.esm.js b/dist/VueFinalModal.esm.js index 4abdf66d..73b5b39e 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)?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;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,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 $,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 L={};var N=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=L[n]||(L[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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"4yDAEA,IAsBMA,EAAyB,SAAAC,UAJN,SAACA,EAASC,YACrBD,EAAQE,iBAAiBD,IAAa,IAI3CC,CAAiBF,EAtBxB,qWAyBIG,EAAY,SAAAH,UACTA,GAAWI,SAASC,eAOvBC,qIAEGC,KAAO,UACPC,SAAW,QAEXC,UAAYC,KAAKD,UAAUE,KAAKD,WAChCE,OAASF,KAAKE,OAAOD,KAAKD,WAC1BG,QAAUH,KAAKG,QAAQF,KAAKD,WAC5BI,aAAeJ,KAAKI,aAAaH,KAAKD,WACtCK,YAAcL,KAAKK,YAAYJ,KAAKD,wDAG3C,kBACSA,KAAKF,SAASE,KAAKF,SAASQ,OAAS,IAAM,iCAGpD,kBACSN,KAAKF,SAAS,IAAM,8BAG7B,SAAUS,MAxCS,SAAAA,SACE,QAAdA,EAAMC,KAAmC,IAAlBD,EAAME,QAwC7BC,CAAaH,QAKdA,EAAMI,gBA7BJjB,SAASC,eAsCWF,EAAUO,KAAKK,qBAClCD,eAAeQ,aACpBL,EAAMM,yBAVFpB,EAAUO,KAAKI,uBACZC,cAAcO,QACnBL,EAAMM,0CAaZ,mBACWb,KAAKH,2BAGhB,SAAOA,GACAA,SAIAA,KAAOA,OACPC,SAAWT,EAAuBW,KAAKH,WAEvCA,KAAKiB,iBAAiB,UAAWd,KAAKD,mCAG7C,gBACOF,KAAKkB,oBAAoB,UAAWf,KAAKD,gBACzCF,KAAO,0CC5FZmB,GAAmB,EACvB,GAAsB,oBAAXC,OAAwB,KAC3BC,EAAqB,eAEvBF,GAAmB,IAIvBC,OAAOH,iBAAiB,cAAe,KAAMI,GAC7CD,OAAOF,oBAAoB,cAAe,KAAMG,GAGlD,IAWIC,EACAC,EAZEC,EACc,oBAAXJ,QACPA,OAAOK,WACPL,OAAOK,UAAUC,WAChB,iBAAiBC,KAAKP,OAAOK,UAAUC,WACP,aAA9BN,OAAOK,UAAUC,UAA2BN,OAAOK,UAAUG,eAAiB,GAE/EC,EAAQ,GACRC,GAAwB,EACxBC,EAAU,EACVC,GAAkB,EA2BhBC,EAAqB,SAACC,EAAIC,OAC1BF,GAAqB,SAXN,SAAAC,WACbE,EAAO,GACNF,GAAI,IACTE,EAAKC,KAAKH,GACNA,EAAGI,UAAUC,SAAS,OAAQ,OAAOH,EACzCF,EAAKA,EAAGM,qBAEHJ,EAKMK,CAAaP,GACrBQ,SAAQ,SAAAR,IA1BM,SAAAA,OACdA,GAAMA,EAAGS,WAAaC,KAAKC,aAAc,OAAO,MAE/CC,EAAQ1B,OAAO2B,iBAAiBb,SAC/B,CAAC,OAAQ,UAAUc,SAASF,EAAMG,YAAcf,EAAGgB,aAAehB,EAAGiB,cAuBtEC,CAAalB,IApBA,SAACA,EAAIC,WACH,IAAjBD,EAAGmB,WAAmBlB,EAAQ,GAC9BD,EAAGmB,UAAYnB,EAAGiB,aAAehB,GAASD,EAAGgB,cAAgBf,EAAQ,GAkB/CmB,CAAapB,EAAIC,KACvCF,GAAqB,MAGlBA,GAIHsB,EAAiB,SAAArB,UAAML,EAAM2B,MAAK,kBAAMvB,EAAmBC,GAAKH,OAEhEf,EAAiB,SAAAyC,OACfC,EAAID,GAAYrC,OAAOV,cAMzB6C,EAAeG,EAAEC,UAIjBD,EAAEE,QAAQnD,OAAS,IAEnBiD,EAAE1C,gBAAgB0C,EAAE1C,kBAEjB,KAgEI6C,EAAoB,SAACC,EAAeC,MAE1CD,OASDjC,EAAM2B,MAAK,SAAAQ,UAAQA,EAAKF,gBAAkBA,UAIxCE,EAAO,CACXF,cAAAA,EACAC,QAASA,GAAW,IAGtBlC,cAAYA,IAAOmC,IAEfxC,GACFsC,EAAcG,aAAe,SAAAvD,GACQ,IAA/BA,EAAMwD,cAAczD,SAEtBuB,EAAiBtB,EAAMwD,cAAc,GAAGnC,UAG5C+B,EAAcK,YAAc,SAAAzD,GACS,IAA/BA,EAAMwD,cAAczD,QAnDT,SAACC,EAAOoD,GAC3B/B,EAAUrB,EAAMwD,cAAc,GAAGnC,QAAUC,GAEvCuB,EAAe7C,EAAMiD,UAIrBG,GAA6C,IAA5BA,EAAcT,WAAmBtB,EAAU,GAV3B,SAAA+B,WACrCA,GAAgBA,EAAcZ,aAAeY,EAAcT,WAAaS,EAAcX,aAclFiB,CAA+BN,IAAkB/B,EAAU,EAHtDf,EAAeN,GAQxBA,EAAM2D,mBAoCAC,CAAa5D,EAAOoD,IAInBhC,IACHjC,SAASoB,iBAAiB,YAAaD,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAC/F1C,GAAwB,IAnGJ,SAAAiC,WAESS,IAA7BjD,EAAwC,KACpCkD,IAAwBV,IAA2C,IAAhCA,EAAQU,oBAC3CC,EAAetD,OAAOuD,WAAa9E,SAAS+E,gBAAgBC,eAE9DJ,GAAuBC,EAAe,EAAG,KACrCI,EAA2BC,SAAShC,iBAAiBlD,SAASmF,MAAMC,iBAAiB,iBAAkB,IAC7G1D,EAA2B1B,SAASmF,KAAKlC,MAAMoC,aAC/CrF,SAASmF,KAAKlC,MAAMoC,uBAAkBJ,EAA2BJ,cAIjCF,IAAhClD,IACFA,EAA8BzB,SAASmF,KAAKlC,MAAMqC,SAClDtF,SAASmF,KAAKlC,MAAMqC,SAAW,UAuF/BC,CAAkBrB,SArClBsB,QAAQC,MACN,mHAwCOC,EAAmB,SAAAzB,GACzBA,GAQLjC,EAAQA,EAAM2D,QAAO,SAAAxB,UAAQA,EAAKF,gBAAkBA,KAEhDtC,GACFsC,EAAcG,aAAe,KAC7BH,EAAcK,YAAc,KAExBrC,GAA0C,IAAjBD,EAAMpB,SACjCZ,SAASqB,oBAAoB,YAAaF,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAClG1C,GAAwB,IAEhBD,EAAMpB,cAzGe+D,IAA7BjD,IACF1B,SAASmF,KAAKlC,MAAMoC,aAAe3D,EAInCA,OAA2BiD,QAGOA,IAAhClD,IACFzB,SAASmF,KAAKlC,MAAMqC,SAAW7D,EAI/BA,OAA8BkD,KA4E9Ba,QAAQC,MACN,6JC3HN,0cARA,m/TC5DA,SAASG,EAAcC,EAAW3B,OAC1B4B,OAAkBD,UACxBE,OAAOC,OAAOF,EAAWG,MAAO,CAC9BC,UAAW,CAAEC,KAAMJ,OAAQK,QAAS,kBAAMlC,MAErC4B,EAoDF,SAASO,EAAcC,EAAKpC,OAC3BqC,EAlDR,SAAmBD,EAAKpC,OAClBqC,SAEG,kBACLA,EAAM,CACJC,cAAKC,8BAAUC,mCAAAA,6BACED,QACR,cACEE,mBAAOF,GAAO,UAASC,cAEzB,aAEKE,EAAe,CACnBC,OAAO,EACPC,GAAIC,OAAO,gBACXlB,UAAW3B,EAAQ8C,cACnBzG,KAAM,GACN0G,MAAO,GACPC,GAAI,GACJC,OAAQT,EAAK,SAEVU,cAAc5E,KAAKuD,OAAOC,OAAOY,EAAcH,MAK5DY,2CAAQC,2BAAAA,uBACDX,OAAOW,GAAO,IAErBC,uBACO,IAAIC,EAAIlH,KAAKmH,aAAa7G,OAAS,EAAG4G,GAAK,EAAGA,SAC5CC,aAAaD,GAAGE,MAAM,SAAS,IAGxCf,gBAAOgB,8BAASjB,mCAAAA,qBACCkB,MAAMC,QAAQF,GAAQrH,KAAKwH,iBAAOH,IAAQrH,KAAKwH,IAAIH,IAC3D9E,SAAQ,SAAA4D,UAASA,EAAME,aAANF,EAAgBC,OAE1CoB,0CAAOR,2BAAAA,yBACEhH,KAAKyH,OAAOpC,QAAO,SAAAc,UAASa,EAAMnE,SAASsD,EAAMkB,UAE1DP,cAAe,GACfK,aAAc,GACdM,OAAQ,IAEHzB,EAAI0B,WAAWzB,IAKZ0B,CAAU3B,EAAKpC,EAAf+D,GACZlC,OAAOmC,eAAe5B,EAAI6B,UAAWjE,EAAQpD,IAAK,CAChDgH,sBACSvB,KChEN,ICGD6B,EAAiB,CACrBpB,cAAe,gBACfqB,qBAAsB,kBACtBvH,IAAK,uBAeQ,SAAAwH,SAAkB,CAC/BC,iBAAQjC,EAAKpC,OACLsE,EAAWzC,OAAOC,OAAO,GAAIoC,EAAgBE,EAAepE,IAdlD,SAACuE,EAAcC,EAAoBC,WAC/CF,GAAgBC,GAAsBC,KAEtB,oBAAXpH,SAEXkH,GAAgBjD,QAAQC,MDdG,sECe3BiD,GAAsBlD,QAAQC,MDbG,4ECcjCkD,GAA6BnD,QAAQC,MDXrC,uFCO0C,IAgBpCmD,CAJiBtC,EAAI6B,UAAUK,EAAS1H,KACjBwF,EAAIpC,QAAQ2E,WAAWL,EAASxB,eACzBV,EAAIpC,QAAQ2E,WAAWL,EAASH,yBAGhEhC,EAAcC,EAAKkC,GFwClB,SAAqBlC,EAAKpC,GAC/BoC,EAAIT,UAAU3B,EAAQ8C,cAAepB,EAAckD,EAAe5E,IExC9D6E,CAAYzC,EAAKkC,GF0ChB,SAAyBlC,EAAKpC,GACnCoC,EAAIT,UAAU3B,EAAQmE,qBAAsBzC,EAAcoD,EAAiB9E,IE1CvE+E,CAAgB3C,EAAKkC"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js b/dist/VueFinalModal.umd.js index 0321c65e..7d7cdf67 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,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;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,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 L={};var N=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=L[n]||(L[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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"0hEAEA,IAsBMA,EAAyB,SAAAC,UAJN,SAACA,EAASC,YACrBD,EAAQE,iBAAiBD,IAAa,IAI3CC,CAAiBF,EAtBxB,qWAyBIG,EAAY,SAAAH,UACTA,GAAWI,SAASC,eAOvBC,qIAEGC,KAAO,UACPC,SAAW,QAEXC,UAAYC,KAAKD,UAAUE,KAAKD,WAChCE,OAASF,KAAKE,OAAOD,KAAKD,WAC1BG,QAAUH,KAAKG,QAAQF,KAAKD,WAC5BI,aAAeJ,KAAKI,aAAaH,KAAKD,WACtCK,YAAcL,KAAKK,YAAYJ,KAAKD,wDAG3C,kBACSA,KAAKF,SAASE,KAAKF,SAASQ,OAAS,IAAM,iCAGpD,kBACSN,KAAKF,SAAS,IAAM,8BAG7B,SAAUS,MAxCS,SAAAA,SACE,QAAdA,EAAMC,KAAmC,IAAlBD,EAAME,QAwC7BC,CAAaH,QAKdA,EAAMI,gBA7BJjB,SAASC,eAsCWF,EAAUO,KAAKK,qBAClCD,eAAeQ,aACpBL,EAAMM,yBAVFpB,EAAUO,KAAKI,uBACZC,cAAcO,QACnBL,EAAMM,0CAaZ,mBACWb,KAAKH,2BAGhB,SAAOA,GACAA,SAIAA,KAAOA,OACPC,SAAWT,EAAuBW,KAAKH,WAEvCA,KAAKiB,iBAAiB,UAAWd,KAAKD,mCAG7C,gBACOF,KAAKkB,oBAAoB,UAAWf,KAAKD,gBACzCF,KAAO,0CC5FZmB,GAAmB,EACvB,GAAsB,oBAAXC,OAAwB,KAC3BC,EAAqB,eAEvBF,GAAmB,IAIvBC,OAAOH,iBAAiB,cAAe,KAAMI,GAC7CD,OAAOF,oBAAoB,cAAe,KAAMG,GAGlD,IAWIC,EACAC,EAZEC,EACc,oBAAXJ,QACPA,OAAOK,WACPL,OAAOK,UAAUC,WAChB,iBAAiBC,KAAKP,OAAOK,UAAUC,WACP,aAA9BN,OAAOK,UAAUC,UAA2BN,OAAOK,UAAUG,eAAiB,GAE/EC,EAAQ,GACRC,GAAwB,EACxBC,EAAU,EACVC,GAAkB,EA2BhBC,EAAqB,SAACC,EAAIC,OAC1BF,GAAqB,SAXN,SAAAC,WACbE,EAAO,GACNF,GAAI,IACTE,EAAKC,KAAKH,GACNA,EAAGI,UAAUC,SAAS,OAAQ,OAAOH,EACzCF,EAAKA,EAAGM,qBAEHJ,EAKMK,CAAaP,GACrBQ,SAAQ,SAAAR,IA1BM,SAAAA,OACdA,GAAMA,EAAGS,WAAaC,KAAKC,aAAc,OAAO,MAE/CC,EAAQ1B,OAAO2B,iBAAiBb,SAC/B,CAAC,OAAQ,UAAUc,SAASF,EAAMG,YAAcf,EAAGgB,aAAehB,EAAGiB,cAuBtEC,CAAalB,IApBA,SAACA,EAAIC,WACH,IAAjBD,EAAGmB,WAAmBlB,EAAQ,GAC9BD,EAAGmB,UAAYnB,EAAGiB,aAAehB,GAASD,EAAGgB,cAAgBf,EAAQ,GAkB/CmB,CAAapB,EAAIC,KACvCF,GAAqB,MAGlBA,GAIHsB,EAAiB,SAAArB,UAAML,EAAM2B,MAAK,kBAAMvB,EAAmBC,GAAKH,OAEhEf,EAAiB,SAAAyC,OACfC,EAAID,GAAYrC,OAAOV,cAMzB6C,EAAeG,EAAEC,UAIjBD,EAAEE,QAAQnD,OAAS,IAEnBiD,EAAE1C,gBAAgB0C,EAAE1C,kBAEjB,KAgEI6C,EAAoB,SAACC,EAAeC,MAE1CD,OASDjC,EAAM2B,MAAK,SAAAQ,UAAQA,EAAKF,gBAAkBA,UAIxCE,EAAO,CACXF,cAAAA,EACAC,QAASA,GAAW,IAGtBlC,cAAYA,IAAOmC,IAEfxC,GACFsC,EAAcG,aAAe,SAAAvD,GACQ,IAA/BA,EAAMwD,cAAczD,SAEtBuB,EAAiBtB,EAAMwD,cAAc,GAAGnC,UAG5C+B,EAAcK,YAAc,SAAAzD,GACS,IAA/BA,EAAMwD,cAAczD,QAnDT,SAACC,EAAOoD,GAC3B/B,EAAUrB,EAAMwD,cAAc,GAAGnC,QAAUC,GAEvCuB,EAAe7C,EAAMiD,UAIrBG,GAA6C,IAA5BA,EAAcT,WAAmBtB,EAAU,GAV3B,SAAA+B,WACrCA,GAAgBA,EAAcZ,aAAeY,EAAcT,WAAaS,EAAcX,aAclFiB,CAA+BN,IAAkB/B,EAAU,EAHtDf,EAAeN,GAQxBA,EAAM2D,mBAoCAC,CAAa5D,EAAOoD,IAInBhC,IACHjC,SAASoB,iBAAiB,YAAaD,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAC/F1C,GAAwB,IAnGJ,SAAAiC,WAESS,IAA7BjD,EAAwC,KACpCkD,IAAwBV,IAA2C,IAAhCA,EAAQU,oBAC3CC,EAAetD,OAAOuD,WAAa9E,SAAS+E,gBAAgBC,eAE9DJ,GAAuBC,EAAe,EAAG,KACrCI,EAA2BC,SAAShC,iBAAiBlD,SAASmF,MAAMC,iBAAiB,iBAAkB,IAC7G1D,EAA2B1B,SAASmF,KAAKlC,MAAMoC,aAC/CrF,SAASmF,KAAKlC,MAAMoC,uBAAkBJ,EAA2BJ,cAIjCF,IAAhClD,IACFA,EAA8BzB,SAASmF,KAAKlC,MAAMqC,SAClDtF,SAASmF,KAAKlC,MAAMqC,SAAW,UAuF/BC,CAAkBrB,SArClBsB,QAAQC,MACN,mHAwCOC,EAAmB,SAAAzB,GACzBA,GAQLjC,EAAQA,EAAM2D,QAAO,SAAAxB,UAAQA,EAAKF,gBAAkBA,KAEhDtC,GACFsC,EAAcG,aAAe,KAC7BH,EAAcK,YAAc,KAExBrC,GAA0C,IAAjBD,EAAMpB,SACjCZ,SAASqB,oBAAoB,YAAaF,EAAgBG,EAAmB,CAAEoD,SAAS,QAAUC,GAClG1C,GAAwB,IAEhBD,EAAMpB,cAzGe+D,IAA7BjD,IACF1B,SAASmF,KAAKlC,MAAMoC,aAAe3D,EAInCA,OAA2BiD,QAGOA,IAAhClD,IACFzB,SAASmF,KAAKlC,MAAMqC,SAAW7D,EAI/BA,OAA8BkD,KA4E9Ba,QAAQC,MACN,6JC3HN,0cARA,m/TC5DA,SAASG,EAAcC,EAAW3B,OAC1B4B,OAAkBD,UACxBE,OAAOC,OAAOF,EAAWG,MAAO,CAC9BC,UAAW,CAAEC,KAAMJ,OAAQK,QAAS,kBAAMlC,MAErC4B,EAoDF,SAASO,EAAcC,EAAKpC,OAC3BqC,EAlDR,SAAmBD,EAAKpC,OAClBqC,SAEG,kBACLA,EAAM,CACJC,cAAKC,8BAAUC,mCAAAA,6BACED,QACR,cACEE,mBAAOF,GAAO,UAASC,cAEzB,aAEKE,EAAe,CACnBC,OAAO,EACPC,GAAIC,OAAO,gBACXlB,UAAW3B,EAAQ8C,cACnBzG,KAAM,GACN0G,MAAO,GACPC,GAAI,GACJC,OAAQT,EAAK,SAEVU,cAAc5E,KAAKuD,OAAOC,OAAOY,EAAcH,MAK5DY,2CAAQC,2BAAAA,uBACDX,OAAOW,GAAO,IAErBC,uBACO,IAAIC,EAAIlH,KAAKmH,aAAa7G,OAAS,EAAG4G,GAAK,EAAGA,SAC5CC,aAAaD,GAAGE,MAAM,SAAS,IAGxCf,gBAAOgB,8BAASjB,mCAAAA,qBACCkB,MAAMC,QAAQF,GAAQrH,KAAKwH,iBAAOH,IAAQrH,KAAKwH,IAAIH,IAC3D9E,SAAQ,SAAA4D,UAASA,EAAME,aAANF,EAAgBC,OAE1CoB,0CAAOR,2BAAAA,yBACEhH,KAAKyH,OAAOpC,QAAO,SAAAc,UAASa,EAAMnE,SAASsD,EAAMkB,UAE1DP,cAAe,GACfK,aAAc,GACdM,OAAQ,IAEHzB,EAAI0B,WAAWzB,IAKZ0B,CAAU3B,EAAKpC,EAAf+D,GACZlC,OAAOmC,eAAe5B,EAAI6B,UAAWjE,EAAQpD,IAAK,CAChDgH,sBACSvB,KChEN,ICGD6B,EAAiB,CACrBpB,cAAe,gBACfqB,qBAAsB,kBACtBvH,IAAK,eAeQ,SAAAwH,SAAkB,CAC/BC,iBAAQjC,EAAKpC,OACLsE,EAAWzC,OAAOC,OAAO,GAAIoC,EAAgBE,EAAepE,IAdlD,SAACuE,EAAcC,EAAoBC,WAC/CF,GAAgBC,GAAsBC,KAEtB,oBAAXpH,SAEXkH,GAAgBjD,QAAQC,MDdG,sECe3BiD,GAAsBlD,QAAQC,MDbG,4ECcjCkD,GAA6BnD,QAAQC,MDXrC,uFCO0C,IAgBpCmD,CAJiBtC,EAAI6B,UAAUK,EAAS1H,KACjBwF,EAAIpC,QAAQ2E,WAAWL,EAASxB,eACzBV,EAAIpC,QAAQ2E,WAAWL,EAASH,yBAGhEhC,EAAcC,EAAKkC,GFwClB,SAAqBlC,EAAKpC,GAC/BoC,EAAIT,UAAU3B,EAAQ8C,cAAepB,EAAckD,EAAe5E,IExC9D6E,CAAYzC,EAAKkC,GF0ChB,SAAyBlC,EAAKpC,GACnCoC,EAAIT,UAAU3B,EAAQmE,qBAAsBzC,EAAcoD,EAAiB9E,IE1CvE+E,CAAgB3C,EAAKkC"} \ No newline at end of file diff --git a/lib/Plugin.js b/lib/Plugin.js index 241b34e8..502f663a 100644 --- a/lib/Plugin.js +++ b/lib/Plugin.js @@ -1,5 +1,5 @@ import { bindPrototype, registModal, registContainer } from './PluginCore' -import { DUPLICATE_PLUGIN_COMPONENT, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors' +import { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors' const defaultOptions = { componentName: 'VueFinalModal', @@ -7,29 +7,27 @@ const defaultOptions = { key: '$vfm' } -const Plugin = () => ({ +const validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => { + if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true + + if (typeof window === 'undefined') return false + + duplicateKey && console.error(DUPLICATE_KEY) + duplicateComponent && console.error(DUPLICATE_COMPONENT) + duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER) + + return false +} + +const Plugin = pluginOptions => ({ install(Vue, options) { - const _options = Object.assign({}, defaultOptions, options) - const isDuplicateKey = Vue.prototype[_options.key] - const isDuplicateComponent = Vue.options.components[_options.componentName] - const isDuplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName] - - if (isDuplicateComponent || isDuplicateDynamicContainer) { - if (typeof window !== 'undefined') { - if (isDuplicateKey) { - console.error(DUPLICATE_PLUGIN_COMPONENT) - } - if (isDuplicateComponent) { - console.error(DUPLICATE_COMPONENT) - } - if (isDuplicateDynamicContainer) { - console.error(DUPLICATE_DYNAMIC_CONTAINER) - } - } - } else { - if (!isDuplicateKey) { - bindPrototype(Vue, _options) - } + const _options = Object.assign({}, defaultOptions, pluginOptions, options) + const duplicateKey = Vue.prototype[_options.key] + const duplicateComponent = Vue.options.components[_options.componentName] + const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName] + + if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) { + bindPrototype(Vue, _options) registModal(Vue, _options) registContainer(Vue, _options) } diff --git a/lib/utils/errors.js b/lib/utils/errors.js index 21881c56..2df115e2 100644 --- a/lib/utils/errors.js +++ b/lib/utils/errors.js @@ -1,5 +1,4 @@ -export const DUPLICATE_PLUGIN_COMPONENT = - '[vue-final-modal] Duplicate registration API key and componentName of VueFinalModal.' +export const DUPLICATE_KEY = '[vue-final-modal] Duplicate registration API key of VueFinalModal.' export const DUPLICATE_COMPONENT = '[vue-final-modal] Duplicate registration componentName of VueFinalModal.' diff --git a/tests/unit/Plugin.spec.js b/tests/unit/Plugin.spec.js new file mode 100644 index 00000000..36617721 --- /dev/null +++ b/tests/unit/Plugin.spec.js @@ -0,0 +1,79 @@ +import { createLocalVue, enableAutoDestroy } from '@vue/test-utils' +import VueFinalModal from '../../lib' +import { DUPLICATE_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from '../../lib/utils/errors' + +enableAutoDestroy(afterEach) + +const createSpyError = () => { + global.console.error = jest.fn() + return jest.spyOn(global.console, 'error') +} + +describe('Plugin', () => { + it('duplicate all', () => { + const spy = createSpyError() + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use(VueFinalModal()) + expect(spy).toHaveBeenNthCalledWith(1, DUPLICATE_KEY) + expect(spy).toHaveBeenNthCalledWith(2, DUPLICATE_COMPONENT) + expect(spy).toHaveBeenNthCalledWith(3, DUPLICATE_DYNAMIC_CONTAINER) + }) + it('duplicate key only', () => { + const spy = createSpyError() + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use( + VueFinalModal({ + componentName: 'VueFinalTest', + dynamicContainerName: 'TestContainer' + }) + ) + expect(spy).toHaveBeenCalledTimes(1) + }) + it('duplicate component', () => { + const spy = createSpyError() + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use( + VueFinalModal({ + dynamicContainerName: 'TestContainer' + }) + ) + expect(spy).toHaveBeenNthCalledWith(1, DUPLICATE_KEY) + expect(spy).toHaveBeenNthCalledWith(2, DUPLICATE_COMPONENT) + }) + it('duplicate container', () => { + const spy = createSpyError() + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use( + VueFinalModal({ + componentName: 'VueFinalTest' + }) + ) + expect(spy).toHaveBeenNthCalledWith(1, DUPLICATE_KEY) + expect(spy).toHaveBeenNthCalledWith(2, DUPLICATE_DYNAMIC_CONTAINER) + }) + it('different key', () => { + const spy = createSpyError() + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use( + VueFinalModal({ + key: 'vft' + }) + ) + expect(spy).toHaveBeenNthCalledWith(1, DUPLICATE_COMPONENT) + expect(spy).toHaveBeenNthCalledWith(2, DUPLICATE_DYNAMIC_CONTAINER) + }) + it('window is undefined in node server', () => { + Object.defineProperty(global, 'window', { value: undefined }) + global.console.error = jest.fn() + const spy = jest.spyOn(global.console, 'error') + const localVue = createLocalVue() + localVue.use(VueFinalModal()) + localVue.use(VueFinalModal()) + expect(spy).toHaveBeenCalledTimes(0) + }) +}) diff --git a/tests/unit/VueFinalModal.spec.js b/tests/unit/VueFinalModal.spec.js index 61915112..e0690965 100644 --- a/tests/unit/VueFinalModal.spec.js +++ b/tests/unit/VueFinalModal.spec.js @@ -1,5 +1,4 @@ -import { createLocalVue, enableAutoDestroy } from '@vue/test-utils' -import VueFinalModal from '../../lib' +import { enableAutoDestroy } from '@vue/test-utils' import { afterTransition, createClosedModal, createOpenedModal, initDynamicModal, transitionStub } from './utils' enableAutoDestroy(afterEach) @@ -103,11 +102,20 @@ describe('VueFinalModal.vue', () => { }) expect(wrapper.find('.vfm__content').attributes('style')).toContain(testStyle) }) - it('hideOverlay: true', async () => { + it('hideOverlay: true', async done => { const { wrapper } = await createOpenedModal({ hideOverlay: true }) expect(wrapper.find('.vfm__overlay').isVisible()).toBe(false) + wrapper.setProps({ hideOverlay: false }) + afterTransition(() => { + expect(wrapper.find('.vfm__overlay').isVisible()).toBe(true) + wrapper.setProps({ hideOverlay: true }) + afterTransition(() => { + expect(wrapper.find('.vfm__overlay').isVisible()).toBe(false) + done() + }) + }) }) it('clickToClose: false', async done => { const { wrapper } = await createOpenedModal({ @@ -153,6 +161,19 @@ describe('VueFinalModal.vue', () => { }) expect(wrapper.vm.$el.parentNode === elem).toBe(true) }) + it('attach: wrong querySelector', async () => { + global.console.warn = jest.fn() + const spy = jest.spyOn(global.console, 'warn') + const attach = '.selector-not-exist-in-dom' + const { wrapper } = await createClosedModal({ + attach + }) + wrapper.setProps({ value: true }) + afterTransition(() => { + expect(spy).toHaveBeenCalledTimes(1) + expect(spy.mock.calls[0][0]).toContain(attach) + }) + }) it('focusRetain: false', async () => { const { wrapper } = await createOpenedModal({ focusRetain: false @@ -297,6 +318,20 @@ describe('VueFinalModal.vue', () => { done() }) }) + it('show dynamic modal with string slot', async done => { + const { wrapper, $vfm } = await initDynamicModal() + const string = 'testVueFinalModal' + const dynamicOptions = { + slots: { + default: string + } + } + $vfm.show(dynamicOptions) + afterTransition(() => { + expect(wrapper.find('.vfm').html()).toContain(string) + done() + }) + }) it('hide modal', async done => { const { wrapper, $vfm } = await createOpenedModal({ name: 'testModal' @@ -468,29 +503,4 @@ describe('VueFinalModal.vue', () => { }) }) }) - - describe('Plugin', () => { - it('Register multiple plugins', async done => { - global.console = { error: jest.fn() } - const spy = jest.spyOn(global.console, 'error') - const localVue = createLocalVue() - localVue.use(VueFinalModal()) - localVue.use(VueFinalModal(), { - componentName: 'VueFinalTest', - dynamicContainerName: 'TestContainer', - key: '$vtm' - }) - expect(spy).toHaveBeenCalledTimes(0) - done() - }) - it('Register duplicate plugins', async done => { - global.console = { error: jest.fn() } - const spy = jest.spyOn(global.console, 'error') - const localVue = createLocalVue() - localVue.use(VueFinalModal()) - localVue.use(VueFinalModal()) - expect(spy).toHaveBeenCalledTimes(3) - done() - }) - }) }) From 3bcaad5df1119e8c2cdc7639c7367914fba3b565 Mon Sep 17 00:00:00 2001 From: Hunter Liu Date: Sun, 11 Apr 2021 23:16:51 +0800 Subject: [PATCH 6/8] Feat: vite (#78) * feat: 1. bump rollup, rollup-plugin-cleanup 2. remove rollup-plugin-css-only * feat(example): vite, windicss, vite-plugin-components for Vue 2 * docs: fix duplicate component name * feat: remove vue-cli-service, add jest, eslint * fix: lint tests directory * feat: add script dev:example, dev:docs * fix: .babelrc for build and test --- .babelrc | 11 +- .browserslistrc | 3 - .eslintignore | 10 +- .eslintrc.js | 16 +- dist/VueFinalModal.esm.js.map | 2 +- dist/VueFinalModal.umd.js.map | 2 +- .../{VContent.vue => VDescription.vue} | 0 .../examples/basic/VDynamicAdvanced.vue | 4 +- example/.browserslistrc | 3 - example/.eslintignore | 1 - example/.eslintrc.js | 14 - example/.prettierrc.yaml | 8 - example/babel.config.js | 3 - example/index.html | 13 + example/package.json | 33 +- example/postcss.config.js | 3 - example/public/index.html | 19 - example/public/robots.txt | 2 - .../{VContent.vue => VDescription.vue} | 0 example/src/components/basic/BasicOptions.vue | 18 +- .../basic/BasicPlainStyleCodepen.vue | 4 +- .../src/components/basic/VAccessibility.vue | 10 +- .../src/components/basic/VActionButtons.vue | 9 +- example/src/components/basic/VApiShow.vue | 12 +- example/src/components/basic/VCentered.vue | 6 +- example/src/components/basic/VCloseButton.vue | 9 +- example/src/components/basic/VContent.vue | 9 +- .../src/components/basic/VDynamicAdvanced.vue | 7 +- .../src/components/basic/VDynamicModal.vue | 10 +- example/src/components/basic/VParams.vue | 12 +- example/src/components/basic/VScrollable.vue | 9 +- example/src/components/basic/VStackable.vue | 15 +- .../src/components/basic/VStopBeforeClose.vue | 3 +- .../src/components/basic/VStopBeforeOpen.vue | 3 +- example/src/components/hoc/HocExample.vue | 3 +- .../src/components/hoc/HocExampleTailwind.vue | 3 +- .../HocExampleTailwindCustomTransition.vue | 3 +- example/src/components/hoc/VModal.vue | 7 +- example/src/components/index.js | 13 - example/src/main.js | 13 +- example/tailwind.config.js | 38 - example/vite.config.js | 8 + example/yarn.lock | 9891 +++-------------- jest.config.js | 8 +- package.json | 38 +- yarn.lock | 6341 ++--------- 46 files changed, 2451 insertions(+), 14198 deletions(-) delete mode 100644 .browserslistrc rename docs/components/examples/{VContent.vue => VDescription.vue} (100%) delete mode 100644 example/.browserslistrc delete mode 100644 example/.eslintignore delete mode 100644 example/.eslintrc.js delete mode 100644 example/.prettierrc.yaml delete mode 100644 example/babel.config.js create mode 100644 example/index.html delete mode 100644 example/postcss.config.js delete mode 100644 example/public/index.html delete mode 100644 example/public/robots.txt rename example/src/components/{VContent.vue => VDescription.vue} (100%) delete mode 100644 example/src/components/index.js delete mode 100644 example/tailwind.config.js create mode 100644 example/vite.config.js diff --git a/.babelrc b/.babelrc index 8aa924d7..b9485da3 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,10 @@ { - "presets": ["@babel/preset-env"] -} \ No newline at end of file + "presets": [ + [ + "@babel/preset-env", + { + "exclude": ["@babel/plugin-transform-regenerator"] + } + ] + ] +} diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 214388fe..00000000 --- a/.browserslistrc +++ /dev/null @@ -1,3 +0,0 @@ -> 1% -last 2 versions -not dead diff --git a/.eslintignore b/.eslintignore index fab4781d..c7392091 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,11 @@ +# default dist types/**/*.d.ts -docs \ No newline at end of file + +# docs +docs/.nuxt +docs/docs +docs/static + +# example +example/dist diff --git a/.eslintrc.js b/.eslintrc.js index cdbe9002..f805a948 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,8 @@ module.exports = { root: true, env: { - node: true + node: true, + jest: true }, extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'], parserOptions: { @@ -10,16 +11,5 @@ module.exports = { rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' - }, - overrides: [ - { - files: [ - '**/__tests__/*.{j,t}s?(x)', - '**/tests/unit/**/*.spec.{j,t}s?(x)' - ], - env: { - jest: true - } - } - ] + } } diff --git a/dist/VueFinalModal.esm.js.map b/dist/VueFinalModal.esm.js.map index 02bdec9f..11d48d76 100644 --- a/dist/VueFinalModal.esm.js.map +++ b/dist/VueFinalModal.esm.js.map @@ -1 +1 @@ -{"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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js.map b/dist/VueFinalModal.umd.js.map index adb6c841..da6adce3 100644 --- a/dist/VueFinalModal.umd.js.map +++ b/dist/VueFinalModal.umd.js.map @@ -1 +1 @@ -{"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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","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_KEY = '[vue-final-modal] Duplicate registration API key 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_KEY, DUPLICATE_COMPONENT, DUPLICATE_DYNAMIC_CONTAINER } from './utils/errors'\n\nconst defaultOptions = {\n componentName: 'VueFinalModal',\n dynamicContainerName: 'ModalsContainer',\n key: '$vfm'\n}\n\nconst validPlugin = (duplicateKey, duplicateComponent, duplicateDynamicContainer) => {\n if (!(duplicateKey || duplicateComponent || duplicateDynamicContainer)) return true\n\n if (typeof window === 'undefined') return false\n\n duplicateKey && console.error(DUPLICATE_KEY)\n duplicateComponent && console.error(DUPLICATE_COMPONENT)\n duplicateDynamicContainer && console.error(DUPLICATE_DYNAMIC_CONTAINER)\n\n return false\n}\n\nconst Plugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, defaultOptions, pluginOptions, options)\n const duplicateKey = Vue.prototype[_options.key]\n const duplicateComponent = Vue.options.components[_options.componentName]\n const duplicateDynamicContainer = Vue.options.components[_options.dynamicContainerName]\n\n if (validPlugin(duplicateKey, duplicateComponent, duplicateDynamicContainer)) {\n bindPrototype(Vue, _options)\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","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","pluginOptions","install","_options","duplicateKey","duplicateComponent","duplicateDynamicContainer","validPlugin","components","VueFinalModal","registModal","ModalsContainer","registContainer"],"mappings":"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"} \ No newline at end of file diff --git a/docs/components/examples/VContent.vue b/docs/components/examples/VDescription.vue similarity index 100% rename from docs/components/examples/VContent.vue rename to docs/components/examples/VDescription.vue diff --git a/docs/components/examples/basic/VDynamicAdvanced.vue b/docs/components/examples/basic/VDynamicAdvanced.vue index bae02c67..1d5df01a 100644 --- a/docs/components/examples/basic/VDynamicAdvanced.vue +++ b/docs/components/examples/basic/VDynamicAdvanced.vue @@ -3,7 +3,7 @@ + + diff --git a/example/package.json b/example/package.json index d47cecae..8c7df083 100644 --- a/example/package.json +++ b/example/package.json @@ -3,37 +3,18 @@ "version": "0.0.0", "private": true, "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint" + "dev": "vite", + "build": "vite build", + "serve": "vite preview" }, "dependencies": { - "core-js": "^3.6.5", - "tailwindcss": "^1.4.6", - "vue": "^2.6.11", "vue-final-modal": "link:.." }, "devDependencies": { - "@vue/cli-plugin-babel": "~4.4.0", - "@vue/cli-plugin-eslint": "~4.4.0", - "@vue/cli-service": "~4.4.0", - "@vue/eslint-config-prettier": "^6.0.0", - "babel-eslint": "^10.1.0", - "eslint": "^6.7.2", - "eslint-plugin-prettier": "^3.1.3", - "eslint-plugin-vue": "^6.2.2", - "lint-staged": "^9.5.0", - "prettier": "^1.19.1", - "raw-loader": "^4.0.1", - "vue-template-compiler": "^2.6.11" - }, - "gitHooks": { - "pre-commit": "lint-staged" - }, - "lint-staged": { - "*.{js,jsx,vue}": [ - "vue-cli-service lint" - ] + "vite": "^2.1.5", + "vite-plugin-components": "^0.8.3", + "vite-plugin-vue2": "^1.4.3", + "vite-plugin-windicss": "^0.12.5" }, "repository": { "type": "git", diff --git a/example/postcss.config.js b/example/postcss.config.js deleted file mode 100644 index fdc8a498..00000000 --- a/example/postcss.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - plugins: [require('tailwindcss'), require('autoprefixer')] -} diff --git a/example/public/index.html b/example/public/index.html deleted file mode 100644 index cb9b449a..00000000 --- a/example/public/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - Vue Final Modal - - - - - -
- - - diff --git a/example/public/robots.txt b/example/public/robots.txt deleted file mode 100644 index 14267e90..00000000 --- a/example/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / \ No newline at end of file diff --git a/example/src/components/VContent.vue b/example/src/components/VDescription.vue similarity index 100% rename from example/src/components/VContent.vue rename to example/src/components/VDescription.vue diff --git a/example/src/components/basic/BasicOptions.vue b/example/src/components/basic/BasicOptions.vue index e92ab916..507aec82 100644 --- a/example/src/components/basic/BasicOptions.vue +++ b/example/src/components/basic/BasicOptions.vue @@ -21,8 +21,7 @@ >

- Lorem Ipsum is simply dummy text of the printing and typesetting - industry. + Lorem Ipsum is simply dummy text of the printing and typesetting industry.

@@ -30,9 +29,7 @@

Prop Options:

-