primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ 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) • 9.82 kB
JavaScript
import*as e from"react";import n from"primereact/api";import{useMatchMedia as t,useEventListener as a,useResizeListener as r,useMountEffect as l,useUpdateEffect as i}from"primereact/hooks";import{Ripple as u}from"primereact/ripple";import{ObjectUtils as o,UniqueComponentId as m,DomHandler as c,ZIndexUtils as s,classNames as p,IconUtils as f}from"primereact/utils";function d(){return d=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a])}return e},d.apply(this,arguments)}function g(e){if(Array.isArray(e))return e}function v(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,r,l,i,u=[],o=!0,m=!1;try{if(l=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;o=!1}else for(;!(o=(a=l.call(t)).done)&&(u.push(a.value),u.length!==n);o=!0);}catch(e){m=!0,r=e}finally{try{if(!o&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(m)throw r}}return u}}function b(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=new Array(n);t<n;t++)a[t]=e[t];return a}function h(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 E(e,n){return g(e)||v(e,n)||h(e,n)||y()}var N={defaultProps:{__TYPE:"MegaMenu",id:null,model:null,style:null,className:null,orientation:"horizontal",breakpoint:void 0,scrollHeight:"400px",start:null,end:null,children:void 0},getProps:function(e){return o.getMergedProps(e,N.defaultProps)},getOtherProps:function(e){return o.getDiffProps(e,N.defaultProps)}},k=e.memo(e.forwardRef((function(g,v){var b=N.getProps(g),h=E(e.useState(null),2),y=h[0],k=h[1],w=E(e.useState(null),2),S=w[0],x=w[1],D=E(e.useState(!1),2),I=D[0],C=D[1],P=e.useRef(null),O=e.useRef(null),z=e.useRef(null),j="horizontal"===b.orientation,M="vertical"===b.orientation,A=t("screen and (max-width: ".concat(b.breakpoint,")"),!!b.breakpoint),_=E(a({type:"click",listener:function(e){A&&!I||!Y(e)||(k(null),C(!1))}}),1)[0],J=E(r({listener:function(){A&&!I||(k(null),C(!1))}}),1)[0],X=function(e,n){n.disabled?e.preventDefault():(n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n}),k(null),C(!1))},H=function(e,n){var t=e.currentTarget.parentElement;switch(e.which){case 40:j?R(n):U(t),e.preventDefault();break;case 38:M?V(t):n.items&&n===y&&T(),e.preventDefault();break;case 39:j?U(t):R(n),e.preventDefault();break;case 37:j?V(t):n.items&&n===y&&T(),e.preventDefault()}},R=function(e){e.items&&k(e)},T=function(e){k(null)},F=function(e){e.preventDefault(),C((function(e){return!e})),k(null)},K=function e(n){var t=n.nextElementSibling;return t?c.hasClass(t,"p-disabled")||!c.hasClass(t,"p-menuitem")?e(t):t:null},L=function e(n){var t=n.previousElementSibling;return t?c.hasClass(t,"p-disabled")||!c.hasClass(t,"p-menuitem")?e(t):t:null},U=function(e){var n=K(e);n&&n.children[0].focus()},V=function(e){var n=L(e);n&&n.children[0].focus()},Y=function(e){return P.current&&!(P.current.isSameNode(e.target)||P.current.contains(e.target)||z.current&&z.current.contains(e.target))},Z=function(e){var n;switch(e.items?e.items.length:0){case 2:n="p-megamenu-col-6";break;case 3:n="p-megamenu-col-4";break;case 4:n="p-megamenu-col-3";break;case 6:n="p-megamenu-col-2";break;default:n="p-megamenu-col-12"}return n};e.useImperativeHandle(v,(function(){return{props:b,getElement:function(){return P.current}}})),l((function(){b.breakpoint&&!S&&x(m()),_(),J()})),i((function(){var e=c.findSingle(P.current,".p-menuitem-active > .p-megamenu-panel");return y&&!A&&s.set("menu",e,n.autoZIndex,n.zIndex.menu),A&&e&&e.previousElementSibling.scrollIntoView({block:"nearest",inline:"nearest"}),function(){s.clear(e)}}),[y]);var $=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator",role:"separator"})},q=function(n){if(n.items){var t=p("p-submenu-icon pi",{"pi-angle-down":j,"pi-angle-right":M});return e.createElement("span",{className:t})}return null},B=function(n,t){if(!1===n.visible)return null;if(n.separator)return $(t);var a=n.label+"_"+t,r=p("p-menuitem",n.className),l=p("p-menuitem-link",{"p-disabled":n.disabled}),i=p(n.icon,"p-menuitem-icon"),m=f.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:b}),c=e.createElement("a",{href:n.url||"#",className:l,target:n.target,onClick:function(e){return X(e,n)},role:"menuitem","aria-disabled":n.disabled},m,n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),e.createElement(u,null));return n.template&&(c=o.getJSXElement(n.template,n,{onClick:function(e){return X(e,n)},className:l,labelClassName:"p-menuitem-text",iconClassName:i,element:c,props:b})),e.createElement("li",{key:a,id:n.id,className:r,style:n.style,role:"none"},c)},G=function(n){if(!1===n.visible)return null;var t=p("p-megamenu-submenu-header",{"p-disabled":n.disabled},n.className),a=n.items.map(B);return e.createElement(e.Fragment,{key:n.label},e.createElement("li",{id:n.id,className:t,style:n.style,role:"presentation"},n.label),a)},Q=function(e){return e.map(G)},W=function(n,t,a,r){var l=n.label+"_column_"+a,i=Q(t);return e.createElement("div",{key:l,className:r},e.createElement("ul",{className:"p-megamenu-submenu",role:"menu"},i))},ee=function(e){if(e.items){var n=Z(e);return e.items.map((function(t,a){return W(e,t,a,n)}))}return null},ne=function(n){if(n.items){var t=ee(n);return e.createElement("div",{className:"p-megamenu-panel"},e.createElement("div",{className:"p-megamenu-grid"},t))}return null},te=function(){if(!O.current){O.current=c.createInlineStyle(n.nonce);var e="".concat(S),t="\n@media screen and (max-width: ".concat(b.breakpoint,") {\n .p-megamenu[").concat(e,"] > .p-megamenu-root-list .p-menuitem-active .p-megamenu-panel {\n position: relative;\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n background: inherit;\n }\n\n .p-megamenu[").concat(e,"] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-megamenu[").concat(e,"] .p-megamenu-grid {\n flex-wrap: wrap;\n }\n\n ").concat(j?"\n.p-megamenu[".concat(e,"] .p-megamenu-button {\n display: flex;\n}\n\n.p-megamenu[").concat(e,"].p-megamenu-horizontal {\n position: relative;\n}\n\n.p-megamenu[").concat(e,"].p-megamenu-horizontal .p-megamenu-root-list {\n display: none;\n}\n\n.p-megamenu-horizontal[").concat(e,'] div[class*="p-megamenu-col-"] {\n width: auto;\n flex: 1;\n padding: 0;\n}\n\n.p-megamenu[').concat(e,"].p-megamenu-mobile-active .p-megamenu-root-list {\n display: flex;\n flex-direction: column;\n position: absolute;\n width: 100%;\n top: 100%;\n left: 0;\n z-index: 1;\n}\n "):"","\n\n ").concat(M?"\n.p-megamenu-vertical[".concat(e,"] {\n width: 100%;\n}\n\n.p-megamenu-vertical[").concat(e,"] .p-megamenu-root-list {\n max-height: ").concat(b.scrollHeight,";\n overflow: ").concat(b.scrollHeight?"auto":"",";\n}\n.p-megamenu-vertical[").concat(e,'] div[class*="p-megamenu-col-"] {\n width: 100%;\n padding: 0;\n}\n\n.p-megamenu-vertical[').concat(e,"] .p-megamenu-submenu {\n width: 100%;\n}\n\n.p-megamenu-vertical[").concat(e,'] div[class*="p-megamenu-col-"] .p-megamenu-submenu-header {\n background: inherit;\n}\n\n.p-megamenu-vertical[').concat(e,'] .p-submenu-icon:before {\n content: "\\e930";\n}\n '):"","\n}\n");O.current.innerHTML=t}};i((function(){return S&&P.current&&(P.current.setAttribute(S,""),te()),function(){O.current=c.removeInlineStyle(O.current)}}),[S,b.breakpoint]);var ae=function(n,t){var a=p("p-menuitem",{"p-menuitem-active":n===y},n.className),r=p("p-menuitem-link",{"p-disabled":n.disabled}),l=f.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:b}),i=n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),m=n.template?o.getJSXElement(n.template,n):null,c=q(n),s=ne(n);return e.createElement("li",{key:n.label+"_"+t,id:n.id,className:a,style:n.style,onMouseEnter:function(e){return t=e,void((a=n).disabled||A?t.preventDefault():y&&k(a));var t,a},role:"none"},e.createElement("a",{href:n.url||"#",className:r,target:n.target,onClick:function(e){return t=e,(a=n).disabled||(a.url||t.preventDefault(),a.command&&a.command({originalEvent:t,item:b.item}),a.items&&k(y&&y===a?null:a)),void t.preventDefault();var t,a},onKeyDown:function(e){return H(e,n)},role:"menuitem","aria-haspopup":null!=n.items},l,i,m,c,e.createElement(u,null)),s)},re=N.getOtherProps(b),le=p("p-megamenu p-component",{"p-megamenu-horizontal":"horizontal"===b.orientation,"p-megamenu-vertical":"vertical"===b.orientation,"p-megamenu-mobile-active":I},b.className),ie=b.model?e.createElement("ul",{className:"p-megamenu-root-list",role:"menubar"},b.model.map((function(e,n){return ae(e,n)}))):null,ue=function(){if(b.start){var n=o.getJSXElement(b.start,b);return e.createElement("div",{className:"p-megamenu-start"},n)}return null}(),oe=function(){if(b.end){var n=o.getJSXElement(b.end,b);return e.createElement("div",{className:"p-megamenu-end"},n)}return null}(),me="vertical"===b.orientation||b.model&&b.model.length<1?null:e.createElement("a",{ref:z,href:"#",role:"button",tabIndex:0,className:"p-megamenu-button",onClick:F},e.createElement("i",{className:"pi pi-bars"}));return e.createElement("div",d({ref:P,id:b.id,className:le,style:b.style},re),ue,me,ie,oe)})));k.displayName="MegaMenu";export{k as MegaMenu};