react-clear-modal
Version:
Simple and lightweight, fully controlled isomorphic (with SSR support) modal component for React.js
2 lines (1 loc) • 2.98 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).ReactClearModal=t(e.React,e.ReactDOM)}(this,(function(e,t){"use strict";var n=function(){return n=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},n.apply(this,arguments)};return"function"==typeof SuppressedError&&SuppressedError,e.memo((function(o){var r=o.isOpen,l=void 0!==r&&r,i=o.onRequestClose,c=o.closeTimeout,u=o.preRender,a=void 0!==u&&u,s=o.contentProps,f=void 0===s?{}:s,d=o.children,y=o.parentElement,p=o.disableFocusOnContent,b=o.disableCloseOnEsc,m=o.disableCloseOnBgClick,v=o.disableBodyScrollOnOpen,O=o.disableRenderInPortal,C=o.onClick,g=o.style,h=function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]])}return n}(o,["isOpen","onRequestClose","closeTimeout","preRender","contentProps","children","parentElement","disableFocusOnContent","disableCloseOnEsc","disableCloseOnBgClick","disableBodyScrollOnOpen","disableRenderInPortal","onClick","style"]),E=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,l=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(o=l.next()).done;)i.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}return i}(e.useState(O),2),w=E[0],R=E[1],S=e.useRef(null),k=e.useRef(null),P=e.useCallback((function(e){var t;C&&C(e),!i||m||e.target===k.current||(null===(t=k.current)||void 0===t?void 0:t.contains(e.target))||i()}),[C,i,m]),x=e.useCallback((function(e){f.onKeyDown&&f.onKeyDown(e),!i||b||"Escape"!==e.code&&27!==e.keyCode||i()}),[f,i,b]),j=e.useCallback((function(){return l||a?e.createElement("div",n({},h,{style:n({alignItems:"center",bottom:0,display:l?"flex":"none",left:0,overflow:"auto",position:"fixed",right:0,top:0},g||{}),onClick:P}),e.createElement("div",n({},f,{style:n({margin:"auto"},f.style),onKeyDown:x,tabIndex:-1,ref:k}),d)):null}),[d,f,x,P,l,h,g,a]);if(e.useEffect((function(){return c&&i&&(S.current=setTimeout(i,c)),function(){clearTimeout(S.current)}}),[c,i]),e.useEffect((function(){var e;l&&!p&&(null===(e=k.current)||void 0===e||e.focus())}),[l,p]),e.useEffect((function(){var e=document.body.style.overflow;return l&&v&&(document.body.style.overflow="hidden"),function(){document.body.style.overflow=e}}),[l,v]),e.useEffect((function(){O||R(!0)}),[O]),w){if(O)return j();var T="string"==typeof y?y?document.querySelector(y):null:y;return t.createPortal(j(),T||document.body)}return null}))}));