@visactor/vtable-plugins 1.19.5 → 1.19.6

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 (85) hide show
  1. package/cjs/index.d.ts +1 -0
  2. package/cjs/index.js +2 -1
  3. package/cjs/index.js.map +1 -1
  4. package/cjs/table-export/csv/index.d.ts +12 -0
  5. package/cjs/table-export/csv/index.js +54 -0
  6. package/cjs/table-export/csv/index.js.map +1 -0
  7. package/cjs/table-export/excel/index.d.ts +21 -0
  8. package/cjs/table-export/excel/index.js +243 -0
  9. package/cjs/table-export/excel/index.js.map +1 -0
  10. package/cjs/table-export/excel/style.d.ts +6 -0
  11. package/cjs/table-export/excel/style.js +89 -0
  12. package/cjs/table-export/excel/style.js.map +1 -0
  13. package/cjs/table-export/index.d.ts +7 -0
  14. package/cjs/table-export/index.js +38 -0
  15. package/cjs/table-export/index.js.map +1 -0
  16. package/cjs/table-export/util/color.d.ts +152 -0
  17. package/cjs/table-export/util/color.js +197 -0
  18. package/cjs/table-export/util/color.js.map +1 -0
  19. package/cjs/table-export/util/download.d.ts +2 -0
  20. package/cjs/table-export/util/download.js +60 -0
  21. package/cjs/table-export/util/download.js.map +1 -0
  22. package/cjs/table-export/util/encode.d.ts +3 -0
  23. package/cjs/table-export/util/encode.js +17 -0
  24. package/cjs/table-export/util/encode.js.map +1 -0
  25. package/cjs/table-export/util/indent.d.ts +2 -0
  26. package/cjs/table-export/util/indent.js +27 -0
  27. package/cjs/table-export/util/indent.js.map +1 -0
  28. package/cjs/table-export/util/pagination.d.ts +5 -0
  29. package/cjs/table-export/util/pagination.js +24 -0
  30. package/cjs/table-export/util/pagination.js.map +1 -0
  31. package/cjs/table-export/util/promise.d.ts +1 -0
  32. package/cjs/table-export/util/promise.js +10 -0
  33. package/cjs/table-export/util/promise.js.map +1 -0
  34. package/cjs/table-export/util/type.d.ts +6 -0
  35. package/cjs/table-export/util/type.js +6 -0
  36. package/cjs/table-export/util/type.js.map +1 -0
  37. package/cjs/table-export.d.ts +17 -0
  38. package/cjs/table-export.js +93 -0
  39. package/cjs/table-export.js.map +1 -0
  40. package/cjs/types.js +1 -2
  41. package/cjs/wps-fill-handle.js +1 -0
  42. package/dist/vtable-plugins.js +1173 -185
  43. package/dist/vtable-plugins.min.js +14 -14
  44. package/es/index.d.ts +1 -0
  45. package/es/index.js +2 -0
  46. package/es/index.js.map +1 -1
  47. package/es/table-export/csv/index.d.ts +12 -0
  48. package/es/table-export/csv/index.js +47 -0
  49. package/es/table-export/csv/index.js.map +1 -0
  50. package/es/table-export/excel/index.d.ts +21 -0
  51. package/es/table-export/excel/index.js +242 -0
  52. package/es/table-export/excel/index.js.map +1 -0
  53. package/es/table-export/excel/style.d.ts +6 -0
  54. package/es/table-export/excel/style.js +80 -0
  55. package/es/table-export/excel/style.js.map +1 -0
  56. package/es/table-export/index.d.ts +7 -0
  57. package/es/table-export/index.js +8 -0
  58. package/es/table-export/index.js.map +1 -0
  59. package/es/table-export/util/color.d.ts +152 -0
  60. package/es/table-export/util/color.js +189 -0
  61. package/es/table-export/util/color.js.map +1 -0
  62. package/es/table-export/util/download.d.ts +2 -0
  63. package/es/table-export/util/download.js +52 -0
  64. package/es/table-export/util/download.js.map +1 -0
  65. package/es/table-export/util/encode.d.ts +3 -0
  66. package/es/table-export/util/encode.js +10 -0
  67. package/es/table-export/util/encode.js.map +1 -0
  68. package/es/table-export/util/indent.d.ts +2 -0
  69. package/es/table-export/util/indent.js +19 -0
  70. package/es/table-export/util/indent.js.map +1 -0
  71. package/es/table-export/util/pagination.d.ts +5 -0
  72. package/es/table-export/util/pagination.js +16 -0
  73. package/es/table-export/util/pagination.js.map +1 -0
  74. package/es/table-export/util/promise.d.ts +1 -0
  75. package/es/table-export/util/promise.js +4 -0
  76. package/es/table-export/util/promise.js.map +1 -0
  77. package/es/table-export/util/type.d.ts +6 -0
  78. package/es/table-export/util/type.js +2 -0
  79. package/es/table-export/util/type.js.map +1 -0
  80. package/es/table-export.d.ts +17 -0
  81. package/es/table-export.js +62 -0
  82. package/es/table-export.js.map +1 -0
  83. package/es/types.js +1 -2
  84. package/es/wps-fill-handle.js +2 -1
  85. package/package.json +10 -8
@@ -1383,14 +1383,14 @@
1383
1383
  var eventemitter3Exports = eventemitter3.exports;
1384
1384
  var EventEmitter$5 = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
1385
1385
 
1386
- const isType = (value, type) => Object.prototype.toString.call(value) === `[object ${type}]`;
1387
- var isType$1 = isType;
1386
+ const isType$2 = (value, type) => Object.prototype.toString.call(value) === `[object ${type}]`;
1387
+ var isType$3 = isType$2;
1388
1388
 
1389
- const isBoolean$1 = (value, fuzzy = !1) => fuzzy ? "boolean" == typeof value : !0 === value || !1 === value || isType$1(value, "Boolean");
1390
- var isBoolean$2 = isBoolean$1;
1389
+ const isBoolean$3 = (value, fuzzy = !1) => fuzzy ? "boolean" == typeof value : !0 === value || !1 === value || isType$3(value, "Boolean");
1390
+ var isBoolean$4 = isBoolean$3;
1391
1391
 
1392
- const isFunction$9 = value => "function" == typeof value;
1393
- var isFunction$a = isFunction$9;
1392
+ const isFunction$b = value => "function" == typeof value;
1393
+ var isFunction$c = isFunction$b;
1394
1394
 
1395
1395
  const isNil$1 = value => null == value;
1396
1396
  var isNil$2 = isNil$1;
@@ -1408,7 +1408,7 @@
1408
1408
  var isObjectLike$e = isObjectLike$d;
1409
1409
 
