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) 9.31 kB
import{DomHandler as e,ZIndexUtils as t}from"primevue/utils";import n from"primevue/ripple";import{resolveComponent as i,resolveDirective as l,openBlock as s,createBlock as o,Fragment as a,renderList as r,withCtx as m,withDirectives as u,createVNode as c,toDisplayString as p,createCommentVNode as d,resolveDynamicComponent as b,renderSlot as h}from"vue";var v={name:"MenubarSub",emits:["keydown-item","leaf-click"],props:{model:{type:Array,default:null},root:{type:Boolean,default:!1},popup:{type:Boolean,default:!1},parentActive:{type:Boolean,default:!1},mobileActive:{type:Boolean,default:!1},template:{type:Object,default:null}},documentClickListener:null,watch:{parentActive(e){e||(this.activeItem=null)}},data:()=>({activeItem:null}),updated(){this.root&&this.activeItem&&this.bindDocumentClickListener()},beforeUnmount(){this.unbindDocumentClickListener()},methods:{onItemMouseEnter(e,t){t.disabled||this.mobileActive?e.preventDefault():this.root?(this.activeItem||this.popup)&&(this.activeItem=t):this.activeItem=t},onItemClick(e,t,n){t.disabled?e.preventDefault():(t.command&&t.command({originalEvent:e,item:t}),t.items&&(this.activeItem&&t===this.activeItem?this.activeItem=null:this.activeItem=t),t.items||this.onLeafClick(),t.to&&n&&n(e))},onLeafClick(){this.activeItem=null,this.$emit("leaf-click")},onItemKeyDown(e,t){let n=e.currentTarget.parentElement;switch(e.which){case 40:this.root?t.items&&this.expandSubmenu(t,n):this.navigateToNextItem(n),e.preventDefault();break;case 38:this.root||this.navigateToPrevItem(n),e.preventDefault();break;case 39:if(this.root){var i=this.findNextItem(n);i&&i.children[0].focus()}else t.items&&this.expandSubmenu(t,n);e.preventDefault();break;case 37:this.root&&this.navigateToPrevItem(n),e.preventDefault()}this.$emit("keydown-item",{originalEvent:e,element:n})},onChildItemKeyDown(e){this.root?38===e.originalEvent.which&&null==e.element.previousElementSibling&&this.collapseMenu(e.element):37===e.originalEvent.which&&this.collapseMenu(e.element)},findNextItem(t){let n=t.nextElementSibling;return n?e.hasClass(n,"p-disabled")||!e.hasClass(n,"p-menuitem")?this.findNextItem(n):n:null},findPrevItem(t){let n=t.previousElementSibling;return n?e.hasClass(n,"p-disabled")||!e.hasClass(n,"p-menuitem")?this.findPrevItem(n):n:null},expandSubmenu(e,t){this.activeItem=e,setTimeout((()=>{t.children[1].children[0].children[0].focus()}),50)},collapseMenu(e){this.activeItem=null,e.parentElement.previousElementSibling.focus()},navigateToNextItem(e){var t=this.findNextItem(e);t&&t.children[0].focus()},navigateToPrevItem(e){var t=this.findPrevItem(e);t&&t.children[0].focus()},getItemClass(e){return["p-menuitem",e.class,{"p-menuitem-active":this.activeItem===e}]},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)},getSubmenuIcon(){return["p-submenu-icon pi",{"pi-angle-right":!this.root,"pi-angle-down":this.root}]},visible:e=>"function"==typeof e.visible?e.visible():!1!==e.visible},computed:{containerClass(){return{"p-submenu-list":!this.root,"p-menubar-root-list":this.root}}},directives:{ripple:n}};const f={class:"p-menuitem-text"},k={class:"p-menuitem-text"};v.render=function(e,t,n,h,v,g){const y=i("router-link"),C=i("MenubarSub",!0),x=l("ripple");return s(),o("ul",{class:g.containerClass,role:n.root?"menubar":"menu"},[(s(!0),o(a,null,r(n.model,((e,t)=>(s(),o(a,{key:e.label+t.toString()},[g.visible(e)&&!e.separator?(s(),o("li",{key:0,role:"none",class:g.getItemClass(e),style:e.style,onMouseenter:t=>g.onItemMouseEnter(t,e)},[n.template?(s(),o(b(n.template),{key:1,item:e},null,8,["item"])):(s(),o(a,{key:0},[e.to&&!e.disabled?(s(),o(y,{key:0,to:e.to,custom:""},{default:m((({navigate:t,href:n})=>[u(c("a",{href:n,onClick:n=>g.onItemClick(n,e,t),class:g.getLinkClass(e),onKeydown:t=>g.onItemKeyDown(t,e),role:"menuitem"},[c("span",{class:["p-menuitem-icon",e.icon]},null,2),c("span",f,p(e.label),1)],42,["href","onClick","onKeydown"]),[[x]])])),_:2},1032,["to"])):u((s(),o("a",{key:1,href:e.url,class:g.getLinkClass(e),target:e.target,"aria-haspopup":null!=e.items,"aria-expanded":e===v.activeItem,onClick:t=>g.onItemClick(t,e),onKeydown:t=>g.onItemKeyDown(t,e),role:"menuitem",tabindex:e.disabled?null:"0"},[c("span",{class:["p-menuitem-icon",e.icon]},null,2),c("span",k,p(e.label),1),e.items?(s(),o("span",{key:0,class:g.getSubmenuIcon()},null,2)):d("",!0)],42,["href","target","aria-haspopup","aria-expanded","onClick","onKeydown","tabindex"])),[[x]])],64)),g.visible(e)&&e.items?(s(),o(C,{model:e.items,key:e.label+"_sub_",mobileActive:n.mobileActive,onLeafClick:g.onLeafClick,onKeydownItem:g.onChildItemKeyDown,parentActive:e===v.activeItem,template:n.template},null,8,["model","mobileActive","onLeafClick","onKeydownItem","parentActive","template"])):d("",!0)],46,["onMouseenter"])):d("",!0),g.visible(e)&&e.separator?(s(),o("li",{class:["p-menu-separator",e.class],style:e.style,key:"separator"+t.toString(),role:"separator"},null,6)):d("",!0)],64)))),128))],10,["role"])};var g={name:"Menubar",props:{model:{type:Array,default:null}},outsideClickListener:null,data:()=>({mobileActive:!1}),beforeUnmount(){this.mobileActive=!1,this.unbindOutsideClickListener(),this.$refs.rootmenu&&this.$refs.rootmenu.$el&&t.clear(this.$refs.rootmenu.$el)},methods:{toggle(e){this.mobileActive?(this.mobileActive=!1,t.clear(this.$refs.rootmenu.$el)):(this.mobileActive=!0,t.set("menu",this.$refs.rootmenu.$el,this.$primevue.config.zIndex.menu)),this.bindOutsideClickListener(),e.preventDefault()},bindOutsideClickListener(){this.outsideClickListener||(this.outsideClickListener=e=>{!this.mobileActive||this.$refs.rootmenu.$el===e.target||this.$refs.rootmenu.$el.contains(e.target)||this.$refs.menubutton===e.target||this.$refs.menubutton.contains(e.target)||(this.mobileActive=!1)},document.addEventListener("click",this.outsideClickListener))},unbindOutsideClickListener(){this.outsideClickListener&&(document.removeEventListener("click",this.outsideClickListener),this.outsideClickListener=null)},onLeafClick(){this.mobileActive=!1}},computed:{containerClass(){return["p-menubar p-component",{"p-menubar-mobile-active":this.mobileActive}]}},components:{MenubarSub:v}};const y={key:0,class:"p-menubar-start"},C=c("i",{class:"pi pi-bars"},null,-1),x={key:1,class:"p-menubar-end"};!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css","top"===n&&i.firstChild?i.insertBefore(l,i.firstChild):i.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}("\n.p-menubar {\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}\n.p-menubar ul {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.p-menubar .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-menubar .p-menuitem-text {\n line-height: 1;\n}\n.p-menubar .p-menuitem {\n position: relative;\n}\n.p-menubar-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}\n.p-menubar-root-list > li ul {\n display: none;\n z-index: 1;\n}\n.p-menubar-root-list > .p-menuitem-active > .p-submenu-list {\n display: block;\n}\n.p-menubar .p-submenu-list {\n display: none;\n position: absolute;\n z-index: 1;\n}\n.p-menubar .p-submenu-list > .p-menuitem-active > .p-submenu-list {\n display: block;\n left: 100%;\n top: 0;\n}\n.p-menubar .p-submenu-list .p-menuitem-link .p-submenu-icon {\n margin-left: auto;\n}\n.p-menubar .p-menubar-custom,\n.p-menubar .p-menubar-end {\n margin-left: auto;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.p-menubar-button {\n display: none;\n cursor: pointer;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),g.render=function(e,t,n,l,a,r){const m=i("MenubarSub");return s(),o("div",{class:r.containerClass},[e.$slots.start?(s(),o("div",y,[h(e.$slots,"start")])):d("",!0),c("a",{ref:"menubutton",tabindex:"0",class:"p-menubar-button",onClick:t[1]||(t[1]=e=>r.toggle(e))},[C],512),c(m,{ref:"rootmenu",model:n.model,root:!0,mobileActive:a.mobileActive,onLeafClick:r.onLeafClick,template:e.$slots.item},null,8,["model","mobileActive","onLeafClick","template"]),e.$slots.end?(s(),o("div",x,[h(e.$slots,"end")])):d("",!0)],2)};export default g;