@agions/taroviz 1.3.0 → 1.5.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.
- package/README.md +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/esm/index.js +1827 -1547
- package/package.json +1 -1
- package/src/__tests__/integration.test.tsx +12 -10
- package/src/adapters/BaseAdapter.ts +116 -0
- package/src/adapters/__tests__/index.test.ts +10 -10
- package/src/adapters/h5/index.ts +1 -3
- package/src/adapters/index.ts +65 -65
- package/src/adapters/swan/index.ts +26 -223
- package/src/adapters/tt/index.ts +28 -225
- package/src/adapters/types.ts +36 -0
- package/src/adapters/weapp/index.ts +29 -189
- package/src/charts/bar/index.tsx +5 -9
- package/src/charts/candlestick/__tests__/index.test.tsx +37 -0
- package/src/charts/candlestick/index.tsx +13 -0
- package/src/charts/common/BaseChartWrapper.tsx +49 -46
- package/src/charts/funnel/index.tsx +5 -9
- package/src/charts/gauge/index.tsx +5 -9
- package/src/charts/graph/__tests__/index.test.tsx +41 -0
- package/src/charts/graph/index.tsx +13 -0
- package/src/charts/heatmap/index.tsx +5 -9
- package/src/charts/index.ts +6 -1
- package/src/charts/line/index.tsx +4 -7
- package/src/charts/pie/index.tsx +5 -10
- package/src/charts/radar/index.tsx +5 -9
- package/src/charts/scatter/index.tsx +5 -9
- package/src/charts/types.ts +48 -4
- package/src/charts/wordcloud/__tests__/index.test.tsx +36 -0
- package/src/charts/wordcloud/index.tsx +13 -0
- package/src/core/animation/AnimationManager.ts +15 -0
- package/src/core/components/Annotation.tsx +26 -21
- package/src/core/components/BaseChart.tsx +280 -1105
- package/src/core/components/ErrorBoundary.tsx +4 -1
- package/src/core/components/LazyChart.tsx +42 -55
- package/src/core/components/hooks/index.ts +20 -0
- package/src/core/components/hooks/useChartEvents.ts +143 -0
- package/src/core/components/hooks/useChartInit.ts +80 -0
- package/src/core/components/hooks/usePerformance.ts +186 -0
- package/src/core/components/hooks/useVirtualScroll.ts +156 -0
- package/src/core/echarts.ts +1 -1
- package/src/core/themes/ThemeManager.ts +31 -15
- package/src/core/types/index.ts +2 -2
- package/src/core/utils/chartInstances.ts +18 -2
- package/src/core/utils/chartUtils.ts +46 -0
- package/src/core/utils/codeGenerator/CodeGenerator.ts +19 -5
- package/src/core/utils/common.ts +14 -1
- package/src/core/utils/export/ExportUtils.ts +13 -22
- package/src/core/utils/performance/PerformanceAnalyzer.ts +32 -5
- package/src/core/utils/uuid.ts +9 -5
- package/src/editor/ThemeEditor.tsx +1 -6
- package/src/hooks/__tests__/index.test.tsx +14 -11
- package/src/hooks/__tests__/useDataTransform.test.ts +159 -0
- package/src/hooks/index.ts +76 -23
- package/src/hooks/useDataTransform.ts +503 -0
- package/src/index.ts +15 -2
- package/src/main.tsx +4 -4
- package/src/themes/__tests__/index.test.ts +2 -2
- package/src/themes/index.ts +13 -0
package/dist/esm/index.js
CHANGED
|
@@ -1,10 +1,121 @@
|
|
|
1
1
|
/******/ var __webpack_modules__ = ({
|
|
2
2
|
|
|
3
|
+
/***/ 219
|
|
4
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
5
|
+
|
|
6
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7
|
+
/* harmony export */ D: () => (/* binding */ BaseAdapter)
|
|
8
|
+
/* harmony export */ });
|
|
9
|
+
/**
|
|
10
|
+
* TaroViz 适配器基类
|
|
11
|
+
* 提供通用方法,减少子类重复代码
|
|
12
|
+
* 注意:这是一个工具基类,不直接实现 Adapter 接口
|
|
13
|
+
* 子类负责实现真正的 Adapter 接口
|
|
14
|
+
*/
|
|
15
|
+
var BaseAdapter = /** @class */function () {
|
|
16
|
+
function BaseAdapter(config) {
|
|
17
|
+
if (config === void 0) {
|
|
18
|
+
config = {};
|
|
19
|
+
}
|
|
20
|
+
this.chartInstance = null;
|
|
21
|
+
this.config = config;
|
|
22
|
+
}
|
|
23
|
+
BaseAdapter.prototype.getInstance = function () {
|
|
24
|
+
return this.chartInstance;
|
|
25
|
+
};
|
|
26
|
+
BaseAdapter.prototype.setOption = function (option, opts) {
|
|
27
|
+
if (this.chartInstance) {
|
|
28
|
+
this.chartInstance.setOption(option, opts);
|
|
29
|
+
} else {
|
|
30
|
+
this.config['option'] = option;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
BaseAdapter.prototype.setTheme = function (theme) {
|
|
34
|
+
this.config['theme'] = theme;
|
|
35
|
+
var instance = this.chartInstance;
|
|
36
|
+
if (instance === null || instance === void 0 ? void 0 : instance.setTheme) {
|
|
37
|
+
instance.setTheme(theme);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
BaseAdapter.prototype.getWidth = function () {
|
|
41
|
+
var w = this.config['width'];
|
|
42
|
+
if (typeof w === 'number') return w;
|
|
43
|
+
if (typeof w === 'string') {
|
|
44
|
+
var parsed = parseInt(w, 10);
|
|
45
|
+
if (!isNaN(parsed)) return parsed;
|
|
46
|
+
}
|
|
47
|
+
return 300;
|
|
48
|
+
};
|
|
49
|
+
BaseAdapter.prototype.getHeight = function () {
|
|
50
|
+
var h = this.config['height'];
|
|
51
|
+
if (typeof h === 'number') return h;
|
|
52
|
+
if (typeof h === 'string') {
|
|
53
|
+
var parsed = parseInt(h, 10);
|
|
54
|
+
if (!isNaN(parsed)) return parsed;
|
|
55
|
+
}
|
|
56
|
+
return 300;
|
|
57
|
+
};
|
|
58
|
+
BaseAdapter.prototype.getDom = function () {
|
|
59
|
+
return null;
|
|
60
|
+
};
|
|
61
|
+
BaseAdapter.prototype.convertToDataURL = function (opts) {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
return (_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
64
|
+
};
|
|
65
|
+
BaseAdapter.prototype.clear = function () {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.clear) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
68
|
+
};
|
|
69
|
+
BaseAdapter.prototype.on = function (event, handler) {
|
|
70
|
+
var _a, _b;
|
|
71
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.on) === null || _b === void 0 ? void 0 : _b.call(_a, event, handler);
|
|
72
|
+
};
|
|
73
|
+
BaseAdapter.prototype.off = function (event, handler) {
|
|
74
|
+
var _a, _b;
|
|
75
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.off) === null || _b === void 0 ? void 0 : _b.call(_a, event, handler);
|
|
76
|
+
};
|
|
77
|
+
BaseAdapter.prototype.showLoading = function (opts) {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.showLoading) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
80
|
+
};
|
|
81
|
+
BaseAdapter.prototype.hideLoading = function () {
|
|
82
|
+
var _a, _b;
|
|
83
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.hideLoading) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
84
|
+
};
|
|
85
|
+
BaseAdapter.prototype.dispose = function () {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
if (this.chartInstance) {
|
|
88
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
89
|
+
this.chartInstance = null;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
BaseAdapter.prototype.resize = function (opts) {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.resize) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
95
|
+
};
|
|
96
|
+
BaseAdapter.prototype.setComponent = function (component) {
|
|
97
|
+
this.config['component'] = component;
|
|
98
|
+
};
|
|
99
|
+
BaseAdapter.prototype.parseSize = function (value, defaultValue) {
|
|
100
|
+
if (typeof value === 'number') return value;
|
|
101
|
+
if (typeof value === 'string') {
|
|
102
|
+
var parsed = parseInt(value, 10);
|
|
103
|
+
if (!isNaN(parsed)) return parsed;
|
|
104
|
+
}
|
|
105
|
+
return defaultValue;
|
|
106
|
+
};
|
|
107
|
+
return BaseAdapter;
|
|
108
|
+
}();
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
/***/ },
|
|
112
|
+
|
|
3
113
|
/***/ 123
|
|
4
114
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
5
115
|
|
|
116
|
+
__webpack_require__.r(__webpack_exports__);
|
|
6
117
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7
|
-
/* harmony export */
|
|
118
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
8
119
|
/* harmony export */ });
|
|
9
120
|
/* harmony import */ var echarts_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(163);
|
|
10
121
|
/* harmony import */ var echarts_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(echarts_components__WEBPACK_IMPORTED_MODULE_0__);
|
|
@@ -64,9 +175,7 @@ var H5Adapter = /** @class */function () {
|
|
|
64
175
|
// 获取容器元素
|
|
65
176
|
var container = ((_a = this.containerRef) === null || _a === void 0 ? void 0 : _a.current) || document.getElementById(this.canvasId);
|
|
66
177
|
if (!container) {
|
|
67
|
-
|
|
68
|
-
// 如果容器未找到,返回一个空对象
|
|
69
|
-
return {};
|
|
178
|
+
throw new Error("[TaroViz] H5Adapter: container not found (canvasId: ".concat(this.canvasId, ")"));
|
|
70
179
|
}
|
|
71
180
|
// 初始化图表
|
|
72
181
|
this.instance = echarts_core__WEBPACK_IMPORTED_MODULE_1__.init(container, this.options.theme, {
|
|
@@ -280,8 +389,9 @@ var H5Adapter = /** @class */function () {
|
|
|
280
389
|
/***/ 382
|
|
281
390
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
282
391
|
|
|
392
|
+
__webpack_require__.r(__webpack_exports__);
|
|
283
393
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
284
|
-
/* harmony export */
|
|
394
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
285
395
|
/* harmony export */ });
|
|
286
396
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15);
|
|
287
397
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
@@ -647,7 +757,120 @@ var harmony = __webpack_require__(382);
|
|
|
647
757
|
/**
|
|
648
758
|
* TaroViz 平台适配器
|
|
649
759
|
* 自动检测并加载适合当前平台的适配器
|
|
760
|
+
*
|
|
761
|
+
* 使用动态导入实现按需加载,减少包体积
|
|
650
762
|
*/
|
|
763
|
+
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
764
|
+
function adopt(value) {
|
|
765
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
766
|
+
resolve(value);
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
770
|
+
function fulfilled(value) {
|
|
771
|
+
try {
|
|
772
|
+
step(generator.next(value));
|
|
773
|
+
} catch (e) {
|
|
774
|
+
reject(e);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
function rejected(value) {
|
|
778
|
+
try {
|
|
779
|
+
step(generator["throw"](value));
|
|
780
|
+
} catch (e) {
|
|
781
|
+
reject(e);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
function step(result) {
|
|
785
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
786
|
+
}
|
|
787
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
788
|
+
});
|
|
789
|
+
};
|
|
790
|
+
var __generator = undefined && undefined.__generator || function (thisArg, body) {
|
|
791
|
+
var _ = {
|
|
792
|
+
label: 0,
|
|
793
|
+
sent: function () {
|
|
794
|
+
if (t[0] & 1) throw t[1];
|
|
795
|
+
return t[1];
|
|
796
|
+
},
|
|
797
|
+
trys: [],
|
|
798
|
+
ops: []
|
|
799
|
+
},
|
|
800
|
+
f,
|
|
801
|
+
y,
|
|
802
|
+
t,
|
|
803
|
+
g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
804
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
805
|
+
return this;
|
|
806
|
+
}), g;
|
|
807
|
+
function verb(n) {
|
|
808
|
+
return function (v) {
|
|
809
|
+
return step([n, v]);
|
|
810
|
+
};
|
|
811
|
+
}
|
|
812
|
+
function step(op) {
|
|
813
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
814
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
815
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
816
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
817
|
+
switch (op[0]) {
|
|
818
|
+
case 0:
|
|
819
|
+
case 1:
|
|
820
|
+
t = op;
|
|
821
|
+
break;
|
|
822
|
+
case 4:
|
|
823
|
+
_.label++;
|
|
824
|
+
return {
|
|
825
|
+
value: op[1],
|
|
826
|
+
done: false
|
|
827
|
+
};
|
|
828
|
+
case 5:
|
|
829
|
+
_.label++;
|
|
830
|
+
y = op[1];
|
|
831
|
+
op = [0];
|
|
832
|
+
continue;
|
|
833
|
+
case 7:
|
|
834
|
+
op = _.ops.pop();
|
|
835
|
+
_.trys.pop();
|
|
836
|
+
continue;
|
|
837
|
+
default:
|
|
838
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
839
|
+
_ = 0;
|
|
840
|
+
continue;
|
|
841
|
+
}
|
|
842
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
843
|
+
_.label = op[1];
|
|
844
|
+
break;
|
|
845
|
+
}
|
|
846
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
847
|
+
_.label = t[1];
|
|
848
|
+
t = op;
|
|
849
|
+
break;
|
|
850
|
+
}
|
|
851
|
+
if (t && _.label < t[2]) {
|
|
852
|
+
_.label = t[2];
|
|
853
|
+
_.ops.push(op);
|
|
854
|
+
break;
|
|
855
|
+
}
|
|
856
|
+
if (t[2]) _.ops.pop();
|
|
857
|
+
_.trys.pop();
|
|
858
|
+
continue;
|
|
859
|
+
}
|
|
860
|
+
op = body.call(thisArg, _);
|
|
861
|
+
} catch (e) {
|
|
862
|
+
op = [6, e];
|
|
863
|
+
y = 0;
|
|
864
|
+
} finally {
|
|
865
|
+
f = t = 0;
|
|
866
|
+
}
|
|
867
|
+
if (op[0] & 5) throw op[1];
|
|
868
|
+
return {
|
|
869
|
+
value: op[0] ? op[1] : void 0,
|
|
870
|
+
done: true
|
|
871
|
+
};
|
|
872
|
+
}
|
|
873
|
+
};
|
|
651
874
|
var _a;
|
|
652
875
|
|
|
653
876
|
var PLATFORM_CONFIGS = (_a = {}, _a[PlatformType.H5] = {
|
|
@@ -677,6 +900,9 @@ var PLATFORM_CONFIGS = (_a = {}, _a[PlatformType.H5] = {
|
|
|
677
900
|
name: 'QiyeWechat'
|
|
678
901
|
}, _a[PlatformType.LARK] = {
|
|
679
902
|
name: 'Lark'
|
|
903
|
+
}, _a[PlatformType.KWAI] = {
|
|
904
|
+
name: 'Kwai',
|
|
905
|
+
requireComponent: true
|
|
680
906
|
}, _a[PlatformType.HARMONY] = {
|
|
681
907
|
name: 'HarmonyOS',
|
|
682
908
|
requireComponent: true
|
|
@@ -688,58 +914,59 @@ function detectPlatform() {
|
|
|
688
914
|
if (typeof window === 'undefined') {
|
|
689
915
|
return PlatformType.H5;
|
|
690
916
|
}
|
|
917
|
+
var win = window;
|
|
691
918
|
var checks = [{
|
|
692
919
|
test: function () {
|
|
693
920
|
var _a, _b;
|
|
694
|
-
return
|
|
921
|
+
return !!((_a = win.wx) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync) && !((_b = win.wx) === null || _b === void 0 ? void 0 : _b.qy);
|
|
695
922
|
},
|
|
696
923
|
platform: PlatformType.WEAPP
|
|
697
924
|
}, {
|
|
698
925
|
test: function () {
|
|
699
926
|
var _a;
|
|
700
|
-
return
|
|
927
|
+
return !!((_a = win.my) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
701
928
|
},
|
|
702
929
|
platform: PlatformType.ALIPAY
|
|
703
930
|
}, {
|
|
704
931
|
test: function () {
|
|
705
932
|
var _a;
|
|
706
|
-
return
|
|
933
|
+
return !!((_a = win.swan) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
707
934
|
},
|
|
708
935
|
platform: PlatformType.SWAN
|
|
709
936
|
}, {
|
|
710
937
|
test: function () {
|
|
711
938
|
var _a;
|
|
712
|
-
return
|
|
939
|
+
return !!((_a = win.tt) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
713
940
|
},
|
|
714
941
|
platform: PlatformType.TT
|
|
715
942
|
}, {
|
|
716
943
|
test: function () {
|
|
717
944
|
var _a;
|
|
718
|
-
return
|
|
945
|
+
return !!((_a = win.qq) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
719
946
|
},
|
|
720
947
|
platform: PlatformType.QQ
|
|
721
948
|
}, {
|
|
722
949
|
test: function () {
|
|
723
950
|
var _a;
|
|
724
|
-
return
|
|
951
|
+
return !!((_a = win.jd) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
725
952
|
},
|
|
726
953
|
platform: PlatformType.JD
|
|
727
954
|
}, {
|
|
728
955
|
test: function () {
|
|
729
956
|
var _a;
|
|
730
|
-
return
|
|
957
|
+
return !!((_a = win.dd) === null || _a === void 0 ? void 0 : _a.getSystemInfoSync);
|
|
731
958
|
},
|
|
732
959
|
platform: PlatformType.DD
|
|
733
960
|
}, {
|
|
734
961
|
test: function () {
|
|
735
962
|
var _a;
|
|
736
|
-
return
|
|
963
|
+
return !!((_a = win.wx) === null || _a === void 0 ? void 0 : _a.qy);
|
|
737
964
|
},
|
|
738
965
|
platform: PlatformType.QYWX
|
|
739
966
|
}, {
|
|
740
967
|
test: function () {
|
|
741
968
|
var _a, _b;
|
|
742
|
-
return
|
|
969
|
+
return ((_b = (_a = win.tt) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b.appName) === 'lark';
|
|
743
970
|
},
|
|
744
971
|
platform: PlatformType.LARK
|
|
745
972
|
}, {
|
|
@@ -769,52 +996,97 @@ function getEnv() {
|
|
|
769
996
|
}
|
|
770
997
|
return 'unknown';
|
|
771
998
|
}
|
|
772
|
-
/**
|
|
773
|
-
* 创建适配器实例
|
|
774
|
-
*/
|
|
775
|
-
function createAdapterInstance(platform, options) {
|
|
776
|
-
var _a;
|
|
777
|
-
var adapters = (_a = {}, _a[PlatformType.H5] = function () {
|
|
778
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
779
|
-
}, _a[PlatformType.WEAPP] = function () {
|
|
780
|
-
return (__webpack_require__(999)/* ["default"] */ .A).create(options);
|
|
781
|
-
}, _a[PlatformType.SWAN] = function () {
|
|
782
|
-
return (__webpack_require__(85)/* ["default"] */ .A).create(options);
|
|
783
|
-
}, _a[PlatformType.TT] = function () {
|
|
784
|
-
return (__webpack_require__(280)/* ["default"] */ .A).create(options);
|
|
785
|
-
}, _a[PlatformType.HARMONY] = function () {
|
|
786
|
-
return (__webpack_require__(382)/* ["default"] */ .A).create(options);
|
|
787
|
-
}, _a[PlatformType.ALIPAY] = function () {
|
|
788
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
789
|
-
}, _a[PlatformType.QQ] = function () {
|
|
790
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
791
|
-
}, _a[PlatformType.JD] = function () {
|
|
792
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
793
|
-
}, _a[PlatformType.DD] = function () {
|
|
794
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
795
|
-
}, _a[PlatformType.QYWX] = function () {
|
|
796
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
797
|
-
}, _a[PlatformType.LARK] = function () {
|
|
798
|
-
return (__webpack_require__(123)/* ["default"] */ .A).create(options);
|
|
799
|
-
}, _a);
|
|
800
|
-
return adapters[platform]();
|
|
801
|
-
}
|
|
802
999
|
/**
|
|
803
1000
|
* 获取适配器
|
|
1001
|
+
* 返回 Promise 以支持动态导入
|
|
804
1002
|
*/
|
|
805
1003
|
function getAdapter(options) {
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
1004
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
1005
|
+
var platform, config, _a, h5Adapter, weappAdapter, swanAdapter, ttAdapter, harmonyAdapter, h5Adapter, error_1, h5Adapter;
|
|
1006
|
+
return __generator(this, function (_b) {
|
|
1007
|
+
switch (_b.label) {
|
|
1008
|
+
case 0:
|
|
1009
|
+
platform = detectPlatform();
|
|
1010
|
+
config = PLATFORM_CONFIGS[platform];
|
|
1011
|
+
// 检查是否需要 component 属性
|
|
1012
|
+
if ((config === null || config === void 0 ? void 0 : config.requireComponent) && !('component' in options)) {
|
|
1013
|
+
console.warn("[TaroViz] ".concat(config.name, "Adapter requires component property, fallback to H5Adapter"));
|
|
1014
|
+
}
|
|
1015
|
+
_b.label = 1;
|
|
1016
|
+
case 1:
|
|
1017
|
+
_b.trys.push([1, 15,, 17]);
|
|
1018
|
+
_a = platform;
|
|
1019
|
+
switch (_a) {
|
|
1020
|
+
case PlatformType.H5:
|
|
1021
|
+
return [3 /*break*/, 2];
|
|
1022
|
+
case PlatformType.ALIPAY:
|
|
1023
|
+
return [3 /*break*/, 2];
|
|
1024
|
+
case PlatformType.QQ:
|
|
1025
|
+
return [3 /*break*/, 2];
|
|
1026
|
+
case PlatformType.JD:
|
|
1027
|
+
return [3 /*break*/, 2];
|
|
1028
|
+
case PlatformType.DD:
|
|
1029
|
+
return [3 /*break*/, 2];
|
|
1030
|
+
case PlatformType.QYWX:
|
|
1031
|
+
return [3 /*break*/, 2];
|
|
1032
|
+
case PlatformType.LARK:
|
|
1033
|
+
return [3 /*break*/, 2];
|
|
1034
|
+
case PlatformType.KWAI:
|
|
1035
|
+
return [3 /*break*/, 2];
|
|
1036
|
+
case PlatformType.WEAPP:
|
|
1037
|
+
return [3 /*break*/, 4];
|
|
1038
|
+
case PlatformType.SWAN:
|
|
1039
|
+
return [3 /*break*/, 6];
|
|
1040
|
+
case PlatformType.TT:
|
|
1041
|
+
return [3 /*break*/, 8];
|
|
1042
|
+
case PlatformType.HARMONY:
|
|
1043
|
+
return [3 /*break*/, 10];
|
|
1044
|
+
}
|
|
1045
|
+
return [3 /*break*/, 12];
|
|
1046
|
+
case 2:
|
|
1047
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 123))];
|
|
1048
|
+
case 3:
|
|
1049
|
+
h5Adapter = _b.sent().default;
|
|
1050
|
+
return [2 /*return*/, h5Adapter.create(options)];
|
|
1051
|
+
case 4:
|
|
1052
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 999))];
|
|
1053
|
+
case 5:
|
|
1054
|
+
weappAdapter = _b.sent().default;
|
|
1055
|
+
return [2 /*return*/, weappAdapter.create(options)];
|
|
1056
|
+
case 6:
|
|
1057
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 85))];
|
|
1058
|
+
case 7:
|
|
1059
|
+
swanAdapter = _b.sent().default;
|
|
1060
|
+
return [2 /*return*/, swanAdapter.create(options)];
|
|
1061
|
+
case 8:
|
|
1062
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 280))];
|
|
1063
|
+
case 9:
|
|
1064
|
+
ttAdapter = _b.sent().default;
|
|
1065
|
+
return [2 /*return*/, ttAdapter.create(options)];
|
|
1066
|
+
case 10:
|
|
1067
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 382))];
|
|
1068
|
+
case 11:
|
|
1069
|
+
harmonyAdapter = _b.sent().default;
|
|
1070
|
+
return [2 /*return*/, harmonyAdapter.create(options)];
|
|
1071
|
+
case 12:
|
|
1072
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 123))];
|
|
1073
|
+
case 13:
|
|
1074
|
+
h5Adapter = _b.sent().default;
|
|
1075
|
+
return [2 /*return*/, h5Adapter.create(options)];
|
|
1076
|
+
case 14:
|
|
1077
|
+
return [3 /*break*/, 17];
|
|
1078
|
+
case 15:
|
|
1079
|
+
error_1 = _b.sent();
|
|
1080
|
+
console.error("[TaroViz] Failed to load adapter for platform '".concat(platform, "':"), error_1);
|
|
1081
|
+
return [4 /*yield*/, Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 123))];
|
|
1082
|
+
case 16:
|
|
1083
|
+
h5Adapter = _b.sent().default;
|
|
1084
|
+
return [2 /*return*/, h5Adapter.create(options)];
|
|
1085
|
+
case 17:
|
|
1086
|
+
return [2 /*return*/];
|
|
1087
|
+
}
|
|
1088
|
+
});
|
|
1089
|
+
});
|
|
818
1090
|
}
|
|
819
1091
|
// 导出所有适配器
|
|
820
1092
|
|
|
@@ -830,12 +1102,7 @@ var adapters_version = '1.2.0';
|
|
|
830
1102
|
/* harmony default export */ const adapters = ({
|
|
831
1103
|
getAdapter: getAdapter,
|
|
832
1104
|
getEnv: getEnv,
|
|
833
|
-
detectPlatform: detectPlatform
|
|
834
|
-
h5: (__webpack_require__(123)/* ["default"] */ .A),
|
|
835
|
-
weapp: (__webpack_require__(999)/* ["default"] */ .A),
|
|
836
|
-
swan: (__webpack_require__(85)/* ["default"] */ .A),
|
|
837
|
-
tt: (__webpack_require__(280)/* ["default"] */ .A),
|
|
838
|
-
harmony: (__webpack_require__(382)/* ["default"] */ .A)
|
|
1105
|
+
detectPlatform: detectPlatform
|
|
839
1106
|
});
|
|
840
1107
|
|
|
841
1108
|
/***/ },
|
|
@@ -843,70 +1110,55 @@ var adapters_version = '1.2.0';
|
|
|
843
1110
|
/***/ 85
|
|
844
1111
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
845
1112
|
|
|
1113
|
+
__webpack_require__.r(__webpack_exports__);
|
|
846
1114
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
847
|
-
/* harmony export */
|
|
1115
|
+
/* harmony export */ SwanAdapter: () => (/* binding */ SwanAdapter),
|
|
1116
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
848
1117
|
/* harmony export */ });
|
|
849
|
-
/* harmony import */ var
|
|
850
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
851
|
-
var __assign = undefined && undefined.__assign || function () {
|
|
852
|
-
__assign = Object.assign || function (t) {
|
|
853
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
854
|
-
s = arguments[i];
|
|
855
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
856
|
-
}
|
|
857
|
-
return t;
|
|
858
|
-
};
|
|
859
|
-
return __assign.apply(this, arguments);
|
|
860
|
-
};
|
|
1118
|
+
/* harmony import */ var _BaseAdapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
|
|
861
1119
|
/**
|
|
862
1120
|
* TaroViz 百度小程序适配器
|
|
863
1121
|
* 基于百度小程序canvas组件实现图表渲染
|
|
864
1122
|
*/
|
|
1123
|
+
var __extends = undefined && undefined.__extends || function () {
|
|
1124
|
+
var extendStatics = function (d, b) {
|
|
1125
|
+
extendStatics = Object.setPrototypeOf || {
|
|
1126
|
+
__proto__: []
|
|
1127
|
+
} instanceof Array && function (d, b) {
|
|
1128
|
+
d.__proto__ = b;
|
|
1129
|
+
} || function (d, b) {
|
|
1130
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
|
1131
|
+
};
|
|
1132
|
+
return extendStatics(d, b);
|
|
1133
|
+
};
|
|
1134
|
+
return function (d, b) {
|
|
1135
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
1136
|
+
extendStatics(d, b);
|
|
1137
|
+
function __() {
|
|
1138
|
+
this.constructor = d;
|
|
1139
|
+
}
|
|
1140
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
1141
|
+
};
|
|
1142
|
+
}();
|
|
865
1143
|
|
|
866
|
-
/**
|
|
867
|
-
|
|
868
|
-
*/
|
|
869
|
-
var SwanAdapter = /** @class */function () {
|
|
870
|
-
/**
|
|
871
|
-
* 构造函数
|
|
872
|
-
* @param config 适配器配置
|
|
873
|
-
*/
|
|
1144
|
+
var SwanAdapter = /** @class */function (_super) {
|
|
1145
|
+
__extends(SwanAdapter, _super);
|
|
874
1146
|
function SwanAdapter(config) {
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
/**
|
|
880
|
-
* 组件实例
|
|
881
|
-
*/
|
|
882
|
-
this.component = null;
|
|
883
|
-
this.config = config;
|
|
884
|
-
this.component = config.component;
|
|
1147
|
+
var _this = _super.call(this, config) || this;
|
|
1148
|
+
_this.component = null;
|
|
1149
|
+
_this.component = config.component;
|
|
1150
|
+
return _this;
|
|
885
1151
|
}
|
|
886
|
-
/**
|
|
887
|
-
* 创建百度小程序适配器实例
|
|
888
|
-
* @param options 适配器选项
|
|
889
|
-
* @returns 适配器实例
|
|
890
|
-
*/
|
|
891
1152
|
SwanAdapter.create = function (options) {
|
|
892
1153
|
return new SwanAdapter(options);
|
|
893
1154
|
};
|
|
894
|
-
/**
|
|
895
|
-
* 获取图表实例
|
|
896
|
-
*/
|
|
897
|
-
SwanAdapter.prototype.getInstance = function () {
|
|
898
|
-
return this.chartInstance;
|
|
899
|
-
};
|
|
900
|
-
/**
|
|
901
|
-
* 初始化图表
|
|
902
|
-
*/
|
|
903
1155
|
SwanAdapter.prototype.init = function () {
|
|
904
|
-
var
|
|
905
|
-
|
|
906
|
-
width =
|
|
907
|
-
height =
|
|
908
|
-
theme =
|
|
909
|
-
option =
|
|
1156
|
+
var config = this.config;
|
|
1157
|
+
var canvasId = config.canvasId,
|
|
1158
|
+
width = config.width,
|
|
1159
|
+
height = config.height,
|
|
1160
|
+
theme = config.theme,
|
|
1161
|
+
option = config.option;
|
|
910
1162
|
if (!this.component) {
|
|
911
1163
|
console.error('[TaroViz] SwanAdapter: component is required');
|
|
912
1164
|
return null;
|
|
@@ -915,172 +1167,42 @@ var SwanAdapter = /** @class */function () {
|
|
|
915
1167
|
console.error('[TaroViz] SwanAdapter: canvasId is required');
|
|
916
1168
|
return null;
|
|
917
1169
|
}
|
|
918
|
-
// 创建图表实例
|
|
919
1170
|
var chart = this.component.createChart({
|
|
920
1171
|
id: canvasId,
|
|
921
1172
|
width: width,
|
|
922
1173
|
height: height,
|
|
923
1174
|
theme: theme
|
|
924
1175
|
});
|
|
925
|
-
// 设置图表选项
|
|
926
1176
|
if (option) {
|
|
927
1177
|
chart.setOption(option);
|
|
928
1178
|
}
|
|
929
|
-
// 存储图表实例
|
|
930
1179
|
this.chartInstance = chart;
|
|
931
|
-
|
|
932
|
-
if (
|
|
933
|
-
|
|
1180
|
+
var onInit = this.config['onInit'];
|
|
1181
|
+
if (onInit) {
|
|
1182
|
+
onInit(chart);
|
|
934
1183
|
}
|
|
935
1184
|
return chart;
|
|
936
1185
|
};
|
|
937
|
-
/**
|
|
938
|
-
* 设置图表选项
|
|
939
|
-
*/
|
|
940
|
-
SwanAdapter.prototype.setOption = function (option, opts) {
|
|
941
|
-
if (this.chartInstance) {
|
|
942
|
-
this.chartInstance.setOption(option, opts);
|
|
943
|
-
} else {
|
|
944
|
-
this.config.option = option;
|
|
945
|
-
}
|
|
946
|
-
};
|
|
947
|
-
/**
|
|
948
|
-
* 设置主题
|
|
949
|
-
*/
|
|
950
|
-
SwanAdapter.prototype.setTheme = function (theme) {
|
|
951
|
-
var _a, _b;
|
|
952
|
-
this.config.theme = theme;
|
|
953
|
-
if (this.chartInstance) {
|
|
954
|
-
(_b = (_a = this.chartInstance).setTheme) === null || _b === void 0 ? void 0 : _b.call(_a, theme);
|
|
955
|
-
}
|
|
956
|
-
};
|
|
957
|
-
/**
|
|
958
|
-
* 获取图表宽度
|
|
959
|
-
*/
|
|
960
1186
|
SwanAdapter.prototype.getWidth = function () {
|
|
961
|
-
return
|
|
1187
|
+
return this.parseSize(this.config.width, 300);
|
|
962
1188
|
};
|
|
963
|
-
/**
|
|
964
|
-
* 获取图表高度
|
|
965
|
-
*/
|
|
966
1189
|
SwanAdapter.prototype.getHeight = function () {
|
|
967
|
-
return
|
|
968
|
-
};
|
|
969
|
-
/**
|
|
970
|
-
* 获取DOM元素
|
|
971
|
-
*/
|
|
972
|
-
SwanAdapter.prototype.getDom = function () {
|
|
973
|
-
return null;
|
|
974
|
-
};
|
|
975
|
-
/**
|
|
976
|
-
* 转换为DataURL
|
|
977
|
-
*/
|
|
978
|
-
SwanAdapter.prototype.convertToDataURL = function (opts) {
|
|
979
|
-
var _a;
|
|
980
|
-
return (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL(opts);
|
|
1190
|
+
return this.parseSize(this.config.height, 300);
|
|
981
1191
|
};
|
|
982
|
-
/**
|
|
983
|
-
* 清空图表
|
|
984
|
-
*/
|
|
985
|
-
SwanAdapter.prototype.clear = function () {
|
|
986
|
-
if (this.chartInstance) {
|
|
987
|
-
this.chartInstance.clear();
|
|
988
|
-
}
|
|
989
|
-
};
|
|
990
|
-
/**
|
|
991
|
-
* 绑定事件
|
|
992
|
-
*/
|
|
993
|
-
SwanAdapter.prototype.on = function (event, handler) {
|
|
994
|
-
if (this.chartInstance) {
|
|
995
|
-
this.chartInstance.on(event, handler);
|
|
996
|
-
}
|
|
997
|
-
};
|
|
998
|
-
/**
|
|
999
|
-
* 解绑事件
|
|
1000
|
-
*/
|
|
1001
|
-
SwanAdapter.prototype.off = function (event, handler) {
|
|
1002
|
-
if (this.chartInstance) {
|
|
1003
|
-
this.chartInstance.off(event, handler);
|
|
1004
|
-
}
|
|
1005
|
-
};
|
|
1006
|
-
/**
|
|
1007
|
-
* 显示加载动画
|
|
1008
|
-
*/
|
|
1009
|
-
SwanAdapter.prototype.showLoading = function (opts) {
|
|
1010
|
-
if (this.chartInstance) {
|
|
1011
|
-
this.chartInstance.showLoading(opts);
|
|
1012
|
-
}
|
|
1013
|
-
};
|
|
1014
|
-
/**
|
|
1015
|
-
* 隐藏加载动画
|
|
1016
|
-
*/
|
|
1017
|
-
SwanAdapter.prototype.hideLoading = function () {
|
|
1018
|
-
if (this.chartInstance) {
|
|
1019
|
-
this.chartInstance.hideLoading();
|
|
1020
|
-
}
|
|
1021
|
-
};
|
|
1022
|
-
/**
|
|
1023
|
-
* 销毁图表
|
|
1024
|
-
*/
|
|
1025
|
-
SwanAdapter.prototype.dispose = function () {
|
|
1026
|
-
if (this.chartInstance) {
|
|
1027
|
-
this.chartInstance.dispose();
|
|
1028
|
-
this.chartInstance = null;
|
|
1029
|
-
}
|
|
1030
|
-
};
|
|
1031
|
-
/**
|
|
1032
|
-
* 处理图表大小变化
|
|
1033
|
-
*/
|
|
1034
|
-
SwanAdapter.prototype.resize = function (opts) {
|
|
1035
|
-
if (this.chartInstance) {
|
|
1036
|
-
this.chartInstance.resize(opts);
|
|
1037
|
-
}
|
|
1038
|
-
};
|
|
1039
|
-
/**
|
|
1040
|
-
* 设置组件实例
|
|
1041
|
-
*/
|
|
1042
1192
|
SwanAdapter.prototype.setComponent = function (component) {
|
|
1043
1193
|
this.component = component;
|
|
1044
1194
|
};
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
SwanAdapter.prototype.render = function () {
|
|
1049
|
-
var _a = this.config,
|
|
1050
|
-
_b = _a.canvasId,
|
|
1051
|
-
canvasId = _b === void 0 ? 'ec-canvas' : _b,
|
|
1052
|
-
_c = _a.width,
|
|
1053
|
-
width = _c === void 0 ? '100%' : _c,
|
|
1054
|
-
_d = _a.height,
|
|
1055
|
-
height = _d === void 0 ? '300px' : _d,
|
|
1056
|
-
_e = _a.style,
|
|
1057
|
-
style = _e === void 0 ? {} : _e;
|
|
1058
|
-
// 注意:这里需要根据实际使用的Taro版本和组件库来调整
|
|
1059
|
-
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement('view', {
|
|
1060
|
-
id: canvasId,
|
|
1061
|
-
style: __assign({
|
|
1062
|
-
width: width,
|
|
1063
|
-
height: height
|
|
1064
|
-
}, style)
|
|
1065
|
-
});
|
|
1066
|
-
};
|
|
1067
|
-
/**
|
|
1068
|
-
* 触发图表行为
|
|
1069
|
-
*/
|
|
1070
|
-
SwanAdapter.prototype.dispatchAction = function (payload) {
|
|
1071
|
-
if (this.chartInstance) {
|
|
1072
|
-
this.chartInstance.dispatchAction(payload);
|
|
1073
|
-
}
|
|
1195
|
+
SwanAdapter.prototype.dispatchAction = function (action) {
|
|
1196
|
+
var _a, _b;
|
|
1197
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.dispatchAction) === null || _b === void 0 ? void 0 : _b.call(_a, action);
|
|
1074
1198
|
};
|
|
1075
|
-
/**
|
|
1076
|
-
* 获取DataURL
|
|
1077
|
-
*/
|
|
1078
1199
|
SwanAdapter.prototype.getDataURL = function (opts) {
|
|
1079
|
-
var _a;
|
|
1080
|
-
return (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL(opts);
|
|
1200
|
+
var _a, _b;
|
|
1201
|
+
return (_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
1081
1202
|
};
|
|
1082
1203
|
return SwanAdapter;
|
|
1083
|
-
}();
|
|
1204
|
+
}(_BaseAdapter__WEBPACK_IMPORTED_MODULE_0__/* .BaseAdapter */ .D);
|
|
1205
|
+
|
|
1084
1206
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SwanAdapter);
|
|
1085
1207
|
|
|
1086
1208
|
/***/ },
|
|
@@ -1088,70 +1210,55 @@ var SwanAdapter = /** @class */function () {
|
|
|
1088
1210
|
/***/ 280
|
|
1089
1211
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
1090
1212
|
|
|
1213
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1091
1214
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1092
|
-
/* harmony export */
|
|
1215
|
+
/* harmony export */ TTAdapter: () => (/* binding */ TTAdapter),
|
|
1216
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1093
1217
|
/* harmony export */ });
|
|
1094
|
-
/* harmony import */ var
|
|
1095
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
1096
|
-
var __assign = undefined && undefined.__assign || function () {
|
|
1097
|
-
__assign = Object.assign || function (t) {
|
|
1098
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1099
|
-
s = arguments[i];
|
|
1100
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
1101
|
-
}
|
|
1102
|
-
return t;
|
|
1103
|
-
};
|
|
1104
|
-
return __assign.apply(this, arguments);
|
|
1105
|
-
};
|
|
1218
|
+
/* harmony import */ var _BaseAdapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
|
|
1106
1219
|
/**
|
|
1107
|
-
* TaroViz
|
|
1108
|
-
*
|
|
1220
|
+
* TaroViz 抖音小程序适配器
|
|
1221
|
+
* 基于抖音小程序canvas组件实现图表渲染
|
|
1109
1222
|
*/
|
|
1223
|
+
var __extends = undefined && undefined.__extends || function () {
|
|
1224
|
+
var extendStatics = function (d, b) {
|
|
1225
|
+
extendStatics = Object.setPrototypeOf || {
|
|
1226
|
+
__proto__: []
|
|
1227
|
+
} instanceof Array && function (d, b) {
|
|
1228
|
+
d.__proto__ = b;
|
|
1229
|
+
} || function (d, b) {
|
|
1230
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
|
1231
|
+
};
|
|
1232
|
+
return extendStatics(d, b);
|
|
1233
|
+
};
|
|
1234
|
+
return function (d, b) {
|
|
1235
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
1236
|
+
extendStatics(d, b);
|
|
1237
|
+
function __() {
|
|
1238
|
+
this.constructor = d;
|
|
1239
|
+
}
|
|
1240
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
1241
|
+
};
|
|
1242
|
+
}();
|
|
1110
1243
|
|
|
1111
|
-
/**
|
|
1112
|
-
|
|
1113
|
-
*/
|
|
1114
|
-
var TTAdapter = /** @class */function () {
|
|
1115
|
-
/**
|
|
1116
|
-
* 构造函数
|
|
1117
|
-
* @param config 适配器配置
|
|
1118
|
-
*/
|
|
1244
|
+
var TTAdapter = /** @class */function (_super) {
|
|
1245
|
+
__extends(TTAdapter, _super);
|
|
1119
1246
|
function TTAdapter(config) {
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
/**
|
|
1125
|
-
* 组件实例
|
|
1126
|
-
*/
|
|
1127
|
-
this.component = null;
|
|
1128
|
-
this.config = config;
|
|
1129
|
-
this.component = config.component;
|
|
1247
|
+
var _this = _super.call(this, config) || this;
|
|
1248
|
+
_this.component = null;
|
|
1249
|
+
_this.component = config.component;
|
|
1250
|
+
return _this;
|
|
1130
1251
|
}
|
|
1131
|
-
/**
|
|
1132
|
-
* 创建字节跳动小程序适配器实例
|
|
1133
|
-
* @param options 适配器选项
|
|
1134
|
-
* @returns 适配器实例
|
|
1135
|
-
*/
|
|
1136
1252
|
TTAdapter.create = function (options) {
|
|
1137
1253
|
return new TTAdapter(options);
|
|
1138
1254
|
};
|
|
1139
|
-
/**
|
|
1140
|
-
* 获取图表实例
|
|
1141
|
-
*/
|
|
1142
|
-
TTAdapter.prototype.getInstance = function () {
|
|
1143
|
-
return this.chartInstance;
|
|
1144
|
-
};
|
|
1145
|
-
/**
|
|
1146
|
-
* 初始化图表
|
|
1147
|
-
*/
|
|
1148
1255
|
TTAdapter.prototype.init = function () {
|
|
1149
|
-
var
|
|
1150
|
-
|
|
1151
|
-
width =
|
|
1152
|
-
height =
|
|
1153
|
-
theme =
|
|
1154
|
-
option =
|
|
1256
|
+
var config = this.config;
|
|
1257
|
+
var canvasId = config.canvasId,
|
|
1258
|
+
width = config.width,
|
|
1259
|
+
height = config.height,
|
|
1260
|
+
theme = config.theme,
|
|
1261
|
+
option = config.option;
|
|
1155
1262
|
if (!this.component) {
|
|
1156
1263
|
console.error('[TaroViz] TTAdapter: component is required');
|
|
1157
1264
|
return null;
|
|
@@ -1160,172 +1267,42 @@ var TTAdapter = /** @class */function () {
|
|
|
1160
1267
|
console.error('[TaroViz] TTAdapter: canvasId is required');
|
|
1161
1268
|
return null;
|
|
1162
1269
|
}
|
|
1163
|
-
// 创建图表实例
|
|
1164
1270
|
var chart = this.component.createChart({
|
|
1165
1271
|
id: canvasId,
|
|
1166
1272
|
width: width,
|
|
1167
1273
|
height: height,
|
|
1168
1274
|
theme: theme
|
|
1169
1275
|
});
|
|
1170
|
-
// 设置图表选项
|
|
1171
1276
|
if (option) {
|
|
1172
1277
|
chart.setOption(option);
|
|
1173
1278
|
}
|
|
1174
|
-
// 存储图表实例
|
|
1175
1279
|
this.chartInstance = chart;
|
|
1176
|
-
|
|
1177
|
-
if (
|
|
1178
|
-
|
|
1280
|
+
var onInit = this.config['onInit'];
|
|
1281
|
+
if (onInit) {
|
|
1282
|
+
onInit(chart);
|
|
1179
1283
|
}
|
|
1180
1284
|
return chart;
|
|
1181
1285
|
};
|
|
1182
|
-
/**
|
|
1183
|
-
* 设置图表选项
|
|
1184
|
-
*/
|
|
1185
|
-
TTAdapter.prototype.setOption = function (option, opts) {
|
|
1186
|
-
if (this.chartInstance) {
|
|
1187
|
-
this.chartInstance.setOption(option, opts);
|
|
1188
|
-
} else {
|
|
1189
|
-
this.config.option = option;
|
|
1190
|
-
}
|
|
1191
|
-
};
|
|
1192
|
-
/**
|
|
1193
|
-
* 设置主题
|
|
1194
|
-
*/
|
|
1195
|
-
TTAdapter.prototype.setTheme = function (theme) {
|
|
1196
|
-
var _a, _b;
|
|
1197
|
-
this.config.theme = theme;
|
|
1198
|
-
if (this.chartInstance) {
|
|
1199
|
-
(_b = (_a = this.chartInstance).setTheme) === null || _b === void 0 ? void 0 : _b.call(_a, theme);
|
|
1200
|
-
}
|
|
1201
|
-
};
|
|
1202
|
-
/**
|
|
1203
|
-
* 获取图表宽度
|
|
1204
|
-
*/
|
|
1205
1286
|
TTAdapter.prototype.getWidth = function () {
|
|
1206
|
-
return
|
|
1287
|
+
return this.parseSize(this.config.width, 300);
|
|
1207
1288
|
};
|
|
1208
|
-
/**
|
|
1209
|
-
* 获取图表高度
|
|
1210
|
-
*/
|
|
1211
1289
|
TTAdapter.prototype.getHeight = function () {
|
|
1212
|
-
return
|
|
1213
|
-
};
|
|
1214
|
-
/**
|
|
1215
|
-
* 获取DOM元素
|
|
1216
|
-
*/
|
|
1217
|
-
TTAdapter.prototype.getDom = function () {
|
|
1218
|
-
return null;
|
|
1219
|
-
};
|
|
1220
|
-
/**
|
|
1221
|
-
* 转换为DataURL
|
|
1222
|
-
*/
|
|
1223
|
-
TTAdapter.prototype.convertToDataURL = function (opts) {
|
|
1224
|
-
var _a;
|
|
1225
|
-
return (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL(opts);
|
|
1226
|
-
};
|
|
1227
|
-
/**
|
|
1228
|
-
* 清空图表
|
|
1229
|
-
*/
|
|
1230
|
-
TTAdapter.prototype.clear = function () {
|
|
1231
|
-
if (this.chartInstance) {
|
|
1232
|
-
this.chartInstance.clear();
|
|
1233
|
-
}
|
|
1234
|
-
};
|
|
1235
|
-
/**
|
|
1236
|
-
* 绑定事件
|
|
1237
|
-
*/
|
|
1238
|
-
TTAdapter.prototype.on = function (event, handler) {
|
|
1239
|
-
if (this.chartInstance) {
|
|
1240
|
-
this.chartInstance.on(event, handler);
|
|
1241
|
-
}
|
|
1242
|
-
};
|
|
1243
|
-
/**
|
|
1244
|
-
* 解绑事件
|
|
1245
|
-
*/
|
|
1246
|
-
TTAdapter.prototype.off = function (event, handler) {
|
|
1247
|
-
if (this.chartInstance) {
|
|
1248
|
-
this.chartInstance.off(event, handler);
|
|
1249
|
-
}
|
|
1250
|
-
};
|
|
1251
|
-
/**
|
|
1252
|
-
* 显示加载动画
|
|
1253
|
-
*/
|
|
1254
|
-
TTAdapter.prototype.showLoading = function (opts) {
|
|
1255
|
-
if (this.chartInstance) {
|
|
1256
|
-
this.chartInstance.showLoading(opts);
|
|
1257
|
-
}
|
|
1258
|
-
};
|
|
1259
|
-
/**
|
|
1260
|
-
* 隐藏加载动画
|
|
1261
|
-
*/
|
|
1262
|
-
TTAdapter.prototype.hideLoading = function () {
|
|
1263
|
-
if (this.chartInstance) {
|
|
1264
|
-
this.chartInstance.hideLoading();
|
|
1265
|
-
}
|
|
1266
|
-
};
|
|
1267
|
-
/**
|
|
1268
|
-
* 销毁图表
|
|
1269
|
-
*/
|
|
1270
|
-
TTAdapter.prototype.dispose = function () {
|
|
1271
|
-
if (this.chartInstance) {
|
|
1272
|
-
this.chartInstance.dispose();
|
|
1273
|
-
this.chartInstance = null;
|
|
1274
|
-
}
|
|
1290
|
+
return this.parseSize(this.config.height, 300);
|
|
1275
1291
|
};
|
|
1276
|
-
/**
|
|
1277
|
-
* 处理图表大小变化
|
|
1278
|
-
*/
|
|
1279
|
-
TTAdapter.prototype.resize = function (opts) {
|
|
1280
|
-
if (this.chartInstance) {
|
|
1281
|
-
this.chartInstance.resize(opts);
|
|
1282
|
-
}
|
|
1283
|
-
};
|
|
1284
|
-
/**
|
|
1285
|
-
* 设置组件实例
|
|
1286
|
-
*/
|
|
1287
1292
|
TTAdapter.prototype.setComponent = function (component) {
|
|
1288
1293
|
this.component = component;
|
|
1289
1294
|
};
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
TTAdapter.prototype.render = function () {
|
|
1294
|
-
var _a = this.config,
|
|
1295
|
-
_b = _a.canvasId,
|
|
1296
|
-
canvasId = _b === void 0 ? 'ec-canvas' : _b,
|
|
1297
|
-
_c = _a.width,
|
|
1298
|
-
width = _c === void 0 ? '100%' : _c,
|
|
1299
|
-
_d = _a.height,
|
|
1300
|
-
height = _d === void 0 ? '300px' : _d,
|
|
1301
|
-
_e = _a.style,
|
|
1302
|
-
style = _e === void 0 ? {} : _e;
|
|
1303
|
-
// 注意:这里需要根据实际使用的Taro版本和组件库来调整
|
|
1304
|
-
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement('view', {
|
|
1305
|
-
id: canvasId,
|
|
1306
|
-
style: __assign({
|
|
1307
|
-
width: width,
|
|
1308
|
-
height: height
|
|
1309
|
-
}, style)
|
|
1310
|
-
});
|
|
1311
|
-
};
|
|
1312
|
-
/**
|
|
1313
|
-
* 触发图表行为
|
|
1314
|
-
*/
|
|
1315
|
-
TTAdapter.prototype.dispatchAction = function (payload) {
|
|
1316
|
-
if (this.chartInstance) {
|
|
1317
|
-
this.chartInstance.dispatchAction(payload);
|
|
1318
|
-
}
|
|
1295
|
+
TTAdapter.prototype.dispatchAction = function (action) {
|
|
1296
|
+
var _a, _b;
|
|
1297
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.dispatchAction) === null || _b === void 0 ? void 0 : _b.call(_a, action);
|
|
1319
1298
|
};
|
|
1320
|
-
/**
|
|
1321
|
-
* 获取DataURL
|
|
1322
|
-
*/
|
|
1323
1299
|
TTAdapter.prototype.getDataURL = function (opts) {
|
|
1324
|
-
var _a;
|
|
1325
|
-
return (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL(opts);
|
|
1300
|
+
var _a, _b;
|
|
1301
|
+
return (_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
1326
1302
|
};
|
|
1327
1303
|
return TTAdapter;
|
|
1328
|
-
}();
|
|
1304
|
+
}(_BaseAdapter__WEBPACK_IMPORTED_MODULE_0__/* .BaseAdapter */ .D);
|
|
1305
|
+
|
|
1329
1306
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TTAdapter);
|
|
1330
1307
|
|
|
1331
1308
|
/***/ },
|
|
@@ -1333,229 +1310,99 @@ var TTAdapter = /** @class */function () {
|
|
|
1333
1310
|
/***/ 999
|
|
1334
1311
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
1335
1312
|
|
|
1313
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1336
1314
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1337
|
-
/* harmony export */
|
|
1315
|
+
/* harmony export */ WeappAdapter: () => (/* binding */ WeappAdapter),
|
|
1316
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1338
1317
|
/* harmony export */ });
|
|
1339
|
-
/* harmony import */ var
|
|
1340
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
1341
|
-
var __assign = undefined && undefined.__assign || function () {
|
|
1342
|
-
__assign = Object.assign || function (t) {
|
|
1343
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
1344
|
-
s = arguments[i];
|
|
1345
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
1346
|
-
}
|
|
1347
|
-
return t;
|
|
1348
|
-
};
|
|
1349
|
-
return __assign.apply(this, arguments);
|
|
1350
|
-
};
|
|
1318
|
+
/* harmony import */ var _BaseAdapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
|
|
1351
1319
|
/**
|
|
1352
1320
|
* TaroViz 微信小程序适配器
|
|
1353
1321
|
* 基于微信小程序canvas组件实现图表渲染
|
|
1354
1322
|
*/
|
|
1323
|
+
var __extends = undefined && undefined.__extends || function () {
|
|
1324
|
+
var extendStatics = function (d, b) {
|
|
1325
|
+
extendStatics = Object.setPrototypeOf || {
|
|
1326
|
+
__proto__: []
|
|
1327
|
+
} instanceof Array && function (d, b) {
|
|
1328
|
+
d.__proto__ = b;
|
|
1329
|
+
} || function (d, b) {
|
|
1330
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
|
1331
|
+
};
|
|
1332
|
+
return extendStatics(d, b);
|
|
1333
|
+
};
|
|
1334
|
+
return function (d, b) {
|
|
1335
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
1336
|
+
extendStatics(d, b);
|
|
1337
|
+
function __() {
|
|
1338
|
+
this.constructor = d;
|
|
1339
|
+
}
|
|
1340
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
1341
|
+
};
|
|
1342
|
+
}();
|
|
1355
1343
|
|
|
1356
|
-
/**
|
|
1357
|
-
|
|
1358
|
-
*/
|
|
1359
|
-
var WeappAdapter = /** @class */function () {
|
|
1360
|
-
/**
|
|
1361
|
-
* 构造函数
|
|
1362
|
-
* @param config 适配器配置
|
|
1363
|
-
*/
|
|
1344
|
+
var WeappAdapter = /** @class */function (_super) {
|
|
1345
|
+
__extends(WeappAdapter, _super);
|
|
1364
1346
|
function WeappAdapter(config) {
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
/**
|
|
1370
|
-
* 组件实例
|
|
1371
|
-
*/
|
|
1372
|
-
this.component = null;
|
|
1373
|
-
this.config = config;
|
|
1374
|
-
this.component = config.component;
|
|
1347
|
+
var _this = _super.call(this, config) || this;
|
|
1348
|
+
_this.component = null;
|
|
1349
|
+
_this.component = config.component;
|
|
1350
|
+
return _this;
|
|
1375
1351
|
}
|
|
1376
|
-
/**
|
|
1377
|
-
* 创建微信小程序适配器实例
|
|
1378
|
-
* @param options 适配器选项
|
|
1379
|
-
* @returns 适配器实例
|
|
1380
|
-
*/
|
|
1381
1352
|
WeappAdapter.create = function (options) {
|
|
1382
1353
|
return new WeappAdapter(options);
|
|
1383
1354
|
};
|
|
1384
|
-
/**
|
|
1385
|
-
* 获取图表实例
|
|
1386
|
-
*/
|
|
1387
|
-
WeappAdapter.prototype.getInstance = function () {
|
|
1388
|
-
return this.chartInstance;
|
|
1389
|
-
};
|
|
1390
|
-
/**
|
|
1391
|
-
* 初始化图表
|
|
1392
|
-
*/
|
|
1393
1355
|
WeappAdapter.prototype.init = function () {
|
|
1394
|
-
var
|
|
1395
|
-
|
|
1396
|
-
width =
|
|
1397
|
-
height =
|
|
1398
|
-
theme =
|
|
1399
|
-
option =
|
|
1356
|
+
var config = this.config;
|
|
1357
|
+
var canvasId = config.canvasId,
|
|
1358
|
+
width = config.width,
|
|
1359
|
+
height = config.height,
|
|
1360
|
+
theme = config.theme,
|
|
1361
|
+
option = config.option;
|
|
1400
1362
|
if (!this.component) {
|
|
1401
1363
|
console.error('[TaroViz] WeappAdapter: component is required');
|
|
1402
1364
|
return null;
|
|
1403
1365
|
}
|
|
1404
1366
|
if (!canvasId) {
|
|
1405
|
-
console.error('[TaroViz] WeappAdapter: canvasId is required');
|
|
1406
|
-
return null;
|
|
1407
|
-
}
|
|
1408
|
-
// 创建图表实例
|
|
1409
|
-
var chart = this.component.createChart({
|
|
1410
|
-
id: canvasId,
|
|
1411
|
-
width: width,
|
|
1412
|
-
height: height,
|
|
1413
|
-
theme: theme
|
|
1414
|
-
});
|
|
1415
|
-
// 设置图表选项
|
|
1416
|
-
if (option) {
|
|
1417
|
-
chart.setOption(option);
|
|
1418
|
-
}
|
|
1419
|
-
// 存储图表实例
|
|
1420
|
-
this.chartInstance = chart;
|
|
1421
|
-
// 初始化回调
|
|
1422
|
-
if (this.config.onInit) {
|
|
1423
|
-
this.config.onInit(chart);
|
|
1424
|
-
}
|
|
1425
|
-
return chart;
|
|
1426
|
-
};
|
|
1427
|
-
/**
|
|
1428
|
-
* 设置图表选项
|
|
1429
|
-
*/
|
|
1430
|
-
WeappAdapter.prototype.setOption = function (option, opts) {
|
|
1431
|
-
if (this.chartInstance) {
|
|
1432
|
-
this.chartInstance.setOption(option, opts);
|
|
1433
|
-
} else {
|
|
1434
|
-
this.config.option = option;
|
|
1435
|
-
}
|
|
1436
|
-
};
|
|
1437
|
-
/**
|
|
1438
|
-
* 设置主题
|
|
1439
|
-
*/
|
|
1440
|
-
WeappAdapter.prototype.setTheme = function (theme) {
|
|
1441
|
-
var _a, _b;
|
|
1442
|
-
this.config.theme = theme;
|
|
1443
|
-
if (this.chartInstance) {
|
|
1444
|
-
(_b = (_a = this.chartInstance).setTheme) === null || _b === void 0 ? void 0 : _b.call(_a, theme);
|
|
1445
|
-
}
|
|
1446
|
-
};
|
|
1447
|
-
/**
|
|
1448
|
-
* 获取图表宽度
|
|
1449
|
-
*/
|
|
1450
|
-
WeappAdapter.prototype.getWidth = function () {
|
|
1451
|
-
return 0;
|
|
1452
|
-
};
|
|
1453
|
-
/**
|
|
1454
|
-
* 获取图表高度
|
|
1455
|
-
*/
|
|
1456
|
-
WeappAdapter.prototype.getHeight = function () {
|
|
1457
|
-
return 0;
|
|
1458
|
-
};
|
|
1459
|
-
/**
|
|
1460
|
-
* 获取DOM元素
|
|
1461
|
-
*/
|
|
1462
|
-
WeappAdapter.prototype.getDom = function () {
|
|
1463
|
-
return null;
|
|
1464
|
-
};
|
|
1465
|
-
/**
|
|
1466
|
-
* 转换为DataURL
|
|
1467
|
-
*/
|
|
1468
|
-
WeappAdapter.prototype.convertToDataURL = function (opts) {
|
|
1469
|
-
var _a;
|
|
1470
|
-
return (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL(opts);
|
|
1471
|
-
};
|
|
1472
|
-
/**
|
|
1473
|
-
* 清空图表
|
|
1474
|
-
*/
|
|
1475
|
-
WeappAdapter.prototype.clear = function () {
|
|
1476
|
-
if (this.chartInstance) {
|
|
1477
|
-
this.chartInstance.clear();
|
|
1478
|
-
}
|
|
1479
|
-
};
|
|
1480
|
-
/**
|
|
1481
|
-
* 绑定事件
|
|
1482
|
-
*/
|
|
1483
|
-
WeappAdapter.prototype.on = function (event, handler) {
|
|
1484
|
-
if (this.chartInstance) {
|
|
1485
|
-
this.chartInstance.on(event, handler);
|
|
1486
|
-
}
|
|
1487
|
-
};
|
|
1488
|
-
/**
|
|
1489
|
-
* 解绑事件
|
|
1490
|
-
*/
|
|
1491
|
-
WeappAdapter.prototype.off = function (event, handler) {
|
|
1492
|
-
if (this.chartInstance) {
|
|
1493
|
-
this.chartInstance.off(event, handler);
|
|
1494
|
-
}
|
|
1495
|
-
};
|
|
1496
|
-
/**
|
|
1497
|
-
* 显示加载动画
|
|
1498
|
-
*/
|
|
1499
|
-
WeappAdapter.prototype.showLoading = function (opts) {
|
|
1500
|
-
if (this.chartInstance) {
|
|
1501
|
-
this.chartInstance.showLoading(opts);
|
|
1367
|
+
console.error('[TaroViz] WeappAdapter: canvasId is required');
|
|
1368
|
+
return null;
|
|
1502
1369
|
}
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1370
|
+
var chart = this.component.createChart({
|
|
1371
|
+
id: canvasId,
|
|
1372
|
+
width: width,
|
|
1373
|
+
height: height,
|
|
1374
|
+
theme: theme
|
|
1375
|
+
});
|
|
1376
|
+
if (option) {
|
|
1377
|
+
chart.setOption(option);
|
|
1510
1378
|
}
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
WeappAdapter.prototype.dispose = function () {
|
|
1516
|
-
if (this.chartInstance) {
|
|
1517
|
-
this.chartInstance.dispose();
|
|
1518
|
-
this.chartInstance = null;
|
|
1379
|
+
this.chartInstance = chart;
|
|
1380
|
+
var onInit = this.config['onInit'];
|
|
1381
|
+
if (onInit) {
|
|
1382
|
+
onInit(chart);
|
|
1519
1383
|
}
|
|
1384
|
+
return chart;
|
|
1520
1385
|
};
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
WeappAdapter.prototype.
|
|
1525
|
-
|
|
1526
|
-
this.chartInstance.resize(opts);
|
|
1527
|
-
}
|
|
1386
|
+
WeappAdapter.prototype.getWidth = function () {
|
|
1387
|
+
return this.parseSize(this.config.width, 300);
|
|
1388
|
+
};
|
|
1389
|
+
WeappAdapter.prototype.getHeight = function () {
|
|
1390
|
+
return this.parseSize(this.config.height, 300);
|
|
1528
1391
|
};
|
|
1529
|
-
/**
|
|
1530
|
-
* 设置组件实例
|
|
1531
|
-
*/
|
|
1532
1392
|
WeappAdapter.prototype.setComponent = function (component) {
|
|
1533
1393
|
this.component = component;
|
|
1534
1394
|
};
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
_c = _a.width,
|
|
1543
|
-
width = _c === void 0 ? '100%' : _c,
|
|
1544
|
-
_d = _a.height,
|
|
1545
|
-
height = _d === void 0 ? '300px' : _d,
|
|
1546
|
-
_e = _a.style,
|
|
1547
|
-
style = _e === void 0 ? {} : _e;
|
|
1548
|
-
// 注意:这里需要根据实际使用的Taro版本和组件库来调整
|
|
1549
|
-
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement('view', {
|
|
1550
|
-
id: canvasId,
|
|
1551
|
-
style: __assign({
|
|
1552
|
-
width: width,
|
|
1553
|
-
height: height
|
|
1554
|
-
}, style)
|
|
1555
|
-
});
|
|
1395
|
+
WeappAdapter.prototype.dispatchAction = function (action) {
|
|
1396
|
+
var _a, _b;
|
|
1397
|
+
(_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.dispatchAction) === null || _b === void 0 ? void 0 : _b.call(_a, action);
|
|
1398
|
+
};
|
|
1399
|
+
WeappAdapter.prototype.getDataURL = function (opts) {
|
|
1400
|
+
var _a, _b;
|
|
1401
|
+
return (_b = (_a = this.chartInstance) === null || _a === void 0 ? void 0 : _a.getDataURL) === null || _b === void 0 ? void 0 : _b.call(_a, opts);
|
|
1556
1402
|
};
|
|
1557
1403
|
return WeappAdapter;
|
|
1558
|
-
}();
|
|
1404
|
+
}(_BaseAdapter__WEBPACK_IMPORTED_MODULE_0__/* .BaseAdapter */ .D);
|
|
1405
|
+
|
|
1559
1406
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeappAdapter);
|
|
1560
1407
|
|
|
1561
1408
|
/***/ },
|
|
@@ -1582,19 +1429,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1582
1429
|
return __assign.apply(this, arguments);
|
|
1583
1430
|
};
|
|
1584
1431
|
/**
|
|
1585
|
-
*
|
|
1432
|
+
* BarChart组件
|
|
1586
1433
|
*/
|
|
1587
1434
|
|
|
1588
1435
|
|
|
1589
1436
|
|
|
1590
|
-
|
|
1591
|
-
* 柱状图组件
|
|
1592
|
-
*/
|
|
1593
|
-
var BarChart = function (props) {
|
|
1437
|
+
var BarChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1594
1438
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1595
1439
|
chartType: "bar-chart"
|
|
1596
1440
|
}));
|
|
1597
|
-
};
|
|
1441
|
+
});
|
|
1442
|
+
BarChart.displayName = 'BarChart';
|
|
1598
1443
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BarChart);
|
|
1599
1444
|
|
|
1600
1445
|
/***/ },
|
|
@@ -1679,6 +1524,121 @@ var BaseChartWrapper_assign = undefined && undefined.__assign || function () {
|
|
|
1679
1524
|
};
|
|
1680
1525
|
return BaseChartWrapper_assign.apply(this, arguments);
|
|
1681
1526
|
};
|
|
1527
|
+
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
1528
|
+
function adopt(value) {
|
|
1529
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
1530
|
+
resolve(value);
|
|
1531
|
+
});
|
|
1532
|
+
}
|
|
1533
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
1534
|
+
function fulfilled(value) {
|
|
1535
|
+
try {
|
|
1536
|
+
step(generator.next(value));
|
|
1537
|
+
} catch (e) {
|
|
1538
|
+
reject(e);
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
function rejected(value) {
|
|
1542
|
+
try {
|
|
1543
|
+
step(generator["throw"](value));
|
|
1544
|
+
} catch (e) {
|
|
1545
|
+
reject(e);
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
function step(result) {
|
|
1549
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
1550
|
+
}
|
|
1551
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
1552
|
+
});
|
|
1553
|
+
};
|
|
1554
|
+
var __generator = undefined && undefined.__generator || function (thisArg, body) {
|
|
1555
|
+
var _ = {
|
|
1556
|
+
label: 0,
|
|
1557
|
+
sent: function () {
|
|
1558
|
+
if (t[0] & 1) throw t[1];
|
|
1559
|
+
return t[1];
|
|
1560
|
+
},
|
|
1561
|
+
trys: [],
|
|
1562
|
+
ops: []
|
|
1563
|
+
},
|
|
1564
|
+
f,
|
|
1565
|
+
y,
|
|
1566
|
+
t,
|
|
1567
|
+
g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
1568
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
1569
|
+
return this;
|
|
1570
|
+
}), g;
|
|
1571
|
+
function verb(n) {
|
|
1572
|
+
return function (v) {
|
|
1573
|
+
return step([n, v]);
|
|
1574
|
+
};
|
|
1575
|
+
}
|
|
1576
|
+
function step(op) {
|
|
1577
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
1578
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
1579
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
1580
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
1581
|
+
switch (op[0]) {
|
|
1582
|
+
case 0:
|
|
1583
|
+
case 1:
|
|
1584
|
+
t = op;
|
|
1585
|
+
break;
|
|
1586
|
+
case 4:
|
|
1587
|
+
_.label++;
|
|
1588
|
+
return {
|
|
1589
|
+
value: op[1],
|
|
1590
|
+
done: false
|
|
1591
|
+
};
|
|
1592
|
+
case 5:
|
|
1593
|
+
_.label++;
|
|
1594
|
+
y = op[1];
|
|
1595
|
+
op = [0];
|
|
1596
|
+
continue;
|
|
1597
|
+
case 7:
|
|
1598
|
+
op = _.ops.pop();
|
|
1599
|
+
_.trys.pop();
|
|
1600
|
+
continue;
|
|
1601
|
+
default:
|
|
1602
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
1603
|
+
_ = 0;
|
|
1604
|
+
continue;
|
|
1605
|
+
}
|
|
1606
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
1607
|
+
_.label = op[1];
|
|
1608
|
+
break;
|
|
1609
|
+
}
|
|
1610
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
1611
|
+
_.label = t[1];
|
|
1612
|
+
t = op;
|
|
1613
|
+
break;
|
|
1614
|
+
}
|
|
1615
|
+
if (t && _.label < t[2]) {
|
|
1616
|
+
_.label = t[2];
|
|
1617
|
+
_.ops.push(op);
|
|
1618
|
+
break;
|
|
1619
|
+
}
|
|
1620
|
+
if (t[2]) _.ops.pop();
|
|
1621
|
+
_.trys.pop();
|
|
1622
|
+
continue;
|
|
1623
|
+
}
|
|
1624
|
+
op = body.call(thisArg, _);
|
|
1625
|
+
} catch (e) {
|
|
1626
|
+
op = [6, e];
|
|
1627
|
+
y = 0;
|
|
1628
|
+
} finally {
|
|
1629
|
+
f = t = 0;
|
|
1630
|
+
}
|
|
1631
|
+
if (op[0] & 5) throw op[1];
|
|
1632
|
+
return {
|
|
1633
|
+
value: op[0] ? op[1] : void 0,
|
|
1634
|
+
done: true
|
|
1635
|
+
};
|
|
1636
|
+
}
|
|
1637
|
+
};
|
|
1638
|
+
/**
|
|
1639
|
+
* 基础图表包装组件
|
|
1640
|
+
* 提供统一的图表初始化、渲染和生命周期管理
|
|
1641
|
+
*/
|
|
1682
1642
|
|
|
1683
1643
|
|
|
1684
1644
|
|
|
@@ -1726,49 +1686,68 @@ var BaseChartWrapper = function (_a) {
|
|
|
1726
1686
|
renderer: renderer,
|
|
1727
1687
|
option: option
|
|
1728
1688
|
});
|
|
1729
|
-
}, [width, height, theme, autoResize, renderer, option
|
|
1689
|
+
}, [width, height, theme, autoResize, renderer, option]);
|
|
1730
1690
|
// 处理图表初始化
|
|
1731
1691
|
(0,external_react_.useEffect)(function () {
|
|
1732
|
-
var
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1692
|
+
var initChart = function () {
|
|
1693
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
1694
|
+
var initConfig, adapter;
|
|
1695
|
+
return __generator(this, function (_a) {
|
|
1696
|
+
switch (_a.label) {
|
|
1697
|
+
case 0:
|
|
1698
|
+
initConfig = processAdapterConfig(BaseChartWrapper_assign(BaseChartWrapper_assign({}, adapterConfig), {
|
|
1699
|
+
onInit: function (instance) {
|
|
1700
|
+
chartInstance.current = instance;
|
|
1701
|
+
// 绑定事件
|
|
1702
|
+
if (onEvents) {
|
|
1703
|
+
Object.keys(onEvents).forEach(function (eventName) {
|
|
1704
|
+
instance.on(eventName, onEvents[eventName]);
|
|
1705
|
+
});
|
|
1706
|
+
}
|
|
1707
|
+
// 初始化回调
|
|
1708
|
+
if (onChartInit) {
|
|
1709
|
+
onChartInit(instance);
|
|
1710
|
+
}
|
|
1711
|
+
// 准备好回调
|
|
1712
|
+
if (onChartReady) {
|
|
1713
|
+
onChartReady(instance);
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
}));
|
|
1717
|
+
return [4 /*yield*/, (0,adapters/* getAdapter */.cK)(initConfig)];
|
|
1718
|
+
case 1:
|
|
1719
|
+
adapter = _a.sent();
|
|
1720
|
+
adapter.init();
|
|
1721
|
+
// 返回清理函数
|
|
1722
|
+
return [2 /*return*/, function () {
|
|
1723
|
+
if (chartInstance.current) {
|
|
1724
|
+
// 解绑事件
|
|
1725
|
+
if (onEvents) {
|
|
1726
|
+
Object.keys(onEvents).forEach(function (eventName) {
|
|
1727
|
+
var _a;
|
|
1728
|
+
(_a = chartInstance.current) === null || _a === void 0 ? void 0 : _a.off(eventName);
|
|
1729
|
+
});
|
|
1730
|
+
}
|
|
1731
|
+
chartInstance.current.dispose();
|
|
1732
|
+
chartInstance.current = null;
|
|
1733
|
+
}
|
|
1734
|
+
}];
|
|
1735
|
+
}
|
|
1736
|
+
});
|
|
1737
|
+
});
|
|
1738
|
+
};
|
|
1739
|
+
// 执行异步初始化并获取清理函数
|
|
1740
|
+
var cleanupPromise = initChart();
|
|
1741
|
+
// 返回清理函数
|
|
1755
1742
|
return function () {
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
Object.keys(onEvents).forEach(function (eventName) {
|
|
1760
|
-
var _a;
|
|
1761
|
-
(_a = chartInstance.current) === null || _a === void 0 ? void 0 : _a.off(eventName);
|
|
1762
|
-
});
|
|
1763
|
-
}
|
|
1764
|
-
chartInstance.current.dispose();
|
|
1765
|
-
chartInstance.current = null;
|
|
1766
|
-
}
|
|
1743
|
+
cleanupPromise.then(function (cleanup) {
|
|
1744
|
+
return cleanup === null || cleanup === void 0 ? void 0 : cleanup();
|
|
1745
|
+
});
|
|
1767
1746
|
};
|
|
1768
1747
|
}, [adapterConfig, onChartInit, onChartReady, onEvents]);
|
|
1769
1748
|
// 更新配置
|
|
1770
1749
|
(0,external_react_.useEffect)(function () {
|
|
1771
|
-
if (chartInstance.current) {
|
|
1750
|
+
if (chartInstance.current && option) {
|
|
1772
1751
|
chartInstance.current.setOption(option, true);
|
|
1773
1752
|
}
|
|
1774
1753
|
}, [option]);
|
|
@@ -1787,13 +1766,11 @@ var BaseChartWrapper = function (_a) {
|
|
|
1787
1766
|
width: typeof width === 'number' ? "".concat(width, "px") : width,
|
|
1788
1767
|
height: typeof height === 'number' ? "".concat(height, "px") : height
|
|
1789
1768
|
}, style);
|
|
1790
|
-
// 使用带有处理的适配器配置创建适配器实例
|
|
1791
|
-
var adapter = (0,adapters/* getAdapter */.cK)(adapterConfig);
|
|
1792
1769
|
return /*#__PURE__*/external_react_default().createElement("div", {
|
|
1793
1770
|
className: "taroviz-".concat(chartType, " ").concat(className),
|
|
1794
1771
|
style: mergedStyle,
|
|
1795
1772
|
ref: containerRef
|
|
1796
|
-
}
|
|
1773
|
+
});
|
|
1797
1774
|
};
|
|
1798
1775
|
/* harmony default export */ const common_BaseChartWrapper = (BaseChartWrapper);
|
|
1799
1776
|
|
|
@@ -1821,19 +1798,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1821
1798
|
return __assign.apply(this, arguments);
|
|
1822
1799
|
};
|
|
1823
1800
|
/**
|
|
1824
|
-
*
|
|
1801
|
+
* FunnelChart组件
|
|
1825
1802
|
*/
|
|
1826
1803
|
|
|
1827
1804
|
|
|
1828
1805
|
|
|
1829
|
-
|
|
1830
|
-
* 漏斗图组件
|
|
1831
|
-
*/
|
|
1832
|
-
var FunnelChart = function (props) {
|
|
1806
|
+
var FunnelChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1833
1807
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1834
1808
|
chartType: "funnel-chart"
|
|
1835
1809
|
}));
|
|
1836
|
-
};
|
|
1810
|
+
});
|
|
1811
|
+
FunnelChart.displayName = 'FunnelChart';
|
|
1837
1812
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FunnelChart);
|
|
1838
1813
|
|
|
1839
1814
|
/***/ },
|
|
@@ -1860,19 +1835,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1860
1835
|
return __assign.apply(this, arguments);
|
|
1861
1836
|
};
|
|
1862
1837
|
/**
|
|
1863
|
-
*
|
|
1838
|
+
* GaugeChart组件
|
|
1864
1839
|
*/
|
|
1865
1840
|
|
|
1866
1841
|
|
|
1867
1842
|
|
|
1868
|
-
|
|
1869
|
-
* 仪表盘组件
|
|
1870
|
-
*/
|
|
1871
|
-
var GaugeChart = function (props) {
|
|
1843
|
+
var GaugeChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1872
1844
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1873
1845
|
chartType: "gauge-chart"
|
|
1874
1846
|
}));
|
|
1875
|
-
};
|
|
1847
|
+
});
|
|
1848
|
+
GaugeChart.displayName = 'GaugeChart';
|
|
1876
1849
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GaugeChart);
|
|
1877
1850
|
|
|
1878
1851
|
/***/ },
|
|
@@ -1899,19 +1872,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1899
1872
|
return __assign.apply(this, arguments);
|
|
1900
1873
|
};
|
|
1901
1874
|
/**
|
|
1902
|
-
*
|
|
1875
|
+
* HeatmapChart组件
|
|
1903
1876
|
*/
|
|
1904
1877
|
|
|
1905
1878
|
|
|
1906
1879
|
|
|
1907
|
-
|
|
1908
|
-
* 热力图组件
|
|
1909
|
-
*/
|
|
1910
|
-
var HeatmapChart = function (props) {
|
|
1880
|
+
var HeatmapChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1911
1881
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1912
1882
|
chartType: "heatmap-chart"
|
|
1913
1883
|
}));
|
|
1914
|
-
};
|
|
1884
|
+
});
|
|
1885
|
+
HeatmapChart.displayName = 'HeatmapChart';
|
|
1915
1886
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HeatmapChart);
|
|
1916
1887
|
|
|
1917
1888
|
/***/ },
|
|
@@ -1943,14 +1914,12 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1943
1914
|
|
|
1944
1915
|
|
|
1945
1916
|
|
|
1946
|
-
|
|
1947
|
-
* 折线图组件
|
|
1948
|
-
*/
|
|
1949
|
-
var LineChart = function (props) {
|
|
1917
|
+
var LineChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1950
1918
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1951
1919
|
chartType: "line-chart"
|
|
1952
1920
|
}));
|
|
1953
|
-
};
|
|
1921
|
+
});
|
|
1922
|
+
LineChart.displayName = 'LineChart';
|
|
1954
1923
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LineChart);
|
|
1955
1924
|
|
|
1956
1925
|
/***/ },
|
|
@@ -1977,20 +1946,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
1977
1946
|
return __assign.apply(this, arguments);
|
|
1978
1947
|
};
|
|
1979
1948
|
/**
|
|
1980
|
-
*
|
|
1949
|
+
* PieChart组件
|
|
1981
1950
|
*/
|
|
1982
1951
|
|
|
1983
1952
|
|
|
1984
|
-
// 导入统一注册的 echarts
|
|
1985
1953
|
|
|
1986
|
-
|
|
1987
|
-
* 饼图组件
|
|
1988
|
-
*/
|
|
1989
|
-
var PieChart = function (props) {
|
|
1954
|
+
var PieChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
1990
1955
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
1991
1956
|
chartType: "pie-chart"
|
|
1992
1957
|
}));
|
|
1993
|
-
};
|
|
1958
|
+
});
|
|
1959
|
+
PieChart.displayName = 'PieChart';
|
|
1994
1960
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PieChart);
|
|
1995
1961
|
|
|
1996
1962
|
/***/ },
|
|
@@ -2017,19 +1983,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
2017
1983
|
return __assign.apply(this, arguments);
|
|
2018
1984
|
};
|
|
2019
1985
|
/**
|
|
2020
|
-
*
|
|
1986
|
+
* RadarChart组件
|
|
2021
1987
|
*/
|
|
2022
1988
|
|
|
2023
1989
|
|
|
2024
1990
|
|
|
2025
|
-
|
|
2026
|
-
* 雷达图组件
|
|
2027
|
-
*/
|
|
2028
|
-
var RadarChart = function (props) {
|
|
1991
|
+
var RadarChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
2029
1992
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
2030
1993
|
chartType: "radar-chart"
|
|
2031
1994
|
}));
|
|
2032
|
-
};
|
|
1995
|
+
});
|
|
1996
|
+
RadarChart.displayName = 'RadarChart';
|
|
2033
1997
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RadarChart);
|
|
2034
1998
|
|
|
2035
1999
|
/***/ },
|
|
@@ -2095,19 +2059,17 @@ var __assign = undefined && undefined.__assign || function () {
|
|
|
2095
2059
|
return __assign.apply(this, arguments);
|
|
2096
2060
|
};
|
|
2097
2061
|
/**
|
|
2098
|
-
*
|
|
2062
|
+
* ScatterChart组件
|
|
2099
2063
|
*/
|
|
2100
2064
|
|
|
2101
2065
|
|
|
2102
2066
|
|
|
2103
|
-
|
|
2104
|
-
* 散点图组件
|
|
2105
|
-
*/
|
|
2106
|
-
var ScatterChart = function (props) {
|
|
2067
|
+
var ScatterChart = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) {
|
|
2107
2068
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_common_BaseChartWrapper__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, __assign({}, props, {
|
|
2108
2069
|
chartType: "scatter-chart"
|
|
2109
2070
|
}));
|
|
2110
|
-
};
|
|
2071
|
+
});
|
|
2072
|
+
ScatterChart.displayName = 'ScatterChart';
|
|
2111
2073
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ScatterChart);
|
|
2112
2074
|
|
|
2113
2075
|
/***/ },
|
|
@@ -2362,6 +2324,9 @@ var AnimationManager = /** @class */function () {
|
|
|
2362
2324
|
AnimationManager.getInstance = function (config) {
|
|
2363
2325
|
if (!AnimationManager.instance) {
|
|
2364
2326
|
AnimationManager.instance = new AnimationManager(config);
|
|
2327
|
+
} else if (config) {
|
|
2328
|
+
// 如果传入了新配置,更新配置
|
|
2329
|
+
AnimationManager.instance.updateConfig(config);
|
|
2365
2330
|
}
|
|
2366
2331
|
return AnimationManager.instance;
|
|
2367
2332
|
};
|
|
@@ -2544,6 +2509,17 @@ var AnimationManager = /** @class */function () {
|
|
|
2544
2509
|
AnimationManager.prototype.updatePerformanceConfig = function (config) {
|
|
2545
2510
|
this.performanceConfig = __assign(__assign({}, this.performanceConfig), config);
|
|
2546
2511
|
};
|
|
2512
|
+
/**
|
|
2513
|
+
* 更新配置
|
|
2514
|
+
*/
|
|
2515
|
+
AnimationManager.prototype.updateConfig = function (config) {
|
|
2516
|
+
if (config.defaultConfig) {
|
|
2517
|
+
this.defaultConfig = config.defaultConfig;
|
|
2518
|
+
}
|
|
2519
|
+
if (config.performance) {
|
|
2520
|
+
this.updatePerformanceConfig(config.performance);
|
|
2521
|
+
}
|
|
2522
|
+
};
|
|
2547
2523
|
/**
|
|
2548
2524
|
* 获取性能配置
|
|
2549
2525
|
*/
|
|
@@ -3020,11 +2996,15 @@ var defaultLocalization = new Localization();
|
|
|
3020
2996
|
* @returns 唯一标识符字符串
|
|
3021
2997
|
*/
|
|
3022
2998
|
function uuid() {
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
return
|
|
3027
|
-
}
|
|
2999
|
+
var _a;
|
|
3000
|
+
// 使用 crypto API 生成加密安全的 UUID
|
|
3001
|
+
if (typeof ((_a = globalThis.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) === 'function') {
|
|
3002
|
+
return globalThis.crypto.randomUUID();
|
|
3003
|
+
}
|
|
3004
|
+
// 回退:使用 Math.random() + 时间戳混合
|
|
3005
|
+
var timestamp = Date.now().toString(36);
|
|
3006
|
+
var randomPart = Math.random().toString(36).substring(2, 15);
|
|
3007
|
+
return "".concat(timestamp, "-").concat(randomPart, "-").concat(Math.random().toString(36).substring(2, 10));
|
|
3028
3008
|
}
|
|
3029
3009
|
/**
|
|
3030
3010
|
* 生成简短的唯一标识符
|
|
@@ -3307,11 +3287,19 @@ var __webpack_exports__ = {};
|
|
|
3307
3287
|
// EXTERNAL MODULE: external "react"
|
|
3308
3288
|
var external_react_ = __webpack_require__(15);
|
|
3309
3289
|
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
|
|
3310
|
-
// EXTERNAL MODULE: ./src/adapters/index.ts + 5 modules
|
|
3311
|
-
var adapters = __webpack_require__(574);
|
|
3312
3290
|
// EXTERNAL MODULE: ./src/core/animation/index.ts + 2 modules
|
|
3313
|
-
var
|
|
3291
|
+
var core_animation = __webpack_require__(251);
|
|
3314
3292
|
;// ./src/core/utils/chartInstances.ts
|
|
3293
|
+
var __assign = undefined && undefined.__assign || function () {
|
|
3294
|
+
__assign = Object.assign || function (t) {
|
|
3295
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
3296
|
+
s = arguments[i];
|
|
3297
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
3298
|
+
}
|
|
3299
|
+
return t;
|
|
3300
|
+
};
|
|
3301
|
+
return __assign.apply(this, arguments);
|
|
3302
|
+
};
|
|
3315
3303
|
/**
|
|
3316
3304
|
* 全局图表实例存储
|
|
3317
3305
|
*/
|
|
@@ -3322,6 +3310,15 @@ var CHART_INSTANCES = {};
|
|
|
3322
3310
|
* @param instance 图表实例
|
|
3323
3311
|
*/
|
|
3324
3312
|
function registerChart(id, instance) {
|
|
3313
|
+
// 如果已存在同名ID,先释放旧实例防止内存泄漏
|
|
3314
|
+
if (CHART_INSTANCES[id]) {
|
|
3315
|
+
try {
|
|
3316
|
+
console.warn("[TaroViz] Chart instance '".concat(id, "' already exists, replacing and disposing old instance"));
|
|
3317
|
+
CHART_INSTANCES[id].dispose();
|
|
3318
|
+
} catch (e) {
|
|
3319
|
+
console.warn("Failed to dispose old chart instance: ".concat(id), e);
|
|
3320
|
+
}
|
|
3321
|
+
}
|
|
3325
3322
|
CHART_INSTANCES[id] = instance;
|
|
3326
3323
|
}
|
|
3327
3324
|
/**
|
|
@@ -3338,15 +3335,20 @@ function getChart(id) {
|
|
|
3338
3335
|
*/
|
|
3339
3336
|
function removeChart(id) {
|
|
3340
3337
|
if (CHART_INSTANCES[id]) {
|
|
3338
|
+
try {
|
|
3339
|
+
CHART_INSTANCES[id].dispose();
|
|
3340
|
+
} catch (e) {
|
|
3341
|
+
console.warn("Failed to dispose chart on removal: ".concat(id), e);
|
|
3342
|
+
}
|
|
3341
3343
|
delete CHART_INSTANCES[id];
|
|
3342
3344
|
}
|
|
3343
3345
|
}
|
|
3344
3346
|
/**
|
|
3345
3347
|
* 获取所有图表实例
|
|
3346
|
-
* @returns
|
|
3348
|
+
* @returns 所有图表实例的浅拷贝
|
|
3347
3349
|
*/
|
|
3348
3350
|
function getAllCharts() {
|
|
3349
|
-
return CHART_INSTANCES;
|
|
3351
|
+
return __assign({}, CHART_INSTANCES);
|
|
3350
3352
|
}
|
|
3351
3353
|
/**
|
|
3352
3354
|
* 清空所有图表实例
|
|
@@ -3400,15 +3402,15 @@ var DebugPanelEventType;
|
|
|
3400
3402
|
DebugPanelEventType["INFO_UPDATE"] = "debugPanelInfoUpdate";
|
|
3401
3403
|
})(DebugPanelEventType || (DebugPanelEventType = {}));
|
|
3402
3404
|
;// ./src/core/utils/debug/DebugPanel.tsx
|
|
3403
|
-
var
|
|
3404
|
-
|
|
3405
|
+
var DebugPanel_assign = undefined && undefined.__assign || function () {
|
|
3406
|
+
DebugPanel_assign = Object.assign || function (t) {
|
|
3405
3407
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
3406
3408
|
s = arguments[i];
|
|
3407
3409
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
3408
3410
|
}
|
|
3409
3411
|
return t;
|
|
3410
3412
|
};
|
|
3411
|
-
return
|
|
3413
|
+
return DebugPanel_assign.apply(this, arguments);
|
|
3412
3414
|
};
|
|
3413
3415
|
/**
|
|
3414
3416
|
* TaroViz 调试面板组件
|
|
@@ -3732,7 +3734,7 @@ var DebugPanel = function (_a) {
|
|
|
3732
3734
|
}, "\u91CD\u7F6E\u56FE\u8868")));
|
|
3733
3735
|
};
|
|
3734
3736
|
// 构建面板样式
|
|
3735
|
-
var panelStyle =
|
|
3737
|
+
var panelStyle = DebugPanel_assign(DebugPanel_assign(DebugPanel_assign(DebugPanel_assign(DebugPanel_assign(DebugPanel_assign({
|
|
3736
3738
|
position: 'fixed',
|
|
3737
3739
|
zIndex: 9999,
|
|
3738
3740
|
backgroundColor: 'rgba(255, 255, 255, 0.95)',
|
|
@@ -3774,43 +3776,43 @@ var DebugPanel = function (_a) {
|
|
|
3774
3776
|
}, isExpanded ? '▼' : '▶')), isExpanded && (/*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("div", {
|
|
3775
3777
|
style: styles.debugPanelTabs
|
|
3776
3778
|
}, /*#__PURE__*/external_react_default().createElement("button", {
|
|
3777
|
-
style:
|
|
3779
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'instance' && styles.debugTabActive),
|
|
3778
3780
|
onClick: function () {
|
|
3779
3781
|
return switchTab('instance');
|
|
3780
3782
|
},
|
|
3781
3783
|
title: "\u5B9E\u4F8B\u4FE1\u606F"
|
|
3782
3784
|
}, "\u5B9E\u4F8B"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3783
|
-
style:
|
|
3785
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'config' && styles.debugTabActive),
|
|
3784
3786
|
onClick: function () {
|
|
3785
3787
|
return switchTab('config');
|
|
3786
3788
|
},
|
|
3787
3789
|
title: "\u914D\u7F6E\u4FE1\u606F"
|
|
3788
3790
|
}, "\u914D\u7F6E"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3789
|
-
style:
|
|
3791
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'data' && styles.debugTabActive),
|
|
3790
3792
|
onClick: function () {
|
|
3791
3793
|
return switchTab('data');
|
|
3792
3794
|
},
|
|
3793
3795
|
title: "\u6570\u636E\u4FE1\u606F"
|
|
3794
3796
|
}, "\u6570\u636E"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3795
|
-
style:
|
|
3797
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'performance' && styles.debugTabActive),
|
|
3796
3798
|
onClick: function () {
|
|
3797
3799
|
return switchTab('performance');
|
|
3798
3800
|
},
|
|
3799
3801
|
title: "\u6027\u80FD\u4FE1\u606F"
|
|
3800
3802
|
}, "\u6027\u80FD"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3801
|
-
style:
|
|
3803
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'events' && styles.debugTabActive),
|
|
3802
3804
|
onClick: function () {
|
|
3803
3805
|
return switchTab('events');
|
|
3804
3806
|
},
|
|
3805
3807
|
title: "\u4E8B\u4EF6\u4FE1\u606F"
|
|
3806
3808
|
}, "\u4E8B\u4EF6"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3807
|
-
style:
|
|
3809
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'errors' && styles.debugTabActive),
|
|
3808
3810
|
onClick: function () {
|
|
3809
3811
|
return switchTab('errors');
|
|
3810
3812
|
},
|
|
3811
3813
|
title: "\u9519\u8BEF\u4FE1\u606F"
|
|
3812
3814
|
}, "\u9519\u8BEF"), /*#__PURE__*/external_react_default().createElement("button", {
|
|
3813
|
-
style:
|
|
3815
|
+
style: DebugPanel_assign(DebugPanel_assign({}, styles.debugTab), activeTab === 'tools' && styles.debugTabActive),
|
|
3814
3816
|
onClick: function () {
|
|
3815
3817
|
return switchTab('tools');
|
|
3816
3818
|
},
|
|
@@ -4428,6 +4430,10 @@ var PerformanceAnalyzer = /** @class */function () {
|
|
|
4428
4430
|
this.sampleIntervalId = null;
|
|
4429
4431
|
this.frameRateHistory = [];
|
|
4430
4432
|
this.lastFrameTime = 0;
|
|
4433
|
+
/**
|
|
4434
|
+
* RAF 动画帧 ID,用于取消
|
|
4435
|
+
*/
|
|
4436
|
+
this.rafId = null;
|
|
4431
4437
|
this.config = PerformanceAnalyzer_assign({
|
|
4432
4438
|
enabled: true,
|
|
4433
4439
|
metrics: ['initTime', 'renderTime', 'updateTime', 'dataSize', 'frameRate'],
|
|
@@ -4539,32 +4545,53 @@ var PerformanceAnalyzer = /** @class */function () {
|
|
|
4539
4545
|
this.stopFrameRateMonitoring();
|
|
4540
4546
|
this.emit(PerformanceEventType.MONITORING_END);
|
|
4541
4547
|
};
|
|
4548
|
+
/**
|
|
4549
|
+
* 释放资源
|
|
4550
|
+
* 完全清理性能分析器,包括单例实例
|
|
4551
|
+
*/
|
|
4552
|
+
PerformanceAnalyzer.prototype.dispose = function () {
|
|
4553
|
+
this.stop();
|
|
4554
|
+
this.metrics.clear();
|
|
4555
|
+
this.eventHandlers.clear();
|
|
4556
|
+
this.frameRateHistory = [];
|
|
4557
|
+
// 如果是当前单例,清除单例引用
|
|
4558
|
+
if (PerformanceAnalyzer.instance === this) {
|
|
4559
|
+
PerformanceAnalyzer.instance = null;
|
|
4560
|
+
}
|
|
4561
|
+
};
|
|
4542
4562
|
/**
|
|
4543
4563
|
* 开始帧率监控
|
|
4544
4564
|
*/
|
|
4545
4565
|
PerformanceAnalyzer.prototype.startFrameRateMonitoring = function () {
|
|
4546
4566
|
var _this = this;
|
|
4547
4567
|
var updateFrameRate = function () {
|
|
4568
|
+
var _a;
|
|
4548
4569
|
if (!_this.isMonitoring) {
|
|
4549
4570
|
return;
|
|
4550
4571
|
}
|
|
4551
4572
|
var currentTime = performance.now();
|
|
4552
4573
|
var deltaTime = currentTime - _this.lastFrameTime;
|
|
4553
4574
|
var frameRate = deltaTime > 0 ? Math.round(1000 / deltaTime) : 0;
|
|
4554
|
-
|
|
4555
|
-
|
|
4575
|
+
// 使用 config.maxSamples 限制历史记录长度
|
|
4576
|
+
var maxSamples = (_a = _this.config.maxSamples) !== null && _a !== void 0 ? _a : 100;
|
|
4577
|
+
if (_this.frameRateHistory.length >= maxSamples) {
|
|
4556
4578
|
_this.frameRateHistory.shift();
|
|
4557
4579
|
}
|
|
4580
|
+
_this.frameRateHistory.push(frameRate);
|
|
4558
4581
|
_this.lastFrameTime = currentTime;
|
|
4559
|
-
requestAnimationFrame(updateFrameRate);
|
|
4582
|
+
_this.rafId = requestAnimationFrame(updateFrameRate);
|
|
4560
4583
|
};
|
|
4561
|
-
requestAnimationFrame(updateFrameRate);
|
|
4584
|
+
this.rafId = requestAnimationFrame(updateFrameRate);
|
|
4562
4585
|
};
|
|
4563
4586
|
/**
|
|
4564
4587
|
* 停止帧率监控
|
|
4565
4588
|
*/
|
|
4566
4589
|
PerformanceAnalyzer.prototype.stopFrameRateMonitoring = function () {
|
|
4567
|
-
//
|
|
4590
|
+
// 取消 RAF 循环,防止继续运行
|
|
4591
|
+
if (this.rafId !== null) {
|
|
4592
|
+
cancelAnimationFrame(this.rafId);
|
|
4593
|
+
this.rafId = null;
|
|
4594
|
+
}
|
|
4568
4595
|
this.frameRateHistory = [];
|
|
4569
4596
|
};
|
|
4570
4597
|
/**
|
|
@@ -4866,6 +4893,53 @@ var PerformanceAnalyzer = /** @class */function () {
|
|
|
4866
4893
|
// 导出默认实例
|
|
4867
4894
|
|
|
4868
4895
|
var performanceAnalyzer = PerformanceAnalyzer.getInstance();
|
|
4896
|
+
;// ./src/core/utils/chartUtils.ts
|
|
4897
|
+
/**
|
|
4898
|
+
* Normalize size value to CSS string
|
|
4899
|
+
*/
|
|
4900
|
+
function normalizeSize(value, fallback) {
|
|
4901
|
+
if (value === undefined) return fallback;
|
|
4902
|
+
return typeof value === 'number' ? "".concat(value, "px") : value;
|
|
4903
|
+
}
|
|
4904
|
+
/**
|
|
4905
|
+
* Calculate total data points in an ECharts option for animation optimization
|
|
4906
|
+
*/
|
|
4907
|
+
function calculateDataLength(option) {
|
|
4908
|
+
if (!option) return 0;
|
|
4909
|
+
var count = 0;
|
|
4910
|
+
if (option.series) {
|
|
4911
|
+
var series = Array.isArray(option.series) ? option.series : [option.series];
|
|
4912
|
+
for (var _i = 0, _a = series; _i < _a.length; _i++) {
|
|
4913
|
+
var seriesItem = _a[_i];
|
|
4914
|
+
if (seriesItem.data) {
|
|
4915
|
+
if (Array.isArray(seriesItem.data)) {
|
|
4916
|
+
count += seriesItem.data.length;
|
|
4917
|
+
} else if (typeof seriesItem.data === 'object') {
|
|
4918
|
+
count += Object.keys(seriesItem.data).length;
|
|
4919
|
+
}
|
|
4920
|
+
}
|
|
4921
|
+
}
|
|
4922
|
+
}
|
|
4923
|
+
return count;
|
|
4924
|
+
}
|
|
4925
|
+
/**
|
|
4926
|
+
* Filter data by filter conditions
|
|
4927
|
+
*/
|
|
4928
|
+
function filterDataByKeys(data, filters) {
|
|
4929
|
+
if (!filters || Object.keys(filters).length === 0) return data;
|
|
4930
|
+
return data.filter(function (item) {
|
|
4931
|
+
var _a, _b;
|
|
4932
|
+
for (var _i = 0, _c = Object.entries(filters); _i < _c.length; _i++) {
|
|
4933
|
+
var _d = _c[_i],
|
|
4934
|
+
key = _d[0],
|
|
4935
|
+
value = _d[1];
|
|
4936
|
+
if (item[key] !== value && !((_b = (_a = item[key]) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, value))) return false;
|
|
4937
|
+
}
|
|
4938
|
+
return true;
|
|
4939
|
+
});
|
|
4940
|
+
}
|
|
4941
|
+
// EXTERNAL MODULE: ./src/charts/common/BaseChartWrapper.tsx + 1 modules
|
|
4942
|
+
var BaseChartWrapper = __webpack_require__(412);
|
|
4869
4943
|
;// ./src/core/components/BaseChart.tsx
|
|
4870
4944
|
var BaseChart_assign = undefined && undefined.__assign || function () {
|
|
4871
4945
|
BaseChart_assign = Object.assign || function (t) {
|
|
@@ -4890,18 +4964,15 @@ var BaseChart_assign = undefined && undefined.__assign || function () {
|
|
|
4890
4964
|
|
|
4891
4965
|
|
|
4892
4966
|
|
|
4893
|
-
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
* @returns {JSX.Element} - 返回的 JSX 元素
|
|
4898
|
-
*
|
|
4899
|
-
* @description 基础图表组件,所有具体图表组件的基类
|
|
4900
|
-
* 负责处理图表的初始化、事件绑定、主题设置等核心逻辑
|
|
4901
|
-
*/
|
|
4967
|
+
|
|
4968
|
+
// ============================================================================
|
|
4969
|
+
// BaseChart 组件
|
|
4970
|
+
// ============================================================================
|
|
4902
4971
|
var BaseChart = function (props) {
|
|
4903
4972
|
var chartId = props.chartId,
|
|
4904
4973
|
option = props.option,
|
|
4974
|
+
animation = props.animation,
|
|
4975
|
+
debug = props.debug,
|
|
4905
4976
|
_a = props.width,
|
|
4906
4977
|
width = _a === void 0 ? '100%' : _a,
|
|
4907
4978
|
_b = props.height,
|
|
@@ -4916,7 +4987,7 @@ var BaseChart = function (props) {
|
|
|
4916
4987
|
onDataZoom = props.onDataZoom,
|
|
4917
4988
|
style = props.style,
|
|
4918
4989
|
className = props.className,
|
|
4919
|
-
|
|
4990
|
+
_children = props.children,
|
|
4920
4991
|
_e = props.virtualScroll,
|
|
4921
4992
|
virtualScroll = _e === void 0 ? false : _e,
|
|
4922
4993
|
_f = props.virtualScrollPageSize,
|
|
@@ -4927,7 +4998,7 @@ var BaseChart = function (props) {
|
|
|
4927
4998
|
enablePerformanceMonitoring = _h === void 0 ? false : _h,
|
|
4928
4999
|
onPerformance = props.onPerformance,
|
|
4929
5000
|
_j = props.enableZoom,
|
|
4930
|
-
|
|
5001
|
+
_enableZoom = _j === void 0 ? false : _j,
|
|
4931
5002
|
onZoom = props.onZoom,
|
|
4932
5003
|
_k = props.enableDataFiltering,
|
|
4933
5004
|
enableDataFiltering = _k === void 0 ? false : _k,
|
|
@@ -4948,735 +5019,308 @@ var BaseChart = function (props) {
|
|
|
4948
5019
|
customTooltipStyle = props.customTooltipStyle,
|
|
4949
5020
|
onTooltipShow = props.onTooltipShow,
|
|
4950
5021
|
onTooltipHide = props.onTooltipHide,
|
|
4951
|
-
|
|
5022
|
+
_onExport = props.onExport,
|
|
4952
5023
|
_q = props.linkageConfig,
|
|
4953
5024
|
linkageConfig = _q === void 0 ? {} : _q,
|
|
4954
5025
|
onDataUpdate = props.onDataUpdate,
|
|
4955
5026
|
_r = props.dataUpdateOptions,
|
|
4956
5027
|
dataUpdateOptions = _r === void 0 ? {} : _r;
|
|
4957
|
-
|
|
4958
|
-
|
|
4959
|
-
*/
|
|
4960
|
-
var chartRef = (0,external_react_.useRef)(null);
|
|
4961
|
-
/**
|
|
4962
|
-
* 图表适配器的引用
|
|
4963
|
-
*/
|
|
4964
|
-
var adapterRef = (0,external_react_.useRef)(null);
|
|
4965
|
-
/**
|
|
4966
|
-
* 虚拟滚动状态
|
|
4967
|
-
*/
|
|
4968
|
-
var virtualScrollRef = (0,external_react_.useRef)({
|
|
4969
|
-
currentPage: 0,
|
|
4970
|
-
totalPages: 1,
|
|
4971
|
-
totalDataCount: 0,
|
|
4972
|
-
startIndex: 0,
|
|
4973
|
-
endIndex: 0,
|
|
4974
|
-
isScrolling: false
|
|
4975
|
-
});
|
|
4976
|
-
/**
|
|
4977
|
-
* 性能分析器实例引用
|
|
4978
|
-
*/
|
|
4979
|
-
var performanceAnalyzerRef = (0,external_react_.useRef)(null);
|
|
4980
|
-
/**
|
|
4981
|
-
* 性能监控状态
|
|
4982
|
-
*/
|
|
5028
|
+
// Refs
|
|
5029
|
+
var chartInstanceRef = (0,external_react_.useRef)(null);
|
|
4983
5030
|
var performanceRef = (0,external_react_.useRef)({
|
|
4984
5031
|
initStartTime: 0,
|
|
4985
5032
|
initEndTime: 0,
|
|
4986
5033
|
renderStartTime: 0,
|
|
4987
5034
|
renderEndTime: 0,
|
|
4988
5035
|
updateStartTime: 0,
|
|
4989
|
-
updateEndTime: 0
|
|
4990
|
-
|
|
5036
|
+
updateEndTime: 0
|
|
5037
|
+
});
|
|
5038
|
+
var virtualScrollRef = (0,external_react_.useRef)({
|
|
5039
|
+
currentPage: 0,
|
|
5040
|
+
totalPages: 1,
|
|
5041
|
+
totalDataCount: 0,
|
|
5042
|
+
isScrolling: false
|
|
4991
5043
|
});
|
|
4992
|
-
/**
|
|
4993
|
-
* 旧的图表配置引用,用于数据更新监听
|
|
4994
|
-
*/
|
|
4995
5044
|
var oldOptionRef = (0,external_react_.useRef)(option);
|
|
4996
|
-
|
|
4997
|
-
* 调试配置引用
|
|
4998
|
-
*/
|
|
5045
|
+
var adapterRef = (0,external_react_.useRef)(null);
|
|
4999
5046
|
var debugConfigRef = (0,external_react_.useRef)(null);
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
return {
|
|
5009
|
-
enabled: props.debug,
|
|
5010
|
-
autoExpand: false
|
|
5011
|
-
};
|
|
5012
|
-
}
|
|
5013
|
-
return BaseChart_assign({
|
|
5047
|
+
var performanceAnalyzerRef = (0,external_react_.useRef)(null);
|
|
5048
|
+
// Debug config
|
|
5049
|
+
var debugConfig = (0,external_react_.useMemo)(function () {
|
|
5050
|
+
if (!debug) return null;
|
|
5051
|
+
return typeof debug === 'boolean' ? {
|
|
5052
|
+
enabled: debug,
|
|
5053
|
+
autoExpand: false
|
|
5054
|
+
} : BaseChart_assign({
|
|
5014
5055
|
enabled: true
|
|
5015
|
-
},
|
|
5016
|
-
};
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
});
|
|
5041
|
-
// 触发导出回调
|
|
5042
|
-
if (onExport && dataURL) {
|
|
5043
|
-
onExport(dataURL, options);
|
|
5044
|
-
}
|
|
5045
|
-
return dataURL;
|
|
5046
|
-
};
|
|
5047
|
-
/**
|
|
5048
|
-
* 导出图表并下载
|
|
5049
|
-
* @param options 导出选项
|
|
5050
|
-
*/
|
|
5051
|
-
var exportChart = function (options) {
|
|
5052
|
-
if (options === void 0) {
|
|
5053
|
-
options = {};
|
|
5054
|
-
}
|
|
5055
|
-
var dataURL = exportChartToDataURL(options);
|
|
5056
|
-
if (!dataURL) {
|
|
5057
|
-
console.error('Failed to export chart');
|
|
5058
|
-
return;
|
|
5059
|
-
}
|
|
5060
|
-
var _a = options.type,
|
|
5061
|
-
type = _a === void 0 ? 'png' : _a,
|
|
5062
|
-
_b = options.filename,
|
|
5063
|
-
filename = _b === void 0 ? "chart-".concat(Date.now()) : _b;
|
|
5064
|
-
var fullFilename = "".concat(filename, ".").concat(type);
|
|
5065
|
-
// 创建下载链接
|
|
5066
|
-
var link = document.createElement('a');
|
|
5067
|
-
link.download = fullFilename;
|
|
5068
|
-
link.href = dataURL;
|
|
5069
|
-
link.click();
|
|
5070
|
-
};
|
|
5071
|
-
/**
|
|
5072
|
-
* 组件实例引用,用于暴露公共方法
|
|
5073
|
-
*/
|
|
5074
|
-
var chartInstanceRef = (0,external_react_.useRef)({
|
|
5075
|
-
exportChartToDataURL: exportChartToDataURL,
|
|
5076
|
-
exportChart: exportChart
|
|
5077
|
-
});
|
|
5078
|
-
// 暴露组件实例方法
|
|
5079
|
-
external_react_default().useImperativeHandle(props, function () {
|
|
5080
|
-
return chartInstanceRef.current;
|
|
5081
|
-
});
|
|
5082
|
-
/**
|
|
5083
|
-
* 记录性能数据
|
|
5084
|
-
* @param type 性能数据类型
|
|
5085
|
-
* @param data 性能数据
|
|
5086
|
-
*/
|
|
5087
|
-
var recordPerformance = function (type, _data) {
|
|
5088
|
-
var now = Date.now();
|
|
5089
|
-
switch (type) {
|
|
5090
|
-
case 'init':
|
|
5091
|
-
if (!performanceRef.current.initStartTime) {
|
|
5092
|
-
performanceRef.current.initStartTime = now;
|
|
5093
|
-
} else {
|
|
5094
|
-
performanceRef.current.initEndTime = now;
|
|
5095
|
-
var initTime = performanceRef.current.initEndTime - performanceRef.current.initStartTime;
|
|
5096
|
-
// 计算数据大小
|
|
5097
|
-
var dataSize = JSON.stringify(option).length;
|
|
5098
|
-
// 使用性能分析器记录数据
|
|
5099
|
-
if (performanceAnalyzerRef.current) {
|
|
5100
|
-
performanceAnalyzerRef.current.recordInitTime(initTime);
|
|
5101
|
-
performanceAnalyzerRef.current.recordDataSize(option);
|
|
5102
|
-
}
|
|
5103
|
-
// 触发性能回调
|
|
5104
|
-
if (onPerformance) {
|
|
5105
|
-
onPerformance({
|
|
5106
|
-
renderTime: 0,
|
|
5107
|
-
initTime: initTime,
|
|
5108
|
-
updateTime: 0,
|
|
5109
|
-
dataSize: dataSize
|
|
5110
|
-
});
|
|
5111
|
-
}
|
|
5112
|
-
}
|
|
5113
|
-
break;
|
|
5114
|
-
case 'render':
|
|
5115
|
-
if (!performanceRef.current.renderStartTime) {
|
|
5116
|
-
performanceRef.current.renderStartTime = now;
|
|
5117
|
-
} else {
|
|
5118
|
-
performanceRef.current.renderEndTime = now;
|
|
5119
|
-
var renderTime = performanceRef.current.renderEndTime - performanceRef.current.renderStartTime;
|
|
5120
|
-
// 计算数据大小
|
|
5121
|
-
var dataSize = JSON.stringify(option).length;
|
|
5122
|
-
// 使用性能分析器记录数据
|
|
5123
|
-
if (performanceAnalyzerRef.current) {
|
|
5124
|
-
performanceAnalyzerRef.current.recordRenderTime(renderTime);
|
|
5125
|
-
}
|
|
5126
|
-
// 触发性能回调
|
|
5127
|
-
if (onPerformance) {
|
|
5128
|
-
onPerformance({
|
|
5129
|
-
renderTime: renderTime,
|
|
5130
|
-
initTime: performanceRef.current.initEndTime - performanceRef.current.initStartTime,
|
|
5131
|
-
updateTime: 0,
|
|
5132
|
-
dataSize: dataSize
|
|
5133
|
-
});
|
|
5134
|
-
}
|
|
5135
|
-
}
|
|
5136
|
-
break;
|
|
5137
|
-
case 'update':
|
|
5138
|
-
if (!performanceRef.current.updateStartTime) {
|
|
5139
|
-
performanceRef.current.updateStartTime = now;
|
|
5140
|
-
} else {
|
|
5141
|
-
performanceRef.current.updateEndTime = now;
|
|
5142
|
-
var updateTime = performanceRef.current.updateEndTime - performanceRef.current.updateStartTime;
|
|
5143
|
-
// 计算数据大小
|
|
5144
|
-
var dataSize = JSON.stringify(option).length;
|
|
5145
|
-
// 使用性能分析器记录数据
|
|
5146
|
-
if (performanceAnalyzerRef.current) {
|
|
5147
|
-
performanceAnalyzerRef.current.recordUpdateTime(updateTime);
|
|
5148
|
-
performanceAnalyzerRef.current.recordDataSize(option);
|
|
5149
|
-
}
|
|
5150
|
-
// 触发性能回调
|
|
5151
|
-
if (onPerformance) {
|
|
5152
|
-
onPerformance({
|
|
5153
|
-
renderTime: 0,
|
|
5154
|
-
initTime: 0,
|
|
5155
|
-
updateTime: updateTime,
|
|
5156
|
-
dataSize: dataSize
|
|
5056
|
+
}, debug);
|
|
5057
|
+
}, [debug]);
|
|
5058
|
+
// Wrapper option that applies virtual scroll + data filtering
|
|
5059
|
+
var wrappedOption = (0,external_react_.useMemo)(function () {
|
|
5060
|
+
if (!option) return undefined;
|
|
5061
|
+
var processed = BaseChart_assign({}, option);
|
|
5062
|
+
// Apply data filtering
|
|
5063
|
+
if (enableDataFiltering && filters && Object.keys(filters).length > 0) {
|
|
5064
|
+
processed = JSON.parse(JSON.stringify(processed));
|
|
5065
|
+
if (processed.series && Array.isArray(processed.series)) {
|
|
5066
|
+
processed.series = processed.series.map(function (s) {
|
|
5067
|
+
if (s.data && Array.isArray(s.data)) {
|
|
5068
|
+
var filtered = filterDataByKeys(s.data, filters);
|
|
5069
|
+
if (onDataFiltered) onDataFiltered(filtered, filters);
|
|
5070
|
+
if (virtualScroll) {
|
|
5071
|
+
virtualScrollRef.current.totalDataCount = filtered.length;
|
|
5072
|
+
virtualScrollRef.current.totalPages = Math.ceil(filtered.length / virtualScrollPageSize);
|
|
5073
|
+
var start = virtualScrollRef.current.currentPage * virtualScrollPageSize;
|
|
5074
|
+
var end = Math.min(start + virtualScrollPageSize + virtualScrollPreloadSize, filtered.length);
|
|
5075
|
+
return BaseChart_assign(BaseChart_assign({}, s), {
|
|
5076
|
+
data: filtered.slice(start, end)
|
|
5077
|
+
});
|
|
5078
|
+
}
|
|
5079
|
+
return BaseChart_assign(BaseChart_assign({}, s), {
|
|
5080
|
+
data: filtered
|
|
5157
5081
|
});
|
|
5158
5082
|
}
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
}
|
|
5162
|
-
};
|
|
5163
|
-
/**
|
|
5164
|
-
* 筛选数据
|
|
5165
|
-
* @param data 原始数据
|
|
5166
|
-
* @param filters 筛选条件
|
|
5167
|
-
* @returns 筛选后的数据
|
|
5168
|
-
*/
|
|
5169
|
-
var filterData = function (data, filters) {
|
|
5170
|
-
if (!enableDataFiltering || !filters || Object.keys(filters).length === 0) {
|
|
5171
|
-
return data;
|
|
5172
|
-
}
|
|
5173
|
-
return data.filter(function (item) {
|
|
5174
|
-
var _a, _b;
|
|
5175
|
-
// 遍历所有筛选条件
|
|
5176
|
-
for (var _i = 0, _c = Object.entries(filters); _i < _c.length; _i++) {
|
|
5177
|
-
var _d = _c[_i],
|
|
5178
|
-
key = _d[0],
|
|
5179
|
-
value = _d[1];
|
|
5180
|
-
// 检查数据项是否满足筛选条件
|
|
5181
|
-
if (item[key] !== value && !((_b = (_a = item[key]) === null || _a === void 0 ? void 0 : _a.includes) === null || _b === void 0 ? void 0 : _b.call(_a, value))) {
|
|
5182
|
-
return false;
|
|
5183
|
-
}
|
|
5083
|
+
return s;
|
|
5084
|
+
});
|
|
5184
5085
|
}
|
|
5185
|
-
|
|
5186
|
-
|
|
5187
|
-
|
|
5188
|
-
|
|
5189
|
-
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
|
|
5196
|
-
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5086
|
+
}
|
|
5087
|
+
// Apply animation config
|
|
5088
|
+
var dataLength = calculateDataLength(processed);
|
|
5089
|
+
var animConfig = (0,core_animation/* generateEChartsAnimationConfig */.ek)(animation, dataLength);
|
|
5090
|
+
return BaseChart_assign(BaseChart_assign({}, processed), animConfig);
|
|
5091
|
+
}, [option, animation, enableDataFiltering, filters, virtualScroll, virtualScrollPageSize, virtualScrollPreloadSize, onDataFiltered]);
|
|
5092
|
+
// Internal chartInit that wraps the user's callback
|
|
5093
|
+
var handleChartInit = (0,external_react_.useCallback)(function (instance) {
|
|
5094
|
+
var _a;
|
|
5095
|
+
chartInstanceRef.current = instance;
|
|
5096
|
+
adapterRef.current = instance;
|
|
5097
|
+
// Performance monitoring init
|
|
5098
|
+
if (enablePerformanceMonitoring) {
|
|
5099
|
+
performanceAnalyzerRef.current = PerformanceAnalyzer.getInstance({
|
|
5100
|
+
enabled: true,
|
|
5101
|
+
metrics: ['initTime', 'renderTime', 'updateTime', 'dataSize', 'frameRate'],
|
|
5102
|
+
sampleInterval: 1000,
|
|
5103
|
+
maxSamples: 100,
|
|
5104
|
+
realTime: true,
|
|
5105
|
+
autoStart: true
|
|
5205
5106
|
});
|
|
5206
5107
|
}
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
// 处理series数据
|
|
5221
|
-
if (processedOption.series && Array.isArray(processedOption.series)) {
|
|
5222
|
-
// 使用类型断言解决类型不匹配问题
|
|
5223
|
-
processedOption.series = processedOption.series.map(function (series) {
|
|
5224
|
-
if (series.data && Array.isArray(series.data)) {
|
|
5225
|
-
var data = series.data;
|
|
5226
|
-
// 应用数据筛选
|
|
5227
|
-
var filteredData = filterData(data, filters);
|
|
5228
|
-
// 触发数据筛选回调
|
|
5229
|
-
if (onDataFiltered) {
|
|
5230
|
-
onDataFiltered(filteredData, filters);
|
|
5231
|
-
}
|
|
5232
|
-
// 应用虚拟滚动
|
|
5233
|
-
if (virtualScroll) {
|
|
5234
|
-
virtualScrollRef.current.totalDataCount = filteredData.length;
|
|
5235
|
-
virtualScrollRef.current.totalPages = Math.ceil(filteredData.length / virtualScrollPageSize);
|
|
5236
|
-
// 计算当前页的起始和结束索引
|
|
5237
|
-
var startIndex = virtualScrollRef.current.currentPage * virtualScrollPageSize;
|
|
5238
|
-
var endIndex = Math.min(startIndex + virtualScrollPageSize + virtualScrollPreloadSize, filteredData.length);
|
|
5239
|
-
virtualScrollRef.current.startIndex = startIndex;
|
|
5240
|
-
virtualScrollRef.current.endIndex = endIndex;
|
|
5241
|
-
// 返回只包含当前页数据的series
|
|
5242
|
-
return BaseChart_assign(BaseChart_assign({}, series), {
|
|
5243
|
-
data: filteredData.slice(startIndex, endIndex)
|
|
5108
|
+
performanceRef.current.initStartTime = Date.now();
|
|
5109
|
+
// Register for linkage
|
|
5110
|
+
if (chartId) registerChart(chartId, instance);
|
|
5111
|
+
// Setup internal event handlers for linkage + virtual scroll
|
|
5112
|
+
if (instance) {
|
|
5113
|
+
// Click linkage
|
|
5114
|
+
if (linkageConfig.enableClickLinkage && chartId && linkageConfig.linkedChartIds) {
|
|
5115
|
+
instance.on('click', function (params) {
|
|
5116
|
+
linkageConfig.linkedChartIds.forEach(function (lid) {
|
|
5117
|
+
var linked = getChart(lid);
|
|
5118
|
+
if (linked) linked.dispatchAction({
|
|
5119
|
+
type: 'highlight',
|
|
5120
|
+
name: params.name
|
|
5244
5121
|
});
|
|
5245
|
-
}
|
|
5246
|
-
// 只应用数据筛选,不应用虚拟滚动
|
|
5247
|
-
return BaseChart_assign(BaseChart_assign({}, series), {
|
|
5248
|
-
data: filteredData
|
|
5249
5122
|
});
|
|
5250
|
-
}
|
|
5251
|
-
return series;
|
|
5252
|
-
});
|
|
5253
|
-
}
|
|
5254
|
-
// 生成动画配置
|
|
5255
|
-
var dataLength = calculateDataLength(processedOption);
|
|
5256
|
-
var animationOption = (0,animation/* generateEChartsAnimationConfig */.ek)(props.animation, dataLength);
|
|
5257
|
-
// 合并动画配置到图表选项
|
|
5258
|
-
return BaseChart_assign(BaseChart_assign({}, processedOption), animationOption);
|
|
5259
|
-
};
|
|
5260
|
-
/**
|
|
5261
|
-
* 初始化图表的 useEffect
|
|
5262
|
-
*
|
|
5263
|
-
* @description 当图表容器 ref 变化时,初始化图表适配器和图表实例
|
|
5264
|
-
* 负责图表的创建、事件绑定和清理工作
|
|
5265
|
-
*/
|
|
5266
|
-
(0,external_react_.useEffect)(function () {
|
|
5267
|
-
if (chartRef.current) {
|
|
5268
|
-
// 处理调试配置
|
|
5269
|
-
var debugConfig_1 = processDebugConfig();
|
|
5270
|
-
debugConfigRef.current = debugConfig_1;
|
|
5271
|
-
// 初始化性能分析器
|
|
5272
|
-
if (enablePerformanceMonitoring) {
|
|
5273
|
-
performanceAnalyzerRef.current = PerformanceAnalyzer.getInstance({
|
|
5274
|
-
enabled: true,
|
|
5275
|
-
metrics: ['initTime', 'renderTime', 'updateTime', 'dataSize', 'frameRate'],
|
|
5276
|
-
sampleInterval: 1000,
|
|
5277
|
-
maxSamples: 100,
|
|
5278
|
-
realTime: true,
|
|
5279
|
-
autoStart: true
|
|
5280
|
-
});
|
|
5281
|
-
}
|
|
5282
|
-
// 开始记录初始化时间
|
|
5283
|
-
recordPerformance('init');
|
|
5284
|
-
// 处理虚拟滚动
|
|
5285
|
-
var processedOption = processVirtualScroll(option);
|
|
5286
|
-
// 获取适配器实例
|
|
5287
|
-
var chartAdapter_1 = (0,adapters/* getAdapter */.cK)({
|
|
5288
|
-
width: width,
|
|
5289
|
-
height: height,
|
|
5290
|
-
theme: theme,
|
|
5291
|
-
option: processedOption,
|
|
5292
|
-
onInit: onInit,
|
|
5293
|
-
containerRef: chartRef,
|
|
5294
|
-
direction: direction
|
|
5295
|
-
});
|
|
5296
|
-
// 设置组件实例(针对小程序环境)
|
|
5297
|
-
if (typeof chartAdapter_1.setComponent === 'function') {
|
|
5298
|
-
chartAdapter_1.setComponent({
|
|
5299
|
-
createChart: function (_config) {
|
|
5300
|
-
// 这里应该根据具体平台实现创建图表的逻辑
|
|
5301
|
-
return {};
|
|
5302
|
-
}
|
|
5303
|
-
});
|
|
5304
|
-
}
|
|
5305
|
-
// 开始记录渲染时间
|
|
5306
|
-
recordPerformance('render');
|
|
5307
|
-
// 初始化图表
|
|
5308
|
-
var instance_1 = chartAdapter_1.init();
|
|
5309
|
-
// 结束记录渲染时间
|
|
5310
|
-
recordPerformance('render');
|
|
5311
|
-
// 注册图表实例
|
|
5312
|
-
if (chartId && instance_1) {
|
|
5313
|
-
registerChart(chartId, instance_1);
|
|
5314
|
-
}
|
|
5315
|
-
// 更新调试信息
|
|
5316
|
-
if (debugConfig_1 === null || debugConfig_1 === void 0 ? void 0 : debugConfig_1.enabled) {
|
|
5317
|
-
// 更新实例信息
|
|
5318
|
-
updateDebugInfo({
|
|
5319
|
-
instance: {
|
|
5320
|
-
id: chartId,
|
|
5321
|
-
type: 'ECharts',
|
|
5322
|
-
renderer: 'canvas',
|
|
5323
|
-
// 简化处理,使用默认值
|
|
5324
|
-
width: typeof width === 'number' ? width : undefined,
|
|
5325
|
-
height: typeof height === 'number' ? height : undefined,
|
|
5326
|
-
platform: 'web' // 简化处理,使用默认值
|
|
5327
|
-
},
|
|
5328
|
-
config: processedOption,
|
|
5329
|
-
data: {
|
|
5330
|
-
series: Array.isArray(processedOption.series) ? processedOption.series : [],
|
|
5331
|
-
totalDataCount: calculateDataLength(processedOption),
|
|
5332
|
-
currentDataCount: calculateDataLength(processedOption)
|
|
5333
|
-
},
|
|
5334
|
-
performance: {
|
|
5335
|
-
initTime: performanceRef.current.initEndTime - performanceRef.current.initStartTime,
|
|
5336
|
-
renderTime: performanceRef.current.renderEndTime - performanceRef.current.renderStartTime,
|
|
5337
|
-
dataSize: JSON.stringify(processedOption).length
|
|
5338
|
-
}
|
|
5339
5123
|
});
|
|
5340
5124
|
}
|
|
5341
|
-
//
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5347
|
-
linkageConfig.linkedChartIds.forEach(function (linkedChartId) {
|
|
5348
|
-
var linkedChart = getChart(linkedChartId);
|
|
5349
|
-
if (linkedChart) {
|
|
5350
|
-
// 这里可以根据需要实现点击联动逻辑
|
|
5351
|
-
// 例如:高亮联动图表中对应的系列或数据点
|
|
5352
|
-
linkedChart.dispatchAction({
|
|
5353
|
-
type: 'highlight',
|
|
5354
|
-
name: params.name
|
|
5355
|
-
});
|
|
5356
|
-
}
|
|
5357
|
-
});
|
|
5358
|
-
}
|
|
5125
|
+
// Zoom + zoom linkage + virtual scroll page update
|
|
5126
|
+
instance.on('datazoom', function (params) {
|
|
5127
|
+
if (onZoom) onZoom({
|
|
5128
|
+
start: params.start || 0,
|
|
5129
|
+
end: params.end || 100,
|
|
5130
|
+
dataZoomIndex: params.dataZoomIndex || 0
|
|
5359
5131
|
});
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
onDataZoom(params);
|
|
5132
|
+
if (virtualScroll && !virtualScrollRef.current.isScrolling) {
|
|
5133
|
+
virtualScrollRef.current.isScrolling = true;
|
|
5134
|
+
var newPage = Math.floor((params.start || 0) / 100 * virtualScrollRef.current.totalPages);
|
|
5135
|
+
if (newPage !== virtualScrollRef.current.currentPage) {
|
|
5136
|
+
virtualScrollRef.current.currentPage = newPage;
|
|
5137
|
+
// Trigger re-render via option update
|
|
5367
5138
|
}
|
|
5368
|
-
|
|
5369
|
-
|
|
5370
|
-
|
|
5371
|
-
|
|
5372
|
-
|
|
5373
|
-
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
|
|
5380
|
-
if (linkedChart) {
|
|
5381
|
-
linkedChart.dispatchAction({
|
|
5382
|
-
type: 'dataZoom',
|
|
5383
|
-
start: params.start,
|
|
5384
|
-
end: params.end,
|
|
5385
|
-
dataZoomIndex: params.dataZoomIndex
|
|
5386
|
-
});
|
|
5387
|
-
}
|
|
5139
|
+
setTimeout(function () {
|
|
5140
|
+
virtualScrollRef.current.isScrolling = false;
|
|
5141
|
+
}, 100);
|
|
5142
|
+
}
|
|
5143
|
+
if (linkageConfig.enableZoomLinkage && chartId && linkageConfig.linkedChartIds) {
|
|
5144
|
+
linkageConfig.linkedChartIds.forEach(function (lid) {
|
|
5145
|
+
var linked = getChart(lid);
|
|
5146
|
+
if (linked) linked.dispatchAction({
|
|
5147
|
+
type: 'dataZoom',
|
|
5148
|
+
start: params.start,
|
|
5149
|
+
end: params.end,
|
|
5150
|
+
dataZoomIndex: params.dataZoomIndex
|
|
5388
5151
|
});
|
|
5389
|
-
}
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
virtualScrollRef.current.isScrolling = true;
|
|
5396
|
-
// 根据滚动位置计算当前页码
|
|
5397
|
-
var scrollPercent = params.start || 0;
|
|
5398
|
-
var newPage = Math.floor(scrollPercent / 100 * virtualScrollRef.current.totalPages);
|
|
5399
|
-
if (newPage !== virtualScrollRef.current.currentPage) {
|
|
5400
|
-
virtualScrollRef.current.currentPage = newPage;
|
|
5401
|
-
// 更新图表数据
|
|
5402
|
-
var updatedOption = processVirtualScroll(option);
|
|
5403
|
-
chartAdapter_1.setOption(updatedOption);
|
|
5404
|
-
}
|
|
5405
|
-
// 延迟重置滚动状态,避免频繁触发
|
|
5406
|
-
setTimeout(function () {
|
|
5407
|
-
virtualScrollRef.current.isScrolling = false;
|
|
5408
|
-
}, 100);
|
|
5409
|
-
}
|
|
5410
|
-
});
|
|
5411
|
-
}
|
|
5412
|
-
// 启用图表缩放功能
|
|
5413
|
-
if (instance_1 && enableZoom) {
|
|
5414
|
-
// 这里可以根据需要添加更多缩放相关的配置
|
|
5415
|
-
// 例如:instance.setOption({ dataZoom: [{ type: 'inside', start: 0, end: 100 }] });
|
|
5416
|
-
}
|
|
5417
|
-
// 增强图例交互功能
|
|
5418
|
-
if (instance_1 && enableLegendInteraction) {
|
|
5419
|
-
// 图例选择事件
|
|
5420
|
-
instance_1.on('legendselectchanged', function (params) {
|
|
5152
|
+
});
|
|
5153
|
+
}
|
|
5154
|
+
});
|
|
5155
|
+
// Legend interaction
|
|
5156
|
+
if (enableLegendInteraction) {
|
|
5157
|
+
instance.on('legendselectchanged', function (params) {
|
|
5421
5158
|
var name = params.name,
|
|
5422
5159
|
selected = params.selected;
|
|
5423
|
-
// 图例联动
|
|
5424
5160
|
if (linkageConfig.enableLegendLinkage && chartId && linkageConfig.linkedChartIds) {
|
|
5425
|
-
linkageConfig.linkedChartIds.forEach(function (
|
|
5426
|
-
var
|
|
5427
|
-
if (
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
});
|
|
5433
|
-
}
|
|
5161
|
+
linkageConfig.linkedChartIds.forEach(function (lid) {
|
|
5162
|
+
var linked = getChart(lid);
|
|
5163
|
+
if (linked) linked.setOption({
|
|
5164
|
+
legend: {
|
|
5165
|
+
selected: selected
|
|
5166
|
+
}
|
|
5167
|
+
});
|
|
5434
5168
|
});
|
|
5435
5169
|
}
|
|
5436
|
-
// 根据交互模式处理图例选择
|
|
5437
5170
|
if (legendInteractionMode === 'single') {
|
|
5438
|
-
// 单选模式:只显示当前选中项
|
|
5439
5171
|
var newSelected_1 = {};
|
|
5440
|
-
Object.keys(selected).forEach(function (
|
|
5441
|
-
newSelected_1[
|
|
5172
|
+
Object.keys(selected).forEach(function (k) {
|
|
5173
|
+
newSelected_1[k] = k === name;
|
|
5442
5174
|
});
|
|
5443
|
-
|
|
5175
|
+
instance.setOption({
|
|
5444
5176
|
legend: {
|
|
5445
5177
|
selected: newSelected_1
|
|
5446
5178
|
}
|
|
5447
5179
|
});
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
selected: newSelected_1
|
|
5453
|
-
});
|
|
5454
|
-
}
|
|
5180
|
+
onLegendSelect === null || onLegendSelect === void 0 ? void 0 : onLegendSelect({
|
|
5181
|
+
name: name,
|
|
5182
|
+
selected: newSelected_1
|
|
5183
|
+
});
|
|
5455
5184
|
} else {
|
|
5456
|
-
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
});
|
|
5464
|
-
}
|
|
5465
|
-
} else {
|
|
5466
|
-
// 取消选择图例项
|
|
5467
|
-
if (onLegendUnselect) {
|
|
5468
|
-
onLegendUnselect({
|
|
5469
|
-
name: name,
|
|
5470
|
-
selected: selected
|
|
5471
|
-
});
|
|
5472
|
-
}
|
|
5473
|
-
}
|
|
5185
|
+
if (selected[name]) onLegendSelect === null || onLegendSelect === void 0 ? void 0 : onLegendSelect({
|
|
5186
|
+
name: name,
|
|
5187
|
+
selected: selected
|
|
5188
|
+
});else onLegendUnselect === null || onLegendUnselect === void 0 ? void 0 : onLegendUnselect({
|
|
5189
|
+
name: name,
|
|
5190
|
+
selected: selected
|
|
5191
|
+
});
|
|
5474
5192
|
}
|
|
5475
5193
|
});
|
|
5476
|
-
// 图例全选功能
|
|
5477
|
-
if (legendInteractionMode === 'all') {
|
|
5478
|
-
// 这里可以添加全选/反选的逻辑
|
|
5479
|
-
// 例如:监听特定事件或添加自定义按钮
|
|
5480
|
-
}
|
|
5481
5194
|
}
|
|
5482
|
-
//
|
|
5483
|
-
if (
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
// 触发提示框显示回调
|
|
5487
|
-
if (onTooltipShow) {
|
|
5488
|
-
onTooltipShow(params);
|
|
5489
|
-
}
|
|
5490
|
-
});
|
|
5491
|
-
// 提示框隐藏事件
|
|
5492
|
-
instance_1.on('tooltiphide', function (params) {
|
|
5493
|
-
// 触发提示框隐藏回调
|
|
5494
|
-
if (onTooltipHide) {
|
|
5495
|
-
onTooltipHide(params);
|
|
5496
|
-
}
|
|
5195
|
+
// Custom tooltip
|
|
5196
|
+
if (enableCustomTooltip && customTooltipContent) {
|
|
5197
|
+
instance.on('tooltipshow', function (params) {
|
|
5198
|
+
return onTooltipShow === null || onTooltipShow === void 0 ? void 0 : onTooltipShow(params);
|
|
5497
5199
|
});
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
}
|
|
5518
|
-
adapterRef.current = chartAdapter_1;
|
|
5519
|
-
// 结束记录初始化时间
|
|
5520
|
-
recordPerformance('init');
|
|
5521
|
-
// 清理函数
|
|
5522
|
-
return function () {
|
|
5523
|
-
// 移除图表实例
|
|
5524
|
-
if (chartId) {
|
|
5525
|
-
removeChart(chartId);
|
|
5526
|
-
}
|
|
5527
|
-
// 停止性能监控
|
|
5528
|
-
if (performanceAnalyzerRef.current) {
|
|
5529
|
-
performanceAnalyzerRef.current.stop();
|
|
5530
|
-
performanceAnalyzerRef.current = null;
|
|
5531
|
-
}
|
|
5532
|
-
if (chartAdapter_1) {
|
|
5533
|
-
chartAdapter_1.dispose();
|
|
5534
|
-
}
|
|
5535
|
-
};
|
|
5536
|
-
}
|
|
5537
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
5538
|
-
}, [chartRef, width, height, theme, option, onInit, onClick, onDataZoom, chartId, linkageConfig]);
|
|
5539
|
-
/**
|
|
5540
|
-
* 更新图表尺寸的 useEffect
|
|
5541
|
-
*
|
|
5542
|
-
* @description 当图表宽度或高度变化时,调整图表大小
|
|
5543
|
-
*/
|
|
5544
|
-
(0,external_react_.useEffect)(function () {
|
|
5545
|
-
if (adapterRef.current) {
|
|
5546
|
-
adapterRef.current.resize();
|
|
5547
|
-
}
|
|
5548
|
-
}, [width, height]);
|
|
5549
|
-
/**
|
|
5550
|
-
* 比较两个配置是否相同
|
|
5551
|
-
* @param oldOption 旧的配置
|
|
5552
|
-
* @param newOption 新的配置
|
|
5553
|
-
* @returns 是否相同
|
|
5554
|
-
*/
|
|
5555
|
-
var isOptionEqual = function (oldOption, newOption) {
|
|
5556
|
-
if (oldOption === newOption) {
|
|
5557
|
-
return true;
|
|
5558
|
-
}
|
|
5559
|
-
if (!oldOption || !newOption) {
|
|
5560
|
-
return false;
|
|
5561
|
-
}
|
|
5562
|
-
if (dataUpdateOptions.deepCompare) {
|
|
5563
|
-
// 深度比较
|
|
5564
|
-
return JSON.stringify(oldOption) === JSON.stringify(newOption);
|
|
5565
|
-
} else {
|
|
5566
|
-
// 浅比较,只比较引用
|
|
5567
|
-
return oldOption === newOption;
|
|
5568
|
-
}
|
|
5569
|
-
};
|
|
5570
|
-
/**
|
|
5571
|
-
* 更新图表配置的 useEffect
|
|
5572
|
-
*
|
|
5573
|
-
* @description 当图表配置项变化时,更新图表
|
|
5574
|
-
*/
|
|
5575
|
-
(0,external_react_.useEffect)(function () {
|
|
5576
|
-
if (adapterRef.current && option) {
|
|
5577
|
-
// 开始记录更新时间
|
|
5578
|
-
recordPerformance('update');
|
|
5579
|
-
// 处理虚拟滚动
|
|
5580
|
-
var processedOption = processVirtualScroll(option);
|
|
5581
|
-
adapterRef.current.setOption(processedOption);
|
|
5582
|
-
// 结束记录更新时间
|
|
5583
|
-
recordPerformance('update');
|
|
5584
|
-
}
|
|
5585
|
-
// 数据更新监听
|
|
5586
|
-
if (onDataUpdate && dataUpdateOptions.enabled !== false) {
|
|
5587
|
-
var oldOption = oldOptionRef.current;
|
|
5588
|
-
if (!isOptionEqual(oldOption, option)) {
|
|
5589
|
-
onDataUpdate(oldOption, option);
|
|
5590
|
-
// 更新旧的配置引用
|
|
5591
|
-
oldOptionRef.current = option;
|
|
5592
|
-
}
|
|
5593
|
-
}
|
|
5594
|
-
}, [option, onDataUpdate, dataUpdateOptions]);
|
|
5595
|
-
/**
|
|
5596
|
-
* 更新图表主题的 useEffect
|
|
5597
|
-
*
|
|
5598
|
-
* @description 当图表主题变化时,更新图表主题
|
|
5599
|
-
*/
|
|
5600
|
-
(0,external_react_.useEffect)(function () {
|
|
5601
|
-
if (adapterRef.current && theme) {
|
|
5602
|
-
adapterRef.current.setTheme(theme);
|
|
5603
|
-
}
|
|
5604
|
-
}, [theme]);
|
|
5605
|
-
/**
|
|
5606
|
-
* 处理窗口大小变化的 useEffect
|
|
5607
|
-
*
|
|
5608
|
-
* @description 当窗口大小变化时,如果开启了自动调整大小,则调整图表大小
|
|
5609
|
-
*/
|
|
5610
|
-
(0,external_react_.useEffect)(function () {
|
|
5611
|
-
if (!autoResize || !adapterRef.current) {
|
|
5612
|
-
return;
|
|
5613
|
-
}
|
|
5614
|
-
var handleResize = function () {
|
|
5615
|
-
adapterRef.current.resize();
|
|
5616
|
-
};
|
|
5617
|
-
window.addEventListener('resize', handleResize);
|
|
5618
|
-
return function () {
|
|
5619
|
-
window.removeEventListener('resize', handleResize);
|
|
5620
|
-
};
|
|
5621
|
-
}, [autoResize]);
|
|
5622
|
-
/**
|
|
5623
|
-
* 合并后的样式对象
|
|
5624
|
-
*
|
|
5625
|
-
* @description 合并用户传入的样式和组件默认样式
|
|
5626
|
-
*/
|
|
5627
|
-
var mergedStyle = BaseChart_assign({
|
|
5628
|
-
width: typeof width === 'number' ? "".concat(width, "px") : width,
|
|
5629
|
-
height: typeof height === 'number' ? "".concat(height, "px") : height,
|
|
5630
|
-
direction: direction
|
|
5631
|
-
}, style);
|
|
5632
|
-
/**
|
|
5633
|
-
* 组件渲染函数
|
|
5634
|
-
*
|
|
5635
|
-
* @returns {JSX.Element} - 返回渲染后的 JSX 元素
|
|
5636
|
-
* @description 渲染图表容器,并将 chartRef 绑定到容器上
|
|
5637
|
-
*/
|
|
5638
|
-
var debugConfig = processDebugConfig();
|
|
5639
|
-
// 渲染图表容器
|
|
5640
|
-
var chartContainer = /*#__PURE__*/external_react_default().createElement('div', {
|
|
5641
|
-
ref: chartRef,
|
|
5642
|
-
style: mergedStyle,
|
|
5643
|
-
className: className
|
|
5644
|
-
}, children);
|
|
5645
|
-
// 如果启用了调试面板,渲染调试面板
|
|
5646
|
-
if (debugConfig === null || debugConfig === void 0 ? void 0 : debugConfig.enabled) {
|
|
5647
|
-
return /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, chartContainer, /*#__PURE__*/external_react_default().createElement(DebugPanel, {
|
|
5648
|
-
options: debugConfig,
|
|
5649
|
-
debugInfo: {
|
|
5200
|
+
instance.on('tooltiphide', function (params) {
|
|
5201
|
+
return onTooltipHide === null || onTooltipHide === void 0 ? void 0 : onTooltipHide(params);
|
|
5202
|
+
});
|
|
5203
|
+
instance.setOption({
|
|
5204
|
+
tooltip: BaseChart_assign({
|
|
5205
|
+
formatter: function (params) {
|
|
5206
|
+
return String(customTooltipContent(params));
|
|
5207
|
+
}
|
|
5208
|
+
}, customTooltipStyle && {
|
|
5209
|
+
backgroundColor: 'transparent',
|
|
5210
|
+
borderColor: 'transparent',
|
|
5211
|
+
textStyle: {}
|
|
5212
|
+
})
|
|
5213
|
+
});
|
|
5214
|
+
}
|
|
5215
|
+
}
|
|
5216
|
+
// Update debug panel
|
|
5217
|
+
if ((_a = debugConfigRef.current) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
5218
|
+
updateDebugInfo({
|
|
5650
5219
|
instance: {
|
|
5651
5220
|
id: chartId,
|
|
5652
5221
|
type: 'ECharts',
|
|
5653
5222
|
renderer: 'canvas',
|
|
5654
|
-
// 简化处理,使用默认值
|
|
5655
5223
|
width: typeof width === 'number' ? width : undefined,
|
|
5656
5224
|
height: typeof height === 'number' ? height : undefined,
|
|
5657
|
-
platform: 'web'
|
|
5225
|
+
platform: 'web'
|
|
5658
5226
|
},
|
|
5659
|
-
config:
|
|
5227
|
+
config: wrappedOption,
|
|
5660
5228
|
data: {
|
|
5661
|
-
series: Array.isArray(
|
|
5662
|
-
totalDataCount: calculateDataLength(
|
|
5663
|
-
currentDataCount: calculateDataLength(
|
|
5229
|
+
series: Array.isArray(wrappedOption === null || wrappedOption === void 0 ? void 0 : wrappedOption.series) ? wrappedOption.series : [],
|
|
5230
|
+
totalDataCount: calculateDataLength(wrappedOption),
|
|
5231
|
+
currentDataCount: calculateDataLength(wrappedOption)
|
|
5664
5232
|
},
|
|
5665
5233
|
performance: {
|
|
5666
|
-
initTime:
|
|
5667
|
-
renderTime:
|
|
5668
|
-
|
|
5669
|
-
dataSize: JSON.stringify(option).length
|
|
5234
|
+
initTime: 0,
|
|
5235
|
+
renderTime: 0,
|
|
5236
|
+
dataSize: JSON.stringify(wrappedOption).length
|
|
5670
5237
|
}
|
|
5238
|
+
});
|
|
5239
|
+
}
|
|
5240
|
+
onInit === null || onInit === void 0 ? void 0 : onInit(instance);
|
|
5241
|
+
performanceRef.current.initEndTime = Date.now();
|
|
5242
|
+
}, [chartId, enablePerformanceMonitoring, onInit, linkageConfig, virtualScroll, onZoom, enableLegendInteraction, legendInteractionMode, onLegendSelect, onLegendUnselect, enableCustomTooltip, customTooltipContent, customTooltipStyle, onTooltipShow, onTooltipHide, wrappedOption, width, height]);
|
|
5243
|
+
// Update performance record
|
|
5244
|
+
(0,external_react_.useEffect)(function () {
|
|
5245
|
+
if (chartInstanceRef.current && onPerformance) {
|
|
5246
|
+
var p = performanceRef.current;
|
|
5247
|
+
onPerformance({
|
|
5248
|
+
renderTime: p.renderEndTime - p.renderStartTime,
|
|
5249
|
+
initTime: p.initEndTime - p.initStartTime,
|
|
5250
|
+
updateTime: p.updateEndTime - p.updateStartTime,
|
|
5251
|
+
dataSize: JSON.stringify(option).length
|
|
5252
|
+
});
|
|
5253
|
+
}
|
|
5254
|
+
}, [option, onPerformance]);
|
|
5255
|
+
// Data update callback
|
|
5256
|
+
(0,external_react_.useEffect)(function () {
|
|
5257
|
+
if (onDataUpdate && (dataUpdateOptions === null || dataUpdateOptions === void 0 ? void 0 : dataUpdateOptions.enabled) !== false) {
|
|
5258
|
+
var oldOpt = oldOptionRef.current;
|
|
5259
|
+
if (oldOpt !== option) {
|
|
5260
|
+
onDataUpdate(oldOpt, option);
|
|
5261
|
+
oldOptionRef.current = option;
|
|
5671
5262
|
}
|
|
5672
|
-
}
|
|
5673
|
-
}
|
|
5674
|
-
//
|
|
5675
|
-
|
|
5263
|
+
}
|
|
5264
|
+
}, [option, onDataUpdate, dataUpdateOptions]);
|
|
5265
|
+
// Cleanup on unmount
|
|
5266
|
+
(0,external_react_.useEffect)(function () {
|
|
5267
|
+
return function () {
|
|
5268
|
+
if (chartId) removeChart(chartId);
|
|
5269
|
+
if (performanceAnalyzerRef.current) {
|
|
5270
|
+
performanceAnalyzerRef.current.dispose();
|
|
5271
|
+
performanceAnalyzerRef.current = null;
|
|
5272
|
+
}
|
|
5273
|
+
if (adapterRef.current) adapterRef.current.dispose();
|
|
5274
|
+
};
|
|
5275
|
+
}, [chartId]);
|
|
5276
|
+
var mergedStyle = BaseChart_assign({}, normalizeSizeObject(width, height, direction, style));
|
|
5277
|
+
var wrapperProps = {
|
|
5278
|
+
option: wrappedOption,
|
|
5279
|
+
width: width,
|
|
5280
|
+
height: height,
|
|
5281
|
+
theme: typeof theme === 'string' ? theme : theme,
|
|
5282
|
+
autoResize: autoResize,
|
|
5283
|
+
loading: false,
|
|
5284
|
+
onChartInit: handleChartInit,
|
|
5285
|
+
renderer: 'canvas',
|
|
5286
|
+
onEvents: {},
|
|
5287
|
+
chartType: 'base',
|
|
5288
|
+
style: mergedStyle,
|
|
5289
|
+
className: className
|
|
5290
|
+
};
|
|
5291
|
+
return /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement(BaseChartWrapper/* default */.A, BaseChart_assign({}, wrapperProps)), (debugConfig === null || debugConfig === void 0 ? void 0 : debugConfig.enabled) && (/*#__PURE__*/external_react_default().createElement(DebugPanel, {
|
|
5292
|
+
options: debugConfig,
|
|
5293
|
+
debugInfo: {
|
|
5294
|
+
instance: {
|
|
5295
|
+
id: chartId,
|
|
5296
|
+
type: 'ECharts',
|
|
5297
|
+
renderer: 'canvas',
|
|
5298
|
+
width: typeof width === 'number' ? width : undefined,
|
|
5299
|
+
height: typeof height === 'number' ? height : undefined,
|
|
5300
|
+
platform: 'web'
|
|
5301
|
+
},
|
|
5302
|
+
config: option,
|
|
5303
|
+
data: {
|
|
5304
|
+
series: Array.isArray(option === null || option === void 0 ? void 0 : option.series) ? option.series : [],
|
|
5305
|
+
totalDataCount: calculateDataLength(option),
|
|
5306
|
+
currentDataCount: calculateDataLength(option)
|
|
5307
|
+
},
|
|
5308
|
+
performance: {
|
|
5309
|
+
initTime: performanceRef.current.initEndTime - performanceRef.current.initStartTime,
|
|
5310
|
+
renderTime: performanceRef.current.renderEndTime - performanceRef.current.renderStartTime,
|
|
5311
|
+
updateTime: 0,
|
|
5312
|
+
dataSize: JSON.stringify(option).length
|
|
5313
|
+
}
|
|
5314
|
+
}
|
|
5315
|
+
})));
|
|
5676
5316
|
};
|
|
5677
|
-
|
|
5678
|
-
|
|
5679
|
-
|
|
5317
|
+
function normalizeSizeObject(width, height, direction, style) {
|
|
5318
|
+
return BaseChart_assign({
|
|
5319
|
+
width: normalizeSize(width, '100%'),
|
|
5320
|
+
height: normalizeSize(height, '300px'),
|
|
5321
|
+
direction: direction
|
|
5322
|
+
}, style);
|
|
5323
|
+
}
|
|
5680
5324
|
/* harmony default export */ const components_BaseChart = (BaseChart);
|
|
5681
5325
|
// EXTERNAL MODULE: ./src/core/utils/index.ts + 2 modules
|
|
5682
5326
|
var utils = __webpack_require__(524);
|
|
@@ -5702,6 +5346,77 @@ var treemap = __webpack_require__(37);
|
|
|
5702
5346
|
var sunburst = __webpack_require__(673);
|
|
5703
5347
|
// EXTERNAL MODULE: ./src/charts/sankey/index.tsx
|
|
5704
5348
|
var sankey = __webpack_require__(490);
|
|
5349
|
+
;// ./src/charts/graph/index.tsx
|
|
5350
|
+
var graph_assign = undefined && undefined.__assign || function () {
|
|
5351
|
+
graph_assign = Object.assign || function (t) {
|
|
5352
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5353
|
+
s = arguments[i];
|
|
5354
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
5355
|
+
}
|
|
5356
|
+
return t;
|
|
5357
|
+
};
|
|
5358
|
+
return graph_assign.apply(this, arguments);
|
|
5359
|
+
};
|
|
5360
|
+
/**
|
|
5361
|
+
* GraphChart组件
|
|
5362
|
+
*/
|
|
5363
|
+
|
|
5364
|
+
|
|
5365
|
+
var GraphChart = /*#__PURE__*/(0,external_react_.memo)(function (props) {
|
|
5366
|
+
return /*#__PURE__*/external_react_default().createElement(BaseChartWrapper/* default */.A, graph_assign({}, props, {
|
|
5367
|
+
chartType: "graph-chart"
|
|
5368
|
+
}));
|
|
5369
|
+
});
|
|
5370
|
+
GraphChart.displayName = 'GraphChart';
|
|
5371
|
+
/* harmony default export */ const graph = (GraphChart);
|
|
5372
|
+
;// ./src/charts/candlestick/index.tsx
|
|
5373
|
+
var candlestick_assign = undefined && undefined.__assign || function () {
|
|
5374
|
+
candlestick_assign = Object.assign || function (t) {
|
|
5375
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5376
|
+
s = arguments[i];
|
|
5377
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
5378
|
+
}
|
|
5379
|
+
return t;
|
|
5380
|
+
};
|
|
5381
|
+
return candlestick_assign.apply(this, arguments);
|
|
5382
|
+
};
|
|
5383
|
+
/**
|
|
5384
|
+
* CandlestickChart组件
|
|
5385
|
+
*/
|
|
5386
|
+
|
|
5387
|
+
|
|
5388
|
+
var CandlestickChart = /*#__PURE__*/(0,external_react_.memo)(function (props) {
|
|
5389
|
+
return /*#__PURE__*/external_react_default().createElement(BaseChartWrapper/* default */.A, candlestick_assign({}, props, {
|
|
5390
|
+
chartType: "candlestick-chart"
|
|
5391
|
+
}));
|
|
5392
|
+
});
|
|
5393
|
+
CandlestickChart.displayName = 'CandlestickChart';
|
|
5394
|
+
/* harmony default export */ const candlestick = (CandlestickChart);
|
|
5395
|
+
;// ./src/charts/wordcloud/index.tsx
|
|
5396
|
+
var wordcloud_assign = undefined && undefined.__assign || function () {
|
|
5397
|
+
wordcloud_assign = Object.assign || function (t) {
|
|
5398
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5399
|
+
s = arguments[i];
|
|
5400
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
5401
|
+
}
|
|
5402
|
+
return t;
|
|
5403
|
+
};
|
|
5404
|
+
return wordcloud_assign.apply(this, arguments);
|
|
5405
|
+
};
|
|
5406
|
+
/**
|
|
5407
|
+
* WordCloudChart组件
|
|
5408
|
+
*/
|
|
5409
|
+
|
|
5410
|
+
|
|
5411
|
+
var WordCloudChart = /*#__PURE__*/(0,external_react_.memo)(function (props) {
|
|
5412
|
+
return /*#__PURE__*/external_react_default().createElement(BaseChartWrapper/* default */.A, wordcloud_assign({}, props, {
|
|
5413
|
+
chartType: "wordcloud-chart"
|
|
5414
|
+
}));
|
|
5415
|
+
});
|
|
5416
|
+
WordCloudChart.displayName = 'WordCloudChart';
|
|
5417
|
+
/* harmony default export */ const wordcloud = (WordCloudChart);
|
|
5418
|
+
// EXTERNAL MODULE: ./src/adapters/index.ts + 5 modules
|
|
5419
|
+
var adapters = __webpack_require__(574);
|
|
5705
5420
|
// EXTERNAL MODULE: ./src/adapters/h5/index.ts
|
|
5706
5421
|
var h5 = __webpack_require__(123);
|
|
5707
5422
|
// EXTERNAL MODULE: ./src/adapters/weapp/index.ts
|
|
@@ -6039,7 +5754,7 @@ var elegantTheme = {
|
|
|
6039
5754
|
* @param options 自定义选项
|
|
6040
5755
|
* @returns 合并后的主题配置
|
|
6041
5756
|
*/
|
|
6042
|
-
function
|
|
5757
|
+
function getTheme(options) {
|
|
6043
5758
|
if (!options) {
|
|
6044
5759
|
return defaultTheme;
|
|
6045
5760
|
}
|
|
@@ -6088,6 +5803,19 @@ function getThemeByName(name) {
|
|
|
6088
5803
|
function unregisterTheme(name) {
|
|
6089
5804
|
themeRegistry.delete(name);
|
|
6090
5805
|
}
|
|
5806
|
+
/**
|
|
5807
|
+
* 重置主题注册表(清除所有已注册的主题,恢复内置主题)
|
|
5808
|
+
* 主要用于测试环境
|
|
5809
|
+
*/
|
|
5810
|
+
function resetThemeRegistry() {
|
|
5811
|
+
themeRegistry.clear();
|
|
5812
|
+
// 重新注册所有内置主题
|
|
5813
|
+
Object.entries(builtinThemes).forEach(function (_a) {
|
|
5814
|
+
var name = _a[0],
|
|
5815
|
+
theme = _a[1];
|
|
5816
|
+
themeRegistry.set(name, theme);
|
|
5817
|
+
});
|
|
5818
|
+
}
|
|
6091
5819
|
/**
|
|
6092
5820
|
* 动态切换主题
|
|
6093
5821
|
* @param theme 主题名称或主题配置
|
|
@@ -6226,17 +5954,22 @@ Object.entries(builtinThemes).forEach(function (_a) {
|
|
|
6226
5954
|
cyberTheme: cyberTheme,
|
|
6227
5955
|
retroTheme: retroTheme,
|
|
6228
5956
|
elegantTheme: elegantTheme,
|
|
6229
|
-
getTheme:
|
|
5957
|
+
getTheme: getTheme,
|
|
6230
5958
|
registerTheme: registerTheme,
|
|
6231
5959
|
getRegisteredThemes: getRegisteredThemes,
|
|
6232
5960
|
getThemeByName: getThemeByName,
|
|
6233
5961
|
unregisterTheme: unregisterTheme,
|
|
5962
|
+
resetThemeRegistry: resetThemeRegistry,
|
|
6234
5963
|
switchTheme: switchTheme,
|
|
6235
5964
|
getThemesByTag: getThemesByTag,
|
|
6236
5965
|
getLightThemes: getLightThemes,
|
|
6237
5966
|
getDarkThemes: getDarkThemes
|
|
6238
5967
|
});
|
|
6239
5968
|
;// ./src/core/themes/ThemeManager.ts
|
|
5969
|
+
/**
|
|
5970
|
+
* TaroViz 主题系统
|
|
5971
|
+
* 支持 CSS 变量、动态主题切换、自定义主题
|
|
5972
|
+
*/
|
|
6240
5973
|
var ThemeManager_assign = undefined && undefined.__assign || function () {
|
|
6241
5974
|
ThemeManager_assign = Object.assign || function (t) {
|
|
6242
5975
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -6862,31 +6595,26 @@ var ThemeEditor = function (_a) {
|
|
|
6862
6595
|
var handleColorChange = function (index, color) {
|
|
6863
6596
|
var newColors = ThemeEditor_spreadArray([], colors, true);
|
|
6864
6597
|
newColors[index] = color;
|
|
6865
|
-
setColors(newColors);
|
|
6866
6598
|
updateCurrentTheme({
|
|
6867
6599
|
colors: newColors
|
|
6868
6600
|
});
|
|
6869
6601
|
};
|
|
6870
6602
|
// 处理背景色变化
|
|
6871
6603
|
var handleBackgroundColorChange = function (color) {
|
|
6872
|
-
setBackgroundColor(color);
|
|
6873
6604
|
updateCurrentTheme({
|
|
6874
6605
|
backgroundColor: color
|
|
6875
6606
|
});
|
|
6876
6607
|
};
|
|
6877
6608
|
// 处理文本颜色变化
|
|
6878
6609
|
var handleTextColorChange = function (color) {
|
|
6879
|
-
setTextColor(color);
|
|
6880
6610
|
updateCurrentTheme({
|
|
6881
6611
|
textColor: color
|
|
6882
6612
|
});
|
|
6883
6613
|
};
|
|
6884
6614
|
// 处理深色模式切换
|
|
6885
6615
|
var handleDarkModeToggle = function () {
|
|
6886
|
-
var newDarkMode = !darkMode;
|
|
6887
|
-
setDarkMode(newDarkMode);
|
|
6888
6616
|
updateCurrentTheme({
|
|
6889
|
-
darkMode:
|
|
6617
|
+
darkMode: !darkMode
|
|
6890
6618
|
});
|
|
6891
6619
|
};
|
|
6892
6620
|
// 更新当前主题
|
|
@@ -7390,7 +7118,8 @@ function withErrorBoundary(ChartComponent, errorBoundaryProps) {
|
|
|
7390
7118
|
var WrappedChart = function (props) {
|
|
7391
7119
|
return /*#__PURE__*/external_react_default().createElement(ErrorBoundary, ErrorBoundary_assign({}, errorBoundaryProps), /*#__PURE__*/external_react_default().createElement(ChartComponent, ErrorBoundary_assign({}, props)));
|
|
7392
7120
|
};
|
|
7393
|
-
|
|
7121
|
+
var componentName = ChartComponent.displayName || ChartComponent.name;
|
|
7122
|
+
WrappedChart.displayName = componentName ? "withErrorBoundary(".concat(componentName, ")") : 'withErrorBoundary(WrappedChart)';
|
|
7394
7123
|
return WrappedChart;
|
|
7395
7124
|
}
|
|
7396
7125
|
/* harmony default export */ const components_ErrorBoundary = ((/* unused pure expression or super */ null && (ErrorBoundary)));
|
|
@@ -7452,6 +7181,43 @@ var LazySunburstChart = /*#__PURE__*/(0,external_react_.lazy)(function () {
|
|
|
7452
7181
|
var LazySankeyChart = /*#__PURE__*/(0,external_react_.lazy)(function () {
|
|
7453
7182
|
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 490));
|
|
7454
7183
|
});
|
|
7184
|
+
// 统一的图表类型到懒加载组件映射
|
|
7185
|
+
var LAZY_CHART_MODULES = {
|
|
7186
|
+
line: function () {
|
|
7187
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 127));
|
|
7188
|
+
},
|
|
7189
|
+
bar: function () {
|
|
7190
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 188));
|
|
7191
|
+
},
|
|
7192
|
+
pie: function () {
|
|
7193
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 481));
|
|
7194
|
+
},
|
|
7195
|
+
scatter: function () {
|
|
7196
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 589));
|
|
7197
|
+
},
|
|
7198
|
+
radar: function () {
|
|
7199
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 443));
|
|
7200
|
+
},
|
|
7201
|
+
heatmap: function () {
|
|
7202
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 835));
|
|
7203
|
+
},
|
|
7204
|
+
gauge: function () {
|
|
7205
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 334));
|
|
7206
|
+
},
|
|
7207
|
+
funnel: function () {
|
|
7208
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 133));
|
|
7209
|
+
},
|
|
7210
|
+
treemap: function () {
|
|
7211
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 37));
|
|
7212
|
+
},
|
|
7213
|
+
sunburst: function () {
|
|
7214
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 673));
|
|
7215
|
+
},
|
|
7216
|
+
sankey: function () {
|
|
7217
|
+
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 490));
|
|
7218
|
+
}
|
|
7219
|
+
};
|
|
7220
|
+
var LAZY_CHART_TYPES = Object.keys(LAZY_CHART_MODULES);
|
|
7455
7221
|
/**
|
|
7456
7222
|
* 默认加载状态组件
|
|
7457
7223
|
*/
|
|
@@ -7511,56 +7277,31 @@ function withLazyLoad(ChartComponent, loadingFallback) {
|
|
|
7511
7277
|
/**
|
|
7512
7278
|
* 预加载图表组件
|
|
7513
7279
|
* 在需要显示图表之前预先加载
|
|
7280
|
+
* @param silent - 如果为 true,错误不会被打印到控制台(保持旧行为兼容)
|
|
7281
|
+
* @returns Promise that resolves when loaded, rejects on error
|
|
7514
7282
|
*/
|
|
7515
|
-
function preloadChart(chartType) {
|
|
7516
|
-
|
|
7517
|
-
|
|
7518
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 127));
|
|
7519
|
-
},
|
|
7520
|
-
bar: function () {
|
|
7521
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 188));
|
|
7522
|
-
},
|
|
7523
|
-
pie: function () {
|
|
7524
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 481));
|
|
7525
|
-
},
|
|
7526
|
-
scatter: function () {
|
|
7527
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 589));
|
|
7528
|
-
},
|
|
7529
|
-
radar: function () {
|
|
7530
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 443));
|
|
7531
|
-
},
|
|
7532
|
-
heatmap: function () {
|
|
7533
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 835));
|
|
7534
|
-
},
|
|
7535
|
-
gauge: function () {
|
|
7536
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 334));
|
|
7537
|
-
},
|
|
7538
|
-
funnel: function () {
|
|
7539
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 133));
|
|
7540
|
-
},
|
|
7541
|
-
treemap: function () {
|
|
7542
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 37));
|
|
7543
|
-
},
|
|
7544
|
-
sunburst: function () {
|
|
7545
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 673));
|
|
7546
|
-
},
|
|
7547
|
-
sankey: function () {
|
|
7548
|
-
return Promise.resolve(/* import() */).then(__webpack_require__.bind(__webpack_require__, 490));
|
|
7549
|
-
}
|
|
7550
|
-
};
|
|
7551
|
-
var loader = chartModules[chartType];
|
|
7552
|
-
if (loader) {
|
|
7553
|
-
loader().catch(console.error);
|
|
7283
|
+
function preloadChart(chartType, silent) {
|
|
7284
|
+
if (silent === void 0) {
|
|
7285
|
+
silent = true;
|
|
7554
7286
|
}
|
|
7287
|
+
var loader = LAZY_CHART_MODULES[chartType];
|
|
7288
|
+
if (!loader) {
|
|
7289
|
+
if (silent) return Promise.resolve();
|
|
7290
|
+
return Promise.reject(new Error("Unknown chart type: ".concat(chartType)));
|
|
7291
|
+
}
|
|
7292
|
+
return loader().then(function () {
|
|
7293
|
+
return undefined;
|
|
7294
|
+
}).catch(function (e) {
|
|
7295
|
+
if (!silent) console.error('[TaroViz] Failed to preload chart:', chartType, e);
|
|
7296
|
+
});
|
|
7555
7297
|
}
|
|
7556
7298
|
/**
|
|
7557
7299
|
* 预加载所有图表组件
|
|
7558
7300
|
*/
|
|
7559
7301
|
function preloadAllCharts() {
|
|
7560
|
-
|
|
7561
|
-
chartTypes.forEach(function (type) {
|
|
7302
|
+
return Promise.all(LAZY_CHART_TYPES.map(function (type) {
|
|
7562
7303
|
return preloadChart(type);
|
|
7563
|
-
});
|
|
7304
|
+
}));
|
|
7564
7305
|
}
|
|
7565
7306
|
/**
|
|
7566
7307
|
* 创建懒加载图表映射
|
|
@@ -7590,11 +7331,14 @@ var LazyChartRegistry = {
|
|
|
7590
7331
|
get: function (chartType) {
|
|
7591
7332
|
return createLazyChart(chartType);
|
|
7592
7333
|
},
|
|
7593
|
-
preload: function (chartType) {
|
|
7594
|
-
|
|
7334
|
+
preload: function (chartType, silent) {
|
|
7335
|
+
if (silent === void 0) {
|
|
7336
|
+
silent = true;
|
|
7337
|
+
}
|
|
7338
|
+
return preloadChart(chartType, silent);
|
|
7595
7339
|
},
|
|
7596
7340
|
preloadAll: function () {
|
|
7597
|
-
preloadAllCharts();
|
|
7341
|
+
return preloadAllCharts();
|
|
7598
7342
|
}
|
|
7599
7343
|
};
|
|
7600
7344
|
|
|
@@ -7724,15 +7468,19 @@ function useAnnotation(props) {
|
|
|
7724
7468
|
markArea = props.markArea,
|
|
7725
7469
|
scatter = props.scatter;
|
|
7726
7470
|
return (0,external_react_.useMemo)(function () {
|
|
7471
|
+
// 使用 any 避免类型复杂性问题
|
|
7727
7472
|
var series = [];
|
|
7728
7473
|
if (type === 'line' && markLine) {
|
|
7729
|
-
|
|
7474
|
+
var markLineResult = convertAnnotationToMarkLine(markLine);
|
|
7475
|
+
series.push.apply(series, Array.isArray(markLineResult) ? markLineResult : [markLineResult]);
|
|
7730
7476
|
}
|
|
7731
7477
|
if (type === 'area' && markArea) {
|
|
7732
|
-
|
|
7478
|
+
var markAreaResult = convertAnnotationToMarkArea(markArea);
|
|
7479
|
+
series.push.apply(series, Array.isArray(markAreaResult) ? markAreaResult : [markAreaResult]);
|
|
7733
7480
|
}
|
|
7734
7481
|
if (type === 'scatter' && scatter) {
|
|
7735
|
-
|
|
7482
|
+
var scatterResult = convertAnnotationToScatter(scatter);
|
|
7483
|
+
series.push.apply(series, Array.isArray(scatterResult) ? scatterResult : [scatterResult]);
|
|
7736
7484
|
}
|
|
7737
7485
|
return {
|
|
7738
7486
|
series: series
|
|
@@ -7883,13 +7631,16 @@ function createCompositeAnnotation(annotations) {
|
|
|
7883
7631
|
var allSeries = [];
|
|
7884
7632
|
annotations.forEach(function (annotation) {
|
|
7885
7633
|
if (annotation.type === 'line' && annotation.markLine) {
|
|
7886
|
-
|
|
7634
|
+
var result = convertAnnotationToMarkLine(annotation.markLine);
|
|
7635
|
+
allSeries.push.apply(allSeries, Array.isArray(result) ? result : [result]);
|
|
7887
7636
|
}
|
|
7888
7637
|
if (annotation.type === 'area' && annotation.markArea) {
|
|
7889
|
-
|
|
7638
|
+
var result = convertAnnotationToMarkArea(annotation.markArea);
|
|
7639
|
+
allSeries.push.apply(allSeries, Array.isArray(result) ? result : [result]);
|
|
7890
7640
|
}
|
|
7891
7641
|
if (annotation.type === 'scatter' && annotation.scatter) {
|
|
7892
|
-
|
|
7642
|
+
var result = convertAnnotationToScatter(annotation.scatter);
|
|
7643
|
+
allSeries.push.apply(allSeries, Array.isArray(result) ? result : [result]);
|
|
7893
7644
|
}
|
|
7894
7645
|
});
|
|
7895
7646
|
return {
|
|
@@ -8049,7 +7800,7 @@ function dataURLToBlob(dataURL) {
|
|
|
8049
7800
|
/**
|
|
8050
7801
|
* 下载文件
|
|
8051
7802
|
*/
|
|
8052
|
-
function downloadFile(data, filename,
|
|
7803
|
+
function downloadFile(data, filename, _mimeType) {
|
|
8053
7804
|
var blob = typeof data === 'string' ? dataURLToBlob(data) : data;
|
|
8054
7805
|
var url = URL.createObjectURL(blob);
|
|
8055
7806
|
var link = document.createElement('a');
|
|
@@ -8096,6 +7847,7 @@ var ChartExporter = /** @class */function () {
|
|
|
8096
7847
|
_d = options.quality,
|
|
8097
7848
|
quality = _d === void 0 ? 0.8 : _d;
|
|
8098
7849
|
var mimeType = "image/".concat(type);
|
|
7850
|
+
// 使用 any 避免 ECharts 类型定义与实际支持类型不匹配
|
|
8099
7851
|
var data = chart.getDataURL({
|
|
8100
7852
|
type: type,
|
|
8101
7853
|
pixelRatio: pixelRatio,
|
|
@@ -8117,8 +7869,11 @@ var ChartExporter = /** @class */function () {
|
|
|
8117
7869
|
}
|
|
8118
7870
|
var _a = options.compress,
|
|
8119
7871
|
compress = _a === void 0 ? false : _a;
|
|
8120
|
-
|
|
8121
|
-
|
|
7872
|
+
// ECharts 5.x 使用 getDataURL 获取 SVG
|
|
7873
|
+
var svgData = chart.getDataURL({
|
|
7874
|
+
type: 'svg'
|
|
7875
|
+
});
|
|
7876
|
+
if (!svgData || svgData === 'data:image/svg+xml;charset=utf8,') {
|
|
8122
7877
|
throw new Error('SVG export is not supported. Please use canvas renderer.');
|
|
8123
7878
|
}
|
|
8124
7879
|
var data = svgData;
|
|
@@ -8140,11 +7895,12 @@ var ChartExporter = /** @class */function () {
|
|
|
8140
7895
|
ChartExporter.exportPDF = function (chart_1) {
|
|
8141
7896
|
return __awaiter(this, arguments, Promise, function (chart, options) {
|
|
8142
7897
|
var _a, orientation, _b, pageSize, _c, title, _d, author, _e, margin, _f, includeTitle, imageData, jsPDF, _g, pageSizes, size, isLandscape, doc, chartWidth, chartHeight, pageWidth, pageHeight, marginTop, marginLeft, chartY, chartX, footerY, pdfBlob;
|
|
7898
|
+
var _h;
|
|
8143
7899
|
if (options === void 0) {
|
|
8144
7900
|
options = {};
|
|
8145
7901
|
}
|
|
8146
|
-
return __generator(this, function (
|
|
8147
|
-
switch (
|
|
7902
|
+
return __generator(this, function (_j) {
|
|
7903
|
+
switch (_j.label) {
|
|
8148
7904
|
case 0:
|
|
8149
7905
|
_a = options.orientation, orientation = _a === void 0 ? 'portrait' : _a, _b = options.pageSize, pageSize = _b === void 0 ? 'a4' : _b, _c = options.title, title = _c === void 0 ? 'Chart Export' : _c, _d = options.author, author = _d === void 0 ? 'TaroViz' : _d, _e = options.margin, margin = _e === void 0 ? {
|
|
8150
7906
|
top: 40,
|
|
@@ -8157,17 +7913,17 @@ var ChartExporter = /** @class */function () {
|
|
|
8157
7913
|
pixelRatio: 2,
|
|
8158
7914
|
backgroundColor: '#ffffff'
|
|
8159
7915
|
});
|
|
8160
|
-
|
|
7916
|
+
_j.label = 1;
|
|
8161
7917
|
case 1:
|
|
8162
|
-
|
|
7918
|
+
_j.trys.push([1, 3,, 4]);
|
|
8163
7919
|
return [4 /*yield*/, import(/* webpackIgnore: true */'jspdf')];
|
|
8164
7920
|
case 2:
|
|
8165
7921
|
// 尝试使用动态导入,使用 webpackIgnore 注释避免预解析
|
|
8166
|
-
// @ts-
|
|
8167
|
-
jsPDF =
|
|
7922
|
+
// @ts-expect-error - 动态导入
|
|
7923
|
+
jsPDF = _j.sent().default;
|
|
8168
7924
|
return [3 /*break*/, 4];
|
|
8169
7925
|
case 3:
|
|
8170
|
-
_g =
|
|
7926
|
+
_g = _j.sent();
|
|
8171
7927
|
// 如果没有 jspdf,提供备选方案
|
|
8172
7928
|
console.warn('[TaroViz] jspdf not found, falling back to image download');
|
|
8173
7929
|
return [2 /*return*/, {
|
|
@@ -8223,7 +7979,7 @@ var ChartExporter = /** @class */function () {
|
|
|
8223
7979
|
chartY = includeTitle ? marginTop + 15 : marginTop;
|
|
8224
7980
|
chartX = (pageWidth - chartWidth) / 2;
|
|
8225
7981
|
doc.addImage(imageData, 'PNG', chartX, chartY, chartWidth, chartHeight);
|
|
8226
|
-
footerY = pageHeight - margin.bottom / 2;
|
|
7982
|
+
footerY = pageHeight - ((_h = margin.bottom) !== null && _h !== void 0 ? _h : 40) / 2;
|
|
8227
7983
|
doc.setFontSize(10);
|
|
8228
7984
|
doc.setTextColor(153, 153, 153);
|
|
8229
7985
|
doc.text("Generated by TaroViz on ".concat(new Date().toLocaleDateString()), marginLeft, footerY);
|
|
@@ -8243,11 +7999,11 @@ var ChartExporter = /** @class */function () {
|
|
|
8243
7999
|
*/
|
|
8244
8000
|
ChartExporter.exportBatch = function (charts, options) {
|
|
8245
8001
|
return __awaiter(this, void 0, Promise, function () {
|
|
8246
|
-
var format, _a,
|
|
8002
|
+
var format, _a, _filenamePrefix, compress, results, _i, charts_1, _b, name, chart, result, error_1;
|
|
8247
8003
|
return __generator(this, function (_c) {
|
|
8248
8004
|
switch (_c.label) {
|
|
8249
8005
|
case 0:
|
|
8250
|
-
format = options.format, _a = options.filenamePrefix,
|
|
8006
|
+
format = options.format, _a = options.filenamePrefix, _filenamePrefix = _a === void 0 ? 'chart' : _a, compress = options.compress;
|
|
8251
8007
|
results = [];
|
|
8252
8008
|
_i = 0, charts_1 = charts;
|
|
8253
8009
|
_c.label = 1;
|
|
@@ -8347,6 +8103,466 @@ var ChartExporter = /** @class */function () {
|
|
|
8347
8103
|
}();
|
|
8348
8104
|
var exportChart = ChartExporter;
|
|
8349
8105
|
/* harmony default export */ const ExportUtils = ((/* unused pure expression or super */ null && (ChartExporter)));
|
|
8106
|
+
;// ./src/hooks/useDataTransform.ts
|
|
8107
|
+
var useDataTransform_assign = undefined && undefined.__assign || function () {
|
|
8108
|
+
useDataTransform_assign = Object.assign || function (t) {
|
|
8109
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8110
|
+
s = arguments[i];
|
|
8111
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
8112
|
+
}
|
|
8113
|
+
return t;
|
|
8114
|
+
};
|
|
8115
|
+
return useDataTransform_assign.apply(this, arguments);
|
|
8116
|
+
};
|
|
8117
|
+
var useDataTransform_spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) {
|
|
8118
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
8119
|
+
if (ar || !(i in from)) {
|
|
8120
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
8121
|
+
ar[i] = from[i];
|
|
8122
|
+
}
|
|
8123
|
+
}
|
|
8124
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
8125
|
+
};
|
|
8126
|
+
/**
|
|
8127
|
+
* useDataTransform - 数据转换 Hook
|
|
8128
|
+
* 提供便捷的数据转换功能,将原始数据转换为 ECharts 配置
|
|
8129
|
+
*/
|
|
8130
|
+
|
|
8131
|
+
// ============================================================================
|
|
8132
|
+
// 数据转换 Hook
|
|
8133
|
+
// ============================================================================
|
|
8134
|
+
/**
|
|
8135
|
+
* 使用数据转换
|
|
8136
|
+
* @param options 转换选项
|
|
8137
|
+
* @returns 转换后的 ECharts 配置
|
|
8138
|
+
*/
|
|
8139
|
+
function useDataTransform(options) {
|
|
8140
|
+
var data = options.data,
|
|
8141
|
+
chartType = options.chartType,
|
|
8142
|
+
_a = options.mapping,
|
|
8143
|
+
mapping = _a === void 0 ? {} : _a,
|
|
8144
|
+
_b = options.extraConfig,
|
|
8145
|
+
extraConfig = _b === void 0 ? {} : _b;
|
|
8146
|
+
return (0,external_react_.useMemo)(function () {
|
|
8147
|
+
switch (chartType) {
|
|
8148
|
+
case 'line':
|
|
8149
|
+
case 'bar':
|
|
8150
|
+
return transformLineOrBar(data, chartType, mapping, extraConfig);
|
|
8151
|
+
case 'pie':
|
|
8152
|
+
return transformPie(data, mapping, extraConfig);
|
|
8153
|
+
case 'scatter':
|
|
8154
|
+
return transformScatter(data, mapping, extraConfig);
|
|
8155
|
+
case 'radar':
|
|
8156
|
+
return transformRadar(data, mapping, extraConfig);
|
|
8157
|
+
case 'heatmap':
|
|
8158
|
+
return transformHeatmap(data, mapping, extraConfig);
|
|
8159
|
+
default:
|
|
8160
|
+
return {};
|
|
8161
|
+
}
|
|
8162
|
+
}, [data, chartType, mapping, extraConfig]);
|
|
8163
|
+
}
|
|
8164
|
+
/**
|
|
8165
|
+
* 使用表格数据转换
|
|
8166
|
+
* 将表格数据转换为 ECharts 配置
|
|
8167
|
+
*/
|
|
8168
|
+
function useTableTransform(options) {
|
|
8169
|
+
var data = options.data,
|
|
8170
|
+
_a = options.columns,
|
|
8171
|
+
columns = _a === void 0 ? [] : _a,
|
|
8172
|
+
_b = options.transpose,
|
|
8173
|
+
transpose = _b === void 0 ? false : _b,
|
|
8174
|
+
_c = options.extraConfig,
|
|
8175
|
+
extraConfig = _c === void 0 ? {} : _c;
|
|
8176
|
+
return (0,external_react_.useMemo)(function () {
|
|
8177
|
+
if (!data || data.length === 0) {
|
|
8178
|
+
return {};
|
|
8179
|
+
}
|
|
8180
|
+
var firstRow = data[0];
|
|
8181
|
+
var fields = columns.length > 0 ? columns.map(function (c) {
|
|
8182
|
+
return c.field;
|
|
8183
|
+
}) : Object.keys(firstRow);
|
|
8184
|
+
// Build columns map for O(1) lookup instead of O(n) find
|
|
8185
|
+
var columnsMap = new Map(columns.map(function (c) {
|
|
8186
|
+
return [c.field, c];
|
|
8187
|
+
}));
|
|
8188
|
+
var categories = transpose ? fields : data.map(function (row) {
|
|
8189
|
+
return String(row[fields[0]] || '');
|
|
8190
|
+
});
|
|
8191
|
+
// For non-transpose, we skip the first field (it's used for categories)
|
|
8192
|
+
var seriesFields = transpose ? fields : fields.slice(1);
|
|
8193
|
+
var series = seriesFields.map(function (fieldName) {
|
|
8194
|
+
var key = typeof fieldName === 'string' ? fieldName : '';
|
|
8195
|
+
var colConfig = columnsMap.get(key);
|
|
8196
|
+
// values calculation is the same regardless of transpose
|
|
8197
|
+
var values = data.map(function (row) {
|
|
8198
|
+
return Number(row[key]) || 0;
|
|
8199
|
+
});
|
|
8200
|
+
return {
|
|
8201
|
+
name: (colConfig === null || colConfig === void 0 ? void 0 : colConfig.label) || key,
|
|
8202
|
+
type: 'bar',
|
|
8203
|
+
data: values,
|
|
8204
|
+
itemStyle: (colConfig === null || colConfig === void 0 ? void 0 : colConfig.color) ? {
|
|
8205
|
+
color: colConfig.color
|
|
8206
|
+
} : undefined
|
|
8207
|
+
};
|
|
8208
|
+
});
|
|
8209
|
+
return useDataTransform_assign({
|
|
8210
|
+
xAxis: {
|
|
8211
|
+
type: 'category',
|
|
8212
|
+
data: categories
|
|
8213
|
+
},
|
|
8214
|
+
yAxis: {
|
|
8215
|
+
type: 'value'
|
|
8216
|
+
},
|
|
8217
|
+
series: series
|
|
8218
|
+
}, extraConfig);
|
|
8219
|
+
}, [data, columns, transpose, extraConfig]);
|
|
8220
|
+
}
|
|
8221
|
+
/**
|
|
8222
|
+
* 使用时间序列转换
|
|
8223
|
+
* 将时间序列数据转换为 ECharts 配置
|
|
8224
|
+
*/
|
|
8225
|
+
function useTimeSeriesTransform(options) {
|
|
8226
|
+
var data = options.data,
|
|
8227
|
+
dateField = options.dateField,
|
|
8228
|
+
valueField = options.valueField,
|
|
8229
|
+
groupField = options.groupField,
|
|
8230
|
+
_a = options.period,
|
|
8231
|
+
period = _a === void 0 ? 'day' : _a,
|
|
8232
|
+
_b = options.aggregation,
|
|
8233
|
+
aggregation = _b === void 0 ? 'sum' : _b,
|
|
8234
|
+
_c = options.fillMissing,
|
|
8235
|
+
fillMissing = _c === void 0 ? 'forward' : _c,
|
|
8236
|
+
_d = options.extraConfig,
|
|
8237
|
+
extraConfig = _d === void 0 ? {} : _d;
|
|
8238
|
+
return (0,external_react_.useMemo)(function () {
|
|
8239
|
+
if (!data || data.length === 0) {
|
|
8240
|
+
return {};
|
|
8241
|
+
}
|
|
8242
|
+
// 按时间分组
|
|
8243
|
+
var groupedData = groupByTime(data, dateField, period);
|
|
8244
|
+
var categories = Object.keys(groupedData).sort();
|
|
8245
|
+
if (groupField) {
|
|
8246
|
+
// 多系列
|
|
8247
|
+
var groups = new Set(data.map(function (d) {
|
|
8248
|
+
return String(d[groupField]);
|
|
8249
|
+
}));
|
|
8250
|
+
var series = Array.from(groups).map(function (group) {
|
|
8251
|
+
var groupValues = categories.map(function (date) {
|
|
8252
|
+
var _a;
|
|
8253
|
+
var items = ((_a = groupedData[date]) === null || _a === void 0 ? void 0 : _a.filter(function (d) {
|
|
8254
|
+
return String(d[groupField]) === group;
|
|
8255
|
+
})) || [];
|
|
8256
|
+
return aggregateValues(items, valueField, aggregation, fillMissing);
|
|
8257
|
+
});
|
|
8258
|
+
return {
|
|
8259
|
+
name: group,
|
|
8260
|
+
type: 'line',
|
|
8261
|
+
data: groupValues,
|
|
8262
|
+
smooth: true
|
|
8263
|
+
};
|
|
8264
|
+
});
|
|
8265
|
+
return useDataTransform_assign({
|
|
8266
|
+
xAxis: {
|
|
8267
|
+
type: 'category',
|
|
8268
|
+
data: categories
|
|
8269
|
+
},
|
|
8270
|
+
yAxis: {
|
|
8271
|
+
type: 'value'
|
|
8272
|
+
},
|
|
8273
|
+
series: series
|
|
8274
|
+
}, extraConfig);
|
|
8275
|
+
} else {
|
|
8276
|
+
// 单系列
|
|
8277
|
+
var values = categories.map(function (date) {
|
|
8278
|
+
return aggregateValues(groupedData[date] || [], valueField, aggregation, fillMissing);
|
|
8279
|
+
});
|
|
8280
|
+
return useDataTransform_assign({
|
|
8281
|
+
xAxis: {
|
|
8282
|
+
type: 'category',
|
|
8283
|
+
data: categories
|
|
8284
|
+
},
|
|
8285
|
+
yAxis: {
|
|
8286
|
+
type: 'value'
|
|
8287
|
+
},
|
|
8288
|
+
series: [{
|
|
8289
|
+
type: 'line',
|
|
8290
|
+
data: values,
|
|
8291
|
+
smooth: true
|
|
8292
|
+
}]
|
|
8293
|
+
}, extraConfig);
|
|
8294
|
+
}
|
|
8295
|
+
}, [data, dateField, valueField, groupField, period, aggregation, fillMissing, extraConfig]);
|
|
8296
|
+
}
|
|
8297
|
+
// ============================================================================
|
|
8298
|
+
// 辅助函数
|
|
8299
|
+
// ============================================================================
|
|
8300
|
+
function transformLineOrBar(data, chartType, mapping, extraConfig) {
|
|
8301
|
+
var _a;
|
|
8302
|
+
var _b = mapping || {},
|
|
8303
|
+
_c = _b.xField,
|
|
8304
|
+
xField = _c === void 0 ? 'name' : _c,
|
|
8305
|
+
_d = _b.yField,
|
|
8306
|
+
yField = _d === void 0 ? 'value' : _d,
|
|
8307
|
+
seriesField = _b.seriesField;
|
|
8308
|
+
var categories = data.categories || ((_a = data.rows) === null || _a === void 0 ? void 0 : _a.map(function (r) {
|
|
8309
|
+
return String(r[xField]);
|
|
8310
|
+
})) || [];
|
|
8311
|
+
var seriesData = data.series || data.rows || [];
|
|
8312
|
+
if (seriesField) {
|
|
8313
|
+
var groups_1 = new Map();
|
|
8314
|
+
seriesData.forEach(function (item) {
|
|
8315
|
+
var key = String(item[seriesField] || 'default');
|
|
8316
|
+
if (!groups_1.has(key)) groups_1.set(key, []);
|
|
8317
|
+
groups_1.get(key).push(item);
|
|
8318
|
+
});
|
|
8319
|
+
var series_1 = Array.from(groups_1.entries()).map(function (_a) {
|
|
8320
|
+
var name = _a[0],
|
|
8321
|
+
items = _a[1];
|
|
8322
|
+
return {
|
|
8323
|
+
name: name,
|
|
8324
|
+
type: chartType,
|
|
8325
|
+
data: items.map(function (item) {
|
|
8326
|
+
var _a;
|
|
8327
|
+
return (_a = item[yField]) !== null && _a !== void 0 ? _a : 0;
|
|
8328
|
+
})
|
|
8329
|
+
};
|
|
8330
|
+
});
|
|
8331
|
+
return useDataTransform_assign({
|
|
8332
|
+
xAxis: {
|
|
8333
|
+
type: 'category',
|
|
8334
|
+
data: categories
|
|
8335
|
+
},
|
|
8336
|
+
yAxis: {
|
|
8337
|
+
type: 'value'
|
|
8338
|
+
},
|
|
8339
|
+
series: series_1
|
|
8340
|
+
}, extraConfig);
|
|
8341
|
+
}
|
|
8342
|
+
var series = [{
|
|
8343
|
+
type: chartType,
|
|
8344
|
+
data: seriesData.map(function (item) {
|
|
8345
|
+
var _a;
|
|
8346
|
+
return (_a = item[yField]) !== null && _a !== void 0 ? _a : 0;
|
|
8347
|
+
})
|
|
8348
|
+
}];
|
|
8349
|
+
return useDataTransform_assign({
|
|
8350
|
+
xAxis: {
|
|
8351
|
+
type: 'category',
|
|
8352
|
+
data: categories
|
|
8353
|
+
},
|
|
8354
|
+
yAxis: {
|
|
8355
|
+
type: 'value'
|
|
8356
|
+
},
|
|
8357
|
+
series: series
|
|
8358
|
+
}, extraConfig);
|
|
8359
|
+
}
|
|
8360
|
+
function transformPie(data, mapping, extraConfig) {
|
|
8361
|
+
var _a = mapping || {},
|
|
8362
|
+
_b = _a.nameField,
|
|
8363
|
+
nameField = _b === void 0 ? 'name' : _b,
|
|
8364
|
+
_c = _a.valueField,
|
|
8365
|
+
valueField = _c === void 0 ? 'value' : _c;
|
|
8366
|
+
var seriesData = (data.series || data.rows || []).map(function (item) {
|
|
8367
|
+
return {
|
|
8368
|
+
name: String(item[nameField] || ''),
|
|
8369
|
+
value: Number(item[valueField]) || 0
|
|
8370
|
+
};
|
|
8371
|
+
});
|
|
8372
|
+
return useDataTransform_assign({
|
|
8373
|
+
series: [{
|
|
8374
|
+
type: 'pie',
|
|
8375
|
+
radius: '60%',
|
|
8376
|
+
data: seriesData
|
|
8377
|
+
}]
|
|
8378
|
+
}, extraConfig);
|
|
8379
|
+
}
|
|
8380
|
+
function transformScatter(data, mapping, extraConfig) {
|
|
8381
|
+
var _a = mapping || {},
|
|
8382
|
+
_b = _a.xField,
|
|
8383
|
+
xField = _b === void 0 ? 'x' : _b,
|
|
8384
|
+
_c = _a.yField,
|
|
8385
|
+
yField = _c === void 0 ? 'y' : _c,
|
|
8386
|
+
sizeField = _a.sizeField;
|
|
8387
|
+
var seriesData = (data.series || data.rows || []).map(function (item) {
|
|
8388
|
+
var record = item;
|
|
8389
|
+
var point = [Number(record[xField]) || 0, Number(record[yField]) || 0];
|
|
8390
|
+
if (sizeField) point.push(Number(record[sizeField]) || 1);
|
|
8391
|
+
return point;
|
|
8392
|
+
});
|
|
8393
|
+
return useDataTransform_assign({
|
|
8394
|
+
xAxis: {
|
|
8395
|
+
type: 'value',
|
|
8396
|
+
scale: true
|
|
8397
|
+
},
|
|
8398
|
+
yAxis: {
|
|
8399
|
+
type: 'value',
|
|
8400
|
+
scale: true
|
|
8401
|
+
},
|
|
8402
|
+
series: [{
|
|
8403
|
+
type: 'scatter',
|
|
8404
|
+
data: seriesData
|
|
8405
|
+
}]
|
|
8406
|
+
}, extraConfig);
|
|
8407
|
+
}
|
|
8408
|
+
function transformRadar(data, mapping, extraConfig) {
|
|
8409
|
+
var _a = mapping || {},
|
|
8410
|
+
_b = _a.nameField,
|
|
8411
|
+
nameField = _b === void 0 ? 'name' : _b,
|
|
8412
|
+
_c = _a.valueField,
|
|
8413
|
+
valueField = _c === void 0 ? 'value' : _c;
|
|
8414
|
+
var indicators = (data.series || data.rows || []).map(function (item) {
|
|
8415
|
+
var record = item;
|
|
8416
|
+
return {
|
|
8417
|
+
name: String(record[nameField] || ''),
|
|
8418
|
+
max: Math.max(Number(record[valueField]) || 100, 100)
|
|
8419
|
+
};
|
|
8420
|
+
});
|
|
8421
|
+
var values = (data.series || data.rows || []).map(function (item) {
|
|
8422
|
+
return Number(item[valueField]) || 0;
|
|
8423
|
+
});
|
|
8424
|
+
return useDataTransform_assign({
|
|
8425
|
+
radar: {
|
|
8426
|
+
indicator: indicators
|
|
8427
|
+
},
|
|
8428
|
+
series: [{
|
|
8429
|
+
type: 'radar',
|
|
8430
|
+
data: [{
|
|
8431
|
+
value: values
|
|
8432
|
+
}]
|
|
8433
|
+
}]
|
|
8434
|
+
}, extraConfig);
|
|
8435
|
+
}
|
|
8436
|
+
function transformHeatmap(data, mapping, extraConfig) {
|
|
8437
|
+
var _a = mapping || {},
|
|
8438
|
+
_b = _a.xField,
|
|
8439
|
+
xField = _b === void 0 ? 'x' : _b,
|
|
8440
|
+
_c = _a.yField,
|
|
8441
|
+
yField = _c === void 0 ? 'y' : _c,
|
|
8442
|
+
_d = _a.valueField,
|
|
8443
|
+
valueField = _d === void 0 ? 'value' : _d;
|
|
8444
|
+
var xCategories = useDataTransform_spreadArray([], new Set((data.series || data.rows || []).map(function (d) {
|
|
8445
|
+
return String(d[xField]);
|
|
8446
|
+
})), true);
|
|
8447
|
+
var yCategories = useDataTransform_spreadArray([], new Set((data.series || data.rows || []).map(function (d) {
|
|
8448
|
+
return String(d[yField]);
|
|
8449
|
+
})), true);
|
|
8450
|
+
var seriesData = (data.series || data.rows || []).map(function (item) {
|
|
8451
|
+
var record = item;
|
|
8452
|
+
var xIndex = xCategories.indexOf(String(record[xField]));
|
|
8453
|
+
var yIndex = yCategories.indexOf(String(record[yField]));
|
|
8454
|
+
return [xIndex, yIndex, Number(record[valueField]) || 0];
|
|
8455
|
+
});
|
|
8456
|
+
return useDataTransform_assign({
|
|
8457
|
+
xAxis: {
|
|
8458
|
+
type: 'category',
|
|
8459
|
+
data: xCategories
|
|
8460
|
+
},
|
|
8461
|
+
yAxis: {
|
|
8462
|
+
type: 'category',
|
|
8463
|
+
data: yCategories
|
|
8464
|
+
},
|
|
8465
|
+
visualMap: {
|
|
8466
|
+
min: 0,
|
|
8467
|
+
calculable: true
|
|
8468
|
+
},
|
|
8469
|
+
series: [{
|
|
8470
|
+
type: 'heatmap',
|
|
8471
|
+
data: seriesData
|
|
8472
|
+
}]
|
|
8473
|
+
}, extraConfig);
|
|
8474
|
+
}
|
|
8475
|
+
function groupByTime(data, dateField, period) {
|
|
8476
|
+
return data.reduce(function (acc, item) {
|
|
8477
|
+
var date = new Date(String(item[dateField]));
|
|
8478
|
+
var key;
|
|
8479
|
+
switch (period) {
|
|
8480
|
+
case 'day':
|
|
8481
|
+
key = date.toISOString().split('T')[0];
|
|
8482
|
+
break;
|
|
8483
|
+
case 'week':
|
|
8484
|
+
{
|
|
8485
|
+
var week = getWeekNumber(date);
|
|
8486
|
+
key = "".concat(date.getFullYear(), "-W").concat(week);
|
|
8487
|
+
break;
|
|
8488
|
+
}
|
|
8489
|
+
case 'month':
|
|
8490
|
+
key = "".concat(date.getFullYear(), "-").concat(String(date.getMonth() + 1).padStart(2, '0'));
|
|
8491
|
+
break;
|
|
8492
|
+
case 'quarter':
|
|
8493
|
+
key = "".concat(date.getFullYear(), "-Q").concat(Math.ceil((date.getMonth() + 1) / 3));
|
|
8494
|
+
break;
|
|
8495
|
+
case 'year':
|
|
8496
|
+
key = String(date.getFullYear());
|
|
8497
|
+
break;
|
|
8498
|
+
default:
|
|
8499
|
+
key = date.toISOString().split('T')[0];
|
|
8500
|
+
}
|
|
8501
|
+
if (!acc[key]) acc[key] = [];
|
|
8502
|
+
acc[key].push(item);
|
|
8503
|
+
return acc;
|
|
8504
|
+
}, {});
|
|
8505
|
+
}
|
|
8506
|
+
function getWeekNumber(date) {
|
|
8507
|
+
var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
8508
|
+
var dayNum = d.getUTCDay() || 7;
|
|
8509
|
+
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
|
|
8510
|
+
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
|
|
8511
|
+
return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
|
|
8512
|
+
}
|
|
8513
|
+
function aggregateValues(items, field, method, fillMissing) {
|
|
8514
|
+
if (items.length === 0) {
|
|
8515
|
+
if (fillMissing === 'zero') return 0;
|
|
8516
|
+
return NaN;
|
|
8517
|
+
}
|
|
8518
|
+
var values = items.map(function (item) {
|
|
8519
|
+
return Number(item[field]) || 0;
|
|
8520
|
+
});
|
|
8521
|
+
switch (method) {
|
|
8522
|
+
case 'sum':
|
|
8523
|
+
{
|
|
8524
|
+
var sum = 0;
|
|
8525
|
+
for (var i = 0; i < values.length; i++) sum += values[i];
|
|
8526
|
+
return sum;
|
|
8527
|
+
}
|
|
8528
|
+
case 'average':
|
|
8529
|
+
{
|
|
8530
|
+
if (values.length === 0) return 0;
|
|
8531
|
+
var sum = 0;
|
|
8532
|
+
for (var i = 0; i < values.length; i++) sum += values[i];
|
|
8533
|
+
return sum / values.length;
|
|
8534
|
+
}
|
|
8535
|
+
case 'max':
|
|
8536
|
+
{
|
|
8537
|
+
var max = values[0];
|
|
8538
|
+
for (var i = 1; i < values.length; i++) if (values[i] > max) max = values[i];
|
|
8539
|
+
return max;
|
|
8540
|
+
}
|
|
8541
|
+
case 'min':
|
|
8542
|
+
{
|
|
8543
|
+
var min = values[0];
|
|
8544
|
+
for (var i = 1; i < values.length; i++) if (values[i] < min) min = values[i];
|
|
8545
|
+
return min;
|
|
8546
|
+
}
|
|
8547
|
+
case 'count':
|
|
8548
|
+
return values.length;
|
|
8549
|
+
case 'first':
|
|
8550
|
+
return values[0];
|
|
8551
|
+
case 'last':
|
|
8552
|
+
return values[values.length - 1];
|
|
8553
|
+
default:
|
|
8554
|
+
return values[0];
|
|
8555
|
+
}
|
|
8556
|
+
}
|
|
8557
|
+
// ============================================================================
|
|
8558
|
+
// 导出
|
|
8559
|
+
// ============================================================================
|
|
8560
|
+
var useTransform = (/* unused pure expression or super */ null && (useDataTransform));
|
|
8561
|
+
/* harmony default export */ const hooks_useDataTransform = ({
|
|
8562
|
+
useDataTransform: useDataTransform,
|
|
8563
|
+
useTableTransform: useTableTransform,
|
|
8564
|
+
useTimeSeriesTransform: useTimeSeriesTransform
|
|
8565
|
+
});
|
|
8350
8566
|
;// ./src/hooks/index.ts
|
|
8351
8567
|
var hooks_awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
8352
8568
|
function adopt(value) {
|
|
@@ -8474,6 +8690,7 @@ var hooks_spreadArray = undefined && undefined.__spreadArray || function (to, fr
|
|
|
8474
8690
|
*/
|
|
8475
8691
|
|
|
8476
8692
|
|
|
8693
|
+
|
|
8477
8694
|
// ============================================================================
|
|
8478
8695
|
// Hooks
|
|
8479
8696
|
// ============================================================================
|
|
@@ -8484,6 +8701,7 @@ var hooks_spreadArray = undefined && undefined.__spreadArray || function (to, fr
|
|
|
8484
8701
|
* @returns [图表实例, 设置实例函数, 是否已初始化]
|
|
8485
8702
|
*/
|
|
8486
8703
|
function useChart(chartRef, config) {
|
|
8704
|
+
var _this = this;
|
|
8487
8705
|
var _a = (0,external_react_.useState)(null),
|
|
8488
8706
|
instance = _a[0],
|
|
8489
8707
|
setInstance = _a[1];
|
|
@@ -8496,14 +8714,31 @@ function useChart(chartRef, config) {
|
|
|
8496
8714
|
if (!chartRef.current || instance) {
|
|
8497
8715
|
return;
|
|
8498
8716
|
}
|
|
8499
|
-
|
|
8500
|
-
|
|
8501
|
-
|
|
8502
|
-
|
|
8503
|
-
|
|
8504
|
-
|
|
8505
|
-
|
|
8506
|
-
|
|
8717
|
+
var initAdapter = function () {
|
|
8718
|
+
return hooks_awaiter(_this, void 0, void 0, function () {
|
|
8719
|
+
var adapter, chartInstance, error_1;
|
|
8720
|
+
return hooks_generator(this, function (_a) {
|
|
8721
|
+
switch (_a.label) {
|
|
8722
|
+
case 0:
|
|
8723
|
+
_a.trys.push([0, 2,, 3]);
|
|
8724
|
+
return [4 /*yield*/, (0,adapters/* getAdapter */.cK)(configRef.current || {})];
|
|
8725
|
+
case 1:
|
|
8726
|
+
adapter = _a.sent();
|
|
8727
|
+
chartInstance = adapter;
|
|
8728
|
+
setInstance(chartInstance);
|
|
8729
|
+
setInitialized(true);
|
|
8730
|
+
return [3 /*break*/, 3];
|
|
8731
|
+
case 2:
|
|
8732
|
+
error_1 = _a.sent();
|
|
8733
|
+
console.error('Failed to initialize chart:', error_1);
|
|
8734
|
+
return [3 /*break*/, 3];
|
|
8735
|
+
case 3:
|
|
8736
|
+
return [2 /*return*/];
|
|
8737
|
+
}
|
|
8738
|
+
});
|
|
8739
|
+
});
|
|
8740
|
+
};
|
|
8741
|
+
initAdapter();
|
|
8507
8742
|
return function () {
|
|
8508
8743
|
var _a;
|
|
8509
8744
|
if (instance) {
|
|
@@ -8673,9 +8908,9 @@ function useChartTheme(theme, darkMode) {
|
|
|
8673
8908
|
}
|
|
8674
8909
|
return (0,external_react_.useMemo)(function () {
|
|
8675
8910
|
if (typeof theme === 'string') {
|
|
8676
|
-
//
|
|
8911
|
+
// 如果是字符串,尝试获取内置主题配置
|
|
8677
8912
|
try {
|
|
8678
|
-
var builtinTheme =
|
|
8913
|
+
var builtinTheme = getThemeByName(theme);
|
|
8679
8914
|
return builtinTheme || (darkMode ? 'dark' : theme);
|
|
8680
8915
|
} catch (_a) {
|
|
8681
8916
|
return darkMode ? 'dark' : theme;
|
|
@@ -8810,37 +9045,49 @@ function useDataPolling(fetchFn, options) {
|
|
|
8810
9045
|
var _h = (0,external_react_.useState)(null),
|
|
8811
9046
|
error = _h[0],
|
|
8812
9047
|
setError = _h[1];
|
|
8813
|
-
|
|
8814
|
-
|
|
8815
|
-
|
|
9048
|
+
// 用于取消进行中的请求
|
|
9049
|
+
var abortRef = (0,external_react_.useRef)({
|
|
9050
|
+
cancelled: false
|
|
9051
|
+
});
|
|
8816
9052
|
var fetchData = (0,external_react_.useCallback)(function () {
|
|
8817
9053
|
return hooks_awaiter(_this, void 0, void 0, function () {
|
|
8818
|
-
var retries, result, e_1;
|
|
9054
|
+
var currentAbort, retries, result, e_1, result, e_2;
|
|
8819
9055
|
return hooks_generator(this, function (_a) {
|
|
8820
9056
|
switch (_a.label) {
|
|
8821
9057
|
case 0:
|
|
9058
|
+
// 取消之前的请求
|
|
9059
|
+
abortRef.current.cancelled = true;
|
|
9060
|
+
// 创建新的取消标记
|
|
9061
|
+
abortRef.current = {
|
|
9062
|
+
cancelled: false
|
|
9063
|
+
};
|
|
9064
|
+
currentAbort = abortRef.current;
|
|
8822
9065
|
retries = retryCount;
|
|
8823
9066
|
setLoading(true);
|
|
8824
9067
|
setError(null);
|
|
8825
9068
|
_a.label = 1;
|
|
8826
9069
|
case 1:
|
|
8827
|
-
if (!(retries
|
|
9070
|
+
if (!(retries > 0 && !currentAbort.cancelled)) return [3 /*break*/, 9];
|
|
8828
9071
|
_a.label = 2;
|
|
8829
9072
|
case 2:
|
|
8830
9073
|
_a.trys.push([2, 4,, 8]);
|
|
8831
9074
|
return [4 /*yield*/, fetchFn()];
|
|
8832
9075
|
case 3:
|
|
8833
9076
|
result = _a.sent();
|
|
8834
|
-
|
|
8835
|
-
|
|
9077
|
+
if (!currentAbort.cancelled) {
|
|
9078
|
+
setData(result);
|
|
9079
|
+
setLoading(false);
|
|
9080
|
+
}
|
|
8836
9081
|
return [2 /*return*/];
|
|
8837
9082
|
case 4:
|
|
8838
9083
|
e_1 = _a.sent();
|
|
8839
9084
|
retries--;
|
|
8840
|
-
if (!(retries
|
|
8841
|
-
|
|
9085
|
+
if (!(retries <= 0 || currentAbort.cancelled)) return [3 /*break*/, 5];
|
|
9086
|
+
if (!currentAbort.cancelled) {
|
|
9087
|
+
setError(e_1);
|
|
9088
|
+
}
|
|
8842
9089
|
setLoading(false);
|
|
8843
|
-
return [
|
|
9090
|
+
return [2 /*return*/];
|
|
8844
9091
|
case 5:
|
|
8845
9092
|
return [4 /*yield*/, new Promise(function (resolve) {
|
|
8846
9093
|
return setTimeout(resolve, retryDelay);
|
|
@@ -8853,6 +9100,33 @@ function useDataPolling(fetchFn, options) {
|
|
|
8853
9100
|
case 8:
|
|
8854
9101
|
return [3 /*break*/, 1];
|
|
8855
9102
|
case 9:
|
|
9103
|
+
if (!(retryCount <= 0 && !currentAbort.cancelled)) return [3 /*break*/, 14];
|
|
9104
|
+
_a.label = 10;
|
|
9105
|
+
case 10:
|
|
9106
|
+
_a.trys.push([10, 12,, 13]);
|
|
9107
|
+
return [4 /*yield*/, fetchFn()];
|
|
9108
|
+
case 11:
|
|
9109
|
+
result = _a.sent();
|
|
9110
|
+
if (!currentAbort.cancelled) {
|
|
9111
|
+
setData(result);
|
|
9112
|
+
setLoading(false);
|
|
9113
|
+
}
|
|
9114
|
+
return [3 /*break*/, 13];
|
|
9115
|
+
case 12:
|
|
9116
|
+
e_2 = _a.sent();
|
|
9117
|
+
if (!currentAbort.cancelled) {
|
|
9118
|
+
setError(e_2);
|
|
9119
|
+
setLoading(false);
|
|
9120
|
+
}
|
|
9121
|
+
return [3 /*break*/, 13];
|
|
9122
|
+
case 13:
|
|
9123
|
+
return [2 /*return*/];
|
|
9124
|
+
case 14:
|
|
9125
|
+
// All retries exhausted without success (caught in loop already handled above)
|
|
9126
|
+
if (!currentAbort.cancelled) {
|
|
9127
|
+
setError(new Error('All retries failed'));
|
|
9128
|
+
setLoading(false);
|
|
9129
|
+
}
|
|
8856
9130
|
return [2 /*return*/];
|
|
8857
9131
|
}
|
|
8858
9132
|
});
|
|
@@ -8865,14 +9139,15 @@ function useDataPolling(fetchFn, options) {
|
|
|
8865
9139
|
if (interval > 0) {
|
|
8866
9140
|
var timer_1 = setInterval(fetchData, interval);
|
|
8867
9141
|
return function () {
|
|
8868
|
-
|
|
9142
|
+
clearInterval(timer_1);
|
|
9143
|
+
abortRef.current.cancelled = true;
|
|
8869
9144
|
};
|
|
8870
9145
|
}
|
|
8871
|
-
|
|
9146
|
+
return function () {
|
|
9147
|
+
abortRef.current.cancelled = true;
|
|
9148
|
+
};
|
|
9149
|
+
}, [interval, autoStart, fetchData]);
|
|
8872
9150
|
var refresh = (0,external_react_.useCallback)(function () {
|
|
8873
|
-
setRefreshIndex(function (prev) {
|
|
8874
|
-
return prev + 1;
|
|
8875
|
-
});
|
|
8876
9151
|
fetchData();
|
|
8877
9152
|
}, [fetchData]);
|
|
8878
9153
|
return {
|
|
@@ -9012,8 +9287,10 @@ function useChartTools(instance) {
|
|
|
9012
9287
|
// ============================================================================
|
|
9013
9288
|
// 导出
|
|
9014
9289
|
// ============================================================================
|
|
9015
|
-
var version = '1.
|
|
9016
|
-
|
|
9290
|
+
var version = '1.4.0';
|
|
9291
|
+
// 新增数据转换 hooks
|
|
9292
|
+
|
|
9293
|
+
/* harmony default export */ const hooks = ({
|
|
9017
9294
|
useChart: useChart,
|
|
9018
9295
|
useOption: useOption,
|
|
9019
9296
|
useResize: useResize,
|
|
@@ -9027,8 +9304,7 @@ var hooks = {
|
|
|
9027
9304
|
useFullscreen: useFullscreen,
|
|
9028
9305
|
useExport: useExport,
|
|
9029
9306
|
useChartTools: useChartTools
|
|
9030
|
-
};
|
|
9031
|
-
/* harmony default export */ const src_hooks = ((/* unused pure expression or super */ null && (hooks)));
|
|
9307
|
+
});
|
|
9032
9308
|
;// ./src/index.ts
|
|
9033
9309
|
/**
|
|
9034
9310
|
* TaroViz - 基于 Taro 和 ECharts 的多端图表组件库
|
|
@@ -9050,6 +9326,10 @@ var hooks = {
|
|
|
9050
9326
|
|
|
9051
9327
|
|
|
9052
9328
|
|
|
9329
|
+
// 新增图表组件
|
|
9330
|
+
|
|
9331
|
+
|
|
9332
|
+
|
|
9053
9333
|
// 适配器
|
|
9054
9334
|
|
|
9055
9335
|
|
|
@@ -9073,12 +9353,12 @@ var hooks = {
|
|
|
9073
9353
|
* 库信息
|
|
9074
9354
|
*/
|
|
9075
9355
|
var src_name = 'taroviz';
|
|
9076
|
-
var src_version = '1.
|
|
9077
|
-
export { AnnotationPresets, components_BaseChart as BaseChart, ErrorBoundary, LazyChartRegistry, PRESET_THEMES, editor_ThemeEditor as ThemeEditor, convertAnnotationToMarkArea, convertAnnotationToMarkLine, convertAnnotationToScatter, createCompositeAnnotation, createLazyChart, darkTheme, defaultTheme, exportChart, getDarkThemes, getLightThemes, getRegisteredThemes,
|
|
9356
|
+
var src_version = '1.4.0';
|
|
9357
|
+
export { AnnotationPresets, components_BaseChart as BaseChart, candlestick as CandlestickChart, ErrorBoundary, graph as GraphChart, LazyChartRegistry, PRESET_THEMES, editor_ThemeEditor as ThemeEditor, wordcloud as WordCloudChart, convertAnnotationToMarkArea, convertAnnotationToMarkLine, convertAnnotationToScatter, createCompositeAnnotation, createLazyChart, darkTheme, defaultTheme, exportChart, getDarkThemes, getLightThemes, getRegisteredThemes, getTheme, getThemeByName, getThemesByTag, src_name as name, preloadAllCharts, preloadChart, registerTheme, switchTheme, themeManager, useAnnotation, useChart, useChartData, useChartTheme, useChartTools, useDataPolling, useDataTransform, useEvents, useExport, useFullscreen, useLoading, useOption, useResize, useResponsive, useTableTransform, useThemeSwitcher, useTimeSeriesTransform, src_version as version, withErrorBoundary, withLazyLoad };
|
|
9078
9358
|
export const BarChart = bar["default"];
|
|
9079
9359
|
export const FunnelChart = funnel["default"];
|
|
9080
9360
|
export const GaugeChart = gauge["default"];
|
|
9081
|
-
export const H5Adapter = h5
|
|
9361
|
+
export const H5Adapter = h5["default"];
|
|
9082
9362
|
export const HeatmapChart = heatmap["default"];
|
|
9083
9363
|
export const LineChart = line["default"];
|
|
9084
9364
|
export const PieChart = pie["default"];
|
|
@@ -9087,7 +9367,7 @@ export const SankeyChart = sankey["default"];
|
|
|
9087
9367
|
export const ScatterChart = scatter["default"];
|
|
9088
9368
|
export const SunburstChart = sunburst["default"];
|
|
9089
9369
|
export const TreeMapChart = treemap["default"];
|
|
9090
|
-
export const WeappAdapter = weapp
|
|
9370
|
+
export const WeappAdapter = weapp["default"];
|
|
9091
9371
|
export const debounce = utils/* debounce */.sg;
|
|
9092
9372
|
export const deepMerge = utils/* deepMerge */.$N;
|
|
9093
9373
|
export const detectPlatform = adapters/* detectPlatform */.li;
|