1410
1410
  const isPlainObject$3 = function (value) {
1411
- if (!isObjectLike$e(value) || !isType$1(value, "Object")) return !1;
1411
+ if (!isObjectLike$e(value) || !isType$3(value, "Object")) return !1;
1412
1412
  if (null === Object.getPrototypeOf(value)) return !0;
1413
1413
  let proto = value;
1414
1414
  for (; null !== Object.getPrototypeOf(proto);) proto = Object.getPrototypeOf(proto);
@@ -1419,27 +1419,27 @@
1419
1419
  const isUndefined$1 = value => void 0 === value;
1420
1420
  var isUndefined$2 = isUndefined$1;
1421
1421
 
1422
- const isString = (value, fuzzy = !1) => {
1422
+ const isString$2 = (value, fuzzy = !1) => {
1423
1423
  const type = typeof value;
1424
- return fuzzy ? "string" === type : "string" === type || isType$1(value, "String");
1424
+ return fuzzy ? "string" === type : "string" === type || isType$3(value, "String");
1425
1425
  };
1426
- var isString$1 = isString;
1426
+ var isString$3 = isString$2;
1427
1427
 
1428
- const isArray$9 = value => Array.isArray ? Array.isArray(value) : isType$1(value, "Array");
1429
- var isArray$a = isArray$9;
1428
+ const isArray$b = value => Array.isArray ? Array.isArray(value) : isType$3(value, "Array");
1429
+ var isArray$c = isArray$b;
1430
1430
 
1431
1431
  const isArrayLike$7 = function (value) {
1432
1432
  return null !== value && "function" != typeof value && Number.isFinite(value.length);
1433
1433
  };
1434
1434
  var isArrayLike$8 = isArrayLike$7;
1435
1435
 
1436
- const isNumber$3 = (value, fuzzy = !1) => {
1436
+ const isNumber$5 = (value, fuzzy = !1) => {
1437
1437
  const type = typeof value;
1438
- return fuzzy ? "number" === type : "number" === type || isType$1(value, "Number");
1438
+ return fuzzy ? "number" === type : "number" === type || isType$3(value, "Number");
1439
1439
  };
1440
- var isNumber$4 = isNumber$3;
1440
+ var isNumber$6 = isNumber$5;
1441
1441
 
1442
- const isValidNumber = value => isNumber$4(value) && Number.isFinite(value);
1442
+ const isValidNumber = value => isNumber$6(value) && Number.isFinite(value);
1443
1443
  var isValidNumber$1 = isValidNumber;
1444
1444
 
1445
1445
  const isValidUrl = value => new RegExp(/^(http(s)?:\/\/)\w+[^\s]+(\.[^\s]+){1,}$/).test(value);
@@ -1486,7 +1486,7 @@
1486
1486
  propIndex = -1;
1487
1487
  for (; length--;) {
1488
1488
  const key = props[++propIndex];
1489
- !isValid$3(iterable[key]) || "object" != typeof iterable[key] || skipTargetArray && isArray$a(target[key]) ? assignMergeValue(target, key, iterable[key]) : baseMergeDeep(target, source, key, shallowArray, skipTargetArray);
1489
+ !isValid$3(iterable[key]) || "object" != typeof iterable[key] || skipTargetArray && isArray$c(target[key]) ? assignMergeValue(target, key, iterable[key]) : baseMergeDeep(target, source, key, shallowArray, skipTargetArray);
1490
1490
  }
1491
1491
  }
1492
1492
  }
@@ -1496,8 +1496,8 @@
1496
1496
  srcValue = source[key];
1497
1497
  let newValue = source[key],
1498
1498
  isCommon = !0;
1499
- if (isArray$a(srcValue)) {
1500
- if (shallowArray) newValue = [];else if (isArray$a(objValue)) newValue = objValue;else if (isArrayLike$8(objValue)) {
1499
+ if (isArray$c(srcValue)) {
1500
+ if (shallowArray) newValue = [];else if (isArray$c(objValue)) newValue = objValue;else if (isArrayLike$8(objValue)) {
1501
1501
  newValue = new Array(objValue.length);
1502
1502
  let index = -1;
1503
1503
  const length = objValue.length;
@@ -1522,7 +1522,7 @@
1522
1522
  }
1523
1523
 
1524
1524
  function arrayEqual(a, b) {
1525
- if (!isArray$a(a) || !isArray$a(b)) return !1;
1525
+ if (!isArray$c(a) || !isArray$c(b)) return !1;
1526
1526
  if (a.length !== b.length) return !1;
1527
1527
  for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return !1;
1528
1528
  return !0;
@@ -1539,7 +1539,7 @@
1539
1539
  }(LoggerLevel || (LoggerLevel = {}));
1540
1540
  class Logger {
1541
1541
  static getInstance(level, method) {
1542
- return Logger._instance && isNumber$4(level) ? Logger._instance.level(level) : Logger._instance || (Logger._instance = new Logger(level, method)), Logger._instance;
1542
+ return Logger._instance && isNumber$6(level) ? Logger._instance.level(level) : Logger._instance || (Logger._instance = new Logger(level, method)), Logger._instance;
1543
1543
  }
1544
1544
  static setInstance(logger) {
1545
1545
  return Logger._instance = logger;
@@ -1729,10 +1729,10 @@
1729
1729
  return this.x = x, this.y = y, this;
1730
1730
  }
1731
1731
  add(point) {
1732
- return isNumber$4(point) ? (this.x += point, void (this.y += point)) : (this.x += point.x, this.y += point.y, this);
1732
+ return isNumber$6(point) ? (this.x += point, void (this.y += point)) : (this.x += point.x, this.y += point.y, this);
1733
1733
  }
1734
1734
  sub(point) {
1735
- return isNumber$4(point) ? (this.x -= point, void (this.y -= point)) : (this.x -= point.x, this.y -= point.y, this);
1735
+ return isNumber$6(point) ? (this.x -= point, void (this.y -= point)) : (this.x -= point.x, this.y -= point.y, this);
1736
1736
  }
1737
1737
  multi(point) {
1738
1738
  throw new Error("暂不支持");
@@ -1964,7 +1964,7 @@
1964
1964
  let {
1965
1965
  lineHeight = fontSize
1966
1966
  } = this._userSpec;
1967
- if (isString$1(lineHeight) && "%" === lineHeight[lineHeight.length - 1]) {
1967
+ if (isString$3(lineHeight) && "%" === lineHeight[lineHeight.length - 1]) {
1968
1968
  const scale = Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100;
1969
1969
  lineHeight = fontSize * scale;
1970
1970
  }
@@ -2096,7 +2096,7 @@
2096
2096
  height: 0
2097
2097
  };
2098
2098
  if (isNil$2(text)) return defaultResult;
2099
- if (isArray$a(text)) {
2099
+ if (isArray$c(text)) {
2100
2100
  const textArr = text.filter(isValid$3).map(s => s.toString());
2101
2101
  return 0 === textArr.length ? defaultResult : 1 === textArr.length ? processor(textArr[0]) : {
2102
2102
  width: textArr.reduce((maxWidth, cur) => Math.max(maxWidth, processor(cur).width), 0),
@@ -2176,7 +2176,7 @@
2176
2176
  return x < this.x1 && (this.x1 = x), y < this.y1 && (this.y1 = y), x > this.x2 && (this.x2 = x), y > this.y2 && (this.y2 = y), this;
2177
2177
  }
2178
2178
  expand(d = 0) {
2179
- return isArray$a(d) ? (this.y1 -= d[0], this.x2 += d[1], this.y2 += d[2], this.x1 -= d[3]) : (this.x1 -= d, this.y1 -= d, this.x2 += d, this.y2 += d), this;
2179
+ return isArray$c(d) ? (this.y1 -= d[0], this.x2 += d[1], this.y2 += d[2], this.x1 -= d[3]) : (this.x1 -= d, this.y1 -= d, this.x2 += d, this.y2 += d), this;
2180
2180
  }
2181
2181
  round() {
2182
2182
  return this.x1 = Math.floor(this.x1), this.y1 = Math.floor(this.y1), this.x2 = Math.ceil(this.x2), this.y2 = Math.ceil(this.y2), this;
@@ -2454,7 +2454,7 @@
2454
2454
 
2455
2455
  function normalizePadding(padding) {
2456
2456
  if (isValidNumber$1(padding)) return [padding, padding, padding, padding];
2457
- if (isArray$a(padding)) {
2457
+ if (isArray$c(padding)) {
2458
2458
  const length = padding.length;
2459
2459
  if (1 === length) {
2460
2460
  const paddingValue = padding[0];
@@ -4400,7 +4400,7 @@
4400
4400
  var _a, _b, _c, _d;
4401
4401
  if (!c || !0 === c) return "black";
4402
4402
  let result, color;
4403
- if (isArray$a(c)) for (let i = 0; i < c.length && (color = c[i], !color); i++);else color = c;
4403
+ if (isArray$c(c)) for (let i = 0; i < c.length && (color = c[i], !color); i++);else color = c;
4404
4404
  if (color = GradientParser.Parse(color), "string" == typeof color) return color;
4405
4405
  if (params.AABBBounds && (!params.attribute || 0 !== params.attribute.scaleX || 0 !== params.attribute.scaleY)) {
4406
4406
  const bounds = params.AABBBounds;
@@ -4874,7 +4874,7 @@
4874
4874
  function isNotAroundZero(val) {
4875
4875
  return val > EPSILON || val < -EPSILON;
4876
4876
  }
4877
- function isNumber$2(data) {
4877
+ function isNumber$4(data) {
4878
4878
  return "number" == typeof data && Number.isFinite(data);
4879
4879
  }
4880
4880
  const _v0 = [0, 0],
@@ -5984,18 +5984,18 @@
5984
5984
  return this.removeChild(child);
5985
5985
  }
5986
5986
  addEventListener(type, listener, options) {
5987
- const capture = isBoolean$2(options, !0) && options || isObject$c(options) && options.capture,
5987
+ const capture = isBoolean$4(options, !0) && options || isObject$c(options) && options.capture,
5988
5988
  once = isObject$c(options) && options.once,
5989
- context = isFunction$a(listener) ? void 0 : listener;
5990
- return type = capture ? `${type}capture` : type, listener = isFunction$a(listener) ? listener : listener.handleEvent, once ? super.once(type, listener, context) : super.on(type, listener, context), this;
5989
+ context = isFunction$c(listener) ? void 0 : listener;
5990
+ return type = capture ? `${type}capture` : type, listener = isFunction$c(listener) ? listener : listener.handleEvent, once ? super.once(type, listener, context) : super.on(type, listener, context), this;
5991
5991
  }
5992
5992
  on(type, listener, options) {
5993
5993
  return this.addEventListener(type, listener, options);
5994
5994
  }
5995
5995
  removeEventListener(type, listener, options) {
5996
- const capture = isBoolean$2(options, !0) && options || isObject$c(options) && options.capture,
5997
- context = isFunction$a(listener) ? void 0 : listener;
5998
- type = capture ? `${type}capture` : type, listener = isFunction$a(listener) ? listener : listener.handleEvent;
5996
+ const capture = isBoolean$4(options, !0) && options || isObject$c(options) && options.capture,
5997
+ context = isFunction$c(listener) ? void 0 : listener;
5998
+ type = capture ? `${type}capture` : type, listener = isFunction$c(listener) ? listener : listener.handleEvent;
5999
5999
  const once = isObject$c(options) && options.once;
6000
6000
  return super.off(type, listener, context, once), this;
6001
6001
  }
@@ -6089,7 +6089,7 @@
6089
6089
  try {
6090
6090
  this.nativeEvent instanceof Event && this.nativeEvent.cancelable && this.nativeEvent.preventDefault();
6091
6091
  } catch (err) {
6092
- this.nativeEvent.preventDefault && isFunction$a(this.nativeEvent.preventDefault) && this.nativeEvent.preventDefault();
6092
+ this.nativeEvent.preventDefault && isFunction$c(this.nativeEvent.preventDefault) && this.nativeEvent.preventDefault();
6093
6093
  }
6094
6094
  this.defaultPrevented = !0;
6095
6095
  }
@@ -6100,7 +6100,7 @@
6100
6100
  try {
6101
6101
  this.nativeEvent instanceof Event && this.nativeEvent.cancelable && this.nativeEvent.stopPropagation();
6102
6102
  } catch (err) {
6103
- this.nativeEvent.stopPropagation && isFunction$a(this.nativeEvent.stopPropagation) && this.nativeEvent.stopPropagation();
6103
+ this.nativeEvent.stopPropagation && isFunction$c(this.nativeEvent.stopPropagation) && this.nativeEvent.stopPropagation();
6104
6104
  }
6105
6105
  this.propagationStopped = !0;
6106
6106
  }
@@ -6553,7 +6553,7 @@
6553
6553
  if (this.currentCursor === mode) return;
6554
6554
  this.currentCursor = mode;
6555
6555
  const style = this.cursorStyles[mode];
6556
- style ? "string" == typeof style && applyStyles ? domElement.style.cursor = style : "function" == typeof style ? style(mode) : "object" == typeof style && applyStyles && Object.assign(domElement.style, style) : applyStyles && isString$1(mode) && !has$1(this.cursorStyles, mode) && (domElement.style.cursor = mode);
6556
+ style ? "string" == typeof style && applyStyles ? domElement.style.cursor = style : "function" == typeof style ? style(mode) : "object" == typeof style && applyStyles && Object.assign(domElement.style, style) : applyStyles && isString$3(mode) && !has$1(this.cursorStyles, mode) && (domElement.style.cursor = mode);
6557
6557
  }
6558
6558
  setTargetElement(element) {
6559
6559
  this.removeEvents(), this.domElement = element, this.addEvents();
@@ -6753,7 +6753,7 @@
6753
6753
  Edge[Edge.Top = 1] = "Top", Edge[Edge.Right = 2] = "Right", Edge[Edge.Bottom = 4] = "Bottom", Edge[Edge.Left = 8] = "Left", Edge[Edge.ALL = 15] = "ALL";
6754
6754
  }(Edge || (Edge = {}));
6755
6755
  const _paddingVec4 = [0, 0, 0, 0];
6756
- const parsePadding = padding => padding ? isArray$a(padding) ? 0 === padding.length ? 0 : 1 === padding.length ? padding[0] : 2 === padding.length ? (_paddingVec4[0] = padding[0], _paddingVec4[2] = padding[0], _paddingVec4[1] = padding[1], _paddingVec4[3] = padding[1], _paddingVec4) : padding : padding : 0;
6756
+ const parsePadding = padding => padding ? isArray$c(padding) ? 0 === padding.length ? 0 : 1 === padding.length ? padding[0] : 2 === padding.length ? (_paddingVec4[0] = padding[0], _paddingVec4[2] = padding[0], _paddingVec4[1] = padding[1], _paddingVec4[3] = padding[1], _paddingVec4) : padding : padding : 0;
6757
6757
  const _coords = [{
6758
6758
  x: 0,
6759
6759
  y: 0
@@ -6822,7 +6822,7 @@
6822
6822
  return points;
6823
6823
  }
6824
6824
  function getAttributeFromDefaultAttrList(attr, key) {
6825
- if (isArray$a(attr)) {
6825
+ if (isArray$c(attr)) {
6826
6826
  let val;
6827
6827
  for (let i = 0; i < attr.length && void 0 === val; i++) val = attr[i][key];
6828
6828
  return val;
@@ -6830,7 +6830,7 @@
6830
6830
  return attr[key];
6831
6831
  }
6832
6832
  const _calculateLineHeight = (lineHeight, fontSize) => {
6833
- if (isString$1(lineHeight) && "%" === lineHeight[lineHeight.length - 1]) {
6833
+ if (isString$3(lineHeight) && "%" === lineHeight[lineHeight.length - 1]) {
6834
6834
  return fontSize * (Number.parseFloat(lineHeight.substring(0, lineHeight.length - 1)) / 100);
6835
6835
  }
6836
6836
  return lineHeight;
@@ -6842,13 +6842,13 @@
6842
6842
 
6843
6843
  class BaseSymbol {
6844
6844
  bounds(size, bounds) {
6845
- if (isNumber$4(size)) {
6845
+ if (isNumber$6(size)) {
6846
6846
  const halfS = size / 2;
6847
6847
  bounds.x1 = -halfS, bounds.x2 = halfS, bounds.y1 = -halfS, bounds.y2 = halfS;
6848
6848
  } else bounds.x1 = -size[0] / 2, bounds.x2 = size[0] / 2, bounds.y1 = -size[1] / 2, bounds.y2 = size[1] / 2;
6849
6849
  }
6850
6850
  parseSize(size) {
6851
- return isNumber$4(size) ? size : Math.min(size[0], size[1]);
6851
+ return isNumber$6(size) ? size : Math.min(size[0], size[1]);
6852
6852
  }
6853
6853
  }
6854
6854
 
@@ -7264,10 +7264,10 @@
7264
7264
  super(...arguments), this.type = "rect", this.pathStr = "M -0.5,0.25 L 0.5,0.25 L 0.5,-0.25,L -0.5,-0.25 Z";
7265
7265
  }
7266
7266
  draw(ctx, size, x, y) {
7267
- return isNumber$4(size) ? rectSize(ctx, size, x, y) : rectSizeArray(ctx, size, x, y);
7267
+ return isNumber$6(size) ? rectSize(ctx, size, x, y) : rectSizeArray(ctx, size, x, y);
7268
7268
  }
7269
7269
  drawWithClipRange(ctx, size, x, y, clipRange, z, cb) {
7270
- isNumber$4(size) && (size = [size, size / 2]);
7270
+ isNumber$6(size) && (size = [size, size / 2]);
7271
7271
  const drawLength = 2 * (size[0] + size[1]) * clipRange,
7272
7272
  points = [{
7273
7273
  x: x + size[0] / 2,
@@ -7299,7 +7299,7 @@
7299
7299
  return !1;
7300
7300
  }
7301
7301
  drawOffset(ctx, size, x, y, offset) {
7302
- return isNumber$4(size) ? rectSize(ctx, size + 2 * offset, x, y) : rectSizeArray(ctx, [size[0] + 2 * offset, size[1] + 2 * offset], x, y);
7302
+ return isNumber$6(size) ? rectSize(ctx, size + 2 * offset, x, y) : rectSizeArray(ctx, [size[0] + 2 * offset, size[1] + 2 * offset], x, y);
7303
7303
  }
7304
7304
  }
7305
7305
  var rect = new RectSymbol();
@@ -7307,7 +7307,7 @@
7307
7307
  const tempBounds = new AABBBounds();
7308
7308
  class CustomSymbolClass {
7309
7309
  constructor(type, path, isSvg = !1) {
7310
- this.pathStr = "", this.type = type, isArray$a(path) ? this.svgCache = path : this.path = path, this.isSvg = isSvg;
7310
+ this.pathStr = "", this.type = type, isArray$c(path) ? this.svgCache = path : this.path = path, this.isSvg = isSvg;
7311
7311
  }
7312
7312
  drawOffset(ctx, size, x, y, offset, z, cb) {
7313
7313
  return size = this.parseSize(size), this.isSvg ? !!this.svgCache && (this.svgCache.forEach(item => {
@@ -7318,7 +7318,7 @@
7318
7318
  return size = this.parseSize(size), this.drawOffset(ctx, size, x, y, 0, z, cb);
7319
7319
  }
7320
7320
  parseSize(size) {
7321
- return isNumber$4(size) ? size : Math.min(size[0], size[1]);
7321
+ return isNumber$6(size) ? size : Math.min(size[0], size[1]);
7322
7322
  }
7323
7323
  drawWithClipRange(ctx, size, x, y, clipRange, z, cb) {
7324
7324
  return size = this.parseSize(size), this.isSvg ? !!this.svgCache && (this.svgCache.forEach(item => {
@@ -8131,7 +8131,7 @@
8131
8131
  svg: svg
8132
8132
  } = parser.parse(symbolType);
8133
8133
  if (!svg) return null;
8134
- const path = isArray$a(svg.path) ? svg.path : [svg.path];
8134
+ const path = isArray$c(svg.path) ? svg.path : [svg.path];
8135
8135
  _tempBounds.clear();
8136
8136
  const cacheList = [];
8137
8137
  path.forEach(item => {
@@ -8436,7 +8436,7 @@
8436
8436
  }
8437
8437
  removeState(stateName, hasAnimation) {
8438
8438
  if (this.currentStates) {
8439
- const filter = isArray$a(stateName) ? s => !stateName.includes(s) : s => s !== stateName,
8439
+ const filter = isArray$c(stateName) ? s => !stateName.includes(s) : s => s !== stateName,
8440
8440
  newStates = this.currentStates.filter(filter);
8441
8441
  newStates.length !== this.currentStates.length && this.useStates(newStates, hasAnimation);
8442
8442
  }
@@ -8604,7 +8604,7 @@
8604
8604
  };
8605
8605
  }
8606
8606
  createPathProxy(path) {
8607
- return isString$1(path, !0) ? this.pathProxy = new CustomPath2D().fromString(path) : this.pathProxy = new CustomPath2D(), this.pathProxy;
8607
+ return isString$3(path, !0) ? this.pathProxy = new CustomPath2D().fromString(path) : this.pathProxy = new CustomPath2D(), this.pathProxy;
8608
8608
  }
8609
8609
  loadImage(image, background = !1) {
8610
8610
  if (!image || background && backgroundNotImage(image)) return;
@@ -9055,7 +9055,7 @@
9055
9055
  }
9056
9056
  function runStroke(stroke, lineWidth) {
9057
9057
  let s;
9058
- return s = isArray$a(stroke) ? stroke.some(item => item || void 0 === item) : !!stroke, s && lineWidth > 0;
9058
+ return s = isArray$c(stroke) ? stroke.some(item => item || void 0 === item) : !!stroke, s && lineWidth > 0;
9059
9059
  }
9060
9060
  function fillVisible(opacity, fillOpacity, fill) {
9061
9061
  return fill && opacity * fillOpacity > 0;
@@ -9209,12 +9209,12 @@
9209
9209
  textBaseline: textBaseline
9210
9210
  } = attribute;
9211
9211
  if (null != attribute.forceBoundsHeight) {
9212
- const h = isNumber$4(attribute.forceBoundsHeight) ? attribute.forceBoundsHeight : attribute.forceBoundsHeight(),
9212
+ const h = isNumber$6(attribute.forceBoundsHeight) ? attribute.forceBoundsHeight : attribute.forceBoundsHeight(),
9213
9213
  dy = textLayoutOffsetY(textBaseline, h, h);
9214
9214
  aabbBounds.set(aabbBounds.x1, dy, aabbBounds.x2, dy + h);
9215
9215
  }
9216
9216
  if (null != attribute.forceBoundsWidth) {
9217
- const w = isNumber$4(attribute.forceBoundsWidth) ? attribute.forceBoundsWidth : attribute.forceBoundsWidth(),
9217
+ const w = isNumber$6(attribute.forceBoundsWidth) ? attribute.forceBoundsWidth : attribute.forceBoundsWidth(),
9218
9218
  dx = textDrawOffsetX(textAlign, w);
9219
9219
  aabbBounds.set(dx, aabbBounds.y1, dx + w, aabbBounds.y2);
9220
9220
  }
@@ -9511,7 +9511,7 @@
9511
9511
  const {
9512
9512
  text: text
9513
9513
  } = this.attribute;
9514
- return isArray$a(text) ? !text.every(t => null == t || "" === t) : null != text && "" !== text;
9514
+ return isArray$c(text) ? !text.every(t => null == t || "" === t) : null != text && "" !== text;
9515
9515
  }
9516
9516
  getGraphicTheme() {
9517
9517
  return getTheme(this).text;
@@ -9666,7 +9666,7 @@
9666
9666
  lineHeight: lineHeight
9667
9667
  },
9668
9668
  layoutObj = new CanvasTextLayout(fontFamily, textOptions, textMeasure),
9669
- lines = isArray$a(text) ? text.map(l => l.toString()) : [text.toString()],
9669
+ lines = isArray$c(text) ? text.map(l => l.toString()) : [text.toString()],
9670
9670
  linesLayout = [],
9671
9671
  bboxWH = [0, 0];
9672
9672
  let lineCountLimit = 1 / 0;
@@ -9921,7 +9921,7 @@
9921
9921
  const {
9922
9922
  size: size
9923
9923
  } = this.attribute;
9924
- return isArray$a(size) ? 2 === size.length && size.every(this._validNumber) : this._validNumber(size);
9924
+ return isArray$c(size) ? 2 === size.length && size.every(this._validNumber) : this._validNumber(size);
9925
9925
  }
9926
9926
  doUpdateParsedPath() {
9927
9927
  const {
@@ -9948,7 +9948,7 @@
9948
9948
  const {
9949
9949
  size = symbolTheme.size
9950
9950
  } = attribute;
9951
- if (isArray$a(size)) aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);else {
9951
+ if (isArray$c(size)) aabbBounds.set(-size[0] / 2, -size[1] / 2, size[0] / 2, size[1] / 2);else {
9952
9952
  const halfWH = size / 2;
9953
9953
  aabbBounds.set(-halfWH, -halfWH, halfWH, halfWH);
9954
9954
  }
@@ -9969,7 +9969,7 @@
9969
9969
  toCustomPath() {
9970
9970
  const symbolInstance = this.getParsedPath(),
9971
9971
  size = this.attribute.size,
9972
- formattedSize = isArray$a(size) ? size : [size, size];
9972
+ formattedSize = isArray$c(size) ? size : [size, size];
9973
9973
  return symbolInstance.path ? new CustomPath2D().fromCustomPath2D(symbolInstance.path, 0, 0, formattedSize[0], formattedSize[1]) : new CustomPath2D().fromString(symbolInstance.pathStr, 0, 0, formattedSize[0], formattedSize[1]);
9974
9974
  }
9975
9975
  clone() {
@@ -10733,7 +10733,7 @@
10733
10733
  const halfPi = pi / 2;
10734
10734
  function createRectPath(path, x, y, width, height, rectCornerRadius, roundCorner = !0, edgeCb) {
10735
10735
  let cornerRadius;
10736
- if (Array.isArray(roundCorner) && (edgeCb = roundCorner, roundCorner = !0), width < 0 && (x += width, width = -width), height < 0 && (y += height, height = -height), isNumber$4(rectCornerRadius, !0)) cornerRadius = [rectCornerRadius = abs(rectCornerRadius), rectCornerRadius, rectCornerRadius, rectCornerRadius];else if (Array.isArray(rectCornerRadius)) {
10736
+ if (Array.isArray(roundCorner) && (edgeCb = roundCorner, roundCorner = !0), width < 0 && (x += width, width = -width), height < 0 && (y += height, height = -height), isNumber$6(rectCornerRadius, !0)) cornerRadius = [rectCornerRadius = abs(rectCornerRadius), rectCornerRadius, rectCornerRadius, rectCornerRadius];else if (Array.isArray(rectCornerRadius)) {
10737
10737
  const cornerRadiusArr = rectCornerRadius;
10738
10738
  let cr0, cr1;
10739
10739
  switch (cornerRadiusArr.length) {
@@ -10835,7 +10835,7 @@
10835
10835
  nextX = x + sign * d,
10836
10836
  nextY = y + sign * d,
10837
10837
  dw = 2 * d;
10838
- if (0 === cornerRadius || isArray$a(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(nextX, nextY, width - sign * dw, height - sign * dw)) : (context.beginPath(), createRectPath(context, nextX, nextY, width - sign * dw, height - sign * dw, cornerRadius, "bevel" !== cornerType)), context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute), strokeCb) strokeCb(context, borderStyle, rectAttribute[key]);else if (doStroke) {
10838
+ if (0 === cornerRadius || isArray$c(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(nextX, nextY, width - sign * dw, height - sign * dw)) : (context.beginPath(), createRectPath(context, nextX, nextY, width - sign * dw, height - sign * dw, cornerRadius, "bevel" !== cornerType)), context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute), strokeCb) strokeCb(context, borderStyle, rectAttribute[key]);else if (doStroke) {
10839
10839
  const lastOpacity = rectAttribute[key].opacity;
10840
10840
  rectAttribute[key].opacity = opacity, context.setStrokeStyle(rect, borderStyle, (originX - x) / scaleX, (originY - y) / scaleY, rectAttribute[key]), rectAttribute[key].opacity = lastOpacity, context.stroke();
10841
10841
  }
@@ -10874,7 +10874,7 @@
10874
10874
  height: height
10875
10875
  } = rect.attribute;
10876
10876
  if (width = (null != width ? width : x1 - originX) || 0, height = (null != height ? height : y1 - originY) || 0, Array.isArray(stroke) && stroke.some(s => !1 === s)) {
10877
- if (context.setStrokeStyle(rect, rect.attribute, x, y, groupAttribute), !(0 === cornerRadius || isArray$a(cornerRadius) && cornerRadius.every(num => 0 === num))) {
10877
+ if (context.setStrokeStyle(rect, rect.attribute, x, y, groupAttribute), !(0 === cornerRadius || isArray$c(cornerRadius) && cornerRadius.every(num => 0 === num))) {
10878
10878
  let lastStroke,
10879
10879
  lastStrokeI = 0;
10880
10880
  return createRectPath(context, x, y, width, height, cornerRadius, "bevel" !== cornerType, new Array(4).fill(0).map((_, i) => (x1, y1, x2, y2) => {
@@ -11296,7 +11296,7 @@
11296
11296
  offsetX: offsetX,
11297
11297
  offsetY: offsetY,
11298
11298
  offsetZ: z
11299
- }), line.cache && !isArray$a(line.cache) && line.cache.curves.every(c => c.defined) && line.attribute.curveType && line.attribute.curveType.includes("Closed") && context.closePath(), context.setShadowBlendStyle && context.setShadowBlendStyle(line, attribute, defaultAttribute);
11299
+ }), line.cache && !isArray$c(line.cache) && line.cache.curves.every(c => c.defined) && line.attribute.curveType && line.attribute.curveType.includes("Closed") && context.closePath(), context.setShadowBlendStyle && context.setShadowBlendStyle(line, attribute, defaultAttribute);
11300
11300
  const {
11301
11301
  x: originX = 0,
11302
11302
  x: originY = 0
@@ -11536,7 +11536,7 @@
11536
11536
  const {
11537
11537
  stroke = areaAttribute && areaAttribute.stroke
11538
11538
  } = area.attribute;
11539
- if (isArray$a(stroke) && (stroke[0] || stroke[2]) && !1 === stroke[1]) if (context.beginPath(), stroke[0]) {
11539
+ if (isArray$c(stroke) && (stroke[0] || stroke[2]) && !1 === stroke[1]) if (context.beginPath(), stroke[0]) {
11540
11540
  context.moveTo(startP.x + offsetX, startP.y + offsetY, z);
11541
11541
  for (let i = 1; i < points.length; i++) {
11542
11542
  const p = points[i];
@@ -11714,7 +11714,7 @@
11714
11714
  const {
11715
11715
  stroke = defaultAttribute && defaultAttribute[1] && defaultAttribute[1].stroke
11716
11716
  } = attribute;
11717
- isArray$a(stroke) && (stroke[0] || stroke[2]) && !1 === stroke[1] && (context.beginPath(), drawSegments(context, stroke[0] ? cache.top : cache.bottom, clipRange, direction === Direction.ROW ? "x" : "y", {
11717
+ isArray$c(stroke) && (stroke[0] || stroke[2]) && !1 === stroke[1] && (context.beginPath(), drawSegments(context, stroke[0] ? cache.top : cache.bottom, clipRange, direction === Direction.ROW ? "x" : "y", {
11718
11718
  offsetX: offsetX,
11719
11719
  offsetY: offsetY,
11720
11720
  offsetZ: offsetZ
@@ -11775,7 +11775,7 @@
11775
11775
  if (!rect.valid || !visible) return;
11776
11776
  if (!doFill && !doStroke) return;
11777
11777
  if (!(fVisible || sVisible || fillCb || strokeCb || background)) return;
11778
- 0 === cornerRadius || isArray$a(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(x, y, width, height)) : (context.beginPath(), createRectPath(context, x, y, width, height, cornerRadius, "bevel" !== cornerType));
11778
+ 0 === cornerRadius || isArray$c(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(x, y, width, height)) : (context.beginPath(), createRectPath(context, x, y, width, height, cornerRadius, "bevel" !== cornerType));
11779
11779
  const doFillOrStroke = {
11780
11780
  doFill: doFill,
11781
11781
  doStroke: doStroke
@@ -11847,7 +11847,7 @@
11847
11847
  const camera = context.camera;
11848
11848
  if (keepDirIn3d && camera && context.project) {
11849
11849
  const p = context.project(x, y, z);
11850
- context.camera = null, isArray$a(size) ? [size[0] * scaleX, size[1] * scaleY] : size * scaleX, _x = p.x, _y = p.y, _z = void 0;
11850
+ context.camera = null, isArray$c(size) ? [size[0] * scaleX, size[1] * scaleY] : size * scaleX, _x = p.x, _y = p.y, _z = void 0;
11851
11851
  }
11852
11852
  !1 === parsedPath.draw(context, size, _x, _y, _z, (p, a) => {
11853
11853
  var _a, _b, _c, _d;
@@ -12179,7 +12179,7 @@
12179
12179
  context.disableFill = !0, context.disableStroke = !0, context.disableBeginPath = !0, path.forEach(g => {
12180
12180
  drawContext.drawContribution.getRenderContribution(g).draw(g, drawContext.renderService, drawContext, params);
12181
12181
  }), context.disableFill = disableFill, context.disableStroke = disableStroke, context.disableBeginPath = disableBeginPath;
12182
- } else 0 === cornerRadius || isArray$a(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(x, y, width, height)) : (context.beginPath(), createRectPath(context, x, y, width, height, cornerRadius, "bevel" !== cornerType));
12182
+ } else 0 === cornerRadius || isArray$c(cornerRadius) && cornerRadius.every(num => 0 === num) ? (context.beginPath(), context.rect(x, y, width, height)) : (context.beginPath(), createRectPath(context, x, y, width, height, cornerRadius, "bevel" !== cornerType));
12183
12183
  this._groupRenderContribitions || (this._groupRenderContribitions = this.groupRenderContribitions.getContributions() || [], this._groupRenderContribitions.push(defaultGroupBackgroundRenderContribution));
12184
12184
  const doFillOrStroke = {
12185
12185
  doFill: doFill,
@@ -12922,7 +12922,7 @@
12922
12922
  }) : foreach(group, DefaultAttribute.zIndex, item => {
12923
12923
  drawContext.break || (item.isContainer ? this.renderGroup(item, drawContext, nextM) : this.renderItem(item, drawContext));
12924
12924
  }, !1, !!(null === (_a = drawContext.context) || void 0 === _a ? void 0 : _a.camera));
12925
- }, this.currentRenderMap = new Map(), this.defaultRenderMap = new Map(), this.styleRenderMap = new Map(), this.dirtyBounds = new Bounds(), this.backupDirtyBounds = new Bounds(), this.global = application.global, this.layerService = application.layerService, isArray$a(this.contributions) || (this.contributions = [this.contributions]), this.init();
12925
+ }, this.currentRenderMap = new Map(), this.defaultRenderMap = new Map(), this.styleRenderMap = new Map(), this.dirtyBounds = new Bounds(), this.backupDirtyBounds = new Bounds(), this.global = application.global, this.layerService = application.layerService, isArray$c(this.contributions) || (this.contributions = [this.contributions]), this.init();
12926
12926
  }
12927
12927
  reInit() {
12928
12928
  this.init(), this.contributions.forEach(item => {
@@ -13656,7 +13656,7 @@
13656
13656
  main: !0
13657
13657
  })), this.nextFrameRenderLayerSet = new Set(), this.willNextFrameRender = !1, this.stage = this, this.renderStyle = params.renderStyle, params.autoRender && this.enableAutoRender(), params.autoRefresh && this.enableAutoRefresh(), !1 === params.disableDirtyBounds && this.enableDirtyBounds(), params.enableHtmlAttribute && this.enableHtmlAttribute(params.enableHtmlAttribute), params.ReactDOM && this.enableReactAttribute(params.ReactDOM), params.enableLayout && this.enableLayout(), this.hooks.beforeRender.tap("constructor", this.beforeRender), this.hooks.afterRender.tap("constructor", this.afterRender), this.hooks.afterClearScreen.tap("constructor", this.afterClearScreen), this.hooks.afterClearRect.tap("constructor", this.afterClearRect), this._beforeRender = params.beforeRender, this._afterRender = params.afterRender, this._afterClearScreen = params.afterClearScreen, this._afterClearRect = params.afterClearRect, this.supportInteractiveLayer = !1 !== params.interactiveLayer, params.optimize || (params.optimize = {
13658
13658
  tickRenderMode: "effect"
13659
- }), this.optmize(params.optimize), params.background && isString$1(this._background) && this._background.includes("/") && this.setAttributes({
13659
+ }), this.optmize(params.optimize), params.background && isString$3(this._background) && this._background.includes("/") && this.setAttributes({
13660
13660
  background: this._background
13661
13661
  }), this.initAnimate(params), this.rafId = null !== (_b = params.rafId) && void 0 !== _b ? _b : Math.floor(6 * Math.random());
13662
13662
  }
@@ -14124,7 +14124,7 @@
14124
14124
  }
14125
14125
  function mapToCanvasPointForCanvas(nativeEvent) {
14126
14126
  var _a;
14127
- if (isNumber$2(nativeEvent._canvasX) && isNumber$2(nativeEvent._canvasY)) return {
14127
+ if (isNumber$4(nativeEvent._canvasX) && isNumber$4(nativeEvent._canvasY)) return {
14128
14128
  x: nativeEvent._canvasX,
14129
14129
  y: nativeEvent._canvasY
14130
14130
  };
@@ -14188,7 +14188,7 @@
14188
14188
  [key]: value
14189
14189
  }, this.attribute, key, context);
14190
14190
  if (params) return this._setAttributes(params, forceUpdateTag);
14191
- isPlainObject$4(this.attribute[key]) && isPlainObject$4(value) && !isFunction$a(this.attribute[key]) && !isFunction$a(value) ? merge(this.attribute[key], value) : this.attribute[key] = value, this._skipRenderAttributes.includes(key) || this.render(), this.valid = this.isValid(), this.updateShapeAndBoundsTagSetted() || !forceUpdateTag && !this.needUpdateTag(key) ? this.addUpdateBoundTag() : this.addUpdateShapeAndBoundsTag(), this.addUpdatePositionTag(), this.onAttributeUpdate();
14191
+ isPlainObject$4(this.attribute[key]) && isPlainObject$4(value) && !isFunction$c(this.attribute[key]) && !isFunction$c(value) ? merge(this.attribute[key], value) : this.attribute[key] = value, this._skipRenderAttributes.includes(key) || this.render(), this.valid = this.isValid(), this.updateShapeAndBoundsTagSetted() || !forceUpdateTag && !this.needUpdateTag(key) ? this.addUpdateBoundTag() : this.addUpdateShapeAndBoundsTag(), this.addUpdatePositionTag(), this.onAttributeUpdate();
14192
14192
  }
14193
14193
  setAttributes(params, forceUpdateTag, context) {
14194
14194
  return params = this.onBeforeAttributeUpdate && this.onBeforeAttributeUpdate(params, this.attribute, null, context) || params, this._setAttributes(params, forceUpdateTag);
@@ -14201,7 +14201,7 @@
14201
14201
  isNil$2(keys) && (keys = Object.keys(params));
14202
14202
  for (let i = 0; i < keys.length; i++) {
14203
14203
  const key = keys[i];
14204
- !isPlainObject$4(this.attribute[key]) || isFunction$a(this.attribute[key]) || isFunction$a(params[key]) ? this.attribute[key] = params[key] : merge(this.attribute[key], params[key]);
14204
+ !isPlainObject$4(this.attribute[key]) || isFunction$c(this.attribute[key]) || isFunction$c(params[key]) ? this.attribute[key] = params[key] : merge(this.attribute[key], params[key]);
14205
14205
  }
14206
14206
  }
14207
14207
  bindEvents() {}
@@ -14295,7 +14295,7 @@
14295
14295
  x += point.x, y += point.y, pickContext.setTransformForCurrent();
14296
14296
  } else x = 0, y = 0, onlyTranslate = !1, pickContext.transformFromMatrix(rect.transMatrix, !0);
14297
14297
  let picked = !0;
14298
- if (!onlyTranslate || rect.shadowRoot || isNumber$4(cornerRadius, !0) && 0 !== cornerRadius || isArray$a(cornerRadius) && cornerRadius.some(num => 0 !== num)) picked = !1, this.canvasRenderer.drawShape(rect, pickContext, x, y, {}, null, (context, rectAttribute, themeAttribute) => !!picked || (picked = context.isPointInPath(point.x, point.y), picked), (context, rectAttribute, themeAttribute) => {
14298
+ if (!onlyTranslate || rect.shadowRoot || isNumber$6(cornerRadius, !0) && 0 !== cornerRadius || isArray$c(cornerRadius) && cornerRadius.some(num => 0 !== num)) picked = !1, this.canvasRenderer.drawShape(rect, pickContext, x, y, {}, null, (context, rectAttribute, themeAttribute) => !!picked || (picked = context.isPointInPath(point.x, point.y), picked), (context, rectAttribute, themeAttribute) => {
14299
14299
  if (picked) return !0;
14300
14300
  const lineWidth = rectAttribute.lineWidth || themeAttribute.lineWidth,
14301
14301
  pickStrokeBuffer = rectAttribute.pickStrokeBuffer || themeAttribute.pickStrokeBuffer,
@@ -14974,7 +14974,7 @@
14974
14974
  const maxLineWidth = maxWidth - parsedPadding[1] - parsedPadding[3],
14975
14975
  titleVisible = isValid$3(title) && !1 !== visible,
14976
14976
  titleAttrs = Object.assign(Object.assign({
14977
- text: isArray$a(title) ? title : [title],
14977
+ text: isArray$c(title) ? title : [title],
14978
14978
  visible: titleVisible,
14979
14979
  wrap: !0
14980
14980
  }, titleStyle), {
@@ -14993,7 +14993,7 @@
14993
14993
  titleVisible || (height = 0);
14994
14994
  const contentVisible = isValid$3(content) && !1 !== visible,
14995
14995
  contentAttrs = Object.assign(Object.assign({
14996
- text: isArray$a(content) ? content : [content],
14996
+ text: isArray$c(content) ? content : [content],
14997
14997
  visible: contentVisible,
14998
14998
  wrap: !0
14999
14999
  }, contentStyle), {
@@ -15028,7 +15028,7 @@
15028
15028
  });
15029
15029
  }
15030
15030
  const symbolSize = null !== (_a = backgroundStyle.size) && void 0 !== _a ? _a : 12,
15031
- spaceSize = isArray$a(symbolSize) ? [symbolSize[0] + (null !== (_b = backgroundStyle.space) && void 0 !== _b ? _b : 0), symbolSize[1] + (null !== (_c = backgroundStyle.space) && void 0 !== _c ? _c : 0)] : symbolSize + (null !== (_d = backgroundStyle.space) && void 0 !== _d ? _d : 0),
15031
+ spaceSize = isArray$c(symbolSize) ? [symbolSize[0] + (null !== (_b = backgroundStyle.space) && void 0 !== _b ? _b : 0), symbolSize[1] + (null !== (_c = backgroundStyle.space) && void 0 !== _c ? _c : 0)] : symbolSize + (null !== (_d = backgroundStyle.space) && void 0 !== _d ? _d : 0),
15032
15032
  lineWidth = null !== (_e = backgroundStyle.lineWidth) && void 0 !== _e ? _e : 1,
15033
15033
  range = this.stage ? [null !== (_f = this.stage.viewWidth) && void 0 !== _f ? _f : this.stage.width, null !== (_g = this.stage.viewHeight) && void 0 !== _g ? _g : this.stage.height] : void 0;
15034
15034
  if (range) {
@@ -15036,33 +15036,33 @@
15036
15036
  leftWidth = null !== (_h = this.attribute.x) && void 0 !== _h ? _h : b.x1,
15037
15037
  rightWidth = range[0] - b.x1;
15038
15038
  let maxSpace = Math.max(leftWidth, rightWidth);
15039
- const buf = (isArray$a(symbolSize) ? symbolSize[0] : 12) + 3;
15039
+ const buf = (isArray$c(symbolSize) ? symbolSize[0] : 12) + 3;
15040
15040
  if (maxSpace = Math.min(maxSpace - buf, maxSpace * maxWidthPercent), maxSpace < popTipWidth) {
15041
15041
  popTipWidth = maxSpace;
15042
15042
  const buf = parsedPadding[1] + parsedPadding[3];
15043
15043
  titleShape.setAttribute("maxLineWidth", maxSpace - buf), contentShape.setAttribute("maxLineWidth", maxSpace - buf), poptipHeight = parsedPadding[0] + parsedPadding[2], titleVisible && (poptipHeight += titleShape.AABBBounds.height() + space), poptipHeight += contentShape.AABBBounds.height();
15044
15044
  }
15045
15045
  }
15046
- const layout = "auto" === position || isArray$a(position),
15047
- positionList = isArray$a(position) ? position : this.positionList;
15046
+ const layout = "auto" === position || isArray$c(position),
15047
+ positionList = isArray$c(position) ? position : this.positionList;
15048
15048
  let maxBBoxI,
15049
15049
  maxBBoxSize = -1 / 0;
15050
15050
  for (let i = 0; i < positionList.length + 1; i++) {
15051
15051
  const p = layout ? positionList[i === positionList.length ? maxBBoxI : i] : position;
15052
15052
  let symbolType = "arrow2Left",
15053
- offsetX = (isArray$a(symbolSize) ? symbolSize[0] : symbolSize) / 4,
15053
+ offsetX = (isArray$c(symbolSize) ? symbolSize[0] : symbolSize) / 4,
15054
15054
  offsetY = 0;
15055
- "top" === p || "bottom" === p || "left" === p || "right" === p ? symbolType = "arrow2Left" : "concise" === triangleMode && (symbolType = conciseSymbolMap[p], offsetX = ["tl", "bl", "rt", "rb"].includes(p) ? (isArray$a(symbolSize) ? symbolSize[0] : symbolSize) / 2 : -(isArray$a(symbolSize) ? symbolSize[0] : symbolSize) / 2, offsetY = ["tl", "tr", "lb", "rb"].includes(p) ? -(isArray$a(symbolSize) ? symbolSize[1] : symbolSize) / 2 : (isArray$a(symbolSize) ? symbolSize[1] : symbolSize) / 2);
15055
+ "top" === p || "bottom" === p || "left" === p || "right" === p ? symbolType = "arrow2Left" : "concise" === triangleMode && (symbolType = conciseSymbolMap[p], offsetX = ["tl", "bl", "rt", "rb"].includes(p) ? (isArray$c(symbolSize) ? symbolSize[0] : symbolSize) / 2 : -(isArray$c(symbolSize) ? symbolSize[0] : symbolSize) / 2, offsetY = ["tl", "tr", "lb", "rb"].includes(p) ? -(isArray$c(symbolSize) ? symbolSize[1] : symbolSize) / 2 : (isArray$c(symbolSize) ? symbolSize[1] : symbolSize) / 2);
15056
15056
  const {
15057
15057
  angle: angle,
15058
15058
  offset: offset
15059
- } = this.getAngleAndOffset(p, popTipWidth, poptipHeight, isArray$a(spaceSize) ? spaceSize : [spaceSize, spaceSize - lineWidth], symbolType);
15059
+ } = this.getAngleAndOffset(p, popTipWidth, poptipHeight, isArray$c(spaceSize) ? spaceSize : [spaceSize, spaceSize - lineWidth], symbolType);
15060
15060
  let bgSymbol,
15061
15061
  anchorPoint = {
15062
15062
  x: 0,
15063
15063
  y: 0
15064
15064
  };
15065
- if ("bounds" === poptipAnchor && positionBounds && (anchorPoint = this.calculateAnchorPoint(p, positionBounds)), isBoolean$2(bgVisible)) {
15065
+ if ("bounds" === poptipAnchor && positionBounds && (anchorPoint = this.calculateAnchorPoint(p, positionBounds)), isBoolean$4(bgVisible)) {
15066
15066
  let bgRect;
15067
15067
  bgSymbol = group.createOrUpdateChild("poptip-symbol-panel", Object.assign(Object.assign({}, backgroundStyle), {
15068
15068
  visible: bgVisible && (contentVisible || titleVisible),
@@ -15101,7 +15101,7 @@
15101
15101
  const {
15102
15102
  size = 12
15103
15103
  } = logoSymbol,
15104
- sizeArray = isArray$a(size) ? size : [size, size];
15104
+ sizeArray = isArray$c(size) ? size : [size, size];
15105
15105
  "auto" === sizeArray[1] && (sizeArray[1] = poptipHeight), "auto" === sizeArray[0] && (sizeArray[0] = poptipHeight);
15106
15106
  const sizeW = sizeArray[0];
15107
15107
  group.createOrUpdateChild("poptip-logo", Object.assign(Object.assign({}, logoSymbol), {
@@ -15142,7 +15142,7 @@
15142
15142
  let mainDirectionOverlap = !1;
15143
15143
  if (isVerticalPosition ? mainDirectionOverlap = "top" === p && b.y1 < 0 || "bottom" === p && b.y2 > stageBounds.y2 : isHorizontalPosition && (mainDirectionOverlap = "left" === p && b.x1 < 0 || "right" === p && b.x2 > stageBounds.x2), !mainDirectionOverlap) {
15144
15144
  let secondaryOffset = 0;
15145
- const szNumber = (isArray$a(symbolSize) ? symbolSize[1] : symbolSize) / 2;
15145
+ const szNumber = (isArray$c(symbolSize) ? symbolSize[1] : symbolSize) / 2;
15146
15146
  isVerticalPosition ? (b.x1 < 0 ? secondaryOffset = -b.x1 : b.x2 > stageBounds.x2 && (secondaryOffset = stageBounds.x2 - b.x2), group.setAttribute("x", group.attribute.x + secondaryOffset), bgSymbol.setAttribute("dx", min(max(bgSymbol.attribute.dx - secondaryOffset, szNumber), b.width() - szNumber))) : isHorizontalPosition && (b.y1 < 0 ? secondaryOffset = -b.y1 : b.y2 > stageBounds.y2 && (secondaryOffset = stageBounds.y2 - b.y2), group.setAttribute("y", group.attribute.y + secondaryOffset), bgSymbol.setAttribute("dy", min(max(bgSymbol.attribute.dy - secondaryOffset, szNumber), b.height() - szNumber)));
15147
15147
  break;
15148
15148
  }
@@ -15298,9 +15298,52 @@
15298
15298
  return !range1 && !range2 || !(!range1 || !range2) && (null === (_a = range1.start) || void 0 === _a ? void 0 : _a.col) === (null === (_b = range2.start) || void 0 === _b ? void 0 : _b.col) && (null === (_c = range1.start) || void 0 === _c ? void 0 : _c.row) === (null === (_d = range2.start) || void 0 === _d ? void 0 : _d.row) && (null === (_e = range1.end) || void 0 === _e ? void 0 : _e.col) === (null === (_f = range2.end) || void 0 === _f ? void 0 : _f.col) && (null === (_g = range1.end) || void 0 === _g ? void 0 : _g.row) === (null === (_h = range2.end) || void 0 === _h ? void 0 : _h.row);
15299
15299
  }
15300
15300
 
15301
+ const isType = (value, type) => Object.prototype.toString.call(value) === `[object ${type}]`;
15302
+ var isType$1 = isType;
15303
+
15304
+ const isBoolean$1 = (value, fuzzy = !1) => fuzzy ? "boolean" == typeof value : !0 === value || !1 === value || isType$1(value, "Boolean");
15305
+ var isBoolean$2 = isBoolean$1;
15306
+
15307
+ const isFunction$9 = value => "function" == typeof value;
15308
+ var isFunction$a = isFunction$9;
15309
+
15301
15310
  const isValid = value => null != value;
15302
15311
  var isValid$1 = isValid;
15303
15312
 
15313
+ const isString = (value, fuzzy = !1) => {
15314
+ const type = typeof value;
15315
+ return fuzzy ? "string" === type : "string" === type || isType$1(value, "String");
15316
+ };
15317
+ var isString$1 = isString;
15318
+
15319
+ const isArray$9 = value => Array.isArray ? Array.isArray(value) : isType$1(value, "Array");
15320
+ var isArray$a = isArray$9;
15321
+
15322
+ const isDate = value => isType$1(value, "Date");
15323
+ var isDate$1 = isDate;
15324
+
15325
+ const isNumber$2 = (value, fuzzy = !1) => {
15326
+ const type = typeof value;
15327
+ return fuzzy ? "number" === type : "number" === type || isType$1(value, "Number");
15328
+ };
15329
+ var isNumber$3 = isNumber$2;
15330
+
15331
+ function cloneDeep(value, ignoreWhen, excludeKeys) {
15332
+ let result;
15333
+ if (!isValid$1(value) || "object" != typeof value || ignoreWhen && ignoreWhen(value)) return value;
15334
+ const isArr = isArray$a(value),
15335
+ length = value.length;
15336
+ result = isArr ? new Array(length) : "object" == typeof value ? {} : isBoolean$2(value) || isNumber$3(value) || isString$1(value) ? value : isDate$1(value) ? new Date(+value) : void 0;
15337
+ const props = isArr ? void 0 : Object.keys(Object(value));
15338
+ let index = -1;
15339
+ if (result) for (; ++index < (props || value).length;) {
15340
+ const key = props ? props[index] : index,
15341
+ subValue = value[key];
15342
+ excludeKeys && excludeKeys.includes(key.toString()) ? result[key] = subValue : result[key] = cloneDeep(subValue, ignoreWhen, excludeKeys);
15343
+ }
15344
+ return result;
15345
+ }
15346
+
15304
15347
  const isNode$1 = "undefined" == typeof window || void 0 === window.window;
15305
15348
  function analyzeUserAgent() {
15306
15349
  if (isNode$1) return {
@@ -18825,11 +18868,12 @@
18825
18868
  }), this.group.appendChild(this.markLIneContainer), this.initMarkLines();
18826
18869
  }
18827
18870
  initMarkLines() {
18828
- this._scene._gantt.parsedOptions.markLine.forEach(line => {
18871
+ const markLine = this._scene._gantt.parsedOptions.markLine,
18872
+ minDate = this._scene._gantt.parsedOptions.minDate;
18873
+ minDate && markLine.forEach(line => {
18829
18874
  const style = line.style,
18830
18875
  contentStyle = line.contentStyle || {},
18831
18876
  date = this._scene._gantt.parsedOptions.timeScaleIncludeHour ? createDateAtMidnight(line.date) : createDateAtMidnight(line.date, !0),
18832
- minDate = this._scene._gantt.parsedOptions.minDate,
18833
18877
  {
18834
18878
  unit: unit,
18835
18879
  step: step
@@ -99188,30 +99232,28 @@ ${XMLNS_NAMESPACE}.`);
99188
99232
  const args = _parseArguments(options, callback),
99189
99233
  opts = args[0],
99190
99234
  cb = args[1];
99191
- try {
99192
- _assertAndSanitizeOptions(opts);
99193
- } catch (err) {
99194
- return cb(err);
99195
- }
99196
- let tries = opts.tries;
99197
- (function _getUniqueName() {
99198
- try {
99199
- const name = _generateTmpName(opts);
99235
+ _assertAndSanitizeOptions(opts, function (err, sanitizedOptions) {
99236
+ if (err) return cb(err);
99237
+ let tries = sanitizedOptions.tries;
99238
+ (function _getUniqueName() {
99239
+ try {
99240
+ const name = _generateTmpName(sanitizedOptions);
99200
99241
 
99201
- // check whether the path exists then retry if needed
99202
- fs.stat(name, function (err) {
99203
- /* istanbul ignore else */
99204
- if (!err) {
99242
+ // check whether the path exists then retry if needed
99243
+ fs.stat(name, function (err) {
99205
99244
  /* istanbul ignore else */
99206
- if (tries-- > 0) return _getUniqueName();
99207
- return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));
99208
- }
99209
- cb(null, name);
99210
- });
99211
- } catch (err) {
99212
- cb(err);
99213
- }
99214
- })();
99245
+ if (!err) {
99246
+ /* istanbul ignore else */
99247
+ if (tries-- > 0) return _getUniqueName();
99248
+ return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));
99249
+ }
99250
+ cb(null, name);
99251
+ });
99252
+ } catch (err) {
99253
+ cb(err);
99254
+ }
99255
+ })();
99256
+ });
99215
99257
  }
99216
99258
 
99217
99259
  /**
@@ -99224,10 +99266,10 @@ ${XMLNS_NAMESPACE}.`);
99224
99266
  function tmpNameSync(options) {
99225
99267
  const args = _parseArguments(options),
99226
99268
  opts = args[0];
99227
- _assertAndSanitizeOptions(opts);
99228
- let tries = opts.tries;
99269
+ const sanitizedOptions = _assertAndSanitizeOptionsSync(opts);
99270
+ let tries = sanitizedOptions.tries;
99229
99271
  do {
99230
- const name = _generateTmpName(opts);
99272
+ const name = _generateTmpName(sanitizedOptions);
99231
99273
  try {
99232
99274
  fs.statSync(name);
99233
99275
  } catch (e) {
@@ -99284,7 +99326,7 @@ ${XMLNS_NAMESPACE}.`);
99284
99326
  opts = args[0];
99285
99327
  const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;
99286
99328
  const name = tmpNameSync(opts);
99287
- var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
99329
+ let fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);
99288
99330
  /* istanbul ignore else */
99289
99331
  if (opts.discardDescriptor) {
99290
99332
  fs.closeSync(fd);
@@ -99500,23 +99542,12 @@ ${XMLNS_NAMESPACE}.`);
99500
99542
  } catch (e) {
99501
99543
  rnd = crypto.pseudoRandomBytes(howMany);
99502
99544
  }
99503
- for (var i = 0; i < howMany; i++) {
99545
+ for (let i = 0; i < howMany; i++) {
99504
99546
  value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]);
99505
99547
  }
99506
99548
  return value.join('');
99507
99549
  }
99508
99550
 
99509
- /**
99510
- * Helper which determines whether a string s is blank, that is undefined, or empty or null.
99511
- *
99512
- * @private
99513
- * @param {string} s
99514
- * @returns {Boolean} true whether the string s is blank, false otherwise
99515
- */
99516
- function _isBlank(s) {
99517
- return s === null || _isUndefined(s) || !s.trim();
99518
- }
99519
-
99520
99551
  /**
99521
99552
  * Checks whether the `obj` parameter is defined or not.
99522
99553
  *
@@ -99557,6 +99588,47 @@ ${XMLNS_NAMESPACE}.`);
99557
99588
  return [actualOptions, callback];
99558
99589
  }
99559
99590
 
99591
+ /**
99592
+ * Resolve the specified path name in respect to tmpDir.
99593
+ *
99594
+ * The specified name might include relative path components, e.g. ../
99595
+ * so we need to resolve in order to be sure that is is located inside tmpDir
99596
+ *
99597
+ * @private
99598
+ */
99599
+ function _resolvePath(name, tmpDir, cb) {
99600
+ const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);
99601
+ fs.stat(pathToResolve, function (err) {
99602
+ if (err) {
99603
+ fs.realpath(path.dirname(pathToResolve), function (err, parentDir) {
99604
+ if (err) return cb(err);
99605
+ cb(null, path.join(parentDir, path.basename(pathToResolve)));
99606
+ });
99607
+ } else {
99608
+ fs.realpath(path, cb);
99609
+ }
99610
+ });
99611
+ }
99612
+
99613
+ /**
99614
+ * Resolve the specified path name in respect to tmpDir.
99615
+ *
99616
+ * The specified name might include relative path components, e.g. ../
99617
+ * so we need to resolve in order to be sure that is is located inside tmpDir
99618
+ *
99619
+ * @private
99620
+ */
99621
+ function _resolvePathSync(name, tmpDir) {
99622
+ const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);
99623
+ try {
99624
+ fs.statSync(pathToResolve);
99625
+ return fs.realpathSync(pathToResolve);
99626
+ } catch (_err) {
99627
+ const parentDir = fs.realpathSync(path.dirname(pathToResolve));
99628
+ return path.join(parentDir, path.basename(pathToResolve));
99629
+ }
99630
+ }
99631
+
99560
99632
  /**
99561
99633
  * Generates a new temporary name.
99562
99634
  *
@@ -99568,10 +99640,14 @@ ${XMLNS_NAMESPACE}.`);
99568
99640
  const tmpDir = opts.tmpdir;
99569
99641
 
99570
99642
  /* istanbul ignore else */
99571
- if (!_isUndefined(opts.name)) return path.join(tmpDir, opts.dir, opts.name);
99643
+ if (!_isUndefined(opts.name)) {
99644
+ return path.join(tmpDir, opts.dir, opts.name);
99645
+ }
99572
99646
 
99573
99647
  /* istanbul ignore else */
99574
- if (!_isUndefined(opts.template)) return path.join(tmpDir, opts.dir, opts.template).replace(TEMPLATE_PATTERN, _randomChars(6));
99648
+ if (!_isUndefined(opts.template)) {
99649
+ return path.join(tmpDir, opts.dir, opts.template).replace(TEMPLATE_PATTERN, _randomChars(6));
99650
+ }
99575
99651
 
99576
99652
  // prefix and postfix
99577
99653
  const name = [opts.prefix ? opts.prefix : 'tmp', '-', process.pid, '-', _randomChars(12), opts.postfix ? '-' + opts.postfix : ''].join('');
@@ -99579,27 +99655,31 @@ ${XMLNS_NAMESPACE}.`);
99579
99655
  }
99580
99656
 
99581
99657
  /**
99582
- * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
99583
- * options.
99658
+ * Asserts and sanitizes the basic options.
99584
99659
  *
99585
- * @param {Options} options
99586
99660
  * @private
99587
99661
  */
99588
- function _assertAndSanitizeOptions(options) {
99589
- options.tmpdir = _getTmpDir(options);
99590
- const tmpDir = options.tmpdir;
99662
+ function _assertOptionsBase(options) {
99663
+ if (!_isUndefined(options.name)) {
99664
+ const name = options.name;
99665
+
99666
+ // assert that name is not absolute and does not contain a path
99667
+ if (path.isAbsolute(name)) throw new Error(`name option must not contain an absolute path, found "${name}".`);
99668
+
99669
+ // must not fail on valid .<name> or ..<name> or similar such constructs
99670
+ const basename = path.basename(name);
99671
+ if (basename === '..' || basename === '.' || basename !== name) throw new Error(`name option must not contain a path, found "${name}".`);
99672
+ }
99591
99673
 
99592
99674
  /* istanbul ignore else */
99593
- if (!_isUndefined(options.name)) _assertIsRelative(options.name, 'name', tmpDir);
99594
- /* istanbul ignore else */
99595
- if (!_isUndefined(options.dir)) _assertIsRelative(options.dir, 'dir', tmpDir);
99596
- /* istanbul ignore else */
99597
- if (!_isUndefined(options.template)) {
99598
- _assertIsRelative(options.template, 'template', tmpDir);
99599
- if (!options.template.match(TEMPLATE_PATTERN)) throw new Error(`Invalid template, found "${options.template}".`);
99675
+ if (!_isUndefined(options.template) && !options.template.match(TEMPLATE_PATTERN)) {
99676
+ throw new Error(`Invalid template, found "${options.template}".`);
99600
99677
  }
99678
+
99601
99679
  /* istanbul ignore else */
99602
- if (!_isUndefined(options.tries) && isNaN(options.tries) || options.tries < 0) throw new Error(`Invalid tries, found "${options.tries}".`);
99680
+ if (!_isUndefined(options.tries) && isNaN(options.tries) || options.tries < 0) {
99681
+ throw new Error(`Invalid tries, found "${options.tries}".`);
99682
+ }
99603
99683
 
99604
99684
  // if a name was specified we will try once
99605
99685
  options.tries = _isUndefined(options.name) ? options.tries || DEFAULT_TRIES : 1;
@@ -99608,62 +99688,87 @@ ${XMLNS_NAMESPACE}.`);
99608
99688
  options.discardDescriptor = !!options.discardDescriptor;
99609
99689
  options.unsafeCleanup = !!options.unsafeCleanup;
99610
99690
 
99611
- // sanitize dir, also keep (multiple) blanks if the user, purportedly sane, requests us to
99612
- options.dir = _isUndefined(options.dir) ? '' : path.relative(tmpDir, _resolvePath(options.dir, tmpDir));
99613
- options.template = _isUndefined(options.template) ? undefined : path.relative(tmpDir, _resolvePath(options.template, tmpDir));
99614
- // sanitize further if template is relative to options.dir
99615
- options.template = _isBlank(options.template) ? undefined : path.relative(options.dir, options.template);
99616
-
99617
99691
  // for completeness' sake only, also keep (multiple) blanks if the user, purportedly sane, requests us to
99618
- options.name = _isUndefined(options.name) ? undefined : options.name;
99619
99692
  options.prefix = _isUndefined(options.prefix) ? '' : options.prefix;
99620
99693
  options.postfix = _isUndefined(options.postfix) ? '' : options.postfix;
99621
99694
  }
99622
99695
 
99623
99696
  /**
99624
- * Resolve the specified path name in respect to tmpDir.
99697
+ * Gets the relative directory to tmpDir.
99625
99698
  *
99626
- * The specified name might include relative path components, e.g. ../
99627
- * so we need to resolve in order to be sure that is is located inside tmpDir
99699
+ * @private
99700
+ */
99701
+ function _getRelativePath(option, name, tmpDir, cb) {
99702
+ if (_isUndefined(name)) return cb(null);
99703
+ _resolvePath(name, tmpDir, function (err, resolvedPath) {
99704
+ if (err) return cb(err);
99705
+ const relativePath = path.relative(tmpDir, resolvedPath);
99706
+ if (!resolvedPath.startsWith(tmpDir)) {
99707
+ return cb(new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`));
99708
+ }
99709
+ cb(null, relativePath);
99710
+ });
99711
+ }
99712
+
99713
+ /**
99714
+ * Gets the relative path to tmpDir.
99628
99715
  *
99629
- * @param name
99630
- * @param tmpDir
99631
- * @returns {string}
99632
99716
  * @private
99633
99717
  */
99634
- function _resolvePath(name, tmpDir) {
99635
- if (name.startsWith(tmpDir)) {
99636
- return path.resolve(name);
99637
- } else {
99638
- return path.resolve(path.join(tmpDir, name));
99718
+ function _getRelativePathSync(option, name, tmpDir) {
99719
+ if (_isUndefined(name)) return;
99720
+ const resolvedPath = _resolvePathSync(name, tmpDir);
99721
+ const relativePath = path.relative(tmpDir, resolvedPath);
99722
+ if (!resolvedPath.startsWith(tmpDir)) {
99723
+ throw new Error(`${option} option must be relative to "${tmpDir}", found "${relativePath}".`);
99639
99724
  }
99725
+ return relativePath;
99640
99726
  }
99641
99727
 
99642
99728
  /**
99643
- * Asserts whether specified name is relative to the specified tmpDir.
99729
+ * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
99730
+ * options.
99644
99731
  *
99645
- * @param {string} name
99646
- * @param {string} option
99647
- * @param {string} tmpDir
99648
- * @throws {Error}
99649
99732
  * @private
99650
99733
  */
99651
- function _assertIsRelative(name, option, tmpDir) {
99652
- if (option === 'name') {
99653
- // assert that name is not absolute and does not contain a path
99654
- if (path.isAbsolute(name)) throw new Error(`${option} option must not contain an absolute path, found "${name}".`);
99655
- // must not fail on valid .<name> or ..<name> or similar such constructs
99656
- let basename = path.basename(name);
99657
- if (basename === '..' || basename === '.' || basename !== name) throw new Error(`${option} option must not contain a path, found "${name}".`);
99658
- } else {
99659
- // if (option === 'dir' || option === 'template') {
99660
- // assert that dir or template are relative to tmpDir
99661
- if (path.isAbsolute(name) && !name.startsWith(tmpDir)) {
99662
- throw new Error(`${option} option must be relative to "${tmpDir}", found "${name}".`);
99734
+ function _assertAndSanitizeOptions(options, cb) {
99735
+ _getTmpDir(options, function (err, tmpDir) {
99736
+ if (err) return cb(err);
99737
+ options.tmpdir = tmpDir;
99738
+ try {
99739
+ _assertOptionsBase(options, tmpDir);
99740
+ } catch (err) {
99741
+ return cb(err);
99663
99742
  }
99664
- let resolvedPath = _resolvePath(name, tmpDir);
99665
- if (!resolvedPath.startsWith(tmpDir)) throw new Error(`${option} option must be relative to "${tmpDir}", found "${resolvedPath}".`);
99666
- }
99743
+
99744
+ // sanitize dir, also keep (multiple) blanks if the user, purportedly sane, requests us to
99745
+ _getRelativePath('dir', options.dir, tmpDir, function (err, dir) {
99746
+ if (err) return cb(err);
99747
+ options.dir = _isUndefined(dir) ? '' : dir;
99748
+
99749
+ // sanitize further if template is relative to options.dir
99750
+ _getRelativePath('template', options.template, tmpDir, function (err, template) {
99751
+ if (err) return cb(err);
99752
+ options.template = template;
99753
+ cb(null, options);
99754
+ });
99755
+ });
99756
+ });
99757
+ }
99758
+
99759
+ /**
99760
+ * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing
99761
+ * options.
99762
+ *
99763
+ * @private
99764
+ */
99765
+ function _assertAndSanitizeOptionsSync(options) {
99766
+ const tmpDir = options.tmpdir = _getTmpDirSync(options);
99767
+ _assertOptionsBase(options);
99768
+ const dir = _getRelativePathSync('dir', options.dir, tmpDir);
99769
+ options.dir = _isUndefined(dir) ? '' : dir;
99770
+ options.template = _getRelativePathSync('template', options.template, tmpDir);
99771
+ return options;
99667
99772
  }
99668
99773
 
99669
99774
  /**
@@ -99721,11 +99826,18 @@ ${XMLNS_NAMESPACE}.`);
99721
99826
  * Returns the currently configured tmp dir from os.tmpdir().
99722
99827
  *
99723
99828
  * @private
99724
- * @param {?Options} options
99725
- * @returns {string} the currently configured tmp dir
99726
99829
  */
99727
- function _getTmpDir(options) {
99728
- return path.resolve(options && options.tmpdir || os.tmpdir());
99830
+ function _getTmpDir(options, cb) {
99831
+ return fs.realpath(options && options.tmpdir || os.tmpdir(), cb);
99832
+ }
99833
+
99834
+ /**
99835
+ * Returns the currently configured tmp dir from os.tmpdir().
99836
+ *
99837
+ * @private
99838
+ */
99839
+ function _getTmpDirSync(options) {
99840
+ return fs.realpathSync(options && options.tmpdir || os.tmpdir());
99729
99841
  }
99730
99842
 
99731
99843
  // Install process exit listener
@@ -99826,7 +99938,7 @@ ${XMLNS_NAMESPACE}.`);
99826
99938
  enumerable: true,
99827
99939
  configurable: false,
99828
99940
  get: function () {
99829
- return _getTmpDir();
99941
+ return _getTmpDirSync();
99830
99942
  }
99831
99943
  });
99832
99944
  module.exports.dir = dir;
@@ -101244,6 +101356,881 @@ ${recordsStr}
101244
101356
  }
101245
101357
  }
101246
101358
 
101359
+ function encodeCellAddress(col, row) {
101360
+ let s = '';
101361
+ for (let column = col + 1; column > 0; column = Math.floor((column - 1) / 26)) {
101362
+ s = String.fromCharCode(((column - 1) % 26) + 65) + s;
101363
+ }
101364
+ return s + (row + 1);
101365
+ }
101366
+
101367
+ function colorStringToRGB(colorString) {
101368
+ if (!colorString) {
101369
+ return [0, 0, 0];
101370
+ }
101371
+ if (colorString.startsWith('#')) {
101372
+ let hex = colorString.substring(1);
101373
+ if (hex.length === 3) {
101374
+ hex = hex.replace(/(.)/g, '$1$1');
101375
+ }
101376
+ const r = parseInt(hex.substring(0, 2), 16);
101377
+ const g = parseInt(hex.substring(2, 4), 16);
101378
+ const b = parseInt(hex.substring(4, 6), 16);
101379
+ return [r, g, b];
101380
+ }
101381
+ else if (colorString.startsWith('rgb(')) {
101382
+ const values = colorString
101383
+ .substring(4, colorString.length - 1)
101384
+ .split(',')
101385
+ .map(Number);
101386
+ return values;
101387
+ }
101388
+ else if (colorString.startsWith('rgba(')) {
101389
+ const values = colorString
101390
+ .substring(5, colorString.length - 1)
101391
+ .split(',')
101392
+ .map(Number);
101393
+ return values;
101394
+ }
101395
+ else if (isNumber$3(DEFAULT_COLORS[colorString])) {
101396
+ return rgb(DEFAULT_COLORS[colorString]);
101397
+ }
101398
+ else if (isNumber$3(DEFAULT_COLORS_OPACITY[colorString])) {
101399
+ return rgba(DEFAULT_COLORS_OPACITY[colorString]);
101400
+ }
101401
+ throw new Error('Unsupported color format');
101402
+ }
101403
+ function rgbaToHex(rgbaArray) {
101404
+ if (rgbaArray.length === 3) {
101405
+ rgbaArray.push(1);
101406
+ }
101407
+ if (rgbaArray.length !== 4) {
101408
+ throw new Error('Invalid RGBA array');
101409
+ }
101410
+ const [r, g, b, a] = rgbaArray.map(Math.round);
101411
+ const alphaHex = Math.round(a * 255)
101412
+ .toString(16)
101413
+ .padStart(2, '0');
101414
+ return `${alphaHex}${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b
101415
+ .toString(16)
101416
+ .padStart(2, '0')}`;
101417
+ }
101418
+ function rgb(value) {
101419
+ return [value >> 16, (value >> 8) & 0xff, value & 0xff, 1];
101420
+ }
101421
+ function rgba(value) {
101422
+ return [
101423
+ value >>> 24,
101424
+ (value >>> 16) & 0xff,
101425
+ (value >>> 8) & 0xff,
101426
+ value & 0xff
101427
+ ];
101428
+ }
101429
+ const DEFAULT_COLORS_OPACITY = {
101430
+ transparent: 0xffffff00
101431
+ };
101432
+ const DEFAULT_COLORS = {
101433
+ aliceblue: 0xf0f8ff,
101434
+ antiquewhite: 0xfaebd7,
101435
+ aqua: 0x00ffff,
101436
+ aquamarine: 0x7fffd4,
101437
+ azure: 0xf0ffff,
101438
+ beige: 0xf5f5dc,
101439
+ bisque: 0xffe4c4,
101440
+ black: 0x000000,
101441
+ blanchedalmond: 0xffebcd,
101442
+ blue: 0x0000ff,
101443
+ blueviolet: 0x8a2be2,
101444
+ brown: 0xa52a2a,
101445
+ burlywood: 0xdeb887,
101446
+ cadetblue: 0x5f9ea0,
101447
+ chartreuse: 0x7fff00,
101448
+ chocolate: 0xd2691e,
101449
+ coral: 0xff7f50,
101450
+ cornflowerblue: 0x6495ed,
101451
+ cornsilk: 0xfff8dc,
101452
+ crimson: 0xdc143c,
101453
+ cyan: 0x00ffff,
101454
+ darkblue: 0x00008b,
101455
+ darkcyan: 0x008b8b,
101456
+ darkgoldenrod: 0xb8860b,
101457
+ darkgray: 0xa9a9a9,
101458
+ darkgreen: 0x006400,
101459
+ darkgrey: 0xa9a9a9,
101460
+ darkkhaki: 0xbdb76b,
101461
+ darkmagenta: 0x8b008b,
101462
+ darkolivegreen: 0x556b2f,
101463
+ darkorange: 0xff8c00,
101464
+ darkorchid: 0x9932cc,
101465
+ darkred: 0x8b0000,
101466
+ darksalmon: 0xe9967a,
101467
+ darkseagreen: 0x8fbc8f,
101468
+ darkslateblue: 0x483d8b,
101469
+ darkslategray: 0x2f4f4f,
101470
+ darkslategrey: 0x2f4f4f,
101471
+ darkturquoise: 0x00ced1,
101472
+ darkviolet: 0x9400d3,
101473
+ deeppink: 0xff1493,
101474
+ deepskyblue: 0x00bfff,
101475
+ dimgray: 0x696969,
101476
+ dimgrey: 0x696969,
101477
+ dodgerblue: 0x1e90ff,
101478
+ firebrick: 0xb22222,
101479
+ floralwhite: 0xfffaf0,
101480
+ forestgreen: 0x228b22,
101481
+ fuchsia: 0xff00ff,
101482
+ gainsboro: 0xdcdcdc,
101483
+ ghostwhite: 0xf8f8ff,
101484
+ gold: 0xffd700,
101485
+ goldenrod: 0xdaa520,
101486
+ gray: 0x808080,
101487
+ green: 0x008000,
101488
+ greenyellow: 0xadff2f,
101489
+ grey: 0x808080,
101490
+ honeydew: 0xf0fff0,
101491
+ hotpink: 0xff69b4,
101492
+ indianred: 0xcd5c5c,
101493
+ indigo: 0x4b0082,
101494
+ ivory: 0xfffff0,
101495
+ khaki: 0xf0e68c,
101496
+ lavender: 0xe6e6fa,
101497
+ lavenderblush: 0xfff0f5,
101498
+ lawngreen: 0x7cfc00,
101499
+ lemonchiffon: 0xfffacd,
101500
+ lightblue: 0xadd8e6,
101501
+ lightcoral: 0xf08080,
101502
+ lightcyan: 0xe0ffff,
101503
+ lightgoldenrodyellow: 0xfafad2,
101504
+ lightgray: 0xd3d3d3,
101505
+ lightgreen: 0x90ee90,
101506
+ lightgrey: 0xd3d3d3,
101507
+ lightpink: 0xffb6c1,
101508
+ lightsalmon: 0xffa07a,
101509
+ lightseagreen: 0x20b2aa,
101510
+ lightskyblue: 0x87cefa,
101511
+ lightslategray: 0x778899,
101512
+ lightslategrey: 0x778899,
101513
+ lightsteelblue: 0xb0c4de,
101514
+ lightyellow: 0xffffe0,
101515
+ lime: 0x00ff00,
101516
+ limegreen: 0x32cd32,
101517
+ linen: 0xfaf0e6,
101518
+ magenta: 0xff00ff,
101519
+ maroon: 0x800000,
101520
+ mediumaquamarine: 0x66cdaa,
101521
+ mediumblue: 0x0000cd,
101522
+ mediumorchid: 0xba55d3,
101523
+ mediumpurple: 0x9370db,
101524
+ mediumseagreen: 0x3cb371,
101525
+ mediumslateblue: 0x7b68ee,
101526
+ mediumspringgreen: 0x00fa9a,
101527
+ mediumturquoise: 0x48d1cc,
101528
+ mediumvioletred: 0xc71585,
101529
+ midnightblue: 0x191970,
101530
+ mintcream: 0xf5fffa,
101531
+ mistyrose: 0xffe4e1,
101532
+ moccasin: 0xffe4b5,
101533
+ navajowhite: 0xffdead,
101534
+ navy: 0x000080,
101535
+ oldlace: 0xfdf5e6,
101536
+ olive: 0x808000,
101537
+ olivedrab: 0x6b8e23,
101538
+ orange: 0xffa500,
101539
+ orangered: 0xff4500,
101540
+ orchid: 0xda70d6,
101541
+ palegoldenrod: 0xeee8aa,
101542
+ palegreen: 0x98fb98,
101543
+ paleturquoise: 0xafeeee,
101544
+ palevioletred: 0xdb7093,
101545
+ papayawhip: 0xffefd5,
101546
+ peachpuff: 0xffdab9,
101547
+ peru: 0xcd853f,
101548
+ pink: 0xffc0cb,
101549
+ plum: 0xdda0dd,
101550
+ powderblue: 0xb0e0e6,
101551
+ purple: 0x800080,
101552
+ rebeccapurple: 0x663399,
101553
+ red: 0xff0000,
101554
+ rosybrown: 0xbc8f8f,
101555
+ royalblue: 0x4169e1,
101556
+ saddlebrown: 0x8b4513,
101557
+ salmon: 0xfa8072,
101558
+ sandybrown: 0xf4a460,
101559
+ seagreen: 0x2e8b57,
101560
+ seashell: 0xfff5ee,
101561
+ sienna: 0xa0522d,
101562
+ silver: 0xc0c0c0,
101563
+ skyblue: 0x87ceeb,
101564
+ slateblue: 0x6a5acd,
101565
+ slategray: 0x708090,
101566
+ slategrey: 0x708090,
101567
+ snow: 0xfffafa,
101568
+ springgreen: 0x00ff7f,
101569
+ steelblue: 0x4682b4,
101570
+ tan: 0xd2b48c,
101571
+ teal: 0x008080,
101572
+ thistle: 0xd8bfd8,
101573
+ tomato: 0xff6347,
101574
+ turquoise: 0x40e0d0,
101575
+ violet: 0xee82ee,
101576
+ wheat: 0xf5deb3,
101577
+ white: 0xffffff,
101578
+ whitesmoke: 0xf5f5f5,
101579
+ yellow: 0xffff00,
101580
+ yellowgreen: 0x9acd32
101581
+ };
101582
+
101583
+ function getCellFont(cellStyle, cellType) {
101584
+ return {
101585
+ name: getFirstFontFromFontFamily(cellStyle.fontFamily) || 'Arial',
101586
+ size: cellStyle.fontSize || 10,
101587
+ bold: isFontBold(cellStyle.fontWeight),
101588
+ italic: cellStyle.fontStyle === 'italic',
101589
+ color: getColor(cellType === 'link' ? cellStyle._linkColor : cellStyle.color),
101590
+ underline: cellStyle.underline
101591
+ };
101592
+ }
101593
+ function isFontBold(fontWeight) {
101594
+ if (typeof fontWeight === 'number') {
101595
+ return fontWeight >= 600;
101596
+ }
101597
+ if (Number(fontWeight) >= 600) {
101598
+ return true;
101599
+ }
101600
+ return fontWeight === 'bold';
101601
+ }
101602
+ function getFirstFontFromFontFamily(fontFamily) {
101603
+ const fonts = fontFamily.split(',').map(font => font.trim());
101604
+ return fonts[0];
101605
+ }
101606
+ function getCellFill(cellStyle) {
101607
+ return {
101608
+ type: 'pattern',
101609
+ pattern: 'solid',
101610
+ fgColor: getColor(cellStyle.bgColor)
101611
+ };
101612
+ }
101613
+ function getCellBorder(cellStyle) {
101614
+ const { borderColor, borderLineWidth, borderLineDash, _strokeArrayWidth, _strokeArrayColor } = cellStyle;
101615
+ if (_strokeArrayColor || _strokeArrayWidth) {
101616
+ const border = {};
101617
+ if (!((_strokeArrayColor && !_strokeArrayColor[0]) || (_strokeArrayWidth && !_strokeArrayWidth[0]))) {
101618
+ border.top = {
101619
+ style: getBorderStyle(_strokeArrayWidth?.[0] ?? borderLineWidth, borderLineDash),
101620
+ color: getColor(_strokeArrayColor?.[0] ?? borderColor)
101621
+ };
101622
+ }
101623
+ if (!((_strokeArrayColor && !_strokeArrayColor[1]) || (_strokeArrayWidth && !_strokeArrayWidth[1]))) {
101624
+ border.right = {
101625
+ style: getBorderStyle(_strokeArrayWidth?.[1] ?? borderLineWidth, borderLineDash),
101626
+ color: getColor(_strokeArrayColor?.[1] ?? borderColor)
101627
+ };
101628
+ }
101629
+ if (!((_strokeArrayColor && !_strokeArrayColor[2]) || (_strokeArrayWidth && !_strokeArrayWidth[2]))) {
101630
+ border.bottom = {
101631
+ style: getBorderStyle(_strokeArrayWidth?.[2] ?? borderLineWidth, borderLineDash),
101632
+ color: getColor(_strokeArrayColor?.[2] ?? borderColor)
101633
+ };
101634
+ }
101635
+ if (!((_strokeArrayColor && !_strokeArrayColor[3]) || (_strokeArrayWidth && !_strokeArrayWidth[3]))) {
101636
+ border.left = {
101637
+ style: getBorderStyle(_strokeArrayWidth?.[3] ?? borderLineWidth, borderLineDash),
101638
+ color: getColor(_strokeArrayColor?.[3] ?? borderColor)
101639
+ };
101640
+ }
101641
+ return border;
101642
+ }
101643
+ if (borderLineWidth === 0) {
101644
+ return {};
101645
+ }
101646
+ const border = {
101647
+ style: getBorderStyle(borderLineWidth, borderLineDash),
101648
+ color: getColor(borderColor)
101649
+ };
101650
+ return {
101651
+ top: border,
101652
+ left: border,
101653
+ bottom: border,
101654
+ right: border
101655
+ };
101656
+ }
101657
+ function getBorderStyle(lineWidth, borderLineDash) {
101658
+ if (borderLineDash && borderLineDash.length) {
101659
+ if (lineWidth <= 2) {
101660
+ return 'dashed';
101661
+ }
101662
+ return 'mediumDashed';
101663
+ }
101664
+ if (lineWidth <= 0.5) {
101665
+ return 'hair';
101666
+ }
101667
+ else if (lineWidth <= 1) {
101668
+ return 'thin';
101669
+ }
101670
+ else if (lineWidth <= 2) {
101671
+ return 'medium';
101672
+ }
101673
+ return 'thick';
101674
+ }
101675
+ function getCellAlignment(cellStyle, indent) {
101676
+ return {
101677
+ horizontal: cellStyle.textAlign || 'left',
101678
+ vertical: cellStyle.textBaseline || 'middle',
101679
+ wrapText: cellStyle.autoWrapText || false,
101680
+ indent: indent || 0
101681
+ };
101682
+ }
101683
+ function getColor(color) {
101684
+ return {
101685
+ argb: rgbaToHex(colorStringToRGB(color))
101686
+ };
101687
+ }
101688
+
101689
+ function getHierarchyOffset(col, row, table) {
101690
+ let cellHierarchyIndent = 0;
101691
+ const layoutMap = table.internalProps.layoutMap;
101692
+ if (layoutMap.isHeader(col, row)) {
101693
+ const hd = layoutMap.getHeader(col, row);
101694
+ if (isValid$1(hd?.hierarchyLevel)) {
101695
+ cellHierarchyIndent = (hd.hierarchyLevel ?? 0) * (layoutMap.rowHierarchyIndent ?? 0);
101696
+ }
101697
+ }
101698
+ else {
101699
+ const define = table.getBodyColumnDefine(col, row);
101700
+ if (define?.tree) {
101701
+ const indexArr = table.dataSource.getIndexKey(table.getRecordShowIndexByCell(col, row));
101702
+ cellHierarchyIndent =
101703
+ Array.isArray(indexArr) && table.getHierarchyState(col, row) !== 'none'
101704
+ ? (indexArr.length - 1) * (layoutMap.hierarchyIndent ?? 0)
101705
+ : 0;
101706
+ }
101707
+ }
101708
+ return cellHierarchyIndent;
101709
+ }
101710
+
101711
+ function isPromise(obj) {
101712
+ return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
101713
+ }
101714
+
101715
+ function handlePaginationExport(table, exportAllData) {
101716
+ const pagination = cloneDeep(table.pagination);
101717
+ const isPivot = table.isPivotTable();
101718
+ const layoutMap = table.internalProps.layoutMap;
101719
+ let maxRow = table.rowCount - 1;
101720
+ const handleRowCount = () => {
101721
+ if (exportAllData) {
101722
+ if (pagination) {
101723
+ if (isPivot) {
101724
+ table.internalProps.layoutMap.setPagination(undefined);
101725
+ table.refreshRowColCount();
101726
+ maxRow = table.rowCount - 1;
101727
+ }
101728
+ else {
101729
+ maxRow = table.recordsCount * layoutMap.bodyRowSpanCount + layoutMap.headerLevelCount;
101730
+ }
101731
+ }
101732
+ }
101733
+ return maxRow;
101734
+ };
101735
+ const reset = () => {
101736
+ if (isPivot && exportAllData && pagination) {
101737
+ table.internalProps.layoutMap.setPagination(pagination);
101738
+ table.refreshRowColCount();
101739
+ }
101740
+ };
101741
+ return {
101742
+ reset,
101743
+ handleRowCount
101744
+ };
101745
+ }
101746
+
101747
+ function requestIdleCallbackPromise(options) {
101748
+ return new Promise(resolve => {
101749
+ requestIdleCallback(deadline => {
101750
+ resolve(deadline);
101751
+ }, options);
101752
+ });
101753
+ }
101754
+ async function exportVTableToExcel(tableInstance, options, optimization = false) {
101755
+ const workbook = new ExcelJS.Workbook();
101756
+ const worksheet = workbook.addWorksheet('sheet1');
101757
+ const exportAllData = !!options?.exportAllData;
101758
+ const { handleRowCount, reset } = handlePaginationExport(tableInstance, exportAllData);
101759
+ const minRow = 0;
101760
+ const maxRow = handleRowCount();
101761
+ const minCol = 0;
101762
+ const maxCol = tableInstance.colCount - 1;
101763
+ worksheet.properties.defaultRowHeight = 40;
101764
+ const columns = [];
101765
+ const mergeCells = [];
101766
+ const mergeCellSet = new Set();
101767
+ const SLICE_SIZE = 100;
101768
+ let currentRow = minRow;
101769
+ function processSlice(deadline) {
101770
+ return new Promise(async (resolve) => {
101771
+ while (currentRow <= maxRow && (!optimization || deadline?.timeRemaining() > 0)) {
101772
+ const endRow = Math.min(currentRow + SLICE_SIZE - 1, maxRow);
101773
+ for (let col = minCol; col <= maxCol; col++) {
101774
+ const colWidth = tableInstance.getColWidth(col);
101775
+ if (columns[col] === undefined) {
101776
+ columns[col] = { width: colWidth / 6 };
101777
+ }
101778
+ for (let row = currentRow; row <= endRow; row++) {
101779
+ if (col === minCol) {
101780
+ const rowHeight = tableInstance.getRowHeight(row);
101781
+ const worksheetRow = worksheet.getRow(row + 1);
101782
+ worksheetRow.height = rowHeight;
101783
+ }
101784
+ await addCell(col, row, tableInstance, worksheet, workbook, options);
101785
+ const cellRange = tableInstance.getCellRange(col, row);
101786
+ if (cellRange.start.col !== cellRange.end.col || cellRange.start.row !== cellRange.end.row) {
101787
+ const key = `${cellRange.start.col},${cellRange.start.row}:${cellRange.end.col},${cellRange.end.row}`;
101788
+ if (!mergeCellSet.has(key)) {
101789
+ mergeCellSet.add(key);
101790
+ mergeCells.push(cellRange);
101791
+ }
101792
+ }
101793
+ }
101794
+ }
101795
+ currentRow = endRow + 1;
101796
+ }
101797
+ if (currentRow > maxRow) {
101798
+ resolve();
101799
+ }
101800
+ else {
101801
+ let nextDeadline;
101802
+ if (optimization) {
101803
+ nextDeadline = await requestIdleCallbackPromise();
101804
+ }
101805
+ await processSlice(nextDeadline);
101806
+ resolve();
101807
+ }
101808
+ });
101809
+ }
101810
+ await new Promise(async (resolve) => {
101811
+ let deadline;
101812
+ if (optimization) {
101813
+ deadline = await requestIdleCallbackPromise();
101814
+ }
101815
+ await processSlice(deadline);
101816
+ resolve();
101817
+ });
101818
+ worksheet.columns = columns;
101819
+ mergeCells.forEach(mergeCell => {
101820
+ worksheet.mergeCells(mergeCell.start.row + 1, mergeCell.start.col + 1, mergeCell.end.row + 1, mergeCell.end.col + 1);
101821
+ });
101822
+ const frozenView = [];
101823
+ if (tableInstance.frozenRowCount > 0) {
101824
+ frozenView.push({
101825
+ state: 'frozen',
101826
+ ySplit: tableInstance.frozenRowCount,
101827
+ topLeftCell: encodeCellAddress(0, tableInstance.frozenRowCount)
101828
+ });
101829
+ }
101830
+ if (tableInstance.frozenColCount > 0) {
101831
+ frozenView.push({
101832
+ state: 'frozen',
101833
+ xSplit: tableInstance.frozenColCount,
101834
+ topLeftCell: encodeCellAddress(tableInstance.frozenColCount, 0)
101835
+ });
101836
+ }
101837
+ worksheet.views = frozenView;
101838
+ if (options?.excelJSWorksheetCallback) {
101839
+ options.excelJSWorksheetCallback(worksheet);
101840
+ }
101841
+ const buffer = await workbook.xlsx.writeBuffer();
101842
+ reset();
101843
+ return buffer;
101844
+ }
101845
+ async function addCell(col, row, tableInstance, worksheet, workbook, options) {
101846
+ const { layoutMap } = tableInstance.internalProps;
101847
+ const cellType = tableInstance.getCellType(col, row);
101848
+ const rawRecord = tableInstance.getCellRawRecord(col, row);
101849
+ let cellValue = (rawRecord && rawRecord.vtableMergeName) ?? tableInstance.getCellValue(col, row, false);
101850
+ if (isPromise(cellValue)) {
101851
+ cellValue = await cellValue;
101852
+ }
101853
+ const cellStyle = tableInstance.getCellStyle(col, row);
101854
+ const cellLocation = tableInstance.getCellLocation(col, row);
101855
+ const define = cellLocation !== 'body' ? tableInstance.getHeaderDefine(col, row) : tableInstance.getBodyColumnDefine(col, row);
101856
+ const mayHaveIcon = cellLocation !== 'body'
101857
+ ? true
101858
+ : define?.dragOrder || !!define?.icon || !!define?.tree;
101859
+ let icons;
101860
+ if (mayHaveIcon) {
101861
+ icons = tableInstance.getCellIcons(col, row);
101862
+ }
101863
+ let customRender;
101864
+ let customLayout;
101865
+ if (cellLocation !== 'body') {
101866
+ customRender = define?.headerCustomRender;
101867
+ customLayout = define?.headerCustomLayout;
101868
+ }
101869
+ else {
101870
+ customRender = define?.customRender || tableInstance.customRender;
101871
+ customLayout = define?.customLayout;
101872
+ }
101873
+ if (options?.formatExportOutput) {
101874
+ const cellInfo = { cellType, cellValue, table: tableInstance, col, row };
101875
+ const formattedValue = options.formatExportOutput(cellInfo);
101876
+ if (formattedValue !== undefined) {
101877
+ let cell = worksheet.getCell(encodeCellAddress(col, row));
101878
+ cell.value = formattedValue;
101879
+ cell.font = getCellFont(cellStyle, cellType);
101880
+ cell.fill = getCellFill(cellStyle);
101881
+ cell.border = getCellBorder(cellStyle);
101882
+ const offset = getHierarchyOffset(col, row, tableInstance);
101883
+ cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size));
101884
+ if (cell && options?.formatExcelJSCell) {
101885
+ const formatedCell = options.formatExcelJSCell({ cellType, cellValue, table: tableInstance, col, row }, cell);
101886
+ if (formatedCell) {
101887
+ cell = formatedCell;
101888
+ }
101889
+ }
101890
+ return cell;
101891
+ }
101892
+ }
101893
+ let cell;
101894
+ if (cellType === 'image' ||
101895
+ cellType === 'video' ||
101896
+ cellType === 'progressbar' ||
101897
+ cellType === 'sparkline' ||
101898
+ layoutMap.isAxisCell(col, row) ||
101899
+ (!options?.ignoreIcon && isArray$a(icons) && icons.length) ||
101900
+ customRender ||
101901
+ customLayout) {
101902
+ if (!needCellImageExport(cellType, layoutMap.isAxisCell(col, row), !!customRender || !!customLayout, !!(!options?.ignoreIcon && isArray$a(icons) && icons.length), options)) {
101903
+ cell = worksheet.getCell(encodeCellAddress(col, row));
101904
+ }
101905
+ else {
101906
+ const cellImageBase64 = exportCellImg(col, row, tableInstance);
101907
+ const imageId = workbook.addImage({
101908
+ base64: cellImageBase64,
101909
+ extension: 'png'
101910
+ });
101911
+ worksheet.addImage(imageId, {
101912
+ tl: { col: col + 1 / 80, row: row + 1 / 120 },
101913
+ br: { col: col + 1, row: row + 1 },
101914
+ editAs: 'oneCell'
101915
+ });
101916
+ }
101917
+ }
101918
+ else if (cellType === 'text' || cellType === 'link') {
101919
+ cell = worksheet.getCell(encodeCellAddress(col, row));
101920
+ let linkUrl;
101921
+ if (cellType === 'link') {
101922
+ const templateLink = define.templateLink;
101923
+ if (templateLink) {
101924
+ const rowData = tableInstance.getCellOriginRecord(col, row);
101925
+ if (rowData && rowData.vtableMerge) ;
101926
+ else {
101927
+ const cellOriginValue = tableInstance.getCellOriginValue(col, row);
101928
+ const data = Object.assign({
101929
+ __value: cellValue,
101930
+ __dataValue: cellOriginValue
101931
+ }, rowData);
101932
+ if (isFunction$a(templateLink)) {
101933
+ linkUrl = templateLink(data, col, row, tableInstance);
101934
+ }
101935
+ else {
101936
+ const re = /\{\s*(\S+?)\s*\}/g;
101937
+ linkUrl = templateLink.replace(re, (matchs, key) => {
101938
+ return data[key];
101939
+ });
101940
+ }
101941
+ }
101942
+ }
101943
+ }
101944
+ cell.value = getCellValue(cellValue, cellType, linkUrl);
101945
+ cell.font = getCellFont(cellStyle, cellType);
101946
+ cell.fill = getCellFill(cellStyle);
101947
+ cell.border = getCellBorder(cellStyle);
101948
+ const offset = getHierarchyOffset(col, row, tableInstance);
101949
+ cell.alignment = getCellAlignment(cellStyle, Math.ceil(offset / cell.font.size));
101950
+ }
101951
+ else if (cellType === 'chart') {
101952
+ if (!needCellImageExport('chart', false, false, false, options)) {
101953
+ cell = worksheet.getCell(encodeCellAddress(col, row));
101954
+ }
101955
+ else {
101956
+ const cellGroup = tableInstance.scenegraph.getCell(col, row);
101957
+ VTable.renderChart(cellGroup.firstChild);
101958
+ const cellImageBase64 = exportCellImg(col, row, tableInstance);
101959
+ const imageId = workbook.addImage({
101960
+ base64: cellImageBase64,
101961
+ extension: 'png'
101962
+ });
101963
+ worksheet.addImage(imageId, {
101964
+ tl: { col: col + 1 / 80, row: row + 1 / 120 },
101965
+ br: { col: col + 1, row: row + 1 },
101966
+ editAs: 'oneCell'
101967
+ });
101968
+ tableInstance.scenegraph.updateNextFrame();
101969
+ }
101970
+ }
101971
+ if (cell && options?.formatExcelJSCell) {
101972
+ const formatedCell = options.formatExcelJSCell({ cellType, cellValue, table: tableInstance, col, row }, cell);
101973
+ if (formatedCell) {
101974
+ cell = formatedCell;
101975
+ }
101976
+ }
101977
+ return cell;
101978
+ }
101979
+ function getCellValue(cellValue, cellType, linkUrl) {
101980
+ if (cellType === 'link') {
101981
+ return {
101982
+ text: cellValue,
101983
+ hyperlink: linkUrl || cellValue,
101984
+ tooltip: cellValue
101985
+ };
101986
+ }
101987
+ return cellValue;
101988
+ }
101989
+ function exportCellImg(col, row, tableInstance) {
101990
+ let cellGroup = tableInstance.scenegraph.getCell(col, row);
101991
+ let needRemove = false;
101992
+ if (cellGroup.role === 'empty') {
101993
+ cellGroup = VTable.updateCell(col, row, tableInstance, true);
101994
+ cellGroup.setStage(tableInstance.scenegraph.stage);
101995
+ needRemove = true;
101996
+ cellGroup.stage.dirtyBounds.set(-Infinity, -Infinity, Infinity, Infinity);
101997
+ }
101998
+ const oldStroke = cellGroup.attribute.stroke;
101999
+ cellGroup.attribute.stroke = false;
102000
+ const canvas = VTable.graphicUtil.drawGraphicToCanvas(cellGroup, tableInstance.scenegraph.stage);
102001
+ cellGroup.attribute.stroke = oldStroke;
102002
+ if (needRemove) {
102003
+ cellGroup.parent?.removeChild(cellGroup);
102004
+ }
102005
+ return canvas.toDataURL();
102006
+ }
102007
+ function needCellImageExport(cellType, isAxisCell, isCustomCell, isTextWithIcon, options) {
102008
+ if (!options?.skipImageExportCellType) {
102009
+ return true;
102010
+ }
102011
+ if (cellType === 'image' ||
102012
+ cellType === 'video' ||
102013
+ cellType === 'progressbar' ||
102014
+ cellType === 'sparkline' ||
102015
+ cellType === 'chart') {
102016
+ return !options.skipImageExportCellType.includes(cellType);
102017
+ }
102018
+ else if (isAxisCell) {
102019
+ return !options.skipImageExportCellType.includes('chart');
102020
+ }
102021
+ else if (isCustomCell) {
102022
+ return !options.skipImageExportCellType.includes('custom');
102023
+ }
102024
+ else if (isTextWithIcon) {
102025
+ return !options.skipImageExportCellType.includes('textWithIcon');
102026
+ }
102027
+ return true;
102028
+ }
102029
+
102030
+ const newLine = '\r\n';
102031
+ const separator = ',';
102032
+ function exportVTableToCsv(tableInstance, option) {
102033
+ const exportAllData = !!option?.exportAllData;
102034
+ const { handleRowCount, reset } = handlePaginationExport(tableInstance, exportAllData);
102035
+ const minRow = 0;
102036
+ const maxRow = handleRowCount();
102037
+ const minCol = 0;
102038
+ const maxCol = tableInstance.colCount - 1;
102039
+ let copyValue = '';
102040
+ for (let row = minRow; row <= maxRow; row++) {
102041
+ for (let col = minCol; col <= maxCol; col++) {
102042
+ const copyCellValue = getCopyCellValue(col, row, tableInstance, option);
102043
+ if (typeof Promise !== 'undefined' && copyCellValue instanceof Promise) ;
102044
+ else {
102045
+ const strCellValue = `${copyCellValue}`;
102046
+ if (/^\[object .*\]$/.exec(strCellValue)) ;
102047
+ else {
102048
+ copyValue += strCellValue;
102049
+ }
102050
+ }
102051
+ copyValue += separator;
102052
+ }
102053
+ copyValue += newLine;
102054
+ }
102055
+ reset();
102056
+ return copyValue;
102057
+ }
102058
+ function getCopyCellValue(col, row, tableInstance, option) {
102059
+ const rawRecord = tableInstance.getCellRawRecord(col, row);
102060
+ const cellValue = (rawRecord && rawRecord.vtableMergeName) ?? tableInstance.getCellValue(col, row, false);
102061
+ if (option?.formatExportOutput) {
102062
+ const cellType = tableInstance.getCellType(col, row);
102063
+ const cellInfo = { cellType, cellValue, table: tableInstance, col, row };
102064
+ const formattedValue = option.formatExportOutput(cellInfo);
102065
+ if (formattedValue !== undefined) {
102066
+ if (typeof formattedValue === 'string') {
102067
+ return '"' + formattedValue + '"';
102068
+ }
102069
+ return formattedValue;
102070
+ }
102071
+ }
102072
+ const cellRange = tableInstance.getCellRange(col, row);
102073
+ const copyStartCol = cellRange.start.col;
102074
+ const copyStartRow = cellRange.start.row;
102075
+ if (copyStartCol !== col || copyStartRow !== row) {
102076
+ return '';
102077
+ }
102078
+ let value = cellValue;
102079
+ if (option?.escape) {
102080
+ value = escapeForCSV(value);
102081
+ }
102082
+ else if (typeof value === 'string') {
102083
+ value = '"' + value + '"';
102084
+ }
102085
+ return value;
102086
+ }
102087
+ function escapeForCSV(str) {
102088
+ if (typeof str !== 'string') {
102089
+ return str;
102090
+ }
102091
+ let escapedStr = str.replace(/"/g, '""');
102092
+ if (/[,"\r\n]/.test(escapedStr)) {
102093
+ escapedStr = `"${escapedStr}"`;
102094
+ }
102095
+ return escapedStr;
102096
+ }
102097
+
102098
+ var FileSaver_min = {exports: {}};
102099
+
102100
+ (function (module, exports) {
102101
+ (function (a, b) {
102102
+ b();
102103
+ })(commonjsGlobal, function () {
102104
+
102105
+ function b(a, b) {
102106
+ return "undefined" == typeof b ? b = {
102107
+ autoBom: !1
102108
+ } : "object" != typeof b && (b = {
102109
+ autoBom: !b
102110
+ }), b.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type) ? new Blob(["\uFEFF", a], {
102111
+ type: a.type
102112
+ }) : a;
102113
+ }
102114
+ function c(a, b, c) {
102115
+ var d = new XMLHttpRequest();
102116
+ d.open("GET", a), d.responseType = "blob", d.onload = function () {
102117
+ g(d.response, b, c);
102118
+ }, d.onerror = function () {
102119
+ }, d.send();
102120
+ }
102121
+ function d(a) {
102122
+ var b = new XMLHttpRequest();
102123
+ b.open("HEAD", a, !1);
102124
+ try {
102125
+ b.send();
102126
+ } catch (a) {}
102127
+ return 200 <= b.status && 299 >= b.status;
102128
+ }
102129
+ function e(a) {
102130
+ try {
102131
+ a.dispatchEvent(new MouseEvent("click"));
102132
+ } catch (c) {
102133
+ var b = document.createEvent("MouseEvents");
102134
+ b.initMouseEvent("click", !0, !0, window, 0, 0, 0, 80, 20, !1, !1, !1, !1, 0, null), a.dispatchEvent(b);
102135
+ }
102136
+ }
102137
+ var f = "object" == typeof window && window.window === window ? window : "object" == typeof self && self.self === self ? self : "object" == typeof commonjsGlobal && commonjsGlobal.global === commonjsGlobal ? commonjsGlobal : void 0,
102138
+ a = f.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent),
102139
+ g = f.saveAs || ("object" != typeof window || window !== f ? function () {} : "download" in HTMLAnchorElement.prototype && !a ? function (b, g, h) {
102140
+ var i = f.URL || f.webkitURL,
102141
+ j = document.createElement("a");
102142
+ g = g || b.name || "download", j.download = g, j.rel = "noopener", "string" == typeof b ? (j.href = b, j.origin === location.origin ? e(j) : d(j.href) ? c(b, g, h) : e(j, j.target = "_blank")) : (j.href = i.createObjectURL(b), setTimeout(function () {
102143
+ i.revokeObjectURL(j.href);
102144
+ }, 4E4), setTimeout(function () {
102145
+ e(j);
102146
+ }, 0));
102147
+ } : "msSaveOrOpenBlob" in navigator ? function (f, g, h) {
102148
+ if (g = g || f.name || "download", "string" != typeof f) navigator.msSaveOrOpenBlob(b(f, h), g);else if (d(f)) c(f, g, h);else {
102149
+ var i = document.createElement("a");
102150
+ i.href = f, i.target = "_blank", setTimeout(function () {
102151
+ e(i);
102152
+ });
102153
+ }
102154
+ } : function (b, d, e, g) {
102155
+ if (g = g || open("", "_blank"), g && (g.document.title = g.document.body.innerText = "downloading..."), "string" == typeof b) return c(b, d, e);
102156
+ var h = "application/octet-stream" === b.type,
102157
+ i = /constructor/i.test(f.HTMLElement) || f.safari,
102158
+ j = /CriOS\/[\d]+/.test(navigator.userAgent);
102159
+ if ((j || h && i || a) && "undefined" != typeof FileReader) {
102160
+ var k = new FileReader();
102161
+ k.onloadend = function () {
102162
+ var a = k.result;
102163
+ a = j ? a : a.replace(/^data:[^;]*;/, "data:attachment/file;"), g ? g.location.href = a : location = a, g = null;
102164
+ }, k.readAsDataURL(b);
102165
+ } else {
102166
+ var l = f.URL || f.webkitURL,
102167
+ m = l.createObjectURL(b);
102168
+ g ? g.location = m : location.href = m, g = null, setTimeout(function () {
102169
+ l.revokeObjectURL(m);
102170
+ }, 4E4);
102171
+ }
102172
+ });
102173
+ f.saveAs = g.saveAs = g, (module.exports = g);
102174
+ });
102175
+ })(FileSaver_min);
102176
+ var FileSaver_minExports = FileSaver_min.exports;
102177
+
102178
+ async function downloadCsv(str, name) {
102179
+ const blob = new Blob([`\ufeff${str}`], {
102180
+ type: 'text/csv;charset=utf-8'
102181
+ });
102182
+ await FileSaver_minExports.saveAs(blob, `${name}.csv`);
102183
+ }
102184
+ async function downloadExcel(arrayBuffer, name) {
102185
+ const blob = new Blob([arrayBuffer], {
102186
+ type: 'application/octet-stream'
102187
+ });
102188
+ await FileSaver_minExports.saveAs(blob, `${name}.xlsx`);
102189
+ }
102190
+
102191
+ class TableExportPlugin {
102192
+ id = 'table-export-plugin';
102193
+ name = 'TableExport';
102194
+ runTime = [VTable__namespace.TABLE_EVENT_TYPE.INITIALIZED];
102195
+ table;
102196
+ pluginOptions;
102197
+ constructor(pluginOptions) {
102198
+ this.pluginOptions = Object.assign({
102199
+ exportOnIdle: false,
102200
+ exportExcelOptions: { downloadFile: true, fileName: 'export' },
102201
+ exportCsvOptions: { downloadFile: true, fileName: 'export' }
102202
+ }, pluginOptions);
102203
+ }
102204
+ run(...args) {
102205
+ const runTime = args[1];
102206
+ if (runTime === VTable__namespace.TABLE_EVENT_TYPE.INITIALIZED) {
102207
+ args[0];
102208
+ this.table = args[2];
102209
+ this.table.exportToCsv = () => {
102210
+ const options = this.pluginOptions.exportCsvOptions;
102211
+ if (options.downloadFile) {
102212
+ return downloadCsv(exportVTableToCsv(this.table, options), options.fileName || 'export');
102213
+ }
102214
+ return exportVTableToCsv(this.table, options);
102215
+ };
102216
+ this.table.exportToExcel = async () => {
102217
+ const options = this.pluginOptions.exportExcelOptions;
102218
+ if (options.downloadFile) {
102219
+ return await downloadExcel((await exportVTableToExcel(this.table, options, this.pluginOptions.exportOnIdle)), options.fileName || 'export');
102220
+ }
102221
+ return exportVTableToExcel(this.table, options, this.pluginOptions.exportOnIdle);
102222
+ };
102223
+ }
102224
+ }
102225
+ release() {
102226
+ if (this.table) {
102227
+ delete this.table.exportToCsv;
102228
+ delete this.table.exportToExcel;
102229
+ this.table = null;
102230
+ }
102231
+ }
102232
+ }
102233
+
101247
102234
  exports.AddRowColumnPlugin = AddRowColumnPlugin;
101248
102235
  exports.CarouselAnimationPlugin = CarouselAnimationPlugin;
101249
102236
  exports.ColumnSeriesPlugin = ColumnSeriesPlugin;
@@ -101258,6 +102245,7 @@ ${recordsStr}
101258
102245
  exports.RotateTablePlugin = RotateTablePlugin;
101259
102246
  exports.RowSeriesPlugin = RowSeriesPlugin;
101260
102247
  exports.TableCarouselAnimationPlugin = TableCarouselAnimationPlugin;
102248
+ exports.TableExportPlugin = TableExportPlugin;
101261
102249
  exports.WpsFillHandlePlugin = WpsFillHandlePlugin;
101262
102250
  exports.cancelTransform = cancelTransform;
101263
102251
  exports.rotate90WithTransform = rotate90WithTransform;