primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
2 lines (1 loc) • 6.28 kB
JavaScript
import*as e from"react";import n from"primereact/api";import{useEventListener as t,useMountEffect as r,useUpdateEffect as l,useUnmountEffect as a}from"primereact/hooks";import{classNames as o,IconUtils as u,ObjectUtils as i,DomHandler as c,ZIndexUtils as s}from"primereact/utils";import{Ripple as m}from"primereact/ripple";function f(){return f=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},f.apply(this,arguments)}function p(e){if(Array.isArray(e))return e}function d(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,l,a=[],o=!0,u=!1;try{for(t=t.call(e);!(o=(r=t.next()).done)&&(a.push(r.value),!n||a.length!==n);o=!0);}catch(e){u=!0,l=e}finally{try{o||null==t.return||t.return()}finally{if(u)throw l}}return a}}function b(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function v(e,n){if(e){if("string"==typeof e)return b(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?b(e,n):void 0}}function y(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(e,n){return p(e)||d(e,n)||v(e,n)||y()}var h=e.memo(e.forwardRef((function(n,a){var s=g(e.useState(null),2),f=s[0],p=s[1],d=g(t({type:"click",listener:function(e){a&&a.current&&!a.current.contains(e.target)&&p(null)}}),1)[0],b=function(e,t){t.disabled||n.mobileActive?e.preventDefault():n.root?(f||n.popup)&&p(t):p(t)},v=function(e,n){n.disabled?e.preventDefault():(n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n}),n.items?p(f&&n===f?null:n):A())},y=function(e,t){var r=e.currentTarget.parentElement;switch(e.which){case 40:n.root?t.items&&N(t,r):w(r),e.preventDefault();break;case 38:!n.root&&k(r),e.preventDefault();break;case 39:if(n.root){var l=S(r);l&&l.children[0].focus()}else t.items&&N(t,r);e.preventDefault();break;case 37:n.root&&k(r),e.preventDefault()}n.onKeyDown&&n.onKeyDown(e,r)},E=function(e,t){n.root?38===e.which&&null==t.previousElementSibling&&C(t):37===e.which&&C(t)},N=function(e,n){p(e),setTimeout((function(){n.children[1].children[0].children[0].focus()}),50)},C=function(e){p(null),e.parentElement.previousElementSibling.focus()},w=function(e){var n=S(e);n&&n.children[0].focus()},k=function(e){var n=D(e);n&&n.children[0].focus()},S=function e(n){var t=n.nextElementSibling;return t?c.hasClass(t,"p-disabled")||!c.hasClass(t,"p-menuitem")?e(t):t:null},D=function e(n){var t=n.previousElementSibling;return t?c.hasClass(t,"p-disabled")||!c.hasClass(t,"p-menuitem")?e(t):t:null},A=function(){p(null),n.onLeafClick&&n.onLeafClick()};r((function(){d()})),l((function(){!n.parentActive&&p(null)}),[n.parentActive]);var I=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator",role:"separator"})},x=function(t){return t.items?e.createElement(h,{menuProps:n.menuProps,model:t.items,mobileActive:n.mobileActive,onLeafClick:A,onKeyDown:E,parentActive:t===f}):null},P=function(t,r){if(!1===t.visible)return null;var l=t.label+"_"+r,a=o("p-menuitem",{"p-menuitem-active":f===t},t.className),c=o("p-menuitem-link",{"p-disabled":t.disabled}),s=o("p-menuitem-icon",t.icon),p=o("p-submenu-icon pi",{"pi-angle-down":n.root,"pi-angle-right":!n.root}),d=u.getJSXIcon(t.icon,{className:"p-menuitem-icon"},{props:n.menuProps}),g=t.label&&e.createElement("span",{className:"p-menuitem-text"},t.label),h=t.items&&e.createElement("span",{className:p}),E=x(t),N=e.createElement("a",{href:t.url||"#",role:"menuitem",className:c,target:t.target,"aria-haspopup":null!=t.items,onClick:function(e){return v(e,t)},onKeyDown:function(e){return y(e,t)}},d,g,h,e.createElement(m,null));t.template&&(N=i.getJSXElement(t.template,t,{onClick:function(e){return v(e,t)},onKeyDown:function(e){return y(e,t)},className:c,labelClassName:"p-menuitem-text",iconClassName:s,submenuIconClassName:p,element:N,props:n}));return e.createElement("li",{key:l,role:"none",id:t.id,className:a,style:t.style,onMouseEnter:function(e){return b(e,t)}},N,E)},M=function(e,n){return e.separator?I(n):P(e,n)},j=n.root?"menubar":"menu",K=o({"p-submenu-list":!n.root,"p-menubar-root-list":n.root}),O=n.model?n.model.map(M):null;return e.createElement("ul",{ref:a,className:K,role:j},O)})));h.displayName="MenubarSub";var E=e.memo(e.forwardRef((function(r,u){var c=g(e.useState(!1),2),m=c[0],p=c[1],d=e.useRef(null),b=e.useRef(null),v=e.useRef(null),y=g(t({type:"click",listener:function(e){m&&k(e)&&p(!1)}}),2),N=y[0],C=y[1],w=function(e){e.preventDefault(),p((function(e){return!e}))},k=function(e){return b.current!==e.target&&!b.current.contains(e.target)&&v.current!==e.target&&!v.current.contains(e.target)};l((function(){m?(s.set("menu",b.current,n.autoZIndex,n.zIndex.menu),N()):(C(),s.clear(b.current))}),[m]),a((function(){s.clear(b.current)})),e.useImperativeHandle(u,(function(){return{props:r,toggle:w,useCustomContent:useCustomContent,getElement:function(){return d.current},getRootMenu:function(){return b.current},getMenuButton:function(){return v.current}}}));var S=i.findDiffKeys(r,E.defaultProps),D=o("p-menubar p-component",{"p-menubar-mobile-active":m},r.className),A=function(){if(r.start){var n=i.getJSXElement(r.start,r);return e.createElement("div",{className:"p-menubar-start"},n)}return null}(),I=function(){if(r.end){var n=i.getJSXElement(r.end,r);return e.createElement("div",{className:"p-menubar-end"},n)}return null}(),x=r.model&&r.model.length<1?null:e.createElement("a",{ref:v,href:"#",role:"button",tabIndex:0,className:"p-menubar-button",onClick:w},e.createElement("i",{className:"pi pi-bars"})),P=e.createElement(h,{ref:b,menuProps:r,model:r.model,root:!0,mobileActive:m,onLeafClick:function(){p(!1)}});return e.createElement("div",f({id:r.id,className:D,style:r.style},S),A,x,P,I)})));E.displayName="Menubar",E.defaultProps={__TYPE:"Menubar",id:null,model:null,style:null,className:null,start:null,end:null};export{E as Menubar};