@visactor/vutils 0.18.5 → 0.18.7

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 (49) hide show
  1. package/cjs/angle.d.ts +1 -0
  2. package/cjs/angle.js +9 -2
  3. package/cjs/angle.js.map +1 -1
  4. package/cjs/common/bisect.d.ts +6 -0
  5. package/cjs/common/bisect.js +36 -3
  6. package/cjs/common/bisect.js.map +1 -1
  7. package/cjs/common/index.d.ts +2 -1
  8. package/cjs/common/index.js +18 -3
  9. package/cjs/common/index.js.map +1 -1
  10. package/cjs/common/random.d.ts +1 -0
  11. package/cjs/common/random.js +10 -0
  12. package/cjs/common/random.js.map +1 -0
  13. package/cjs/dom.d.ts +1 -0
  14. package/cjs/dom.js +11 -2
  15. package/cjs/dom.js.map +1 -1
  16. package/cjs/fmin/index.d.ts +0 -1
  17. package/cjs/fmin/index.js +1 -1
  18. package/cjs/fmin/index.js.map +1 -1
  19. package/cjs/graphics/algorithm/intersect.js +7 -10
  20. package/cjs/graphics/algorithm/intersect.js.map +1 -1
  21. package/dist/index.js +200 -152
  22. package/dist/index.min.js +1 -1
  23. package/es/angle.d.ts +1 -0
  24. package/es/angle.js +6 -0
  25. package/es/angle.js.map +1 -1
  26. package/es/common/bisect.d.ts +6 -0
  27. package/es/common/bisect.js +31 -0
  28. package/es/common/bisect.js.map +1 -1
  29. package/es/common/index.d.ts +2 -1
  30. package/es/common/index.js +3 -1
  31. package/es/common/index.js.map +1 -1
  32. package/es/common/random.d.ts +1 -0
  33. package/es/common/random.js +4 -0
  34. package/es/common/random.js.map +1 -0
  35. package/es/dom.d.ts +1 -0
  36. package/es/dom.js +9 -0
  37. package/es/dom.js.map +1 -1
  38. package/es/fmin/index.d.ts +0 -1
  39. package/es/fmin/index.js +0 -2
  40. package/es/fmin/index.js.map +1 -1
  41. package/es/graphics/algorithm/intersect.js +7 -9
  42. package/es/graphics/algorithm/intersect.js.map +1 -1
  43. package/package.json +3 -3
  44. package/cjs/fmin/bisect.d.ts +0 -1
  45. package/cjs/fmin/bisect.js +0 -27
  46. package/cjs/fmin/bisect.js.map +0 -1
  47. package/es/fmin/bisect.d.ts +0 -1
  48. package/es/fmin/bisect.js +0 -19
  49. package/es/fmin/bisect.js.map +0 -1
package/dist/index.js CHANGED
@@ -974,6 +974,118 @@
974
974
  return value0 + (value1 - value0) * (i - i0);
975
975
  }
976
976
 
