@tamagui/animate-presence 2.0.0-rc.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cjs/AnimatePresence.cjs +112 -91
  2. package/dist/cjs/AnimatePresence.native.js +127 -106
  3. package/dist/cjs/AnimatePresence.native.js.map +1 -1
  4. package/dist/cjs/LayoutGroupContext.cjs +24 -22
  5. package/dist/cjs/LayoutGroupContext.native.js +26 -24
  6. package/dist/cjs/LayoutGroupContext.native.js.map +1 -1
  7. package/dist/cjs/PresenceChild.cjs +58 -45
  8. package/dist/cjs/PresenceChild.native.js +103 -91
  9. package/dist/cjs/PresenceChild.native.js.map +1 -1
  10. package/dist/cjs/index.cjs +7 -5
  11. package/dist/cjs/index.native.js +7 -5
  12. package/dist/cjs/index.native.js.map +1 -1
  13. package/dist/cjs/types.cjs +7 -5
  14. package/dist/cjs/types.native.js +7 -5
  15. package/dist/cjs/types.native.js.map +1 -1
  16. package/dist/esm/AnimatePresence.mjs +96 -77
  17. package/dist/esm/AnimatePresence.mjs.map +1 -1
  18. package/dist/esm/AnimatePresence.native.js +111 -92
  19. package/dist/esm/AnimatePresence.native.js.map +1 -1
  20. package/dist/esm/PresenceChild.mjs +29 -18
  21. package/dist/esm/PresenceChild.mjs.map +1 -1
  22. package/dist/esm/PresenceChild.native.js +60 -50
  23. package/dist/esm/PresenceChild.native.js.map +1 -1
  24. package/dist/esm/index.js +3 -3
  25. package/dist/esm/index.js.map +1 -6
  26. package/package.json +10 -9
  27. package/src/AnimatePresence.tsx +150 -143
  28. package/src/types.ts +10 -9
  29. package/types/AnimatePresence.d.ts.map +1 -1
  30. package/types/types.d.ts +9 -9
  31. package/types/types.d.ts.map +1 -1
  32. package/dist/cjs/AnimatePresence.js +0 -121
  33. package/dist/cjs/AnimatePresence.js.map +0 -6
  34. package/dist/cjs/LayoutGroupContext.js +0 -30
  35. package/dist/cjs/LayoutGroupContext.js.map +0 -6
  36. package/dist/cjs/PresenceChild.js +0 -77
  37. package/dist/cjs/PresenceChild.js.map +0 -6
  38. package/dist/cjs/index.js +0 -18
  39. package/dist/cjs/index.js.map +0 -6
  40. package/dist/cjs/types.js +0 -14
  41. package/dist/cjs/types.js.map +0 -6
  42. package/dist/esm/AnimatePresence.js +0 -110
  43. package/dist/esm/AnimatePresence.js.map +0 -6
  44. package/dist/esm/LayoutGroupContext.js +0 -6
  45. package/dist/esm/LayoutGroupContext.js.map +0 -6
  46. package/dist/esm/PresenceChild.js +0 -57
  47. package/dist/esm/PresenceChild.js.map +0 -6
  48. package/dist/esm/types.js +0 -1
  49. package/dist/esm/types.js.map +0 -6
@@ -1,103 +1,122 @@
1
- import { useIsomorphicLayoutEffect } from "@tamagui/constants";
1
+ import { useInsertionEffect } from "react";
2
+ import { useConstant } from "@tamagui/use-constant";
2
3
  import { useForceUpdate } from "@tamagui/use-force-update";
3
- import { Children, cloneElement, isValidElement, useContext, useRef } from "react";
4
+ import { Children, isValidElement, useContext, useMemo, useRef, useState } from "react";
4
5
  import { LayoutGroupContext } from "./LayoutGroupContext.mjs";
5
6
  import { PresenceChild } from "./PresenceChild.mjs";
6
7
  import { Fragment, jsx } from "react/jsx-runtime";
7
- const getChildKey = child => child.key || (() => {
8
- const ct = child.type,
9
- defaultName = ct.displayName || ct.name || "";
10
- return ct && typeof ct == "object" && "staticConfig" in ct && ct.staticConfig.componentName || defaultName;
11
- })();
12
- function updateChildLookup(children, allChildren) {
13
- children.forEach(child => {
14
- const key = getChildKey(child);
15
- allChildren.set(key, child);
16
- });
17
- }
8
+ const getChildKey = child => {
9
+ return child.key || (() => {
10
+ const ct = child.type;
11
+ const defaultName = ct["displayName"] || ct["name"] || "";
12
+ if (ct && typeof ct === "object" && "staticConfig" in ct) {
13
+ return ct.staticConfig.componentName || defaultName;
14
+ }
15
+ return defaultName;
16
+ })();
17
+ };
18
18
  function onlyElements(children) {
19
19
  const filtered = [];
20
- return Children.forEach(children, child => {
21
- isValidElement(child) && filtered.push(child);
22
- }), filtered;
20
+ Children.forEach(children, child => {
21
+ if (isValidElement(child)) filtered.push(child);
22
+ });
23
+ return filtered;
23
24
  }
