@visactor/vtable 1.22.10 → 1.22.11-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/cjs/PivotChart.d.ts +1 -0
  2. package/cjs/PivotChart.js +5 -4
  3. package/cjs/PivotChart.js.map +1 -1
  4. package/cjs/core/BaseTable.js +1 -1
  5. package/cjs/core/BaseTable.js.map +1 -1
  6. package/cjs/dataset/dataset-pivot-table.js +1 -2
  7. package/cjs/edit/editors.js +2 -1
  8. package/cjs/event/listener/table-group.js +10 -6
  9. package/cjs/event/listener/table-group.js.map +1 -1
  10. package/cjs/index.d.ts +1 -1
  11. package/cjs/index.js +1 -1
  12. package/cjs/index.js.map +1 -1
  13. package/cjs/layout/index.js +2 -1
  14. package/cjs/layout/pivot-header-layout.d.ts +6 -0
  15. package/cjs/layout/pivot-header-layout.js +40 -21
  16. package/cjs/layout/pivot-header-layout.js.map +1 -1
  17. package/cjs/layout/row-height-map.js +1 -1
  18. package/cjs/layout/simple-header-layout.js +1 -1
  19. package/cjs/layout/tree-helper.js +1 -1
  20. package/cjs/plugins/custom-cell-style.js +1 -2
  21. package/cjs/plugins/interface.js +1 -1
  22. package/cjs/plugins/invert-highlight.js +1 -1
  23. package/cjs/plugins/list-tree-stick-cell.js +1 -1
  24. package/cjs/plugins/plugin-manager.js +1 -1
  25. package/cjs/scenegraph/graphic/active-cell-chart-list.d.ts +2 -0
  26. package/cjs/scenegraph/graphic/active-cell-chart-list.js +101 -43
  27. package/cjs/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
  28. package/cjs/scenegraph/graphic/chart.d.ts +8 -1
  29. package/cjs/scenegraph/graphic/chart.js +42 -18
  30. package/cjs/scenegraph/graphic/chart.js.map +1 -1
  31. package/cjs/scenegraph/graphic/contributions/chart-render.js +3 -4
  32. package/cjs/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  33. package/cjs/scenegraph/refresh-node/update-chart.d.ts +1 -1
  34. package/cjs/scenegraph/refresh-node/update-chart.js +2 -1
  35. package/cjs/scenegraph/refresh-node/update-chart.js.map +1 -1
  36. package/cjs/scenegraph/scenegraph.d.ts +2 -2
  37. package/cjs/scenegraph/scenegraph.js +14 -8
  38. package/cjs/scenegraph/scenegraph.js.map +1 -1
  39. package/cjs/tools/util.d.ts +5 -0
  40. package/cjs/tools/util.js +22 -4
  41. package/cjs/tools/util.js.map +1 -1
  42. package/cjs/ts-types/table-engine.d.ts +6 -0
  43. package/cjs/ts-types/table-engine.js.map +1 -1
  44. package/cjs/vrender.js.map +1 -1
  45. package/dist/vtable.js +390 -151
  46. package/dist/vtable.min.js +1 -1
  47. package/es/PivotChart.d.ts +1 -0
  48. package/es/PivotChart.js +5 -4
  49. package/es/PivotChart.js.map +1 -1
  50. package/es/core/BaseTable.js +1 -1
  51. package/es/core/BaseTable.js.map +1 -1
  52. package/es/dataset/dataset-pivot-table.js +1 -2
  53. package/es/edit/editors.js +2 -1
  54. package/es/event/listener/table-group.js +9 -6
  55. package/es/event/listener/table-group.js.map +1 -1
  56. package/es/index.d.ts +1 -1
  57. package/es/index.js +1 -1
  58. package/es/index.js.map +1 -1
  59. package/es/layout/index.js +2 -1
  60. package/es/layout/pivot-header-layout.d.ts +6 -0
  61. package/es/layout/pivot-header-layout.js +40 -21
  62. package/es/layout/pivot-header-layout.js.map +1 -1
  63. package/es/layout/row-height-map.js +1 -1
  64. package/es/layout/simple-header-layout.js +1 -1
  65. package/es/layout/tree-helper.js +1 -1
  66. package/es/plugins/custom-cell-style.js +1 -2
  67. package/es/plugins/interface.js +1 -1
  68. package/es/plugins/invert-highlight.js +1 -1
  69. package/es/plugins/list-tree-stick-cell.js +1 -1
  70. package/es/plugins/plugin-manager.js +1 -1
  71. package/es/scenegraph/graphic/active-cell-chart-list.d.ts +2 -0
  72. package/es/scenegraph/graphic/active-cell-chart-list.js +96 -41
  73. package/es/scenegraph/graphic/active-cell-chart-list.js.map +1 -1
  74. package/es/scenegraph/graphic/chart.d.ts +8 -1
  75. package/es/scenegraph/graphic/chart.js +42 -17
  76. package/es/scenegraph/graphic/chart.js.map +1 -1
  77. package/es/scenegraph/graphic/contributions/chart-render.js +3 -4
  78. package/es/scenegraph/graphic/contributions/chart-render.js.map +1 -1
  79. package/es/scenegraph/refresh-node/update-chart.d.ts +1 -1
  80. package/es/scenegraph/refresh-node/update-chart.js +2 -1
  81. package/es/scenegraph/refresh-node/update-chart.js.map +1 -1
  82. package/es/scenegraph/scenegraph.d.ts +2 -2
  83. package/es/scenegraph/scenegraph.js +14 -8
  84. package/es/scenegraph/scenegraph.js.map +1 -1
  85. package/es/tools/util.d.ts +5 -0
  86. package/es/tools/util.js +18 -0
  87. package/es/tools/util.js.map +1 -1
  88. package/es/ts-types/table-engine.d.ts +6 -0
  89. package/es/ts-types/table-engine.js.map +1 -1
  90. package/es/vrender.js.map +1 -1
  91. package/package.json +5 -5
@@ -22,6 +22,11 @@ export declare function transpose(matrix: Array<Array<any>>): any[];
22
22
  export declare function debounce(fn: Function, delay: number, immediate?: boolean): (this: any, ...args: any[]) => any;
23
23
  export declare function throttle(func: Function, delay: number): (this: any, ...args: any[]) => void;
24
24
  export declare function throttle2(func: Function, delay: number): (this: any, ...args: any[]) => void;
25
+ export declare function cancellableThrottle(func: Function, delay: number): {
26
+ throttled: (this: any, ...args: any[]) => void;
27
+ cancel: () => void;
28
+ flush: () => void;
29
+ };
25
30
  export declare function changeColor(color: string, ratio: number, isDarker: boolean): string;
26
31
  export declare function toFixed(n: number, fixed?: number): number;
27
32
  export declare function validToString(v: any): any;
package/cjs/tools/util.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.computeChildrenNodeLength = exports.traverseObject = exports.isDivSelected = exports.deduplication = exports.isAllDigits = exports.toBoolean = exports.hashCode = exports.isArrEqual = exports.inBound = exports.getValueByPath = exports.defaultOrderFn = exports.isMobile = exports.validToString = exports.toFixed = exports.changeColor = exports.throttle2 = exports.throttle = exports.debounce = exports.transpose = exports.convertInternal = exports.ingoreNoneValueMerge = exports.merge = exports.isGlobal = exports.isDocument = exports.isError = exports.isNull = exports.isUndefined = exports.isDate = exports.isSymbol = exports.isBoolean = exports.isRegExp = exports.isNumber = exports.isString = exports.isArray = exports.isFunction = exports.isObject = exports.isIt = exports.judgeType = void 0;
5
+ }), exports.computeChildrenNodeLength = exports.traverseObject = exports.isDivSelected = exports.deduplication = exports.isAllDigits = exports.toBoolean = exports.hashCode = exports.isArrEqual = exports.inBound = exports.getValueByPath = exports.defaultOrderFn = exports.isMobile = exports.validToString = exports.toFixed = exports.changeColor = exports.cancellableThrottle = exports.throttle2 = exports.throttle = exports.debounce = exports.transpose = exports.convertInternal = exports.ingoreNoneValueMerge = exports.merge = exports.isGlobal = exports.isDocument = exports.isError = exports.isNull = exports.isUndefined = exports.isDate = exports.isSymbol = exports.isBoolean = exports.isRegExp = exports.isNumber = exports.isString = exports.isArray = exports.isFunction = exports.isObject = exports.isIt = exports.judgeType = void 0;
6
6
 
