@cloudcome/utils-core 1.19.0 → 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.
Files changed (161) hide show
  1. package/README.md +1 -1
  2. package/dist/array.cjs +181 -125
  3. package/dist/array.cjs.map +1 -1
  4. package/dist/array.mjs +181 -133
  5. package/dist/array.mjs.map +1 -1
  6. package/dist/async.cjs +181 -171
  7. package/dist/async.cjs.map +1 -1
  8. package/dist/async.mjs +181 -174
  9. package/dist/async.mjs.map +1 -1
  10. package/dist/base64.cjs +16 -12
  11. package/dist/base64.cjs.map +1 -1
  12. package/dist/base64.mjs +17 -14
  13. package/dist/base64.mjs.map +1 -1
  14. package/dist/cache.cjs +79 -67
  15. package/dist/cache.cjs.map +1 -1
  16. package/dist/cache.d.ts +3 -3
  17. package/dist/cache.mjs +80 -71
  18. package/dist/cache.mjs.map +1 -1
  19. package/dist/color.cjs +478 -167
  20. package/dist/color.cjs.map +1 -1
  21. package/dist/color.d.ts +3 -3
  22. package/dist/color.mjs +480 -197
  23. package/dist/color.mjs.map +1 -1
  24. package/dist/crypto.cjs +474 -687
  25. package/dist/crypto.cjs.map +1 -1
  26. package/dist/crypto.mjs +476 -693
  27. package/dist/crypto.mjs.map +1 -1
  28. package/dist/date.cjs +972 -161
  29. package/dist/date.cjs.map +1 -1
  30. package/dist/date.d.ts +2 -2
  31. package/dist/date.mjs +962 -191
  32. package/dist/date.mjs.map +1 -1
  33. package/dist/dict.cjs +90 -52
  34. package/dist/dict.cjs.map +1 -1
  35. package/dist/dict.d.ts +1 -1
  36. package/dist/dict.mjs +91 -54
  37. package/dist/dict.mjs.map +1 -1
  38. package/dist/easing.cjs +105 -103
  39. package/dist/easing.cjs.map +1 -1
  40. package/dist/easing.mjs +106 -133
  41. package/dist/easing.mjs.map +1 -1
  42. package/dist/emitter.cjs +101 -96
  43. package/dist/emitter.cjs.map +1 -1
  44. package/dist/emitter.mjs +101 -97
  45. package/dist/emitter.mjs.map +1 -1
  46. package/dist/env.cjs +43 -9
  47. package/dist/env.cjs.map +1 -1
  48. package/dist/env.d.ts +1 -1
  49. package/dist/env.mjs +43 -15
  50. package/dist/env.mjs.map +1 -1
  51. package/dist/error.cjs +26 -5
  52. package/dist/error.cjs.map +1 -1
  53. package/dist/error.mjs +26 -7
  54. package/dist/error.mjs.map +1 -1
  55. package/dist/exception.cjs +38 -20
  56. package/dist/exception.cjs.map +1 -1
  57. package/dist/exception.d.ts +5 -5
  58. package/dist/exception.mjs +38 -21
  59. package/dist/exception.mjs.map +1 -1
  60. package/dist/function.cjs +128 -68
  61. package/dist/function.cjs.map +1 -1
  62. package/dist/function.mjs +128 -72
  63. package/dist/function.mjs.map +1 -1
  64. package/dist/index.cjs +8 -3
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.mjs +9 -5
  67. package/dist/index.mjs.map +1 -1
  68. package/dist/number.cjs +10 -14
  69. package/dist/number.mjs +2 -15
  70. package/dist/object/get-set.d.ts +27 -3
  71. package/dist/object/merge.d.ts +2 -2
  72. package/dist/object.cjs +369 -106
  73. package/dist/object.cjs.map +1 -1
  74. package/dist/object.mjs +366 -115
  75. package/dist/object.mjs.map +1 -1
  76. package/dist/path.cjs +144 -55
  77. package/dist/path.cjs.map +1 -1
  78. package/dist/path.mjs +144 -62
  79. package/dist/path.mjs.map +1 -1
  80. package/dist/promise.cjs +84 -43
  81. package/dist/promise.cjs.map +1 -1
  82. package/dist/promise.mjs +85 -50
  83. package/dist/promise.mjs.map +1 -1
  84. package/dist/qs.cjs +63 -39
  85. package/dist/qs.cjs.map +1 -1
  86. package/dist/qs.mjs +64 -42
  87. package/dist/qs.mjs.map +1 -1
  88. package/dist/regexp.cjs +118 -35
  89. package/dist/regexp.cjs.map +1 -1
  90. package/dist/regexp.mjs +119 -46
  91. package/dist/regexp.mjs.map +1 -1
  92. package/dist/string.cjs +12 -15
  93. package/dist/string.mjs +2 -16
  94. package/dist/string2.cjs +378 -142
  95. package/dist/string2.cjs.map +1 -1
  96. package/dist/string2.mjs +259 -143
  97. package/dist/string2.mjs.map +1 -1
  98. package/dist/time.cjs +136 -59
  99. package/dist/time.cjs.map +1 -1
  100. package/dist/time.mjs +136 -65
  101. package/dist/time.mjs.map +1 -1
  102. package/dist/timer.cjs +122 -112
  103. package/dist/timer.cjs.map +1 -1
  104. package/dist/timer.mjs +123 -115
  105. package/dist/timer.mjs.map +1 -1
  106. package/dist/tree.cjs +207 -112
  107. package/dist/tree.cjs.map +1 -1
  108. package/dist/tree.mjs +207 -116
  109. package/dist/tree.mjs.map +1 -1
  110. package/dist/try/curry.d.ts +1 -1
  111. package/dist/try.cjs +36 -37
  112. package/dist/try.cjs.map +1 -1
  113. package/dist/try.mjs +35 -37
  114. package/dist/try.mjs.map +1 -1
  115. package/dist/type.cjs +126 -24
  116. package/dist/type.cjs.map +1 -1
  117. package/dist/type.d.ts +2 -2
  118. package/dist/type.mjs +128 -45
  119. package/dist/type.mjs.map +1 -1
  120. package/dist/types.cjs +0 -2
  121. package/dist/types.d.ts +2 -2
  122. package/dist/types.mjs +0 -2
  123. package/dist/unique.cjs +41 -38
  124. package/dist/unique.cjs.map +1 -1
  125. package/dist/unique.mjs +42 -41
  126. package/dist/unique.mjs.map +1 -1
  127. package/dist/url.cjs +39 -30
  128. package/dist/url.cjs.map +1 -1
  129. package/dist/url.mjs +40 -33
  130. package/dist/url.mjs.map +1 -1
  131. package/dist/version.cjs +51 -33
  132. package/dist/version.cjs.map +1 -1
  133. package/dist/version.mjs +51 -35
  134. package/dist/version.mjs.map +1 -1
  135. package/package.json +104 -105
  136. package/dist/const.cjs +0 -14
  137. package/dist/const.cjs.map +0 -1
  138. package/dist/const.mjs +0 -15
  139. package/dist/const.mjs.map +0 -1
  140. package/dist/core.cjs +0 -362
  141. package/dist/core.cjs.map +0 -1
  142. package/dist/core.mjs +0 -363
  143. package/dist/core.mjs.map +0 -1
  144. package/dist/crypto/md5.d.mts +0 -1
  145. package/dist/crypto/sha1.d.mts +0 -1
  146. package/dist/crypto/sha256.d.mts +0 -1
  147. package/dist/crypto/sha512.d.mts +0 -1
  148. package/dist/each.cjs +0 -18
  149. package/dist/each.cjs.map +0 -1
  150. package/dist/each.mjs +0 -19
  151. package/dist/each.mjs.map +0 -1
  152. package/dist/merge.cjs +0 -87
  153. package/dist/merge.cjs.map +0 -1
  154. package/dist/merge.mjs +0 -88
  155. package/dist/merge.mjs.map +0 -1
  156. package/dist/number.cjs.map +0 -1
  157. package/dist/number.mjs.map +0 -1
  158. package/dist/string.cjs.map +0 -1
  159. package/dist/string.mjs.map +0 -1
  160. package/dist/types.cjs.map +0 -1
  161. 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
