@tamagui/animations-reanimated 1.0.0-beta.187 → 1.0.0-beta.2

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.
@@ -2,22 +2,8 @@ var __create = Object.create;
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
5
  var __getProtoOf = Object.getPrototypeOf;
7
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __spreadValues = (a, b) => {
11
- for (var prop in b || (b = {}))
12
- if (__hasOwnProp.call(b, prop))
13
- __defNormalProp(a, prop, b[prop]);
14
- if (__getOwnPropSymbols)
15
- for (var prop of __getOwnPropSymbols(b)) {
16
- if (__propIsEnum.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- }
19
- return a;
20
- };
21
7
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
22
8
  var __export = (target, all) => {
23
9
  for (var name in all)
@@ -51,58 +37,74 @@ function createAnimations(animations) {
51
37
  animations,
52
38
  View: AnimatedView,
53
39
  Text: AnimatedText,
54
- useAnimations: (props, state) => {
55
- const { style, exitStyle, onDidAnimate, delay } = state;
56
- const [isPresent, safeToUnmount] = (0, import_animate_presence.usePresence)();
40
+ useAnimations: (props, helpers) => {
41
+ var _a, _b;
42
+ const { pseudos, onDidAnimate, delay, getStyle, state, staticConfig } = helpers;
43
+ const [isEntering, safeToUnmount] = (0, import_animate_presence.useEntering)();
57
44
  const presence = (0, import_react.useContext)(import_animate_presence.AnimatePresenceContext);
58
- const isMounted = (0, import_react_native_reanimated.useSharedValue)(false);
59
- const hasExitStyle = !!exitStyle;
60
- const custom = (0, import_react.useCallback)(() => {
61
- "worklet";
62
- return presence == null ? void 0 : presence.custom;
63
- }, [presence]);
64
- const reanimatedOnDidAnimated = (0, import_react.useCallback)((...args) => {
65
- 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);
66
48
  }, [onDidAnimate]);
67
- const reanimatedSafeToUnmount = (0, import_react.useCallback)(() => {
68
- safeToUnmount == null ? void 0 : safeToUnmount();
69
- }, [safeToUnmount]);
70
- (0, import_react.useEffect)(() => {
71
- isMounted.value = true;
72
- }, [isMounted]);
73
- (0, import_react.useEffect)(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
74
- if (!isPresent && !hasExitStyle) {
75
- 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];
76
64
  }
77
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
65
+ }
66
+ const args = [
67
+ JSON.stringify(all),
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
+ ];
78
80
  const animatedStyle = (0, import_react_native_reanimated.useAnimatedStyle)(() => {
79
- var _a, _b;
81
+ const style = animatedStyles;
80
82
  const final = {
81
83
  transform: []
82
84
  };
83
- const isExiting = !isPresent && !!exitStyle;
85
+ const isExiting = isEntering === false;
84
86
  const transition = animations[props.animation];
85
- const mergedStyles = __spreadValues(__spreadValues({}, style), isExiting && exitStyle);
86
87
  const exitingStyleProps = {};
87
88
  if (exitStyle) {
88
89
  for (const key of Object.keys(exitStyle)) {
89
90
  exitingStyleProps[key] = true;
90
91
  }
91
92
  }
92
- for (const key in mergedStyles) {
93
- const value = mergedStyles[key];
94
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
93
+ for (const key in style) {
94
+ const value = style[key];
95
+ const aconf = animationConfig(key, transition);
96
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
95
97
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
96
- if (onDidAnimate) {
97
- (0, import_react_native_reanimated.runOnJS)(reanimatedOnDidAnimated)(key, completed, recentValue, {
98
- attemptedValue: value
99
- });
100
- }
98
+ (0, import_react_native_reanimated.runOnJS)(reanimatedOnDidAnimated)(key, completed, recentValue, {
99
+ attemptedValue: value
100
+ });
101
101
  if (isExiting) {
102
102
  exitingStyleProps[key] = false;
103
103
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
104
104
  if (!areStylesExiting) {
105
- (0, import_react_native_reanimated.runOnJS)(reanimatedSafeToUnmount)();
105
+ if (safeToUnmount) {
106
+ (0, import_react_native_reanimated.runOnJS)(safeToUnmount)();
107
+ }
106
108
  }
107
109
  }
108
110
  }, "callback");
@@ -110,83 +112,69 @@ function createAnimations(animations) {
110
112
  if (key === "transform") {
111
113
  if (!Array.isArray(value)) {
112
114
  console.error(`Invalid transform value. Needs to be an array.`);
113
- } else {
114
- for (const transformObject of value) {
115
- const key2 = Object.keys(transformObject)[0];
116
- const transformValue = transformObject[key2];
117
- const transform = {};
118
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
119
- delayMs = ((_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) ?? null;
120
- }
121
- let finalValue = animation(transformValue, config, callback);
122
- if (shouldRepeat) {
123
- finalValue = (0, import_react_native_reanimated.withRepeat)(finalValue, repeatCount, repeatReverse);
124
- }
125
- if (delayMs != null) {
126
- transform[key2] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue);
127
- } else {
128
- transform[key2] = finalValue;
129
- }
130
- if (Object.keys(transform).length) {
131
- final["transform"].push(transform);
132
- }
115
+ continue;
116
+ }
117
+ for (const transformObject of value) {
118
+ const key2 = Object.keys(transformObject)[0];
119
+ const transformValue = transformObject[key2];
120
+ let finalValue2 = animation(transformValue, config, callback);
121
+ if (shouldRepeat) {
122
+ finalValue2 = (0, import_react_native_reanimated.withRepeat)(finalValue2, repeatCount, repeatReverse);
133
123
  }
124
+ final["transform"].push({
125
+ [key2]: finalValue2
126
+ });
134
127
  }
135
- } else if (typeof value === "object") {
128
+ continue;
129
+ }
130
+ if (typeof value === "object") {
136
131
  final[key] = {};
137
132
  for (const innerStyleKey of Object.keys(value || {})) {
138
- let finalValue = animation(value, config, callback);
133
+ let finalValue2 = animation(value, config, callback);
139
134
  if (shouldRepeat) {
140
- finalValue = (0, import_react_native_reanimated.withRepeat)(finalValue, repeatCount, repeatReverse);
135
+ finalValue2 = (0, import_react_native_reanimated.withRepeat)(finalValue2, repeatCount, repeatReverse);
141
136
  }
142
137
  if (delayMs != null) {
143
- final[key][innerStyleKey] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue);
138
+ final[key][innerStyleKey] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue2);
144
139
  } else {
145
- final[key][innerStyleKey] = finalValue;
140
+ final[key][innerStyleKey] = finalValue2;
146
141
  }
147
142
  }
143
+ continue;
144
+ }
145
+ let finalValue = animation(value, config, callback);
146
+ if (shouldRepeat) {
147
+ finalValue = (0, import_react_native_reanimated.withRepeat)(finalValue, repeatCount, repeatReverse);
148
+ }
149
+ if (delayMs != null && typeof delayMs === "number") {
150
+ final[key] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue);
148
151
  } else {
149
- let finalValue = animation(value, config, callback);
150
- if (shouldRepeat) {
151
- finalValue = (0, import_react_native_reanimated.withRepeat)(finalValue, repeatCount, repeatReverse);
152
- }
153
- if (delayMs != null && typeof delayMs === "number") {
154
- final[key] = (0, import_react_native_reanimated.withDelay)(delayMs, finalValue);
155
- } else {
156
- final[key] = finalValue;
157
- }
152
+ final[key] = finalValue;
158
153
  }
159
154
  }
155
+ if (process.env.NODE_ENV === "development" && props["debug"]) {
156
+ console.log("animation style", final);
157
+ }
160
158
  return final;
161
- }, [
162
- style,
163
- custom,
164
- delay,
165
- hasExitStyle,
166
- isMounted,
167
- isPresent,
168
- onDidAnimate,
169
- reanimatedOnDidAnimated,
170
- reanimatedSafeToUnmount
171
- ]);
172
- return {
173
- style: animatedStyle
174
- };
159
+ }, args);
160
+ return (0, import_react.useMemo)(() => {
161
+ return {
162
+ style: [nonAnimatedStyle, animatedStyle]
163
+ };
164
+ }, args);
175
165
  }