24
25
  const AnimatePresence = ({
25
26
  children,
26
27
  enterVariant,
27
28
  exitVariant,
28
29
  enterExitVariant,
29
- initial = !0,
30
+ initial = true,
30
31
  onExitComplete,
31
32
  exitBeforeEnter,
32
- presenceAffectsLayout = !0,
33
+ mode,
34
+ presenceAffectsLayout = true,
33
35
  custom,
34
36
  passThrough
35
37
  }) => {
36
- let forceRender = useContext(LayoutGroupContext).forceRender ?? useForceUpdate();
37
- const filteredChildren = onlyElements(children),
38
- presentChildren = useRef(filteredChildren),
39
- allChildren = useRef(/* @__PURE__ */new Map()).current,
40
- exiting = useRef(/* @__PURE__ */new Set()).current;
41
- updateChildLookup(filteredChildren, allChildren);
42
- const isInitialRender = useRef(!0);
43
- if (passThrough) return /* @__PURE__ */jsx(Fragment, {
44
- children
45
- });
46
- if (useIsomorphicLayoutEffect(() => {
47
- isInitialRender.current = !1;
48
- }, []), isInitialRender.current) return /* @__PURE__ */jsx(Fragment, {
49
- children: filteredChildren.map(child => /* @__PURE__ */jsx(PresenceChild, {
50
- isPresent: !0,
51
- enterExitVariant,
52
- exitVariant,
53
- enterVariant,
54
- initial: initial ? void 0 : !1,
55
- presenceAffectsLayout,
56
- custom,
57
- children: child
58
- }, getChildKey(child)))
59
- });
60
- let childrenToRender = [...filteredChildren];
61
- const presentKeys = presentChildren.current.map(getChildKey),
62
- targetKeys = filteredChildren.map(getChildKey),
63
- numPresent = presentKeys.length;
64
- for (let i = 0; i < numPresent; i++) {
65
- const key = presentKeys[i];
66
- targetKeys.indexOf(key) === -1 ? exiting.add(key) : exiting.delete(key);
38
+ const effectiveMode = mode ?? (exitBeforeEnter ? "wait" : "sync");
39
+ const presentChildren = useMemo(() => onlyElements(children), [children]);
40
+ const presentKeys = presentChildren.map(getChildKey);
41
+ const isInitialRender = useRef(true);
42
+ const frozenCustomRef = useRef(/* @__PURE__ */new Map());
43
+ const pendingPresentChildren = useRef(presentChildren);
44
+ const exitComplete = useConstant(() => /* @__PURE__ */new Map());
45
+ const [diffedChildren, setDiffedChildren] = useState(presentChildren);
46
+ const [renderedChildren, setRenderedChildren] = useState(presentChildren);
47
+ const forceRender = useContext(LayoutGroupContext).forceRender ?? useForceUpdate();
48
+ if (passThrough) {
49
+ return /* @__PURE__ */jsx(Fragment, {
50
+ children
51
+ });
52
+ }
53
+ useInsertionEffect(() => {
54
+ isInitialRender.current = false;
55
+ pendingPresentChildren.current = presentChildren;
56
+ for (let i = 0; i < renderedChildren.length; i++) {
57
+ const key = getChildKey(renderedChildren[i]);
58
+ if (!presentKeys.includes(key)) {
59
+ if (exitComplete.get(key) !== true) {
60
+ exitComplete.set(key, false);
61
+ }
62
+ } else {
63
+ exitComplete.delete(key);
64
+ frozenCustomRef.current.delete(key);
65
+ }
66
+ }
67
+ }, [renderedChildren, presentKeys.length, presentKeys.join("-")]);
68
+ if (presentChildren !== diffedChildren) {
69
+ let nextChildren = [...presentChildren];
70
+ for (let i = 0; i < renderedChildren.length; i++) {
71
+ const child = renderedChildren[i];
72
+ const key = getChildKey(child);
73
+ if (!presentKeys.includes(key)) {
74
+ nextChildren.splice(i, 0, child);
75
+ if (!frozenCustomRef.current.has(key)) {
76
+ frozenCustomRef.current.set(key, custom);
77
+ }
78
+ }
79
+ }
80
+ const exitingChildren = renderedChildren.filter(child => !presentKeys.includes(getChildKey(child)));
81
+ if (effectiveMode === "wait" && exitingChildren.length) {
82
+ nextChildren = exitingChildren;
83
+ }
84
+ setRenderedChildren(onlyElements(nextChildren));
85
+ setDiffedChildren(presentChildren);
86
+ return null;
67
87
  }
68
- return exitBeforeEnter && exiting.size && (childrenToRender = []), exiting.forEach(key => {
69
- if (targetKeys.indexOf(key) !== -1) return;
70
- const child = allChildren.get(key);
71
- if (!child) return;
72
- const insertionIndex = presentKeys.indexOf(key),
73
- exitingComponent = /* @__PURE__ */jsx(PresenceChild, {
74
- isPresent: !1,
75
- onExitComplete: () => {
76
- allChildren.delete(key), exiting.delete(key);
77
- const removeIndex = presentChildren.current.findIndex(presentChild => presentChild.key === key);
78
- presentChildren.current.splice(removeIndex, 1), exiting.size || (presentChildren.current = filteredChildren, forceRender(), onExitComplete?.());
79
- },
88
+ return /* @__PURE__ */jsx(Fragment, {
89
+ children: renderedChildren.map(child => {
90
+ const key = getChildKey(child);
91
+ const isPresent = presentChildren === renderedChildren || presentKeys.includes(key);
92
+ const onExit = () => {
93
+ if (exitComplete.has(key)) {
94
+ exitComplete.set(key, true);
95
+ } else {
96
+ return;
97
+ }
98
+ let isEveryExitComplete = true;
99
+ exitComplete.forEach(isExitComplete => {
100
+ if (!isExitComplete) isEveryExitComplete = false;
101
+ });
102
+ if (isEveryExitComplete) {
103
+ forceRender?.();
104
+ setRenderedChildren(pendingPresentChildren.current);
105
+ onExitComplete?.();
106
+ }
107
+ };
108
+ return /* @__PURE__ */jsx(PresenceChild, {
109
+ isPresent,
110
+ initial: !isInitialRender.current || initial ? void 0 : false,
111
+ custom: isPresent ? custom : frozenCustomRef.current.get(key) ?? custom,
80
112
  presenceAffectsLayout,
81
113
  enterExitVariant,
82
114
  enterVariant,
83
115
  exitVariant,
84
- custom,
116
+ onExitComplete: isPresent ? void 0 : onExit,
85
117
  children: child
86
- }, getChildKey(child));
87
- childrenToRender.splice(insertionIndex, 0, exitingComponent);
88
- }), childrenToRender = childrenToRender.map(child => {
89
- const key = child.key;
90
- return exiting.has(key) ? child : /* @__PURE__ */jsx(PresenceChild, {
91
- isPresent: !0,
92
- exitVariant,
93
- enterVariant,
94
- enterExitVariant,
95
- presenceAffectsLayout,
96
- custom,
97
- children: child
98
- }, getChildKey(child));
99
- }), presentChildren.current = childrenToRender, /* @__PURE__ */jsx(Fragment, {
100
- children: exiting.size ? childrenToRender : childrenToRender.map(child => cloneElement(child))
118
+ }, key);
119
+ })
101
120
  });
102
121
  };
103
122
  AnimatePresence.displayName = "AnimatePresence";
@@ -1 +1 @@
1
- {"version":3,"names":["useIsomorphicLayoutEffect","useForceUpdate","Children","cloneElement","isValidElement","useContext","useRef","LayoutGroupContext","PresenceChild","Fragment","jsx","getChildKey","child","key","ct","type","defaultName","displayName","name","staticConfig","componentName","updateChildLookup","children","allChildren","forEach","set","onlyElements","filtered","push","AnimatePresence","enterVariant","exitVariant","enterExitVariant","initial","onExitComplete","exitBeforeEnter","presenceAffectsLayout","custom","passThrough","forceRender","filteredChildren","presentChildren","Map","current","exiting","Set","isInitialRender","map","isPresent","childrenToRender","presentKeys","targetKeys","numPresent","length","i","indexOf","add","delete","size","get","insertionIndex","exitingComponent","removeIndex","findIndex","presentChild","splice","has"],"sources":["../../src/AnimatePresence.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useInsertionEffect","useConstant","useForceUpdate","Children","isValidElement","useContext","useMemo","useRef","useState","LayoutGroupContext","PresenceChild","Fragment","jsx","getChildKey","child","key","ct","type","defaultName","staticConfig","componentName","onlyElements","children","filtered","forEach","push","AnimatePresence","enterVariant","exitVariant","enterExitVariant","initial","onExitComplete","exitBeforeEnter","mode","presenceAffectsLayout","custom","passThrough","effectiveMode","presentChildren","presentKeys","map","isInitialRender","frozenCustomRef","Map","pendingPresentChildren","exitComplete","diffedChildren","setDiffedChildren","renderedChildren","setRenderedChildren","forceRender","current","i","length","includes","get","set","delete","join","nextChildren","splice","has","exitingChildren","filter","isPresent","onExit","isEveryExitComplete","isExitComplete","displayName"],"sources":["../../src/AnimatePresence.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,116 +1,135 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useIsomorphicLayoutEffect } from "@tamagui/constants";
2
+ import { useInsertionEffect } from "react";
3
+ import { useConstant } from "@tamagui/use-constant";
3
4
  import { useForceUpdate } from "@tamagui/use-force-update";
4
- import { Children, cloneElement, isValidElement, useContext, useRef } from "react";
5
+ import { Children, isValidElement, useContext, useMemo, useRef, useState } from "react";
5
6
  import { LayoutGroupContext } from "./LayoutGroupContext.native.js";
6
7
  import { PresenceChild } from "./PresenceChild.native.js";
7
8
  function _type_of(obj) {
8
9
  "@swc/helpers - typeof";
9
10
 
10
- return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
11
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
11
12
  }
12
13
  var getChildKey = function (child) {
13
14
  return child.key || function () {
14
- var ct = child.type,
15
- defaultName = ct.displayName || ct.name || "";
16
- return ct && (typeof ct > "u" ? "undefined" : _type_of(ct)) === "object" && "staticConfig" in ct && ct.staticConfig.componentName || defaultName;
15
+ var ct = child.type;
16
+ var defaultName = ct["displayName"] || ct["name"] || "";
17
+ if (ct && (typeof ct === "undefined" ? "undefined" : _type_of(ct)) === "object" && "staticConfig" in ct) {
18
+ return ct.staticConfig.componentName || defaultName;
19
+ }
20
+ return defaultName;
17
21
  }();
18
22
  };
19
- function updateChildLookup(children, allChildren) {
20
- children.forEach(function (child) {
21
- var key = getChildKey(child);
22
- allChildren.set(key, child);
23
- });
24
- }
25
23
  function onlyElements(children) {
26
24
  var filtered = [];
27
- return Children.forEach(children, function (child) {
28
- /* @__PURE__ */isValidElement(child) && filtered.push(child);
29
- }), filtered;
25
+ Children.forEach(children, function (child) {
26
+ if (/* @__PURE__ */isValidElement(child)) filtered.push(child);
27
+ });
28
+ return filtered;
30
29
  }
31
30
  var AnimatePresence = function (param) {
32
31
  var {
33
- children,
34
- enterVariant,
35
- exitVariant,
36
- enterExitVariant,
37
- initial = !0,
38
- onExitComplete,
39
- exitBeforeEnter,
40
- presenceAffectsLayout = !0,
41
- custom,
42
- passThrough
43
- } = param,
44
- _useContext_forceRender,
45
- forceRender = (_useContext_forceRender = useContext(LayoutGroupContext).forceRender) !== null && _useContext_forceRender !== void 0 ? _useContext_forceRender : useForceUpdate(),
46
- filteredChildren = onlyElements(children),
47
- presentChildren = useRef(filteredChildren),
48
- allChildren = useRef(/* @__PURE__ */new Map()).current,
49
- exiting = useRef(/* @__PURE__ */new Set()).current;
50
- updateChildLookup(filteredChildren, allChildren);
51
- var isInitialRender = useRef(!0);
52
- if (passThrough) return /* @__PURE__ */_jsx(_Fragment, {
53
- children
54
- });
55
- if (useIsomorphicLayoutEffect(function () {
56
- isInitialRender.current = !1;
57
- }, []), isInitialRender.current) return /* @__PURE__ */_jsx(_Fragment, {
58
- children: filteredChildren.map(function (child) {
59
- return /* @__PURE__ */_jsx(PresenceChild, {
60
- isPresent: !0,
61
- enterExitVariant,
62
- exitVariant,
63
- enterVariant,
64
- initial: initial ? void 0 : !1,
65
- presenceAffectsLayout,
66
- custom,
67
- children: child
68
- }, getChildKey(child));
69
- })
32
+ children,
33
+ enterVariant,
34
+ exitVariant,
35
+ enterExitVariant,
36
+ initial = true,
37
+ onExitComplete,
38
+ exitBeforeEnter,
39
+ mode,
40
+ presenceAffectsLayout = true,
41
+ custom,
42
+ passThrough
43
+ } = param;
44
+ var effectiveMode = mode !== null && mode !== void 0 ? mode : exitBeforeEnter ? "wait" : "sync";
45
+ var presentChildren = useMemo(function () {
46
+ return onlyElements(children);
47
+ }, [children]);
48
+ var presentKeys = presentChildren.map(getChildKey);
49
+ var isInitialRender = useRef(true);
50
+ var frozenCustomRef = useRef(/* @__PURE__ */new Map());
51
+ var pendingPresentChildren = useRef(presentChildren);
52
+ var exitComplete = useConstant(function () {
53
+ return /* @__PURE__ */new Map();
70
54
  });
71
- for (var childrenToRender = [...filteredChildren], presentKeys = presentChildren.current.map(getChildKey), targetKeys = filteredChildren.map(getChildKey), numPresent = presentKeys.length, i = 0; i < numPresent; i++) {
72
- var key = presentKeys[i];
73
- targetKeys.indexOf(key) === -1 ? exiting.add(key) : exiting.delete(key);
55
+ var [diffedChildren, setDiffedChildren] = useState(presentChildren);
56
+ var [renderedChildren, setRenderedChildren] = useState(presentChildren);
57
+ var _useContext_forceRender;
58
+ var forceRender = (_useContext_forceRender = useContext(LayoutGroupContext).forceRender) !== null && _useContext_forceRender !== void 0 ? _useContext_forceRender : useForceUpdate();
59
+ if (passThrough) {
60
+ return /* @__PURE__ */_jsx(_Fragment, {
61
+ children
62
+ });
74
63
  }
75
- return exitBeforeEnter && exiting.size && (childrenToRender = []), exiting.forEach(function (key2) {
76
- if (targetKeys.indexOf(key2) === -1) {
77
- var child = allChildren.get(key2);
78
- if (child) {
79
- var insertionIndex = presentKeys.indexOf(key2),
80
- onExit = function () {
81
- allChildren.delete(key2), exiting.delete(key2);
82
- var removeIndex = presentChildren.current.findIndex(function (presentChild) {
83
- return presentChild.key === key2;
84
- });
85
- presentChildren.current.splice(removeIndex, 1), exiting.size || (presentChildren.current = filteredChildren, forceRender(), onExitComplete?.());
86
- },
87
- exitingComponent = /* @__PURE__ */_jsx(PresenceChild, {
88
- isPresent: !1,
89
- onExitComplete: onExit,
90
- presenceAffectsLayout,
91
- enterExitVariant,
92
- enterVariant,
93
- exitVariant,
94
- custom,
95
- children: child
96
- }, getChildKey(child));
97
- childrenToRender.splice(insertionIndex, 0, exitingComponent);
64
+ useInsertionEffect(function () {
65
+ isInitialRender.current = false;
66
+ pendingPresentChildren.current = presentChildren;
67
+ for (var i2 = 0; i2 < renderedChildren.length; i2++) {
68
+ var key2 = getChildKey(renderedChildren[i2]);
69
+ if (!presentKeys.includes(key2)) {
70
+ if (exitComplete.get(key2) !== true) {
71
+ exitComplete.set(key2, false);
72
+ }
73
+ } else {
74
+ exitComplete.delete(key2);
75
+ frozenCustomRef.current.delete(key2);
76
+ }
77
+ }
78
+ }, [renderedChildren, presentKeys.length, presentKeys.join("-")]);
79
+ if (presentChildren !== diffedChildren) {
80
+ var nextChildren = [...presentChildren];
81
+ for (var i = 0; i < renderedChildren.length; i++) {
82
+ var child = renderedChildren[i];
83
+ var key = getChildKey(child);
84
+ if (!presentKeys.includes(key)) {
85
+ nextChildren.splice(i, 0, child);
86
+ if (!frozenCustomRef.current.has(key)) {
87
+ frozenCustomRef.current.set(key, custom);
88
+ }
98
89
  }
99
90
  }
100
- }), childrenToRender = childrenToRender.map(function (child) {
101
- var key2 = child.key;
102
- return exiting.has(key2) ? child : /* @__PURE__ */_jsx(PresenceChild, {
103
- isPresent: !0,
104
- exitVariant,
105
- enterVariant,
106
- enterExitVariant,
107
- presenceAffectsLayout,
108
- custom,
109
- children: child
110
- }, getChildKey(child));
111
- }), presentChildren.current = childrenToRender, /* @__PURE__ */_jsx(_Fragment, {
112
- children: exiting.size ? childrenToRender : childrenToRender.map(function (child) {
113
- return /* @__PURE__ */cloneElement(child);
91
+ var exitingChildren = renderedChildren.filter(function (child2) {
92
+ return !presentKeys.includes(getChildKey(child2));
93
+ });
94
+ if (effectiveMode === "wait" && exitingChildren.length) {
95
+ nextChildren = exitingChildren;
96
+ }
97
+ setRenderedChildren(onlyElements(nextChildren));
98
+ setDiffedChildren(presentChildren);
99
+ return null;
100
+ }
101
+ return /* @__PURE__ */_jsx(_Fragment, {
102
+ children: renderedChildren.map(function (child2) {
103
+ var key2 = getChildKey(child2);
104
+ var isPresent = presentChildren === renderedChildren || presentKeys.includes(key2);
105
+ var onExit = function () {
106
+ if (exitComplete.has(key2)) {
107
+ exitComplete.set(key2, true);
108
+ } else {
109
+ return;
110
+ }
111
+ var isEveryExitComplete = true;
112
+ exitComplete.forEach(function (isExitComplete) {
113
+ if (!isExitComplete) isEveryExitComplete = false;
114
+ });
115
+ if (isEveryExitComplete) {
116
+ forceRender === null || forceRender === void 0 ? void 0 : forceRender();
117
+ setRenderedChildren(pendingPresentChildren.current);
118
+ onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete();
119
+ }
120
+ };
121
+ var _frozenCustomRef_current_get;
122
+ return /* @__PURE__ */_jsx(PresenceChild, {
123
+ isPresent,
124
+ initial: !isInitialRender.current || initial ? void 0 : false,
125
+ custom: isPresent ? custom : (_frozenCustomRef_current_get = frozenCustomRef.current.get(key2)) !== null && _frozenCustomRef_current_get !== void 0 ? _frozenCustomRef_current_get : custom,
126
+ presenceAffectsLayout,
127
+ enterExitVariant,
128
+ enterVariant,
129
+ exitVariant,
130
+ onExitComplete: isPresent ? void 0 : onExit,
131
+ children: child2
132
+ }, key2);
114
133
  })
115
134
  });
116
135
  };
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","Fragment","_Fragment","useIsomorphicLayoutEffect","useForceUpdate","Children","cloneElement","isValidElement","useContext","useRef","LayoutGroupContext","PresenceChild","_type_of","obj","Symbol","constructor","getChildKey","child","key","ct","type","defaultName","displayName","name","staticConfig","componentName","updateChildLookup","children","allChildren","forEach","set","onlyElements","filtered","push","AnimatePresence","param","enterVariant","exitVariant","enterExitVariant","initial","onExitComplete","exitBeforeEnter","presenceAffectsLayout","custom","passThrough","_useContext_forceRender","forceRender","filteredChildren","presentChildren","Map","current","exiting","Set","isInitialRender","map","isPresent","childrenToRender","presentKeys","targetKeys","numPresent","length","i","indexOf","add","delete","size","key2","get","insertionIndex","onExit","removeIndex","findIndex","presentChild","splice","exitingComponent","has"],"sources":["../../src/AnimatePresence.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAiC;AAC1C,SAASC,yBAAsB;AAE/B,SAASC,cAAU,mCAA8B;AACjD,SAASC,QAAA,EAAAC,YAAA,EAAAC,cAA0B,EAAAC,UAAA,EAAAC,MAAA;AACnC,SAASC,kBAAA,QAAqB;AA6EnB,SAAAC,aAAA;AAxEX,SAAMC,SAAAC,GAAe;EAKf,uBACM;;EACN,OAAIA,GAAA,IAAM,OAAOC,MAAO,UAAAD,GAAY,CAAAE,WAAA,KAAkBD,MAE7C,GAAG,kBAAaD,GAAA;AAG3B;AAIJ,IAAAG,WAAS,YAAAA,CACPC,KAAA;EAGA,OAAAA,KAAS,CAAAC,GAAA,IAAS,YAAU;IAC1B,IAAAC,EAAM,GAAAF,KAAM,CAAAG,IAAA;MAAAC,WAAiB,GAAAF,EAAA,CAAAG,WAAA,IAAAH,EAAA,CAAAI,IAAA;IAC7B,OAAAJ,EAAA,IAAY,QAASA,EAAA,GAAK,oBAAAP,QAAA,CAAAO,EAAA,qCAAAA,EAAA,IAAAA,EAAA,CAAAK,YAAA,CAAAC,aAAA,IAAAJ,WAAA;EAC5B,CAAC;AACH;AAEA,SAASK,iBAAaA,CAAAC,QAA0C,EAAAC,WAAA;EAC9DD,QAAM,CAAAE,OAAA,CAAgC,UAACZ,KAAA;IAEvC,IAAAC,GAAA,GAAAF,WAAS,CAAQC,KAAA;IACXW,WAAA,CAAAE,GAAe,CAAAZ,GAAA,EAAKD,KAAG;EAC7B,CAAC;AAEH;AAEO,SAAMc,aAAAJ,QAER;EACH,IAAAK,QAAA;EACA,OAAA3B,QAAA,CAAAwB,OAAA,CAAAF,QAAA,YAAAV,KAAA;IACA,eAAAV,cAAA,CAAAU,KAAA,KAAAe,QAAA,CAAAC,IAAA,CAAAhB,KAAA;EACA,IAAAe,QAAA;AAAA;AACU,IACVE,eAAA,YAAAA,CAAAC,KAAA;EACA;MAAAR,QAAA;MAAAS,YAAA;MAAAC,WAAA;MAAAC,gBAAA;MAAAC,OAAA;MAAAC,cAAA;MAAAC,eAAA;MAAAC,qBAAA;MAAAC,MAAA;MAAAC;IAAA,IAAAT,KAAA;IAAAU,uBAAA;IAAAC,WAAA,IAAAD,uBAAA,GAAArC,UAAA,CAAAE,kBAAA,EAAAoC,WAAA,cAAAD,uBAAA,cAAAA,uBAAA,GAAAzC,cAAA;IAAA2C,gBAAA,GAAAhB,YAAA,CAAAJ,QAAA;IAAAqB,eAAA,GAAAvC,MAAA,CAAAsC,gBAAA;IAAAnB,WAAA,GAAAnB,MAAA,oBAAAwC,GAAA,IAAAC,OAAA;IAAAC,OAAA,GAAA1C,MAAA,oBAAA2C,GAAA,IAAAF,OAAA;EACAxB,iBAAA,CAAAqB,gBAAwB,EAAAnB,WAAA;EACxB,IAAAyB,eAAA,GAAA5C,MAAA;EACA,IAAAmC,WAAA,EACF,OAAM,eAAA5C,IAAA,CAAAE,SAAA;IAGAyB;EAGJ;EAUA,IAAAxB,yBAAkB,aAAkB;IAIpCkD,eAAM,CAAAH,OAAkB;EAExB,KAAI,GAAAG,eAAA,CAAAH,OAAA,EAEF,OAAO,eAAAlD,IAAA,CAAAE,SAAA,EAAG;IAGZyB,QAAA,EAAAoB,gBAA0B,CAAAO,GAAA,WAAMrC,KAAA;MAC9B,sBAA0BjB,IAAA,CAAAW,aAAA;QAGxB4C,SAAA;QACFjB,gBACE;QAEKD,WAAA;QAAAD,YAAA;QAECG,OAAA,EAASA,OAAA;QACTG,qBAAA;QACAC,MAAA;QACAhB,QAAA,EAAAV;MACA,GAAAD,WAAS,CAAAC,KAAU;IAAY;EAC/B;EACA,SAECuC,gBAAA,OAAAT,gBAAA,GAAAU,WATI,GAAYT,eAAK,CAAAE,OAAA,CAAAI,GAAA,CAAAtC,WAAA,GAAA0C,UAAA,GAAAX,gBAAA,CAAAO,GAAA,CAAAtC,WAAA,GAAA2C,UAAA,GAAAF,WAAA,CAAAG,MAAA,EAAAC,CAAA,MAAAA,CAAA,GAAAF,UAAA,EAAAE,CAAA;IAUxB,IAEJ3C,GAAA,GAAAuC,WAAA,CAAAI,CAAA;IAIJH,UAAI,CAAAI,OAAA,CAAA5C,GAAoB,MAAG,KAAAiC,OAAA,CAAgBY,GAAA,CAAA7C,GAAA,IAAAiC,OAAA,CAAAa,MAAA,CAAA9C,GAAA;EAI3C;EAKA,OAAAuB,eAAoB,IAAAU,OAAY,CAAAc,IAAK,KAAAT,gBAAA,QAAAL,OAAA,CAAAtB,OAAA,WAAAqC,IAAA;IACnC,IAAAR,UAAY,CAAAI,OAAA,CAAAI,IAAa;MACrB,IAAAjD,KAAW,GAAAW,WAAW,CAAAuC,GAAM,CAAAD,IAC9B;MAKJ,IAAAjD,KAAA;QAIA,IAAImD,cAAA,GAAmBX,WAAQ,CAAAK,OAC7B,CAAAI,IAAA;UAAAG,MAAA,GAAoB,SAAAA,CAAA,EAKtB;YAEMzC,WAAW,CAAAoC,MAAQ,CAAAE,IAAG,GAAMf,OAAI,CAAAa,MAAA,CAAAE,IAAA;YAE9B,IAAAI,WAAQ,GAAAtB,eAAmB,CAAAE,OAAA,CAAAqB,SAAA,WAAAC,YAAA;cAC5B,OAAOA,YAAA,CAAAtD,GAAA,KAAAgD,IAAA;YAEN;YAkBHlB,eAAA,CAAAE,OAAA,CAAAuB,MAAA,CAAAH,WAAA,MAAAnB,OAAA,CAAAc,IAAA,KAAAjB,eAAA,CAAAE,OAAA,GAAAH,gBAAA,EAAAD,WAAA,IAAAN,cAAA;UAAA;UAAAkC,gBAAA,kBAAA1E,IAAA,CAAAW,aAAA;YAEC4C,SAAW;YACXf,cAnBW,EAAA6B,MAAM;YACnB3B,qBAAmB;YAEnBJ,gBAAM;YAAsCF,YACzC;YACHC,WAAA;YACAM,MAAA;YAOFhB,QAAA,EAAAV;UAOI,GAAAD,WAAA,CAAAC,KAAA;QACAuC,gBAAA,CAAAiB,MAAA,CAAAL,cAAA,KAAAM,gBAAA;MAAA;IACA;EACA,IAAAlB,gBACA,GAAAA,gBAAA,CAAAF,GAAA,WAAArC,KAAA;IAAA,IAECiD,IAAA,GAAAjD,KAAA,CAAAC,GAAA;IAAA,OAAAiC,OAAA,CAAAwB,GAAA,CAAAT,IAAA,IAAAjD,KAAA,kBAAAjB,IAAA,CAAAW,aAAA;MATI4C,SAAA,GAAY;MAUnBlB,WAAA;MAGFD,YAAA;MAKFE,gBAAA;MACEI,qBAAkB;MAClBC,MAAO;MAGJhB,QAAA,EAAAV;IAAA,GAAAD,WAAA,CAAAC,KAAA;EAAA,IAAA+B,eAEU,CAAAE,OAAA,GAAAM,gBAAA,iBAAAxD,IAAA,CAAAE,SAAA;IAAAyB,QACT,EAAAwB,OAAA,CAAAc,IAAA,GAAAT,gBAAA,GAAAA,gBAAA,CAAAF,GAAA,WAAArC,KAAA;MAAA,OACA,eAAAX,YAAA,CAAAW,KAAA;IAAA;EACA;AACA;AACAiB,eAEC,CAAAZ,WAAA;AAAA,SAAAY,eARI","ignoreList":[]}
1
+ {"version":3,"names":["jsx","_jsx","Fragment","_Fragment","useInsertionEffect","useConstant","useForceUpdate","Children","isValidElement","useContext","useMemo","useRef","useState","LayoutGroupContext","PresenceChild","_type_of","obj","Symbol","constructor","getChildKey","child","key","ct","type","defaultName","staticConfig","componentName","onlyElements","children","filtered","forEach","push","AnimatePresence","param","enterVariant","exitVariant","enterExitVariant","initial","onExitComplete","exitBeforeEnter","mode","presenceAffectsLayout","custom","passThrough","effectiveMode","presentChildren","presentKeys","map","isInitialRender","frozenCustomRef","Map","pendingPresentChildren","exitComplete","diffedChildren","setDiffedChildren","renderedChildren","setRenderedChildren","_useContext_forceRender","forceRender","current","i2","length","key2","includes","get","set","delete","join","nextChildren","i","splice","has","exitingChildren","filter","child2","isPresent","onExit","isEveryExitComplete","isExitComplete","_frozenCustomRef_current_get"],"sources":["../../src/AnimatePresence.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -14,9 +14,10 @@ const PresenceChild = React.memo(({
14
14
  presenceAffectsLayout,
15
15
  custom
16
16
  }) => {
17
- const presenceChildren = useConstant(newChildrenMap),
18
- id = useId() || "",
19
- context = React.useMemo(() => ({
17
+ const presenceChildren = useConstant(newChildrenMap);
18
+ const id = useId() || "";
19
+ const context = React.useMemo(() => {
20
+ return {
20
21
  id,
21
22
  initial,
22
23
  isPresent,
@@ -25,24 +26,34 @@ const PresenceChild = React.memo(({
25
26
  enterVariant,
26
27
  enterExitVariant,
27
28
  onExitComplete: () => {
28
- presenceChildren.set(id, !0);
29
- for (const isComplete of presenceChildren.values()) if (!isComplete) return;
29
+ presenceChildren.set(id, true);
30
+ for (const isComplete of presenceChildren.values()) {
31
+ if (!isComplete) {
32
+ return;
33
+ }
34
+ }
30
35
  onExitComplete?.();
31
36
  },
32
- register: () => (presenceChildren.set(id, !1), () => presenceChildren.delete(id))
33
- }),
34
- /**
35
- * If the presence of a child affects the layout of the components around it,
36
- * we want to make a new context value to ensure they get re-rendered
37
- * so they can detect that layout change.
38
- */
39
- // @ts-expect-error its ok
40
- presenceAffectsLayout ? void 0 : [isPresent, exitVariant, enterVariant]);
41
- return React.useMemo(() => {
42
- presenceChildren.forEach((_, key) => presenceChildren.set(key, !1));
43
- }, [isPresent]), React.useEffect(() => {
37
+ register: () => {
38
+ presenceChildren.set(id, false);
39
+ return () => presenceChildren.delete(id);
40
+ }
41
+ };
42
+ },
43
+ /**
44
+ * If the presence of a child affects the layout of the components around it,
45
+ * we want to make a new context value to ensure they get re-rendered
46
+ * so they can detect that layout change.
47
+ */
48
+ // @ts-expect-error its ok
49
+ presenceAffectsLayout ? void 0 : [isPresent, exitVariant, enterVariant]);
50
+ React.useMemo(() => {
51
+ presenceChildren.forEach((_, key) => presenceChildren.set(key, false));
52
+ }, [isPresent]);
53
+ React.useEffect(() => {
44
54
  !isPresent && !presenceChildren.size && onExitComplete?.();
45
- }, [isPresent]), /* @__PURE__ */jsx(PresenceContext.Provider, {
55
+ }, [isPresent]);
56
+ return /* @__PURE__ */jsx(PresenceContext.Provider, {
46
57
  value: context,
47
58
  children
48
59
  });
@@ -1 +1 @@
1
- {"version":3,"names":["useConstant","PresenceContext","React","useId","jsx","PresenceChild","memo","children","initial","isPresent","onExitComplete","exitVariant","enterVariant","enterExitVariant","presenceAffectsLayout","custom","presenceChildren","newChildrenMap","id","context","useMemo","set","isComplete","values","register","delete","forEach","_","key","useEffect","size","Provider","value","Map"],"sources":["../../src/PresenceChild.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAA,QAAmB;AAC5B,SAASC,eAAA,QAAuB;AAEhC,YAAYC,KAAA,MAAW;AACvB,SAASC,KAAA,QAAa;AA+EX,SAAAC,GAAA;AA9DJ,MAAMC,aAAA,GAAgBH,KAAA,CAAMI,IAAA,CACjC,CAAC;EACCC,QAAA;EACAC,OAAA;EACAC,SAAA;EACAC,cAAA;EACAC,WAAA;EACAC,YAAA;EACAC,gBAAA;EACAC,qBAAA;EACAC;AACF,MAA0B;EACxB,MAAMC,gBAAA,GAAmBhB,WAAA,CAAYiB,cAAc;IAC7CC,EAAA,GAAKf,KAAA,CAAM,KAAK;IAEhBgB,OAAA,GAAUjB,KAAA,CAAMkB,OAAA,CACpB,OACS;MACLF,EAAA;MACAV,OAAA;MACAC,SAAA;MACAM,MAAA;MACAJ,WAAA;MACAC,YAAA;MACAC,gBAAA;MACAH,cAAA,EAAgBA,CAAA,KAAM;QACpBM,gBAAA,CAAiBK,GAAA,CAAIH,EAAA,EAAI,EAAI;QAC7B,WAAWI,UAAA,IAAcN,gBAAA,CAAiBO,MAAA,CAAO,GAC/C,IAAI,CAACD,UAAA,EACH;QAGJZ,cAAA,GAAiB;MACnB;MACAc,QAAA,EAAUA,CAAA,MACRR,gBAAA,CAAiBK,GAAA,CAAIH,EAAA,EAAI,EAAK,GACvB,MAAMF,gBAAA,CAAiBS,MAAA,CAAOP,EAAE;IAE3C;IAAA;AAAA;AAAA;AAAA;AAAA;IAAA;IASFJ,qBAAA,GAAwB,SAAY,CAACL,SAAA,EAAWE,WAAA,EAAaC,YAAY,CAC3E;EAEA,OAAAV,KAAA,CAAMkB,OAAA,CAAQ,MAAM;IAClBJ,gBAAA,CAAiBU,OAAA,CAAQ,CAACC,CAAA,EAAGC,GAAA,KAAQZ,gBAAA,CAAiBK,GAAA,CAAIO,GAAA,EAAK,EAAK,CAAC;EACvE,GAAG,CAACnB,SAAS,CAAC,GAMdP,KAAA,CAAM2B,SAAA,CAAU,MAAM;IACpB,CAACpB,SAAA,IAAa,CAACO,gBAAA,CAAiBc,IAAA,IAAQpB,cAAA,GAAiB;EAC3D,GAAG,CAACD,SAAS,CAAC,GAEP,eAAAL,GAAA,CAACH,eAAA,CAAgB8B,QAAA,EAAhB;IAAyBC,KAAA,EAAOb,OAAA;IAAUZ;EAAA,CAAS;AAC7D,CACF;AAEA,SAASU,eAAA,EAAuC;EAC9C,OAAO,mBAAIgB,GAAA,CAAI;AACjB","ignoreList":[]}
1
+ {"version":3,"names":["useConstant","PresenceContext","React","useId","jsx","PresenceChild","memo","children","initial","isPresent","onExitComplete","exitVariant","enterVariant","enterExitVariant","presenceAffectsLayout","custom","presenceChildren","newChildrenMap","id","context","useMemo","set","isComplete","values","register","delete","forEach","_","key","useEffect","size","Provider","value","Map"],"sources":["../../src/PresenceChild.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAA,QAAmB;AAC5B,SAASC,eAAA,QAAuB;AAEhC,YAAYC,KAAA,MAAW;AACvB,SAASC,KAAA,QAAa;AA+EX,SAAAC,GAAA;AA9DJ,MAAMC,aAAA,GAAgBH,KAAA,CAAMI,IAAA,CACjC,CAAC;EACCC,QAAA;EACAC,OAAA;EACAC,SAAA;EACAC,cAAA;EACAC,WAAA;EACAC,YAAA;EACAC,gBAAA;EACAC,qBAAA;EACAC;AACF,MAA0B;EACxB,MAAMC,gBAAA,GAAmBhB,WAAA,CAAYiB,cAAc;EACnD,MAAMC,EAAA,GAAKf,KAAA,CAAM,KAAK;EAEtB,MAAMgB,OAAA,GAAUjB,KAAA,CAAMkB,OAAA,CACpB,MAA4B;IAC1B,OAAO;MACLF,EAAA;MACAV,OAAA;MACAC,SAAA;MACAM,MAAA;MACAJ,WAAA;MACAC,YAAA;MACAC,gBAAA;MACAH,cAAA,EAAgBA,CAAA,KAAM;QACpBM,gBAAA,CAAiBK,GAAA,CAAIH,EAAA,EAAI,IAAI;QAC7B,WAAWI,UAAA,IAAcN,gBAAA,CAAiBO,MAAA,CAAO,GAAG;UAClD,IAAI,CAACD,UAAA,EAAY;YACf;UACF;QACF;QACAZ,cAAA,GAAiB;MACnB;MACAc,QAAA,EAAUA,CAAA,KAAM;QACdR,gBAAA,CAAiBK,GAAA,CAAIH,EAAA,EAAI,KAAK;QAC9B,OAAO,MAAMF,gBAAA,CAAiBS,MAAA,CAAOP,EAAE;MACzC;IACF;EACF;EAAA;AAAA;AAAA;AAAA;AAAA;EAAA;EAQAJ,qBAAA,GAAwB,SAAY,CAACL,SAAA,EAAWE,WAAA,EAAaC,YAAY,CAC3E;EAEAV,KAAA,CAAMkB,OAAA,CAAQ,MAAM;IAClBJ,gBAAA,CAAiBU,OAAA,CAAQ,CAACC,CAAA,EAAGC,GAAA,KAAQZ,gBAAA,CAAiBK,GAAA,CAAIO,GAAA,EAAK,KAAK,CAAC;EACvE,GAAG,CAACnB,SAAS,CAAC;EAMdP,KAAA,CAAM2B,SAAA,CAAU,MAAM;IACpB,CAACpB,SAAA,IAAa,CAACO,gBAAA,CAAiBc,IAAA,IAAQpB,cAAA,GAAiB;EAC3D,GAAG,CAACD,SAAS,CAAC;EAEd,OAAO,eAAAL,GAAA,CAACH,eAAA,CAAgB8B,QAAA,EAAhB;IAAyBC,KAAA,EAAOb,OAAA;IAAUZ;EAAA,CAAS;AAC7D,CACF;AAEA,SAASU,eAAA,EAAuC;EAC9C,OAAO,mBAAIgB,GAAA,CAAI;AACjB","ignoreList":[]}