UNPKG

@cgi-learning-hub/ui

Version:

@cgi-learning-hub/ui is an open-source React component library that implements UI for HUB's features

3 lines (2 loc) 13.5 kB
"use strict";const he=require("react"),n=require("./index-DLnSn8GT.cjs"),_=require("./identifier-BoZelETM.cjs"),Pe=require("./memoTheme-BKfsJx_F.cjs"),V=require("./ownerWindow-DDHucZi0.cjs"),A=require("./ownerDocument-4MViGo3k.cjs"),ce=require("./useForkRef-CFhhTu-Q.cjs"),oe=require("./useEventCallback-BxpcFap0.cjs"),ne=require("./createChainedFunction-CJmlQuW8.cjs"),X=require("./useSlot-C2FjoUpF.cjs"),F=require("react/jsx-runtime"),$=require("./DefaultPropsProvider-Cnf49AIv.cjs"),J=require("./Portal-CPOCKeMh.cjs"),Q=require("./elementAcceptingRef-BZ42cOGO.cjs"),ge=require("./Backdrop-DeNTZlA5.cjs");function Ee(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const u=Ee(he);function ae(e=window){const t=e.document.documentElement.clientWidth;return e.innerWidth-t}function xe(e){const t=A.ownerDocument(e);return t.body===e?V.ownerWindow(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}function B(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function re(e){return parseInt(V.ownerWindow(e).getComputedStyle(e).paddingRight,10)||0}function Re(e){const r=["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].includes(e.tagName),o=e.tagName==="INPUT"&&e.getAttribute("type")==="hidden";return r||o}function se(e,t,r,o,i){const s=[t,r,...o];[].forEach.call(e.children,c=>{const a=!s.includes(c),b=!Re(c);a&&b&&B(c,i)})}function G(e,t){let r=-1;return e.some((o,i)=>t(o)?(r=i,!0):!1),r}function ve(e,t){const r=[],o=e.container;if(!t.disableScrollLock){if(xe(o)){const c=ae(V.ownerWindow(o));r.push({value:o.style.paddingRight,property:"padding-right",el:o}),o.style.paddingRight=`${re(o)+c}px`;const a=A.ownerDocument(o).querySelectorAll(".mui-fixed");[].forEach.call(a,b=>{r.push({value:b.style.paddingRight,property:"padding-right",el:b}),b.style.paddingRight=`${re(b)+c}px`})}let s;if(o.parentNode instanceof DocumentFragment)s=A.ownerDocument(o).body;else{const c=o.parentElement,a=V.ownerWindow(o);s=(c==null?void 0:c.nodeName)==="HTML"&&a.getComputedStyle(c).overflowY==="scroll"?c:o}r.push({value:s.style.overflow,property:"overflow",el:s},{value:s.style.overflowX,property:"overflow-x",el:s},{value:s.style.overflowY,property:"overflow-y",el:s}),s.style.overflow="hidden"}return()=>{r.forEach(({value:s,el:c,property:a})=>{s?c.style.setProperty(a,s):c.style.removeProperty(a)})}}function ke(e){const t=[];return[].forEach.call(e.children,r=>{r.getAttribute("aria-hidden")==="true"&&t.push(r)}),t}class le{constructor(){this.modals=[],this.containers=[]}add(t,r){let o=this.modals.indexOf(t);if(o!==-1)return o;o=this.modals.length,this.modals.push(t),t.modalRef&&B(t.modalRef,!1);const i=ke(r);se(r,t.mount,t.modalRef,i,!0);const s=G(this.containers,c=>c.container===r);return s!==-1?(this.containers[s].modals.push(t),o):(this.containers.push({modals:[t],container:r,restore:null,hiddenSiblings:i}),o)}mount(t,r){const o=G(this.containers,s=>s.modals.includes(t)),i=this.containers[o];i.restore||(i.restore=ve(i,r))}remove(t,r=!0){const o=this.modals.indexOf(t);if(o===-1)return o;const i=G(this.containers,c=>c.modals.includes(t)),s=this.containers[i];if(s.modals.splice(s.modals.indexOf(t),1),this.modals.splice(o,1),s.modals.length===0)s.restore&&s.restore(),t.modalRef&&B(t.modalRef,r),se(s.container,t.mount,t.modalRef,s.hiddenSiblings,!1),this.containers.splice(i,1);else{const c=s.modals[s.modals.length-1];c.modalRef&&B(c.modalRef,!1)}return o}isTopModal(t){return this.modals.length>0&&this.modals[this.modals.length-1]===t}}const we=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function Ne(e){const t=parseInt(e.getAttribute("tabindex")||"",10);return Number.isNaN(t)?e.contentEditable==="true"||(e.nodeName==="AUDIO"||e.nodeName==="VIDEO"||e.nodeName==="DETAILS")&&e.getAttribute("tabindex")===null?0:e.tabIndex:t}function Ie(e){if(e.tagName!=="INPUT"||e.type!=="radio"||!e.name)return!1;const t=o=>e.ownerDocument.querySelector(`input[type="radio"]${o}`);let r=t(`[name="${e.name}"]:checked`);return r||(r=t(`[name="${e.name}"]`)),r!==e}function Se(e){return!(e.disabled||e.tagName==="INPUT"&&e.type==="hidden"||Ie(e))}function Ce(e){const t=[],r=[];return Array.from(e.querySelectorAll(we)).forEach((o,i)=>{const s=Ne(o);s===-1||!Se(o)||(s===0?t.push(o):r.push({documentOrder:i,tabIndex:s,node:o}))}),r.sort((o,i)=>o.tabIndex===i.tabIndex?o.documentOrder-i.documentOrder:o.tabIndex-i.tabIndex).map(o=>o.node).concat(t)}function Fe(){return!0}function U(e){const{children:t,disableAutoFocus:r=!1,disableEnforceFocus:o=!1,disableRestoreFocus:i=!1,getTabbable:s=Ce,isEnabled:c=Fe,open:a}=e,b=u.useRef(!1),h=u.useRef(null),v=u.useRef(null),y=u.useRef(null),g=u.useRef(null),T=u.useRef(!1),f=u.useRef(null),M=ce.useForkRef(Q.getReactElementRef(t),f),N=u.useRef(null);u.useEffect(()=>{!a||!f.current||(T.current=!r)},[r,a]),u.useEffect(()=>{if(!a||!f.current)return;const l=A.ownerDocument(f.current);return f.current.contains(l.activeElement)||(f.current.hasAttribute("tabIndex")||(process.env.NODE_ENV!=="production"&&console.error(["MUI: The modal content node does not accept focus.",'For the benefit of assistive technologies, the tabIndex of the node is being set to "-1".'].join(` `)),f.current.setAttribute("tabIndex","-1")),T.current&&f.current.focus()),()=>{i||(y.current&&y.current.focus&&(b.current=!0,y.current.focus()),y.current=null)}},[a]),u.useEffect(()=>{if(!a||!f.current)return;const l=A.ownerDocument(f.current),m=P=>{N.current=P,!(o||!c()||P.key!=="Tab")&&l.activeElement===f.current&&P.shiftKey&&(b.current=!0,v.current&&v.current.focus())},k=()=>{var E,O;const P=f.current;if(P===null)return;if(!l.hasFocus()||!c()||b.current){b.current=!1;return}if(P.contains(l.activeElement)||o&&l.activeElement!==h.current&&l.activeElement!==v.current)return;if(l.activeElement!==g.current)g.current=null;else if(g.current!==null)return;if(!T.current)return;let S=[];if((l.activeElement===h.current||l.activeElement===v.current)&&(S=s(f.current)),S.length>0){const j=!!((E=N.current)!=null&&E.shiftKey&&((O=N.current)==null?void 0:O.key)==="Tab"),K=S[0],q=S[S.length-1];typeof K!="string"&&typeof q!="string"&&(j?q.focus():K.focus())}else P.focus()};l.addEventListener("focusin",k),l.addEventListener("keydown",m,!0);const D=setInterval(()=>{l.activeElement&&l.activeElement.tagName==="BODY"&&k()},50);return()=>{clearInterval(D),l.removeEventListener("focusin",k),l.removeEventListener("keydown",m,!0)}},[r,o,i,c,a,s]);const I=l=>{y.current===null&&(y.current=l.relatedTarget),T.current=!0,g.current=l.target;const m=t.props.onFocus;m&&m(l)},x=l=>{y.current===null&&(y.current=l.relatedTarget),T.current=!0};return F.jsxs(u.Fragment,{children:[F.jsx("div",{tabIndex:a?0:-1,onFocus:x,ref:h,"data-testid":"sentinelStart"}),u.cloneElement(t,{ref:M,onFocus:I}),F.jsx("div",{tabIndex:a?0:-1,onFocus:x,ref:v,"data-testid":"sentinelEnd"})]})}process.env.NODE_ENV!=="production"&&(U.propTypes={children:Q.elementAcceptingRef,disableAutoFocus:n.PropTypes.bool,disableEnforceFocus:n.PropTypes.bool,disableRestoreFocus:n.PropTypes.bool,getTabbable:n.PropTypes.func,isEnabled:n.PropTypes.func,open:n.PropTypes.bool.isRequired});process.env.NODE_ENV!=="production"&&(U.propTypes=J.exactProp(U.propTypes));function Me(e){return typeof e=="function"?e():e}function Oe(e){return e?e.props.hasOwnProperty("in"):!1}const ie=()=>{},z=new le;function Ae(e){const{container:t,disableEscapeKeyDown:r=!1,disableScrollLock:o=!1,closeAfterTransition:i=!1,onTransitionEnter:s,onTransitionExited:c,children:a,onClose:b,open:h,rootRef:v}=e,y=u.useRef({}),g=u.useRef(null),T=u.useRef(null),f=ce.useForkRef(T,v),[M,N]=u.useState(!h),I=Oe(a);let x=!0;(e["aria-hidden"]==="false"||e["aria-hidden"]===!1)&&(x=!1);const l=()=>A.ownerDocument(g.current),m=()=>(y.current.modalRef=T.current,y.current.mount=g.current,y.current),k=()=>{z.mount(m(),{disableScrollLock:o}),T.current&&(T.current.scrollTop=0)},D=oe.useEventCallback(()=>{const p=Me(t)||l().body;z.add(m(),p),T.current&&k()}),P=()=>z.isTopModal(m()),S=oe.useEventCallback(p=>{g.current=p,p&&(h&&P()?k():T.current&&B(T.current,x))}),E=u.useCallback(()=>{z.remove(m(),x)},[x]);u.useEffect(()=>()=>{E()},[E]),u.useEffect(()=>{h?D():(!I||!i)&&E()},[h,E,I,i,D]);const O=p=>d=>{var R;(R=p.onKeyDown)==null||R.call(p,d),!(d.key!=="Escape"||d.which===229||!P())&&(r||(d.stopPropagation(),b&&b(d,"escapeKeyDown")))},j=p=>d=>{var R;(R=p.onClick)==null||R.call(p,d),d.target===d.currentTarget&&b&&b(d,"backdropClick")};return{getRootProps:(p={})=>{const d=X.extractEventHandlers(e);delete d.onTransitionEnter,delete d.onTransitionExited;const R={...d,...p};return{role:"presentation",...R,onKeyDown:O(R),ref:f}},getBackdropProps:(p={})=>{const d=p;return{"aria-hidden":!0,...d,onClick:j(d),open:h}},getTransitionProps:()=>{const p=()=>{N(!1),s&&s()},d=()=>{N(!0),c&&c(),i&&E()};return{onEnter:ne.createChainedFunction(p,(a==null?void 0:a.props.onEnter)??ie),onExited:ne.createChainedFunction(d,(a==null?void 0:a.props.onExited)??ie)}},rootRef:f,portalRef:S,isTopModal:P,exited:M,hasTransition:I}}function ue(e){return _.generateUtilityClass("MuiModal",e)}const De=_.generateUtilityClasses("MuiModal",["root","hidden","backdrop"]),je=e=>{const{open:t,exited:r,classes:o}=e,i={root:["root",!t&&r&&"hidden"],backdrop:["backdrop"]};return $.composeClasses(i,ue,o)},qe=$.styled("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,!r.open&&r.exited&&t.hidden]}})(Pe.memoTheme(({theme:e})=>({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0,variants:[{props:({ownerState:t})=>!t.open&&t.exited,style:{visibility:"hidden"}}]}))),Le=$.styled(ge.Backdrop,{name:"MuiModal",slot:"Backdrop"})({zIndex:-1}),de=u.forwardRef(function(t,r){const o=$.useDefaultProps({name:"MuiModal",props:t}),{BackdropComponent:i=Le,BackdropProps:s,classes:c,className:a,closeAfterTransition:b=!1,children:h,container:v,component:y,components:g={},componentsProps:T={},disableAutoFocus:f=!1,disableEnforceFocus:M=!1,disableEscapeKeyDown:N=!1,disablePortal:I=!1,disableRestoreFocus:x=!1,disableScrollLock:l=!1,hideBackdrop:m=!1,keepMounted:k=!1,onClose:D,onTransitionEnter:P,onTransitionExited:S,open:E,slotProps:O={},slots:j={},theme:K,...q}=o,H={...o,closeAfterTransition:b,disableAutoFocus:f,disableEnforceFocus:M,disableEscapeKeyDown:N,disablePortal:I,disableRestoreFocus:x,disableScrollLock:l,hideBackdrop:m,keepMounted:k},{getRootProps:p,getBackdropProps:d,getTransitionProps:R,portalRef:pe,isTopModal:fe,exited:Z,hasTransition:ee}=Ae({...H,rootRef:r}),L={...H,exited:Z},w=je(L),W={};if(h.props.tabIndex===void 0&&(W.tabIndex="-1"),ee){const{onEnter:C,onExited:Y}=R();W.onEnter=C,W.onExited=Y}const te={slots:{root:g.Root,backdrop:g.Backdrop,...j},slotProps:{...T,...O}},[be,Te]=X.useSlot("root",{ref:r,elementType:qe,externalForwardedProps:{...te,...q,component:y},getSlotProps:p,ownerState:L,className:_.clsx(a,w==null?void 0:w.root,!L.open&&L.exited&&(w==null?void 0:w.hidden))}),[ye,me]=X.useSlot("backdrop",{ref:s==null?void 0:s.ref,elementType:i,externalForwardedProps:te,shouldForwardComponentProp:!0,additionalProps:s,getSlotProps:C=>d({...C,onClick:Y=>{C!=null&&C.onClick&&C.onClick(Y)}}),className:_.clsx(s==null?void 0:s.className,w==null?void 0:w.backdrop),ownerState:L});return!k&&!E&&(!ee||Z)?null:F.jsx(J.Portal,{ref:pe,container:v,disablePortal:I,children:F.jsxs(be,{...Te,children:[!m&&i?F.jsx(ye,{...me}):null,F.jsx(U,{disableEnforceFocus:M,disableAutoFocus:f,disableRestoreFocus:x,isEnabled:fe,open:E,children:u.cloneElement(h,W)})]})})});process.env.NODE_ENV!=="production"&&(de.propTypes={BackdropComponent:n.PropTypes.elementType,BackdropProps:n.PropTypes.object,children:Q.elementAcceptingRef.isRequired,classes:n.PropTypes.object,className:n.PropTypes.string,closeAfterTransition:n.PropTypes.bool,component:n.PropTypes.elementType,components:n.PropTypes.shape({Backdrop:n.PropTypes.elementType,Root:n.PropTypes.elementType}),componentsProps:n.PropTypes.shape({backdrop:n.PropTypes.oneOfType([n.PropTypes.func,n.PropTypes.object]),root:n.PropTypes.oneOfType([n.PropTypes.func,n.PropTypes.object])}),container:n.PropTypes.oneOfType([J.HTMLElementType,n.PropTypes.func]),disableAutoFocus:n.PropTypes.bool,disableEnforceFocus:n.PropTypes.bool,disableEscapeKeyDown:n.PropTypes.bool,disablePortal:n.PropTypes.bool,disableRestoreFocus:n.PropTypes.bool,disableScrollLock:n.PropTypes.bool,hideBackdrop:n.PropTypes.bool,keepMounted:n.PropTypes.bool,onClose:n.PropTypes.func,onTransitionEnter:n.PropTypes.func,onTransitionExited:n.PropTypes.func,open:n.PropTypes.bool.isRequired,slotProps:n.PropTypes.shape({backdrop:n.PropTypes.oneOfType([n.PropTypes.func,n.PropTypes.object]),root:n.PropTypes.oneOfType([n.PropTypes.func,n.PropTypes.object])}),slots:n.PropTypes.shape({backdrop:n.PropTypes.elementType,root:n.PropTypes.elementType}),sx:n.PropTypes.oneOfType([n.PropTypes.arrayOf(n.PropTypes.oneOfType([n.PropTypes.func,n.PropTypes.object,n.PropTypes.bool])),n.PropTypes.func,n.PropTypes.object])});exports.FocusTrap=U;exports.Modal=de;exports.ModalManager=le;exports.getModalUtilityClass=ue;exports.getScrollbarSize=ae;exports.modalClasses=De;