UNPKG

@stanfordspezi/spezi-web-design-system

Version:

Stanford Biodesign Digital Health Spezi Web Design System

2 lines (1 loc) 2.42 kB
"use strict";const T=require("react"),E=require("./index-CajSSBH7.js"),g=require("./index-DMAkK3b-.js");function P(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const o=P(T);function R(n,e){return o.useReducer((t,r)=>e[t][r]??t,n)}var A=n=>{const{present:e,children:t}=n,r=S(e),a=typeof t=="function"?t({present:r.isPresent}):o.Children.only(t),u=E.useComposedRefs(r.ref,v(a));return typeof t=="function"||r.isPresent?o.cloneElement(a,{ref:u}):null};A.displayName="Presence";function S(n){const[e,t]=o.useState(),r=o.useRef(null),a=o.useRef(n),u=o.useRef("none"),p=n?"mounted":"unmounted",[N,s]=R(p,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return o.useEffect(()=>{const i=l(r.current);u.current=N==="mounted"?i:"none"},[N]),g.useLayoutEffect2(()=>{const i=r.current,d=a.current;if(d!==n){const f=u.current,c=l(i);n?s("MOUNT"):c==="none"||i?.display==="none"?s("UNMOUNT"):s(d&&f!==c?"ANIMATION_OUT":"UNMOUNT"),a.current=n}},[n,s]),g.useLayoutEffect2(()=>{if(e){let i;const d=e.ownerDocument.defaultView??window,m=c=>{const y=l(r.current).includes(CSS.escape(c.animationName));if(c.target===e&&y&&(s("ANIMATION_END"),!a.current)){const M=e.style.animationFillMode;e.style.animationFillMode="forwards",i=d.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=M)})}},f=c=>{c.target===e&&(u.current=l(r.current))};return e.addEventListener("animationstart",f),e.addEventListener("animationcancel",m),e.addEventListener("animationend",m),()=>{d.clearTimeout(i),e.removeEventListener("animationstart",f),e.removeEventListener("animationcancel",m),e.removeEventListener("animationend",m)}}else s("ANIMATION_END")},[e,s]),{isPresent:["mounted","unmountSuspended"].includes(N),ref:o.useCallback(i=>{r.current=i?getComputedStyle(i):null,t(i)},[])}}function l(n){return n?.animationName||"none"}function v(n){let e=Object.getOwnPropertyDescriptor(n.props,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=Object.getOwnPropertyDescriptor(n,"ref")?.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}exports.Presence=A;