diff --git a/dist/VueFinalModal.esm.js b/dist/VueFinalModal.esm.js index 20463634..33ce2562 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,i=new Array(t);n1),x=[],S=!1,E=0,T=-1,z=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},C=function(e){return x.some((function(){return z(e,-E)}))},O=function(e){var t=e||window.event;return!!C(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},k=function(e,t){if(e){if(!x.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};x=[].concat(r(x),[n]),w?(e.ontouchstart=function(e){1===e.targetTouches.length&&(T=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){E=e.targetTouches[0].clientY-T,!C(e.target)&&(t&&0===t.scrollTop&&E>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&E<0?O(e):e.stopPropagation())}(t,e)},S||(document.addEventListener("touchmove",O,p?{passive:!1}:void 0),S=!0)):function(e){if(void 0===b){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);b=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===g&&(g=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.")},M=function(e){e?(x=x.filter((function(t){return t.targetElement!==e})),w?(e.ontouchstart=null,e.ontouchmove=null,S&&0===x.length&&(document.removeEventListener("touchmove",O,p?{passive:!1}:void 0),S=!1)):x.length||(void 0!==b&&(document.body.style.paddingRight=b,b=void 0),void 0!==g&&(document.body.style.overflow=g,g=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},_=function(){},$="enter",D="entering",R="leave",j="leavng";var L={type:[String,Object,Array],default:""},A={type:[Object,Array],default:function(){return{}}},N={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},B={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:L,overlayClass:L,contentClass:L,styles:A,overlayStyle:A,contentStyle:A,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},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(e){return["t","tr","r","br","b","bl","l","tl"].filter((function(t){return-1!==e.indexOf(t)})).length===e.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:_,rejectToggle:_,state:null,lastMousedownEl:null}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===R)&&this.modalTransitionState===R},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return o({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var e=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?e.push.apply(e,r(this.contentStyle)):e.push(this.contentStyle),e},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:o({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:o({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)},drag:function(e){this.visible&&(e?this.addDragDown():this.removeDragDown())},resize:function(e){this.visible&&(e?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(e){e||(this.dragResizeStyle={})}},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&&M(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 void this.rejectToggle("show");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.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,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?k(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):M(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=D},afterOverlayEnter:function(){this.overlayTransitionState=$},beforeOverlayLeave:function(){this.overlayTransitionState=j},afterOverlayLeave:function(){this.overlayTransitionState=R},beforeModalEnter:function(){this.modalTransitionState=D},afterModalEnter:function(){this.modalTransitionState=$,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=j,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=R,this.modalStackIndex=null,this.lockScroll&&M(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),this.resolveToggle("hide"),e||(this.params={})},onMousedown:function(e){this.lastMousedownEl=null==e?void 0:e.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(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 o({ref:this},e)},emitEvent:function(e,t){var n=!1,i=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,i),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},emitState:function(e,t,n){this.state="".concat(t,":").concat(n),this.$emit(this.state,e)},toggle:function(e,t){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(e){o(e),i.resolveToggle=_},i.rejectToggle=function(e){r(e),i.rejectToggle=_};var a="boolean"==typeof e?e:!i.value;a&&2===n.length&&(i.params=t),i.$emit("input",a)}))},pointerDown:function(e){var t=this;e.stopPropagation();var n,i="resize",a="drag",s=this.$refs,l=s.vfmContainer,c=s.vfmContent,v=e.target.getAttribute("direction");if(v)n=i;else{if(!function(e,t,n){return""===n||r(t.querySelectorAll(n)).includes(e.target)}(e,c,this.dragSelector))return;n=a}this.emitState(e,n,"start");var p,y,g,b,w=u(e),x=l.getBoundingClientRect(),S=c.getBoundingClientRect(),E="absolute"===window.getComputedStyle(c).position,T=f(this.dragResizeStyle.top),z=f(this.dragResizeStyle.left),C=function(){if(t.fitParent){var e={absolute:function(){return{minTop:0,minLeft:0,maxTop:x.height-S.height,maxLeft:x.width-S.width}},relative:function(){return{minTop:T+x.top-S.top,minLeft:z+x.left-S.left,maxTop:T+x.bottom-S.bottom,maxLeft:z+x.right-S.right}}};return E?e.absolute():e.relative()}return{}}(),O=n===i&&(p=document.body,y="cursor",g=N[v],b=p.style[y],p.style[y]=g,function(){p.style[y]=b}),k=function(e){e.stopPropagation(),t.emitState(e,n,"move");var r,s,l=u(e),c={x:l.x-w.x,y:l.y-w.y};n===i&&(c=t.getResizeOffset(v,c,x,S,E)),E?(r=S.top-x.top+c.y,s=S.left-x.left+c.x):(r=T+c.y,s=z+c.x),n===a&&t.fitParent&&(r=d(C.minTop,r,C.maxTop),s=d(C.minLeft,s,C.maxLeft));var f=o(o(o({position:"relative",top:r+"px",left:s+"px",margin:"unset",touchAction:"none"},E&&{position:"absolute",transform:"unset",width:S.width+"px",height:S.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});t.dragResizeStyle=o(o({},t.dragResizeStyle),f)};h("move",document,k),h("up",document,(function e(o){o.stopPropagation(),n===i&&O&&O(),setTimeout((function(){t.emitState(o,n,"end")})),m("move",document,k),m("up",document,e)}))},addDragDown:function(){h("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){m("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var e=this;this.visibility.resize=!0,this.$nextTick((function(){h("down",e.$refs.vfmResize,e.pointerDown)}))},removeResizeDown:function(){m("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(e,t,i,a,s){var l=this,c=function(e,t,n,o){var r,s=a[t],c=i[e]-a[e],u=(r=t).charAt(0).toUpperCase()+r.slice(1);return{axis:n,edgeName:t,min:o?c:-s,max:o?s:c,minEdge:l["min".concat(u)],maxEdge:l["max".concat(u)],getEdge:function(e){return a[t]-e*(o?1:-1)},getOffsetAxis:function(e,n){var i=a[t]-e;return n?o?i:0:(o?1:-1)*i/2}}},u={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},f={x:0,y:0};return e.split("").forEach((function(e){var i=c.apply(void 0,r(u[e]));f=o(o({},f),function(e){var i,o=t[e.axis];o=l.fitParent?d(e.min,o,e.max):o;var r=d(e.minEdge,e.getEdge(o),e.maxEdge);return o=e.getOffsetAxis(r,s),n(i={},e.edgeName,r),n(i,e.axis,o),i}(i))})),f}}};var P,I=function(e,t,n,i,o,r,a,s,l,c){"boolean"!=typeof a&&(l=s,s=a,a=!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,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(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(r)},d._ssrRegister=u):t&&(u=a?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},H="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var U={};var F=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:{mouseup:function(t){return t.target!==t.currentTarget?null:e.onMouseupContainer(t)},mousedown:function(t){return t.target!==t.currentTarget?null:e.onMousedown(t)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.bindContentStyle,on:{mousedown:function(t){return e.onMousedown(null)}}},[e._t("default",null,{params:e.params,close:function(){return e.$emit("input",!1)}}),e._v(" "),e.visibility.resize&&e.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},e._l(e.resizeDirections,(function(e){return n("div",{key:e,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+e,attrs:{direction:e}})})),0):e._e()],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-8fe8c8ee_0",{source:".vfm--fixed[data-v-8fe8c8ee]{position:fixed}.vfm--absolute[data-v-8fe8c8ee]{position:absolute}.vfm--inset[data-v-8fe8c8ee]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-8fe8c8ee]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-8fe8c8ee]{pointer-events:none}.vfm--prevent-auto[data-v-8fe8c8ee]{pointer-events:auto}.vfm--outline-none[data-v-8fe8c8ee]:focus{outline:0}.vfm-enter-active[data-v-8fe8c8ee],.vfm-leave-active[data-v-8fe8c8ee]{transition:opacity .2s}.vfm-enter[data-v-8fe8c8ee],.vfm-leave-to[data-v-8fe8c8ee]{opacity:0}.vfm--touch-none[data-v-8fe8c8ee]{touch-action:none}.vfm--select-none[data-v-8fe8c8ee]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-8fe8c8ee],.vfm--resize-br[data-v-8fe8c8ee],.vfm--resize-tl[data-v-8fe8c8ee],.vfm--resize-tr[data-v-8fe8c8ee]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-8fe8c8ee]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-8fe8c8ee]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-8fe8c8ee]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-8fe8c8ee]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-8fe8c8ee]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-8fe8c8ee]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-8fe8c8ee]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-8fe8c8ee]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),B,"data-v-8fe8c8ee",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=H?t.media||"default":e,i=U[n]||(U[n]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var o=t.source;if(t.map&&(o+="\n/*# sourceURL="+t.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),void 0===P&&(P=document.head||document.getElementsByTagName("head")[0]),P.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,a=document.createTextNode(o),s=i.element.childNodes;s[r]&&i.element.removeChild(s[r]),s.length?i.element.insertBefore(a,s[r]):i.element.appendChild(a)}}}(e,t)}}),void 0,void 0),K=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,i){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(i)},"before-open":function(n){return e.beforeOpen(n,t,i)},opened:t.opened},scopedSlots:e._u([e._l(t.slots,(function(t,i){return{key:i,fn:function(){return[e.isString(t)?n("div",{key:i,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:i,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,n){var i=this;e.ref.params=t.params,this.$nextTick((function(){t.value||(i.slice(n),t.reject("show"))}))},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function V(e,t){var n=o({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function W(t,n){var i=function(t,n){var i;return function(){return i={show:function(t){for(var i=this,o=arguments.length,r=new Array(o>1?o-1:0),a=1;a1?t-1:0),i=1;ie.length)&&(t=e.length);for(var n=0,i=new Array(t);n1),S=[],E=!1,T=0,z=-1,C=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},O=function(e){return S.some((function(){return C(e,-T)}))},M=function(e){var t=e||window.event;return!!O(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},k=function(e,t){if(e){if(!S.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};S=[].concat(a(S),[n]),x?(e.ontouchstart=function(e){1===e.targetTouches.length&&(z=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){T=e.targetTouches[0].clientY-z,!O(e.target)&&(t&&0===t.scrollTop&&T>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&T<0?M(e):e.stopPropagation())}(t,e)},E||(document.addEventListener("touchmove",M,y?{passive:!1}:void 0),E=!0)):function(e){if(void 0===w){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);w=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===g&&(g=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.")},_=function(e){e?(S=S.filter((function(t){return t.targetElement!==e})),x?(e.ontouchstart=null,e.ontouchmove=null,E&&0===S.length&&(document.removeEventListener("touchmove",M,y?{passive:!1}:void 0),E=!1)):S.length||(void 0!==w&&(document.body.style.paddingRight=w,w=void 0),void 0!==g&&(document.body.style.overflow=g,g=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},D=function(){},$="enter",R="entering",L="leave",j="leavng";var A={type:[String,Object,Array],default:""},B={type:[Object,Array],default:function(){return{}}},I={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},P={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:A,overlayClass:A,contentClass:A,styles:B,overlayStyle:B,contentStyle:B,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(e){var n=t(e);return"boolean"===n||"string"===n||e.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},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(e){return["t","tr","r","br","b","bl","l","tl"].filter((function(t){return-1!==e.indexOf(t)})).length===e.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:D,rejectToggle:D,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===L)&&this.modalTransitionState===L},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return r({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var e=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?e.push.apply(e,a(this.contentStyle)):e.push(this.contentStyle),e},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:r({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:r({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)},drag:function(e){this.visible&&(e?this.addDragDown():this.removeDragDown())},resize:function(e){this.visible&&(e?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(e){e||(this.dragResizeStyle={})}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new u,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&_(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 void this.rejectToggle("show");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.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,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?k(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):_(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=R},afterOverlayEnter:function(){this.overlayTransitionState=$},beforeOverlayLeave:function(){this.overlayTransitionState=j},afterOverlayLeave:function(){this.overlayTransitionState=L},beforeModalEnter:function(){this.modalTransitionState=R},afterModalEnter:function(){this.modalTransitionState=$,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=j,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=L,this.modalStackIndex=null,this.lockScroll&&_(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),this.resolveToggle("hide"),e||(this.params={})},onMousedown:function(e){this.lastMousedownEl=null==e?void 0:e.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(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 r({ref:this},e)},emitEvent:function(e,t){var n=!1,i=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,i),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},emitState:function(e,t,n){this.state="".concat(t,":").concat(n),this.$emit(this.state,e)},toggle:function(e,t){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(e){o(e),i.resolveToggle=D},i.rejectToggle=function(e){r(e),i.rejectToggle=D};var a="boolean"==typeof e?e:!i.value;a&&2===n.length&&(i.params=t),i.$emit("input",a)}))},pointerDown:function(e){var t=this;e.stopPropagation();var n,i="resize",o="drag",s=this.$refs,l=s.vfmContainer,c=s.vfmContent,u=e.target.getAttribute("direction");if(u)n=i;else{if(!function(e,t,n){return""===n||a(t.querySelectorAll(n)).includes(e.target)}(e,c,this.dragSelector))return;n=o}this.emitState(e,n,"start");var h,y,b,g,w=d(e),x=l.getBoundingClientRect(),S=c.getBoundingClientRect(),E="absolute"===window.getComputedStyle(c).position,T=v(this.dragResizeStyle.top),z=v(this.dragResizeStyle.left),C=function(){if(t.fitParent){var e={absolute:function(){return{minTop:0,minLeft:0,maxTop:x.height-S.height,maxLeft:x.width-S.width}},relative:function(){return{minTop:T+x.top-S.top,minLeft:z+x.left-S.left,maxTop:T+x.bottom-S.bottom,maxLeft:z+x.right-S.right}}};return E?e.absolute():e.relative()}return{}}(),O=n===i&&(h=document.body,y="cursor",b=I[u],g=h.style[y],h.style[y]=b,function(){h.style[y]=g}),M=function(e){e.stopPropagation(),t.emitState(e,n,"move");var a,s,l=d(e),c={x:l.x-w.x,y:l.y-w.y};n===i&&(c=t.getResizeOffset(u,c,x,S,E)),E?(a=S.top-x.top+c.y,s=S.left-x.left+c.x):(a=T+c.y,s=z+c.x),n===o&&t.fitParent&&(a=f(C.minTop,a,C.maxTop),s=f(C.minLeft,s,C.maxLeft));var v=r(r(r({position:"relative",top:a+"px",left:s+"px",margin:"unset",touchAction:"none"},E&&{position:"absolute",transform:"unset",width:S.width+"px",height:S.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});t.dragResizeStyle=r(r({},t.dragResizeStyle),v)};m("move",document,M),m("up",document,(function e(o){o.stopPropagation(),n===i&&O&&O(),setTimeout((function(){t.emitState(o,n,"end")})),p("move",document,M),p("up",document,e)}))},addDragDown:function(){m("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){p("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var e=this;this.visibility.resize=!0,this.$nextTick((function(){m("down",e.$refs.vfmResize,e.pointerDown)}))},removeResizeDown:function(){p("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(e,t,n,o,s){var l=this,c=function(e,t,i,r){var a,s=o[t],c=n[e]-o[e],u=(a=t).charAt(0).toUpperCase()+a.slice(1);return{axis:i,edgeName:t,min:r?c:-s,max:r?s:c,minEdge:l["min".concat(u)],maxEdge:l["max".concat(u)],getEdge:function(e){return o[t]-e*(r?1:-1)},getOffsetAxis:function(e,n){var i=o[t]-e;return n?r?i:0:(r?1:-1)*i/2}}},u={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},d={x:0,y:0};return e.split("").forEach((function(e){var n=c.apply(void 0,a(u[e]));d=r(r({},d),function(e){var n,o=t[e.axis];o=l.fitParent?f(e.min,o,e.max):o;var r=f(e.minEdge,e.getEdge(o),e.maxEdge);return o=e.getOffsetAxis(r,s),i(n={},e.edgeName,r),i(n,e.axis,o),n}(n))})),d}}};var N,V=function(e,t,n,i,o,r,a,s,l,c){"boolean"!=typeof a&&(l=s,s=a,a=!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,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(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(r)},d._ssrRegister=u):t&&(u=a?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},H="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var U={};var K=V({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:{mouseup:function(t){return t.target!==t.currentTarget?null:e.onMouseupContainer(t)},mousedown:function(t){return t.target!==t.currentTarget?null:e.onMousedown(t)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.bindContentStyle,on:{mousedown:function(t){return e.onMousedown(null)}}},[e._t("default",null,{params:e.params,close:function(){return e.$emit("input",!1)}}),e._v(" "),e.visibility.resize&&e.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},e._l(e.resizeDirections,(function(e){return n("div",{key:e,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+e,attrs:{direction:e}})})),0):e._e()],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-74b699c6_0",{source:".vfm--fixed[data-v-74b699c6]{position:fixed}.vfm--absolute[data-v-74b699c6]{position:absolute}.vfm--inset[data-v-74b699c6]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-74b699c6]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-74b699c6]{pointer-events:none}.vfm--prevent-auto[data-v-74b699c6]{pointer-events:auto}.vfm--outline-none[data-v-74b699c6]:focus{outline:0}.vfm-enter-active[data-v-74b699c6],.vfm-leave-active[data-v-74b699c6]{transition:opacity .2s}.vfm-enter[data-v-74b699c6],.vfm-leave-to[data-v-74b699c6]{opacity:0}.vfm--touch-none[data-v-74b699c6]{touch-action:none}.vfm--select-none[data-v-74b699c6]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-74b699c6],.vfm--resize-br[data-v-74b699c6],.vfm--resize-tl[data-v-74b699c6],.vfm--resize-tr[data-v-74b699c6]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-74b699c6]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-74b699c6]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-74b699c6]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-74b699c6]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-74b699c6]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-74b699c6]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-74b699c6]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-74b699c6]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),P,"data-v-74b699c6",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=H?t.media||"default":e,i=U[n]||(U[n]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var o=t.source;if(t.map&&(o+="\n/*# sourceURL="+t.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),void 0===N&&(N=document.head||document.getElementsByTagName("head")[0]),N.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,a=document.createTextNode(o),s=i.element.childNodes;s[r]&&i.element.removeChild(s[r]),s.length?i.element.insertBefore(a,s[r]):i.element.appendChild(a)}}}(e,t)}}),void 0,void 0),F=V({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"v-dynamic-modals"},e._l(e.api.dynamicModals,(function(t,i){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(i)},"before-open":function(n){return e.beforeOpen(n,t,i)},opened:t.opened},scopedSlots:e._u([e._l(t.slots,(function(t,i){return{key:i,fn:function(){return[e.isString(t)?n("div",{key:i,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:i,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:{},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t,n){var i=this;e.ref.params=t.params,this.$nextTick((function(){t.value||(i.slice(n),t.reject("show"))}))},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function W(e,t){var n=r(r({},e),{},{props:r({},e.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return t}}}),n}var Y=0,q="$modal",X=function(){var n,o,r=(o=null,e.observable({show:function(e){for(var n=this,i=arguments.length,r=new Array(i>1?i-1:0),a=1;a1?t-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{},n=0===Y?Z:X(),i=n.$modal,o=n.VModal,r=n.VDynamicModals;Y+=1;var a=t[q]||q,s=t.VModal||"VModal",l=t.VDynamicModals||"VDynamicModals";e.prototype[a]=i,e.component(s,o),e.component(l,r)},te=function(e){return{install:function(t,n){var i=Object.assign({},e,n);ee(t,i)}}};te.install=ee;export{G as $modal,Q as VDynamicModals,J as VModal,X as createVfm,ee as installVfm,te as vfmPlugin}; //# sourceMappingURL=VueFinalModal.esm.js.map diff --git a/dist/VueFinalModal.esm.js.map b/dist/VueFinalModal.esm.js.map index 41323ef3..37a3050d 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/dragResize.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","export const setStyle = (el, key, value) => {\n const cacheStyle = el.style[key]\n el.style[key] = value\n return () => {\n el.style[key] = cacheStyle\n }\n}\n\nexport const getPosition = e => {\n const { clientX: x, clientY: y } = e.targetTouches ? e.targetTouches[0] : e\n return { x, y }\n}\n\nexport const capitalize = s => {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport const clamp = (min, num, max) => {\n if (typeof min !== 'number') {\n min = Math.min(num, max) || num\n }\n if (typeof max !== 'number') {\n max = Math.max(num, min)\n }\n return Math.min(Math.max(num, min), max)\n}\n\nexport const trimPx = distance => {\n return (distance && Number(distance.replace(/px$/, ''))) || 0\n}\n\nexport const validDragElement = (e, el, dragSelector) => {\n if (dragSelector === '') return true\n const list = [...el.querySelectorAll(dragSelector)]\n return list.includes(e.target)\n}\n\nconst pointerType = {\n down: {\n pc: 'mousedown',\n m: 'touchstart'\n },\n move: {\n pc: 'mousemove',\n m: 'touchmove'\n },\n up: {\n pc: 'mouseup',\n m: 'touchend'\n }\n}\nexport const addListener = (type, el, callback) => {\n el && el.addEventListener(pointerType[type].pc, callback)\n el && el.addEventListener(pointerType[type].m, callback, { passive: false })\n}\nexport const removeListener = (type, el, callback) => {\n el && el.removeEventListener(pointerType[type].pc, callback)\n el && el.removeEventListener(pointerType[type].m, callback)\n}\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 return this.toggle(modal, true, ...args)\n case 'object': {\n return Promise.allSettled([\n new Promise((resolve, reject) => {\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 reject,\n opened() {\n resolve('show')\n }\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n })\n ])\n }\n }\n },\n hide(...names) {\n return this.toggle(names, false)\n },\n hideAll() {\n return this.hide(...this.openedModals.map(modal => modal.name))\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n return Promise.allSettled(modals.map(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","getPosition","e","targetTouches","x","clientX","y","clientY","clamp","min","num","max","Math","trimPx","distance","Number","replace","pointerType","down","pc","m","move","up","addListener","type","el","callback","passive","removeListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","hasAnyScrollableEl","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","dragSelector","value","cacheStyle","s","charAt","toUpperCase","slice","assignOptions","component","_component","Object","assign","props","$_options","bindPrototype","Vue","vfm","show","modal","args","toggle","Promise","allSettled","resolve","reject","defaultModal","id","Symbol","componentName","slots","on","params","opened","_this","dynamicModals","hide","names","hideAll","openedModals","map","name","modals","Array","isArray","get","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/dragResize.js","../lib/utils/bodyScrollLock.js","../lib/VModal.vue","../lib/PluginCore.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","export const setStyle = (el, key, value) => {\n const cacheStyle = el.style[key]\n el.style[key] = value\n return () => {\n el.style[key] = cacheStyle\n }\n}\n\nexport const getPosition = e => {\n const { clientX: x, clientY: y } = e.targetTouches ? e.targetTouches[0] : e\n return { x, y }\n}\n\nexport const capitalize = s => {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport const clamp = (min, num, max) => {\n if (typeof min !== 'number') {\n min = Math.min(num, max) || num\n }\n if (typeof max !== 'number') {\n max = Math.max(num, min)\n }\n return Math.min(Math.max(num, min), max)\n}\n\nexport const trimPx = distance => {\n return (distance && Number(distance.replace(/px$/, ''))) || 0\n}\n\nexport const validDragElement = (e, el, dragSelector) => {\n if (dragSelector === '') return true\n const list = [...el.querySelectorAll(dragSelector)]\n return list.includes(e.target)\n}\n\nconst pointerType = {\n down: {\n pc: 'mousedown',\n m: 'touchstart'\n },\n move: {\n pc: 'mousemove',\n m: 'touchmove'\n },\n up: {\n pc: 'mouseup',\n m: 'touchend'\n }\n}\nexport const addListener = (type, el, callback) => {\n el && el.addEventListener(pointerType[type].pc, callback)\n el && el.addEventListener(pointerType[type].m, callback, { passive: false })\n}\nexport const removeListener = (type, el, callback) => {\n el && el.removeEventListener(pointerType[type].pc, callback)\n el && el.removeEventListener(pointerType[type].m, callback)\n}\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 Vue from 'vue'\nimport VModal from './VModal.vue'\nimport VDynamicModals from './VDynamicModals.vue'\n\nexport function createApi() {\n let _modalComponent = null\n\n return Vue.observable({\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n return this.toggle(modal, true, ...args)\n case 'object': {\n return Promise.allSettled([\n new Promise((resolve, reject) => {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: _modalComponent,\n bind: {},\n slots: {},\n on: {},\n params: args[0],\n reject,\n opened() {\n resolve('show')\n }\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n })\n ])\n }\n }\n },\n hide(...names) {\n return this.toggle(names, false)\n },\n hideAll() {\n return this.hide(...this.openedModals.map(modal => modal.name))\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n return Promise.allSettled(modals.map(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 _setDefaultModal(modalComponent) {\n _modalComponent = modalComponent\n }\n })\n}\n\nexport function bindApi(component, api) {\n const _component = { ...component, props: { ...component.props } }\n Object.assign(_component.props, {\n api: { type: Object, default: () => api }\n })\n return _component\n}\n\nexport function createModal(api) {\n const modalComponent = bindApi(VModal, api)\n api._setDefaultModal(modalComponent)\n return modalComponent\n}\n\nexport function createContainer(api) {\n return bindApi(VDynamicModals, api)\n}\n","import { createApi, createModal, createContainer } from './PluginCore'\n\n/**\n * @description Ensure that `_vfm` is used when function `installPlugin` is executed for the first time\n */\nlet _count = 0\n\nconst _key = '$modal'\nconst _name = 'VModal'\nconst _containerName = 'VDynamicModals'\n\n/**\n * @description Support create multiple vfm instance\n */\nexport const createVfm = () => {\n let api = createApi()\n return {\n [_key]: api,\n [_name]: createModal(api),\n [_containerName]: createContainer(api)\n }\n}\n\n/**\n * @description Create a vfm instance by default for directly support `import { $modal, VModal, VDynamicModals } from 'vue-final-modal'`\n */\nconst _vfm = createVfm()\nexport const { $modal, VModal, VDynamicModals } = _vfm\n\n/**\n * @description Register vfm instance globally\n */\nexport const installVfm = (Vue, options = {}) => {\n const { $modal, VModal, VDynamicModals } = _count === 0 ? _vfm : createVfm()\n _count += 1\n const key = options[_key] || _key\n const name = options[_name] || _name\n const containerName = options[_containerName] || _containerName\n Vue.prototype[key] = $modal\n Vue.component(name, VModal)\n Vue.component(containerName, VDynamicModals)\n}\n\n/**\n * @description Vue plugin for register vfm instance globally\n */\nexport const vfmPlugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, pluginOptions, options)\n installVfm(Vue, _options)\n }\n})\n\nvfmPlugin.install = installVfm\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","getPosition","e","targetTouches","x","clientX","y","clientY","clamp","min","num","max","Math","trimPx","distance","Number","replace","pointerType","down","pc","m","move","up","addListener","type","el","callback","passive","removeListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","hasAnyScrollableEl","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","dragSelector","value","cacheStyle","s","charAt","toUpperCase","slice","bindApi","component","api","_component","props","Object","assign","_count","_key","createVfm","_modalComponent","Vue","observable","show","modal","args","toggle","Promise","allSettled","resolve","reject","defaultModal","id","Symbol","slots","on","params","opened","_this","dynamicModals","hide","names","hideAll","openedModals","map","name","modals","Array","isArray","get","_setDefaultModal","modalComponent","VModal","createModal","VDynamicModals","createContainer","_vfm","$modal","installVfm","containerName","prototype","vfmPlugin","pluginOptions","install","_options"],"mappings":"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"} \ No newline at end of file diff --git a/dist/VueFinalModal.umd.js b/dist/VueFinalModal.umd.js index b5e78e22..79b30e8a 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,i=new Array(t);n1),x=[],S=!1,E=0,T=-1,z=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},C=function(e){return x.some((function(){return z(e,-E)}))},O=function(e){var t=e||window.event;return!!C(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},k=function(e,t){if(e){if(!x.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};x=[].concat(r(x),[n]),w?(e.ontouchstart=function(e){1===e.targetTouches.length&&(T=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){E=e.targetTouches[0].clientY-T,!C(e.target)&&(t&&0===t.scrollTop&&E>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&E<0?O(e):e.stopPropagation())}(t,e)},S||(document.addEventListener("touchmove",O,p?{passive:!1}:void 0),S=!0)):function(e){if(void 0===b){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);b=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===g&&(g=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.")},M=function(e){e?(x=x.filter((function(t){return t.targetElement!==e})),w?(e.ontouchstart=null,e.ontouchmove=null,S&&0===x.length&&(document.removeEventListener("touchmove",O,p?{passive:!1}:void 0),S=!1)):x.length||(void 0!==b&&(document.body.style.paddingRight=b,b=void 0),void 0!==g&&(document.body.style.overflow=g,g=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},_=function(){},$="enter",D="entering",R="leave",j="leavng";var L={type:[String,Object,Array],default:""},A={type:[Object,Array],default:function(){return{}}},N={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},B={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:L,overlayClass:L,contentClass:L,styles:A,overlayStyle:A,contentStyle:A,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},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(e){return["t","tr","r","br","b","bl","l","tl"].filter((function(t){return-1!==e.indexOf(t)})).length===e.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:_,rejectToggle:_,state:null,lastMousedownEl:null}},computed:{api:function(){return this[this.$_options.key]},isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===R)&&this.modalTransitionState===R},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return o({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var e=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?e.push.apply(e,r(this.contentStyle)):e.push(this.contentStyle),e},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:o({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:o({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)},drag:function(e){this.visible&&(e?this.addDragDown():this.removeDragDown())},resize:function(e){this.visible&&(e?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(e){e||(this.dragResizeStyle={})}},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&&M(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 void this.rejectToggle("show");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.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,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?k(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):M(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=D},afterOverlayEnter:function(){this.overlayTransitionState=$},beforeOverlayLeave:function(){this.overlayTransitionState=j},afterOverlayLeave:function(){this.overlayTransitionState=R},beforeModalEnter:function(){this.modalTransitionState=D},afterModalEnter:function(){this.modalTransitionState=$,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=j,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=R,this.modalStackIndex=null,this.lockScroll&&M(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),this.resolveToggle("hide"),e||(this.params={})},onMousedown:function(e){this.lastMousedownEl=null==e?void 0:e.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(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 o({ref:this},e)},emitEvent:function(e,t){var n=!1,i=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,i),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},emitState:function(e,t,n){this.state="".concat(t,":").concat(n),this.$emit(this.state,e)},toggle:function(e,t){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(e){o(e),i.resolveToggle=_},i.rejectToggle=function(e){r(e),i.rejectToggle=_};var a="boolean"==typeof e?e:!i.value;a&&2===n.length&&(i.params=t),i.$emit("input",a)}))},pointerDown:function(e){var t=this;e.stopPropagation();var n,i="resize",a="drag",s=this.$refs,l=s.vfmContainer,c=s.vfmContent,v=e.target.getAttribute("direction");if(v)n=i;else{if(!function(e,t,n){return""===n||r(t.querySelectorAll(n)).includes(e.target)}(e,c,this.dragSelector))return;n=a}this.emitState(e,n,"start");var p,y,g,b,w=u(e),x=l.getBoundingClientRect(),S=c.getBoundingClientRect(),E="absolute"===window.getComputedStyle(c).position,T=f(this.dragResizeStyle.top),z=f(this.dragResizeStyle.left),C=function(){if(t.fitParent){var e={absolute:function(){return{minTop:0,minLeft:0,maxTop:x.height-S.height,maxLeft:x.width-S.width}},relative:function(){return{minTop:T+x.top-S.top,minLeft:z+x.left-S.left,maxTop:T+x.bottom-S.bottom,maxLeft:z+x.right-S.right}}};return E?e.absolute():e.relative()}return{}}(),O=n===i&&(p=document.body,y="cursor",g=N[v],b=p.style[y],p.style[y]=g,function(){p.style[y]=b}),k=function(e){e.stopPropagation(),t.emitState(e,n,"move");var r,s,l=u(e),c={x:l.x-w.x,y:l.y-w.y};n===i&&(c=t.getResizeOffset(v,c,x,S,E)),E?(r=S.top-x.top+c.y,s=S.left-x.left+c.x):(r=T+c.y,s=z+c.x),n===a&&t.fitParent&&(r=d(C.minTop,r,C.maxTop),s=d(C.minLeft,s,C.maxLeft));var f=o(o(o({position:"relative",top:r+"px",left:s+"px",margin:"unset",touchAction:"none"},E&&{position:"absolute",transform:"unset",width:S.width+"px",height:S.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});t.dragResizeStyle=o(o({},t.dragResizeStyle),f)};h("move",document,k),h("up",document,(function e(o){o.stopPropagation(),n===i&&O&&O(),setTimeout((function(){t.emitState(o,n,"end")})),m("move",document,k),m("up",document,e)}))},addDragDown:function(){h("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){m("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var e=this;this.visibility.resize=!0,this.$nextTick((function(){h("down",e.$refs.vfmResize,e.pointerDown)}))},removeResizeDown:function(){m("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(e,t,i,a,s){var l=this,c=function(e,t,n,o){var r,s=a[t],c=i[e]-a[e],u=(r=t).charAt(0).toUpperCase()+r.slice(1);return{axis:n,edgeName:t,min:o?c:-s,max:o?s:c,minEdge:l["min".concat(u)],maxEdge:l["max".concat(u)],getEdge:function(e){return a[t]-e*(o?1:-1)},getOffsetAxis:function(e,n){var i=a[t]-e;return n?o?i:0:(o?1:-1)*i/2}}},u={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},f={x:0,y:0};return e.split("").forEach((function(e){var i=c.apply(void 0,r(u[e]));f=o(o({},f),function(e){var i,o=t[e.axis];o=l.fitParent?d(e.min,o,e.max):o;var r=d(e.minEdge,e.getEdge(o),e.maxEdge);return o=e.getOffsetAxis(r,s),n(i={},e.edgeName,r),n(i,e.axis,o),i}(i))})),f}}};var P,I=function(e,t,n,i,o,r,a,s,l,c){"boolean"!=typeof a&&(l=s,s=a,a=!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,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(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(r)},d._ssrRegister=u):t&&(u=a?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},H="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var U={};var F=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:{mouseup:function(t){return t.target!==t.currentTarget?null:e.onMouseupContainer(t)},mousedown:function(t){return t.target!==t.currentTarget?null:e.onMousedown(t)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.bindContentStyle,on:{mousedown:function(t){return e.onMousedown(null)}}},[e._t("default",null,{params:e.params,close:function(){return e.$emit("input",!1)}}),e._v(" "),e.visibility.resize&&e.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},e._l(e.resizeDirections,(function(e){return n("div",{key:e,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+e,attrs:{direction:e}})})),0):e._e()],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-8fe8c8ee_0",{source:".vfm--fixed[data-v-8fe8c8ee]{position:fixed}.vfm--absolute[data-v-8fe8c8ee]{position:absolute}.vfm--inset[data-v-8fe8c8ee]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-8fe8c8ee]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-8fe8c8ee]{pointer-events:none}.vfm--prevent-auto[data-v-8fe8c8ee]{pointer-events:auto}.vfm--outline-none[data-v-8fe8c8ee]:focus{outline:0}.vfm-enter-active[data-v-8fe8c8ee],.vfm-leave-active[data-v-8fe8c8ee]{transition:opacity .2s}.vfm-enter[data-v-8fe8c8ee],.vfm-leave-to[data-v-8fe8c8ee]{opacity:0}.vfm--touch-none[data-v-8fe8c8ee]{touch-action:none}.vfm--select-none[data-v-8fe8c8ee]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-8fe8c8ee],.vfm--resize-br[data-v-8fe8c8ee],.vfm--resize-tl[data-v-8fe8c8ee],.vfm--resize-tr[data-v-8fe8c8ee]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-8fe8c8ee]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-8fe8c8ee]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-8fe8c8ee]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-8fe8c8ee]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-8fe8c8ee]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-8fe8c8ee]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-8fe8c8ee]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-8fe8c8ee]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),B,"data-v-8fe8c8ee",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=H?t.media||"default":e,i=U[n]||(U[n]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var o=t.source;if(t.map&&(o+="\n/*# sourceURL="+t.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),void 0===P&&(P=document.head||document.getElementsByTagName("head")[0]),P.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,a=document.createTextNode(o),s=i.element.childNodes;s[r]&&i.element.removeChild(s[r]),s.length?i.element.insertBefore(a,s[r]):i.element.appendChild(a)}}}(e,t)}}),void 0,void 0),V=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,i){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(i)},"before-open":function(n){return e.beforeOpen(n,t,i)},opened:t.opened},scopedSlots:e._u([e._l(t.slots,(function(t,i){return{key:i,fn:function(){return[e.isString(t)?n("div",{key:i,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:i,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,n){var i=this;e.ref.params=t.params,this.$nextTick((function(){t.value||(i.slice(n),t.reject("show"))}))},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function K(e,t){var n=o({},e);return Object.assign(n.props,{$_options:{type:Object,default:function(){return t}}}),n}function W(t,n){var i=function(t,n){var i;return function(){return i={show:function(t){for(var i=this,o=arguments.length,r=new Array(o>1?o-1:0),a=1;a1?t-1:0),i=1;ie.length)&&(t=e.length);for(var n=0,i=new Array(t);n1),z=[],C=!1,O=0,M=-1,_=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},k=function(e){return z.some((function(){return _(e,-O)}))},D=function(e){var t=e||window.event;return!!k(t.target)||(t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1))},$=function(e,t){if(e){if(!z.some((function(t){return t.targetElement===e}))){var n={targetElement:e,options:t||{}};z=[].concat(c(z),[n]),T?(e.ontouchstart=function(e){1===e.targetTouches.length&&(M=e.targetTouches[0].clientY)},e.ontouchmove=function(t){1===t.targetTouches.length&&function(e,t){O=e.targetTouches[0].clientY-M,!k(e.target)&&(t&&0===t.scrollTop&&O>0||function(e){return!!e&&e.scrollHeight-e.scrollTop<=e.clientHeight}(t)&&O<0?D(e):e.stopPropagation())}(t,e)},C||(document.addEventListener("touchmove",D,w?{passive:!1}:void 0),C=!0)):function(e){if(void 0===E){var t=!!e&&!0===e.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(t&&n>0){var i=parseInt(getComputedStyle(document.body).getPropertyValue("padding-right"),10);E=document.body.style.paddingRight,document.body.style.paddingRight="".concat(i+n,"px")}}void 0===S&&(S=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.")},R=function(e){e?(z=z.filter((function(t){return t.targetElement!==e})),T?(e.ontouchstart=null,e.ontouchmove=null,C&&0===z.length&&(document.removeEventListener("touchmove",D,w?{passive:!1}:void 0),C=!1)):z.length||(void 0!==E&&(document.body.style.paddingRight=E,E=void 0),void 0!==S&&(document.body.style.overflow=S,S=void 0))):console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.")},j=function(){},L="enter",A="entering",B="leave",P="leavng";var I={type:[String,Object,Array],default:""},N={type:[Object,Array],default:function(){return{}}},V={t:"ns-resize",tr:"nesw-resize",r:"ew-resize",br:"nwse-resize",b:"ns-resize",bl:"nesw-resize",l:"ew-resize",tl:"nwse-resize"},H={props:{name:{type:String,default:null},value:{type:Boolean,default:!1},ssr:{type:Boolean,default:!0},classes:I,overlayClass:I,contentClass:I,styles:N,overlayStyle:N,contentStyle:N,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(e){var t=o(e);return"boolean"===t||"string"===t||e.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},fitParent:{type:Boolean,default:!0},drag:{type:Boolean,default:!1},dragSelector:{type:String,default:""},keepChangedStyle:{type:Boolean,default:!1},resize:{type:Boolean,default:!1},resizeDirections:{type:Array,default:function(){return["t","tr","r","br","b","bl","l","tl"]},validator:function(e){return["t","tr","r","br","b","bl","l","tl"].filter((function(t){return-1!==e.indexOf(t)})).length===e.length}},minWidth:{type:Number,default:0},minHeight:{type:Number,default:0},maxWidth:{type:Number,default:1/0},maxHeight:{type:Number,default:1/0}},data:function(){return{modalStackIndex:null,visible:!1,visibility:{modal:!1,overlay:!1,resize:!1},overlayTransitionState:null,modalTransitionState:null,stopEvent:!1,params:{},dragResizeStyle:{},resolveToggle:j,rejectToggle:j,state:null,lastMousedownEl:null}},computed:{isComponentReadyToBeDestroyed:function(){return(this.hideOverlay||this.overlayTransitionState===B)&&this.modalTransitionState===B},calculateZIndex:function(){return!1===this.zIndex?!!this.zIndexAuto&&+this.zIndexBase+2*(this.modalStackIndex||0):this.zIndex},bindStyle:function(){return l({},!1!==this.calculateZIndex&&{zIndex:this.calculateZIndex})},bindContentStyle:function(){var e=[this.dragResizeStyle];return Array.isArray(this.contentStyle)?e.push.apply(e,c(this.contentStyle)):e.push(this.contentStyle),e},computedTransition:function(){return"string"==typeof this.transition?{name:this.transition}:l({},this.transition)},computedOverlayTransition:function(){return"string"==typeof this.overlayTransition?{name:this.overlayTransition}:l({},this.overlayTransition)}},watch:{value:function(e){if(this.stopEvent)this.stopEvent=!1;else if(this.mounted(),!e){if(this.emitEvent("before-close",!0))return void this.rejectToggle("hide");this.close()}},lockScroll:"handleLockScroll",hideOverlay:function(e){this.value&&!e&&(this.visibility.overlay=!0)},attach:"mounted",isComponentReadyToBeDestroyed:function(e){e&&(this.visible=!1)},drag:function(e){this.visible&&(e?this.addDragDown():this.removeDragDown())},resize:function(e){this.visible&&(e?this.addResizeDown():this.removeResizeDown())},keepChangedStyle:function(e){e||(this.dragResizeStyle={})}},created:function(){this.api.modals.push(this)},mounted:function(){this.$focusTrap=new v,this.mounted()},beforeDestroy:function(){var e,t=this;this.close(),this.lockScroll&&this.$refs.vfmContainer&&R(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 void this.rejectToggle("show");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.drag&&this.removeDragDown(),this.resize&&this.removeResizeDown(),this.state=null,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?$(e.$refs.vfmContainer,{reserveScrollBarGap:!0}):R(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=A},afterOverlayEnter:function(){this.overlayTransitionState=L},beforeOverlayLeave:function(){this.overlayTransitionState=P},afterOverlayLeave:function(){this.overlayTransitionState=B},beforeModalEnter:function(){this.modalTransitionState=A},afterModalEnter:function(){this.modalTransitionState=L,(this.focusRetain||this.focusTrap)&&this.$refs.vfmContainer.focus(),this.focusTrap&&this.$focusTrap.enable(this.$refs.vfmContainer),this.drag&&this.addDragDown(),this.resize&&this.addResizeDown(),this.$emit("opened",this.createModalEvent({type:"opened"})),this.resolveToggle("show")},beforeModalLeave:function(){this.modalTransitionState=P,this.$focusTrap.enabled()&&this.$focusTrap.disable()},afterModalLeave:function(){this.modalTransitionState=B,this.modalStackIndex=null,this.lockScroll&&R(this.$refs.vfmContainer),this.keepChangedStyle||(this.dragResizeStyle={});var e=!1,t=this.createModalEvent({type:"closed",stop:function(){e=!0}});this.$emit("closed",t),this.resolveToggle("hide"),e||(this.params={})},onMousedown:function(e){this.lastMousedownEl=null==e?void 0:e.target},onMouseupContainer:function(){this.lastMousedownEl===this.$refs.vfmContainer&&"resize:move"!==this.state&&(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 l({ref:this},e)},emitEvent:function(e,t){var n=!1,i=this.createModalEvent({type:e,stop:function(){n=!0}});return this.$emit(e,i),!!n&&(this.stopEvent=!0,this.$emit("input",t),!0)},emitState:function(e,t,n){this.state="".concat(t,":").concat(n),this.$emit(this.state,e)},toggle:function(e,t){var n=arguments,i=this;return new Promise((function(o,r){i.resolveToggle=function(e){o(e),i.resolveToggle=j},i.rejectToggle=function(e){r(e),i.rejectToggle=j};var a="boolean"==typeof e?e:!i.value;a&&2===n.length&&(i.params=t),i.$emit("input",a)}))},pointerDown:function(e){var t=this;e.stopPropagation();var n,i="resize",o="drag",r=this.$refs,a=r.vfmContainer,s=r.vfmContent,u=e.target.getAttribute("direction");if(u)n=i;else{if(!function(e,t,n){return""===n||c(t.querySelectorAll(n)).includes(e.target)}(e,s,this.dragSelector))return;n=o}this.emitState(e,n,"start");var d,f,v,y,w=h(e),x=a.getBoundingClientRect(),S=s.getBoundingClientRect(),E="absolute"===window.getComputedStyle(s).position,T=p(this.dragResizeStyle.top),z=p(this.dragResizeStyle.left),C=function(){if(t.fitParent){var e={absolute:function(){return{minTop:0,minLeft:0,maxTop:x.height-S.height,maxLeft:x.width-S.width}},relative:function(){return{minTop:T+x.top-S.top,minLeft:z+x.left-S.left,maxTop:T+x.bottom-S.bottom,maxLeft:z+x.right-S.right}}};return E?e.absolute():e.relative()}return{}}(),O=n===i&&(d=document.body,f="cursor",v=V[u],y=d.style[f],d.style[f]=v,function(){d.style[f]=y}),M=function(e){e.stopPropagation(),t.emitState(e,n,"move");var r,a,s=h(e),c={x:s.x-w.x,y:s.y-w.y};n===i&&(c=t.getResizeOffset(u,c,x,S,E)),E?(r=S.top-x.top+c.y,a=S.left-x.left+c.x):(r=T+c.y,a=z+c.x),n===o&&t.fitParent&&(r=m(C.minTop,r,C.maxTop),a=m(C.minLeft,a,C.maxLeft));var d=l(l(l({position:"relative",top:r+"px",left:a+"px",margin:"unset",touchAction:"none"},E&&{position:"absolute",transform:"unset",width:S.width+"px",height:S.height+"px"}),c.width&&{width:c.width+"px"}),c.height&&{height:c.height+"px"});t.dragResizeStyle=l(l({},t.dragResizeStyle),d)};b("move",document,M),b("up",document,(function e(o){o.stopPropagation(),n===i&&O&&O(),setTimeout((function(){t.emitState(o,n,"end")})),g("move",document,M),g("up",document,e)}))},addDragDown:function(){b("down",this.$refs.vfmContent,this.pointerDown),this.dragResizeStyle.touchAction="none"},removeDragDown:function(){g("down",this.$refs.vfmContent,this.pointerDown)},addResizeDown:function(){var e=this;this.visibility.resize=!0,this.$nextTick((function(){b("down",e.$refs.vfmResize,e.pointerDown)}))},removeResizeDown:function(){g("down",this.$refs.vfmResize,this.pointerDown),this.visibility.resize=!1},getResizeOffset:function(e,t,n,i,o){var r=this,s=function(e,t,o,a){var s,l=i[t],c=n[e]-i[e],u=(s=t).charAt(0).toUpperCase()+s.slice(1);return{axis:o,edgeName:t,min:a?c:-l,max:a?l:c,minEdge:r["min".concat(u)],maxEdge:r["max".concat(u)],getEdge:function(e){return i[t]-e*(a?1:-1)},getOffsetAxis:function(e,n){var o=i[t]-e;return n?a?o:0:(a?1:-1)*o/2}}},u={t:["top","height","y",!0],b:["bottom","height","y",!1],l:["left","width","x",!0],r:["right","width","x",!1]},d={x:0,y:0};return e.split("").forEach((function(e){var n=s.apply(void 0,c(u[e]));d=l(l({},d),function(e){var n,i=t[e.axis];i=r.fitParent?m(e.min,i,e.max):i;var s=m(e.minEdge,e.getEdge(i),e.maxEdge);return i=e.getOffsetAxis(s,o),a(n={},e.edgeName,s),a(n,e.axis,i),n}(n))})),d}}};var U,K=function(e,t,n,i,o,r,a,s,l,c){"boolean"!=typeof a&&(l=s,s=a,a=!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,o&&(d.functional=!0)),i&&(d._scopeId=i),r?(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(r)},d._ssrRegister=u):t&&(u=a?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},F="undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());var q={};var W=K({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:{mouseup:function(t){return t.target!==t.currentTarget?null:e.onMouseupContainer(t)},mousedown:function(t){return t.target!==t.currentTarget?null:e.onMousedown(t)}}},[n("div",{ref:"vfmContent",staticClass:"vfm__content",class:[e.contentClass,{"vfm--prevent-auto":e.preventClick}],style:e.bindContentStyle,on:{mousedown:function(t){return e.onMousedown(null)}}},[e._t("default",null,{params:e.params,close:function(){return e.$emit("input",!1)}}),e._v(" "),e.visibility.resize&&e.visibility.modal?n("div",{ref:"vfmResize",staticClass:"vfm__resize vfm--absolute vfm--inset vfm--prevent-none vfm--select-none vfm--touch-none"},e._l(e.resizeDirections,(function(e){return n("div",{key:e,staticClass:"vfm--absolute vfm--prevent-auto",class:"vfm--resize-"+e,attrs:{direction:e}})})),0):e._e()],2)])])],1):e._e()},staticRenderFns:[]},(function(e){e&&e("data-v-74b699c6_0",{source:".vfm--fixed[data-v-74b699c6]{position:fixed}.vfm--absolute[data-v-74b699c6]{position:absolute}.vfm--inset[data-v-74b699c6]{top:0;right:0;bottom:0;left:0}.vfm--overlay[data-v-74b699c6]{background-color:rgba(0,0,0,.5)}.vfm--prevent-none[data-v-74b699c6]{pointer-events:none}.vfm--prevent-auto[data-v-74b699c6]{pointer-events:auto}.vfm--outline-none[data-v-74b699c6]:focus{outline:0}.vfm-enter-active[data-v-74b699c6],.vfm-leave-active[data-v-74b699c6]{transition:opacity .2s}.vfm-enter[data-v-74b699c6],.vfm-leave-to[data-v-74b699c6]{opacity:0}.vfm--touch-none[data-v-74b699c6]{touch-action:none}.vfm--select-none[data-v-74b699c6]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vfm--resize-bl[data-v-74b699c6],.vfm--resize-br[data-v-74b699c6],.vfm--resize-tl[data-v-74b699c6],.vfm--resize-tr[data-v-74b699c6]{width:12px;height:12px;z-index:10}.vfm--resize-t[data-v-74b699c6]{top:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-tr[data-v-74b699c6]{top:-6px;right:-6px;cursor:nesw-resize}.vfm--resize-r[data-v-74b699c6]{top:0;right:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-br[data-v-74b699c6]{bottom:-6px;right:-6px;cursor:nwse-resize}.vfm--resize-b[data-v-74b699c6]{bottom:-6px;left:0;width:100%;height:12px;cursor:ns-resize}.vfm--resize-bl[data-v-74b699c6]{bottom:-6px;left:-6px;cursor:nesw-resize}.vfm--resize-l[data-v-74b699c6]{top:0;left:-6px;width:12px;height:100%;cursor:ew-resize}.vfm--resize-tl[data-v-74b699c6]{top:-6px;left:-6px;cursor:nwse-resize}",map:void 0,media:void 0})}),H,"data-v-74b699c6",false,undefined,!1,(function(e){return function(e,t){return function(e,t){var n=F?t.media||"default":e,i=q[n]||(q[n]={ids:new Set,styles:[]});if(!i.ids.has(e)){i.ids.add(e);var o=t.source;if(t.map&&(o+="\n/*# sourceURL="+t.map.sources[0]+" */",o+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t.map))))+" */"),i.element||(i.element=document.createElement("style"),i.element.type="text/css",t.media&&i.element.setAttribute("media",t.media),void 0===U&&(U=document.head||document.getElementsByTagName("head")[0]),U.appendChild(i.element)),"styleSheet"in i.element)i.styles.push(o),i.element.styleSheet.cssText=i.styles.filter(Boolean).join("\n");else{var r=i.ids.size-1,a=document.createTextNode(o),s=i.element.childNodes;s[r]&&i.element.removeChild(s[r]),s.length?i.element.insertBefore(a,s[r]):i.element.appendChild(a)}}}(e,t)}}),void 0,void 0),Y=K({render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"v-dynamic-modals"},e._l(e.api.dynamicModals,(function(t,i){return n(t.component,e._g(e._b({key:t.id,tag:"component",on:{closed:function(t){return e.slice(i)},"before-open":function(n){return e.beforeOpen(n,t,i)},opened:t.opened},scopedSlots:e._u([e._l(t.slots,(function(t,i){return{key:i,fn:function(){return[e.isString(t)?n("div",{key:i,domProps:{innerHTML:e._s(t)}}):n(t.component,e._g(e._b({key:i,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:{},methods:{slice:function(e){this.api.dynamicModals.splice(e,1)},beforeOpen:function(e,t,n){var i=this;e.ref.params=t.params,this.$nextTick((function(){t.value||(i.slice(n),t.reject("show"))}))},isString:function(e){return"string"==typeof e}}},undefined,false,undefined,!1,void 0,void 0,void 0);function X(e,t){var n=l(l({},e),{},{props:l({},e.props)});return Object.assign(n.props,{api:{type:Object,default:function(){return t}}}),n}var Z=0,G="$modal",J="VModal",Q="VDynamicModals",ee=function(){var e,t,n=(t=null,i.default.observable({show:function(e){for(var n=this,i=arguments.length,r=new Array(i>1?i-1:0),a=1;a1?t-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{},n=0===Z?te:ee(),i=n.$modal,o=n.VModal,r=n.VDynamicModals;Z+=1;var a=t[G]||G,s=t.VModal||J,l=t.VDynamicModals||Q;e.prototype[a]=i,e.component(s,o),e.component(l,r)},ae=function(e){return{install:function(t,n){var i=Object.assign({},e,n);re(t,i)}}};ae.install=re,e.$modal=ne,e.VDynamicModals=oe,e.VModal=ie,e.createVfm=ee,e.installVfm=re,e.vfmPlugin=ae,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=VueFinalModal.umd.js.map diff --git a/dist/VueFinalModal.umd.js.map b/dist/VueFinalModal.umd.js.map index f9a140b4..c4d5e798 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/dragResize.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","export const setStyle = (el, key, value) => {\n const cacheStyle = el.style[key]\n el.style[key] = value\n return () => {\n el.style[key] = cacheStyle\n }\n}\n\nexport const getPosition = e => {\n const { clientX: x, clientY: y } = e.targetTouches ? e.targetTouches[0] : e\n return { x, y }\n}\n\nexport const capitalize = s => {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport const clamp = (min, num, max) => {\n if (typeof min !== 'number') {\n min = Math.min(num, max) || num\n }\n if (typeof max !== 'number') {\n max = Math.max(num, min)\n }\n return Math.min(Math.max(num, min), max)\n}\n\nexport const trimPx = distance => {\n return (distance && Number(distance.replace(/px$/, ''))) || 0\n}\n\nexport const validDragElement = (e, el, dragSelector) => {\n if (dragSelector === '') return true\n const list = [...el.querySelectorAll(dragSelector)]\n return list.includes(e.target)\n}\n\nconst pointerType = {\n down: {\n pc: 'mousedown',\n m: 'touchstart'\n },\n move: {\n pc: 'mousemove',\n m: 'touchmove'\n },\n up: {\n pc: 'mouseup',\n m: 'touchend'\n }\n}\nexport const addListener = (type, el, callback) => {\n el && el.addEventListener(pointerType[type].pc, callback)\n el && el.addEventListener(pointerType[type].m, callback, { passive: false })\n}\nexport const removeListener = (type, el, callback) => {\n el && el.removeEventListener(pointerType[type].pc, callback)\n el && el.removeEventListener(pointerType[type].m, callback)\n}\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 return this.toggle(modal, true, ...args)\n case 'object': {\n return Promise.allSettled([\n new Promise((resolve, reject) => {\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 reject,\n opened() {\n resolve('show')\n }\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n })\n ])\n }\n }\n },\n hide(...names) {\n return this.toggle(names, false)\n },\n hideAll() {\n return this.hide(...this.openedModals.map(modal => modal.name))\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n return Promise.allSettled(modals.map(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","getPosition","e","targetTouches","x","clientX","y","clientY","clamp","min","num","max","Math","trimPx","distance","Number","replace","pointerType","down","pc","m","move","up","addListener","type","el","callback","passive","removeListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","hasAnyScrollableEl","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","dragSelector","value","cacheStyle","s","charAt","toUpperCase","slice","assignOptions","component","_component","Object","assign","props","$_options","bindPrototype","Vue","vfm","show","modal","args","toggle","Promise","allSettled","resolve","reject","defaultModal","id","Symbol","componentName","slots","on","params","opened","_this","dynamicModals","hide","names","hideAll","openedModals","map","name","modals","Array","isArray","get","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/dragResize.js","../lib/utils/bodyScrollLock.js","../lib/VModal.vue","../lib/PluginCore.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","export const setStyle = (el, key, value) => {\n const cacheStyle = el.style[key]\n el.style[key] = value\n return () => {\n el.style[key] = cacheStyle\n }\n}\n\nexport const getPosition = e => {\n const { clientX: x, clientY: y } = e.targetTouches ? e.targetTouches[0] : e\n return { x, y }\n}\n\nexport const capitalize = s => {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nexport const clamp = (min, num, max) => {\n if (typeof min !== 'number') {\n min = Math.min(num, max) || num\n }\n if (typeof max !== 'number') {\n max = Math.max(num, min)\n }\n return Math.min(Math.max(num, min), max)\n}\n\nexport const trimPx = distance => {\n return (distance && Number(distance.replace(/px$/, ''))) || 0\n}\n\nexport const validDragElement = (e, el, dragSelector) => {\n if (dragSelector === '') return true\n const list = [...el.querySelectorAll(dragSelector)]\n return list.includes(e.target)\n}\n\nconst pointerType = {\n down: {\n pc: 'mousedown',\n m: 'touchstart'\n },\n move: {\n pc: 'mousemove',\n m: 'touchmove'\n },\n up: {\n pc: 'mouseup',\n m: 'touchend'\n }\n}\nexport const addListener = (type, el, callback) => {\n el && el.addEventListener(pointerType[type].pc, callback)\n el && el.addEventListener(pointerType[type].m, callback, { passive: false })\n}\nexport const removeListener = (type, el, callback) => {\n el && el.removeEventListener(pointerType[type].pc, callback)\n el && el.removeEventListener(pointerType[type].m, callback)\n}\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 Vue from 'vue'\nimport VModal from './VModal.vue'\nimport VDynamicModals from './VDynamicModals.vue'\n\nexport function createApi() {\n let _modalComponent = null\n\n return Vue.observable({\n show(modal, ...args) {\n switch (typeof modal) {\n case 'string':\n return this.toggle(modal, true, ...args)\n case 'object': {\n return Promise.allSettled([\n new Promise((resolve, reject) => {\n const defaultModal = {\n value: true,\n id: Symbol('dynamicModal'),\n component: _modalComponent,\n bind: {},\n slots: {},\n on: {},\n params: args[0],\n reject,\n opened() {\n resolve('show')\n }\n }\n this.dynamicModals.push(Object.assign(defaultModal, modal))\n })\n ])\n }\n }\n },\n hide(...names) {\n return this.toggle(names, false)\n },\n hideAll() {\n return this.hide(...this.openedModals.map(modal => modal.name))\n },\n toggle(name, ...args) {\n const modals = Array.isArray(name) ? this.get(...name) : this.get(name)\n return Promise.allSettled(modals.map(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 _setDefaultModal(modalComponent) {\n _modalComponent = modalComponent\n }\n })\n}\n\nexport function bindApi(component, api) {\n const _component = { ...component, props: { ...component.props } }\n Object.assign(_component.props, {\n api: { type: Object, default: () => api }\n })\n return _component\n}\n\nexport function createModal(api) {\n const modalComponent = bindApi(VModal, api)\n api._setDefaultModal(modalComponent)\n return modalComponent\n}\n\nexport function createContainer(api) {\n return bindApi(VDynamicModals, api)\n}\n","import { createApi, createModal, createContainer } from './PluginCore'\n\n/**\n * @description Ensure that `_vfm` is used when function `installPlugin` is executed for the first time\n */\nlet _count = 0\n\nconst _key = '$modal'\nconst _name = 'VModal'\nconst _containerName = 'VDynamicModals'\n\n/**\n * @description Support create multiple vfm instance\n */\nexport const createVfm = () => {\n let api = createApi()\n return {\n [_key]: api,\n [_name]: createModal(api),\n [_containerName]: createContainer(api)\n }\n}\n\n/**\n * @description Create a vfm instance by default for directly support `import { $modal, VModal, VDynamicModals } from 'vue-final-modal'`\n */\nconst _vfm = createVfm()\nexport const { $modal, VModal, VDynamicModals } = _vfm\n\n/**\n * @description Register vfm instance globally\n */\nexport const installVfm = (Vue, options = {}) => {\n const { $modal, VModal, VDynamicModals } = _count === 0 ? _vfm : createVfm()\n _count += 1\n const key = options[_key] || _key\n const name = options[_name] || _name\n const containerName = options[_containerName] || _containerName\n Vue.prototype[key] = $modal\n Vue.component(name, VModal)\n Vue.component(containerName, VDynamicModals)\n}\n\n/**\n * @description Vue plugin for register vfm instance globally\n */\nexport const vfmPlugin = pluginOptions => ({\n install(Vue, options) {\n const _options = Object.assign({}, pluginOptions, options)\n installVfm(Vue, _options)\n }\n})\n\nvfmPlugin.install = installVfm\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","getPosition","e","targetTouches","x","clientX","y","clientY","clamp","min","num","max","Math","trimPx","distance","Number","replace","pointerType","down","pc","m","move","up","addListener","type","el","callback","passive","removeListener","hasPassiveEvents","window","passiveTestOptions","previousBodyOverflowSetting","previousBodyPaddingRight","isIosDevice","navigator","platform","test","maxTouchPoints","locks","documentListenerAdded","initialClientY","hasAnyScrollableEl","delta","path","push","classList","contains","parentElement","composedPath","forEach","nodeType","Node","ELEMENT_NODE","style","getComputedStyle","includes","overflowY","scrollHeight","clientHeight","hasScrollbar","scrollTop","shouldScroll","allowTouchMove","some","rawEvent","target","touches","disableBodyScroll","targetElement","options","lock","ontouchstart","ontouchmove","isTargetElementTotallyScrolled","stopPropagation","handleScroll","undefined","reserveScrollBarGap","scrollBarGap","innerWidth","documentElement","clientWidth","computedBodyPaddingRight","parseInt","body","getPropertyValue","paddingRight","overflow","setOverflowHidden","console","error","enableBodyScroll","filter","dragSelector","value","cacheStyle","s","charAt","toUpperCase","slice","bindApi","component","api","_component","props","Object","assign","_count","_key","_name","_containerName","createVfm","_modalComponent","Vue","observable","show","modal","args","toggle","Promise","allSettled","resolve","reject","defaultModal","id","Symbol","slots","on","params","opened","_this","dynamicModals","hide","names","hideAll","openedModals","map","name","modals","Array","isArray","get","_setDefaultModal","modalComponent","VModal","createModal","VDynamicModals","createContainer","_vfm","$modal","installVfm","containerName","prototype","vfmPlugin","pluginOptions","install","_options"],"mappings":"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"} \ No newline at end of file diff --git a/docs/components/examples/basic/BasicOptions.vue b/docs/components/examples/basic/BasicOptions.vue index 796e21c9..26dbd3cb 100644 --- a/docs/components/examples/basic/BasicOptions.vue +++ b/docs/components/examples/basic/BasicOptions.vue @@ -1,6 +1,6 @@