UNPKG

react-useportal-test

Version:
4 lines • 2.88 kB
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"CTod":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.usePortal=n,exports.default=void 0;var e=require("react"),t=require("react-dom");function n({closeOnOutsideClick:n=!0,closeOnEsc:r=!0,renderOnClickedElement:o,renderBelowClickedElement:u,bindTo:c,isOpen:l=!1,stateful:s=!0}={}){const[a,i]=(0,e.useState)(l),d=(0,e.useRef)(a),p=(0,e.useCallback)(e=>{d.current=e,i(e)},[a,d.current]),m=(0,e.useRef)(),f=(0,e.useRef)(document.createElement("div")),v=(0,e.useMemo)(()=>c&&(0,t.findDOMNode)(c)||document&&document.body,[]),b=(0,e.useCallback)(e=>{27===e.keyCode&&s&&r&&p(!1)},[]),k=(0,e.useCallback)(e=>{if(null==e)return setTimeout(()=>s&&p(!0),0);e&&e.nativeEvent&&e.nativeEvent.stopImmediatePropagation();const{left:t,top:n,height:r}=e.target.getBoundingClientRect();o?f.current.style=`\n height: 0px;\n position: absolute;\n left: ${t}px;\n top: ${n}px;\n `:u&&(f.current.style=`\n position: absolute;\n left: ${t}px;\n top: ${n+r}px;\n `),s&&p(!0)},[s,f]),C=(0,e.useCallback)(()=>{d.current&&p(!1)},[a,d.current]),E=(0,e.useCallback)(({target:e,button:t})=>{!f.current.contains(e)&&0===t&&f.current&&d.current&&s&&n&&C()},[a]);(0,e.useEffect)(()=>(v.appendChild(f.current),document.addEventListener("keydown",b),document.addEventListener("click",E),()=>{document.removeEventListener("keydown",b),document.removeEventListener("click",E),v.removeChild(f.current)}),[E,b]);const g=(0,e.useCallback)(e=>a?p(!1):k(e),[a,d.current]),x=({children:e})=>(0,t.createPortal)(e,f.current);return Object.assign([k,C,d.current,x,g],{isOpen:d.current,openPortal:k,onMouseDown:b,ref:m,closePortal:C,togglePortal:g,Portal:x,bind:{onMouseDown:b,ref:m}})}var r=n;exports.default=r; },{}]},{},["CTod"], null) //# sourceMappingURL=/usePortal.js.map