977
+ const hasConsole = typeof console !== 'undefined';
978
+ function log(method, level, input) {
979
+ const args = [level].concat([].slice.call(input));
980
+ if (hasConsole) {
981
+ console[method].apply(console, args);
982
+ }
983
+ }
984
+ exports.LoggerLevel = void 0;
985
+ (function (LoggerLevel) {
986
+ LoggerLevel[LoggerLevel["None"] = 0] = "None";
987
+ LoggerLevel[LoggerLevel["Error"] = 1] = "Error";
988
+ LoggerLevel[LoggerLevel["Warn"] = 2] = "Warn";
989
+ LoggerLevel[LoggerLevel["Info"] = 3] = "Info";
990
+ LoggerLevel[LoggerLevel["Debug"] = 4] = "Debug";
991
+ })(exports.LoggerLevel || (exports.LoggerLevel = {}));
992
+ class Logger {
993
+ static getInstance(level, method) {
994
+ if (Logger._instance && isNumber(level)) {
995
+ Logger._instance.level(level);
996
+ }
997
+ else if (!Logger._instance) {
998
+ Logger._instance = new Logger(level, method);
999
+ }
1000
+ return Logger._instance;
1001
+ }
1002
+ static setInstance(logger) {
1003
+ return (Logger._instance = logger);
1004
+ }
1005
+ static setInstanceLevel(level) {
1006
+ if (Logger._instance) {
1007
+ Logger._instance.level(level);
1008
+ }
1009
+ else {
1010
+ Logger._instance = new Logger(level);
1011
+ }
1012
+ }
1013
+ static clearInstance() {
1014
+ Logger._instance = null;
1015
+ }
1016
+ constructor(level = exports.LoggerLevel.None, method) {
1017
+ this._onErrorHandler = [];
1018
+ this._level = level;
1019
+ this._method = method;
1020
+ }
1021
+ addErrorHandler(handler) {
1022
+ if (this._onErrorHandler.find(h => h === handler)) {
1023
+ return;
1024
+ }
1025
+ this._onErrorHandler.push(handler);
1026
+ }
1027
+ removeErrorHandler(handler) {
1028
+ const index = this._onErrorHandler.findIndex(h => h === handler);
1029
+ if (index < 0) {
1030
+ return;
1031
+ }
1032
+ this._onErrorHandler.splice(index, 1);
1033
+ }
1034
+ callErrorHandler(...args) {
1035
+ this._onErrorHandler.forEach(h => h(...args));
1036
+ }
1037
+ canLogInfo() {
1038
+ return this._level >= exports.LoggerLevel.Info;
1039
+ }
1040
+ canLogDebug() {
1041
+ return this._level >= exports.LoggerLevel.Debug;
1042
+ }
1043
+ canLogError() {
1044
+ return this._level >= exports.LoggerLevel.Error;
1045
+ }
1046
+ canLogWarn() {
1047
+ return this._level >= exports.LoggerLevel.Warn;
1048
+ }
1049
+ level(levelValue) {
1050
+ if (arguments.length) {
1051
+ this._level = +levelValue;
1052
+ return this;
1053
+ }
1054
+ return this._level;
1055
+ }
1056
+ error(...args) {
1057
+ var _a;
1058
+ if (this._level >= exports.LoggerLevel.Error) {
1059
+ if (this._onErrorHandler.length) {
1060
+ this.callErrorHandler(...args);
1061
+ }
1062
+ else {
1063
+ log((_a = this._method) !== null && _a !== void 0 ? _a : 'error', 'ERROR', args);
1064
+ }
1065
+ }
1066
+ return this;
1067
+ }
1068
+ warn(...args) {
1069
+ if (this._level >= exports.LoggerLevel.Warn) {
1070
+ log(this._method || 'warn', 'WARN', args);
1071
+ }
1072
+ return this;
1073
+ }
1074
+ info(...args) {
1075
+ if (this._level >= exports.LoggerLevel.Info) {
1076
+ log(this._method || 'log', 'INFO', args);
1077
+ }
1078
+ return this;
1079
+ }
1080
+ debug(...args) {
1081
+ if (this._level >= exports.LoggerLevel.Debug) {
1082
+ log(this._method || 'log', 'DEBUG', args);
1083
+ }
1084
+ return this;
1085
+ }
1086
+ }
1087
+ Logger._instance = null;
1088
+
977
1089
  function bisect(a, x, lo = 0, hi) {
978
1090
  if (isNil(hi)) {
979
1091
  hi = a.length;
@@ -989,6 +1101,54 @@
989
1101
  }
990
1102
  return lo;
991
1103
  }
