@stanfordspezi/spezi-web-design-system
Version:
Stanford Biodesign Digital Health Spezi Web Design System
2 lines (1 loc) • 4.32 kB
JavaScript
;const I=require("react"),v=require("./index-CLdeiAAB.js"),p=require("./index-14SsMENa.js"),R=require("./index-UhBwhhTY.js"),w=require("react/jsx-runtime");function j(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,s.get?s:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const o=j(I);function H(t,e=globalThis==null?void 0:globalThis.document){const n=v.useCallbackRef(t);o.useEffect(()=>{const s=r=>{r.key==="Escape"&&n(r)};return e.addEventListener("keydown",s,{capture:!0}),()=>e.removeEventListener("keydown",s,{capture:!0})},[n,e])}var U="DismissableLayer",h="dismissableLayer.update",q="dismissableLayer.pointerDownOutside",z="dismissableLayer.focusOutside",O,x=o.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),T=o.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:s,onPointerDownOutside:r,onFocusOutside:a,onInteractOutside:l,onDismiss:d,...E}=t,c=o.useContext(x),[u,S]=o.useState(null),f=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,k]=o.useState({}),F=R.useComposedRefs(e,i=>S(i)),m=Array.from(c.layers),[N]=[...c.layersWithOutsidePointerEventsDisabled].slice(-1),W=m.indexOf(N),P=u?m.indexOf(u):-1,_=c.layersWithOutsidePointerEventsDisabled.size>0,D=P>=W,A=K(i=>{const y=i.target,L=[...c.branches].some(b=>b.contains(y));!D||L||(r==null||r(i),l==null||l(i),i.defaultPrevented||d==null||d())},f),C=X(i=>{const y=i.target;[...c.branches].some(b=>b.contains(y))||(a==null||a(i),l==null||l(i),i.defaultPrevented||d==null||d())},f);return H(i=>{P===c.layers.size-1&&(s==null||s(i),!i.defaultPrevented&&d&&(i.preventDefault(),d()))},f),o.useEffect(()=>{if(u)return n&&(c.layersWithOutsidePointerEventsDisabled.size===0&&(O=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),c.layersWithOutsidePointerEventsDisabled.add(u)),c.layers.add(u),g(),()=>{n&&c.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=O)}},[u,f,n,c]),o.useEffect(()=>()=>{u&&(c.layers.delete(u),c.layersWithOutsidePointerEventsDisabled.delete(u),g())},[u,c]),o.useEffect(()=>{const i=()=>k({});return document.addEventListener(h,i),()=>document.removeEventListener(h,i)},[]),w.jsx(p.Primitive.div,{...E,ref:F,style:{pointerEvents:_?D?"auto":"none":void 0,...t.style},onFocusCapture:v.composeEventHandlers(t.onFocusCapture,C.onFocusCapture),onBlurCapture:v.composeEventHandlers(t.onBlurCapture,C.onBlurCapture),onPointerDownCapture:v.composeEventHandlers(t.onPointerDownCapture,A.onPointerDownCapture)})});T.displayName=U;var M="DismissableLayerBranch",$=o.forwardRef((t,e)=>{const n=o.useContext(x),s=o.useRef(null),r=R.useComposedRefs(e,s);return o.useEffect(()=>{const a=s.current;if(a)return n.branches.add(a),()=>{n.branches.delete(a)}},[n.branches]),w.jsx(p.Primitive.div,{...t,ref:r})});$.displayName=M;function K(t,e=globalThis==null?void 0:globalThis.document){const n=v.useCallbackRef(t),s=o.useRef(!1),r=o.useRef(()=>{});return o.useEffect(()=>{const a=d=>{if(d.target&&!s.current){let E=function(){B(q,n,c,{discrete:!0})};const c={originalEvent:d};d.pointerType==="touch"?(e.removeEventListener("click",r.current),r.current=E,e.addEventListener("click",r.current,{once:!0})):E()}else e.removeEventListener("click",r.current);s.current=!1},l=window.setTimeout(()=>{e.addEventListener("pointerdown",a)},0);return()=>{window.clearTimeout(l),e.removeEventListener("pointerdown",a),e.removeEventListener("click",r.current)}},[e,n]),{onPointerDownCapture:()=>s.current=!0}}function X(t,e=globalThis==null?void 0:globalThis.document){const n=v.useCallbackRef(t),s=o.useRef(!1);return o.useEffect(()=>{const r=a=>{a.target&&!s.current&&B(z,n,{originalEvent:a},{discrete:!1})};return e.addEventListener("focusin",r),()=>e.removeEventListener("focusin",r)},[e,n]),{onFocusCapture:()=>s.current=!0,onBlurCapture:()=>s.current=!1}}function g(){const t=new CustomEvent(h);document.dispatchEvent(t)}function B(t,e,n,{discrete:s}){const r=n.originalEvent.target,a=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&r.addEventListener(t,e,{once:!0}),s?p.dispatchDiscreteCustomEvent(r,a):r.dispatchEvent(a)}exports.DismissableLayer=T;