UNPKG

8.13 kBJavaScriptView Raw
1!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VContextmenu={},e.Vue)}(this,(function(e,t){"use strict";var n=function(e,n){var o,u=n.arg;if(u){var i=n.value,l=t.isRef(u)?u.value:null===(o=n.instance)||void 0===o?void 0:o.$refs[u];l?"function"==typeof l.addReference?(e.$contextmenuKey=u,l.addReference(e,i)):console.error("".concat(u," 对应的实例不是 VContextmenu")):console.error("没有找到 ".concat(u," 对应的实例"))}else console.error("参数有误")},o=function(e,t){var n,o=e.$contextmenuKey;if(o){var u=null===(n=t.instance)||void 0===n?void 0:n.$refs[o];null==u||u.removeReference(e)}},u={mounted:n,updated:function(e,t){o(e,t),n(e,t)},beforeUnmount:o},i="v-contextmenu",l="v-contextmenu-icon",r="v-contextmenu-inner",a="v-contextmenu-divider",s="v-contextmenu-item",c="v-contextmenu-item--hover",d="v-contextmenu-item--disabled",v="v-contextmenu-group",m="v-contextmenu-group__title",f="v-contextmenu-group__menus",p="v-contextmenu-submenu",h="v-contextmenu-submenu__title",x="v-contextmenu-submenu__menus",g="v-contextmenu-submenu__menus--top",b="v-contextmenu-submenu__menus--right",y="v-contextmenu-submenu__menus--bottom",C="v-contextmenu-submenu__menus--left",w="v-contextmenu-submenu__arrow";var V=["contextmenu"],_=t.defineComponent({name:"VContextmenu",props:{modelValue:{type:Boolean,default:!1},autoAjustPlacement:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},teleport:{type:[String,Object],default:function(){return"body"}}},emits:["show","hide","update:modelValue"],setup:function(e,n){var o=n.emit,u=t.ref(null),i=t.ref(e.modelValue||!1),l=function(e){i.value=e,o("update:modelValue",e)},r=t.ref({top:0,left:0}),a=t.computed((function(){return{top:"".concat(r.value.top,"px"),left:"".concat(r.value.left,"px")}})),s=t.ref(null),c=function(n,i){var a,s,c=n instanceof Event?i:n,d=(null==c?void 0:c.autoAjustPlacement)||e.autoAjustPlacement,v={top:(null==c?void 0:c.top)||0,left:(null==c?void 0:c.left)||0};n instanceof Event&&(n.preventDefault(),v.top=null!==(a=null==c?void 0:c.top)&&void 0!==a?a:n.pageY,v.left=null!==(s=null==c?void 0:c.left)&&void 0!==s?s:n.pageX);l(!0),t.nextTick((function(){if(d){var e=u.value;if(!e)return;var t=e.clientWidth,n=e.clientHeight;if(n+v.top>=window.innerHeight+window.scrollY){var i=v.top-n;i>window.scrollY&&(v.top=i)}if(t+v.left>=window.innerWidth+window.scrollX){var l=v.left-t;l>window.scrollX&&(v.left=l)}}r.value=v,o("show")}))},d=function(){s.value=null,l(!1),o("hide")},v=t.reactive(new Map),m=t.ref(),f=t.computed((function(){return m.value&&v.get(m.value)})),p=function(e){e.target&&u.value&&m.value&&(u.value.contains(e.target)||f.value&&f.value.triggers.includes("click")&&m.value.contains(e.target)||l(!1))};return t.watch(i,(function(e){e?document.addEventListener("click",p):document.removeEventListener("click",p)})),t.onBeforeUnmount((function(){document.removeEventListener("click",p)})),t.provide("visible",i),t.provide("autoAjustPlacement",e.autoAjustPlacement),t.provide("show",c),t.provide("hide",d),{visible:i,style:a,currentReferenceOptions:f,currentOptions:s,contextmenuRef:u,addReference:function(t,n){var o=null!=n&&n.trigger?Array.isArray(n.trigger)?n.trigger:[n.trigger]:V,u=function(n){e.disabled||(m.value=t,c(n,{}))};o.forEach((function(e){t.addEventListener(e,u)})),v.set(t,{triggers:o,handler:u})},removeReference:function(e){var t=v.get(e);t&&(t.triggers.forEach((function(n){e.removeEventListener(n,t.handler)})),v.delete(e))},toggle:l,show:c,hide:d}},methods:{renderContent:function(){var e,n;return t.withDirectives(t.createVNode("div",{class:i,ref:"contextmenuRef",style:this.style},[t.createVNode("ul",{class:r},[null===(e=(n=this.$slots).default)||void 0===e?void 0:e.call(n,{triggerOptions:"currentReferenceOptions",options:"currentOptions"})])]),[[t.vShow,"visible"]])}},render:function(){var e,n;return this.visible?this.teleport?t.createVNode(t.Teleport,{to:this.teleport},"function"==typeof(n=e=this.renderContent())||"[object Object]"===Object.prototype.toString.call(n)&&!t.isVNode(n)?e:{default:function(){return[e]}}):this.renderContent():null}});function N(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var j=t.defineComponent({name:"VContextmenuItem",props:{disabled:{type:Boolean,default:!1},hideOnClick:{type:Boolean,default:!0}},emits:["click","mouseenter","mouseleave"],setup:function(e,n){var o=n.emit,u=t.inject("hide"),i=t.ref(!1);return{classes:t.computed((function(){var t;return N(t={},s,!0),N(t,d,e.disabled),N(t,c,i.value),t})),handleClick:function(t){e.disabled||(o("click",t),e.hideOnClick&&(null==u||u()))},handleMouseenter:function(t){e.disabled||(i.value=!0,o("mouseenter",t))},handleMouseleave:function(t){e.disabled||(i.value=!1,o("mouseleave",t))}}},render:function(){var e,n;return t.createVNode("li",{class:this.classes,onClick:this.handleClick,onMouseenter:this.handleMouseenter,onMouseleave:this.handleMouseleave},[null===(e=(n=this.$slots).default)||void 0===e?void 0:e.call(n)])}}),M=t.defineComponent({name:"VContextmenuDivider",render:function(){return t.createVNode("li",{class:a},null)}}),k=t.defineComponent({name:"VContextmenuIcon",props:{name:{type:String,required:!0}},render:function(){return t.createVNode("i",{class:[l,"".concat(l,"-").concat(this.name)]},null)}}),R=t.defineComponent({name:"VContextmenuSubmenu",props:{title:{type:String,required:!0},disabled:{type:Boolean,default:!1}},emits:["mouseenter","mouseleave"],setup:function(e,n){var o=n.emit,u=t.ref(null),l=t.inject("autoAjustPlacement"),r=t.ref(["top","right"]),a=t.ref(!1),v=t.computed((function(){var t;return N(t={},s,!0),N(t,h,!0),N(t,c,a.value),N(t,d,e.disabled),t})),m=t.computed((function(){var e;return N(e={},i,!0),N(e,x,!0),N(e,g,r.value.includes("top")),N(e,b,r.value.includes("right")),N(e,y,r.value.includes("bottom")),N(e,C,r.value.includes("left")),e}));return{hover:a,submenuRef:u,titleClasses:v,menusClasses:m,handleMouseenter:function(n){e.disabled||(a.value=!0,o("mouseenter",n),t.nextTick((function(){var e=[];if(l){var t=n.target.getBoundingClientRect();if(!u.value)return;var o=u.value.clientWidth,i=u.value.clientHeight;t.right+o>=window.innerWidth?e.push("left"):e.push("right"),t.bottom+i>=window.innerHeight?e.push("bottom"):e.push("top")}r.value=e})))},handleMouseleave:function(t){e.disabled||(a.value=!1,o("mouseleave",t))}}},render:function(){var e,n,o,u;return t.createVNode("li",{class:p,onMouseenter:this.handleMouseenter,onMouseleave:this.handleMouseleave},[t.createVNode("div",{class:this.titleClasses},[(null===(e=(n=this.$slots).title)||void 0===e?void 0:e.call(n))||this.title,t.createVNode("span",{class:w},[t.createVNode(k,{name:"right-arrow"},null)])]),this.hover?t.createVNode("div",{ref:"submenuRef",class:this.menusClasses},[t.createVNode("ul",{class:r},[null===(o=(u=this.$slots).default)||void 0===o?void 0:o.call(u)])]):null])}}),O=t.defineComponent({name:"VContextmenuGroup",props:{title:{type:String,default:void 0},maxWidth:{type:[Number,String],default:void 0}},setup:function(e){return{style:t.computed((function(){if(e.maxWidth)return{"max-width":"number"==typeof e.maxWidth?"".concat(e.maxWidth,"px"):e.maxWidth,"overflow-x":"auto"}}))}},methods:{renderTitle:function(){var e,n,o=(null===(e=(n=this.$slots).title)||void 0===e?void 0:e.call(n))||this.title;return o?t.createVNode("div",{class:m},[o]):null}},render:function(){var e,n;return t.createVNode("li",{class:v},[this.renderTitle(),t.createVNode("ul",{style:this.style,class:f},[null===(e=(n=this.$slots).default)||void 0===e?void 0:e.call(n)])])}}),$="3.0.0",E=function(e){e.directive("contextmenu",u),e.component(_.name,_),e.component(j.name,j),e.component(M.name,M),e.component(R.name,R),e.component(O.name,O)},S={install:E,version:$};e.Contextmenu=_,e.ContextmenuDivider=M,e.ContextmenuGroup=O,e.ContextmenuItem=j,e.ContextmenuSubmenu=R,e.default=S,e.directive=u,e.install=E,e.version=$,Object.defineProperty(e,"__esModule",{value:!0})}));