176
166
  };
177
167
  }
178
168
  __name(createAnimations, "createAnimations");
179
169
  function animationDelay(key, transition, defaultDelay) {
180
- var _a, _b;
181
170
  "worklet";
182
- let delayMs = defaultDelay;
183
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
184
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
185
- } else if ((transition == null ? void 0 : transition.delay) != null) {
186
- delayMs = transition.delay;
171
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
172
+ return {
173
+ delayMs: null
174
+ };
187
175
  }
188
176
  return {
189
- delayMs
177
+ delayMs: transition[key].delayMs
190
178
  };
191
179
  }
192
180
  __name(animationDelay, "animationDelay");
@@ -205,7 +193,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
205
193
  ].includes(styleKey);
206
194
  }, "isColor");
207
195
  function animationConfig(styleProp, transition) {
208
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
196
+ var _a, _b, _c, _d, _e;
209
197
  "worklet";
210
198
  const key = styleProp;
211
199
  let repeatCount = 0;
@@ -214,30 +202,23 @@ function animationConfig(styleProp, transition) {
214
202
  if (isColor(key) || key === "opacity") {
215
203
  animationType = "timing";
216
204
  }
205
+ if (!transition) {
206
+ return {};
207
+ }
217
208
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
218
209
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
219
- } else if (transition == null ? void 0 : transition.type) {
210
+ } else if (transition.type) {
220
211
  animationType = transition.type;
221
212
  }
222
- 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;
223
214
  if (loop != null) {
224
215
  repeatCount = loop ? -1 : 0;
225
216
  }
226
- if (((_d = transition[key]) == null ? void 0 : _d.repeat) != null) {
227
- repeatCount = (_e = transition[key]) == null ? void 0 : _e.repeat;
228
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
229
- repeatCount = transition.repeat;
230
- }
231
- if (((_f = transition[key]) == null ? void 0 : _f.repeatReverse) != null) {
232
- repeatReverse = (_g = transition[key]) == null ? void 0 : _g.repeatReverse;
233
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
234
- repeatReverse = transition.repeatReverse;
235
- }
236
217
  let config = {};
237
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
218
+ let animation;
238
219
  if (animationType === "timing") {
239
- const duration = ((_h = transition[key]) == null ? void 0 : _h.duration) ?? (transition == null ? void 0 : transition.duration);
240
- 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);
241
222
  if (easing) {
242
223
  config["easing"] = easing;
243
224
  }
@@ -301,4 +282,8 @@ const configKeys = [
301
282
  "stiffness",
302
283
  "velocity"
303
284
  ];
285
+ // Annotate the CommonJS export names for ESM import in node:
286
+ 0 && (module.exports = {
287
+ createAnimations
288
+ });
304
289
  //# sourceMappingURL=createAnimations.js.map
@@ -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, UseAnimationProps, UseAnimationState } 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, state: UseAnimationState) => {\n const { style, exitStyle, onDidAnimate, delay } = state\n const [isPresent, safeToUnmount] = usePresence()\n const presence = useContext(AnimatePresenceContext)\n const isMounted = useSharedValue(false)\n const hasExitStyle = !!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 function allowUnMountIfMissingExit() {\n if (!isPresent && !hasExitStyle) {\n reanimatedSafeToUnmount()\n }\n },\n [hasExitStyle, isPresent, reanimatedSafeToUnmount]\n )\n\n const animatedStyle = useAnimatedStyle(() => {\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = !isPresent && !!exitStyle\n const transition = animations[props.animation]\n\n const mergedStyles = {\n ...style,\n // ...isExiting && exitStyle(custom()),\n ...(isExiting && exitStyle),\n }\n\n // console.log('wut', style, hoverStyle, pressStyle, isExiting)\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 mergedStyles) {\n const value = mergedStyles[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 } else {\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 }\n } else 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 } else {\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\n // end for (key in mergedStyles)\n }\n\n return final\n }, [\n style,\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(all),\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,
@@ -22,61 +21,74 @@ function createAnimations(animations) {
22
21
  animations,
23
22
  View: AnimatedView,
24
23
  Text: AnimatedText,
25
- useAnimations: (props, state) => {
26
- const { style, exitStyle, onDidAnimate, delay } = state;
27
- const [isPresent, safeToUnmount] = usePresence();
24
+ useAnimations: (props, helpers) => {
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 hasExitStyle = !!exitStyle;
31
- const custom = useCallback(() => {
32
- "worklet";
33
- return presence == null ? void 0 : presence.custom;
34
- }, [presence]);
35
- const reanimatedOnDidAnimated = useCallback((...args) => {
36
- 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);
37
32
  }, [onDidAnimate]);
38
- const reanimatedSafeToUnmount = useCallback(() => {
39
- safeToUnmount == null ? void 0 : safeToUnmount();
40
- }, [safeToUnmount]);
41
- useEffect(() => {
42
- isMounted.value = true;
43
- }, [isMounted]);
44
- useEffect(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
45
- if (!isPresent && !hasExitStyle) {
46
- 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];
47
48
  }
48
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
49
+ }
50
+ const args = [
51
+ JSON.stringify(all),
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
+ ];
49
64
  const animatedStyle = useAnimatedStyle(() => {
50
- var _a, _b, _c;
65
+ const style = animatedStyles;
51
66
  const final = {
52
67
  transform: []
53
68
  };
54
- const isExiting = !isPresent && !!exitStyle;
69
+ const isExiting = isEntering === false;
55
70
  const transition = animations[props.animation];
56
- const mergedStyles = {
57
- ...style,
58
- ...isExiting && exitStyle
59
- };
60
71
  const exitingStyleProps = {};
61
72
  if (exitStyle) {
62
73
  for (const key of Object.keys(exitStyle)) {
63
74
  exitingStyleProps[key] = true;
64
75
  }
65
76
  }
66
- for (const key in mergedStyles) {
67
- const value = mergedStyles[key];
68
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
77
+ for (const key in style) {
78
+ const value = style[key];
79
+ const aconf = animationConfig(key, transition);
80
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
69
81
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
70
- if (onDidAnimate) {
71
- runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
72
- attemptedValue: value
73
- });
74
- }
82
+ runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
83
+ attemptedValue: value
84
+ });
75
85
  if (isExiting) {
76
86
  exitingStyleProps[key] = false;
77
87
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
78
88
  if (!areStylesExiting) {
79
- runOnJS(reanimatedSafeToUnmount)();
89
+ if (safeToUnmount) {
90
+ runOnJS(safeToUnmount)();
91
+ }
80
92
  }
81
93
  }
82
94
  }, "callback");
@@ -84,83 +96,69 @@ function createAnimations(animations) {
84
96
  if (key === "transform") {
85
97
  if (!Array.isArray(value)) {
86
98
  console.error(`Invalid transform value. Needs to be an array.`);
87
- } else {
88
- for (const transformObject of value) {
89
- const key2 = Object.keys(transformObject)[0];
90
- const transformValue = transformObject[key2];
91
- const transform = {};
92
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
93
- delayMs = (_c = (_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) != null ? _c : null;
94
- }
95
- let finalValue = animation(transformValue, config, callback);
96
- if (shouldRepeat) {
97
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
98
- }
99
- if (delayMs != null) {
100
- transform[key2] = withDelay(delayMs, finalValue);
101
- } else {
102
- transform[key2] = finalValue;
103
- }
104
- if (Object.keys(transform).length) {
105
- final["transform"].push(transform);
106
- }
99
+ continue;
100
+ }
101
+ for (const transformObject of value) {
102
+ const key2 = Object.keys(transformObject)[0];
103
+ const transformValue = transformObject[key2];
104
+ let finalValue2 = animation(transformValue, config, callback);
105
+ if (shouldRepeat) {
106
+ finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
107
107
  }
108
+ final["transform"].push({
109
+ [key2]: finalValue2
110
+ });
108
111
  }
109
- } else if (typeof value === "object") {
112
+ continue;
113
+ }
114
+ if (typeof value === "object") {
110
115
  final[key] = {};
111
116
  for (const innerStyleKey of Object.keys(value || {})) {
112
- let finalValue = animation(value, config, callback);
117
+ let finalValue2 = animation(value, config, callback);
113
118
  if (shouldRepeat) {
114
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
119
+ finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
115
120
  }
116
121
  if (delayMs != null) {
117
- final[key][innerStyleKey] = withDelay(delayMs, finalValue);
122
+ final[key][innerStyleKey] = withDelay(delayMs, finalValue2);
118
123
  } else {
119
- final[key][innerStyleKey] = finalValue;
124
+ final[key][innerStyleKey] = finalValue2;
120
125
  }
121
126
  }
127
+ continue;
128
+ }
129
+ let finalValue = animation(value, config, callback);
130
+ if (shouldRepeat) {
131
+ finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
132
+ }
133
+ if (delayMs != null && typeof delayMs === "number") {
134
+ final[key] = withDelay(delayMs, finalValue);
122
135
  } else {
123
- let finalValue = animation(value, config, callback);
124
- if (shouldRepeat) {
125
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
126
- }
127
- if (delayMs != null && typeof delayMs === "number") {
128
- final[key] = withDelay(delayMs, finalValue);
129
- } else {
130
- final[key] = finalValue;
131
- }
136
+ final[key] = finalValue;
132
137
  }
133
138
  }
139
+ if (process.env.NODE_ENV === "development" && props["debug"]) {
140
+ console.log("animation style", final);
141
+ }
134
142
  return final;
135
- }, [
136
- style,
137
- custom,
138
- delay,
139
- hasExitStyle,
140
- isMounted,
141
- isPresent,
142
- onDidAnimate,
143
- reanimatedOnDidAnimated,
144
- reanimatedSafeToUnmount
145
- ]);
146
- return {
147
- style: animatedStyle
148
- };
143
+ }, args);
144
+ return useMemo(() => {
145
+ return {
146
+ style: [nonAnimatedStyle, animatedStyle]
147
+ };
148
+ }, args);
149
149
  }
