@tamagui/animations-moti 1.85.3 → 1.85.5
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.
- package/dist/cjs/createAnimations.js +26 -22
- package/dist/cjs/createAnimations.js.map +1 -1
- package/dist/cjs/createAnimations.native.js +26 -22
- package/dist/cjs/createAnimations.native.js.map +1 -1
- package/dist/esm/createAnimations.js +26 -22
- package/dist/esm/createAnimations.js.map +1 -1
- package/dist/esm/createAnimations.native.js +26 -22
- package/dist/esm/createAnimations.native.js.map +1 -1
- package/package.json +7 -6
- package/src/createAnimations.tsx +37 -30
- package/types/createAnimations.d.ts.map +1 -1
|
@@ -31,8 +31,6 @@ function createAnimations(animations) {
|
|
|
31
31
|
View: import_react_native_reanimated.default.View,
|
|
32
32
|
Text: import_react_native_reanimated.default.Text,
|
|
33
33
|
isReactNative: !0,
|
|
34
|
-
keepStyleSSR: !0,
|
|
35
|
-
supportsCSSVars: !0,
|
|
36
34
|
animations,
|
|
37
35
|
usePresence: import_use_presence.usePresence,
|
|
38
36
|
ResetPresence: import_use_presence.ResetPresence,
|
|
@@ -78,34 +76,40 @@ function createAnimations(animations) {
|
|
|
78
76
|
const instance = val.getInstance(), derivedValue = (0, import_react_native_reanimated.useDerivedValue)(() => instance.value, [instance, getStyle]);
|
|
79
77
|
return (0, import_react_native_reanimated.useAnimatedStyle)(() => getStyle(derivedValue.value), [val, getStyle, derivedValue, instance]);
|
|
80
78
|
},
|
|
81
|
-
useAnimations: (
|
|
82
|
-
const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
|
|
83
|
-
let animate, dontAnimate;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
79
|
+
useAnimations: (animationProps) => {
|
|
80
|
+
const { props, presence, style, onDidAnimate, componentState } = animationProps, animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation, isHydrating = componentState.unmounted === "should-enter";
|
|
81
|
+
let animate = {}, dontAnimate = {};
|
|
82
|
+
if (isHydrating)
|
|
83
|
+
dontAnimate = style;
|
|
84
|
+
else {
|
|
85
|
+
const animateOnly = props.animateOnly || ["transform", "opacity"];
|
|
86
|
+
if (animateOnly) {
|
|
87
|
+
dontAnimate = { ...style };
|
|
88
|
+
for (const key of animateOnly)
|
|
89
|
+
key in style && (animate[key] = style[key], delete dontAnimate[key]);
|
|
90
|
+
} else
|
|
91
|
+
animate = style;
|
|
92
|
+
}
|
|
93
|
+
const animateStr = JSON.stringify(animate), styles = (0, import_react.useMemo)(() => JSON.parse(animateStr), [animateStr]), isExiting = !!(presence != null && presence[1]), sendExitComplete = presence == null ? void 0 : presence[1], onDidAnimateCombined = (0, import_react.useCallback)(() => {
|
|
92
94
|
onDidAnimate == null || onDidAnimate(), sendExitComplete == null || sendExitComplete();
|
|
93
95
|
}, []), motiProps = {
|
|
94
|
-
animate: isExiting ?
|
|
95
|
-
transition,
|
|
96
|
+
animate: isExiting || isHydrating ? {} : styles,
|
|
97
|
+
transition: animations[animationKey],
|
|
98
|
+
// isHydrating
|
|
99
|
+
// ? ({ type: 'timing', duration: 0 } as const)
|
|
100
|
+
// : componentState.unmounted
|
|
101
|
+
// ? { type: 'timing', duration: 0 }
|
|
102
|
+
// : animations[animationKey as keyof typeof animations]
|
|
96
103
|
onDidAnimate: onDidAnimateCombined,
|
|
97
104
|
usePresenceValue: presence,
|
|
98
105
|
presenceContext: (0, import_react.useContext)(import_use_presence.PresenceContext),
|
|
99
106
|
exit: isExiting ? styles : void 0
|
|
100
107
|
}, moti = (0, import_author.useMotify)(motiProps);
|
|
101
|
-
return process.env.NODE_ENV === "development" && props.debug
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
styles,
|
|
108
|
+
return process.env.NODE_ENV === "development" && props.debug && console.info("useMotify(", JSON.stringify(motiProps, null, 2) + ")", {
|
|
109
|
+
animationProps,
|
|
110
|
+
motiProps,
|
|
105
111
|
moti,
|
|
106
|
-
dontAnimate,
|
|
107
|
-
isExiting,
|
|
108
|
-
animateStr
|
|
112
|
+
style: [dontAnimate, moti.style]
|
|
109
113
|
}), {
|
|
110
114
|
style: [dontAnimate, moti.style]
|
|
111
115
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createAnimations.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4D,kCAG5D,gBAA0B,wBAC1B,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4D,kCAG5D,gBAA0B,wBAC1B,eAAyD,kBACzD,iCAUO;AAIA,SAAS,iBACd,YACoB;AACpB,SAAO;AAAA,IACL,MAAM,+BAAAA,QAAS;AAAA,IACf,MAAM,+BAAAA,QAAS;AAAA,IACf,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IAEA,kBAAkB,SAA4D;AAC5E,YAAM,kBAAc,+CAAe,OAAO;AAE1C,iBAAO;AAAA,QACL,OAAO;AAAA,UACL,cAAc;AACZ;AACA,mBAAO;AAAA,UACT;AAAA,UACA,WAAW;AACT;AACA,mBAAO,YAAY;AAAA,UACrB;AAAA,UACA,SAAS,MAAM,SAAS,EAAE,MAAM,SAAS,GAAG;AAC1C;AACA,YAAI,OAAO,SAAS,WAClB,YAAY,QAAQ,OACX,OAAO,SAAS,WACzB,YAAY,YAAQ,2CAAW,MAAM,MAAM,IAE3C,YAAY,YAAQ,2CAAW,MAAM,MAAM;AAAA,UAE/C;AAAA,UACA,OAAO;AACL;AACA,gEAAgB,WAAW;AAAA,UAC7B;AAAA,QACF;AAAA,QACA,CAAC,WAAW;AAAA,MACd;AAAA,IACF;AAAA,IAEA,0BAA0B,EAAE,MAAM,GAAG,SAAS;AAC5C,YAAM,WAAW,MAAM,YAAY;AACnC,iBAAO;AAAA,QACL,MACS,SAAS;AAAA,QAElB,CAAC,MAAM,SAAS;AACd,UAAI,SAAS,YAGX,wCAAQ,OAAO,EAAE,IAAI;AAAA,QAEzB;AAAA;AAAA,QAEA,CAAC,SAAS,QAAQ;AAAA,MACpB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAKA,uBAAuB,KAAK,UAAU;AACpC,YAAM,WAAW,IAAI,YAAY,GAG3B,mBAAe,gDAAgB,MAC5B,SAAS,OAEf,CAAC,UAAU,QAAQ,CAAC;AAEvB,iBAAO,iDAAiB,MACf,SAAS,aAAa,KAAK,GAEjC,CAAC,KAAK,UAAU,cAAc,QAAQ,CAAC;AAAA,IAC5C;AAAA,IAEA,eAAe,CAAC,mBAAmB;AACjC,YAAM,EAAE,OAAO,UAAU,OAAO,cAAc,eAAe,IAAI,gBAC3D,eAAe,MAAM,QAAQ,MAAM,SAAS,IAC9C,MAAM,UAAU,CAAC,IACjB,MAAM,WAEJ,cAAc,eAAe,cAAc;AACjD,UAAI,UAAU,CAAC,GACX,cAAc,CAAC;AAEnB,UAAI;AACF,sBAAc;AAAA,WACT;AACL,cAAM,cAAc,MAAM,eAAe,CAAC,aAAa,SAAS;AAChE,YAAI,aAAa;AACf,wBAAc,EAAE,GAAG,MAAM;AACzB,qBAAW,OAAO;AAChB,YAAI,OAAO,UACT,QAAQ,GAAG,IAAI,MAAM,GAAG,GACxB,OAAO,YAAY,GAAG;AAAA,QAG5B;AACE,oBAAU;AAAA,MAEd;AAIA,YAAM,aAAa,KAAK,UAAU,OAAO,GACnC,aAAS,sBAAQ,MAAM,KAAK,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,GAE3D,YAAY,GAAQ,6BAAW,KAC/B,mBAAmB,qCAAW,IAE9B,2BAAuB,0BAAY,MAAM;AAC7C,gDACA;AAAA,MACF,GAAG,CAAC,CAAC,GAIC,YAAY;AAAA,QAChB,SAAS,aAAa,cAAc,CAAC,IAAI;AAAA,QACzC,YAAY,WAAW,YAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAM9D,cAAc;AAAA,QACd,kBAAkB;AAAA,QAClB,qBAAiB,yBAAW,mCAAe;AAAA,QAC3C,MAAM,YAAY,SAAS;AAAA,MAC7B,GAEM,WAAO,yBAAU,SAAS;AAEhC,aAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,SAClD,QAAQ,KAAK,cAAc,KAAK,UAAU,WAAW,MAAM,CAAC,IAAI,KAAK;AAAA,QACnE;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,aAAa,KAAK,KAAK;AAAA,MACjC,CAAC,GAGI;AAAA,QACL,OAAO,CAAC,aAAa,KAAK,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACF;",
|
|
5
5
|
"names": ["Animated"]
|
|
6
6
|
}
|
|
@@ -32,8 +32,6 @@ function createAnimations(animations) {
|
|
|
32
32
|
View: import_react_native_reanimated.default.View,
|
|
33
33
|
Text: import_react_native_reanimated.default.Text,
|
|
34
34
|
isReactNative: !0,
|
|
35
|
-
keepStyleSSR: !0,
|
|
36
|
-
supportsCSSVars: !0,
|
|
37
35
|
animations,
|
|
38
36
|
usePresence: import_use_presence.usePresence,
|
|
39
37
|
ResetPresence: import_use_presence.ResetPresence,
|
|
@@ -79,34 +77,40 @@ function createAnimations(animations) {
|
|
|
79
77
|
const instance = val.getInstance(), derivedValue = (0, import_react_native_reanimated.useDerivedValue)(() => instance.value, [instance, getStyle]);
|
|
80
78
|
return (0, import_react_native_reanimated.useAnimatedStyle)(() => getStyle(derivedValue.value), [val, getStyle, derivedValue, instance]);
|
|
81
79
|
},
|
|
82
|
-
useAnimations: (
|
|
83
|
-
const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
|
|
84
|
-
let animate, dontAnimate;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
useAnimations: (animationProps) => {
|
|
81
|
+
const { props, presence, style, onDidAnimate, componentState } = animationProps, animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation, isHydrating = componentState.unmounted === "should-enter";
|
|
82
|
+
let animate = {}, dontAnimate = {};
|
|
83
|
+
if (isHydrating)
|
|
84
|
+
dontAnimate = style;
|
|
85
|
+
else {
|
|
86
|
+
const animateOnly = props.animateOnly || ["transform", "opacity"];
|
|
87
|
+
if (animateOnly) {
|
|
88
|
+
dontAnimate = { ...style };
|
|
89
|
+
for (const key of animateOnly)
|
|
90
|
+
key in style && (animate[key] = style[key], delete dontAnimate[key]);
|
|
91
|
+
} else
|
|
92
|
+
animate = style;
|
|
93
|
+
}
|
|
94
|
+
const animateStr = JSON.stringify(animate), styles = (0, import_react.useMemo)(() => JSON.parse(animateStr), [animateStr]), isExiting = !!(presence != null && presence[1]), sendExitComplete = presence == null ? void 0 : presence[1], onDidAnimateCombined = (0, import_react.useCallback)(() => {
|
|
93
95
|
onDidAnimate == null || onDidAnimate(), sendExitComplete == null || sendExitComplete();
|
|
94
96
|
}, []), motiProps = {
|
|
95
|
-
animate: isExiting ?
|
|
96
|
-
transition,
|
|
97
|
+
animate: isExiting || isHydrating ? {} : styles,
|
|
98
|
+
transition: animations[animationKey],
|
|
99
|
+
// isHydrating
|
|
100
|
+
// ? ({ type: 'timing', duration: 0 } as const)
|
|
101
|
+
// : componentState.unmounted
|
|
102
|
+
// ? { type: 'timing', duration: 0 }
|
|
103
|
+
// : animations[animationKey as keyof typeof animations]
|
|
97
104
|
onDidAnimate: onDidAnimateCombined,
|
|
98
105
|
usePresenceValue: presence,
|
|
99
106
|
presenceContext: (0, import_react.useContext)(import_use_presence.PresenceContext),
|
|
100
107
|
exit: isExiting ? styles : void 0
|
|
101
108
|
}, moti = (0, import_author.useMotify)(motiProps);
|
|
102
|
-
return process.env.NODE_ENV === "development" && props.debug
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
styles,
|
|
109
|
+
return process.env.NODE_ENV === "development" && props.debug && console.info("useMotify(", JSON.stringify(motiProps, null, 2) + ")", {
|
|
110
|
+
animationProps,
|
|
111
|
+
motiProps,
|
|
106
112
|
moti,
|
|
107
|
-
dontAnimate,
|
|
108
|
-
isExiting,
|
|
109
|
-
animateStr
|
|
113
|
+
style: [dontAnimate, moti.style]
|
|
110
114
|
}), {
|
|
111
115
|
style: [dontAnimate, moti.style]
|
|
112
116
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createAnimations.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4D,kCAG5D,gBAA0B,wBAC1B,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["Animated"]
|
|
6
6
|
}
|
|
@@ -16,8 +16,6 @@ function createAnimations(animations) {
|
|
|
16
16
|
View: Animated.View,
|
|
17
17
|
Text: Animated.Text,
|
|
18
18
|
isReactNative: !0,
|
|
19
|
-
keepStyleSSR: !0,
|
|
20
|
-
supportsCSSVars: !0,
|
|
21
19
|
animations,
|
|
22
20
|
usePresence,
|
|
23
21
|
ResetPresence,
|
|
@@ -63,34 +61,40 @@ function createAnimations(animations) {
|
|
|
63
61
|
const instance = val.getInstance(), derivedValue = useDerivedValue(() => instance.value, [instance, getStyle]);
|
|
64
62
|
return useAnimatedStyle(() => getStyle(derivedValue.value), [val, getStyle, derivedValue, instance]);
|
|
65
63
|
},
|
|
66
|
-
useAnimations: (
|
|
67
|
-
const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
|
|
68
|
-
let animate, dontAnimate;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
64
|
+
useAnimations: (animationProps) => {
|
|
65
|
+
const { props, presence, style, onDidAnimate, componentState } = animationProps, animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation, isHydrating = componentState.unmounted === "should-enter";
|
|
66
|
+
let animate = {}, dontAnimate = {};
|
|
67
|
+
if (isHydrating)
|
|
68
|
+
dontAnimate = style;
|
|
69
|
+
else {
|
|
70
|
+
const animateOnly = props.animateOnly || ["transform", "opacity"];
|
|
71
|
+
if (animateOnly) {
|
|
72
|
+
dontAnimate = { ...style };
|
|
73
|
+
for (const key of animateOnly)
|
|
74
|
+
key in style && (animate[key] = style[key], delete dontAnimate[key]);
|
|
75
|
+
} else
|
|
76
|
+
animate = style;
|
|
77
|
+
}
|
|
78
|
+
const animateStr = JSON.stringify(animate), styles = useMemo(() => JSON.parse(animateStr), [animateStr]), isExiting = !!presence?.[1], sendExitComplete = presence?.[1], onDidAnimateCombined = useCallback(() => {
|
|
77
79
|
onDidAnimate?.(), sendExitComplete?.();
|
|
78
80
|
}, []), motiProps = {
|
|
79
|
-
animate: isExiting ?
|
|
80
|
-
transition,
|
|
81
|
+
animate: isExiting || isHydrating ? {} : styles,
|
|
82
|
+
transition: animations[animationKey],
|
|
83
|
+
// isHydrating
|
|
84
|
+
// ? ({ type: 'timing', duration: 0 } as const)
|
|
85
|
+
// : componentState.unmounted
|
|
86
|
+
// ? { type: 'timing', duration: 0 }
|
|
87
|
+
// : animations[animationKey as keyof typeof animations]
|
|
81
88
|
onDidAnimate: onDidAnimateCombined,
|
|
82
89
|
usePresenceValue: presence,
|
|
83
90
|
presenceContext: useContext(PresenceContext),
|
|
84
91
|
exit: isExiting ? styles : void 0
|
|
85
92
|
}, moti = useMotify(motiProps);
|
|
86
|
-
return process.env.NODE_ENV === "development" && props.debug
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
styles,
|
|
93
|
+
return process.env.NODE_ENV === "development" && props.debug && console.info("useMotify(", JSON.stringify(motiProps, null, 2) + ")", {
|
|
94
|
+
animationProps,
|
|
95
|
+
motiProps,
|
|
90
96
|
moti,
|
|
91
|
-
dontAnimate,
|
|
92
|
-
isExiting,
|
|
93
|
-
animateStr
|
|
97
|
+
style: [dontAnimate, moti.style]
|
|
94
98
|
}), {
|
|
95
99
|
style: [dontAnimate, moti.style]
|
|
96
100
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createAnimations.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,iBAAiB,eAAe,mBAAmB;AAG5D,SAAS,iBAAiB;AAC1B,SAAS,aAAa,YAAY,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -16,8 +16,6 @@ function createAnimations(animations) {
|
|
|
16
16
|
View: Animated.View,
|
|
17
17
|
Text: Animated.Text,
|
|
18
18
|
isReactNative: !0,
|
|
19
|
-
keepStyleSSR: !0,
|
|
20
|
-
supportsCSSVars: !0,
|
|
21
19
|
animations,
|
|
22
20
|
usePresence,
|
|
23
21
|
ResetPresence,
|
|
@@ -63,34 +61,40 @@ function createAnimations(animations) {
|
|
|
63
61
|
const instance = val.getInstance(), derivedValue = useDerivedValue(() => instance.value, [instance, getStyle]);
|
|
64
62
|
return useAnimatedStyle(() => getStyle(derivedValue.value), [val, getStyle, derivedValue, instance]);
|
|
65
63
|
},
|
|
66
|
-
useAnimations: (
|
|
67
|
-
const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
|
|
68
|
-
let animate, dontAnimate;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
64
|
+
useAnimations: (animationProps) => {
|
|
65
|
+
const { props, presence, style, onDidAnimate, componentState } = animationProps, animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation, isHydrating = componentState.unmounted === "should-enter";
|
|
66
|
+
let animate = {}, dontAnimate = {};
|
|
67
|
+
if (isHydrating)
|
|
68
|
+
dontAnimate = style;
|
|
69
|
+
else {
|
|
70
|
+
const animateOnly = props.animateOnly || ["transform", "opacity"];
|
|
71
|
+
if (animateOnly) {
|
|
72
|
+
dontAnimate = { ...style };
|
|
73
|
+
for (const key of animateOnly)
|
|
74
|
+
key in style && (animate[key] = style[key], delete dontAnimate[key]);
|
|
75
|
+
} else
|
|
76
|
+
animate = style;
|
|
77
|
+
}
|
|
78
|
+
const animateStr = JSON.stringify(animate), styles = useMemo(() => JSON.parse(animateStr), [animateStr]), isExiting = !!presence?.[1], sendExitComplete = presence?.[1], onDidAnimateCombined = useCallback(() => {
|
|
77
79
|
onDidAnimate?.(), sendExitComplete?.();
|
|
78
80
|
}, []), motiProps = {
|
|
79
|
-
animate: isExiting ?
|
|
80
|
-
transition,
|
|
81
|
+
animate: isExiting || isHydrating ? {} : styles,
|
|
82
|
+
transition: animations[animationKey],
|
|
83
|
+
// isHydrating
|
|
84
|
+
// ? ({ type: 'timing', duration: 0 } as const)
|
|
85
|
+
// : componentState.unmounted
|
|
86
|
+
// ? { type: 'timing', duration: 0 }
|
|
87
|
+
// : animations[animationKey as keyof typeof animations]
|
|
81
88
|
onDidAnimate: onDidAnimateCombined,
|
|
82
89
|
usePresenceValue: presence,
|
|
83
90
|
presenceContext: useContext(PresenceContext),
|
|
84
91
|
exit: isExiting ? styles : void 0
|
|
85
92
|
}, moti = useMotify(motiProps);
|
|
86
|
-
return process.env.NODE_ENV === "development" && props.debug
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
styles,
|
|
93
|
+
return process.env.NODE_ENV === "development" && props.debug && console.info("useMotify(", JSON.stringify(motiProps, null, 2) + ")", {
|
|
94
|
+
animationProps,
|
|
95
|
+
motiProps,
|
|
90
96
|
moti,
|
|
91
|
-
dontAnimate,
|
|
92
|
-
isExiting,
|
|
93
|
-
animateStr
|
|
97
|
+
style: [dontAnimate, moti.style]
|
|
94
98
|
}), {
|
|
95
99
|
style: [dontAnimate, moti.style]
|
|
96
100
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/createAnimations.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,iBAAiB,eAAe,mBAAmB;AAG5D,SAAS,iBAAiB;AAC1B,SAAS,aAAa,YAAY,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/animations-moti",
|
|
3
|
-
"version": "1.85.
|
|
3
|
+
"version": "1.85.5",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"types": "./types/index.d.ts",
|
|
@@ -15,13 +15,14 @@
|
|
|
15
15
|
"dist"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@tamagui/use-presence": "1.85.
|
|
19
|
-
"@tamagui/web": "1.85.
|
|
20
|
-
"moti": "^0.
|
|
18
|
+
"@tamagui/use-presence": "1.85.5",
|
|
19
|
+
"@tamagui/web": "1.85.5",
|
|
20
|
+
"moti": "^0.27.2",
|
|
21
|
+
"react": "^18.2.0"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
|
-
"@tamagui/build": "1.85.
|
|
24
|
-
"react-native-reanimated": "~3.
|
|
24
|
+
"@tamagui/build": "1.85.5",
|
|
25
|
+
"react-native-reanimated": "~3.4.1"
|
|
25
26
|
},
|
|
26
27
|
"scripts": {
|
|
27
28
|
"build": "tamagui-build",
|
package/src/createAnimations.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import { PresenceContext, ResetPresence, usePresence } from '@tamagui/use-presen
|
|
|
2
2
|
import { AnimationDriver, UniversalAnimatedNumber } from '@tamagui/web'
|
|
3
3
|
import type { MotiTransition } from 'moti'
|
|
4
4
|
import { useMotify } from 'moti/author'
|
|
5
|
-
import { useCallback, useContext, useMemo } from 'react'
|
|
5
|
+
import { useCallback, useContext, useMemo, useRef } from 'react'
|
|
6
6
|
import Animated, {
|
|
7
7
|
SharedValue,
|
|
8
8
|
cancelAnimation,
|
|
@@ -24,8 +24,6 @@ export function createAnimations<A extends Record<string, MotiTransition>>(
|
|
|
24
24
|
View: Animated.View,
|
|
25
25
|
Text: Animated.Text,
|
|
26
26
|
isReactNative: true,
|
|
27
|
-
keepStyleSSR: true,
|
|
28
|
-
supportsCSSVars: true,
|
|
29
27
|
animations,
|
|
30
28
|
usePresence,
|
|
31
29
|
ResetPresence,
|
|
@@ -98,61 +96,70 @@ export function createAnimations<A extends Record<string, MotiTransition>>(
|
|
|
98
96
|
}, [val, getStyle, derivedValue, instance])
|
|
99
97
|
},
|
|
100
98
|
|
|
101
|
-
useAnimations: (
|
|
99
|
+
useAnimations: (animationProps) => {
|
|
100
|
+
const { props, presence, style, onDidAnimate, componentState } = animationProps
|
|
102
101
|
const animationKey = Array.isArray(props.animation)
|
|
103
102
|
? props.animation[0]
|
|
104
103
|
: props.animation
|
|
105
104
|
|
|
106
|
-
|
|
107
|
-
let
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
dontAnimate = { ...style }
|
|
113
|
-
for (const key of animateOnly) {
|
|
114
|
-
if (!(key in style)) continue
|
|
115
|
-
animate[key] = style[key]
|
|
116
|
-
delete dontAnimate[key]
|
|
117
|
-
}
|
|
105
|
+
const isHydrating = componentState.unmounted === 'should-enter'
|
|
106
|
+
let animate = {}
|
|
107
|
+
let dontAnimate = {}
|
|
108
|
+
|
|
109
|
+
if (isHydrating) {
|
|
110
|
+
dontAnimate = style
|
|
118
111
|
} else {
|
|
119
|
-
|
|
120
|
-
|
|
112
|
+
const animateOnly = props.animateOnly || ['transform', 'opacity']
|
|
113
|
+
if (animateOnly) {
|
|
114
|
+
dontAnimate = { ...style }
|
|
115
|
+
for (const key of animateOnly) {
|
|
116
|
+
if (key in style) {
|
|
117
|
+
animate[key] = style[key]
|
|
118
|
+
delete dontAnimate[key]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
} else {
|
|
122
|
+
animate = style
|
|
123
|
+
}
|
|
121
124
|
}
|
|
122
125
|
|
|
123
126
|
// without this, the driver breaks on native
|
|
124
127
|
// stringifying -> parsing fixes that
|
|
125
128
|
const animateStr = JSON.stringify(animate)
|
|
126
129
|
const styles = useMemo(() => JSON.parse(animateStr), [animateStr])
|
|
130
|
+
|
|
127
131
|
const isExiting = Boolean(presence?.[1])
|
|
128
132
|
const sendExitComplete = presence?.[1]
|
|
129
|
-
const transition = animations[animationKey as keyof typeof animations]
|
|
130
133
|
|
|
131
134
|
const onDidAnimateCombined = useCallback(() => {
|
|
132
135
|
onDidAnimate?.()
|
|
133
136
|
sendExitComplete?.()
|
|
134
137
|
}, [])
|
|
135
138
|
|
|
139
|
+
type UseMotiProps = Parameters<typeof useMotify>[0]
|
|
140
|
+
|
|
136
141
|
const motiProps = {
|
|
137
|
-
animate: isExiting ?
|
|
138
|
-
transition,
|
|
142
|
+
animate: isExiting || isHydrating ? {} : styles,
|
|
143
|
+
transition: animations[animationKey as keyof typeof animations],
|
|
144
|
+
// isHydrating
|
|
145
|
+
// ? ({ type: 'timing', duration: 0 } as const)
|
|
146
|
+
// : componentState.unmounted
|
|
147
|
+
// ? { type: 'timing', duration: 0 }
|
|
148
|
+
// : animations[animationKey as keyof typeof animations]
|
|
139
149
|
onDidAnimate: onDidAnimateCombined,
|
|
140
150
|
usePresenceValue: presence as any,
|
|
141
151
|
presenceContext: useContext(PresenceContext),
|
|
142
152
|
exit: isExiting ? styles : undefined,
|
|
143
|
-
}
|
|
153
|
+
} satisfies UseMotiProps
|
|
144
154
|
|
|
145
155
|
const moti = useMotify(motiProps)
|
|
146
156
|
|
|
147
|
-
if (process.env.NODE_ENV === 'development' && props['debug']
|
|
148
|
-
console.info(`
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
styles,
|
|
157
|
+
if (process.env.NODE_ENV === 'development' && props['debug']) {
|
|
158
|
+
console.info(`useMotify(`, JSON.stringify(motiProps, null, 2) + ')', {
|
|
159
|
+
animationProps,
|
|
160
|
+
motiProps,
|
|
152
161
|
moti,
|
|
153
|
-
dontAnimate,
|
|
154
|
-
isExiting,
|
|
155
|
-
animateStr,
|
|
162
|
+
style: [dontAnimate, moti.style],
|
|
156
163
|
})
|
|
157
164
|
}
|
|
158
165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA2B,MAAM,cAAc,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAiB1C,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACvE,UAAU,EAAE,CAAC,GACZ,eAAe,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA2B,MAAM,cAAc,CAAA;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAiB1C,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACvE,UAAU,EAAE,CAAC,GACZ,eAAe,CAAC,CAAC,CAAC,CAqJpB"}
|