@visactor/vutils 0.11.1 → 0.13.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 (39) hide show
  1. package/cjs/common/isType.js +1 -1
  2. package/cjs/common/isType.js.map +1 -1
  3. package/cjs/dom.d.ts +5 -2
  4. package/cjs/dom.js +21 -29
  5. package/cjs/dom.js.map +1 -1
  6. package/cjs/graphics/text/measure/interface.d.ts +1 -1
  7. package/cjs/graphics/text/measure/interface.js.map +1 -1
  8. package/cjs/graphics/text/measure/test.js +1 -1
  9. package/cjs/graphics/text/measure/test.js.map +1 -1
  10. package/cjs/graphics/text/measure/textMeasure.d.ts +1 -1
  11. package/cjs/graphics/text/measure/textMeasure.js +6 -4
  12. package/cjs/graphics/text/measure/textMeasure.js.map +1 -1
  13. package/cjs/graphics/text/measure/util.js.map +1 -1
  14. package/cjs/logger.d.ts +34 -12
  15. package/cjs/logger.js +76 -28
  16. package/cjs/logger.js.map +1 -1
  17. package/cjs/type.d.ts +11 -0
  18. package/cjs/type.js.map +1 -1
  19. package/dist/index.js +136 -91
  20. package/dist/index.min.js +1 -1
  21. package/es/common/isType.js +1 -1
  22. package/es/common/isType.js.map +1 -1
  23. package/es/dom.d.ts +5 -2
  24. package/es/dom.js +11 -27
  25. package/es/dom.js.map +1 -1
  26. package/es/graphics/text/measure/interface.d.ts +1 -1
  27. package/es/graphics/text/measure/interface.js.map +1 -1
  28. package/es/graphics/text/measure/test.js +1 -1
  29. package/es/graphics/text/measure/test.js.map +1 -1
  30. package/es/graphics/text/measure/textMeasure.d.ts +1 -1
  31. package/es/graphics/text/measure/textMeasure.js +5 -4
  32. package/es/graphics/text/measure/textMeasure.js.map +1 -1
  33. package/es/graphics/text/measure/util.js.map +1 -1
  34. package/es/logger.d.ts +34 -12
  35. package/es/logger.js +71 -31
  36. package/es/logger.js.map +1 -1
  37. package/es/type.d.ts +11 -0
  38. package/es/type.js.map +1 -1
  39. package/package.json +3 -2
package/dist/index.js CHANGED
@@ -325,7 +325,7 @@
325
325
  var eventemitter3Exports = eventemitter3.exports;
326
326
  var index$1 = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
327
327
 
328
- const isType = (value, type) => toString.call(value) === `[object ${type}]`;
328
+ const isType = (value, type) => Object.prototype.toString.call(value) === `[object ${type}]`;
329
329
 
