@tamagui/animations-react-native 2.0.0-rc.4 → 2.0.0-rc.40

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.
@@ -4,33 +4,35 @@ var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getProtoOf = Object.getPrototypeOf,
8
- __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
9
  var __export = (target, all) => {
10
- for (var name in all) __defProp(target, name, {
11
- get: all[name],
12
- enumerable: !0
13
- });
14
- },
15
- __copyProps = (to, from, except, desc) => {
16
- if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
18
  get: () => from[key],
18
19
  enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
20
  });
20
- return to;
21
- };
21
+ }
22
+ return to;
23
+ };
22
24
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
- value: mod,
29
- enumerable: !0
30
- }) : target, mod)),
31
- __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: !0
33
- }), mod);
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
34
36
  var createAnimations_exports = {};
35
37
  __export(createAnimations_exports, {
36
38
  AnimatedText: () => AnimatedText,
@@ -38,73 +40,79 @@ __export(createAnimations_exports, {
38
40
  createAnimations: () => createAnimations,
39
41
  useAnimatedNumber: () => useAnimatedNumber,
40
42
  useAnimatedNumberReaction: () => useAnimatedNumberReaction,
41
- useAnimatedNumberStyle: () => useAnimatedNumberStyle
43
+ useAnimatedNumberStyle: () => useAnimatedNumberStyle,
44
+ useAnimatedNumbersStyle: () => useAnimatedNumbersStyle
42
45
  });
43
46
  module.exports = __toCommonJS(createAnimations_exports);
44
- var import_animation_helpers = require("@tamagui/animation-helpers"),
45
- import_constants = require("@tamagui/constants"),
46
- import_use_presence = require("@tamagui/use-presence"),
47
- import_web = require("@tamagui/web"),
48
- import_react = __toESM(require("react"), 1),
49
- import_react_native = require("react-native");
47
+ var import_animation_helpers = require("@tamagui/animation-helpers");
48
+ var import_constants = require("@tamagui/constants");
49
+ var import_use_presence = require("@tamagui/use-presence");
50
+ var import_web = require("@tamagui/web");
51
+ var import_react = __toESM(require("react"), 1);
52
+ var import_react_native = require("react-native");
50
53
  function _type_of(obj) {
51
54
  "@swc/helpers - typeof";
52
55
 
53
- return obj && typeof Symbol < "u" && obj.constructor === Symbol ? "symbol" : typeof obj;
56
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
54
57
  }
58
+ var isFabric = !import_constants.isWeb && typeof global !== "undefined" && !!global.__nativeFabricUIManager;
55
59
  var resolveDynamicValue = function (value, isDark) {
56
- if (value && (typeof value > "u" ? "undefined" : _type_of(value)) === "object" && "dynamic" in value) {
57
- var dynamicValue = isDark ? value.dynamic.dark : value.dynamic.light;
58
- return dynamicValue;
59
- }
60
- return value;
61
- },
62
- animatedStyleKey = {
63
- transform: !0,
64
- opacity: !0
65
- },
66
- colorStyleKey = {
67
- backgroundColor: !0,
68
- color: !0,
69
- borderColor: !0,
70
- borderLeftColor: !0,
71
- borderRightColor: !0,
72
- borderTopColor: !0,
73
- borderBottomColor: !0
74
- },
75
- costlyToAnimateStyleKey = {
76
- borderRadius: !0,
77
- borderTopLeftRadius: !0,
78
- borderTopRightRadius: !0,
79
- borderBottomLeftRadius: !0,
80
- borderBottomRightRadius: !0,
81
- borderWidth: !0,
82
- borderLeftWidth: !0,
83
- borderRightWidth: !0,
84
- borderTopWidth: !0,
85
- borderBottomWidth: !0,
86
- ...colorStyleKey
87
- },
88
- AnimatedView = import_react_native.Animated.View,
89
- AnimatedText = import_react_native.Animated.Text;
60
+ if (value && (typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && "dynamic" in value) {
61
+ var dynamicValue = isDark ? value.dynamic.dark : value.dynamic.light;
62
+ return dynamicValue;
63
+ }
64
+ return value;
65
+ };
66
+ var animatedStyleKey = {
67
+ transform: true,
68
+ opacity: true
69
+ };
70
+ var colorStyleKey = {
71
+ backgroundColor: true,
72
+ color: true,
73
+ borderColor: true,
74
+ borderLeftColor: true,
75
+ borderRightColor: true,
76
+ borderTopColor: true,
77
+ borderBottomColor: true
78
+ };
79
+ var costlyToAnimateStyleKey = {
80
+ borderRadius: true,
81
+ borderTopLeftRadius: true,
82
+ borderTopRightRadius: true,
83
+ borderBottomLeftRadius: true,
84
+ borderBottomRightRadius: true,
85
+ borderWidth: true,
86
+ borderLeftWidth: true,
87
+ borderRightWidth: true,
88
+ borderTopWidth: true,
89
+ borderBottomWidth: true,
90
+ ...colorStyleKey
91
+ };
92
+ var AnimatedView = import_react_native.Animated.View;
93
+ var AnimatedText = import_react_native.Animated.Text;
90
94
  function useAnimatedNumber(initial) {
91
95
  var state = import_react.default.useRef(null);
92
- return state.current || (state.current = {
93
- composite: null,
94
- val: new import_react_native.Animated.Value(initial),
95
- strategy: {
96
- type: "spring"
97
- }
98
- }), {
96
+ if (!state.current) {
97
+ state.current = {
98
+ composite: null,
99
+ val: new import_react_native.Animated.Value(initial),
100
+ strategy: {
101
+ type: "spring"
102
+ }
103
+ };
104
+ }
105
+ return {
99
106
  getInstance() {
100
107
  return state.current.val;
101
108
  },
102
109
  getValue() {
103
- return state.current.val._value;
110
+ return state.current.val["_value"];
104
111
  },
105
112
  stop() {
106
113
  var _state_current_composite;
107
- (_state_current_composite = state.current.composite) === null || _state_current_composite === void 0 || _state_current_composite.stop(), state.current.composite = null;
114
+ (_state_current_composite = state.current.composite) === null || _state_current_composite === void 0 ? void 0 : _state_current_composite.stop();
115
+ state.current.composite = null;
108
116
  },
109
117
  setValue(next) {
110
118
  var {
@@ -113,268 +121,436 @@ function useAnimatedNumber(initial) {
113
121
  } = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
114
122
  type: "spring"
115
123
  },
116
- onFinish = arguments.length > 2 ? arguments[2] : void 0,
117
- val = state.current.val,
118
- handleFinish = onFinish ? function (param) {
119
- var {
120
- finished
121
- } = param;
122
- return finished ? onFinish() : null;
123
- } : void 0;
124
- if (type === "direct") val.setValue(next);else if (type === "spring") {
124
+ onFinish = arguments.length > 2 ? arguments[2] : void 0;
125
+ var val = state.current.val;
126
+ var handleFinish = onFinish ? function (param) {
127
+ var {
128
+ finished
129
+ } = param;
130
+ return finished ? onFinish() : null;
131
+ } : void 0;
132
+ if (type === "direct") {
133
+ val.setValue(next);
134
+ } else if (type === "spring") {
125
135
  var _state_current_composite;
126
- (_state_current_composite = state.current.composite) === null || _state_current_composite === void 0 || _state_current_composite.stop();
136
+ (_state_current_composite = state.current.composite) === null || _state_current_composite === void 0 ? void 0 : _state_current_composite.stop();
127
137
  var composite = import_react_native.Animated.spring(val, {
128
138
  ...config,
129
139
  toValue: next,
130
- useNativeDriver: !import_constants.isWeb
140
+ useNativeDriver: isFabric
131
141
  });
132
- composite.start(handleFinish), state.current.composite = composite;
142
+ composite.start(handleFinish);
143
+ state.current.composite = composite;
133
144
  } else {
134
145
  var _state_current_composite1;
135
- (_state_current_composite1 = state.current.composite) === null || _state_current_composite1 === void 0 || _state_current_composite1.stop();
146
+ (_state_current_composite1 = state.current.composite) === null || _state_current_composite1 === void 0 ? void 0 : _state_current_composite1.stop();
136
147
  var composite1 = import_react_native.Animated.timing(val, {
137
148
  ...config,
138
149
  toValue: next,
139
- useNativeDriver: !import_constants.isWeb
150
+ useNativeDriver: isFabric
140
151
  });
141
- composite1.start(handleFinish), state.current.composite = composite1;
152
+ composite1.start(handleFinish);
153
+ state.current.composite = composite1;
142
154
  }
143
155
  }
144
156
  };
145
157
  }
146
158
  var useAnimatedNumberReaction = function (param, onValue) {
147
- var {
148
- value
149
- } = param,
150
- onChange = (0, import_web.useEvent)(function (current) {
151
- onValue(current.value);
152
- });
153
- import_react.default.useEffect(function () {
154
- var id = value.getInstance().addListener(onChange);
155
- return function () {
156
- value.getInstance().removeListener(id);
157
- };
158
- }, [value, onChange]);
159
- },
160
- useAnimatedNumberStyle = function (value, getStyle) {
161
- return getStyle(value.getInstance());
162
- };
163
- function createAnimations(animations) {
159
+ var {
160
+ value
161
+ } = param;
162
+ var onChange = (0, import_web.useEvent)(function (current) {
163
+ onValue(current.value);
164
+ });
165
+ import_react.default.useEffect(function () {
166
+ var id = value.getInstance().addListener(onChange);
167
+ return function () {
168
+ value.getInstance().removeListener(id);
169
+ };
170
+ }, [value, onChange]);
171
+ };
172
+ var useAnimatedNumberStyle = function (value, getStyle) {
173
+ return getStyle(value.getInstance());
174
+ };
175
+ var useAnimatedNumbersStyle = function (vals, getStyle) {
176
+ return getStyle(...vals.map(function (v) {
177
+ return v.getInstance();
178
+ }));
179
+ };
180
+ function createAnimations(animations, options) {
181
+ var _options_useNativeDriver;
182
+ var nativeDriver = (_options_useNativeDriver = options === null || options === void 0 ? void 0 : options.useNativeDriver) !== null && _options_useNativeDriver !== void 0 ? _options_useNativeDriver : isFabric;
164
183
  return {
165
- isReactNative: !0,
184
+ isReactNative: true,
166
185
  inputStyle: "value",
167
186
  outputStyle: "inline",
187
+ avoidReRenders: true,
168
188
  animations,
189
+ needsCustomComponent: true,
169
190
  View: AnimatedView,
170
191
  Text: AnimatedText,
171
192
  useAnimatedNumber,
172
193
  useAnimatedNumberReaction,
173
194
  useAnimatedNumberStyle,
195
+ useAnimatedNumbersStyle,
174
196
  usePresence: import_use_presence.usePresence,
175
197
  ResetPresence: import_use_presence.ResetPresence,
176
198
  useAnimations: function (param) {
177
199
  var {
178
- props,
179
- onDidAnimate,
180
- style,
181
- componentState,
182
- presence
183
- } = param,
184
- _themeState_name,
185
- isDisabled = import_constants.isWeb && componentState.unmounted === !0,
186
- isExiting = presence?.[0] === !1,
187
- sendExitComplete = presence?.[1],
188
- [, themeState] = (0, import_web.useThemeWithState)({}),
189
- isDark = themeState?.scheme === "dark" || (themeState == null || (_themeState_name = themeState.name) === null || _themeState_name === void 0 ? void 0 : _themeState_name.startsWith("dark")),
190
- animateStyles = import_react.default.useRef({}),
191
- animatedTranforms = import_react.default.useRef([]),
192
- animationsState = import_react.default.useRef(/* @__PURE__ */new WeakMap()),
193
- animateOnly = props.animateOnly || [],
194
- hasTransitionOnly = !!props.animateOnly,
195
- isEntering = !!componentState.unmounted,
196
- wasEnteringRef = import_react.default.useRef(isEntering),
197
- justFinishedEntering = wasEnteringRef.current && !isEntering;
200
+ props,
201
+ onDidAnimate,
202
+ style,
203
+ componentState,
204
+ presence,
205
+ useStyleEmitter
206
+ } = param;
207
+ var _themeState_name;
208
+ var isDisabled = import_constants.isWeb && componentState.unmounted === true;
209
+ var isExiting = (presence === null || presence === void 0 ? void 0 : presence[0]) === false;
210
+ var sendExitComplete = presence === null || presence === void 0 ? void 0 : presence[1];
211
+ var [, themeState] = (0, import_web.useThemeWithState)({});
212
+ var isDark = (themeState === null || themeState === void 0 ? void 0 : themeState.scheme) === "dark" || (themeState === null || themeState === void 0 ? void 0 : (_themeState_name = themeState.name) === null || _themeState_name === void 0 ? void 0 : _themeState_name.startsWith("dark"));
213
+ var animateStyles = import_react.default.useRef({});
214
+ var animatedTranforms = import_react.default.useRef([]);
215
+ var animationsState = import_react.default.useRef(/* @__PURE__ */new WeakMap());
216
+ var exitCycleIdRef = import_react.default.useRef(0);
217
+ var exitCompletedRef = import_react.default.useRef(false);
218
+ var wasExitingRef = import_react.default.useRef(false);
219
+ var justStartedExiting = isExiting && !wasExitingRef.current;
220
+ var justStoppedExiting = !isExiting && wasExitingRef.current;
221
+ if (justStartedExiting) {
222
+ exitCycleIdRef.current++;
223
+ exitCompletedRef.current = false;
224
+ }
225
+ if (justStoppedExiting) {
226
+ exitCycleIdRef.current++;
227
+ }
228
+ var animateOnly = props.animateOnly || [];
229
+ var hasTransitionOnly = !!props.animateOnly;
230
+ var isEntering = !!componentState.unmounted;
231
+ var wasEnteringRef = import_react.default.useRef(isEntering);
232
+ var justFinishedEntering = wasEnteringRef.current && !isEntering;
198
233
  import_react.default.useEffect(function () {
199
234
  wasEnteringRef.current = isEntering;
200
235
  });
201
- var args = [JSON.stringify(style), componentState, isExiting, !!onDidAnimate, isDark, justFinishedEntering],
202
- isThereNoNativeStyleKeys = import_react.default.useMemo(function () {
203
- return import_constants.isWeb ? !0 : Object.keys(style).some(function (key) {
204
- return animateOnly ? !animatedStyleKey[key] && animateOnly.indexOf(key) === -1 : !animatedStyleKey[key];
205
- });
206
- }, args),
207
- res = import_react.default.useMemo(function () {
208
- var runners = [],
209
- completions = [],
210
- animationState = isExiting ? "exit" : isEntering || justFinishedEntering ? "enter" : "default",
211
- nonAnimatedStyle = {};
212
- for (var key in style) {
213
- var rawVal = style[key],
214
- val = resolveDynamicValue(rawVal, isDark);
215
- if (val !== void 0 && !isDisabled) {
216
- if (animatedStyleKey[key] == null && !costlyToAnimateStyleKey[key]) {
217
- nonAnimatedStyle[key] = val;
218
- continue;
219
- }
220
- if (hasTransitionOnly && !animateOnly.includes(key)) {
221
- nonAnimatedStyle[key] = val;
222
- continue;
223
- }
224
- if (key !== "transform") {
225
- animateStyles.current[key] = update(key, animateStyles.current[key], val);
226
- continue;
236
+ var args = [JSON.stringify(style), componentState, isExiting, !!onDidAnimate, isDark, justFinishedEntering, hasTransitionOnly];
237
+ var res = import_react.default.useMemo(function () {
238
+ var runners = [];
239
+ var completions = [];
240
+ var animationState = isExiting ? "exit" : isEntering || justFinishedEntering ? "enter" : "default";
241
+ var nonAnimatedStyle = {};
242
+ for (var key in style) {
243
+ var rawVal = style[key];
244
+ var val = resolveDynamicValue(rawVal, isDark);
245
+ if (val === void 0) continue;
246
+ if (isDisabled) {
247
+ continue;
248
+ }
249
+ if (animatedStyleKey[key] == null && !costlyToAnimateStyleKey[key]) {
250
+ nonAnimatedStyle[key] = val;
251
+ continue;
252
+ }
253
+ if (hasTransitionOnly && !animateOnly.includes(key)) {
254
+ nonAnimatedStyle[key] = val;
255
+ continue;
256
+ }
257
+ if (key !== "transform") {
258
+ animateStyles.current[key] = update(key, animateStyles.current[key], val);
259
+ continue;
260
+ }
261
+ if (!val) continue;
262
+ if (typeof val === "string") {
263
+ console.warn(`Warning: Tamagui can't animate string transforms yet!`);
264
+ continue;
265
+ }
266
+ var _iteratorNormalCompletion = true,
267
+ _didIteratorError = false,
268
+ _iteratorError = void 0;
269
+ try {
270
+ for (var _iterator = val.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
271
+ var [index, transform] = _step.value;
272
+ var _animatedTranforms_current_index;
273
+ if (!transform) continue;
274
+ var tkey = Object.keys(transform)[0];
275
+ var currentTransform = (_animatedTranforms_current_index = animatedTranforms.current[index]) === null || _animatedTranforms_current_index === void 0 ? void 0 : _animatedTranforms_current_index[tkey];
276
+ animatedTranforms.current[index] = {
277
+ [tkey]: update(tkey, currentTransform, transform[tkey])
278
+ };
279
+ animatedTranforms.current = [...animatedTranforms.current];
280
+ }
281
+ } catch (err) {
282
+ _didIteratorError = true;
283
+ _iteratorError = err;
284
+ } finally {
285
+ try {
286
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
287
+ _iterator.return();
227
288
  }
228
- if (val) {
229
- if (typeof val == "string") {
230
- console.warn("Warning: Tamagui can't animate string transforms yet!");
231
- continue;
232
- }
233
- var _iteratorNormalCompletion = !0,
234
- _didIteratorError = !1,
235
- _iteratorError = void 0;
236
- try {
237
- for (var _iterator = val.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
238
- var [index, transform] = _step.value,
239
- _animatedTranforms_current_index;
240
- if (transform) {
241
- var tkey = Object.keys(transform)[0],
242
- currentTransform = (_animatedTranforms_current_index = animatedTranforms.current[index]) === null || _animatedTranforms_current_index === void 0 ? void 0 : _animatedTranforms_current_index[tkey];
243
- animatedTranforms.current[index] = {
244
- [tkey]: update(tkey, currentTransform, transform[tkey])
245
- }, animatedTranforms.current = [...animatedTranforms.current];
246
- }
247
- }
248
- } catch (err) {
249
- _didIteratorError = !0, _iteratorError = err;
250
- } finally {
251
- try {
252
- !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
253
- } finally {
254
- if (_didIteratorError) throw _iteratorError;
255
- }
256
- }
289
+ } finally {
290
+ if (_didIteratorError) {
291
+ throw _iteratorError;
257
292
  }
258
293
  }
259
294
  }
260
- var animatedStyle = {
261
- ...Object.fromEntries(Object.entries(animateStyles.current).map(function (param2) {
262
- var [k, v] = param2,
263
- _animationsState_current_get;
264
- return [k, ((_animationsState_current_get = animationsState.current.get(v)) === null || _animationsState_current_get === void 0 ? void 0 : _animationsState_current_get.interpolation) || v];
265
- })),
266
- transform: animatedTranforms.current.map(function (r) {
267
- var _animationsState_current_get,
268
- key2 = Object.keys(r)[0],
269
- val2 = ((_animationsState_current_get = animationsState.current.get(r[key2])) === null || _animationsState_current_get === void 0 ? void 0 : _animationsState_current_get.interpolation) || r[key2];
270
- return {
271
- [key2]: val2
272
- };
273
- })
274
- };
275
- return {
276
- runners,
277
- completions,
278
- style: [nonAnimatedStyle, animatedStyle]
279
- };
280
- function update(key2, animated, valIn) {
281
- var isColorStyleKey = colorStyleKey[key2],
282
- [val2, type] = isColorStyleKey ? [0, void 0] : getValue(valIn),
283
- animateToValue = val2,
284
- value = animated || new import_react_native.Animated.Value(val2),
285
- curInterpolation = animationsState.current.get(value),
286
- interpolateArgs;
287
- if (type) {
288
- var _curInterpolation_current;
289
- interpolateArgs = getInterpolated((_curInterpolation_current = curInterpolation?.current) !== null && _curInterpolation_current !== void 0 ? _curInterpolation_current : value._value, val2, type), animationsState.current.set(value, {
290
- interpolation: value.interpolate(interpolateArgs),
291
- current: val2
292
- });
293
- }
294
- if (isColorStyleKey && (animateToValue = curInterpolation?.animateToValue ? 0 : 1, interpolateArgs = getColorInterpolated(curInterpolation?.current,
295
+ }
296
+ var animatedTransformStyle = animatedTranforms.current.length > 0 ? {
297
+ transform: animatedTranforms.current.map(function (r) {
298
+ var _animationsState_current_get;
299
+ var key2 = Object.keys(r)[0];
300
+ var val2 = ((_animationsState_current_get = animationsState.current.get(r[key2])) === null || _animationsState_current_get === void 0 ? void 0 : _animationsState_current_get.interpolation) || r[key2];
301
+ return {
302
+ [key2]: val2
303
+ };
304
+ })
305
+ } : {};
306
+ var animatedStyle = {
307
+ ...Object.fromEntries(Object.entries(animateStyles.current).map(function (param2) {
308
+ var [k, v] = param2;
309
+ var _animationsState_current_get;
310
+ return [k, ((_animationsState_current_get = animationsState.current.get(v)) === null || _animationsState_current_get === void 0 ? void 0 : _animationsState_current_get.interpolation) || v];
311
+ })),
312
+ ...animatedTransformStyle
313
+ };
314
+ return {
315
+ runners,
316
+ completions,
317
+ style: [nonAnimatedStyle, animatedStyle]
318
+ };
319
+ function update(key2, animated, valIn) {
320
+ var isColorStyleKey = colorStyleKey[key2];
321
+ var [val2, type] = isColorStyleKey ? [0, void 0] : getValue(valIn);
322
+ var animateToValue = val2;
323
+ var value = animated || new import_react_native.Animated.Value(val2);
324
+ var curInterpolation = animationsState.current.get(value);
325
+ var interpolateArgs;
326
+ if (type) {
327
+ var _curInterpolation_current;
328
+ interpolateArgs = getInterpolated((_curInterpolation_current = curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.current) !== null && _curInterpolation_current !== void 0 ? _curInterpolation_current : value["_value"], val2, type);
329
+ animationsState.current.set(value, {
330
+ interpolation: value.interpolate(interpolateArgs),
331
+ current: val2
332
+ });
333
+ }
334
+ if (isColorStyleKey) {
335
+ animateToValue = (curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.animateToValue) ? 0 : 1;
336
+ interpolateArgs = getColorInterpolated(curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.current,
295
337
  // valIn is the next color
296
- valIn, animateToValue), animationsState.current.set(value, {
338
+ valIn, animateToValue);
339
+ animationsState.current.set(value, {
297
340
  current: valIn,
298
341
  interpolation: value.interpolate(interpolateArgs),
299
- animateToValue: curInterpolation?.animateToValue ? 0 : 1
300
- })), value) {
301
- var animationConfig = getAnimationConfig(key2, animations, props.transition, animationState),
302
- resolve,
303
- promise = new Promise(function (res2) {
304
- resolve = res2;
342
+ animateToValue: (curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.animateToValue) ? 0 : 1
343
+ });
344
+ }
345
+ if (value) {
346
+ var animationConfig = getAnimationConfig(key2, animations, props.transition, animationState);
347
+ var resolve;
348
+ var promise = new Promise(function (res2) {
349
+ resolve = res2;
350
+ });
351
+ completions.push(promise);
352
+ runners.push(function () {
353
+ value.stopAnimation();
354
+ function getAnimation() {
355
+ return import_react_native.Animated[animationConfig.type || "spring"](value, {
356
+ toValue: animateToValue,
357
+ useNativeDriver: nativeDriver,
358
+ ...animationConfig
305
359
  });
306
- completions.push(promise), runners.push(function () {
307
- value.stopAnimation();
308
- function getAnimation() {
309
- return import_react_native.Animated[animationConfig.type || "spring"](value, {
310
- toValue: animateToValue,
311
- useNativeDriver: !import_constants.isWeb && !isThereNoNativeStyleKeys,
312
- ...animationConfig
313
- });
360
+ }
361
+ var animation = animationConfig.delay ? import_react_native.Animated.sequence([import_react_native.Animated.delay(animationConfig.delay), getAnimation()]) : getAnimation();
362
+ animation.start(function (param2) {
363
+ var {
364
+ finished
365
+ } = param2;
366
+ if (finished || isExiting) {
367
+ resolve();
314
368
  }
315
- var animation = animationConfig.delay ? import_react_native.Animated.sequence([import_react_native.Animated.delay(animationConfig.delay), getAnimation()]) : getAnimation();
316
- animation.start(function (param2) {
317
- var {
318
- finished
319
- } = param2;
320
- finished && resolve();
321
- });
322
369
  });
370
+ });
371
+ }
372
+ if (process.env.NODE_ENV === "development") {
373
+ if (props["debug"] === "verbose") {
374
+ console.info(" \u{1F4A0} animate", key2, `from (${value["_value"]}) to`, valIn, `(${val2})`, "type", type, "interpolate", interpolateArgs);
323
375
  }
324
- return process.env.NODE_ENV === "development" && props.debug === "verbose" && console.info(" \u{1F4A0} animate", key2, `from (${value._value}) to`, valIn, `(${val2})`, "type", type, "interpolate", interpolateArgs), value;
325
376
  }
326
- }, args);
327
- return (0, import_constants.useIsomorphicLayoutEffect)(function () {
377
+ return value;
378
+ }
379
+ }, args);
380
+ import_react.default.useEffect(function () {
381
+ wasExitingRef.current = isExiting;
382
+ });
383
+ (0, import_constants.useIsomorphicLayoutEffect)(function () {
328
384
  res.runners.forEach(function (r) {
329
385
  return r();
330
386
  });
331
- var cancel = !1;
332
- return Promise.all(res.completions).then(function () {
333
- cancel || (onDidAnimate?.(), isExiting && sendExitComplete?.());
334
- }), function () {
335
- cancel = !0;
387
+ var cycleId = exitCycleIdRef.current;
388
+ if (res.completions.length === 0) {
389
+ onDidAnimate === null || onDidAnimate === void 0 ? void 0 : onDidAnimate();
390
+ if (isExiting && !exitCompletedRef.current) {
391
+ exitCompletedRef.current = true;
392
+ sendExitComplete === null || sendExitComplete === void 0 ? void 0 : sendExitComplete();
393
+ }
394
+ return;
395
+ }
396
+ var cancel = false;
397
+ Promise.all(res.completions).then(function () {
398
+ if (cancel) return;
399
+ if (isExiting && cycleId !== exitCycleIdRef.current) return;
400
+ if (isExiting && exitCompletedRef.current) return;
401
+ onDidAnimate === null || onDidAnimate === void 0 ? void 0 : onDidAnimate();
402
+ if (isExiting) {
403
+ exitCompletedRef.current = true;
404
+ sendExitComplete === null || sendExitComplete === void 0 ? void 0 : sendExitComplete();
405
+ }
406
+ });
407
+ return function () {
408
+ cancel = true;
336
409
  };
337
- }, args), process.env.NODE_ENV === "development" && props.debug === "verbose" && console.info("Animated", {
338
- response: res,
339
- inputStyle: style,
340
- isExiting
341
- }), res;
410
+ }, args);
411
+ useStyleEmitter === null || useStyleEmitter === void 0 ? void 0 : useStyleEmitter(function (nextStyle) {
412
+ for (var key in nextStyle) {
413
+ var rawVal = nextStyle[key];
414
+ var val = resolveDynamicValue(rawVal, isDark);
415
+ if (val === void 0) continue;
416
+ if (key === "transform" && Array.isArray(val)) {
417
+ var _iteratorNormalCompletion = true,
418
+ _didIteratorError = false,
419
+ _iteratorError = void 0;
420
+ try {
421
+ for (var _iterator = val.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
422
+ var [index, transform] = _step.value;
423
+ var _animatedTranforms_current_index;
424
+ if (!transform) continue;
425
+ var tkey = Object.keys(transform)[0];
426
+ var currentTransform = (_animatedTranforms_current_index = animatedTranforms.current[index]) === null || _animatedTranforms_current_index === void 0 ? void 0 : _animatedTranforms_current_index[tkey];
427
+ animatedTranforms.current[index] = {
428
+ [tkey]: update(tkey, currentTransform, transform[tkey])
429
+ };
430
+ }
431
+ } catch (err) {
432
+ _didIteratorError = true;
433
+ _iteratorError = err;
434
+ } finally {
435
+ try {
436
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
437
+ _iterator.return();
438
+ }
439
+ } finally {
440
+ if (_didIteratorError) {
441
+ throw _iteratorError;
442
+ }
443
+ }
444
+ }
445
+ } else if (animatedStyleKey[key] != null || costlyToAnimateStyleKey[key]) {
446
+ animateStyles.current[key] = update(key, animateStyles.current[key], val);
447
+ }
448
+ }
449
+ res.runners.forEach(function (r) {
450
+ return r();
451
+ });
452
+ function update(key2, animated, valIn) {
453
+ var isColor = colorStyleKey[key2];
454
+ var [numVal, type] = isColor ? [0, void 0] : getValue(valIn);
455
+ var animateToValue = numVal;
456
+ var value = animated || new import_react_native.Animated.Value(numVal);
457
+ var curInterpolation = animationsState.current.get(value);
458
+ if (type) {
459
+ var _curInterpolation_current;
460
+ animationsState.current.set(value, {
461
+ interpolation: value.interpolate(getInterpolated((_curInterpolation_current = curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.current) !== null && _curInterpolation_current !== void 0 ? _curInterpolation_current : value["_value"], numVal, type)),
462
+ current: numVal
463
+ });
464
+ }
465
+ if (isColor) {
466
+ animateToValue = (curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.animateToValue) ? 0 : 1;
467
+ animationsState.current.set(value, {
468
+ current: valIn,
469
+ interpolation: value.interpolate(getColorInterpolated(curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.current, valIn, animateToValue)),
470
+ animateToValue: (curInterpolation === null || curInterpolation === void 0 ? void 0 : curInterpolation.animateToValue) ? 0 : 1
471
+ });
472
+ }
473
+ var animationConfig = getAnimationConfig(key2, animations, props.transition, "default");
474
+ res.runners.push(function () {
475
+ value.stopAnimation();
476
+ var anim = import_react_native.Animated[animationConfig.type || "spring"](value, {
477
+ toValue: animateToValue,
478
+ useNativeDriver: nativeDriver,
479
+ ...animationConfig
480
+ });
481
+ (animationConfig.delay ? import_react_native.Animated.sequence([import_react_native.Animated.delay(animationConfig.delay), anim]) : anim).start();
482
+ });
483
+ return value;
484
+ }
485
+ });
486
+ if (process.env.NODE_ENV === "development") {
487
+ if (props["debug"] === "verbose") {
488
+ console.info(`Animated`, {
489
+ response: res,
490
+ inputStyle: style,
491
+ isExiting
492
+ });
493
+ }
494
+ }
495
+ return res;
342
496
  }
343
497
  };
344
498
  }
345
499
  function getColorInterpolated(currentColor, nextColor, animateToValue) {
346
- var inputRange = [0, 1],
347
- outputRange = [currentColor || nextColor, nextColor];
348
- return animateToValue === 0 && outputRange.reverse(), {
500
+ var inputRange = [0, 1];
501
+ var outputRange = [currentColor ? currentColor : nextColor, nextColor];
502
+ if (animateToValue === 0) {
503
+ outputRange.reverse();
504
+ }
505
+ return {
349
506
  inputRange,
350
507
  outputRange
351
508
  };
352
509
  }
353
510
  function getInterpolated(current, next) {
354
511
  var postfix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "deg";
355
- next === current && (current = next - 1e-9);
356
- var inputRange = [current, next],
357
- outputRange = [`${current}${postfix}`, `${next}${postfix}`];
358
- return next < current && (inputRange.reverse(), outputRange.reverse()), {
512
+ if (next === current) {
513
+ current = next - 1e-9;
514
+ }
515
+ var inputRange = [current, next];
516
+ var outputRange = [`${current}${postfix}`, `${next}${postfix}`];
517
+ if (next < current) {
518
+ inputRange.reverse();
519
+ outputRange.reverse();
520
+ }
521
+ return {
359
522
  inputRange,
360
523
  outputRange
361
524
  };
362
525
  }
363
526
  function getAnimationConfig(key, animations, transition) {
364
- var animationState = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "default",
365
- normalized = (0, import_animation_helpers.normalizeTransition)(transition),
366
- shortKey = transformShorthands[key],
367
- _normalized_properties_key,
368
- propAnimation = (_normalized_properties_key = normalized.properties[key]) !== null && _normalized_properties_key !== void 0 ? _normalized_properties_key : normalized.properties[shortKey],
369
- animationType = null,
370
- extraConf = {};
371
- typeof propAnimation == "string" ? animationType = propAnimation : propAnimation && (typeof propAnimation > "u" ? "undefined" : _type_of(propAnimation)) === "object" ? (animationType = propAnimation.type || (0, import_animation_helpers.getEffectiveAnimation)(normalized, animationState), extraConf = propAnimation) : animationType = (0, import_animation_helpers.getEffectiveAnimation)(normalized, animationState), normalized.delay && !extraConf.delay && (extraConf = {
372
- ...extraConf,
373
- delay: normalized.delay
374
- });
527
+ var animationState = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "default";
528
+ var normalized = (0, import_animation_helpers.normalizeTransition)(transition);
529
+ var shortKey = transformShorthands[key];
530
+ var _normalized_properties_key;
531
+ var propAnimation = (_normalized_properties_key = normalized.properties[key]) !== null && _normalized_properties_key !== void 0 ? _normalized_properties_key : normalized.properties[shortKey];
532
+ var animationType = null;
533
+ var extraConf = {};
534
+ if (typeof propAnimation === "string") {
535
+ animationType = propAnimation;
536
+ } else if (propAnimation && (typeof propAnimation === "undefined" ? "undefined" : _type_of(propAnimation)) === "object") {
537
+ animationType = propAnimation.type || (0, import_animation_helpers.getEffectiveAnimation)(normalized, animationState);
538
+ extraConf = propAnimation;
539
+ } else {
540
+ animationType = (0, import_animation_helpers.getEffectiveAnimation)(normalized, animationState);
541
+ }
542
+ if (normalized.delay && !extraConf.delay) {
543
+ extraConf = {
544
+ ...extraConf,
545
+ delay: normalized.delay
546
+ };
547
+ }
375
548
  var found = animationType ? animations[animationType] : {};
376
549
  return {
377
550
  ...found,
551
+ // Apply global spring config overrides (from transition={['bouncy', { stiffness: 1000 }]})
552
+ ...normalized.config,
553
+ // Property-specific config takes highest precedence
378
554
  ...extraConf
379
555
  };
380
556
  }
@@ -385,10 +561,12 @@ var transformShorthands = {
385
561
  translateY: "y"
386
562
  };
387
563
  function getValue(input) {
388
- var isColor = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !1;
389
- if (typeof input != "string") return [input];
390
- var _input_match,
391
- [_, number, after] = (_input_match = input.match(/([-0-9]+)(deg|%|px)/)) !== null && _input_match !== void 0 ? _input_match : [];
564
+ var isColor = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
565
+ if (typeof input !== "string") {
566
+ return [input];
567
+ }
568
+ var _input_match;
569
+ var [_, number, after] = (_input_match = input.match(/([-0-9]+)(deg|%|px)/)) !== null && _input_match !== void 0 ? _input_match : [];
392
570
  return [+number, after];
393
571
  }
394
572
  //# sourceMappingURL=createAnimations.native.js.map