UNPKG

ivt

Version:

Ivt Components Library

3 lines (2 loc) 2.13 kB
import*as e from"react";import{u as n}from"./index-C-j8pU3U.mjs";import{u as t}from"./index-0-u0cdz8.mjs";var r=r=>{const{present:o,children:u}=r,s=function(n){const[r,o]=e.useState(),u=e.useRef(null),s=e.useRef(n),a=e.useRef("none"),c=n?"mounted":"unmounted",[m,d]=function(n,t){return e.useReducer((e,n)=>t[e][n]??e,n)}(c,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return e.useEffect(()=>{const e=i(u.current);a.current="mounted"===m?e:"none"},[m]),t(()=>{const e=u.current,t=s.current;if(t!==n){const r=a.current,o=i(e);if(n)d("MOUNT");else if("none"===o||"none"===e?.display)d("UNMOUNT");else{d(t&&r!==o?"ANIMATION_OUT":"UNMOUNT")}s.current=n}},[n,d]),t(()=>{if(r){let e;const n=r.ownerDocument.defaultView??window,t=t=>{const o=i(u.current).includes(t.animationName);if(t.target===r&&o&&(d("ANIMATION_END"),!s.current)){const t=r.style.animationFillMode;r.style.animationFillMode="forwards",e=n.setTimeout(()=>{"forwards"===r.style.animationFillMode&&(r.style.animationFillMode=t)})}},o=e=>{e.target===r&&(a.current=i(u.current))};return r.addEventListener("animationstart",o),r.addEventListener("animationcancel",t),r.addEventListener("animationend",t),()=>{n.clearTimeout(e),r.removeEventListener("animationstart",o),r.removeEventListener("animationcancel",t),r.removeEventListener("animationend",t)}}d("ANIMATION_END")},[r,d]),{isPresent:["mounted","unmountSuspended"].includes(m),ref:e.useCallback(e=>{u.current=e?getComputedStyle(e):null,o(e)},[])}}(o),a="function"==typeof u?u({present:s.isPresent}):e.Children.only(u),c=n(s.ref,function(e){let n=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning;if(t)return e.ref;if(n=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=n&&"isReactWarning"in n&&n.isReactWarning,t)return e.props.ref;return e.props.ref||e.ref}(a));return"function"==typeof u||s.isPresent?e.cloneElement(a,{ref:c}):null};function i(e){return e?.animationName||"none"}r.displayName="Presence";export{r as P}; //# sourceMappingURL=index-1xuBLrml.mjs.map