7
7
  const vutils_1 = require("@visactor/vutils"), ts_types_1 = require("../ts-types"), judgeType = value => {
8
8
  switch (Object.prototype.toString.call(value)) {
@@ -181,6 +181,24 @@ function throttle2(func, delay) {
181
181
  };
182
182
  }
183
183
 
184
+ function cancellableThrottle(func, delay) {
185
+ let timer = null, lastArgs = null, context = null;
186
+ return {
187
+ throttled: function(...args) {
188
+ lastArgs = args, context = this, timer || (timer = setTimeout((() => {
189
+ lastArgs && func.apply(context, lastArgs), timer = null, lastArgs = null, context = null;
190
+ }), delay));
191
+ },
192
+ cancel: () => {
193
+ timer && (clearTimeout(timer), timer = null, lastArgs = null, context = null);
194
+ },
195
+ flush: () => {
196
+ timer && lastArgs && (clearTimeout(timer), func.apply(context, lastArgs), timer = null,
197
+ lastArgs = null, context = null);
198
+ }
199
+ };
200
+ }
201
+
184
202
  function pad(num, totalChars) {
185
203
  for (num = `${num}`; num.length < totalChars; ) num = "0" + num;
186
204
  return num;
@@ -223,9 +241,9 @@ function inBound({x: x, y: y}, {left: left, top: top, width: width, height: heig
223
241
 
224
242
  exports.isGlobal = isGlobal, exports.merge = merge, exports.ingoreNoneValueMerge = ingoreNoneValueMerge,
225
243
  exports.convertInternal = convertInternal, exports.transpose = transpose, exports.debounce = debounce,
226
- exports.throttle = throttle, exports.throttle2 = throttle2, exports.changeColor = changeColor,
227
- exports.toFixed = toFixed, exports.validToString = validToString, exports.isMobile = isMobile,
228
- exports.defaultOrderFn = defaultOrderFn, exports.getValueByPath = getValueByPath,
244
+ exports.throttle = throttle, exports.throttle2 = throttle2, exports.cancellableThrottle = cancellableThrottle,
245
+ exports.changeColor = changeColor, exports.toFixed = toFixed, exports.validToString = validToString,
246
+ exports.isMobile = isMobile, exports.defaultOrderFn = defaultOrderFn, exports.getValueByPath = getValueByPath,
229
247
  exports.inBound = inBound;
230
248
 
231
249
  const isArrEqual = (arr1, arr2) => arr1.length === arr2.length && arr1.every(((ele, index) => Object.is(ele, arr2[index])));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAC3C,0CAA6D;AAEtD,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;IACtC,QAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC7C,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,mBAAmB;YACtB,OAAO,UAAU,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC;QACjB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,kBAAkB;YACrB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB,KAAK,oBAAoB;YACvB,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB,KAAK,gBAAgB;YACnB,OAAO,OAAO,CAAC;QACjB,KAAK,uBAAuB;YAC1B,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;KACf;AACH,CAAC,CAAC;AAjCW,QAAA,SAAS,aAiCpB;AAEK,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,IAAY,EAAW,EAAE,CAAC,IAAA,iBAAS,EAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAAhE,QAAA,IAAI,QAA4D;AAEtE,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AACxD,MAAM,UAAU,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAAtD,QAAA,UAAU,cAA4C;AAC5D,MAAM,OAAO,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAAhD,QAAA,OAAO,WAAyC;AACtD,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AACxD,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AACxD,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AACxD,MAAM,SAAS,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAApD,QAAA,SAAS,aAA2C;AAC1D,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AACxD,MAAM,MAAM,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAA9C,QAAA,MAAM,UAAwC;AACpD,MAAM,WAAW,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAAxD,QAAA,WAAW,eAA6C;AAC9D,MAAM,MAAM,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAA9C,QAAA,MAAM,UAAwC;AACpD,MAAM,OAAO,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAAhD,QAAA,OAAO,WAAyC;AACtD,MAAM,UAAU,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAAtD,QAAA,UAAU,cAA4C;AAC5D,MAAM,QAAQ,GAAG,CAAC,CAAM,EAAW,EAAE,CAAC,IAAA,YAAI,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AAE/D,SAAgB,KAAK,CAAC,MAAW,EAAE,GAAG,OAAc;IAClD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,OAAO,MAAM,IAAI,EAAE,CAAC;KACrB;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAE/B,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAChB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC/C;gBACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACjC;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC/C;SACF;KACF;IAED,OAAO,KAAK,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAvBD,sBAuBC;AACD,SAAgB,oBAAoB,CAAC,MAAW,EAAE,GAAG,OAAc;IACjE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,OAAO,MAAM,IAAI,EAAE,CAAC;KACrB;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAE/B,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;oBAChB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,IAAA,gBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC/C;gBACD,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aAChD;iBAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;gBAC5D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC/C;SACF;KACF;IAED,OAAO,oBAAoB,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;AAClD,CAAC;AAvBD,oDAuBC;AA2DD,SAAgB,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;QAC/B,KAAK,GAAG,KAAK,EAAE,CAAC;KACjB;IAED,OAAO,IAAA,gBAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAND,0CAMC;AAMD,SAAgB,SAAS,CAAC,MAAyB;IACjD,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,CAAC,EAAE;QACvB,OAAO,MAAM,CAAC;KACf;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBAClB,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;aAC9B;YACD,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;KACF;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAhBD,8BAgBC;AAED,SAAgB,QAAQ,CAAC,EAAY,EAAE,KAAa,EAAE,SAAS,GAAG,KAAK;IACrE,IAAI,KAAU,CAAC;IACf,IAAI,MAAW,CAAC;IAChB,OAAO,UAAqB,GAAG,IAAW;QACxC,IAAI,KAAK,EAAE;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;SACrB;QACD,IAAI,SAAS,EAAE;YAIb,IAAI,KAAK,EAAE;gBACT,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aAC9C;iBAAM;gBACL,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9B,OAAO,MAAM,CAAC;aACf;SACF;aAAM;YACL,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;SACvD;IACH,CAAC,CAAC;AACJ,CAAC;AArBD,4BAqBC;AAOD,SAAgB,QAAQ,CAAC,IAAc,EAAE,KAAa;IACpD,IAAI,KAAK,GAAQ,IAAI,CAAC;IACtB,OAAO,UAAqB,GAAG,IAAW;QAExC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC,EAAE,KAAK,CAAC,CAAC;SACX;IAKH,CAAC,CAAC;AACJ,CAAC;AAfD,4BAeC;AAOD,SAAgB,SAAS,CAAC,IAAc,EAAE,KAAa;IACrD,IAAI,KAAK,GAAQ,IAAI,CAAC;IACtB,OAAO,UAAqB,GAAG,IAAW;QAExC,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC,EAAE,KAAK,CAAC,CAAC;SACX;IACH,CAAC,CAAC;AACJ,CAAC;AAXD,8BAWC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,UAAkB;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC;IAChB,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IACf,OAAO,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE;QAC9B,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACjB;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAQD,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa,EAAE,QAAiB;IAEzE,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAGvC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,qCAAqC,EAAE,eAAe,CAAC,CAAC;IAG9E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CACrB,IAAI,MAAM,CACR,eAAe;QACb,4CAA4C;QAC5C,WAAW;QACX,4CAA4C;QAC5C,WAAW;QACX,4CAA4C;QAC5C,cAAc;QACd,mBAAmB;QACnB,UAAU,EACZ,GAAG,CACJ,CACF,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,IAAA,gBAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvD,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,CAAC,KAAK;aACF,OAAO,CAAC,4DAA4D,EAAE;YACrE,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACrG,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,CAAC;IAGlB,OAAO,GAAG;QACR,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAC/D,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EACrC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CACnB,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CACtG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CACzB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;QACtG,CAAC;YACC;gBACE,GAAG;gBACH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9G,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9G,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/G,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAjDD,kCAiDC;AAOD,SAAgB,OAAO,CAAC,CAAS,EAAE,KAAK,GAAG,CAAC;IAC1C,OAAO,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC;AAFD,0BAEC;AAED,SAAgB,aAAa,CAAC,CAAM;IAClC,IAAI,IAAA,gBAAQ,EAAC,CAAC,CAAC,IAAI,IAAA,gBAAQ,EAAC,CAAC,CAAC,IAAI,IAAA,iBAAS,EAAC,CAAC,CAAC,EAAE;QAC9C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;KACrB;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AALD,sCAKC;AACD,SAAgB,QAAQ;IACtB,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,CAE9B,iJAAiJ,CAClJ,CAAC;AACJ,CAAC;AALD,4BAKC;AACD,SAAgB,cAAc,CAAC,EAAO,EAAE,EAAO,EAAE,KAAgB;IAC/D,IAAI,KAAK,KAAK,MAAM,EAAE;QACpB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AALD,wCAKC;AAOD,SAAgB,cAAc,CAAC,GAAQ,EAAE,KAAe;IACtD,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,IAAI,CAAC;IACT,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;QAC7B,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE;YACR,MAAM;SACP;KACF;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAVD,wCAUC;AACD,SAAgB,OAAO,CACrB,EAAE,CAAC,EAAE,CAAC,EAA4B,EAClC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAgE;IAE1F,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,EAAE;QAC/D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AARD,0BAQC;AAEM,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAE,IAAgB,EAAE,EAAE;IAC/D,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAMF,SAAgB,QAAQ,CAAC,KAAa;IACpC,MAAM,YAAY,GAAG,kEAAkE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClG,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC3C;IAED,IAAI,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC;IAE9B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,GAAG;QACD,QAAQ,IAAI,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;KACxC,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAhBD,4BAgBC;AAED,SAAgB,SAAS,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,KAAK,CAAC;SACd;KACF;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAXD,8BAWC;AAED,SAAgB,WAAW,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAHD,kCAGC;AAED,SAAgB,aAAa,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,sCAQC;AAGD,SAAgB,aAAa,CAAC,GAAmB;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACxC,IAAI,SAAS,CAAC,UAAU,EAAE;QACxB,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC3F;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,sCAOC;AAED,SAAgB,cAAc,CAAC,GAAQ,EAAE,gBAAwB,EAAE,QAAkB;IACnF,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEd,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,gBAAgB,CAAC,KAAI,KAAK,CAAC,OAAO,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,gBAAgB,CAAC,CAAC,EAAE;QACrE,GAAG,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;KAClG;AACH,CAAC;AAND,wCAMC;AASD,SAAgB,yBAAyB,CAAC,QAA2B,EAAE,cAA8B,EAAE,QAAa;IAClH,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,yBAAc,CAAC,QAAQ,IAAI,cAAc,KAAK,yBAAc,CAAC,IAAI,EAAE;QAC3G,OAAO,IAAI,CAAC;KACb;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC3F,IAAI,QAAQ,EAAE;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAElF,IAAI,IAAI,yBAAyB,CAC/B,UAAU,EAEV,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAC1B,QAAQ,CAAC,CAAC,CAAC,CACZ,CAAC;SACH;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AApBD,8DAoBC","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { HierarchyState, type SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array<Array<any>>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array<any>, arr2: Array<any>) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n\n/**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归(不包含自身)\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\nexport function computeChildrenNodeLength(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any) {\n let size = 0;\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return size;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n size += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n size += computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n return size;\n}\n"]}
1
+ {"version":3,"sources":["../src/tools/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport { HierarchyState, type SortOrder } from '../ts-types';\n\nexport const judgeType = (value: any) => {\n switch (Object.prototype.toString.call(value)) {\n case '[object Object]':\n return 'object';\n case '[object Function]':\n return 'function';\n case '[object Array]':\n return 'array';\n case '[object String]':\n return 'string';\n case '[object Number]':\n return 'number';\n case '[object RegExp]':\n return 'regExp';\n case '[object Boolean]':\n return 'boolean';\n case '[object Symbol]':\n return 'symbol';\n case '[object Date]':\n return 'date';\n case '[object Undefined]':\n return 'undefined';\n case '[object Null]':\n return 'null';\n case '[object Error]':\n return 'error';\n case '[object HTMLDocument]':\n return 'document';\n case '[object global]':\n return 'global'; // window 是全局对象 global 的引用\n default:\n return null;\n }\n};\n\nexport const isIt = (v: any, type: string): boolean => judgeType(v) === type;\n\nexport const isObject = (v: any): boolean => isIt(v, 'object');\nexport const isFunction = (v: any): boolean => isIt(v, 'function');\nexport const isArray = (v: any): boolean => isIt(v, 'array');\nexport const isString = (v: any): boolean => isIt(v, 'string');\nexport const isNumber = (v: any): boolean => isIt(v, 'number');\nexport const isRegExp = (v: any): boolean => isIt(v, 'regExp');\nexport const isBoolean = (v: any): boolean => isIt(v, 'boolean');\nexport const isSymbol = (v: any): boolean => isIt(v, 'symbol');\nexport const isDate = (v: any): boolean => isIt(v, 'date');\nexport const isUndefined = (v: any): boolean => isIt(v, 'undefined');\nexport const isNull = (v: any): boolean => isIt(v, 'null');\nexport const isError = (v: any): boolean => isIt(v, 'error');\nexport const isDocument = (v: any): boolean => isIt(v, 'document');\nexport const isGlobal = (v: any): boolean => isIt(v, 'global');\n\nexport function merge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return merge(target, ...sources);\n}\nexport function ingoreNoneValueMerge(target: any, ...sources: any[]): any {\n if (!sources.length) {\n return target || {};\n }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, { [key]: {} });\n }\n if (!isObject(target[key])) {\n Object.assign(target, { [key]: source[key] });\n }\n ingoreNoneValueMerge(target[key], source[key]);\n } else if (source[key] !== null && source[key] !== undefined) {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return ingoreNoneValueMerge(target, ...sources);\n}\n\n// 使用vutils库中的cloneDeep\n// export function cloneDeep(item: any) {\n// if (!item) {\n// return item;\n// } // null, undefined values check\n\n// const types = [Number, String, Boolean];\n// let result: any;\n\n// // normalizing primitives if someone did new String('aaa'), or new Number('444');\n// types.forEach(function (type) {\n// if (item instanceof type) {\n// result = type(item);\n// }\n// });\n\n// if (typeof result === 'undefined') {\n// if (Object.prototype.toString.call(item) === '[object Array]') {\n// result = [];\n// item.forEach(function (child: any, index: number) {\n// result[index] = cloneDeep(child);\n// });\n// } else if (typeof item === 'object') {\n// // testing that this is DOM\n// if (item.nodeType && typeof item.cloneNode === 'function') {\n// result = item.cloneNode(true);\n// } else if (!item.prototype) {\n// // check that this is a literal\n// if (item instanceof Date) {\n// result = new Date(item);\n// } else if (item.clone) {\n// result = item.clone();\n// } else {\n// // it is an object literal\n// result = {};\n// for (const i in item) {\n// result[i] = cloneDeep(item[i]);\n// }\n// }\n// } else {\n// // depending what you would like here,\n// // just keep the reference, or create new object\n// if (item.constructor) {\n// // would not advice to do that, reason? Read below\n// result = new item.constructor();\n// } else {\n// result = item;\n// }\n// }\n// } else {\n// result = item;\n// }\n// }\n\n// return result;\n// }\n\nexport function convertInternal(value: unknown): string {\n if (typeof value === 'function') {\n value = value();\n }\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n return isValid(value) ? `${value}` : '';\n}\n/**\n * 返回 matrix 的 转置矩阵\n * @param matrix\n * @returns\n */\nexport function transpose(matrix: Array<Array<any>>) {\n if (matrix?.length <= 0) {\n return matrix;\n }\n const m = matrix.length;\n const n = matrix[0].length;\n const transposed = new Array(n);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n if (!transposed[j]) {\n transposed[j] = new Array(m);\n }\n transposed[j][i] = matrix[i][j];\n }\n }\n return transposed;\n}\n\nexport function debounce(fn: Function, delay: number, immediate = false) {\n let timer: any;\n let result: any;\n return function (this: any, ...args: any[]) {\n if (timer) {\n clearTimeout(timer);\n }\n if (immediate) {\n // 如果timer存在,说明第二次调用的时候还没到delay时间,因为如果超过delay时间\n // timer会被赋值为0,所以这个时候我们不应该执行fn,应该重新设置一个定时器\n // 但如果是一次的时候,因为还没有设过定时器,所以这里timer会是undefined\n if (timer) {\n timer = setTimeout(() => (timer = 0), delay);\n } else {\n result = fn.apply(this, args);\n return result;\n }\n } else {\n timer = setTimeout(() => fn.apply(this, args), delay);\n }\n };\n}\n/**\n * throttle 保障了首次立即执行 后续触发的回调执行间隔delay时间 区别于throttle2 最后执行时机会提前\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n func.apply(this, args); //先执行函数,保证第一次立即执行\n timer = setTimeout(() => {\n timer = null;\n }, delay);\n }\n // console.log('throttle');\n // 当我们第一次触发事件,定时器不存在时就执行函数,当我们再次点击时,因为定时器存在,\n // 所以无法再进入函数调用(无论事件如何执行),那么只能等定时器事件结束,\n // 我们让timer=null,回到第一次的状态,就又重新开始新的一轮\n };\n}\n/**\n * throttle节流 间隔delay时间后执行 保障了最后执行时机是在delay之后\n * @param { Function } func 执行函数\n * @param { Interger } time 多长时间内不能第二次执行\n * @returns function 返回经过节流处理的函数\n */\nexport function throttle2(func: Function, delay: number) {\n let timer: any = null;\n return function (this: any, ...args: any[]) {\n // let args=arguments 也可以写成这种或...args也是代表我们传过来的实参\n if (!timer) {\n timer = setTimeout(() => {\n func.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n}\n\n/**\n * 可取消的节流函数,返回包含执行函数和取消函数的对象\n * @param { Function } func 执行函数\n * @param { Integer } delay 多长时间内不能第二次执行\n * @returns { Object } 返回包含 throttled 执行函数和 cancel 取消函数的对象\n */\nexport function cancellableThrottle(func: Function, delay: number) {\n let timer: any = null;\n let lastArgs: any[] | null = null;\n let context: any = null;\n\n const throttled = function (this: any, ...args: any[]) {\n lastArgs = args;\n context = this;\n if (!timer) {\n timer = setTimeout(() => {\n if (lastArgs) {\n func.apply(context, lastArgs);\n }\n timer = null;\n lastArgs = null;\n context = null;\n }, delay);\n }\n };\n\n const cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n lastArgs = null;\n context = null;\n }\n };\n\n const flush = () => {\n if (timer && lastArgs) {\n clearTimeout(timer);\n func.apply(context, lastArgs);\n timer = null;\n lastArgs = null;\n context = null;\n }\n };\n\n return {\n throttled,\n cancel,\n flush\n };\n}\n\nfunction pad(num: string, totalChars: number) {\n const pad = '0';\n num = `${num}`;\n while (num.length < totalChars) {\n num = pad + num;\n }\n return num;\n}\n/**\n * 在某个颜色的基础上 获取变暗或者变亮的颜色\n * @param color 基础颜色值\n * @param ratio Ratio is between 0 and 1\n * @param isDarker 是否获取变暗的颜色\n * @returns\n */\nexport function changeColor(color: string, ratio: number, isDarker: boolean) {\n // Trim trailing/leading whitespace\n color = color.replace(/^\\s*|\\s*$/, '');\n\n // Expand three-digit hex\n color = color.replace(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3');\n\n // Calculate ratio\n const difference = Math.round(ratio * 256) * (isDarker ? -1 : 1);\n // Determine if input is RGB(A)\n const rgb = color.match(\n new RegExp(\n '^rgba?\\\\(\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '\\\\s*,\\\\s*' +\n '(\\\\d|[1-9]\\\\d|1\\\\d{2}|2[0-4][0-9]|25[0-5])' +\n '(?:\\\\s*,\\\\s*' +\n '(0|1|0?\\\\.\\\\d+))?' +\n '\\\\s*\\\\)$',\n 'i'\n )\n );\n const alpha = !!rgb && isValid(rgb[4]) ? rgb[4] : null;\n // Convert hex to decimal\n const decimal = rgb\n ? [rgb[1], rgb[2], rgb[3]]\n : color\n .replace(/^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function () {\n return `${parseInt(arguments[1], 16)},${parseInt(arguments[2], 16)},${parseInt(arguments[3], 16)}`;\n })\n .split(/,/);\n\n // Return RGB(A)\n return rgb\n ? `rgb${alpha !== null ? 'a' : ''}(${Math[isDarker ? 'max' : 'min'](\n parseInt(decimal[0], 10) + difference,\n isDarker ? 0 : 255\n )}, ${Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255)}, ${Math[\n isDarker ? 'max' : 'min'\n ](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255)}${alpha !== null ? `, ${alpha}` : ''})`\n : // Return hex\n [\n '#',\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[0], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[1], 10) + difference, isDarker ? 0 : 255).toString(16), 2),\n pad(Math[isDarker ? 'max' : 'min'](parseInt(decimal[2], 10) + difference, isDarker ? 0 : 255).toString(16), 2)\n ].join('');\n}\n/**\n * 解决加减出现很多小数位的问题\n * @param n\n * @param fixed\n * @returns\n */\nexport function toFixed(n: number, fixed = 0) {\n return parseFloat(n.toFixed(fixed));\n}\n\nexport function validToString(v: any) {\n if (isString(v) || isNumber(v) || isBoolean(v)) {\n return v.toString();\n }\n return '';\n}\nexport function isMobile() {\n return navigator.userAgent.match(\n // eslint-disable-next-line max-len\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\n );\n}\nexport function defaultOrderFn(v1: any, v2: any, order: SortOrder): -1 | 0 | 1 {\n if (order !== 'desc') {\n return v1 === v2 ? 0 : v1 > v2 ? 1 : -1;\n }\n return v1 === v2 ? 0 : v1 < v2 ? 1 : -1;\n}\n/**\n * 针对一个具有多级结构的对象,根据层级路径获取到具体值\n * @param obj\n * @param paths\n * @returns\n */\nexport function getValueByPath(obj: any, paths: string[]) {\n let res = obj;\n let prop;\n while ((prop = paths.shift())) {\n res = res[prop];\n if (!res) {\n break;\n }\n }\n return res;\n}\nexport function inBound(\n { x, y }: { x: number; y: number },\n { left, top, width, height }: { left: number; top: number; width: number; height: number }\n) {\n if (x > left && x < left + width && y > top && y < top + height) {\n return true;\n }\n return false;\n}\n\nexport const isArrEqual = (arr1: Array<any>, arr2: Array<any>) => {\n return arr1.length === arr2.length && arr1.every((ele, index) => Object.is(ele, arr2[index]));\n};\n/**\n * 根据string生成hash值\n * @param input\n * @returns\n */\nexport function hashCode(input: string) {\n const I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');\n let hash = 5381;\n let i = input.length - 1;\n\n for (; i > -1; i--) {\n hash += (hash << 5) + input.charCodeAt(i);\n }\n\n let value = hash & 0x7fffffff;\n\n let retValue = '';\n do {\n retValue += I64BIT_TABLE[value & 0x3f];\n } while ((value >>= 6));\n return retValue;\n}\n\nexport function toBoolean(val: unknown): boolean {\n if (typeof val === 'string') {\n if (val === 'false') {\n return false;\n } else if (val === 'off') {\n return false;\n } else if (/^0+$/.exec(val)) {\n return false;\n }\n }\n return Boolean(val);\n}\n\nexport function isAllDigits(str: string) {\n const pattern = /^-?\\d+(\\.\\d+)?$/;\n return pattern.test(str);\n}\n// array deduplication\nexport function deduplication(array: number[]) {\n const result = [];\n for (let i = 0; i < array.length; i++) {\n if (result.indexOf(array[i]) === -1) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** 判断div中的文本是否有被选中 */\nexport function isDivSelected(div: HTMLDivElement) {\n const selection = window.getSelection();\n if (selection.rangeCount) {\n const range = selection.getRangeAt(0);\n return range.endOffset > range.startOffset && div.contains(range.commonAncestorContainer);\n }\n return false;\n}\n\nexport function traverseObject(obj: any, childrenProperty: string, callback: Function) {\n callback(obj);\n\n if (obj?.[childrenProperty] && Array.isArray(obj?.[childrenProperty])) {\n obj[childrenProperty].forEach((child: any) => traverseObject(child, childrenProperty, callback));\n }\n}\n\n/**\n * 当某个节点由展开变为折叠,需要计算出影响的节点数量 使用childrenLength来标记。同样需递归(不包含自身)\n * @param indexKey\n * @param hierarchyState\n * @param nodeData\n * @returns\n */\nexport function computeChildrenNodeLength(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any) {\n let size = 0;\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return size;\n }\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n size += 1;\n const childIndex = Array.isArray(indexKey) ? indexKey.concat([i]) : [indexKey, i];\n\n size += computeChildrenNodeLength(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n children[i].hierarchyState,\n children[i]\n );\n }\n }\n return size;\n}\n"]}
@@ -322,6 +322,12 @@ export interface PivotChartConstructorOptions extends BaseTableConstructorOption
322
322
  top?: LineAxisAttributes['labelHoverOnAxis'];
323
323
  bottom?: LineAxisAttributes['labelHoverOnAxis'];
324
324
  };
325
+ selectedStateFilter?: (datum: any) => boolean;
326
+ selectedReverseStateFilter?: (datum: any) => boolean;
327
+ inBrushStateFilter?: (datum: any) => boolean;
328
+ outOfBrushStateFilter?: (datum: any) => boolean;
329
+ listenBrushChange?: boolean;
330
+ brushChangeDelay?: number;
325
331
  };
326
332
  }
327
333
  export interface PivotTableAPI extends BaseTableAPI {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AA2rBA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n ListTableProtected,\n PivotChartProtected,\n PivotTableProtected\n} from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme-define';\nimport type { LineAxisAttributes } from './../vrender';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n isCustom?: boolean;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellPivotRole = 'normal' | 'sub-total' | 'grand-total' | undefined;\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键剪切 默认:false*/\n cutSelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 获取单元格的复制值, 替代内部获取单元格的复制值的接口getCellValue。当用户需要自定义单元格的复制值时,可以配置这个选项。 */\n getCopyCellValue?: {\n /** 因为复制到系统剪切板的时候需要兼容\"text/plain\"格式,这个函数返回值会放到\"text/plain\"的blob中。*/\n value?: (col: number, row: number) => string | number;\n /** 因为复制到系统剪切板的时候需要兼容\"text/html\"格式,这个函数返回值会放到\"text/html\"的blob中。例如vtable-sheet中的公式处理需要用到 */\n html?: (col: number, row: number) => string;\n };\n /** 被复制单元格是否显示虚线框,默认:false */\n showCopyCellBorder?: boolean;\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 粘贴指到表格时候针对公式进行处理,用于处理公式依赖关系的调整,引用关系需要考虑相对位置,比如A4=A2,将A4粘贴到B4,则B4=B2*/\n processFormulaBeforePaste?: (\n values: (string | number)[][],\n sourceStartCol: number,\n sourceStartRow: number,\n targetStartCol: number,\n targetStartRow: number\n ) => (string | number)[][];\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n /** 是否启用shift多选框 */\n shiftMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n /** contextmenu事件回传给用户参数中是否组织所有选中cells信息,默认true */\n contextmenuReturnAllSelectedCells?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n field?: string | number;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n headerType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox' | 'radio';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n\n /** @deprecated 请使用全局 enableCheckboxCascade配置\n * 是否开启树形结构复选框 */\n enableTreeCheckbox?: boolean;\n customLayout?: ICustomLayout;\n headerCustomLayout?: ICustomLayout;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array<SortState>) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n addRecordRule?: 'Array' | 'Object';\n /**\n * 传入用户实例化的数据对象\n */\n dataSource?: CachedDataSource | DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 表头树形展示模式(设置成 'grid-tree' 则支持展开和折叠) */\n headerHierarchyType?: 'grid-tree';\n /** 表头默认展开层级(headerHierarchyType 为 'grid-tree' 时有效) */\n headerExpandLevel?: number;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /**\n * @deprecated\n * dragOrder.frozenColDragHeaderMode\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n\n dragOrder?: BaseTableConstructorOptions['dragOrder'] & {\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n /** 拖拽表头移动位置时是否维护数组数据的顺序,而不是改变columns中列的顺序 .目前仅vtable-sheet使用*/\n maintainArrayDataOrder?: boolean;\n };\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n /** 数据为空时显示聚合结果 */\n showAggregationWhenEmpty?: boolean;\n /** 针对column中配置了tree: true的列,开启这个配置后,可以合并分组标题。需要配合在数据中配置vtableMerge和vtableMergeName。默认为false */\n enableTreeNodeMerge?: boolean;\n groupConfig?: {\n groupBy: GroupByOption;\n titleCustomLayout?: ICustomLayout;\n titleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n /** 开启分组标题吸附功能。 */\n enableTreeStickCell?: boolean;\n /** 这个配置对应当在rowSeriesNumber中配置cellType: 'checkbox'时,如想在group分组名中显示checkbox,则需要开启这个配置 。默认为false*/\n titleCheckbox?: boolean;\n };\n /** @deprecated 请使用groupConfig */\n groupBy?: GroupByOption;\n /** @deprecated 请使用groupConfig */\n groupTitleCustomLayout?: ICustomLayout;\n /** @deprecated 请使用groupConfig */\n groupTitleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n /** @deprecated 请使用groupConfig */\n enableTreeStickCell?: boolean;\n\n columnWidthConfig?: { key: string | number; width: number }[];\n rowHeightConfig?: { key: number; height: number }[];\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManager;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (\n col: number,\n row: number,\n values: (string | number)[][],\n workOnEditableCell?: boolean\n ) => Promise<boolean[][]> | boolean[][];\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: (number | number[])[]) => void;\n updateFilterRules: (filterRules: FilterRules, options: { clearRowHeightCache?: boolean }) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的索引均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n\n _hasHierarchyTreeHeader: () => boolean;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * @deprecated 请使用resize.columnResizeType\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /**\n * @deprecated 请使用resize.rowResizeType\n */\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree';\n columnHierarchyType?: 'grid' | 'grid-tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**展开层数 */\n columnExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n\n resize?: {\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n } & BaseTableConstructorOptions['resize'];\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * @deprecated 请使用resize.columnResizeType\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /**\n * @deprecated 请使用resize.rowResizeType\n */\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n\n resize?: {\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n } & BaseTableConstructorOptions['resize'];\n\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n /** 透视图中多个图表基于相同维度值进行交互联动的功能,是否开启 */\n chartDimensionLinkage?: {\n /** 是否显示tooltip 默认true*/\n showTooltip?: boolean;\n /** 针对条形图折线图等, 整列显示tooltip时,第一行及最后一行可能被滚动遮挡只显示一部分的情况下,检测该图表显示出来至少多高 可允许显示tooltip。*/\n heightLimitToShowTooltipForEdgeRow?: number;\n /** 针对横向条形图,整行显示tooltip时,第一列及最后一列可能被滚动遮挡只显示一部分的情况下,检测该图表显示出来至少多宽 可允许显示tooltip。*/\n widthLimitToShowTooltipForEdgeColumn?: number;\n /**\n * 鼠标hover到透视图上时,轴上悬浮label标签的相关配置\n */\n labelHoverOnAxis?: {\n left?: LineAxisAttributes['labelHoverOnAxis'];\n right?: LineAxisAttributes['labelHoverOnAxis'];\n top?: LineAxisAttributes['labelHoverOnAxis'];\n bottom?: LineAxisAttributes['labelHoverOnAxis'];\n };\n };\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n internalProps: PivotTableProtected;\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManager;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n\n /**\n * 获取行表头全路径\n * @param col 列号\n * @returns\n */\n getCellRowHeaderFullPaths: (col: number) => IDimensionInfo[];\n\n getCellAddressByHeaderPaths: (\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ) => CellAddress;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n internalProps: PivotChartProtected;\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n\n getCellAddressByHeaderPaths: (\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ) => CellAddress;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n /** 隐藏该指标。 但内部聚合逻辑是正常执行的 */\n hide?: boolean;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = CustomMergeCellFunc | CustomMergeCellArray;\n\nexport type CustomMergeCellFunc = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMergeCellArray = CustomMerge[];\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n"]}
