sculp-js 1.13.0 → 1.13.2
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 +10 -11
- package/dist/cjs/_virtual/_commonjsHelpers.js +13 -0
- package/{lib → dist}/cjs/array.js +1 -1
- package/{lib → dist}/cjs/async.js +1 -1
- package/{lib/cjs/we-decode.js → dist/cjs/base64.js} +53 -44
- package/{lib → dist}/cjs/clipboard.js +1 -1
- package/{lib → dist}/cjs/cloneDeep.js +1 -1
- package/{lib → dist}/cjs/cookie.js +1 -1
- package/{lib → dist}/cjs/date.js +1 -1
- package/{lib → dist}/cjs/dom.js +1 -1
- package/{lib → dist}/cjs/download.js +1 -1
- package/dist/cjs/easing.js +75 -0
- package/{lib → dist}/cjs/file.js +1 -1
- package/{lib → dist}/cjs/func.js +1 -1
- package/{lib → dist}/cjs/index.js +10 -8
- package/{lib → dist}/cjs/math.js +1 -1
- package/dist/cjs/node_modules/bezier-easing/src/index.js +123 -0
- package/{lib → dist}/cjs/number.js +1 -1
- package/{lib → dist}/cjs/object.js +1 -1
- package/{lib → dist}/cjs/path.js +1 -1
- package/{lib → dist}/cjs/qs.js +1 -1
- package/{lib → dist}/cjs/random.js +1 -1
- package/{lib → dist}/cjs/string.js +1 -1
- package/{lib → dist}/cjs/tooltip.js +1 -1
- package/{lib → dist}/cjs/tree.js +36 -43
- package/{lib → dist}/cjs/type.js +1 -1
- package/{lib → dist}/cjs/unique.js +1 -1
- package/{lib → dist}/cjs/url.js +1 -1
- package/{lib → dist}/cjs/validator.js +1 -1
- package/{lib → dist}/cjs/variable.js +1 -1
- package/{lib → dist}/cjs/watermark.js +1 -1
- package/{lib/es → dist/esm}/array.js +1 -1
- package/{lib/es → dist/esm}/async.js +1 -1
- package/{lib/es/we-decode.js → dist/esm/base64.js} +52 -45
- package/{lib/es → dist/esm}/clipboard.js +1 -1
- package/{lib/es → dist/esm}/cloneDeep.js +1 -1
- package/{lib/es → dist/esm}/cookie.js +1 -1
- package/{lib/es → dist/esm}/date.js +1 -1
- package/{lib/es → dist/esm}/dom.js +1 -1
- package/{lib/es → dist/esm}/download.js +1 -1
- package/{lib/es → dist/esm}/easing.js +34 -2
- package/{lib/es → dist/esm}/file.js +1 -1
- package/{lib/es → dist/esm}/func.js +1 -1
- package/{lib/es → dist/esm}/index.js +3 -4
- package/{lib/es → dist/esm}/math.js +1 -1
- package/{lib/es → dist/esm}/number.js +1 -1
- package/{lib/es → dist/esm}/object.js +1 -1
- package/{lib/es → dist/esm}/path.js +1 -1
- package/{lib/es → dist/esm}/qs.js +1 -1
- package/{lib/es → dist/esm}/random.js +1 -1
- package/{lib/es → dist/esm}/string.js +1 -1
- package/{lib/es → dist/esm}/tooltip.js +1 -1
- package/{lib/es → dist/esm}/tree.js +36 -43
- package/{lib/es → dist/esm}/type.js +1 -1
- package/{lib/es → dist/esm}/unique.js +1 -1
- package/{lib/es → dist/esm}/url.js +1 -1
- package/{lib/es → dist/esm}/validator.js +1 -1
- package/{lib/es → dist/esm}/variable.js +1 -1
- package/{lib/es → dist/esm}/watermark.js +1 -1
- package/dist/types/array.d.ts +50 -0
- package/dist/types/array.d.ts.map +1 -0
- package/dist/types/async.d.ts +37 -0
- package/dist/types/async.d.ts.map +1 -0
- package/dist/types/base64.d.ts +25 -0
- package/dist/types/base64.d.ts.map +1 -0
- package/dist/types/clipboard.d.ts +20 -0
- package/dist/types/clipboard.d.ts.map +1 -0
- package/dist/types/cloneDeep.d.ts +12 -0
- package/dist/types/cloneDeep.d.ts.map +1 -0
- package/dist/types/cookie.d.ts +19 -0
- package/dist/types/cookie.d.ts.map +1 -0
- package/dist/types/core-index.d.ts +17 -0
- package/dist/types/core-index.d.ts.map +1 -0
- package/dist/types/date.d.ts +74 -0
- package/dist/types/date.d.ts.map +1 -0
- package/dist/types/dom.d.ts +74 -0
- package/dist/types/dom.d.ts.map +1 -0
- package/dist/types/download.d.ts +47 -0
- package/dist/types/download.d.ts.map +1 -0
- package/dist/types/easing.d.ts +32 -0
- package/dist/types/easing.d.ts.map +1 -0
- package/dist/types/file.d.ts +44 -0
- package/dist/types/file.d.ts.map +1 -0
- package/dist/types/func.d.ts +50 -0
- package/dist/types/func.d.ts.map +1 -0
- package/dist/types/index.d.ts +28 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3258 -0
- package/dist/types/math.d.ts +36 -0
- package/dist/types/math.d.ts.map +1 -0
- package/dist/types/number.d.ts +49 -0
- package/dist/types/number.d.ts.map +1 -0
- package/dist/types/object.d.ts +70 -0
- package/dist/types/object.d.ts.map +1 -0
- package/dist/types/path.d.ts +14 -0
- package/dist/types/path.d.ts.map +1 -0
- package/dist/types/qs.d.ts +22 -0
- package/dist/types/qs.d.ts.map +1 -0
- package/dist/types/random.d.ts +27 -0
- package/dist/types/random.d.ts.map +1 -0
- package/dist/types/string.d.ts +67 -0
- package/dist/types/string.d.ts.map +1 -0
- package/dist/types/tooltip.d.ts +36 -0
- package/dist/types/tooltip.d.ts.map +1 -0
- package/dist/types/tree.d.ts +98 -0
- package/dist/types/tree.d.ts.map +1 -0
- package/dist/types/type.d.ts +124 -0
- package/dist/types/type.d.ts.map +1 -0
- package/dist/types/unique.d.ts +21 -0
- package/dist/types/unique.d.ts.map +1 -0
- package/dist/types/url.d.ts +46 -0
- package/dist/types/url.d.ts.map +1 -0
- package/dist/types/validator.d.ts +67 -0
- package/dist/types/validator.d.ts.map +1 -0
- package/dist/types/variable.d.ts +71 -0
- package/dist/types/variable.d.ts.map +1 -0
- package/dist/types/watermark.d.ts +19 -0
- package/dist/types/watermark.d.ts.map +1 -0
- package/dist/umd/index.min.js +6 -0
- package/package.json +234 -17
- package/lib/cjs/base64.js +0 -62
- package/lib/cjs/easing.js +0 -40
- package/lib/cjs/isEqual.js +0 -133
- package/lib/es/base64.js +0 -59
- package/lib/es/isEqual.js +0 -131
- package/lib/index.d.ts +0 -1211
- package/lib/umd/index.js +0 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[](https://github.com/chandq/sculp-js/actions/workflows/node.js.yml)
|
|
2
|
-
[](https://
|
|
3
|
-
|
|
2
|
+
[](https://www.npmjs.com/package/sculp-js)
|
|
3
|
+
|
|
4
4
|
[](https://github.com/chandq/sculp-js/blob/main/LICENSE.md)
|
|
5
5
|
[](https://npmcharts.com/compare/sculp-js?minimal=true)
|
|
6
6
|
[](https://codecov.io/gh/chandq/sculp-js)
|
|
@@ -45,17 +45,17 @@
|
|
|
45
45
|
|
|
46
46
|
- Array
|
|
47
47
|
|
|
48
|
-
-
|
|
49
|
-
- arrayEachAsync
|
|
48
|
+
- arrayEach
|
|
49
|
+
- arrayEachAsync
|
|
50
50
|
|
|
51
51
|
- Tree
|
|
52
52
|
|
|
53
|
-
- forEachDeep
|
|
54
|
-
- mapDeep
|
|
55
|
-
- searchTreeById
|
|
56
|
-
- formatTree
|
|
57
|
-
- flatTree
|
|
58
|
-
- fuzzySearchTree
|
|
53
|
+
- forEachDeep
|
|
54
|
+
- mapDeep
|
|
55
|
+
- searchTreeById
|
|
56
|
+
- formatTree
|
|
57
|
+
- flatTree
|
|
58
|
+
- fuzzySearchTree
|
|
59
59
|
|
|
60
60
|
- Object
|
|
61
61
|
|
|
@@ -66,7 +66,6 @@
|
|
|
66
66
|
- objectEachAsync
|
|
67
67
|
- objectGet
|
|
68
68
|
- cloneDeep
|
|
69
|
-
- isEqual
|
|
70
69
|
|
|
71
70
|
- Number
|
|
72
71
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* sculp-js v1.13.2
|
|
3
|
+
* (c) 2023-present chandq
|
|
4
|
+
* Released under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
function getDefaultExportFromCjs (x) {
|
|
10
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.getDefaultExportFromCjs = getDefaultExportFromCjs;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.2
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
+
var func = require('./func.js');
|
|
10
|
+
var type = require('./type.js');
|
|
11
|
+
|
|
9
12
|
const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
10
13
|
// eslint-disable-next-line
|
|
11
14
|
const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
|
|
@@ -59,49 +62,55 @@ function weAtob(string) {
|
|
|
59
62
|
}
|
|
60
63
|
return result;
|
|
61
64
|
}
|
|
62
|
-
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
65
|
+
function stringToUint8Array(str) {
|
|
66
|
+
const utf8 = encodeURIComponent(str); // 将字符串转换为 UTF-8 编码
|
|
67
|
+
const uint8Array = new Uint8Array(utf8.length); // 创建 Uint8Array
|
|
68
|
+
for (let i = 0; i < utf8.length; i++) {
|
|
69
|
+
uint8Array[i] = utf8.charCodeAt(i); // 填充 Uint8Array
|
|
70
|
+
}
|
|
71
|
+
return uint8Array;
|
|
72
|
+
}
|
|
73
|
+
function uint8ArrayToString(uint8Array) {
|
|
74
|
+
const utf8 = String.fromCharCode.apply(null, uint8Array); // 将 Uint8Array 转为字符串
|
|
75
|
+
return decodeURIComponent(utf8); // 将 UTF-8 字符串解码回正常字符串
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 将base64编码的字符串转换为原始字符串,包括对中文内容的处理(高性能,且支持Web、Node、小程序等任意平台)
|
|
79
|
+
* @param base64 base64编码的字符串
|
|
80
|
+
* @returns 原始字符串,包括中文内容
|
|
81
|
+
*/
|
|
82
|
+
function b64decode(base64) {
|
|
83
|
+
const binaryString = !type.isNullOrUnDef(func.getGlobal('atob')) ? func.getGlobal('atob')(base64) : weAtob(base64);
|
|
84
|
+
const len = binaryString.length;
|
|
85
|
+
const bytes = new Uint8Array(len);
|
|
86
|
+
for (let i = 0; i < len; i++) {
|
|
87
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
88
|
+
}
|
|
89
|
+
// 使用TextDecoder将Uint8Array转换为原始字符串,包括中文内容
|
|
90
|
+
return !type.isNullOrUnDef(func.getGlobal('TextDecoder'))
|
|
91
|
+
? new (func.getGlobal('TextDecoder'))('utf-8').decode(bytes)
|
|
92
|
+
: uint8ArrayToString(bytes);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 将原始字符串,包括中文内容,转换为base64编码的字符串(高性能,且支持Web、Node、小程序等任意平台)
|
|
96
|
+
* @param rawStr 原始字符串,包括中文内容
|
|
97
|
+
* @returns base64编码的字符串
|
|
98
|
+
*/
|
|
99
|
+
function b64encode(rawStr) {
|
|
100
|
+
const utf8Array = !type.isNullOrUnDef(func.getGlobal('TextEncoder'))
|
|
101
|
+
? new (func.getGlobal('TextEncoder'))().encode(rawStr)
|
|
102
|
+
: stringToUint8Array(rawStr);
|
|
103
|
+
// 将 Uint8Array 转换为二进制字符串
|
|
104
|
+
let binaryString = '';
|
|
105
|
+
const len = utf8Array.length;
|
|
106
|
+
for (let i = 0; i < len; i++) {
|
|
107
|
+
binaryString += String.fromCharCode(utf8Array[i]);
|
|
108
|
+
}
|
|
109
|
+
// 将二进制字符串转换为base64编码的字符串
|
|
110
|
+
return !type.isNullOrUnDef(func.getGlobal('btoa')) ? func.getGlobal('btoa')(binaryString) : weBtoa(binaryString);
|
|
111
|
+
}
|
|
105
112
|
|
|
113
|
+
exports.b64decode = b64decode;
|
|
114
|
+
exports.b64encode = b64encode;
|
|
106
115
|
exports.weAtob = weAtob;
|
|
107
116
|
exports.weBtoa = weBtoa;
|
package/{lib → dist}/cjs/date.js
RENAMED
package/{lib → dist}/cjs/dom.js
RENAMED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* sculp-js v1.13.2
|
|
3
|
+
* (c) 2023-present chandq
|
|
4
|
+
* Released under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
var index = require('./node_modules/bezier-easing/src/index.js');
|
|
10
|
+
var type = require('./type.js');
|
|
11
|
+
|
|
12
|
+
// @ref https://cubic-bezier.com/
|
|
13
|
+
const easingDefines = {
|
|
14
|
+
linear: [0, 0, 1, 1],
|
|
15
|
+
ease: [0.25, 0.1, 0.25, 1],
|
|
16
|
+
'ease-in': [0.42, 0, 1, 1],
|
|
17
|
+
'ease-out': [0, 0, 0.58, 1],
|
|
18
|
+
'ease-in-out': [0.42, 0, 0.58, 1]
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* 设置缓存定义
|
|
22
|
+
* @param {string} name
|
|
23
|
+
* @param {EasingDefine} define
|
|
24
|
+
*/
|
|
25
|
+
function setEasing(name, define) {
|
|
26
|
+
easingDefines[name] = define;
|
|
27
|
+
}
|
|
28
|
+
function getEasing(name) {
|
|
29
|
+
if (name)
|
|
30
|
+
return easingDefines[name];
|
|
31
|
+
return easingDefines;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 缓冲函数化,用于 js 计算缓冲进度
|
|
35
|
+
* @param {EasingNameOrDefine} [name=linear]
|
|
36
|
+
* @returns {EasingFunction}
|
|
37
|
+
*/
|
|
38
|
+
function easingFunctional(name) {
|
|
39
|
+
let fn;
|
|
40
|
+
if (type.isArray(name)) {
|
|
41
|
+
fn = index.default(...name);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const define = easingDefines[name];
|
|
45
|
+
if (!define) {
|
|
46
|
+
throw new Error(`${name} 缓冲函数未定义`);
|
|
47
|
+
}
|
|
48
|
+
fn = index.default(...define);
|
|
49
|
+
}
|
|
50
|
+
return (input) => fn(Math.max(0, Math.min(input, 1)));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 缓冲字符化,用于 css 设置缓冲属性
|
|
54
|
+
* @param {EasingNameOrDefine} name
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
function easingStringify(name) {
|
|
58
|
+
let bezierDefine;
|
|
59
|
+
if (type.isArray(name)) {
|
|
60
|
+
bezierDefine = name;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const define = easingDefines[name];
|
|
64
|
+
if (!define) {
|
|
65
|
+
throw new Error(`${name} 缓冲函数未定义`);
|
|
66
|
+
}
|
|
67
|
+
bezierDefine = define;
|
|
68
|
+
}
|
|
69
|
+
return `cubic-bezier(${bezierDefine.join(',')})`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
exports.easingFunctional = easingFunctional;
|
|
73
|
+
exports.easingStringify = easingStringify;
|
|
74
|
+
exports.getEasing = getEasing;
|
|
75
|
+
exports.setEasing = setEasing;
|
package/{lib → dist}/cjs/file.js
RENAMED
package/{lib → dist}/cjs/func.js
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.2
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -28,12 +28,11 @@ var unique = require('./unique.js');
|
|
|
28
28
|
var tooltip = require('./tooltip.js');
|
|
29
29
|
var tree = require('./tree.js');
|
|
30
30
|
var math = require('./math.js');
|
|
31
|
-
var weDecode = require('./we-decode.js');
|
|
32
31
|
var base64 = require('./base64.js');
|
|
33
32
|
var validator = require('./validator.js');
|
|
34
33
|
var variable = require('./variable.js');
|
|
35
34
|
var cloneDeep = require('./cloneDeep.js');
|
|
36
|
-
var
|
|
35
|
+
var easing = require('./easing.js');
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
|
|
@@ -154,10 +153,10 @@ exports.divide = math.divide;
|
|
|
154
153
|
exports.multiply = math.multiply;
|
|
155
154
|
exports.strip = math.strip;
|
|
156
155
|
exports.subtract = math.subtract;
|
|
157
|
-
exports.
|
|
158
|
-
exports.
|
|
159
|
-
exports.
|
|
160
|
-
exports.
|
|
156
|
+
exports.b64decode = base64.b64decode;
|
|
157
|
+
exports.b64encode = base64.b64encode;
|
|
158
|
+
exports.weAtob = base64.weAtob;
|
|
159
|
+
exports.weBtoa = base64.weBtoa;
|
|
161
160
|
exports.EMAIL_REGEX = validator.EMAIL_REGEX;
|
|
162
161
|
exports.HTTP_URL_REGEX = validator.HTTP_URL_REGEX;
|
|
163
162
|
exports.IPV4_REGEX = validator.IPV4_REGEX;
|
|
@@ -180,4 +179,7 @@ exports.parseVarFromString = variable.parseVarFromString;
|
|
|
180
179
|
exports.replaceVarFromString = variable.replaceVarFromString;
|
|
181
180
|
exports.uniqueSymbol = variable.uniqueSymbol;
|
|
182
181
|
exports.cloneDeep = cloneDeep.cloneDeep;
|
|
183
|
-
exports.
|
|
182
|
+
exports.easingFunctional = easing.easingFunctional;
|
|
183
|
+
exports.easingStringify = easing.easingStringify;
|
|
184
|
+
exports.getEasing = easing.getEasing;
|
|
185
|
+
exports.setEasing = easing.setEasing;
|
package/{lib → dist}/cjs/math.js
RENAMED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* sculp-js v1.13.2
|
|
3
|
+
* (c) 2023-present chandq
|
|
4
|
+
* Released under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
10
|
+
|
|
11
|
+
var _commonjsHelpers = require('../../../_virtual/_commonjsHelpers.js');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* https://github.com/gre/bezier-easing
|
|
15
|
+
* BezierEasing - use bezier curve for transition easing function
|
|
16
|
+
* by Gaëtan Renaudeau 2014 - 2015 – MIT License
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// These values are established by empiricism with tests (tradeoff: performance VS precision)
|
|
20
|
+
var NEWTON_ITERATIONS = 4;
|
|
21
|
+
var NEWTON_MIN_SLOPE = 0.001;
|
|
22
|
+
var SUBDIVISION_PRECISION = 0.0000001;
|
|
23
|
+
var SUBDIVISION_MAX_ITERATIONS = 10;
|
|
24
|
+
|
|
25
|
+
var kSplineTableSize = 11;
|
|
26
|
+
var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);
|
|
27
|
+
|
|
28
|
+
var float32ArraySupported = typeof Float32Array === 'function';
|
|
29
|
+
|
|
30
|
+
function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
|
|
31
|
+
function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }
|
|
32
|
+
function C (aA1) { return 3.0 * aA1; }
|
|
33
|
+
|
|
34
|
+
// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
|
|
35
|
+
function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }
|
|
36
|
+
|
|
37
|
+
// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
|
|
38
|
+
function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }
|
|
39
|
+
|
|
40
|
+
function binarySubdivide (aX, aA, aB, mX1, mX2) {
|
|
41
|
+
var currentX, currentT, i = 0;
|
|
42
|
+
do {
|
|
43
|
+
currentT = aA + (aB - aA) / 2.0;
|
|
44
|
+
currentX = calcBezier(currentT, mX1, mX2) - aX;
|
|
45
|
+
if (currentX > 0.0) {
|
|
46
|
+
aB = currentT;
|
|
47
|
+
} else {
|
|
48
|
+
aA = currentT;
|
|
49
|
+
}
|
|
50
|
+
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
|
|
51
|
+
return currentT;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {
|
|
55
|
+
for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
|
|
56
|
+
var currentSlope = getSlope(aGuessT, mX1, mX2);
|
|
57
|
+
if (currentSlope === 0.0) {
|
|
58
|
+
return aGuessT;
|
|
59
|
+
}
|
|
60
|
+
var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
|
|
61
|
+
aGuessT -= currentX / currentSlope;
|
|
62
|
+
}
|
|
63
|
+
return aGuessT;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function LinearEasing (x) {
|
|
67
|
+
return x;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
var src = function bezier (mX1, mY1, mX2, mY2) {
|
|
71
|
+
if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {
|
|
72
|
+
throw new Error('bezier x values must be in [0, 1] range');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (mX1 === mY1 && mX2 === mY2) {
|
|
76
|
+
return LinearEasing;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Precompute samples table
|
|
80
|
+
var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
|
|
81
|
+
for (var i = 0; i < kSplineTableSize; ++i) {
|
|
82
|
+
sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function getTForX (aX) {
|
|
86
|
+
var intervalStart = 0.0;
|
|
87
|
+
var currentSample = 1;
|
|
88
|
+
var lastSample = kSplineTableSize - 1;
|
|
89
|
+
|
|
90
|
+
for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
|
|
91
|
+
intervalStart += kSampleStepSize;
|
|
92
|
+
}
|
|
93
|
+
--currentSample;
|
|
94
|
+
|
|
95
|
+
// Interpolate to provide an initial guess for t
|
|
96
|
+
var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
|
|
97
|
+
var guessForT = intervalStart + dist * kSampleStepSize;
|
|
98
|
+
|
|
99
|
+
var initialSlope = getSlope(guessForT, mX1, mX2);
|
|
100
|
+
if (initialSlope >= NEWTON_MIN_SLOPE) {
|
|
101
|
+
return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
|
|
102
|
+
} else if (initialSlope === 0.0) {
|
|
103
|
+
return guessForT;
|
|
104
|
+
} else {
|
|
105
|
+
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return function BezierEasing (x) {
|
|
110
|
+
// Because JavaScript number are imprecise, we should guarantee the extremes are right.
|
|
111
|
+
if (x === 0) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
if (x === 1) {
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
return calcBezier(getTForX(x), mY1, mY2);
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
var bezier = /*@__PURE__*/_commonjsHelpers.getDefaultExportFromCjs(src);
|
|
122
|
+
|
|
123
|
+
exports.default = bezier;
|
package/{lib → dist}/cjs/path.js
RENAMED
package/{lib → dist}/cjs/qs.js
RENAMED