@cloudcome/utils-core 1.19.1 → 1.20.0
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/README.md +1 -1
- package/dist/array.cjs +181 -125
- package/dist/array.cjs.map +1 -1
- package/dist/array.mjs +181 -133
- package/dist/array.mjs.map +1 -1
- package/dist/async.cjs +181 -171
- package/dist/async.cjs.map +1 -1
- package/dist/async.mjs +181 -174
- package/dist/async.mjs.map +1 -1
- package/dist/base64.cjs +16 -12
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.mjs +17 -14
- package/dist/base64.mjs.map +1 -1
- package/dist/cache.cjs +79 -67
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.ts +3 -3
- package/dist/cache.mjs +80 -71
- package/dist/cache.mjs.map +1 -1
- package/dist/color.cjs +478 -167
- package/dist/color.cjs.map +1 -1
- package/dist/color.d.ts +3 -3
- package/dist/color.mjs +480 -197
- package/dist/color.mjs.map +1 -1
- package/dist/crypto.cjs +474 -687
- package/dist/crypto.cjs.map +1 -1
- package/dist/crypto.mjs +476 -693
- package/dist/crypto.mjs.map +1 -1
- package/dist/date.cjs +972 -161
- package/dist/date.cjs.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/date.mjs +962 -191
- package/dist/date.mjs.map +1 -1
- package/dist/dict.cjs +90 -52
- package/dist/dict.cjs.map +1 -1
- package/dist/dict.d.ts +1 -1
- package/dist/dict.mjs +91 -54
- package/dist/dict.mjs.map +1 -1
- package/dist/easing.cjs +105 -103
- package/dist/easing.cjs.map +1 -1
- package/dist/easing.mjs +106 -133
- package/dist/easing.mjs.map +1 -1
- package/dist/emitter.cjs +101 -96
- package/dist/emitter.cjs.map +1 -1
- package/dist/emitter.mjs +101 -97
- package/dist/emitter.mjs.map +1 -1
- package/dist/env.cjs +43 -9
- package/dist/env.cjs.map +1 -1
- package/dist/env.d.ts +1 -1
- package/dist/env.mjs +43 -15
- package/dist/env.mjs.map +1 -1
- package/dist/error.cjs +26 -5
- package/dist/error.cjs.map +1 -1
- package/dist/error.mjs +26 -7
- package/dist/error.mjs.map +1 -1
- package/dist/exception.cjs +38 -20
- package/dist/exception.cjs.map +1 -1
- package/dist/exception.d.ts +5 -5
- package/dist/exception.mjs +38 -21
- package/dist/exception.mjs.map +1 -1
- package/dist/function.cjs +128 -68
- package/dist/function.cjs.map +1 -1
- package/dist/function.mjs +128 -72
- package/dist/function.mjs.map +1 -1
- package/dist/index.cjs +8 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +9 -5
- package/dist/index.mjs.map +1 -1
- package/dist/number.cjs +10 -14
- package/dist/number.mjs +2 -15
- package/dist/object/get-set.d.ts +27 -3
- package/dist/object/merge.d.ts +2 -2
- package/dist/object.cjs +369 -106
- package/dist/object.cjs.map +1 -1
- package/dist/object.mjs +366 -115
- package/dist/object.mjs.map +1 -1
- package/dist/path.cjs +144 -55
- package/dist/path.cjs.map +1 -1
- package/dist/path.mjs +144 -62
- package/dist/path.mjs.map +1 -1
- package/dist/promise.cjs +84 -43
- package/dist/promise.cjs.map +1 -1
- package/dist/promise.mjs +85 -50
- package/dist/promise.mjs.map +1 -1
- package/dist/qs.cjs +63 -39
- package/dist/qs.cjs.map +1 -1
- package/dist/qs.mjs +64 -42
- package/dist/qs.mjs.map +1 -1
- package/dist/regexp.cjs +118 -35
- package/dist/regexp.cjs.map +1 -1
- package/dist/regexp.mjs +119 -46
- package/dist/regexp.mjs.map +1 -1
- package/dist/string.cjs +12 -15
- package/dist/string.mjs +2 -16
- package/dist/string2.cjs +378 -142
- package/dist/string2.cjs.map +1 -1
- package/dist/string2.mjs +259 -143
- package/dist/string2.mjs.map +1 -1
- package/dist/time.cjs +136 -59
- package/dist/time.cjs.map +1 -1
- package/dist/time.mjs +136 -65
- package/dist/time.mjs.map +1 -1
- package/dist/timer.cjs +122 -112
- package/dist/timer.cjs.map +1 -1
- package/dist/timer.mjs +123 -115
- package/dist/timer.mjs.map +1 -1
- package/dist/tree.cjs +207 -112
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.mjs +207 -116
- package/dist/tree.mjs.map +1 -1
- package/dist/try/curry.d.ts +1 -1
- package/dist/try.cjs +36 -37
- package/dist/try.cjs.map +1 -1
- package/dist/try.mjs +35 -37
- package/dist/try.mjs.map +1 -1
- package/dist/type.cjs +126 -24
- package/dist/type.cjs.map +1 -1
- package/dist/type.d.ts +2 -2
- package/dist/type.mjs +128 -45
- package/dist/type.mjs.map +1 -1
- package/dist/types.cjs +0 -2
- package/dist/types.d.ts +2 -2
- package/dist/types.mjs +0 -2
- package/dist/unique.cjs +41 -38
- package/dist/unique.cjs.map +1 -1
- package/dist/unique.mjs +42 -41
- package/dist/unique.mjs.map +1 -1
- package/dist/url.cjs +39 -30
- package/dist/url.cjs.map +1 -1
- package/dist/url.mjs +40 -33
- package/dist/url.mjs.map +1 -1
- package/dist/version.cjs +51 -33
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +51 -35
- package/dist/version.mjs.map +1 -1
- package/package.json +104 -105
- package/dist/const.cjs +0 -14
- package/dist/const.cjs.map +0 -1
- package/dist/const.mjs +0 -15
- package/dist/const.mjs.map +0 -1
- package/dist/core.cjs +0 -362
- package/dist/core.cjs.map +0 -1
- package/dist/core.mjs +0 -363
- package/dist/core.mjs.map +0 -1
- package/dist/crypto/md5.d.mts +0 -1
- package/dist/crypto/sha1.d.mts +0 -1
- package/dist/crypto/sha256.d.mts +0 -1
- package/dist/crypto/sha512.d.mts +0 -1
- package/dist/each.cjs +0 -18
- package/dist/each.cjs.map +0 -1
- package/dist/each.mjs +0 -19
- package/dist/each.mjs.map +0 -1
- package/dist/merge.cjs +0 -87
- package/dist/merge.cjs.map +0 -1
- package/dist/merge.mjs +0 -88
- package/dist/merge.mjs.map +0 -1
- package/dist/number.cjs.map +0 -1
- package/dist/number.mjs.map +0 -1
- package/dist/string.cjs.map +0 -1
- package/dist/string.mjs.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.mjs.map +0 -1
package/dist/easing.cjs
CHANGED
|
@@ -1,124 +1,125 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
//#region src/easing.ts
|
|
3
|
+
/**
|
|
4
|
+
* https://github.com/gre/bezier-easing
|
|
5
|
+
* BezierEasing - use bezier curve for transition easing function
|
|
6
|
+
* by Gaëtan Renaudeau 2014 - 2015 – MIT License
|
|
7
|
+
*/
|
|
8
|
+
var NEWTON_ITERATIONS = 4;
|
|
9
|
+
var NEWTON_MIN_SLOPE = .001;
|
|
10
|
+
var SUBDIVISION_PRECISION = 1e-7;
|
|
11
|
+
var SUBDIVISION_MAX_ITERATIONS = 10;
|
|
12
|
+
var kSplineTableSize = 11;
|
|
13
|
+
var kSampleStepSize = 1 / (kSplineTableSize - 1);
|
|
14
|
+
var float32ArraySupported = typeof Float32Array === "function";
|
|
10
15
|
function A(aA1, aA2) {
|
|
11
|
-
|
|
16
|
+
return 1 - 3 * aA2 + 3 * aA1;
|
|
12
17
|
}
|
|
13
18
|
function B(aA1, aA2) {
|
|
14
|
-
|
|
19
|
+
return 3 * aA2 - 6 * aA1;
|
|
15
20
|
}
|
|
16
21
|
function C(aA1) {
|
|
17
|
-
|
|
22
|
+
return 3 * aA1;
|
|
18
23
|
}
|
|
19
24
|
function calcBezier(aT, aA1, aA2) {
|
|
20
|
-
|
|
25
|
+
return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
|
|
21
26
|
}
|
|
22
27
|
function getSlope(aT, aA1, aA2) {
|
|
23
|
-
|
|
28
|
+
return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);
|
|
24
29
|
}
|
|
25
30
|
function binarySubdivide(aX, aA, aB, mX1, mX2) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
|
|
40
|
-
return currentT;
|
|
31
|
+
let currentX;
|
|
32
|
+
let currentT;
|
|
33
|
+
let i = 0;
|
|
34
|
+
let aBFinal = aB;
|
|
35
|
+
let aAFinal = aA;
|
|
36
|
+
do {
|
|
37
|
+
currentT = aAFinal + (aBFinal - aAFinal) / 2;
|
|
38
|
+
currentX = calcBezier(currentT, mX1, mX2) - aX;
|
|
39
|
+
if (currentX > 0) aBFinal = currentT;
|
|
40
|
+
else aAFinal = currentT;
|
|
41
|
+
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
|
|
42
|
+
return currentT;
|
|
41
43
|
}
|
|
42
44
|
function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
return aGuessTFinal;
|
|
45
|
+
let aGuessTFinal = aGuessT;
|
|
46
|
+
for (let i = 0; i < NEWTON_ITERATIONS; ++i) {
|
|
47
|
+
const currentSlope = getSlope(aGuessTFinal, mX1, mX2);
|
|
48
|
+
if (currentSlope === 0) return aGuessTFinal;
|
|
49
|
+
const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;
|
|
50
|
+
aGuessTFinal -= currentX / currentSlope;
|
|
51
|
+
}
|
|
52
|
+
return aGuessTFinal;
|
|
53
53
|
}
|
|
54
54
|
function LinearEasing(x) {
|
|
55
|
-
|
|
55
|
+
return x;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* 创建一个基于贝塞尔曲线的缓动函数。
|
|
59
|
+
*
|
|
60
|
+
* @param x1 - 贝塞尔曲线的第一个控制点的 X 坐标,必须在 [0, 1] 范围内。
|
|
61
|
+
* @param y1 - 贝塞尔曲线的第一个控制点的 Y 坐标,必须在 [0, 1] 范围内。
|
|
62
|
+
* @param x2 - 贝塞尔曲线的第二个控制点的 X 坐标,必须在 [0, 1] 范围内。
|
|
63
|
+
* @param y2 - 贝塞尔曲线的第二个控制点的 Y 坐标,必须在 [0, 1] 范围内。
|
|
64
|
+
* @returns 返回一个缓动函数,该函数接受一个参数 x(范围在 0 到 1 之间),并返回相应的缓动值。
|
|
65
|
+
* @throws 如果 mX1 或 mX2 不在 [0, 1] 范围内,则抛出错误。
|
|
66
|
+
*/
|
|
57
67
|
function createEasingFn(x1, y1, x2, y2) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return guessForT;
|
|
84
|
-
}
|
|
85
|
-
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);
|
|
86
|
-
}
|
|
87
|
-
return function easingFunc(x) {
|
|
88
|
-
if (x === 0 || x === 1) {
|
|
89
|
-
return x;
|
|
90
|
-
}
|
|
91
|
-
return calcBezier(getTForX(x), y1, y2);
|
|
92
|
-
};
|
|
68
|
+
if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) throw new Error("bezier x values must be in [0, 1] range");
|
|
69
|
+
if (x1 === y1 && x2 === y2) return LinearEasing;
|
|
70
|
+
const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
|
|
71
|
+
for (let i = 0; i < kSplineTableSize; ++i) sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);
|
|
72
|
+
function getTForX(aX) {
|
|
73
|
+
let intervalStart = 0;
|
|
74
|
+
let currentSample = 1;
|
|
75
|
+
const lastSample = kSplineTableSize - 1;
|
|
76
|
+
for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) intervalStart += kSampleStepSize;
|
|
77
|
+
--currentSample;
|
|
78
|
+
const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
|
|
79
|
+
const guessForT = intervalStart + dist * kSampleStepSize;
|
|
80
|
+
const initialSlope = getSlope(guessForT, x1, x2);
|
|
81
|
+
if (initialSlope >= NEWTON_MIN_SLOPE) return newtonRaphsonIterate(aX, guessForT, x1, x2);
|
|
82
|
+
if (initialSlope === 0) return guessForT;
|
|
83
|
+
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 贝塞尔曲线方程
|
|
87
|
+
* @param x {number} 0~1
|
|
88
|
+
*/
|
|
89
|
+
return function easingFunc(x) {
|
|
90
|
+
if (x === 0 || x === 1) return x;
|
|
91
|
+
return calcBezier(getTForX(x), y1, y2);
|
|
92
|
+
};
|
|
93
93
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
94
|
+
var easingEase = createEasingFn(.25, .1, .25, 1);
|
|
95
|
+
var easingLinear = createEasingFn(0, 0, 1, 1);
|
|
96
|
+
var easingSnap = createEasingFn(0, 1, .5, 1);
|
|
97
|
+
var easingIn = createEasingFn(.42, 0, 1, 1);
|
|
98
|
+
var easingOut = createEasingFn(0, 0, .58, 1);
|
|
99
|
+
var easingInOut = createEasingFn(.42, 0, .58, 1);
|
|
100
|
+
var easingInQuad = createEasingFn(.55, .085, .68, .53);
|
|
101
|
+
var easingInCubic = createEasingFn(.55, .055, .675, .19);
|
|
102
|
+
var easingInQuart = createEasingFn(.895, .03, .685, .22);
|
|
103
|
+
var easingInQuint = createEasingFn(.755, .05, .855, .06);
|
|
104
|
+
var easingInSine = createEasingFn(.47, 0, .745, .715);
|
|
105
|
+
var easingInExpo = createEasingFn(.95, .05, .795, .035);
|
|
106
|
+
var easingInCirc = createEasingFn(.6, .04, .98, .335);
|
|
107
|
+
var easingInBack = createEasingFn(.6, -.28, .735, .045);
|
|
108
|
+
var easingOutQuad = createEasingFn(.25, .46, .45, .94);
|
|
109
|
+
var easingOutCubic = createEasingFn(.215, .61, .355, 1);
|
|
110
|
+
var easingOutQuart = createEasingFn(.165, .84, .44, 1);
|
|
111
|
+
var easingOutQuint = createEasingFn(.23, 1, .32, 1);
|
|
112
|
+
var easingOutSine = createEasingFn(.39, .575, .565, 1);
|
|
113
|
+
var easingOutExpo = createEasingFn(.19, 1, .22, 1);
|
|
114
|
+
var easingOutCirc = createEasingFn(.075, .82, .165, 1);
|
|
115
|
+
var easingOutBack = createEasingFn(.175, .885, .32, 1.275);
|
|
116
|
+
var easingInOutQuart = createEasingFn(.77, 0, .175, 1);
|
|
117
|
+
var easingInOutQuint = createEasingFn(.86, 0, .07, 1);
|
|
118
|
+
var easingInOutSine = createEasingFn(.445, .05, .55, .95);
|
|
119
|
+
var easingInOutExpo = createEasingFn(1, 0, 0, 1);
|
|
120
|
+
var easingInOutCirc = createEasingFn(.785, .135, .15, .86);
|
|
121
|
+
var easingInOutBack = createEasingFn(.68, -.55, .265, 1.55);
|
|
122
|
+
//#endregion
|
|
122
123
|
exports.createEasingFn = createEasingFn;
|
|
123
124
|
exports.easingEase = easingEase;
|
|
124
125
|
exports.easingIn = easingIn;
|
|
@@ -148,4 +149,5 @@ exports.easingOutQuart = easingOutQuart;
|
|
|
148
149
|
exports.easingOutQuint = easingOutQuint;
|
|
149
150
|
exports.easingOutSine = easingOutSine;
|
|
150
151
|
exports.easingSnap = easingSnap;
|
|
151
|
-
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=easing.cjs.map
|
package/dist/easing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easing.cjs","sources":["../src/easing.ts"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX: number
|
|
1
|
+
{"version":3,"file":"easing.cjs","names":[],"sources":["../src/easing.ts"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(\n aX: number,\n aA: number,\n aB: number,\n mX1: number,\n mX2: number,\n) {\n let currentX: number;\n let currentT: number;\n let i = 0;\n let aBFinal = aB;\n let aAFinal = aA;\n\n do {\n currentT = aAFinal + (aBFinal - aAFinal) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aBFinal = currentT;\n } else {\n aAFinal = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n}\n\nfunction newtonRaphsonIterate(\n aX: number,\n aGuessT: number,\n mX1: number,\n mX2: number,\n) {\n let aGuessTFinal = aGuessT;\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessTFinal, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessTFinal;\n }\n const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;\n aGuessTFinal -= currentX / currentSlope;\n }\n return aGuessTFinal;\n}\n\nfunction LinearEasing(x: number) {\n return x;\n}\n\n/**\n * 创建一个基于贝塞尔曲线的缓动函数。\n *\n * @param x1 - 贝塞尔曲线的第一个控制点的 X 坐标,必须在 [0, 1] 范围内。\n * @param y1 - 贝塞尔曲线的第一个控制点的 Y 坐标,必须在 [0, 1] 范围内。\n * @param x2 - 贝塞尔曲线的第二个控制点的 X 坐标,必须在 [0, 1] 范围内。\n * @param y2 - 贝塞尔曲线的第二个控制点的 Y 坐标,必须在 [0, 1] 范围内。\n * @returns 返回一个缓动函数,该函数接受一个参数 x(范围在 0 到 1 之间),并返回相应的缓动值。\n * @throws 如果 mX1 或 mX2 不在 [0, 1] 范围内,则抛出错误。\n */\nexport function createEasingFn(x1: number, y1: number, x2: number, y2: number) {\n if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (x1 === y1 && x2 === y2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n const sampleValues = float32ArraySupported\n ? new Float32Array(kSplineTableSize)\n : new Array(kSplineTableSize);\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);\n }\n\n function getTForX(aX: number) {\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n const initialSlope = getSlope(guessForT, x1, x2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, x1, x2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n x1,\n x2,\n );\n }\n\n /**\n * 贝塞尔曲线方程\n * @param x {number} 0~1\n */\n return function easingFunc(x: number) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0 || x === 1) {\n return x;\n }\n\n return calcBezier(getTForX(x), y1, y2);\n };\n}\n\nexport const easingEase = createEasingFn(0.25, 0.1, 0.25, 1);\nexport const easingLinear = createEasingFn(0, 0, 1, 1);\nexport const easingSnap = createEasingFn(0, 1, 0.5, 1);\nexport const easingIn = createEasingFn(0.42, 0, 1, 1);\nexport const easingOut = createEasingFn(0, 0, 0.58, 1);\nexport const easingInOut = createEasingFn(0.42, 0, 0.58, 1);\nexport const easingInQuad = createEasingFn(0.55, 0.085, 0.68, 0.53);\nexport const easingInCubic = createEasingFn(0.55, 0.055, 0.675, 0.19);\nexport const easingInQuart = createEasingFn(0.895, 0.03, 0.685, 0.22);\nexport const easingInQuint = createEasingFn(0.755, 0.05, 0.855, 0.06);\nexport const easingInSine = createEasingFn(0.47, 0, 0.745, 0.715);\nexport const easingInExpo = createEasingFn(0.95, 0.05, 0.795, 0.035);\nexport const easingInCirc = createEasingFn(0.6, 0.04, 0.98, 0.335);\nexport const easingInBack = createEasingFn(0.6, -0.28, 0.735, 0.045);\nexport const easingOutQuad = createEasingFn(0.25, 0.46, 0.45, 0.94);\nexport const easingOutCubic = createEasingFn(0.215, 0.61, 0.355, 1);\nexport const easingOutQuart = createEasingFn(0.165, 0.84, 0.44, 1);\nexport const easingOutQuint = createEasingFn(0.23, 1, 0.32, 1);\nexport const easingOutSine = createEasingFn(0.39, 0.575, 0.565, 1);\nexport const easingOutExpo = createEasingFn(0.19, 1, 0.22, 1);\nexport const easingOutCirc = createEasingFn(0.075, 0.82, 0.165, 1);\nexport const easingOutBack = createEasingFn(0.175, 0.885, 0.32, 1.275);\nexport const easingInOutQuart = createEasingFn(0.77, 0, 0.175, 1);\nexport const easingInOutQuint = createEasingFn(0.86, 0, 0.07, 1);\nexport const easingInOutSine = createEasingFn(0.445, 0.05, 0.55, 0.95);\nexport const easingInOutExpo = createEasingFn(1, 0, 0, 1);\nexport const easingInOutCirc = createEasingFn(0.785, 0.135, 0.15, 0.86);\nexport const easingInOutBack = createEasingFn(0.68, -0.55, 0.265, 1.55);\n"],"mappings":"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"}
|
package/dist/easing.mjs
CHANGED
|
@@ -1,151 +1,124 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
//#region src/easing.ts
|
|
2
|
+
/**
|
|
3
|
+
* https://github.com/gre/bezier-easing
|
|
4
|
+
* BezierEasing - use bezier curve for transition easing function
|
|
5
|
+
* by Gaëtan Renaudeau 2014 - 2015 – MIT License
|
|
6
|
+
*/
|
|
7
|
+
var NEWTON_ITERATIONS = 4;
|
|
8
|
+
var NEWTON_MIN_SLOPE = .001;
|
|
9
|
+
var SUBDIVISION_PRECISION = 1e-7;
|
|
10
|
+
var SUBDIVISION_MAX_ITERATIONS = 10;
|
|
11
|
+
var kSplineTableSize = 11;
|
|
12
|
+
var kSampleStepSize = 1 / (kSplineTableSize - 1);
|
|
13
|
+
var float32ArraySupported = typeof Float32Array === "function";
|
|
8
14
|
function A(aA1, aA2) {
|
|
9
|
-
|
|
15
|
+
return 1 - 3 * aA2 + 3 * aA1;
|
|
10
16
|
}
|
|
11
17
|
function B(aA1, aA2) {
|
|
12
|
-
|
|
18
|
+
return 3 * aA2 - 6 * aA1;
|
|
13
19
|
}
|
|
14
20
|
function C(aA1) {
|
|
15
|
-
|
|
21
|
+
return 3 * aA1;
|
|
16
22
|
}
|
|
17
23
|
function calcBezier(aT, aA1, aA2) {
|
|
18
|
-
|
|
24
|
+
return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
|
|
19
25
|
}
|
|
20
26
|
function getSlope(aT, aA1, aA2) {
|
|
21
|
-
|
|
27
|
+
return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);
|
|
22
28
|
}
|
|
23
29
|
function binarySubdivide(aX, aA, aB, mX1, mX2) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
|
|
38
|
-
return currentT;
|
|
30
|
+
let currentX;
|
|
31
|
+
let currentT;
|
|
32
|
+
let i = 0;
|
|
33
|
+
let aBFinal = aB;
|
|
34
|
+
let aAFinal = aA;
|
|
35
|
+
do {
|
|
36
|
+
currentT = aAFinal + (aBFinal - aAFinal) / 2;
|
|
37
|
+
currentX = calcBezier(currentT, mX1, mX2) - aX;
|
|
38
|
+
if (currentX > 0) aBFinal = currentT;
|
|
39
|
+
else aAFinal = currentT;
|
|
40
|
+
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
|
|
41
|
+
return currentT;
|
|
39
42
|
}
|
|
40
43
|
function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
return aGuessTFinal;
|
|
44
|
+
let aGuessTFinal = aGuessT;
|
|
45
|
+
for (let i = 0; i < NEWTON_ITERATIONS; ++i) {
|
|
46
|
+
const currentSlope = getSlope(aGuessTFinal, mX1, mX2);
|
|
47
|
+
if (currentSlope === 0) return aGuessTFinal;
|
|
48
|
+
const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;
|
|
49
|
+
aGuessTFinal -= currentX / currentSlope;
|
|
50
|
+
}
|
|
51
|
+
return aGuessTFinal;
|
|
51
52
|
}
|
|
52
53
|
function LinearEasing(x) {
|
|
53
|
-
|
|
54
|
+
return x;
|
|
54
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* 创建一个基于贝塞尔曲线的缓动函数。
|
|
58
|
+
*
|
|
59
|
+
* @param x1 - 贝塞尔曲线的第一个控制点的 X 坐标,必须在 [0, 1] 范围内。
|
|
60
|
+
* @param y1 - 贝塞尔曲线的第一个控制点的 Y 坐标,必须在 [0, 1] 范围内。
|
|
61
|
+
* @param x2 - 贝塞尔曲线的第二个控制点的 X 坐标,必须在 [0, 1] 范围内。
|
|
62
|
+
* @param y2 - 贝塞尔曲线的第二个控制点的 Y 坐标,必须在 [0, 1] 范围内。
|
|
63
|
+
* @returns 返回一个缓动函数,该函数接受一个参数 x(范围在 0 到 1 之间),并返回相应的缓动值。
|
|
64
|
+
* @throws 如果 mX1 或 mX2 不在 [0, 1] 范围内,则抛出错误。
|
|
65
|
+
*/
|
|
55
66
|
function createEasingFn(x1, y1, x2, y2) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return guessForT;
|
|
82
|
-
}
|
|
83
|
-
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);
|
|
84
|
-
}
|
|
85
|
-
return function easingFunc(x) {
|
|
86
|
-
if (x === 0 || x === 1) {
|
|
87
|
-
return x;
|
|
88
|
-
}
|
|
89
|
-
return calcBezier(getTForX(x), y1, y2);
|
|
90
|
-
};
|
|
67
|
+
if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) throw new Error("bezier x values must be in [0, 1] range");
|
|
68
|
+
if (x1 === y1 && x2 === y2) return LinearEasing;
|
|
69
|
+
const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
|
|
70
|
+
for (let i = 0; i < kSplineTableSize; ++i) sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);
|
|
71
|
+
function getTForX(aX) {
|
|
72
|
+
let intervalStart = 0;
|
|
73
|
+
let currentSample = 1;
|
|
74
|
+
const lastSample = kSplineTableSize - 1;
|
|
75
|
+
for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) intervalStart += kSampleStepSize;
|
|
76
|
+
--currentSample;
|
|
77
|
+
const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
|
|
78
|
+
const guessForT = intervalStart + dist * kSampleStepSize;
|
|
79
|
+
const initialSlope = getSlope(guessForT, x1, x2);
|
|
80
|
+
if (initialSlope >= NEWTON_MIN_SLOPE) return newtonRaphsonIterate(aX, guessForT, x1, x2);
|
|
81
|
+
if (initialSlope === 0) return guessForT;
|
|
82
|
+
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 贝塞尔曲线方程
|
|
86
|
+
* @param x {number} 0~1
|
|
87
|
+
*/
|
|
88
|
+
return function easingFunc(x) {
|
|
89
|
+
if (x === 0 || x === 1) return x;
|
|
90
|
+
return calcBezier(getTForX(x), y1, y2);
|
|
91
|
+
};
|
|
91
92
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
easingInBack,
|
|
125
|
-
easingInCirc,
|
|
126
|
-
easingInCubic,
|
|
127
|
-
easingInExpo,
|
|
128
|
-
easingInOut,
|
|
129
|
-
easingInOutBack,
|
|
130
|
-
easingInOutCirc,
|
|
131
|
-
easingInOutExpo,
|
|
132
|
-
easingInOutQuart,
|
|
133
|
-
easingInOutQuint,
|
|
134
|
-
easingInOutSine,
|
|
135
|
-
easingInQuad,
|
|
136
|
-
easingInQuart,
|
|
137
|
-
easingInQuint,
|
|
138
|
-
easingInSine,
|
|
139
|
-
easingLinear,
|
|
140
|
-
easingOut,
|
|
141
|
-
easingOutBack,
|
|
142
|
-
easingOutCirc,
|
|
143
|
-
easingOutCubic,
|
|
144
|
-
easingOutExpo,
|
|
145
|
-
easingOutQuad,
|
|
146
|
-
easingOutQuart,
|
|
147
|
-
easingOutQuint,
|
|
148
|
-
easingOutSine,
|
|
149
|
-
easingSnap
|
|
150
|
-
};
|
|
151
|
-
//# sourceMappingURL=easing.mjs.map
|
|
93
|
+
var easingEase = createEasingFn(.25, .1, .25, 1);
|
|
94
|
+
var easingLinear = createEasingFn(0, 0, 1, 1);
|
|
95
|
+
var easingSnap = createEasingFn(0, 1, .5, 1);
|
|
96
|
+
var easingIn = createEasingFn(.42, 0, 1, 1);
|
|
97
|
+
var easingOut = createEasingFn(0, 0, .58, 1);
|
|
98
|
+
var easingInOut = createEasingFn(.42, 0, .58, 1);
|
|
99
|
+
var easingInQuad = createEasingFn(.55, .085, .68, .53);
|
|
100
|
+
var easingInCubic = createEasingFn(.55, .055, .675, .19);
|
|
101
|
+
var easingInQuart = createEasingFn(.895, .03, .685, .22);
|
|
102
|
+
var easingInQuint = createEasingFn(.755, .05, .855, .06);
|
|
103
|
+
var easingInSine = createEasingFn(.47, 0, .745, .715);
|
|
104
|
+
var easingInExpo = createEasingFn(.95, .05, .795, .035);
|
|
105
|
+
var easingInCirc = createEasingFn(.6, .04, .98, .335);
|
|
106
|
+
var easingInBack = createEasingFn(.6, -.28, .735, .045);
|
|
107
|
+
var easingOutQuad = createEasingFn(.25, .46, .45, .94);
|
|
108
|
+
var easingOutCubic = createEasingFn(.215, .61, .355, 1);
|
|
109
|
+
var easingOutQuart = createEasingFn(.165, .84, .44, 1);
|
|
110
|
+
var easingOutQuint = createEasingFn(.23, 1, .32, 1);
|
|
111
|
+
var easingOutSine = createEasingFn(.39, .575, .565, 1);
|
|
112
|
+
var easingOutExpo = createEasingFn(.19, 1, .22, 1);
|
|
113
|
+
var easingOutCirc = createEasingFn(.075, .82, .165, 1);
|
|
114
|
+
var easingOutBack = createEasingFn(.175, .885, .32, 1.275);
|
|
115
|
+
var easingInOutQuart = createEasingFn(.77, 0, .175, 1);
|
|
116
|
+
var easingInOutQuint = createEasingFn(.86, 0, .07, 1);
|
|
117
|
+
var easingInOutSine = createEasingFn(.445, .05, .55, .95);
|
|
118
|
+
var easingInOutExpo = createEasingFn(1, 0, 0, 1);
|
|
119
|
+
var easingInOutCirc = createEasingFn(.785, .135, .15, .86);
|
|
120
|
+
var easingInOutBack = createEasingFn(.68, -.55, .265, 1.55);
|
|
121
|
+
//#endregion
|
|
122
|
+
export { createEasingFn, easingEase, easingIn, easingInBack, easingInCirc, easingInCubic, easingInExpo, easingInOut, easingInOutBack, easingInOutCirc, easingInOutExpo, easingInOutQuart, easingInOutQuint, easingInOutSine, easingInQuad, easingInQuart, easingInQuint, easingInSine, easingLinear, easingOut, easingOutBack, easingOutCirc, easingOutCubic, easingOutExpo, easingOutQuad, easingOutQuart, easingOutQuint, easingOutSine, easingSnap };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=easing.mjs.map
|
package/dist/easing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easing.mjs","sources":["../src/easing.ts"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(aX: number
|
|
1
|
+
{"version":3,"file":"easing.mjs","names":[],"sources":["../src/easing.ts"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A(aA1: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(\n aX: number,\n aA: number,\n aB: number,\n mX1: number,\n mX2: number,\n) {\n let currentX: number;\n let currentT: number;\n let i = 0;\n let aBFinal = aB;\n let aAFinal = aA;\n\n do {\n currentT = aAFinal + (aBFinal - aAFinal) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aBFinal = currentT;\n } else {\n aAFinal = currentT;\n }\n } while (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n}\n\nfunction newtonRaphsonIterate(\n aX: number,\n aGuessT: number,\n mX1: number,\n mX2: number,\n) {\n let aGuessTFinal = aGuessT;\n for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n const currentSlope = getSlope(aGuessTFinal, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessTFinal;\n }\n const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;\n aGuessTFinal -= currentX / currentSlope;\n }\n return aGuessTFinal;\n}\n\nfunction LinearEasing(x: number) {\n return x;\n}\n\n/**\n * 创建一个基于贝塞尔曲线的缓动函数。\n *\n * @param x1 - 贝塞尔曲线的第一个控制点的 X 坐标,必须在 [0, 1] 范围内。\n * @param y1 - 贝塞尔曲线的第一个控制点的 Y 坐标,必须在 [0, 1] 范围内。\n * @param x2 - 贝塞尔曲线的第二个控制点的 X 坐标,必须在 [0, 1] 范围内。\n * @param y2 - 贝塞尔曲线的第二个控制点的 Y 坐标,必须在 [0, 1] 范围内。\n * @returns 返回一个缓动函数,该函数接受一个参数 x(范围在 0 到 1 之间),并返回相应的缓动值。\n * @throws 如果 mX1 或 mX2 不在 [0, 1] 范围内,则抛出错误。\n */\nexport function createEasingFn(x1: number, y1: number, x2: number, y2: number) {\n if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (x1 === y1 && x2 === y2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n const sampleValues = float32ArraySupported\n ? new Float32Array(kSplineTableSize)\n : new Array(kSplineTableSize);\n for (let i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);\n }\n\n function getTForX(aX: number) {\n let intervalStart = 0.0;\n let currentSample = 1;\n const lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist =\n (aX - sampleValues[currentSample]) /\n (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n const guessForT = intervalStart + dist * kSampleStepSize;\n const initialSlope = getSlope(guessForT, x1, x2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, x1, x2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n x1,\n x2,\n );\n }\n\n /**\n * 贝塞尔曲线方程\n * @param x {number} 0~1\n */\n return function easingFunc(x: number) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0 || x === 1) {\n return x;\n }\n\n return calcBezier(getTForX(x), y1, y2);\n };\n}\n\nexport const easingEase = createEasingFn(0.25, 0.1, 0.25, 1);\nexport const easingLinear = createEasingFn(0, 0, 1, 1);\nexport const easingSnap = createEasingFn(0, 1, 0.5, 1);\nexport const easingIn = createEasingFn(0.42, 0, 1, 1);\nexport const easingOut = createEasingFn(0, 0, 0.58, 1);\nexport const easingInOut = createEasingFn(0.42, 0, 0.58, 1);\nexport const easingInQuad = createEasingFn(0.55, 0.085, 0.68, 0.53);\nexport const easingInCubic = createEasingFn(0.55, 0.055, 0.675, 0.19);\nexport const easingInQuart = createEasingFn(0.895, 0.03, 0.685, 0.22);\nexport const easingInQuint = createEasingFn(0.755, 0.05, 0.855, 0.06);\nexport const easingInSine = createEasingFn(0.47, 0, 0.745, 0.715);\nexport const easingInExpo = createEasingFn(0.95, 0.05, 0.795, 0.035);\nexport const easingInCirc = createEasingFn(0.6, 0.04, 0.98, 0.335);\nexport const easingInBack = createEasingFn(0.6, -0.28, 0.735, 0.045);\nexport const easingOutQuad = createEasingFn(0.25, 0.46, 0.45, 0.94);\nexport const easingOutCubic = createEasingFn(0.215, 0.61, 0.355, 1);\nexport const easingOutQuart = createEasingFn(0.165, 0.84, 0.44, 1);\nexport const easingOutQuint = createEasingFn(0.23, 1, 0.32, 1);\nexport const easingOutSine = createEasingFn(0.39, 0.575, 0.565, 1);\nexport const easingOutExpo = createEasingFn(0.19, 1, 0.22, 1);\nexport const easingOutCirc = createEasingFn(0.075, 0.82, 0.165, 1);\nexport const easingOutBack = createEasingFn(0.175, 0.885, 0.32, 1.275);\nexport const easingInOutQuart = createEasingFn(0.77, 0, 0.175, 1);\nexport const easingInOutQuint = createEasingFn(0.86, 0, 0.07, 1);\nexport const easingInOutSine = createEasingFn(0.445, 0.05, 0.55, 0.95);\nexport const easingInOutExpo = createEasingFn(1, 0, 0, 1);\nexport const easingInOutCirc = createEasingFn(0.785, 0.135, 0.15, 0.86);\nexport const easingInOutBack = createEasingFn(0.68, -0.55, 0.265, 1.55);\n"],"mappings":"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"}
|