@start-base/react-modal
Version:
Accessible modal dialog component and global modals provider for React.JS. This package is a enhanced version of react-modal.
1 lines • 2.53 kB
JavaScript
import e,{createContext as o,useContext as l,Children as n,useEffect as a,cloneElement as r,useState as d,useCallback as s}from"react";import t from"react-modal";var p=Object.defineProperty,i=Object.defineProperties,c=Object.getOwnPropertyDescriptors,u=Object.getOwnPropertySymbols,m=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable,M=(e,o,l)=>o in e?p(e,o,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[o]=l,f=(e,o)=>{for(var l in o||(o={}))m.call(o,l)&&M(e,l,o[l]);if(u)for(var l of u(o))v.call(o,l)&&M(e,l,o[l]);return e},y=(e,o)=>i(e,c(o)),O=o({modals:[],openedModals:{},modalProps:{},setModals:()=>({}),openModal:()=>({}),closeModal:()=>({})}),b=O.Provider,P=O,h=({children:o})=>{const{setModals:d,openedModals:s}=l(P),t=n.toArray(o);return a((()=>{const e=null==t?void 0:t.map((e=>{var o;return null==(o=null==e?void 0:e.props)?void 0:o.name}));d(e)}),[]),e.createElement(e.Fragment,null,n.map(t,((e,o)=>{var l,n,a,d,t;return r(e,{isOpen:null==s?void 0:s[null==(l=null==e?void 0:e.props)?void 0:l.name],style:y(f({},null==(n=null==e?void 0:e.props)?void 0:n.style),{overlay:f({zIndex:(null==s?void 0:s[null==(a=null==e?void 0:e.props)?void 0:a.name])?1e3+Object.keys(s).length+o:"unset"},null==(t=null==(d=null==e?void 0:e.props)?void 0:d.style)?void 0:t.overlay)})})})))},j=o=>{var n=o,{children:r,isOpen:d,appElement:s,name:p}=n,i=((e,o)=>{var l={};for(var n in e)m.call(e,n)&&o.indexOf(n)<0&&(l[n]=e[n]);if(null!=e&&u)for(var n of u(e))o.indexOf(n)<0&&v.call(e,n)&&(l[n]=e[n]);return l})(n,["children","isOpen","appElement","name"]);const{closeModal:c}=l(P);return a((()=>{s&&t.setAppElement(s)}),[s]),a((()=>{document.body.style.overflow=d?"hidden":"unset"}),[d]),e.createElement(t,f({id:p,closeTimeoutMS:100,contentLabel:p,isOpen:d,onRequestClose:()=>c(p),shouldCloseOnOverlayClick:!0},i),r)};var E=function(){const[e,o]=d([]),[l,n]=d({}),[a,r]=d({});return{modals:e,setModals:o,openedModals:l,modalProps:a,openModal:s(((e,o)=>{n((o=>y(f({},o),{[e]:!0}))),r((l=>y(f({},l),{[e]:o})))}),[]),closeModal:s((e=>{n((o=>y(f({},o),{[e]:!1})))}),[])}},g=({children:o})=>{const{modals:l,openedModals:n,modalProps:a,setModals:r,openModal:d,closeModal:s}=E();return e.createElement(b,{value:{modals:l,openedModals:n,modalProps:a,setModals:r,openModal:d,closeModal:s}},o)};var w=function(){const{modals:e,openedModals:o,modalProps:n,openModal:a,closeModal:r}=l(P);return{modals:e,openedModals:o,modalProps:n,openModal:a,closeModal:r}};export{h as GlobalModals,j as Modal,g as ModalProvider,w as useModal};