@tamagui/animations-reanimated 1.0.0-beta.207 → 1.0.0-beta.230

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.
@@ -38,64 +38,73 @@ function createAnimations(animations) {
38
38
  View: AnimatedView,
39
39
  Text: AnimatedText,
40
40
  useAnimations: (props, helpers) => {
41
- const { styleKey, mergedStyles, state, pseudos, onDidAnimate, delay } = helpers;
42
- const [isPresent, safeToUnmount] = (0, import_animate_presence.usePresence)();
41
+ var _a, _b;
42
+ const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers;
43
+ const [isEntering, safeToUnmount] = (0, import_animate_presence.useEntering)();
43
44
  const presence = (0, import_react.useContext)(import_animate_presence.AnimatePresenceContext);
44
- const isMounted = (0, import_react_native_reanimated.useSharedValue)(false);
45
- const isHovering = (0, import_react_native_reanimated.useSharedValue)(false);
46
- const hasExitStyle = !!pseudos.exitStyle;
47
- const custom = (0, import_react.useCallback)(() => {
48
- "worklet";
49
- return presence == null ? void 0 : presence.custom;
50
- }, [presence]);
51
- const reanimatedOnDidAnimated = (0, import_react.useCallback)((...args) => {
52
- onDidAnimate == null ? void 0 : onDidAnimate(...args);
45
+ const exitStyle = (presence == null ? void 0 : presence.exitVariant) ? ((_b = (_a = staticConfig.variantsParsed) == null ? void 0 : _a[presence.exitVariant]) == null ? void 0 : _b.true) || pseudos.exitStyle : pseudos.exitStyle;
46
+ const reanimatedOnDidAnimated = (0, import_react.useCallback)((...args2) => {
47
+ onDidAnimate == null ? void 0 : onDidAnimate(...args2);
53
48
  }, [onDidAnimate]);
54
- const reanimatedSafeToUnmount = (0, import_react.useCallback)(() => {
55
- safeToUnmount == null ? void 0 : safeToUnmount();
56
- }, [safeToUnmount]);
57
- (0, import_react.useEffect)(() => {
58
- isMounted.value = true;
59
- }, [isMounted]);
60
- (0, import_react.useEffect)(() => {
61
- isHovering.value = true;
62
- }, [state.hover]);
63
- (0, import_react.useEffect)(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
64
- if (!isPresent && !hasExitStyle) {
65
- reanimatedSafeToUnmount();
49
+ const all = getStyle({
50
+ isEntering,
51
+ exitVariant: presence == null ? void 0 : presence.exitVariant,
52
+ enterVariant: presence == null ? void 0 : presence.enterVariant
53
+ });
54
+ const [animatedStyles, nonAnimatedStyle] = [{}, {}];
55
+ const animatedStyleKey = {
56
+ transform: true,
57
+ opacity: true
58
+ };
59
+ for (const key of Object.keys(all)) {
60
+ if (animatedStyleKey[key]) {
61
+ animatedStyles[key] = all[key];
62
+ } else {
63
+ nonAnimatedStyle[key] = all[key];
66
64
  }
67
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
65
+ }
66
+ const args = [
67
+ JSON.stringify(animatedStyles),
68
+ state.mounted,
69
+ state.hover,
70
+ state.press,
71
+ state.pressIn,
72
+ state.focus,
73
+ delay,
74
+ isEntering,
75
+ onDidAnimate,
76
+ reanimatedOnDidAnimated,
77
+ presence == null ? void 0 : presence.exitVariant,
78
+ presence == null ? void 0 : presence.enterVariant
79
+ ];
68
80
  const animatedStyle = (0, import_react_native_reanimated.useAnimatedStyle)(() => {
69
- var _a, _b;
70
- isHovering.value;
71
- const style = mergedStyles({
72
- isExiting: !isPresent
73
- });
81
+ const style = animatedStyles;
74
82
  const final = {
75
83
  transform: []
76
84
  };
77
- const isExiting = !isPresent && !!pseudos.exitStyle;
85
+ const isExiting = isEntering === false;
78
86
  const transition = animations[props.animation];
79
87
  const exitingStyleProps = {};
80
- if (pseudos.exitStyle) {
81
- for (const key of Object.keys(pseudos.exitStyle)) {
88
+ if (exitStyle) {
89
+ for (const key of Object.keys(exitStyle)) {
82
90
  exitingStyleProps[key] = true;
83
91
  }
84
92
  }
85
93
  for (const key in style) {
86
94
  const value = style[key];
87
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
95
+ const aconf = animationConfig(key, transition);
96
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
88
97
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
89
- if (onDidAnimate) {
90
- (0, import_react_native_reanimated.runOnJS)(reanimatedOnDidAnimated)(key, completed, recentValue, {
91
- attemptedValue: value
92
- });
93
- }
98
+ (0, import_react_native_reanimated.runOnJS)(reanimatedOnDidAnimated)(key, completed, recentValue, {
99
+ attemptedValue: value
100
+ });
94
101
  if (isExiting) {
95
102
  exitingStyleProps[key] = false;
96
103
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
97
104
  if (!areStylesExiting) {
98
- (0, import_react_native_reanimated.runOnJS)(reanimatedSafeToUnmount)();
105
+ if (safeToUnmount) {
106
+ (0, import_react_native_reanimated.runOnJS)(safeToUnmount)();
107
+ }
99
108
  }
100
109
  }
101
110
  }, "callback");
@@ -108,22 +117,13 @@ function createAnimations(animations) {
108
117
  for (const transformObject of value) {
109
118
  const key2 = Object.keys(transformObject)[0];
110
119
  const transformValue = transformObject[key2];
111
- const transform = {};
112
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
113
- delayMs = ((_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) ?? null;
114
- }
115
120
  let finalValue2 = animation(transformValue, config, callback);
116
121
  if (shouldRepeat) {
117
122
  finalValue2 = (0, import_react_native_reanimated.withRepeat)(finalValue2, repeatCount, repeatReverse);
118
123
  }
119
- if (delayMs != null) {
120
- transform[key2] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue2);
121
- } else {
122
- transform[key2] = finalValue2;
123
- }
124
- if (Object.keys(transform).length) {
125
- final["transform"].push(transform);
126
- }
124
+ final["transform"].push({
125
+ [key2]: finalValue2
126
+ });
127
127
  }
128
128
  continue;
129
129
  }
@@ -153,38 +153,28 @@ function createAnimations(animations) {
153
153
  }
154
154
  }
155
155
  if (process.env.NODE_ENV === "development" && props["debug"]) {
156
- console.log("animation style", JSON.stringify(final, null, 2));
156
+ console.log("animation style", final);
157
157
  }
158
158
  return final;
159
- }, [
160
- styleKey,
161
- custom,
162
- delay,
163
- hasExitStyle,
164
- isMounted,
165
- isPresent,
166
- onDidAnimate,
167
- reanimatedOnDidAnimated,
168
- reanimatedSafeToUnmount
169
- ]);
170
- return {
171
- style: animatedStyle
172
- };
159
+ }, args);
160
+ return (0, import_react.useMemo)(() => {
161
+ return {
162
+ style: [nonAnimatedStyle, animatedStyle]
163
+ };
164
+ }, args);
173
165
  }
174
166
  };
175
167
  }
176
168
  __name(createAnimations, "createAnimations");
177
169
  function animationDelay(key, transition, defaultDelay) {
178
- var _a, _b;
179
170
  "worklet";
180
- let delayMs = defaultDelay;
181
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
182
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
183
- } else if ((transition == null ? void 0 : transition.delay) != null) {
184
- delayMs = transition.delay;
171
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
172
+ return {
173
+ delayMs: null
174
+ };
185
175
  }
186
176
  return {
187
- delayMs
177
+ delayMs: transition[key].delayMs
188
178
  };
189
179
  }
190
180
  __name(animationDelay, "animationDelay");
@@ -203,7 +193,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
203
193
  ].includes(styleKey);
204
194
  }, "isColor");