1104
+ function findZeroOfFunction(f, a, b, parameters) {
1105
+ var _a, _b;
1106
+ const maxIterations = (_a = parameters === null || parameters === void 0 ? void 0 : parameters.maxIterations) !== null && _a !== void 0 ? _a : 100;
1107
+ const tolerance = (_b = parameters === null || parameters === void 0 ? void 0 : parameters.tolerance) !== null && _b !== void 0 ? _b : 1e-10;
1108
+ const fA = f(a);
1109
+ const fB = f(b);
1110
+ let delta = b - a;
1111
+ if (fA * fB > 0) {
1112
+ const logger = Logger.getInstance();
1113
+ logger.error('Initial bisect points must have opposite signs');
1114
+ return NaN;
1115
+ }
1116
+ if (fA === 0) {
1117
+ return a;
1118
+ }
1119
+ if (fB === 0) {
1120
+ return b;
1121
+ }
1122
+ for (let i = 0; i < maxIterations; ++i) {
1123
+ delta /= 2;
1124
+ const mid = a + delta;
1125
+ const fMid = f(mid);
1126
+ if (fMid * fA >= 0) {
1127
+ a = mid;
1128
+ }
1129
+ if (Math.abs(delta) < tolerance || fMid === 0) {
1130
+ return mid;
1131
+ }
1132
+ }
1133
+ return a + delta;
1134
+ }
1135
+ const binaryFuzzySearch = (arr, compareFn) => {
1136
+ return binaryFuzzySearchInNumberRange(0, arr.length, value => compareFn(arr[value]));
1137
+ };
1138
+ const binaryFuzzySearchInNumberRange = (x1, x2, compareFn) => {
1139
+ let left = x1;
1140
+ let right = x2;
1141
+ while (left < right) {
1142
+ const mid = Math.floor((left + right) / 2);
1143
+ if (compareFn(mid) >= 0) {
1144
+ right = mid;
1145
+ }
1146
+ else {
1147
+ left = mid + 1;
1148
+ }
1149
+ }
1150
+ return left;
1151
+ };
992
1152
 
993
1153
  function variance(values, valueof) {
994
1154
  let count = 0;
@@ -1465,6 +1625,10 @@
1465
1625
  });
1466
1626
  }
1467
1627
 
1628
+ function seedRandom(seed) {
1629
+ return parseFloat('0.' + Math.sin(seed).toString().substring(6));
1630
+ }
1631
+
1468
1632
  class HashValue {
1469
1633
  }
