UNPKG

primevue

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primevue.svg)](https://badge.fury.io/js/primevue) [![Discord Chat](https://img.shields.io/discord/55794023

2 lines (1 loc) 10.4 kB
"use strict";var e=require("primevue/utils"),t=require("primevue/ripple"),n=require("vue");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i={name:"MegaMenu",props:{model:{type:Array,default:null},orientation:{type:String,default:"horizontal"}},documentClickListener:null,data:()=>({activeItem:null}),beforeUnmount(){this.unbindDocumentClickListener()},methods:{onLeafClick(e,t,n){t.disabled?e.preventDefault():(t.command&&t.command({originalEvent:e,item:t}),this.activeItem=null,t.to&&n&&n(e))},onCategoryMouseEnter(e,t){t.disabled?e.preventDefault():this.activeItem&&(this.activeItem=t)},onCategoryClick(e,t,n){t.disabled?e.preventDefault():(t.command&&t.command({originalEvent:e,item:t}),t.items&&(this.activeItem&&this.activeItem===t?(this.activeItem=null,this.unbindDocumentClickListener()):(this.activeItem=t,this.bindDocumentClickListener())),t.to&&n&&n(e))},onCategoryKeydown(e,t){let n=e.currentTarget.parentElement;switch(e.which){case 40:this.horizontal?this.expandMenu(t):this.navigateToNextItem(n),e.preventDefault();break;case 38:this.vertical?this.navigateToPrevItem(n):t.items&&t===this.activeItem&&this.collapseMenu(),e.preventDefault();break;case 39:this.horizontal?this.navigateToNextItem(n):this.expandMenu(t),e.preventDefault();break;case 37:this.horizontal?this.navigateToPrevItem(n):t.items&&t===this.activeItem&&this.collapseMenu(),e.preventDefault()}},expandMenu(e){e.items&&(this.activeItem=e)},collapseMenu(){this.activeItem=null},findNextItem(t){let n=t.nextElementSibling;return n?e.DomHandler.hasClass(n,"p-disabled")||!e.DomHandler.hasClass(n,"p-menuitem")?this.findNextItem(n):n:null},findPrevItem(t){let n=t.previousElementSibling;return n?e.DomHandler.hasClass(n,"p-disabled")||!e.DomHandler.hasClass(n,"p-menuitem")?this.findPrevItem(n):n:null},navigateToNextItem(e){var t=this.findNextItem(e);t&&t.children[0].focus()},navigateToPrevItem(e){var t=this.findPrevItem(e);t&&t.children[0].focus()},getCategoryClass(e){return["p-menuitem",{"p-menuitem-active":e===this.activeItem},e.class]},getCategorySubMenuIcon(){return["p-submenu-icon pi",{"pi-angle-down":this.horizontal,"pi-angle-right":this.vertical}]},getCategoryIcon:e=>["p-menuitem-icon",e.icon],getColumnClassName(e){let t;switch(e.items?e.items.length:0){case 2:t="p-megamenu-col-6";break;case 3:t="p-megamenu-col-4";break;case 4:t="p-megamenu-col-3";break;case 6:t="p-megamenu-col-2";break;default:t="p-megamenu-col-12"}return t},getSubmenuHeaderClass:e=>["p-megamenu-submenu-header",e.class,{"p-disabled":e.disabled}],getSubmenuItemClass:e=>["p-menuitem",e.class],getLinkClass:e=>["p-menuitem-link",{"p-disabled":e.disabled}],bindDocumentClickListener(){this.documentClickListener||(this.documentClickListener=e=>{this.$el&&!this.$el.contains(e.target)&&(this.activeItem=null,this.unbindDocumentClickListener())},document.addEventListener("click",this.documentClickListener))},unbindDocumentClickListener(){this.documentClickListener&&(document.removeEventListener("click",this.documentClickListener),this.documentClickListener=null)},visible:e=>"function"==typeof e.visible?e.visible():!1!==e.visible},computed:{containerClass(){return["p-megamenu p-component",{"p-megamenu-horizontal":this.horizontal,"p-megamenu-vertical":this.vertical}]},horizontal(){return"horizontal"===this.orientation},vertical(){return"vertical"===this.orientation}},directives:{ripple:l(t).default}};const a={class:"p-megamenu-root-list",role:"menubar"},o={class:"p-menuitem-text"},s={class:"p-menuitem-text"},r={key:2,class:"p-megamenu-panel"},c={class:"p-megamenu-grid"},m={class:"p-menuitem-text"},u={class:"p-menuitem-text"},p={key:0,class:"p-megamenu-custom"};!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var l=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&l.firstChild?l.insertBefore(i,l.firstChild):l.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}("\n.p-megamenu-root-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.p-megamenu-root-list > .p-menuitem {\n position: relative;\n}\n.p-megamenu .p-menuitem-link {\n cursor: pointer;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n}\n.p-megamenu .p-menuitem-text {\n line-height: 1;\n}\n.p-megamenu-panel {\n display: none;\n position: absolute;\n width: auto;\n z-index: 1;\n}\n.p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel {\n display: block;\n}\n.p-megamenu-submenu {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n/* Horizontal */\n.p-megamenu-horizontal .p-megamenu-root-list {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n}\n\n/* Vertical */\n.p-megamenu-vertical .p-megamenu-root-list {\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.p-megamenu-vertical .p-megamenu-root-list > .p-menuitem-active > .p-megamenu-panel {\n left: 100%;\n top: 0;\n}\n.p-megamenu-vertical .p-megamenu-root-list > .p-menuitem > .p-menuitem-link > .p-submenu-icon {\n margin-left: auto;\n}\n.p-megamenu-grid {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.p-megamenu-col-2,\n.p-megamenu-col-3,\n.p-megamenu-col-4,\n.p-megamenu-col-6,\n.p-megamenu-col-12 {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n padding: 0.5rem;\n}\n.p-megamenu-col-2 {\n width: 16.6667%;\n}\n.p-megamenu-col-3 {\n width: 25%;\n}\n.p-megamenu-col-4 {\n width: 33.3333%;\n}\n.p-megamenu-col-6 {\n width: 50%;\n}\n.p-megamenu-col-12 {\n width: 100%;\n}\n"),i.render=function(e,t,l,i,d,g){const k=n.resolveComponent("router-link"),h=n.resolveDirective("ripple");return n.openBlock(),n.createBlock("div",{class:g.containerClass},[n.createVNode("ul",a,[(n.openBlock(!0),n.createBlock(n.Fragment,null,n.renderList(l.model,((t,l)=>(n.openBlock(),n.createBlock(n.Fragment,{key:t.label+"_"+l},[g.visible(t)?(n.openBlock(),n.createBlock("li",{key:0,class:g.getCategoryClass(t),style:t.style,onMouseenter:e=>g.onCategoryMouseEnter(e,t),role:"none"},[e.$slots.item?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.$slots.item),{key:1,item:e.item},null,8,["item"])):(n.openBlock(),n.createBlock(n.Fragment,{key:0},[t.to&&!t.disabled?(n.openBlock(),n.createBlock(k,{key:0,to:t.to,custom:""},{default:n.withCtx((({navigate:e,href:l})=>[n.withDirectives(n.createVNode("a",{href:l,class:g.getLinkClass(t),onClick:n=>g.onCategoryClick(n,t,e),onKeydown:e=>g.onCategoryKeydown(e,t),role:"menuitem"},[t.icon?(n.openBlock(),n.createBlock("span",{key:0,class:g.getCategoryIcon(t)},null,2)):n.createCommentVNode("",!0),n.createVNode("span",o,n.toDisplayString(t.label),1)],42,["href","onClick","onKeydown"]),[[h]])])),_:2},1032,["to"])):n.withDirectives((n.openBlock(),n.createBlock("a",{key:1,href:t.url,class:g.getLinkClass(t),target:t.target,onClick:e=>g.onCategoryClick(e,t),onKeydown:e=>g.onCategoryKeydown(e,t),role:"menuitem","aria-haspopup":null!=t.items,"aria-expanded":t===d.activeItem,tabindex:t.disabled?null:"0"},[t.icon?(n.openBlock(),n.createBlock("span",{key:0,class:g.getCategoryIcon(t)},null,2)):n.createCommentVNode("",!0),n.createVNode("span",s,n.toDisplayString(t.label),1),t.items?(n.openBlock(),n.createBlock("span",{key:1,class:g.getCategorySubMenuIcon()},null,2)):n.createCommentVNode("",!0)],42,["href","target","onClick","onKeydown","aria-haspopup","aria-expanded","tabindex"])),[[h]])],64)),t.items?(n.openBlock(),n.createBlock("div",r,[n.createVNode("div",c,[(n.openBlock(!0),n.createBlock(n.Fragment,null,n.renderList(t.items,((l,i)=>(n.openBlock(),n.createBlock("div",{key:t.label+"_column_"+i,class:g.getColumnClassName(t)},[(n.openBlock(!0),n.createBlock(n.Fragment,null,n.renderList(l,((t,l)=>(n.openBlock(),n.createBlock("ul",{class:"p-megamenu-submenu",key:t.label+"_submenu_"+l,role:"menu"},[n.createVNode("li",{class:g.getSubmenuHeaderClass(t),style:t.style,role:"presentation"},n.toDisplayString(t.label),7),(n.openBlock(!0),n.createBlock(n.Fragment,null,n.renderList(t.items,((t,l)=>(n.openBlock(),n.createBlock(n.Fragment,{key:t.label+l.toString()},[g.visible(t)&&!t.separator?(n.openBlock(),n.createBlock("li",{key:0,role:"none",class:g.getSubmenuItemClass(t),style:t.style},[e.$slots.item?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.$slots.item),{key:1,item:t},null,8,["item"])):(n.openBlock(),n.createBlock(n.Fragment,{key:0},[t.to&&!t.disabled?(n.openBlock(),n.createBlock(k,{key:0,to:t.to,custom:""},{default:n.withCtx((({navigate:e,href:l})=>[n.withDirectives(n.createVNode("a",{href:l,class:g.getLinkClass(t),onClick:n=>g.onLeafClick(n,t,e),role:"menuitem"},[t.icon?(n.openBlock(),n.createBlock("span",{key:0,class:["p-menuitem-icon",t.icon]},null,2)):n.createCommentVNode("",!0),n.createVNode("span",m,n.toDisplayString(t.label),1)],10,["href","onClick"]),[[h]])])),_:2},1032,["to"])):n.withDirectives((n.openBlock(),n.createBlock("a",{key:1,href:t.url,class:g.getLinkClass(t),target:t.target,onClick:e=>g.onLeafClick(e,t),role:"menuitem",tabindex:t.disabled?null:"0"},[t.icon?(n.openBlock(),n.createBlock("span",{key:0,class:["p-menuitem-icon",t.icon]},null,2)):n.createCommentVNode("",!0),n.createVNode("span",u,n.toDisplayString(t.label),1),t.items?(n.openBlock(),n.createBlock("span",{key:1,class:e.getSubmenuIcon()},null,2)):n.createCommentVNode("",!0)],10,["href","target","onClick","tabindex"])),[[h]])],64))],6)):n.createCommentVNode("",!0),g.visible(t)&&t.separator?(n.openBlock(),n.createBlock("li",{class:["p-menu-separator",t.class],style:t.style,key:"separator"+l.toString(),role:"separator"},null,6)):n.createCommentVNode("",!0)],64)))),128))])))),128))],2)))),128))])])):n.createCommentVNode("",!0)],46,["onMouseenter"])):n.createCommentVNode("",!0)],64)))),128))]),e.$slots.default?(n.openBlock(),n.createBlock("div",p,[n.renderSlot(e.$slots,"default")])):n.createCommentVNode("",!0)],2)},module.exports=i;