205
195
  function animationConfig(styleProp, transition) {
206
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
196
+ var _a, _b, _c, _d, _e;
207
197
  "worklet";
208
198
  const key = styleProp;
209
199
  let repeatCount = 0;
@@ -212,30 +202,23 @@ function animationConfig(styleProp, transition) {
212
202
  if (isColor(key) || key === "opacity") {
213
203
  animationType = "timing";
214
204
  }
205
+ if (!transition) {
206
+ return {};
207
+ }
215
208
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
216
209
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
217
- } else if (transition == null ? void 0 : transition.type) {
210
+ } else if (transition.type) {
218
211
  animationType = transition.type;
219
212
  }
220
- const loop = ((_c = transition[key]) == null ? void 0 : _c.loop) ?? (transition == null ? void 0 : transition.loop);
213
+ const loop = ((_c = transition[key]) == null ? void 0 : _c.loop) || transition.loop || null;
221
214
  if (loop != null) {
222
215
  repeatCount = loop ? -1 : 0;
223
216
  }
224
- if (((_d = transition[key]) == null ? void 0 : _d.repeat) != null) {
225
- repeatCount = (_e = transition[key]) == null ? void 0 : _e.repeat;
226
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
227
- repeatCount = transition.repeat;
228
- }
229
- if (((_f = transition[key]) == null ? void 0 : _f.repeatReverse) != null) {
230
- repeatReverse = (_g = transition[key]) == null ? void 0 : _g.repeatReverse;
231
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
232
- repeatReverse = transition.repeatReverse;
233
- }
234
217
  let config = {};
235
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
218
+ let animation;
236
219
  if (animationType === "timing") {
237
- const duration = ((_h = transition[key]) == null ? void 0 : _h.duration) ?? (transition == null ? void 0 : transition.duration);
238
- const easing = ((_i = transition[key]) == null ? void 0 : _i.easing) ?? (transition == null ? void 0 : transition.easing);
220
+ const duration = ((_d = transition[key]) == null ? void 0 : _d.duration) ?? (transition == null ? void 0 : transition.duration);
221
+ const easing = ((_e = transition[key]) == null ? void 0 : _e.easing) ?? (transition == null ? void 0 : transition.easing);
239
222
  if (easing) {
240
223
  config["easing"] = easing;
241
224
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAnimations.tsx"],
4
- "sourcesContent": ["import { AnimatePresenceContext, usePresence } from '@tamagui/animate-presence'\nimport { AnimationDriver, UseAnimationHelpers, UseAnimationProps } from '@tamagui/core'\nimport { createContext, useCallback, useContext, useEffect } from 'react'\nimport {\n PerpectiveTransform,\n RotateTransform,\n RotateXTransform,\n RotateYTransform,\n RotateZTransform,\n ScaleTransform,\n ScaleXTransform,\n ScaleYTransform,\n SkewXTransform,\n SkewYTransform,\n TranslateXTransform,\n TranslateYTransform,\n} from 'react-native'\nimport Animated, {\n WithDecayConfig,\n WithSpringConfig,\n WithTimingConfig,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withDecay,\n withDelay,\n withRepeat,\n withSpring,\n withTiming,\n} from 'react-native-reanimated'\n\nconst AnimatedView = Animated.View\nconst AnimatedText = Animated.Text\n\nAnimatedView['displayName'] = 'AnimatedView'\nAnimatedText['displayName'] = 'AnimatedText'\n\nexport function createAnimations<A extends Object>(animations: A): AnimationDriver<A> {\n return {\n avoidClasses: true,\n animations,\n View: AnimatedView,\n Text: AnimatedText,\n useAnimations: (props: UseAnimationProps, helpers: UseAnimationHelpers) => {\n const { styleKey, mergedStyles, state, pseudos, onDidAnimate, delay } = helpers\n const [isPresent, safeToUnmount] = usePresence()\n const presence = useContext(AnimatePresenceContext)\n const isMounted = useSharedValue(false)\n const isHovering = useSharedValue(false)\n const hasExitStyle = !!pseudos.exitStyle\n const custom = useCallback(() => {\n 'worklet'\n return presence?.custom\n }, [presence])\n\n const reanimatedOnDidAnimated = useCallback<NonNullable<typeof onDidAnimate>>(\n (...args) => {\n onDidAnimate?.(...args)\n },\n [onDidAnimate]\n )\n const reanimatedSafeToUnmount = useCallback(() => {\n safeToUnmount?.()\n }, [safeToUnmount])\n\n useEffect(() => {\n isMounted.value = true\n }, [isMounted])\n\n useEffect(() => {\n isHovering.value = true\n }, [state.hover])\n\n useEffect(\n function allowUnMountIfMissingExit() {\n if (!isPresent && !hasExitStyle) {\n reanimatedSafeToUnmount()\n }\n },\n [hasExitStyle, isPresent, reanimatedSafeToUnmount]\n )\n\n const animatedStyle = useAnimatedStyle(() => {\n // read this testing effect\n isHovering.value\n\n const style = mergedStyles({\n isExiting: !isPresent,\n })\n\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = !isPresent && !!pseudos.exitStyle\n const transition = animations[props.animation]\n\n const exitingStyleProps: Record<string, boolean> = {}\n if (pseudos.exitStyle) {\n for (const key of Object.keys(pseudos.exitStyle)) {\n exitingStyleProps[key] = true\n }\n }\n\n for (const key in style) {\n const value = style[key]\n const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(\n key,\n transition\n )\n\n const callback: (completed: boolean, value?: any) => void = (completed, recentValue) => {\n if (onDidAnimate) {\n runOnJS(reanimatedOnDidAnimated)(key as any, completed, recentValue, {\n attemptedValue: value,\n })\n }\n if (isExiting) {\n exitingStyleProps[key] = false\n const areStylesExiting = Object.values(exitingStyleProps).some(Boolean)\n // if this is true, then we've finished our exit animations\n if (!areStylesExiting) {\n runOnJS(reanimatedSafeToUnmount)()\n }\n }\n }\n\n let { delayMs = null } = animationDelay(key, transition, delay)\n\n if (key === 'transform') {\n if (!Array.isArray(value)) {\n console.error(`Invalid transform value. Needs to be an array.`)\n continue\n }\n\n for (const transformObject of value) {\n const key = Object.keys(transformObject)[0]\n const transformValue = transformObject[key]\n const transform = {} as any\n if (transition?.[key]?.delay != null) {\n delayMs = transition?.[key]?.delay ?? null\n }\n let finalValue = animation(transformValue, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n transform[key] = withDelay(delayMs, finalValue)\n } else {\n transform[key] = finalValue\n }\n if (Object.keys(transform).length) {\n final['transform'].push(transform)\n }\n }\n continue\n }\n\n if (typeof value === 'object') {\n // shadows\n final[key] = {}\n for (const innerStyleKey of Object.keys(value || {})) {\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n final[key][innerStyleKey] = withDelay(delayMs, finalValue)\n } else {\n final[key][innerStyleKey] = finalValue\n }\n }\n continue\n }\n\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null && typeof delayMs === 'number') {\n final[key] = withDelay(delayMs, finalValue)\n } else {\n final[key] = finalValue\n }\n\n // end for (key in mergedStyles)\n }\n\n if (process.env.NODE_ENV === 'development' && props['debug']) {\n console.log('animation style', JSON.stringify(final, null, 2))\n }\n\n return final\n }, [\n styleKey,\n custom,\n delay,\n // disableInitialAnimation,\n // exitProp,\n // exitTransitionProp,\n // fromProp,\n hasExitStyle,\n isMounted,\n isPresent,\n onDidAnimate,\n reanimatedOnDidAnimated,\n reanimatedSafeToUnmount,\n // state,\n // stylePriority,\n // transitionProp,\n ])\n\n return {\n style: animatedStyle,\n }\n },\n }\n}\n\nfunction animationDelay<Animate>(\n key: string,\n transition: MotiTransition<Animate> | undefined,\n defaultDelay?: number\n) {\n 'worklet'\n let delayMs: TransitionConfig['delay'] = defaultDelay\n\n if (transition[key as keyof Animate]?.delay != null) {\n delayMs = transition[key as keyof Animate]?.delay\n } else if (transition?.delay != null) {\n delayMs = transition.delay\n }\n\n return {\n delayMs,\n }\n}\n\ntype MotiTransition<A> = any\ntype Transforms = PerpectiveTransform &\n RotateTransform &\n RotateXTransform &\n RotateYTransform &\n RotateZTransform &\n ScaleTransform &\n ScaleXTransform &\n ScaleYTransform &\n TranslateXTransform &\n TranslateYTransform &\n SkewXTransform &\n SkewYTransform\ntype TransitionConfigWithoutRepeats = (\n | ({ type?: 'spring' } & WithSpringConfig)\n | ({ type: 'timing' } & WithTimingConfig)\n | ({ type: 'decay' } & WithDecayConfig)\n) & {\n delay?: number\n}\n\ntype TransitionConfig = TransitionConfigWithoutRepeats & {\n /**\n * Number of times this animation should repeat. To make it infinite, use the `loop` boolean.\n *\n * Default: `0`\n *\n * It's worth noting that this value isn't *exactly* a `repeat`. Instead, it uses Reanimated's `withRepeat` function under the hood, which repeats back to the **previous value**. If you want a repeated animation, I recommend setting it to `true` from the start, and make sure you have a `from` value.\n *\n * As a result, this value cannot be reliably changed on the fly. If you would like animations to repeat based on the `from` value, `repeat` must be a number when the component initializes. You can set it to `0` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n repeat?: number\n /**\n * Setting this to `true` is the same as `repeat: Infinity`\n *\n * Default: `false`\n *\n * Note: this value cannot be set on the fly. If you would like animations to repeat based on the `from` value, it must be `true` when the component initializes. You can set it to `false` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n loop?: boolean\n /**\n * Whether or not the animation repetition should alternate in direction.\n *\n * By default, this is `true`.\n *\n * If `false`, any animations with `loop` or `repeat` will not go back and forth. Instead, they will go from 0 -> 1, and again from 0 -> 1.\n *\n * If `true`, then animations will go 0 -> 1 -> 0.\n *\n * Setting this to `true` is like setting `animationDirection: alternate` in CSS.\n */\n repeatReverse?: boolean\n}\n\nconst isColor = (styleKey: string) => {\n 'worklet'\n return [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderEndColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderStartColor',\n 'borderTopColor',\n 'color',\n ].includes(styleKey)\n}\n\nfunction animationConfig<Animate>(\n styleProp: string,\n transition: MotiTransition<Animate> | undefined\n) {\n 'worklet'\n const key = styleProp\n let repeatCount = 0\n let repeatReverse = true\n let animationType: Required<TransitionConfig>['type'] = 'spring'\n\n if (isColor(key) || key === 'opacity') {\n animationType = 'timing'\n }\n\n // say that we're looking at `width`\n // first, check if we have transition.width.type\n if (transition[key as keyof Animate]?.type) {\n animationType = (transition as any)[key]?.type\n } else if (transition?.type) {\n // otherwise, fallback to transition.type\n animationType = transition.type\n }\n\n const loop = transition[key as keyof Animate]?.loop ?? transition?.loop\n\n if (loop != null) {\n repeatCount = loop ? -1 : 0\n }\n\n if (transition[key as keyof Animate]?.repeat != null) {\n repeatCount = transition[key as keyof Animate]?.repeat\n } else if (transition?.repeat != null) {\n repeatCount = transition.repeat\n }\n\n if (transition[key as keyof Animate]?.repeatReverse != null) {\n repeatReverse = transition[key as keyof Animate]?.repeatReverse\n } else if (transition?.repeatReverse != null) {\n repeatReverse = transition.repeatReverse\n }\n\n let config = {}\n // so sad, but fix it later :(\n let animation = (...props: any): any => props\n\n if (animationType === 'timing') {\n const duration =\n (transition[key as keyof Animate] as WithTimingConfig)?.duration ??\n (transition as WithTimingConfig)?.duration\n\n const easing =\n (transition[key as keyof Animate] as WithTimingConfig)?.easing ??\n (transition as WithTimingConfig)?.easing\n\n if (easing) {\n config['easing'] = easing\n }\n if (duration != null) {\n config['duration'] = duration\n }\n animation = withTiming\n } else if (animationType === 'spring') {\n animation = withSpring\n config = {} as WithSpringConfig\n configKeys.forEach((configKey) => {\n 'worklet'\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n } else if (animationType === 'decay') {\n animation = withDecay\n config = {\n velocity: 2,\n deceleration: 2,\n }\n const configKeys: (keyof WithDecayConfig)[] = [\n 'clamp',\n 'velocity',\n 'deceleration',\n 'velocityFactor',\n ]\n configKeys.forEach((configKey) => {\n 'worklet'\n // is this necessary ^ don't think so...?\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n }\n\n return {\n animation,\n config,\n repeatReverse,\n repeatCount,\n shouldRepeat: !!repeatCount,\n }\n}\n\nconst configKeys: (keyof WithSpringConfig)[] = [\n 'damping',\n 'mass',\n 'overshootClamping',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'stiffness',\n 'velocity',\n]\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { AnimatePresenceContext, useEntering } from '@tamagui/animate-presence'\nimport { AnimationDriver } from '@tamagui/core'\nimport { useCallback, useContext, useEffect, useMemo } from 'react'\nimport Animated, {\n WithDecayConfig,\n WithSpringConfig,\n WithTimingConfig,\n runOnJS,\n useAnimatedStyle,\n withDecay,\n withDelay,\n withRepeat,\n withSpring,\n withTiming,\n} from 'react-native-reanimated'\n\ntype AnimationsConfig<A extends Object = any> = {\n [Key in keyof A]: AnimationConfig\n}\n\ntype AnimationConfig =\n | ({ type: 'timing'; loop?: number } & WithTimingConfig)\n | ({ type: 'spring'; loop?: number } & WithSpringConfig)\n | ({ type: 'decay'; loop?: number } & WithDecayConfig)\n// | ({ type: 'transition' } & TransitionProps)\n\nconst AnimatedView = Animated.View\nconst AnimatedText = Animated.Text\n\nAnimatedView['displayName'] = 'AnimatedView'\nAnimatedText['displayName'] = 'AnimatedText'\n\nexport function createAnimations<A extends AnimationsConfig>(animations: A): AnimationDriver<A> {\n return {\n avoidClasses: true,\n animations,\n View: AnimatedView,\n Text: AnimatedText,\n useAnimations: (props, helpers) => {\n const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers\n const [isEntering, safeToUnmount] = useEntering()\n const presence = useContext(AnimatePresenceContext)\n\n const exitStyle = presence?.exitVariant\n ? staticConfig.variantsParsed?.[presence.exitVariant]?.true || pseudos.exitStyle\n : pseudos.exitStyle\n\n const reanimatedOnDidAnimated = useCallback<NonNullable<typeof onDidAnimate>>(\n (...args) => {\n onDidAnimate?.(...args)\n },\n [onDidAnimate]\n )\n\n const all = getStyle({\n isEntering,\n exitVariant: presence?.exitVariant,\n enterVariant: presence?.enterVariant,\n })\n const [animatedStyles, nonAnimatedStyle] = [{}, {}]\n const animatedStyleKey = {\n transform: true,\n opacity: true,\n }\n for (const key of Object.keys(all)) {\n if (animatedStyleKey[key]) {\n animatedStyles[key] = all[key]\n } else {\n nonAnimatedStyle[key] = all[key]\n }\n }\n\n const args = [\n JSON.stringify(animatedStyles),\n state.mounted,\n state.hover,\n state.press,\n state.pressIn,\n state.focus,\n delay,\n isEntering,\n onDidAnimate,\n reanimatedOnDidAnimated,\n presence?.exitVariant,\n presence?.enterVariant,\n ]\n\n const animatedStyle = useAnimatedStyle(() => {\n const style = animatedStyles\n\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = isEntering === false\n const transition = animations[props.animation]\n\n const exitingStyleProps: Record<string, boolean> = {}\n if (exitStyle) {\n for (const key of Object.keys(exitStyle)) {\n exitingStyleProps[key] = true\n }\n }\n\n for (const key in style) {\n const value = style[key]\n const aconf = animationConfig(key, transition)\n const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf\n\n const callback: (completed: boolean, value?: any) => void = (completed, recentValue) => {\n runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {\n attemptedValue: value,\n })\n if (isExiting) {\n exitingStyleProps[key] = false\n const areStylesExiting = Object.values(exitingStyleProps).some(Boolean)\n // if this is true, then we've finished our exit animations\n if (!areStylesExiting) {\n if (safeToUnmount) {\n runOnJS(safeToUnmount)()\n }\n }\n }\n }\n\n let { delayMs = null } = animationDelay(key, transition, delay)\n\n if (key === 'transform') {\n if (!Array.isArray(value)) {\n console.error(`Invalid transform value. Needs to be an array.`)\n continue\n }\n\n for (const transformObject of value) {\n const key = Object.keys(transformObject)[0]\n const transformValue = transformObject[key]\n let finalValue = animation(transformValue, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n final['transform'].push({\n [key]: finalValue,\n })\n }\n continue\n }\n\n if (typeof value === 'object') {\n // shadows\n final[key] = {}\n for (const innerStyleKey of Object.keys(value || {})) {\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n final[key][innerStyleKey] = withDelay(delayMs, finalValue)\n } else {\n final[key][innerStyleKey] = finalValue\n }\n }\n continue\n }\n\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null && typeof delayMs === 'number') {\n final[key] = withDelay(delayMs, finalValue)\n } else {\n final[key] = finalValue\n }\n\n // end for (key in mergedStyles)\n }\n\n if (process.env.NODE_ENV === 'development' && props['debug']) {\n console.log('animation style', final)\n }\n\n return final\n }, args)\n\n return useMemo(() => {\n return {\n style: [nonAnimatedStyle, animatedStyle],\n }\n }, args)\n },\n }\n}\n\nfunction animationDelay(\n key: string,\n transition: AnimationConfig | undefined,\n defaultDelay?: number\n) {\n 'worklet'\n if (\n !transition ||\n !transition[key] ||\n transition[key].delayMs === undefined ||\n transition[key].delayMs === null\n ) {\n return {\n delayMs: null,\n }\n }\n return {\n delayMs: transition[key].delayMs as TransitionConfig['delay'],\n }\n}\n\ntype TransitionConfigWithoutRepeats = (\n | ({ type?: 'spring' } & WithSpringConfig)\n | ({ type: 'timing' } & WithTimingConfig)\n | ({ type: 'decay' } & WithDecayConfig)\n) & {\n delay?: number\n}\n\ntype TransitionConfig = TransitionConfigWithoutRepeats & {\n /**\n * Number of times this animation should repeat. To make it infinite, use the `loop` boolean.\n *\n * Default: `0`\n *\n * It's worth noting that this value isn't *exactly* a `repeat`. Instead, it uses Reanimated's `withRepeat` function under the hood, which repeats back to the **previous value**. If you want a repeated animation, I recommend setting it to `true` from the start, and make sure you have a `from` value.\n *\n * As a result, this value cannot be reliably changed on the fly. If you would like animations to repeat based on the `from` value, `repeat` must be a number when the component initializes. You can set it to `0` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n repeat?: number\n /**\n * Setting this to `true` is the same as `repeat: Infinity`\n *\n * Default: `false`\n *\n * Note: this value cannot be set on the fly. If you would like animations to repeat based on the `from` value, it must be `true` when the component initializes. You can set it to `false` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n loop?: boolean\n /**\n * Whether or not the animation repetition should alternate in direction.\n *\n * By default, this is `true`.\n *\n * If `false`, any animations with `loop` or `repeat` will not go back and forth. Instead, they will go from 0 -> 1, and again from 0 -> 1.\n *\n * If `true`, then animations will go 0 -> 1 -> 0.\n *\n * Setting this to `true` is like setting `animationDirection: alternate` in CSS.\n */\n repeatReverse?: boolean\n}\n\nconst isColor = (styleKey: string) => {\n 'worklet'\n return [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderEndColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderStartColor',\n 'borderTopColor',\n 'color',\n ].includes(styleKey)\n}\n\nfunction animationConfig<Animate>(styleProp: string, transition: AnimationConfig | undefined) {\n 'worklet'\n const key = styleProp\n let repeatCount = 0\n let repeatReverse = true\n let animationType: Required<TransitionConfig>['type'] = 'spring'\n\n if (isColor(key) || key === 'opacity') {\n animationType = 'timing'\n }\n\n if (!transition) {\n return {}\n }\n\n // say that we're looking at `width`\n // first, check if we have transition.width.type\n if (transition[key]?.type) {\n animationType = transition[key]?.type\n } else if (transition.type) {\n // otherwise, fallback to transition.type\n animationType = transition.type\n }\n\n const loop = transition[key]?.loop || transition.loop || null\n\n if (loop != null) {\n repeatCount = loop ? -1 : 0\n }\n\n // if (transition[key]?.repeat != null) {\n // repeatCount = transition[key]?.repeat\n // } else if (transition?.repeat != null) {\n // repeatCount = transition.repeat\n // }\n\n // if (transition[key]?.repeatReverse != null) {\n // repeatReverse = transition[key]?.repeatReverse\n // } else if (transition?.repeatReverse != null) {\n // repeatReverse = transition.repeatReverse\n // }\n\n let config = {}\n // so sad, but fix it later :(\n let animation: any\n\n if (animationType === 'timing') {\n const duration =\n (transition[key] as WithTimingConfig)?.duration ?? (transition as WithTimingConfig)?.duration\n\n const easing =\n (transition[key] as WithTimingConfig)?.easing ?? (transition as WithTimingConfig)?.easing\n\n if (easing) {\n config['easing'] = easing\n }\n if (duration != null) {\n config['duration'] = duration\n }\n animation = withTiming\n } else if (animationType === 'spring') {\n animation = withSpring\n config = {} as WithSpringConfig\n configKeys.forEach((configKey) => {\n 'worklet'\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n } else if (animationType === 'decay') {\n animation = withDecay\n config = {\n velocity: 2,\n deceleration: 2,\n }\n const configKeys: (keyof WithDecayConfig)[] = [\n 'clamp',\n 'velocity',\n 'deceleration',\n 'velocityFactor',\n ]\n configKeys.forEach((configKey) => {\n 'worklet'\n // is this necessary ^ don't think so...?\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n }\n\n return {\n animation,\n config,\n repeatReverse,\n repeatCount,\n shouldRepeat: !!repeatCount,\n }\n}\n\nconst configKeys: (keyof WithSpringConfig)[] = [\n 'damping',\n 'mass',\n 'overshootClamping',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'stiffness',\n 'velocity',\n]\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,11 +1,10 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { AnimatePresenceContext, usePresence } from "@tamagui/animate-presence";
4
- import { useCallback, useContext, useEffect } from "react";
3
+ import { AnimatePresenceContext, useEntering } from "@tamagui/animate-presence";
4
+ import { useCallback, useContext, useMemo } from "react";
5
5
  import Animated, {
6
6
  runOnJS,
7
7
  useAnimatedStyle,
8
- useSharedValue,
9
8
  withDecay,
10
9
  withDelay,
11
10
  withRepeat,
@@ -23,64 +22,73 @@ function createAnimations(animations) {
23
22
  View: AnimatedView,
24
23
  Text: AnimatedText,
25
24
  useAnimations: (props, helpers) => {
26
- const { styleKey, mergedStyles, state, pseudos, onDidAnimate, delay } = helpers;
27
- const [isPresent, safeToUnmount] = usePresence();
25
+ var _a, _b;
26
+ const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers;
27
+ const [isEntering, safeToUnmount] = useEntering();
28
28
  const presence = useContext(AnimatePresenceContext);
29
- const isMounted = useSharedValue(false);
30
- const isHovering = useSharedValue(false);
31
- const hasExitStyle = !!pseudos.exitStyle;
32
- const custom = useCallback(() => {
33
- "worklet";
34
- return presence == null ? void 0 : presence.custom;
35
- }, [presence]);
36
- const reanimatedOnDidAnimated = useCallback((...args) => {
37
- onDidAnimate == null ? void 0 : onDidAnimate(...args);
29
+ const exitStyle = (presence == null ? void 0 : presence.exitVariant) ? ((_b = (_a = staticConfig.variantsParsed) == null ? void 0 : _a[presence.exitVariant]) == null ? void 0 : _b.true) || pseudos.exitStyle : pseudos.exitStyle;
30
+ const reanimatedOnDidAnimated = useCallback((...args2) => {
31
+ onDidAnimate == null ? void 0 : onDidAnimate(...args2);
38
32
  }, [onDidAnimate]);
39
- const reanimatedSafeToUnmount = useCallback(() => {
40
- safeToUnmount == null ? void 0 : safeToUnmount();
41
- }, [safeToUnmount]);
42
- useEffect(() => {
43
- isMounted.value = true;
44
- }, [isMounted]);
45
- useEffect(() => {
46
- isHovering.value = true;
47
- }, [state.hover]);
48
- useEffect(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
49
- if (!isPresent && !hasExitStyle) {
50
- reanimatedSafeToUnmount();
33
+ const all = getStyle({
34
+ isEntering,
35
+ exitVariant: presence == null ? void 0 : presence.exitVariant,
36
+ enterVariant: presence == null ? void 0 : presence.enterVariant
37
+ });
38
+ const [animatedStyles, nonAnimatedStyle] = [{}, {}];
39
+ const animatedStyleKey = {
40
+ transform: true,
41
+ opacity: true
42
+ };
43
+ for (const key of Object.keys(all)) {
44
+ if (animatedStyleKey[key]) {
45
+ animatedStyles[key] = all[key];
46
+ } else {
47
+ nonAnimatedStyle[key] = all[key];
51
48
  }
52
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
49
+ }
50
+ const args = [
51
+ JSON.stringify(animatedStyles),
52
+ state.mounted,
53
+ state.hover,
54
+ state.press,
55
+ state.pressIn,
56
+ state.focus,
57
+ delay,
58
+ isEntering,
59
+ onDidAnimate,
60
+ reanimatedOnDidAnimated,
61
+ presence == null ? void 0 : presence.exitVariant,
62
+ presence == null ? void 0 : presence.enterVariant
63
+ ];
53
64
  const animatedStyle = useAnimatedStyle(() => {
54
- var _a, _b, _c;
55
- isHovering.value;
56
- const style = mergedStyles({
57
- isExiting: !isPresent
58
- });
65
+ const style = animatedStyles;
59
66
  const final = {
60
67
  transform: []
61
68
  };
62
- const isExiting = !isPresent && !!pseudos.exitStyle;
69
+ const isExiting = isEntering === false;
63
70
  const transition = animations[props.animation];
64
71
  const exitingStyleProps = {};
65
- if (pseudos.exitStyle) {
66
- for (const key of Object.keys(pseudos.exitStyle)) {
72
+ if (exitStyle) {
73
+ for (const key of Object.keys(exitStyle)) {
67
74
  exitingStyleProps[key] = true;
68
75
  }
69
76
  }
70
77
  for (const key in style) {
71
78
  const value = style[key];
72
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
79
+ const aconf = animationConfig(key, transition);
80
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
73
81
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
74
- if (onDidAnimate) {
75
- runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
76
- attemptedValue: value
77
- });
78
- }
82
+ runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
83
+ attemptedValue: value
84
+ });
79
85
  if (isExiting) {
80
86
  exitingStyleProps[key] = false;
81
87
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
82
88
  if (!areStylesExiting) {
83
- runOnJS(reanimatedSafeToUnmount)();
89
+ if (safeToUnmount) {
90
+ runOnJS(safeToUnmount)();
91
+ }
84
92
  }
85
93
  }
86
94
  }, "callback");
@@ -93,22 +101,13 @@ function createAnimations(animations) {
93
101
  for (const transformObject of value) {
94
102
  const key2 = Object.keys(transformObject)[0];
95
103
  const transformValue = transformObject[key2];
96
- const transform = {};
97
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
98
- delayMs = (_c = (_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) != null ? _c : null;
99
- }
100
104
  let finalValue2 = animation(transformValue, config, callback);
101
105
  if (shouldRepeat) {
102
106
  finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
103
107
  }
104
- if (delayMs != null) {
105
- transform[key2] = withDelay(delayMs, finalValue2);
106
- } else {
107
- transform[key2] = finalValue2;
108
- }
109
- if (Object.keys(transform).length) {
110
- final["transform"].push(transform);
111
- }
108
+ final["transform"].push({
109
+ [key2]: finalValue2
110
+ });
112
111
  }
113
112
  continue;
114
113
  }
@@ -138,38 +137,28 @@ function createAnimations(animations) {
138
137
  }
139
138
  }
140
139
  if (process.env.NODE_ENV === "development" && props["debug"]) {
141
- console.log("animation style", JSON.stringify(final, null, 2));
140
+ console.log("animation style", final);
142
141
  }
143
142
  return final;
144
- }, [
145
- styleKey,
146
- custom,
147
- delay,
148
- hasExitStyle,
149
- isMounted,
150
- isPresent,
151
- onDidAnimate,
152
- reanimatedOnDidAnimated,
153
- reanimatedSafeToUnmount
154
- ]);
155
- return {
156
- style: animatedStyle
157
- };
143
+ }, args);
144
+ return useMemo(() => {
145
+ return {
146
+ style: [nonAnimatedStyle, animatedStyle]
147
+ };
148
+ }, args);
158
149
  }
159
150
  };
160
151
  }
161
152
  __name(createAnimations, "createAnimations");
162
153
  function animationDelay(key, transition, defaultDelay) {
163
- var _a, _b;
164
154
  "worklet";
165
- let delayMs = defaultDelay;
166
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
167
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
168
- } else if ((transition == null ? void 0 : transition.delay) != null) {
169
- delayMs = transition.delay;
155
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
156
+ return {
157
+ delayMs: null
158
+ };
170
159
  }
171
160
  return {
172
- delayMs
161
+ delayMs: transition[key].delayMs
173
162
  };
174
163
  }
175
164
  __name(animationDelay, "animationDelay");
@@ -188,7 +177,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
188
177
  ].includes(styleKey);
