import _extends from"@babel/runtime/helpers/esm/extends";import _objectWithoutProperties from"@babel/runtime/helpers/esm/objectWithoutProperties";import*as React from"react";import PropTypes from"prop-types";import*as ReactDOM from"react-dom";import{chainPropTypes,elementTypeAcceptingRef,refType,HTMLElementType}from"@material-ui/utils";import debounce from"../utils/debounce";import clsx from"clsx";import ownerDocument from"../utils/ownerDocument";import ownerWindow from"../utils/ownerWindow";import createChainedFunction from"../utils/createChainedFunction";import withStyles from"../styles/withStyles";import Modal from"../Modal";import Grow from"../Grow";import Paper from"../Paper";export function getOffsetTop(e,o){var n=0;return"number"==typeof o?n=o:"center"===o?n=e.height/2:"bottom"===o&&(n=e.height),n};export function getOffsetLeft(e,o){var n=0;return"number"==typeof o?n=o:"center"===o?n=e.width/2:"right"===o&&(n=e.width),n};function getTransformOriginValue(e){return[e.horizontal,e.vertical].map(function(e){return"number"==typeof e?"".concat(e,"px"):e}).join(" ")}function getScrollParent(e,o){for(var n=o,t=0;n&&n!==e;)t+=(n=n.parentElement).scrollTop;return t}function getAnchorEl(e){return"function"==typeof e?e():e}export var styles={root:{},paper:{position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}};var Popover=React.forwardRef(function(e,o){var n=e.action,t=e.anchorEl,r=e.anchorOrigin,i=void 0===r?{vertical:"top",horizontal:"left"}:r,a=e.anchorPosition,p=e.anchorReference,c=void 0===p?"anchorEl":p,s=e.children,l=e.classes,u=e.className,f=e.container,h=e.elevation,m=void 0===h?8:h,d=e.getContentAnchorEl,T=e.marginThreshold,v=void 0===T?16:T,y=e.onEnter,P=e.onEntered,g=e.onEntering,E=e.onExit,b=e.onExited,O=e.onExiting,R=e.open,x=e.PaperProps,w=void 0===x?{}:x,C=e.transformOrigin,N=void 0===C?{vertical:"top",horizontal:"left"}:C,M=e.TransitionComponent,D=void 0===M?Grow:M,z=e.transitionDuration,A=void 0===z?"auto":z,_=e.TransitionProps,j=void 0===_?{}:_,V=_objectWithoutProperties(e,["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","classes","className","container","elevation","getContentAnchorEl","marginThreshold","onEnter","onEntered","onEntering","onExit","onExited","onExiting","open","PaperProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps"]),W=React.useRef(),k=React.useCallback(function(e){if("anchorPosition"===c)return"production"!==process.env.NODE_ENV&&(a||console.error('Material-UI: You need to provide a `anchorPosition` prop when using .')),a;var o=getAnchorEl(t),n=o&&1===o.nodeType?o:ownerDocument(W.current).body,r=n.getBoundingClientRect();if("production"!==process.env.NODE_ENV){var p=n.getBoundingClientRect();"test"!==process.env.NODE_ENV&&0===p.top&&0===p.left&&0===p.right&&0===p.bottom&&console.warn(["Material-UI: The `anchorEl` prop provided to the component is invalid.","The anchor element should be part of the document layout.","Make sure the element is present in the document or that it's not display none."].join("\n"))}var s=0===e?i.vertical:"center";return{top:r.top+getOffsetTop(r,s),left:r.left+getOffsetLeft(r,i.horizontal)}},[t,i.horizontal,i.vertical,a,c]),H=React.useCallback(function(e){var o=0;if(d&&"anchorEl"===c){var n=d(e);if(n&&e.contains(n)){var t=getScrollParent(e,n);o=n.offsetTop+n.clientHeight/2-t||0}"production"!==process.env.NODE_ENV&&"top"!==i.vertical&&console.error(["Material-UI: You can not change the default `anchorOrigin.vertical` value ","when also providing the `getContentAnchorEl` prop to the popover component.","Only use one of the two props.","Set `getContentAnchorEl` to `null | undefined` or leave `anchorOrigin.vertical` unchanged."].join("\n"))}return o},[i.vertical,c,d]),I=React.useCallback(function(e){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return{vertical:getOffsetTop(e,N.vertical)+o,horizontal:getOffsetLeft(e,N.horizontal)}},[N.horizontal,N.vertical]),L=React.useCallback(function(e){var o=H(e),n={width:e.offsetWidth,height:e.offsetHeight},r=I(n,o);if("none"===c)return{top:null,left:null,transformOrigin:getTransformOriginValue(r)};var i=k(o),a=i.top-r.vertical,p=i.left-r.horizontal,s=a+n.height,l=p+n.width,u=ownerWindow(getAnchorEl(t)),f=u.innerHeight-v,h=u.innerWidth-v;if(af){var d=s-f;a-=d,r.vertical+=d}if("production"!==process.env.NODE_ENV&&n.height>f&&n.height&&f&&console.error(["Material-UI: The popover component is too tall.","Some part of it can not be seen on the screen (".concat(n.height-f,"px)."),"Please consider adding a `max-height` to improve the user-experience."].join("\n")),ph){var y=l-h;p-=y,r.horizontal+=y}return{top:"".concat(Math.round(a),"px"),left:"".concat(Math.round(p),"px"),transformOrigin:getTransformOriginValue(r)}},[t,c,k,H,I,v]),S=React.useCallback(function(){var e=W.current;if(e){var o=L(e);null!==o.top&&(e.style.top=o.top),null!==o.left&&(e.style.left=o.left),e.style.transformOrigin=o.transformOrigin}},[L]),q=React.useCallback(function(e){W.current=ReactDOM.findDOMNode(e)},[]);React.useEffect(function(){R&&S()}),React.useImperativeHandle(n,function(){return R?{updatePosition:function(){S()}}:null},[R,S]),React.useEffect(function(){if(R){var e=debounce(function(){S()});return window.addEventListener("resize",e),function(){e.clear(),window.removeEventListener("resize",e)}}},[R,S]);var U=A;"auto"!==A||D.muiSupportAuto||(U=void 0);var B=f||(t?ownerDocument(getAnchorEl(t)).body:void 0);return React.createElement(Modal,_extends({container:B,open:R,ref:o,BackdropProps:{invisible:!0},className:clsx(l.root,u)},V),React.createElement(D,_extends({appear:!0,in:R,onEnter:y,onEntered:P,onExit:E,onExited:b,onExiting:O,timeout:U},j,{onEntering:createChainedFunction(function(e,o){g&&g(e,o),S()},j.onEntering)}),React.createElement(Paper,_extends({elevation:m,ref:q},w,{className:clsx(l.paper,w.className)}),s)))});"production"!==process.env.NODE_ENV&&(Popover.propTypes={action:refType,anchorEl:chainPropTypes(PropTypes.oneOfType([HTMLElementType,PropTypes.func]),function(e){if(e.open&&(!e.anchorReference||"anchorEl"===e.anchorReference)){var o=getAnchorEl(e.anchorEl);if(!o||1!==o.nodeType)return new Error(["Material-UI: The `anchorEl` prop provided to the component is invalid.","It should be an Element instance but it's `".concat(o,"` instead.")].join("\n"));var n=o.getBoundingClientRect();if("test"!==process.env.NODE_ENV&&0===n.top&&0===n.left&&0===n.right&&0===n.bottom)return new Error(["Material-UI: The `anchorEl` prop provided to the component is invalid.","The anchor element should be part of the document layout.","Make sure the element is present in the document or that it's not display none."].join("\n"))}return null}),anchorOrigin:PropTypes.shape({horizontal:PropTypes.oneOfType([PropTypes.oneOf(["center","left","right"]),PropTypes.number]).isRequired,vertical:PropTypes.oneOfType([PropTypes.oneOf(["bottom","center","top"]),PropTypes.number]).isRequired}),anchorPosition:PropTypes.shape({left:PropTypes.number.isRequired,top:PropTypes.number.isRequired}),anchorReference:PropTypes.oneOf(["anchorEl","anchorPosition","none"]),children:PropTypes.node,classes:PropTypes.object,className:PropTypes.string,container:PropTypes.oneOfType([HTMLElementType,PropTypes.instanceOf(React.Component),PropTypes.func]),elevation:PropTypes.number,getContentAnchorEl:PropTypes.func,marginThreshold:PropTypes.number,onClose:PropTypes.func,onEnter:PropTypes.func,onEntered:PropTypes.func,onEntering:PropTypes.func,onExit:PropTypes.func,onExited:PropTypes.func,onExiting:PropTypes.func,open:PropTypes.bool.isRequired,PaperProps:PropTypes.shape({component:elementTypeAcceptingRef}),transformOrigin:PropTypes.shape({horizontal:PropTypes.oneOfType([PropTypes.oneOf(["center","left","right"]),PropTypes.number]).isRequired,vertical:PropTypes.oneOfType([PropTypes.oneOf(["bottom","center","top"]),PropTypes.number]).isRequired}),TransitionComponent:PropTypes.elementType,transitionDuration:PropTypes.oneOfType([PropTypes.oneOf(["auto"]),PropTypes.number,PropTypes.shape({appear:PropTypes.number,enter:PropTypes.number,exit:PropTypes.number})]),TransitionProps:PropTypes.object});export default withStyles(styles,{name:"MuiPopover"})(Popover);