UNPKG

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) 8.78 kB
import*as e from"react";import n from"primereact/api";import{CSSTransition as t}from"primereact/csstransition";import{useEventListener as r,useResizeListener as o,useMountEffect as i,useUpdateEffect as l,useMatchMedia as u,useOverlayListener as a,useUnmountEffect as c}from"primereact/hooks";import{OverlayService as p}from"primereact/overlayservice";import{Portal as s}from"primereact/portal";import{ObjectUtils as m,classNames as f,DomHandler as d,IconUtils as b,UniqueComponentId as g,ZIndexUtils as h}from"primereact/utils";import{Ripple as v}from"primereact/ripple";function y(){return y=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},y.apply(this,arguments)}function E(e){if(Array.isArray(e))return e}function w(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,i,l,u=[],a=!0,c=!1;try{if(i=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;a=!1}else for(;!(a=(r=i.call(t)).done)&&(u.push(r.value),u.length!==n);a=!0);}catch(e){c=!0,o=e}finally{try{if(!a&&null!=t.return&&(l=t.return(),Object(l)!==l))return}finally{if(c)throw o}}return u}}function M(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 k(e,n){if(e){if("string"==typeof e)return M(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)?M(e,n):void 0}}function x(){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 S(e,n){return E(e)||w(e,n)||k(e,n)||x()}var I={defaultProps:{__TYPE:"TieredMenu",id:null,model:null,popup:!1,style:null,className:null,autoZIndex:!0,baseZIndex:0,breakpoint:void 0,scrollHeight:"400px",appendTo:null,transitionOptions:null,onShow:null,onHide:null,children:void 0},getProps:function(e){return m.getMergedProps(e,I.defaultProps)},getOtherProps:function(e){return m.getDiffProps(e,I.defaultProps)}},T=e.memo((function(n){var t=S(e.useState(null),2),u=t[0],a=t[1],c=e.useRef(null),p=S(r({type:"click",listener:function(e){n.isMobileMode||!c.current||c.current.contains(e.target)||a(null)}}),1)[0],s=S(o({listener:function(){!n.isMobileMode&&a(null)}}),1)[0],g=function(){if(c.current){var e=c.current.parentElement,n=d.getOffset(e),t=d.getViewport(),r=c.current.offsetParent?c.current.offsetWidth:d.getHiddenElementOuterWidth(c.current),o=d.getOuterWidth(e.children[0]),i=parseInt(n.top,10)+c.current.offsetHeight-d.getWindowScrollTop();c.current.style.top=i>t.height?t.height-i+"px":"0px",parseInt(n.left,10)+o+r>t.width-d.calculateScrollbarWidth()&&d.addClass(c.current,"p-submenu-list-flipped")}},h=function(e,t){t.disabled||n.isMobileMode?e.preventDefault():n.root?(u||n.popup)&&a(t):a(t)},y=function(e,t){t.disabled?e.preventDefault():(t.url||e.preventDefault(),t.command&&t.command({originalEvent:e,item:t}),(n.root||n.isMobileMode)&&t.items&&a(u&&t===u?null:t),t.items||x(e))},E=function(e,t){var r=e.currentTarget.parentElement;switch(e.which){case 40:var o=M(r);o&&o.children[0].focus(),e.preventDefault();break;case 38:var i=k(r);i&&i.children[0].focus(),e.preventDefault();break;case 39:t.items&&(a(t),setTimeout((function(){r.children[1].children[0].children[0].focus()}),50)),e.preventDefault()}n.onKeyDown&&n.onKeyDown(e,r)},w=function(e,n){37===e.which&&(a(null),n.parentElement.previousElementSibling.focus())},M=function e(n){var t=n.nextElementSibling;return t?d.hasClass(t,"p-disabled")||!d.hasClass(t,"p-menuitem")?e(t):t:null},k=function e(n){var t=n.previousElementSibling;return t?d.hasClass(t,"p-disabled")||!d.hasClass(t,"p-menuitem")?e(t):t:null},x=function(e){n.isMobileMode&&!n.popup||(a(null),n.onLeafClick&&n.onLeafClick(e),n.onHide&&n.onHide(e))};i((function(){p(),s()})),l((function(){n.parentActive||a(null),n.root||!n.parentActive||n.isMobileMode||g()}),[n.parentActive]),l((function(){n.onItemToggle&&n.onItemToggle()}),[u]);var I=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator",role:"separator"})},N=function(t){return t.items?e.createElement(T,{menuProps:n.menuProps,model:t.items,onLeafClick:x,popup:n.popup,onKeyDown:w,parentActive:t===u,isMobileMode:n.isMobileMode,onItemToggle:n.onItemToggle}):null},P=function(t,r){if(!1===t.visible)return null;var o=t.style,i=t.disabled,l=t.icon,a=t.label,c=t.items,p=t.target,s=t.url,d=t.template,g=a+"_"+r,w=u===t,M=f("p-menuitem",{"p-menuitem-active":w},t.className),k=f("p-menuitem-link",{"p-disabled":i}),x=f("p-menuitem-icon",l),S="p-submenu-icon pi pi-angle-right",I=b.getJSXIcon(l,{className:"p-menuitem-icon"},{props:n.menuProps}),T=a&&e.createElement("span",{className:"p-menuitem-text"},a),P=c&&e.createElement("span",{className:S}),O=N(t),C=e.createElement("a",{href:s||"#",className:k,target:p,role:"menuitem","aria-haspopup":null!=c,onClick:function(e){return y(e,t)},onKeyDown:function(e){return E(e,t)},"aria-disabled":i},I,T,P,e.createElement(v,null));d&&(C=m.getJSXElement(d,t,{onClick:function(e){return y(e,t)},onKeyDown:function(e){return E(e,t)},className:k,labelClassName:"p-menuitem-text",iconClassName:x,submenuIconClassName:S,element:C,props:n,active:w,disabled:i}));return e.createElement("li",{key:g,id:t,className:M,style:o,onMouseEnter:function(e){return h(e,t)},role:"none"},C,O)},O=function(e,n){return e.separator?I(n):P(e,n)},C=f({"p-submenu-list":!n.root}),H=n.model?n.model.map(O):null;return e.createElement("ul",{ref:c,className:C,role:n.root?"menubar":"menu","aria-orientation":"horizontal"},H)}));T.displayName="TieredMenuSub";var N=e.memo(e.forwardRef((function(r,o){var m=I.getProps(r),b=S(e.useState(!m.popup),2),v=b[0],E=b[1],w=S(e.useState(null),2),M=w[0],k=w[1],x=e.useRef(null),N=e.useRef(null),P=e.useRef(null),O=u("screen and (max-width: ".concat(m.breakpoint,")"),!!m.breakpoint),C=S(a({target:N,overlay:x,listener:function(e,n){n.valid&&K(e)},when:v}),2),H=C[0],A=C[1],D=function(e){m.popup&&p.emit("overlay-click",{originalEvent:e,target:N.current})},j=function(e){m.popup&&(v?K(e):R(e))},R=function(e){N.current=e.currentTarget,E(!0),m.onShow&&m.onShow(e)},K=function(e){m.popup&&(N.current=e.currentTarget,E(!1),m.onHide&&m.onHide(e))},W=function(){m.popup&&O&&d.absolutePosition(x.current,N.current)},Z=function(){if(!P.current){P.current=d.createInlineStyle(n.nonce);var e="".concat(M),t="\n@media screen and (max-width: ".concat(m.breakpoint,") {\n .p-tieredmenu[").concat(e,"] > ul {\n max-height: ").concat(m.scrollHeight,";\n overflow: ").concat(m.scrollHeight?"auto":"",";\n }\n\n .p-tieredmenu[").concat(e,"] .p-submenu-list {\n position: relative;\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-submenu-list {\n left: 0 !important;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-tieredmenu[").concat(e,"] .p-menuitem-active > .p-menuitem-link > .p-submenu-icon {\n transform: rotate(-180deg);\n }\n\n .p-tieredmenu[").concat(e,'] .p-submenu-icon:before {\n content: "\\e930";\n }\n\n ').concat(m.popup?"":".p-tieredmenu[".concat(e,"] { width: 100%; }"),"\n}\n");P.current.innerHTML=t}},L=function(){P.current=d.removeInlineStyle(P.current)},_=function(){m.autoZIndex&&h.set("menu",x.current,n.autoZIndex,m.baseZIndex||n.zIndex.menu),d.absolutePosition(x.current,N.current),M&&m.breakpoint&&(x.current.setAttribute(M,""),Z())},z=function(){H()},J=function(){N.current=null,A()},X=function(){h.clear(x.current),L()};i((function(){m.breakpoint&&!M&&k(g())})),l((function(){return M&&x.current&&(x.current.setAttribute(M,""),Z()),function(){L()}}),[M,m.breakpoint]),c((function(){h.clear(x.current)})),e.useImperativeHandle(o,(function(){return{props:m,toggle:j,show:R,hide:K,getElement:function(){return x.current}}}));var U,V,Y=(U=I.getOtherProps(m),V=f("p-tieredmenu p-component",{"p-tieredmenu-overlay":m.popup,"p-input-filled":"filled"===n.inputStyle,"p-ripple-disabled":!1===n.ripple},m.className),e.createElement(t,{nodeRef:x,classNames:"p-connected-overlay",in:v,timeout:{enter:120,exit:100},options:m.transitionOptions,unmountOnExit:!0,onEnter:_,onEntered:z,onExit:J,onExited:X},e.createElement("div",y({ref:x,id:m.id,className:V,style:m.style},U,{onClick:D}),e.createElement(T,{menuProps:m,model:m.model,root:!0,popup:m.popup,onHide:K,isMobileMode:O,onItemToggle:W}))));return m.popup?e.createElement(s,{element:Y,appendTo:m.appendTo}):Y})));N.displayName="TieredMenu";export{N as TieredMenu};