source: node_modules/recharts/lib/animation/easing.js

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 4.2 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.configSpring = exports.configEasing = exports.configBezier = exports.ACCURACY = void 0;
7var ACCURACY = exports.ACCURACY = 1e-4;
8var cubicBezierFactor = (c1, c2) => [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];
9var evaluatePolynomial = (params, t) => params.map((param, i) => param * t ** i).reduce((pre, curr) => pre + curr);
10var cubicBezier = (c1, c2) => t => {
11 var params = cubicBezierFactor(c1, c2);
12 return evaluatePolynomial(params, t);
13};
14var derivativeCubicBezier = (c1, c2) => t => {
15 var params = cubicBezierFactor(c1, c2);
16 var newParams = [...params.map((param, i) => param * i).slice(1), 0];
17 return evaluatePolynomial(newParams, t);
18};
19var parseCubicBezier = easing => {
20 var _easingParts$;
21 var easingParts = easing.split('(');
22 if (easingParts.length !== 2 || easingParts[0] !== 'cubic-bezier') {
23 return null;
24 }
25 var numbers = (_easingParts$ = easingParts[1]) === null || _easingParts$ === void 0 || (_easingParts$ = _easingParts$.split(')')[0]) === null || _easingParts$ === void 0 ? void 0 : _easingParts$.split(',');
26 if (numbers == null || numbers.length !== 4) {
27 return null;
28 }
29 var coords = numbers.map(x => parseFloat(x));
30 return [coords[0], coords[1], coords[2], coords[3]];
31};
32var getBezierCoordinates = function getBezierCoordinates() {
33 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
34 args[_key] = arguments[_key];
35 }
36 if (args.length === 1) {
37 switch (args[0]) {
38 case 'linear':
39 return [0.0, 0.0, 1.0, 1.0];
40 case 'ease':
41 return [0.25, 0.1, 0.25, 1.0];
42 case 'ease-in':
43 return [0.42, 0.0, 1.0, 1.0];
44 case 'ease-out':
45 return [0.42, 0.0, 0.58, 1.0];
46 case 'ease-in-out':
47 return [0.0, 0.0, 0.58, 1.0];
48 default:
49 {
50 var easing = parseCubicBezier(args[0]);
51 if (easing) {
52 return easing;
53 }
54 }
55 }
56 }
57 if (args.length === 4) {
58 return args;
59 }
60
61 // Fallback for invalid inputs. The previous implementation was buggy and would lead to NaN.
62 // Returning linear easing is a safe default.
63 return [0.0, 0.0, 1.0, 1.0];
64};
65var createBezierEasing = (x1, y1, x2, y2) => {
66 var curveX = cubicBezier(x1, x2);
67 var curveY = cubicBezier(y1, y2);
68 var derCurveX = derivativeCubicBezier(x1, x2);
69 var rangeValue = value => {
70 if (value > 1) {
71 return 1;
72 }
73 if (value < 0) {
74 return 0;
75 }
76 return value;
77 };
78 var bezier = _t => {
79 var t = _t > 1 ? 1 : _t;
80 var x = t;
81 for (var i = 0; i < 8; ++i) {
82 var evalT = curveX(x) - t;
83 var derVal = derCurveX(x);
84 if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {
85 return curveY(x);
86 }
87 x = rangeValue(x - evalT / derVal);
88 }
89 return curveY(x);
90 };
91 bezier.isStepper = false;
92 return bezier;
93};
94
95// calculate cubic-bezier using Newton's method
96var configBezier = exports.configBezier = function configBezier() {
97 return createBezierEasing(...getBezierCoordinates(...arguments));
98};
99var configSpring = exports.configSpring = function configSpring() {
100 var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
101 var {
102 stiff = 100,
103 damping = 8,
104 dt = 17
105 } = config;
106 var stepper = (currX, destX, currV) => {
107 var FSpring = -(currX - destX) * stiff;
108 var FDamping = currV * damping;
109 var newV = currV + (FSpring - FDamping) * dt / 1000;
110 var newX = currV * dt / 1000 + currX;
111 if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {
112 return [destX, 0];
113 }
114 return [newX, newV];
115 };
116 stepper.isStepper = true;
117 stepper.dt = dt;
118 return stepper;
119};
120var configEasing = easing => {
121 if (typeof easing === 'string') {
122 switch (easing) {
123 case 'ease':
124 case 'ease-in-out':
125 case 'ease-out':
126 case 'ease-in':
127 case 'linear':
128 return configBezier(easing);
129 case 'spring':
130 return configSpring();
131 default:
132 if (easing.split('(')[0] === 'cubic-bezier') {
133 return configBezier(easing);
134 }
135 }
136 }
137 if (typeof easing === 'function') {
138 return easing;
139 }
140 return null;
141};
142exports.configEasing = configEasing;
Note: See TracBrowser for help on using the repository browser.