@tamagui/animations-css 2.7.7 → 3.0.0-beta.643.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/animated-number.cjs +195 -0
- package/dist/cjs/animated-number.native.cjs +292 -0
- package/dist/cjs/animated-number.native.js +294 -0
- package/dist/cjs/animated-number.native.js.map +1 -0
- package/dist/cjs/createAnimations.cjs +359 -416
- package/dist/cjs/createAnimations.native.cjs +472 -0
- package/dist/cjs/createAnimations.native.js +446 -510
- package/dist/cjs/createAnimations.native.js.map +1 -1
- package/dist/cjs/index.cjs +10 -11
- package/dist/cjs/index.native.cjs +21 -0
- package/dist/cjs/index.native.js +10 -10
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/animated-number.mjs +164 -0
- package/dist/esm/animated-number.mjs.map +1 -0
- package/dist/esm/animated-number.native.js +259 -0
- package/dist/esm/animated-number.native.js.map +1 -0
- package/dist/esm/createAnimations.mjs +344 -391
- package/dist/esm/createAnimations.mjs.map +1 -1
- package/dist/esm/createAnimations.native.js +430 -485
- package/dist/esm/createAnimations.native.js.map +1 -1
- package/dist/esm/index.js +1 -2
- package/dist/esm/index.mjs +1 -2
- package/dist/esm/index.native.js +1 -2
- package/package.json +16 -7
- package/src/animated-number.tsx +262 -0
- package/src/createAnimations.tsx +305 -501
- package/types/animated-number.d.ts +19 -0
- package/types/animated-number.d.ts.map +11 -0
- package/types/createAnimations.d.ts.map +2 -2
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js.map +0 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all) __defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
17
|
+
get: () => from[key],
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
24
|
+
value: mod,
|
|
25
|
+
enumerable: true
|
|
26
|
+
}) : target, mod));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var animated_number_exports = {};
|
|
29
|
+
__export(animated_number_exports, {
|
|
30
|
+
useAnimatedNumber: () => useAnimatedNumber,
|
|
31
|
+
useAnimatedNumberReaction: () => useAnimatedNumberReaction,
|
|
32
|
+
useAnimatedNumberStyle: () => useAnimatedNumberStyle,
|
|
33
|
+
useAnimatedNumbersStyle: () => useAnimatedNumbersStyle
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(animated_number_exports);
|
|
36
|
+
var import_react = __toESM(require("react"), 1);
|
|
37
|
+
var import_react_dom = require("react-dom");
|
|
38
|
+
const hasRAF = typeof requestAnimationFrame !== "undefined";
|
|
39
|
+
function notifyAnimatedNumber(instance, value) {
|
|
40
|
+
instance.current = value;
|
|
41
|
+
if (instance.listeners.size === 0) return;
|
|
42
|
+
(0, import_react_dom.unstable_batchedUpdates)(() => {
|
|
43
|
+
for (const listener of instance.listeners) listener(value);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function useAnimatedNumberStyles(values, getStyle) {
|
|
47
|
+
const token = import_react.default.useRef(null);
|
|
48
|
+
token.current ||= {};
|
|
49
|
+
const [, renderLinkedValue] = import_react.default.useReducer((value) => value + 1, 0);
|
|
50
|
+
const instances = values.map((value) => value.getInstance());
|
|
51
|
+
for (const instance of instances) {
|
|
52
|
+
if (!instance.styleHost) instance.styleHost = token.current;
|
|
53
|
+
}
|
|
54
|
+
import_react.default.useEffect(() => {
|
|
55
|
+
const listener = () => renderLinkedValue();
|
|
56
|
+
for (const instance of instances) {
|
|
57
|
+
if (instance.styleHost !== token.current) instance.listeners.add(listener);
|
|
58
|
+
}
|
|
59
|
+
return () => {
|
|
60
|
+
for (const instance of instances) {
|
|
61
|
+
instance.listeners.delete(listener);
|
|
62
|
+
if (instance.styleHost === token.current) instance.styleHost = null;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}, instances);
|
|
66
|
+
return getStyle(...instances.map((instance) => instance.styleHost === token.current ? instance.target : instance.current));
|
|
67
|
+
}
|
|
68
|
+
function useAnimatedNumber(initial) {
|
|
69
|
+
const [, renderTarget] = import_react.default.useReducer((value) => value + 1, 0);
|
|
70
|
+
const instanceRef = import_react.default.useRef(null);
|
|
71
|
+
if (!instanceRef.current) {
|
|
72
|
+
instanceRef.current = {
|
|
73
|
+
current: initial,
|
|
74
|
+
target: initial,
|
|
75
|
+
listeners: /* @__PURE__ */ new Set(),
|
|
76
|
+
styleHost: null,
|
|
77
|
+
raf: null,
|
|
78
|
+
finish: null,
|
|
79
|
+
renderTarget,
|
|
80
|
+
cancel() {
|
|
81
|
+
if (this.raf !== null) cancelAnimationFrame(this.raf);
|
|
82
|
+
this.raf = null;
|
|
83
|
+
this.finish = null;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const instance = instanceRef.current;
|
|
88
|
+
instance.renderTarget = renderTarget;
|
|
89
|
+
import_react.default.useEffect(() => () => instance.cancel(), [instance]);
|
|
90
|
+
return import_react.default.useMemo(() => ({
|
|
91
|
+
getInstance() {
|
|
92
|
+
return instance;
|
|
93
|
+
},
|
|
94
|
+
getValue() {
|
|
95
|
+
return instance.current;
|
|
96
|
+
},
|
|
97
|
+
setValue(next, config = { type: "spring" }, onFinish) {
|
|
98
|
+
instance.cancel();
|
|
99
|
+
const from = instance.current;
|
|
100
|
+
instance.target = next;
|
|
101
|
+
if (instance.styleHost) instance.renderTarget();
|
|
102
|
+
if (!hasRAF || config.type === "direct" || config.type === "timing" && config.duration === 0 || from === next) {
|
|
103
|
+
notifyAnimatedNumber(instance, next);
|
|
104
|
+
onFinish?.();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (instance.listeners.size === 0 && !onFinish) {
|
|
108
|
+
instance.current = next;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
instance.finish = onFinish ?? null;
|
|
112
|
+
const settle = () => {
|
|
113
|
+
instance.raf = null;
|
|
114
|
+
notifyAnimatedNumber(instance, next);
|
|
115
|
+
const finish = instance.finish;
|
|
116
|
+
instance.finish = null;
|
|
117
|
+
finish?.();
|
|
118
|
+
};
|
|
119
|
+
if (config.type === "timing") {
|
|
120
|
+
const startedAt2 = performance.now();
|
|
121
|
+
const tick2 = () => {
|
|
122
|
+
const progress = Math.min(1, (performance.now() - startedAt2) / config.duration);
|
|
123
|
+
if (progress === 1) {
|
|
124
|
+
settle();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
notifyAnimatedNumber(instance, from + (next - from) * progress);
|
|
128
|
+
instance.raf = requestAnimationFrame(tick2);
|
|
129
|
+
};
|
|
130
|
+
instance.raf = requestAnimationFrame(tick2);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const { stiffness = 300, damping = 35, mass = 1, overshootClamping, restSpeedThreshold: restSpeed = .001, restDisplacementThreshold: restDisplacement = .001 } = config;
|
|
134
|
+
const displacement = from - next;
|
|
135
|
+
const decayRate = damping / (2 * mass);
|
|
136
|
+
const naturalFrequency = Math.sqrt(stiffness / mass);
|
|
137
|
+
const startedAt = performance.now();
|
|
138
|
+
const tick = () => {
|
|
139
|
+
const elapsed = (performance.now() - startedAt) / 1e3;
|
|
140
|
+
let value;
|
|
141
|
+
let velocity;
|
|
142
|
+
if (decayRate < naturalFrequency) {
|
|
143
|
+
const dampedFrequency = Math.sqrt(naturalFrequency ** 2 - decayRate ** 2);
|
|
144
|
+
const b = decayRate * displacement / dampedFrequency;
|
|
145
|
+
const decay = Math.exp(-decayRate * elapsed);
|
|
146
|
+
const cos = Math.cos(dampedFrequency * elapsed);
|
|
147
|
+
const sin = Math.sin(dampedFrequency * elapsed);
|
|
148
|
+
value = next + decay * (displacement * cos + b * sin);
|
|
149
|
+
velocity = decay * ((-decayRate * displacement + b * dampedFrequency) * cos + (-decayRate * b - displacement * dampedFrequency) * sin);
|
|
150
|
+
} else if (decayRate === naturalFrequency) {
|
|
151
|
+
const b = decayRate * displacement;
|
|
152
|
+
const decay = Math.exp(-decayRate * elapsed);
|
|
153
|
+
value = next + (displacement + b * elapsed) * decay;
|
|
154
|
+
velocity = (b - decayRate * (displacement + b * elapsed)) * decay;
|
|
155
|
+
} else {
|
|
156
|
+
const frequency = Math.sqrt(decayRate ** 2 - naturalFrequency ** 2);
|
|
157
|
+
const slowRoot = -decayRate + frequency;
|
|
158
|
+
const fastRoot = -decayRate - frequency;
|
|
159
|
+
const slowCoefficient = -fastRoot * displacement / (slowRoot - fastRoot);
|
|
160
|
+
const fastCoefficient = displacement - slowCoefficient;
|
|
161
|
+
value = next + slowCoefficient * Math.exp(slowRoot * elapsed) + fastCoefficient * Math.exp(fastRoot * elapsed);
|
|
162
|
+
velocity = slowCoefficient * slowRoot * Math.exp(slowRoot * elapsed) + fastCoefficient * fastRoot * Math.exp(fastRoot * elapsed);
|
|
163
|
+
}
|
|
164
|
+
if (overshootClamping && (from < next && value > next || from > next && value < next)) {
|
|
165
|
+
value = next;
|
|
166
|
+
velocity = 0;
|
|
167
|
+
}
|
|
168
|
+
if (Math.abs(velocity) <= restSpeed && Math.abs(next - value) <= restDisplacement) {
|
|
169
|
+
settle();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
notifyAnimatedNumber(instance, value);
|
|
173
|
+
instance.raf = requestAnimationFrame(tick);
|
|
174
|
+
};
|
|
175
|
+
instance.raf = requestAnimationFrame(tick);
|
|
176
|
+
},
|
|
177
|
+
stop() {
|
|
178
|
+
instance.cancel();
|
|
179
|
+
}
|
|
180
|
+
}), [instance]);
|
|
181
|
+
}
|
|
182
|
+
const useAnimatedNumberReaction = ({ value }, onValue) => {
|
|
183
|
+
const onValueRef = import_react.default.useRef(onValue);
|
|
184
|
+
onValueRef.current = onValue;
|
|
185
|
+
import_react.default.useEffect(() => {
|
|
186
|
+
const instance = value.getInstance();
|
|
187
|
+
const listener = (current) => onValueRef.current(current);
|
|
188
|
+
instance.listeners.add(listener);
|
|
189
|
+
return () => {
|
|
190
|
+
instance.listeners.delete(listener);
|
|
191
|
+
};
|
|
192
|
+
}, [value]);
|
|
193
|
+
};
|
|
194
|
+
const useAnimatedNumberStyle = (val, getStyle) => useAnimatedNumberStyles([val], getStyle);
|
|
195
|
+
const useAnimatedNumbersStyle = (vals, getStyle) => useAnimatedNumberStyles(vals, getStyle);
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all) __defProp(target, name, {
|
|
12
|
+
get: all[name],
|
|
13
|
+
enumerable: true
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
19
|
+
get: () => from[key],
|
|
20
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return to;
|
|
24
|
+
};
|
|
25
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
26
|
+
value: mod,
|
|
27
|
+
enumerable: true
|
|
28
|
+
}) : target, mod));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var animated_number_exports = {};
|
|
31
|
+
__export(animated_number_exports, {
|
|
32
|
+
useAnimatedNumber: () => useAnimatedNumber,
|
|
33
|
+
useAnimatedNumberReaction: () => useAnimatedNumberReaction,
|
|
34
|
+
useAnimatedNumberStyle: () => useAnimatedNumberStyle,
|
|
35
|
+
useAnimatedNumbersStyle: () => useAnimatedNumbersStyle
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(animated_number_exports);
|
|
38
|
+
var import_react = __toESM(require("react"), 1);
|
|
39
|
+
var import_react_dom = require("react-dom");
|
|
40
|
+
var hasRAF = typeof requestAnimationFrame !== "undefined";
|
|
41
|
+
function notifyAnimatedNumber(instance, value) {
|
|
42
|
+
instance.current = value;
|
|
43
|
+
if (instance.listeners.size === 0) return;
|
|
44
|
+
(0, import_react_dom.unstable_batchedUpdates)(function() {
|
|
45
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
46
|
+
try {
|
|
47
|
+
for (var _iterator = instance.listeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
48
|
+
var listener = _step.value;
|
|
49
|
+
listener(value);
|
|
50
|
+
}
|
|
51
|
+
} catch (err) {
|
|
52
|
+
_didIteratorError = true;
|
|
53
|
+
_iteratorError = err;
|
|
54
|
+
} finally {
|
|
55
|
+
try {
|
|
56
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
57
|
+
_iterator.return();
|
|
58
|
+
}
|
|
59
|
+
} finally {
|
|
60
|
+
if (_didIteratorError) {
|
|
61
|
+
throw _iteratorError;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function useAnimatedNumberStyles(values, getStyle) {
|
|
68
|
+
var _token;
|
|
69
|
+
var token = import_react.default.useRef(null);
|
|
70
|
+
(_token = token).current || (_token.current = {});
|
|
71
|
+
var [, renderLinkedValue] = import_react.default.useReducer(function(value) {
|
|
72
|
+
return value + 1;
|
|
73
|
+
}, 0);
|
|
74
|
+
var instances = values.map(function(value) {
|
|
75
|
+
return value.getInstance();
|
|
76
|
+
});
|
|
77
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
78
|
+
try {
|
|
79
|
+
for (var _iterator = instances[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
80
|
+
var instance = _step.value;
|
|
81
|
+
if (!instance.styleHost) instance.styleHost = token.current;
|
|
82
|
+
}
|
|
83
|
+
} catch (err) {
|
|
84
|
+
_didIteratorError = true;
|
|
85
|
+
_iteratorError = err;
|
|
86
|
+
} finally {
|
|
87
|
+
try {
|
|
88
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
89
|
+
_iterator.return();
|
|
90
|
+
}
|
|
91
|
+
} finally {
|
|
92
|
+
if (_didIteratorError) {
|
|
93
|
+
throw _iteratorError;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
import_react.default.useEffect(function() {
|
|
98
|
+
var listener = function() {
|
|
99
|
+
return renderLinkedValue();
|
|
100
|
+
};
|
|
101
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = void 0;
|
|
102
|
+
try {
|
|
103
|
+
for (var _iterator2 = instances[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
104
|
+
var instance2 = _step2.value;
|
|
105
|
+
if (instance2.styleHost !== token.current) instance2.listeners.add(listener);
|
|
106
|
+
}
|
|
107
|
+
} catch (err) {
|
|
108
|
+
_didIteratorError2 = true;
|
|
109
|
+
_iteratorError2 = err;
|
|
110
|
+
} finally {
|
|
111
|
+
try {
|
|
112
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
113
|
+
_iterator2.return();
|
|
114
|
+
}
|
|
115
|
+
} finally {
|
|
116
|
+
if (_didIteratorError2) {
|
|
117
|
+
throw _iteratorError2;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return function() {
|
|
122
|
+
var _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
|
|
123
|
+
try {
|
|
124
|
+
for (var _iterator3 = instances[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
125
|
+
var instance3 = _step3.value;
|
|
126
|
+
instance3.listeners.delete(listener);
|
|
127
|
+
if (instance3.styleHost === token.current) instance3.styleHost = null;
|
|
128
|
+
}
|
|
129
|
+
} catch (err) {
|
|
130
|
+
_didIteratorError3 = true;
|
|
131
|
+
_iteratorError3 = err;
|
|
132
|
+
} finally {
|
|
133
|
+
try {
|
|
134
|
+
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
135
|
+
_iterator3.return();
|
|
136
|
+
}
|
|
137
|
+
} finally {
|
|
138
|
+
if (_didIteratorError3) {
|
|
139
|
+
throw _iteratorError3;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}, instances);
|
|
145
|
+
return getStyle(...instances.map(function(instance2) {
|
|
146
|
+
return instance2.styleHost === token.current ? instance2.target : instance2.current;
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
function useAnimatedNumber(initial) {
|
|
150
|
+
var [, renderTarget] = import_react.default.useReducer(function(value) {
|
|
151
|
+
return value + 1;
|
|
152
|
+
}, 0);
|
|
153
|
+
var instanceRef = import_react.default.useRef(null);
|
|
154
|
+
if (!instanceRef.current) {
|
|
155
|
+
instanceRef.current = {
|
|
156
|
+
current: initial,
|
|
157
|
+
target: initial,
|
|
158
|
+
listeners: /* @__PURE__ */ new Set(),
|
|
159
|
+
styleHost: null,
|
|
160
|
+
raf: null,
|
|
161
|
+
finish: null,
|
|
162
|
+
renderTarget,
|
|
163
|
+
cancel() {
|
|
164
|
+
if (this.raf !== null) cancelAnimationFrame(this.raf);
|
|
165
|
+
this.raf = null;
|
|
166
|
+
this.finish = null;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
var instance = instanceRef.current;
|
|
171
|
+
instance.renderTarget = renderTarget;
|
|
172
|
+
import_react.default.useEffect(function() {
|
|
173
|
+
return function() {
|
|
174
|
+
return instance.cancel();
|
|
175
|
+
};
|
|
176
|
+
}, [instance]);
|
|
177
|
+
return import_react.default.useMemo(function() {
|
|
178
|
+
return {
|
|
179
|
+
getInstance() {
|
|
180
|
+
return instance;
|
|
181
|
+
},
|
|
182
|
+
getValue() {
|
|
183
|
+
return instance.current;
|
|
184
|
+
},
|
|
185
|
+
setValue(next) {
|
|
186
|
+
var config = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : { type: "spring" }, onFinish = arguments.length > 2 ? arguments[2] : void 0;
|
|
187
|
+
instance.cancel();
|
|
188
|
+
var from = instance.current;
|
|
189
|
+
instance.target = next;
|
|
190
|
+
if (instance.styleHost) instance.renderTarget();
|
|
191
|
+
if (!hasRAF || config.type === "direct" || config.type === "timing" && config.duration === 0 || from === next) {
|
|
192
|
+
notifyAnimatedNumber(instance, next);
|
|
193
|
+
onFinish === null || onFinish === void 0 ? void 0 : onFinish();
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (instance.listeners.size === 0 && !onFinish) {
|
|
197
|
+
instance.current = next;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
instance.finish = onFinish !== null && onFinish !== void 0 ? onFinish : null;
|
|
201
|
+
var settle = function() {
|
|
202
|
+
instance.raf = null;
|
|
203
|
+
notifyAnimatedNumber(instance, next);
|
|
204
|
+
var finish = instance.finish;
|
|
205
|
+
instance.finish = null;
|
|
206
|
+
finish === null || finish === void 0 ? void 0 : finish();
|
|
207
|
+
};
|
|
208
|
+
if (config.type === "timing") {
|
|
209
|
+
var startedAt = performance.now();
|
|
210
|
+
var tick = function() {
|
|
211
|
+
var progress = Math.min(1, (performance.now() - startedAt) / config.duration);
|
|
212
|
+
if (progress === 1) {
|
|
213
|
+
settle();
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
notifyAnimatedNumber(instance, from + (next - from) * progress);
|
|
217
|
+
instance.raf = requestAnimationFrame(tick);
|
|
218
|
+
};
|
|
219
|
+
instance.raf = requestAnimationFrame(tick);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
var { stiffness = 300, damping = 35, mass = 1, overshootClamping, restSpeedThreshold: restSpeed = .001, restDisplacementThreshold: restDisplacement = .001 } = config;
|
|
223
|
+
var displacement = from - next;
|
|
224
|
+
var decayRate = damping / (2 * mass);
|
|
225
|
+
var naturalFrequency = Math.sqrt(stiffness / mass);
|
|
226
|
+
var startedAt1 = performance.now();
|
|
227
|
+
var tick1 = function() {
|
|
228
|
+
var elapsed = (performance.now() - startedAt1) / 1e3;
|
|
229
|
+
var value;
|
|
230
|
+
var velocity;
|
|
231
|
+
if (decayRate < naturalFrequency) {
|
|
232
|
+
var dampedFrequency = Math.sqrt(Math.pow(naturalFrequency, 2) - Math.pow(decayRate, 2));
|
|
233
|
+
var b = decayRate * displacement / dampedFrequency;
|
|
234
|
+
var decay = Math.exp(-decayRate * elapsed);
|
|
235
|
+
var cos = Math.cos(dampedFrequency * elapsed);
|
|
236
|
+
var sin = Math.sin(dampedFrequency * elapsed);
|
|
237
|
+
value = next + decay * (displacement * cos + b * sin);
|
|
238
|
+
velocity = decay * ((-decayRate * displacement + b * dampedFrequency) * cos + (-decayRate * b - displacement * dampedFrequency) * sin);
|
|
239
|
+
} else if (decayRate === naturalFrequency) {
|
|
240
|
+
var b1 = decayRate * displacement;
|
|
241
|
+
var decay1 = Math.exp(-decayRate * elapsed);
|
|
242
|
+
value = next + (displacement + b1 * elapsed) * decay1;
|
|
243
|
+
velocity = (b1 - decayRate * (displacement + b1 * elapsed)) * decay1;
|
|
244
|
+
} else {
|
|
245
|
+
var frequency = Math.sqrt(Math.pow(decayRate, 2) - Math.pow(naturalFrequency, 2));
|
|
246
|
+
var slowRoot = -decayRate + frequency;
|
|
247
|
+
var fastRoot = -decayRate - frequency;
|
|
248
|
+
var slowCoefficient = -fastRoot * displacement / (slowRoot - fastRoot);
|
|
249
|
+
var fastCoefficient = displacement - slowCoefficient;
|
|
250
|
+
value = next + slowCoefficient * Math.exp(slowRoot * elapsed) + fastCoefficient * Math.exp(fastRoot * elapsed);
|
|
251
|
+
velocity = slowCoefficient * slowRoot * Math.exp(slowRoot * elapsed) + fastCoefficient * fastRoot * Math.exp(fastRoot * elapsed);
|
|
252
|
+
}
|
|
253
|
+
if (overshootClamping && (from < next && value > next || from > next && value < next)) {
|
|
254
|
+
value = next;
|
|
255
|
+
velocity = 0;
|
|
256
|
+
}
|
|
257
|
+
if (Math.abs(velocity) <= restSpeed && Math.abs(next - value) <= restDisplacement) {
|
|
258
|
+
settle();
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
notifyAnimatedNumber(instance, value);
|
|
262
|
+
instance.raf = requestAnimationFrame(tick1);
|
|
263
|
+
};
|
|
264
|
+
instance.raf = requestAnimationFrame(tick1);
|
|
265
|
+
},
|
|
266
|
+
stop() {
|
|
267
|
+
instance.cancel();
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
}, [instance]);
|
|
271
|
+
}
|
|
272
|
+
var useAnimatedNumberReaction = function(param, onValue) {
|
|
273
|
+
var { value } = param;
|
|
274
|
+
var onValueRef = import_react.default.useRef(onValue);
|
|
275
|
+
onValueRef.current = onValue;
|
|
276
|
+
import_react.default.useEffect(function() {
|
|
277
|
+
var instance = value.getInstance();
|
|
278
|
+
var listener = function(current) {
|
|
279
|
+
return onValueRef.current(current);
|
|
280
|
+
};
|
|
281
|
+
instance.listeners.add(listener);
|
|
282
|
+
return function() {
|
|
283
|
+
instance.listeners.delete(listener);
|
|
284
|
+
};
|
|
285
|
+
}, [value]);
|
|
286
|
+
};
|
|
287
|
+
var useAnimatedNumberStyle = function(val, getStyle) {
|
|
288
|
+
return useAnimatedNumberStyles([val], getStyle);
|
|
289
|
+
};
|
|
290
|
+
var useAnimatedNumbersStyle = function(vals, getStyle) {
|
|
291
|
+
return useAnimatedNumberStyles(vals, getStyle);
|
|
292
|
+
};
|