150
150
  };
151
151
  }
152
152
  __name(createAnimations, "createAnimations");
153
153
  function animationDelay(key, transition, defaultDelay) {
154
- var _a, _b;
155
154
  "worklet";
156
- let delayMs = defaultDelay;
157
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
158
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
159
- } else if ((transition == null ? void 0 : transition.delay) != null) {
160
- delayMs = transition.delay;
155
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
156
+ return {
157
+ delayMs: null
158
+ };
161
159
  }
162
160
  return {
163
- delayMs
161
+ delayMs: transition[key].delayMs
164
162
  };
165
163
  }
166
164
  __name(animationDelay, "animationDelay");
@@ -179,7 +177,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
179
177
  ].includes(styleKey);
180
178
  }, "isColor");
181
179
  function animationConfig(styleProp, transition) {
182
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
180
+ var _a, _b, _c, _d, _e, _f, _g;
183
181
  "worklet";
184
182
  const key = styleProp;
185
183
  let repeatCount = 0;
@@ -188,30 +186,23 @@ function animationConfig(styleProp, transition) {
188
186
  if (isColor(key) || key === "opacity") {
189
187
  animationType = "timing";
190
188
  }
189
+ if (!transition) {
190
+ return {};
191
+ }
191
192
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
192
193
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
193
- } else if (transition == null ? void 0 : transition.type) {
194
+ } else if (transition.type) {
194
195
  animationType = transition.type;
195
196
  }
196
- 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;
197
198
  if (loop != null) {
198
199
  repeatCount = loop ? -1 : 0;
199
200
  }
200
- if (((_e = transition[key]) == null ? void 0 : _e.repeat) != null) {
201
- repeatCount = (_f = transition[key]) == null ? void 0 : _f.repeat;
202
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
203
- repeatCount = transition.repeat;
204
- }
205
- if (((_g = transition[key]) == null ? void 0 : _g.repeatReverse) != null) {
206
- repeatReverse = (_h = transition[key]) == null ? void 0 : _h.repeatReverse;
207
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
208
- repeatReverse = transition.repeatReverse;
209
- }
210
201
  let config = {};
211
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
202
+ let animation;
212
203
  if (animationType === "timing") {
213
- const duration = (_j = (_i = transition[key]) == null ? void 0 : _i.duration) != null ? _j : transition == null ? void 0 : transition.duration;
214
- 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;
215
206
  if (easing) {
216
207
  config["easing"] = easing;
217
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, UseAnimationProps, UseAnimationState } 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, state: UseAnimationState) => {\n const { style, exitStyle, onDidAnimate, delay } = state\n const [isPresent, safeToUnmount] = usePresence()\n const presence = useContext(AnimatePresenceContext)\n const isMounted = useSharedValue(false)\n const hasExitStyle = !!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 function allowUnMountIfMissingExit() {\n if (!isPresent && !hasExitStyle) {\n reanimatedSafeToUnmount()\n }\n },\n [hasExitStyle, isPresent, reanimatedSafeToUnmount]\n )\n\n const animatedStyle = useAnimatedStyle(() => {\n const final = {\n transform: [] as any[],\n }\n\n const isExiting = !isPresent && !!exitStyle\n const transition = animations[props.animation]\n\n const mergedStyles = {\n ...style,\n // ...isExiting && exitStyle(custom()),\n ...(isExiting && exitStyle),\n }\n\n // console.log('wut', style, hoverStyle, pressStyle, isExiting)\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 mergedStyles) {\n const value = mergedStyles[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 } else {\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 }\n } else 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 } else {\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\n // end for (key in mergedStyles)\n }\n\n return final\n }, [\n style,\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": ";;AAAA;AAEA;AAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,MAAM,eAAe,SAAS;AAC9B,MAAM,eAAe,SAAS;AAE9B,aAAa,iBAAiB;AAC9B,aAAa,iBAAiB;AAEvB,0BAA4C,YAAmC;AACpF,SAAO;AAAA,IACL,cAAc;AAAA,IACd;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,eAAe,CAAC,OAA0B,UAA6B;AACrE,YAAM,EAAE,OAAO,WAAW,cAAc,UAAU;AAClD,YAAM,CAAC,WAAW,iBAAiB,YAAY;AAC/C,YAAM,WAAW,WAAW,sBAAsB;AAClD,YAAM,YAAY,eAAe,KAAK;AACtC,YAAM,eAAe,CAAC,CAAC;AACvB,YAAM,SAAS,YAAY,MAAM;AAC/B;AACA,eAAO,qCAAU;AAAA,MACnB,GAAG,CAAC,QAAQ,CAAC;AAEb,YAAM,0BAA0B,YAC9B,IAAI,SAAS;AACX,qDAAe,GAAG;AAAA,MACpB,GACA,CAAC,YAAY,CACf;AACA,YAAM,0BAA0B,YAAY,MAAM;AAChD;AAAA,MACF,GAAG,CAAC,aAAa,CAAC;AAElB,gBAAU,MAAM;AACd,kBAAU,QAAQ;AAAA,MACpB,GAAG,CAAC,SAAS,CAAC;AAEd,gBACE,4DAAqC;AACnC,YAAI,CAAC,aAAa,CAAC,cAAc;AAC/B,kCAAwB;AAAA,QAC1B;AAAA,MACF,GAJA,8BAKA,CAAC,cAAc,WAAW,uBAAuB,CACnD;AAEA,YAAM,gBAAgB,iBAAiB,MAAM;AA7EnD;AA8EQ,cAAM,QAAQ;AAAA,UACZ,WAAW,CAAC;AAAA,QACd;AAEA,cAAM,YAAY,CAAC,aAAa,CAAC,CAAC;AAClC,cAAM,aAAa,WAAW,MAAM;AAEpC,cAAM,eAAe;AAAA,aAChB;AAAA,aAEC,aAAa;AAAA,QACnB;AAIA,cAAM,oBAA6C,CAAC;AACpD,YAAI,WAAW;AACb,qBAAW,OAAO,OAAO,KAAK,SAAS,GAAG;AACxC,8BAAkB,OAAO;AAAA,UAC3B;AAAA,QACF;AAEA,mBAAW,OAAO,cAAc;AAC9B,gBAAM,QAAQ,aAAa;AAC3B,gBAAM,EAAE,WAAW,QAAQ,cAAc,aAAa,kBAAkB,gBACtE,KACA,UACF;AAEA,gBAAM,WAAsD,wBAAC,WAAW,gBAAgB;AACtF,gBAAI,cAAc;AAChB,sBAAQ,uBAAuB,EAAE,KAAY,WAAW,aAAa;AAAA,gBACnE,gBAAgB;AAAA,cAClB,CAAC;AAAA,YACH;AACA,gBAAI,WAAW;AACb,gCAAkB,OAAO;AACzB,oBAAM,mBAAmB,OAAO,OAAO,iBAAiB,EAAE,KAAK,OAAO;AAEtE,kBAAI,CAAC,kBAAkB;AACrB,wBAAQ,uBAAuB,EAAE;AAAA,cACnC;AAAA,YACF;AAAA,UACF,GAd4D;AAgB5D,cAAI,EAAE,UAAU,SAAS,eAAe,KAAK,YAAY,KAAK;AAE9D,cAAI,QAAQ,aAAa;AACvB,gBAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,sBAAQ,MAAM,gDAAgD;AAAA,YAChE,OAAO;AACL,yBAAW,mBAAmB,OAAO;AACnC,sBAAM,OAAM,OAAO,KAAK,eAAe,EAAE;AACzC,sBAAM,iBAAiB,gBAAgB;AACvC,sBAAM,YAAY,CAAC;AACnB,oBAAI,gDAAa,UAAb,mBAAmB,UAAS,MAAM;AACpC,4BAAU,qDAAa,UAAb,mBAAmB,UAAnB,YAA4B;AAAA,gBACxC;AACA,oBAAI,aAAa,UAAU,gBAAgB,QAAQ,QAAQ;AAC3D,oBAAI,cAAc;AAChB,+BAAa,WAAW,YAAY,aAAa,aAAa;AAAA,gBAChE;AACA,oBAAI,WAAW,MAAM;AACnB,4BAAU,QAAO,UAAU,SAAS,UAAU;AAAA,gBAChD,OAAO;AACL,4BAAU,QAAO;AAAA,gBACnB;AACA,oBAAI,OAAO,KAAK,SAAS,EAAE,QAAQ;AACjC,wBAAM,aAAa,KAAK,SAAS;AAAA,gBACnC;AAAA,cACF;AAAA,YACF;AAAA,UACF,WAAW,OAAO,UAAU,UAAU;AAEpC,kBAAM,OAAO,CAAC;AACd,uBAAW,iBAAiB,OAAO,KAAK,SAAS,CAAC,CAAC,GAAG;AACpD,kBAAI,aAAa,UAAU,OAAO,QAAQ,QAAQ;AAClD,kBAAI,cAAc;AAChB,6BAAa,WAAW,YAAY,aAAa,aAAa;AAAA,cAChE;AACA,kBAAI,WAAW,MAAM;AACnB,sBAAM,KAAK,iBAAiB,UAAU,SAAS,UAAU;AAAA,cAC3D,OAAO;AACL,sBAAM,KAAK,iBAAiB;AAAA,cAC9B;AAAA,YACF;AAAA,UACF,OAAO;AACL,gBAAI,aAAa,UAAU,OAAO,QAAQ,QAAQ;AAClD,gBAAI,cAAc;AAChB,2BAAa,WAAW,YAAY,aAAa,aAAa;AAAA,YAChE;AACA,gBAAI,WAAW,QAAQ,OAAO,YAAY,UAAU;AAClD,oBAAM,OAAO,UAAU,SAAS,UAAU;AAAA,YAC5C,OAAO;AACL,oBAAM,OAAO;AAAA,YACf;AAAA,UACF;AAAA,QAGF;AAEA,eAAO;AAAA,MACT,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,QAKA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAIF,CAAC;AAED,aAAO;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAvKgB;AAyKhB,wBACE,KACA,YACA,cACA;AAlNF;AAmNE;AACA,MAAI,UAAqC;AAEzC,MAAI,kBAAW,SAAX,mBAAkC,UAAS,MAAM;AACnD,cAAU,iBAAW,SAAX,mBAAkC;AAAA,EAC9C,WAAW,0CAAY,UAAS,MAAM;AACpC,cAAU,WAAW;AAAA,EACvB;AAEA,SAAO;AAAA,IACL;AAAA,EACF;AACF;AAjBS;AAyET,MAAM,UAAU,wBAAC,aAAqB;AACpC;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,QAAQ;AACrB,GAbgB;AAehB,yBACE,WACA,YACA;AAzSF;AA0SE;AACA,QAAM,MAAM;AACZ,MAAI,cAAc;AAClB,MAAI,gBAAgB;AACpB,MAAI,gBAAoD;AAExD,MAAI,QAAQ,GAAG,KAAK,QAAQ,WAAW;AACrC,oBAAgB;AAAA,EAClB;AAIA,MAAI,iBAAW,SAAX,mBAAkC,MAAM;AAC1C,oBAAiB,iBAAmB,SAAnB,mBAAyB;AAAA,EAC5C,WAAW,yCAAY,MAAM;AAE3B,oBAAgB,WAAW;AAAA,EAC7B;AAEA,QAAM,OAAO,uBAAW,SAAX,mBAAkC,SAAlC,YAA0C,yCAAY;AAEnE,MAAI,QAAQ,MAAM;AAChB,kBAAc,OAAO,KAAK;AAAA,EAC5B;AAEA,MAAI,kBAAW,SAAX,mBAAkC,WAAU,MAAM;AACpD,kBAAc,iBAAW,SAAX,mBAAkC;AAAA,EAClD,WAAW,0CAAY,WAAU,MAAM;AACrC,kBAAc,WAAW;AAAA,EAC3B;AAEA,MAAI,kBAAW,SAAX,mBAAkC,kBAAiB,MAAM;AAC3D,oBAAgB,iBAAW,SAAX,mBAAkC;AAAA,EACpD,WAAW,0CAAY,kBAAiB,MAAM;AAC5C,oBAAgB,WAAW;AAAA,EAC7B;AAEA,MAAI,SAAS,CAAC;AAEd,MAAI,YAAY,2BAAI,UAAoB,OAAxB;AAEhB,MAAI,kBAAkB,UAAU;AAC9B,UAAM,WACH,uBAAW,SAAX,mBAAuD,aAAvD,YACA,yCAAiC;AAEpC,UAAM,SACH,uBAAW,SAAX,mBAAuD,WAAvD,YACA,yCAAiC;AAEpC,QAAI,QAAQ;AACV,aAAO,YAAY;AAAA,IACrB;AACA,QAAI,YAAY,MAAM;AACpB,aAAO,cAAc;AAAA,IACvB;AACA,gBAAY;AAAA,EACd,WAAW,kBAAkB,UAAU;AACrC,gBAAY;AACZ,aAAS,CAAC;AACV,eAAW,QAAQ,CAAC,cAAc;AAtWtC;AAuWM;AACA,YAAM,sBAAsB,gDAAa,SAAb,oBAAoB;AAChD,YAAM,yBAAyB,yCAAa;AAC5C,UAAI,uBAAuB,MAAM;AAC/B,eAAO,aAAa;AAAA,MACtB,WAAW,0BAA0B,MAAM;AACzC,eAAO,aAAa;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH,WAAW,kBAAkB,SAAS;AACpC,gBAAY;AACZ,aAAS;AAAA,MACP,UAAU;AAAA,MACV,cAAc;AAAA,IAChB;AACA,UAAM,cAAwC;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,gBAAW,QAAQ,CAAC,cAAc;AA5XtC;AA6XM;AAEA,YAAM,sBAAsB,gDAAa,SAAb,oBAAoB;AAChD,YAAM,yBAAyB,yCAAa;AAE5C,UAAI,uBAAuB,MAAM;AAC/B,eAAO,aAAa;AAAA,MACtB,WAAW,0BAA0B,MAAM;AACzC,eAAO,aAAa;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,CAAC,CAAC;AAAA,EAClB;AACF;AA3GS;AA6GT,MAAM,aAAyC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
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(all),\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,
@@ -22,61 +21,74 @@ function createAnimations(animations) {
22
21
  animations,
23
22
  View: AnimatedView,
24
23
  Text: AnimatedText,
25
- useAnimations: (props, state) => {
26
- const { style, exitStyle, onDidAnimate, delay } = state;
27
- const [isPresent, safeToUnmount] = usePresence();
24
+ useAnimations: (props, helpers) => {
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 hasExitStyle = !!exitStyle;
31
- const custom = useCallback(() => {
32
- "worklet";
33
- return presence == null ? void 0 : presence.custom;
34
- }, [presence]);
35
- const reanimatedOnDidAnimated = useCallback((...args) => {
36
- 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);
37
32
  }, [onDidAnimate]);
38
- const reanimatedSafeToUnmount = useCallback(() => {
39
- safeToUnmount == null ? void 0 : safeToUnmount();
40
- }, [safeToUnmount]);
41
- useEffect(() => {
42
- isMounted.value = true;
43
- }, [isMounted]);
44
- useEffect(/* @__PURE__ */ __name(function allowUnMountIfMissingExit() {
45
- if (!isPresent && !hasExitStyle) {
46
- 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];
47
48
  }
48
- }, "allowUnMountIfMissingExit"), [hasExitStyle, isPresent, reanimatedSafeToUnmount]);
49
+ }
50
+ const args = [
51
+ JSON.stringify(all),
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
+ ];
49
64
  const animatedStyle = useAnimatedStyle(() => {
50
- var _a, _b, _c;
65
+ const style = animatedStyles;
51
66
  const final = {
52
67
  transform: []
53
68
  };
54
- const isExiting = !isPresent && !!exitStyle;
69
+ const isExiting = isEntering === false;
55
70
  const transition = animations[props.animation];
56
- const mergedStyles = {
57
- ...style,
58
- ...isExiting && exitStyle
59
- };
60
71
  const exitingStyleProps = {};
61
72
  if (exitStyle) {
62
73
  for (const key of Object.keys(exitStyle)) {
63
74
  exitingStyleProps[key] = true;
64
75
  }
65
76
  }
66
- for (const key in mergedStyles) {
67
- const value = mergedStyles[key];
68
- const { animation, config, shouldRepeat, repeatCount, repeatReverse } = animationConfig(key, transition);
77
+ for (const key in style) {
78
+ const value = style[key];
79
+ const aconf = animationConfig(key, transition);
80
+ const { animation, config, shouldRepeat, repeatCount, repeatReverse } = aconf;
69
81
  const callback = /* @__PURE__ */ __name((completed, recentValue) => {
70
- if (onDidAnimate) {
71
- runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
72
- attemptedValue: value
73
- });
74
- }
82
+ runOnJS(reanimatedOnDidAnimated)(key, completed, recentValue, {
83
+ attemptedValue: value
84
+ });
75
85
  if (isExiting) {
76
86
  exitingStyleProps[key] = false;
77
87
  const areStylesExiting = Object.values(exitingStyleProps).some(Boolean);
78
88
  if (!areStylesExiting) {
79
- runOnJS(reanimatedSafeToUnmount)();
89
+ if (safeToUnmount) {
90
+ runOnJS(safeToUnmount)();
91
+ }
80
92
  }
81
93
  }
82
94
  }, "callback");
@@ -84,83 +96,69 @@ function createAnimations(animations) {
84
96
  if (key === "transform") {
85
97
  if (!Array.isArray(value)) {
86
98
  console.error(`Invalid transform value. Needs to be an array.`);
87
- } else {
88
- for (const transformObject of value) {
89
- const key2 = Object.keys(transformObject)[0];
90
- const transformValue = transformObject[key2];
91
- const transform = {};
92
- if (((_a = transition == null ? void 0 : transition[key2]) == null ? void 0 : _a.delay) != null) {
93
- delayMs = (_c = (_b = transition == null ? void 0 : transition[key2]) == null ? void 0 : _b.delay) != null ? _c : null;
94
- }
95
- let finalValue = animation(transformValue, config, callback);
96
- if (shouldRepeat) {
97
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
98
- }
99
- if (delayMs != null) {
100
- transform[key2] = withDelay(delayMs, finalValue);
101
- } else {
102
- transform[key2] = finalValue;
103
- }
104
- if (Object.keys(transform).length) {
105
- final["transform"].push(transform);
106
- }
99
+ continue;
100
+ }
101
+ for (const transformObject of value) {
102
+ const key2 = Object.keys(transformObject)[0];
103
+ const transformValue = transformObject[key2];
104
+ let finalValue2 = animation(transformValue, config, callback);
105
+ if (shouldRepeat) {
106
+ finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
107
107
  }
108
+ final["transform"].push({
109
+ [key2]: finalValue2
110
+ });
108
111
  }
109
- } else if (typeof value === "object") {
112
+ continue;
113
+ }
114
+ if (typeof value === "object") {
110
115
  final[key] = {};
111
116
  for (const innerStyleKey of Object.keys(value || {})) {
112
- let finalValue = animation(value, config, callback);
117
+ let finalValue2 = animation(value, config, callback);
113
118
  if (shouldRepeat) {
114
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
119
+ finalValue2 = withRepeat(finalValue2, repeatCount, repeatReverse);
115
120
  }
116
121
  if (delayMs != null) {
117
- final[key][innerStyleKey] = withDelay(delayMs, finalValue);
122
+ final[key][innerStyleKey] = withDelay(delayMs, finalValue2);
118
123
  } else {
119
- final[key][innerStyleKey] = finalValue;
124
+ final[key][innerStyleKey] = finalValue2;
120
125
  }
121
126
  }
127
+ continue;
128
+ }
129
+ let finalValue = animation(value, config, callback);
130
+ if (shouldRepeat) {
131
+ finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
132
+ }
133
+ if (delayMs != null && typeof delayMs === "number") {
134
+ final[key] = withDelay(delayMs, finalValue);
122
135
  } else {
123
- let finalValue = animation(value, config, callback);
124
- if (shouldRepeat) {
125
- finalValue = withRepeat(finalValue, repeatCount, repeatReverse);
126
- }
127
- if (delayMs != null && typeof delayMs === "number") {
128
- final[key] = withDelay(delayMs, finalValue);
129
- } else {
130
- final[key] = finalValue;
131
- }
136
+ final[key] = finalValue;
132
137
  }
133
138
  }
139
+ if (process.env.NODE_ENV === "development" && props["debug"]) {
140
+ console.log("animation style", final);
141
+ }
134
142
  return final;
135
- }, [
136
- style,
137
- custom,
138
- delay,
139
- hasExitStyle,
140
- isMounted,
141
- isPresent,
142
- onDidAnimate,
143
- reanimatedOnDidAnimated,
144
- reanimatedSafeToUnmount
145
- ]);
146
- return {
147
- style: animatedStyle
148
- };
143
+ }, args);
144
+ return useMemo(() => {
145
+ return {
146
+ style: [nonAnimatedStyle, animatedStyle]
147
+ };
148
+ }, args);
149
149
  }
150
150
  };
151
151
  }