189
178
  }, "isColor");
190
179
  function animationConfig(styleProp, transition) {
191
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
180
+ var _a, _b, _c, _d, _e, _f, _g;
192
181
  "worklet";
193
182
  const key = styleProp;
194
183
  let repeatCount = 0;
@@ -197,30 +186,23 @@ function animationConfig(styleProp, transition) {
197
186
  if (isColor(key) || key === "opacity") {
198
187
  animationType = "timing";
199
188
  }
189
+ if (!transition) {
190
+ return {};
191
+ }
200
192
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
201
193
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
202
- } else if (transition == null ? void 0 : transition.type) {
194
+ } else if (transition.type) {
203
195
  animationType = transition.type;
204
196
  }
205
- const loop = (_d = (_c = transition[key]) == null ? void 0 : _c.loop) != null ? _d : transition == null ? void 0 : transition.loop;
197
+ const loop = ((_c = transition[key]) == null ? void 0 : _c.loop) || transition.loop || null;
206
198
  if (loop != null) {
207
199
  repeatCount = loop ? -1 : 0;
208
200
  }
209
- if (((_e = transition[key]) == null ? void 0 : _e.repeat) != null) {
210
- repeatCount = (_f = transition[key]) == null ? void 0 : _f.repeat;
211
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
212
- repeatCount = transition.repeat;
213
- }
214
- if (((_g = transition[key]) == null ? void 0 : _g.repeatReverse) != null) {
215
- repeatReverse = (_h = transition[key]) == null ? void 0 : _h.repeatReverse;
216
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
217
- repeatReverse = transition.repeatReverse;
218
- }
219
201
  let config = {};
220
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
202
+ let animation;
221
203
  if (animationType === "timing") {
222
- const duration = (_j = (_i = transition[key]) == null ? void 0 : _i.duration) != null ? _j : transition == null ? void 0 : transition.duration;
223
- const easing = (_l = (_k = transition[key]) == null ? void 0 : _k.easing) != null ? _l : transition == null ? void 0 : transition.easing;
204
+ const duration = (_e = (_d = transition[key]) == null ? void 0 : _d.duration) != null ? _e : transition == null ? void 0 : transition.duration;
205
+ const easing = (_g = (_f = transition[key]) == null ? void 0 : _f.easing) != null ? _g : transition == null ? void 0 : transition.easing;
224
206
  if (easing) {
225
207
  config["easing"] = easing;
226
208
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAnimations.tsx"],
4
- "sourcesContent": ["import { AnimatePresenceContext, usePresence } from '@tamagui/animate-presence'\nimport { AnimationDriver, UseAnimationHelpers, UseAnimationProps } from '@tamagui/core'\nimport { createContext, useCallback, useContext, useEffect } from 'react'\nimport {\n PerpectiveTransform,\n RotateTransform,\n RotateXTransform,\n RotateYTransform,\n RotateZTransform,\n ScaleTransform,\n ScaleXTransform,\n ScaleYTransform,\n SkewXTransform,\n SkewYTransform,\n TranslateXTransform,\n TranslateYTransform,\n} from 'react-native'\nimport Animated, {\n WithDecayConfig,\n WithSpringConfig,\n WithTimingConfig,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withDecay,\n withDelay,\n withRepeat,\n withSpring,\n withTiming,\n} from 'react-native-reanimated'\n\nconst AnimatedView = Animated.View\nconst AnimatedText = Animated.Text\n\nAnimatedView['displayName'] = 'AnimatedView'\nAnimatedText['displayName'] = 'AnimatedText'\n\nexport function createAnimations<A extends Object>(animations: A): AnimationDriver<A> {\n return {\n avoidClasses: true,\n animations,\n View: AnimatedView,\n Text: AnimatedText,\n useAnimations: (props: UseAnimationProps, helpers: UseAnimationHelpers) => {\n const { styleKey, mergedStyles, state, pseudos, onDidAnimate, delay } = helpers\n const [isPresent, safeToUnmount] = usePresence()\n const presence = useContext(AnimatePresenceContext)\n const isMounted = useSharedValue(false)\n const isHovering = useSharedValue(false)\n const hasExitStyle = !!pseudos.exitStyle\n const custom = useCallback(() => {\n 'worklet'\n return presence?.custom\n }, [presence])\n\n const reanimatedOnDidAnimated = useCallback<NonNullable<typeof onDidAnimate>>(\n (...args) => {\n onDidAnimate?.(...args)\n },\n [onDidAnimate]\n )\n const reanimatedSafeToUnmount = useCallback(() => {\n safeToUnmount?.()\n }, [safeToUnmount])\n\n useEffect(() => {\n isMounted.value = true\n }, [isMounted])\n\n useEffect(() => {\n isHovering.value = true\n }, [state.hover])\n\n useEffect(\n function allowUnMountIfMissingExit() {\n if (!isPresent && !hasExitStyle) {\n reanimatedSafeToUnmount()\n }\n },\n [hasExitStyle, isPresent, reanimatedSafeToUnmount]\n )\n\n const animatedStyle = useAnimatedStyle(() => {\n // read this testing effect\n isHovering.value\n\n const style = mergedStyles({\n isExiting: !isPresent,\n })\n\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = !isPresent && !!pseudos.exitStyle\n const transition = animations[props.animation]\n\n const exitingStyleProps: Record<string, boolean> = {}\n if (pseudos.exitStyle) {\n for (const key of Object.keys(pseudos.exitStyle)) {\n exitingStyleProps[key] = true\n }\n }\n\n for (const key in style) {\n const value = style[key]\n const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(\n key,\n transition\n )\n\n const callback: (completed: boolean, value?: any) => void = (completed, recentValue) => {\n if (onDidAnimate) {\n runOnJS(reanimatedOnDidAnimated)(key as any, completed, recentValue, {\n attemptedValue: value,\n })\n }\n if (isExiting) {\n exitingStyleProps[key] = false\n const areStylesExiting = Object.values(exitingStyleProps).some(Boolean)\n // if this is true, then we've finished our exit animations\n if (!areStylesExiting) {\n runOnJS(reanimatedSafeToUnmount)()\n }\n }\n }\n\n let { delayMs = null } = animationDelay(key, transition, delay)\n\n if (key === 'transform') {\n if (!Array.isArray(value)) {\n console.error(`Invalid transform value. Needs to be an array.`)\n continue\n }\n\n for (const transformObject of value) {\n const key = Object.keys(transformObject)[0]\n const transformValue = transformObject[key]\n const transform = {} as any\n if (transition?.[key]?.delay != null) {\n delayMs = transition?.[key]?.delay ?? null\n }\n let finalValue = animation(transformValue, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n transform[key] = withDelay(delayMs, finalValue)\n } else {\n transform[key] = finalValue\n }\n if (Object.keys(transform).length) {\n final['transform'].push(transform)\n }\n }\n continue\n }\n\n if (typeof value === 'object') {\n // shadows\n final[key] = {}\n for (const innerStyleKey of Object.keys(value || {})) {\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n final[key][innerStyleKey] = withDelay(delayMs, finalValue)\n } else {\n final[key][innerStyleKey] = finalValue\n }\n }\n continue\n }\n\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null && typeof delayMs === 'number') {\n final[key] = withDelay(delayMs, finalValue)\n } else {\n final[key] = finalValue\n }\n\n // end for (key in mergedStyles)\n }\n\n if (process.env.NODE_ENV === 'development' && props['debug']) {\n console.log('animation style', JSON.stringify(final, null, 2))\n }\n\n return final\n }, [\n styleKey,\n custom,\n delay,\n // disableInitialAnimation,\n // exitProp,\n // exitTransitionProp,\n // fromProp,\n hasExitStyle,\n isMounted,\n isPresent,\n onDidAnimate,\n reanimatedOnDidAnimated,\n reanimatedSafeToUnmount,\n // state,\n // stylePriority,\n // transitionProp,\n ])\n\n return {\n style: animatedStyle,\n }\n },\n }\n}\n\nfunction animationDelay<Animate>(\n key: string,\n transition: MotiTransition<Animate> | undefined,\n defaultDelay?: number\n) {\n 'worklet'\n let delayMs: TransitionConfig['delay'] = defaultDelay\n\n if (transition[key as keyof Animate]?.delay != null) {\n delayMs = transition[key as keyof Animate]?.delay\n } else if (transition?.delay != null) {\n delayMs = transition.delay\n }\n\n return {\n delayMs,\n }\n}\n\ntype MotiTransition<A> = any\ntype Transforms = PerpectiveTransform &\n RotateTransform &\n RotateXTransform &\n RotateYTransform &\n RotateZTransform &\n ScaleTransform &\n ScaleXTransform &\n ScaleYTransform &\n TranslateXTransform &\n TranslateYTransform &\n SkewXTransform &\n SkewYTransform\ntype TransitionConfigWithoutRepeats = (\n | ({ type?: 'spring' } & WithSpringConfig)\n | ({ type: 'timing' } & WithTimingConfig)\n | ({ type: 'decay' } & WithDecayConfig)\n) & {\n delay?: number\n}\n\ntype TransitionConfig = TransitionConfigWithoutRepeats & {\n /**\n * Number of times this animation should repeat. To make it infinite, use the `loop` boolean.\n *\n * Default: `0`\n *\n * It's worth noting that this value isn't *exactly* a `repeat`. Instead, it uses Reanimated's `withRepeat` function under the hood, which repeats back to the **previous value**. If you want a repeated animation, I recommend setting it to `true` from the start, and make sure you have a `from` value.\n *\n * As a result, this value cannot be reliably changed on the fly. If you would like animations to repeat based on the `from` value, `repeat` must be a number when the component initializes. You can set it to `0` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n repeat?: number\n /**\n * Setting this to `true` is the same as `repeat: Infinity`\n *\n * Default: `false`\n *\n * Note: this value cannot be set on the fly. If you would like animations to repeat based on the `from` value, it must be `true` when the component initializes. You can set it to `false` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n loop?: boolean\n /**\n * Whether or not the animation repetition should alternate in direction.\n *\n * By default, this is `true`.\n *\n * If `false`, any animations with `loop` or `repeat` will not go back and forth. Instead, they will go from 0 -> 1, and again from 0 -> 1.\n *\n * If `true`, then animations will go 0 -> 1 -> 0.\n *\n * Setting this to `true` is like setting `animationDirection: alternate` in CSS.\n */\n repeatReverse?: boolean\n}\n\nconst isColor = (styleKey: string) => {\n 'worklet'\n return [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderEndColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderStartColor',\n 'borderTopColor',\n 'color',\n ].includes(styleKey)\n}\n\nfunction animationConfig<Animate>(\n styleProp: string,\n transition: MotiTransition<Animate> | undefined\n) {\n 'worklet'\n const key = styleProp\n let repeatCount = 0\n let repeatReverse = true\n let animationType: Required<TransitionConfig>['type'] = 'spring'\n\n if (isColor(key) || key === 'opacity') {\n animationType = 'timing'\n }\n\n // say that we're looking at `width`\n // first, check if we have transition.width.type\n if (transition[key as keyof Animate]?.type) {\n animationType = (transition as any)[key]?.type\n } else if (transition?.type) {\n // otherwise, fallback to transition.type\n animationType = transition.type\n }\n\n const loop = transition[key as keyof Animate]?.loop ?? transition?.loop\n\n if (loop != null) {\n repeatCount = loop ? -1 : 0\n }\n\n if (transition[key as keyof Animate]?.repeat != null) {\n repeatCount = transition[key as keyof Animate]?.repeat\n } else if (transition?.repeat != null) {\n repeatCount = transition.repeat\n }\n\n if (transition[key as keyof Animate]?.repeatReverse != null) {\n repeatReverse = transition[key as keyof Animate]?.repeatReverse\n } else if (transition?.repeatReverse != null) {\n repeatReverse = transition.repeatReverse\n }\n\n let config = {}\n // so sad, but fix it later :(\n let animation = (...props: any): any => props\n\n if (animationType === 'timing') {\n const duration =\n (transition[key as keyof Animate] as WithTimingConfig)?.duration ??\n (transition as WithTimingConfig)?.duration\n\n const easing =\n (transition[key as keyof Animate] as WithTimingConfig)?.easing ??\n (transition as WithTimingConfig)?.easing\n\n if (easing) {\n config['easing'] = easing\n }\n if (duration != null) {\n config['duration'] = duration\n }\n animation = withTiming\n } else if (animationType === 'spring') {\n animation = withSpring\n config = {} as WithSpringConfig\n configKeys.forEach((configKey) => {\n 'worklet'\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n } else if (animationType === 'decay') {\n animation = withDecay\n config = {\n velocity: 2,\n deceleration: 2,\n }\n const configKeys: (keyof WithDecayConfig)[] = [\n 'clamp',\n 'velocity',\n 'deceleration',\n 'velocityFactor',\n ]\n configKeys.forEach((configKey) => {\n 'worklet'\n // is this necessary ^ don't think so...?\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n }\n\n return {\n animation,\n config,\n repeatReverse,\n repeatCount,\n shouldRepeat: !!repeatCount,\n }\n}\n\nconst configKeys: (keyof WithSpringConfig)[] = [\n 'damping',\n 'mass',\n 'overshootClamping',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'stiffness',\n 'velocity',\n]\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { AnimatePresenceContext, useEntering } from '@tamagui/animate-presence'\nimport { AnimationDriver } from '@tamagui/core'\nimport { useCallback, useContext, useEffect, useMemo } from 'react'\nimport Animated, {\n WithDecayConfig,\n WithSpringConfig,\n WithTimingConfig,\n runOnJS,\n useAnimatedStyle,\n withDecay,\n withDelay,\n withRepeat,\n withSpring,\n withTiming,\n} from 'react-native-reanimated'\n\ntype AnimationsConfig<A extends Object = any> = {\n [Key in keyof A]: AnimationConfig\n}\n\ntype AnimationConfig =\n | ({ type: 'timing'; loop?: number } & WithTimingConfig)\n | ({ type: 'spring'; loop?: number } & WithSpringConfig)\n | ({ type: 'decay'; loop?: number } & WithDecayConfig)\n// | ({ type: 'transition' } & TransitionProps)\n\nconst AnimatedView = Animated.View\nconst AnimatedText = Animated.Text\n\nAnimatedView['displayName'] = 'AnimatedView'\nAnimatedText['displayName'] = 'AnimatedText'\n\nexport function createAnimations<A extends AnimationsConfig>(animations: A): AnimationDriver<A> {\n return {\n avoidClasses: true,\n animations,\n View: AnimatedView,\n Text: AnimatedText,\n useAnimations: (props, helpers) => {\n const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers\n const [isEntering, safeToUnmount] = useEntering()\n const presence = useContext(AnimatePresenceContext)\n\n const exitStyle = presence?.exitVariant\n ? staticConfig.variantsParsed?.[presence.exitVariant]?.true || pseudos.exitStyle\n : pseudos.exitStyle\n\n const reanimatedOnDidAnimated = useCallback<NonNullable<typeof onDidAnimate>>(\n (...args) => {\n onDidAnimate?.(...args)\n },\n [onDidAnimate]\n )\n\n const all = getStyle({\n isEntering,\n exitVariant: presence?.exitVariant,\n enterVariant: presence?.enterVariant,\n })\n const [animatedStyles, nonAnimatedStyle] = [{}, {}]\n const animatedStyleKey = {\n transform: true,\n opacity: true,\n }\n for (const key of Object.keys(all)) {\n if (animatedStyleKey[key]) {\n animatedStyles[key] = all[key]\n } else {\n nonAnimatedStyle[key] = all[key]\n }\n }\n\n const args = [\n JSON.stringify(animatedStyles),\n state.mounted,\n state.hover,\n state.press,\n state.pressIn,\n state.focus,\n delay,\n isEntering,\n onDidAnimate,\n reanimatedOnDidAnimated,\n presence?.exitVariant,\n presence?.enterVariant,\n ]\n\n const animatedStyle = useAnimatedStyle(() => {\n const style = animatedStyles\n\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = isEntering === false\n const transition = animations[props.animation]\n\n const exitingStyleProps: Record<string, boolean> = {}\n if (exitStyle) {\n for (const key of Object.keys(exitStyle)) {\n exitingStyleProps[key] = true\n }\n }\n\n for (const key in style) {\n const value = style[key]\n const aconf = animationConfig(key, transition)\n const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf\n\n const callback: (completed: boolean, value?: any) => void = (completed, recentValue) => {\n runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {\n attemptedValue: value,\n })\n if (isExiting) {\n exitingStyleProps[key] = false\n const areStylesExiting = Object.values(exitingStyleProps).some(Boolean)\n // if this is true, then we've finished our exit animations\n if (!areStylesExiting) {\n if (safeToUnmount) {\n runOnJS(safeToUnmount)()\n }\n }\n }\n }\n\n let { delayMs = null } = animationDelay(key, transition, delay)\n\n if (key === 'transform') {\n if (!Array.isArray(value)) {\n console.error(`Invalid transform value. Needs to be an array.`)\n continue\n }\n\n for (const transformObject of value) {\n const key = Object.keys(transformObject)[0]\n const transformValue = transformObject[key]\n let finalValue = animation(transformValue, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n final['transform'].push({\n [key]: finalValue,\n })\n }\n continue\n }\n\n if (typeof value === 'object') {\n // shadows\n final[key] = {}\n for (const innerStyleKey of Object.keys(value || {})) {\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null) {\n final[key][innerStyleKey] = withDelay(delayMs, finalValue)\n } else {\n final[key][innerStyleKey] = finalValue\n }\n }\n continue\n }\n\n let finalValue = animation(value, config, callback)\n if (shouldRepeat) {\n finalValue = withRepeat(finalValue, repeatCount, repeatReverse)\n }\n if (delayMs != null && typeof delayMs === 'number') {\n final[key] = withDelay(delayMs, finalValue)\n } else {\n final[key] = finalValue\n }\n\n // end for (key in mergedStyles)\n }\n\n if (process.env.NODE_ENV === 'development' && props['debug']) {\n console.log('animation style', final)\n }\n\n return final\n }, args)\n\n return useMemo(() => {\n return {\n style: [nonAnimatedStyle, animatedStyle],\n }\n }, args)\n },\n }\n}\n\nfunction animationDelay(\n key: string,\n transition: AnimationConfig | undefined,\n defaultDelay?: number\n) {\n 'worklet'\n if (\n !transition ||\n !transition[key] ||\n transition[key].delayMs === undefined ||\n transition[key].delayMs === null\n ) {\n return {\n delayMs: null,\n }\n }\n return {\n delayMs: transition[key].delayMs as TransitionConfig['delay'],\n }\n}\n\ntype TransitionConfigWithoutRepeats = (\n | ({ type?: 'spring' } & WithSpringConfig)\n | ({ type: 'timing' } & WithTimingConfig)\n | ({ type: 'decay' } & WithDecayConfig)\n) & {\n delay?: number\n}\n\ntype TransitionConfig = TransitionConfigWithoutRepeats & {\n /**\n * Number of times this animation should repeat. To make it infinite, use the `loop` boolean.\n *\n * Default: `0`\n *\n * It's worth noting that this value isn't *exactly* a `repeat`. Instead, it uses Reanimated's `withRepeat` function under the hood, which repeats back to the **previous value**. If you want a repeated animation, I recommend setting it to `true` from the start, and make sure you have a `from` value.\n *\n * As a result, this value cannot be reliably changed on the fly. If you would like animations to repeat based on the `from` value, `repeat` must be a number when the component initializes. You can set it to `0` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n repeat?: number\n /**\n * Setting this to `true` is the same as `repeat: Infinity`\n *\n * Default: `false`\n *\n * Note: this value cannot be set on the fly. If you would like animations to repeat based on the `from` value, it must be `true` when the component initializes. You can set it to `false` to stop it, but you won't be able to start it again. You might be better off using the sequence array API if you need to update its repetitiveness on the fly.\n */\n loop?: boolean\n /**\n * Whether or not the animation repetition should alternate in direction.\n *\n * By default, this is `true`.\n *\n * If `false`, any animations with `loop` or `repeat` will not go back and forth. Instead, they will go from 0 -> 1, and again from 0 -> 1.\n *\n * If `true`, then animations will go 0 -> 1 -> 0.\n *\n * Setting this to `true` is like setting `animationDirection: alternate` in CSS.\n */\n repeatReverse?: boolean\n}\n\nconst isColor = (styleKey: string) => {\n 'worklet'\n return [\n 'backgroundColor',\n 'borderBottomColor',\n 'borderColor',\n 'borderEndColor',\n 'borderLeftColor',\n 'borderRightColor',\n 'borderStartColor',\n 'borderTopColor',\n 'color',\n ].includes(styleKey)\n}\n\nfunction animationConfig<Animate>(styleProp: string, transition: AnimationConfig | undefined) {\n 'worklet'\n const key = styleProp\n let repeatCount = 0\n let repeatReverse = true\n let animationType: Required<TransitionConfig>['type'] = 'spring'\n\n if (isColor(key) || key === 'opacity') {\n animationType = 'timing'\n }\n\n if (!transition) {\n return {}\n }\n\n // say that we're looking at `width`\n // first, check if we have transition.width.type\n if (transition[key]?.type) {\n animationType = transition[key]?.type\n } else if (transition.type) {\n // otherwise, fallback to transition.type\n animationType = transition.type\n }\n\n const loop = transition[key]?.loop || transition.loop || null\n\n if (loop != null) {\n repeatCount = loop ? -1 : 0\n }\n\n // if (transition[key]?.repeat != null) {\n // repeatCount = transition[key]?.repeat\n // } else if (transition?.repeat != null) {\n // repeatCount = transition.repeat\n // }\n\n // if (transition[key]?.repeatReverse != null) {\n // repeatReverse = transition[key]?.repeatReverse\n // } else if (transition?.repeatReverse != null) {\n // repeatReverse = transition.repeatReverse\n // }\n\n let config = {}\n // so sad, but fix it later :(\n let animation: any\n\n if (animationType === 'timing') {\n const duration =\n (transition[key] as WithTimingConfig)?.duration ?? (transition as WithTimingConfig)?.duration\n\n const easing =\n (transition[key] as WithTimingConfig)?.easing ?? (transition as WithTimingConfig)?.easing\n\n if (easing) {\n config['easing'] = easing\n }\n if (duration != null) {\n config['duration'] = duration\n }\n animation = withTiming\n } else if (animationType === 'spring') {\n animation = withSpring\n config = {} as WithSpringConfig\n configKeys.forEach((configKey) => {\n 'worklet'\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n } else if (animationType === 'decay') {\n animation = withDecay\n config = {\n velocity: 2,\n deceleration: 2,\n }\n const configKeys: (keyof WithDecayConfig)[] = [\n 'clamp',\n 'velocity',\n 'deceleration',\n 'velocityFactor',\n ]\n configKeys.forEach((configKey) => {\n 'worklet'\n // is this necessary ^ don't think so...?\n const styleSpecificConfig = transition?.[key]?.[configKey]\n const transitionConfigForKey = transition?.[configKey]\n\n if (styleSpecificConfig != null) {\n config[configKey] = styleSpecificConfig\n } else if (transitionConfigForKey != null) {\n config[configKey] = transitionConfigForKey\n }\n })\n }\n\n return {\n animation,\n config,\n repeatReverse,\n repeatCount,\n shouldRepeat: !!repeatCount,\n }\n}\n\nconst configKeys: (keyof WithSpringConfig)[] = [\n 'damping',\n 'mass',\n 'overshootClamping',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'stiffness',\n 'velocity',\n]\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,11 +1,10 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { AnimatePresenceContext, usePresence } from "@tamagui/animate-presence";
4
- import { useCallback, useContext, useEffect } from "react";
3
+ import { AnimatePresenceContext, useEntering } from "@tamagui/animate-presence";
4
+ import { useCallback, useContext, useMemo } from "react";
5
5
  import Animated, {
6
6
  runOnJS,
7
7
  useAnimatedStyle,
8
- useSharedValue,
9
8
  withDecay,
10
9
  withDelay,
11
10
  withRepeat,
@@ -23,64 +22,73 @@ function createAnimations(animations) {
23
22
  View: AnimatedView,
24
23
  Text: AnimatedText,
25
24
  useAnimations: (props, helpers) => {
26
- const { styleKey, mergedStyles, state, pseudos, onDidAnimate, delay } = helpers;
27
- const [isPresent, safeToUnmount] = usePresence();
25
+ var _a, _b;
26
+ const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers;
27
+ const [isEntering, safeToUnmount] = useEntering();
28
28
  const presence = useContext(AnimatePresenceContext);
29
- const isMounted = useSharedValue(false);
30
- const isHovering = useSharedValue(false);
31
- const hasExitStyle = !!pseudos.exitStyle;
32
- const custom = useCallback(() => {
33
- "worklet";
34
- return presence == null ? void 0 : presence.custom;
35
- }, [presence]);
36
- const reanimatedOnDidAnimated = useCallback((...args) => {
37
- onDidAnimate == null ? void 0 : onDidAnimate(...args);
29
+ const exitStyle = (presence == null ? void 0 : presence.exitVariant) ? ((_b = (_a = staticConfig.variantsParsed) == null ? void 0 : _a[presence.exitVariant]) == null ? void 0 : _b.true) || pseudos.exitStyle : pseudos.exitStyle;
30
+ const reanimatedOnDidAnimated = useCallback((...args2) => {
31
+ onDidAnimate == null ? void 0 : onDidAnimate(...args2);
38
32
  }, [onDidAnimate]);
39
- const reanimatedSafeToUnmount = useCallback(() => {
40
- safeToUnmount == null ? void 0 : safeToUnmount();
41
- }, [safeToUnmount]);
42
- useEffect(() => {
43
- isMounted.value = true;
44
- }, [isMounted]);
45
- useEffect(() => {
46
- isHovering.value = true;
47
- }, [state.hover]);
48
- useEffect(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
49
- if (!isPresent && !hasExitStyle) {
50
- reanimatedSafeToUnmount();
33
+ const all = getStyle({
34
+ isEntering,
35
+ exitVariant: presence == null ? void 0 : presence.exitVariant,
36
+ enterVariant: presence == null ? void 0 : presence.enterVariant
37
+ });
38
+ const [animatedStyles, nonAnimatedStyle] = [{}, {}];
39
+ const animatedStyleKey = {
40
+ transform: true,
41
+ opacity: true
42
+ };
43
+ for (const key of Object.keys(all)) {
44
+ if (animatedStyleKey[key]) {
45
+ animatedStyles[key] = all[key];
46
+ } else {
47
+ nonAnimatedStyle[key] = all[key];
51
48
  }
52
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
49
+ }
50
+ const args = [
51
+ JSON.stringify(animatedStyles),
52
+ state.mounted,
53
+ state.hover,
54
+ state.press,
55
+ state.pressIn,
56
+ state.focus,
57
+ delay,
58
+ isEntering,
59
+ onDidAnimate,
60
+ reanimatedOnDidAnimated,
61
+ presence == null ? void 0 : presence.exitVariant,
62
+ presence == null ? void 0 : presence.enterVariant
63
+ ];
53
64
  const animatedStyle = useAnimatedStyle(() => {
54
- var _a, _b, _c;
55
- isHovering.value;
56
- const style = mergedStyles({
57
- isExiting: !isPresent
58
- });
65
+ const style = animatedStyles;
59
66
  const final = {
60
67
  transform: []
61
68
  };
62
- const isExiting = !isPresent && !!pseudos.exitStyle;
69
+ const isExiting = isEntering === false;
63
70
  const transition = animations[props.animation];
64
71
  const exitingStyleProps = {};
65
- if (pseudos.exitStyle) {
66
- for (const key of Object.keys(pseudos.exitStyle)) {
72
+ if (exitStyle) {
73
+ for (const key of Object.keys(exitStyle)) {
67
74
  exitingStyleProps[key] = true;
68
75
  }
69
76
  }
70
77
  for (const key in style) {
71
78
  const value = style[key];
72
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
79
+ const aconf = animationConfig(key, transition);
80
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
73
81
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
74
- if (onDidAnimate) {
75
- runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
76
- attemptedValue: value
77
- });
78
- }
82
+ runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
83
+ attemptedValue: value
84
+ });
79
85
  if (isExiting) {
80
86
  exitingStyleProps[key] = false;
81
87
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
82
88
  if (!areStylesExiting) {
83
- runOnJS(reanimatedSafeToUnmount)();
89
+ if (safeToUnmount) {
90
+ runOnJS(safeToUnmount)();
91
+ }
84
92
  }
85
93
  }
86
94
  }, "callback");
@@ -93,22 +101,13 @@ function createAnimations(animations) {
93
101
  for (const transformObject of value) {
94
102
  const key2 = Object.keys(transformObject)[0];
95
103
  const transformValue = transformObject[key2];
96
- const transform = {};
97
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
98
- delayMs = (_c = (_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) != null ? _c : null;
99
- }
100
104
  let finalValue2 = animation(transformValue, config, callback);
101
105
  if (shouldRepeat) {
102
106
  finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
103
107
  }
104
- if (delayMs != null) {
105
- transform[key2] = withDelay(delayMs, finalValue2);
106
- } else {
107
- transform[key2] = finalValue2;
108
- }
109
- if (Object.keys(transform).length) {
110
- final["transform"].push(transform);
111
- }
108
+ final["transform"].push({
109
+ [key2]: finalValue2
110
+ });
112
111
  }
113
112
  continue;
114
113
  }
@@ -138,38 +137,28 @@ function createAnimations(animations) {
138
137
  }
139
138
  }
140
139
  if (process.env.NODE_ENV === "development" && props["debug"]) {
141
- console.log("animation style", JSON.stringify(final, null, 2));
140
+ console.log("animation style", final);
142
141
  }
143
142
  return final;
144
- }, [
145
- styleKey,
146
- custom,
147
- delay,
148
- hasExitStyle,
149
- isMounted,
150
- isPresent,
151
- onDidAnimate,
152
- reanimatedOnDidAnimated,
153
- reanimatedSafeToUnmount
154
- ]);
155
- return {
156
- style: animatedStyle
157
- };
143
+ }, args);
144
+ return useMemo(() => {
145
+ return {
146
+ style: [nonAnimatedStyle, animatedStyle]
147
+ };
148
+ }, args);
158
149
  }
159
150
  };
160
151
  }
161
152
  __name(createAnimations, "createAnimations");
162
153
  function animationDelay(key, transition, defaultDelay) {
163
- var _a, _b;
164
154
  "worklet";
165
- let delayMs = defaultDelay;
166
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
167
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
168
- } else if ((transition == null ? void 0 : transition.delay) != null) {
169
- delayMs = transition.delay;
155
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
156
+ return {
157
+ delayMs: null
158
+ };
170
159
  }
171
160
  return {
172
- delayMs
161
+ delayMs: transition[key].delayMs
173
162
  };
174
163
  }
175
164
  __name(animationDelay, "animationDelay");
@@ -188,7 +177,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
188
177
  ].includes(styleKey);