1470
1634
  class HashTable {
@@ -2067,6 +2231,15 @@
2067
2231
  function getAngleByPoint(center, point) {
2068
2232
  return Math.atan2(point.y - center.y, point.x - center.x);
2069
2233
  }
2234
+ function normalizeAngle(angle) {
2235
+ while (angle < 0) {
2236
+ angle += Math.PI * 2;
2237
+ }
2238
+ while (angle >= Math.PI * 2) {
2239
+ angle -= Math.PI * 2;
2240
+ }
2241
+ return angle;
2242
+ }
2070
2243
 
2071
2244
  class Matrix {
2072
2245
  constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {
@@ -3163,9 +3336,6 @@
3163
3336
  y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y
3164
3337
  };
3165
3338
  }
3166
- function toDeg(angle) {
3167
- return (angle / 180) * Math.PI;
3168
- }
3169
3339
  function getCenterPoint(box) {
3170
3340
  return {
3171
3341
  x: (box.x1 + box.x2) / 2,
@@ -3173,7 +3343,7 @@
3173
3343
  };
3174
3344
  }
3175
3345
  function toRect(box, isDeg) {
3176
- const deg = isDeg ? box.angle : toDeg(box.angle);
3346
+ const deg = isDeg ? box.angle : degreeToRadian(box.angle);
3177
3347
  const cp = getCenterPoint(box);
3178
3348
  return [
3179
3349
  rotate({
@@ -3237,10 +3407,10 @@
3237
3407
  const BC = vector(rect1[1], rect1[2]);
3238
3408
  const A1B1 = vector(rect2[0], rect2[1]);
3239
3409
  const B1C1 = vector(rect2[1], rect2[2]);
3240
- const deg11 = isDeg ? box1.angle : toDeg(box1.angle);
3241
- let deg12 = isDeg ? box1.angle + halfPi : toDeg(90 - box1.angle);
3242
- const deg21 = isDeg ? box2.angle : toDeg(box2.angle);
3243
- let deg22 = isDeg ? box2.angle + halfPi : toDeg(90 - box2.angle);
3410
+ const deg11 = isDeg ? box1.angle : degreeToRadian(box1.angle);
3411
+ let deg12 = isDeg ? box1.angle + halfPi : degreeToRadian(90 - box1.angle);
3412
+ const deg21 = isDeg ? box2.angle : degreeToRadian(box2.angle);
3413
+ let deg22 = isDeg ? box2.angle + halfPi : degreeToRadian(90 - box2.angle);
3244
3414
  if (deg12 > pi2) {
3245
3415
  deg12 -= pi2;
3246
3416
  }
@@ -4164,118 +4334,6 @@
4164
4334
  return { x: anchorX, y: anchorY };
4165
4335
  };
4166
4336
 
4167
- const hasConsole = typeof console !== 'undefined';
4168
- function log(method, level, input) {
4169
- const args = [level].concat([].slice.call(input));
4170
- if (hasConsole) {
4171
- console[method].apply(console, args);
4172
- }
4173
- }
4174
- exports.LoggerLevel = void 0;
4175
- (function (LoggerLevel) {
4176
- LoggerLevel[LoggerLevel["None"] = 0] = "None";
4177
- LoggerLevel[LoggerLevel["Error"] = 1] = "Error";
4178
- LoggerLevel[LoggerLevel["Warn"] = 2] = "Warn";
4179
- LoggerLevel[LoggerLevel["Info"] = 3] = "Info";
4180
- LoggerLevel[LoggerLevel["Debug"] = 4] = "Debug";
4181
- })(exports.LoggerLevel || (exports.LoggerLevel = {}));
4182
- class Logger {
4183
- static getInstance(level, method) {
4184
- if (Logger._instance && isNumber(level)) {
4185
- Logger._instance.level(level);
4186
- }
4187
- else if (!Logger._instance) {
4188
- Logger._instance = new Logger(level, method);
4189
- }
4190
- return Logger._instance;
4191
- }
4192
- static setInstance(logger) {
4193
- return (Logger._instance = logger);
4194
- }
4195
- static setInstanceLevel(level) {
4196
- if (Logger._instance) {
4197
- Logger._instance.level(level);
4198
- }
4199
- else {
4200
- Logger._instance = new Logger(level);
4201
- }
4202
- }
4203
- static clearInstance() {
4204
- Logger._instance = null;
4205
- }
4206
- constructor(level = exports.LoggerLevel.None, method) {
4207
- this._onErrorHandler = [];
4208
- this._level = level;
4209
- this._method = method;
4210
- }
4211
- addErrorHandler(handler) {
4212
- if (this._onErrorHandler.find(h => h === handler)) {
4213
- return;
4214
- }
4215
- this._onErrorHandler.push(handler);
4216
- }
4217
- removeErrorHandler(handler) {
4218
- const index = this._onErrorHandler.findIndex(h => h === handler);
4219
- if (index < 0) {
4220
- return;
4221
- }
4222
- this._onErrorHandler.splice(index, 1);
4223
- }
4224
- callErrorHandler(...args) {
4225
- this._onErrorHandler.forEach(h => h(...args));
4226
- }
4227
- canLogInfo() {
4228
- return this._level >= exports.LoggerLevel.Info;
4229
- }
4230
- canLogDebug() {
4231
- return this._level >= exports.LoggerLevel.Debug;
4232
- }
4233
- canLogError() {
4234
- return this._level >= exports.LoggerLevel.Error;
4235
- }
4236
- canLogWarn() {
4237
- return this._level >= exports.LoggerLevel.Warn;
4238
- }
4239
- level(levelValue) {
4240
- if (arguments.length) {
4241
- this._level = +levelValue;
4242
- return this;
4243
- }
4244
- return this._level;
4245
- }
4246
- error(...args) {
4247
- var _a;
4248
- if (this._level >= exports.LoggerLevel.Error) {
4249
- if (this._onErrorHandler.length) {
4250
- this.callErrorHandler(...args);
4251
- }
4252
- else {
4253
- log((_a = this._method) !== null && _a !== void 0 ? _a : 'error', 'ERROR', args);
4254
- }
4255
- }
4256
- return this;
4257
- }
4258
- warn(...args) {
4259
- if (this._level >= exports.LoggerLevel.Warn) {
4260
- log(this._method || 'warn', 'WARN', args);
4261
- }
4262
- return this;
4263
- }
4264
- info(...args) {
4265
- if (this._level >= exports.LoggerLevel.Info) {
4266
- log(this._method || 'log', 'INFO', args);
4267
- }
4268
- return this;
4269
- }
4270
- debug(...args) {
4271
- if (this._level >= exports.LoggerLevel.Debug) {
4272
- log(this._method || 'log', 'DEBUG', args);
4273
- }
4274
- return this;
4275
- }
4276
- }
4277
- Logger._instance = null;
4278
-
4279
4337
  function normalizePadding(padding) {
4280
4338
  if (isValidNumber(padding)) {
4281
4339
  return [padding, padding, padding, padding];
@@ -4784,6 +4842,23 @@
4784
4842
  const lowerCamelCaseToMiddle = (str) => {
4785
4843
  return str.replace(/([A-Z])/g, '-$1').toLowerCase();
4786
4844
  };
4845
+ function isHTMLElement(obj) {
4846
+ try {
4847
+ return obj instanceof Element;
4848
+ }
4849
+ catch (_a) {
4850
+ const htmlElementKeys = [
4851
+ 'children',
4852
+ 'innerHTML',
4853
+ 'classList',
4854
+ 'setAttribute',
4855
+ 'tagName',
4856
+ 'getBoundingClientRect'
4857
+ ];
4858
+ const keys = Object.keys(obj);
4859
+ return htmlElementKeys.every(key => keys.includes(key));
4860
+ }
4861
+ }
4787
4862
 
4788
4863
  /**
4789
4864
  * @module helpers
@@ -5961,38 +6036,6 @@
5961
6036
  return current;
5962
6037
  }
5963
6038
 
5964
- function findZeroOfFunction(f, a, b, parameters) {
5965
- parameters = parameters || {};
5966
- const maxIterations = parameters.maxIterations || 100;
5967
- const tolerance = parameters.tolerance || 1e-10;
5968
- const fA = f(a);
5969
- const fB = f(b);
5970
- let delta = b - a;
5971
- if (fA * fB > 0) {
5972
- const logger = Logger.getInstance();
5973
- logger.error('Initial bisect points must have opposite signs');
5974
- return NaN;
5975
- }
5976
- if (fA === 0) {
5977
- return a;
5978
- }
5979
- if (fB === 0) {
5980
- return b;
5981
- }
5982
- for (let i = 0; i < maxIterations; ++i) {
5983
- delta /= 2;
5984
- const mid = a + delta;
5985
- const fMid = f(mid);
5986
- if (fMid * fA >= 0) {
5987
- a = mid;
5988
- }
5989
- if (Math.abs(delta) < tolerance || fMid === 0) {
5990
- return mid;
5991
- }
5992
- }
5993
- return a + delta;
5994
- }
5995
-
5996
6039
  exports.AABBBounds = AABBBounds;
5997
6040
  exports.Bounds = Bounds;
5998
6041
  exports.Color = Color;
@@ -6032,6 +6075,8 @@
6032
6075
  exports.ascending = ascending;
6033
6076
  exports.asin = asin;
6034
6077
  exports.atan2 = atan2;
6078
+ exports.binaryFuzzySearch = binaryFuzzySearch;
6079
+ exports.binaryFuzzySearchInNumberRange = binaryFuzzySearchInNumberRange;
6035
6080
  exports.bisect = bisect;
6036
6081
  exports.calculateAnchorOfArc = calculateAnchorOfArc;
6037
6082
  exports.calculateAnchorOfBounds = calculateAnchorOfBounds;
@@ -6128,6 +6173,7 @@
6128
6173
  exports.isEqual = isEqual;
6129
6174
  exports.isFunction = isFunction;
6130
6175
  exports.isGreater = isGreater;
6176
+ exports.isHTMLElement = isHTMLElement;
6131
6177
  exports.isIntersect = isIntersect;
6132
6178
  exports.isLess = isLess;
6133
6179
  exports.isNil = isNil;
@@ -6185,6 +6231,7 @@
6185
6231
  exports.nelderMead = nelderMead;
6186
6232
  exports.norm2 = norm2;
6187
6233
  exports.normalTransform = normalTransform;
6234
+ exports.normalizeAngle = normalizeAngle;
6188
6235
  exports.normalizePadding = normalizePadding;
6189
6236
  exports.numberSpecifierReg = numberSpecifierReg;
6190
6237
  exports.pad = pad;
@@ -6218,6 +6265,7 @@
6218
6265
  exports.secondOffset = secondOffset;
6219
6266
  exports.secondsGetterName = secondsGetterName;
6220
6267
  exports.secondsSetterName = secondsSetterName;
6268
+ exports.seedRandom = seedRandom;
6221
6269
  exports.shuffleArray = shuffleArray;
6222
6270
  exports.sin = sin;
6223
6271
  exports.span = span;