@anoki/fse-ui
Version:
FSE UI components library
3 lines (2 loc) • 2.59 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),P=require("./index.cjs465.js"),g=require("./index.cjs561.js");function S(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 a=S(y);function E(n,e){return a.useReducer((t,r)=>e[t][r]??t,n)}var O=n=>{const{present:e,children:t}=n,r=R(e),i=typeof t=="function"?t({present:r.isPresent}):a.Children.only(t),u=P.useComposedRefs(r.ref,v(i));return typeof t=="function"||r.isPresent?a.cloneElement(i,{ref:u}):null};O.displayName="Presence";function R(n){const[e,t]=a.useState(),r=a.useRef(null),i=a.useRef(n),u=a.useRef("none"),p=n?"mounted":"unmounted",[N,c]=E(p,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return a.useEffect(()=>{const o=l(r.current);u.current=N==="mounted"?o:"none"},[N]),g.useLayoutEffect(()=>{const o=r.current,d=i.current;if(d!==n){const f=u.current,s=l(o);n?c("MOUNT"):s==="none"||(o==null?void 0:o.display)==="none"?c("UNMOUNT"):c(d&&f!==s?"ANIMATION_OUT":"UNMOUNT"),i.current=n}},[n,c]),g.useLayoutEffect(()=>{if(e){let o;const d=e.ownerDocument.defaultView??window,m=s=>{const M=l(r.current).includes(CSS.escape(s.animationName));if(s.target===e&&M&&(c("ANIMATION_END"),!i.current)){const T=e.style.animationFillMode;e.style.animationFillMode="forwards",o=d.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=T)})}},f=s=>{s.target===e&&(u.current=l(r.current))};return e.addEventListener("animationstart",f),e.addEventListener("animationcancel",m),e.addEventListener("animationend",m),()=>{d.clearTimeout(o),e.removeEventListener("animationstart",f),e.removeEventListener("animationcancel",m),e.removeEventListener("animationend",m)}}else c("ANIMATION_END")},[e,c]),{isPresent:["mounted","unmountSuspended"].includes(N),ref:a.useCallback(o=>{r.current=o?getComputedStyle(o):null,t(o)},[])}}function l(n){return(n==null?void 0:n.animationName)||"none"}function v(n){var r,i;let e=(r=Object.getOwnPropertyDescriptor(n.props,"ref"))==null?void 0:r.get,t=e&&"isReactWarning"in e&&e.isReactWarning;return t?n.ref:(e=(i=Object.getOwnPropertyDescriptor(n,"ref"))==null?void 0:i.get,t=e&&"isReactWarning"in e&&e.isReactWarning,t?n.props.ref:n.props.ref||n.ref)}exports.Presence=O;
//# sourceMappingURL=index.cjs476.js.map