1
+ {"version":3,"sources":["../src/ts-types/table-engine.ts"],"names":[],"mappings":";;;AAusBA,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,8BAAiB,CAAA;IACjB,0BAAa,CAAA;IACb,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAKpB;AAED,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;IACb,qCAAmB,CAAA;AACrB,CAAC,EALW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAKzB","file":"table-engine.js","sourcesContent":["import type { RectProps, MaybePromiseOrUndefined, IDimensionInfo, SortOrder, BaseCellInfo, CellInfo } from './common';\nimport type { ColumnIconOption, SvgIcon } from './icon';\nexport type { HeaderData } from './list-table/layout-map/api';\nexport type LayoutObjectId = number | string;\nimport type { Rect } from '../tools/Rect';\nimport type {\n BaseTableAPI,\n BaseTableConstructorOptions,\n ListTableProtected,\n PivotChartProtected,\n PivotTableProtected\n} from './base-table';\nimport type {\n Aggregation,\n AggregationType,\n CustomAggregation,\n FilterRules,\n IPivotTableDataConfig,\n SortType\n} from './new-data-set';\nimport type { Either } from '../tools/helper';\nimport type {\n IChartIndicator,\n IColumnDimension,\n ICornerDefine,\n IDimension,\n IIndicator,\n IRowDimension,\n ITitleDefine\n} from './pivot-table';\n\nimport type { ColumnDefine, ColumnsDefine } from './list-table';\nimport type { ICellAxisOption, ITableAxisOption } from './component/axis';\n\nimport type { IEditor } from '@visactor/vtable-editors';\nimport type { ITextStyleOption } from '../body-helper/style';\nimport type { CachedDataSource, DataSource } from '../data';\nimport type { EditManager } from '../edit/edit-manager';\nimport type { ICustomRender } from './customElement';\nimport type { ICustomLayout } from './customLayout';\nimport type { ColorPropertyDefine, StylePropertyFunctionArg } from './style-define';\nimport type { TableTheme } from '../themes/theme-define';\nimport type { LineAxisAttributes } from './../vrender';\n\nexport interface CellAddress {\n col: number;\n row: number;\n}\nexport interface CellAddressWithBound {\n col: number;\n row: number;\n rect?: RectProps;\n x?: number;\n y?: number;\n}\nexport interface CellRange {\n start: CellAddress;\n end: CellAddress;\n isCustom?: boolean;\n}\n\nexport type FieldGetter = (record: any, col?: number, row?: number, table?: BaseTableAPI) => any;\nexport type FieldSetter = (record: any, value: any) => void;\nexport interface FieldAssessor {\n get: FieldGetter;\n set: FieldSetter;\n}\n\nexport type FieldDef = string | number | string[];\nexport type FieldKeyDef = string | number;\nexport type FieldFormat = FieldGetter | FieldAssessor;\n\nexport type FieldData = MaybePromiseOrUndefined;\n\nexport type WidthModeDef = 'standard' | 'adaptive' | 'autoWidth';\nexport type HeightModeDef = 'standard' | 'adaptive' | 'autoHeight';\nexport type WidthAdaptiveModeDef = 'only-body' | 'all';\nexport type HeightAdaptiveModeDef = 'only-body' | 'all';\nexport type ShowColumnRowType = 'column' | 'row' | 'none' | 'all';\n/** 单元格所处表格哪部分 */\nexport type CellLocation = 'body' | 'rowHeader' | 'columnHeader' | 'cornerHeader';\nexport type CellPivotRole = 'normal' | 'sub-total' | 'grand-total' | undefined;\nexport type CellSubLocation =\n | 'body'\n | 'rowHeader'\n | 'columnHeader'\n | 'cornerHeader'\n | 'bottomFrozen'\n | 'rightFrozen'\n | 'rightTopCorner'\n | 'leftBottomCorner'\n | 'rightBottomCorner'\n | 'rowSeriesNumber'\n | 'colSeriesNumber';\n\nexport interface SelectAllOnCtrlAOption {\n disableHeaderSelect?: boolean;\n disableRowSeriesNumberSelect?: boolean;\n}\n\nexport interface TableKeyboardOptions {\n /** tab键 默认为true。开启tab键移动选中单元格,如果当前是在编辑单元格 则移动到下一个单元格也是编辑状态 */\n moveFocusCellOnTab?: boolean;\n /** enter键 默认true 如果选中单元格按下enter键进入单元格编辑*/\n editCellOnEnter?: boolean;\n /** enter键 默认fasle 按下enter键选择下一个单元格。和editCellOnEnter互斥,同设置为true优先级高于editCellOnEnter */\n moveFocusCellOnEnter?: boolean;\n /** 默认不开启即false。开启这个配置的话,如果当前是在编辑中的单元格,方向键可以移动到下个单元格并进入编辑状态,而不是编辑文本内字符串的光标移动。上下左右方向键切换选中单元格不受该配置影响,*/\n moveEditCellOnArrowKeys?: boolean;\n /** 开启快捷键全选 默认:false */\n selectAllOnCtrlA?: boolean | SelectAllOnCtrlAOption;\n /** 快捷键剪切 默认:false*/\n cutSelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 快捷键复制 默认:false*/\n copySelected?: boolean; //这个copy是和浏览器的快捷键一致的\n /** 获取单元格的复制值, 替代内部获取单元格的复制值的接口getCellValue。当用户需要自定义单元格的复制值时,可以配置这个选项。 */\n getCopyCellValue?: {\n /** 因为复制到系统剪切板的时候需要兼容\"text/plain\"格式,这个函数返回值会放到\"text/plain\"的blob中。*/\n value?: (col: number, row: number) => string | number;\n /** 因为复制到系统剪切板的时候需要兼容\"text/html\"格式,这个函数返回值会放到\"text/html\"的blob中。例如vtable-sheet中的公式处理需要用到 */\n html?: (col: number, row: number) => string;\n };\n /** 被复制单元格是否显示虚线框,默认:false */\n showCopyCellBorder?: boolean;\n /** 快捷键粘贴,默认:false 。粘贴内容到指定位置(即粘贴前要有选中的单元格);支持批量粘贴;粘贴生效仅针对配置了编辑 editor 的单元格;*/\n pasteValueToCell?: boolean; //paste是和浏览器的快捷键一致的\n /** 粘贴指到表格时候针对公式进行处理,用于处理公式依赖关系的调整,引用关系需要考虑相对位置,比如A4=A2,将A4粘贴到B4,则B4=B2*/\n processFormulaBeforePaste?: (\n values: (string | number)[][],\n sourceStartCol: number,\n sourceStartRow: number,\n targetStartCol: number,\n targetStartRow: number\n ) => (string | number)[][];\n /** 方向键是否可以更改选中单元格位置,默认:true */\n moveSelectedCellOnArrowKeys?: boolean;\n /** 是否启用ctrl多选框 */\n ctrlMultiSelect?: boolean;\n /** 是否启用shift多选框 */\n shiftMultiSelect?: boolean;\n}\nexport interface TableEventOptions {\n /** 是否阻止右键的默认行为, 默认为true。*/\n preventDefaultContextMenu?: boolean;\n /** contextmenu事件回传给用户参数中是否组织所有选中cells信息,默认true */\n contextmenuReturnAllSelectedCells?: boolean;\n}\n\nexport interface IRowSeriesNumber {\n width?: number | 'auto';\n // align?: 'left' | 'right';\n // span?: number | 'dependOnNear';\n title?: string;\n field?: string | number;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n headerType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox' | 'radio';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerIcon?: string | ColumnIconOption | (string | ColumnIconOption)[];\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n // /** 选中整行或者全选时 是否包括序号部分 */\n // selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否禁止列宽调整 */\n disableColumnResize?: boolean;\n\n /** @deprecated 请使用全局 enableCheckboxCascade配置\n * 是否开启树形结构复选框 */\n enableTreeCheckbox?: boolean;\n customLayout?: ICustomLayout;\n headerCustomLayout?: ICustomLayout;\n}\n\nexport interface ColumnSeriesNumber {\n enable: boolean;\n align?: 'top' | 'bottom';\n span?: number | 'dependOnNear';\n title?: string;\n field?: FieldDef;\n format?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n cellType?: 'text' | 'link' | 'image' | 'video' | 'checkbox';\n style?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n headerStyle?: ITextStyleOption | ((styleArg: StylePropertyFunctionArg) => ITextStyleOption);\n icon?:\n | string\n | ColumnIconOption\n | (string | ColumnIconOption)[]\n | ((args: CellInfo) => undefined | string | ColumnIconOption | (string | ColumnIconOption)[]);\n /** 选中整行或者全选时 是否包括序号部分 */\n selectRangeInclude?: boolean;\n /** 是否可拖拽顺序 */\n dragOrder?: boolean;\n /** 是否显示调换顺序的图标 */\n showDragOrderIcon?: boolean;\n}\nexport interface DataSourceAPI {\n clearCurrentIndexedData: () => void;\n length: number;\n get: (index: number) => MaybePromiseOrUndefined;\n getField: <F extends FieldDef>(index: number, field: F, col: number, row: number, table: BaseTableAPI) => FieldData;\n hasField: (index: number, field: FieldDef) => boolean;\n sort: (rules: Array<SortState>) => void;\n clearSortedMap: () => void;\n updatePagination: (pagination: IPagination) => void;\n getIndexKey: (index: number) => number | number[];\n /** 数据是否为树形结构 且可以展开收起 */\n hierarchyExpandLevel: number;\n\n getGroupLength?: () => number;\n}\n\nexport interface SortState {\n /** 排序依据字段 */\n field: FieldDef;\n /** 排序规则 */\n order: SortOrder;\n orderFn?: (a: any, b: any, order: string) => -1 | 0 | 1;\n}\nexport interface PivotSortState {\n col: number;\n row: number;\n order: SortType;\n}\n\n/**\n * 分页配置\n */\nexport interface IPagination {\n /** 数据总条数 透视表中这个数据会自动加上 不需用户传入*/\n totalCount?: number;\n /** 每页显示数据条数 */\n perPageCount: number;\n /** 当前页码 */\n currentPage?: number;\n}\nexport type HeaderValues = Map<any, any>;\nexport interface ListTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n addRecordRule?: 'Array' | 'Object';\n /**\n * 传入用户实例化的数据对象\n */\n dataSource?: CachedDataSource | DataSource;\n /**\n * 是否显示表头\n */\n showHeader?: boolean;\n /**\n * Simple header property\n */\n columns?: ColumnsDefine; //请不要再这个上面修改配置,这里相当于是一个原始值备份,有一个内部专用的protectspace.columns\n /**\n *@deprecated 已废弃 请使用columns\n */\n header?: ColumnsDefine;\n\n transpose?: boolean; //是否转置\n /**\n * 展示为tree的列 层级缩进值\n */\n hierarchyIndent?: number;\n /** 展开层数 默认为1只显示根节点*/\n hierarchyExpandLevel?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n hierarchyTextStartAlignment?: boolean;\n /** 表头树形展示模式(设置成 'grid-tree' 则支持展开和折叠) */\n headerHierarchyType?: 'grid-tree';\n /** 表头默认展开层级(headerHierarchyType 为 'grid-tree' 时有效) */\n headerExpandLevel?: number;\n /** 分页配置 */\n pagination?: IPagination;\n\n /**\n * 排序状态\n */\n sortState?: SortState | SortState[];\n multipleSort?: boolean;\n\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置编辑器 */\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /**\n * @deprecated\n * dragOrder.frozenColDragHeaderMode\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n\n dragOrder?: BaseTableConstructorOptions['dragOrder'] & {\n /** 拖拽表头移动位置 针对冻结部分的规则 默认为fixedFrozenCount\n * \"disabled\"(禁止调整冻结列位置):不允许其他列的表头移入冻结列,也不允许冻结列移出,冻结列保持不变。\n * \"adjustFrozenCount\"(根据交互结果调整冻结数量):允许其他列的表头移入冻结列,及冻结列移出,并根据拖拽的动作调整冻结列的数量。当其他列的表头被拖拽进入冻结列位置时,冻结列数量增加;当其他列的表头被拖拽移出冻结列位置时,冻结列数量减少。\n * \"fixedFrozenCount\"(可调整冻结列,并维持冻结数量不变):允许自由拖拽其他列的表头移入或移出冻结列位置,同时保持冻结列的数量不变。\n */\n frozenColDragHeaderMode?: 'disabled' | 'adjustFrozenCount' | 'fixedFrozenCount';\n /** 拖拽表头移动位置时是否维护数组数据的顺序,而不是改变columns中列的顺序 .目前仅vtable-sheet使用*/\n maintainArrayDataOrder?: boolean;\n };\n aggregation?:\n | Aggregation\n | CustomAggregation\n | (Aggregation | CustomAggregation)[]\n | ((args: {\n col: number;\n field: string;\n }) => Aggregation | CustomAggregation | (Aggregation | CustomAggregation)[] | null);\n /** 数据为空时显示聚合结果 */\n showAggregationWhenEmpty?: boolean;\n /** 针对column中配置了tree: true的列,开启这个配置后,可以合并分组标题。需要配合在数据中配置vtableMerge和vtableMergeName。默认为false */\n enableTreeNodeMerge?: boolean;\n groupConfig?: {\n groupBy: GroupByOption;\n titleCustomLayout?: ICustomLayout;\n titleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n /** 开启分组标题吸附功能。 */\n enableTreeStickCell?: boolean;\n /** 这个配置对应当在rowSeriesNumber中配置cellType: 'checkbox'时,如想在group分组名中显示checkbox,则需要开启这个配置 。默认为false*/\n titleCheckbox?: boolean;\n };\n /** @deprecated 请使用groupConfig */\n groupBy?: GroupByOption;\n /** @deprecated 请使用groupConfig */\n groupTitleCustomLayout?: ICustomLayout;\n /** @deprecated 请使用groupConfig */\n groupTitleFieldFormat?: (record: any, col?: number, row?: number, table?: BaseTableAPI) => string;\n /** @deprecated 请使用groupConfig */\n enableTreeStickCell?: boolean;\n\n columnWidthConfig?: { key: string | number; width: number }[];\n rowHeightConfig?: { key: number; height: number }[];\n}\n\nexport type GroupByOption = string | string[] | GroupConfig | GroupConfig[];\n\nexport type GroupConfig = {\n key: string;\n sort?: SortOrder;\n};\n\nexport interface ListTableAPI extends BaseTableAPI {\n transpose: boolean;\n options: ListTableConstructorOptions;\n editorManager: EditManager;\n sortState: SortState[] | SortState | null;\n // /** 数据分析相关配置 */\n // dataConfig?: IListTableDataConfig;\n internalProps: ListTableProtected;\n isListTable: () => true;\n isPivotTable: () => false;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell?: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n * @param workOnEditableCell 是否仅更改可编辑单元格\n */\n changeCellValues: (\n col: number,\n row: number,\n values: (string | number)[][],\n workOnEditableCell?: boolean\n ) => Promise<boolean[][]> | boolean[][];\n getFieldData: (field: FieldDef | FieldFormat | undefined, col: number, row: number) => FieldData;\n //#region 编辑器相关demo\n /** 获取单元格配置的编辑器 */\n getEditor: (col: number, row: number) => IEditor;\n /**\n * 开启单元格编辑\n * @param col\n * @param row\n * @param value 如果想要改变显示到编辑框中的值 可以value来设置改变\n * @returns\n */\n startEditCell: (col?: number, row?: number, value?: string | number) => void;\n /** 结束编辑 */\n completeEditCell: () => void;\n //#endregion\n addRecord: (record: any, recordIndex?: number) => void;\n addRecords: (records: any[], recordIndex?: number) => void;\n deleteRecords: (recordIndexs: number[]) => void;\n updateRecords: (records: any[], recordIndexs: (number | number[])[]) => void;\n updateFilterRules: (filterRules: FilterRules, options: { clearRowHeightCache?: boolean }) => void;\n getAggregateValuesByField: (field: string | number) => {\n col: number;\n aggregateValue: { aggregationType: AggregationType; value: number | string }[];\n }[];\n /**\n * 根据数据的索引获取应该显示在body的第几行 参数和返回值的索引均从0开始\n * @param {number} index The record index.\n */\n getBodyRowIndexByRecordIndex: (index: number | number[]) => number;\n\n _hasHierarchyTreeHeader: () => boolean;\n}\nexport interface PivotTableConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合\n */\n records?: any[];\n /**\n * @deprecated 请使用resize.columnResizeType\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /**\n * @deprecated 请使用resize.rowResizeType\n */\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 设置排序状态,只对应按钮展示效果 无数据排序逻辑 */\n pivotSortState?: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n\n //#region layout中挪到外层的属性\n /**层级维度结构显示形式 */\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree';\n columnHierarchyType?: 'grid' | 'grid-tree';\n /**展开层数 */\n rowExpandLevel?: number;\n /**展开层数 */\n columnExpandLevel?: number;\n /**子层级维度缩进距离 */\n rowHierarchyIndent?: number;\n /** 同层级的结点是否按文字对齐 如没有收起展开图标的节点和有图标的节点文字对齐 默认false */\n rowHierarchyTextStartAlignment?: boolean;\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 指标在具体维度展示的层级顺序,从0开始 ———有数据分析的透视表才需要配置这个 */\n indicatorIndex?: number;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 指标维度key 注意非具体指标key 数据分析的透视表才需要配置这个 */\n // indicatorDimensionKey?: string;\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n //#endregion\n /** 数据分析相关配置 */\n dataConfig?: IPivotTableDataConfig;\n\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n /** 分页配置 */\n pagination?: IPagination;\n\n extensionRows?: IExtensionRowDefine[];\n editor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n /** 全局设置表头编辑器 */\n headerEditor?: string | IEditor | ((args: BaseCellInfo & { table: BaseTableAPI }) => string | IEditor);\n\n /** 编辑触发时机 双击事件 单击事件 api手动开启编辑 或者 鼠标按下新值即可开启编辑。默认为双击'doubleclick' */\n editCellTrigger?: 'doubleclick' | 'click' | 'api' | 'keydown' | ('doubleclick' | 'click' | 'api' | 'keydown')[];\n /** 是否需要补充指标节点到对应的自定义表头中如rowTree或者columnTree. 默认为true */\n supplementIndicatorNodes?: boolean;\n /** 如果配置了rowTree 或者 columnTree 且是非规则的树结构,即树的同一层存在不同维度的维度值时,为了去匹配对应的数据,需要开启该配置 */\n parseCustomTreeToMatchRecords?: boolean;\n\n resize?: {\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n } & BaseTableConstructorOptions['resize'];\n}\nexport interface PivotChartConstructorOptions extends BaseTableConstructorOptions {\n /**\n * 数据集合, 平坦数据集合。另外一种特殊方式是传入分组后的数据,分组依据为指标\n */\n records?: any[] | Record<string, any[]>;\n /**\n * @deprecated 请使用resize.columnResizeType\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n /**\n * @deprecated 请使用resize.rowResizeType\n */\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n /** 列表头维度结构 */\n columnTree?: IHeaderTreeDefine[];\n /** 行表头维度结构 */\n rowTree?: IHeaderTreeDefine[];\n /** 定义各个维度和各个指标的具体配置项和样式定义 rows 和 dimension 代替掉 */\n // dimensions?: IDimension[];\n\n /** 定义行上各个维度具体配置项和样式定义 */\n rows?: (IRowDimension | string)[]; // (string | IDimension)[]; 后续支持数据分析的透视表 支持string配置\n /** 定义列上各个维度具体配置项和样式定义 */\n columns?: (IColumnDimension | string)[]; // (string | IDimension)[];\n /** 定义指标具体配置项和样式定义 包含表头和body的定义*/\n indicators?: (IChartIndicator | string)[]; // (string | IIndicator)[];\n\n /** 指标以列展示 ———有数据分析的透视表才需要配置这个 */\n indicatorsAsCol?: boolean;\n /** 是否隐藏指标名称 */\n hideIndicatorName?: boolean; //\n /** 角头单元格配置项和样式定义 */\n corner?: ICornerDefine;\n /**\n * boolean 是否显示列维度值表头\n */\n showColumnHeader?: boolean;\n /**\n * boolean 是否显示行维度值表头\n */\n showRowHeader?: boolean;\n /**\n * 列表头增加一行来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n columnHeaderTitle?: ITitleDefine;\n /**\n * 行表头的增加一列来显示维度名称 可以自定义或者显示dimension.title组合名\n */\n rowHeaderTitle?: ITitleDefine;\n /** 指标标题 用于显示到角头的值*/\n indicatorTitle?: string;\n\n axes?: ITableAxisOption[];\n\n resize?: {\n /**\n * 调整列宽的生效范围:'column' | 'indicator' | 'all' | 'indicatorGroup',单列|按指标|所有列|属于同一维度值的多个指标\n */\n columnResizeType?: 'column' | 'indicator' | 'all' | 'indicatorGroup';\n rowResizeType?: 'row' | 'indicator' | 'all' | 'indicatorGroup';\n } & BaseTableConstructorOptions['resize'];\n\n columnWidthConfig?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n columnWidthConfigForRowHeader?: {\n dimensions: IDimensionInfo[];\n width: number;\n }[];\n /** 透视图中多个图表基于相同维度值进行交互联动的功能,是否开启 */\n chartDimensionLinkage?: {\n /** 是否显示tooltip 默认true*/\n showTooltip?: boolean;\n /** 针对条形图折线图等, 整列显示tooltip时,第一行及最后一行可能被滚动遮挡只显示一部分的情况下,检测该图表显示出来至少多高 可允许显示tooltip。*/\n heightLimitToShowTooltipForEdgeRow?: number;\n /** 针对横向条形图,整行显示tooltip时,第一列及最后一列可能被滚动遮挡只显示一部分的情况下,检测该图表显示出来至少多宽 可允许显示tooltip。*/\n widthLimitToShowTooltipForEdgeColumn?: number;\n /**\n * 鼠标hover到透视图上时,轴上悬浮label标签的相关配置\n */\n labelHoverOnAxis?: {\n left?: LineAxisAttributes['labelHoverOnAxis'];\n right?: LineAxisAttributes['labelHoverOnAxis'];\n top?: LineAxisAttributes['labelHoverOnAxis'];\n bottom?: LineAxisAttributes['labelHoverOnAxis'];\n };\n /** 关联图表中点击图元的高亮状态的过滤函数 */\n selectedStateFilter?: (datum: any) => boolean;\n /** 关联图表中点击图元反选的高亮状态的过滤函数 */\n selectedReverseStateFilter?: (datum: any) => boolean;\n /** 关联图表中brush框选中状态的过滤函数 默认是严格框选的图元有inBrush的高亮状态 */\n inBrushStateFilter?: (datum: any) => boolean;\n /** 对应上面inBrushStateFilter,框选范围外的图元状态的过滤函数 */\n outOfBrushStateFilter?: (datum: any) => boolean;\n /** 是否监听brushChange事件,默认false 不监听 */\n listenBrushChange?: boolean;\n /** brushChange事件处理的延迟时间。节流防止频繁触发卡顿,默认100毫秒 */\n brushChangeDelay?: number;\n };\n}\nexport interface PivotTableAPI extends BaseTableAPI {\n internalProps: PivotTableProtected;\n records?: any;\n options: PivotTableConstructorOptions;\n editorManager: EditManager;\n // internalProps: PivotTableProtected;\n pivotSortState: {\n dimensions: IDimensionInfo[];\n order: SortOrder;\n }[];\n isListTable: () => false;\n isPivotTable: () => true;\n getPivotSortState: (col: number, row: number) => SortOrder;\n toggleHierarchyState: (col: number, row: number) => void;\n /** 设置单元格的value值,注意对应的是源数据的原始值,vtable实例records会做对应修改 */\n changeCellValue: (col: number, row: number, value: string | number | null, workOnEditableCell: boolean) => void;\n /**\n * 批量更新多个单元格的数据\n * @param col 粘贴数据的起始列号\n * @param row 粘贴数据的起始行号\n * @param values 多个单元格的数据数组\n */\n changeCellValues: (col: number, row: number, values: (string | number)[][], workOnEditableCell: boolean) => void;\n\n /**\n * 获取行表头全路径\n * @param col 列号\n * @returns\n */\n getCellRowHeaderFullPaths: (col: number) => IDimensionInfo[];\n\n getCellAddressByHeaderPaths: (\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ) => CellAddress;\n}\nexport interface PivotChartAPI extends BaseTableAPI {\n internalProps: PivotChartProtected;\n records?: any | Record<string, any[]>;\n options: PivotChartConstructorOptions;\n // internalProps: PivotTableProtected;\n isListTable: () => false;\n isPivotTable: () => true;\n\n getCellAddressByHeaderPaths: (\n dimensionPaths:\n | {\n colHeaderPaths: IDimensionInfo[];\n rowHeaderPaths: IDimensionInfo[];\n cellLocation: CellLocation;\n }\n | IDimensionInfo[]\n ) => CellAddress;\n}\nexport type SetPasteValueTestData = CellAddress & {\n table: BaseTableAPI;\n record: any;\n value: string;\n\n oldValue: any;\n};\n\nexport interface InlineAPI {\n width: (arg: { ctx: CanvasRenderingContext2D }) => number;\n font: () => string | null;\n color: () => string | null;\n canDraw: () => boolean;\n onReady: (callback: Function) => void;\n\n draw: (opt: any) => void;\n canBreak: () => boolean;\n}\n\nexport interface CellContext {\n readonly col: number;\n readonly row: number;\n /**format之后的值 */\n readonly value: FieldData;\n /**原始值 */\n readonly dataValue: FieldData;\n showIcon?: SvgIcon;\n getContext: () => CanvasRenderingContext2D;\n toCurrentContext: () => CellContext;\n getDrawRect: () => RectProps | null;\n getRect: () => RectProps;\n setRectFilter: (rectFilter: (base: RectProps) => RectProps) => void;\n updateRect: (rect: Rect | RectProps) => void;\n updateDrawRect: (rect: Rect | RectProps) => void;\n}\n\nexport enum Placement {\n top = 'top',\n bottom = 'bottom',\n left = 'left',\n right = 'right'\n}\n\nexport enum HierarchyState {\n expand = 'expand',\n collapse = 'collapse',\n none = 'none',\n loading = 'loading'\n}\nexport type IHeaderTreeDefine = Either<IDimensionHeaderNode, IIndicatorHeaderNode>;\nexport interface IIndicatorHeaderNode {\n /**\n * 指标的key值 对应数据集的字段名\n */\n indicatorKey: string | number;\n /**\n * 指标名称 如:“销售额”,“例如”, 对应到单元格显示的值。可不填,不填的话 从indicators的对应配置中取值显示\n */\n value?: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | null;\n //跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格\n levelSpan?: number;\n /** 隐藏该指标。 但内部聚合逻辑是正常执行的 */\n hide?: boolean;\n}\nexport interface IDimensionHeaderNode {\n /**\n * 维度的唯一标识,对应数据集的字段名称\n */\n dimensionKey: string | number;\n /** 维度成员值 */\n value: string;\n /** 维度成员下的子维度树结构 */\n children?: IHeaderTreeDefine[] | true;\n /** 折叠状态 TODO */\n hierarchyState?: HierarchyState;\n /** 是否为虚拟节点 在基于records数据做分析时忽略该维度字段 */\n virtual?: boolean;\n /** 跨单元格合并显示该维度值,默认是1。如果表头层数最大是5,那么最末级剩下多大就合并多大层数的单元格 */\n levelSpan?: number;\n}\n\nexport interface IExtensionRowDefine {\n rows: (IRowDimension | string)[];\n rowTree: IHeaderTreeDefine[] | ((args: { dimensionKey: string | number; value: string }[]) => IHeaderTreeDefine[]);\n}\n\nexport type StickCell = { col: number; row: number; dx: number; dy: number };\n\nexport type CustomMergeCell = CustomMergeCellFunc | CustomMergeCellArray;\n\nexport type CustomMergeCellFunc = (col: number, row: number, table: BaseTableAPI) => undefined | CustomMerge;\nexport type CustomMergeCellArray = CustomMerge[];\nexport type CustomMerge = {\n range: CellRange;\n text?: string;\n style?: ITextStyleOption;\n customLayout?: ICustomLayout;\n customRender?: ICustomRender;\n};\n\nexport type ColumnInfo = { col: number; left: number; right: number; width: number };\nexport type RowInfo = { row: number; top: number; bottom: number; height: number };\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qEAA0D;AAC1D,kCAAgC;AAChC,yDAAwH;AACxH,yDAqBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IAGd,IAAA,6BAAc,GAAE,CAAC;IAEjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IAIf,IAAA,2BAAY,GAAE,CAAC;IAEf,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,uCAAwB,GAAE,CAAC;IAE3B,IAAA,+BAAU,GAAE,CAAC;IAEb,IAAA,uCAAwB,GAAE,CAAC;AAC7B,CAAC;AAnCD,gDAmCC;AAOD,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C;AAC7C,4DAA0C","file":"vrender.js","sourcesContent":["import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.22.10\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n // registerArc3d();\n // registerArea();\n registerCircle();\n // registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n // registerPath();\n // registerPolygon();\n // registerPyramid3d();\n registerRect();\n // registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerFlexLayoutPlugin();\n // registerWrapText();\n loadPoptip();\n\n registerFlexLayoutPlugin();\n}\n\nexport type { Direction } from '@visactor/vrender-core';\nexport type { State } from '@visactor/vrender-components';\n// export { GroupFadeIn } from '@visactor/vrender-core';\n// export { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\nexport * from '@visactor/vrender-animate';\n"]}
1
+ {"version":3,"sources":["../src/vrender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qEAA0D;AAC1D,kCAAgC;AAChC,yDAAwH;AACxH,yDAqBgC;AAIhC,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAgB,kBAAkB;IAChC,IAAI,QAAQ,EAAE;QACZ,OAAO;KACR;IACD,QAAQ,GAAG,IAAI,CAAC;IAEhB,IAAA,+BAAgB,GAAE,CAAC;IAEnB,IAAI,IAAA,2BAAY,GAAE,EAAE;QAClB,IAAA,6BAAc,EAAC,wBAAS,CAAC,CAAC;KAC3B;SAAM,IAAI,IAAA,wBAAS,GAAE,EAAE;QACtB,IAAA,0BAAW,EAAC,wBAAS,CAAC,CAAC;KACxB;IACD,IAAA,0BAAW,GAAE,CAAC;IAGd,IAAA,6BAAc,GAAE,CAAC;IAEjB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,4BAAa,GAAE,CAAC;IAChB,IAAA,2BAAY,GAAE,CAAC;IAIf,IAAA,2BAAY,GAAE,CAAC;IAEf,IAAA,+BAAgB,GAAE,CAAC;IACnB,IAAA,iCAAkB,GAAE,CAAC;IACrB,IAAA,6BAAc,GAAE,CAAC;IACjB,IAAA,2BAAY,GAAE,CAAC;IACf,IAAA,uCAAwB,GAAE,CAAC;IAE3B,IAAA,+BAAU,GAAE,CAAC;IAEb,IAAA,uCAAwB,GAAE,CAAC;AAC7B,CAAC;AAnCD,gDAmCC;AAOD,yDAAuC;AACvC,yDAAuC;AACvC,+DAA6C;AAC7C,4DAA0C","file":"vrender.js","sourcesContent":["import { loadPoptip } from '@visactor/vrender-components';\nimport '@visactor/vrender-core';\nimport { container, isBrowserEnv, isNodeEnv, preLoadAllModule, registerFlexLayoutPlugin } from '@visactor/vrender-core';\nimport {\n loadBrowserEnv,\n loadNodeEnv,\n registerArc,\n registerArc3d,\n registerArea,\n registerCircle,\n registerGlyph,\n registerGroup,\n registerImage,\n registerLine,\n registerPath,\n registerPolygon,\n registerPyramid3d,\n registerRect,\n registerRect3d,\n registerRichtext,\n registerShadowRoot,\n registerSymbol,\n registerText,\n registerWrapText\n} from '@visactor/vrender-kits';\n// 导出版本号\n// export const version = \"1.22.11-alpha.0\";\n\nlet registed = false;\nexport function registerForVrender() {\n if (registed) {\n return;\n }\n registed = true;\n // 注册内置组件\n preLoadAllModule();\n\n if (isBrowserEnv()) {\n loadBrowserEnv(container);\n } else if (isNodeEnv()) {\n loadNodeEnv(container);\n }\n registerArc();\n // registerArc3d();\n // registerArea();\n registerCircle();\n // registerGlyph();\n registerGroup();\n registerImage();\n registerLine();\n // registerPath();\n // registerPolygon();\n // registerPyramid3d();\n registerRect();\n // registerRect3d();\n registerRichtext();\n registerShadowRoot();\n registerSymbol();\n registerText();\n registerFlexLayoutPlugin();\n // registerWrapText();\n loadPoptip();\n\n registerFlexLayoutPlugin();\n}\n\nexport type { Direction } from '@visactor/vrender-core';\nexport type { State } from '@visactor/vrender-components';\n// export { GroupFadeIn } from '@visactor/vrender-core';\n// export { GroupFadeOut } from '@visactor/vrender-core';\n\nexport * from '@visactor/vrender-core';\nexport * from '@visactor/vrender-kits';\nexport * from '@visactor/vrender-components';\nexport * from '@visactor/vrender-animate';\n"]}