152
152
  __name(createAnimations, "createAnimations");
153
153
  function animationDelay(key, transition, defaultDelay) {
154
- var _a, _b;
155
154
  "worklet";
156
- let delayMs = defaultDelay;
157
- if (((_a = transition[key]) == null ? void 0 : _a.delay) != null) {
158
- delayMs = (_b = transition[key]) == null ? void 0 : _b.delay;
159
- } else if ((transition == null ? void 0 : transition.delay) != null) {
160
- delayMs = transition.delay;
155
+ if (!transition || !transition[key] || transition[key].delayMs === void 0 || transition[key].delayMs === null) {
156
+ return {
157
+ delayMs: null
158
+ };
161
159
  }
162
160
  return {
163
- delayMs
161
+ delayMs: transition[key].delayMs
164
162
  };
165
163
  }
166
164
  __name(animationDelay, "animationDelay");
@@ -179,7 +177,7 @@ const isColor = /* @__PURE__ */ __name((styleKey) => {
179
177
  ].includes(styleKey);
180
178
  }, "isColor");
181
179
  function animationConfig(styleProp, transition) {
182
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
180
+ var _a, _b, _c, _d, _e, _f, _g;
183
181
  "worklet";
184
182
  const key = styleProp;
185
183
  let repeatCount = 0;
@@ -188,30 +186,23 @@ function animationConfig(styleProp, transition) {
188
186
  if (isColor(key) || key === "opacity") {
189
187
  animationType = "timing";
190
188
  }
189
+ if (!transition) {
190
+ return {};
191
+ }
191
192
  if ((_a = transition[key]) == null ? void 0 : _a.type) {
192
193
  animationType = (_b = transition[key]) == null ? void 0 : _b.type;
193
- } else if (transition == null ? void 0 : transition.type) {
194
+ } else if (transition.type) {
194
195
  animationType = transition.type;
195
196
  }
196
- 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;
197
198
  if (loop != null) {
198
199
  repeatCount = loop ? -1 : 0;
199
200
  }
200
- if (((_e = transition[key]) == null ? void 0 : _e.repeat) != null) {
201
- repeatCount = (_f = transition[key]) == null ? void 0 : _f.repeat;
202
- } else if ((transition == null ? void 0 : transition.repeat) != null) {
203
- repeatCount = transition.repeat;
204
- }
205
- if (((_g = transition[key]) == null ? void 0 : _g.repeatReverse) != null) {
206
- repeatReverse = (_h = transition[key]) == null ? void 0 : _h.repeatReverse;
207
- } else if ((transition == null ? void 0 : transition.repeatReverse) != null) {
208
- repeatReverse = transition.repeatReverse;
209
- }
210
201
  let config = {};
211
- let animation = /* @__PURE__ */ __name((...props) => props, "animation");
202
+ let animation;
212
203
  if (animationType === "timing") {
213
- const duration = (_j = (_i = transition[key]) == null ? void 0 : _i.duration) != null ? _j : transition == null ? void 0 : transition.duration;
214
- 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;
215
206
  if (easing) {
216
207
  config["easing"] = easing;
217
208
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/animations-reanimated",
3
- "version": "1.0.0-beta.187+b4ae9217",
3
+ "version": "1.0.0-beta.2",
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.187+b4ae9217",
16
- "@tamagui/core": "^1.0.0-beta.187+b4ae9217",
17
- "react-native-reanimated": "^2.4.1"
15
+ "@tamagui/animate-presence": "^1.0.0-beta.2",
16
+ "@tamagui/core": "^1.0.0-beta.2",
17
+ "react-native-reanimated": "^2.3.1"
18
18
  },
19
19
  "devDependencies": {
20
- "@tamagui/build": "^1.0.0-beta.187+b4ae9217"
20
+ "@tamagui/build": "^1.0.0-beta.2"
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": "b4ae92179a688f73380c8f41296ecfc881b1cbc0"
31
+ "gitHead": "a49cc7ea6b93ba384e77a4880ae48ac4a5635c14"
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,EAAwC,MAAM,eAAe,CAAA;AAoCrF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAuKpF"}
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"}
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2020 Nate Wienert
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.