1 | import { __read } from "tslib";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | import { bezier } from './bezier-easing';
|
7 | export var convertToDash = function convertToDash(str) {
|
8 | str = str.replace(/([A-Z])/g, function (letter) {
|
9 | return "-".concat(letter.toLowerCase());
|
10 | });
|
11 |
|
12 | return str.charAt(0) === '-' ? str.substr(1) : str;
|
13 | };
|
14 | export var limit = function limit(value, min, max) {
|
15 | return Math.min(Math.max(value, min), max);
|
16 | };
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | export var Quad = function Quad(t) {
|
22 | return Math.pow(t, 2);
|
23 | };
|
24 | export var Cubic = function Cubic(t) {
|
25 | return Math.pow(t, 3);
|
26 | };
|
27 | export var Quart = function Quart(t) {
|
28 | return Math.pow(t, 4);
|
29 | };
|
30 | export var Quint = function Quint(t) {
|
31 | return Math.pow(t, 5);
|
32 | };
|
33 | export var Expo = function Expo(t) {
|
34 | return Math.pow(t, 6);
|
35 | };
|
36 | export var Sine = function Sine(t) {
|
37 | return 1 - Math.cos(t * Math.PI / 2);
|
38 | };
|
39 | export var Circ = function Circ(t) {
|
40 | return 1 - Math.sqrt(1 - t * t);
|
41 | };
|
42 | export var Back = function Back(t) {
|
43 | return t * t * (3 * t - 2);
|
44 | };
|
45 | export var Bounce = function Bounce(t) {
|
46 | var pow2,
|
47 | b = 4;
|
48 |
|
49 | while (t < ((pow2 = Math.pow(2, --b)) - 1) / 11) {}
|
50 |
|
51 | return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow((pow2 * 3 - 2) / 22 - t, 2);
|
52 | };
|
53 | export var Elastic = function Elastic(t, params) {
|
54 | if (params === void 0) {
|
55 | params = [];
|
56 | }
|
57 |
|
58 | var _a = __read(params, 2),
|
59 | _b = _a[0],
|
60 | amplitude = _b === void 0 ? 1 : _b,
|
61 | _c = _a[1],
|
62 | period = _c === void 0 ? 0.5 : _c;
|
63 |
|
64 | var a = limit(Number(amplitude), 1, 10);
|
65 | var p = limit(Number(period), 0.1, 2);
|
66 | if (t === 0 || t === 1) return t;
|
67 | return -a * Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1 - p / (Math.PI * 2) * Math.asin(1 / a)) * (Math.PI * 2) / p);
|
68 | };
|
69 | export var Spring = function Spring(t, params, duration) {
|
70 | if (params === void 0) {
|
71 | params = [];
|
72 | }
|
73 |
|
74 | var _a = __read(params, 4),
|
75 | _b = _a[0],
|
76 | mass = _b === void 0 ? 1 : _b,
|
77 | _c = _a[1],
|
78 | stiffness = _c === void 0 ? 100 : _c,
|
79 | _d = _a[2],
|
80 | damping = _d === void 0 ? 10 : _d,
|
81 | _e = _a[3],
|
82 | velocity = _e === void 0 ? 0 : _e;
|
83 |
|
84 | mass = limit(mass, 0.1, 1000);
|
85 | stiffness = limit(stiffness, 0.1, 1000);
|
86 | damping = limit(damping, 0.1, 1000);
|
87 | velocity = limit(velocity, 0.1, 1000);
|
88 | var w0 = Math.sqrt(stiffness / mass);
|
89 | var zeta = damping / (2 * Math.sqrt(stiffness * mass));
|
90 | var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;
|
91 | var a = 1;
|
92 | var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;
|
93 | var progress = duration ? duration * t / 1000 : t;
|
94 |
|
95 | if (zeta < 1) {
|
96 | progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));
|
97 | } else {
|
98 | progress = (a + b * progress) * Math.exp(-progress * w0);
|
99 | }
|
100 |
|
101 | if (t === 0 || t === 1) return t;
|
102 | return 1 - progress;
|
103 | };
|
104 |
|
105 |
|
106 |
|
107 |
|
108 | export var EasingDurationCache = new Map();
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | export var INTINITE_LOOP_LIMIT = 10000;
|
114 |
|
115 |
|
116 | export var parseEasingParameters = function parseEasingParameters(str) {
|
117 | var match = /(\(|\s)([^)]+)\)?/.exec(str);
|
118 | return match ? match[2].split(',').map(function (value) {
|
119 | var num = parseFloat(value);
|
120 | return !Number.isNaN(num) ? num : value.trim();
|
121 | }) : [];
|
122 | };
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | export var Steps = function Steps(t, params) {
|
160 | if (params === void 0) {
|
161 | params = [];
|
162 | }
|
163 |
|
164 | var _a = __read(params, 2),
|
165 | _b = _a[0],
|
166 | steps = _b === void 0 ? 10 : _b,
|
167 | type = _a[1];
|
168 |
|
169 | var trunc = type == 'start' ? Math.ceil : Math.floor;
|
170 | return trunc(limit(t, 0, 1) * steps) / steps;
|
171 | };
|
172 |
|
173 | export var Bezier = function Bezier(t, params) {
|
174 | if (params === void 0) {
|
175 | params = [];
|
176 | }
|
177 |
|
178 | var _a = __read(params, 4),
|
179 | mX1 = _a[0],
|
180 | mY1 = _a[1],
|
181 | mX2 = _a[2],
|
182 | mY2 = _a[3];
|
183 |
|
184 | return bezier(mX1, mY1, mX2, mY2)(t);
|
185 | };
|
186 |
|
187 |
|
188 | export var easein = bezier(0.42, 0.0, 1.0, 1.0);
|
189 |
|
190 |
|
191 | export var EaseOut = function EaseOut(ease) {
|
192 | return function (t, params, duration) {
|
193 | if (params === void 0) {
|
194 | params = [];
|
195 | }
|
196 |
|
197 | return 1 - ease(1 - t, params, duration);
|
198 | };
|
199 | };
|
200 |
|
201 |
|
202 | export var EaseInOut = function EaseInOut(ease) {
|
203 | return function (t, params, duration) {
|
204 | if (params === void 0) {
|
205 | params = [];
|
206 | }
|
207 |
|
208 | return t < 0.5 ? ease(t * 2, params, duration) / 2 : 1 - ease(t * -2 + 2, params, duration) / 2;
|
209 | };
|
210 | };
|
211 |
|
212 |
|
213 | export var EaseOutIn = function EaseOutIn(ease) {
|
214 | return function (t, params, duration) {
|
215 | if (params === void 0) {
|
216 | params = [];
|
217 | }
|
218 |
|
219 | return t < 0.5 ? (1 - ease(1 - t * 2, params, duration)) / 2 : (ease(t * 2 - 1, params, duration) + 1) / 2;
|
220 | };
|
221 | };
|
222 |
|
223 |
|
224 |
|
225 |
|
226 | export var EasingFunctions = {
|
227 | steps: Steps,
|
228 | 'step-start': function stepStart(t) {
|
229 | return Steps(t, [1, 'start']);
|
230 | },
|
231 | 'step-end': function stepEnd(t) {
|
232 | return Steps(t, [1, 'end']);
|
233 | },
|
234 | linear: function linear(t) {
|
235 | return t;
|
236 | },
|
237 | 'cubic-bezier': Bezier,
|
238 | ease: function ease(t) {
|
239 | return Bezier(t, [0.25, 0.1, 0.25, 1.0]);
|
240 | },
|
241 | in: easein,
|
242 | out: EaseOut(easein),
|
243 | 'in-out': EaseInOut(easein),
|
244 | 'out-in': EaseOutIn(easein),
|
245 | 'in-quad': Quad,
|
246 | 'out-quad': EaseOut(Quad),
|
247 | 'in-out-quad': EaseInOut(Quad),
|
248 | 'out-in-quad': EaseOutIn(Quad),
|
249 | 'in-cubic': Cubic,
|
250 | 'out-cubic': EaseOut(Cubic),
|
251 | 'in-out-cubic': EaseInOut(Cubic),
|
252 | 'out-in-cubic': EaseOutIn(Cubic),
|
253 | 'in-quart': Quart,
|
254 | 'out-quart': EaseOut(Quart),
|
255 | 'in-out-quart': EaseInOut(Quart),
|
256 | 'out-in-quart': EaseOutIn(Quart),
|
257 | 'in-quint': Quint,
|
258 | 'out-quint': EaseOut(Quint),
|
259 | 'in-out-quint': EaseInOut(Quint),
|
260 | 'out-in-quint': EaseOutIn(Quint),
|
261 | 'in-expo': Expo,
|
262 | 'out-expo': EaseOut(Expo),
|
263 | 'in-out-expo': EaseInOut(Expo),
|
264 | 'out-in-expo': EaseOutIn(Expo),
|
265 | 'in-sine': Sine,
|
266 | 'out-sine': EaseOut(Sine),
|
267 | 'in-out-sine': EaseInOut(Sine),
|
268 | 'out-in-sine': EaseOutIn(Sine),
|
269 | 'in-circ': Circ,
|
270 | 'out-circ': EaseOut(Circ),
|
271 | 'in-out-circ': EaseInOut(Circ),
|
272 | 'out-in-circ': EaseOutIn(Circ),
|
273 | 'in-back': Back,
|
274 | 'out-back': EaseOut(Back),
|
275 | 'in-out-back': EaseInOut(Back),
|
276 | 'out-in-back': EaseOutIn(Back),
|
277 | 'in-bounce': Bounce,
|
278 | 'out-bounce': EaseOut(Bounce),
|
279 | 'in-out-bounce': EaseInOut(Bounce),
|
280 | 'out-in-bounce': EaseOutIn(Bounce),
|
281 | 'in-elastic': Elastic,
|
282 | 'out-elastic': EaseOut(Elastic),
|
283 | 'in-out-elastic': EaseInOut(Elastic),
|
284 | 'out-in-elastic': EaseOutIn(Elastic),
|
285 | spring: Spring,
|
286 | 'spring-in': Spring,
|
287 | 'spring-out': EaseOut(Spring),
|
288 | 'spring-in-out': EaseInOut(Spring),
|
289 | 'spring-out-in': EaseOutIn(Spring)
|
290 | };
|
291 |
|
292 |
|
293 |
|
294 |
|
295 | export var complexEasingSyntax = function complexEasingSyntax(ease) {
|
296 | return convertToDash(ease).replace(/^ease-/, '')
|
297 | .replace(/(\(|\s).+/, '')
|
298 | .toLowerCase().trim();
|
299 | };
|
300 |
|
301 |
|
302 | export var getEasingFunction = function getEasingFunction(ease) {
|
303 | return EasingFunctions[complexEasingSyntax(ease)] || EasingFunctions.linear;
|
304 | };
|
305 |
|
306 |
|
307 |
|
308 |
|
309 |
|
310 |
|
311 |
|
312 |
|
313 |
|
314 |
|
315 |
|
316 |
|
317 |
|
\ | No newline at end of file |