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) 9.76 kB
import*as e from"react";import n,{PrimeReactContext as t,localeOption as r}from"primereact/api";import{ComponentBase as o,useHandleStyle as a}from"primereact/componentbase";import{CSSTransition as l}from"primereact/csstransition";import{useMergeProps as i,useOverlayListener as c,useDisplayOrder as p,useGlobalOnEscapeKey as u,ESC_KEY_HANDLING_PRIORITIES as s,useMountEffect as f,useUnmountEffect as y}from"primereact/hooks";import{TimesIcon as m}from"primereact/icons/times";import{OverlayService as v}from"primereact/overlayservice";import{Portal as b}from"primereact/portal";import{Ripple as d}from"primereact/ripple";import{classNames as g,DomHandler as h,UniqueComponentId as O,ZIndexUtils as w,IconUtils as x}from"primereact/utils";function S(){return S=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},S.apply(this,arguments)}function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}function E(e,n){if("object"!==j(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n||"default");if("object"!==j(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}function P(e){var n=E(e,"string");return"symbol"===j(n)?n:String(n)}function I(e){if(Array.isArray(e))return e}function k(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,l,i=[],c=!0,p=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(i.push(r.value),i.length!==n);c=!0);}catch(e){p=!0,o=e}finally{try{if(!c&&null!=t.return&&(l=t.return(),Object(l)!==l))return}finally{if(p)throw o}}return i}}function A(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 C(e,n){if(e){if("string"==typeof e)return A(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)?A(e,n):void 0}}function N(){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 T(e,n){return I(e)||k(e,n)||C(e,n)||N()}var R=o.extend({defaultProps:{__TYPE:"OverlayPanel",id:null,dismissable:!0,showCloseIcon:!1,closeIcon:null,style:null,className:null,appendTo:null,breakpoints:null,ariaCloseLabel:null,transitionOptions:null,onShow:null,onHide:null,children:void 0,closeOnEscape:!0},css:{classes:{root:function(e){var t=e.context;return g("p-overlaypanel p-component",{"p-input-filled":t&&"filled"===t.inputStyle||"filled"===n.inputStyle,"p-ripple-disabled":t&&!1===t.ripple||!1===n.ripple})},closeIcon:"p-overlaypanel-close-icon",closeButton:"p-overlaypanel-close p-link",content:"p-overlaypanel-content",transition:"p-overlaypanel"},styles:'\n@layer primereact {\n .p-overlaypanel {\n position: absolute;\n margin-top: 10px;\n /* Github #3122: Prevent animation flickering */\n top: -9999px;\n left: -9999px;\n }\n \n .p-overlaypanel-flipped {\n margin-top: 0;\n margin-bottom: 10px;\n }\n \n .p-overlaypanel-close {\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n position: relative;\n }\n \n /* Animation */\n .p-overlaypanel-enter {\n opacity: 0;\n transform: scaleY(0.8);\n }\n \n .p-overlaypanel-enter-active {\n opacity: 1;\n transform: scaleY(1);\n transition: transform .12s cubic-bezier(0, 0, 0.2, 1), opacity .12s cubic-bezier(0, 0, 0.2, 1);\n }\n \n .p-overlaypanel-enter-done {\n transform: none;\n }\n \n .p-overlaypanel-exit {\n opacity: 1;\n }\n \n .p-overlaypanel-exit-active {\n opacity: 0;\n transition: opacity .1s linear;\n }\n \n .p-overlaypanel:after, .p-overlaypanel:before {\n bottom: 100%;\n left: calc(var(--overlayArrowLeft, 0) + 1.25rem);\n content: " ";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n }\n \n .p-overlaypanel:after {\n border-width: 8px;\n margin-left: -8px;\n }\n \n .p-overlaypanel:before {\n border-width: 10px;\n margin-left: -10px;\n }\n \n .p-overlaypanel-flipped:after, .p-overlaypanel-flipped:before {\n bottom: auto;\n top: 100%;\n }\n \n .p-overlaypanel.p-overlaypanel-flipped:after {\n border-bottom-color: transparent;\n }\n \n .p-overlaypanel.p-overlaypanel-flipped:before {\n border-bottom-color: transparent\n }\n}\n'}});function D(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function L(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?D(Object(t),!0).forEach((function(n){var r,o,a;r=e,a=t[n],(o=P(o=n))in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):D(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var z=e.forwardRef((function(o,j){var E=i(),P=e.useContext(t),I=R.getProps(o,P),k=T(e.useState(!1),2),A=k[0],C=k[1],N=R.setMetaData({props:I,state:{visible:A}}),D=N.ptm,z=N.cx,H=N.isUnstyled;a(R.css.styles,H,{name:"overlaypanel"});var M=e.useRef(""),Y=e.useRef(null),B=e.useRef(null),_=e.useRef(!1),U=e.useRef(null),V=e.useRef(null),Z=T(c({target:B,overlay:Y,listener:function(e,n){if(n.valid)switch(n.type){case"outside":I.dismissable&&!_.current&&ee();break;case"resize":case"scroll":case"orientationchange":ae()}_.current=!1},when:A}),2),G=Z[0],J=Z[1],X=A&&I.closeOnEscape,$=p("overlay-panel",X);u({callback:function(){ee()},when:X&&$,priority:[s.OVERLAY_PANEL,$]});var q=function(e){return Y&&Y.current&&!(Y.current.isSameNode(e)||Y.current.contains(e))},F=function(e,n){return null!=B.current&&B.current!==(n||e.currentTarget||e.target)},K=function(){_.current=!0},Q=function(e,n){A?(ee(),F(e,n)&&(B.current=n||e.currentTarget||e.target,setTimeout((function(){W(e,B.current)}),200))):W(e,n)},W=function(e,n){B.current=n||e.currentTarget||e.target,A?ae():(C(!0),V.current=function(e){!q(e.target)&&(_.current=!0)},v.on("overlay-click",V.current))},ee=function(){C(!1),v.off("overlay-click",V.current),V.current=null},ne=function(){Y.current.setAttribute(M.current,""),w.set("overlay",Y.current,P&&P.autoZIndex||n.autoZIndex,P&&P.zIndex.overlay||n.zIndex.overlay),h.addStyles(Y.current,{position:"absolute",top:"0",left:"0"}),ae()},te=function(){G(),I.onShow&&I.onShow()},re=function(){J()},oe=function(){w.clear(Y.current),I.onHide&&I.onHide()},ae=function(){if(B.current&&Y.current){h.absolutePosition(Y.current,B.current);var e=h.getOffset(Y.current),n=h.getOffset(B.current),t=0;e.left<n.left&&(t=n.left-e.left),Y.current.style.setProperty("--overlayArrowLeft","".concat(t,"px")),e.top<n.top?(Y.current.setAttribute("data-p-overlaypanel-flipped","true"),H&&h.addClass(Y.current,"p-overlaypanel-flipped")):(Y.current.setAttribute("data-p-overlaypanel-flipped","false"),H&&h.removeClass(Y.current,"p-overlaypanel-flipped"))}},le=function(){if(!U.current){U.current=h.createInlineStyle(P&&P.nonce||n.nonce,P&&P.styleContainer);var e="";for(var t in I.breakpoints)e+="\n @media screen and (max-width: ".concat(t,") {\n .p-overlaypanel[").concat(M.current,"] {\n width: ").concat(I.breakpoints[t],";\n }\n }\n ");U.current.innerHTML=e}};f((function(){M.current=O(),I.breakpoints&&le()})),y((function(){U.current=h.removeInlineStyle(U.current),V.current&&(v.off("overlay-click",V.current),V.current=null),w.clear(Y.current)})),e.useImperativeHandle(j,(function(){return{props:I,toggle:Q,show:W,hide:ee,align:ae,isVisible:function(){return A},getElement:function(){return Y.current}}}));var ie,ce,pe,ue,se=function(){var n=E({className:z("closeIcon"),"aria-hidden":!0},D("closeIcon")),t=x.getJSXIcon(I.closeIcon||e.createElement(m,n),L({},n),{props:I}),o=I.ariaCloseLabel||r("close"),a=E({type:"button",className:z("closeButton"),onClick:function(e){return n=e,ee(),void n.preventDefault();var n},"aria-label":o},D("closeButton"));return I.showCloseIcon?e.createElement("button",a,t,e.createElement(d,null)):null},fe=(ie=se(),ce=E({id:I.id,className:g(I.className,z("root",{context:P})),style:I.style,onClick:function(e){return n=e,_.current=!0,void v.emit("overlay-click",{originalEvent:n,target:B.current});var n}},R.getOtherProps(I),D("root")),pe=E({className:z("content"),onClick:function(e){return K()},onMouseDown:K},R.getOtherProps(I),D("content")),ue=E({classNames:z("transition"),in:A,timeout:{enter:120,exit:100},options:I.transitionOptions,unmountOnExit:!0,onEnter:ne,onEntered:te,onExit:re,onExited:oe},D("transition")),e.createElement(l,S({nodeRef:Y},ue),e.createElement("div",S({ref:Y},ce),e.createElement("div",pe,I.children),ie)));return e.createElement(b,{element:fe,appendTo:I.appendTo})}));z.displayName="OverlayPanel";export{z as OverlayPanel};