stz-chart-maker 1.0.4 → 1.0.5
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/dist/index.js +1 -2179
- package/package.json +1 -1
- package/dist/chart-toolbox.min.js +0 -1
- package/dist/index.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,2179 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ═════════════════════════════════════════════════════════════
|
|
3
|
-
* 📄 FILE : Logger.ts
|
|
4
|
-
* 📁 PACKAGE : chartjs-toolbox-
|
|
5
|
-
* 👤 AUTHOR : stz
|
|
6
|
-
* 🕒 CREATED : 25. 7. 18.
|
|
7
|
-
* ═════════════════════════════════════════════════════════════
|
|
8
|
-
* ═════════════════════════════════════════════════════════════
|
|
9
|
-
* 📝 DESCRIPTION
|
|
10
|
-
* -
|
|
11
|
-
* ═════════════════════════════════════════════════════════════
|
|
12
|
-
* ═════════════════════════════════════════════════════════════
|
|
13
|
-
* 🔄 CHANGE LOG
|
|
14
|
-
* - DATE : 2025/07/18 | Author : stz | 최초 생성
|
|
15
|
-
* ═════════════════════════════════════════════════════════════
|
|
16
|
-
*/
|
|
17
|
-
/** ■■■■■■■■■■■■■■■■ GLOBAL Logging contr ■■■■■■■■■■■■■■■■*/
|
|
18
|
-
const LoggerConfig = {
|
|
19
|
-
errorLogging: true,
|
|
20
|
-
debugLogging: true,
|
|
21
|
-
};
|
|
22
|
-
/** ■■■■■■■■■■■■■■■■ Apple System Default Color ■■■■■■■■■■■■■■■■*/
|
|
23
|
-
const CHART_COLOR = [
|
|
24
|
-
'#FF3B30', // System Red
|
|
25
|
-
'#FF9500', // System Orange
|
|
26
|
-
'#FFCC00', // System Yellow
|
|
27
|
-
'#34C759', // System Green
|
|
28
|
-
'#00C7BE', // System Mint
|
|
29
|
-
'#30B0C7', // System Teal
|
|
30
|
-
'#32ADE6', // System Cyan
|
|
31
|
-
'#007AFF', // System Blue
|
|
32
|
-
'#5856D6', // System Indigo
|
|
33
|
-
'#AF52DE', // System Purple
|
|
34
|
-
];
|
|
35
|
-
const originalConsoleLog = console.log;
|
|
36
|
-
console.log = (...args) => {
|
|
37
|
-
if (LoggerConfig.debugLogging) {
|
|
38
|
-
originalConsoleLog.apply(console, args);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
var ErrorMsg;
|
|
43
|
-
(function (ErrorMsg) {
|
|
44
|
-
// 공통 에러
|
|
45
|
-
ErrorMsg["CHART_TYPE_REQUIRED"] = "Chart type is required.";
|
|
46
|
-
ErrorMsg["INVALID_CHART_TYPE"] = "Invalid chart type. Supported types are bar, line, scatter, bubble, etc.";
|
|
47
|
-
ErrorMsg["DATASET_REQUIRED"] = "Datasets cannot be empty.";
|
|
48
|
-
ErrorMsg["NOT_SUPPORTED_OPTION"] = "It does not support that option.";
|
|
49
|
-
ErrorMsg["LABELS_REQUIRED"] = "Labels cannot be empty.";
|
|
50
|
-
ErrorMsg["OPTIONS_REQUIRED"] = "Options cannot be null or undefined.";
|
|
51
|
-
ErrorMsg["NOT_REGISTERED_CHART_TYPE"] = "This chart type is not registered. Please call ChartWrapper.register().";
|
|
52
|
-
// 데이터 관련 에러
|
|
53
|
-
ErrorMsg["EMPTY_REQUIRED_PROPERTY"] = "A required property is missing in the dataset or options.";
|
|
54
|
-
ErrorMsg["INVALID_DATA_STRUCTURE"] = "Invalid data structure. Please check the dataset or labels format.";
|
|
55
|
-
ErrorMsg["AXIS_KEY_REQUIRED"] = "xAxisKey or yAxisKey is required for parsing.";
|
|
56
|
-
ErrorMsg["DATA_LENGTH_MISMATCH"] = "Labels length does not match datasets data length.";
|
|
57
|
-
ErrorMsg["IMAGE_PROPERTY_MISSING"] = "Image property is missing in the dataset. Please provide a valid image URL.";
|
|
58
|
-
// 플러그인 관련 에러
|
|
59
|
-
ErrorMsg["PLUGIN_NOT_FOUND"] = "Plugin not found in options.plugins.";
|
|
60
|
-
ErrorMsg["PLUGIN_ALREADY_EXISTS"] = "Plugin already exists. Use setPlugin() to override.";
|
|
61
|
-
ErrorMsg["PLUGIN_REMOVE_FAILED"] = "Cannot remove a non-existing plugin.";
|
|
62
|
-
// Chart 인스턴스 관련 에러
|
|
63
|
-
ErrorMsg["CHART_INSTANCE_NOT_FOUND"] = "Chart instance is not initialized.";
|
|
64
|
-
ErrorMsg["CHART_ALREADY_INITIALIZED"] = "Chart instance is already initialized.";
|
|
65
|
-
// BarChart 전용 에러
|
|
66
|
-
ErrorMsg["INVALID_BAR_THICKNESS"] = "Bar thickness must be a positive number.";
|
|
67
|
-
ErrorMsg["INVALID_BAR_PERCENTAGE"] = "Bar percentage must be between 0 and 1.";
|
|
68
|
-
ErrorMsg["INVALID_CATEGORY_PERCENTAGE"] = "Category percentage must be between 0 and 1.";
|
|
69
|
-
// 기타
|
|
70
|
-
ErrorMsg["UNKNOWN_ERROR"] = "An unknown error has occurred.";
|
|
71
|
-
//스케일 관련 에러
|
|
72
|
-
ErrorMsg["INVALID_AXIS_KEY"] = "Invalid axis key provided. Please check the axis configuration.";
|
|
73
|
-
})(ErrorMsg || (ErrorMsg = {}));
|
|
74
|
-
var ErrorCode;
|
|
75
|
-
(function (ErrorCode) {
|
|
76
|
-
// 공통 (1200)
|
|
77
|
-
ErrorCode[ErrorCode["CHART_TYPE_REQUIRED"] = 1200] = "CHART_TYPE_REQUIRED";
|
|
78
|
-
ErrorCode[ErrorCode["INVALID_CHART_TYPE"] = 1201] = "INVALID_CHART_TYPE";
|
|
79
|
-
ErrorCode[ErrorCode["OPTIONS_REQUIRED"] = 1202] = "OPTIONS_REQUIRED";
|
|
80
|
-
ErrorCode[ErrorCode["NOT_REGISTERED_CHART_TYPE"] = 1203] = "NOT_REGISTERED_CHART_TYPE";
|
|
81
|
-
// 데이터 관련 (2200)
|
|
82
|
-
ErrorCode[ErrorCode["DATASET_REQUIRED"] = 2200] = "DATASET_REQUIRED";
|
|
83
|
-
ErrorCode[ErrorCode["LABELS_REQUIRED"] = 2211] = "LABELS_REQUIRED";
|
|
84
|
-
ErrorCode[ErrorCode["EMPTY_REQUIRED_PROPERTY"] = 2212] = "EMPTY_REQUIRED_PROPERTY";
|
|
85
|
-
ErrorCode[ErrorCode["INVALID_DATA_STRUCTURE"] = 2213] = "INVALID_DATA_STRUCTURE";
|
|
86
|
-
ErrorCode[ErrorCode["AXIS_KEY_REQUIRED"] = 2214] = "AXIS_KEY_REQUIRED";
|
|
87
|
-
ErrorCode[ErrorCode["DATA_LENGTH_MISMATCH"] = 2215] = "DATA_LENGTH_MISMATCH";
|
|
88
|
-
ErrorCode[ErrorCode["NOT_SUPPORTED_OPTION"] = 2216] = "NOT_SUPPORTED_OPTION";
|
|
89
|
-
ErrorCode[ErrorCode["IMAGE_PROPERTY_MISSING"] = 2217] = "IMAGE_PROPERTY_MISSING";
|
|
90
|
-
// 플러그인 관련 (3220)
|
|
91
|
-
ErrorCode[ErrorCode["PLUGIN_NOT_FOUND"] = 3220] = "PLUGIN_NOT_FOUND";
|
|
92
|
-
ErrorCode[ErrorCode["PLUGIN_ALREADY_EXISTS"] = 3221] = "PLUGIN_ALREADY_EXISTS";
|
|
93
|
-
ErrorCode[ErrorCode["PLUGIN_REMOVE_FAILED"] = 3222] = "PLUGIN_REMOVE_FAILED";
|
|
94
|
-
// 인스턴스 관련 (4230)
|
|
95
|
-
ErrorCode[ErrorCode["CHART_INSTANCE_NOT_FOUND"] = 4230] = "CHART_INSTANCE_NOT_FOUND";
|
|
96
|
-
ErrorCode[ErrorCode["CHART_ALREADY_INITIALIZED"] = 4231] = "CHART_ALREADY_INITIALIZED";
|
|
97
|
-
// 기타 (5240)
|
|
98
|
-
ErrorCode[ErrorCode["INVALID_BAR_THICKNESS"] = 5240] = "INVALID_BAR_THICKNESS";
|
|
99
|
-
ErrorCode[ErrorCode["INVALID_BAR_PERCENTAGE"] = 5241] = "INVALID_BAR_PERCENTAGE";
|
|
100
|
-
ErrorCode[ErrorCode["INVALID_CATEGORY_PERCENTAGE"] = 5242] = "INVALID_CATEGORY_PERCENTAGE";
|
|
101
|
-
ErrorCode[ErrorCode["UNKNOWN_ERROR"] = 5249] = "UNKNOWN_ERROR";
|
|
102
|
-
// 스케일 관련 (6250)
|
|
103
|
-
ErrorCode[ErrorCode["INVALID_AXIS_KEY"] = 6250] = "INVALID_AXIS_KEY";
|
|
104
|
-
})(ErrorCode || (ErrorCode = {}));
|
|
105
|
-
const ErrorMessage = {
|
|
106
|
-
// 공통
|
|
107
|
-
[ErrorCode.CHART_TYPE_REQUIRED]: ErrorMsg.CHART_TYPE_REQUIRED,
|
|
108
|
-
[ErrorCode.INVALID_CHART_TYPE]: ErrorMsg.INVALID_CHART_TYPE,
|
|
109
|
-
[ErrorCode.OPTIONS_REQUIRED]: ErrorMsg.OPTIONS_REQUIRED,
|
|
110
|
-
[ErrorCode.NOT_REGISTERED_CHART_TYPE]: ErrorMsg.NOT_REGISTERED_CHART_TYPE,
|
|
111
|
-
// 데이터 관련
|
|
112
|
-
[ErrorCode.DATASET_REQUIRED]: ErrorMsg.DATASET_REQUIRED,
|
|
113
|
-
[ErrorCode.LABELS_REQUIRED]: ErrorMsg.LABELS_REQUIRED,
|
|
114
|
-
[ErrorCode.EMPTY_REQUIRED_PROPERTY]: ErrorMsg.EMPTY_REQUIRED_PROPERTY,
|
|
115
|
-
[ErrorCode.INVALID_DATA_STRUCTURE]: ErrorMsg.INVALID_DATA_STRUCTURE,
|
|
116
|
-
[ErrorCode.AXIS_KEY_REQUIRED]: ErrorMsg.AXIS_KEY_REQUIRED,
|
|
117
|
-
[ErrorCode.DATA_LENGTH_MISMATCH]: ErrorMsg.DATA_LENGTH_MISMATCH,
|
|
118
|
-
[ErrorCode.NOT_SUPPORTED_OPTION]: ErrorMsg.NOT_SUPPORTED_OPTION,
|
|
119
|
-
// 플러그인 관련
|
|
120
|
-
[ErrorCode.PLUGIN_NOT_FOUND]: ErrorMsg.PLUGIN_NOT_FOUND,
|
|
121
|
-
[ErrorCode.PLUGIN_ALREADY_EXISTS]: ErrorMsg.PLUGIN_ALREADY_EXISTS,
|
|
122
|
-
[ErrorCode.PLUGIN_REMOVE_FAILED]: ErrorMsg.PLUGIN_REMOVE_FAILED,
|
|
123
|
-
// 인스턴스 관련
|
|
124
|
-
[ErrorCode.CHART_INSTANCE_NOT_FOUND]: ErrorMsg.CHART_INSTANCE_NOT_FOUND,
|
|
125
|
-
[ErrorCode.CHART_ALREADY_INITIALIZED]: ErrorMsg.CHART_ALREADY_INITIALIZED,
|
|
126
|
-
// 기타
|
|
127
|
-
[ErrorCode.INVALID_BAR_THICKNESS]: ErrorMsg.INVALID_BAR_THICKNESS,
|
|
128
|
-
[ErrorCode.INVALID_BAR_PERCENTAGE]: ErrorMsg.INVALID_BAR_PERCENTAGE,
|
|
129
|
-
[ErrorCode.INVALID_CATEGORY_PERCENTAGE]: ErrorMsg.INVALID_CATEGORY_PERCENTAGE,
|
|
130
|
-
[ErrorCode.UNKNOWN_ERROR]: ErrorMsg.UNKNOWN_ERROR,
|
|
131
|
-
[ErrorCode.IMAGE_PROPERTY_MISSING]: ErrorMsg.IMAGE_PROPERTY_MISSING,
|
|
132
|
-
// 스케일 관련
|
|
133
|
-
[ErrorCode.INVALID_AXIS_KEY]: ErrorMsg.INVALID_AXIS_KEY,
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
class CustomError extends Error {
|
|
137
|
-
code;
|
|
138
|
-
detail;
|
|
139
|
-
constructor(code, detail) {
|
|
140
|
-
const ErrMsg = detail ? `${ErrorMessage[code]} - ${detail}` : ErrorMessage[code];
|
|
141
|
-
super(ErrMsg);
|
|
142
|
-
this.code = code;
|
|
143
|
-
this.detail = detail;
|
|
144
|
-
this.name = 'CustomError';
|
|
145
|
-
if (LoggerConfig.errorLogging) {
|
|
146
|
-
const codeStyle = 'color: green; font-weight: bold;';
|
|
147
|
-
const messageStyle = 'color: orange;';
|
|
148
|
-
console.error(`%c[${code}] %c${ErrMsg}`, codeStyle, messageStyle);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
class ChartWrapper {
|
|
154
|
-
type;
|
|
155
|
-
labels;
|
|
156
|
-
datasets;
|
|
157
|
-
options;
|
|
158
|
-
plugins;
|
|
159
|
-
static registry = new Map();
|
|
160
|
-
constructor(type, labels, datasets, options, plugins) {
|
|
161
|
-
this.type = type;
|
|
162
|
-
this.labels = labels;
|
|
163
|
-
this.datasets = datasets;
|
|
164
|
-
this.options = options;
|
|
165
|
-
this.plugins = plugins;
|
|
166
|
-
}
|
|
167
|
-
//TODO : factory pattern dynamic method for maintenance sex sex big ass doggy styleQWA?. MN
|
|
168
|
-
static create(type, labels, datasets, options, plugins) {
|
|
169
|
-
const WrapperClass = this.registry.get(type);
|
|
170
|
-
if (!WrapperClass) {
|
|
171
|
-
throw new CustomError(ErrorCode.NOT_REGISTERED_CHART_TYPE, `type=${type}`);
|
|
172
|
-
}
|
|
173
|
-
return new WrapperClass(type, labels, datasets, options, plugins);
|
|
174
|
-
}
|
|
175
|
-
static register(type, wrapperClass) {
|
|
176
|
-
this.registry.set(type, wrapperClass);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* 플러그인을 추가합니다.
|
|
180
|
-
* @param plugin
|
|
181
|
-
* @param replaceIfExists
|
|
182
|
-
*
|
|
183
|
-
*/
|
|
184
|
-
setPlugin(plugin, replaceIfExists = true) {
|
|
185
|
-
if (!this.plugins) {
|
|
186
|
-
this.plugins = [];
|
|
187
|
-
}
|
|
188
|
-
if (plugin.id && replaceIfExists) {
|
|
189
|
-
const existingIndex = this.plugins.findIndex((p) => p.id === plugin.id);
|
|
190
|
-
if (existingIndex !== -1) {
|
|
191
|
-
this.plugins[existingIndex] = plugin;
|
|
192
|
-
return this;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
this.plugins.push(plugin);
|
|
196
|
-
return this;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* 차트 설정 객체를 생성합니다.
|
|
200
|
-
* @param {string} id
|
|
201
|
-
* @returns {ChartConfig}
|
|
202
|
-
* @Description 레거시 지원용
|
|
203
|
-
*/
|
|
204
|
-
makeConfig(id) {
|
|
205
|
-
return this.build(id);
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* 플러그인을 제거합니다.
|
|
209
|
-
* @param pluginId
|
|
210
|
-
*/
|
|
211
|
-
removePlugin(pluginId) {
|
|
212
|
-
if (!this.plugins || !Array.isArray(this.plugins)) {
|
|
213
|
-
return this;
|
|
214
|
-
}
|
|
215
|
-
this.plugins.length;
|
|
216
|
-
this.plugins = this.plugins.filter((p) => p.id !== pluginId);
|
|
217
|
-
return this;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* 플러그인이 존재하는지 확인합니다.
|
|
221
|
-
* @param pluginId
|
|
222
|
-
*/
|
|
223
|
-
hasPlugin(pluginId) {
|
|
224
|
-
if (!this.plugins || !Array.isArray(this.plugins)) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
return this.plugins.some((p) => p.id === pluginId);
|
|
228
|
-
}
|
|
229
|
-
build(id) {
|
|
230
|
-
this.normalize();
|
|
231
|
-
const chartId = id || `${this.type}_${Math.random()}`;
|
|
232
|
-
const config = {
|
|
233
|
-
_chartId: chartId,
|
|
234
|
-
type: this.type,
|
|
235
|
-
data: { labels: this.labels, datasets: this.datasets },
|
|
236
|
-
options: { ...this.options, _chartId: chartId },
|
|
237
|
-
plugins: this.plugins,
|
|
238
|
-
};
|
|
239
|
-
return this.configAop(config);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function a0_0x4af2(_0x4297ef,_0x3c4d84){const _0x5eed3d=a0_0x5eed();return a0_0x4af2=function(_0x4af297,_0x1d0aaf){_0x4af297=_0x4af297-0x195;let _0x2ac4f5=_0x5eed3d[_0x4af297];if(a0_0x4af2['cnrCGs']===undefined){var _0x2f632c=function(_0x4e29ba){const _0x3cc3f0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x19591f='',_0x2d1ac1='';for(let _0x3bddd5=0x0,_0x2b03c7,_0x34d1c4,_0xa8194c=0x0;_0x34d1c4=_0x4e29ba['charAt'](_0xa8194c++);~_0x34d1c4&&(_0x2b03c7=_0x3bddd5%0x4?_0x2b03c7*0x40+_0x34d1c4:_0x34d1c4,_0x3bddd5++%0x4)?_0x19591f+=String['fromCharCode'](0xff&_0x2b03c7>>(-2*_0x3bddd5&0x6)):0x0){_0x34d1c4=_0x3cc3f0['indexOf'](_0x34d1c4);}for(let _0x2672da=0x0,_0x5a9dfe=_0x19591f['length'];_0x2672da<_0x5a9dfe;_0x2672da++){_0x2d1ac1+='%'+('00'+_0x19591f['charCodeAt'](_0x2672da)['toString'](0x10))['slice'](-2);}return decodeURIComponent(_0x2d1ac1);};a0_0x4af2['sZUXQc']=_0x2f632c,_0x4297ef=arguments,a0_0x4af2['cnrCGs']=!![];}const _0x4ea7a7=_0x5eed3d[0x0],_0x399fa1=_0x4af297+_0x4ea7a7,_0x1caf89=_0x4297ef[_0x399fa1];return !_0x1caf89?(_0x2ac4f5=a0_0x4af2['sZUXQc'](_0x2ac4f5),_0x4297ef[_0x399fa1]=_0x2ac4f5):_0x2ac4f5=_0x1caf89,_0x2ac4f5;},a0_0x4af2(_0x4297ef,_0x3c4d84);}function a0_0x5eed(){const _0x4c3bf0=['rxPzCwq','BwfW','AuHMCLK','Dg9mB2nHBgvtDhjPBMC','mJy3odKXnLviDvvpyW','DMPiAKO','yxbWzw5Kq2HPBgq','zxjYB3i','Bg9N','rfLQquu','tNvSBa','cGRIOidIOidIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOzxIOyxIOidIOPdIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOPxIOidIOiak4Qgh4Qgh4Qgh4Qgh4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qkh4Qkh4Qkp4Qko4Qko4Qcg4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4QkO4QkQ4QkQ4QgQ4Qgc4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4QkQ4QkQ4QkQ4QcgcUkHH+kHH+kGGokGGokGGokGQokHQUkHQUkHQUkHJUkHRUkGGokGGokGGokIGokIH+kIH+kIH+kIH+kIH+kIL+kILEkGHokGGokGGokGGokHH+kJH+kIH+kIH+kIH+kIH+kIH+kIH+kIH+kIH+kIL+kILEkILEkILEkIHEkGGokGGokGGokGGokGGokIQUkIQUkIQUkHGWRIOyFIOyFIOydIOidIOidIOkJIOARIOBRIOBJIOBJIOBJIOBhIOO3IOOFIOOFIOOFIOQFIOQpIOipIOidIOQJIOQRIOidIOidIOidIOidIOyFIOyFIOyFIOAFIOzpIOzxIORxIOidIOidIOPZIOPZIOPZIOOZIOidIOidIOidIOidIOidIOQJIOQpIORpIORhIORhIOOuk4Qgo4Qgo4Qgo4Qgh4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4QgJ4QgJ4QgZ4QgX4QgX4Qgb4Qca4QkO4QkQ4Qca4Qca4Qca4Qca4Qgh4Qgh4Qgh4Qgh4Qca4Qca4Qca4Qg44Qg54Qg44Qg44Qca4Qca4Qca4Qca4Qca4QkO4Qk54Qk44Qg44QkC4QkC4QkC4QcgcUkIH+kIH+kIH+kIH+kIJ+kIJUkIH+kIJ+kIJUkIRUkIQUkGGokGGokGGokGGokHH+kHH+kHP+kHGEkGGokGUokHUokGGokGGokGGokGGokHH+kHH+kHH+kHH+kGGokGUokHUokHUokHUokGGokGGokGGokGGokGGokGOokHO+kHO+kHO+kHS+kHUokHSEkHSEkGGokGGaRIOOFIOOFIOidIOidIOidIOkJIOARIOARIOARIOARIOARIOidIOidIOidIOidIO4FIOOFIOQFIOihIOidIORJIORJIOidIOidIOidIOidIOyFIOyFIOyFIOyFIOidIORJIORJIOidIOidIOidIOidIOidIOidIOyFIOyFIOyFIOzFIOzxIOzxIOzxIO5xIOPxIOidIOiak4QkJ4QkJ4QkR4Qkk4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qga4QgD4QgC4QgC4QgC4QgC4Qcm4Qca4QkO4QkQ4Qca4Qca4Qca4Qca4Qgh4Qgh4Qgh4Qgh4Qca4QkW4QkX4Qcb4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qca4Qg44Qg44QgX4QgXcUkGGokGGokIH+kIH+kIH+kIJ+kIJUkIH+kIJ+kGRUkHUEkHUokHSokILEkILEkGTEkHSEkHUEkGKokGGokGQokHQUkHQUkHO+kHQ+kHQUkHQUkHQUkIJUkGHUkGGokIMokINokINokILEkINEkINokILEkINEkINokILEkINEkINokILEkINEkINokINokINokINokGRaRIOidIOidIOidIOidIOyFIOyFIOyFIOyFIOyFIOyFIO4FIOOFIOQFIOQpIOQpIOQVIOylIOidIOidIOidIOidIOidIOQRIOQRIOQRIOQRIOQRIOQRIOQpIOipIOidIOidIOidIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIORJIOzekcG','B21PDa','BKD6u2q','yM9KEq','A0LUs1O','ChjVDg90ExbL','w29IAMvJDcbpyMPLy3rD','Dgv4DenVBNrLBNq','y2HPBgrYzw4','zxzLCNK','AxnpyMPLy3q','oty4nte1B0TWEvD6','y29UC3rYDwn0B3i','t2jQzwn0','CMvKDwnL','C2vQCe0','C2XPy2u','DgfIBgvFzgf0ys5JC3y','AgfZ','uK9JAxq','DujQAwO','DMfSDwvZ','u3rYAw5N','zNjVBq','mJm2odmWngXpufHsva','AxriyNe','zM9YrwfJAa','zLHzqvi','uvHmBgy','Dg9tDhjPBMC','quzxz04','ChvZAa','BgvUz3rO','yLHKBMi','C2v0','C3rYAw5N','z2v0vhLWzq','mtq1mgLMqxbHAW','y3jLyxrLt2jQzwn0vvjm','CMvTB3zLq2HPBgq','qxjYyxK','z2v0','mtu1mZK2nMLIDgXoBW','zg93BMXVywq','y2XPy2S','B1zLwMi','s1jZv2O','odKYmZiYmNzJAMTKCq','mtq1nKfTEhnYzG','Aw5JBhvKzxm','x19WCM90B19F','DNfRze0','nLzhDK1xva','BwvYz2u','mti4n0jmtKrxqG','AgfZt3DUuhjVCgvYDhK','mwfRseXsDG','C3vIC3rYAw5N','y2fSBa','CxvLCNLtzwXLy3rVCKfSBa','twP6DMW','Bhj6DeC','q1PmAvG','DgGSihrK','y2XVBMvezwvW','mJm3odrwELfADhK','AurjAg0'];a0_0x5eed=function(){return _0x4c3bf0;};return a0_0x5eed();}const a0_0xd09b08=a0_0x4af2;(function(_0xaa0e9,_0x539ed9){const _0x351f8d=a0_0x4af2,_0x3c349f=_0xaa0e9();while(!![]){try{const _0x288d21=-parseInt(_0x351f8d(0x1d2))/0x1*(-parseInt(_0x351f8d(0x1c4))/0x2)+-parseInt(_0x351f8d(0x1e1))/0x3+-parseInt(_0x351f8d(0x1b2))/0x4+parseInt(_0x351f8d(0x1a5))/0x5*(-parseInt(_0x351f8d(0x1ce))/0x6)+-parseInt(_0x351f8d(0x1ca))/0x7*(-parseInt(_0x351f8d(0x1db))/0x8)+-parseInt(_0x351f8d(0x1d0))/0x9*(parseInt(_0x351f8d(0x1bf))/0xa)+parseInt(_0x351f8d(0x1c9))/0xb;if(_0x288d21===_0x539ed9)break;else _0x3c349f['push'](_0x3c349f['shift']());}catch(_0x2df080){_0x3c349f['push'](_0x3c349f['shift']());}}}(a0_0x5eed,0x7bccb));const stzUtil={'dateFormatTs':_0x85e1ea=>{const _0x288fee=a0_0x4af2;if(_0x85e1ea&&_0x85e1ea[_0x288fee(0x1cb)]('T')){let _0x134ad2=_0x85e1ea['split']('T');return _0x134ad2[0x0];}return _0x85e1ea;},'dateFormatDots':_0x32aa25=>{const _0x5e3afc=a0_0x4af2;let _0x193aac=_0x32aa25[_0x5e3afc(0x1d3)](0x0,0x4),_0x2a7e63=_0x32aa25['substring'](0x4,0x6),_0x3ac482=_0x32aa25['substring'](0x6,0x8);return _0x193aac+'.'+_0x2a7e63+'.'+_0x3ac482;},'dateFormatDash':_0x586b61=>{const _0xb1e10f=a0_0x4af2;let _0xcb3bd2=_0x586b61[_0xb1e10f(0x1d3)](0x0,0x4),_0x2ea8be=_0x586b61[_0xb1e10f(0x1d3)](0x4,0x6),_0x5cc03f=_0x586b61[_0xb1e10f(0x1d3)](0x6,0x8);return _0xcb3bd2+'-'+_0x2ea8be+'-'+_0x5cc03f;},'dateFormatSlashes':_0x2ca74b=>{const _0x44fbf9=a0_0x4af2;let _0x44b021=_0x2ca74b[_0x44fbf9(0x1d3)](0x0,0x4),_0x48e045=_0x2ca74b['substring'](0x4,0x6),_0x2af2ea=_0x2ca74b[_0x44fbf9(0x1d3)](0x6,0x8);return _0x44b021+'/'+_0x48e045+'/'+_0x2af2ea;},'arrSumByLength':(_0x5becdf,_0x5e70be)=>{const _0x348eb0=a0_0x4af2,_0x442bfb={'iDIhm':function(_0x5a4d9d,_0x2e9d7a){return _0x5a4d9d<_0x2e9d7a;}};let _0x1b5b88=[];for(let _0x5e7b3c=0x0;_0x442bfb[_0x348eb0(0x1dc)](_0x5e7b3c,_0x5becdf['length']);_0x5e7b3c+=_0x5e70be){const _0x9d212f=_0x5becdf['slice'](_0x5e7b3c,_0x5e7b3c+_0x5e70be),_0x3ec6d9=_0x9d212f[_0x348eb0(0x1a3)](_0x21e5c6=>typeof _0x21e5c6==='string'),_0x35e28d=_0x9d212f[_0x348eb0(0x1a8)]((_0x40fa79,_0x49de3c)=>_0x40fa79+Number(_0x49de3c),0x0);_0x1b5b88[_0x348eb0(0x1b9)](_0x3ec6d9?_0x35e28d[_0x348eb0(0x1e0)]():_0x35e28d);}return _0x1b5b88;},'buildTree':(_0x39cc17,_0x40f58c,_0x420ae5,_0x8ab128=a0_0xd09b08(0x1a2))=>{const _0x38822e=a0_0xd09b08,_0x1e580e=[],_0x234ccc={};return _0x39cc17[_0x38822e(0x1b4)](_0x288ff0=>{const _0x2d0c7d=_0x38822e,_0x430707={..._0x288ff0,[_0x8ab128]:[]};_0x234ccc[_0x288ff0[_0x40f58c]]=_0x430707;if(!_0x288ff0[_0x420ae5])_0x1e580e[_0x2d0c7d(0x1b9)](_0x430707);else {const _0x337c30=_0x234ccc[_0x288ff0[_0x420ae5]];_0x337c30&&_0x337c30[_0x8ab128][_0x2d0c7d(0x1b9)](_0x430707);}}),_0x1e580e;},'downloadTableByCSV':(_0x3faa4d,_0x577d4b=a0_0xd09b08(0x1ab))=>{const _0x596efb=a0_0xd09b08,_0x17dfbc={'vjHjJ':_0x596efb(0x1d9),'uBjij':'Table\x20element\x20not\x20found.','lttCc':function(_0x2a42db,_0x141873){return _0x2a42db+_0x141873;},'QXLlf':'text/csv;charset=utf-8;'};if(!_0x3faa4d){console[_0x596efb(0x196)](_0x17dfbc[_0x596efb(0x1ae)]);return;}const _0x310786=Array[_0x596efb(0x1b1)](_0x3faa4d[_0x596efb(0x1d5)]('tr')),_0x4e06d1=_0x310786[_0x596efb(0x1de)](_0x2f58f2=>{const _0x46e239=_0x596efb,_0x3413c3=Array[_0x46e239(0x1b1)](_0x2f58f2[_0x46e239(0x1d5)](_0x17dfbc[_0x46e239(0x1e2)]));return _0x3413c3['map'](_0x4a314a=>'\x22'+_0x4a314a[_0x46e239(0x1a1)]+'\x22')['join'](',');})['join']('\x0a'),_0x5077d1='\ufeff',_0x5c0d92=new Blob([_0x17dfbc['lttCc'](_0x5077d1,_0x4e06d1)],{'type':_0x17dfbc[_0x596efb(0x1b6)]}),_0x22d411=URL[_0x596efb(0x1c0)](_0x5c0d92),_0x2817b6=document['createElement']('a');_0x2817b6['href']=_0x22d411,_0x2817b6[_0x596efb(0x1c5)]=_0x577d4b,document[_0x596efb(0x19d)][_0x596efb(0x195)](_0x2817b6),_0x2817b6[_0x596efb(0x1c6)](),document[_0x596efb(0x19d)][_0x596efb(0x1c1)](_0x2817b6),URL['revokeObjectURL'](_0x22d411);},'getType':_0x346b8e=>{const _0x150281=a0_0xd09b08;return Object[_0x150281(0x19f)][_0x150281(0x1b7)][_0x150281(0x1d4)](_0x346b8e)[_0x150281(0x1aa)](0x8,-1);},'isObject':_0x3313e8=>{const _0x29558f=a0_0xd09b08,_0x4ecb18={'Mjzvl':function(_0x10e4c2,_0x339ae6){return _0x10e4c2===_0x339ae6;},'DYjAE':_0x29558f(0x1a0)};return _0x4ecb18[_0x29558f(0x1d6)](Object[_0x29558f(0x19f)][_0x29558f(0x1b7)][_0x29558f(0x1d4)](_0x3313e8),_0x4ecb18[_0x29558f(0x198)]);},'omit':(_0x33a8fd,_0x3ec703)=>{const _0x520bfa=a0_0xd09b08,_0x1732ba={'AFWgN':'Null','sejpM':_0x520bfa(0x1a7),'CZLiX':function(_0x42d7f0,_0x6ca0f){return _0x42d7f0!==_0x6ca0f;},'iHfrY':'Array'},_0x1e6eba=stzUtil[_0x520bfa(0x1be)](_0x33a8fd);if(_0x1e6eba===_0x1732ba[_0x520bfa(0x1b8)]||_0x1e6eba!==_0x1732ba[_0x520bfa(0x1a9)]&&_0x1732ba[_0x520bfa(0x1d8)](_0x1e6eba,_0x1732ba[_0x520bfa(0x1df)]))return _0x33a8fd;if(_0x1e6eba===_0x1732ba['iHfrY'])return _0x33a8fd['map'](_0x26e6e7=>stzUtil[_0x520bfa(0x19b)](_0x26e6e7,_0x3ec703));const _0x572ff3={};for(const _0x32f743 in _0x33a8fd){if(_0x3ec703[_0x520bfa(0x1cb)](_0x32f743))continue;const _0x235037=_0x33a8fd[_0x32f743];_0x572ff3[_0x32f743]=stzUtil['omit'](_0x235037,_0x3ec703);}return _0x572ff3;},'pick':(_0x4d5b5a,_0x41324b)=>{const _0x4cdc29=a0_0xd09b08;if(Object[_0x4cdc29(0x19f)][_0x4cdc29(0x1d1)][_0x4cdc29(0x1d4)](_0x4d5b5a,_0x41324b)){const {[_0x41324b]:_0x48b65d,..._0x192d8}=_0x4d5b5a;return _0x192d8;}else throw new Error('Object\x20does\x20not\x20have\x20PROPERTY');},'makeComboItems':(_0x2bf4dd,_0x10cf0f,_0x5aa188)=>{return _0x2bf4dd['map'](_0x5b9720=>{return {'key':_0x5b9720[_0x10cf0f],'value':_0x5b9720[_0x5aa188],'label':_0x5b9720[_0x10cf0f]};});},'isEmpty':_0xbba018=>{const _0x2d7ca4=a0_0xd09b08,_0x2daf87={'EzYqd':function(_0x12a027,_0x52ab36){return _0x12a027===_0x52ab36;},'nGzSd':function(_0x1c7e3a,_0x40ee63){return _0x1c7e3a===_0x40ee63;},'lrztG':_0x2d7ca4(0x1b0),'dOTDE':function(_0x58d2d1,_0x472f29){return _0x58d2d1===_0x472f29;},'bXdnb':_0x2d7ca4(0x1c2),'oVeZb':function(_0x1b6e6f,_0x4dc17e){return _0x1b6e6f===_0x4dc17e;},'vqkdM':_0x2d7ca4(0x1a7),'mbXkC':function(_0x2a456a,_0x4880e7){return _0x2a456a===_0x4880e7;}},_0x45b94f=stzUtil[_0x2d7ca4(0x1be)](_0xbba018);if(_0x2daf87[_0x2d7ca4(0x1dd)](_0xbba018,null)||_0x2daf87[_0x2d7ca4(0x19c)](_0xbba018,undefined))return !![];if(_0x2daf87[_0x2d7ca4(0x1dd)](_0x45b94f,_0x2daf87[_0x2d7ca4(0x1d7)])&&_0x2daf87['dOTDE'](_0xbba018['trim'](),''))return !![];if(_0x2daf87['dOTDE'](_0x45b94f,_0x2daf87[_0x2d7ca4(0x1bb)])&&_0x2daf87[_0x2d7ca4(0x19c)](_0xbba018[_0x2d7ca4(0x1ba)],0x0))return !![];if(_0x2daf87[_0x2d7ca4(0x1c7)](_0x45b94f,_0x2daf87[_0x2d7ca4(0x1cd)])){if(_0x2daf87['mbXkC'](Object['keys'](_0xbba018)[_0x2d7ca4(0x1ba)],0x0))return !![];const _0x40c3bf=Object[_0x2d7ca4(0x1af)](_0xbba018)['every'](_0x2299b8=>_0x2299b8===null||_0x2299b8===undefined||_0x2299b8==='');if(_0x40c3bf)return !![];}return ![];},'cloneDeep':(_0x2f1be6,_0x1d152e=new Map())=>{const _0x222a3d=a0_0xd09b08,_0x43240e={'dHCBz':function(_0xf2259f,_0x4fb9aa){return _0xf2259f===_0x4fb9aa;},'fXYAR':'Object','AOIOq':function(_0x45bc52,_0x19aa0a){return _0x45bc52!==_0x19aa0a;},'kInKZ':'Array'},_0xb53aa8=stzUtil['getType'](_0x2f1be6);if(_0x43240e['dHCBz'](_0xb53aa8,_0x222a3d(0x199))||_0xb53aa8!==_0x43240e[_0x222a3d(0x1b5)]&&_0x43240e['AOIOq'](_0xb53aa8,_0x43240e[_0x222a3d(0x19e)]))return _0x2f1be6;if(_0x1d152e[_0x222a3d(0x1ac)](_0x2f1be6))return _0x1d152e[_0x222a3d(0x1c3)](_0x2f1be6);if(_0x43240e['dHCBz'](_0xb53aa8,_0x43240e['kInKZ'])){const _0x5372fe=[];_0x1d152e[_0x222a3d(0x1bc)](_0x2f1be6,_0x5372fe);for(const _0x27d990 of _0x2f1be6){_0x5372fe[_0x222a3d(0x1b9)](stzUtil[_0x222a3d(0x1da)](_0x27d990,_0x1d152e));}return _0x5372fe;}else {const _0x4e0e15={};for(const _0x576268 in _0x2f1be6){Object[_0x222a3d(0x19f)]['hasOwnProperty'][_0x222a3d(0x1d4)](_0x2f1be6,_0x576268)&&(_0x4e0e15[_0x576268]=stzUtil['cloneDeep'](_0x2f1be6[_0x576268],_0x1d152e));}return _0x4e0e15;}},'merge':(_0x2045d4,_0x4b8739)=>{const _0x40c934=a0_0xd09b08,_0x4e8801={'ROcit':_0x40c934(0x1cc),'itHbq':function(_0x5326b3,_0x3f28f9){return _0x5326b3===_0x3f28f9;},'KRsWj':_0x40c934(0x1bd)},_0x5b3116=new Set([_0x4e8801[_0x40c934(0x1ad)],_0x40c934(0x1a6),'prototype']);if(!stzUtil[_0x40c934(0x1a4)](_0x2045d4)||!stzUtil[_0x40c934(0x1a4)](_0x4b8739))return _0x4b8739;const _0x55f676={..._0x2045d4};for(const _0x35d05e of Reflect['ownKeys'](_0x4b8739)){if(_0x4e8801[_0x40c934(0x1b3)](typeof _0x35d05e,_0x4e8801[_0x40c934(0x1c8)])&&_0x5b3116[_0x40c934(0x1ac)](_0x35d05e))continue;const _0x2dc3ec=Reflect[_0x40c934(0x1c3)](_0x4b8739,_0x35d05e),_0x2e0688=Reflect[_0x40c934(0x1c3)](_0x2045d4,_0x35d05e);if(stzUtil[_0x40c934(0x1a4)](_0x2dc3ec)&&stzUtil[_0x40c934(0x1a4)](_0x2e0688)){const _0x37ae9f=stzUtil[_0x40c934(0x1cf)](_0x2e0688,_0x2dc3ec);Reflect[_0x40c934(0x1bc)](_0x55f676,_0x35d05e,_0x37ae9f);}else Reflect[_0x40c934(0x1bc)](_0x55f676,_0x35d05e,_0x2dc3ec);}return _0x55f676;}};
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* ═════════════════════════════════════════════════════════════
|
|
247
|
-
* 📄 FILE : Cartesian.ts
|
|
248
|
-
* 📁 PACKAGE : chartjs-toolbox-
|
|
249
|
-
* 👤 AUTHOR : stz
|
|
250
|
-
* 🕒 CREATED : 25. 7. 24.
|
|
251
|
-
* ═════════════════════════════════════════════════════════════
|
|
252
|
-
* ═════════════════════════════════════════════════════════════
|
|
253
|
-
* 📝 DESCRIPTION
|
|
254
|
-
* -
|
|
255
|
-
* ═════════════════════════════════════════════════════════════
|
|
256
|
-
* ═════════════════════════════════════════════════════════════
|
|
257
|
-
* 🔄 CHANGE LOG
|
|
258
|
-
* - DATE : 2025/07/24 | Author : stz | 최초 생성
|
|
259
|
-
* ═════════════════════════════════════════════════════════════
|
|
260
|
-
*/
|
|
261
|
-
const DefaultZoomOptions = {
|
|
262
|
-
zoom: {
|
|
263
|
-
drag: {
|
|
264
|
-
enabled: true,
|
|
265
|
-
borderColor: 'rgba(0, 123, 255, 1)',
|
|
266
|
-
borderWidth: 1,
|
|
267
|
-
backgroundColor: 'rgba(0, 123, 255, 0.1)',
|
|
268
|
-
},
|
|
269
|
-
mode: 'xy',
|
|
270
|
-
overScaleMode: null,
|
|
271
|
-
},
|
|
272
|
-
pan: {
|
|
273
|
-
enabled: false,
|
|
274
|
-
},
|
|
275
|
-
};
|
|
276
|
-
const DefaultDataLabelsOptions = {
|
|
277
|
-
formatter: function (value, context) {
|
|
278
|
-
return value;
|
|
279
|
-
},
|
|
280
|
-
display: function (context) {
|
|
281
|
-
return true;
|
|
282
|
-
},
|
|
283
|
-
color: function (context) {
|
|
284
|
-
return '#000';
|
|
285
|
-
},
|
|
286
|
-
font: {
|
|
287
|
-
size: 13,
|
|
288
|
-
weight: 'bold',
|
|
289
|
-
},
|
|
290
|
-
anchor: 'end',
|
|
291
|
-
align: 'center',
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
class ChartInstance {
|
|
295
|
-
static map = new Map();
|
|
296
|
-
static register(id, instance) {
|
|
297
|
-
this.map.set(id, instance);
|
|
298
|
-
}
|
|
299
|
-
static get(id) {
|
|
300
|
-
return this.map.get(id);
|
|
301
|
-
}
|
|
302
|
-
static getChart(id) {
|
|
303
|
-
const chart = this.get(id);
|
|
304
|
-
if (stzUtil.isEmpty(chart)) {
|
|
305
|
-
throw new CustomError(ErrorCode.UNKNOWN_ERROR);
|
|
306
|
-
}
|
|
307
|
-
return chart;
|
|
308
|
-
}
|
|
309
|
-
static unregister(id) {
|
|
310
|
-
return this.map.delete(id);
|
|
311
|
-
}
|
|
312
|
-
static has(id) {
|
|
313
|
-
return this.map.has(id);
|
|
314
|
-
}
|
|
315
|
-
static clear() {
|
|
316
|
-
this.map.clear();
|
|
317
|
-
}
|
|
318
|
-
static update(id, instance, mode = 'default') {
|
|
319
|
-
const chart = this.get(id);
|
|
320
|
-
if (stzUtil.isEmpty(chart)) {
|
|
321
|
-
this.register(id, instance);
|
|
322
|
-
instance.update(mode);
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
throw new CustomError(ErrorCode.UNKNOWN_ERROR);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
static resize(id) {
|
|
329
|
-
const chart = this.get(id);
|
|
330
|
-
if (stzUtil.isEmpty(chart)) {
|
|
331
|
-
throw new CustomError(ErrorCode.UNKNOWN_ERROR);
|
|
332
|
-
}
|
|
333
|
-
chart.resize();
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// 기본 Chart.js 플러그인들
|
|
338
|
-
const noDataPlugin = {
|
|
339
|
-
id: 'noDataPlugin',
|
|
340
|
-
beforeUpdate: function (chart) {
|
|
341
|
-
// 필요시 구현
|
|
342
|
-
},
|
|
343
|
-
afterDraw: function (chart) {
|
|
344
|
-
const type = chart.config.type;
|
|
345
|
-
let hasNoData = false;
|
|
346
|
-
if (type === 'treemap') {
|
|
347
|
-
const treeData = chart.data.datasets?.[0]?.tree;
|
|
348
|
-
hasNoData = !Array.isArray(treeData) || treeData.length === 0;
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
hasNoData = !chart.data.datasets || !Array.isArray(chart.data.datasets[0]?.data) || chart.data.datasets[0].data.length === 0;
|
|
352
|
-
}
|
|
353
|
-
if (hasNoData) {
|
|
354
|
-
const ctx = chart.ctx;
|
|
355
|
-
const width = chart.width;
|
|
356
|
-
const height = chart.height;
|
|
357
|
-
ctx.save();
|
|
358
|
-
ctx.textAlign = 'center';
|
|
359
|
-
ctx.textBaseline = 'middle';
|
|
360
|
-
ctx.font = '30px Arial';
|
|
361
|
-
ctx.fillText('No data', width / 2, height / 2);
|
|
362
|
-
ctx.restore();
|
|
363
|
-
}
|
|
364
|
-
},
|
|
365
|
-
beforeDestroy(chart) {
|
|
366
|
-
console.log(`차트 사라짐 , ${chart.canvas.id}`);
|
|
367
|
-
chart._initVisible = false;
|
|
368
|
-
if (chart._initVisibleComp) {
|
|
369
|
-
delete chart._initVisibleComp;
|
|
370
|
-
}
|
|
371
|
-
},
|
|
372
|
-
};
|
|
373
|
-
// 줌 리셋 플러그인
|
|
374
|
-
const zoomResetPlugin = {
|
|
375
|
-
id: 'zoomResetButton',
|
|
376
|
-
afterDraw(chart, args, options) {
|
|
377
|
-
const canvas = chart.canvas;
|
|
378
|
-
const parent = canvas.parentNode;
|
|
379
|
-
if (chart._zoomResetBtnDom)
|
|
380
|
-
return;
|
|
381
|
-
if (getComputedStyle(parent).position === 'static') {
|
|
382
|
-
parent.style.position = 'relative';
|
|
383
|
-
}
|
|
384
|
-
const button = document.createElement('button');
|
|
385
|
-
button.innerText = 'Zoom Reset';
|
|
386
|
-
button.className = 'chart-zoom-reset-btn';
|
|
387
|
-
Object.assign(button.style, {
|
|
388
|
-
position: 'absolute',
|
|
389
|
-
zIndex: '10',
|
|
390
|
-
padding: '4px 8px',
|
|
391
|
-
fontSize: '12px',
|
|
392
|
-
background: 'rgba(0,0,0,0.7)',
|
|
393
|
-
color: '#fff',
|
|
394
|
-
border: '1px solid #fff',
|
|
395
|
-
borderRadius: '4px',
|
|
396
|
-
cursor: 'pointer',
|
|
397
|
-
display: 'none',
|
|
398
|
-
});
|
|
399
|
-
button.onclick = () => {
|
|
400
|
-
if (chart.resetZoom) {
|
|
401
|
-
chart.resetZoom();
|
|
402
|
-
}
|
|
403
|
-
button.style.display = 'none';
|
|
404
|
-
};
|
|
405
|
-
parent.appendChild(button);
|
|
406
|
-
chart._zoomResetBtnDom = button;
|
|
407
|
-
},
|
|
408
|
-
afterEvent(chart, args) {
|
|
409
|
-
const button = chart._zoomResetBtnDom;
|
|
410
|
-
if (!button)
|
|
411
|
-
return;
|
|
412
|
-
const isZoomed = chart.isZoomedOrPanned?.();
|
|
413
|
-
if (!isZoomed) {
|
|
414
|
-
button.style.display = 'none';
|
|
415
|
-
return;
|
|
416
|
-
}
|
|
417
|
-
const { chartArea } = chart;
|
|
418
|
-
const x = chartArea.right - 90;
|
|
419
|
-
const y = chartArea.top + 10;
|
|
420
|
-
button.style.left = `${x}px`;
|
|
421
|
-
button.style.top = `${y}px`;
|
|
422
|
-
button.style.display = 'block';
|
|
423
|
-
},
|
|
424
|
-
};
|
|
425
|
-
// 도넛 차트 중앙 텍스트 플러그인
|
|
426
|
-
const doughnutCenterTextPlugin = {
|
|
427
|
-
id: 'doughnutCenterTextPlugin',
|
|
428
|
-
afterDraw(chart) {
|
|
429
|
-
const parent = chart.canvas.parentNode;
|
|
430
|
-
if (chart.config.type !== 'doughnut')
|
|
431
|
-
return;
|
|
432
|
-
chart.canvas.style.zIndex = '1';
|
|
433
|
-
chart.canvas.style.position = 'relative';
|
|
434
|
-
const totalData = chart.config.data.datasets[0].data.reduce((a, b) => (Number(a) || 0) + (Number(b) || 0), 0);
|
|
435
|
-
if (totalData === 0) {
|
|
436
|
-
const textDiv = parent.querySelector('.chart-center-text');
|
|
437
|
-
if (textDiv)
|
|
438
|
-
textDiv.remove();
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
if (getComputedStyle(parent).position === 'static') {
|
|
442
|
-
parent.style.position = 'relative';
|
|
443
|
-
}
|
|
444
|
-
let textDiv = parent.querySelector('.chart-center-text');
|
|
445
|
-
if (!textDiv) {
|
|
446
|
-
textDiv = document.createElement('div');
|
|
447
|
-
textDiv.className = 'chart-center-text d-flex flex-column justify-content-center align-items-center';
|
|
448
|
-
Object.assign(textDiv.style, {
|
|
449
|
-
position: 'absolute',
|
|
450
|
-
top: '50%',
|
|
451
|
-
left: '50%',
|
|
452
|
-
transform: 'translate(-50%, -50%)',
|
|
453
|
-
pointerEvents: 'none',
|
|
454
|
-
color: '#fff',
|
|
455
|
-
fontFamily: 'sans-serif',
|
|
456
|
-
textAlign: 'center',
|
|
457
|
-
});
|
|
458
|
-
parent.appendChild(textDiv);
|
|
459
|
-
}
|
|
460
|
-
// 중앙 HTML 설정 (외부에서 설정 가능)
|
|
461
|
-
const centerHtml = chart._centerHtml || '';
|
|
462
|
-
textDiv.innerHTML = centerHtml;
|
|
463
|
-
},
|
|
464
|
-
};
|
|
465
|
-
// 로딩 애니메이션 플러그인
|
|
466
|
-
const loadingPlugin = {
|
|
467
|
-
id: 'loadingPlugin',
|
|
468
|
-
beforeInit(chart, args, options) {
|
|
469
|
-
chart._startLoading = true;
|
|
470
|
-
},
|
|
471
|
-
beforeDraw(chart) {
|
|
472
|
-
// 로딩 상태가 설정되어 있으면 애니메이션 시작
|
|
473
|
-
if (chart._startLoading) {
|
|
474
|
-
chart._startLoading = false;
|
|
475
|
-
this.startLoadingAnimation(chart);
|
|
476
|
-
}
|
|
477
|
-
},
|
|
478
|
-
startLoadingAnimation(chart) {
|
|
479
|
-
const canvas = chart.canvas;
|
|
480
|
-
const ctx = chart.ctx;
|
|
481
|
-
const dpr = window.devicePixelRatio || 1;
|
|
482
|
-
if (!canvas)
|
|
483
|
-
return;
|
|
484
|
-
const rect = canvas.getBoundingClientRect();
|
|
485
|
-
const width = rect.width;
|
|
486
|
-
const height = rect.height;
|
|
487
|
-
canvas.width = width * dpr;
|
|
488
|
-
canvas.height = height * dpr;
|
|
489
|
-
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
490
|
-
ctx.scale(dpr, dpr);
|
|
491
|
-
let percentage = 0;
|
|
492
|
-
const centerX = width / 2;
|
|
493
|
-
const centerY = height / 2;
|
|
494
|
-
const radius = Math.min(width, height) * 0.25;
|
|
495
|
-
const animate = () => {
|
|
496
|
-
if (chart._cancelLoading) {
|
|
497
|
-
chart._cancelLoading = false;
|
|
498
|
-
chart.update();
|
|
499
|
-
return;
|
|
500
|
-
}
|
|
501
|
-
ctx.clearRect(0, 0, width, height);
|
|
502
|
-
// 반투명 배경
|
|
503
|
-
ctx.fillStyle = 'rgba(255,255,255,0.85)';
|
|
504
|
-
ctx.fillRect(0, 0, width, height);
|
|
505
|
-
// 퍼센티지 텍스트
|
|
506
|
-
ctx.fillStyle = '#007bff';
|
|
507
|
-
ctx.font = `bold ${Math.floor(height * 0.1)}px Arial`;
|
|
508
|
-
ctx.textAlign = 'center';
|
|
509
|
-
ctx.textBaseline = 'middle';
|
|
510
|
-
ctx.fillText(`${percentage} %`, centerX, centerY);
|
|
511
|
-
// 원형 프로그레스 바
|
|
512
|
-
ctx.beginPath();
|
|
513
|
-
ctx.lineWidth = 6;
|
|
514
|
-
ctx.strokeStyle = '#007bff';
|
|
515
|
-
const start = -Math.PI / 2;
|
|
516
|
-
const end = start + (percentage / 100) * 2 * Math.PI;
|
|
517
|
-
ctx.arc(centerX, centerY, radius, start, end);
|
|
518
|
-
ctx.stroke();
|
|
519
|
-
if (percentage >= 100 && chart) {
|
|
520
|
-
// 로딩 완료 후 차트 업데이트
|
|
521
|
-
setTimeout(() => {
|
|
522
|
-
chart.update();
|
|
523
|
-
}, 500);
|
|
524
|
-
}
|
|
525
|
-
else {
|
|
526
|
-
percentage++;
|
|
527
|
-
requestAnimationFrame(animate);
|
|
528
|
-
}
|
|
529
|
-
};
|
|
530
|
-
requestAnimationFrame(animate);
|
|
531
|
-
},
|
|
532
|
-
};
|
|
533
|
-
const customLegend = {
|
|
534
|
-
id: 'htmlLegend',
|
|
535
|
-
_Default: {
|
|
536
|
-
containerID: '',
|
|
537
|
-
className: {
|
|
538
|
-
list: 'list-container',
|
|
539
|
-
item: 'legend-item',
|
|
540
|
-
box: 'legend-box',
|
|
541
|
-
text: 'text-container',
|
|
542
|
-
},
|
|
543
|
-
styles: {
|
|
544
|
-
text: { textDecoration: 'none', color: '#111827' },
|
|
545
|
-
textHidden: { textDecoration: 'line-through', color: '#9ca3af' },
|
|
546
|
-
box: (item, type) => ({
|
|
547
|
-
width: '12px',
|
|
548
|
-
height: '12px',
|
|
549
|
-
borderRadius: type === 'line' ? '50%' : '4px',
|
|
550
|
-
borderWidth: '2px',
|
|
551
|
-
backgroundColor: item.fillStyle,
|
|
552
|
-
borderColor: item.strokeStyle,
|
|
553
|
-
}),
|
|
554
|
-
},
|
|
555
|
-
getItemText: item => item.text,
|
|
556
|
-
getDatasetType: (chart, item) => {
|
|
557
|
-
const ds = chart.config.data?.datasets?.[item.datasetIndex];
|
|
558
|
-
if (ds?.type)
|
|
559
|
-
return ds.type;
|
|
560
|
-
const config = chart.config;
|
|
561
|
-
return 'type' in config ? config.type : undefined;
|
|
562
|
-
},
|
|
563
|
-
},
|
|
564
|
-
_fnc: (chart, id, options) => {
|
|
565
|
-
if (!id)
|
|
566
|
-
return;
|
|
567
|
-
const legendContainer = document.getElementById(id);
|
|
568
|
-
let listContainer = legendContainer?.querySelector('div');
|
|
569
|
-
if (!listContainer) {
|
|
570
|
-
listContainer = document.createElement('div');
|
|
571
|
-
listContainer.className = options.className.list;
|
|
572
|
-
legendContainer.appendChild(listContainer);
|
|
573
|
-
}
|
|
574
|
-
return listContainer;
|
|
575
|
-
},
|
|
576
|
-
afterUpdate(chart, args, options) {
|
|
577
|
-
if (!options || !options.containerID)
|
|
578
|
-
return;
|
|
579
|
-
const plainOptions = JSON.parse(JSON.stringify(options));
|
|
580
|
-
const merge = stzUtil.merge(this._Default, plainOptions);
|
|
581
|
-
const ul = this._fnc(chart, merge.containerID, merge);
|
|
582
|
-
if (!ul)
|
|
583
|
-
return console.error('none customLegend');
|
|
584
|
-
while (ul?.firstChild) {
|
|
585
|
-
ul.firstChild.remove();
|
|
586
|
-
}
|
|
587
|
-
const items = chart.options.plugins.legend.labels.generateLabels(chart);
|
|
588
|
-
items.forEach(item => {
|
|
589
|
-
const li = document.createElement('div');
|
|
590
|
-
li.className = merge.className.item;
|
|
591
|
-
const boxSpan = document.createElement('div');
|
|
592
|
-
boxSpan.className = merge.className.box;
|
|
593
|
-
boxSpan.style.backgroundColor = item.fillStyle;
|
|
594
|
-
boxSpan.style.borderColor = item.strokeStyle;
|
|
595
|
-
const textContainer = document.createElement('div');
|
|
596
|
-
textContainer.className = merge.className.text;
|
|
597
|
-
textContainer.style.color = item.fontColor;
|
|
598
|
-
li.addEventListener('click', () => {
|
|
599
|
-
const { type } = chart.config;
|
|
600
|
-
if (type === 'pie' || type === 'doughnut') {
|
|
601
|
-
chart.toggleDataVisibility(item.index);
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
chart.setDatasetVisibility(item.datasetIndex, !chart.isDatasetVisible(item.datasetIndex));
|
|
605
|
-
}
|
|
606
|
-
chart.update();
|
|
607
|
-
});
|
|
608
|
-
const text = document.createTextNode(item.text);
|
|
609
|
-
textContainer.appendChild(text);
|
|
610
|
-
textContainer.style.textDecoration = item.hidden ? 'line-through' : '';
|
|
611
|
-
li.appendChild(boxSpan);
|
|
612
|
-
li.appendChild(textContainer);
|
|
613
|
-
ul?.appendChild(li);
|
|
614
|
-
});
|
|
615
|
-
},
|
|
616
|
-
};
|
|
617
|
-
const chartMountPlugin = {
|
|
618
|
-
id: 'chartMountedPlugin',
|
|
619
|
-
afterDraw(chart, args, options) {
|
|
620
|
-
if (!chart._mountedCalled) {
|
|
621
|
-
chart._mountedCalled = true;
|
|
622
|
-
requestAnimationFrame(() => {
|
|
623
|
-
if (typeof chart.config.options._mounted === 'function') {
|
|
624
|
-
chart.config.options._mounted(chart);
|
|
625
|
-
}
|
|
626
|
-
});
|
|
627
|
-
const chartId = chart.options._chartId;
|
|
628
|
-
if (chartId) {
|
|
629
|
-
console.log('차트 인스턴스 바인드 성공');
|
|
630
|
-
ChartInstance.register(chartId, chart);
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
},
|
|
634
|
-
};
|
|
635
|
-
const blinkPlugin = {
|
|
636
|
-
id: `highlightThresholdPlugin`,
|
|
637
|
-
afterDatasetDraw(chart, args) {
|
|
638
|
-
const datasetMeta = chart.getDatasetMeta(args.index);
|
|
639
|
-
const dataset = chart.data.datasets[args.index];
|
|
640
|
-
chart.ctx;
|
|
641
|
-
datasetMeta.data.forEach((element, i) => {
|
|
642
|
-
dataset.data[i];
|
|
643
|
-
});
|
|
644
|
-
},
|
|
645
|
-
};
|
|
646
|
-
// 도넛 차트 중앙 HTML 생성 함수
|
|
647
|
-
const makeCenterHtml = (percent, ok, warn, ng) => {
|
|
648
|
-
const warnHtml = warn ? `<span class="text-warning">${warn.toLocaleString()}</span><span class="text-white">/</span>` : '';
|
|
649
|
-
return `
|
|
650
|
-
<div class="fs-6 text-white">${percent.toLocaleString()}%</div>
|
|
651
|
-
${ok !== undefined
|
|
652
|
-
? `
|
|
653
|
-
<div>
|
|
654
|
-
<span class="text-success">${ok.toLocaleString()}</span>
|
|
655
|
-
<span class="text-white">/</span>
|
|
656
|
-
${warnHtml}
|
|
657
|
-
<span class="text-danger">${ng?.toLocaleString() || 0}</span>
|
|
658
|
-
</div>`
|
|
659
|
-
: ''}
|
|
660
|
-
`;
|
|
661
|
-
};
|
|
662
|
-
const barScaleImgPlugin = {
|
|
663
|
-
id: 'scaleImg',
|
|
664
|
-
beforeDatasetsDraw(chart, args, options) {
|
|
665
|
-
const { ctx, data, scales: { x, y }, } = chart;
|
|
666
|
-
const imgSize = 30;
|
|
667
|
-
const isHorizontal = chart.options.indexAxis === 'y';
|
|
668
|
-
ctx.save();
|
|
669
|
-
data.datasets.forEach((dataset, idx) => {
|
|
670
|
-
const img = new Image();
|
|
671
|
-
img.src = dataset.image;
|
|
672
|
-
if (isHorizontal) {
|
|
673
|
-
ctx.drawImage(img, 0, y.getPixelForValue(idx) - imgSize / 2, imgSize, imgSize);
|
|
674
|
-
}
|
|
675
|
-
else {
|
|
676
|
-
ctx.drawImage(img, x.getPixelForValue(idx) - imgSize / 2, x.top, imgSize, imgSize);
|
|
677
|
-
}
|
|
678
|
-
});
|
|
679
|
-
ctx.restore();
|
|
680
|
-
},
|
|
681
|
-
};
|
|
682
|
-
const changeSetting = {
|
|
683
|
-
id: 'setting',
|
|
684
|
-
_Default: {
|
|
685
|
-
img: '/img/setting.svg',
|
|
686
|
-
iconSize: { w: 30, h: 30 },
|
|
687
|
-
radiusExtra: 2,
|
|
688
|
-
offset: { right: 10, top: 10 },
|
|
689
|
-
colors: {
|
|
690
|
-
fill: 'rgba(0,123,255,0.5)',
|
|
691
|
-
fillHover: 'rgba(0,150,255,0.8)',
|
|
692
|
-
stroke: 'rgba(0,123,255,1)',
|
|
693
|
-
strokeHover: 'rgba(0,150,255,1)',
|
|
694
|
-
},
|
|
695
|
-
borderWidth: { normal: 2, hover: 3 },
|
|
696
|
-
cursor: 'pointer',
|
|
697
|
-
onClick: ({ chart, event }) => {
|
|
698
|
-
alert('클릭');
|
|
699
|
-
},
|
|
700
|
-
},
|
|
701
|
-
afterInit(chart, args, options) {
|
|
702
|
-
const canvas = chart.canvas;
|
|
703
|
-
const opts = stzUtil.merge(this._Default, options);
|
|
704
|
-
chart.T$opts = opts;
|
|
705
|
-
if (!canvas)
|
|
706
|
-
return;
|
|
707
|
-
if (chart.T$settingClickHandler)
|
|
708
|
-
return;
|
|
709
|
-
const getXy = e => {
|
|
710
|
-
const rect = canvas.getBoundingClientRect();
|
|
711
|
-
const scaleX = canvas.width / rect.width;
|
|
712
|
-
const scaleY = canvas.height / rect.height;
|
|
713
|
-
return {
|
|
714
|
-
x: (e.clientX - rect.left) * scaleX,
|
|
715
|
-
y: (e.clientY - rect.top) * scaleY,
|
|
716
|
-
};
|
|
717
|
-
};
|
|
718
|
-
const handleClick = (e) => {
|
|
719
|
-
const { x, y } = getXy(e);
|
|
720
|
-
const r = chart.T$settingBtnRect;
|
|
721
|
-
if (!r)
|
|
722
|
-
return;
|
|
723
|
-
if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) {
|
|
724
|
-
try {
|
|
725
|
-
(opts.onClick || this._Default.onClick)({ chart, event: e });
|
|
726
|
-
}
|
|
727
|
-
catch (err) {
|
|
728
|
-
console.error('error', err);
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
};
|
|
732
|
-
const handleMove = e => {
|
|
733
|
-
const { x, y } = getXy(e);
|
|
734
|
-
const r = chart.T$settingBtnCircle;
|
|
735
|
-
if (!r)
|
|
736
|
-
return;
|
|
737
|
-
const dx = x - r.cx;
|
|
738
|
-
const dy = y - r.cy;
|
|
739
|
-
const isHover = dx * dx + dy * dy <= r.radius * r.radius;
|
|
740
|
-
if (chart.T$isHover !== isHover) {
|
|
741
|
-
chart.T$isHover = isHover;
|
|
742
|
-
canvas.style.cursor = isHover ? opts.cursor || 'pointer' : 'default';
|
|
743
|
-
chart.update('none');
|
|
744
|
-
}
|
|
745
|
-
};
|
|
746
|
-
canvas.addEventListener('mousemove', handleMove);
|
|
747
|
-
canvas.addEventListener('click', handleClick);
|
|
748
|
-
chart._settingClickHandler = handleClick;
|
|
749
|
-
chart._settingMoveHandler = handleMove;
|
|
750
|
-
chart.T$settingImg = new Image();
|
|
751
|
-
chart.T$settingImg.src = opts.img;
|
|
752
|
-
},
|
|
753
|
-
beforeDraw(chart) {
|
|
754
|
-
const { ctx, chartArea: { right }, } = chart;
|
|
755
|
-
ctx.save();
|
|
756
|
-
const opts = chart.T$opts || this._Default;
|
|
757
|
-
const img = chart.T$settingImg;
|
|
758
|
-
const w = opts.iconSize?.w ?? 30;
|
|
759
|
-
const h = opts.iconSize?.h ?? 30;
|
|
760
|
-
const x = right - (w + (opts.offset?.right ?? 10));
|
|
761
|
-
const y = opts.offset?.top ?? 10;
|
|
762
|
-
const radius = Math.max(w, h) / 2 + (opts.radiusExtra ?? 0);
|
|
763
|
-
const centerX = x + w / 2;
|
|
764
|
-
const centerY = y + h / 2;
|
|
765
|
-
const isHover = !!chart.T$isHover;
|
|
766
|
-
ctx.lineWidth = isHover ? (opts.borderWidth?.hover ?? 3) : (opts.borderWidth?.normal ?? 2);
|
|
767
|
-
ctx.strokeStyle = isHover ? (opts.colors?.strokeHover ?? 'rgba(0,150,255,1)') : (opts.colors?.stroke ?? 'rgba(0,123,255,1)');
|
|
768
|
-
ctx.beginPath();
|
|
769
|
-
ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);
|
|
770
|
-
ctx.stroke();
|
|
771
|
-
ctx.closePath();
|
|
772
|
-
ctx.beginPath();
|
|
773
|
-
ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);
|
|
774
|
-
ctx.fillStyle = isHover ? (opts.colors?.fillHover ?? 'rgba(0,150,255,0.8)') : (opts.colors?.fill ?? 'rgba(0,123,255,0.5)');
|
|
775
|
-
ctx.fill();
|
|
776
|
-
ctx.closePath();
|
|
777
|
-
if (img) {
|
|
778
|
-
ctx.drawImage(img, x, y, w, h);
|
|
779
|
-
}
|
|
780
|
-
chart.T$settingBtnCircle = { cx: centerX, cy: centerY, radius };
|
|
781
|
-
chart.T$settingBtnRect = {
|
|
782
|
-
top: y,
|
|
783
|
-
bottom: y + h,
|
|
784
|
-
left: x,
|
|
785
|
-
right: x + w,
|
|
786
|
-
};
|
|
787
|
-
ctx.restore();
|
|
788
|
-
},
|
|
789
|
-
afterDestroy(chart) {
|
|
790
|
-
const canvas = chart.canvas;
|
|
791
|
-
if (canvas && chart.T$settingClickHandler) {
|
|
792
|
-
canvas.removeEventListener('click', chart._settingClickHandler);
|
|
793
|
-
}
|
|
794
|
-
if (canvas && chart._settingMoveHandler) {
|
|
795
|
-
canvas.removeEventListener('mousemove', chart._settingMoveHandler);
|
|
796
|
-
}
|
|
797
|
-
chart.T$settingClickHandler = null;
|
|
798
|
-
chart.T$settingBtnRect = null;
|
|
799
|
-
chart.T$settingImg = null;
|
|
800
|
-
},
|
|
801
|
-
};
|
|
802
|
-
const zoomRangeSlider = {
|
|
803
|
-
id: 'zoomRangeSlider',
|
|
804
|
-
var: {
|
|
805
|
-
min: 0,
|
|
806
|
-
isDragging: false,
|
|
807
|
-
circlePosition: null,
|
|
808
|
-
},
|
|
809
|
-
afterDatasetDraw(chart, args, options) {
|
|
810
|
-
const { ctx, chartArea: { left, right, top, bottom, width, height }, } = chart;
|
|
811
|
-
this.var.circlePosition = this.var.circlePosition || left;
|
|
812
|
-
ctx.beginPath();
|
|
813
|
-
ctx.fillStyle = '#e0e0e0';
|
|
814
|
-
ctx.roundRect(left, bottom + 40, width, 6, 3);
|
|
815
|
-
ctx.fill();
|
|
816
|
-
const activeWidth = this.var.circlePosition - left;
|
|
817
|
-
if (activeWidth > 0) {
|
|
818
|
-
ctx.beginPath();
|
|
819
|
-
ctx.fillStyle = '#4285f4';
|
|
820
|
-
ctx.roundRect(left, bottom + 40, activeWidth, 6, 3);
|
|
821
|
-
ctx.fill();
|
|
822
|
-
}
|
|
823
|
-
ctx.beginPath();
|
|
824
|
-
ctx.fillStyle = '#ffffff';
|
|
825
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 8, 0, Math.PI * 2);
|
|
826
|
-
ctx.fill();
|
|
827
|
-
ctx.beginPath();
|
|
828
|
-
ctx.strokeStyle = '#4285f4';
|
|
829
|
-
ctx.lineWidth = 2;
|
|
830
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 8, 0, Math.PI * 2);
|
|
831
|
-
ctx.stroke();
|
|
832
|
-
if (this.var.isDragging) {
|
|
833
|
-
ctx.beginPath();
|
|
834
|
-
ctx.fillStyle = 'rgba(66, 133, 244, 0.2)';
|
|
835
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 12, 0, Math.PI * 2);
|
|
836
|
-
ctx.fill();
|
|
837
|
-
}
|
|
838
|
-
},
|
|
839
|
-
afterUpdate(chart, args, options) {
|
|
840
|
-
chart.options.scales.x.min = this.var.min;
|
|
841
|
-
},
|
|
842
|
-
afterEvent(chart, args, options) {
|
|
843
|
-
const { ctx, canvas, chartArea: { left, top, right, width }, } = chart;
|
|
844
|
-
canvas.addEventListener('mousedown', e => {
|
|
845
|
-
this.var.isDragging = true;
|
|
846
|
-
});
|
|
847
|
-
canvas.addEventListener('mouseup', e => {
|
|
848
|
-
this.var.isDragging = false;
|
|
849
|
-
});
|
|
850
|
-
if (args.event.type === 'mousemove' && this.var.isDragging) {
|
|
851
|
-
const val = args.event.x / (width + left);
|
|
852
|
-
this.var.min = val * chart.config.data.labels.length - 1;
|
|
853
|
-
args.changed = true;
|
|
854
|
-
this.var.circlePosition = args.event.x < left ? left : args.event.x > right ? right : args.event.x;
|
|
855
|
-
chart.update();
|
|
856
|
-
}
|
|
857
|
-
},
|
|
858
|
-
};
|
|
859
|
-
const CreateZoomRangeSlider = (colors = {}) => {
|
|
860
|
-
const { sliderTrackColor = '#e0e0e0', sliderActiveColor = '#4285f4', sliderHandleColor = '#ffffff', sliderHandleBorderColor = '#4285f4', sliderHandleHoverColor = 'rgba(66, 133, 244, 0.2)', } = colors;
|
|
861
|
-
return {
|
|
862
|
-
id: 'zoomRangeSlider',
|
|
863
|
-
var: {
|
|
864
|
-
min: 0,
|
|
865
|
-
isDragging: false,
|
|
866
|
-
circlePosition: null,
|
|
867
|
-
},
|
|
868
|
-
afterDatasetDraw(chart, args, options) {
|
|
869
|
-
const { ctx, chartArea: { left, right, top, bottom, width, height }, } = chart;
|
|
870
|
-
this.var.circlePosition = this.var.circlePosition || left;
|
|
871
|
-
ctx.beginPath();
|
|
872
|
-
ctx.fillStyle = sliderTrackColor;
|
|
873
|
-
ctx.roundRect(left, bottom + 40, width, 6, 3);
|
|
874
|
-
ctx.fill();
|
|
875
|
-
const activeWidth = this.var.circlePosition - left;
|
|
876
|
-
if (activeWidth > 0) {
|
|
877
|
-
ctx.beginPath();
|
|
878
|
-
ctx.fillStyle = sliderActiveColor;
|
|
879
|
-
ctx.roundRect(left, bottom + 40, activeWidth, 6, 3);
|
|
880
|
-
ctx.fill();
|
|
881
|
-
}
|
|
882
|
-
ctx.beginPath();
|
|
883
|
-
ctx.fillStyle = sliderHandleColor;
|
|
884
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 8, 0, Math.PI * 2);
|
|
885
|
-
ctx.fill();
|
|
886
|
-
ctx.beginPath();
|
|
887
|
-
ctx.strokeStyle = sliderHandleBorderColor;
|
|
888
|
-
ctx.lineWidth = 2;
|
|
889
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 8, 0, Math.PI * 2);
|
|
890
|
-
ctx.stroke();
|
|
891
|
-
if (this.var.isDragging) {
|
|
892
|
-
ctx.beginPath();
|
|
893
|
-
ctx.fillStyle = sliderHandleHoverColor;
|
|
894
|
-
ctx.arc(this.var.circlePosition, bottom + 40, 12, 0, Math.PI * 2);
|
|
895
|
-
ctx.fill();
|
|
896
|
-
}
|
|
897
|
-
},
|
|
898
|
-
afterUpdate(chart, args, options) {
|
|
899
|
-
chart.options.scales.x.min = this.var.min;
|
|
900
|
-
},
|
|
901
|
-
afterEvent(chart, args, options) {
|
|
902
|
-
const { ctx, canvas, chartArea: { left, top, right, width }, } = chart;
|
|
903
|
-
canvas.addEventListener('mousedown', (e) => {
|
|
904
|
-
this.var.isDragging = true;
|
|
905
|
-
});
|
|
906
|
-
canvas.addEventListener('mouseup', (e) => {
|
|
907
|
-
this.var.isDragging = false;
|
|
908
|
-
});
|
|
909
|
-
if (args.event.type === 'mousemove' && this.var.isDragging) {
|
|
910
|
-
const val = args.event.x / (width + left);
|
|
911
|
-
this.var.min = val * chart.config.data.labels.length - 1;
|
|
912
|
-
args.changed = true;
|
|
913
|
-
this.var.circlePosition = args.event.x < left ? left : args.event.x > right ? right : args.event.x;
|
|
914
|
-
chart.update();
|
|
915
|
-
}
|
|
916
|
-
},
|
|
917
|
-
};
|
|
918
|
-
};
|
|
919
|
-
|
|
920
|
-
// Bar 차트 기본 툴팁 콜백
|
|
921
|
-
// 기존 (src/defaults/options/Bar.ts)
|
|
922
|
-
const defaultBarTooltipCallback = (context) => {
|
|
923
|
-
const datasetLabel = context.dataset.label || '';
|
|
924
|
-
const value = context.parsed?.y ?? context.raw ?? 'No Data';
|
|
925
|
-
const formattedValue = typeof value === 'number' ? value.toLocaleString() : value;
|
|
926
|
-
return `${datasetLabel}: ${formattedValue}`;
|
|
927
|
-
};
|
|
928
|
-
// Bar 차트 기본 스케일 설정
|
|
929
|
-
const defaultBarScales = {
|
|
930
|
-
x: {
|
|
931
|
-
type: 'category',
|
|
932
|
-
display: true,
|
|
933
|
-
ticks: {
|
|
934
|
-
display: true,
|
|
935
|
-
color: '#000',
|
|
936
|
-
autoSkip: true,
|
|
937
|
-
align: 'center',
|
|
938
|
-
},
|
|
939
|
-
grid: {
|
|
940
|
-
display: true,
|
|
941
|
-
},
|
|
942
|
-
},
|
|
943
|
-
y: {
|
|
944
|
-
type: 'linear',
|
|
945
|
-
display: true,
|
|
946
|
-
ticks: {
|
|
947
|
-
display: true,
|
|
948
|
-
color: '#000',
|
|
949
|
-
align: 'end',
|
|
950
|
-
autoSkip: true,
|
|
951
|
-
},
|
|
952
|
-
grid: {
|
|
953
|
-
display: true,
|
|
954
|
-
},
|
|
955
|
-
},
|
|
956
|
-
};
|
|
957
|
-
// Bar 차트 기본 옵션 생성 함수
|
|
958
|
-
const createDefaultBarOptions = (userOptions = {}, defaultScales = defaultBarScales) => {
|
|
959
|
-
const userScales = userOptions.scales || {};
|
|
960
|
-
const mergedScales = {
|
|
961
|
-
...defaultScales,
|
|
962
|
-
...userScales,
|
|
963
|
-
};
|
|
964
|
-
return {
|
|
965
|
-
_mounted: userOptions._mounted ?? (() => { }),
|
|
966
|
-
indexAxis: userOptions?.indexAxis ?? 'x',
|
|
967
|
-
responsive: true,
|
|
968
|
-
maintainAspectRatio: false,
|
|
969
|
-
plugins: {
|
|
970
|
-
tooltip: {
|
|
971
|
-
enabled: userOptions.plugins?.tooltip?.enabled ?? true,
|
|
972
|
-
mode: userOptions.plugins?.tooltip?.mode ?? 'index',
|
|
973
|
-
intersect: userOptions.plugins?.tooltip?.intersect ?? false,
|
|
974
|
-
callbacks: {
|
|
975
|
-
label: defaultBarTooltipCallback,
|
|
976
|
-
...(userOptions?.plugins?.tooltip?.callbacks ?? {}),
|
|
977
|
-
},
|
|
978
|
-
},
|
|
979
|
-
...(userOptions?.plugins ?? {}),
|
|
980
|
-
},
|
|
981
|
-
scales: mergedScales,
|
|
982
|
-
...stzUtil.omit(userOptions, ['scales', 'plugins', 'indexAxis']),
|
|
983
|
-
};
|
|
984
|
-
};
|
|
985
|
-
|
|
986
|
-
// Line 차트 기본 툴팁 콜백
|
|
987
|
-
const defaultLineTooltipCallback = (context) => {
|
|
988
|
-
const dataset = context.dataset;
|
|
989
|
-
const parsed = context.parsed;
|
|
990
|
-
const raw = context.raw;
|
|
991
|
-
let value;
|
|
992
|
-
if (parsed && stzUtil.getType(parsed) === 'object') {
|
|
993
|
-
value = parsed.y ?? parsed.x;
|
|
994
|
-
}
|
|
995
|
-
else if (raw && stzUtil.getType(raw) === 'object' && dataset?.parsing) {
|
|
996
|
-
const parsing = dataset.parsing;
|
|
997
|
-
const yKey = parsing.yAxisKey;
|
|
998
|
-
value = raw[yKey];
|
|
999
|
-
}
|
|
1000
|
-
else {
|
|
1001
|
-
value = raw;
|
|
1002
|
-
}
|
|
1003
|
-
let formatted;
|
|
1004
|
-
if (stzUtil.getType(value) === 'number') {
|
|
1005
|
-
formatted = value.toFixed(2);
|
|
1006
|
-
}
|
|
1007
|
-
else if (value !== null && value !== undefined) {
|
|
1008
|
-
formatted = String(value);
|
|
1009
|
-
}
|
|
1010
|
-
else {
|
|
1011
|
-
formatted = 'No Data';
|
|
1012
|
-
}
|
|
1013
|
-
const label = dataset?.label ?? '값';
|
|
1014
|
-
return `${label}: ${formatted}`;
|
|
1015
|
-
};
|
|
1016
|
-
// Line 차트 기본 스케일 설정
|
|
1017
|
-
const defaultLineScales = {
|
|
1018
|
-
x: {
|
|
1019
|
-
type: 'category',
|
|
1020
|
-
display: true,
|
|
1021
|
-
ticks: {
|
|
1022
|
-
display: true,
|
|
1023
|
-
color: '#000',
|
|
1024
|
-
autoSkip: true,
|
|
1025
|
-
align: 'center',
|
|
1026
|
-
},
|
|
1027
|
-
grid: {
|
|
1028
|
-
display: true,
|
|
1029
|
-
},
|
|
1030
|
-
},
|
|
1031
|
-
y: {
|
|
1032
|
-
type: 'linear',
|
|
1033
|
-
display: true,
|
|
1034
|
-
ticks: {
|
|
1035
|
-
display: true,
|
|
1036
|
-
color: '#000',
|
|
1037
|
-
align: 'end',
|
|
1038
|
-
autoSkip: true,
|
|
1039
|
-
},
|
|
1040
|
-
grid: {
|
|
1041
|
-
display: true,
|
|
1042
|
-
},
|
|
1043
|
-
},
|
|
1044
|
-
};
|
|
1045
|
-
const createDefaultLineOptions = (userOptions = {}, defaultScales = defaultLineScales) => {
|
|
1046
|
-
console.log('createDefaultLineOptions called with userOptions:', userOptions);
|
|
1047
|
-
const userScales = userOptions.scales || {};
|
|
1048
|
-
return {
|
|
1049
|
-
hover: undefined,
|
|
1050
|
-
indexAxis: undefined,
|
|
1051
|
-
_mounted: userOptions._mounted ?? (() => { }),
|
|
1052
|
-
responsive: userOptions.responsive ?? true,
|
|
1053
|
-
maintainAspectRatio: userOptions.maintainAspectRatio ?? false,
|
|
1054
|
-
interaction: {
|
|
1055
|
-
mode: userOptions.interaction?.mode ?? 'index',
|
|
1056
|
-
intersect: userOptions.interaction?.intersect ?? false,
|
|
1057
|
-
},
|
|
1058
|
-
plugins: {
|
|
1059
|
-
...(userOptions.plugins || {}),
|
|
1060
|
-
tooltip: {
|
|
1061
|
-
enabled: userOptions.plugins?.tooltip?.enabled ?? true,
|
|
1062
|
-
mode: userOptions.plugins?.tooltip?.mode ?? 'index',
|
|
1063
|
-
intersect: userOptions.plugins?.tooltip?.intersect ?? false,
|
|
1064
|
-
...userOptions.plugins?.tooltip,
|
|
1065
|
-
callbacks: {
|
|
1066
|
-
label: defaultLineTooltipCallback,
|
|
1067
|
-
...userOptions?.plugins?.tooltip?.callbacks,
|
|
1068
|
-
},
|
|
1069
|
-
},
|
|
1070
|
-
},
|
|
1071
|
-
elements: {
|
|
1072
|
-
point: {
|
|
1073
|
-
radius: userOptions.elements?.point?.radius ?? 0,
|
|
1074
|
-
hoverRadius: userOptions.elements?.point?.hoverRadius ?? 0,
|
|
1075
|
-
},
|
|
1076
|
-
line: {
|
|
1077
|
-
tension: userOptions.elements?.line?.tension ?? 0.1,
|
|
1078
|
-
},
|
|
1079
|
-
},
|
|
1080
|
-
scales: stzUtil.merge(defaultScales, userScales),
|
|
1081
|
-
};
|
|
1082
|
-
};
|
|
1083
|
-
|
|
1084
|
-
var LocalDefaults = /*#__PURE__*/Object.freeze({
|
|
1085
|
-
__proto__: null,
|
|
1086
|
-
CreateZoomRangeSlider: CreateZoomRangeSlider,
|
|
1087
|
-
barScaleImgPlugin: barScaleImgPlugin,
|
|
1088
|
-
blinkPlugin: blinkPlugin,
|
|
1089
|
-
changeSetting: changeSetting,
|
|
1090
|
-
chartMountPlugin: chartMountPlugin,
|
|
1091
|
-
createDefaultBarOptions: createDefaultBarOptions,
|
|
1092
|
-
createDefaultLineOptions: createDefaultLineOptions,
|
|
1093
|
-
customLegend: customLegend,
|
|
1094
|
-
defaultBarScales: defaultBarScales,
|
|
1095
|
-
defaultBarTooltipCallback: defaultBarTooltipCallback,
|
|
1096
|
-
defaultLineScales: defaultLineScales,
|
|
1097
|
-
defaultLineTooltipCallback: defaultLineTooltipCallback,
|
|
1098
|
-
doughnutCenterTextPlugin: doughnutCenterTextPlugin,
|
|
1099
|
-
loadingPlugin: loadingPlugin,
|
|
1100
|
-
makeCenterHtml: makeCenterHtml,
|
|
1101
|
-
noDataPlugin: noDataPlugin,
|
|
1102
|
-
zoomRangeSlider: zoomRangeSlider,
|
|
1103
|
-
zoomResetPlugin: zoomResetPlugin
|
|
1104
|
-
});
|
|
1105
|
-
|
|
1106
|
-
class CartesianChartWrapper extends ChartWrapper {
|
|
1107
|
-
type;
|
|
1108
|
-
_chartId;
|
|
1109
|
-
constructor(type, labels, datasets, options, plugins) {
|
|
1110
|
-
super(type, labels, datasets, options, plugins);
|
|
1111
|
-
this.type = type;
|
|
1112
|
-
}
|
|
1113
|
-
get chartId() {
|
|
1114
|
-
if (!this._chartId) {
|
|
1115
|
-
this._chartId = `${this.type}_${Math.random()}`;
|
|
1116
|
-
}
|
|
1117
|
-
return this._chartId;
|
|
1118
|
-
}
|
|
1119
|
-
set chartId(value) {
|
|
1120
|
-
this._chartId = value;
|
|
1121
|
-
if (this.options && typeof this.options === 'object') {
|
|
1122
|
-
this.options._chartId = value;
|
|
1123
|
-
}
|
|
1124
|
-
}
|
|
1125
|
-
// 데이터 라벨 설정 메소드
|
|
1126
|
-
requireLabels() {
|
|
1127
|
-
return false;
|
|
1128
|
-
}
|
|
1129
|
-
// 데이터셋을 장식하는 메소드
|
|
1130
|
-
decorateDataset(ds, idx) {
|
|
1131
|
-
const c = CHART_COLOR[idx % CHART_COLOR.length];
|
|
1132
|
-
ds.backgroundColor ??= c;
|
|
1133
|
-
ds.borderColor ??= c;
|
|
1134
|
-
ds.yAxisID ??= 'y';
|
|
1135
|
-
}
|
|
1136
|
-
mustHavePlugins() {
|
|
1137
|
-
return [chartMountPlugin];
|
|
1138
|
-
}
|
|
1139
|
-
isLine() {
|
|
1140
|
-
return this.type === 'line';
|
|
1141
|
-
}
|
|
1142
|
-
isScatter() {
|
|
1143
|
-
return this.type === 'scatter';
|
|
1144
|
-
}
|
|
1145
|
-
isBar() {
|
|
1146
|
-
return this.type === 'bar';
|
|
1147
|
-
}
|
|
1148
|
-
normalize() {
|
|
1149
|
-
// 필수 플러그인 주입
|
|
1150
|
-
const must = this.mustHavePlugins();
|
|
1151
|
-
if (!this.plugins)
|
|
1152
|
-
this.plugins = [...must];
|
|
1153
|
-
else if (Array.isArray(this.plugins)) {
|
|
1154
|
-
const ids = new Set(this.plugins.map((p) => p.id));
|
|
1155
|
-
must.forEach(p => {
|
|
1156
|
-
if (!ids.has(p.id))
|
|
1157
|
-
this.plugins.push(p);
|
|
1158
|
-
});
|
|
1159
|
-
}
|
|
1160
|
-
else
|
|
1161
|
-
this.plugins = [...must];
|
|
1162
|
-
// 라벨 검증 + 데이터셋 기본값
|
|
1163
|
-
if (this.requireLabels() && (!this.labels || this.labels.length === 0)) {
|
|
1164
|
-
throw new CustomError(ErrorCode.LABELS_REQUIRED);
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1167
|
-
configAop(config) {
|
|
1168
|
-
const handler = {
|
|
1169
|
-
get: (target, prop, receiver) => {
|
|
1170
|
-
if (prop === 'data') {
|
|
1171
|
-
const data = target.data;
|
|
1172
|
-
if (this.requireLabels() && (!data?.labels || data.labels.length === 0)) {
|
|
1173
|
-
throw new CustomError(ErrorCode.LABELS_REQUIRED);
|
|
1174
|
-
}
|
|
1175
|
-
if (data && Array.isArray(data.datasets) && data.datasets.length > 0) {
|
|
1176
|
-
data.datasets = data.datasets.map((ds, idx) => {
|
|
1177
|
-
if (!ds || stzUtil.getType(ds) !== 'object')
|
|
1178
|
-
return ds;
|
|
1179
|
-
this.decorateDataset(ds, idx);
|
|
1180
|
-
return ds;
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
if (prop === 'plugins') {
|
|
1185
|
-
const must = this.mustHavePlugins();
|
|
1186
|
-
if (!target.plugins)
|
|
1187
|
-
target.plugins = [...must];
|
|
1188
|
-
else if (target.options._loading)
|
|
1189
|
-
target.plugins.push(loadingPlugin);
|
|
1190
|
-
else if (stzUtil.getType(target.plugins) === 'Array') {
|
|
1191
|
-
const ids = new Set(target.plugins.map((p) => p.id));
|
|
1192
|
-
must.forEach(p => {
|
|
1193
|
-
if (!ids.has(p.id))
|
|
1194
|
-
target.plugins.push(p);
|
|
1195
|
-
});
|
|
1196
|
-
}
|
|
1197
|
-
else
|
|
1198
|
-
target.plugins = [...must];
|
|
1199
|
-
}
|
|
1200
|
-
return Reflect.get(target, prop, receiver);
|
|
1201
|
-
},
|
|
1202
|
-
};
|
|
1203
|
-
return new Proxy(config, handler);
|
|
1204
|
-
}
|
|
1205
|
-
makeConfig(id = '') {
|
|
1206
|
-
this.normalize();
|
|
1207
|
-
if (id)
|
|
1208
|
-
this.chartId = id;
|
|
1209
|
-
const resolvedId = this.chartId;
|
|
1210
|
-
const config = {
|
|
1211
|
-
_chartId: resolvedId,
|
|
1212
|
-
type: this.type,
|
|
1213
|
-
data: { labels: this.labels, datasets: this.datasets },
|
|
1214
|
-
options: {
|
|
1215
|
-
...this.options,
|
|
1216
|
-
_chartId: id || `${this.type}_${Math.random()}`,
|
|
1217
|
-
},
|
|
1218
|
-
plugins: this.plugins,
|
|
1219
|
-
};
|
|
1220
|
-
const proxied = this.configAop(config);
|
|
1221
|
-
void proxied.data;
|
|
1222
|
-
void proxied.plugins;
|
|
1223
|
-
return {
|
|
1224
|
-
_chartId: proxied._chartId,
|
|
1225
|
-
type: proxied.type,
|
|
1226
|
-
data: proxied.data,
|
|
1227
|
-
options: proxied.options,
|
|
1228
|
-
plugins: proxied.plugins,
|
|
1229
|
-
};
|
|
1230
|
-
}
|
|
1231
|
-
//카테시안 차트 타입인지 확인하는 메소드
|
|
1232
|
-
/**
|
|
1233
|
-
* Cartesian chart type을 체크 합니다.
|
|
1234
|
-
* @private
|
|
1235
|
-
* *
|
|
1236
|
-
* @remarks cartesina 차트의 타입인지 확인합니다
|
|
1237
|
-
* @example
|
|
1238
|
-
* @since 1.0.0
|
|
1239
|
-
* @category Chart
|
|
1240
|
-
* @defaultValue
|
|
1241
|
-
*
|
|
1242
|
-
*/
|
|
1243
|
-
isCartesianChartType() {
|
|
1244
|
-
return ['line', 'bar', 'scatter', 'bubble'].includes(this.type);
|
|
1245
|
-
}
|
|
1246
|
-
// 스케일 설정 메소드
|
|
1247
|
-
/**
|
|
1248
|
-
* 카테시안 차트의 스케일을 설정합니다.
|
|
1249
|
-
* @param scales
|
|
1250
|
-
* *
|
|
1251
|
-
* @remarks 카테시안 차트의 스케일을 설정합니다. 이 메소드는 차트의 축을 정의하는데 사용됩니다.
|
|
1252
|
-
* @example
|
|
1253
|
-
* @since 1.0.0
|
|
1254
|
-
* @category Scales
|
|
1255
|
-
* @defaultValue
|
|
1256
|
-
*
|
|
1257
|
-
*/
|
|
1258
|
-
setScales(scales) {
|
|
1259
|
-
if (this.options && typeof this.options === 'object') {
|
|
1260
|
-
this.options.scales = scales;
|
|
1261
|
-
}
|
|
1262
|
-
return this;
|
|
1263
|
-
}
|
|
1264
|
-
// 축 제목 설정 메소드
|
|
1265
|
-
/**
|
|
1266
|
-
* 카테시안 차트의 축 제목을 설정합니다.
|
|
1267
|
-
* @param axis
|
|
1268
|
-
* @param titleConfig
|
|
1269
|
-
* *
|
|
1270
|
-
* @remarks 원하는 축의 제목을 설정합니다.
|
|
1271
|
-
* @example
|
|
1272
|
-
* @since 1.0.0
|
|
1273
|
-
* @category Scales
|
|
1274
|
-
* @defaultValue
|
|
1275
|
-
*
|
|
1276
|
-
*/
|
|
1277
|
-
setAxisTitle(axis, titleConfig) {
|
|
1278
|
-
if (this.options && typeof this.options === 'object') {
|
|
1279
|
-
const customOptions = this.options;
|
|
1280
|
-
if (!customOptions.scales) {
|
|
1281
|
-
customOptions.scales = {};
|
|
1282
|
-
}
|
|
1283
|
-
if (!customOptions.scales[axis]) {
|
|
1284
|
-
customOptions.scales[axis] = {};
|
|
1285
|
-
}
|
|
1286
|
-
if (customOptions.scales[axis]) {
|
|
1287
|
-
customOptions.scales[axis].title = titleConfig;
|
|
1288
|
-
}
|
|
1289
|
-
}
|
|
1290
|
-
return this;
|
|
1291
|
-
}
|
|
1292
|
-
// 그리드 옵션 설정 메소드
|
|
1293
|
-
/**
|
|
1294
|
-
* 카테시안 차트의 그리드 옵션을 설정합니다.
|
|
1295
|
-
* @param axis
|
|
1296
|
-
* @param gridOptions
|
|
1297
|
-
* *
|
|
1298
|
-
* @remarks 차트 뒷 배경의 그리드(선) 옵션을 설정합니다.
|
|
1299
|
-
* @example
|
|
1300
|
-
* @since 1.0.0
|
|
1301
|
-
* @category Scales
|
|
1302
|
-
* @defaultValue
|
|
1303
|
-
*
|
|
1304
|
-
*/
|
|
1305
|
-
setGridOptions(axis, gridOptions) {
|
|
1306
|
-
if (this.options && typeof this.options === 'object') {
|
|
1307
|
-
const customOptions = this.options;
|
|
1308
|
-
if (!customOptions.scales) {
|
|
1309
|
-
customOptions.scales = {};
|
|
1310
|
-
}
|
|
1311
|
-
if (!customOptions.scales[axis]) {
|
|
1312
|
-
customOptions.scales[axis] = {};
|
|
1313
|
-
}
|
|
1314
|
-
if (customOptions.scales[axis]) {
|
|
1315
|
-
customOptions.scales[axis].grid = {
|
|
1316
|
-
...customOptions.scales[axis].grid,
|
|
1317
|
-
...gridOptions,
|
|
1318
|
-
};
|
|
1319
|
-
}
|
|
1320
|
-
}
|
|
1321
|
-
return this;
|
|
1322
|
-
}
|
|
1323
|
-
/**
|
|
1324
|
-
* 줌 기능을 추가합니다.
|
|
1325
|
-
* @param defaultZoom
|
|
1326
|
-
* @param zoomOption
|
|
1327
|
-
* *
|
|
1328
|
-
* @remarks 차트의 줌 기능을 추가합니다. 해당 기능은 플러그인 설치가 필요합니다.
|
|
1329
|
-
* @example
|
|
1330
|
-
* @since 1.0.0
|
|
1331
|
-
* @category Plugins
|
|
1332
|
-
* @defaultValue defaultZoom = false
|
|
1333
|
-
*
|
|
1334
|
-
*/
|
|
1335
|
-
addZoom(defaultZoom = false, zoomOption) {
|
|
1336
|
-
if (stzUtil.isEmpty(this.options))
|
|
1337
|
-
return this;
|
|
1338
|
-
const customOptions = this.options;
|
|
1339
|
-
if (stzUtil.isEmpty(customOptions.plugins)) {
|
|
1340
|
-
customOptions.plugins = {};
|
|
1341
|
-
}
|
|
1342
|
-
const zoomConfig = defaultZoom ? stzUtil.cloneDeep(DefaultZoomOptions) : stzUtil.cloneDeep(zoomOption);
|
|
1343
|
-
customOptions.plugins.zoom = stzUtil.merge(customOptions.plugins.zoom || {}, zoomConfig);
|
|
1344
|
-
if (!this.plugins) {
|
|
1345
|
-
this.plugins = [zoomResetPlugin];
|
|
1346
|
-
}
|
|
1347
|
-
else if (Array.isArray(this.plugins)) {
|
|
1348
|
-
const exists = this.plugins.some((p) => p && p.id === zoomResetPlugin.id);
|
|
1349
|
-
if (!exists)
|
|
1350
|
-
this.plugins.push(zoomResetPlugin);
|
|
1351
|
-
}
|
|
1352
|
-
else {
|
|
1353
|
-
this.plugins = [zoomResetPlugin];
|
|
1354
|
-
}
|
|
1355
|
-
return this;
|
|
1356
|
-
}
|
|
1357
|
-
/**
|
|
1358
|
-
* 데이터 라벨 플러그인을 추가합니다.
|
|
1359
|
-
* @param defultDataLabels
|
|
1360
|
-
* @param dataLabelsOptions
|
|
1361
|
-
* @Description 차트에 데이터 라벨을 추가합니다. 기본 옵션을 사용하거나 사용자 정의 옵션을 적용할 수 있습니다.
|
|
1362
|
-
* @Category Plugins
|
|
1363
|
-
* @since 1.0.0
|
|
1364
|
-
* @defaultValue defultDataLabels = false
|
|
1365
|
-
*/
|
|
1366
|
-
addDataLabels(defultDataLabels = false, dataLabelsOptions) {
|
|
1367
|
-
if (stzUtil.isEmpty(this.options))
|
|
1368
|
-
return this;
|
|
1369
|
-
const customOptions = this.options;
|
|
1370
|
-
if (stzUtil.isEmpty(customOptions.plugins)) {
|
|
1371
|
-
customOptions.plugins = {};
|
|
1372
|
-
}
|
|
1373
|
-
const dataLabelsConfig = defultDataLabels
|
|
1374
|
-
? stzUtil.cloneDeep(DefaultDataLabelsOptions)
|
|
1375
|
-
: stzUtil.cloneDeep(dataLabelsOptions);
|
|
1376
|
-
customOptions.plugins.datalabels = dataLabelsConfig;
|
|
1377
|
-
return this;
|
|
1378
|
-
}
|
|
1379
|
-
/**
|
|
1380
|
-
* 데이터셋에 y축을 설정합니다.
|
|
1381
|
-
* @param datasetIndex
|
|
1382
|
-
* @param axisId
|
|
1383
|
-
* *
|
|
1384
|
-
* @remarks 각 데이터셋의 축을 설정합니다.
|
|
1385
|
-
* @example
|
|
1386
|
-
* @since 1.0.0
|
|
1387
|
-
* @category Scales
|
|
1388
|
-
* @defaultValue axisId = 'y'
|
|
1389
|
-
*
|
|
1390
|
-
*/
|
|
1391
|
-
setYAxisForDataset(datasetIndex, axisId = 'y') {
|
|
1392
|
-
if (!this.datasets || !this.datasets[datasetIndex])
|
|
1393
|
-
return this;
|
|
1394
|
-
if (this.isCartesianChartType()) {
|
|
1395
|
-
this.datasets[datasetIndex].yAxisID = axisId;
|
|
1396
|
-
if (axisId === 'y1') {
|
|
1397
|
-
this.ensureY1AxisExists();
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1400
|
-
return this;
|
|
1401
|
-
}
|
|
1402
|
-
// y1 스케일이 없으면 기본 구조로 추가
|
|
1403
|
-
/**
|
|
1404
|
-
* y1 축을 보장합니다.
|
|
1405
|
-
* @private
|
|
1406
|
-
* *
|
|
1407
|
-
* @remarks y1 축이 없을 경우 기본 구조를 추가합니다. 이 메소드는 y1 축을 사용하는 차트에서 필요합니다.
|
|
1408
|
-
* @example
|
|
1409
|
-
* @since 1.0.0
|
|
1410
|
-
* @category Scales
|
|
1411
|
-
* @defaultValue
|
|
1412
|
-
*
|
|
1413
|
-
*/
|
|
1414
|
-
ensureY1AxisExists() {
|
|
1415
|
-
const options = this.options;
|
|
1416
|
-
if (typeof options !== 'object')
|
|
1417
|
-
return;
|
|
1418
|
-
if (!options.scales)
|
|
1419
|
-
options.scales = {};
|
|
1420
|
-
if (!('y1' in options.scales)) {
|
|
1421
|
-
options.scales['y1'] = {
|
|
1422
|
-
type: 'linear',
|
|
1423
|
-
display: true,
|
|
1424
|
-
position: 'right',
|
|
1425
|
-
grid: {
|
|
1426
|
-
drawOnChartArea: false,
|
|
1427
|
-
},
|
|
1428
|
-
ticks: {
|
|
1429
|
-
color: '#000',
|
|
1430
|
-
align: 'start',
|
|
1431
|
-
},
|
|
1432
|
-
};
|
|
1433
|
-
}
|
|
1434
|
-
}
|
|
1435
|
-
// 축 범위 설정 메소드
|
|
1436
|
-
/**
|
|
1437
|
-
* 카테시안 차트의 축 범위를 설정합니다.
|
|
1438
|
-
* @param axis
|
|
1439
|
-
* @param min
|
|
1440
|
-
* @param max
|
|
1441
|
-
*
|
|
1442
|
-
* *
|
|
1443
|
-
* @remarks 해당 차트의 스케일을 min, max 를 입력 받은 값으로 고정합니다.
|
|
1444
|
-
* @example
|
|
1445
|
-
* @since 1.0.0
|
|
1446
|
-
* @category Scales
|
|
1447
|
-
* @defaultValue
|
|
1448
|
-
*
|
|
1449
|
-
*/
|
|
1450
|
-
setAxisRange(axis, min, max) {
|
|
1451
|
-
if (this.options && typeof this.options === 'object') {
|
|
1452
|
-
const customOptions = this.options;
|
|
1453
|
-
if (!customOptions.scales) {
|
|
1454
|
-
customOptions.scales = {};
|
|
1455
|
-
}
|
|
1456
|
-
if (!customOptions.scales[axis]) {
|
|
1457
|
-
customOptions.scales[axis] = {};
|
|
1458
|
-
}
|
|
1459
|
-
if (customOptions.scales[axis]) {
|
|
1460
|
-
if (min !== undefined) {
|
|
1461
|
-
customOptions.scales[axis].min = min;
|
|
1462
|
-
}
|
|
1463
|
-
if (max !== undefined) {
|
|
1464
|
-
customOptions.scales[axis].max = max;
|
|
1465
|
-
}
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
return this;
|
|
1469
|
-
}
|
|
1470
|
-
/**
|
|
1471
|
-
* 데이터셋의 yAxisID를 설정합니다.
|
|
1472
|
-
* @param datasetIndex
|
|
1473
|
-
* @param axisID
|
|
1474
|
-
* *
|
|
1475
|
-
* @remarks 각 데이터셋의 축 아이디를 변경합니다.
|
|
1476
|
-
* @example
|
|
1477
|
-
* @since 1.0.0
|
|
1478
|
-
* @category Scales
|
|
1479
|
-
* @defaultValue
|
|
1480
|
-
*
|
|
1481
|
-
*/
|
|
1482
|
-
setYAxisID(datasetIndex, axisID) {
|
|
1483
|
-
const Y_AXIS_SUPPORTED_TYPES = ['bar', 'line', 'scatter', 'bubble'];
|
|
1484
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1485
|
-
if (Y_AXIS_SUPPORTED_TYPES.includes(this.type)) {
|
|
1486
|
-
this.datasets[datasetIndex].yAxisID = axisID;
|
|
1487
|
-
}
|
|
1488
|
-
else {
|
|
1489
|
-
throw new CustomError(ErrorCode.NOT_SUPPORTED_OPTION, `${this.type} support yAxisId option`);
|
|
1490
|
-
}
|
|
1491
|
-
}
|
|
1492
|
-
return this;
|
|
1493
|
-
}
|
|
1494
|
-
/**
|
|
1495
|
-
* 축의 위치를 설정합니다.
|
|
1496
|
-
* @param axis
|
|
1497
|
-
* @param position
|
|
1498
|
-
* *
|
|
1499
|
-
* @remarks 해당하는 축의 위치를 변경합니다.
|
|
1500
|
-
* @example
|
|
1501
|
-
* @since 1.0.0
|
|
1502
|
-
* @category Scales
|
|
1503
|
-
* @defaultValue
|
|
1504
|
-
*
|
|
1505
|
-
*/
|
|
1506
|
-
setAxisPosition(axis, position) {
|
|
1507
|
-
if (this.options && this.options.scales && this.options.scales[axis]) {
|
|
1508
|
-
const scale = this.options.scales[axis];
|
|
1509
|
-
if ('position' in scale) {
|
|
1510
|
-
scale.position = position;
|
|
1511
|
-
}
|
|
1512
|
-
else {
|
|
1513
|
-
throw new CustomError(ErrorCode.NOT_SUPPORTED_OPTION, `${this.options.scales} not support scales position `);
|
|
1514
|
-
}
|
|
1515
|
-
}
|
|
1516
|
-
return this;
|
|
1517
|
-
}
|
|
1518
|
-
/**
|
|
1519
|
-
* 축에 이미지를 추가합니다.
|
|
1520
|
-
* @param {string} axis
|
|
1521
|
-
* @Deprecated
|
|
1522
|
-
*/
|
|
1523
|
-
setAddImg(axis) {
|
|
1524
|
-
if (!this.options) {
|
|
1525
|
-
this.options = {};
|
|
1526
|
-
}
|
|
1527
|
-
const customOptions = this.options;
|
|
1528
|
-
if (!customOptions.scales) {
|
|
1529
|
-
customOptions.scales = {};
|
|
1530
|
-
}
|
|
1531
|
-
if (customOptions.scales[axis]) {
|
|
1532
|
-
console.warn(`Axis "${axis}" already exists`);
|
|
1533
|
-
return this;
|
|
1534
|
-
}
|
|
1535
|
-
if (!this.datasets || this.datasets.length === 0) {
|
|
1536
|
-
throw new CustomError(ErrorCode.DATASET_REQUIRED);
|
|
1537
|
-
}
|
|
1538
|
-
const customDatasets = this.datasets;
|
|
1539
|
-
for (let i = 0; i < customDatasets.length; i++) {
|
|
1540
|
-
const dataset = customDatasets[i];
|
|
1541
|
-
if (!dataset) {
|
|
1542
|
-
throw new CustomError(ErrorCode.EMPTY_REQUIRED_PROPERTY, `Dataset at index ${i} is null or undefined`);
|
|
1543
|
-
}
|
|
1544
|
-
if (!dataset.image && (!dataset.images || dataset.images.length === 0)) {
|
|
1545
|
-
throw new CustomError(ErrorCode.IMAGE_PROPERTY_MISSING, `Dataset "${dataset.label || `#${i}`}" has no image property`);
|
|
1546
|
-
}
|
|
1547
|
-
}
|
|
1548
|
-
const isXAxis = axis.startsWith('x');
|
|
1549
|
-
if (isXAxis) {
|
|
1550
|
-
const xImagePlugin = {
|
|
1551
|
-
//...xScalesImage,
|
|
1552
|
-
id: `${axis}ScalesImage-${this._chartId}`,
|
|
1553
|
-
};
|
|
1554
|
-
this.setPlugin(xImagePlugin);
|
|
1555
|
-
}
|
|
1556
|
-
else {
|
|
1557
|
-
const yImagePlugin = {
|
|
1558
|
-
//...yScalesImage,
|
|
1559
|
-
id: `${axis}ScalesImage-${this._chartId}`,
|
|
1560
|
-
};
|
|
1561
|
-
this.setPlugin(yImagePlugin);
|
|
1562
|
-
}
|
|
1563
|
-
return this;
|
|
1564
|
-
}
|
|
1565
|
-
/**
|
|
1566
|
-
* 범위 슬라이더를 추가합니다.
|
|
1567
|
-
* @param options - 슬라이더 커스터마이징 옵션
|
|
1568
|
-
* @Deprecated
|
|
1569
|
-
*/
|
|
1570
|
-
addRangeSlider(colors) {
|
|
1571
|
-
const rangeSliderPlugin = CreateZoomRangeSlider(colors);
|
|
1572
|
-
this.setPlugin(rangeSliderPlugin);
|
|
1573
|
-
return this;
|
|
1574
|
-
}
|
|
1575
|
-
setPadding(padding) {
|
|
1576
|
-
if (!this.options) {
|
|
1577
|
-
this.options = {};
|
|
1578
|
-
}
|
|
1579
|
-
const customOptions = this.options;
|
|
1580
|
-
if (!customOptions.layout) {
|
|
1581
|
-
customOptions.layout = {};
|
|
1582
|
-
}
|
|
1583
|
-
customOptions.layout.padding = padding;
|
|
1584
|
-
return this;
|
|
1585
|
-
}
|
|
1586
|
-
setBackgroundAlpha(alpha) {
|
|
1587
|
-
if (alpha < 0 || alpha > 1) {
|
|
1588
|
-
throw new CustomError(ErrorCode.UNKNOWN_ERROR, 'Alpha value must be between 0.0 and 1.0');
|
|
1589
|
-
}
|
|
1590
|
-
if (!this.datasets || this.datasets.length === 0) {
|
|
1591
|
-
return this;
|
|
1592
|
-
}
|
|
1593
|
-
this.datasets.forEach(dataset => {
|
|
1594
|
-
if (dataset) {
|
|
1595
|
-
if (!dataset.backgroundColor && dataset.borderColor) {
|
|
1596
|
-
dataset.backgroundColor = dataset.borderColor;
|
|
1597
|
-
}
|
|
1598
|
-
if (dataset.backgroundColor) {
|
|
1599
|
-
if (typeof dataset.backgroundColor === 'string') {
|
|
1600
|
-
dataset.backgroundColor = this.addAlphaToColor(dataset.backgroundColor, alpha);
|
|
1601
|
-
}
|
|
1602
|
-
else if (Array.isArray(dataset.backgroundColor)) {
|
|
1603
|
-
dataset.backgroundColor = dataset.backgroundColor.map(color => typeof color === 'string' ? this.addAlphaToColor(color, alpha) : color);
|
|
1604
|
-
}
|
|
1605
|
-
}
|
|
1606
|
-
}
|
|
1607
|
-
});
|
|
1608
|
-
return this;
|
|
1609
|
-
}
|
|
1610
|
-
/**
|
|
1611
|
-
* 색상에 알파 값을 추가합니다.
|
|
1612
|
-
* @param color
|
|
1613
|
-
* @param alpha
|
|
1614
|
-
* @private
|
|
1615
|
-
*/
|
|
1616
|
-
addAlphaToColor(color, alpha) {
|
|
1617
|
-
if (color.startsWith('#')) {
|
|
1618
|
-
const hex = color.slice(1);
|
|
1619
|
-
let r, g, b;
|
|
1620
|
-
if (hex.length === 3) {
|
|
1621
|
-
r = parseInt(hex[0] + hex[0], 16);
|
|
1622
|
-
g = parseInt(hex[1] + hex[1], 16);
|
|
1623
|
-
b = parseInt(hex[2] + hex[2], 16);
|
|
1624
|
-
}
|
|
1625
|
-
else if (hex.length === 6) {
|
|
1626
|
-
r = parseInt(hex.slice(0, 2), 16);
|
|
1627
|
-
g = parseInt(hex.slice(2, 4), 16);
|
|
1628
|
-
b = parseInt(hex.slice(4, 6), 16);
|
|
1629
|
-
}
|
|
1630
|
-
else {
|
|
1631
|
-
return color; // 잘못된 hex 형식
|
|
1632
|
-
}
|
|
1633
|
-
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
1634
|
-
}
|
|
1635
|
-
// rgb 색상인 경우 (rgb(255, 255, 255))
|
|
1636
|
-
const rgbMatch = color.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
|
1637
|
-
if (rgbMatch) {
|
|
1638
|
-
const [, r, g, b] = rgbMatch;
|
|
1639
|
-
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
1640
|
-
}
|
|
1641
|
-
// rgba 색상인 경우 (rgba(255, 255, 255, 0.5))
|
|
1642
|
-
const rgbaMatch = color.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([0-9.]+)\)/);
|
|
1643
|
-
if (rgbaMatch) {
|
|
1644
|
-
const [, r, g, b] = rgbaMatch;
|
|
1645
|
-
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
1646
|
-
}
|
|
1647
|
-
// 색상 이름이나 다른 형식인 경우 그대로 반환
|
|
1648
|
-
return color;
|
|
1649
|
-
}
|
|
1650
|
-
/**
|
|
1651
|
-
*
|
|
1652
|
-
* @param {string | false} xAxisKey
|
|
1653
|
-
* @param {string | false} yAxisKey
|
|
1654
|
-
* @description
|
|
1655
|
-
* @Category options
|
|
1656
|
-
* @Since 1.0.0
|
|
1657
|
-
*/
|
|
1658
|
-
setParsingKey(xAxisKey, yAxisKey) {
|
|
1659
|
-
if (this.options && stzUtil.getType(this.options) === 'Object') {
|
|
1660
|
-
const opts = this.options;
|
|
1661
|
-
opts.parsing =
|
|
1662
|
-
xAxisKey !== false || yAxisKey !== false
|
|
1663
|
-
? {
|
|
1664
|
-
...(xAxisKey !== false && { xAxisKey }),
|
|
1665
|
-
...(yAxisKey !== false && { yAxisKey }),
|
|
1666
|
-
}
|
|
1667
|
-
: false;
|
|
1668
|
-
}
|
|
1669
|
-
return this;
|
|
1670
|
-
}
|
|
1671
|
-
setDatasetParsing(datasetIndex, xAxisKey, yAxisKey) {
|
|
1672
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1673
|
-
const parsing = {};
|
|
1674
|
-
if (xAxisKey !== false)
|
|
1675
|
-
parsing['xAxisKey'] = xAxisKey;
|
|
1676
|
-
if (yAxisKey !== false)
|
|
1677
|
-
parsing['yAxisKey'] = yAxisKey;
|
|
1678
|
-
this.datasets[datasetIndex].parsing = parsing;
|
|
1679
|
-
}
|
|
1680
|
-
return this;
|
|
1681
|
-
}
|
|
1682
|
-
setAllDatasetsParsing(xAxisKey, yAxisKey) {
|
|
1683
|
-
if (this.datasets) {
|
|
1684
|
-
const parsing = {};
|
|
1685
|
-
if (xAxisKey !== false)
|
|
1686
|
-
parsing['xAxisKey'] = xAxisKey;
|
|
1687
|
-
if (yAxisKey !== false)
|
|
1688
|
-
parsing['yAxisKey'] = yAxisKey;
|
|
1689
|
-
this.datasets.forEach(dataset => {
|
|
1690
|
-
dataset.parsing = parsing;
|
|
1691
|
-
});
|
|
1692
|
-
}
|
|
1693
|
-
return this;
|
|
1694
|
-
}
|
|
1695
|
-
customLegend(obj) {
|
|
1696
|
-
if (!stzUtil.isEmpty(this.options) && stzUtil.getType(this.options) === 'Object') {
|
|
1697
|
-
const customOptions = this.options;
|
|
1698
|
-
if (!customOptions.plugins) {
|
|
1699
|
-
customOptions.plugins = {};
|
|
1700
|
-
}
|
|
1701
|
-
customOptions.plugins.htmlLegend = obj;
|
|
1702
|
-
this.setPlugin(customLegend);
|
|
1703
|
-
console.log(this.options);
|
|
1704
|
-
}
|
|
1705
|
-
else {
|
|
1706
|
-
throw new CustomError(ErrorCode.UNKNOWN_ERROR, 'Options is empty');
|
|
1707
|
-
}
|
|
1708
|
-
return this;
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
|
|
1712
|
-
var ChartTypes;
|
|
1713
|
-
(function (ChartTypes) {
|
|
1714
|
-
ChartTypes["BAR"] = "bar";
|
|
1715
|
-
ChartTypes["LINE"] = "line";
|
|
1716
|
-
ChartTypes["DOUGHNUT"] = "doughnut";
|
|
1717
|
-
ChartTypes["PIE"] = "pie";
|
|
1718
|
-
ChartTypes["RADAR"] = "radar";
|
|
1719
|
-
ChartTypes["BUBBLE"] = "bubble";
|
|
1720
|
-
ChartTypes["SCATTER"] = "scatter";
|
|
1721
|
-
ChartTypes["TREE"] = "tree";
|
|
1722
|
-
})(ChartTypes || (ChartTypes = {}));
|
|
1723
|
-
|
|
1724
|
-
class ChartFactory {
|
|
1725
|
-
static registry = new Map();
|
|
1726
|
-
static register(type, wrapperClass) {
|
|
1727
|
-
this.registry.set(type, wrapperClass);
|
|
1728
|
-
}
|
|
1729
|
-
static create(type, ...args) {
|
|
1730
|
-
const WrapperClass = this.registry.get(type);
|
|
1731
|
-
if (!WrapperClass)
|
|
1732
|
-
throw new CustomError(ErrorCode.NOT_REGISTERED_CHART_TYPE);
|
|
1733
|
-
return new WrapperClass(...args);
|
|
1734
|
-
}
|
|
1735
|
-
static has(type) {
|
|
1736
|
-
return this.registry.has(type);
|
|
1737
|
-
}
|
|
1738
|
-
static clear() {
|
|
1739
|
-
this.registry.clear();
|
|
1740
|
-
}
|
|
1741
|
-
}
|
|
1742
|
-
|
|
1743
|
-
class BarChartWrapper extends CartesianChartWrapper {
|
|
1744
|
-
constructor(type, labels, datasets, options, plugins) {
|
|
1745
|
-
const mergedScales = {
|
|
1746
|
-
...defaultBarScales,
|
|
1747
|
-
...(options?.scales ?? {}),
|
|
1748
|
-
};
|
|
1749
|
-
const defaultOptions = createDefaultBarOptions(options, mergedScales);
|
|
1750
|
-
super(type, labels, datasets, defaultOptions, plugins);
|
|
1751
|
-
ChartFactory.register(ChartTypes.BAR, BarChartWrapper);
|
|
1752
|
-
}
|
|
1753
|
-
requireLabels() {
|
|
1754
|
-
return false;
|
|
1755
|
-
}
|
|
1756
|
-
makeConfig(id) {
|
|
1757
|
-
return super.makeConfig(id);
|
|
1758
|
-
}
|
|
1759
|
-
/**
|
|
1760
|
-
*
|
|
1761
|
-
* @param {number} datasetIndex
|
|
1762
|
-
* @param {number} thickness
|
|
1763
|
-
* @description 데이터셋의 Bar Thickness를 설정합니다.
|
|
1764
|
-
* @Since 1.0.0
|
|
1765
|
-
* @category dataset
|
|
1766
|
-
*/
|
|
1767
|
-
setBarThickness(datasetIndex, thickness) {
|
|
1768
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1769
|
-
this.datasets[datasetIndex].barThickness = thickness;
|
|
1770
|
-
}
|
|
1771
|
-
return this;
|
|
1772
|
-
}
|
|
1773
|
-
/**
|
|
1774
|
-
*
|
|
1775
|
-
* @param {number} thickness
|
|
1776
|
-
* @description 모든 데이터셋의 Bar Thickness를 설정합니다.
|
|
1777
|
-
* @Since 1.0.0
|
|
1778
|
-
* @category dataset
|
|
1779
|
-
*/
|
|
1780
|
-
setAllBarThickness(thickness) {
|
|
1781
|
-
if (this.datasets) {
|
|
1782
|
-
this.datasets.forEach((dataset, index) => {
|
|
1783
|
-
this.setBarThickness(index, thickness);
|
|
1784
|
-
});
|
|
1785
|
-
}
|
|
1786
|
-
return this;
|
|
1787
|
-
}
|
|
1788
|
-
// Max Bar Thickness 설정
|
|
1789
|
-
/**
|
|
1790
|
-
*
|
|
1791
|
-
* @param {number} datasetIndex
|
|
1792
|
-
* @param {number} maxThickness
|
|
1793
|
-
* @description 데이터셋의 Max Bar Thickness를 설정합니다.
|
|
1794
|
-
* @Since 1.0.0
|
|
1795
|
-
* @category dataset
|
|
1796
|
-
*/
|
|
1797
|
-
setMaxBarThickness(datasetIndex, maxThickness) {
|
|
1798
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1799
|
-
this.datasets[datasetIndex].maxBarThickness = maxThickness;
|
|
1800
|
-
}
|
|
1801
|
-
return this;
|
|
1802
|
-
}
|
|
1803
|
-
// 모든 데이터셋의 Max Bar Thickness 설정
|
|
1804
|
-
/**
|
|
1805
|
-
*
|
|
1806
|
-
* @param {number} maxThickness
|
|
1807
|
-
* @description 모든 데이터셋의 Max Bar Thickness를 설정합니다.
|
|
1808
|
-
* @Since 1.0.0
|
|
1809
|
-
* @category dataset
|
|
1810
|
-
*/
|
|
1811
|
-
setAllMaxBarThickness(maxThickness) {
|
|
1812
|
-
if (this.datasets) {
|
|
1813
|
-
this.datasets.forEach((dataset, index) => {
|
|
1814
|
-
this.setMaxBarThickness(index, maxThickness);
|
|
1815
|
-
});
|
|
1816
|
-
}
|
|
1817
|
-
return this;
|
|
1818
|
-
}
|
|
1819
|
-
// Bar Percentage 설정 (바 사이의 간격)
|
|
1820
|
-
/**
|
|
1821
|
-
*
|
|
1822
|
-
* @param {number} datasetIndex
|
|
1823
|
-
* @param {number} percentage
|
|
1824
|
-
* @description 데이터셋의 Bar Percentage를 설정합니다.
|
|
1825
|
-
* @Since 1.0.0
|
|
1826
|
-
* @category dataset
|
|
1827
|
-
*/
|
|
1828
|
-
setBarPercentage(datasetIndex, percentage) {
|
|
1829
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1830
|
-
this.datasets[datasetIndex].barPercentage = percentage;
|
|
1831
|
-
}
|
|
1832
|
-
return this;
|
|
1833
|
-
}
|
|
1834
|
-
/**
|
|
1835
|
-
*
|
|
1836
|
-
* @param {number} percentage
|
|
1837
|
-
* @description 모든 데이터셋의 Bar Percentage를 설정합니다.
|
|
1838
|
-
* @Since 1.0.0
|
|
1839
|
-
* @category dataset
|
|
1840
|
-
*/
|
|
1841
|
-
setAllBarPercentage(percentage) {
|
|
1842
|
-
if (this.datasets) {
|
|
1843
|
-
this.datasets.forEach((dataset, index) => {
|
|
1844
|
-
this.setBarPercentage(index, percentage);
|
|
1845
|
-
});
|
|
1846
|
-
}
|
|
1847
|
-
return this;
|
|
1848
|
-
}
|
|
1849
|
-
// Category Percentage 설정 (카테고리 간격)
|
|
1850
|
-
/**
|
|
1851
|
-
*
|
|
1852
|
-
* @param {number} datasetIndex
|
|
1853
|
-
* @param {number} percentage
|
|
1854
|
-
* @description 데이터셋의 Category Percentage를 설정합니다.
|
|
1855
|
-
* @Since 1.0.0
|
|
1856
|
-
* @category dataset
|
|
1857
|
-
*/
|
|
1858
|
-
setCategoryPercentage(datasetIndex, percentage) {
|
|
1859
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1860
|
-
this.datasets[datasetIndex].categoryPercentage = percentage;
|
|
1861
|
-
}
|
|
1862
|
-
return this;
|
|
1863
|
-
}
|
|
1864
|
-
/**
|
|
1865
|
-
*
|
|
1866
|
-
* @param {number} percentage
|
|
1867
|
-
* @description 모든 데이터셋의 Category Percentage를 설정합니다.
|
|
1868
|
-
* @Since 1.0.0
|
|
1869
|
-
* @category dataset
|
|
1870
|
-
*/
|
|
1871
|
-
setAllCategoryPercentage(percentage) {
|
|
1872
|
-
if (this.datasets) {
|
|
1873
|
-
this.datasets.forEach((dataset, index) => {
|
|
1874
|
-
this.setCategoryPercentage(index, percentage);
|
|
1875
|
-
});
|
|
1876
|
-
}
|
|
1877
|
-
return this;
|
|
1878
|
-
}
|
|
1879
|
-
/**
|
|
1880
|
-
*
|
|
1881
|
-
* @param {number} datasetIndex
|
|
1882
|
-
* @param {number} borderWidth
|
|
1883
|
-
* @description 데이터셋의 Border Width 설정합니다.
|
|
1884
|
-
* @Since 1.0.0
|
|
1885
|
-
* @category dataset
|
|
1886
|
-
*/
|
|
1887
|
-
setBorderWidth(datasetIndex, borderWidth) {
|
|
1888
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1889
|
-
this.datasets[datasetIndex].borderWidth = borderWidth;
|
|
1890
|
-
}
|
|
1891
|
-
return this;
|
|
1892
|
-
}
|
|
1893
|
-
/**
|
|
1894
|
-
*
|
|
1895
|
-
* @param {number} borderWidth
|
|
1896
|
-
* @description 모든 데이터셋의 Border Width 설정합니다.
|
|
1897
|
-
* @Since 1.0.0
|
|
1898
|
-
* @category dataset
|
|
1899
|
-
*/
|
|
1900
|
-
setAllBorderWidth(borderWidth) {
|
|
1901
|
-
if (this.datasets) {
|
|
1902
|
-
this.datasets.forEach(dataset => {
|
|
1903
|
-
dataset.borderWidth = borderWidth;
|
|
1904
|
-
});
|
|
1905
|
-
}
|
|
1906
|
-
return this;
|
|
1907
|
-
}
|
|
1908
|
-
/**
|
|
1909
|
-
*
|
|
1910
|
-
* @param {number} datasetIndex
|
|
1911
|
-
* @param {number} borderRadius
|
|
1912
|
-
* @description 데이터셋의 Border Radius 를 설정합니다.
|
|
1913
|
-
* @Since 1.0.0
|
|
1914
|
-
* @category dataset
|
|
1915
|
-
*/
|
|
1916
|
-
setBorderRadius(datasetIndex, borderRadius) {
|
|
1917
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
1918
|
-
this.datasets[datasetIndex].borderRadius = borderRadius;
|
|
1919
|
-
}
|
|
1920
|
-
return this;
|
|
1921
|
-
}
|
|
1922
|
-
// 모든 데이터셋의 Border Radius 설정
|
|
1923
|
-
/**
|
|
1924
|
-
*
|
|
1925
|
-
* @param {number} borderRadius
|
|
1926
|
-
* @description 모든 데이터셋의 Border Radius 를 설정합니다.
|
|
1927
|
-
* @Since 1.0.0
|
|
1928
|
-
* @category dataset
|
|
1929
|
-
*/
|
|
1930
|
-
setAllBorderRadius(borderRadius) {
|
|
1931
|
-
if (this.datasets) {
|
|
1932
|
-
this.datasets.forEach((dataset, index) => {
|
|
1933
|
-
this.setBorderRadius(index, borderRadius);
|
|
1934
|
-
});
|
|
1935
|
-
}
|
|
1936
|
-
return this;
|
|
1937
|
-
}
|
|
1938
|
-
/**
|
|
1939
|
-
*
|
|
1940
|
-
* @param {boolean} isStacked
|
|
1941
|
-
* @description 모든 축에 대해 Stacked 옵션을 설정합니다.
|
|
1942
|
-
* @Since 1.0.0
|
|
1943
|
-
* @category scales
|
|
1944
|
-
*/
|
|
1945
|
-
setStacked(isStacked) {
|
|
1946
|
-
const scales = this.options?.scales;
|
|
1947
|
-
if (!scales)
|
|
1948
|
-
return this;
|
|
1949
|
-
Object.entries(scales).forEach(([axis, axisOptions]) => {
|
|
1950
|
-
if (axisOptions && typeof axisOptions === 'object') {
|
|
1951
|
-
axisOptions.stacked = isStacked;
|
|
1952
|
-
}
|
|
1953
|
-
});
|
|
1954
|
-
return this;
|
|
1955
|
-
}
|
|
1956
|
-
/**
|
|
1957
|
-
*
|
|
1958
|
-
* @param {string} axis
|
|
1959
|
-
* @description 축에 이미지를 설정합니다. 축이 이미 존재하는 경우 경고 메시지를 출력합니다.
|
|
1960
|
-
* @Since 1.0.0
|
|
1961
|
-
* @category plugins
|
|
1962
|
-
* @Returns {this}
|
|
1963
|
-
*/
|
|
1964
|
-
setBarImg(axis) {
|
|
1965
|
-
if (stzUtil.isEmpty(this.datasets))
|
|
1966
|
-
return this;
|
|
1967
|
-
if (!this.options) {
|
|
1968
|
-
this.options = {};
|
|
1969
|
-
}
|
|
1970
|
-
const customOptions = this.options;
|
|
1971
|
-
if (!customOptions.scales) {
|
|
1972
|
-
customOptions.scales = {};
|
|
1973
|
-
}
|
|
1974
|
-
if (stzUtil.isEmpty(customOptions.scales[axis])) {
|
|
1975
|
-
return this;
|
|
1976
|
-
}
|
|
1977
|
-
this.plugins?.push(barScaleImgPlugin);
|
|
1978
|
-
return this;
|
|
1979
|
-
}
|
|
1980
|
-
}
|
|
1981
|
-
|
|
1982
|
-
class LineChartWrapper extends CartesianChartWrapper {
|
|
1983
|
-
constructor(type, labels, datasets, options) {
|
|
1984
|
-
const mergedScales = {
|
|
1985
|
-
...defaultLineScales,
|
|
1986
|
-
...(options?.scales ?? {}),
|
|
1987
|
-
};
|
|
1988
|
-
const defaultOptions = createDefaultLineOptions(options, mergedScales);
|
|
1989
|
-
super(type, labels, datasets, defaultOptions);
|
|
1990
|
-
ChartFactory.register(type, LineChartWrapper);
|
|
1991
|
-
}
|
|
1992
|
-
requireLabels() {
|
|
1993
|
-
return this.options?.scales?.x?.type === 'category';
|
|
1994
|
-
}
|
|
1995
|
-
makeConfig(id) {
|
|
1996
|
-
return super.makeConfig(id);
|
|
1997
|
-
}
|
|
1998
|
-
/**
|
|
1999
|
-
*
|
|
2000
|
-
* @param {number} datasetIndex
|
|
2001
|
-
* @param {boolean} enable
|
|
2002
|
-
* @param {string} backgroundColor
|
|
2003
|
-
* @description 데이터셋의 Fill 설정을 합니다.
|
|
2004
|
-
* @Since 1.0.0
|
|
2005
|
-
* @category dataset
|
|
2006
|
-
*/
|
|
2007
|
-
setFill(datasetIndex, enable, backgroundColor) {
|
|
2008
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
2009
|
-
if (enable) {
|
|
2010
|
-
this.datasets[datasetIndex].fill = 'origin';
|
|
2011
|
-
if (backgroundColor) {
|
|
2012
|
-
this.datasets[datasetIndex].backgroundColor = backgroundColor;
|
|
2013
|
-
}
|
|
2014
|
-
else if (!this.datasets[datasetIndex].backgroundColor) {
|
|
2015
|
-
this.datasets[datasetIndex].backgroundColor = 'rgba(75, 192, 192, 0.2)';
|
|
2016
|
-
}
|
|
2017
|
-
}
|
|
2018
|
-
else {
|
|
2019
|
-
this.datasets[datasetIndex].fill = false;
|
|
2020
|
-
}
|
|
2021
|
-
}
|
|
2022
|
-
return this;
|
|
2023
|
-
}
|
|
2024
|
-
/**
|
|
2025
|
-
*
|
|
2026
|
-
* @param {boolean} enable
|
|
2027
|
-
* @param {string} backgroundColor
|
|
2028
|
-
* @description 모든 데이터셋의 Fill 설정을 합니다.
|
|
2029
|
-
* @Since 1.0.0
|
|
2030
|
-
* @category dataset
|
|
2031
|
-
*
|
|
2032
|
-
*/
|
|
2033
|
-
setAllFill(enable, backgroundColor) {
|
|
2034
|
-
if (this.datasets) {
|
|
2035
|
-
this.datasets.forEach((dataset, index) => {
|
|
2036
|
-
this.setFill(index, enable, backgroundColor);
|
|
2037
|
-
});
|
|
2038
|
-
}
|
|
2039
|
-
return this;
|
|
2040
|
-
}
|
|
2041
|
-
/**
|
|
2042
|
-
*
|
|
2043
|
-
* @param {number} datasetIndex
|
|
2044
|
-
* @param {number} tension
|
|
2045
|
-
* @description 라인 차트의 곡률을 설정합니다.
|
|
2046
|
-
* @Since 1.0.0
|
|
2047
|
-
* @category dataset
|
|
2048
|
-
*/
|
|
2049
|
-
setTension(datasetIndex, tension) {
|
|
2050
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
2051
|
-
this.datasets[datasetIndex].tension = tension;
|
|
2052
|
-
}
|
|
2053
|
-
return this;
|
|
2054
|
-
}
|
|
2055
|
-
// 모든 데이터셋의 Tension 설정
|
|
2056
|
-
/**
|
|
2057
|
-
*
|
|
2058
|
-
* @param {number} tension
|
|
2059
|
-
* @description 모든 데이터셋의 곡률을 설정합니다.
|
|
2060
|
-
* @Since 1.0.0
|
|
2061
|
-
* @category dataset
|
|
2062
|
-
*
|
|
2063
|
-
*/
|
|
2064
|
-
setAllTension(tension) {
|
|
2065
|
-
if (this.datasets) {
|
|
2066
|
-
this.datasets.forEach((dataset, index) => {
|
|
2067
|
-
this.setTension(index, tension);
|
|
2068
|
-
});
|
|
2069
|
-
}
|
|
2070
|
-
return this;
|
|
2071
|
-
}
|
|
2072
|
-
/**
|
|
2073
|
-
*
|
|
2074
|
-
* @param {number} datasetIndex
|
|
2075
|
-
* @param {number} borderWidth
|
|
2076
|
-
* @description 데이터셋의 Border Width를 설정합니다.
|
|
2077
|
-
* @Since 1.0.0
|
|
2078
|
-
* @category dataset
|
|
2079
|
-
*/
|
|
2080
|
-
setBorderWidth(datasetIndex, borderWidth) {
|
|
2081
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
2082
|
-
this.datasets[datasetIndex].borderWidth = borderWidth;
|
|
2083
|
-
}
|
|
2084
|
-
return this;
|
|
2085
|
-
}
|
|
2086
|
-
// 모든 데이터셋의 Border Width 설정
|
|
2087
|
-
setAllBorderWidth(borderWidth) {
|
|
2088
|
-
if (this.datasets) {
|
|
2089
|
-
this.datasets.forEach((dataset, idx) => {
|
|
2090
|
-
this.setBorderWidth(idx, borderWidth);
|
|
2091
|
-
});
|
|
2092
|
-
}
|
|
2093
|
-
return this;
|
|
2094
|
-
}
|
|
2095
|
-
/**
|
|
2096
|
-
*
|
|
2097
|
-
* @param {number} datasetIndex
|
|
2098
|
-
* @param {number} radius
|
|
2099
|
-
* @description 라인 차트의 Point Radius를 설정합니다.
|
|
2100
|
-
*/
|
|
2101
|
-
setPointRadius(datasetIndex, radius) {
|
|
2102
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
2103
|
-
this.datasets[datasetIndex].pointRadius = radius;
|
|
2104
|
-
}
|
|
2105
|
-
return this;
|
|
2106
|
-
}
|
|
2107
|
-
/**
|
|
2108
|
-
*
|
|
2109
|
-
* @param {number} radius
|
|
2110
|
-
* @description 모든 라인 차트의 Point Radius를 설정합니다.
|
|
2111
|
-
* @Since 1.0.0
|
|
2112
|
-
* @category dataset
|
|
2113
|
-
*/
|
|
2114
|
-
setAllPointRadius(radius) {
|
|
2115
|
-
if (this.datasets) {
|
|
2116
|
-
this.datasets.forEach((dataset, index) => {
|
|
2117
|
-
this.setPointRadius(index, radius);
|
|
2118
|
-
});
|
|
2119
|
-
}
|
|
2120
|
-
return this;
|
|
2121
|
-
}
|
|
2122
|
-
/**
|
|
2123
|
-
*
|
|
2124
|
-
* @param {number} datasetIndex
|
|
2125
|
-
* @param {number} hoverRadius
|
|
2126
|
-
* @description 데이터셋의 Point Hover Radius를 설정합니다.
|
|
2127
|
-
* @Since 1.0.0
|
|
2128
|
-
* @category dataset
|
|
2129
|
-
*/
|
|
2130
|
-
setPointHoverRadius(datasetIndex, hoverRadius) {
|
|
2131
|
-
if (this.datasets && this.datasets[datasetIndex]) {
|
|
2132
|
-
this.datasets[datasetIndex].pointHoverRadius = hoverRadius;
|
|
2133
|
-
}
|
|
2134
|
-
return this;
|
|
2135
|
-
}
|
|
2136
|
-
/**
|
|
2137
|
-
*
|
|
2138
|
-
* @param {number} hoverRadius
|
|
2139
|
-
* @description 모든 데이터셋의 Point Hover Radius를 설정합니다.
|
|
2140
|
-
* @Since 1.0.0
|
|
2141
|
-
* @category dataset
|
|
2142
|
-
*
|
|
2143
|
-
*/
|
|
2144
|
-
setAllPointHoverRadius(hoverRadius) {
|
|
2145
|
-
if (this.datasets) {
|
|
2146
|
-
this.datasets.forEach((dataset, index) => {
|
|
2147
|
-
this.setPointHoverRadius(index, hoverRadius);
|
|
2148
|
-
});
|
|
2149
|
-
}
|
|
2150
|
-
return this;
|
|
2151
|
-
}
|
|
2152
|
-
}
|
|
2153
|
-
|
|
2154
|
-
var Types = /*#__PURE__*/Object.freeze({
|
|
2155
|
-
__proto__: null
|
|
2156
|
-
});
|
|
2157
|
-
|
|
2158
|
-
const ChartToolBox = {
|
|
2159
|
-
setErrorLog(enabled) {
|
|
2160
|
-
LoggerConfig.errorLogging = enabled;
|
|
2161
|
-
},
|
|
2162
|
-
setDebugLog(enabled) {
|
|
2163
|
-
LoggerConfig.debugLogging = enabled;
|
|
2164
|
-
},
|
|
2165
|
-
};
|
|
2166
|
-
const T$ = {
|
|
2167
|
-
create: ChartWrapper.create.bind(ChartWrapper),
|
|
2168
|
-
register: ChartWrapper.register.bind(ChartWrapper),
|
|
2169
|
-
ChartWrapper: ChartWrapper,
|
|
2170
|
-
CartesianChartWrapper: CartesianChartWrapper,
|
|
2171
|
-
BarChartWrapper: BarChartWrapper,
|
|
2172
|
-
LineChartWrapper: LineChartWrapper,
|
|
2173
|
-
defaultTypes: Types,
|
|
2174
|
-
defaultsOptions: LocalDefaults,
|
|
2175
|
-
toolBox: ChartToolBox,
|
|
2176
|
-
};
|
|
2177
|
-
|
|
2178
|
-
export { BarChartWrapper, CartesianChartWrapper, ChartFactory, ChartInstance, ChartToolBox, ChartTypes, ChartWrapper, CreateZoomRangeSlider, LineChartWrapper, T$, barScaleImgPlugin, blinkPlugin, changeSetting, chartMountPlugin, createDefaultBarOptions, createDefaultLineOptions, customLegend, T$ as default, defaultBarScales, defaultBarTooltipCallback, defaultLineScales, defaultLineTooltipCallback, doughnutCenterTextPlugin, loadingPlugin, makeCenterHtml, noDataPlugin, zoomRangeSlider, zoomResetPlugin };
|
|
2179
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
const fm=l,fn=l;(function(f,Y){const ft=l,fr=l,k=f();while(!![]){try{const c=parseInt(ft(0x564))/0x1*(parseInt(fr(0x2d9))/0x2)+parseInt(ft(0x5d8))/0x3+parseInt(fr(0x6a6))/0x4+parseInt(fr(0x3c4))/0x5+parseInt(fr(0x1fa))/0x6*(parseInt(ft(0x584))/0x7)+parseInt(ft(0x671))/0x8*(parseInt(ft(0x2c4))/0x9)+parseInt(ft(0x48f))/0xa*(-parseInt(fr(0x369))/0xb);if(c===Y)break;else k['push'](k['shift']());}catch(G){k['push'](k['shift']());}}}(E,0xad794));const f8={};f8[fm(0x37e)+'ng']=!![],f8[fm(0x2b8)+'ng']=!![];const LoggerConfig=f8,CHART_COLOR=[fn(0x28f),fn(0x484),'#FFCC00',fn(0x336),fm(0x604),fn(0x53f),'#32ADE6',fm(0x547),fm(0x6fd),fm(0x47e)],originalConsoleLog=console[fn(0x4cd)];console['log']=(...f)=>{const fj=fn;LoggerConfig[fj(0x2b8)+'ng']&&originalConsoleLog['apply'](console,f);};var ErrorMsg;(function(k){const fJ=fm,fx=fm,c={'LkayW':'diohH','xBGlI':function(O,F){return O===F;},'DZwwP':fJ(0x53a),'jwhrj':function(O,F){return O(F);},'CtZun':function(O,F){return O+F;},'ENZEF':fJ(0x178),'nDMvL':function(O,F){return O(F);},'Ckuen':fJ(0x367)+fJ(0x2bd),'ckswF':fx(0x450)+fJ(0x48c)+'rn\x20this\x22)('+'\x20)','Yijzk':function(O){return O();},'bneCX':function(O,F){return O===F;},'kqgwF':'YMXdI','QoEnO':fx(0x743),'iYZrD':'warn','FJHDp':'info','UQphQ':fJ(0x17f),'SHrtP':function(O,F){return O!==F;},'uMxms':'JJAVq','YAzRK':function(O,F,A){return O(F,A);},'riwlT':'CHART_TYPE'+fx(0x659),'USqGa':fJ(0x3a6)+fJ(0x1d6)+fx(0x1c0)+'types\x20are\x20'+'bar,\x20line,'+'\x20scatter,\x20'+'bubble,\x20et'+'c.','PTuZN':fx(0x579)+'QUIRED','vKxla':fx(0x37a)+fJ(0x62b)+fJ(0x384),'qmoCM':fx(0x756)+fJ(0x536),'sgKXl':fx(0x493)+fx(0x3c8)+fJ(0x266)+'n.','BHAMS':'Labels\x20can'+fJ(0x6ee)+'ty.','FXuzH':fJ(0x555)+fJ(0x702),'EUZnP':fx(0x416)+fx(0x571)+'ll\x20or\x20unde'+fJ(0x6f1),'cLKAH':fJ(0x62f)+fJ(0x5df)+fx(0x15b),'RjIGS':fJ(0x224)+fx(0x40a)+fx(0x556)+fx(0x63b)+'e\x20call\x20Cha'+fx(0x78d)+fx(0x2a8)+'.','mpDoU':'EMPTY_REQU'+fx(0x5d5)+fx(0x5a0),'JBQoP':fx(0x42d)+'\x20property\x20'+'is\x20missing'+'\x20in\x20the\x20da'+'taset\x20or\x20o'+fx(0x70d),'Erxku':fJ(0x500)+'ta\x20structu'+'re.\x20Please'+fJ(0x599)+fJ(0x6d7)+fJ(0x6b8)+fJ(0x5d7),'PUaxL':fJ(0x745)+fJ(0x698),'bkDjb':fJ(0x31b)+fJ(0x742)+fJ(0x3f9)+fJ(0x2f3)+'sing.','rMPgi':fx(0x1a1)+'H_MISMATCH','KvksI':fJ(0x5bb)+fx(0x6f4)+fJ(0x2f1)+fJ(0x4d9)+fx(0x4dd),'ZRwSk':'IMAGE_PROP'+fJ(0x365)+'NG','IbQap':fJ(0x3da)+fx(0x25d)+'ssing\x20in\x20t'+'he\x20dataset'+fJ(0x762)+'rovide\x20a\x20v'+fx(0x55e)+fx(0x6fa),'NhzBz':'PLUGIN_NOT'+'_FOUND','wOqnX':'Plugin\x20not'+fx(0x76b)+'options.pl'+fx(0x1e0),'hPFwy':'PLUGIN_ALR'+fx(0x249)+'S','XqBjs':fx(0x4eb)+fJ(0x5b4)+fJ(0x643)+fJ(0x718)+'o\x20override'+'.','kuCNU':fx(0x418)+fx(0x60e)+fJ(0x583)+fJ(0x1e2),'mdLDj':fx(0x78b)+fx(0x758)+'OUND','bmVju':fJ(0x460)+'ance\x20is\x20al'+fx(0x328)+'ialized.','LtUHf':'INVALID_BA'+'R_THICKNES'+'S','uBfIe':fx(0x7b1)+'ess\x20must\x20b'+fJ(0x3d3)+fJ(0x503),'RizQX':'INVALID_BA'+fJ(0x5e7)+'GE','QPCFv':fJ(0x747)+fJ(0x21a)+fJ(0x337)+fJ(0x4ad),'Kifhs':fJ(0x36a)+'TEGORY_PER'+fJ(0x35a),'gZVJU':fJ(0x3e5)+fx(0x3c6)+'must\x20be\x20be'+fx(0x548)+'d\x201.','azuSo':fx(0x402)+fx(0x6ad)+fx(0x675),'nWFjv':fx(0x5dc)+fx(0x680),'JfZiY':fJ(0x66a)+'is\x20key\x20pro'+fJ(0x5c5)+fx(0x370)+'the\x20axis\x20c'+'onfigurati'+fx(0x47b)},G=(function(){const fp=fx,fR=fx,O={'haafX':function(F,A){return F(A);},'NGZjh':function(F,A){return F!==A;},'BGUtr':c[fp(0x6ca)]};if(c[fp(0x27f)]('AoqIw',c['DZwwP'])){let F=!![];return function(A,M){const v=F?function(){const fT=l,fZ=l,C={'DCVPG':function(Q,H){const fB=l;return O[fB(0x30a)](Q,H);}};if(M){if(O[fT(0x569)](fT(0x161),O[fZ(0x23b)])){const Q=M[fT(0x286)](A,arguments);return M=null,Q;}else c=C[fT(0x425)](G,K);}}:function(){};return F=![],v;};}else this[fR(0x28d)][fp(0x184)]((M,v)=>{const fz=fR;this[fz(0x6e5)](v,G,K);});}()),K=c[fJ(0x21c)](G,this,function(){const fV=fJ,fw=fx,O={'entWE':function(F,A){const fb=l;return c[fb(0x77a)](F,A);},'oGWhW':function(F,A){const fh=l;return c[fh(0x687)](F,A);},'QOlqM':function(F,A){return F+A;},'KvdBW':function(F,A){const fX=l;return c[fX(0x27f)](F,A);},'YkvyS':fV(0x549)};if(fw(0x221)!==c[fV(0x75d)]){let F;try{const v=c['nDMvL'](Function,c['CtZun'](c[fV(0x687)](c[fw(0x409)],c[fV(0x2db)]),');'));F=c[fw(0x703)](v);}catch(C){if(c[fw(0x326)](c[fV(0x345)],c[fw(0x7b3)])){const H=G;let q=K[O['entWE'](H,0x1d3)](0x0,0x4),u=O[fV(0x518)](0x4,0x6),W=F[H(0x1d3)](0x6,0x8);return O[fw(0x4ce)](O[fV(0x4ce)](O[fV(0x4ce)](O[fw(0x36d)](q,'/'),u),'/'),W);}else F=window;}const A=F['console']=F[fV(0x4d0)]||{},M=[fV(0x4cd),c['iYZrD'],c[fV(0x1c4)],c['UQphQ'],fw(0x29d),fV(0x1d9),fw(0x2b3)];for(let H=0x0;H<M[fw(0x66d)];H++){if(c[fw(0x559)](c['uMxms'],c['uMxms'])){if(!F[fV(0x48b)](this[fV(0x39c)])&&O[fV(0x42a)](A[fw(0x739)](this['options']),O[fw(0x206)])){const u=this[fw(0x39c)];!u[fV(0x4f2)]&&(u[fw(0x4f2)]={}),u['plugins']['htmlLegend']=q,this['setPlugin'](u),W[fw(0x4cd)](this[fw(0x39c)]);}else throw new o(g['UNKNOWN_ER'+fV(0x54c)],fw(0x4d1)+fV(0x560));return this;}else{const u=G[fV(0x197)+'r'][fV(0x4aa)]['bind'](G),W=M[H],o=A[W]||u;u[fw(0x35c)]=G[fw(0x531)](G),u[fV(0x7a1)]=o[fV(0x7a1)][fV(0x531)](o),A[W]=u;}}}else this[fw(0x28d)][fV(0x184)]((a,U)=>{const fP=fV;this[fP(0x428)+'entage'](U,k);});});c['Yijzk'](K),k[c[fJ(0x23e)]]=fx(0x357)+fJ(0x3f9)+fx(0x757),k[fJ(0x1ca)+'ART_TYPE']=c[fJ(0x614)],k[c['PTuZN']]=c[fJ(0x1f3)],k[c['qmoCM']]=c[fx(0x419)],k[fx(0x5ef)+fx(0x2bc)]=c['BHAMS'],k[c['FXuzH']]=c[fJ(0x1df)],k[c[fx(0x537)]]=c['RjIGS'],k[c['mpDoU']]=c[fx(0x423)],k[fx(0x404)+fx(0x6b6)+'RE']=c['Erxku'],k[c[fx(0x438)]]=c[fJ(0x57a)],k[c['rMPgi']]=c[fJ(0x74f)],k[c['ZRwSk']]=c[fx(0x444)],k[c['NhzBz']]=c[fJ(0x741)],k[c[fx(0x196)]]=c[fx(0x727)],k[fJ(0x2a7)+fx(0x681)]=c[fx(0x3c1)],k[c[fx(0x5f4)]]=fx(0x460)+'ance\x20is\x20no'+'t\x20initiali'+fx(0x17c),k['CHART_ALRE'+fx(0x6ff)+fJ(0x5b2)]=c[fJ(0x790)],k[c[fx(0x4e7)]]=c[fx(0x25e)],k[c['RizQX']]=c[fx(0x160)],k[c['Kifhs']]=c[fx(0x7b8)],k['UNKNOWN_ER'+fJ(0x54c)]=c[fJ(0x716)],k[c[fJ(0x1b6)]]=c[fJ(0x21f)];}(ErrorMsg||(ErrorMsg={})));var ErrorCode;(function(k){const fS=fn,Y0=fm,c={'EDiij':function(O,F){return O===F;},'ZZDNq':fS(0x34d),'xOkSy':fS(0x2fe)+'+$','dPEPE':function(O,F,A){return O(F,A);},'MPOAb':function(O){return O();},'rtFav':Y0(0x5f7)+fS(0x659),'sGffY':fS(0x1ca)+fS(0x452),'NnpLt':fS(0x555)+Y0(0x702),'hQrdS':Y0(0x62f)+fS(0x5df)+fS(0x15b),'VeMrC':'DATASET_RE'+Y0(0x702),'dBroC':Y0(0x5ef)+'UIRED','vuqbl':fS(0x27c)+fS(0x5d5)+fS(0x5a0),'qauKo':fS(0x404)+fS(0x6b6)+'RE','IOhRA':Y0(0x745)+Y0(0x698),'gWPKq':'NOT_SUPPOR'+fS(0x536),'eJWXG':'IMAGE_PROP'+Y0(0x365)+'NG','zghBq':fS(0x2b6)+fS(0x60b),'AtXBX':fS(0x2a2)+fS(0x249)+'S','PeJeZ':Y0(0x2a7)+Y0(0x681),'eIuWE':'CHART_INST'+fS(0x758)+'OUND','ebgpN':fS(0x22d)+Y0(0x6ff)+Y0(0x5b2),'LVnUE':Y0(0x43c)+Y0(0x664)+'S','dyXsM':fS(0x43c)+fS(0x5e7)+'GE','JzWsr':fS(0x36a)+'TEGORY_PER'+Y0(0x35a),'kVIQb':fS(0x725)+'ROR','UOKTX':Y0(0x5dc)+'IS_KEY'},G=(function(){const Y2=Y0,Y3=Y0,O={'HQIYZ':function(A,M){const Y1=l;return c[Y1(0x398)](A,M);},'sOmrm':Y2(0x752),'EBLTd':c[Y3(0x68c)]};let F=!![];return function(A,M){const Y4=Y3,Y5=Y2;if(O[Y4(0x56d)](O[Y4(0x2de)],O[Y4(0x778)]))G[Y5(0x455)]={};else{const C=F?function(){const Y6=Y4;if(M){const Q=M[Y6(0x286)](A,arguments);return M=null,Q;}}:function(){};return F=![],C;}};}()),K=c[fS(0x293)](G,this,function(){const Y7=Y0,Y8=fS;return K[Y7(0x7a1)]()[Y8(0x658)](c[Y7(0x346)])[Y7(0x7a1)]()['constructo'+'r'](K)['search'](c['xOkSy']);});c['MPOAb'](K),k[k[c[fS(0x591)]]=0x4b0]=c[Y0(0x591)],k[k[c[Y0(0x5db)]]=0x4b1]=c[fS(0x5db)],k[k[c[fS(0x528)]]=0x4b2]=c[fS(0x528)],k[k['NOT_REGIST'+fS(0x5df)+'_TYPE']=0x4b3]=c[fS(0x6b9)],k[k[c['VeMrC']]=0x898]=fS(0x579)+Y0(0x702),k[k[c[Y0(0x1cc)]]=0x8a3]=fS(0x5ef)+fS(0x2bc),k[k[c[fS(0x1f8)]]=0x8a4]=c[Y0(0x1f8)],k[k[c[fS(0x521)]]=0x8a5]=c[Y0(0x521)],k[k[Y0(0x745)+Y0(0x698)]=0x8a6]=c[Y0(0x52f)],k[k[fS(0x1a1)+'H_MISMATCH']=0x8a7]=fS(0x1a1)+fS(0x214),k[k[c['gWPKq']]=0x8a8]=c[fS(0x499)],k[k[c['eJWXG']]=0x8a9]=c['eJWXG'],k[k[c['zghBq']]=0xc94]=c[Y0(0x34a)],k[k[c[Y0(0x52e)]]=0xc95]=c['AtXBX'],k[k[c[Y0(0x22e)]]=0xc96]=c[Y0(0x22e)],k[k[Y0(0x78b)+fS(0x758)+'OUND']=0x1086]=c['eIuWE'],k[k[c['ebgpN']]=0x1087]=c['ebgpN'],k[k[c['LVnUE']]=0x1478]=c[fS(0x272)],k[k[c[fS(0x364)]]=0x1479]=c[Y0(0x364)],k[k[c['JzWsr']]=0x147a]=fS(0x36a)+fS(0x793)+fS(0x35a),k[k[c[Y0(0x787)]]=0x1481]=c[fS(0x787)],k[k[c[fS(0x76e)]]=0x186a]=c[Y0(0x76e)];}(ErrorCode||(ErrorCode={})));const f9={[ErrorCode[fn(0x5f7)+fm(0x659)]]:ErrorMsg[fn(0x5f7)+'_REQUIRED'],[ErrorCode['INVALID_CH'+'ART_TYPE']]:ErrorMsg['INVALID_CH'+fm(0x452)],[ErrorCode['OPTIONS_RE'+fn(0x702)]]:ErrorMsg[fm(0x555)+fn(0x702)],[ErrorCode[fn(0x62f)+fn(0x5df)+fn(0x15b)]]:ErrorMsg[fm(0x62f)+fn(0x5df)+fn(0x15b)],[ErrorCode[fn(0x579)+fm(0x702)]]:ErrorMsg[fm(0x579)+fn(0x702)],[ErrorCode[fn(0x5ef)+'UIRED']]:ErrorMsg[fm(0x5ef)+fm(0x2bc)],[ErrorCode[fm(0x27c)+fm(0x5d5)+fn(0x5a0)]]:ErrorMsg[fm(0x27c)+'IRED_PROPE'+'RTY'],[ErrorCode[fm(0x404)+'TA_STRUCTU'+'RE']]:ErrorMsg[fm(0x404)+fn(0x6b6)+'RE'],[ErrorCode[fn(0x745)+'EQUIRED']]:ErrorMsg[fn(0x745)+fn(0x698)],[ErrorCode[fm(0x1a1)+fn(0x214)]]:ErrorMsg[fm(0x1a1)+fn(0x214)],[ErrorCode[fn(0x756)+fn(0x536)]]:ErrorMsg[fn(0x756)+fm(0x536)],[ErrorCode[fm(0x2b6)+fn(0x60b)]]:ErrorMsg[fm(0x2b6)+fn(0x60b)],[ErrorCode[fn(0x2a2)+fn(0x249)+'S']]:ErrorMsg[fn(0x2a2)+fn(0x249)+'S'],[ErrorCode[fn(0x2a7)+fm(0x681)]]:ErrorMsg[fm(0x2a7)+'OVE_FAILED'],[ErrorCode[fn(0x78b)+fm(0x758)+fn(0x23f)]]:ErrorMsg['CHART_INST'+fn(0x758)+fm(0x23f)],[ErrorCode[fm(0x22d)+fn(0x6ff)+fm(0x5b2)]]:ErrorMsg['CHART_ALRE'+'ADY_INITIA'+fn(0x5b2)],[ErrorCode['INVALID_BA'+'R_THICKNES'+'S']]:ErrorMsg[fm(0x43c)+fm(0x664)+'S'],[ErrorCode[fm(0x43c)+fn(0x5e7)+'GE']]:ErrorMsg[fm(0x43c)+fm(0x5e7)+'GE'],[ErrorCode[fn(0x36a)+fm(0x793)+fn(0x35a)]]:ErrorMsg[fn(0x36a)+fn(0x793)+fm(0x35a)],[ErrorCode[fm(0x725)+fm(0x54c)]]:ErrorMsg['UNKNOWN_ER'+fn(0x54c)],[ErrorCode[fn(0x3fa)+fm(0x365)+'NG']]:ErrorMsg[fm(0x3fa)+fn(0x365)+'NG'],[ErrorCode[fm(0x5dc)+fm(0x680)]]:ErrorMsg['INVALID_AX'+'IS_KEY']},ErrorMessage=f9;class CustomError extends Error{[fn(0x281)];[fn(0x721)];constructor(Y,k){const Y9=fm,Yf=fm,c={};c['xbzUb']='CustomErro'+'r',c['FJKRQ']=Y9(0x5e9),c[Y9(0x3e3)]=Y9(0x4b3),c[Yf(0x72c)]=Y9(0x431)+'en;\x20font-w'+Yf(0x615)+'d;',c[Yf(0x227)]=Yf(0x292)+'nge;';const G=c,K=k?ErrorMessage[Y]+'\x20-\x20'+k:ErrorMessage[Y];super(K),this[Y9(0x281)]=Y,this[Yf(0x721)]=k,this[Yf(0x6c3)]=G[Y9(0x26d)];if(LoggerConfig[Y9(0x37e)+'ng']){if(G[Yf(0x43d)]===G[Y9(0x3e3)])return this[Yf(0x28d)]&&this[Y9(0x28d)][Y9(0x184)]((F,A)=>{const YY=Yf;this[YY(0x2dd)](A,c);}),this;else{const F=G[Yf(0x72c)],A=G[Yf(0x227)];console[Y9(0x17f)](Y9(0x412)+Y+']\x20%c'+K,F,A);}}}}class ChartWrapper{[fn(0x5f6)];[fn(0x1ec)];[fn(0x28d)];[fn(0x39c)];[fm(0x4f2)];static ['registry']=new Map();constructor(f,Y,k,c,G){const YE=fm,Yl=fm,K='0|1|2|3|4'[YE(0x5f3)]('|');let O=0x0;while(!![]){switch(K[O++]){case'0':this[Yl(0x5f6)]=f;continue;case'1':this[Yl(0x1ec)]=Y;continue;case'2':this['datasets']=k;continue;case'3':this['options']=c;continue;case'4':this[Yl(0x4f2)]=G;continue;}break;}}static[fn(0x610)](f,Y,k,c,G){const Yk=fm,Yc=fn,K=this['registry'][Yk(0x2b9)](f);if(!K)throw new CustomError(ErrorCode['NOT_REGIST'+Yc(0x5df)+Yc(0x15b)],Yc(0x613)+f);return new K(f,Y,k,c,G);}static[fm(0x628)](f,Y){const YG=fn;this[YG(0x507)]['set'](f,Y);}['setPlugin'](Y,k=!![]){const YK=fn,YO=fm,c={};c[YK(0x58d)]=function(K,O){return K!==O;};const G=c;!this[YK(0x4f2)]&&(this['plugins']=[]);if(Y['id']&&k){const K=this[YK(0x4f2)][YO(0x1ef)](O=>O['id']===Y['id']);if(G[YO(0x58d)](K,-0x1))return this['plugins'][K]=Y,this;}return this[YK(0x4f2)]['push'](Y),this;}[fn(0x72e)](f){const YF=fm;return this[YF(0x6f9)](f);}[fm(0x350)+'in'](f){const YA=fn,YM=fm;if(!this['plugins']||!Array[YA(0x205)](this[YA(0x4f2)]))return this;return this['plugins'][YM(0x66d)],this[YA(0x4f2)]=this[YM(0x4f2)]['filter'](Y=>Y['id']!==f),this;}[fn(0x6d6)](f){const Yv=fn,YC=fn;if(!this['plugins']||!Array['isArray'](this[Yv(0x4f2)]))return![];return this[Yv(0x4f2)]['some'](Y=>Y['id']===f);}[fn(0x6f9)](Y){const YQ=fm,YH=fn;this['normalize']();const k=Y||this[YQ(0x5f6)]+'_'+Math[YQ(0x5ed)](),c={};c[YH(0x2ce)]=k,c[YH(0x5f6)]=this[YQ(0x5f6)],c[YQ(0x3aa)]={},c[YH(0x39c)]={...this[YH(0x39c)]},c[YQ(0x4f2)]=this[YQ(0x4f2)],c[YQ(0x3aa)][YH(0x1ec)]=this[YH(0x1ec)],c[YQ(0x3aa)]['datasets']=this[YH(0x28d)],c[YH(0x39c)][YH(0x2ce)]=k;const G=c;return this[YH(0x631)](G);}}function a0_0x4af2(f,Y){const Yq=fm,Yu=fm,k={'TMNin':function(G,K){return G+K;},'ItrFG':function(G,K){return G(K);},'dIQZL':Yq(0x439),'BvJWA':function(G,K){return G(K);},'TIlSH':function(G,K){return G(K);},'wIOAk':function(G,K){return G(K);},'ImOGF':function(G,K){return G(K);},'FJhsD':function(G,K){return G(K);},'qXzBs':Yq(0x417),'AQGiv':function(G,K){return G+K;},'YTvMR':function(G,K){return G%K;},'dWiOw':Yu(0x2fa)+'de','rPwnx':function(G,K){return G&K;},'vXPqv':function(G,K){return G*K;},'bjaXP':function(G,K){return G===K;},'wJffB':Yu(0x6bc),'HNgXz':Yu(0x3f4),'jNCSd':Yu(0x479),'CDdCW':Yu(0x66d),'dGXsu':function(G,K){return G<K;},'ubrET':function(G,K){return G!==K;},'FVJEx':'PXgcj','PsXqt':Yu(0x618),'pgxsX':Yu(0x6a3),'yXfJJ':function(G,K){return G(K);},'dLzyA':function(G,K){return G-K;},'KgKMu':function(G,K){return G===K;},'feglv':Yq(0x19c),'TiHXp':Yu(0x279),'UYTpR':function(G,K){return G+K;},'jeKnN':function(G,K,O){return G(K,O);}},c=a0_0x5eed();return a0_0x4af2=function(G,K){const YW=Yu,Yo=Yu;G=k['dLzyA'](G,0x195);let O=c[G];if(k[YW(0x371)](a0_0x4af2[k[Yo(0x173)]],undefined)){var F=function(C){const Ya=YW,Yi=Yo,Q={'WwKCI':function(W,o){const Yg=l;return k[Yg(0x6fb)](W,o);},'qwZOg':function(W,o){return k['ItrFG'](W,o);},'kNgRq':k[Ya(0x6dd)],'xRgXF':function(W,o){const YU=Ya;return k[YU(0x313)](W,o);},'SkCUf':function(W,o){const YN=Ya;return k[YN(0x313)](W,o);},'nlgdM':function(W,o){const YD=Ya;return k[YD(0x374)](W,o);},'yRgdg':function(W,o){return k['wIOAk'](W,o);},'jqCmr':function(W,o){const YI=Ya;return k[YI(0x400)](W,o);},'OvRiV':function(W,o){const Yy=Ya;return k[Yy(0x39e)](W,o);},'EFmeD':function(W,o){return W(o);}},H=Ya(0x19b)+Yi(0x373)+Ya(0x63f)+Yi(0x777)+'OPQRSTUVWX'+Yi(0x533)+Ya(0x5cc);let q='',u='';for(let W=0x0,o,g,a=0x0;g=C[k[Yi(0x665)]](a++);~g&&(o=W%0x4?k[Ya(0x1f6)](o*0x40,g):g,k[Ya(0x6b3)](W++,0x4))?q+=String[k[Yi(0x2b4)]](k['rPwnx'](0xff,o>>k[Ya(0x707)](k['vXPqv'](-0x2,W),0x6))):0x0){k[Yi(0x798)](k[Yi(0x76d)],k[Ya(0x3af)])?k['scales'][c]={}:g=H[k['jNCSd']](g);}for(let N=0x0,D=q[k['CDdCW']];k[Yi(0x37d)](N,D);N++){if(k[Ya(0x6e2)](Ya(0x59a),k[Ya(0x403)])){const i={'GhVlU':function(b,h){const YL=Yi;return Q[YL(0x16a)](b,h);},'ZcLYx':function(b,h){return b(h);},'Nbrny':Q[Yi(0x19e)]},L=H,d={'vjHjJ':Q['xRgXF'](L,0x1d9),'uBjij':Ya(0x686)+Ya(0x50e)+Ya(0x3a1),'lttCc':function(b,h){const Yd=Yi;return Q[Yd(0x527)](b,h);},'QXLlf':Yi(0x180)+Yi(0x71e)+'-8;'};if(!q){d[Q['SkCUf'](L,0x196)](d[L(0x1ae)]);return;}const p=W[L(0x1b1)](o[L(0x1d5)]('tr')),R=p[Q['xRgXF'](L,0x1de)](b=>{const Ys=Ya,Ye=Ya,h=L,X=L[h(0x1b1)](b[i['GhVlU'](h,0x1d5)](d[i['ZcLYx'](h,0x1e2)]));return X[Ys(0x37f)](V=>'\x22'+V[h(0x1a1)]+'\x22')[i[Ys(0x4a5)]](',');})[Q[Ya(0x19e)]]('\x0a'),B='\ufeff',T=new a([d[Yi(0x5fb)](B,R)],{'type':d[Q[Ya(0x2fb)](L,0x1b6)]}),Z=U[Q[Yi(0x219)](L,0x1c0)](T),z=N['createElem'+Yi(0x655)]('a');z[Ya(0x193)]=Z,z[Q[Ya(0x219)](L,0x1c5)]=D,I[Q[Yi(0x2bf)](L,0x19d)][Q['OvRiV'](L,0x195)](z),z[Q[Ya(0x67f)](L,0x1c6)](),i[L(0x19d)][L(0x1c1)](z),L[Ya(0x15f)+Ya(0x754)](Z);}else u+='%'+('00'+q[k[Yi(0x68f)]](N)[Ya(0x7a1)](0x10))[k[Ya(0x5cf)]](-0x2);}return k[Ya(0x704)](decodeURIComponent,u);};a0_0x4af2[k[YW(0x581)]]=F,f=arguments,a0_0x4af2[k[Yo(0x173)]]=!![];}const A=c[0x0],M=k[Yo(0x69b)](G,A),v=f[M];return!v?(O=a0_0x4af2[YW(0x279)](O),f[M]=O):O=v,O;},k[Yu(0x5a6)](a0_0x4af2,f,Y);}function a0_0x5eed(){const Yt=fn,Yr=fn,f={'MhucD':function(k,c){return k(c);},'WOoro':function(k,c){return k+c;},'ztGuA':function(k,c){return k+c;},'PVBSe':Yt(0x367)+Yr(0x2bd),'OGNhT':Yr(0x450)+'ctor(\x22retu'+'rn\x20this\x22)('+'\x20)','FHonb':function(k,c){return k!==c;},'plcnX':'BwfW','rHIwA':Yr(0x3b6)+Yr(0x5e8),'zsOcQ':Yt(0x4dc)+Yt(0x254),'NXRje':'DMPiAKO','GxBxO':Yt(0x5e4)+'HPBgq','kkBix':Yr(0x41b),'nhfge':Yr(0x611),'XVFxX':Yr(0x796),'InxCb':'cGRIOidIOi'+Yt(0x2f9)+'OzxIOzxIOz'+Yt(0x308)+Yt(0x1cb)+Yt(0x308)+Yt(0x3dc)+Yt(0x782)+Yr(0x3ca)+Yr(0x619)+'OPxIOPxIOP'+Yt(0x619)+'OPxIOPxIOP'+Yr(0x619)+Yt(0x3ca)+Yt(0x619)+'OPxIOPxIOP'+Yr(0x619)+'OPxIOPxIOP'+'xIOPxIOidI'+Yt(0x697)+'gh4Qgh4Qgh'+Yt(0x3d8)+'ca4Qca4Qca'+Yt(0x3d8)+'ca4Qca4Qkh'+Yr(0x504)+Yr(0x6d1)+Yt(0x3d8)+'ca4Qca4Qca'+'4Qca4Qca4Q'+Yr(0x472)+Yt(0x247)+'kQ4QgQ4Qgc'+Yr(0x3d8)+Yr(0x472)+Yr(0x3d8)+Yr(0x472)+Yt(0x3d8)+'kQ4QkQ4QkQ'+Yr(0x332)+Yr(0x6eb)+Yt(0x347)+Yr(0x51c)+'QUkHJUkHRU'+'kGGokGGokG'+'GokIGokIH+'+Yr(0x30e)+Yt(0x695)+Yr(0x368)+'GokGGokGGo'+Yr(0x194)+'H+kIH+kIH+'+Yt(0x30e)+Yt(0x26c)+Yt(0x18e)+'LEkILEkIHE'+'kGGokGGokG'+Yr(0x212)+Yr(0x1b5)+'QUkHGWRIOy'+Yt(0x340)+Yr(0x596)+Yt(0x427)+Yr(0x4c5)+Yr(0x3cb)+Yt(0x3e8)+Yr(0x18a)+Yr(0x572)+Yt(0x1e4)+'OidIOidIOi'+'dIOyFIOyFI'+'OyFIOAFIOz'+Yr(0x481)+Yr(0x351)+Yr(0x668)+Yr(0x6a2)+Yr(0x33a)+'OidIOQJIOQ'+Yt(0x64a)+Yr(0x3ea)+Yt(0x217)+Yr(0x3de)+Yt(0x472)+Yr(0x3d8)+Yr(0x472)+Yr(0x33d)+Yt(0x27b)+Yt(0x48e)+'kO4QkQ4Qca'+Yr(0x3d8)+'ca4Qgh4Qgh'+Yt(0x236)+Yt(0x472)+Yt(0x33b)+Yt(0x61e)+Yr(0x3d8)+Yr(0x5c3)+'4Qk54Qk44Q'+Yt(0x470)+('4QkC4QcgcU'+Yt(0x30e)+Yt(0x3f6)+'kIJUkIH+kI'+Yt(0x2aa)+Yr(0x22f)+Yr(0x212)+Yr(0x58f)+Yr(0x3a8)+Yr(0x379)+Yr(0x212)+Yt(0x2ea)+Yt(0x5b1)+Yt(0x794)+Yr(0x4a2)+Yr(0x47c)+Yr(0x212)+Yr(0x26f)+Yr(0x746)+Yr(0x56b)+Yr(0x263)+Yr(0x2a9)+Yr(0x740)+Yt(0x430)+Yt(0x4c7)+'RIOARIOidI'+'OidIOidIOi'+'dIO4FIOOFI'+'OQFIOihIOi'+'dIORJIORJI'+'OidIOidIOi'+'dIOidIOyFI'+Yr(0x1a4)+Yr(0x6c2)+Yr(0x2c2)+Yr(0x33a)+Yt(0x1be)+Yr(0x733)+'OzFIOzxIOz'+Yr(0x45f)+Yr(0x323)+Yr(0x4ec)+'4QkR4Qkk4Q'+Yt(0x472)+Yr(0x3d8)+Yr(0x472)+Yt(0x3d4)+'gC4QgC4QgC'+Yt(0x2be)+Yr(0x2a1)+Yr(0x3d8)+Yt(0x17e)+Yr(0x236)+Yr(0x34c)+Yr(0x4f7)+Yr(0x472)+Yt(0x3d8)+Yt(0x472)+Yt(0x3d8)+Yt(0x1e8)+'4Qg44QgX4Q'+Yr(0x38d)+'GokIH+kIH+'+Yt(0x2b1)+Yr(0x511)+Yt(0x1d0)+Yr(0x2d5)+Yr(0x36f)+Yr(0x6a9)+Yr(0x1af)+Yt(0x446)+'kHQ+kHQUkH'+'QUkHQUkIJU'+Yr(0x301)+'MokINokINo'+Yt(0x395)+Yt(0x566)+Yt(0x5cb)+'NEkINokILE'+Yt(0x4a9)+Yt(0x31c)+'kGRaRIOidI'+'OidIOidIOi'+'dIOyFIOyFI'+'OyFIOyFIOy'+Yt(0x5d9)+'OOFIOQFIOQ'+Yt(0x666)+Yr(0x490)+Yr(0x33a)+Yr(0x241)+Yt(0x5f8)+'OQRIOQRIOQ'+Yt(0x4c2)+Yr(0x235)+'JIORJIORJI'+Yr(0x622)+Yt(0x434)+'ORJIORJIOR'+Yr(0x434))+(Yr(0x622)+'JIOzekcG'),'gIDMO':Yt(0x6ab),'giPBc':Yr(0x211),'ZgEWQ':Yr(0x60a),'COPiP':Yt(0x55a),'fTYiB':Yr(0x677)+'4','APOEx':Yr(0x4e9)+'q','ovLgk':Yt(0x378)+Yt(0x422),'Agtep':'t2jQzwn0','ljeIi':Yt(0x320),'YENwX':'C2vQCe0','inheq':Yt(0x314),'onfaM':Yt(0x18f)+Yt(0x2d2),'gvujg':Yt(0x5eb),'suyGC':Yt(0x3f5),'SXsnc':Yt(0x68b),'Dhwjy':Yt(0x1eb)+Yr(0x5c7),'WtYNZ':Yr(0x234),'lkJYR':Yt(0x3a9),'EZeBm':Yt(0x63c)+'C','vuASA':'quzxz04','kYCmi':'BgvUz3rO','bWNsM':'C2v0','PYvHa':Yr(0x598),'VPGOp':Yr(0x773)+'HPBgq','gfKvg':'qxjYyxK','dGPzd':Yr(0x66b),'NfqPn':'mtu1mZK2nM'+'LIDgXoBW','FOsHU':Yt(0x6bb)+'q','hmfsx':'y2XPy2S','LanKy':Yt(0x1ae),'QfAFr':Yr(0x72b),'vCwRN':Yt(0x563)+'zJAMTKCq','bKaEm':'mtq1nKfTEh'+Yr(0x1a8),'ZhPvq':Yr(0x2cb)+'9F','ChiSo':Yt(0x487),'ReIww':Yt(0x421),'GOdgr':Yt(0x783)+'rxqG','eAvNR':'mwfRseXsDG','swlCE':Yt(0x78e)+'5N','AIhgA':Yr(0x433),'MYSlw':Yr(0x3c7)+'XLy3rVCKfS'+'Ba','eIucK':Yr(0x6cf),'AIKXp':Yt(0x5d0),'IpfTa':Yr(0x79b),'AulSk':Yr(0x2d1),'jQtPK':Yt(0x76f)+'fADhK','JOdjx':Yt(0x442)},Y=[Yt(0x1c5),f[Yr(0x3eb)],'AuHMCLK',f[Yr(0x468)],f[Yt(0x5f2)],f['NXRje'],f[Yr(0x342)],f['kkBix'],f[Yr(0x629)],f['XVFxX'],'tNvSBa',f[Yr(0x475)],f[Yt(0x45e)],f[Yt(0x339)],f[Yr(0x435)],f[Yt(0x1dd)],Yt(0x737)+'bL',Yt(0x567)+Yt(0x4bd),Yt(0x54b)+Yr(0x73b),f[Yr(0x482)],Yt(0x424),f[Yr(0x597)],f[Yr(0x633)],Yr(0x251)+Yr(0x44b),f['Agtep'],f[Yr(0x5ea)],f[Yt(0x2bb)],f[Yt(0x26e)],f['onfaM'],f[Yt(0x306)],Yr(0x230),Yt(0x39d),f[Yr(0x1c1)],Yt(0x3ed),f[Yr(0x41a)],f['Dhwjy'],Yt(0x770),f[Yt(0x1bb)],Yt(0x5ad),f[Yr(0x761)],f[Yr(0x465)],f[Yr(0x2ef)],'ChvZAa',f[Yt(0x2a6)],'yLHKBMi',f[Yr(0x29a)],f[Yr(0x469)],Yr(0x278),'mtq1mgLMqx'+'bHAW',Yr(0x1cd)+Yt(0x786),f[Yt(0x3b4)],f[Yr(0x67d)],f[Yr(0x29b)],f[Yt(0x588)],f[Yt(0x5aa)],f[Yr(0x6ba)],f[Yr(0x1cf)],f[Yr(0x684)],f[Yt(0x64c)],f[Yt(0x380)],Yt(0x691)+'m',f[Yr(0x2b0)],f['ChiSo'],f['ReIww'],Yt(0x3b9),f['GOdgr'],Yr(0x73e)+Yr(0x186),f[Yt(0x2a5)],f[Yr(0x40c)],f['AIhgA'],f[Yr(0x44e)],f['eIucK'],f['AIKXp'],f[Yt(0x617)],f[Yr(0x58a)],Yt(0x69a)+'vW',f[Yr(0x15c)],f[Yt(0x21b)]];return a0_0x5eed=function(){const Ym=Yr,Yn=Yt;if(f[Ym(0x307)](Yn(0x2e5),Yn(0x3b8)))return Y;else{const c=uVSgLf[Yn(0x558)](k,uVSgLf[Yn(0x454)](uVSgLf[Ym(0x4be)](uVSgLf['PVBSe'],uVSgLf[Yn(0x1b1)]),');'));c=c();}},a0_0x5eed();}const a0_0xd09b08=a0_0x4af2;(function(f,Y){const Yj=fm,YJ=fn,k={'LtHjE':function(K,O){return K!==O;},'HtUJR':Yj(0x46d),'cjlKu':function(K,O){return K+O;},'xwRfA':function(K,O){return K+O;},'peSnM':function(K,O){return K+O;},'sPmDx':function(K,O){return K+O;},'HiDyQ':function(K,O){return K+O;},'aPvCV':function(K,O){return K(O);},'HuHsy':function(K,O){return K/O;},'Fsnhg':function(K,O){return K(O);},'TxNNH':function(K,O){return K/O;},'ZakKt':function(K,O){return K*O;},'cwsxr':function(K,O){return K(O);},'jtEEW':function(K,O){return K(O);},'aKFuW':function(K,O){return K(O);},'lhaYS':function(K,O){return K(O);},'cAkoi':function(K,O){return K(O);},'yPCPH':function(K,O){return K/O;},'EoApd':function(K,O){return K(O);},'qLTYS':function(K,O){return K/O;},'vhdIU':function(K,O){return K(O);},'VPOuB':function(K,O){return K(O);},'OZeOC':function(K,O){return K===O;},'kkCPH':YJ(0x3ec),'KJFPF':YJ(0x295)},c=a0_0x4af2,G=f();while(!![]){if(k['LtHjE'](YJ(0x731),k[YJ(0x589)]))try{const K=k['cjlKu'](k['xwRfA'](k[YJ(0x519)](k[Yj(0x5de)](k[Yj(0x4fb)](-k[Yj(0x5f0)](parseInt,k[YJ(0x5f0)](c,0x1d2))/0x1*k['HuHsy'](-k[YJ(0x5f0)](parseInt,c(0x1c4)),0x2),k[YJ(0x497)](-k[YJ(0x5f0)](parseInt,k['Fsnhg'](c,0x1e1)),0x3)),k[Yj(0x311)](-k[YJ(0x248)](parseInt,k['Fsnhg'](c,0x1b2)),0x4)),k['ZakKt'](k[YJ(0x311)](k['cwsxr'](parseInt,k[YJ(0x669)](c,0x1a5)),0x5),k[Yj(0x497)](-k[YJ(0x5f0)](parseInt,k[Yj(0x5f0)](c,0x1ce)),0x6))),k[YJ(0x60c)](-k['aPvCV'](parseInt,k[YJ(0x59c)](c,0x1ca))/0x7,k['TxNNH'](-k[Yj(0x4e5)](parseInt,k[Yj(0x389)](c,0x1db)),0x8)))+k[YJ(0x60c)](-k[Yj(0x4e5)](parseInt,k[YJ(0x40f)](c,0x1d0))/0x9,k['yPCPH'](k['cwsxr'](parseInt,k[Yj(0x616)](c,0x1bf)),0xa)),k[YJ(0x4f8)](k[YJ(0x551)](parseInt,k[YJ(0x6dc)](c,0x1c9)),0xb));if(k[Yj(0x5b8)](K,Y))break;else G[k['kkCPH']](G[k[YJ(0x42e)]]());}catch(O){G[k[YJ(0x238)]](G[Yj(0x295)]());}else this['datasets'][Yj(0x184)]((A,M)=>{const Yx=Yj;this[Yx(0x61d)+'yPercentag'+'e'](M,k);});}}(a0_0x5eed,0x7bccb));const stzUtil={'dateFormatTs':f=>{const Yp=fn,YR=fn,Y={'COHXJ':function(c,G){return c(G);},'RBvOK':function(c,G){return c===G;},'famEj':'wighJ','uTJIO':'split'},k=a0_0x4af2;if(f&&f[Y['COHXJ'](k,0x1cb)]('T')){if(Y[Yp(0x6d8)](Y[YR(0x3e9)],Yp(0x4d6))){if(!this[Yp(0x4f2)]||!k[Yp(0x205)](this[Yp(0x4f2)]))return![];return this[YR(0x4f2)][YR(0x2c0)](O=>O['id']===G);}else{let G=f[Y[YR(0x415)]]('T');return G[0x0];}}return f;},'dateFormatDots':Y=>{const YB=fn,YT=fn,k={};k[YB(0x72f)]=function(A,M){return A+M;},k[YT(0x1ee)]=function(A,M){return A+M;},k['dggar']=function(A,M){return A+M;};const c=k,G=a0_0x4af2;let K=Y[G(0x1d3)](0x0,0x4),O=Y[YB(0x518)](0x4,0x6),F=Y[YT(0x518)](0x6,0x8);return c[YB(0x72f)](c[YB(0x1ee)](c[YB(0x750)](K,'.'),O),'.')+F;},'dateFormatDash':f=>{const YZ=fn,Yz=fm,Y={'WMdmz':function(O,F){return O(F);},'gkvwN':function(O,F){return O+F;},'vNSCs':function(O,F){return O+F;}},k=a0_0x4af2;let c=f[k(0x1d3)](0x0,0x4),G=f[k(0x1d3)](0x4,0x6),K=f[Y[YZ(0x366)](k,0x1d3)](0x6,0x8);return Y[Yz(0x53d)](Y['gkvwN'](Y['vNSCs'](c,'-'),G),'-')+K;},'dateFormatSlashes':f=>{const Yb=fn,Yh=fm,Y={'dizRQ':function(O,F){return O(F);},'Sxkcq':function(O,F){return O+F;}},k=a0_0x4af2;let c=f[k(0x1d3)](0x0,0x4),G=f['substring'](0x4,0x6),K=f[Y['dizRQ'](k,0x1d3)](0x6,0x8);return Y[Yb(0x4bf)](Y[Yb(0x4bf)](Y['Sxkcq'](c+'/',G),'/'),K);},'arrSumByLength':(Y,k)=>{const YX=fn,YV=fm,c={'bVYQu':function(A,M){return A(M);},'RxMBg':YX(0x66d),'pfEPY':YV(0x6a3),'lZFYK':function(A,M){return A+M;}},G={};G[YV(0x300)]=function(A,M){return A<M;};const K=a0_0x4af2,O=G;let F=[];for(let A=0x0;O[c[YX(0x736)](K,0x1dc)](A,Y[c['RxMBg']]);A+=k){const M=Y[c[YV(0x6e4)]](A,c[YV(0x5c1)](A,k)),v=M[c[YX(0x736)](K,0x1a3)](Q=>typeof Q===YV(0x354)),C=M[c[YX(0x736)](K,0x1a8)]((Q,H)=>Q+Number(H),0x0);F[K(0x1b9)](v?C[c[YX(0x736)](K,0x1e0)]():C);}return F;},'buildTree':(f,Y,k,c=a0_0xd09b08(0x1a2))=>{const G={'RHPKx':'fQlmf','IsWWn':function(A,M){return A(M);}},K=a0_0xd09b08,O=[],F={};return f[K(0x1b4)](A=>{const Yw=l,YP=l;if(G[Yw(0x22a)]===G[YP(0x22a)]){const M={...A};M[c]=[];const v=K,C=M;F[A[Y]]=C;if(!A[k])O[G[Yw(0x338)](v,0x1b9)](C);else{const Q=F[A[k]];Q&&Q[c][G[YP(0x338)](v,0x1b9)](C);}}else Y[YP(0x455)]={};}),O;},'downloadTableByCSV':(f,Y=a0_0xd09b08(0x1ab))=>{const YS=fn,E0=fm,k={'ElCrN':YS(0x68a),'jpvZg':function(C,Q){return C(Q);},'iWmQc':YS(0x37f),'HKriR':E0(0x439),'VsPIC':YS(0x686)+'ent\x20not\x20fo'+'und.','yXQac':function(C,Q){return C(Q);},'cPeCh':'lttCc','fKPtW':E0(0x193),'ocCcf':function(C,Q){return C(Q);},'aZpTj':function(C,Q){return C(Q);},'wCErP':function(C,Q){return C(Q);},'LWfEj':function(C,Q){return C(Q);},'xxXqG':E0(0x15f)+E0(0x754)},c=a0_0xd09b08,G={'vjHjJ':c(0x1d9),'uBjij':k[E0(0x575)],'lttCc':function(C,Q){const E1=E0,E2=YS,H={};H[E1(0x406)]=function(u,W){return u===W;};const q=H;return E1(0x68a)===k[E1(0x4c6)]?C+Q:q[E1(0x406)](this[E1(0x5f6)],'line');},'QXLlf':YS(0x180)+'harset=utf'+E0(0x7b9)};if(!f){console[k[E0(0x4d3)](c,0x196)](G[c(0x1ae)]);return;}const K=Array[k['yXQac'](c,0x1b1)](f[c(0x1d5)]('tr')),O=K[k[E0(0x48d)](c,0x1de)](C=>{const E3=YS,E4=YS,Q=c,H=Array[k[E3(0x48d)](Q,0x1b1)](C[Q(0x1d5)](G[Q(0x1e2)]));return H[k[E3(0x199)]](q=>'\x22'+q[Q(0x1a1)]+'\x22')[k[E3(0x252)]](',');})[k['HKriR']]('\x0a'),F='\ufeff',A=new Blob([G[k['cPeCh']](F,O)],{'type':G[c(0x1b6)]}),M=URL[k[YS(0x48d)](c,0x1c0)](A),v=document[E0(0x4c1)+YS(0x655)]('a');v[k['fKPtW']]=M,v[k[E0(0x476)](c,0x1c5)]=Y,document[k[YS(0x799)](c,0x19d)][k[YS(0x1a6)](c,0x195)](v),v[c(0x1c6)](),document[k[E0(0x4d3)](c,0x19d)][k[E0(0x164)](c,0x1c1)](v),URL[k[E0(0x210)]](M);},'getType':f=>{const E5=fm,E6=fm,Y={'KdgCG':function(c,G){return c(G);},'VjdJW':function(c,G){return c(G);}},k=a0_0xd09b08;return Object[Y[E5(0x361)](k,0x19f)][Y[E5(0x361)](k,0x1b7)][k(0x1d4)](f)[Y[E6(0x2e3)](k,0x1aa)](0x8,-0x1);},'isObject':f=>{const E8=fm,E9=fn,Y={'MYTLc':function(G,K){return G===K;},'aiPvQ':function(G,K){return G(K);},'Gtcmd':function(G,K){return G(K);},'WSEFV':function(G,K){return G(K);},'uhRWS':function(G,K){return G(K);}},k=a0_0xd09b08,c={'Mjzvl':function(G,K){const E7=l;return Y[E7(0x298)](G,K);},'DYjAE':Y[E8(0x513)](k,0x1a0)};return c[Y[E9(0x392)](k,0x1d6)](Object[Y['aiPvQ'](k,0x19f)][Y[E8(0x1ea)](k,0x1b7)][Y[E8(0x392)](k,0x1d4)](f),c[Y[E9(0x58c)](k,0x198)]);},'omit':(f,Y)=>{const Ef=fm,EY=fn,k={'yzZUX':Ef(0x5c2),'zmFmQ':function(F,A){return F!==A;},'iUmLn':function(F,A){return F(A);},'TXxMg':Ef(0x34b),'MTDuC':function(F,A){return F===A;},'MprQT':function(F,A){return F(A);},'ykEEZ':function(F,A){return F(A);},'GZQwj':function(F,A){return F(A);},'FwZiB':EY(0x220),'hAXpl':Ef(0x37f),'cGgMG':function(F,A){return F(A);}},c=a0_0xd09b08,G={'AFWgN':EY(0x3cd),'sejpM':k[EY(0x45d)](c,0x1a7),'CZLiX':function(F,A){const EE=EY,El=Ef;if(k[EE(0x198)]!==k[El(0x198)])this[EE(0x6e5)](c,G,K);else return k[EE(0x29c)](F,A);},'iHfrY':k['TXxMg']},K=stzUtil[c(0x1be)](f);if(k['MTDuC'](K,G[k[Ef(0x5e0)](c,0x1b8)])||K!==G[k[EY(0x5e0)](c,0x1a9)]&&G[k['ykEEZ'](c,0x1d8)](K,G[k['GZQwj'](c,0x1df)]))return f;if(K===G[k[EY(0x387)]])return f[k[EY(0x496)]](F=>stzUtil[c(0x19b)](F,Y));const O={};for(const F in f){if(Y[k[EY(0x2e7)](c,0x1cb)](F))continue;const A=f[F];O[F]=stzUtil[Ef(0x218)](A,Y);}return O;},'pick':(f,Y)=>{const Ek=fm,Ec=fm,k={'plgnt':function(G,K){return G(K);},'Rkgcl':function(G,K){return G(K);},'yEkzu':Ek(0x396)+Ec(0x46f)+Ek(0x728)},c=a0_0xd09b08;if(Object[c(0x19f)][k['plgnt'](c,0x1d1)][k['Rkgcl'](c,0x1d4)](f,Y)){const {[Y]:G,...K}=f;return K;}else throw new Error(k[Ec(0x15e)]);},'makeComboItems':(Y,k,c)=>{const EG=fn,EK=fm,G={};G[EG(0x1bf)]='zvCzr',G[EK(0x62d)]='map';const K=G;return Y[K[EK(0x62d)]](O=>{const EO=EG,EF=EK;if('zvCzr'!==K['RWgYf'])this[EO(0x28d)][EF(0x184)]((A,M)=>{const EA=EO;this[EA(0x2dd)](M,k);});else{const A={};return A[EO(0x4f4)]=O[k],A[EF(0x5ff)]=O[c],A['label']=O[k],A;}});},'isEmpty':f=>{const EM=fm,Ev=fn,Y={'chGJU':function(K,O){return K===O;},'ePRqr':EM(0x240),'xGcpc':function(K,O){return K===O;},'xwaTk':function(K,O){return K(O);},'JWdlz':function(K,O){return K(O);},'SKDdX':function(K,O){return K(O);},'KzRXI':'trim','gZvAf':function(K,O){return K(O);},'lVrmo':function(K,O){return K(O);},'Ymuwd':Ev(0x495),'aYDFL':Ev(0x3d5),'vdkjB':function(K,O){return K(O);},'gNSDP':Ev(0x700)},k=a0_0xd09b08,c={'EzYqd':function(K,O){const EC=EM;return Y[EC(0x15d)](K,O);},'nGzSd':function(K,O){const EQ=Ev,EH=EM;return Y['ePRqr']!==EQ(0x2d8)?Y['xGcpc'](K,O):(this['datasets']&&this[EH(0x28d)][EQ(0x184)]((A,M)=>{const Eq=EH;this[Eq(0x3a0)+'dius'](M,c);}),this);},'lrztG':Y['xwaTk'](k,0x1b0),'dOTDE':function(K,O){const Eu=EM;return Y[Eu(0x209)](K,O);},'bXdnb':Y['xwaTk'](k,0x1c2),'oVeZb':function(K,O){return K===O;},'vqkdM':k(0x1a7),'mbXkC':function(K,O){return K===O;}},G=stzUtil[k(0x1be)](f);if(c[Y[Ev(0x166)](k,0x1dd)](f,null)||c[k(0x19c)](f,undefined))return!![];if(c[Y[Ev(0x310)](k,0x1dd)](G,c[k(0x1d7)])&&c[EM(0x5b9)](f[Y[EM(0x24d)]](),''))return!![];if(c['dOTDE'](G,c[Y[EM(0x586)](k,0x1bb)])&&c[Y[EM(0x539)](k,0x19c)](f[Y[Ev(0x586)](k,0x1ba)],0x0))return!![];if(c[Y[Ev(0x31a)](k,0x1c7)](G,c[k(0x1cd)])){if(c[Y[EM(0x538)]](Object[Y[EM(0x352)]](f)[Y[Ev(0x71c)](k,0x1ba)],0x0))return!![];const K=Object[Y[EM(0x310)](k,0x1af)](f)[Y['gNSDP']](O=>O===null||O===undefined||O==='');if(K)return!![];}return![];},'cloneDeep':(f,Y=new Map())=>{const EW=fm,Eo=fn,k={'aJbbO':function(O,F){return O===F;},'aiUfG':function(O,F){return O!==F;},'EsnIx':function(O,F){return O/F;},'uQVJi':function(O,F){return O-F;},'iyaVf':function(O,F){return O/F;},'Uqjtv':EW(0x5a2),'TFeaZ':function(O,F){return O===F;},'DSBkE':Eo(0x79d),'zcOwN':function(O,F){return O+F;},'pcMOv':function(O,F){return O-F;},'iIRZB':function(O,F){return O*F;},'tcUND':function(O,F){return O<F;},'pjNNm':function(O,F){return O>F;},'uTFyS':'Object','fRWsV':'Array','rnmLC':EW(0x739),'IlLkb':Eo(0x5e6),'zAdpj':function(O,F){return O(F);},'KdDKe':function(O,F){return O!==F;},'ubfpG':EW(0x2cd),'eiKbO':function(O,F){return O(F);},'dvfgi':'kInKZ','IdDvJ':EW(0x75c),'kSgMw':Eo(0x50c),'wqiSq':function(O,F){return O(F);},'TJouT':function(O,F){return O!==F;},'tPQgs':'PEynP','nTSFC':'XSETJ','qQquv':'hasOwnProp'+EW(0x183),'XHedt':function(O,F){return O(F);},'ZVTxu':Eo(0x2fd)},c=a0_0xd09b08,G={'dHCBz':function(O,F){const Eg=Eo;return k[Eg(0x4d8)](O,F);},'fXYAR':k[Eo(0x1b2)],'AOIOq':function(O,F){const Ea=Eo;return k[Ea(0x53b)](O,F);},'kInKZ':k[Eo(0x502)]},K=stzUtil[k[EW(0x7b0)]](f);if(G[k['IlLkb']](K,k[EW(0x2c9)](c,0x199))||k['KdDKe'](K,G[k[Eo(0x2c9)](c,0x1b5)])&&G[k[EW(0x4f9)]](K,G[c(0x19e)]))return f;if(Y[k[Eo(0x390)](c,0x1ac)](f))return Y[c(0x1c3)](f);if(G[k[Eo(0x51e)]](K,G[k[EW(0x179)]])){if(k['aJbbO'](k[Eo(0x623)],k['kSgMw'])){const F=new W();F['src']=o[Eo(0x170)],g?n[Eo(0x1b4)](F,0x0,j[EW(0x3ae)+EW(0x72a)](J)-k[EW(0x2e1)](p,0x2),R,B):T[EW(0x1b4)](F,k[EW(0x79a)](Z['getPixelFo'+EW(0x72a)](z),k[Eo(0x2af)](b,0x2)),h['top'],X,V);}else{const F=[];Y[k[EW(0x6b1)](c,0x1bc)](f,F);for(const A of f){F[c(0x1b9)](stzUtil[c(0x1da)](A,Y));}return F;}}else{if(k[EW(0x38e)](k[EW(0x769)],k[EW(0x630)])){const M={};for(const v in f){Object[c(0x19f)][k[EW(0x61b)]][k[EW(0x463)](c,0x1d4)](f,v)&&(M[v]=stzUtil[k[EW(0x717)]](f[v],Y));}return M;}else{const {ctx:Q,canvas:H,chartArea:{left:q,top:u,right:W,width:o}}=M;H['addEventLi'+Eo(0x714)](k[Eo(0x344)],d=>{const EU=EW;this['var'][EU(0x26b)]=!![];}),H['addEventLi'+EW(0x714)](EW(0x653),d=>{const EN=EW;this[EN(0x6ed)]['isDragging']=![];});if(k['TFeaZ'](v[EW(0x6e8)][EW(0x5f6)],k[Eo(0x4df)])&&this['var'][EW(0x26b)]){const g=k[Eo(0x2e1)](g['event']['x'],k[EW(0x388)](o,q));this[Eo(0x6ed)][EW(0x768)]=k[EW(0x4de)](k[EW(0x767)](g,a[Eo(0x792)]['data']['labels'][Eo(0x66d)]),0x1),U[EW(0x480)]=!![],this[Eo(0x6ed)][Eo(0x65e)+Eo(0x674)]=k[EW(0x508)](N[EW(0x6e8)]['x'],q)?q:k['pjNNm'](D[EW(0x6e8)]['x'],W)?W:I[Eo(0x6e8)]['x'],i[Eo(0x607)]();}}}},'merge':(Y,k)=>{const ED=fm,EI=fn,c={'qOOHQ':function(M,v){return M===v;},'SBdDF':function(M,v){return M(v);},'XjYXo':function(M,v){return M(v);},'wkQwQ':ED(0x4aa),'RZgbf':ED(0x47d),'MJppc':function(M,v){return M!==v;},'vzGCE':'iQGfZ','iYCZF':function(M,v){return M(v);},'jukIX':function(M,v){return M(v);},'IipCS':function(M,v){return M(v);}},G=a0_0xd09b08,K={'ROcit':G(0x1cc),'itHbq':function(M,v){const Ey=ED;return c[Ey(0x231)](M,v);},'KRsWj':G(0x1bd)},O=new Set([K[c[EI(0x3fb)](G,0x1ad)],c[EI(0x420)](G,0x1a6),c['wkQwQ']]);if(!stzUtil[G(0x1a4)](Y)||!stzUtil[c[ED(0x3fb)](G,0x1a4)](k))return k;const F={...Y},A=F;for(const M of Reflect[c[ED(0x771)]](k)){if(c[ED(0x6ef)](c['vzGCE'],EI(0x529)))return[Y];else{if(K[G(0x1b3)](typeof M,K[G(0x1c8)])&&O[G(0x1ac)](M))continue;const C=Reflect[c[ED(0x47f)](G,0x1c3)](k,M),Q=Reflect[c[EI(0x262)](G,0x1c3)](Y,M);if(stzUtil[c[ED(0x262)](G,0x1a4)](C)&&stzUtil[c['jukIX'](G,0x1a4)](Q)){const H=stzUtil[G(0x1cf)](Q,C);Reflect[c[EI(0x349)](G,0x1bc)](A,M,H);}else Reflect[G(0x1bc)](A,M,C);}}return A;}},ff={};ff['enabled']=!![],ff[fn(0x764)+'r']='rgba(0,\x2012'+fm(0x275),ff[fm(0x732)+'h']=0x1,ff[fm(0x661)+'Color']=fm(0x54f)+fn(0x78f)+'1)';const fY={};fY['drag']=ff,fY[fn(0x2ab)]='xy',fY[fm(0x359)+fm(0x259)]=null;const fE={};fE[fn(0x3b3)]=![];const fl={};fl[fn(0x627)]=fY,fl[fm(0x5a5)]=fE;const DefaultZoomOptions=fl,fk={};function l(f,Y){const k=E();return l=function(c,G){c=c-0x158;let K=k[c];return K;},l(f,Y);}fk[fm(0x3b7)]=0xd,fk['weight']=fn(0x3e0);const fc={};fc[fm(0x650)]=function(f,Y){return f;},fc[fm(0x5b5)]=function(f){return!![];},fc[fm(0x601)]=function(Y){const Ei=fm,EL=fm,k={};k[Ei(0x6d9)]=EL(0x3d0);const c=k;return c[EL(0x6d9)];},fc['font']=fk,fc[fm(0x62c)]=fm(0x2a4),fc[fn(0x7b7)]=fm(0x30d);const DefaultDataLabelsOptions=fc;class ChartInstance{static [fn(0x37f)]=new Map();static['register'](f,Y){const Ed=fm;this['map'][Ed(0x3df)](f,Y);}static[fn(0x2b9)](f){const Es=fn,Ee=fm;return this[Es(0x37f)][Ee(0x2b9)](f);}static[fn(0x4a1)](Y){const Et=fm,Er=fm,k={};k[Et(0x267)]='zkCME';const c=k,G=this[Et(0x2b9)](Y);if(stzUtil['isEmpty'](G)){if(c[Et(0x267)]===c[Er(0x267)])throw new CustomError(ErrorCode['UNKNOWN_ER'+Er(0x54c)]);else Y[Et(0x607)]();}return G;}static[fn(0x42b)](f){const Em=fn,En=fm;return this[Em(0x37f)][En(0x305)](f);}static['has'](f){const Ej=fm,EJ=fm;return this[Ej(0x37f)][EJ(0x5a4)](f);}static[fm(0x239)](){const Ex=fn,Ep=fm;this[Ex(0x37f)][Ex(0x239)]();}static[fm(0x607)](Y,k,c='default'){const ER=fm,EB=fm,G={};G[ER(0x274)]=function(F,A){return F+A;},G[ER(0x5c6)]=ER(0x4c8);const K=G,O=this[ER(0x2b9)](Y);if(stzUtil[EB(0x48b)](O))this[ER(0x628)](Y,k),k[ER(0x607)](c);else{if(K['vmKQy']!==K[ER(0x5c6)])A['beginPath'](),M[EB(0x315)]=v,C[EB(0x1c7)](Q,K[EB(0x274)](H,0x28),q,0x6,0x3),u[EB(0x270)]();else throw new CustomError(ErrorCode[EB(0x725)+ER(0x54c)]);}}static[fm(0x451)](f){const ET=fm,EZ=fn,Y=this[ET(0x2b9)](f);if(stzUtil[EZ(0x48b)](Y))throw new CustomError(ErrorCode[EZ(0x725)+'ROR']);Y['resize']();}}const noDataPlugin={'id':fm(0x634)+'in','beforeUpdate':function(f){},'afterDraw':function(Y){const Ez=fm,Eb=fn,k={};k[Ez(0x63a)]=function(O,F){return O===F;},k['sRcDO']=Eb(0x6ce),k[Eb(0x3fd)]=function(O,F){return O===F;},k[Eb(0x5ab)]=Eb(0x33f),k[Eb(0x626)]=Ez(0x4b5),k[Eb(0x21d)]='No\x20data',k[Eb(0x426)]=function(O,F){return O/F;};const c=k,G=Y[Ez(0x792)][Ez(0x5f6)];let K=![];if(c[Ez(0x63a)](G,c[Eb(0x407)])){if(Eb(0x541)===Ez(0x541)){const O=Y[Ez(0x3aa)][Ez(0x28d)]?.[0x0]?.[Ez(0x6a7)];K=!Array[Eb(0x205)](O)||c[Ez(0x63a)](O[Eb(0x66d)],0x0);}else Y['scales']={};}else K=!Y[Ez(0x3aa)][Ez(0x28d)]||!Array[Eb(0x205)](Y['data'][Eb(0x28d)][0x0]?.['data'])||c[Eb(0x3fd)](Y[Ez(0x3aa)][Eb(0x28d)][0x0][Eb(0x3aa)][Ez(0x66d)],0x0);if(K){const A=Y[Ez(0x394)],M=Y[Eb(0x492)],v=Y['height'];A[Eb(0x1d4)](),A[Eb(0x6b4)]='center',A[Ez(0x273)+'ne']=c['PaKQM'],A['font']=c['sorZt'],A[Ez(0x223)](c[Ez(0x21d)],c[Eb(0x426)](M,0x2),c[Ez(0x426)](v,0x2)),A[Eb(0x348)]();}},'beforeDestroy'(f){const Eh=fn,EX=fm;console[Eh(0x4cd)](Eh(0x355)+f[EX(0x291)]['id']),f[Eh(0x3fc)+'le']=![],f[Eh(0x3fc)+EX(0x28b)]&&delete f['_initVisib'+'leComp'];}},zoomResetPlugin={'id':fm(0x216)+fm(0x4d5),'afterDraw'(Y,k,c){const EV=fm,Ew=fm,G={'kYFvc':function(M,v){return M!==v;},'fsHhV':'xAxisKey','eeEEg':EV(0x33e),'sDvpJ':Ew(0x479),'npzGv':function(M,v){return M===v;},'QnQki':EV(0x5d6),'QLTEm':Ew(0x265),'XVrbn':EV(0x56e),'PvmvG':function(M,v){return M(v);},'wCqTh':'HayTO','WBsHd':'button','XDFvp':Ew(0x49f)+EV(0x5b0),'xjzrH':Ew(0x2e0),'XJPTx':Ew(0x759),'PdJcp':'12px','dUIEZ':'rgba(0,0,0'+Ew(0x2f8),'gzLPF':'#fff','NsjRN':Ew(0x75b)+Ew(0x1f5),'nVpUm':Ew(0x55d),'fjViQ':EV(0x4f5)},K=Y[Ew(0x291)],O=K[Ew(0x5a7)];if(Y[Ew(0x391)+Ew(0x749)])return;if(G[Ew(0x17d)](G[Ew(0x2c1)](getComputedStyle,O)[Ew(0x678)],'static')){if(G[Ew(0x17d)](G[EV(0x277)],Ew(0x1ba))){const v={};if(G[Ew(0x6b5)](G,![]))v[G[Ew(0x377)]]=K;if(G[Ew(0x6b5)](O,![]))v[G[EV(0x772)]]=F;this[Ew(0x28d)][EV(0x184)](C=>{const EP=EV;C[EP(0x49d)]=v;});}else O[EV(0x46b)][Ew(0x678)]=EV(0x3f1);}const F=document[EV(0x4c1)+EV(0x655)](G['WBsHd']);F[EV(0x32e)]=EV(0x5a3),F['className']=G[Ew(0x271)];const A={};A[EV(0x678)]=G[Ew(0x276)],A[EV(0x4db)]='10',A[EV(0x70b)]=G['XJPTx'],A[EV(0x43b)]=G['PdJcp'],A[EV(0x661)]=G[EV(0x299)],A[EV(0x601)]=G[EV(0x77f)],A[EV(0x2b5)]=G['NsjRN'],A[Ew(0x289)+'us']=G['nVpUm'],A[EV(0x2ae)]=G['fjViQ'],A['display']='none',Object[Ew(0x255)](F[EV(0x46b)],A),F[Ew(0x413)]=()=>{const ES=Ew,l0=EV;Y[ES(0x19a)]&&(G[l0(0x17d)](G[ES(0x734)],G[ES(0x32a)])?c=G[G[l0(0x4e3)]](K):Y[l0(0x19a)]()),F[ES(0x46b)]['display']=G['XVrbn'];},O[Ew(0x290)+'d'](F),Y[EV(0x391)+'BtnDom']=F;},'afterEvent'(Y,k){const l1=fm,l2=fn,c={};c['Fnzuh']=l1(0x56e),c[l2(0x181)]=function(v,C){return v-C;},c[l1(0x79c)]=function(v,C){return v+C;},c[l2(0x24b)]=l1(0x1d5);const G=c,K=Y['_zoomReset'+'BtnDom'];if(!K)return;const O=Y['isZoomedOr'+l2(0x3d6)]?.();if(!O){K[l1(0x46b)][l1(0x5b5)]=G[l1(0x7a2)];return;}const {chartArea:F}=Y,A=G['xetHx'](F['right'],0x5a),M=G[l1(0x79c)](F['top'],0xa);K[l1(0x46b)]['left']=A+'px',K['style'][l1(0x6f5)]=M+'px',K[l1(0x46b)][l2(0x5b5)]=G[l1(0x24b)];}},doughnutCenterTextPlugin={'id':'doughnutCe'+fm(0x550)+fn(0x192),'afterDraw'(k){const l3=fn,l4=fm,c={};c[l3(0x327)]=function(M,v){return M!==v;},c['FogCK']=l4(0x20b),c[l4(0x41c)]=function(M,v){return M===v;},c[l4(0x71d)]=function(M,v){return M===v;},c[l4(0x45c)]=l4(0x38c),c[l3(0x2f5)]=function(M,v){return M===v;},c[l3(0x3e1)]='static',c[l3(0x303)]=l4(0x3f1),c[l3(0x4b9)]=l3(0x448)+l3(0x512),c[l3(0x35e)]=l3(0x283),c['IcIZa']=l3(0x2d0),c[l4(0x595)]='chart-cent'+l3(0x602)+'flex\x20flex-'+l3(0x57f)+'tify-conte'+'nt-center\x20'+l3(0x67c)+l3(0x688),c[l4(0x755)]=l4(0x2e0),c['gMBdP']=l4(0x4f3),c[l4(0x1a5)]=l3(0x56e),c[l3(0x253)]='#fff',c['tDIVu']='sans-serif',c[l3(0x2d4)]='center';const G=c,K=k['canvas'][l3(0x5a7)];if(G[l4(0x327)](k[l4(0x792)][l3(0x5f6)],G[l4(0x18c)]))return;k[l4(0x291)][l4(0x46b)][l3(0x4db)]='1',k[l3(0x291)]['style']['position']=l4(0x3f1);const O=k[l4(0x792)]['data'][l4(0x28d)][0x0][l3(0x3aa)]['reduce']((M,v)=>(Number(M)||0x0)+(Number(v)||0x0),0x0);if(G['hFErO'](O,0x0)){if(G['zVvie'](G[l3(0x45c)],l3(0x38c))){const M=K[l4(0x3bb)+'tor'](l4(0x448)+l4(0x512));if(M)M[l4(0x640)]();return;}else this[l3(0x628)](G,K),O[l4(0x607)](F);}G[l4(0x2f5)](getComputedStyle(K)['position'],G[l4(0x3e1)])&&(K[l3(0x46b)]['position']=G['YWwxT']);let F=K[l3(0x3bb)+l4(0x7ae)](G[l4(0x4b9)]);if(!F){if(G['lhQSo']!==l4(0x283)){!this['plugins']&&(this['plugins']=[]);if(K['id']&&O){const Q=this[l3(0x4f2)][l4(0x1ef)](u=>u['id']===Q['id']);if(Q!==-0x1)return this['plugins'][Q]=Q,this;}return this['plugins'][l4(0x3ec)](M),this;}else{F=document[l3(0x4c1)+l4(0x655)](G[l3(0x3cf)]),F[l4(0x20d)]=G[l3(0x595)];const Q={};Q[l4(0x678)]=G[l3(0x755)],Q[l4(0x6f5)]=l3(0x4f3),Q[l4(0x57b)]=G['gMBdP'],Q[l4(0x1d7)]=l4(0x61f)+'-50%,\x20-50%'+')',Q['pointerEve'+l4(0x440)]=G[l3(0x1a5)],Q[l4(0x601)]=G[l4(0x253)],Q['fontFamily']=G[l3(0x3ce)],Q['textAlign']=G[l3(0x2d4)],Object[l3(0x255)](F[l4(0x46b)],Q),K[l4(0x290)+'d'](F);}}const A=k[l3(0x34e)+'l']||'';F[l4(0x2ee)]=A;}},loadingPlugin={'id':'loadingPlu'+fn(0x73f),'beforeInit'(f,Y,k){const l5=fm;f[l5(0x27e)+'ing']=!![];},'beforeDraw'(f){const l6=fm,l7=fm;f[l6(0x27e)+l7(0x6e1)]&&(f[l7(0x27e)+l7(0x6e1)]=![],this[l6(0x246)+l7(0x7b4)+'n'](f));},'startLoadingAnimation'(f){const l8=fm,l9=fm,Y={'huksv':function(H,q){return H(q);},'hTEGq':function(H,q){return H-q;},'UZLte':function(H,q){return H+q;},'BocKu':function(H,q){return H!==q;},'iDkcA':l8(0x489),'zYmXY':l8(0x56e),'eTriq':function(H,q){return H===q;},'jsdNd':l8(0x172),'BbvEX':l8(0x3e2),'ejMEV':function(H,q){return H===q;},'lDePi':'fiLRL','vkGUl':l8(0x552),'FwxVz':l9(0x65d)+l8(0x6f3)+'5)','UpTEY':l8(0x651),'zhSSm':function(H,q){return H*q;},'oUxrR':l9(0x33f),'iXdHc':function(H,q){return H/q;},'WNZXW':function(H,q){return H*q;},'VCQQy':function(H,q){return H>=q;},'LRHKu':function(H,q){return H===q;},'YNSWb':l8(0x330),'vmjKt':function(H,q,u){return H(q,u);},'Ktcue':l9(0x2cc),'ttois':function(H,q){return H/q;},'UQQIj':function(H,q){return H/q;},'wcEkB':function(H,q){return H*q;}},k=f[l8(0x291)],c=f[l8(0x394)],G=window[l9(0x647)+'lRatio']||0x1;if(!k)return;const K=k['getBoundin'+l8(0x78c)+'t'](),O=K[l9(0x492)],F=K['height'];k[l9(0x492)]=Y[l8(0x729)](O,G),k[l8(0x1c9)]=F*G,c[l9(0x441)+'rm'](0x1,0x0,0x0,0x1,0x0,0x0),c[l8(0x4e6)](G,G);let A=0x0;const M=Y[l9(0x6ea)](O,0x2),v=Y[l9(0x429)](F,0x2),C=Y[l9(0x723)](Math['min'](O,F),0.25),Q=()=>{const ll=l9,lk=l9,H={'PIcxH':function(q,u){const lf=l;return Y[lf(0x269)](q,u);},'lYnLM':function(q,u){const lY=l;return Y[lY(0x43f)](q,u);},'VMdnn':function(q,u){return Y['UZLte'](q,u);},'gAVps':function(q,u){return q*u;},'AtYsU':function(q,u){return q*u;},'oHYru':function(q,u){return q*u;},'fCHAI':function(q,u){const lE=l;return Y[lE(0x1db)](q,u);},'LiKrr':Y[ll(0x62e)],'RorSS':Y[ll(0x683)]};if(Y[ll(0x62a)](Y[lk(0x6da)],Y[lk(0x562)]))return this['map'][ll(0x5a4)](Y);else{if(f[lk(0x5ce)+'ding']){if(Y['ejMEV'](Y[lk(0x176)],Y[ll(0x382)]))k[ll(0x6d4)]=c;else{f[lk(0x5ce)+'ding']=![],f[lk(0x607)]();return;}}c['clearRect'](0x0,0x0,O,F),c[ll(0x315)]=Y[lk(0x5af)],c[ll(0x282)](0x0,0x0,O,F),c[ll(0x315)]=Y[lk(0x605)],c[lk(0x526)]=ll(0x5a9)+Math[lk(0x5d3)](Y[ll(0x207)](F,0.1))+lk(0x458),c['textAlign']=ll(0x30d),c[ll(0x273)+'ne']=Y[ll(0x642)],c[lk(0x223)](A+'\x20%',M,v),c['beginPath'](),c[ll(0x690)]=0x6,c[ll(0x565)+'e']=Y[lk(0x605)];const u=Y[lk(0x1f9)](-Math['PI'],0x2),W=Y[lk(0x55f)](u,Y[ll(0x207)](Y[ll(0x729)](Y[ll(0x1f9)](A,0x64),0x2),Math['PI']));c['arc'](M,v,C,u,W),c[lk(0x6b2)]();if(Y[lk(0x3f2)](A,0x64)&&f){if(Y[ll(0x3ac)](ll(0x25a),Y[lk(0x2ed)])){const {x:a,y:i}=H[ll(0x6df)](A,M),L=v[lk(0x1c3)+'tnCircle'];if(!L)return;const d=H[ll(0x23a)](a,L['cx']),s=H[ll(0x23a)](i,L['cy']),e=H[lk(0x462)](H['gAVps'](d,d),H['AtYsU'](s,s))<=H['oHYru'](L['radius'],L[ll(0x4bc)]);H[ll(0x264)](C[lk(0x163)],e)&&(W[ll(0x163)]=e,o['style'][ll(0x2ae)]=e?g[ll(0x2ae)]||'pointer':H[ll(0x6fe)],a[ll(0x607)](H[ll(0x294)]));}else Y[lk(0x3ff)](setTimeout,()=>{const lc=lk;f[lc(0x607)]();},0x1f4);}else Y[ll(0x1db)](Y[lk(0x774)],lk(0x2cc))?this[lk(0x37f)][ll(0x239)]():(A++,requestAnimationFrame(Q));}};requestAnimationFrame(Q);}},fG={};fG[fm(0x232)]=fn(0x3ee)+fn(0x316),fG['item']=fm(0x1a0)+'m',fG[fm(0x6f6)]=fn(0x2f4),fG[fm(0x213)]='text-conta'+'iner';const fK={};fK[fn(0x3f7)+'tion']='none',fK[fm(0x601)]=fm(0x243);const fO={};fO[fm(0x3f7)+fn(0x674)]='line-throu'+'gh',fO['color']='#9ca3af';const fF={};fF[fn(0x213)]=fK,fF[fn(0x2c7)]=fO,fF[fm(0x6f6)]=(f,Y)=>({'width':fm(0x260),'height':'12px','borderRadius':Y===fn(0x27d)?fm(0x4f3):'4px','borderWidth':fm(0x329),'backgroundColor':f['fillStyle'],'borderColor':f[fm(0x565)+'e']});const customLegend={'id':fn(0x788),'_Default':{'containerID':'','className':fG,'styles':fF,'getItemText':f=>f['text'],'getDatasetType':(Y,k)=>{const lG=fn,lK=fn,c={};c[lG(0x60f)]=function(F,A){return F in A;};const G=c,K=Y[lG(0x792)]['data']?.[lK(0x28d)]?.[k['datasetInd'+'ex']];if(K?.[lG(0x5f6)])return K[lG(0x5f6)];const O=Y[lK(0x792)];return G[lG(0x60f)]('type',O)?O[lG(0x5f6)]:undefined;}},'_fnc':(Y,k,c)=>{const lO=fn,lF=fn,G={};G[lO(0x637)]=function(A,M){return A===M;},G[lO(0x7b5)]=lF(0x3a5),G[lF(0x673)]=lF(0x2e9),G[lO(0x222)]=lO(0x2d0);const K=G;if(!k)return;const O=document[lF(0x73d)+lF(0x32b)](k);let F=O?.[lO(0x3bb)+lO(0x7ae)](lO(0x2d0));if(!F){if(K[lO(0x637)](K[lF(0x7b5)],K[lO(0x673)])){const M={...F[lO(0x455)][A][lF(0x525)],...M};K['scales'][O]['grid']=M;}else F=document['createElem'+lO(0x655)](K[lF(0x222)]),F[lO(0x20d)]=c[lF(0x20d)][lO(0x232)],O[lO(0x290)+'d'](F);}return F;},'afterUpdate'(Y,k,c){const lA=fm,lM=fn,G={};G[lA(0x638)]=function(v,C){return v!==C;},G[lA(0x77c)]=function(v,C){return v!==C;},G[lA(0x69c)]=lA(0x358),G[lM(0x6bf)]=lM(0x79f),G[lA(0x7a7)]=function(v,C){return v===C;},G[lM(0x78a)]='doughnut',G[lA(0x3bd)]=lA(0x52a),G[lM(0x74d)]=lM(0x333),G['AcJsw']='div',G['xPuXm']='click',G[lM(0x30c)]=lA(0x477)+lM(0x557),G[lM(0x65b)]=lM(0x5b6);const K=G;if(!c||!c[lA(0x625)+'D'])return;const O=JSON[lA(0x58e)](JSON[lM(0x7b6)](c)),F=stzUtil[lM(0x543)](this[lA(0x77b)],O),A=this[lM(0x594)](Y,F[lA(0x625)+'D'],F);if(!A)return console[lA(0x17f)](K[lA(0x30c)]);while(A?.[lA(0x1dc)]){if(K['FURBE'](K['CzQtQ'],'TZzZT')){const C=this[lA(0x507)][lM(0x2b9)](G);if(!C)throw new K(O[lA(0x62f)+lM(0x5df)+'_TYPE']);return new C(...F);}else A[lA(0x1dc)][lM(0x640)]();}const M=Y[lM(0x39c)][lM(0x4f2)][lM(0x4ae)][lM(0x1ec)][lM(0x225)+'bels'](Y);M[lA(0x184)](C=>{const lv=lA,lC=lM,Q=document[lv(0x4c1)+lC(0x655)](K[lC(0x624)]);Q[lC(0x20d)]=F[lv(0x20d)][lv(0x23c)];const H=document[lC(0x4c1)+lC(0x655)](K[lC(0x624)]);H['className']=F[lv(0x20d)][lC(0x6f6)],H['style'][lv(0x661)+'Color']=C[lC(0x315)],H[lC(0x46b)]['borderColo'+'r']=C[lC(0x565)+'e'];const q=document[lv(0x4c1)+lC(0x655)](lC(0x2d0));q['className']=F[lC(0x20d)][lv(0x213)],q[lv(0x46b)][lv(0x601)]=C[lv(0x64f)],Q[lv(0x464)+lv(0x714)](K[lv(0x59b)],()=>{const lH=lv,lq=lv,W={'aISrB':function(o,g){const lQ=l;return K[lQ(0x638)](o,g);}};if(K[lH(0x77c)](K['oBTNj'],K[lH(0x6bf)])){const {type:o}=Y[lH(0x792)];if(K['FURBE'](o,lH(0x523))||K[lq(0x7a7)](o,K[lq(0x78a)]))Y['toggleData'+lq(0x191)](C[lq(0x609)]);else{if(K[lq(0x77c)](K[lH(0x3bd)],K[lH(0x74d)]))Y[lq(0x720)+lH(0x191)](C[lH(0x1e9)+'ex'],!Y[lH(0x7ac)+'isible'](C[lq(0x1e9)+'ex']));else return W['aISrB'](k,c);}Y[lq(0x607)]();}else return![];});const u=document[lC(0x383)+lv(0x689)](C[lv(0x213)]);q[lC(0x290)+'d'](u),q[lC(0x46b)]['textDecora'+lv(0x674)]=C[lv(0x2f2)]?lv(0x19d)+'gh':'',Q['appendChil'+'d'](H),Q[lC(0x290)+'d'](q),A?.['appendChil'+'d'](Q);});}},chartMountPlugin={'id':fm(0x30b)+fn(0x40b),'afterDraw'(f,Y,k){const lu=fn,lW=fm,c={'zdJIu':function(G,K){return G===K;},'zyKxS':lu(0x36b),'ZTYJw':function(G,K){return G(K);}};if(!f[lW(0x3bc)+lW(0x46a)]){f[lW(0x3bc)+lW(0x46a)]=!![],c[lu(0x4af)](requestAnimationFrame,()=>{const lo=lu,lg=lu;c['zdJIu'](typeof f[lo(0x792)]['options']['_mounted'],lo(0x3b5))&&(c[lg(0x635)](c[lg(0x5bd)],lg(0x3c2))?this['registry']['clear']():f[lo(0x792)]['options'][lg(0x682)](f));});const G=f[lW(0x39c)][lW(0x2ce)];G&&(console[lW(0x4cd)]('차트\x20인스턴스\x20바인'+lu(0x6ec)),ChartInstance[lW(0x628)](G,f));}}},blinkPlugin={'id':fn(0x603)+fn(0x534)+fm(0x192),'afterDatasetDraw'(Y,k){const la=fn,lU=fm,c={};c[la(0x257)]=function(F,A){return F===A;},c['NTILy']=la(0x3c5);const G=c,K=Y[la(0x6d5)+lU(0x75a)](k['index']),O=Y['data'][lU(0x28d)][k[lU(0x609)]];Y['ctx'],K[lU(0x3aa)][lU(0x184)]((F,A)=>{const lN=la,lD=la;G[lN(0x257)](G[lN(0x6a4)],'cNkhw')?O[lD(0x3aa)][A]:c['scales'][G][lN(0x77d)]=K;});}},makeCenterHtml=(Y,k,c,G)=>{const lI=fn,ly=fm,K={};K[lI(0x204)]=function(A,M){return A!==M;};const O=K,F=c?lI(0x24a)+'s=\x22text-wa'+'rning\x22>'+c[ly(0x58b)+ly(0x18b)]()+('</span><sp'+ly(0x6d3)+lI(0x63e)+ly(0x16f)):'';return ly(0x40e)+'div\x20class='+lI(0x6b7)+ly(0x3d1)+Y['toLocaleSt'+lI(0x18b)]()+('%</div>\x0a\x20\x20'+lI(0x360))+(O[ly(0x204)](k,undefined)?ly(0x40e)+lI(0x544)+lI(0x66c)+lI(0x6d3)+'text-succe'+lI(0x711)+k['toLocaleSt'+ly(0x18b)]()+('</span>\x0a\x20\x20'+ly(0x5e5)+'<span\x20clas'+ly(0x65a)+'ite\x22>/</sp'+'an>\x0a\x20\x20\x20\x20\x20\x20'+lI(0x360))+F+(ly(0x52b)+ly(0x2e2)+ly(0x478)+lI(0x1a2))+(G?.[lI(0x58b)+ly(0x18b)]()||0x0)+(lI(0x16b)+ly(0x6c4)+'v>'):'')+lI(0x39b);},barScaleImgPlugin={'id':fm(0x3c0),'beforeDatasetsDraw'(Y,k,c){const li=fm,lL=fm,G={};G[li(0x4da)]=function(Q,H){return Q/H;},G[lL(0x1da)]=function(Q,H){return Q===H;};const K=G,{ctx:O,data:F,scales:{x:A,y:M}}=Y,v=0x1e,C=K[li(0x1da)](Y[lL(0x39c)][lL(0x3a4)],'y');O['save'](),F['datasets']['forEach']((Q,H)=>{const ld=lL,ls=li,q=new Image();q[ld(0x59f)]=Q[ls(0x170)],C?O[ls(0x1b4)](q,0x0,M[ld(0x3ae)+ld(0x72a)](H)-v/0x2,v,v):O[ls(0x1b4)](q,A['getPixelFo'+ls(0x72a)](H)-K[ld(0x4da)](v,0x2),A[ls(0x6f5)],v,v);}),O[lL(0x348)]();}},fA={};fA['w']=0x1e,fA['h']=0x1e;const fM={};fM['right']=0xa,fM['top']=0xa;const fv={};fv[fm(0x270)]=fn(0x51b)+fm(0x44d),fv[fn(0x6f0)]=fm(0x7ab)+fm(0x317),fv[fm(0x6b2)]=fm(0x51b)+',255,1)',fv[fn(0x41f)+'r']=fm(0x7ab)+fm(0x2ec);const fC={};fC[fn(0x16d)]=0x2,fC[fm(0x27a)]=0x3;const changeSetting={'id':fm(0x17b),'_Default':{'img':'/img/setti'+fn(0x43e),'iconSize':fA,'radiusExtra':0x2,'offset':fM,'colors':fv,'borderWidth':fC,'cursor':fm(0x4f5),'onClick':({chart:f,event:Y})=>{const le=fn,k={'DmqVf':function(c,G){return c(G);}};k[le(0x3d7)](alert,'클릭');}},'afterInit'(Y,k,c){const lt=fn,lr=fm,G={};G['EXyfD']=function(C,Q){return C/Q;},G['NvBDD']=function(C,Q){return C*Q;},G[lt(0x67e)]=function(C,Q){return C-Q;},G[lr(0x67a)]=function(C,Q){return C!==Q;},G[lr(0x30f)]=function(C,Q){return C===Q;},G[lt(0x73c)]=lt(0x64d),G['sPKAq']=lr(0x46e),G[lt(0x4c0)]=function(C,Q){return C<=Q;},G[lt(0x69e)]='AhbRr',G['ftLuW']='YFlIL',G[lr(0x3ab)]=lt(0x453),G[lt(0x376)]='error',G[lt(0x685)]=function(C,Q){return C<=Q;},G['ydaOj']=function(C,Q){return C+Q;},G[lr(0x4ba)]=function(C,Q){return C*Q;},G[lt(0x3ef)]=lr(0x489),G[lt(0x29f)]=lr(0x56e),G[lt(0x1c6)]=lr(0x546);const K=G,O=Y[lt(0x291)],F=stzUtil[lt(0x543)](this[lt(0x77b)],c);Y[lt(0x432)]=F;if(!O)return;if(Y[lt(0x35b)+lr(0x4d7)+'r'])return;const A=C=>{const lm=lr,ln=lt,Q=O[lm(0x375)+lm(0x78c)+'t'](),H=K[ln(0x2fc)](O['width'],Q[lm(0x492)]),q=K[lm(0x2fc)](O[ln(0x1c9)],Q[lm(0x1c9)]);return{'x':(C[lm(0x6cb)]-Q[ln(0x57b)])*H,'y':K[lm(0x4c9)](K[ln(0x67e)](C[lm(0x40d)],Q['top']),q)};},M=C=>{const lj=lr,lJ=lt;if(K[lj(0x30f)](K['XJQZx'],K[lJ(0x6f2)]))return this[lJ(0x6f9)](Y);else{const {x:H,y:q}=A(C),u=Y['T$settingB'+lj(0x202)];if(!u)return;if(H>=u[lj(0x57b)]&&K[lj(0x4c0)](H,u[lj(0x6b0)])&&q>=u['top']&&K[lJ(0x4c0)](q,u[lj(0x237)])){if(K[lj(0x67a)](K['SAfeQ'],'ZKnWF'))try{const W={};W[lj(0x203)]=Y,W[lJ(0x6e8)]=C,(F[lJ(0x779)]||this[lj(0x77b)]['onClick'])(W);}catch(o){if(K[lj(0x30f)](K[lJ(0x6f8)],K[lJ(0x3ab)])){const a=this['plugins'][lj(0x1ef)](U=>U['id']===G['id']);if(K[lJ(0x67a)](a,-0x1))return this[lJ(0x4f2)][a]=G,this;}else console[lJ(0x17f)](K[lJ(0x376)],o);}else return this[lj(0x507)]['has'](Y);}}},v=C=>{const lx=lt,lp=lt,{x:Q,y:H}=A(C),q=Y[lx(0x1c3)+lx(0x242)];if(!q)return;const u=K[lp(0x67e)](Q,q['cx']),W=H-q['cy'],o=K['jSnhc'](K['ydaOj'](u*u,K['NvBDD'](W,W)),K[lp(0x4ba)](q[lx(0x4bc)],q[lx(0x4bc)]));K['OUXwv'](Y[lp(0x163)],o)&&(Y[lp(0x163)]=o,O['style'][lp(0x2ae)]=o?F[lp(0x2ae)]||lp(0x4f5):K['WBlAP'],Y[lp(0x607)](K[lx(0x29f)]));};O[lr(0x464)+lt(0x714)](lr(0x79d),v),O[lt(0x464)+lt(0x714)](K['aGjew'],M),Y[lt(0x1ed)+'ickHandler']=M,Y[lt(0x25f)+lt(0x52c)]=v,Y[lr(0x4ac)+'mg']=new Image(),Y[lt(0x4ac)+'mg'][lt(0x59f)]=F['img'];},'beforeDraw'(c){const lR=fn,lB=fm,G={};G['AuqtI']=function(U,N){return U+N;},G[lR(0x6cc)]=function(U,N){return U+N;},G[lB(0x175)]=function(U,N){return U/N;},G[lB(0x23d)]=function(U,N){return U+N;},G[lB(0x2f0)]=function(U,N){return U/N;},G['VXqFP']=lR(0x7ab)+lB(0x2ec),G[lB(0x708)]=lB(0x51b)+',255,1)',G[lR(0x522)]=function(U,N){return U*N;},G[lB(0x765)]=function(U,N){return U*N;},G[lB(0x7aa)]='rgba(0,150'+lB(0x317),G['pcowI']=lR(0x51b)+',255,0.5)';const K=G,{ctx:O,chartArea:{right:F}}=c;O[lR(0x1d4)]();const A=c['T$opts']||this[lR(0x77b)],M=c[lB(0x4ac)+'mg'],v=A[lR(0x71a)]?.['w']??0x1e,C=A[lB(0x71a)]?.['h']??0x1e,Q=F-K[lR(0x28e)](v,A[lB(0x405)]?.[lB(0x6b0)]??0xa),H=A['offset']?.['top']??0xa,q=K[lR(0x6cc)](K[lR(0x175)](Math['max'](v,C),0x2),A[lR(0x485)+'a']??0x0),u=K[lR(0x28e)](Q,K[lR(0x175)](v,0x2)),W=K[lB(0x23d)](H,K[lB(0x2f0)](C,0x2)),o=!!c[lR(0x163)];O[lR(0x690)]=o?A[lR(0x732)+'h']?.[lB(0x27a)]??0x3:A[lR(0x732)+'h']?.[lB(0x16d)]??0x2,O[lR(0x565)+'e']=o?A[lB(0x341)]?.[lB(0x41f)+'r']??K[lB(0x37c)]:A[lB(0x341)]?.[lB(0x6b2)]??K[lB(0x708)],O[lR(0x5b7)](),O[lB(0x1e3)](u,W,q,0x0,K[lB(0x522)](Math['PI'],0x2)),O[lR(0x6b2)](),O[lB(0x33c)](),O[lR(0x5b7)](),O['arc'](u,W,q,0x0,K[lB(0x765)](Math['PI'],0x2)),O['fillStyle']=o?A[lR(0x341)]?.[lB(0x6f0)]??K[lR(0x7aa)]:A[lR(0x341)]?.[lB(0x270)]??K[lR(0x5d2)],O[lB(0x270)](),O[lR(0x33c)]();M&&O['drawImage'](M,Q,H,v,C);const g={};g['cx']=u,g['cy']=W,g[lR(0x4bc)]=q,c[lR(0x1c3)+lR(0x242)]=g;const a={};a[lR(0x6f5)]=H,a['bottom']=H+C,a['left']=Q,a[lB(0x6b0)]=Q+v,c[lR(0x1c3)+lB(0x202)]=a,O['restore']();},'afterDestroy'(Y){const lT=fm,lZ=fm,k={};k['xtYGY']=lT(0x546),k[lZ(0x19f)]=lZ(0x79d);const c=k,G=Y[lZ(0x291)];G&&Y[lT(0x35b)+lT(0x4d7)+'r']&&G[lZ(0x2ff)+lT(0x1d3)](c[lT(0x6e0)],Y['_settingCl'+lZ(0x4ea)]),G&&Y[lT(0x25f)+lZ(0x52c)]&&G[lZ(0x2ff)+lT(0x1d3)](c[lZ(0x19f)],Y[lT(0x25f)+'veHandler']),Y[lZ(0x35b)+'lickHandle'+'r']=null,Y[lZ(0x1c3)+lZ(0x202)]=null,Y[lT(0x4ac)+'mg']=null;}},fQ={};fQ[fm(0x768)]=0x0,fQ['isDragging']=![],fQ['circlePosi'+'tion']=null;const zoomRangeSlider={'id':fn(0x781)+fn(0x657),'var':fQ,'afterDatasetDraw'(Y,k,c){const lz=fm,lb=fm,G={};G['cZisA']=function(q,u){return q+u;},G['kximt']=function(q,u){return q-u;},G[lz(0x5f5)]=function(q,u){return q>u;},G[lz(0x256)]=function(q,u){return q+u;},G[lb(0x1e7)]=function(q,u){return q*u;},G['nQKQB']='#4285f4',G['FeHXA']=function(q,u){return q+u;},G[lz(0x1a9)]=function(q,u){return q*u;};const K=G,{ctx:O,chartArea:{left:F,right:A,top:M,bottom:v,width:C,height:Q}}=Y;this[lz(0x6ed)][lb(0x65e)+lz(0x674)]=this[lz(0x6ed)][lb(0x65e)+lb(0x674)]||F,O[lz(0x5b7)](),O[lz(0x315)]=lb(0x1d8),O[lz(0x1c7)](F,K[lb(0x280)](v,0x28),C,0x6,0x3),O[lb(0x270)]();const H=K[lz(0x4b0)](this[lb(0x6ed)]['circlePosi'+lb(0x674)],F);K[lb(0x5f5)](H,0x0)&&(O['beginPath'](),O[lb(0x315)]=lz(0x751),O[lz(0x1c7)](F,K[lz(0x280)](v,0x28),H,0x6,0x3),O[lz(0x270)]()),O['beginPath'](),O[lz(0x315)]=lz(0x6e3),O['arc'](this[lb(0x6ed)][lb(0x65e)+'tion'],K[lz(0x256)](v,0x28),0x8,0x0,K['JPkJZ'](Math['PI'],0x2)),O[lz(0x270)](),O[lb(0x5b7)](),O['strokeStyl'+'e']=K[lb(0x3d9)],O[lb(0x690)]=0x2,O['arc'](this[lz(0x6ed)]['circlePosi'+lz(0x674)],K[lb(0x70e)](v,0x28),0x8,0x0,K['CXxls'](Math['PI'],0x2)),O[lb(0x6b2)](),this[lb(0x6ed)][lb(0x26b)]&&(O[lz(0x5b7)](),O['fillStyle']=lz(0x36c)+lz(0x4c4)+'.2)',O[lb(0x1e3)](this[lb(0x6ed)]['circlePosi'+lb(0x674)],K[lb(0x70e)](v,0x28),0xc,0x0,Math['PI']*0x2),O['fill']());},'afterUpdate'(f,Y,k){const lh=fm,lX=fm;f['options'][lh(0x455)]['x'][lh(0x768)]=this[lh(0x6ed)]['min'];},'afterEvent'(Y,k,c){const lV=fm,lw=fm,G={};G[lV(0x461)]=lV(0x653),G[lV(0x1bd)]=function(Q,H){return Q===H;},G[lw(0x25c)]=lw(0x79d),G['IfZUX']=function(Q,H){return Q+H;},G['QlzFP']=function(Q,H){return Q<H;},G[lw(0x3f8)]=function(Q,H){return Q>H;};const K=G,{ctx:O,canvas:F,chartArea:{left:A,top:M,right:v,width:C}}=Y;F[lw(0x464)+lV(0x714)](lw(0x5a2),Q=>{const lP=lV;this['var'][lP(0x26b)]=!![];}),F[lV(0x464)+lV(0x714)](K['EJTIy'],Q=>{const lS=lw;this['var'][lS(0x26b)]=![];});if(K[lV(0x1bd)](k[lw(0x6e8)]['type'],K['krKEy'])&&this[lw(0x6ed)][lw(0x26b)]){const Q=k[lw(0x6e8)]['x']/K[lw(0x785)](C,A);this['var']['min']=Q*Y['config'][lw(0x3aa)][lV(0x1ec)]['length']-0x1,k[lV(0x480)]=!![],this['var'][lw(0x65e)+lV(0x674)]=K[lV(0x285)](k[lV(0x6e8)]['x'],A)?A:K[lV(0x3f8)](k[lw(0x6e8)]['x'],v)?v:k[lw(0x6e8)]['x'],Y['update']();}}},CreateZoomRangeSlider=(k={})=>{const k0=fm,k1=fm,c={};c['fMIse']=function(O,F){return O===F;},c[k0(0x2e6)]=function(O,F){return O===F;},c[k0(0x590)]=k1(0x4bb),c[k1(0x515)]=function(O,F){return O+F;},c[k0(0x49c)]=function(O,F){return O-F;},c[k1(0x5c0)]=function(O,F){return O>F;},c[k0(0x4fe)]=function(O,F){return O*F;},c[k1(0x726)]=function(O,F){return O*F;},c['ZZhcy']=k0(0x5a2),c[k1(0x3a3)]='mouseup',c[k1(0x169)]=k1(0x79d),c['heDvs']=k0(0x5a8),c[k0(0x5fa)]=function(O,F){return O/F;},c[k0(0x325)]=function(O,F){return O+F;},c['oinfC']=function(O,F){return O*F;},c['WwLCm']=function(O,F){return O<F;},c['EeKFz']=k0(0x1d8),c[k0(0x51a)]=k1(0x751),c[k0(0x312)]=k0(0x6e3),c[k0(0x20e)]=k1(0x36c)+k0(0x4c4)+'.2)',c[k1(0x660)]=k0(0x781)+'lider';const G=c,{sliderTrackColor:sliderTrackColor=G[k1(0x5ac)],sliderActiveColor:sliderActiveColor=G[k0(0x51a)],sliderHandleColor:sliderHandleColor=G['huZGX'],sliderHandleBorderColor:sliderHandleBorderColor=G['CfBhI'],sliderHandleHoverColor:sliderHandleHoverColor=G[k0(0x20e)]}=k,K={};return K[k0(0x768)]=0x0,K[k0(0x26b)]=![],K[k1(0x65e)+k0(0x674)]=null,{'id':G[k1(0x660)],'var':K,'afterDatasetDraw'(O,F,A){const k2=k1,k3=k0,M={'RPDoq':function(v,C){return G['fMIse'](v,C);}};if(G[k2(0x2e6)](G['lIdYO'],G[k2(0x590)])){const {ctx:v,chartArea:{left:C,right:Q,top:H,bottom:q,width:u,height:W}}=O;this[k2(0x6ed)]['circlePosi'+k2(0x674)]=this['var']['circlePosi'+k2(0x674)]||C,v[k2(0x5b7)](),v[k2(0x315)]=sliderTrackColor,v[k2(0x1c7)](C,G[k3(0x515)](q,0x28),u,0x6,0x3),v['fill']();const o=G[k2(0x49c)](this[k2(0x6ed)][k2(0x65e)+k3(0x674)],C);G[k2(0x5c0)](o,0x0)&&(v[k2(0x5b7)](),v['fillStyle']=sliderActiveColor,v[k3(0x1c7)](C,q+0x28,o,0x6,0x3),v[k3(0x270)]()),v[k3(0x5b7)](),v['fillStyle']=sliderHandleColor,v[k3(0x1e3)](this[k2(0x6ed)]['circlePosi'+k2(0x674)],q+0x28,0x8,0x0,G[k2(0x4fe)](Math['PI'],0x2)),v['fill'](),v[k3(0x5b7)](),v['strokeStyl'+'e']=sliderHandleBorderColor,v[k3(0x690)]=0x2,v['arc'](this[k2(0x6ed)][k2(0x65e)+k3(0x674)],q+0x28,0x8,0x0,G['CbOyz'](Math['PI'],0x2)),v[k3(0x6b2)](),this[k3(0x6ed)][k2(0x26b)]&&(v[k3(0x5b7)](),v[k2(0x315)]=sliderHandleHoverColor,v[k2(0x1e3)](this['var']['circlePosi'+k3(0x674)],G[k2(0x515)](q,0x28),0xc,0x0,G[k2(0x726)](Math['PI'],0x2)),v[k3(0x270)]());}else return M['RPDoq'](k,c);},'afterUpdate'(O,F,A){const k4=k0,k5=k1;O[k4(0x39c)][k5(0x455)]['x'][k5(0x768)]=this[k5(0x6ed)][k4(0x768)];},'afterEvent'(O,F,A){const k6=k1,k7=k1,{ctx:M,canvas:v,chartArea:{left:C,top:Q,right:H,width:q}}=O;v[k6(0x464)+k7(0x714)](G['ZZhcy'],u=>{this['var']['isDragging']=!![];}),v[k7(0x464)+'stener'](G[k6(0x3a3)],u=>{const k8=k7,k9=k6;this[k8(0x6ed)][k9(0x26b)]=![];});if(F[k7(0x6e8)][k6(0x5f6)]===G[k6(0x169)]&&this['var'][k7(0x26b)]){if(G[k6(0x42f)]!==G[k7(0x42f)])this['options']['scales']=K;else{const W=G[k7(0x5fa)](F['event']['x'],G[k6(0x325)](q,C));this[k7(0x6ed)][k6(0x768)]=G['oinfC'](W,O['config'][k7(0x3aa)]['labels'][k6(0x66d)])-0x1,F[k6(0x480)]=!![],this[k7(0x6ed)]['circlePosi'+k7(0x674)]=G[k7(0x74c)](F[k6(0x6e8)]['x'],C)?C:F[k7(0x6e8)]['x']>H?H:F[k7(0x6e8)]['x'],O[k6(0x607)]();}}}};},defaultBarTooltipCallback=Y=>{const kf=fn,kY=fn,k={};k[kf(0x15a)]=kf(0x693),k[kf(0x701)]=kY(0x2c3);const c=k,G=Y['dataset'][kf(0x5bc)]||'',K=Y[kf(0x4cc)]?.['y']??Y[kf(0x171)]??c[kY(0x15a)],O=typeof K===c[kf(0x701)]?K[kY(0x58b)+kf(0x18b)]():K;return G+':\x20'+O;},fH={};fH['display']=!![],fH[fn(0x601)]=fm(0x3d0),fH['autoSkip']=!![],fH['align']=fm(0x30d);const fq={};fq[fm(0x5b5)]=!![];const fu={};fu[fn(0x5f6)]=fn(0x535),fu[fm(0x5b5)]=!![],fu[fm(0x4ed)]=fH,fu[fm(0x525)]=fq;const fW={};fW['display']=!![],fW['color']=fn(0x3d0),fW[fm(0x7b7)]=fm(0x2a4),fW['autoSkip']=!![];const fo={};fo[fn(0x5b5)]=!![];const fg={};fg[fm(0x5f6)]=fm(0x24f),fg[fn(0x5b5)]=!![],fg[fn(0x4ed)]=fW,fg['grid']=fo;const fa={};fa['x']=fu,fa['y']=fg;const defaultBarScales=fa,createDefaultBarOptions=(k={},c=defaultBarScales)=>{const kE=fn,kl=fm,G={};G[kE(0x582)]=kl(0x609),G[kl(0x763)]='plugins',G[kE(0x4ca)]='indexAxis';const K=G,O=k['scales']||{},F={...c,...O},A=F;return{'_mounted':k[kl(0x682)]??(()=>{}),'indexAxis':k?.[kl(0x3a4)]??'x','responsive':!![],'maintainAspectRatio':![],'plugins':{'tooltip':{'enabled':k[kl(0x4f2)]?.['tooltip']?.[kl(0x3b3)]??!![],'mode':k['plugins']?.[kl(0x568)]?.[kE(0x2ab)]??K[kl(0x582)],'intersect':k[kE(0x4f2)]?.[kE(0x568)]?.['intersect']??![],'callbacks':{'label':defaultBarTooltipCallback,...k?.[kl(0x4f2)]?.[kl(0x568)]?.['callbacks']??{}}},...k?.[kl(0x4f2)]??{}},'scales':A,...stzUtil[kl(0x218)](k,[kl(0x455),K[kE(0x763)],K['ITiVW']])};},defaultLineTooltipCallback=f=>{const kk=fm,kc=fn,Y={'YIdbx':function(A,M){return A===M;},'dHoaH':kk(0x401),'knBeM':kc(0x4e4),'YDxZl':function(A,M){return A===M;},'lcDRi':'ImRin','vLyoB':function(A,M){return A===M;},'rrwhG':'number','WsDht':function(A,M){return A(M);}},k=f[kk(0x76a)],c=f[kk(0x4cc)],G=f['raw'];let K;if(c&&Y[kk(0x672)](stzUtil[kk(0x739)](c),Y[kc(0x25b)])){if(Y['YDxZl'](Y['lcDRi'],'ImRin'))K=c['y']??c['x'];else return Y[kk(0x672)](this[kk(0x5f6)],Y[kk(0x54d)]);}else{if(G&&stzUtil[kk(0x739)](G)===Y['knBeM']&&k?.[kk(0x49d)]){const M=k[kk(0x49d)],v=M[kc(0x33e)];K=G[v];}else K=G;}let O;if(Y[kc(0x302)](stzUtil[kc(0x739)](K),Y[kk(0x2ad)]))'LBqVq'===kc(0x34f)?O=K[kk(0x1fb)](0x2):G['setDataset'+kk(0x191)](K[kk(0x1e9)+'ex'],!O[kk(0x7ac)+kc(0x5ec)](F['datasetInd'+'ex']));else K!==null&&K!==undefined?O=Y[kc(0x66e)](String,K):O='No\x20Data';const F=k?.[kc(0x5bc)]??'값';return F+':\x20'+O;},fU={};fU[fm(0x5b5)]=!![],fU['color']=fm(0x3d0),fU[fn(0x1b7)]=!![],fU[fn(0x7b7)]=fm(0x30d);const fN={};fN[fm(0x5b5)]=!![];const fD={};fD[fn(0x5f6)]=fn(0x535),fD[fm(0x5b5)]=!![],fD[fn(0x4ed)]=fU,fD[fn(0x525)]=fN;const fI={};fI[fm(0x5b5)]=!![],fI[fn(0x601)]=fm(0x3d0),fI['align']=fm(0x2a4),fI['autoSkip']=!![];const fy={};fy[fm(0x5b5)]=!![];const fi={};fi['type']=fm(0x24f),fi[fn(0x5b5)]=!![],fi[fm(0x4ed)]=fI,fi[fn(0x525)]=fy;const fL={};fL['x']=fD,fL['y']=fi;const defaultLineScales=fL,createDefaultLineOptions=(Y={},k=defaultLineScales)=>{const kG=fn,kK=fm,c={};c[kG(0x77e)]=kK(0x609);const G=c;console['log'](kG(0x2a0)+'ultLineOpt'+kK(0x459)+kK(0x561)+kK(0x6d2),Y);const K=Y[kG(0x455)]||{};return{'hover':undefined,'indexAxis':undefined,'_mounted':Y['_mounted']??(()=>{}),'responsive':Y[kG(0x580)]??!![],'maintainAspectRatio':Y['maintainAs'+kG(0x6e7)]??![],'interaction':{'mode':Y[kK(0x74e)+'n']?.[kG(0x2ab)]??G[kK(0x77e)],'intersect':Y[kG(0x74e)+'n']?.[kG(0x735)]??![]},'plugins':{...Y[kK(0x4f2)]||{},'tooltip':{'enabled':Y[kK(0x4f2)]?.[kG(0x568)]?.[kK(0x3b3)]??!![],'mode':Y[kG(0x4f2)]?.[kG(0x568)]?.[kK(0x2ab)]??'index','intersect':Y[kK(0x4f2)]?.['tooltip']?.['intersect']??![],...Y[kG(0x4f2)]?.[kG(0x568)],'callbacks':{'label':defaultLineTooltipCallback,...Y?.[kK(0x4f2)]?.['tooltip']?.[kK(0x64e)]}}},'elements':{'point':{'radius':Y[kG(0x705)]?.[kK(0x5be)]?.[kG(0x4bc)]??0x0,'hoverRadius':Y['elements']?.['point']?.[kK(0x676)+'s']??0x0},'line':{'tension':Y[kG(0x705)]?.[kK(0x27d)]?.[kG(0x343)]??0.1}},'scales':stzUtil['merge'](k,K)};},fd={};fd['__proto__']=null,fd[fn(0x49e)+fn(0x456)+'r']=CreateZoomRangeSlider,fd['barScaleIm'+'gPlugin']=barScaleImgPlugin,fd[fn(0x3cc)+'n']=blinkPlugin,fd[fm(0x652)+fn(0x6e1)]=changeSetting,fd[fn(0x30b)+fn(0x7a0)]=chartMountPlugin,fd['createDefa'+'ultBarOpti'+fn(0x506)]=createDefaultBarOptions,fd[fm(0x2a0)+fn(0x620)+fn(0x5da)]=createDefaultLineOptions,fd[fn(0x54e)+'nd']=customLegend,fd[fn(0x76c)+fn(0x645)]=defaultBarScales,fd[fm(0x76c)+fn(0x35f)+'lback']=defaultBarTooltipCallback,fd[fn(0x63d)+fn(0x182)]=defaultLineScales,fd[fm(0x63d)+fm(0x3c3)+fm(0x1b9)]=defaultLineTooltipCallback,fd[fn(0x738)+fn(0x550)+fn(0x192)]=doughnutCenterTextPlugin,fd['loadingPlu'+fm(0x73f)]=loadingPlugin,fd[fn(0x6c6)+'Html']=makeCenterHtml,fd[fm(0x634)+'in']=noDataPlugin,fd[fm(0x781)+'lider']=zoomRangeSlider,fd[fm(0x20f)+fm(0x545)]=zoomResetPlugin;var LocalDefaults=Object[fm(0x28a)](fd);class CartesianChartWrapper extends ChartWrapper{['type'];['_chartId'];constructor(f,Y,k,c,G){const kO=fm;super(f,Y,k,c,G),this[kO(0x5f6)]=f;}get[fn(0x6ac)](){const kF=fm,kA=fm,Y={};Y[kF(0x59e)]=function(c,G){return c===G;},Y[kF(0x574)]='Ylftd';const k=Y;if(!this['_chartId']){if(k[kA(0x574)]===k[kF(0x574)])this[kA(0x2ce)]=this['type']+'_'+Math[kF(0x5ed)]();else return k[kF(0x59e)](k,c);}return this['_chartId'];}set[fm(0x6ac)](Y){const kM=fn,kv=fm,k={};k[kM(0x7a5)]=function(G,K){return G===K;};const c=k;this['_chartId']=Y,this[kv(0x39c)]&&c['xSCHC'](typeof this['options'],kv(0x4e4))&&(this[kM(0x39c)][kv(0x2ce)]=Y);}[fn(0x41e)+fm(0x593)](){return![];}['decorateDa'+fm(0x6cd)](f,Y){const kC=fn,kQ=fm,k=CHART_COLOR[Y%CHART_COLOR[kC(0x66d)]];f[kQ(0x661)+'Color']??=k,f['borderColo'+'r']??=k,f[kQ(0x1c8)]??='y';}[fn(0x1f4)+fm(0x2dc)](){return[chartMountPlugin];}[fm(0x1e5)](){const kH=fm,kq=fn,Y={};Y['moESj']=function(c,G){return c===G;},Y[kH(0x3fe)]=kH(0x27d);const k=Y;return k[kH(0x467)](this[kH(0x5f6)],k[kq(0x3fe)]);}[fm(0x5b3)](){const ku=fn,kW=fn,Y={};Y[ku(0x4fd)]=function(c,G){return c===G;},Y[kW(0x2b7)]='scatter';const k=Y;return k['JZVzp'](this[ku(0x5f6)],k[ku(0x2b7)]);}[fn(0x2a3)](){const Y={};Y['VudSi']='bar';const k=Y;return this['type']===k['VudSi'];}[fn(0x4b4)](){const ko=fm,kg=fm,Y={};Y[ko(0x6aa)]=function(G,K){return G!==K;},Y[kg(0x60d)]=function(G,K){return G===K;},Y[ko(0x576)]=function(G,K){return G>K;},Y[kg(0x4f0)]=kg(0x6c7),Y[ko(0x67b)]=function(G,K){return G!==K;},Y[kg(0x6e6)]=kg(0x606),Y[ko(0x641)]=kg(0x2ac),Y[ko(0x474)]=function(G,K){return G===K;};const k=Y,c=this[kg(0x1f4)+'ugins']();if(!this[ko(0x4f2)])this[ko(0x4f2)]=[...c];else{if(Array['isArray'](this[kg(0x4f2)])){if(k[kg(0x60d)](k[kg(0x641)],k[ko(0x641)])){const G=new Set(this['plugins'][kg(0x37f)](K=>K['id']));c[ko(0x184)](K=>{const ka=ko,kU=kg;if(k['LfHpM']==='emAry'){if(!G[ka(0x5a4)](K['id']))this['plugins'][kU(0x3ec)](K);}else{const F={'HNSgB':function(M,v){const kN=ka;return k[kN(0x6aa)](M,v);},'snfIb':ka(0x4e4)},A=K[ka(0x3aa)];if(this['requireLab'+'els']()&&(!A?.['labels']||k[kU(0x60d)](A[kU(0x1ec)][ka(0x66d)],0x0)))throw new v(C[kU(0x5ef)+kU(0x2bc)]);A&&A[ka(0x205)](A['datasets'])&&k[kU(0x576)](A[ka(0x28d)][kU(0x66d)],0x0)&&(A[ka(0x28d)]=A[ka(0x28d)]['map']((W,o)=>{const kD=kU,kI=ka;if(!W||F[kD(0x3d2)](A[kD(0x739)](W),F[kI(0x53c)]))return W;return this[kI(0x215)+kI(0x6cd)](W,o),W;}));}});}else{const O={};if(k[ko(0x67b)](K,![]))O[k[kg(0x6e6)]]=O;if(k['snpwC'](F,![]))O[kg(0x33e)]=A;this[kg(0x28d)][M][ko(0x49d)]=O;}}else this[ko(0x4f2)]=[...c];}if(this[ko(0x41e)+'els']()&&(!this[kg(0x1ec)]||k[kg(0x474)](this[ko(0x1ec)][ko(0x66d)],0x0)))throw new CustomError(ErrorCode[kg(0x5ef)+ko(0x2bc)]);}[fm(0x631)](Y){const ky=fm,ki=fn,k={};k['GdYYC']=function(K,O){return K/O;},k[ky(0x56f)]=function(K,O){return K/O;},k[ky(0x4b6)]=function(K,O){return K*O;},k[ky(0x516)]=function(K,O){return K-O;},k[ky(0x297)]=function(K,O){return K*O;},k[ki(0x158)]=function(K,O){return K!==O;},k[ky(0x4a6)]=function(K,O){return K===O;},k[ki(0x288)]=ki(0x3aa),k[ki(0x37b)]=ki(0x66f),k[ki(0x532)]=ky(0x4f2),k[ki(0x524)]=ki(0x34b),k[ki(0x1f1)]='AUtsF';const c=k,G={'get':(K,O,F)=>{const kd=ki,ks=ki,A={'wTilp':function(M,v){const kL=l;return c[kL(0x158)](M,v);},'Cjnfv':kd(0x4e4)};if(c[kd(0x4a6)](O,c[ks(0x288)])){const M=K[kd(0x3aa)];if(this[kd(0x41e)+'els']()&&(!M?.[kd(0x1ec)]||c[kd(0x4a6)](M[kd(0x1ec)]['length'],0x0))){if(c['pLeTu']==='hwGrR'){const H=K[kd(0x375)+kd(0x78c)+'t'](),q=c[kd(0x233)](O[kd(0x492)],H['width']),u=c[ks(0x56f)](F[kd(0x1c9)],H[kd(0x1c9)]);return{'x':c['oZGSh'](c[ks(0x516)](A[ks(0x6cb)],H[ks(0x57b)]),q),'y':c[ks(0x297)](M[kd(0x40d)]-H['top'],u)};}else throw new CustomError(ErrorCode['LABELS_REQ'+ks(0x2bc)]);}M&&Array[ks(0x205)](M[kd(0x28d)])&&M['datasets'][kd(0x66d)]>0x0&&(M[ks(0x28d)]=M[ks(0x28d)][kd(0x37f)]((C,Q)=>{const ke=ks,kt=kd;if(!C||A[ke(0x304)](stzUtil[kt(0x739)](C),A[kt(0x55c)]))return C;return this[ke(0x215)+kt(0x6cd)](C,Q),C;}));}if(O===c[kd(0x532)]){const C=this['mustHavePl'+'ugins']();if(!K['plugins'])K['plugins']=[...C];else{if(K[ks(0x39c)][ks(0x47a)])K[ks(0x4f2)][kd(0x3ec)](loadingPlugin);else{if(c[ks(0x4a6)](stzUtil[kd(0x739)](K[ks(0x4f2)]),c[kd(0x524)])){if(c[kd(0x1f1)]==='AUtsF'){const Q=new Set(K[ks(0x4f2)][kd(0x37f)](H=>H['id']));C[ks(0x184)](H=>{const kr=kd,km=kd;if(!Q[kr(0x5a4)](H['id']))K[kr(0x4f2)][km(0x3ec)](H);});}else{const q={};q['id']=q+(ks(0x2cf)+'e-')+this[ks(0x2ce)];const u=q;this[ks(0x6de)](u);}}else K['plugins']=[...C];}}}return Reflect[kd(0x2b9)](K,O,F);}};return new Proxy(Y,G);}['makeConfig'](Y=''){const kn=fm,kj=fm;this[kn(0x4b4)]();if(Y)this['chartId']=Y;const k=this[kj(0x6ac)],c={'_chartId':k,'type':this['type'],'data':{'labels':this['labels'],'datasets':this[kj(0x28d)]},'options':{...this[kn(0x39c)],'_chartId':Y||this[kj(0x5f6)]+'_'+Math[kj(0x5ed)]()},'plugins':this[kj(0x4f2)]},G=this[kn(0x631)](c);void G[kn(0x3aa)],void G['plugins'];const K={};return K[kn(0x2ce)]=G['_chartId'],K[kn(0x5f6)]=G[kj(0x5f6)],K[kj(0x3aa)]=G[kn(0x3aa)],K['options']=G[kn(0x39c)],K[kn(0x4f2)]=G['plugins'],K;}[fn(0x3e6)+fn(0x498)](){const kJ=fn,kx=fm,Y={};Y[kJ(0x795)]='line',Y[kJ(0x776)]=kJ(0x50f),Y[kJ(0x32c)]=kx(0x401),Y[kJ(0x473)]='bubble';const k=Y;return[k[kJ(0x795)],k[kx(0x776)],k[kJ(0x32c)],k[kJ(0x473)]][kx(0x5cd)](this[kJ(0x5f6)]);}['setScales'](Y){const kp=fn,kR=fm,k={};k[kp(0x335)]=kR(0x50f),k[kp(0x4e1)]='scatter',k[kp(0x3ad)]=kR(0x1bc),k[kp(0x712)]=function(G,K){return G===K;},k['hDLEq']=kp(0x4e4),k['aoKsh']=function(G,K){return G===K;},k['wIMHk']='GQXSE',k[kR(0x1f7)]=kp(0x65f);const c=k;if(this['options']&&c[kR(0x712)](typeof this['options'],c[kp(0x3f0)])){if(c[kR(0x491)](c['wIMHk'],c[kR(0x1f7)])){const K=[c[kR(0x335)],kp(0x27d),c[kp(0x4e1)],c[kp(0x3ad)]];if(this[kp(0x28d)]&&this[kR(0x28d)][K]){if(K[kp(0x5cd)](this[kR(0x5f6)]))this[kp(0x28d)][q][kp(0x1c8)]=u;else throw new W(o[kp(0x756)+kR(0x536)],this['type']+('\x20support\x20y'+kp(0x5e1)+kR(0x309)));}return this;}else this[kR(0x39c)][kR(0x455)]=Y;}return this;}[fm(0x5a1)+'le'](Y,k){const kB=fm,kT=fm,c={};c[kB(0x39a)]=function(K,O){return K===O;},c['jnsNw']=kB(0x4e4),c[kB(0x5dd)]=function(K,O){return K===O;},c[kT(0x334)]=kB(0x65c);const G=c;if(this[kB(0x39c)]&&G['HBIFg'](typeof this[kT(0x39c)],G['jnsNw'])){if(G[kB(0x5dd)](G['mHCVn'],G[kT(0x334)])){const K=this[kT(0x39c)];!K[kB(0x455)]&&(K['scales']={}),!K['scales'][Y]&&(K[kB(0x455)][Y]={}),K[kT(0x455)][Y]&&(K[kB(0x455)][Y][kB(0x542)]=k);}else return this['map'][kB(0x305)](Y);}return this;}['setGridOpt'+'ions'](Y,k){const kZ=fn,kz=fn,c={};c['hUHhn']=kZ(0x4e4),c['njLwG']=function(K,O){return K===O;},c[kZ(0x577)]=kz(0x74a),c[kz(0x5f9)]=function(K,O){return K===O;},c[kZ(0x447)]=kZ(0x517),c['BRlNz']=function(K,O){return K!==O;},c[kZ(0x4a0)]=kz(0x31e),c[kz(0x5d4)]=kz(0x780);const G=c;if(this[kz(0x39c)]&&typeof this[kz(0x39c)]===G[kZ(0x31d)]){if(G['njLwG'](G[kZ(0x577)],G['Upzvo'])){const K=this[kZ(0x39c)];!K['scales']&&(G[kz(0x5f9)](kz(0x517),G[kZ(0x447)])?K[kZ(0x455)]={}:this['datasets'][k]['borderRadi'+'us']=c),!K[kz(0x455)][Y]&&(K[kZ(0x455)][Y]={}),K[kZ(0x455)][Y]&&(G['BRlNz'](G[kz(0x4a0)],G[kZ(0x5d4)])?K[kZ(0x455)][Y]['grid']={...K[kZ(0x455)][Y][kZ(0x525)],...k}:this[kz(0x28d)][k][kZ(0x1c8)]=c);}else return this[kZ(0x28d)]&&this['datasets'][c]&&(this[kZ(0x28d)][O][kZ(0x732)+'h']=F),this;}return this;}[fm(0x44f)](Y=![],k){const kb=fn,kh=fn,c={};c['PYcFV']=function(F,A){return F===A;},c[kb(0x744)]=kb(0x1b0),c[kh(0x5fe)]=function(F,A){return F===A;},c[kh(0x261)]=kh(0x4a8);const G=c;if(stzUtil[kb(0x48b)](this[kb(0x39c)]))return this;const K=this[kb(0x39c)];stzUtil['isEmpty'](K[kb(0x4f2)])&&(G[kb(0x7a9)](G[kb(0x744)],G[kb(0x744)])?K[kb(0x4f2)]={}:this[kh(0x4f2)]=[Y]);const O=Y?stzUtil[kb(0x2fd)](DefaultZoomOptions):stzUtil['cloneDeep'](k);K[kh(0x4f2)][kh(0x627)]=stzUtil[kb(0x543)](K[kh(0x4f2)][kh(0x627)]||{},O);if(!this[kb(0x4f2)]){if(G['oMnVl']('ezlJL',G['twYwL']))this['plugins']=[zoomResetPlugin];else{const M=this['get'](G);if(K[kh(0x48b)](M))throw new A(M['UNKNOWN_ER'+kb(0x54c)]);return M;}}else{if(Array['isArray'](this[kb(0x4f2)])){const M=this[kb(0x4f2)]['some'](v=>v&&v['id']===zoomResetPlugin['id']);if(!M)this[kb(0x4f2)][kb(0x3ec)](zoomResetPlugin);}else this[kh(0x4f2)]=[zoomResetPlugin];}return this;}[fn(0x68d)+'els'](f=![],Y){const kX=fm,kV=fn;if(stzUtil[kX(0x48b)](this[kX(0x39c)]))return this;const k=this[kV(0x39c)];stzUtil[kX(0x48b)](k['plugins'])&&(k[kX(0x4f2)]={});const c=f?stzUtil[kX(0x2fd)](DefaultDataLabelsOptions):stzUtil['cloneDeep'](Y);return k[kX(0x4f2)][kV(0x494)]=c,this;}[fm(0x56c)+'rDataset'](Y,k='y'){const kw=fm,kP=fm,c={};c['purgH']='#000',c[kw(0x4ee)]=function(K,O){return K===O;},c[kw(0x411)]=kP(0x53e),c[kw(0x4f1)]=function(K,O){return K===O;},c[kP(0x2d7)]=function(K,O){return K!==O;},c[kP(0x24c)]=kw(0x510),c['GElOt']=kP(0x174);const G=c;if(!this[kP(0x28d)]||!this[kw(0x28d)][Y])return this;if(this[kP(0x3e6)+kw(0x498)]()){if(G[kw(0x4ee)](kP(0x53e),G[kP(0x411)])){this[kP(0x28d)][Y][kP(0x1c8)]=k;if(G['gKiTR'](k,'y1')){if(G[kP(0x2d7)](G[kP(0x24c)],G[kP(0x654)]))this[kw(0x540)+kP(0x662)]();else return G[kw(0x44a)];}}else{const F=this[kP(0x39c)];!F['plugins']&&(F[kP(0x4f2)]={}),F[kw(0x4f2)][kw(0x788)]=c,this[kP(0x6de)](G),K['log'](this['options']);}}return this;}[fm(0x540)+fm(0x662)](){const kS=fm,c0=fn,c={};c[kS(0x706)]=function(O,F){return O!==F;},c[kS(0x4e8)]=c0(0x4e4),c[c0(0x49a)]=kS(0x6b0),c[kS(0x501)]='#000',c[kS(0x488)]=kS(0x410);const G=c,K=this[c0(0x39c)];if(G[c0(0x706)](typeof K,G[c0(0x4e8)]))return;if(!K[kS(0x455)])K[kS(0x455)]={};if(!('y1'in K[c0(0x455)])){const O={};O['drawOnChar'+'tArea']=![];const F={};F[c0(0x5f6)]='linear',F[c0(0x5b5)]=!![],F[c0(0x678)]=G[kS(0x49a)],F[kS(0x525)]=O,F[kS(0x4ed)]={},F[kS(0x4ed)]['color']=G[kS(0x501)],F[kS(0x4ed)]['align']=G['tQQkG'],K['scales']['y1']=F;}}[fn(0x514)+'ge'](Y,k,c){const c1=fm,c2=fn,G={};G['xKATP']=function(O,F){return O===F;},G['XUMTW']=function(O,F){return O===F;},G[c1(0x177)]=c2(0x4e4),G['lMbJO']=function(O,F){return O===F;},G[c1(0x5ee)]=c2(0x18d),G['ZSeXo']=c1(0x75f),G[c2(0x2eb)]=c2(0x414),G['mXJYu']=function(O,F){return O!==F;},G['KicKb']=c1(0x6c0),G[c1(0x6a1)]=c2(0x57e);const K=G;if(this[c1(0x39c)]&&K[c2(0x437)](typeof this[c1(0x39c)],K[c2(0x177)])){if(K[c2(0x57c)]('nekYj',c2(0x4b8)))Y[c2(0x4f2)]={};else{const F=this[c2(0x39c)];if(!F[c2(0x455)]){if(K['xKATP'](K['Ehijd'],K['ZSeXo']))throw new k(c[c2(0x725)+c2(0x54c)]);else F[c1(0x455)]={};}!F[c1(0x455)][Y]&&(K[c1(0x520)](K['YsEGh'],K[c2(0x2eb)])?F[c1(0x455)][Y]={}:O[F(0x1b9)](A[M(0x1da)](v,C)));if(F[c1(0x455)][Y]){K[c2(0x6f7)](k,undefined)&&(K[c2(0x437)]('JztFq',K['KicKb'])?Y[c1(0x19a)]():F['scales'][Y][c1(0x768)]=k);if(K[c2(0x6f7)](c,undefined)){if('iiAeU'===K[c2(0x6a1)])F[c1(0x455)][Y][c1(0x77d)]=c;else return K[c1(0x520)](k,c);}}}}return this;}[fm(0x167)](Y,k){const c3=fn,c4=fn,c={};c[c3(0x52d)]='bar',c[c4(0x381)]='line',c[c4(0x573)]=c4(0x401),c[c4(0x4e2)]=function(O,F){return O!==F;},c[c4(0x70a)]=c4(0x228);const G=c,K=[G[c3(0x52d)],G[c3(0x381)],G['iVXep'],c3(0x1bc)];if(this['datasets']&&this['datasets'][Y]){if(K['includes'](this[c3(0x5f6)]))this[c4(0x28d)][Y][c3(0x1c8)]=k;else{if(G[c3(0x4e2)]('onYGx',G[c3(0x70a)]))throw new CustomError(ErrorCode[c3(0x756)+c4(0x536)],this['type']+(c4(0x189)+'AxisId\x20opt'+c4(0x309)));else Y[c4(0x1dc)][c4(0x640)]();}}return this;}['setAxisPos'+'ition'](Y,k){const c5=fn,c6=fm,c={};c[c5(0x1ab)]=function(K,O){return K in O;};const G=c;if(this['options']&&this[c6(0x39c)][c6(0x455)]&&this[c5(0x39c)][c6(0x455)][Y]){const K=this[c5(0x39c)]['scales'][Y];if(G[c5(0x1ab)]('position',K))K['position']=k;else throw new CustomError(ErrorCode[c5(0x756)+'TED_OPTION'],this[c6(0x39c)][c6(0x455)]+('\x20not\x20suppo'+'rt\x20scales\x20'+c6(0x663)));}return this;}[fn(0x321)](k){const c7=fm,c8=fn,c={'cquii':function(F,A){return F+A;},'JyQVs':function(F,A){return F-A;},'icOap':function(F,A){return F>A;},'tGvnd':'#4285f4','XQNkW':'#ffffff','DHacB':function(F,A){return F+A;},'MQkIg':function(F,A){return F*A;},'Ibauk':function(F,A){return F*A;},'toLho':function(F,A){return F(A);},'cMxhQ':function(F,A){return F(A);},'JDxQV':function(F,A){return F!==A;},'WQpTA':c7(0x245),'RmBBw':function(F,A){return F===A;},'mjXsQ':function(F,A){return F<A;},'ZdVdt':function(F,A){return F===A;},'BdxEc':c8(0x3db),'UgHGU':c7(0x791),'UxwxR':c8(0x38f)};!this[c7(0x39c)]&&(this['options']={});const G=this[c7(0x39c)];!G[c8(0x455)]&&(G[c7(0x455)]={});if(G[c7(0x455)][k]){if(c['JDxQV'](c['WQpTA'],c[c8(0x4cb)])){const {ctx:A,chartArea:{left:v,right:C,top:Q,bottom:H,width:q,height:u}}=G;this[c8(0x6ed)]['circlePosi'+c8(0x674)]=this[c8(0x6ed)][c8(0x65e)+c8(0x674)]||v,A[c8(0x5b7)](),A[c7(0x315)]='#e0e0e0',A[c7(0x1c7)](v,c[c7(0x4d2)](H,0x28),q,0x6,0x3),A[c7(0x270)]();const W=c['JyQVs'](this[c8(0x6ed)][c7(0x65e)+c8(0x674)],v);c[c8(0x6af)](W,0x0)&&(A[c8(0x5b7)](),A[c7(0x315)]=c['tGvnd'],A[c8(0x1c7)](v,c[c8(0x4d2)](H,0x28),W,0x6,0x3),A[c8(0x270)]()),A['beginPath'](),A[c8(0x315)]=c[c8(0x608)],A[c7(0x1e3)](this[c8(0x6ed)]['circlePosi'+'tion'],c[c7(0x724)](H,0x28),0x8,0x0,c[c8(0x2e4)](K['PI'],0x2)),A[c8(0x270)](),A[c8(0x5b7)](),A[c8(0x565)+'e']=c['tGvnd'],A[c7(0x690)]=0x2,A['arc'](this[c8(0x6ed)][c8(0x65e)+'tion'],H+0x28,0x8,0x0,c[c8(0x436)](O['PI'],0x2)),A[c7(0x6b2)](),this[c8(0x6ed)][c8(0x26b)]&&(A[c7(0x5b7)](),A['fillStyle']='rgba(66,\x201'+'33,\x20244,\x200'+c7(0x69f),A[c7(0x1e3)](this[c7(0x6ed)][c7(0x65e)+c8(0x674)],c[c7(0x724)](H,0x28),0xc,0x0,A['PI']*0x2),A[c7(0x270)]());}else return console[c8(0x722)](c7(0x5ae)+k+(c8(0x2b2)+c8(0x443))),this;}if(!this[c8(0x28d)]||c['RmBBw'](this[c8(0x28d)][c7(0x66d)],0x0))throw new CustomError(ErrorCode['DATASET_RE'+c8(0x702)]);const K=this[c7(0x28d)];for(let A=0x0;c['mjXsQ'](A,K['length']);A++){if(c[c7(0x399)](c[c8(0x79e)],c['BdxEc'])){const M=K[A];if(!M){if(c[c7(0x20a)](c['UgHGU'],c[c8(0x208)]))throw new CustomError(ErrorCode[c7(0x27c)+c8(0x5d5)+'RTY'],c8(0x530)+c8(0x7af)+A+(c8(0x32d)+c7(0x2ba)+'d'));else Y[c8(0x4f2)]={};}if(!M['image']&&(!M['images']||M[c7(0x644)]['length']===0x0))throw new CustomError(ErrorCode[c7(0x3fa)+c8(0x365)+'NG'],c7(0x296)+(M[c8(0x5bc)]||'#'+A)+(c8(0x258)+'mage\x20prope'+c7(0x24e)));}else throw new k(c['DATASET_RE'+c7(0x702)]);}const O=k['startsWith']('x');if(O){const Q={};Q['id']=k+(c7(0x2cf)+'e-')+this['_chartId'];const H=Q;this[c7(0x6de)](H);}else{if(c[c7(0x3b1)](c8(0x17a),c[c8(0x3a7)])){const q={};q['id']=k+('ScalesImag'+'e-')+this[c8(0x2ce)];const u=q;this[c7(0x6de)](u);}else{const o=[];A[c[c8(0x48a)](M,0x1bc)](v,o);for(const g of W){o[c[c7(0x1f2)](N,0x1b9)](D[c[c7(0x1f2)](I,0x1da)](g,i));}return o;}}return this;}['addRangeSl'+fn(0x50b)](f){const c9=fm,cf=fn,Y={'htPNw':function(c,G){return c(G);}},k=Y[c9(0x1ff)](CreateZoomRangeSlider,f);return this[cf(0x6de)](k),this;}[fm(0x324)](Y){const cY=fn,cE=fn,k={};k['FxuBS']=function(K,O){return K!==O;},k[cY(0x5fd)]=cE(0x3c9);const c=k;!this[cY(0x39c)]&&(this[cE(0x39c)]={});const G=this[cE(0x39c)];if(!G[cY(0x636)]){if(c[cE(0x4ef)](c[cE(0x5fd)],cE(0x3c9))){if(!c[cE(0x5a4)](G['id']))this[cY(0x4f2)][cE(0x3ec)](K);}else G[cE(0x636)]={};}return G[cY(0x636)][cY(0x70b)]=Y,this;}['setBackgro'+fm(0x31f)](f){const cl=fm,ck=fm,Y={'UWuhY':function(k,c){return k(c);},'DGwQA':function(k,c){return k===c;},'KPQmd':cl(0x710),'TrHGG':ck(0x64b),'vCklQ':ck(0x5bf),'qfUNo':function(k,c){return k===c;},'gQgpz':cl(0x21e),'jLmME':ck(0x6c8),'vDzay':function(k,c){return k!==c;},'joKmq':ck(0x3f3),'AmElu':function(k,c){return k<c;},'OpkNQ':cl(0x1b3),'HRbfH':cl(0x3bf),'RtaCt':ck(0x226)+'e\x20must\x20be\x20'+cl(0x4b1)+cl(0x61a),'ZYIJf':function(k,c){return k===c;},'rcebD':'MPiKN'};if(Y[cl(0x244)](f,0x0)||f>0x1){if(Y['vDzay'](Y[cl(0x6bd)],Y[ck(0x766)]))throw new CustomError(ErrorCode['UNKNOWN_ER'+ck(0x54c)],Y[cl(0x59d)]);else return this['datasets']&&this[ck(0x28d)][cl(0x184)]((O,F)=>{this['setCategor'+'yPercentag'+'e'](F,c);}),this;}if(!this[ck(0x28d)]||Y['ZYIJf'](this['datasets'][ck(0x66d)],0x0))return Y['qfUNo'](Y[cl(0x38b)],ck(0x70c))?this:(this[cl(0x28d)]&&this[ck(0x28d)]['forEach']((O,F)=>{const cc=cl;this[cc(0x2ca)+'idth'](F,c);}),this);return this['datasets'][ck(0x184)](G=>{const cK=ck,cO=cl,K={'qsMZQ':function(O,F){const cG=l;return Y[cG(0x36e)](O,F);}};if(G){if(Y['DGwQA'](Y[cK(0x2c8)],Y['KPQmd'])){!G['background'+cO(0x397)]&&G['borderColo'+'r']&&('LwrmQ'===cO(0x5ca)?G[cK(0x661)+'Color']=G[cO(0x764)+'r']:this[cK(0x190)+cK(0x639)](k,c));if(G[cO(0x661)+cO(0x397)]){if(Y[cK(0x3ba)]!==Y[cO(0x6c5)]){if(Y[cO(0x318)](typeof G[cO(0x661)+cK(0x397)],cO(0x354))){if(Y['gQgpz']!==Y[cK(0x696)])G['background'+'Color']=this[cO(0x509)+cO(0x397)](G['background'+cK(0x397)],f);else return this[cO(0x28d)]&&this[cO(0x28d)][cK(0x184)]((A,M)=>{const cF=cO;this['setPointHo'+cF(0x1aa)](M,c);}),this;}else Array[cK(0x205)](G[cK(0x661)+cK(0x397)])&&(Y[cO(0x2da)](cO(0x3f3),Y[cO(0x6a8)])?Y[cK(0x27e)+cK(0x6e1)]=!![]:G[cK(0x661)+'Color']=G[cK(0x661)+'Color'][cO(0x37f)](M=>typeof M===cO(0x354)?this[cO(0x509)+cO(0x397)](M,f):M));}else K[cO(0x363)](Y,'클릭');}}else{this[cO(0x4b4)]();const C=k||this[cK(0x5f6)]+'_'+c[cK(0x5ed)](),Q={};Q['_chartId']=C,Q[cK(0x5f6)]=this[cK(0x5f6)],Q[cK(0x3aa)]={},Q[cO(0x39c)]={...this[cK(0x39c)]},Q[cO(0x4f2)]=this[cK(0x4f2)],Q[cK(0x3aa)][cK(0x1ec)]=this[cO(0x1ec)],Q[cK(0x3aa)][cO(0x28d)]=this[cO(0x28d)],Q[cO(0x39c)][cO(0x2ce)]=C;const H=Q;return this['configAop'](H);}}}),this;}[fn(0x509)+fm(0x397)](f,Y){const cA=fn,cM=fn,k={'GrVPj':function(K,O){return K(O);},'vIFoo':function(K,O){return K===O;},'jMjnc':cA(0x50f),'CgwFM':cM(0x19b)+cM(0x373)+cA(0x63f)+'EFGHIJKLMN'+cA(0x4ff)+cA(0x533)+'89+/=','RShjt':function(K,O){return K%O;},'qsnWi':function(K,O){return K*O;},'tCNxI':function(K,O){return K%O;},'RKVcR':'fromCharCo'+'de','TtiRf':function(K,O){return K&O;},'HUvRr':function(K,O){return K&O;},'mNWrB':cM(0x479),'PKeYU':cM(0x66d),'csjwN':function(K,O){return K<O;},'DDfog':function(K,O){return K+O;},'pRrNU':function(K,O){return K+O;},'EjOsM':'charCodeAt','tvHuJ':'slice','DLIif':cM(0x279),'BOQmE':cM(0x19c),'ryvBL':function(K,O,F){return K(O,F);},'CpblW':function(K,O){return K+O;},'xnZQd':function(K,O){return K===O;},'ySCra':'rRedm','gnlPo':function(K,O,F){return K(O,F);},'aFUhI':function(K,O,F){return K(O,F);},'otCUc':function(K,O){return K!==O;},'dfJgt':cA(0x4e0),'erlov':function(K,O){return K===O;},'UCRgx':cA(0x168),'HqHeK':cA(0x5e2),'Wwxyd':'jpjBl'};if(f[cA(0x4b2)]('#')){const K=f[cM(0x6a3)](0x1);let O,F,A;if(k['vIFoo'](K[cA(0x66d)],0x3))O=k[cM(0x32f)](parseInt,K[0x0]+K[0x0],0x10),F=k[cA(0x32f)](parseInt,k['DDfog'](K[0x1],K[0x1]),0x10),A=k['ryvBL'](parseInt,k[cA(0x200)](K[0x2],K[0x2]),0x10);else{if(k['vIFoo'](K[cM(0x66d)],0x6))k[cA(0x730)]('ZzHIM',k[cA(0x229)])?k[cM(0x455)][c]={}:(O=k[cM(0x7a3)](parseInt,K['slice'](0x0,0x2),0x10),F=k[cM(0x50a)](parseInt,K[cM(0x6a3)](0x2,0x4),0x10),A=parseInt(K[cM(0x6a3)](0x4,0x6),0x10));else{if(k[cA(0x5ba)]('IVERF',k[cA(0x4b7)]))return f;else{G[k[cM(0x1c2)](K,0x196)](O[F(0x1ae)]);return;}}}return cM(0x6a5)+O+',\x20'+F+',\x20'+A+',\x20'+Y+')';}const c=f['match'](/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(c){if(k[cA(0x71b)](k[cM(0x753)],k['UCRgx'])){const [,C,Q,H]=c;return'rgba('+C+',\x20'+Q+',\x20'+H+',\x20'+Y+')';}else return k[cA(0x1fd)](this['type'],k[cA(0x268)]);}const G=f['match'](/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([0-9.]+)\)/);if(G){if(k[cA(0x1fd)](k[cA(0x42c)],k['Wwxyd'])){var W=function(I){const cv=cM,cC=cA,i=k[cv(0x649)];let L='',d='';for(let s=0x0,e,t,m=0x0;t=I[cC(0x417)](m++);~t&&(e=k[cv(0x362)](s,0x4)?k[cC(0x159)](e,0x40)+t:t,k[cC(0x7a6)](s++,0x4))?L+=Q[k['RKVcR']](k[cC(0x3b2)](0xff,e>>k[cC(0x195)](k['qsnWi'](-0x2,s),0x6))):0x0){t=i[k[cv(0x6ae)]](t);}for(let n=0x0,j=L[k['PKeYU']];k[cv(0x73a)](n,j);n++){d+=k[cC(0x68e)]('%',k[cC(0x6a0)]('00',L[k[cC(0x75e)]](n)[cC(0x7a1)](0x10))[k['tvHuJ']](-0x2));}return k[cC(0x1c2)](C,d);};F[k[cA(0x554)]]=W,A=arguments,M[k[cA(0x578)]]=!![];}else{const [,W,o,a]=G;return cA(0x6a5)+W+',\x20'+o+',\x20'+a+',\x20'+Y+')';}}return f;}['setParsing'+fm(0x5f1)](Y,k){const cQ=fn,cH=fn,c={};c[cQ(0x16c)]=cH(0x549),c[cH(0x39f)]=function(K,O){return K===O;},c[cQ(0x50d)]=cH(0x393),c['oHyjb']=cQ(0x44c),c['MjAiV']=function(K,O){return K!==O;},c[cH(0x4a4)]=function(K,O){return K!==O;};const G=c;if(this[cQ(0x39c)]&&stzUtil['getType'](this[cQ(0x39c)])===G[cQ(0x16c)]){if(G[cH(0x39f)](G[cQ(0x50d)],G[cH(0x4f6)])){const O=new k(this['plugins'][cQ(0x37f)](F=>F['id']));c[cQ(0x184)](F=>{const cq=cQ,cu=cQ;if(!O[cq(0x5a4)](F['id']))this[cu(0x4f2)][cq(0x3ec)](F);});}else{const O=this[cQ(0x39c)];O['parsing']=Y!==![]||k!==![]?{...G[cH(0x5e3)](Y,![])&&{'xAxisKey':Y},...G['uDODz'](k,![])&&{'yAxisKey':k}}:![];}}return this;}[fn(0x720)+'Parsing'](Y,k,c){const cW=fn,co=fm,G={};G['pWwad']=cW(0x606),G['YDKLI']=function(O,F){return O!==F;},G[cW(0x4cf)]=co(0x33e);const K=G;if(this[co(0x28d)]&&this[cW(0x28d)][Y]){const O={};if(k!==![])O[K['pWwad']]=k;if(K[cW(0x55b)](c,![]))O[K['GhdUe']]=c;this[co(0x28d)][Y][co(0x49d)]=O;}return this;}[fn(0x250)+fm(0x592)+'g'](Y,k){const cg=fn,ca=fm,c={};c[cg(0x3dd)]=function(K,O){return K!==O;},c[cg(0x45b)]=ca(0x606),c[cg(0x3e4)]=cg(0x33e);const G=c;if(this[ca(0x28d)]){const K={};if(G['BCqtu'](Y,![]))K[G[cg(0x45b)]]=Y;if(G[ca(0x3dd)](k,![]))K[G['Xcluw']]=k;this['datasets']['forEach'](O=>{const cU=ca;O[cU(0x49d)]=K;});}return this;}[fm(0x54e)+'nd'](Y){const cN=fn,cD=fn,k={};k[cN(0x667)]=cD(0x549),k[cD(0x2f7)]=cD(0x4d1)+cD(0x560);const c=k;if(!stzUtil['isEmpty'](this['options'])&&stzUtil['getType'](this['options'])===c[cN(0x667)]){const G=this[cD(0x39c)];!G['plugins']&&(G[cN(0x4f2)]={}),G[cN(0x4f2)][cN(0x788)]=Y,this['setPlugin'](customLegend),console[cD(0x4cd)](this['options']);}else throw new CustomError(ErrorCode['UNKNOWN_ER'+cN(0x54c)],c[cD(0x2f7)]);return this;}}var ChartTypes;(function(ChartTypes){const cI=fn,cy=fn,Y={};Y[cI(0x656)]='7|3|2|5|1|'+cI(0x4fc),Y[cI(0x505)]=cI(0x1d1),Y[cI(0x775)]=cI(0x6a7),Y[cI(0x699)]=cI(0x29e),Y[cI(0x3be)]=cI(0x20b),Y[cI(0x760)]=cy(0x27d),Y['pUcJB']='SCATTER',Y[cI(0x28c)]=cI(0x401),Y['gORdH']=cI(0x523),Y['sullL']=cI(0x449),Y[cI(0x621)]=cy(0x1bc),Y[cy(0x6be)]=cI(0x587);const k=Y,c=k['gOnYb'][cI(0x5f3)]('|');let G=0x0;while(!![]){switch(c[G++]){case'0':ChartTypes[k['vrKce']]=k[cy(0x775)];continue;case'1':ChartTypes[cI(0x2c5)]=cy(0x165);continue;case'2':ChartTypes[k[cy(0x699)]]=k[cy(0x3be)];continue;case'3':ChartTypes['LINE']=k[cI(0x760)];continue;case'4':ChartTypes[k[cy(0x38a)]]=k[cI(0x28c)];continue;case'5':ChartTypes[cy(0x5d1)]=k['gORdH'];continue;case'6':ChartTypes[k['sullL']]=k[cy(0x621)];continue;case'7':ChartTypes[k[cI(0x6be)]]=cy(0x50f);continue;}break;}}(ChartTypes||(ChartTypes={})));class ChartFactory{static ['registry']=new Map();static[fm(0x628)](f,Y){const ci=fn;this['registry'][ci(0x3df)](f,Y);}static[fm(0x610)](f,...Y){const cL=fn,cd=fn,k=this[cL(0x507)]['get'](f);if(!k)throw new CustomError(ErrorCode[cL(0x62f)+cd(0x5df)+cd(0x15b)]);return new k(...Y);}static[fn(0x5a4)](f){const cs=fn,ce=fn;return this[cs(0x507)][ce(0x5a4)](f);}static['clear'](){const ct=fm,cr=fm;this[ct(0x507)][cr(0x239)]();}}class BarChartWrapper extends CartesianChartWrapper{constructor(Y,k,c,G,K){const cm=fn,O={'ykbka':function(v,C,Q){return v(C,Q);}},F={...defaultBarScales,...G?.[cm(0x455)]??{}},A=F,M=O['ykbka'](createDefaultBarOptions,G,A);super(Y,k,c,M,K),ChartFactory['register'](ChartTypes['BAR'],BarChartWrapper);}['requireLab'+fn(0x593)](){return![];}['makeConfig'](f){const cn=fm;return super[cn(0x72e)](f);}[fm(0x6c1)+fm(0x22c)](f,Y){const cj=fm,cJ=fn;return this['datasets']&&this['datasets'][f]&&(this[cj(0x28d)][f][cJ(0x7a4)+'ss']=Y),this;}[fm(0x284)+'hickness'](f){const cx=fn,cp=fm;return this[cx(0x28d)]&&this[cx(0x28d)][cx(0x184)]((Y,k)=>{const cR=cx,cB=cp;this[cR(0x6c1)+cB(0x22c)](k,f);}),this;}[fn(0x612)+fn(0x7a8)](f,Y){const cT=fn,cZ=fn;return this[cT(0x28d)]&&this[cZ(0x28d)][f]&&(this[cT(0x28d)][f][cT(0x709)+'kness']=Y),this;}[fm(0x69d)+fn(0x3b0)+'s'](Y){const cz=fn,cb=fm,k={};k['eKwEP']=function(G,K){return G!==K;},k[cz(0x43a)]=cb(0x2d3),k[cb(0x784)]=cb(0x3a2);const c=k;if(this[cz(0x28d)]){if(c['eKwEP']('XMHNd',c[cz(0x784)])){!this[cb(0x39c)]&&(this['options']={});const K=this[cz(0x39c)];return!K[cz(0x636)]&&(K[cb(0x636)]={}),K[cb(0x636)][cz(0x70b)]=Y,this;}else this[cb(0x28d)]['forEach']((K,O)=>{const ch=cb,cX=cz;if(c[ch(0x41d)](c['YZXEQ'],cX(0x2d3))){const A=this[cX(0x1f4)+cX(0x2dc)]();if(!this['plugins'])this[ch(0x4f2)]=[...A];else{if(G[ch(0x205)](this[cX(0x4f2)])){const M=new A(this[cX(0x4f2)]['map'](q=>q['id']));A[ch(0x184)](q=>{const cV=cX,cw=cX;if(!M[cV(0x5a4)](q['id']))this[cw(0x4f2)][cw(0x3ec)](q);});}else this[ch(0x4f2)]=[...A];}if(this[ch(0x41e)+'els']()&&(!this[cX(0x1ec)]||this['labels']['length']===0x0))throw new M(v[ch(0x5ef)+'UIRED']);}else this[cX(0x612)+cX(0x7a8)](O,Y);});}return this;}[fn(0x428)+'entage'](Y,k){const cP=fm,cS=fm,c={};c['wqxnh']='div',c[cP(0x1e1)]=function(K,O){return K!==O;},c[cP(0x692)]='dBYTY';const G=c;if(this[cS(0x28d)]&&this['datasets'][Y]){if(G[cS(0x1e1)](G['OPIhP'],G[cS(0x692)])){if(!K)return;const O=O[cS(0x73d)+cS(0x32b)](F);let F=O?.[cS(0x3bb)+cS(0x7ae)](G[cS(0x22b)]);return!F&&(F=v[cP(0x4c1)+cS(0x655)](G[cP(0x22b)]),F[cS(0x20d)]=C[cP(0x20d)][cP(0x232)],O[cS(0x290)+'d'](F)),F;}else this[cS(0x28d)][Y][cS(0x201)+cP(0x187)]=k;}return this;}[fm(0x2e8)+fn(0x789)](Y){const G0=fm,G1=fn,k={};k[G0(0x3e7)]=function(G,K){return G+K;},k[G1(0x372)]=G1(0x1d5),k['WEYlu']=function(G,K){return G!==K;},k[G1(0x45a)]=G0(0x648);const c=k;if(this[G0(0x28d)]){if(c['WEYlu'](c['ixPRx'],c[G1(0x45a)])){const K=c[G0(0x391)+'BtnDom'];if(!K)return;const v=G['isZoomedOr'+G1(0x3d6)]?.();if(!v){K['style'][G0(0x5b5)]=G1(0x56e);return;}const {chartArea:C}=K,Q=C['right']-0x5a,H=c['rBDAN'](C[G1(0x6f5)],0xa);K[G0(0x46b)]['left']=Q+'px',K['style'][G1(0x6f5)]=H+'px',K[G0(0x46b)][G0(0x5b5)]=c[G0(0x372)];}else this['datasets'][G0(0x184)]((K,O)=>{const G2=G0,G3=G1;this[G2(0x428)+G3(0x7b2)](O,Y);});}return this;}[fm(0x61d)+fn(0x51d)+'e'](f,Y){const G4=fm,G5=fn;return this['datasets']&&this[G4(0x28d)][f]&&(this[G4(0x28d)][f][G5(0x713)+G5(0x483)]=Y),this;}[fm(0x2c6)+fm(0x46c)+fn(0x4a3)](f){const G6=fm,G7=fn;return this[G6(0x28d)]&&this[G6(0x28d)][G6(0x184)]((Y,k)=>{const G8=G7;this['setCategor'+G8(0x51d)+'e'](k,f);}),this;}[fn(0x2ca)+fn(0x408)](f,Y){const G9=fn,Gf=fm;return this[G9(0x28d)]&&this[Gf(0x28d)][f]&&(this['datasets'][f][G9(0x732)+'h']=Y),this;}[fn(0x4c3)+fm(0x287)](Y){const GY=fm,GE=fn,k={};k[GY(0x162)]=function(G,K){return G!==K;},k[GY(0x5c4)]='xAxisKey',k[GY(0x16e)]=function(G,K){return G===K;},k[GY(0x1fc)]=GY(0x4a7),k[GY(0x57d)]='cjkzX';const c=k;return this[GY(0x28d)]&&this[GY(0x28d)][GE(0x184)](G=>{const Gc=GE,GG=GY,K={'CXxhP':function(O,F){const Gl=l;return c[Gl(0x162)](O,F);},'gHfkx':c['WVMBT'],'gIfKK':function(O,F){const Gk=l;return c[Gk(0x162)](O,F);}};if(c[Gc(0x16e)](c[Gc(0x1fc)],c[GG(0x57d)])){if(this['datasets']){const F={};if(K[GG(0x54a)](A,![]))F[K[GG(0x1a7)]]=M;if(K[GG(0x331)](v,![]))F[Gc(0x33e)]=C;this[Gc(0x28d)][Gc(0x184)](q=>{const GK=Gc;q[GK(0x49d)]=F;});}return this;}else G[Gc(0x732)+'h']=Y;}),this;}[fn(0x190)+fn(0x639)](Y,k){const GO=fm,GF=fn,c={};c['KUiMM']=GO(0x6c9);const G=c;return this['datasets']&&this[GF(0x28d)][Y]&&(G[GO(0x70f)]===G['KUiMM']?this['datasets'][Y][GO(0x289)+'us']=k:this[GO(0x6ed)]['isDragging']=![]),this;}['setAllBord'+fm(0x5c9)](f){const GA=fm,GM=fm;return this[GA(0x28d)]&&this[GM(0x28d)][GA(0x184)]((Y,k)=>{const Gv=GM,GC=GM;this[Gv(0x190)+Gv(0x639)](k,f);}),this;}[fm(0x5c8)](f){const GQ=fn,GH=fn,Y={'JQwRl':function(c,G){return c(G);},'aKpYf':GQ(0x4e4),'xHVxx':function(c,G){return c===G;},'jHUrt':GQ(0x319)},k=this['options']?.['scales'];if(!k)return this;return Object[GQ(0x2f6)](k)['forEach'](([c,G])=>{const Gu=GH,GW=GQ,K={'zAGea':function(O,F){const Gq=l;return Y[Gq(0x570)](O,F);}};if(G&&typeof G===Y[Gu(0x385)]){if(Y[GW(0x445)](Y[Gu(0x6d0)],GW(0x319)))G[GW(0x6d4)]=f;else{const F=O[F[A]];F&&F[M][K[GW(0x679)](v,0x1b9)](C);}}}),this;}[fn(0x1e6)](Y){const Go=fn,Gg=fm,k={};k[Go(0x1fe)]=Gg(0x4f5),k[Gg(0x6db)]='default',k[Gg(0x646)]=Gg(0x56e),k[Gg(0x6e9)]=function(K,O){return K===O;},k[Go(0x7ad)]=Go(0x457);const c=k;if(stzUtil[Go(0x48b)](this['datasets']))return this;!this[Gg(0x39c)]&&(this[Go(0x39c)]={});const G=this[Gg(0x39c)];!G[Gg(0x455)]&&(c[Go(0x6e9)](Go(0x4d4),c[Gg(0x7ad)])?(O[Go(0x163)]=F,A[Go(0x46b)][Gg(0x2ae)]=M?v['cursor']||c[Gg(0x1fe)]:c['GZNRi'],C[Go(0x607)](c[Gg(0x646)])):G['scales']={});if(stzUtil[Gg(0x48b)](G[Go(0x455)][Y]))return this;return this[Go(0x4f2)]?.[Gg(0x3ec)](barScaleImgPlugin),this;}}class LineChartWrapper extends CartesianChartWrapper{constructor(Y,k,c,G){const Ga=fn,K={'uXGOu':function(M,v,C){return M(v,C);}},O={...defaultLineScales,...G?.['scales']??{}},F=O,A=K[Ga(0x4ab)](createDefaultLineOptions,G,F);super(Y,k,c,A),ChartFactory['register'](Y,LineChartWrapper);}[fm(0x41e)+fm(0x593)](){const GU=fm,GN=fm,Y={};Y[GU(0x74b)]=function(c,G){return c===G;},Y[GU(0x322)]=GU(0x535);const k=Y;return k[GU(0x74b)](this[GN(0x39c)]?.[GN(0x455)]?.['x']?.[GN(0x5f6)],k[GU(0x322)]);}[fm(0x72e)](f){const GD=fn;return super[GD(0x72e)](f);}[fm(0x6e5)](Y,k,c){const GI=fm,Gy=fn,G={};G['Fvmot']='createDefa'+GI(0x620)+Gy(0x459)+Gy(0x561)+Gy(0x6d2),G['mkorH']=Gy(0x609),G['QKRPb']=GI(0x585),G['RTRpu']=function(O,F){return O!==F;},G['MdXyi']=GI(0x1d2),G['TDkiX']=GI(0x1ac);const K=G;if(this[GI(0x28d)]&&this[GI(0x28d)][Y]){if(k){this[Gy(0x28d)][Y][Gy(0x270)]=K['QKRPb'];if(c)this['datasets'][Y][GI(0x661)+Gy(0x397)]=c;else!this['datasets'][Y][GI(0x661)+GI(0x397)]&&(this['datasets'][Y]['background'+'Color']=GI(0x49b)+Gy(0x694)+'.2)');}else{if(K[Gy(0x486)](K[Gy(0x471)],K['TDkiX']))this[Gy(0x28d)][Y]['fill']=![];else{D[Gy(0x4cd)](K[Gy(0x353)],I);const A=i['scales']||{},M={};M[Gy(0x2ab)]=r[Gy(0x74e)+'n']?.[GI(0x2ab)]??K[GI(0x715)],M[GI(0x735)]=m[Gy(0x74e)+'n']?.[GI(0x735)]??![];const v={'label':B,...T?.['plugins']?.[Gy(0x568)]?.[Gy(0x64e)]},C={'enabled':j[Gy(0x4f2)]?.['tooltip']?.[GI(0x3b3)]??!![],'mode':J['plugins']?.['tooltip']?.[GI(0x2ab)]??GI(0x609),'intersect':p[Gy(0x4f2)]?.[GI(0x568)]?.[GI(0x735)]??![],...R[Gy(0x4f2)]?.[Gy(0x568)]};C[Gy(0x64e)]=v;const Q={...n[Gy(0x4f2)]||{}};Q['tooltip']=C;const H={};H[GI(0x4bc)]=Z['elements']?.['point']?.[Gy(0x4bc)]??0x0,H['hoverRadiu'+'s']=z[Gy(0x705)]?.[GI(0x5be)]?.['hoverRadiu'+'s']??0x0;const q={};q[Gy(0x343)]=b[Gy(0x705)]?.[Gy(0x27d)]?.[Gy(0x343)]??0.1;const u={};return u['point']=H,u[Gy(0x27d)]=q,{'hover':L,'indexAxis':d,'_mounted':s[Gy(0x682)]??(()=>{}),'responsive':e[GI(0x580)]??!![],'maintainAspectRatio':t[GI(0x185)+Gy(0x6e7)]??![],'interaction':M,'plugins':Q,'elements':u,'scales':h[Gy(0x543)](X,A)};}}}return this;}[fn(0x20c)](f,Y){const Gi=fn,GL=fn;return this[Gi(0x28d)]&&this[GL(0x28d)][Gi(0x184)]((k,c)=>{const Gd=Gi;this[Gd(0x6e5)](c,f,Y);}),this;}[fm(0x2dd)](f,Y){const Gs=fm,Ge=fn,k={'TKhMb':function(c,G){return c(G);},'bjzYB':function(c,G){return c+G;},'FoJhp':function(c,G){return c+G;},'NFsDn':function(c,G){return c!==G;},'YtwUX':Gs(0x72d),'dLsiv':Gs(0x51f)};if(this[Gs(0x28d)]&&this[Gs(0x28d)][f]){if(k['NFsDn'](k[Gs(0x632)],k[Gs(0x748)]))this[Ge(0x28d)][f][Gs(0x343)]=Y;else{const G=G;let K=K[k[Ge(0x600)](G,0x1d3)](0x0,0x4),O=O[k[Ge(0x600)](G,0x1d3)](0x4,0x6),F=F[G(0x1d3)](0x6,0x8);return k[Gs(0x5fc)](k[Ge(0x5fc)](k['bjzYB'](k[Ge(0x1b8)](K,'-'),O),'-'),F);}}return this;}['setAllTens'+fm(0x309)](Y){const Gt=fn,Gr=fn,k={};k[Gt(0x1f0)]=function(G,K){return G===K;},k['KxvdY']=Gt(0x71f),k[Gt(0x2df)]=function(G,K){return G===K;},k[Gr(0x56a)]=Gr(0x1a3);const c=k;if(this[Gt(0x28d)]){if(c[Gt(0x2df)](c['mnOkG'],'eZbiD'))this[Gr(0x28d)]['forEach']((G,K)=>{const Gm=Gt,Gn=Gt;c[Gm(0x1f0)](Gn(0x71f),c[Gn(0x386)])?this[Gm(0x2dd)](K,Y):(c[Gn(0x19a)]&&O['resetZoom'](),K[Gn(0x46b)][Gn(0x5b5)]=Gm(0x56e));});else{this[Gt(0x4b4)]();if(G)this[Gt(0x6ac)]=K;const K=this[Gt(0x6ac)],O={'_chartId':K,'type':this[Gr(0x5f6)],'data':{'labels':this[Gt(0x1ec)],'datasets':this[Gr(0x28d)]},'options':{...this['options'],'_chartId':O||this['type']+'_'+F['random']()},'plugins':this[Gr(0x4f2)]},F=this[Gr(0x631)](O);void F[Gr(0x3aa)],void F[Gr(0x4f2)];const C={};return C[Gt(0x2ce)]=F['_chartId'],C['type']=F[Gt(0x5f6)],C[Gt(0x3aa)]=F['data'],C[Gt(0x39c)]=F[Gr(0x39c)],C[Gr(0x4f2)]=F[Gt(0x4f2)],C;}}return this;}[fm(0x2ca)+fn(0x408)](f,Y){const Gj=fn,GJ=fm;return this[Gj(0x28d)]&&this['datasets'][f]&&(this[GJ(0x28d)][f][Gj(0x732)+'h']=Y),this;}['setAllBord'+fm(0x287)](Y){const Gx=fm,Gp=fm,k={};k[Gx(0x797)]=function(G,K){return G!==K;},k['JgImu']=Gp(0x1ce),k[Gp(0x2d6)]=function(G,K){return G!==K;},k[Gx(0x35d)]=Gx(0x553);const c=k;return this['datasets']&&(c[Gx(0x2d6)](c[Gp(0x35d)],'iOabn')?k=c:this[Gp(0x28d)]['forEach']((K,O)=>{const GR=Gp,GB=Gp,F={};F[GR(0x356)]=function(M,v){return M===v;};const A=F;if(c[GR(0x797)](c[GR(0x719)],GR(0x61c)))this[GB(0x2ca)+GB(0x408)](O,Y);else{const v=A[M];if(!v)throw new W(o[GR(0x27c)+GB(0x5d5)+'RTY'],GR(0x530)+GR(0x7af)+g+(GR(0x32d)+GB(0x2ba)+'d'));if(!v[GR(0x170)]&&(!v[GR(0x644)]||A[GB(0x356)](v['images']['length'],0x0)))throw new a(U[GB(0x3fa)+GB(0x365)+'NG'],'Dataset\x20\x22'+(v['label']||'#'+N)+(GB(0x258)+GR(0x26a)+GR(0x24e)));}})),this;}[fm(0x3a0)+'dius'](f,Y){const GT=fm,GZ=fm;return this[GT(0x28d)]&&this[GZ(0x28d)][f]&&(this[GZ(0x28d)][f]['pointRadiu'+'s']=Y),this;}[fn(0x4fa)+fm(0x1ad)](f){const Gz=fm;return this[Gz(0x28d)]&&this['datasets']['forEach']((Y,k)=>{const Gb=Gz;this['setPointRa'+Gb(0x1de)](k,f);}),this;}[fm(0x188)+'verRadius'](f,Y){const Gh=fm,GX=fm;return this[Gh(0x28d)]&&this[GX(0x28d)][f]&&(this[Gh(0x28d)][f]['pointHover'+GX(0x466)]=Y),this;}[fm(0x4fa)+fn(0x670)+'us'](f){const GV=fm,Gw=fn;return this[GV(0x28d)]&&this[GV(0x28d)][Gw(0x184)]((Y,k)=>{const GP=GV,GS=Gw;this[GP(0x188)+GS(0x1aa)](k,f);}),this;}}const fs={};fs[fn(0x35c)]=null;var Types=Object['freeze'](fs);function E(){const K2=['MVrFU','AXIS_KEY_R','O+kHO+kHS+','Bar\x20percen','dLsiv','BtnDom','fdTuJ','oldtH','WwLCm','ymFVK','interactio','KvksI','dggar','#4285f4','VlqGU','UCRgx','ctURL','ewcVB','NOT_SUPPOR','ed.','ANCE_NOT_F','4px\x208px','Meta','1px\x20solid\x20','HkjAi','ENZEF','EjOsM','yOPAP','veCls','lkJYR','.\x20Please\x20p','Ehfkm','borderColo','BTahN','HRbfH','iIRZB','min','tPQgs','dataset','\x20found\x20in\x20','defaultBar','wJffB','UOKTX','mJm3odrwEL','AxriyNe','RZgbf','eeEEg','CMvTB3zLq2','Ktcue','yxdKK','nWNnV','EFGHIJKLMN','EBLTd','onClick','jwhrj','_Default','TcxdD','max','cGeLM','gzLPF','rychK','zoomRangeS','dIOPxIOPxI','mti4n0jmtK','cniNT','IfZUX','jQzwn0vvjm','kVIQb','htmlLegend','ercentage','OROEx','CHART_INST','gClientRec','rtWrapper.','C3vIC3rYAw','3,\x20255,\x200.','bmVju','ZuOoe','config','TEGORY_PER','kGGokGUokH','jViyk','rfLQquu','MDeSm','bjaXP','aZpTj','uQVJi','q1PmAvG','ucONN','mousemove','BdxEc','slYwY','Plugin','toString','Fnzuh','gnlPo','barThickne','xSCHC','tCNxI','FURBE','hickness','PYcFV','ZbnMJ','rgba(0,150','isDatasetV','byknL','tor','\x20index\x20','rnmLC','Bar\x20thickn','entage','QoEnO','ngAnimatio','AOmPE','stringify','align','gZVJU','-8;','dDDHc','qsnWi','pwTHg','_TYPE','jQtPK','chGJU','yEkzu','revokeObje','QPCFv','Tafyz','fCSVW','T$isHover','LWfEj','radar','JWdlz','setYAxisID','zZZRh','XxlHw','qwZOg','</span>\x0a\x20\x20','ZqVOO','normal','ugXLO','\x22>/</span>','image','raw','YuHDF','feglv','WOJiO','mxgPV','lDePi','THaqy','xtjrA','dvfgi','psBeU','setting','zed.','npzGv','ca4Qca4Qgh','error','text/csv;c','xetHx','eScales','erty','forEach','maintainAs','jVCgvYDhK','age','setPointHo','\x20support\x20y','FIOQFIOQpI','ring','FogCK','iPhKV','kIL+kILEkI','DgfIBgvFzg','setBorderR','Visibility','ugin','href','kHH+kJH+kI','HUvRr','hPFwy','constructo','yzZUX','iWmQc','resetZoom','abcdefghij','cnrCGs','line-throu','kNgRq','MFHpH','legend-ite','DATA_LENGT','-danger\x22>','eZbiD','OyFIOyFIOy','dSpZg','wCErP','gHfkx','nYzG','CXxls','verRadius','QYZah','HTWkp','tRadius','B1zLwMi','kGGokGQokH','IBgyq','OGNhT','uTFyS','VVWKK','drawImage','kIQUkIQUkI','nWFjv','autoSkip','FoJhp','llback','PFloo','WtYNZ','bubble','RmThj','OidIOidIOy','RWgYf','Supported\x20','suyGC','GrVPj','T$settingB','FJHDp','rxPzCwq','aGjew','roundRect','yAxisID','height','INVALID_CH','OzxIOzxIOz','dBroC','y3jLyxrLt2','eetau','LanKy','kGRUkHUEkH','TREE','Wnrch','tListener','save','block','art\x20type.\x20','transform','#e0e0e0','table','kNUCB','BocKu','firstChild','COPiP','dius','EUZnP','ugins.','lTlti','lugin.','arc','JIOQRIOidI','isLine','setBarImg','JPkJZ','ca4Qca4Qg4','datasetInd','WSEFV','mJm2odmWng','labels','_settingCl','ADZIW','findIndex','DWWFN','GUCnh','cMxhQ','vKxla','mustHavePl','#fff','AQGiv','fWDak','vuqbl','iXdHc','3393582dimeIT','toFixed','QiOGK','vIFoo','GaAxU','htPNw','CpblW','barPercent','tnRect','chart','hpTBp','isArray','YkvyS','zhSSm','UgHGU','xGcpc','RmBBw','doughnut','setAllFill','className','lEcfS','zoomResetP','xxXqG','BKD6u2q','GokGGokGGo','text','H_MISMATCH','decorateDa','zoomResetB','go4Qgo4Qgo','omit','yRgdg','tage\x20must\x20','JOdjx','YAzRK','aYqXV','MVaSI','JfZiY','iHfrY','biFUy','uNYhN','fillText','This\x20chart','generateLa','Alpha\x20valu','ubjSc','jARlH','ySCra','RHPKx','wqxnh','kness','CHART_ALRE','PeJeZ','kIQUkGGokG','uK9JAxq','qOOHQ','list','GdYYC','zM9YrwfJAa','OidIOidIOR','4Qgh4Qgh4Q','bottom','kkCPH','clear','lYnLM','BGUtr','item','TCMsY','riwlT','OUND','ZrDcM','OidIOQRIOQ','tnCircle','#111827','AmElu','mAEIv','startLoadi','4QkO4QkQ4Q','Fsnhg','EADY_EXIST','<span\x20clas','Xgldg','nIcrj','KzRXI','rty','linear','setAllData','y29UC3rYDw','HKriR','JemuC','viDvvpyW','assign','JrLyF','RFdrQ','\x22\x20has\x20no\x20i','ode','USOiU','knBeM','krKEy','erty\x20is\x20mi','uBfIe','_settingMo','12px','twYwL','jukIX','SEkGGokGGa','fCHAI','DEcJz','that\x20optio','IyaFT','jMjnc','huksv','mage\x20prope','isDragging','H+kIH+kIH+','xbzUb','inheq','kGOokHO+kH','fill','XDFvp','LVnUE','textBaseli','UYLrf','3,\x20255,\x201)','xjzrH','wCqTh','z2v0vhLWzq','sZUXQc','hover','gZ4QgX4QgX','EMPTY_REQU','line','_startLoad','xBGlI','cZisA','code','fillRect','criaw','setAllBarT','QlzFP','apply','erWidth','mCSWL','borderRadi','freeze','leComp','ooQjU','datasets','AuqtI','#FF3B30','appendChil','canvas','color:\x20ora','dPEPE','RorSS','shift','Dataset\x20\x22','KIRbA','MYTLc','dUIEZ','bWNsM','dGPzd','zmFmQ','exception','DOUGHNUT','pnfwJ','createDefa','ca4QkO4QkQ','PLUGIN_ALR','isBar','end','eAvNR','kYCmi','PLUGIN_REM','register()','RIOOFIOOFI','J+kIJUkIRU','mode','ezBro','rrwhG','cursor','iyaVf','ZhPvq','kIH+kIJ+kI','\x22\x20already\x20','trace','dWiOw','border','PLUGIN_NOT','wLYPy','debugLoggi','get','r\x20undefine','YENwX','UIRED','nction()\x20','4QgC4Qcm4Q','jqCmr','some','PvmvG','ORJIOidIOi','number','2917899bPWWNE','RADAR','setAllCate','textHidden','KPQmd','zAdpj','setBorderW','x19WCM90B1','cMsGI','AOIOq','_chartId','ScalesImag','div','DgGSihrK','f0ys5JC3y','UlvgR','ciwRg','UokHSokILE','BsrQT','LwsGl','XhKls','10802Etttjd','vDzay','ckswF','ugins','setTension','sOmrm','ASvTS','absolute','EsnIx','\x20\x20\x20<span\x20c','VjdJW','MQkIg','YZssa','CaWXv','cGgMG','setAllBarP','xhUHn','kGGokHH+kH','YsEGh',',255,1)','YNSWb','innerHTML','vuASA','YlblT','ot\x20match\x20d','hidden','ed\x20for\x20par','legend-box','dROJO','entries','fzhXJ',',0.7)','dIOzxIOzxI','fromCharCo','nlgdM','EXyfD','cloneDeep','(((.+)+)+)','removeEven','iDIhm','kGHUkGGokI','vLyoB','YWwxT','wTilp','delete','gvujg','FHonb','xIOzxIOzxI','ion','haafX','chartMount','pTFzP','center','kIH+kIH+kI','utgdR','SKDdX','TxNNH','huZGX','BvJWA','C2XPy2u','fillStyle','iner',',255,0.8)','qfUNo','bbNBa','xwaTk','xAxisKey\x20o','NokINokINo','hUHhn','nPHUg','undAlpha','CMvKDwnL','setAddImg','HuPlM','OPxIOidIOi','setPadding','DkECA','bneCX','cWlaY','ready\x20init','2px','QLTEm','ById','ZCbal','\x20is\x20null\x20o','innerText','ryvBL','RGQLT','gIfKK','4QcgcUkHH+','hRgtG','mHCVn','xBtyk','#34C759','be\x20between','IsWWn','giPBc','dIOidIOidI','4Qg44Qg54Q','closePath','4QgJ4QgJ4Q','yAxisKey','middle','FIOyFIOydI','colors','GxBxO','tension','Uqjtv','kqgwF','xOkSy','GokGGokGQo','restore','IipCS','zghBq','Array','gh4Qca4QkW','fXVFA','_centerHtm','LBqVq','removePlug','OidIOidIOP','aYDFL','Fvmot','string','차트\x20사라짐\x20,\x20','WjZsI','Chart\x20type','lnlIQ','overScaleM','CENTAGE','T$settingC','__proto__','STueb','lhQSo','TooltipCal','\x20\x20\x20\x20\x20\x20','KdgCG','RShjt','qsMZQ','dyXsM','ERTY_MISSI','WMdmz','return\x20(fu','kILEkGHokG','36767313BSJjXh','INVALID_CA','WzLbe','rgba(66,\x201','QOlqM','UWuhY','kILEkGTEkH','ase\x20check\x20','KgKMu','Bmdlb','klmnopqrst','TIlSH','getBoundin','NzEqj','fsHhV','oty4nte1B0','kGUokHUokG','Datasets\x20c','pLeTu','VXqFP','dGXsu','errorLoggi','map','bKaEm','cjBFj','vkGUl','createText','mpty.','aKpYf','KxvdY','FwZiB','zcOwN','lhaYS','pUcJB','rcebD','moNvm','gXcUkGGokG','TJouT','gXKAJ','eiKbO','_zoomReset','Gtcmd','ukhiP','ctx','kILEkINEkI','Object\x20doe','Color','EDiij','ZdVdt','HBIFg','\x0a\x20\x20\x20\x20','options','DujQAwO','FJhsD','IDdKa','setPointRa','und.','XMHNd','wCuIm','indexAxis','djEJb','Invalid\x20ch','UxwxR','P+kHGEkGGo','uvHmBgy','data','rCfFs','LRHKu','UtTHN','getPixelFo','HNgXz','arThicknes','JDxQV','TtiRf','enabled','VPGOp','function','Dg9mB2nHBg','size','HVKZJ','BwvYz2u','TrHGG','querySelec','_mountedCa','wJQvj','SpJQk','SnOVV','scaleImg','kuCNU','LIIgJ','eTooltipCa','3436090pBmfOW','cNkhw','ercentage\x20','CxvLCNLtzw','t\x20support\x20','pUGNu','OPxIOPxIOP','JIOBhIOO3I','blinkPlugi','Null','tDIVu','IcIZa','#000','-white\x22>','HNSgB','e\x20a\x20positi','4Qga4QgD4Q','keys','Panned','DmqVf','4Qca4Qca4Q','nQKQB','Image\x20prop','SXnyP','OyxIOidIOP','BCqtu','4Qgh4Qca4Q','set','bold','xqzYl','Gwamu','LvClp','Xcluw','Category\x20p','isCartesia','rBDAN','OOFIOOFIOO','famEj','ORhIOOuk4Q','plcnX','push','u3rYAw5N','list-conta','WBlAP','hDLEq','relative','VCQQy','LGHEL','RrCdh','DMfSDwvZ','H+kIH+kIJ+','textDecora','lmeMr','\x20is\x20requir','IMAGE_PROP','SBdDF','_initVisib','KaOcN','baioD','vmjKt','ImOGF','scatter','An\x20unknown','FVJEx','INVALID_DA','offset','djXbb','sRcDO','idth','Ckuen','\x20type\x20is\x20n','edPlugin','swlCE','clientY','\x0a\x20\x20\x20\x20\x20\x20\x20\x20<','cAkoi','start','TgWjb','%c[','onclick','zBVqP','uTJIO','Options\x20ca','charAt','Cannot\x20rem','sgKXl','SXsnc','zxjYB3i','hFErO','eKwEP','requireLab','strokeHove','XjYXo','nLzhDK1xva','TWEvD6','JBQoP','zxzLCNK','DCVPG','ocJGb','JIOARIOBRI','setBarPerc','UQQIj','KvdBW','unregister','HqHeK','A\x20required','KJFPF','heDvs','dIOkJIOARI','color:\x20gre','T$opts','y2fSBa','JIORJIORJI','ZgEWQ','Ibauk','XUMTW','PUaxL','join','YZXEQ','fontSize','INVALID_BA','FJKRQ','ng.svg','hTEGq','nts','setTransfo','AurjAg0','exists','IbQap','xHVxx','QUkHQUkHO+','pVdDP','.chart-cen','BUBBLE','purgH','n0B3i','efoCm',',255,0.5)','MYSlw','addZoom','{}.constru','resize','ART_TYPE','LfmnP','WOoro','scales','RangeSlide','eHmCo','px\x20Arial','ions\x20calle','ixPRx','gXqAF','uHcaa','iUmLn','gIDMO','xIOzxIO5xI','Chart\x20inst','EJTIy','VMdnn','XHedt','addEventLi','EZeBm','Radius','moESj','rHIwA','PYvHa','lled','style','goryPercen','uyBDh','HXbhW','s\x20not\x20have','g44QkC4QkC','MdXyi','ca4Qca4Qca','sOFZG','ICqNa','InxCb','ocCcf','none\x20custo','lass=\x22text','indexOf','_loading','on.','kGGokGGokG','ownKeys','#AF52DE','iYCZF','changed','pIOzxIORxI','fTYiB','rcentage','#FF9500','radiusExtr','RTRpu','DNfRze0','tQQkG','default','toLho','isEmpty','ctor(\x22retu','jpvZg','4Qgb4Qca4Q','10SMvlVp','OylIOidIOi','aoKsh','width','It\x20does\x20no','datalabels','mbXkC','hAXpl','HuHsy','nChartType','gWPKq','HHcdH','rgba(75,\x201','lJAJS','parsing','CreateZoom','chart-zoom','NlWYi','getChart','UokHUokHUo','tage','uDODz','Nbrny','sjBoF','vGCqb','ezlJL','kINEkINokI','prototype','uXGOu','T$settingI','\x200\x20and\x201.','legend','ZTYJw','kximt','between\x200.','startsWith','gZrZS','normalize','30px\x20Arial','oZGSh','dfJgt','cwKjg','rnuQW','zjubf','qGtzj','radius','bpyMPLy3rD','ztGuA','Sxkcq','kWBla','createElem','pIOipIOidI','setAllBord','33,\x20244,\x200','OBJIOBJIOB','ElCrN','OARIOARIOA','LJDOt','NvBDD','ITiVW','WQpTA','parsed','log','oGWhW','GhdUe','console','Options\x20is','cquii','yXQac','psGgD','utton','TrMZk','lickHandle','aJbbO','atasets\x20da','qNJem','zIndex','mJy3odKXnL','ta\x20length.','pcMOv','DSBkE','VMupH','pUnCn','OEdtv','sDvpJ','object','aKFuW','scale','LtUHf','xdDbV','AxnpyMPLy3','ickHandler','Plugin\x20alr','ak4QkJ4QkJ','ticks','Dvfbb','FxuBS','LfHpM','gKiTR','plugins','50%','key','pointer','oHyjb','4QkX4Qcb4Q','qLTYS','ubfpG','setAllPoin','HiDyQ','6|4|0','JZVzp','CbOyz','OPQRSTUVWX','Invalid\x20da','wfXFg','fRWsV','ve\x20number.','4Qkh4Qkp4Q','vrKce','ons','registry','tcUND','addAlphaTo','aFUhI','ider','mEmDX','kKvHs','ent\x20not\x20fo','bar','tMacN','JUkIH+kIJ+','ter-text','aiPvQ','setAxisRan','LHMjL','sziNC','SxIhN','substring','peSnM','CfBhI','rgba(0,123','kHQUkHQUkH','yPercentag','IlLkb','YTpYO','xKATP','qauKo','lWuxC','pie','TDOOX','grid','font','WwKCI','NnpLt','iQGfZ','gPmDQ','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20','veHandler','tRbVi','AtXBX','IOhRA','Dataset\x20at','bind','vPEoq','YZ01234567','hresholdPl','category','TED_OPTION','cLKAH','Ymuwd','lVrmo','AoqIw','aiUfG','snfIb','gkvwN','KdvVd','#30B0C7','ensureY1Ax','ytXHa','title','merge','div>\x0a\x20\x20\x20\x20\x20','lugin','click','#007AFF','tween\x200\x20an','Object','CXxhP','Dgv4DenVBN','ROR','dHoaH','customLege','rgba(0,\x2012','nterTextPl','vhdIU','RwbZj','iOabn','DLIif','OPTIONS_RE','ot\x20registe','mLegend','MhucD','SHrtP','A0LUs1O','YDKLI','Cjnfv','4px','alid\x20image','UZLte','\x20empty','d\x20with\x20use','BbvEX','odKYmZiYmN','69KeTHar','strokeStyl','NokILEkINE','w29IAMvJDc','tooltip','NGZjh','mnOkG','kHUokHSEkH','setYAxisFo','HQIYZ','none','VhrmM','JQwRl','nnot\x20be\x20nu','OipIOidIOQ','iVXep','VRveZ','VsPIC','vdGPO','Upzvo','BOQmE','DATASET_RE','bkDjb','left','lMbJO','brlCo','iiAeU','column\x20jus','responsive','TiHXp','FXmHp','existing\x20p','14kGmBTV','origin','gZvAf','BAR','NfqPn','HtUJR','AulSk','toLocaleSt','uhRWS','RLfnF','parse','kHH+kHH+kH','lIdYO','rtFav','setsParsin','els','_fnc','oEQLB','OidIOidIOk','APOEx','C3rYAw5N','\x20check\x20the','PXgcj','xPuXm','jtEEW','RtaCt','fXKUX','src','RTY','setAxisTit','mousedown','Zoom\x20Reset','has','pan','jeKnN','parentNode','mJMTb','bold\x20','FOsHU','PaKQM','EeKFz','zLHzqvi','Axis\x20\x22','FwxVz','-reset-btn','H+kHH+kHH+','LIZED','isScatter','eady\x20exist','display','FxEIB','beginPath','OZeOC','dOTDE','otCUc','Labels\x20len','label','zyKxS','point','kpXhQ','fJiRO','lZFYK','wFeQD','ca4Qca4QkO','WVMBT','vided.\x20Ple','vmKQy','XpufHsva','setStacked','erRadius','LwrmQ','kINokILEkI','89+/=','includes','_cancelLoa','pgxsX','Bhj6DeC','PIE','pcowI','floor','pQWXb','IRED_PROPE','ckKZy','ormat.','3398937rzRNOQ','FIOyFIO4FI','ions','sGffY','INVALID_AX','wCJdj','sPmDx','ERED_CHART','MprQT','AxisId\x20opt','IDtvE','MjAiV','yxbWzw5Kq2','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','dHCBz','R_PERCENTA','vtDhjPBMC','XfTLc','ljeIi','AgfZ','isible','random','Ehijd','LABELS_REQ','aPvCV','Key','zsOcQ','split','mdLDj','pFkRy','type','CHART_TYPE','RIOQRIOQRI','Otfer','GqUJF','lttCc','bjzYB','LHWtR','oMnVl','value','TKhMb','color','er-text\x20d-','highlightT','#00C7BE','UpTEY','xAxisKey','update','XQNkW','index','yM9KEq','_FOUND','ZakKt','aFBeD','ove\x20a\x20non-','SzlFx','create','Bg9N','setMaxBarT','type=','USqGa','eight:\x20bol','EoApd','IpfTa','charCodeAt','xIOPxIOPxI','0\x20and\x201.0','qQquv','ACSKa','setCategor','g44Qg44Qca','translate(','ultLineOpt','IAfvP','ORJIORJIOR','IdDvJ','AcJsw','containerI','sorZt','zoom','register','nhfge','eTriq','annot\x20be\x20e','anchor','NRmUl','iDkcA','NOT_REGIST','nTSFC','configAop','YtwUX','ovLgk','noDataPlug','zdJIu','layout','cYemf','XqRzv','adius','HbNqP','red.\x20Pleas','Dg9tDhjPBM','defaultLin','text-white','uvwxyzABCD','remove','GJTPM','oUxrR','s.\x20Use\x20set','images','Scales','yXOxO','devicePixe','LESpH','CgwFM','pIORpIORhI','qjWis','vCwRN','DIhxr','callbacks','fontColor','formatter','#007bff','changeSett','mouseup','GElOt','ent','gOnYb','lider','search','_REQUIRED','s=\x22text-wh','CzQtQ','DGaba','rgba(255,2','circlePosi','vIDpx','UHnSU','background','isExists','position\x20','R_THICKNES','qXzBs','pIOQpIOQVI','SisRh','ZIOPZIOPZI','cwsxr','Invalid\x20ax','z2v0','\x20\x20\x20\x20\x20\x20\x20<sp','length','WsDht','HngvC','tHoverRadi','16ddnysX','YIdbx','vZUGN','tion','\x20occurred.','hoverRadiu','y2HPBgrYzw','position','zAGea','OUXwv','GNpcF','align-item','gfKvg','QZRED','EFmeD','IS_KEY','OVE_FAILED','_mounted','zYmXY','QfAFr','jSnhc','Table\x20elem','CtZun','s-center','Node','qBdrP','zNjVBq','ZZDNq','addDataLab','DDfog','PsXqt','lineWidth','Aw5JBhvKzx','OPIhP','No\x20Data','92,\x20192,\x200','H+kIH+kIL+','jLmME','Oiak4Qgh4Q','EQUIRED','pbdNe','y2XVBMvezw','UYTpR','oBTNj','setAllMaxB','SAfeQ','.2)','pRrNU','iWioc','OOZIOidIOi','slice','NTILy','rgba(','322196xFviQy','tree','joKmq','SEkHUEkGKo','snpwC','B21PDa','chartId','\x20error\x20has','mNWrB','icOap','right','wqiSq','stroke','YTvMR','textAlign','kYFvc','TA_STRUCTU','\x22fs-6\x20text','r\x20labels\x20f','hQrdS','hmfsx','zg93BMXVyw','TOWxW','OpkNQ','vKMWj','hpIuX','vAaKH','setBarThic','FIOidIORJI','name','\x20\x20\x20\x20\x20\x20</di','vCklQ','makeCenter','emAry','UvErD','TIjfX','LkayW','clientX','HiJRU','taset','treemap','twP6DMW','jHUrt','ko4Qko4Qcg','rOptions:','an\x20class=\x22','stacked','getDataset','hasPlugin','\x20dataset\x20o','RBvOK','hTKVi','jsdNd','GZNRi','VPOuB','dIQZL','setPlugin','PIcxH','xtYGY','ing','ubrET','#ffffff','pfEPY','setFill','KRvoe','pectRatio','event','BpioJ','ttois','kHH+kGGokG','드\x20성공','var','not\x20be\x20emp','MJppc','fillHover','fined.','sPKAq','55,255,0.8','gth\x20does\x20n','top','box','mXJYu','ftLuW','build','\x20URL.','TMNin','setErrorLo','#5856D6','LiKrr','ADY_INITIA','every','yShtF','QUIRED','Yijzk','yXfJJ','elements','CZIvh','rPwnx','AZxLJ','maxBarThic','wfIpN','padding','MPiKN','ptions.','FeHXA','KUiMM','keCMl','ss\x22>','gdaSr','categoryPe','stener','mkorH','azuSo','ZVTxu','Plugin()\x20t','JgImu','iconSize','erlov','vdkjB','zVvie','harset=utf','LadLr','setDataset','detail','warn','wcEkB','DHacB','UNKNOWN_ER','fIFOS','XqBjs','\x20PROPERTY','WNZXW','rValue','s1jZv2O','FLOmD','CcIlv','makeConfig','OvAPm','xnZQd','FwmHE','borderWidt','FIOyFIOyFI','QnQki','intersect','bVYQu','ChjVDg90Ex','doughnutCe','getType','csjwN','rLBNq','XJQZx','getElement','AgfZt3DUuh','gin','OidIOidIOi','wOqnX','r\x20yAxisKey','xerWW'];E=function(){return K2;};return E();}const fe={};fe[fm(0x6fc)+'g']=function(f){const K0=fn;LoggerConfig[K0(0x37e)+'ng']=f;},fe['setDebugLo'+'g']=function(f){const K1=fm;LoggerConfig[K1(0x2b8)+'ng']=f;};const ChartToolBox=fe,T$={'create':ChartWrapper[fm(0x610)][fm(0x531)](ChartWrapper),'register':ChartWrapper[fn(0x628)]['bind'](ChartWrapper),'ChartWrapper':ChartWrapper,'CartesianChartWrapper':CartesianChartWrapper,'BarChartWrapper':BarChartWrapper,'LineChartWrapper':LineChartWrapper,'defaultTypes':Types,'defaultsOptions':LocalDefaults,'toolBox':ChartToolBox};export{BarChartWrapper,CartesianChartWrapper,ChartFactory,ChartInstance,ChartToolBox,ChartTypes,ChartWrapper,CreateZoomRangeSlider,LineChartWrapper,T$,barScaleImgPlugin,blinkPlugin,changeSetting,chartMountPlugin,createDefaultBarOptions,createDefaultLineOptions,customLegend,T$ as default,defaultBarScales,defaultBarTooltipCallback,defaultLineScales,defaultLineTooltipCallback,doughnutCenterTextPlugin,loadingPlugin,makeCenterHtml,noDataPlugin,zoomRangeSlider,zoomResetPlugin};
|