@lanaco/lnc-react-ui
Version:
React component library
2 lines (1 loc) • 3.16 kB
JavaScript
;const w=require("./tslib.es6-fPwcSa2V.cjs"),u=require("react"),m=require("./motion-B_VPZaJq.cjs");function z(e){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(i,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return i.default=e,Object.freeze(i)}const a=z(u);function D(){var e=u.useRef(!1),i=w.__read(u.useState(0),2),t=i[0],n=i[1];return m.useUnmountEffect(function(){return e.current=!0}),u.useCallback(function(){!e.current&&n(t+1)},[t])}var N=0;function I(){var e=N;return N++,e}var O=function(e){var i=e.children,t=e.initial,n=e.isPresent,o=e.onExitComplete,x=e.custom,y=e.presenceAffectsLayout,s=m.useConstant(j),E=m.useConstant(I),g=u.useMemo(function(){return{id:E,initial:t,isPresent:n,custom:x,onExitComplete:function(c){s.set(c,!0);var p=!0;s.forEach(function(f){f||(p=!1)}),p&&(o==null||o())},register:function(c){return s.set(c,!1),function(){return s.delete(c)}}}},y?void 0:[n]);return u.useMemo(function(){s.forEach(function(c,p){return s.set(p,!1)})},[n]),a.useEffect(function(){!n&&!s.size&&(o==null||o())},[n]),a.createElement(m.PresenceContext.Provider,{value:g},i)};function j(){return new Map}function v(e){return e.key||""}function F(e,i){var t=process.env.NODE_ENV!=="production"?new Set:null;e.forEach(function(n){var o=v(n);process.env.NODE_ENV!=="production"&&t&&(t.has(o)&&console.warn('Children of AnimatePresence require unique keys. "'+o+'" is a duplicate.'),t.add(o)),i.set(o,n)})}function V(e){var i=[];return u.Children.forEach(e,function(t){u.isValidElement(t)&&i.push(t)}),i}var B=function(e){var i=e.children,t=e.custom,n=e.initial,o=n===void 0?!0:n,x=e.onExitComplete,y=e.exitBeforeEnter,s=e.presenceAffectsLayout,E=s===void 0?!0:s,g=D(),c=u.useContext(m.SharedLayoutContext);m.isSharedLayout(c)&&(g=c.forceUpdate);var p=u.useRef(!0),f=V(i),C=u.useRef(f),P=u.useRef(new Map).current,l=u.useRef(new Set).current;if(F(f,P),p.current)return p.current=!1,a.createElement(a.Fragment,null,f.map(function(r){return a.createElement(O,{key:v(r),isPresent:!0,initial:o?void 0:!1,presenceAffectsLayout:E},r)}));for(var d=w.__spreadArray([],w.__read(f)),R=C.current.map(v),L=f.map(v),S=R.length,A=0;A<S;A++){var b=R[A];L.indexOf(b)===-1?l.add(b):l.delete(b)}return y&&l.size&&(d=[]),l.forEach(function(r){if(L.indexOf(r)===-1){var h=P.get(r);if(h){var _=R.indexOf(r),M=function(){P.delete(r),l.delete(r);var k=C.current.findIndex(function(q){return q.key===r});C.current.splice(k,1),l.size||(C.current=f,g(),x&&x())};d.splice(_,0,a.createElement(O,{key:v(h),isPresent:!1,onExitComplete:M,custom:t,presenceAffectsLayout:E},h))}}}),d=d.map(function(r){var h=r.key;return l.has(h)?r:a.createElement(O,{key:v(r),isPresent:!0,presenceAffectsLayout:E},r)}),C.current=d,process.env.NODE_ENV!=="production"&&y&&d.length>1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),a.createElement(a.Fragment,null,l.size?d:d.map(function(r){return u.cloneElement(r)}))};exports.AnimatePresence=B;