- const NEWTON_ITERATIONS = 4;
4
- const NEWTON_MIN_SLOPE = 1e-3;
5
- const SUBDIVISION_PRECISION = 1e-7;
6
- const SUBDIVISION_MAX_ITERATIONS = 10;
7
- const kSplineTableSize = 11;
8
- const kSampleStepSize = 1 / (kSplineTableSize - 1);
9
- const float32ArraySupported = typeof Float32Array === "function";
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
- return 1 - 3 * aA2 + 3 * aA1;
16
+ return 1 - 3 * aA2 + 3 * aA1;
12
17
  }
13
18
  function B(aA1, aA2) {
14
- return 3 * aA2 - 6 * aA1;
19
+ return 3 * aA2 - 6 * aA1;
15
20
  }
16
21
  function C(aA1) {
17
- return 3 * aA1;
22
+ return 3 * aA1;
18
23
  }
19
24
  function calcBezier(aT, aA1, aA2) {
20
- return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
25
+ return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
21
26
  }
22
27
  function getSlope(aT, aA1, aA2) {
23
- return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);
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
- let currentX;
27
- let currentT;
28
- let i = 0;
29
- let aBFinal = aB;
30
- let aAFinal = aA;
31
- do {
32
- currentT = aAFinal + (aBFinal - aAFinal) / 2;
33
- currentX = calcBezier(currentT, mX1, mX2) - aX;
34
- if (currentX > 0) {
35
- aBFinal = currentT;
36
- } else {
37
- aAFinal = currentT;
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
- let aGuessTFinal = aGuessT;
44
- for (let i = 0; i < NEWTON_ITERATIONS; ++i) {
45
- const currentSlope = getSlope(aGuessTFinal, mX1, mX2);
46
- if (currentSlope === 0) {
47
- return aGuessTFinal;
48
- }
49
- const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;
50
- aGuessTFinal -= currentX / currentSlope;
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
- return x;
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
- if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) {
59
- throw new Error("bezier x values must be in [0, 1] range");
60
- }
61
- if (x1 === y1 && x2 === y2) {
62
- return LinearEasing;
63
- }
64
- const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
65
- for (let i = 0; i < kSplineTableSize; ++i) {
66
- sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);
67
- }
68
- function getTForX(aX) {
69
- let intervalStart = 0;
70
- let currentSample = 1;
71
- const lastSample = kSplineTableSize - 1;
72
- for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
73
- intervalStart += kSampleStepSize;
74
- }
75
- --currentSample;
76
- const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
77
- const guessForT = intervalStart + dist * kSampleStepSize;
78
- const initialSlope = getSlope(guessForT, x1, x2);
79
- if (initialSlope >= NEWTON_MIN_SLOPE) {
80
- return newtonRaphsonIterate(aX, guessForT, x1, x2);
81
- }
82
- if (initialSlope === 0) {
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
- const easingEase = createEasingFn(0.25, 0.1, 0.25, 1);
95
- const easingLinear = createEasingFn(0, 0, 1, 1);
96
- const easingSnap = createEasingFn(0, 1, 0.5, 1);
97
- const easingIn = createEasingFn(0.42, 0, 1, 1);
98
- const easingOut = createEasingFn(0, 0, 0.58, 1);
99
- const easingInOut = createEasingFn(0.42, 0, 0.58, 1);
100
- const easingInQuad = createEasingFn(0.55, 0.085, 0.68, 0.53);
101
- const easingInCubic = createEasingFn(0.55, 0.055, 0.675, 0.19);
102
- const easingInQuart = createEasingFn(0.895, 0.03, 0.685, 0.22);
103
- const easingInQuint = createEasingFn(0.755, 0.05, 0.855, 0.06);
104
- const easingInSine = createEasingFn(0.47, 0, 0.745, 0.715);
105
- const easingInExpo = createEasingFn(0.95, 0.05, 0.795, 0.035);
106
- const easingInCirc = createEasingFn(0.6, 0.04, 0.98, 0.335);
107
- const easingInBack = createEasingFn(0.6, -0.28, 0.735, 0.045);
108
- const easingOutQuad = createEasingFn(0.25, 0.46, 0.45, 0.94);
109
- const easingOutCubic = createEasingFn(0.215, 0.61, 0.355, 1);
110
- const easingOutQuart = createEasingFn(0.165, 0.84, 0.44, 1);
111
- const easingOutQuint = createEasingFn(0.23, 1, 0.32, 1);
112
- const easingOutSine = createEasingFn(0.39, 0.575, 0.565, 1);
113
- const easingOutExpo = createEasingFn(0.19, 1, 0.22, 1);
114
- const easingOutCirc = createEasingFn(0.075, 0.82, 0.165, 1);
115
- const easingOutBack = createEasingFn(0.175, 0.885, 0.32, 1.275);
116
- const easingInOutQuart = createEasingFn(0.77, 0, 0.175, 1);
117
- const easingInOutQuint = createEasingFn(0.86, 0, 0.07, 1);
118
- const easingInOutSine = createEasingFn(0.445, 0.05, 0.55, 0.95);
119
- const easingInOutExpo = createEasingFn(1, 0, 0, 1);
120
- const easingInOutCirc = createEasingFn(0.785, 0.135, 0.15, 0.86);
121
- const easingInOutBack = createEasingFn(0.68, -0.55, 0.265, 1.55);
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
- //# sourceMappingURL=easing.cjs.map
152
+
153
+ //# sourceMappingURL=easing.cjs.map
@@ -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, aA: number, aB: number, mX1: number, mX2: number) {\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 (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX: number, aGuessT: number, mX1: number, mX2: number) {\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 ? new Float32Array(kSplineTableSize) : 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 (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist = (aX - sampleValues[currentSample]) / (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(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);\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"],"names":[],"mappings":"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"}
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
- const NEWTON_ITERATIONS = 4;
2
- const NEWTON_MIN_SLOPE = 1e-3;
3
- const SUBDIVISION_PRECISION = 1e-7;
4
- const SUBDIVISION_MAX_ITERATIONS = 10;
5
- const kSplineTableSize = 11;
6
- const kSampleStepSize = 1 / (kSplineTableSize - 1);
7
- const float32ArraySupported = typeof Float32Array === "function";
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
- return 1 - 3 * aA2 + 3 * aA1;
15
+ return 1 - 3 * aA2 + 3 * aA1;
10
16
  }
11
17
  function B(aA1, aA2) {
12
- return 3 * aA2 - 6 * aA1;
18
+ return 3 * aA2 - 6 * aA1;
13
19
  }
14
20
  function C(aA1) {
15
- return 3 * aA1;
21
+ return 3 * aA1;
16
22
  }
17
23
  function calcBezier(aT, aA1, aA2) {
18
- return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
24
+ return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
19
25
  }
20
26
  function getSlope(aT, aA1, aA2) {
21
- return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);
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
- let currentX;
25
- let currentT;
26
- let i = 0;
27
- let aBFinal = aB;
28
- let aAFinal = aA;
29
- do {
30
- currentT = aAFinal + (aBFinal - aAFinal) / 2;
31
- currentX = calcBezier(currentT, mX1, mX2) - aX;
32
- if (currentX > 0) {
33
- aBFinal = currentT;
34
- } else {
35
- aAFinal = currentT;
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
- let aGuessTFinal = aGuessT;
42
- for (let i = 0; i < NEWTON_ITERATIONS; ++i) {
43
- const currentSlope = getSlope(aGuessTFinal, mX1, mX2);
44
- if (currentSlope === 0) {
45
- return aGuessTFinal;
46
- }
47
- const currentX = calcBezier(aGuessTFinal, mX1, mX2) - aX;
48
- aGuessTFinal -= currentX / currentSlope;
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
- return x;
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
- if (!(0 <= x1 && x1 <= 1 && 0 <= x2 && x2 <= 1)) {
57
- throw new Error("bezier x values must be in [0, 1] range");
58
- }
59
- if (x1 === y1 && x2 === y2) {
60
- return LinearEasing;
61
- }
62
- const sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
63
- for (let i = 0; i < kSplineTableSize; ++i) {
64
- sampleValues[i] = calcBezier(i * kSampleStepSize, x1, x2);
65
- }
66
- function getTForX(aX) {
67
- let intervalStart = 0;
68
- let currentSample = 1;
69
- const lastSample = kSplineTableSize - 1;
70
- for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
71
- intervalStart += kSampleStepSize;
72
- }
73
- --currentSample;
74
- const dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
75
- const guessForT = intervalStart + dist * kSampleStepSize;
76
- const initialSlope = getSlope(guessForT, x1, x2);
77
- if (initialSlope >= NEWTON_MIN_SLOPE) {
78
- return newtonRaphsonIterate(aX, guessForT, x1, x2);
79
- }
80
- if (initialSlope === 0) {
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
- const easingEase = createEasingFn(0.25, 0.1, 0.25, 1);
93
- const easingLinear = createEasingFn(0, 0, 1, 1);
94
- const easingSnap = createEasingFn(0, 1, 0.5, 1);
95
- const easingIn = createEasingFn(0.42, 0, 1, 1);
96
- const easingOut = createEasingFn(0, 0, 0.58, 1);
97
- const easingInOut = createEasingFn(0.42, 0, 0.58, 1);
98
- const easingInQuad = createEasingFn(0.55, 0.085, 0.68, 0.53);
99
- const easingInCubic = createEasingFn(0.55, 0.055, 0.675, 0.19);
100
- const easingInQuart = createEasingFn(0.895, 0.03, 0.685, 0.22);
101
- const easingInQuint = createEasingFn(0.755, 0.05, 0.855, 0.06);
102
- const easingInSine = createEasingFn(0.47, 0, 0.745, 0.715);
103
- const easingInExpo = createEasingFn(0.95, 0.05, 0.795, 0.035);
104
- const easingInCirc = createEasingFn(0.6, 0.04, 0.98, 0.335);
105
- const easingInBack = createEasingFn(0.6, -0.28, 0.735, 0.045);
106
- const easingOutQuad = createEasingFn(0.25, 0.46, 0.45, 0.94);
107
- const easingOutCubic = createEasingFn(0.215, 0.61, 0.355, 1);
108
- const easingOutQuart = createEasingFn(0.165, 0.84, 0.44, 1);
109
- const easingOutQuint = createEasingFn(0.23, 1, 0.32, 1);
110
- const easingOutSine = createEasingFn(0.39, 0.575, 0.565, 1);
111
- const easingOutExpo = createEasingFn(0.19, 1, 0.22, 1);
112
- const easingOutCirc = createEasingFn(0.075, 0.82, 0.165, 1);
113
- const easingOutBack = createEasingFn(0.175, 0.885, 0.32, 1.275);
114
- const easingInOutQuart = createEasingFn(0.77, 0, 0.175, 1);
115
- const easingInOutQuint = createEasingFn(0.86, 0, 0.07, 1);
116
- const easingInOutSine = createEasingFn(0.445, 0.05, 0.55, 0.95);
117
- const easingInOutExpo = createEasingFn(1, 0, 0, 1);
118
- const easingInOutCirc = createEasingFn(0.785, 0.135, 0.15, 0.86);
119
- const easingInOutBack = createEasingFn(0.68, -0.55, 0.265, 1.55);
120
- export {
121
- createEasingFn,
122
- easingEase,
123
- easingIn,
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
@@ -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, aA: number, aB: number, mX1: number, mX2: number) {\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 (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX: number, aGuessT: number, mX1: number, mX2: number) {\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 ? new Float32Array(kSplineTableSize) : 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 (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n const dist = (aX - sampleValues[currentSample]) / (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(aX, intervalStart, intervalStart + kSampleStepSize, x1, x2);\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"],"names":[],"mappings":"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"}
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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"}