330
330
  const isBoolean = (value, fuzzy = false) => {
331
331
  if (fuzzy) {
@@ -3713,7 +3713,7 @@
3713
3713
  _context = null;
3714
3714
  _contextSaved = false;
3715
3715
  _notSupportCanvas = false;
3716
- _notSupportCanopus = false;
3716
+ _notSupportVRender = false;
3717
3717
  _userSpec = {};
3718
3718
  textSpec;
3719
3719
  _option;
@@ -3738,7 +3738,10 @@
3738
3738
  if (isValid(this._option.getCanvasForMeasure)) {
3739
3739
  this._canvas = this._option.getCanvasForMeasure();
3740
3740
  }
3741
- if (isNil(this._canvas) && isValid(globalThis.document)) {
3741
+ if (isNil(this._canvas) &&
3742
+ typeof window !== 'undefined' &&
3743
+ typeof window.document !== 'undefined' &&
3744
+ isValid(globalThis.document)) {
3742
3745
  this._canvas = globalThis.document.createElement('canvas');
3743
3746
  }
3744
3747
  }
@@ -3775,6 +3778,7 @@
3775
3778
  }
3776
3779
  measure(text, method) {
3777
3780
  switch (method) {
3781
+ case 'vrender':
3778
3782
  case 'canopus':
3779
3783
  return this.fullMeasure(text);
3780
3784
  case 'canvas':
@@ -3790,7 +3794,7 @@
3790
3794
  if (isNil(text)) {
3791
3795
  return { width: 0, height: 0 };
3792
3796
  }
3793
- if (isNil(this._option.getTextBounds) || !this._notSupportCanopus) {
3797
+ if (isNil(this._option.getTextBounds) || !this._notSupportVRender) {
3794
3798
  return this.measureWithNaiveCanvas(text);
3795
3799
  }
3796
3800
  const { fontFamily, fontSize, fontWeight, textAlign, textBaseline, ellipsis, limit, lineHeight } = this.textSpec;
@@ -3810,7 +3814,7 @@
3810
3814
  size = { width: bounds.width(), height: bounds.height() };
3811
3815
  }
3812
3816
  catch (e) {
3813
- this._notSupportCanopus = true;
3817
+ this._notSupportVRender = true;
3814
3818
  size = this.measureWithNaiveCanvas(text);
3815
3819
  }
3816
3820
  return size;
@@ -3960,7 +3964,7 @@
3960
3964
  .fill(0)
3961
3965
  .map(callback);
3962
3966
  const methodMap = {
3963
- canopus: this.fullMeasure.bind(this),
3967
+ vrender: this.fullMeasure.bind(this),
3964
3968
  canvas: this.measureWithNaiveCanvas.bind(this),
3965
3969
  simple: this.quickMeasureWithoutCanvas.bind(this),
3966
3970
  quick: this.quickMeasure.bind(this),
@@ -4015,62 +4019,119 @@
4015
4019
  }
4016
4020
 
4017
4021
  function log(method, level, input) {
4018
- const hasConsole = typeof console !== 'undefined';
4019
- if (hasConsole) {
4020
- const args = [level].concat([].slice.call(input));
4021
- console[method].apply(console, args);
4022
- }
4023
- }
4024
- const None = 0;
4025
- const Error$1 = 1;
4026
- const Warn = 2;
4027
- const Info = 3;
4028
- const Debug = 4;
4029
- function logger(logLevel, method) {
4030
- let level = logLevel || None;
4031
- return {
4032
- level(levelValue) {
4033
- if (arguments.length) {
4034
- level = +levelValue;
4035
- return this;
4036
- }
4037
- return level;
4038
- },
4039
- error(...args) {
4040
- if (level >= Error$1) {
4041
- log(method || 'error', 'ERROR', args);
4042
- }
4043
- return this;
4044
- },
4045
- warn(...args) {
4046
- if (level >= Warn) {
4047
- log(method || 'warn', 'WARN', args);
4048
- }
4022
+ const args = [level].concat([].slice.call(input));
4023
+ console[method].apply(console, args);
4024
+ }
4025
+ var LoggerLevel;
4026
+ (function (LoggerLevel) {
4027
+ LoggerLevel[LoggerLevel["None"] = 0] = "None";
4028
+ LoggerLevel[LoggerLevel["Error"] = 1] = "Error";
4029
+ LoggerLevel[LoggerLevel["Warn"] = 2] = "Warn";
4030
+ LoggerLevel[LoggerLevel["Info"] = 3] = "Info";
4031
+ LoggerLevel[LoggerLevel["Debug"] = 4] = "Debug";
4032
+ })(LoggerLevel || (LoggerLevel = {}));
4033
+ class Logger {
4034
+ static _instance = null;
4035
+ static getInstance(level, method) {
4036
+ if (Logger._instance && isNumber(level)) {
4037
+ Logger._instance.level(level);
4038
+ }
4039
+ else if (!Logger._instance) {
4040
+ Logger._instance = new Logger(level, method);
4041
+ }
4042
+ return Logger._instance;
4043
+ }
4044
+ static setInstance(logger) {
4045
+ return (Logger._instance = logger);
4046
+ }
4047
+ static setInstanceLevel(level) {
4048
+ if (Logger._instance) {
4049
+ Logger._instance.level(level);
4050
+ }
4051
+ else {
4052
+ Logger._instance = new Logger(level);
4053
+ }
4054
+ }
4055
+ static clearInstance() {
4056
+ Logger._instance = null;
4057
+ }
4058
+ _level;
4059
+ _method;
4060
+ _onErrorHandler = [];
4061
+ constructor(level = LoggerLevel.None, method) {
4062
+ this._level = level;
4063
+ this._method = method;
4064
+ }
4065
+ addErrorHandler(handler) {
4066
+ if (this._onErrorHandler.find(h => h === handler)) {
4067
+ return;
4068
+ }
4069
+ this._onErrorHandler.push(handler);
4070
+ }
4071
+ removeErrorHandler(handler) {
4072
+ const index = this._onErrorHandler.findIndex(h => h === handler);
4073
+ if (index < 0) {
4074
+ return;
4075
+ }
4076
+ this._onErrorHandler.splice(index, 1);
4077
+ }
4078
+ callErrorHandler(...args) {
4079
+ this._onErrorHandler.forEach(h => h(args));
4080
+ }
4081
+ canLogInfo() {
4082
+ return this._level >= LoggerLevel.Info;
4083
+ }
4084
+ canLogDebug() {
4085
+ return this._level >= LoggerLevel.Debug;
4086
+ }
4087
+ canLogError() {
4088
+ return this._level >= LoggerLevel.Error;
4089
+ }
4090
+ canLogWarn() {
4091
+ return this._level >= LoggerLevel.Warn;
4092
+ }
4093
+ level(levelValue) {
4094
+ if (arguments.length) {
4095
+ this._level = +levelValue;
4049
4096
  return this;
4050
- },
4051
- info(...args) {
4052
- if (level >= Info) {
4053
- log(method || 'log', 'INFO', args);
4097
+ }
4098
+ return this._level;
4099
+ }
4100
+ error(...args) {
4101
+ if (this._level >= LoggerLevel.Error) {
4102
+ if (this._onErrorHandler.length) {
4103
+ this.callErrorHandler(args);
4054
4104
  }
4055
- return this;
4056
- },
4057
- debug(...args) {
4058
- if (level >= Debug) {
4059
- log(method || 'log', 'DEBUG', args);
4105
+ else {
4106
+ log(this._method ?? 'error', 'ERROR', args);
4060
4107
  }
4061
- return this;
4062
4108
  }
4063
- };
4109
+ return this;
4110
+ }
4111
+ warn(...args) {
4112
+ if (this._level >= LoggerLevel.Warn) {
4113
+ log(this._method || 'warn', 'WARN', args);
4114
+ }
4115
+ return this;
4116
+ }
4117
+ info(...args) {
4118
+ if (this._level >= LoggerLevel.Info) {
4119
+ log(this._method || 'log', 'INFO', args);
4120
+ }
4121
+ return this;
4122
+ }
4123
+ debug(...args) {
4124
+ if (this._level >= LoggerLevel.Debug) {
4125
+ log(this._method || 'log', 'DEBUG', args);
4126
+ }
4127
+ return this;
4128
+ }
4064
4129
  }
4065
4130
 
4066
- var logger$1 = /*#__PURE__*/Object.freeze({
4131
+ var logger = /*#__PURE__*/Object.freeze({
4067
4132
  __proto__: null,
4068
- Debug: Debug,
4069
- Error: Error$1,
4070
- Info: Info,
4071
- None: None,
4072
- Warn: Warn,
4073
- logger: logger
4133
+ Logger: Logger,
4134
+ get LoggerLevel () { return LoggerLevel; }
4074
4135
  });
4075
4136
 
4076
4137
  function normalizePadding(padding) {
@@ -4509,19 +4570,8 @@
4509
4570
  };
4510
4571
  }
4511
4572
  function getElementAbsolutePosition(element) {
4512
- let actualLeft = element.offsetLeft;
4513
- let current = element.offsetParent;
4514
- while (current) {
4515
- actualLeft += current.offsetLeft;
4516
- current = current.offsetParent;
4517
- }
4518
- let actualTop = element.offsetTop;
4519
- current = element.offsetParent;
4520
- while (current) {
4521
- actualTop += current.offsetTop + current.clientTop;
4522
- current = current.offsetParent;
4523
- }
4524
- return { x: actualLeft, y: actualTop };
4573
+ const { x, y } = element.getBoundingClientRect();
4574
+ return { x, y };
4525
4575
  }
4526
4576
  function getElementRelativePosition(element, base) {
4527
4577
  const posElement = getElementAbsolutePosition(element);
@@ -4546,26 +4596,18 @@
4546
4596
  }
4547
4597
  return element.scrollTop;
4548
4598
  };
4549
- function getElementAbsoluteScrollOffset(element) {
4550
- let actualLeft = getScrollLeft(element);
4551
- let current = element.parentElement;
4552
- while (current) {
4553
- actualLeft += getScrollLeft(current);
4554
- current = current.parentElement;
4555
- }
4556
- let actualTop = getScrollTop(element);
4557
- current = element.parentElement;
4558
- while (current) {
4559
- actualTop += getScrollTop(current);
4560
- current = current.parentElement;
4561
- }
4562
- return { x: actualLeft, y: actualTop };
4563
- }
4564
- function getElementRelativeScrollOffset(element, base) {
4565
- const posElement = getElementAbsoluteScrollOffset(element);
4566
- const posBase = getElementAbsoluteScrollOffset(base);
4567
- return { x: posElement.x - posBase.x, y: posElement.y - posBase.y };
4568
- }
4599
+ const getScaleX = (element) => {
4600
+ return element.getBoundingClientRect().width / element.offsetWidth;
4601
+ };
4602
+ const getScaleY = (element) => {
4603
+ return element.getBoundingClientRect().height / element.offsetHeight;
4604
+ };
4605
+ const getScale = (element) => {
4606
+ if (element.offsetWidth > 0) {
4607
+ return getScaleX(element);
4608
+ }
4609
+ return getScaleY(element);
4610
+ };
4569
4611
  function hasParentElement(element, target) {
4570
4612
  let parent = element.parentNode;
4571
4613
  while (parent !== null) {
@@ -4689,7 +4731,7 @@
4689
4731
  exports.HashTable = HashTable;
4690
4732
  exports.HashValue = HashValue;
4691
4733
  exports.LRU = LRU;
4692
- exports.Logger = logger$1;
4734
+ exports.Logger = logger;
4693
4735
  exports.MINUTE = MINUTE;
4694
4736
  exports.MONTH = MONTH;
4695
4737
  exports.Matrix = Matrix;
@@ -4754,14 +4796,17 @@
4754
4796
  exports.getContainerSize = getContainerSize;
4755
4797
  exports.getContextFont = getContextFont;
4756
4798
  exports.getElementAbsolutePosition = getElementAbsolutePosition;
4757
- exports.getElementAbsoluteScrollOffset = getElementAbsoluteScrollOffset;
4758
4799
  exports.getElementRelativePosition = getElementRelativePosition;
4759
- exports.getElementRelativeScrollOffset = getElementRelativeScrollOffset;
4760
4800
  exports.getFormatFromValue = getFormatFromValue;
4761
4801
  exports.getIntersectPoint = getIntersectPoint;
4762
4802
  exports.getIntervalOptions = getIntervalOptions;
4763
4803
  exports.getOBBFromLine = getOBBFromLine;
4764
4804
  exports.getRectIntersect = getRectIntersect;
4805
+ exports.getScale = getScale;
4806
+ exports.getScaleX = getScaleX;
4807
+ exports.getScaleY = getScaleY;
4808
+ exports.getScrollLeft = getScrollLeft;
4809
+ exports.getScrollTop = getScrollTop;
4765
4810
  exports.getTestNumbers = getTestNumbers;
4766
4811
  exports.getTestWord = getTestWord;
4767
4812
  exports.getTimeFormatter = getTimeFormatter;