189
178
  }, "isColor");
190
179
  function animationConfig(styleProp, transition) {
191
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
180
+ var _a, _b, _c, _d, _e, _f, _g;
192
181
  "worklet";
193
182
  const key = styleProp;
194
183
  let repeatCount = 0;
@@ -197,30 +186,23 @@ function animationConfig(styleProp, transition) {
197
186
  if (isColor(key) || key === "opacity") {
198
187
  animationType = "timing";
199
188
  }
189
+ if (!transition) {
190
+ return {};
191
+ }
200
192
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
201
193
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
202
- } else if (transition == null ? void 0 : transition.type) {
194
+ } else if (transition.type) {
203
195
  animationType = transition.type;
204
196
  }
205
- const loop = (_d = (_c = transition[key]) == null ? void 0 : _c.loop) != null ? _d : transition == null ? void 0 : transition.loop;
197
+ const loop = ((_c = transition[key]) == null ? void 0 : _c.loop) || transition.loop || null;
206
198
  if (loop != null) {
207
199
  repeatCount = loop ? -1 : 0;
208
200
  }
209
- if (((_e = transition[key]) == null ? void 0 : _e.repeat) != null) {
210
- repeatCount = (_f = transition[key]) == null ? void 0 : _f.repeat;
211
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
212
- repeatCount = transition.repeat;
213
- }
214
- if (((_g = transition[key]) == null ? void 0 : _g.repeatReverse) != null) {
215
- repeatReverse = (_h = transition[key]) == null ? void 0 : _h.repeatReverse;
216
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
217
- repeatReverse = transition.repeatReverse;
218
- }
219
201
  let config = {};
220
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
202
+ let animation;
221
203
  if (animationType === "timing") {
222
- const duration = (_j = (_i = transition[key]) == null ? void 0 : _i.duration) != null ? _j : transition == null ? void 0 : transition.duration;
223
- const easing = (_l = (_k = transition[key]) == null ? void 0 : _k.easing) != null ? _l : transition == null ? void 0 : transition.easing;
204
+ const duration = (_e = (_d = transition[key]) == null ? void 0 : _d.duration) != null ? _e : transition == null ? void 0 : transition.duration;
205
+ const easing = (_g = (_f = transition[key]) == null ? void 0 : _f.easing) != null ? _g : transition == null ? void 0 : transition.easing;
224
206
  if (easing) {
225
207
  config["easing"] = easing;
226
208
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/animations-reanimated",
3
- "version": "1.0.0-beta.207+3fd10ea6",
3
+ "version": "1.0.0-beta.230+fab00413",
4
4
  "source": "src/index.ts",
5
5
  "license": "MIT",
6
6
  "typings": "types",
@@ -12,12 +12,12 @@
12
12
  "dist"
13
13
  ],
14
14
  "dependencies": {
15
- "@tamagui/animate-presence": "^1.0.0-beta.207+3fd10ea6",
16
- "@tamagui/core": "^1.0.0-beta.207+3fd10ea6",
15
+ "@tamagui/animate-presence": "^1.0.0-beta.230+fab00413",
16
+ "@tamagui/core": "^1.0.0-beta.230+fab00413",
17
17
  "react-native-reanimated": "^2.4.1"
18
18
  },
19
19
  "devDependencies": {
20
- "@tamagui/build": "^1.0.0-beta.207+3fd10ea6"
20
+ "@tamagui/build": "^1.0.0-beta.230+fab00413"
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tamagui-build",
@@ -28,5 +28,5 @@
28
28
  "publishConfig": {
29
29
  "access": "public"
30
30
  },
31
- "gitHead": "3fd10ea6d026fac0339fbc1a501ee304f4985b05"
31
+ "gitHead": "fab0041356da84bd32620811a57a156d11514d2b"
32
32
  }
@@ -1,3 +1,18 @@
1
1
  import { AnimationDriver } from '@tamagui/core';
2
- export declare function createAnimations<A extends Object>(animations: A): AnimationDriver<A>;
2
+ import { WithDecayConfig, WithSpringConfig, WithTimingConfig } from 'react-native-reanimated';
3
+ declare type AnimationsConfig<A extends Object = any> = {
4
+ [Key in keyof A]: AnimationConfig;
5
+ };
6
+ declare type AnimationConfig = ({
7
+ type: 'timing';
8
+ loop?: number;
9
+ } & WithTimingConfig) | ({
10
+ type: 'spring';
11
+ loop?: number;
12
+ } & WithSpringConfig) | ({
13
+ type: 'decay';
14
+ loop?: number;
15
+ } & WithDecayConfig);
16
+ export declare function createAnimations<A extends AnimationsConfig>(animations: A): AnimationDriver<A>;
17
+ export {};
3
18
  //# sourceMappingURL=createAnimations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAA0C,MAAM,eAAe,CAAA;AAoCvF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAoLpF"}
1
+ {"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAiB,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAQjB,MAAM,yBAAyB,CAAA;AAEhC,aAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,IAAI;KAC7C,GAAG,IAAI,MAAM,CAAC,GAAG,eAAe;CAClC,CAAA;AAED,aAAK,eAAe,GAChB,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAAC,GACtD,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,CAAC,GACtD,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,eAAe,CAAC,CAAA;AASxD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CA+J9F"}