react-native-chart-kit 6.12.2 → 7.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -35
- package/dist/{BarChart.d.ts → charts/bar/BarChart.d.ts} +8 -7
- package/dist/charts/bar/BarChart.d.ts.map +1 -0
- package/dist/charts/bar/BarChart.js +161 -0
- package/dist/charts/bar/index.d.ts +3 -0
- package/dist/charts/bar/index.d.ts.map +1 -0
- package/dist/charts/bar/index.js +3 -0
- package/dist/{contribution-graph → charts/contribution-graph}/ContributionGraph.d.ts +7 -6
- package/dist/charts/contribution-graph/ContributionGraph.d.ts.map +1 -0
- package/dist/charts/contribution-graph/ContributionGraph.js +310 -0
- package/dist/charts/contribution-graph/constants.d.ts.map +1 -0
- package/dist/charts/contribution-graph/constants.js +17 -0
- package/dist/{contribution-graph/DateHelpers.d.ts → charts/contribution-graph/date.d.ts} +1 -1
- package/dist/charts/contribution-graph/date.d.ts.map +1 -0
- package/dist/charts/contribution-graph/date.js +14 -0
- package/dist/{contribution-graph → charts/contribution-graph}/index.d.ts +1 -1
- package/dist/charts/contribution-graph/index.d.ts.map +1 -0
- package/dist/charts/contribution-graph/index.js +3 -0
- package/dist/charts/line/LegendItem.d.ts +12 -0
- package/dist/charts/line/LegendItem.d.ts.map +1 -0
- package/dist/charts/line/LegendItem.js +23 -0
- package/dist/{line-chart → charts/line}/LineChart.d.ts +9 -8
- package/dist/charts/line/LineChart.d.ts.map +1 -0
- package/dist/charts/line/LineChart.js +481 -0
- package/dist/charts/line/index.d.ts.map +1 -0
- package/dist/charts/line/index.js +3 -0
- package/dist/{PieChart.d.ts → charts/pie/PieChart.d.ts} +3 -2
- package/dist/charts/pie/PieChart.d.ts.map +1 -0
- package/dist/charts/pie/PieChart.js +103 -0
- package/dist/charts/pie/index.d.ts +3 -0
- package/dist/charts/pie/index.d.ts.map +1 -0
- package/dist/charts/pie/index.js +3 -0
- package/dist/{ProgressChart.d.ts → charts/progress/ProgressChart.d.ts} +3 -2
- package/dist/charts/progress/ProgressChart.d.ts.map +1 -0
- package/dist/charts/progress/ProgressChart.js +136 -0
- package/dist/charts/progress/index.d.ts +3 -0
- package/dist/charts/progress/index.d.ts.map +1 -0
- package/dist/charts/progress/index.js +3 -0
- package/dist/{StackedBarChart.d.ts → charts/stacked-bar/StackedBarChart.d.ts} +4 -3
- package/dist/charts/stacked-bar/StackedBarChart.d.ts.map +1 -0
- package/dist/charts/stacked-bar/StackedBarChart.js +147 -0
- package/dist/charts/stacked-bar/index.d.ts +3 -0
- package/dist/charts/stacked-bar/index.d.ts.map +1 -0
- package/dist/charts/stacked-bar/index.js +3 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/{AbstractChart.d.ts → shared/AbstractChart.d.ts} +80 -58
- package/dist/shared/AbstractChart.d.ts.map +1 -0
- package/dist/shared/AbstractChart.js +283 -0
- package/dist/{HelperTypes.d.ts → shared/types.d.ts} +1 -1
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/utils.d.ts +5 -0
- package/dist/shared/utils.d.ts.map +1 -0
- package/dist/shared/utils.js +10 -0
- package/package.json +101 -53
- package/scripts/chartkit-codemod.mjs +256 -0
- package/dist/AbstractChart.d.ts.map +0 -1
- package/dist/AbstractChart.js +0 -261
- package/dist/BarChart.d.ts.map +0 -1
- package/dist/BarChart.js +0 -159
- package/dist/HelperTypes.d.ts.map +0 -1
- package/dist/HelperTypes.js +0 -2
- package/dist/PieChart.d.ts.map +0 -1
- package/dist/PieChart.js +0 -101
- package/dist/ProgressChart.d.ts.map +0 -1
- package/dist/ProgressChart.js +0 -134
- package/dist/StackedBarChart.d.ts.map +0 -1
- package/dist/StackedBarChart.js +0 -145
- package/dist/Utils.d.ts +0 -2
- package/dist/Utils.d.ts.map +0 -1
- package/dist/Utils.js +0 -4
- package/dist/contribution-graph/ContributionGraph.d.ts.map +0 -1
- package/dist/contribution-graph/ContributionGraph.js +0 -309
- package/dist/contribution-graph/DateHelpers.d.ts.map +0 -1
- package/dist/contribution-graph/DateHelpers.js +0 -14
- package/dist/contribution-graph/constants.d.ts.map +0 -1
- package/dist/contribution-graph/constants.js +0 -17
- package/dist/contribution-graph/index.d.ts.map +0 -1
- package/dist/contribution-graph/index.js +0 -3
- package/dist/line-chart/LegendItem.d.ts +0 -11
- package/dist/line-chart/LegendItem.d.ts.map +0 -1
- package/dist/line-chart/LegendItem.js +0 -23
- package/dist/line-chart/LineChart.d.ts.map +0 -1
- package/dist/line-chart/LineChart.js +0 -459
- package/dist/line-chart/index.d.ts.map +0 -1
- package/dist/line-chart/index.js +0 -3
- /package/dist/{contribution-graph → charts/contribution-graph}/constants.d.ts +0 -0
- /package/dist/{line-chart → charts/line}/index.d.ts +0 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
|
|
7
|
+
export const legacyChartComponents = [
|
|
8
|
+
"LineChart",
|
|
9
|
+
"BarChart",
|
|
10
|
+
"StackedBarChart",
|
|
11
|
+
"PieChart",
|
|
12
|
+
"ProgressChart",
|
|
13
|
+
"ContributionGraph"
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const sourceExtensions = new Set([".js", ".jsx", ".ts", ".tsx"]);
|
|
17
|
+
const ignoredDirectoryNames = new Set([
|
|
18
|
+
".git",
|
|
19
|
+
".tmp",
|
|
20
|
+
"build",
|
|
21
|
+
"dist",
|
|
22
|
+
"node_modules"
|
|
23
|
+
]);
|
|
24
|
+
const unsupportedLegacyProps = [
|
|
25
|
+
"decorator",
|
|
26
|
+
"getDotProps",
|
|
27
|
+
"renderDotContent",
|
|
28
|
+
"tooltipDataAttrs"
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
export const importsReactNativeChartKit = (source) =>
|
|
32
|
+
/from\s+["']react-native-chart-kit["']/.test(source) ||
|
|
33
|
+
/require\(\s*["']react-native-chart-kit["']\s*\)/.test(source);
|
|
34
|
+
|
|
35
|
+
const getImportedLegacyComponents = (source) => {
|
|
36
|
+
const imported = new Set();
|
|
37
|
+
const namedImportPattern =
|
|
38
|
+
/import\s+\{(?<names>[^}]+)\}\s+from\s+["']react-native-chart-kit["']/g;
|
|
39
|
+
let match;
|
|
40
|
+
|
|
41
|
+
while ((match = namedImportPattern.exec(source)) !== null) {
|
|
42
|
+
const names = match.groups?.names ?? "";
|
|
43
|
+
|
|
44
|
+
for (const name of names.split(",")) {
|
|
45
|
+
const localName = name
|
|
46
|
+
.trim()
|
|
47
|
+
.split(/\s+as\s+/i)
|
|
48
|
+
.at(-1)
|
|
49
|
+
?.trim();
|
|
50
|
+
|
|
51
|
+
if (localName && legacyChartComponents.includes(localName)) {
|
|
52
|
+
imported.add(localName);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const requirePattern =
|
|
58
|
+
/(?:const|let|var)\s+\{(?<names>[^}]+)\}\s*=\s*require\(\s*["']react-native-chart-kit["']\s*\)/g;
|
|
59
|
+
|
|
60
|
+
while ((match = requirePattern.exec(source)) !== null) {
|
|
61
|
+
const names = match.groups?.names ?? "";
|
|
62
|
+
|
|
63
|
+
for (const name of names.split(",")) {
|
|
64
|
+
const localName = name
|
|
65
|
+
.trim()
|
|
66
|
+
.split(/\s*:\s*/)
|
|
67
|
+
.at(-1)
|
|
68
|
+
?.trim();
|
|
69
|
+
|
|
70
|
+
if (localName && legacyChartComponents.includes(localName)) {
|
|
71
|
+
imported.add(localName);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return imported;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const getLineNumber = (source, index) =>
|
|
80
|
+
source.slice(0, index).split("\n").length;
|
|
81
|
+
|
|
82
|
+
const collectWarnings = ({ filePath, source }) => {
|
|
83
|
+
const warnings = [];
|
|
84
|
+
|
|
85
|
+
for (const prop of unsupportedLegacyProps) {
|
|
86
|
+
const pattern = new RegExp(`\\b${prop}\\s*=`, "g");
|
|
87
|
+
let match;
|
|
88
|
+
|
|
89
|
+
while ((match = pattern.exec(source)) !== null) {
|
|
90
|
+
warnings.push({
|
|
91
|
+
filePath,
|
|
92
|
+
line: getLineNumber(source, match.index),
|
|
93
|
+
message: `${prop} is preserved, but should be manually reviewed for the modern composable API.`
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (
|
|
99
|
+
/import\s+\*\s+as\s+\w+\s+from\s+["']react-native-chart-kit["']/.test(
|
|
100
|
+
source
|
|
101
|
+
)
|
|
102
|
+
) {
|
|
103
|
+
warnings.push({
|
|
104
|
+
filePath,
|
|
105
|
+
line: 1,
|
|
106
|
+
message:
|
|
107
|
+
"Namespace imports are detected but not rewritten; review ChartKit.LineChart-style usages manually."
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return warnings;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export const transformV1ToV2Source = (source) => {
|
|
115
|
+
if (!importsReactNativeChartKit(source)) {
|
|
116
|
+
return {
|
|
117
|
+
changed: false,
|
|
118
|
+
source
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const importedComponents = getImportedLegacyComponents(source);
|
|
123
|
+
|
|
124
|
+
if (importedComponents.size === 0) {
|
|
125
|
+
return {
|
|
126
|
+
changed: false,
|
|
127
|
+
source
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const componentAlternation = [...importedComponents].join("|");
|
|
132
|
+
const openingTagPattern = new RegExp(
|
|
133
|
+
`<(?<name>${componentAlternation})(?<attrs>\\s[^<>]*?)?(?<closing>\\/?)>`,
|
|
134
|
+
"g"
|
|
135
|
+
);
|
|
136
|
+
const nextSource = source.replace(
|
|
137
|
+
openingTagPattern,
|
|
138
|
+
(fullMatch, name, attrs = "", closing) => {
|
|
139
|
+
if (/\bcompatibility\s*=/.test(attrs)) {
|
|
140
|
+
return fullMatch;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return `<${name} compatibility="v1"${attrs}${closing}>`;
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
return {
|
|
148
|
+
changed: nextSource !== source,
|
|
149
|
+
source: nextSource
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const collectSourceFiles = async (entry) => {
|
|
154
|
+
const absolutePath = path.resolve(entry);
|
|
155
|
+
const entryStat = await stat(absolutePath);
|
|
156
|
+
|
|
157
|
+
if (entryStat.isFile()) {
|
|
158
|
+
return sourceExtensions.has(path.extname(absolutePath))
|
|
159
|
+
? [absolutePath]
|
|
160
|
+
: [];
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!entryStat.isDirectory()) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const children = await readdir(absolutePath, { withFileTypes: true });
|
|
168
|
+
const nested = await Promise.all(
|
|
169
|
+
children.map((child) => {
|
|
170
|
+
if (child.isDirectory() && ignoredDirectoryNames.has(child.name)) {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return collectSourceFiles(path.join(absolutePath, child.name));
|
|
175
|
+
})
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
return nested.flat();
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const runV1ToV2 = async ({ check, entries }) => {
|
|
182
|
+
const files = (await Promise.all(entries.map(collectSourceFiles))).flat();
|
|
183
|
+
const changedFiles = [];
|
|
184
|
+
const warnings = [];
|
|
185
|
+
|
|
186
|
+
for (const filePath of files) {
|
|
187
|
+
const source = await readFile(filePath, "utf8");
|
|
188
|
+
const result = transformV1ToV2Source(source);
|
|
189
|
+
|
|
190
|
+
warnings.push(...collectWarnings({ filePath, source }));
|
|
191
|
+
|
|
192
|
+
if (!result.changed) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
changedFiles.push(filePath);
|
|
197
|
+
|
|
198
|
+
if (!check) {
|
|
199
|
+
await writeFile(filePath, result.source, "utf8");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
changedFiles,
|
|
205
|
+
checkedFiles: files.length,
|
|
206
|
+
warnings
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const printUsage = () => {
|
|
211
|
+
console.log(`Usage:
|
|
212
|
+
chartkit-codemod v1-to-v2 <path...> [--check]
|
|
213
|
+
|
|
214
|
+
Examples:
|
|
215
|
+
npx chartkit-codemod v1-to-v2 ./src
|
|
216
|
+
npx chartkit-codemod v1-to-v2 ./src --check`);
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export const runCli = async (argv) => {
|
|
220
|
+
const [, , command, ...rest] = argv;
|
|
221
|
+
const check = rest.includes("--check");
|
|
222
|
+
const entries = rest.filter((item) => item !== "--check");
|
|
223
|
+
|
|
224
|
+
if (command !== "v1-to-v2" || entries.length === 0) {
|
|
225
|
+
printUsage();
|
|
226
|
+
return 1;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const result = await runV1ToV2({ check, entries });
|
|
230
|
+
|
|
231
|
+
for (const warning of result.warnings) {
|
|
232
|
+
console.warn(
|
|
233
|
+
`${path.relative(process.cwd(), warning.filePath)}:${warning.line}: ${warning.message}`
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const action = check ? "would update" : "updated";
|
|
238
|
+
console.log(
|
|
239
|
+
`chartkit-codemod v1-to-v2 checked ${result.checkedFiles} files; ${action} ${result.changedFiles.length}.`
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
for (const filePath of result.changedFiles) {
|
|
243
|
+
console.log(`- ${path.relative(process.cwd(), filePath)}`);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return check && result.changedFiles.length > 0 ? 1 : 0;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const invokedUrl = process.argv[1]
|
|
250
|
+
? pathToFileURL(path.resolve(process.argv[1])).href
|
|
251
|
+
: "";
|
|
252
|
+
|
|
253
|
+
if (import.meta.url === invokedUrl) {
|
|
254
|
+
const exitCode = await runCli(process.argv);
|
|
255
|
+
process.exit(exitCode);
|
|
256
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractChart.d.ts","sourceRoot":"","sources":["../src/AbstractChart.tsx"],"names":[],"mappings":"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"}
|
package/dist/AbstractChart.js
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
var __extends = (this && this.__extends) || (function () {
|
|
2
|
-
var extendStatics = function (d, b) {
|
|
3
|
-
extendStatics = Object.setPrototypeOf ||
|
|
4
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
-
return extendStatics(d, b);
|
|
7
|
-
};
|
|
8
|
-
return function (d, b) {
|
|
9
|
-
if (typeof b !== "function" && b !== null)
|
|
10
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
-
extendStatics(d, b);
|
|
12
|
-
function __() { this.constructor = d; }
|
|
13
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
-
};
|
|
15
|
-
})();
|
|
16
|
-
var __assign = (this && this.__assign) || function () {
|
|
17
|
-
__assign = Object.assign || function(t) {
|
|
18
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
19
|
-
s = arguments[i];
|
|
20
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
21
|
-
t[p] = s[p];
|
|
22
|
-
}
|
|
23
|
-
return t;
|
|
24
|
-
};
|
|
25
|
-
return __assign.apply(this, arguments);
|
|
26
|
-
};
|
|
27
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
28
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
29
|
-
if (ar || !(i in from)) {
|
|
30
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
31
|
-
ar[i] = from[i];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
35
|
-
};
|
|
36
|
-
import React, { Component } from "react";
|
|
37
|
-
import { Defs, Line, LinearGradient, Stop, Text } from "react-native-svg";
|
|
38
|
-
export var DEFAULT_X_LABELS_HEIGHT_PERCENTAGE = 0.75;
|
|
39
|
-
var nextChartId = 0;
|
|
40
|
-
var AbstractChart = /** @class */ (function (_super) {
|
|
41
|
-
__extends(AbstractChart, _super);
|
|
42
|
-
function AbstractChart() {
|
|
43
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
44
|
-
_this.chartId = nextChartId++;
|
|
45
|
-
_this.getValidData = function (data) {
|
|
46
|
-
if (data === void 0) { data = []; }
|
|
47
|
-
return data.filter(function (value) { return typeof value === "number" && isFinite(value); });
|
|
48
|
-
};
|
|
49
|
-
_this.getGradientId = function (id) {
|
|
50
|
-
return "chart-kit-".concat(_this.chartId, "-").concat(id);
|
|
51
|
-
};
|
|
52
|
-
_this.getGradientUrl = function (id) {
|
|
53
|
-
return "url(#".concat(_this.getGradientId(id), ")");
|
|
54
|
-
};
|
|
55
|
-
_this.calcScaler = function (data) {
|
|
56
|
-
var values = _this.getValidData(data);
|
|
57
|
-
if (values.length === 0) {
|
|
58
|
-
return 1;
|
|
59
|
-
}
|
|
60
|
-
if (_this.props.fromZero && _this.props.fromNumber) {
|
|
61
|
-
return (Math.max.apply(Math, __spreadArray(__spreadArray([], values, false), [_this.props.fromNumber], false)) - Math.min.apply(Math, __spreadArray(__spreadArray([], values, false), [0], false)) || 1);
|
|
62
|
-
}
|
|
63
|
-
else if (_this.props.fromZero) {
|
|
64
|
-
return Math.max.apply(Math, __spreadArray(__spreadArray([], values, false), [0], false)) - Math.min.apply(Math, __spreadArray(__spreadArray([], values, false), [0], false)) || 1;
|
|
65
|
-
}
|
|
66
|
-
else if (_this.props.fromNumber) {
|
|
67
|
-
return (Math.max.apply(Math, __spreadArray(__spreadArray([], values, false), [_this.props.fromNumber], false)) - Math.min.apply(Math, __spreadArray(__spreadArray([], values, false), [_this.props.fromNumber], false)) || 1);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
return Math.max.apply(Math, values) - Math.min.apply(Math, values) || 1;
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
_this.calcBaseHeight = function (data, height) {
|
|
74
|
-
var values = _this.getValidData(data);
|
|
75
|
-
if (values.length === 0) {
|
|
76
|
-
return height;
|
|
77
|
-
}
|
|
78
|
-
var min = Math.min.apply(Math, values);
|
|
79
|
-
var max = Math.max.apply(Math, values);
|
|
80
|
-
if (min >= 0 && max >= 0) {
|
|
81
|
-
return height;
|
|
82
|
-
}
|
|
83
|
-
else if (min < 0 && max <= 0) {
|
|
84
|
-
return 0;
|
|
85
|
-
}
|
|
86
|
-
else if (min < 0 && max > 0) {
|
|
87
|
-
return (height * max) / _this.calcScaler(values);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
_this.calcHeight = function (val, data, height) {
|
|
91
|
-
if (typeof val !== "number" || !isFinite(val)) {
|
|
92
|
-
return 0;
|
|
93
|
-
}
|
|
94
|
-
var values = _this.getValidData(data);
|
|
95
|
-
if (values.length === 0) {
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
var max = Math.max.apply(Math, values);
|
|
99
|
-
var min = Math.min.apply(Math, values);
|
|
100
|
-
if (min < 0 && max > 0) {
|
|
101
|
-
return height * (val / _this.calcScaler(values));
|
|
102
|
-
}
|
|
103
|
-
else if (min >= 0 && max >= 0) {
|
|
104
|
-
return _this.props.fromZero
|
|
105
|
-
? height * (val / _this.calcScaler(values))
|
|
106
|
-
: height * ((val - min) / _this.calcScaler(values));
|
|
107
|
-
}
|
|
108
|
-
else if (min < 0 && max <= 0) {
|
|
109
|
-
return _this.props.fromZero
|
|
110
|
-
? height * (val / _this.calcScaler(values))
|
|
111
|
-
: height * ((val - max) / _this.calcScaler(values));
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
_this.renderHorizontalLines = function (config) {
|
|
115
|
-
var count = config.count, width = config.width, height = config.height, paddingTop = config.paddingTop, paddingRight = config.paddingRight, _a = config.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _a === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _a;
|
|
116
|
-
var basePosition = height * verticalLabelsHeightPercentage;
|
|
117
|
-
return __spreadArray([], new Array(count + 1), true).map(function (_, i) {
|
|
118
|
-
var y = (basePosition / count) * i + paddingTop;
|
|
119
|
-
return (<Line key={"horizontal-line-".concat(i)} x1={paddingRight} y1={y} x2={width} y2={y} {..._this.getPropsForBackgroundLines()}/>);
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
_this.renderHorizontalLine = function (config) {
|
|
123
|
-
var width = config.width, height = config.height, paddingTop = config.paddingTop, paddingRight = config.paddingRight, _a = config.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _a === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _a;
|
|
124
|
-
return (<Line key="horizontal-line" x1={paddingRight} y1={height * verticalLabelsHeightPercentage + paddingTop} x2={width} y2={height * verticalLabelsHeightPercentage + paddingTop} {..._this.getPropsForBackgroundLines()}/>);
|
|
125
|
-
};
|
|
126
|
-
_this.renderHorizontalLabels = function (config) {
|
|
127
|
-
var count = config.count, data = config.data, height = config.height, paddingTop = config.paddingTop, paddingRight = config.paddingRight, _a = config.horizontalLabelRotation, horizontalLabelRotation = _a === void 0 ? 0 : _a, _b = config.decimalPlaces, decimalPlaces = _b === void 0 ? 2 : _b, _c = config.formatYLabel, formatYLabel = _c === void 0 ? function (yLabel) { return yLabel; } : _c, _d = config.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _d === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _d;
|
|
128
|
-
var values = _this.getValidData(data);
|
|
129
|
-
var labelData = values.length === 0 ? [0] : values;
|
|
130
|
-
var _e = _this.props, _f = _e.yAxisLabel, yAxisLabel = _f === void 0 ? "" : _f, _g = _e.yAxisSuffix, yAxisSuffix = _g === void 0 ? "" : _g, _h = _e.yLabelsOffset, yLabelsOffset = _h === void 0 ? 12 : _h;
|
|
131
|
-
return new Array(count === 1 ? 1 : count + 1).fill(1).map(function (_, i) {
|
|
132
|
-
var yLabel = String(i * count);
|
|
133
|
-
if (count === 1) {
|
|
134
|
-
yLabel = "".concat(yAxisLabel).concat(formatYLabel(labelData[0].toFixed(decimalPlaces))).concat(yAxisSuffix);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
var label = _this.props.fromZero
|
|
138
|
-
? (_this.calcScaler(labelData) / count) * i + Math.min.apply(Math, __spreadArray(__spreadArray([], labelData, false), [0], false))
|
|
139
|
-
: (_this.calcScaler(labelData) / count) * i + Math.min.apply(Math, labelData);
|
|
140
|
-
yLabel = "".concat(yAxisLabel).concat(formatYLabel(label.toFixed(decimalPlaces))).concat(yAxisSuffix);
|
|
141
|
-
}
|
|
142
|
-
var basePosition = height * verticalLabelsHeightPercentage;
|
|
143
|
-
var x = paddingRight - yLabelsOffset;
|
|
144
|
-
var y = count === 1 && _this.props.fromZero
|
|
145
|
-
? paddingTop + 4
|
|
146
|
-
: height * verticalLabelsHeightPercentage -
|
|
147
|
-
(basePosition / count) * i +
|
|
148
|
-
paddingTop;
|
|
149
|
-
return (<Text rotation={horizontalLabelRotation} origin={"".concat(x, ", ").concat(y)} key={"horizontal-label-".concat(i, "-").concat(yLabel)} x={x} textAnchor="end" y={y} {..._this.getPropsForLabels()} {..._this.getPropsForHorizontalLabels()}>
|
|
150
|
-
{yLabel}
|
|
151
|
-
</Text>);
|
|
152
|
-
});
|
|
153
|
-
};
|
|
154
|
-
_this.renderVerticalLabels = function (_a) {
|
|
155
|
-
var _b = _a.labels, labels = _b === void 0 ? [] : _b, width = _a.width, height = _a.height, paddingRight = _a.paddingRight, paddingTop = _a.paddingTop, _c = _a.horizontalOffset, horizontalOffset = _c === void 0 ? 0 : _c, _d = _a.stackedBar, stackedBar = _d === void 0 ? false : _d, _e = _a.verticalLabelRotation, verticalLabelRotation = _e === void 0 ? 0 : _e, _f = _a.formatXLabel, formatXLabel = _f === void 0 ? function (xLabel) { return xLabel; } : _f, _g = _a.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _g === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _g;
|
|
156
|
-
var _h = _this.props, _j = _h.xAxisLabel, xAxisLabel = _j === void 0 ? "" : _j, _k = _h.xLabelsOffset, xLabelsOffset = _k === void 0 ? 0 : _k, _l = _h.hidePointsAtIndex, hidePointsAtIndex = _l === void 0 ? [] : _l;
|
|
157
|
-
var fontSize = 12;
|
|
158
|
-
var fac = 1;
|
|
159
|
-
if (stackedBar) {
|
|
160
|
-
fac = 0.71;
|
|
161
|
-
}
|
|
162
|
-
return labels.map(function (label, i) {
|
|
163
|
-
if (hidePointsAtIndex.includes(i)) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
var x = (((width - paddingRight) / labels.length) * i +
|
|
167
|
-
paddingRight +
|
|
168
|
-
horizontalOffset) *
|
|
169
|
-
fac;
|
|
170
|
-
var y = height * verticalLabelsHeightPercentage +
|
|
171
|
-
paddingTop +
|
|
172
|
-
fontSize * 2 +
|
|
173
|
-
xLabelsOffset;
|
|
174
|
-
return (<Text origin={"".concat(x, ", ").concat(y)} rotation={verticalLabelRotation} key={"vertical-label-".concat(i, "-").concat(label)} x={x} y={y} textAnchor={verticalLabelRotation === 0 ? "middle" : "start"} {..._this.getPropsForLabels()} {..._this.getPropsForVerticalLabels()}>
|
|
175
|
-
{"".concat(formatXLabel(label)).concat(xAxisLabel)}
|
|
176
|
-
</Text>);
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
_this.renderVerticalLines = function (_a) {
|
|
180
|
-
var data = _a.data, width = _a.width, height = _a.height, paddingTop = _a.paddingTop, paddingRight = _a.paddingRight, _b = _a.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _b === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _b;
|
|
181
|
-
var _c = _this.props.yAxisInterval, yAxisInterval = _c === void 0 ? 1 : _c;
|
|
182
|
-
return __spreadArray([], new Array(Math.ceil(data.length / yAxisInterval)), true).map(function (_, i) {
|
|
183
|
-
return (<Line key={"vertical-line-".concat(i)} x1={Math.floor(((width - paddingRight) / (data.length / yAxisInterval)) * i +
|
|
184
|
-
paddingRight)} y1={0} x2={Math.floor(((width - paddingRight) / (data.length / yAxisInterval)) * i +
|
|
185
|
-
paddingRight)} y2={height * verticalLabelsHeightPercentage + paddingTop} {..._this.getPropsForBackgroundLines()}/>);
|
|
186
|
-
});
|
|
187
|
-
};
|
|
188
|
-
_this.renderVerticalLine = function (_a) {
|
|
189
|
-
var height = _a.height, paddingTop = _a.paddingTop, paddingRight = _a.paddingRight, _b = _a.verticalLabelsHeightPercentage, verticalLabelsHeightPercentage = _b === void 0 ? DEFAULT_X_LABELS_HEIGHT_PERCENTAGE : _b;
|
|
190
|
-
return (<Line key="vertical-line" x1={Math.floor(paddingRight)} y1={0} x2={Math.floor(paddingRight)} y2={height * verticalLabelsHeightPercentage + paddingTop} {..._this.getPropsForBackgroundLines()}/>);
|
|
191
|
-
};
|
|
192
|
-
_this.renderDefs = function (config) {
|
|
193
|
-
var width = config.width, height = config.height, backgroundGradientFrom = config.backgroundGradientFrom, backgroundGradientTo = config.backgroundGradientTo, useShadowColorFromDataset = config.useShadowColorFromDataset, data = config.data;
|
|
194
|
-
var fromOpacity = config.hasOwnProperty("backgroundGradientFromOpacity")
|
|
195
|
-
? config.backgroundGradientFromOpacity
|
|
196
|
-
: 1.0;
|
|
197
|
-
var toOpacity = config.hasOwnProperty("backgroundGradientToOpacity")
|
|
198
|
-
? config.backgroundGradientToOpacity
|
|
199
|
-
: 1.0;
|
|
200
|
-
var fillShadowGradient = config.hasOwnProperty("fillShadowGradient")
|
|
201
|
-
? config.fillShadowGradient
|
|
202
|
-
: _this.props.chartConfig.color(1.0);
|
|
203
|
-
var fillShadowGradientOpacity = config.hasOwnProperty("fillShadowGradientOpacity")
|
|
204
|
-
? config.fillShadowGradientOpacity
|
|
205
|
-
: 0.1;
|
|
206
|
-
var fillShadowGradientFrom = config.hasOwnProperty("fillShadowGradientFrom")
|
|
207
|
-
? config.fillShadowGradientFrom
|
|
208
|
-
: fillShadowGradient;
|
|
209
|
-
var fillShadowGradientFromOpacity = config.hasOwnProperty("fillShadowGradientFromOpacity")
|
|
210
|
-
? config.fillShadowGradientFromOpacity
|
|
211
|
-
: fillShadowGradientOpacity;
|
|
212
|
-
var fillShadowGradientFromOffset = config.hasOwnProperty("fillShadowGradientFromOffset")
|
|
213
|
-
? config.fillShadowGradientFromOffset
|
|
214
|
-
: 0;
|
|
215
|
-
var fillShadowGradientTo = config.hasOwnProperty("fillShadowGradientTo")
|
|
216
|
-
? config.fillShadowGradientTo
|
|
217
|
-
: _this.props.chartConfig.color(1.0);
|
|
218
|
-
var fillShadowGradientToOpacity = config.hasOwnProperty("fillShadowGradientToOpacity")
|
|
219
|
-
? config.fillShadowGradientToOpacity
|
|
220
|
-
: 0.1;
|
|
221
|
-
var fillShadowGradientToOffset = config.hasOwnProperty("fillShadowGradientToOffset")
|
|
222
|
-
? config.fillShadowGradientToOffset
|
|
223
|
-
: 1;
|
|
224
|
-
return (<Defs>
|
|
225
|
-
<LinearGradient id={_this.getGradientId("backgroundGradient")} x1={0} y1={height} x2={width} y2={0} gradientUnits="userSpaceOnUse">
|
|
226
|
-
<Stop offset="0" stopColor={backgroundGradientFrom} stopOpacity={fromOpacity}/>
|
|
227
|
-
<Stop offset="1" stopColor={backgroundGradientTo} stopOpacity={toOpacity}/>
|
|
228
|
-
</LinearGradient>
|
|
229
|
-
{useShadowColorFromDataset && data ? (data.map(function (dataset, index) { return (<LinearGradient id={_this.getGradientId("fillShadowGradientFrom_".concat(index))} key={"".concat(index)} x1={0} y1={0} x2={0} y2={height} gradientUnits="userSpaceOnUse">
|
|
230
|
-
<Stop offset={fillShadowGradientFromOffset} stopColor={dataset.color ? dataset.color(1.0) : fillShadowGradientFrom} stopOpacity={fillShadowGradientFromOpacity}/>
|
|
231
|
-
<Stop offset={fillShadowGradientToOffset} stopColor={dataset.color
|
|
232
|
-
? dataset.color(fillShadowGradientFromOpacity)
|
|
233
|
-
: fillShadowGradientFrom} stopOpacity={fillShadowGradientToOpacity || 0}/>
|
|
234
|
-
</LinearGradient>); })) : (<LinearGradient id={_this.getGradientId("fillShadowGradientFrom")} x1={0} y1={0} x2={0} y2={height} gradientUnits="userSpaceOnUse">
|
|
235
|
-
<Stop offset={fillShadowGradientFromOffset} stopColor={fillShadowGradientFrom} stopOpacity={fillShadowGradientFromOpacity}/>
|
|
236
|
-
<Stop offset={fillShadowGradientToOffset} stopColor={fillShadowGradientTo || fillShadowGradientFrom} stopOpacity={fillShadowGradientToOpacity || 0}/>
|
|
237
|
-
</LinearGradient>)}
|
|
238
|
-
</Defs>);
|
|
239
|
-
};
|
|
240
|
-
return _this;
|
|
241
|
-
}
|
|
242
|
-
AbstractChart.prototype.getPropsForBackgroundLines = function () {
|
|
243
|
-
var _a = this.props.chartConfig.propsForBackgroundLines, propsForBackgroundLines = _a === void 0 ? {} : _a;
|
|
244
|
-
return __assign({ stroke: this.props.chartConfig.color(0.2), strokeDasharray: "5, 10", strokeWidth: 1 }, propsForBackgroundLines);
|
|
245
|
-
};
|
|
246
|
-
AbstractChart.prototype.getPropsForLabels = function () {
|
|
247
|
-
var _a = this.props.chartConfig, _b = _a.propsForLabels, propsForLabels = _b === void 0 ? {} : _b, color = _a.color, _c = _a.labelColor, labelColor = _c === void 0 ? color : _c;
|
|
248
|
-
return __assign({ fontSize: 12, fill: labelColor(0.8) }, propsForLabels);
|
|
249
|
-
};
|
|
250
|
-
AbstractChart.prototype.getPropsForVerticalLabels = function () {
|
|
251
|
-
var _a = this.props.chartConfig, _b = _a.propsForVerticalLabels, propsForVerticalLabels = _b === void 0 ? {} : _b, color = _a.color, _c = _a.labelColor, labelColor = _c === void 0 ? color : _c;
|
|
252
|
-
return __assign({ fill: labelColor(0.8) }, propsForVerticalLabels);
|
|
253
|
-
};
|
|
254
|
-
AbstractChart.prototype.getPropsForHorizontalLabels = function () {
|
|
255
|
-
var _a = this.props.chartConfig, _b = _a.propsForHorizontalLabels, propsForHorizontalLabels = _b === void 0 ? {} : _b, color = _a.color, _c = _a.labelColor, labelColor = _c === void 0 ? color : _c;
|
|
256
|
-
return __assign({ fill: labelColor(0.8) }, propsForHorizontalLabels);
|
|
257
|
-
};
|
|
258
|
-
return AbstractChart;
|
|
259
|
-
}(Component));
|
|
260
|
-
export default AbstractChart;
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BYnN0cmFjdENoYXJ0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFxQzFFLE1BQU0sQ0FBQyxJQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUV2RCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFcEI7SUFHVSxpQ0FBbUU7SUFIN0U7O1FBSVUsYUFBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRXRCLGtCQUFZLEdBQUcsVUFBQyxJQUFtQjtZQUFuQixxQkFBQSxFQUFBLFNBQW1CO1lBQzNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQTVDLENBQTRDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUM7UUFFUSxtQkFBYSxHQUFHLFVBQUMsRUFBVTtZQUNuQyxPQUFPLG9CQUFhLEtBQUksQ0FBQyxPQUFPLGNBQUksRUFBRSxDQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDO1FBRVEsb0JBQWMsR0FBRyxVQUFDLEVBQVU7WUFDcEMsT0FBTyxlQUFRLEtBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLE1BQUcsQ0FBQztRQUMzQyxDQUFDLENBQUM7UUFFRixnQkFBVSxHQUFHLFVBQUMsSUFBYztZQUMxQixJQUFNLE1BQU0sR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXZDLElBQUksTUFBTSxDQUFDLE1BQU0s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RUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQ2xCLGNBQWMsRUFDakI7SUFDSixDQUFDO0lBRUQsaURBQXlCLEdBQXpCO1FBQ1EsSUFBQSxLQUlGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUh4Qiw4QkFBMkIsRUFBM0Isc0JBQXNCLG1CQUFHLEVBQUUsS0FBQSxFQUMzQixLQUFLLFdBQUEsRUFDTCxrQkFBa0IsRUFBbEIsVUFBVSxtQkFBRyxLQUFLLEtBQ00sQ0FBQztRQUMzQixrQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUNsQixzQkFBc0IsRUFDekI7SUFDSixDQUFDO0lBRUQsbURBQTJCLEdBQTNCO1FBQ1EsSUFBQSxLQUlGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUh4QixnQ0FBNkIsRUFBN0Isd0JBQXdCLG1CQUFHLEVBQUUsS0FBQSxFQUM3QixLQUFLLFdBQUEsRUFDTCxrQkFBa0IsRUFBbEIsVUFBVSxtQkFBRyxLQUFLLEtBQ00sQ0FBQztRQUMzQixrQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUNsQix3QkFBd0IsRUFDM0I7SUFDSixDQUFDO0lBMlpILG9CQUFDO0FBQUQsQ0FBQyxBQTloQkQsQ0FHVSxTQUFTLEdBMmhCbEI7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IERlZnMsIExpbmUsIExpbmVhckdyYWRpZW50LCBTdG9wLCBUZXh0IH0gZnJvbSBcInJlYWN0LW5hdGl2ZS1zdmdcIjtcblxuaW1wb3J0IHsgQ2hhcnRDb25maWcsIERhdGFzZXQsIFBhcnRpYWxCeSB9IGZyb20gXCIuL0hlbHBlclR5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RDaGFydFByb3BzIHtcbiAgZnJvbVplcm8/OiBib29sZWFuO1xuICBmcm9tTnVtYmVyPzogbnVtYmVyO1xuICBjaGFydENvbmZpZz86IEFic3RyYWN0Q2hhcnRDb25maWc7XG4gIHlBeGlzTGFiZWw/OiBzdHJpbmc7XG4gIHlBeGlzU3VmZml4Pzogc3RyaW5nO1xuICB5TGFiZWxzT2Zmc2V0PzogbnVtYmVyO1xuICB5QXhpc0ludGVydmFsPzogbnVtYmVyO1xuICB4QXhpc0xhYmVsPzogc3RyaW5nO1xuICB4TGFiZWxzT2Zmc2V0PzogbnVtYmVyO1xuICBoaWRlUG9pbnRzQXRJbmRleD86IG51bWJlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0Q2hhcnRDb25maWcgZXh0ZW5kcyBDaGFydENvbmZpZyB7XG4gIGNvdW50PzogbnVtYmVyO1xuICBkYXRhPzogRGF0YXNldFtdO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBwYWRkaW5nVG9wPzogbnVtYmVyO1xuICBwYWRkaW5nUmlnaHQ/OiBudW1iZXI7XG4gIGhvcml6b250YWxMYWJlbFJvdGF0aW9uPzogbnVtYmVyO1xuICBmb3JtYXRZTGFiZWw/OiAoeUxhYmVsOiBzdHJpbmcpID0+IHN0cmluZztcbiAgbGFiZWxzPzogc3RyaW5nW107XG4gIGhvcml6b250YWxPZmZzZXQ/OiBudW1iZXI7XG4gIHN0YWNrZWRCYXI/OiBib29sZWFuO1xuICB2ZXJ0aWNhbExhYmVsUm90YXRpb24/OiBudW1iZXI7XG4gIGZvcm1hdFhMYWJlbD86ICh4TGFiZWw6IHN0cmluZykgPT4gc3RyaW5nO1xuICB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2U/OiBudW1iZXI7XG4gIGZvcm1hdFRvcEJhclZhbHVlPzogKHRvcEJhclZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB8IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgQWJzdHJhY3RDaGFydFN0YXRlID0ge307XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1hfTEFCRUxTX0hFSUdIVF9QRVJDRU5UQUdFID0gMC43NTtcblxubGV0IG5leHRDaGFydElkID0gMDtcblxuY2xhc3MgQWJzdHJhY3RDaGFydDxcbiAgSVByb3BzIGV4dGVuZHMgQWJzdHJhY3RDaGFydFByb3BzLFxuICBJU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdENoYXJ0U3RhdGVcbj4gZXh0ZW5kcyBDb21wb25lbnQ8QWJzdHJhY3RDaGFydFByb3BzICYgSVByb3BzLCBBYnN0cmFjdENoYXJ0U3RhdGUgJiBJU3RhdGU+IHtcbiAgcHJpdmF0ZSBjaGFydElkID0gbmV4dENoYXJ0SWQrKztcblxuICBwcm90ZWN0ZWQgZ2V0VmFsaWREYXRhID0gKGRhdGE6IG51bWJlcltdID0gW10pID0+IHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbHVlKSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldEdyYWRpZW50SWQgPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgY2hhcnQta2l0LSR7dGhpcy5jaGFydElkfS0ke2lkfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldEdyYWRpZW50VXJsID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYHVybCgjJHt0aGlzLmdldEdyYWRpZW50SWQoaWQpfSlgO1xuICB9O1xuXG4gIGNhbGNTY2FsZXIgPSAoZGF0YTogbnVtYmVyW10pID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldFZhbGlkRGF0YShkYXRhKTtcblxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5mcm9tWmVybyAmJiB0aGlzLnByb3BzLmZyb21OdW1iZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGgubWF4KC4uLnZhbHVlcywgdGhpcy5wcm9wcy5mcm9tTnVtYmVyKSAtIE1hdGgubWluKC4uLnZhbHVlcywgMCkgfHwgMVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuZnJvbVplcm8pIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCguLi52YWx1ZXMsIDApIC0gTWF0aC5taW4oLi4udmFsdWVzLCAwKSB8fCAxO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5mcm9tTnVtYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLm1heCguLi52YWx1ZXMsIHRoaXMucHJvcHMuZnJvbU51bWJlcikgLVxuICAgICAgICAgIE1hdGgubWluKC4uLnZhbHVlcywgdGhpcy5wcm9wcy5mcm9tTnVtYmVyKSB8fCAxXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoLi4udmFsdWVzKSAtIE1hdGgubWluKC4uLnZhbHVlcykgfHwgMTtcbiAgICB9XG4gIH07XG5cbiAgY2FsY0Jhc2VIZWlnaHQgPSAoZGF0YTogbnVtYmVyW10sIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYWxpZERhdGEoZGF0YSk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi52YWx1ZXMpO1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgaWYgKG1pbiA+PSAwICYmIG1heCA+PSAwKSB7XG4gICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH0gZWxzZSBpZiAobWluIDwgMCAmJiBtYXggPD0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmIChtaW4gPCAwICYmIG1heCA+IDApIHtcbiAgICAgIHJldHVybiAoaGVpZ2h0ICogbWF4KSAvIHRoaXMuY2FsY1NjYWxlcih2YWx1ZXMpO1xuICAgIH1cbiAgfTtcblxuICBjYWxjSGVpZ2h0ID0gKHZhbDogbnVtYmVyLCBkYXRhOiBudW1iZXJbXSwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJudW1iZXJcIiB8fCAhaXNGaW5pdGUodmFsKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRWYWxpZERhdGEoZGF0YSk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4udmFsdWVzKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi52YWx1ZXMpO1xuXG4gICAgaWYgKG1pbiA8IDAgJiYgbWF4ID4gMCkge1xuICAgICAgcmV0dXJuIGhlaWdodCAqICh2YWwgLyB0aGlzLmNhbGNTY2FsZXIodmFsdWVzKSk7XG4gICAgfSBlbHNlIGlmIChtaW4gPj0gMCAmJiBtYXggPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZnJvbVplcm9cbiAgICAgICAgPyBoZWlnaHQgKiAodmFsIC8gdGhpcy5jYWxjU2NhbGVyKHZhbHVlcykpXG4gICAgICAgIDogaGVpZ2h0ICogKCh2YWwgLSBtaW4pIC8gdGhpcy5jYWxjU2NhbGVyKHZhbHVlcykpO1xuICAgIH0gZWxzZSBpZiAobWluIDwgMCAmJiBtYXggPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZnJvbVplcm9cbiAgICAgICAgPyBoZWlnaHQgKiAodmFsIC8gdGhpcy5jYWxjU2NhbGVyKHZhbHVlcykpXG4gICAgICAgIDogaGVpZ2h0ICogKCh2YWwgLSBtYXgpIC8gdGhpcy5jYWxjU2NhbGVyKHZhbHVlcykpO1xuICAgIH1cbiAgfTtcblxuICBnZXRQcm9wc0ZvckJhY2tncm91bmRMaW5lcygpIHtcbiAgICBjb25zdCB7IHByb3BzRm9yQmFja2dyb3VuZExpbmVzID0ge30gfSA9IHRoaXMucHJvcHMuY2hhcnRDb25maWc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cm9rZTogdGhpcy5wcm9wcy5jaGFydENvbmZpZy5jb2xvcigwLjIpLFxuICAgICAgc3Ryb2tlRGFzaGFycmF5OiBcIjUsIDEwXCIsXG4gICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgIC4uLnByb3BzRm9yQmFja2dyb3VuZExpbmVzXG4gICAgfTtcbiAgfVxuXG4gIGdldFByb3BzRm9yTGFiZWxzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzRm9yTGFiZWxzID0ge30sXG4gICAgICBjb2xvcixcbiAgICAgIGxhYmVsQ29sb3IgPSBjb2xvclxuICAgIH0gPSB0aGlzLnByb3BzLmNoYXJ0Q29uZmlnO1xuICAgIHJldHVybiB7XG4gICAgICBmb250U2l6ZTogMTIsXG4gICAgICBmaWxsOiBsYWJlbENvbG9yKDAuOCksXG4gICAgICAuLi5wcm9wc0ZvckxhYmVsc1xuICAgIH07XG4gIH1cblxuICBnZXRQcm9wc0ZvclZlcnRpY2FsTGFiZWxzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzRm9yVmVydGljYWxMYWJlbHMgPSB7fSxcbiAgICAgIGNvbG9yLFxuICAgICAgbGFiZWxDb2xvciA9IGNvbG9yXG4gICAgfSA9IHRoaXMucHJvcHMuY2hhcnRDb25maWc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IoMC44KSxcbiAgICAgIC4uLnByb3BzRm9yVmVydGljYWxMYWJlbHNcbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJvcHNGb3JIb3Jpem9udGFsTGFiZWxzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3BzRm9ySG9yaXpvbnRhbExhYmVscyA9IHt9LFxuICAgICAgY29sb3IsXG4gICAgICBsYWJlbENvbG9yID0gY29sb3JcbiAgICB9ID0gdGhpcy5wcm9wcy5jaGFydENvbmZpZztcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbDogbGFiZWxDb2xvcigwLjgpLFxuICAgICAgLi4ucHJvcHNGb3JIb3Jpem9udGFsTGFiZWxzXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlckhvcml6b250YWxMaW5lcyA9IGNvbmZpZyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY291bnQsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHBhZGRpbmdUb3AsXG4gICAgICBwYWRkaW5nUmlnaHQsXG4gICAgICB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2UgPSBERUZBVUxUX1hfTEFCRUxTX0hFSUdIVF9QRVJDRU5UQUdFXG4gICAgfSA9IGNvbmZpZztcbiAgICBjb25zdCBiYXNlUG9zaXRpb24gPSBoZWlnaHQgKiB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2U7XG5cbiAgICByZXR1cm4gWy4uLm5ldyBBcnJheShjb3VudCArIDEpXS5tYXAoKF8sIGkpID0+IHtcbiAgICAgIGNvbnN0IHkgPSAoYmFzZVBvc2l0aW9uIC8gY291bnQpICogaSArIHBhZGRpbmdUb3A7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TGluZVxuICAgICAgICAgIGtleT17YGhvcml6b250YWwtbGluZS0ke2l9YH1cbiAgICAgICAgICB4MT17cGFkZGluZ1JpZ2h0fVxuICAgICAgICAgIHkxPXt5fVxuICAgICAgICAgIHgyPXt3aWR0aH1cbiAgICAgICAgICB5Mj17eX1cbiAgICAgICAgICB7Li4udGhpcy5nZXRQcm9wc0ZvckJhY2tncm91bmRMaW5lcygpfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXJIb3Jpem9udGFsTGluZSA9IGNvbmZpZyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wLFxuICAgICAgcGFkZGluZ1JpZ2h0LFxuICAgICAgdmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlID0gREVGQVVMVF9YX0xBQkVMU19IRUlHSFRfUEVSQ0VOVEFHRVxuICAgIH0gPSBjb25maWc7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMaW5lXG4gICAgICAgIGtleT1cImhvcml6b250YWwtbGluZVwiXG4gICAgICAgIHgxPXtwYWRkaW5nUmlnaHR9XG4gICAgICAgIHkxPXtoZWlnaHQgKiB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2UgKyBwYWRkaW5nVG9wfVxuICAgICAgICB4Mj17d2lkdGh9XG4gICAgICAgIHkyPXtoZWlnaHQgKiB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2UgKyBwYWRkaW5nVG9wfVxuICAgICAgICB7Li4udGhpcy5nZXRQcm9wc0ZvckJhY2tncm91bmRMaW5lcygpfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckhvcml6b250YWxMYWJlbHMgPSAoXG4gICAgY29uZmlnOiBPbWl0PEFic3RyYWN0Q2hhcnRDb25maWcsIFwiZGF0YVwiPiAmIHsgZGF0YTogbnVtYmVyW10gfVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb3VudCxcbiAgICAgIGRhdGEsXG4gICAgICBoZWlnaHQsXG4gICAgICBwYWRkaW5nVG9wLFxuICAgICAgcGFkZGluZ1JpZ2h0LFxuICAgICAgaG9yaXpvbnRhbExhYmVsUm90YXRpb24gPSAwLFxuICAgICAgZGVjaW1hbFBsYWNlcyA9IDIsXG4gICAgICBmb3JtYXRZTGFiZWwgPSAoeUxhYmVsOiBzdHJpbmcpID0+IHlMYWJlbCxcbiAgICAgIHZlcnRpY2FsTGFiZWxzSGVpZ2h0UGVyY2VudGFnZSA9IERFRkFVTFRfWF9MQUJFTFNfSEVJR0hUX1BFUkNFTlRBR0VcbiAgICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0VmFsaWREYXRhKGRhdGEpO1xuICAgIGNvbnN0IGxhYmVsRGF0YSA9IHZhbHVlcy5sZW5ndGggPT09IDAgPyBbMF0gOiB2YWx1ZXM7XG5cbiAgICBjb25zdCB7XG4gICAgICB5QXhpc0xhYmVsID0gXCJcIixcbiAgICAgIHlBeGlzU3VmZml4ID0gXCJcIixcbiAgICAgIHlMYWJlbHNPZmZzZXQgPSAxMlxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBuZXcgQXJyYXkoY291bnQgPT09IDEgPyAxIDogY291bnQgKyAxKS5maWxsKDEpLm1hcCgoXywgaSkgPT4ge1xuICAgICAgbGV0IHlMYWJlbCA9IFN0cmluZyhpICogY291bnQpO1xuXG4gICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgeUxhYmVsID0gYCR7eUF4aXNMYWJlbH0ke2Zvcm1hdFlMYWJlbChcbiAgICAgICAgICBsYWJlbERhdGFbMF0udG9GaXhlZChkZWNpbWFsUGxhY2VzKVxuICAgICAgICApfSR7eUF4aXNTdWZmaXh9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5wcm9wcy5mcm9tWmVyb1xuICAgICAgICAgID8gKHRoaXMuY2FsY1NjYWxlcihsYWJlbERhdGEpIC8gY291bnQpICogaSArIE1hdGgubWluKC4uLmxhYmVsRGF0YSwgMClcbiAgICAgICAgICA6ICh0aGlzLmNhbGNTY2FsZXIobGFiZWxEYXRhKSAvIGNvdW50KSAqIGkgKyBNYXRoLm1pbiguLi5sYWJlbERhdGEpO1xuICAgICAgICB5TGFiZWwgPSBgJHt5QXhpc0xhYmVsfSR7Zm9ybWF0WUxhYmVsKFxuICAgICAgICAgIGxhYmVsLnRvRml4ZWQoZGVjaW1hbFBsYWNlcylcbiAgICAgICAgKX0ke3lBeGlzU3VmZml4fWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJhc2VQb3NpdGlvbiA9IGhlaWdodCAqIHZlcnRpY2FsTGFiZWxzSGVpZ2h0UGVyY2VudGFnZTtcbiAgICAgIGNvbnN0IHggPSBwYWRkaW5nUmlnaHQgLSB5TGFiZWxzT2Zmc2V0O1xuICAgICAgY29uc3QgeSA9XG4gICAgICAgIGNvdW50ID09PSAxICYmIHRoaXMucHJvcHMuZnJvbVplcm9cbiAgICAgICAgICA/IHBhZGRpbmdUb3AgKyA0XG4gICAgICAgICAgOiBoZWlnaHQgKiB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2UgLVxuICAgICAgICAgICAgKGJhc2VQb3NpdGlvbiAvIGNvdW50KSAqIGkgK1xuICAgICAgICAgICAgcGFkZGluZ1RvcDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAgcm90YXRpb249e2hvcml6b250YWxMYWJlbFJvdGF0aW9ufVxuICAgICAgICAgIG9yaWdpbj17YCR7eH0sICR7eX1gfVxuICAgICAgICAgIGtleT17YGhvcml6b250YWwtbGFiZWwtJHtpfS0ke3lMYWJlbH1gfVxuICAgICAgICAgIHg9e3h9XG4gICAgICAgICAgdGV4dEFuY2hvcj1cImVuZFwiXG4gICAgICAgICAgeT17eX1cbiAgICAgICAgICB7Li4udGhpcy5nZXRQcm9wc0ZvckxhYmVscygpfVxuICAgICAgICAgIHsuLi50aGlzLmdldFByb3BzRm9ySG9yaXpvbnRhbExhYmVscygpfVxuICAgICAgICA+XG4gICAgICAgICAge3lMYWJlbH1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXJWZXJ0aWNhbExhYmVscyA9ICh7XG4gICAgbGFiZWxzID0gW10sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdSaWdodCxcbiAgICBwYWRkaW5nVG9wLFxuICAgIGhvcml6b250YWxPZmZzZXQgPSAwLFxuICAgIHN0YWNrZWRCYXIgPSBmYWxzZSxcbiAgICB2ZXJ0aWNhbExhYmVsUm90YXRpb24gPSAwLFxuICAgIGZvcm1hdFhMYWJlbCA9IHhMYWJlbCA9PiB4TGFiZWwsXG4gICAgdmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlID0gREVGQVVMVF9YX0xBQkVMU19IRUlHSFRfUEVSQ0VOVEFHRVxuICB9OiBQaWNrPFxuICAgIEFic3RyYWN0Q2hhcnRDb25maWcsXG4gICAgfCBcImxhYmVsc1wiXG4gICAgfCBcIndpZHRoXCJcbiAgICB8IFwiaGVpZ2h0XCJcbiAgICB8IFwicGFkZGluZ1JpZ2h0XCJcbiAgICB8IFwicGFkZGluZ1RvcFwiXG4gICAgfCBcImhvcml6b250YWxPZmZzZXRcIlxuICAgIHwgXCJzdGFja2VkQmFyXCJcbiAgICB8IFwidmVydGljYWxMYWJlbFJvdGF0aW9uXCJcbiAgICB8IFwiZm9ybWF0WExhYmVsXCJcbiAgICB8IFwidmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlXCJcbiAgPikgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHhBeGlzTGFiZWwgPSBcIlwiLFxuICAgICAgeExhYmVsc09mZnNldCA9IDAsXG4gICAgICBoaWRlUG9pbnRzQXRJbmRleCA9IFtdXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBmb250U2l6ZSA9IDEyO1xuXG4gICAgbGV0IGZhYyA9IDE7XG4gICAgaWYgKHN0YWNrZWRCYXIpIHtcbiAgICAgIGZhYyA9IDAuNzE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscy5tYXAoKGxhYmVsLCBpKSA9PiB7XG4gICAgICBpZiAoaGlkZVBvaW50c0F0SW5kZXguaW5jbHVkZXMoaSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHggPVxuICAgICAgICAoKCh3aWR0aCAtIHBhZGRpbmdSaWdodCkgLyBsYWJlbHMubGVuZ3RoKSAqIGkgK1xuICAgICAgICAgIHBhZGRpbmdSaWdodCArXG4gICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCkgKlxuICAgICAgICBmYWM7XG5cbiAgICAgIGNvbnN0IHkgPVxuICAgICAgICBoZWlnaHQgKiB2ZXJ0aWNhbExhYmVsc0hlaWdodFBlcmNlbnRhZ2UgK1xuICAgICAgICBwYWRkaW5nVG9wICtcbiAgICAgICAgZm9udFNpemUgKiAyICtcbiAgICAgICAgeExhYmVsc09mZnNldDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHRcbiAgICAgICAgICBvcmlnaW49e2Ake3h9LCAke3l9YH1cbiAgICAgICAgICByb3RhdGlvbj17dmVydGljYWxMYWJlbFJvdGF0aW9ufVxuICAgICAgICAgIGtleT17YHZlcnRpY2FsLWxhYmVsLSR7aX0tJHtsYWJlbH1gfVxuICAgICAgICAgIHg9e3h9XG4gICAgICAgICAgeT17eX1cbiAgICAgICAgICB0ZXh0QW5jaG9yPXt2ZXJ0aWNhbExhYmVsUm90YXRpb24gPT09IDAgPyBcIm1pZGRsZVwiIDogXCJzdGFydFwifVxuICAgICAgICAgIHsuLi50aGlzLmdldFByb3BzRm9yTGFiZWxzKCl9XG4gICAgICAgICAgey4uLnRoaXMuZ2V0UHJvcHNGb3JWZXJ0aWNhbExhYmVscygpfVxuICAgICAgICA+XG4gICAgICAgICAge2Ake2Zvcm1hdFhMYWJlbChsYWJlbCl9JHt4QXhpc0xhYmVsfWB9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmVuZGVyVmVydGljYWxMaW5lcyA9ICh7XG4gICAgZGF0YSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nUmlnaHQsXG4gICAgdmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlID0gREVGQVVMVF9YX0xBQkVMU19IRUlHSFRfUEVSQ0VOVEFHRVxuICB9OiBPbWl0PFxuICAgIFBpY2s8XG4gICAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgICAgfCBcImRhdGFcIlxuICAgICAgfCBcIndpZHRoXCJcbiAgICAgIHwgXCJoZWlnaHRcIlxuICAgICAgfCBcInBhZGRpbmdSaWdodFwiXG4gICAgICB8IFwicGFkZGluZ1RvcFwiXG4gICAgICB8IFwidmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlXCJcbiAgICA+LFxuICAgIFwiZGF0YVwiXG4gID4gJiB7IGRhdGE6IG51bWJlcltdIH0pID0+IHtcbiAgICBjb25zdCB7IHlBeGlzSW50ZXJ2YWwgPSAxIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIFsuLi5uZXcgQXJyYXkoTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8geUF4aXNJbnRlcnZhbCkpXS5tYXAoXG4gICAgICAoXywgaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICBrZXk9e2B2ZXJ0aWNhbC1saW5lLSR7aX1gfVxuICAgICAgICAgICAgeDE9e01hdGguZmxvb3IoXG4gICAgICAgICAgICAgICgod2lkdGggLSBwYWRkaW5nUmlnaHQpIC8gKGRhdGEubGVuZ3RoIC8geUF4aXNJbnRlcnZhbCkpICogaSArXG4gICAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeTE9ezB9XG4gICAgICAgICAgICB4Mj17TWF0aC5mbG9vcihcbiAgICAgICAgICAgICAgKCh3aWR0aCAtIHBhZGRpbmdSaWdodCkgLyAoZGF0YS5sZW5ndGggLyB5QXhpc0ludGVydmFsKSkgKiBpICtcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHRcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB5Mj17aGVpZ2h0ICogdmVydGljYWxMYWJlbHNIZWlnaHRQZXJjZW50YWdlICsgcGFkZGluZ1RvcH1cbiAgICAgICAgICAgIHsuLi50aGlzLmdldFByb3BzRm9yQmFja2dyb3VuZExpbmVzKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlclZlcnRpY2FsTGluZSA9ICh7XG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdUb3AsXG4gICAgcGFkZGluZ1JpZ2h0LFxuICAgIHZlcnRpY2FsTGFiZWxzSGVpZ2h0UGVyY2VudGFnZSA9IERFRkFVTFRfWF9MQUJFTFNfSEVJR0hUX1BFUkNFTlRBR0VcbiAgfTogUGljazxcbiAgICBBYnN0cmFjdENoYXJ0Q29uZmlnLFxuICAgIFwiaGVpZ2h0XCIgfCBcInBhZGRpbmdSaWdodFwiIHwgXCJwYWRkaW5nVG9wXCIgfCBcInZlcnRpY2FsTGFiZWxzSGVpZ2h0UGVyY2VudGFnZVwiXG4gID4pID0+IChcbiAgICA8TGluZVxuICAgICAga2V5PVwidmVydGljYWwtbGluZVwiXG4gICAgICB4MT17TWF0aC5mbG9vcihwYWRkaW5nUmlnaHQpfVxuICAgICAgeTE9ezB9XG4gICAgICB4Mj17TWF0aC5mbG9vcihwYWRkaW5nUmlnaHQpfVxuICAgICAgeTI9e2hlaWdodCAqIHZlcnRpY2FsTGFiZWxzSGVpZ2h0UGVyY2VudGFnZSArIHBhZGRpbmdUb3B9XG4gICAgICB7Li4udGhpcy5nZXRQcm9wc0ZvckJhY2tncm91bmRMaW5lcygpfVxuICAgIC8+XG4gICk7XG5cbiAgcmVuZGVyRGVmcyA9IChcbiAgICBjb25maWc6IFBpY2s8XG4gICAgICBQYXJ0aWFsQnk8XG4gICAgICAgIEFic3RyYWN0Q2hhcnRDb25maWcsXG4gICAgICAgIHwgXCJiYWNrZ3JvdW5kR3JhZGllbnRGcm9tT3BhY2l0eVwiXG4gICAgICAgIHwgXCJiYWNrZ3JvdW5kR3JhZGllbnRUb09wYWNpdHlcIlxuICAgICAgICB8IFwiZmlsbFNoYWRvd0dyYWRpZW50XCJcbiAgICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudE9wYWNpdHlcIlxuICAgICAgICB8IFwiZmlsbFNoYWRvd0dyYWRpZW50RnJvbVwiXG4gICAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRGcm9tT3BhY2l0eVwiXG4gICAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRGcm9tT2Zmc2V0XCJcbiAgICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudFRvXCJcbiAgICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudFRvT3BhY2l0eVwiXG4gICAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRUb09mZnNldFwiXG4gICAgICA+LFxuICAgICAgfCBcIndpZHRoXCJcbiAgICAgIHwgXCJoZWlnaHRcIlxuICAgICAgfCBcImJhY2tncm91bmRHcmFkaWVudEZyb21cIlxuICAgICAgfCBcImJhY2tncm91bmRHcmFkaWVudFRvXCJcbiAgICAgIHwgXCJ1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0XCJcbiAgICAgIHwgXCJkYXRhXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kR3JhZGllbnRGcm9tT3BhY2l0eVwiXG4gICAgICB8IFwiYmFja2dyb3VuZEdyYWRpZW50VG9PcGFjaXR5XCJcbiAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRcIlxuICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudE9wYWNpdHlcIlxuICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudEZyb21cIlxuICAgICAgfCBcImZpbGxTaGFkb3dHcmFkaWVudEZyb21PcGFjaXR5XCJcbiAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRGcm9tT2Zmc2V0XCJcbiAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRUb1wiXG4gICAgICB8IFwiZmlsbFNoYWRvd0dyYWRpZW50VG9PcGFjaXR5XCJcbiAgICAgIHwgXCJmaWxsU2hhZG93R3JhZGllbnRUb09mZnNldFwiXG4gICAgPlxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGJhY2tncm91bmRHcmFkaWVudEZyb20sXG4gICAgICBiYWNrZ3JvdW5kR3JhZGllbnRUbyxcbiAgICAgIHVzZVNoYWRvd0NvbG9yRnJvbURhdGFzZXQsXG4gICAgICBkYXRhXG4gICAgfSA9IGNvbmZpZztcblxuICAgIGNvbnN0IGZyb21PcGFjaXR5ID0gY29uZmlnLmhhc093blByb3BlcnR5KFwiYmFja2dyb3VuZEdyYWRpZW50RnJvbU9wYWNpdHlcIilcbiAgICAgID8gY29uZmlnLmJhY2tncm91bmRHcmFkaWVudEZyb21PcGFjaXR5XG4gICAgICA6IDEuMDtcbiAgICBjb25zdCB0b09wYWNpdHkgPSBjb25maWcuaGFzT3duUHJvcGVydHkoXCJiYWNrZ3JvdW5kR3JhZGllbnRUb09wYWNpdHlcIilcbiAgICAgID8gY29uZmlnLmJhY2tncm91bmRHcmFkaWVudFRvT3BhY2l0eVxuICAgICAgOiAxLjA7XG5cbiAgICBjb25zdCBmaWxsU2hhZG93R3JhZGllbnQgPSBjb25maWcuaGFzT3duUHJvcGVydHkoXCJmaWxsU2hhZG93R3JhZGllbnRcIilcbiAgICAgID8gY29uZmlnLmZpbGxTaGFkb3dHcmFkaWVudFxuICAgICAgOiB0aGlzLnByb3BzLmNoYXJ0Q29uZmlnLmNvbG9yKDEuMCk7XG5cbiAgICBjb25zdCBmaWxsU2hhZG93R3JhZGllbnRPcGFjaXR5ID0gY29uZmlnLmhhc093blByb3BlcnR5KFxuICAgICAgXCJmaWxsU2hhZG93R3JhZGllbnRPcGFjaXR5XCJcbiAgICApXG4gICAgICA/IGNvbmZpZy5maWxsU2hhZG93R3JhZGllbnRPcGFjaXR5XG4gICAgICA6IDAuMTtcblxuICAgIGNvbnN0IGZpbGxTaGFkb3dHcmFkaWVudEZyb20gPSBjb25maWcuaGFzT3duUHJvcGVydHkoXG4gICAgICBcImZpbGxTaGFkb3dHcmFkaWVudEZyb21cIlxuICAgIClcbiAgICAgID8gY29uZmlnLmZpbGxTaGFkb3dHcmFkaWVudEZyb21cbiAgICAgIDogZmlsbFNoYWRvd0dyYWRpZW50O1xuXG4gICAgY29uc3QgZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9wYWNpdHkgPSBjb25maWcuaGFzT3duUHJvcGVydHkoXG4gICAgICBcImZpbGxTaGFkb3dHcmFkaWVudEZyb21PcGFjaXR5XCJcbiAgICApXG4gICAgICA/IGNvbmZpZy5maWxsU2hhZG93R3JhZGllbnRGcm9tT3BhY2l0eVxuICAgICAgOiBmaWxsU2hhZG93R3JhZGllbnRPcGFjaXR5O1xuXG4gICAgY29uc3QgZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9mZnNldCA9IGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcbiAgICAgIFwiZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9mZnNldFwiXG4gICAgKVxuICAgICAgPyBjb25maWcuZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9mZnNldFxuICAgICAgOiAwO1xuXG4gICAgY29uc3QgZmlsbFNoYWRvd0dyYWRpZW50VG8gPSBjb25maWcuaGFzT3duUHJvcGVydHkoXCJmaWxsU2hhZG93R3JhZGllbnRUb1wiKVxuICAgICAgPyBjb25maWcuZmlsbFNoYWRvd0dyYWRpZW50VG9cbiAgICAgIDogdGhpcy5wcm9wcy5jaGFydENvbmZpZy5jb2xvcigxLjApO1xuXG4gICAgY29uc3QgZmlsbFNoYWRvd0dyYWRpZW50VG9PcGFjaXR5ID0gY29uZmlnLmhhc093blByb3BlcnR5KFxuICAgICAgXCJmaWxsU2hhZG93R3JhZGllbnRUb09wYWNpdHlcIlxuICAgIClcbiAgICAgID8gY29uZmlnLmZpbGxTaGFkb3dHcmFkaWVudFRvT3BhY2l0eVxuICAgICAgOiAwLjE7XG5cbiAgICBjb25zdCBmaWxsU2hhZG93R3JhZGllbnRUb09mZnNldCA9IGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShcbiAgICAgIFwiZmlsbFNoYWRvd0dyYWRpZW50VG9PZmZzZXRcIlxuICAgIClcbiAgICAgID8gY29uZmlnLmZpbGxTaGFkb3dHcmFkaWVudFRvT2Zmc2V0XG4gICAgICA6IDE7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERlZnM+XG4gICAgICAgIDxMaW5lYXJHcmFkaWVudFxuICAgICAgICAgIGlkPXt0aGlzLmdldEdyYWRpZW50SWQoXCJiYWNrZ3JvdW5kR3JhZGllbnRcIil9XG4gICAgICAgICAgeDE9ezB9XG4gICAgICAgICAgeTE9e2hlaWdodH1cbiAgICAgICAgICB4Mj17d2lkdGh9XG4gICAgICAgICAgeTI9ezB9XG4gICAgICAgICAgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxTdG9wXG4gICAgICAgICAgICBvZmZzZXQ9XCIwXCJcbiAgICAgICAgICAgIHN0b3BDb2xvcj17YmFja2dyb3VuZEdyYWRpZW50RnJvbX1cbiAgICAgICAgICAgIHN0b3BPcGFjaXR5PXtmcm9tT3BhY2l0eX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdG9wXG4gICAgICAgICAgICBvZmZzZXQ9XCIxXCJcbiAgICAgICAgICAgIHN0b3BDb2xvcj17YmFja2dyb3VuZEdyYWRpZW50VG99XG4gICAgICAgICAgICBzdG9wT3BhY2l0eT17dG9PcGFjaXR5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTGluZWFyR3JhZGllbnQ+XG4gICAgICAgIHt1c2VTaGFkb3dDb2xvckZyb21EYXRhc2V0ICYmIGRhdGEgPyAoXG4gICAgICAgICAgZGF0YS5tYXAoKGRhdGFzZXQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8TGluZWFyR3JhZGllbnRcbiAgICAgICAgICAgICAgaWQ9e3RoaXMuZ2V0R3JhZGllbnRJZChgZmlsbFNoYWRvd0dyYWRpZW50RnJvbV8ke2luZGV4fWApfVxuICAgICAgICAgICAgICBrZXk9e2Ake2luZGV4fWB9XG4gICAgICAgICAgICAgIHgxPXswfVxuICAgICAgICAgICAgICB5MT17MH1cbiAgICAgICAgICAgICAgeDI9ezB9XG4gICAgICAgICAgICAgIHkyPXtoZWlnaHR9XG4gICAgICAgICAgICAgIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdG9wXG4gICAgICAgICAgICAgICAgb2Zmc2V0PXtmaWxsU2hhZG93R3JhZGllbnRGcm9tT2Zmc2V0fVxuICAgICAgICAgICAgICAgIHN0b3BDb2xvcj17XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0LmNvbG9yID8gZGF0YXNldC5jb2xvcigxLjApIDogZmlsbFNoYWRvd0dyYWRpZW50RnJvbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdG9wT3BhY2l0eT17ZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9wYWNpdHl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTdG9wXG4gICAgICAgICAgICAgICAgb2Zmc2V0PXtmaWxsU2hhZG93R3JhZGllbnRUb09mZnNldH1cbiAgICAgICAgICAgICAgICBzdG9wQ29sb3I9e1xuICAgICAgICAgICAgICAgICAgZGF0YXNldC5jb2xvclxuICAgICAgICAgICAgICAgICAgICA/IGRhdGFzZXQuY29sb3IoZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9wYWNpdHkpXG4gICAgICAgICAgICAgICAgICAgIDogZmlsbFNoYWRvd0dyYWRpZW50RnJvbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdG9wT3BhY2l0eT17ZmlsbFNoYWRvd0dyYWRpZW50VG9PcGFjaXR5IHx8IDB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0xpbmVhckdyYWRpZW50PlxuICAgICAgICAgICkpXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPExpbmVhckdyYWRpZW50XG4gICAgICAgICAgICBpZD17dGhpcy5nZXRHcmFkaWVudElkKFwiZmlsbFNoYWRvd0dyYWRpZW50RnJvbVwiKX1cbiAgICAgICAgICAgIHgxPXswfVxuICAgICAgICAgICAgeTE9ezB9XG4gICAgICAgICAgICB4Mj17MH1cbiAgICAgICAgICAgIHkyPXtoZWlnaHR9XG4gICAgICAgICAgICBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdG9wXG4gICAgICAgICAgICAgIG9mZnNldD17ZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9mZnNldH1cbiAgICAgICAgICAgICAgc3RvcENvbG9yPXtmaWxsU2hhZG93R3JhZGllbnRGcm9tfVxuICAgICAgICAgICAgICBzdG9wT3BhY2l0eT17ZmlsbFNoYWRvd0dyYWRpZW50RnJvbU9wYWNpdHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFN0b3BcbiAgICAgICAgICAgICAgb2Zmc2V0PXtmaWxsU2hhZG93R3JhZGllbnRUb09mZnNldH1cbiAgICAgICAgICAgICAgc3RvcENvbG9yPXtmaWxsU2hhZG93R3JhZGllbnRUbyB8fCBmaWxsU2hhZG93R3JhZGllbnRGcm9tfVxuICAgICAgICAgICAgICBzdG9wT3BhY2l0eT17ZmlsbFNoYWRvd0dyYWRpZW50VG9PcGFjaXR5IHx8IDB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGluZWFyR3JhZGllbnQ+XG4gICAgICAgICl9XG4gICAgICA8L0RlZnM+XG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RDaGFydDtcbiJdfQ==
|
package/dist/BarChart.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BarChart.d.ts","sourceRoot":"","sources":["../src/BarChart.tsx"],"names":[],"mappings":"AACA,OAAO,EAAQ,SAAS,EAAE,MAAM,cAAc,CAAC;AAW/C,OAAO,aAAa,EAAE,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,aAAa,GAAG,EAAE,CAAC;AAExB,cAAM,QAAS,SAAQ,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC;IAChE,gBAAgB,eAGd;IAEF,UAAU,GAAI,0FAQX,IAAI,CACL,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,EACjC,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CACjE,GAAG;QACF,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,0BAA0B,EAAE,OAAO,CAAC;KACrC,mBA6BC;IAEF,aAAa,GAAI,mDAMd,IAAI,CACL,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,EACjC,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,CACnD,GAAG;QACF,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,mBAqBC;IAEF,YAAY,GAAI,qBAGb,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG;QACrC,SAAS,EAAE,OAAO,CAAC;KACpB,mBA2BC;IAEF,uBAAuB,GAAI,mDAMxB,IAAI,CACL,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,EACjC,OAAO,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,CACnD,GAAG;QACF,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,mBAgCC;IAEF,MAAM;CA0HP;AAED,eAAe,QAAQ,CAAC"}
|