@apia/charts 0.1.0 → 0.1.1
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 -2474
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,2475 +1,2 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import React, { createContext, useContext, useState, useMemo, useLayoutEffect, useEffect, useRef } from 'react';
|
|
3
|
-
import { Box, Select } from 'theme-ui';
|
|
4
|
-
import { ThemeProviderContext, spacing, makeStyledComponent, getVariant } from '@apia/theme';
|
|
5
|
-
import { uniqueId } from 'lodash';
|
|
6
|
-
import { makeImperativeComponent, arrayOrArray, useImperativeComponentEvents, getValueByPath, usePanAndZoom, usePrevious, getIndex } from '@apia/util';
|
|
7
|
-
import { scaleBand, scaleLog, scaleLinear, scaleOrdinal } from '@visx/scale';
|
|
8
|
-
import { Grid } from '@visx/visx';
|
|
9
|
-
import { Group } from '@visx/group';
|
|
10
|
-
import { BarGroupHorizontal, BarGroup, LinePath, Line } from '@visx/shape';
|
|
11
|
-
import { AxisLeft, AxisBottom } from '@visx/axis';
|
|
12
|
-
import { usePanelParametersSelector } from '@apia/dashboard';
|
|
13
|
-
import tinycolor from 'tinycolor2';
|
|
14
|
-
import { localPoint } from '@visx/event';
|
|
15
|
-
import { SimpleButton, useTooltip } from '@apia/components';
|
|
16
|
-
import { icons } from '@apia/icons';
|
|
17
|
-
import Pie from '@visx/shape/lib/shapes/Pie';
|
|
18
|
-
import { min, max, extent } from 'd3-array';
|
|
19
|
-
import * as allCurves from '@visx/curve';
|
|
20
|
-
import { Fragment as Fragment$1 } from 'theme-ui/jsx-runtime';
|
|
21
|
-
import { GridRows } from '@visx/grid';
|
|
22
|
-
import { useGauge } from 'use-gauge';
|
|
23
|
-
|
|
24
|
-
function parseMargin(margin = {
|
|
25
|
-
left: 100,
|
|
26
|
-
right: 50,
|
|
27
|
-
top: 50,
|
|
28
|
-
bottom: 70
|
|
29
|
-
}) {
|
|
30
|
-
return typeof margin === "number" ? { left: margin, right: margin, top: margin, bottom: margin } : margin;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const ChartContext = createContext({});
|
|
34
|
-
|
|
35
|
-
const LegendItem = ({
|
|
36
|
-
groupId,
|
|
37
|
-
title,
|
|
38
|
-
color,
|
|
39
|
-
className,
|
|
40
|
-
isHighlighted,
|
|
41
|
-
isAnyHighlighted,
|
|
42
|
-
avoidEvent
|
|
43
|
-
}) => {
|
|
44
|
-
const { chartId } = useContext(ChartContext);
|
|
45
|
-
return /* @__PURE__ */ jsx(
|
|
46
|
-
SimpleButton,
|
|
47
|
-
{
|
|
48
|
-
variant: "icon-outline",
|
|
49
|
-
className: `${className != null ? className : ""} ${isHighlighted ? "highlight" : ""}`,
|
|
50
|
-
iconColor: color || "black",
|
|
51
|
-
icon: color === "transparent" ? void 0 : icons.SquareFilled,
|
|
52
|
-
sx: {
|
|
53
|
-
opacity: isAnyHighlighted && !isHighlighted ? "0.15" : "1"
|
|
54
|
-
},
|
|
55
|
-
onMouseEnter: () => {
|
|
56
|
-
if (avoidEvent) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
chartMethods(chartId, "highlight", groupId);
|
|
60
|
-
},
|
|
61
|
-
onMouseLeave: () => {
|
|
62
|
-
if (avoidEvent) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
chartMethods(chartId, "highlight", "");
|
|
66
|
-
},
|
|
67
|
-
children: title
|
|
68
|
-
}
|
|
69
|
-
);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const [legendContainerMethods, , LegendContainer] = makeImperativeComponent()({
|
|
73
|
-
initialState: {
|
|
74
|
-
highlightedBarGroup: ""
|
|
75
|
-
},
|
|
76
|
-
methods: {
|
|
77
|
-
highlight(setState, highlightedBarGroup) {
|
|
78
|
-
setState({ highlightedBarGroup });
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
Component: ({
|
|
82
|
-
references,
|
|
83
|
-
containerClassName,
|
|
84
|
-
highlightedBarGroup,
|
|
85
|
-
avoidEvent
|
|
86
|
-
}) => {
|
|
87
|
-
return /* @__PURE__ */ jsx(Box, { className: containerClassName, children: references.map((data) => {
|
|
88
|
-
return /* @__PURE__ */ jsx(
|
|
89
|
-
LegendItem,
|
|
90
|
-
{
|
|
91
|
-
isHighlighted: data.title === highlightedBarGroup,
|
|
92
|
-
isAnyHighlighted: highlightedBarGroup !== "",
|
|
93
|
-
groupId: data.title,
|
|
94
|
-
color: data.color,
|
|
95
|
-
title: data.title,
|
|
96
|
-
avoidEvent: avoidEvent != null ? avoidEvent : false
|
|
97
|
-
},
|
|
98
|
-
data.title
|
|
99
|
-
);
|
|
100
|
-
}) });
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
const Bar$1 = ({
|
|
105
|
-
bar,
|
|
106
|
-
barGroup,
|
|
107
|
-
chart,
|
|
108
|
-
parsedData,
|
|
109
|
-
isSingle,
|
|
110
|
-
effectiveMargin,
|
|
111
|
-
setsWithColor
|
|
112
|
-
}) => {
|
|
113
|
-
var _a;
|
|
114
|
-
const column = arrayOrArray(chart.dataSets.data)[bar.index];
|
|
115
|
-
const set = arrayOrArray(column == null ? void 0 : column.sets)[barGroup.index];
|
|
116
|
-
const currentBarColor = (_a = setsWithColor.find(
|
|
117
|
-
(innerSet) => innerSet.columnName === column.name && innerSet.key === set.key
|
|
118
|
-
)) == null ? void 0 : _a.color;
|
|
119
|
-
const [isHighlighted, setIsHighlighted] = useState(false);
|
|
120
|
-
const [isAnyHighlighted, setIsAnyHighlighted] = useState(false);
|
|
121
|
-
const { open } = useTooltip({
|
|
122
|
-
children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
123
|
-
/* @__PURE__ */ jsx(
|
|
124
|
-
"div",
|
|
125
|
-
{
|
|
126
|
-
style: {
|
|
127
|
-
color: currentBarColor
|
|
128
|
-
},
|
|
129
|
-
children: /* @__PURE__ */ jsx("strong", { children: parsedData[barGroup.index].columnName })
|
|
130
|
-
}
|
|
131
|
-
),
|
|
132
|
-
chart.showValues && /* @__PURE__ */ jsx("div", { children: bar.value }),
|
|
133
|
-
/* @__PURE__ */ jsx("div", { children: bar.key })
|
|
134
|
-
] })
|
|
135
|
-
});
|
|
136
|
-
useImperativeComponentEvents({
|
|
137
|
-
highlight(barName) {
|
|
138
|
-
if (barName.split(" - ").length === 1) {
|
|
139
|
-
setIsHighlighted(barName === bar.key);
|
|
140
|
-
setIsAnyHighlighted(barName !== bar.key && barName !== "");
|
|
141
|
-
} else if (barName.split(" - ").length === 2) {
|
|
142
|
-
setIsHighlighted(
|
|
143
|
-
barName.split(" - ")[0] === bar.key && barName.split(" - ")[1] === set.key
|
|
144
|
-
);
|
|
145
|
-
setIsAnyHighlighted(
|
|
146
|
-
barName.split(" - ")[0] !== bar.key && barName.split(" - ")[0] !== ""
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
const { chartId } = useContext(ChartContext);
|
|
152
|
-
return /* @__PURE__ */ jsxs("g", { children: [
|
|
153
|
-
/* @__PURE__ */ jsxs(
|
|
154
|
-
"text",
|
|
155
|
-
{
|
|
156
|
-
x: bar.x + 5,
|
|
157
|
-
y: bar.y - 5,
|
|
158
|
-
width: bar.width,
|
|
159
|
-
height: bar.height,
|
|
160
|
-
textAnchor: "start",
|
|
161
|
-
style: {
|
|
162
|
-
display: isHighlighted ? "block" : "none",
|
|
163
|
-
opacity: isHighlighted ? 1 : 0,
|
|
164
|
-
transition: "opacity 500ms"
|
|
165
|
-
},
|
|
166
|
-
children: [
|
|
167
|
-
bar.value,
|
|
168
|
-
" - ",
|
|
169
|
-
parsedData[barGroup.index].columnName
|
|
170
|
-
]
|
|
171
|
-
}
|
|
172
|
-
),
|
|
173
|
-
/* @__PURE__ */ jsx(
|
|
174
|
-
Box,
|
|
175
|
-
{
|
|
176
|
-
as: "rect",
|
|
177
|
-
className: "chart__barRect",
|
|
178
|
-
sx: useMemo(
|
|
179
|
-
() => ({
|
|
180
|
-
fill: isAnyHighlighted ? `#${tinycolor(currentBarColor).desaturate(70).toHex()}` : currentBarColor,
|
|
181
|
-
"&:hover": {
|
|
182
|
-
fill: `#${tinycolor(currentBarColor).saturate(25).toHex()}`
|
|
183
|
-
},
|
|
184
|
-
transition: "fill 500ms, opacity 500ms",
|
|
185
|
-
x: bar.x,
|
|
186
|
-
y: bar.y,
|
|
187
|
-
width: bar.width - effectiveMargin.left,
|
|
188
|
-
opacity: isAnyHighlighted && !isHighlighted ? 0.15 : 1,
|
|
189
|
-
height: bar.height > 0 ? bar.height : 0
|
|
190
|
-
}),
|
|
191
|
-
[
|
|
192
|
-
bar.height,
|
|
193
|
-
bar.width,
|
|
194
|
-
bar.x,
|
|
195
|
-
bar.y,
|
|
196
|
-
currentBarColor,
|
|
197
|
-
effectiveMargin.left,
|
|
198
|
-
isAnyHighlighted,
|
|
199
|
-
isHighlighted
|
|
200
|
-
]
|
|
201
|
-
),
|
|
202
|
-
onMouseEnter: (ev) => {
|
|
203
|
-
var _a2, _b, _c;
|
|
204
|
-
if (!isSingle) {
|
|
205
|
-
legendContainerMethods.highlight(chartId, bar.key);
|
|
206
|
-
}
|
|
207
|
-
(_a2 = ev.target.classList) == null ? void 0 : _a2.add("over");
|
|
208
|
-
const point = {
|
|
209
|
-
x: (_b = localPoint(ev)) == null ? void 0 : _b.x,
|
|
210
|
-
y: (_c = localPoint(ev)) == null ? void 0 : _c.y
|
|
211
|
-
};
|
|
212
|
-
if (!point)
|
|
213
|
-
return;
|
|
214
|
-
open({
|
|
215
|
-
attachToElement: () => ev.target,
|
|
216
|
-
attachToElementAnchorPoint: "center"
|
|
217
|
-
});
|
|
218
|
-
},
|
|
219
|
-
onMouseLeave: (ev) => {
|
|
220
|
-
var _a2;
|
|
221
|
-
if (!isSingle) {
|
|
222
|
-
legendContainerMethods.highlight(chartId, "");
|
|
223
|
-
}
|
|
224
|
-
(_a2 = ev.target.classList) == null ? void 0 : _a2.remove("over");
|
|
225
|
-
},
|
|
226
|
-
children: /* @__PURE__ */ jsx(
|
|
227
|
-
"animate",
|
|
228
|
-
{
|
|
229
|
-
attributeName: "width",
|
|
230
|
-
from: 0,
|
|
231
|
-
to: bar.width,
|
|
232
|
-
dur: "0.5s",
|
|
233
|
-
calcMode: "paced",
|
|
234
|
-
keySplines: "0.5 0 0.5 1;",
|
|
235
|
-
keyTimes: "0; 1"
|
|
236
|
-
}
|
|
237
|
-
)
|
|
238
|
-
}
|
|
239
|
-
)
|
|
240
|
-
] });
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
function getBarColor(colors, index, alwaysDiffer = false) {
|
|
244
|
-
const module = colors.length;
|
|
245
|
-
let count = 0;
|
|
246
|
-
let barColor = "";
|
|
247
|
-
if (!alwaysDiffer) {
|
|
248
|
-
if (colors[index]) {
|
|
249
|
-
barColor = colors[index];
|
|
250
|
-
} else {
|
|
251
|
-
let innerIndex = index;
|
|
252
|
-
while (innerIndex >= module) {
|
|
253
|
-
innerIndex = index / module;
|
|
254
|
-
count++;
|
|
255
|
-
}
|
|
256
|
-
barColor = tinycolor(colors[index % module]).desaturate(count * 5).toHex();
|
|
257
|
-
}
|
|
258
|
-
} else {
|
|
259
|
-
if (colors[index]) {
|
|
260
|
-
barColor = colors[index];
|
|
261
|
-
} else {
|
|
262
|
-
barColor = tinycolor(colors[index % module]).toHex();
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
return barColor;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
var __defProp$7 = Object.defineProperty;
|
|
269
|
-
var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
|
|
270
|
-
var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
|
|
271
|
-
var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
|
|
272
|
-
var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
273
|
-
var __spreadValues$7 = (a, b) => {
|
|
274
|
-
for (var prop in b || (b = {}))
|
|
275
|
-
if (__hasOwnProp$7.call(b, prop))
|
|
276
|
-
__defNormalProp$7(a, prop, b[prop]);
|
|
277
|
-
if (__getOwnPropSymbols$7)
|
|
278
|
-
for (var prop of __getOwnPropSymbols$7(b)) {
|
|
279
|
-
if (__propIsEnum$7.call(b, prop))
|
|
280
|
-
__defNormalProp$7(a, prop, b[prop]);
|
|
281
|
-
}
|
|
282
|
-
return a;
|
|
283
|
-
};
|
|
284
|
-
function useChartStyles(schemeName) {
|
|
285
|
-
var _a, _b, _c;
|
|
286
|
-
const theme = useContext(ThemeProviderContext);
|
|
287
|
-
if (!theme.layout)
|
|
288
|
-
console.error("The layout property is missing in the current theme");
|
|
289
|
-
const charts = (_b = (_a = theme.layout) == null ? void 0 : _a.charts) != null ? _b : {};
|
|
290
|
-
const defaultStyles = charts.common;
|
|
291
|
-
const currentStylescheme = {
|
|
292
|
-
schema: getValueByPath(
|
|
293
|
-
theme.colors,
|
|
294
|
-
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
295
|
-
(_c = charts[schemeName || "blue"]) == null ? void 0 : _c.schema
|
|
296
|
-
)
|
|
297
|
-
};
|
|
298
|
-
return __spreadValues$7(__spreadValues$7({}, defaultStyles), currentStylescheme);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
var __defProp$6 = Object.defineProperty;
|
|
302
|
-
var __defProps$6 = Object.defineProperties;
|
|
303
|
-
var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
|
|
304
|
-
var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
|
|
305
|
-
var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
|
|
306
|
-
var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
|
|
307
|
-
var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
308
|
-
var __spreadValues$6 = (a, b) => {
|
|
309
|
-
for (var prop in b || (b = {}))
|
|
310
|
-
if (__hasOwnProp$6.call(b, prop))
|
|
311
|
-
__defNormalProp$6(a, prop, b[prop]);
|
|
312
|
-
if (__getOwnPropSymbols$6)
|
|
313
|
-
for (var prop of __getOwnPropSymbols$6(b)) {
|
|
314
|
-
if (__propIsEnum$6.call(b, prop))
|
|
315
|
-
__defNormalProp$6(a, prop, b[prop]);
|
|
316
|
-
}
|
|
317
|
-
return a;
|
|
318
|
-
};
|
|
319
|
-
var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
|
|
320
|
-
function adjustDimensions$4({
|
|
321
|
-
width,
|
|
322
|
-
height,
|
|
323
|
-
maxWidth
|
|
324
|
-
}) {
|
|
325
|
-
if (width <= maxWidth) {
|
|
326
|
-
return { width, height };
|
|
327
|
-
}
|
|
328
|
-
const ratio = width / height;
|
|
329
|
-
const newWidth = maxWidth;
|
|
330
|
-
const newHeight = Math.floor(newWidth / ratio);
|
|
331
|
-
return { width: newWidth, height: newHeight };
|
|
332
|
-
}
|
|
333
|
-
const getYValue = (d) => d.columnName;
|
|
334
|
-
const HorizontalBars = ({
|
|
335
|
-
margin = { top: 20, left: 50, bottom: 150, right: 20 },
|
|
336
|
-
chart,
|
|
337
|
-
className,
|
|
338
|
-
chartId,
|
|
339
|
-
outerClassName,
|
|
340
|
-
allowZoom
|
|
341
|
-
}) => {
|
|
342
|
-
var _a;
|
|
343
|
-
const effectiveMargin = parseMargin(margin);
|
|
344
|
-
let innerWidth = chart.ratio.width + (-effectiveMargin.left - effectiveMargin.right) / 2;
|
|
345
|
-
let innerHeight = chart.ratio.height + (-effectiveMargin.top - effectiveMargin.bottom) / 2;
|
|
346
|
-
if (innerWidth > chart.ratio.maxWidth) {
|
|
347
|
-
const newValues = adjustDimensions$4({
|
|
348
|
-
height: innerHeight,
|
|
349
|
-
width: innerWidth,
|
|
350
|
-
maxWidth: chart.ratio.maxWidth
|
|
351
|
-
});
|
|
352
|
-
innerWidth = newValues.width;
|
|
353
|
-
innerHeight = newValues.height;
|
|
354
|
-
}
|
|
355
|
-
const columnas = arrayOrArray((_a = chart.dataSets) == null ? void 0 : _a.data).filter((column) => !!column.sets).map((column) => {
|
|
356
|
-
return __spreadProps$6(__spreadValues$6({}, column), {
|
|
357
|
-
sets: column.sets
|
|
358
|
-
});
|
|
359
|
-
});
|
|
360
|
-
const xValues = arrayOrArray(columnas[0].sets).map(
|
|
361
|
-
(innerCoord) => innerCoord.key
|
|
362
|
-
);
|
|
363
|
-
const columnNames = columnas.map((col) => {
|
|
364
|
-
return col.name;
|
|
365
|
-
});
|
|
366
|
-
const parsedData = xValues.map((x) => {
|
|
367
|
-
const obj = columnas.reduce(
|
|
368
|
-
(acc, column) => {
|
|
369
|
-
return __spreadProps$6(__spreadValues$6({}, acc), {
|
|
370
|
-
[column.name]: arrayOrArray(column.sets).filter((coord) => {
|
|
371
|
-
return coord.key === x;
|
|
372
|
-
})[0].value
|
|
373
|
-
});
|
|
374
|
-
},
|
|
375
|
-
{ columnName: x }
|
|
376
|
-
);
|
|
377
|
-
return obj;
|
|
378
|
-
});
|
|
379
|
-
const yScale = scaleBand({
|
|
380
|
-
range: [
|
|
381
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top,
|
|
382
|
-
innerHeight
|
|
383
|
-
],
|
|
384
|
-
domain: parsedData.map(getYValue),
|
|
385
|
-
padding: 0.2
|
|
386
|
-
});
|
|
387
|
-
const columnGroupScale = scaleBand({
|
|
388
|
-
domain: columnNames,
|
|
389
|
-
range: [0, yScale.bandwidth()]
|
|
390
|
-
});
|
|
391
|
-
const xScaleLog = scaleLog({
|
|
392
|
-
range: [
|
|
393
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.left,
|
|
394
|
-
innerWidth
|
|
395
|
-
],
|
|
396
|
-
domain: [
|
|
397
|
-
1,
|
|
398
|
-
Math.max(
|
|
399
|
-
...parsedData.map(
|
|
400
|
-
(d) => Math.max(...columnNames.map((key) => Number(d[key])))
|
|
401
|
-
)
|
|
402
|
-
)
|
|
403
|
-
],
|
|
404
|
-
base: 10
|
|
405
|
-
});
|
|
406
|
-
const xScaleLine = scaleLinear({
|
|
407
|
-
range: [
|
|
408
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.left,
|
|
409
|
-
innerWidth
|
|
410
|
-
],
|
|
411
|
-
domain: [
|
|
412
|
-
0,
|
|
413
|
-
Math.max(
|
|
414
|
-
...parsedData.map(
|
|
415
|
-
(d) => Math.max(...columnNames.map((key) => Number(d[key])))
|
|
416
|
-
)
|
|
417
|
-
)
|
|
418
|
-
]
|
|
419
|
-
});
|
|
420
|
-
const color = scaleOrdinal({
|
|
421
|
-
domain: columnNames,
|
|
422
|
-
range: columnas.map((col) => col.color)
|
|
423
|
-
});
|
|
424
|
-
const parameters = usePanelParametersSelector((global) => {
|
|
425
|
-
return global;
|
|
426
|
-
});
|
|
427
|
-
const scale = parameters.PRMT_CHART_SCALE;
|
|
428
|
-
const isLogScale = scale === "0";
|
|
429
|
-
const xScale = useMemo(() => {
|
|
430
|
-
if (!isLogScale) {
|
|
431
|
-
return xScaleLine;
|
|
432
|
-
}
|
|
433
|
-
return xScaleLog;
|
|
434
|
-
}, [isLogScale, xScaleLine, xScaleLog]);
|
|
435
|
-
const id = useMemo(() => `VerticalBars${uniqueId()}`, []);
|
|
436
|
-
useLayoutEffect(() => {
|
|
437
|
-
document.querySelectorAll(
|
|
438
|
-
`#${id} .__${chartId != null ? chartId : outerClassName}`
|
|
439
|
-
).forEach((current) => {
|
|
440
|
-
const width = current.getBoundingClientRect().width;
|
|
441
|
-
current.style.transformOrigin = current.getAttribute("x") + "px 14px";
|
|
442
|
-
current.style.transform = `rotate(15deg) translateX(${width / 2}px)`;
|
|
443
|
-
});
|
|
444
|
-
});
|
|
445
|
-
const styles = useChartStyles(chart.colorSchema);
|
|
446
|
-
const { boxRef, elementRef } = usePanAndZoom(
|
|
447
|
-
void 0,
|
|
448
|
-
!allowZoom
|
|
449
|
-
);
|
|
450
|
-
const setsWithColor = arrayOrArray(chart.dataSets.data).map((data, index) => {
|
|
451
|
-
const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
|
|
452
|
-
const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(styles.schema).length > 0 ? getBarColor(arrayOrArray(styles.schema), index, isSingle) : "";
|
|
453
|
-
const returnColumnsArray = [];
|
|
454
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
455
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
456
|
-
returnColumnsArray.push(__spreadProps$6(__spreadValues$6({}, set), { columnName: data.name }));
|
|
457
|
-
} else {
|
|
458
|
-
returnColumnsArray.push(__spreadProps$6(__spreadValues$6({}, set), {
|
|
459
|
-
color: dataColor,
|
|
460
|
-
columnName: data.name
|
|
461
|
-
}));
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
return returnColumnsArray;
|
|
465
|
-
});
|
|
466
|
-
const colorReference = setsWithColor.map((column) => {
|
|
467
|
-
var _a2;
|
|
468
|
-
return {
|
|
469
|
-
color: (_a2 = column[0].color) != null ? _a2 : "",
|
|
470
|
-
title: column[0].columnName
|
|
471
|
-
};
|
|
472
|
-
});
|
|
473
|
-
arrayOrArray(chart.dataSets.data).map((data) => {
|
|
474
|
-
const returnArray = [];
|
|
475
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
476
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
477
|
-
returnArray.push({
|
|
478
|
-
color: set.color,
|
|
479
|
-
title: data.name + " - " + set.key
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
});
|
|
483
|
-
return returnArray;
|
|
484
|
-
}).flat().forEach((addRef) => colorReference.push(addRef));
|
|
485
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
486
|
-
/* @__PURE__ */ jsx(
|
|
487
|
-
Box,
|
|
488
|
-
{
|
|
489
|
-
ref: boxRef,
|
|
490
|
-
id,
|
|
491
|
-
className: `${outerClassName != null ? outerClassName : ""} ${chartId} ${chart.title}`,
|
|
492
|
-
sx: React.useMemo(() => {
|
|
493
|
-
return {
|
|
494
|
-
[`.__${chartId != null ? chartId : outerClassName}`]: {
|
|
495
|
-
transform: "rotate(45deg)",
|
|
496
|
-
transformOrigin: "attr(x) 18px"
|
|
497
|
-
},
|
|
498
|
-
overflow: "auto",
|
|
499
|
-
position: "relative",
|
|
500
|
-
height: `${chart.ratio.height}px`,
|
|
501
|
-
width: `${chart.ratio.width}px`
|
|
502
|
-
};
|
|
503
|
-
}, [chart.ratio.height, chart.ratio.width, chartId, outerClassName]),
|
|
504
|
-
children: /* @__PURE__ */ jsxs(
|
|
505
|
-
"svg",
|
|
506
|
-
{
|
|
507
|
-
ref: elementRef,
|
|
508
|
-
className: `_${chartId} ${className ? className : ""} chart__svg`,
|
|
509
|
-
height: chart.ratio.height,
|
|
510
|
-
width: chart.ratio.width,
|
|
511
|
-
style: {
|
|
512
|
-
position: "absolute"
|
|
513
|
-
},
|
|
514
|
-
children: [
|
|
515
|
-
chart.showGrid && /* @__PURE__ */ jsx(
|
|
516
|
-
Grid.Grid,
|
|
517
|
-
{
|
|
518
|
-
xScale,
|
|
519
|
-
yScale,
|
|
520
|
-
left: 0,
|
|
521
|
-
width: innerWidth,
|
|
522
|
-
height: innerHeight,
|
|
523
|
-
numTicksRows: 10,
|
|
524
|
-
numTicksColumns: 10,
|
|
525
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20
|
|
526
|
-
}
|
|
527
|
-
),
|
|
528
|
-
/* @__PURE__ */ jsx(
|
|
529
|
-
Group,
|
|
530
|
-
{
|
|
531
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
|
|
532
|
-
left: effectiveMargin.left,
|
|
533
|
-
children: /* @__PURE__ */ jsx(
|
|
534
|
-
BarGroupHorizontal,
|
|
535
|
-
{
|
|
536
|
-
data: parsedData,
|
|
537
|
-
keys: columnNames,
|
|
538
|
-
width: innerWidth,
|
|
539
|
-
y0: getYValue,
|
|
540
|
-
y0Scale: yScale,
|
|
541
|
-
y1Scale: columnGroupScale,
|
|
542
|
-
xScale,
|
|
543
|
-
color,
|
|
544
|
-
children: (barGroups) => barGroups.map((barGroup) => {
|
|
545
|
-
return /* @__PURE__ */ jsx(
|
|
546
|
-
Group,
|
|
547
|
-
{
|
|
548
|
-
top: barGroup.y0,
|
|
549
|
-
children: barGroup.bars.map((bar) => {
|
|
550
|
-
const key = `${barGroup.index}-${bar.index}-${bar.key}`;
|
|
551
|
-
return /* @__PURE__ */ jsx(
|
|
552
|
-
Bar$1,
|
|
553
|
-
{
|
|
554
|
-
isSingle: barGroup.bars.length === 1,
|
|
555
|
-
bar,
|
|
556
|
-
barGroup,
|
|
557
|
-
chart,
|
|
558
|
-
parsedData,
|
|
559
|
-
effectiveMargin,
|
|
560
|
-
setsWithColor: setsWithColor.flat()
|
|
561
|
-
},
|
|
562
|
-
key
|
|
563
|
-
);
|
|
564
|
-
})
|
|
565
|
-
},
|
|
566
|
-
`bar-group-${barGroup.index}-${barGroup.y0}`
|
|
567
|
-
);
|
|
568
|
-
})
|
|
569
|
-
}
|
|
570
|
-
)
|
|
571
|
-
}
|
|
572
|
-
),
|
|
573
|
-
/* @__PURE__ */ jsx(
|
|
574
|
-
AxisLeft,
|
|
575
|
-
{
|
|
576
|
-
scale: yScale,
|
|
577
|
-
left: effectiveMargin.left,
|
|
578
|
-
label: chart.chartType !== "pie2D" && chart.showAxisYTitle ? chart.axisYTitle : "",
|
|
579
|
-
tickLabelProps: () => ({
|
|
580
|
-
display: "none"
|
|
581
|
-
})
|
|
582
|
-
}
|
|
583
|
-
),
|
|
584
|
-
/* @__PURE__ */ jsx(
|
|
585
|
-
AxisBottom,
|
|
586
|
-
{
|
|
587
|
-
top: innerHeight,
|
|
588
|
-
scale: xScale,
|
|
589
|
-
label: chart.chartType !== "pie2D" && chart.showAxisXTitle ? chart.axisXTitle : "",
|
|
590
|
-
tickLabelProps: {
|
|
591
|
-
className: "tickLabel"
|
|
592
|
-
},
|
|
593
|
-
labelOffset: 50
|
|
594
|
-
}
|
|
595
|
-
)
|
|
596
|
-
]
|
|
597
|
-
}
|
|
598
|
-
)
|
|
599
|
-
}
|
|
600
|
-
),
|
|
601
|
-
colorReference.length > 1 && /* @__PURE__ */ jsx(
|
|
602
|
-
LegendContainer,
|
|
603
|
-
{
|
|
604
|
-
id: chartId,
|
|
605
|
-
containerClassName: "legendContainer",
|
|
606
|
-
references: colorReference
|
|
607
|
-
}
|
|
608
|
-
)
|
|
609
|
-
] });
|
|
610
|
-
};
|
|
611
|
-
|
|
612
|
-
const Slice = ({
|
|
613
|
-
arc,
|
|
614
|
-
arcPath,
|
|
615
|
-
chart,
|
|
616
|
-
actualColor
|
|
617
|
-
}) => {
|
|
618
|
-
const [isHighlighted, setIsHighlighted] = useState(false);
|
|
619
|
-
const [isAnyHighlighted, setIsAnyHighlighted] = useState(false);
|
|
620
|
-
const { open } = useTooltip({
|
|
621
|
-
children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
622
|
-
/* @__PURE__ */ jsx(
|
|
623
|
-
"div",
|
|
624
|
-
{
|
|
625
|
-
style: {
|
|
626
|
-
color: `#${tinycolor(actualColor).toHex()}`
|
|
627
|
-
},
|
|
628
|
-
children: /* @__PURE__ */ jsx("strong", { children: arc.data.key })
|
|
629
|
-
}
|
|
630
|
-
),
|
|
631
|
-
chart.showValues && /* @__PURE__ */ jsx("div", { children: `${arc.value} ${arc.data.percentage ? "- " + arc.data.percentage : ""}${arc.data.percentage ? "%" : ""}` })
|
|
632
|
-
] })
|
|
633
|
-
});
|
|
634
|
-
useImperativeComponentEvents({
|
|
635
|
-
highlight(barName) {
|
|
636
|
-
setIsHighlighted(barName === arc.data.key);
|
|
637
|
-
setIsAnyHighlighted(barName !== arc.data.key && barName !== "");
|
|
638
|
-
}
|
|
639
|
-
});
|
|
640
|
-
const { chartId } = useContext(ChartContext);
|
|
641
|
-
const name = arc.data;
|
|
642
|
-
return /* @__PURE__ */ jsx(
|
|
643
|
-
"path",
|
|
644
|
-
{
|
|
645
|
-
style: useMemo(
|
|
646
|
-
() => ({
|
|
647
|
-
"&:hover": {
|
|
648
|
-
fill: `#${tinycolor(actualColor).saturate(25).toHex()}`
|
|
649
|
-
},
|
|
650
|
-
transition: "fill 500ms, opacity 500ms"
|
|
651
|
-
}),
|
|
652
|
-
[actualColor]
|
|
653
|
-
),
|
|
654
|
-
fill: isAnyHighlighted ? `#${tinycolor(actualColor).desaturate(70).toHex()}` : actualColor,
|
|
655
|
-
opacity: isAnyHighlighted && !isHighlighted ? 0.15 : 1,
|
|
656
|
-
d: arcPath != null ? arcPath : "",
|
|
657
|
-
onMouseEnter: (ev) => {
|
|
658
|
-
var _a, _b, _c;
|
|
659
|
-
legendContainerMethods.highlight(chartId, arc.data.key);
|
|
660
|
-
(_a = ev.target.classList) == null ? void 0 : _a.add("over");
|
|
661
|
-
const point = {
|
|
662
|
-
x: (_b = localPoint(ev)) == null ? void 0 : _b.x,
|
|
663
|
-
y: (_c = localPoint(ev)) == null ? void 0 : _c.y
|
|
664
|
-
};
|
|
665
|
-
if (!point)
|
|
666
|
-
return;
|
|
667
|
-
open({
|
|
668
|
-
attachToElement: () => ev.target,
|
|
669
|
-
attachToElementAnchorPoint: "center"
|
|
670
|
-
});
|
|
671
|
-
},
|
|
672
|
-
onMouseLeave: (ev) => {
|
|
673
|
-
var _a;
|
|
674
|
-
legendContainerMethods.highlight(chartId, "");
|
|
675
|
-
(_a = ev.target.classList) == null ? void 0 : _a.remove("over");
|
|
676
|
-
}
|
|
677
|
-
},
|
|
678
|
-
`arc-${name.key}-${name.value}`
|
|
679
|
-
);
|
|
680
|
-
};
|
|
681
|
-
|
|
682
|
-
function ChartSelector({
|
|
683
|
-
chartId,
|
|
684
|
-
pieces,
|
|
685
|
-
className,
|
|
686
|
-
current,
|
|
687
|
-
setCurrent
|
|
688
|
-
}) {
|
|
689
|
-
return /* @__PURE__ */ jsxs(
|
|
690
|
-
Select,
|
|
691
|
-
{
|
|
692
|
-
sx: { width: "auto" },
|
|
693
|
-
name: `chartSelector_${chartId}`,
|
|
694
|
-
className: `chartSelector_${chartId} ${className != null ? className : ""}`,
|
|
695
|
-
value: current != null ? current : "0",
|
|
696
|
-
onChange: (ev) => {
|
|
697
|
-
ev.preventDefault();
|
|
698
|
-
setCurrent(ev.target.value);
|
|
699
|
-
},
|
|
700
|
-
children: [
|
|
701
|
-
pieces.map((piece, i) => {
|
|
702
|
-
return {
|
|
703
|
-
label: piece,
|
|
704
|
-
value: `${i}`
|
|
705
|
-
};
|
|
706
|
-
}).map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.value)),
|
|
707
|
-
" "
|
|
708
|
-
]
|
|
709
|
-
}
|
|
710
|
-
);
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
const TextSlice = ({
|
|
714
|
-
arc,
|
|
715
|
-
x,
|
|
716
|
-
y,
|
|
717
|
-
dy
|
|
718
|
-
}) => {
|
|
719
|
-
const [isHighlighted, setIsHighlighted] = useState(false);
|
|
720
|
-
useImperativeComponentEvents({
|
|
721
|
-
highlight(barName) {
|
|
722
|
-
setIsHighlighted(barName === arc.data.key);
|
|
723
|
-
}
|
|
724
|
-
});
|
|
725
|
-
return /* @__PURE__ */ jsx(
|
|
726
|
-
"text",
|
|
727
|
-
{
|
|
728
|
-
textAnchor: "middle",
|
|
729
|
-
style: {
|
|
730
|
-
opacity: isHighlighted ? 1 : 0,
|
|
731
|
-
display: isHighlighted ? "block" : "none",
|
|
732
|
-
transition: "opacity 500ms"
|
|
733
|
-
},
|
|
734
|
-
x,
|
|
735
|
-
y,
|
|
736
|
-
dy,
|
|
737
|
-
children: arc.value
|
|
738
|
-
}
|
|
739
|
-
);
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
var __defProp$5 = Object.defineProperty;
|
|
743
|
-
var __defProps$5 = Object.defineProperties;
|
|
744
|
-
var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
|
|
745
|
-
var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
|
|
746
|
-
var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
|
|
747
|
-
var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
|
|
748
|
-
var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
749
|
-
var __spreadValues$5 = (a, b) => {
|
|
750
|
-
for (var prop in b || (b = {}))
|
|
751
|
-
if (__hasOwnProp$5.call(b, prop))
|
|
752
|
-
__defNormalProp$5(a, prop, b[prop]);
|
|
753
|
-
if (__getOwnPropSymbols$5)
|
|
754
|
-
for (var prop of __getOwnPropSymbols$5(b)) {
|
|
755
|
-
if (__propIsEnum$5.call(b, prop))
|
|
756
|
-
__defNormalProp$5(a, prop, b[prop]);
|
|
757
|
-
}
|
|
758
|
-
return a;
|
|
759
|
-
};
|
|
760
|
-
var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
|
|
761
|
-
function adjustDimensions$3({
|
|
762
|
-
width,
|
|
763
|
-
height,
|
|
764
|
-
maxWidth
|
|
765
|
-
}) {
|
|
766
|
-
if (width <= maxWidth) {
|
|
767
|
-
return { width, height };
|
|
768
|
-
}
|
|
769
|
-
const ratio = width / height;
|
|
770
|
-
const newWidth = maxWidth;
|
|
771
|
-
const newHeight = Math.floor(newWidth / ratio);
|
|
772
|
-
return { width: newWidth, height: newHeight };
|
|
773
|
-
}
|
|
774
|
-
const PieChart = ({
|
|
775
|
-
// margin = { top: 20, left: 100, bottom: 150, right: 20 },
|
|
776
|
-
chart,
|
|
777
|
-
className,
|
|
778
|
-
chartId,
|
|
779
|
-
allowZoom
|
|
780
|
-
}) => {
|
|
781
|
-
var _a;
|
|
782
|
-
const [chartData, setChartData] = useState(
|
|
783
|
-
{}
|
|
784
|
-
);
|
|
785
|
-
let innerWidth = chart.ratio.width > chart.ratio.height ? chart.ratio.width : chart.ratio.height;
|
|
786
|
-
let innerHeight = chart.ratio.width > chart.ratio.height ? chart.ratio.width : chart.ratio.height;
|
|
787
|
-
if (innerWidth > chart.ratio.maxWidth) {
|
|
788
|
-
const newValues = adjustDimensions$3({
|
|
789
|
-
height: innerHeight,
|
|
790
|
-
width: innerWidth,
|
|
791
|
-
maxWidth: chart.ratio.maxWidth
|
|
792
|
-
});
|
|
793
|
-
innerWidth = newValues.width;
|
|
794
|
-
innerHeight = newValues.height;
|
|
795
|
-
}
|
|
796
|
-
const piezas = arrayOrArray((_a = chart.dataSets) == null ? void 0 : _a.data).filter((piece) => !!piece.sets).map((piece) => {
|
|
797
|
-
return __spreadProps$5(__spreadValues$5({}, piece), {
|
|
798
|
-
coordinate: piece.sets
|
|
799
|
-
});
|
|
800
|
-
});
|
|
801
|
-
const [currentPie, setCurrentPie] = useState("0");
|
|
802
|
-
useEffect(() => {
|
|
803
|
-
setChartData(piezas[currentPie != null ? currentPie : 0]);
|
|
804
|
-
}, [currentPie]);
|
|
805
|
-
const centerY = useMemo(() => {
|
|
806
|
-
return innerHeight / 2.5;
|
|
807
|
-
}, [innerHeight]);
|
|
808
|
-
const centerX = useMemo(() => {
|
|
809
|
-
return innerWidth / 2.5;
|
|
810
|
-
}, [innerWidth]);
|
|
811
|
-
const top = centerY;
|
|
812
|
-
const left = centerX;
|
|
813
|
-
const getValue = (d) => Number(d.value) === 0 && piezas.length === 1 && arrayOrArray(piezas.map((p) => p.coordinate)[0]).length === 1 ? 100 : Number(d.value);
|
|
814
|
-
const radius = Math.min(innerHeight, innerWidth) / 2.5;
|
|
815
|
-
const piecesNames = piezas.map((piece) => {
|
|
816
|
-
return piece.name;
|
|
817
|
-
});
|
|
818
|
-
const styles = useChartStyles(chart.colorSchema);
|
|
819
|
-
const colorsArray = styles.schema;
|
|
820
|
-
const names = arrayOrArray(arrayOrArray(chart.dataSets.data)[0].sets).map(
|
|
821
|
-
(coord) => {
|
|
822
|
-
return coord.key;
|
|
823
|
-
}
|
|
824
|
-
);
|
|
825
|
-
const colorReference = names.map((name, index) => {
|
|
826
|
-
return {
|
|
827
|
-
title: name,
|
|
828
|
-
color: getBarColor(arrayOrArray(colorsArray), index)
|
|
829
|
-
};
|
|
830
|
-
});
|
|
831
|
-
const { boxRef, elementRef } = usePanAndZoom(
|
|
832
|
-
void 0,
|
|
833
|
-
!allowZoom
|
|
834
|
-
);
|
|
835
|
-
const previousPaths = useRef([]);
|
|
836
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
837
|
-
piezas.length > 1 && /* @__PURE__ */ jsx(Box, { className: "chart__combo__wrapper", children: /* @__PURE__ */ jsx(
|
|
838
|
-
ChartSelector,
|
|
839
|
-
{
|
|
840
|
-
chartId,
|
|
841
|
-
pieces: piecesNames,
|
|
842
|
-
className: "chartSelectorCombo",
|
|
843
|
-
current: currentPie,
|
|
844
|
-
setCurrent: setCurrentPie
|
|
845
|
-
}
|
|
846
|
-
) }),
|
|
847
|
-
/* @__PURE__ */ jsx(
|
|
848
|
-
Box,
|
|
849
|
-
{
|
|
850
|
-
ref: boxRef,
|
|
851
|
-
className: `${className ? className : ""} ${chartId}`,
|
|
852
|
-
sx: { textAlign: "center", pb: spacing(5) },
|
|
853
|
-
children: /* @__PURE__ */ jsx(
|
|
854
|
-
"svg",
|
|
855
|
-
{
|
|
856
|
-
ref: elementRef,
|
|
857
|
-
height: radius * 2,
|
|
858
|
-
width: radius * 2,
|
|
859
|
-
className: `_${chartId} chart__svg`,
|
|
860
|
-
children: /* @__PURE__ */ jsxs(Group, { top: top != null ? top : 0, left: left != null ? left : 0, children: [
|
|
861
|
-
/* @__PURE__ */ jsx(
|
|
862
|
-
Pie,
|
|
863
|
-
{
|
|
864
|
-
data: arrayOrArray(chartData.coordinate),
|
|
865
|
-
pieValue: getValue,
|
|
866
|
-
pieSort: null,
|
|
867
|
-
outerRadius: radius,
|
|
868
|
-
children: (pie) => {
|
|
869
|
-
const paths = arrayOrArray(pie.arcs).map((arc) => {
|
|
870
|
-
return pie.path(arc);
|
|
871
|
-
});
|
|
872
|
-
const result = pie.arcs.map((arc) => {
|
|
873
|
-
var _a2, _b;
|
|
874
|
-
const name = arc.data;
|
|
875
|
-
const arcPath = pie.path(arc);
|
|
876
|
-
return /* @__PURE__ */ jsx(
|
|
877
|
-
Slice,
|
|
878
|
-
{
|
|
879
|
-
arc,
|
|
880
|
-
arcPath,
|
|
881
|
-
chart,
|
|
882
|
-
actualColor: (_b = (_a2 = colorReference.find((color) => {
|
|
883
|
-
return color.title === name.key;
|
|
884
|
-
})) == null ? void 0 : _a2.color) != null ? _b : ""
|
|
885
|
-
},
|
|
886
|
-
`${name.key}_${name.value}`
|
|
887
|
-
);
|
|
888
|
-
});
|
|
889
|
-
previousPaths.current = paths;
|
|
890
|
-
return result;
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
|
-
),
|
|
894
|
-
/* @__PURE__ */ jsx(
|
|
895
|
-
Pie,
|
|
896
|
-
{
|
|
897
|
-
data: arrayOrArray(chartData.coordinate),
|
|
898
|
-
pieValue: getValue,
|
|
899
|
-
pieSort: null,
|
|
900
|
-
outerRadius: radius,
|
|
901
|
-
children: (pie) => {
|
|
902
|
-
return pie.arcs.map((arc) => {
|
|
903
|
-
const name = arc.data;
|
|
904
|
-
const angle = (arc.startAngle - Math.PI + arc.endAngle) / 2;
|
|
905
|
-
const x = Math.cos(angle) * (radius * 0.75);
|
|
906
|
-
const y = Math.sin(angle) * (radius * 0.75);
|
|
907
|
-
return /* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx(
|
|
908
|
-
TextSlice,
|
|
909
|
-
{
|
|
910
|
-
arc,
|
|
911
|
-
chart,
|
|
912
|
-
dy: "0.33em",
|
|
913
|
-
x,
|
|
914
|
-
y
|
|
915
|
-
}
|
|
916
|
-
) }, `arc-${name.key}-${name.value}`);
|
|
917
|
-
});
|
|
918
|
-
}
|
|
919
|
-
}
|
|
920
|
-
)
|
|
921
|
-
] })
|
|
922
|
-
}
|
|
923
|
-
)
|
|
924
|
-
},
|
|
925
|
-
chartData.name
|
|
926
|
-
),
|
|
927
|
-
colorReference.length > 1 && /* @__PURE__ */ jsx(
|
|
928
|
-
LegendContainer,
|
|
929
|
-
{
|
|
930
|
-
id: chartId,
|
|
931
|
-
containerClassName: "legendContainer",
|
|
932
|
-
references: colorReference
|
|
933
|
-
}
|
|
934
|
-
)
|
|
935
|
-
] });
|
|
936
|
-
};
|
|
937
|
-
|
|
938
|
-
const Bar = ({
|
|
939
|
-
bar,
|
|
940
|
-
barGroup,
|
|
941
|
-
chart,
|
|
942
|
-
parsedData,
|
|
943
|
-
isSingle,
|
|
944
|
-
setsWithColor
|
|
945
|
-
}) => {
|
|
946
|
-
var _a;
|
|
947
|
-
const column = arrayOrArray(chart.dataSets.data)[bar.index];
|
|
948
|
-
const set = arrayOrArray(column == null ? void 0 : column.sets)[barGroup.index];
|
|
949
|
-
const currentBarColor = (_a = setsWithColor.find(
|
|
950
|
-
(innerSet) => innerSet.columnName === column.name && innerSet.key === set.key
|
|
951
|
-
)) == null ? void 0 : _a.color;
|
|
952
|
-
const [isHighlighted, setIsHighlighted] = useState(false);
|
|
953
|
-
const [isAnyHighlighted, setIsAnyHighlighted] = useState(false);
|
|
954
|
-
const { open } = useTooltip({
|
|
955
|
-
children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
956
|
-
/* @__PURE__ */ jsx(
|
|
957
|
-
"div",
|
|
958
|
-
{
|
|
959
|
-
style: {
|
|
960
|
-
color: currentBarColor
|
|
961
|
-
},
|
|
962
|
-
children: /* @__PURE__ */ jsx("strong", { children: parsedData[barGroup.index].columnName })
|
|
963
|
-
}
|
|
964
|
-
),
|
|
965
|
-
chart.showValues && /* @__PURE__ */ jsx("div", { children: bar.value }),
|
|
966
|
-
/* @__PURE__ */ jsx("div", { children: bar.key })
|
|
967
|
-
] })
|
|
968
|
-
});
|
|
969
|
-
useImperativeComponentEvents({
|
|
970
|
-
highlight(barName) {
|
|
971
|
-
if (barName.split(" - ").length === 1) {
|
|
972
|
-
setIsHighlighted(barName === bar.key);
|
|
973
|
-
setIsAnyHighlighted(barName !== bar.key && barName !== "");
|
|
974
|
-
} else if (barName.split(" - ").length === 2) {
|
|
975
|
-
setIsHighlighted(
|
|
976
|
-
barName.split(" - ")[0] === bar.key && barName.split(" - ")[1] === set.key
|
|
977
|
-
);
|
|
978
|
-
setIsAnyHighlighted(
|
|
979
|
-
barName.split(" - ")[0] !== bar.key && barName.split(" - ")[0] !== ""
|
|
980
|
-
);
|
|
981
|
-
}
|
|
982
|
-
}
|
|
983
|
-
});
|
|
984
|
-
const { chartId } = useContext(ChartContext);
|
|
985
|
-
return /* @__PURE__ */ jsxs("g", { children: [
|
|
986
|
-
/* @__PURE__ */ jsx(
|
|
987
|
-
"text",
|
|
988
|
-
{
|
|
989
|
-
x: bar.x + bar.width / 2,
|
|
990
|
-
y: bar.y - 5,
|
|
991
|
-
width: bar.width,
|
|
992
|
-
height: bar.height,
|
|
993
|
-
textAnchor: "middle",
|
|
994
|
-
style: {
|
|
995
|
-
display: isHighlighted ? "block" : "none",
|
|
996
|
-
opacity: isHighlighted ? 1 : 0,
|
|
997
|
-
transition: "opacity 500ms"
|
|
998
|
-
},
|
|
999
|
-
children: bar.value
|
|
1000
|
-
}
|
|
1001
|
-
),
|
|
1002
|
-
/* @__PURE__ */ jsxs(
|
|
1003
|
-
Box,
|
|
1004
|
-
{
|
|
1005
|
-
as: "rect",
|
|
1006
|
-
className: "chart__barRect",
|
|
1007
|
-
sx: useMemo(
|
|
1008
|
-
() => ({
|
|
1009
|
-
fill: isAnyHighlighted ? `#${tinycolor(currentBarColor).desaturate(70).toHex()}` : currentBarColor,
|
|
1010
|
-
"&:hover": {
|
|
1011
|
-
fill: `#${tinycolor(currentBarColor).saturate(25).toHex()}`
|
|
1012
|
-
},
|
|
1013
|
-
transition: "fill 500ms, opacity 500ms",
|
|
1014
|
-
x: bar.x,
|
|
1015
|
-
y: bar.y,
|
|
1016
|
-
width: bar.width,
|
|
1017
|
-
opacity: isAnyHighlighted && !isHighlighted ? 0.15 : 1,
|
|
1018
|
-
height: bar.height > 0 ? bar.height : 0
|
|
1019
|
-
}),
|
|
1020
|
-
[
|
|
1021
|
-
bar.height,
|
|
1022
|
-
bar.width,
|
|
1023
|
-
bar.x,
|
|
1024
|
-
bar.y,
|
|
1025
|
-
currentBarColor,
|
|
1026
|
-
isAnyHighlighted,
|
|
1027
|
-
isHighlighted
|
|
1028
|
-
]
|
|
1029
|
-
),
|
|
1030
|
-
onMouseEnter: (ev) => {
|
|
1031
|
-
var _a2, _b, _c;
|
|
1032
|
-
if (!isSingle) {
|
|
1033
|
-
legendContainerMethods.highlight(chartId, bar.key);
|
|
1034
|
-
}
|
|
1035
|
-
(_a2 = ev.target.classList) == null ? void 0 : _a2.add("over");
|
|
1036
|
-
const point = {
|
|
1037
|
-
x: (_b = localPoint(ev)) == null ? void 0 : _b.x,
|
|
1038
|
-
y: (_c = localPoint(ev)) == null ? void 0 : _c.y
|
|
1039
|
-
};
|
|
1040
|
-
if (!point)
|
|
1041
|
-
return;
|
|
1042
|
-
open({
|
|
1043
|
-
attachToElement: () => ev.target,
|
|
1044
|
-
attachToElementAnchorPoint: "center"
|
|
1045
|
-
});
|
|
1046
|
-
},
|
|
1047
|
-
onMouseLeave: (ev) => {
|
|
1048
|
-
var _a2;
|
|
1049
|
-
if (!isSingle) {
|
|
1050
|
-
legendContainerMethods.highlight(chartId, "");
|
|
1051
|
-
}
|
|
1052
|
-
(_a2 = ev.target.classList) == null ? void 0 : _a2.remove("over");
|
|
1053
|
-
},
|
|
1054
|
-
children: [
|
|
1055
|
-
/* @__PURE__ */ jsx(
|
|
1056
|
-
"animate",
|
|
1057
|
-
{
|
|
1058
|
-
attributeName: "height",
|
|
1059
|
-
from: 0,
|
|
1060
|
-
to: bar.height,
|
|
1061
|
-
dur: "0.5s",
|
|
1062
|
-
calcMode: "paced",
|
|
1063
|
-
keySplines: "0.5 0 0.5 1;",
|
|
1064
|
-
keyTimes: "0; 1"
|
|
1065
|
-
}
|
|
1066
|
-
),
|
|
1067
|
-
/* @__PURE__ */ jsx(
|
|
1068
|
-
"animate",
|
|
1069
|
-
{
|
|
1070
|
-
attributeName: "y",
|
|
1071
|
-
from: bar.y + bar.height,
|
|
1072
|
-
to: bar.y,
|
|
1073
|
-
dur: "0.5s",
|
|
1074
|
-
calcMode: "paced",
|
|
1075
|
-
keySplines: "0.5 0 0.5 1;",
|
|
1076
|
-
keyTimes: "0; 1"
|
|
1077
|
-
}
|
|
1078
|
-
)
|
|
1079
|
-
]
|
|
1080
|
-
}
|
|
1081
|
-
)
|
|
1082
|
-
] });
|
|
1083
|
-
};
|
|
1084
|
-
|
|
1085
|
-
var __defProp$4 = Object.defineProperty;
|
|
1086
|
-
var __defProps$4 = Object.defineProperties;
|
|
1087
|
-
var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
|
|
1088
|
-
var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
|
|
1089
|
-
var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
|
|
1090
|
-
var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
|
|
1091
|
-
var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1092
|
-
var __spreadValues$4 = (a, b) => {
|
|
1093
|
-
for (var prop in b || (b = {}))
|
|
1094
|
-
if (__hasOwnProp$4.call(b, prop))
|
|
1095
|
-
__defNormalProp$4(a, prop, b[prop]);
|
|
1096
|
-
if (__getOwnPropSymbols$4)
|
|
1097
|
-
for (var prop of __getOwnPropSymbols$4(b)) {
|
|
1098
|
-
if (__propIsEnum$4.call(b, prop))
|
|
1099
|
-
__defNormalProp$4(a, prop, b[prop]);
|
|
1100
|
-
}
|
|
1101
|
-
return a;
|
|
1102
|
-
};
|
|
1103
|
-
var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
|
|
1104
|
-
function adjustDimensions$2({
|
|
1105
|
-
width,
|
|
1106
|
-
height,
|
|
1107
|
-
maxWidth
|
|
1108
|
-
}) {
|
|
1109
|
-
if (width <= maxWidth) {
|
|
1110
|
-
return { width, height };
|
|
1111
|
-
}
|
|
1112
|
-
const ratio = width / height;
|
|
1113
|
-
const newWidth = maxWidth;
|
|
1114
|
-
const newHeight = Math.floor(newWidth / ratio);
|
|
1115
|
-
return { width: newWidth, height: newHeight };
|
|
1116
|
-
}
|
|
1117
|
-
const getXValue = (d) => d.columnName;
|
|
1118
|
-
const VerticalBars = ({
|
|
1119
|
-
margin = { top: 20, left: 100, bottom: 150, right: 20 },
|
|
1120
|
-
chart,
|
|
1121
|
-
className,
|
|
1122
|
-
chartId,
|
|
1123
|
-
allowZoom
|
|
1124
|
-
}) => {
|
|
1125
|
-
var _a;
|
|
1126
|
-
const effectiveMargin = parseMargin(margin);
|
|
1127
|
-
if (!chart.showAxisYTitle) {
|
|
1128
|
-
effectiveMargin.left = 50;
|
|
1129
|
-
}
|
|
1130
|
-
let innerWidth = chart.ratio.width + (-effectiveMargin.left - effectiveMargin.right) / 2;
|
|
1131
|
-
let innerHeight = chart.ratio.height + (-effectiveMargin.top - effectiveMargin.bottom) / 2;
|
|
1132
|
-
if (innerWidth > chart.ratio.maxWidth) {
|
|
1133
|
-
const newValues = adjustDimensions$2({
|
|
1134
|
-
height: innerHeight,
|
|
1135
|
-
width: innerWidth,
|
|
1136
|
-
maxWidth: chart.ratio.maxWidth
|
|
1137
|
-
});
|
|
1138
|
-
innerWidth = newValues.width;
|
|
1139
|
-
innerHeight = newValues.height;
|
|
1140
|
-
}
|
|
1141
|
-
const styles = useChartStyles(chart.colorSchema);
|
|
1142
|
-
const columnas = arrayOrArray((_a = chart.dataSets) == null ? void 0 : _a.data).filter((column) => !!column.sets).map((column) => {
|
|
1143
|
-
return __spreadProps$4(__spreadValues$4({}, column), {
|
|
1144
|
-
sets: column.sets
|
|
1145
|
-
});
|
|
1146
|
-
});
|
|
1147
|
-
const xValues = arrayOrArray(columnas[0].sets).map(
|
|
1148
|
-
(innerCoord) => innerCoord.key
|
|
1149
|
-
);
|
|
1150
|
-
const columnNames = columnas.map((col) => {
|
|
1151
|
-
return col.name;
|
|
1152
|
-
});
|
|
1153
|
-
const parsedData = xValues.map((x) => {
|
|
1154
|
-
const obj = columnas.reduce(
|
|
1155
|
-
(acc, column) => {
|
|
1156
|
-
return __spreadProps$4(__spreadValues$4({}, acc), {
|
|
1157
|
-
[column.name]: arrayOrArray(column.sets).filter((coord) => {
|
|
1158
|
-
return coord.key === x;
|
|
1159
|
-
})[0].value
|
|
1160
|
-
});
|
|
1161
|
-
},
|
|
1162
|
-
{ columnName: x }
|
|
1163
|
-
);
|
|
1164
|
-
return obj;
|
|
1165
|
-
});
|
|
1166
|
-
const xScale = scaleBand({
|
|
1167
|
-
range: [
|
|
1168
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.left,
|
|
1169
|
-
innerWidth
|
|
1170
|
-
],
|
|
1171
|
-
domain: parsedData.map(getXValue),
|
|
1172
|
-
padding: 0.2
|
|
1173
|
-
});
|
|
1174
|
-
const columnGroupScale = scaleBand({
|
|
1175
|
-
domain: columnNames,
|
|
1176
|
-
range: [0, xScale.bandwidth()]
|
|
1177
|
-
});
|
|
1178
|
-
const yScaleLog = scaleLog({
|
|
1179
|
-
range: [
|
|
1180
|
-
innerHeight,
|
|
1181
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
|
|
1182
|
-
],
|
|
1183
|
-
domain: [
|
|
1184
|
-
1,
|
|
1185
|
-
Math.max(
|
|
1186
|
-
...parsedData.map(
|
|
1187
|
-
(d) => Math.max(...columnNames.map((key) => Number(d[key])))
|
|
1188
|
-
)
|
|
1189
|
-
)
|
|
1190
|
-
],
|
|
1191
|
-
base: 10
|
|
1192
|
-
});
|
|
1193
|
-
const yScaleLine = scaleLinear({
|
|
1194
|
-
range: [
|
|
1195
|
-
innerHeight,
|
|
1196
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
|
|
1197
|
-
],
|
|
1198
|
-
domain: [
|
|
1199
|
-
0,
|
|
1200
|
-
Math.max(
|
|
1201
|
-
...parsedData.map(
|
|
1202
|
-
(d) => Math.max(...columnNames.map((key) => Number(d[key])))
|
|
1203
|
-
)
|
|
1204
|
-
)
|
|
1205
|
-
]
|
|
1206
|
-
});
|
|
1207
|
-
const color = scaleOrdinal({
|
|
1208
|
-
domain: columnNames,
|
|
1209
|
-
range: columnas.map((col) => col.color)
|
|
1210
|
-
});
|
|
1211
|
-
const parameters = usePanelParametersSelector((global) => {
|
|
1212
|
-
return global;
|
|
1213
|
-
});
|
|
1214
|
-
const scale = parameters.PRMT_CHART_SCALE;
|
|
1215
|
-
const isLogScale = scale === "0";
|
|
1216
|
-
const yScale = useMemo(() => {
|
|
1217
|
-
if (!isLogScale) {
|
|
1218
|
-
return yScaleLine;
|
|
1219
|
-
}
|
|
1220
|
-
return yScaleLog;
|
|
1221
|
-
}, [isLogScale, yScaleLine, yScaleLog]);
|
|
1222
|
-
const id = useMemo(() => `VerticalBars${uniqueId()}`, []);
|
|
1223
|
-
useLayoutEffect(() => {
|
|
1224
|
-
document.querySelectorAll(`#${id} .tickLabel`).forEach((current) => {
|
|
1225
|
-
const width = current.getBoundingClientRect().width;
|
|
1226
|
-
current.style.transformOrigin = current.getAttribute("x") + "px 14px";
|
|
1227
|
-
current.style.transform = `rotate(25deg) translateX(${width / 2}px)`;
|
|
1228
|
-
});
|
|
1229
|
-
});
|
|
1230
|
-
const { boxRef, elementRef } = usePanAndZoom(
|
|
1231
|
-
void 0,
|
|
1232
|
-
!allowZoom
|
|
1233
|
-
);
|
|
1234
|
-
const setsWithColor = arrayOrArray(chart.dataSets.data).map((data, index) => {
|
|
1235
|
-
const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
|
|
1236
|
-
const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(styles.schema).length > 0 ? getBarColor(arrayOrArray(styles.schema), index, isSingle) : "";
|
|
1237
|
-
const returnColumnsArray = [];
|
|
1238
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
1239
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
1240
|
-
returnColumnsArray.push(__spreadProps$4(__spreadValues$4({}, set), { columnName: data.name }));
|
|
1241
|
-
} else {
|
|
1242
|
-
returnColumnsArray.push(__spreadProps$4(__spreadValues$4({}, set), {
|
|
1243
|
-
color: dataColor,
|
|
1244
|
-
columnName: data.name
|
|
1245
|
-
}));
|
|
1246
|
-
}
|
|
1247
|
-
});
|
|
1248
|
-
return returnColumnsArray;
|
|
1249
|
-
});
|
|
1250
|
-
const colorReference = arrayOrArray(chart.dataSets.data).map(
|
|
1251
|
-
(data, index) => {
|
|
1252
|
-
const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
|
|
1253
|
-
const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(styles.schema).length > 0 ? getBarColor(arrayOrArray(styles.schema), index, isSingle) : "";
|
|
1254
|
-
return {
|
|
1255
|
-
color: dataColor,
|
|
1256
|
-
title: data.name
|
|
1257
|
-
};
|
|
1258
|
-
}
|
|
1259
|
-
);
|
|
1260
|
-
arrayOrArray(chart.dataSets.data).map((data) => {
|
|
1261
|
-
const returnArray = [];
|
|
1262
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
1263
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
1264
|
-
returnArray.push({
|
|
1265
|
-
color: set.color,
|
|
1266
|
-
title: data.name + " - " + set.key
|
|
1267
|
-
});
|
|
1268
|
-
}
|
|
1269
|
-
});
|
|
1270
|
-
return returnArray;
|
|
1271
|
-
}).flat().forEach((addRef) => colorReference.push(addRef));
|
|
1272
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1273
|
-
/* @__PURE__ */ jsx(
|
|
1274
|
-
Box,
|
|
1275
|
-
{
|
|
1276
|
-
ref: boxRef,
|
|
1277
|
-
id,
|
|
1278
|
-
className: `${className != null ? className : ""} ${chart.title}`,
|
|
1279
|
-
sx: {
|
|
1280
|
-
overflow: "hidden"
|
|
1281
|
-
},
|
|
1282
|
-
children: /* @__PURE__ */ jsxs(
|
|
1283
|
-
"svg",
|
|
1284
|
-
{
|
|
1285
|
-
ref: elementRef,
|
|
1286
|
-
className: `_${chartId} chart__svg`,
|
|
1287
|
-
height: chart.ratio.height,
|
|
1288
|
-
width: chart.ratio.width,
|
|
1289
|
-
children: [
|
|
1290
|
-
chart.showGrid && /* @__PURE__ */ jsx(
|
|
1291
|
-
Grid.Grid,
|
|
1292
|
-
{
|
|
1293
|
-
xScale,
|
|
1294
|
-
yScale,
|
|
1295
|
-
left: 0,
|
|
1296
|
-
width: innerWidth,
|
|
1297
|
-
height: innerHeight,
|
|
1298
|
-
numTicksRows: 10,
|
|
1299
|
-
numTicksColumns: 10,
|
|
1300
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20
|
|
1301
|
-
}
|
|
1302
|
-
),
|
|
1303
|
-
/* @__PURE__ */ jsx(
|
|
1304
|
-
Group,
|
|
1305
|
-
{
|
|
1306
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
|
|
1307
|
-
children: /* @__PURE__ */ jsx(
|
|
1308
|
-
BarGroup,
|
|
1309
|
-
{
|
|
1310
|
-
data: parsedData,
|
|
1311
|
-
keys: columnNames,
|
|
1312
|
-
height: innerHeight,
|
|
1313
|
-
x0: getXValue,
|
|
1314
|
-
x0Scale: xScale,
|
|
1315
|
-
x1Scale: columnGroupScale,
|
|
1316
|
-
yScale,
|
|
1317
|
-
color,
|
|
1318
|
-
children: (barGroups) => barGroups.map((barGroup) => {
|
|
1319
|
-
return /* @__PURE__ */ jsx(
|
|
1320
|
-
Group,
|
|
1321
|
-
{
|
|
1322
|
-
left: barGroup.x0,
|
|
1323
|
-
children: barGroup.bars.map((bar) => {
|
|
1324
|
-
const key = `${barGroup.index}-${bar.index}-${bar.key}`;
|
|
1325
|
-
return /* @__PURE__ */ jsx(
|
|
1326
|
-
Bar,
|
|
1327
|
-
{
|
|
1328
|
-
isSingle: barGroup.bars.length === 1,
|
|
1329
|
-
bar,
|
|
1330
|
-
barGroup,
|
|
1331
|
-
chart,
|
|
1332
|
-
parsedData,
|
|
1333
|
-
setsWithColor: setsWithColor.flat()
|
|
1334
|
-
},
|
|
1335
|
-
key
|
|
1336
|
-
);
|
|
1337
|
-
})
|
|
1338
|
-
},
|
|
1339
|
-
`bar-group-${barGroup.index}-${barGroup.x0}`
|
|
1340
|
-
);
|
|
1341
|
-
})
|
|
1342
|
-
}
|
|
1343
|
-
)
|
|
1344
|
-
}
|
|
1345
|
-
),
|
|
1346
|
-
/* @__PURE__ */ jsx(
|
|
1347
|
-
AxisLeft,
|
|
1348
|
-
{
|
|
1349
|
-
scale: yScale,
|
|
1350
|
-
left: effectiveMargin.left,
|
|
1351
|
-
label: chart.chartType !== "pie2D" && chart.showAxisYTitle ? chart.axisYTitle : ""
|
|
1352
|
-
}
|
|
1353
|
-
),
|
|
1354
|
-
/* @__PURE__ */ jsx(
|
|
1355
|
-
AxisBottom,
|
|
1356
|
-
{
|
|
1357
|
-
top: innerHeight,
|
|
1358
|
-
scale: xScale,
|
|
1359
|
-
label: chart.chartType !== "pie2D" && chart.showAxisXTitle ? chart.axisXTitle : "",
|
|
1360
|
-
tickLabelProps: {
|
|
1361
|
-
className: "tickLabel"
|
|
1362
|
-
},
|
|
1363
|
-
labelOffset: 50
|
|
1364
|
-
}
|
|
1365
|
-
)
|
|
1366
|
-
]
|
|
1367
|
-
}
|
|
1368
|
-
)
|
|
1369
|
-
}
|
|
1370
|
-
),
|
|
1371
|
-
colorReference.length > 1 && /* @__PURE__ */ jsx(
|
|
1372
|
-
LegendContainer,
|
|
1373
|
-
{
|
|
1374
|
-
id: chartId,
|
|
1375
|
-
containerClassName: "legendContainer",
|
|
1376
|
-
references: (
|
|
1377
|
-
// hideLegendsColors
|
|
1378
|
-
// ? colorReference.map((ref) => {
|
|
1379
|
-
// return { ...ref, color: 'transparent' };
|
|
1380
|
-
// })
|
|
1381
|
-
colorReference
|
|
1382
|
-
)
|
|
1383
|
-
}
|
|
1384
|
-
)
|
|
1385
|
-
] });
|
|
1386
|
-
};
|
|
1387
|
-
|
|
1388
|
-
const Node = ({
|
|
1389
|
-
currentCircle,
|
|
1390
|
-
innerKey,
|
|
1391
|
-
cx,
|
|
1392
|
-
cy,
|
|
1393
|
-
// coordinate,
|
|
1394
|
-
color,
|
|
1395
|
-
setCurrentCircle
|
|
1396
|
-
}) => {
|
|
1397
|
-
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1398
|
-
currentCircle.includes(innerKey) && /* @__PURE__ */ jsx(
|
|
1399
|
-
"circle",
|
|
1400
|
-
{
|
|
1401
|
-
r: 6,
|
|
1402
|
-
cx,
|
|
1403
|
-
cy,
|
|
1404
|
-
stroke: `#${tinycolor(color).saturate(25).toHex()}`,
|
|
1405
|
-
fill: `#${tinycolor(color).saturate(25).toHex()}`
|
|
1406
|
-
}
|
|
1407
|
-
),
|
|
1408
|
-
/* @__PURE__ */ jsx(
|
|
1409
|
-
"circle",
|
|
1410
|
-
{
|
|
1411
|
-
r: 3,
|
|
1412
|
-
cx,
|
|
1413
|
-
cy,
|
|
1414
|
-
stroke: `#${tinycolor(color).darken(15).toHex()}`,
|
|
1415
|
-
fill: `#${tinycolor(color).darken(15).toHex()}`
|
|
1416
|
-
}
|
|
1417
|
-
),
|
|
1418
|
-
/* @__PURE__ */ jsx(
|
|
1419
|
-
"circle",
|
|
1420
|
-
{
|
|
1421
|
-
r: 10,
|
|
1422
|
-
cx,
|
|
1423
|
-
cy,
|
|
1424
|
-
stroke: "transparent",
|
|
1425
|
-
fill: "transparent",
|
|
1426
|
-
onMouseEnter: () => {
|
|
1427
|
-
setCurrentCircle([innerKey]);
|
|
1428
|
-
},
|
|
1429
|
-
onMouseLeave: () => {
|
|
1430
|
-
setCurrentCircle([]);
|
|
1431
|
-
},
|
|
1432
|
-
style: { cursor: "pointer" }
|
|
1433
|
-
}
|
|
1434
|
-
)
|
|
1435
|
-
] }, innerKey);
|
|
1436
|
-
};
|
|
1437
|
-
|
|
1438
|
-
var __defProp$3 = Object.defineProperty;
|
|
1439
|
-
var __defProps$3 = Object.defineProperties;
|
|
1440
|
-
var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
|
|
1441
|
-
var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
|
|
1442
|
-
var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
|
|
1443
|
-
var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
|
|
1444
|
-
var __pow = Math.pow;
|
|
1445
|
-
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1446
|
-
var __spreadValues$3 = (a, b) => {
|
|
1447
|
-
for (var prop in b || (b = {}))
|
|
1448
|
-
if (__hasOwnProp$3.call(b, prop))
|
|
1449
|
-
__defNormalProp$3(a, prop, b[prop]);
|
|
1450
|
-
if (__getOwnPropSymbols$3)
|
|
1451
|
-
for (var prop of __getOwnPropSymbols$3(b)) {
|
|
1452
|
-
if (__propIsEnum$3.call(b, prop))
|
|
1453
|
-
__defNormalProp$3(a, prop, b[prop]);
|
|
1454
|
-
}
|
|
1455
|
-
return a;
|
|
1456
|
-
};
|
|
1457
|
-
var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
|
|
1458
|
-
function adjustDimensions$1({
|
|
1459
|
-
width,
|
|
1460
|
-
height,
|
|
1461
|
-
maxWidth
|
|
1462
|
-
}) {
|
|
1463
|
-
if (width <= maxWidth) {
|
|
1464
|
-
return { width, height };
|
|
1465
|
-
}
|
|
1466
|
-
const ratio = width / height;
|
|
1467
|
-
const newWidth = maxWidth;
|
|
1468
|
-
const newHeight = Math.floor(newWidth / ratio);
|
|
1469
|
-
return { width: newWidth, height: newHeight };
|
|
1470
|
-
}
|
|
1471
|
-
function getX(coordinate) {
|
|
1472
|
-
return coordinate.key;
|
|
1473
|
-
}
|
|
1474
|
-
function getY(coordinate) {
|
|
1475
|
-
return Number(coordinate.value);
|
|
1476
|
-
}
|
|
1477
|
-
function parseData(chart) {
|
|
1478
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
1479
|
-
const columns = arrayOrArray((_a = chart.dataSets) == null ? void 0 : _a.data);
|
|
1480
|
-
const data = columns.map((column) => column.sets);
|
|
1481
|
-
const allData = data.reduce(
|
|
1482
|
-
(rec, d) => arrayOrArray(rec).concat(d),
|
|
1483
|
-
[]
|
|
1484
|
-
);
|
|
1485
|
-
return {
|
|
1486
|
-
columns,
|
|
1487
|
-
xScale: scaleOrdinal({
|
|
1488
|
-
domain: arrayOrArray(columns[0].sets).map(getX)
|
|
1489
|
-
}),
|
|
1490
|
-
yScale: scaleLinear({
|
|
1491
|
-
domain: [
|
|
1492
|
-
((_b = min(allData, getY)) != null ? _b : 0 < 0) ? (_c = min(allData, getY)) != null ? _c : 0 : 0,
|
|
1493
|
-
(_d = max(allData, getY)) != null ? _d : 1
|
|
1494
|
-
]
|
|
1495
|
-
}),
|
|
1496
|
-
yScaleLog: scaleLog({
|
|
1497
|
-
domain: [
|
|
1498
|
-
((_e = min(allData, getY)) != null ? _e : 1 > 0) ? (_f = min(allData, getY)) != null ? _f : 1 : 1,
|
|
1499
|
-
(_g = max(allData, getY)) != null ? _g : 10
|
|
1500
|
-
]
|
|
1501
|
-
})
|
|
1502
|
-
};
|
|
1503
|
-
}
|
|
1504
|
-
const LineChart = ({
|
|
1505
|
-
chart,
|
|
1506
|
-
margin = { top: 20, left: 100, bottom: 150, right: 70 },
|
|
1507
|
-
chartId,
|
|
1508
|
-
allowZoom
|
|
1509
|
-
}) => {
|
|
1510
|
-
const effectiveMargin = parseMargin(margin);
|
|
1511
|
-
if (!chart.showAxisYTitle) {
|
|
1512
|
-
effectiveMargin.left = 50;
|
|
1513
|
-
}
|
|
1514
|
-
let innerWidth = chart.ratio.width;
|
|
1515
|
-
let innerHeight = chart.ratio.height - (effectiveMargin.top + effectiveMargin.bottom) / 2;
|
|
1516
|
-
if (innerWidth > chart.ratio.maxWidth) {
|
|
1517
|
-
const newValues = adjustDimensions$1({
|
|
1518
|
-
height: innerHeight,
|
|
1519
|
-
width: innerWidth,
|
|
1520
|
-
maxWidth: chart.ratio.maxWidth
|
|
1521
|
-
});
|
|
1522
|
-
innerWidth = newValues.width;
|
|
1523
|
-
innerHeight = newValues.height;
|
|
1524
|
-
}
|
|
1525
|
-
const { columns, xScale, yScale, yScaleLog } = parseData(chart);
|
|
1526
|
-
const styles = useChartStyles(chart.colorSchema);
|
|
1527
|
-
const coordinates = arrayOrArray(columns[0].sets);
|
|
1528
|
-
const coordinatesArray = columns.map((col) => {
|
|
1529
|
-
return col.sets;
|
|
1530
|
-
});
|
|
1531
|
-
const step = innerWidth / coordinates.length;
|
|
1532
|
-
xScale.range(
|
|
1533
|
-
coordinates.map((_, i) => {
|
|
1534
|
-
if (i === 0) {
|
|
1535
|
-
return effectiveMargin.left;
|
|
1536
|
-
}
|
|
1537
|
-
return i * step + effectiveMargin.left;
|
|
1538
|
-
})
|
|
1539
|
-
);
|
|
1540
|
-
yScale.range([
|
|
1541
|
-
innerHeight - (effectiveMargin.top + effectiveMargin.bottom) / 2,
|
|
1542
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
|
|
1543
|
-
]);
|
|
1544
|
-
yScaleLog.range([
|
|
1545
|
-
innerHeight,
|
|
1546
|
-
typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top
|
|
1547
|
-
]);
|
|
1548
|
-
const [currentCircle, setCurrentCircle] = useState([]);
|
|
1549
|
-
const actualYScale = useMemo(() => {
|
|
1550
|
-
return yScale;
|
|
1551
|
-
}, [yScale]);
|
|
1552
|
-
const id = useMemo(() => `VerticalBars${uniqueId()}`, []);
|
|
1553
|
-
useLayoutEffect(() => {
|
|
1554
|
-
document.querySelectorAll(`#${id} .tickLabel`).forEach((current) => {
|
|
1555
|
-
const width = current.getBoundingClientRect().width;
|
|
1556
|
-
current.style.transformOrigin = current.getAttribute("x") + "px 14px";
|
|
1557
|
-
current.style.transform = `rotate(25deg) translateX(${width / 2}px)`;
|
|
1558
|
-
});
|
|
1559
|
-
});
|
|
1560
|
-
function addNameToProps(names, objects, fixedValue) {
|
|
1561
|
-
return objects.map((object, index) => {
|
|
1562
|
-
const nameIndex = Math.floor(index / fixedValue);
|
|
1563
|
-
const name = names[nameIndex];
|
|
1564
|
-
return __spreadProps$3(__spreadValues$3({}, object), { columnName: name });
|
|
1565
|
-
});
|
|
1566
|
-
}
|
|
1567
|
-
const [nodes, setNodes] = useState([]);
|
|
1568
|
-
useEffect(() => {
|
|
1569
|
-
const coords = coordinatesArray.flat().map((coord) => {
|
|
1570
|
-
return {
|
|
1571
|
-
xValue: coord.key,
|
|
1572
|
-
yValue: coord.value,
|
|
1573
|
-
x: xScale(getX(coord)),
|
|
1574
|
-
y: actualYScale(getY(coord))
|
|
1575
|
-
};
|
|
1576
|
-
});
|
|
1577
|
-
const columnNames = columns.map((column) => {
|
|
1578
|
-
return column.name;
|
|
1579
|
-
});
|
|
1580
|
-
const nodesData = addNameToProps(columnNames, coords, coordinates.length);
|
|
1581
|
-
setNodes(nodesData);
|
|
1582
|
-
}, []);
|
|
1583
|
-
const [nearNodesArray, setNearNodesArray] = useState([]);
|
|
1584
|
-
const previousNearNodesArray = usePrevious(nearNodesArray);
|
|
1585
|
-
const setsWithColor = arrayOrArray(chart.dataSets.data).map((data, index) => {
|
|
1586
|
-
const isSingle = arrayOrArray(chart.dataSets.data).length === 1;
|
|
1587
|
-
const dataColor = data.color !== "" && data.color !== void 0 ? data.color : arrayOrArray(styles.schema).length > 0 ? getBarColor(arrayOrArray(styles.schema), index, isSingle) : "";
|
|
1588
|
-
const returnColumnsArray = [];
|
|
1589
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
1590
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
1591
|
-
returnColumnsArray.push(__spreadProps$3(__spreadValues$3({}, set), { columnName: data.name }));
|
|
1592
|
-
} else {
|
|
1593
|
-
returnColumnsArray.push(__spreadProps$3(__spreadValues$3({}, set), {
|
|
1594
|
-
color: dataColor,
|
|
1595
|
-
columnName: data.name
|
|
1596
|
-
}));
|
|
1597
|
-
}
|
|
1598
|
-
});
|
|
1599
|
-
return { returnColumnsArray, columnColor: dataColor };
|
|
1600
|
-
});
|
|
1601
|
-
const colorReference = setsWithColor.map((column) => {
|
|
1602
|
-
var _a;
|
|
1603
|
-
return {
|
|
1604
|
-
color: (_a = column.columnColor) != null ? _a : "",
|
|
1605
|
-
title: column.returnColumnsArray[0].columnName
|
|
1606
|
-
};
|
|
1607
|
-
});
|
|
1608
|
-
arrayOrArray(chart.dataSets.data).map((data) => {
|
|
1609
|
-
const returnArray = [];
|
|
1610
|
-
arrayOrArray(data.sets).forEach((set) => {
|
|
1611
|
-
if (set.color !== "" && set.color !== void 0) {
|
|
1612
|
-
returnArray.push({
|
|
1613
|
-
color: set.color,
|
|
1614
|
-
title: data.name + " - " + set.key
|
|
1615
|
-
});
|
|
1616
|
-
}
|
|
1617
|
-
});
|
|
1618
|
-
return returnArray;
|
|
1619
|
-
}).flat().forEach((addRef) => colorReference.push(addRef));
|
|
1620
|
-
const { open } = useTooltip({
|
|
1621
|
-
children: nearNodesArray.sort((a, b) => Number(b.yValue) - Number(a.yValue)).map((node, i) => {
|
|
1622
|
-
const useSpecific = colorReference.some(
|
|
1623
|
-
(ref) => ref.title === node.columnName + " - " + node.xValue
|
|
1624
|
-
);
|
|
1625
|
-
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
1626
|
-
/* @__PURE__ */ jsx(
|
|
1627
|
-
"div",
|
|
1628
|
-
{
|
|
1629
|
-
style: {
|
|
1630
|
-
color: colorReference[colorReference.findIndex((ref) => {
|
|
1631
|
-
return ref.title === (useSpecific ? node.columnName + " - " + node.xValue : node.columnName);
|
|
1632
|
-
})].color
|
|
1633
|
-
},
|
|
1634
|
-
children: /* @__PURE__ */ jsx("strong", { children: node.columnName })
|
|
1635
|
-
}
|
|
1636
|
-
),
|
|
1637
|
-
chart.showValues && /* @__PURE__ */ jsx("div", { children: node.yValue }),
|
|
1638
|
-
/* @__PURE__ */ jsx("div", { children: node.xValue }),
|
|
1639
|
-
nearNodesArray[i + 1] && /* @__PURE__ */ jsx("hr", {})
|
|
1640
|
-
] }, `${node.columnName}_${node.xValue}_${node.yValue}`);
|
|
1641
|
-
})
|
|
1642
|
-
});
|
|
1643
|
-
const [highlightedBar, setHighlightedBar] = useState("");
|
|
1644
|
-
useImperativeComponentEvents({
|
|
1645
|
-
highlight(barName) {
|
|
1646
|
-
if (barName.split(" - ").length === 1) {
|
|
1647
|
-
setHighlightedBar(barName);
|
|
1648
|
-
} else if (barName.split(" - ").length === 2) {
|
|
1649
|
-
setHighlightedBar(barName.split(" - ")[0]);
|
|
1650
|
-
}
|
|
1651
|
-
}
|
|
1652
|
-
});
|
|
1653
|
-
const { boxRef, elementRef } = usePanAndZoom(
|
|
1654
|
-
void 0,
|
|
1655
|
-
!allowZoom
|
|
1656
|
-
);
|
|
1657
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1658
|
-
/* @__PURE__ */ jsx(Box, { id, ref: boxRef, children: /* @__PURE__ */ jsxs(
|
|
1659
|
-
"svg",
|
|
1660
|
-
{
|
|
1661
|
-
ref: elementRef,
|
|
1662
|
-
width: innerWidth,
|
|
1663
|
-
height: innerHeight,
|
|
1664
|
-
id: "LinesChart",
|
|
1665
|
-
className: `_${chartId} chart__svg`,
|
|
1666
|
-
onMouseMove: (ev) => {
|
|
1667
|
-
var _a;
|
|
1668
|
-
const rect = (_a = elementRef.current) == null ? void 0 : _a.getBoundingClientRect();
|
|
1669
|
-
let clientX = ev.clientX;
|
|
1670
|
-
let clientY = ev.clientY - (effectiveMargin.top + effectiveMargin.bottom) / 2;
|
|
1671
|
-
if (rect) {
|
|
1672
|
-
clientX = ev.clientX - rect.left;
|
|
1673
|
-
clientY = ev.clientY - rect.top;
|
|
1674
|
-
}
|
|
1675
|
-
const nearNodes = nodes.filter((node) => {
|
|
1676
|
-
return Math.sqrt(__pow(node.x - clientX, 2) + __pow(node.y - clientY, 2)) < 20;
|
|
1677
|
-
});
|
|
1678
|
-
if (previousNearNodesArray.current && nearNodes.length > 0) {
|
|
1679
|
-
const currentColumns = columns.map((col) => {
|
|
1680
|
-
let colNames = "";
|
|
1681
|
-
nearNodes.forEach((node) => {
|
|
1682
|
-
if (col.name === node.columnName) {
|
|
1683
|
-
colNames = node.columnName;
|
|
1684
|
-
}
|
|
1685
|
-
});
|
|
1686
|
-
return colNames;
|
|
1687
|
-
}).filter((name) => name !== "");
|
|
1688
|
-
const currentIndex = coordinates.findIndex((coord) => {
|
|
1689
|
-
return coord.key === nearNodes[0].xValue;
|
|
1690
|
-
});
|
|
1691
|
-
if (currentColumns && currentIndex !== void 0) {
|
|
1692
|
-
const newCircleValues = currentColumns.map((col) => {
|
|
1693
|
-
return `${col}${currentIndex}`;
|
|
1694
|
-
});
|
|
1695
|
-
setCurrentCircle([...newCircleValues]);
|
|
1696
|
-
}
|
|
1697
|
-
setNearNodesArray(nearNodes);
|
|
1698
|
-
open({
|
|
1699
|
-
attachToElement: () => ev.target,
|
|
1700
|
-
attachToElementAnchorPoint: "center"
|
|
1701
|
-
});
|
|
1702
|
-
} else if (nearNodes.length === 0) {
|
|
1703
|
-
setCurrentCircle([]);
|
|
1704
|
-
}
|
|
1705
|
-
},
|
|
1706
|
-
children: [
|
|
1707
|
-
chart.showGrid && /* @__PURE__ */ jsx(
|
|
1708
|
-
Grid.Grid,
|
|
1709
|
-
{
|
|
1710
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
|
|
1711
|
-
left: 0,
|
|
1712
|
-
xScale,
|
|
1713
|
-
yScale: actualYScale,
|
|
1714
|
-
width: innerWidth,
|
|
1715
|
-
height: innerHeight,
|
|
1716
|
-
stroke: styles.grid.stroke,
|
|
1717
|
-
strokeOpacity: styles.grid.opacity
|
|
1718
|
-
}
|
|
1719
|
-
),
|
|
1720
|
-
columns.map((column, i) => {
|
|
1721
|
-
var _a;
|
|
1722
|
-
const currentCoordinates = arrayOrArray(column.sets);
|
|
1723
|
-
const newColor = (_a = setsWithColor.find(
|
|
1724
|
-
(data) => data.returnColumnsArray[0].columnName === column.name
|
|
1725
|
-
)) == null ? void 0 : _a.columnColor;
|
|
1726
|
-
return /* @__PURE__ */ jsxs(
|
|
1727
|
-
Group,
|
|
1728
|
-
{
|
|
1729
|
-
top: (typeof effectiveMargin === "number" ? effectiveMargin : effectiveMargin.top) - 20,
|
|
1730
|
-
style: {
|
|
1731
|
-
opacity: highlightedBar !== "" && highlightedBar !== column.name ? 0.15 : 1,
|
|
1732
|
-
transition: "opacity 500ms"
|
|
1733
|
-
},
|
|
1734
|
-
children: [
|
|
1735
|
-
/* @__PURE__ */ jsx(
|
|
1736
|
-
LinePath,
|
|
1737
|
-
{
|
|
1738
|
-
curve: allCurves.curveMonotoneX,
|
|
1739
|
-
data: currentCoordinates,
|
|
1740
|
-
x: (coordinate) => {
|
|
1741
|
-
var _a2;
|
|
1742
|
-
return (_a2 = xScale(getX(coordinate))) != null ? _a2 : 0;
|
|
1743
|
-
},
|
|
1744
|
-
y: (coordinate) => {
|
|
1745
|
-
var _a2;
|
|
1746
|
-
return (_a2 = actualYScale(getY(coordinate))) != null ? _a2 : 0;
|
|
1747
|
-
},
|
|
1748
|
-
stroke: newColor != null ? newColor : "black",
|
|
1749
|
-
strokeWidth: 2,
|
|
1750
|
-
strokeOpacity: 1,
|
|
1751
|
-
shapeRendering: "geometricPrecision"
|
|
1752
|
-
}
|
|
1753
|
-
),
|
|
1754
|
-
currentCoordinates.map((coordinate, j) => {
|
|
1755
|
-
var _a2;
|
|
1756
|
-
const key = column.name + j.toString();
|
|
1757
|
-
const realColor = (_a2 = setsWithColor.map((sets) => sets.returnColumnsArray).flat().find(
|
|
1758
|
-
(set) => set.columnName === column.name && set.key === coordinate.key
|
|
1759
|
-
)) == null ? void 0 : _a2.color;
|
|
1760
|
-
return /* @__PURE__ */ jsxs("g", { children: [
|
|
1761
|
-
/* @__PURE__ */ jsx(
|
|
1762
|
-
"text",
|
|
1763
|
-
{
|
|
1764
|
-
x: xScale(getX(coordinate)) + 10,
|
|
1765
|
-
y: actualYScale(getY(coordinate)) - 5,
|
|
1766
|
-
textAnchor: "middle",
|
|
1767
|
-
style: {
|
|
1768
|
-
display: highlightedBar === column.name ? "block" : "none",
|
|
1769
|
-
opacity: highlightedBar === column.name ? 1 : 0,
|
|
1770
|
-
transition: "opacity 500ms"
|
|
1771
|
-
},
|
|
1772
|
-
children: coordinate.value
|
|
1773
|
-
}
|
|
1774
|
-
),
|
|
1775
|
-
/* @__PURE__ */ jsx(
|
|
1776
|
-
Node,
|
|
1777
|
-
{
|
|
1778
|
-
color: realColor != null ? realColor : "black",
|
|
1779
|
-
coordinate,
|
|
1780
|
-
currentCircle,
|
|
1781
|
-
cx: xScale(getX(coordinate)),
|
|
1782
|
-
cy: actualYScale(getY(coordinate)),
|
|
1783
|
-
setCurrentCircle,
|
|
1784
|
-
innerKey: key,
|
|
1785
|
-
column
|
|
1786
|
-
}
|
|
1787
|
-
)
|
|
1788
|
-
] }, key);
|
|
1789
|
-
})
|
|
1790
|
-
]
|
|
1791
|
-
},
|
|
1792
|
-
`lines-${column.name + i.toString()}`
|
|
1793
|
-
);
|
|
1794
|
-
}),
|
|
1795
|
-
/* @__PURE__ */ jsx(
|
|
1796
|
-
AxisLeft,
|
|
1797
|
-
{
|
|
1798
|
-
scale: actualYScale,
|
|
1799
|
-
left: effectiveMargin.left,
|
|
1800
|
-
label: chart.chartType !== "pie2D" && chart.showAxisYTitle ? chart.axisYTitle : ""
|
|
1801
|
-
}
|
|
1802
|
-
),
|
|
1803
|
-
/* @__PURE__ */ jsx(
|
|
1804
|
-
AxisBottom,
|
|
1805
|
-
{
|
|
1806
|
-
top: innerHeight - (effectiveMargin.top + effectiveMargin.bottom) / 2,
|
|
1807
|
-
scale: xScale,
|
|
1808
|
-
label: chart.chartType !== "pie2D" && chart.showAxisXTitle ? chart.axisXTitle : "",
|
|
1809
|
-
tickLabelProps: {
|
|
1810
|
-
className: "tickLabel"
|
|
1811
|
-
},
|
|
1812
|
-
labelOffset: 50
|
|
1813
|
-
}
|
|
1814
|
-
)
|
|
1815
|
-
]
|
|
1816
|
-
}
|
|
1817
|
-
) }),
|
|
1818
|
-
colorReference.length > 1 && /* @__PURE__ */ jsx(
|
|
1819
|
-
LegendContainer,
|
|
1820
|
-
{
|
|
1821
|
-
id: chartId,
|
|
1822
|
-
containerClassName: "legendContainer",
|
|
1823
|
-
references: colorReference
|
|
1824
|
-
}
|
|
1825
|
-
)
|
|
1826
|
-
] });
|
|
1827
|
-
};
|
|
1828
|
-
|
|
1829
|
-
const WaterfallBar = ({
|
|
1830
|
-
width,
|
|
1831
|
-
height,
|
|
1832
|
-
x,
|
|
1833
|
-
y,
|
|
1834
|
-
fill,
|
|
1835
|
-
x1,
|
|
1836
|
-
lineY,
|
|
1837
|
-
x2,
|
|
1838
|
-
stroke,
|
|
1839
|
-
strokeDashArray,
|
|
1840
|
-
textX,
|
|
1841
|
-
textY,
|
|
1842
|
-
textContent,
|
|
1843
|
-
isLast,
|
|
1844
|
-
step,
|
|
1845
|
-
columnName,
|
|
1846
|
-
chart
|
|
1847
|
-
}) => {
|
|
1848
|
-
const { open } = useTooltip({
|
|
1849
|
-
children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1850
|
-
/* @__PURE__ */ jsx(
|
|
1851
|
-
"div",
|
|
1852
|
-
{
|
|
1853
|
-
style: {
|
|
1854
|
-
color: step.color
|
|
1855
|
-
},
|
|
1856
|
-
children: /* @__PURE__ */ jsx("strong", { children: columnName })
|
|
1857
|
-
}
|
|
1858
|
-
),
|
|
1859
|
-
chart.showValues && /* @__PURE__ */ jsx("div", { children: step.y }),
|
|
1860
|
-
/* @__PURE__ */ jsx("div", { children: step.x })
|
|
1861
|
-
] })
|
|
1862
|
-
});
|
|
1863
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1864
|
-
/* @__PURE__ */ jsx(
|
|
1865
|
-
Box,
|
|
1866
|
-
{
|
|
1867
|
-
as: "rect",
|
|
1868
|
-
sx: useMemo(() => {
|
|
1869
|
-
return {
|
|
1870
|
-
width: `${width}px`,
|
|
1871
|
-
height: `${height}px`,
|
|
1872
|
-
x: `${x}px`,
|
|
1873
|
-
y: `${y}px`,
|
|
1874
|
-
fill: `${fill}`,
|
|
1875
|
-
"&:hover": {
|
|
1876
|
-
fill: `#${tinycolor(fill).saturate(25).toHex()}`
|
|
1877
|
-
},
|
|
1878
|
-
transition: "fill 500ms"
|
|
1879
|
-
};
|
|
1880
|
-
}, [fill, height, width, x, y]),
|
|
1881
|
-
onMouseEnter: (ev) => {
|
|
1882
|
-
open({
|
|
1883
|
-
attachToElement: () => ev.target,
|
|
1884
|
-
attachToElementAnchorPoint: "center"
|
|
1885
|
-
});
|
|
1886
|
-
},
|
|
1887
|
-
onMouseLeave: () => {
|
|
1888
|
-
}
|
|
1889
|
-
}
|
|
1890
|
-
),
|
|
1891
|
-
!isLast && /* @__PURE__ */ jsx(
|
|
1892
|
-
Line,
|
|
1893
|
-
{
|
|
1894
|
-
x1,
|
|
1895
|
-
x2,
|
|
1896
|
-
y1: lineY,
|
|
1897
|
-
y2: lineY,
|
|
1898
|
-
stroke,
|
|
1899
|
-
strokeDasharray: strokeDashArray
|
|
1900
|
-
}
|
|
1901
|
-
),
|
|
1902
|
-
/* @__PURE__ */ jsx("text", { textAnchor: "middle", x: textX, y: textY, children: textContent })
|
|
1903
|
-
] });
|
|
1904
|
-
};
|
|
1905
|
-
|
|
1906
|
-
var __defProp$2 = Object.defineProperty;
|
|
1907
|
-
var __defProps$2 = Object.defineProperties;
|
|
1908
|
-
var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
|
|
1909
|
-
var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
|
|
1910
|
-
var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
|
|
1911
|
-
var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
|
|
1912
|
-
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1913
|
-
var __spreadValues$2 = (a, b) => {
|
|
1914
|
-
for (var prop in b || (b = {}))
|
|
1915
|
-
if (__hasOwnProp$2.call(b, prop))
|
|
1916
|
-
__defNormalProp$2(a, prop, b[prop]);
|
|
1917
|
-
if (__getOwnPropSymbols$2)
|
|
1918
|
-
for (var prop of __getOwnPropSymbols$2(b)) {
|
|
1919
|
-
if (__propIsEnum$2.call(b, prop))
|
|
1920
|
-
__defNormalProp$2(a, prop, b[prop]);
|
|
1921
|
-
}
|
|
1922
|
-
return a;
|
|
1923
|
-
};
|
|
1924
|
-
var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
|
|
1925
|
-
var __objRest = (source, exclude) => {
|
|
1926
|
-
var target = {};
|
|
1927
|
-
for (var prop in source)
|
|
1928
|
-
if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
1929
|
-
target[prop] = source[prop];
|
|
1930
|
-
if (source != null && __getOwnPropSymbols$2)
|
|
1931
|
-
for (var prop of __getOwnPropSymbols$2(source)) {
|
|
1932
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))
|
|
1933
|
-
target[prop] = source[prop];
|
|
1934
|
-
}
|
|
1935
|
-
return target;
|
|
1936
|
-
};
|
|
1937
|
-
const calculateWaterfallSteps = ({
|
|
1938
|
-
data,
|
|
1939
|
-
xAccessor,
|
|
1940
|
-
yAccessor,
|
|
1941
|
-
showFinal,
|
|
1942
|
-
colors
|
|
1943
|
-
}) => {
|
|
1944
|
-
let cumulativeTotal = 0;
|
|
1945
|
-
const steps = data.map((datum) => {
|
|
1946
|
-
const xValue = xAccessor(datum);
|
|
1947
|
-
const yValue = yAccessor(datum);
|
|
1948
|
-
const prevTotal = cumulativeTotal;
|
|
1949
|
-
cumulativeTotal += Number(yValue);
|
|
1950
|
-
return {
|
|
1951
|
-
x: xValue,
|
|
1952
|
-
y: yValue,
|
|
1953
|
-
start: prevTotal,
|
|
1954
|
-
end: cumulativeTotal,
|
|
1955
|
-
color: Number(yValue) > 0 ? colors.positive : colors.negative
|
|
1956
|
-
};
|
|
1957
|
-
});
|
|
1958
|
-
if (showFinal) {
|
|
1959
|
-
steps.push({
|
|
1960
|
-
x: "Total",
|
|
1961
|
-
y: cumulativeTotal,
|
|
1962
|
-
start: 0,
|
|
1963
|
-
end: cumulativeTotal,
|
|
1964
|
-
color: colors.total
|
|
1965
|
-
});
|
|
1966
|
-
}
|
|
1967
|
-
return steps;
|
|
1968
|
-
};
|
|
1969
|
-
function adjustDimensions({
|
|
1970
|
-
width,
|
|
1971
|
-
height,
|
|
1972
|
-
maxWidth
|
|
1973
|
-
}) {
|
|
1974
|
-
if (width <= maxWidth) {
|
|
1975
|
-
return { width, height };
|
|
1976
|
-
}
|
|
1977
|
-
const ratio = width / height;
|
|
1978
|
-
const newWidth = maxWidth;
|
|
1979
|
-
const newHeight = Math.floor(newWidth / ratio);
|
|
1980
|
-
return { width: newWidth, height: newHeight };
|
|
1981
|
-
}
|
|
1982
|
-
const WaterfallBars = (_a) => {
|
|
1983
|
-
var _b = _a, {
|
|
1984
|
-
margin = { top: 20, left: 100, bottom: 150, right: 70 },
|
|
1985
|
-
chart: _c
|
|
1986
|
-
} = _b, _d = _c, {
|
|
1987
|
-
waterfallColors = {
|
|
1988
|
-
positive: "#49b86f",
|
|
1989
|
-
negative: "#c92e5b",
|
|
1990
|
-
total: "#434857",
|
|
1991
|
-
stepConnector: "#888d94"
|
|
1992
|
-
}
|
|
1993
|
-
} = _d, chart = __objRest(_d, [
|
|
1994
|
-
"waterfallColors"
|
|
1995
|
-
]), {
|
|
1996
|
-
className,
|
|
1997
|
-
chartId,
|
|
1998
|
-
allowZoom
|
|
1999
|
-
} = _b;
|
|
2000
|
-
var _a2;
|
|
2001
|
-
const effectiveMargin = parseMargin(margin);
|
|
2002
|
-
if (!chart.showAxisYTitle) {
|
|
2003
|
-
effectiveMargin.left = 50;
|
|
2004
|
-
}
|
|
2005
|
-
let innerWidth = chart.ratio.width + (-effectiveMargin.left - effectiveMargin.right) / 2;
|
|
2006
|
-
let innerHeight = chart.ratio.height + (-effectiveMargin.top - effectiveMargin.bottom) / 2;
|
|
2007
|
-
if (innerWidth > chart.ratio.maxWidth) {
|
|
2008
|
-
const newValues = adjustDimensions({
|
|
2009
|
-
height: innerHeight,
|
|
2010
|
-
width: innerWidth,
|
|
2011
|
-
maxWidth: chart.ratio.maxWidth
|
|
2012
|
-
});
|
|
2013
|
-
innerWidth = newValues.width;
|
|
2014
|
-
innerHeight = newValues.height;
|
|
2015
|
-
}
|
|
2016
|
-
const getXValue = (d) => d.key;
|
|
2017
|
-
const getYValue = (d) => d.value;
|
|
2018
|
-
const charts = arrayOrArray((_a2 = chart.dataSets) == null ? void 0 : _a2.data).filter((piece) => !!piece.sets).map((piece) => {
|
|
2019
|
-
return __spreadProps$2(__spreadValues$2({}, piece), {
|
|
2020
|
-
coordinate: piece.sets
|
|
2021
|
-
});
|
|
2022
|
-
});
|
|
2023
|
-
const [currentPie, setCurrentPie] = useState("0");
|
|
2024
|
-
const chartNames = charts.map((piece) => {
|
|
2025
|
-
return piece.name;
|
|
2026
|
-
});
|
|
2027
|
-
const steps = useMemo(
|
|
2028
|
-
() => {
|
|
2029
|
-
var _a3;
|
|
2030
|
-
return calculateWaterfallSteps({
|
|
2031
|
-
data: arrayOrArray(chart.dataSets.data)[currentPie].sets,
|
|
2032
|
-
xAccessor: getXValue,
|
|
2033
|
-
yAccessor: getYValue,
|
|
2034
|
-
showFinal: (_a3 = chart.showTotal) != null ? _a3 : true,
|
|
2035
|
-
colors: waterfallColors
|
|
2036
|
-
});
|
|
2037
|
-
},
|
|
2038
|
-
[chart.dataSets.data, chart.showTotal, currentPie, waterfallColors]
|
|
2039
|
-
);
|
|
2040
|
-
const padding = 0.2;
|
|
2041
|
-
const xScale = scaleBand({
|
|
2042
|
-
domain: steps.map((step) => step.x),
|
|
2043
|
-
padding,
|
|
2044
|
-
range: [0, innerWidth]
|
|
2045
|
-
});
|
|
2046
|
-
const yDomain = useMemo(() => {
|
|
2047
|
-
const values = steps.flatMap((step) => [step.start, step.end]);
|
|
2048
|
-
const [min, max] = extent(values);
|
|
2049
|
-
return min != null && max != null ? [min - 5, max + 5] : void 0;
|
|
2050
|
-
}, [steps]);
|
|
2051
|
-
const yScale = scaleLinear({
|
|
2052
|
-
domain: yDomain,
|
|
2053
|
-
nice: true,
|
|
2054
|
-
range: [innerHeight, 0]
|
|
2055
|
-
});
|
|
2056
|
-
const id = useMemo(() => `VerticalBars${uniqueId()}`, []);
|
|
2057
|
-
useLayoutEffect(() => {
|
|
2058
|
-
document.querySelectorAll(`#${id} .tickLabel`).forEach((current) => {
|
|
2059
|
-
const width = current.getBoundingClientRect().width;
|
|
2060
|
-
current.style.transformOrigin = current.getAttribute("x") + "px 14px";
|
|
2061
|
-
current.style.transform = `rotate(25deg) translateX(${width / 2}px)`;
|
|
2062
|
-
});
|
|
2063
|
-
});
|
|
2064
|
-
const { boxRef, elementRef } = usePanAndZoom(
|
|
2065
|
-
void 0,
|
|
2066
|
-
!allowZoom
|
|
2067
|
-
);
|
|
2068
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2069
|
-
charts.length > 1 && /* @__PURE__ */ jsx(Box, { className: "chart__combo__wrapper", children: /* @__PURE__ */ jsx(
|
|
2070
|
-
ChartSelector,
|
|
2071
|
-
{
|
|
2072
|
-
chartId,
|
|
2073
|
-
pieces: chartNames,
|
|
2074
|
-
className: "chartSelectorCombo",
|
|
2075
|
-
current: currentPie,
|
|
2076
|
-
setCurrent: setCurrentPie
|
|
2077
|
-
}
|
|
2078
|
-
) }),
|
|
2079
|
-
/* @__PURE__ */ jsx(Box, { id, className, ref: boxRef, children: /* @__PURE__ */ jsx(
|
|
2080
|
-
"svg",
|
|
2081
|
-
{
|
|
2082
|
-
height: chart.ratio.height,
|
|
2083
|
-
width: chart.ratio.width,
|
|
2084
|
-
ref: elementRef,
|
|
2085
|
-
children: /* @__PURE__ */ jsxs(Group, { left: effectiveMargin.left, top: effectiveMargin.top, children: [
|
|
2086
|
-
/* @__PURE__ */ jsx(GridRows, { scale: yScale, width: innerWidth, strokeDasharray: "5" }),
|
|
2087
|
-
steps.map((step, index) => {
|
|
2088
|
-
var _a3;
|
|
2089
|
-
const x = xScale(step.x);
|
|
2090
|
-
const y = yScale(Math.max(step.start, step.end));
|
|
2091
|
-
if (x == null || y == null) {
|
|
2092
|
-
return null;
|
|
2093
|
-
}
|
|
2094
|
-
const barHeight = Math.abs(yScale(step.start) - yScale(step.end));
|
|
2095
|
-
const isLast = index === steps.length - 1;
|
|
2096
|
-
const linePadding = 2;
|
|
2097
|
-
const x1 = x + xScale.bandwidth() + linePadding;
|
|
2098
|
-
const x2 = x + xScale.bandwidth() / (1 - padding) - linePadding;
|
|
2099
|
-
const lineY = step.end < step.start ? y + barHeight : y;
|
|
2100
|
-
const labelOffset = 10;
|
|
2101
|
-
const labelY = yScale(step.end) + (step.y < 0 ? labelOffset : -labelOffset);
|
|
2102
|
-
let currentYValue = 0;
|
|
2103
|
-
steps.filter((_, i) => {
|
|
2104
|
-
var _a4;
|
|
2105
|
-
if (((_a4 = chart.showTotal) != null ? _a4 : true) && !steps[i + 1]) {
|
|
2106
|
-
return false;
|
|
2107
|
-
}
|
|
2108
|
-
return i <= index;
|
|
2109
|
-
}).forEach((step2) => {
|
|
2110
|
-
currentYValue += Number(step2.y);
|
|
2111
|
-
});
|
|
2112
|
-
return /* @__PURE__ */ jsx(
|
|
2113
|
-
WaterfallBar,
|
|
2114
|
-
{
|
|
2115
|
-
chart,
|
|
2116
|
-
columnName: chartNames[currentPie],
|
|
2117
|
-
fill: step.color,
|
|
2118
|
-
height: barHeight,
|
|
2119
|
-
isLast,
|
|
2120
|
-
lineY,
|
|
2121
|
-
step,
|
|
2122
|
-
stroke: waterfallColors.stepConnector,
|
|
2123
|
-
strokeDashArray: 2,
|
|
2124
|
-
textContent: ((_a3 = chart.showTotal) != null ? _a3 : true) ? step.y : currentYValue,
|
|
2125
|
-
textX: x + xScale.bandwidth() / 2,
|
|
2126
|
-
textY: labelY + 5,
|
|
2127
|
-
width: xScale.bandwidth(),
|
|
2128
|
-
x,
|
|
2129
|
-
y,
|
|
2130
|
-
x1,
|
|
2131
|
-
x2
|
|
2132
|
-
},
|
|
2133
|
-
index
|
|
2134
|
-
);
|
|
2135
|
-
}),
|
|
2136
|
-
/* @__PURE__ */ jsx(
|
|
2137
|
-
AxisLeft,
|
|
2138
|
-
{
|
|
2139
|
-
label: "",
|
|
2140
|
-
scale: yScale,
|
|
2141
|
-
hideAxisLine: true,
|
|
2142
|
-
hideTicks: true,
|
|
2143
|
-
tickLabelProps: () => ({
|
|
2144
|
-
textAnchor: "end",
|
|
2145
|
-
verticalAnchor: "middle"
|
|
2146
|
-
})
|
|
2147
|
-
}
|
|
2148
|
-
),
|
|
2149
|
-
/* @__PURE__ */ jsx(
|
|
2150
|
-
AxisBottom,
|
|
2151
|
-
{
|
|
2152
|
-
scale: xScale,
|
|
2153
|
-
top: innerHeight,
|
|
2154
|
-
tickLabelProps: () => ({
|
|
2155
|
-
textAnchor: "middle",
|
|
2156
|
-
verticalAnchor: "middle",
|
|
2157
|
-
className: "tickLabel"
|
|
2158
|
-
})
|
|
2159
|
-
}
|
|
2160
|
-
)
|
|
2161
|
-
] })
|
|
2162
|
-
}
|
|
2163
|
-
) }),
|
|
2164
|
-
/* @__PURE__ */ jsx(
|
|
2165
|
-
LegendContainer,
|
|
2166
|
-
{
|
|
2167
|
-
id: chartId,
|
|
2168
|
-
avoidEvent: true,
|
|
2169
|
-
references: [
|
|
2170
|
-
{
|
|
2171
|
-
title: arrayOrArray(chart.dataSets.data)[currentPie].name,
|
|
2172
|
-
color: "transparent"
|
|
2173
|
-
}
|
|
2174
|
-
]
|
|
2175
|
-
}
|
|
2176
|
-
)
|
|
2177
|
-
] });
|
|
2178
|
-
};
|
|
2179
|
-
|
|
2180
|
-
var __defProp$1 = Object.defineProperty;
|
|
2181
|
-
var __defProps$1 = Object.defineProperties;
|
|
2182
|
-
var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
|
|
2183
|
-
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
|
|
2184
|
-
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
|
|
2185
|
-
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
|
|
2186
|
-
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2187
|
-
var __spreadValues$1 = (a, b) => {
|
|
2188
|
-
for (var prop in b || (b = {}))
|
|
2189
|
-
if (__hasOwnProp$1.call(b, prop))
|
|
2190
|
-
__defNormalProp$1(a, prop, b[prop]);
|
|
2191
|
-
if (__getOwnPropSymbols$1)
|
|
2192
|
-
for (var prop of __getOwnPropSymbols$1(b)) {
|
|
2193
|
-
if (__propIsEnum$1.call(b, prop))
|
|
2194
|
-
__defNormalProp$1(a, prop, b[prop]);
|
|
2195
|
-
}
|
|
2196
|
-
return a;
|
|
2197
|
-
};
|
|
2198
|
-
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
2199
|
-
const frontColor = "hsl(196, 37%, 13%)";
|
|
2200
|
-
function useMultipleRefs(...refs) {
|
|
2201
|
-
return React.useCallback(
|
|
2202
|
-
function setRef(element) {
|
|
2203
|
-
refs.forEach((current) => {
|
|
2204
|
-
if (current)
|
|
2205
|
-
current.current = element;
|
|
2206
|
-
});
|
|
2207
|
-
},
|
|
2208
|
-
[refs]
|
|
2209
|
-
);
|
|
2210
|
-
}
|
|
2211
|
-
const [, chartMethods, ChartRenderer] = makeImperativeComponent()({
|
|
2212
|
-
Component: makeStyledComponent(
|
|
2213
|
-
"ChartRenderer",
|
|
2214
|
-
"layout.charts",
|
|
2215
|
-
{
|
|
2216
|
-
red: {
|
|
2217
|
-
schema: "schemas.red"
|
|
2218
|
-
},
|
|
2219
|
-
orange: {
|
|
2220
|
-
schema: "schemas.orange"
|
|
2221
|
-
},
|
|
2222
|
-
green: {
|
|
2223
|
-
schema: "schemas.green"
|
|
2224
|
-
},
|
|
2225
|
-
blue: {
|
|
2226
|
-
schema: "schemas.blue"
|
|
2227
|
-
},
|
|
2228
|
-
violet: {
|
|
2229
|
-
schema: "schemas.violet"
|
|
2230
|
-
},
|
|
2231
|
-
turquoise: {
|
|
2232
|
-
schema: "schemas.turquoise"
|
|
2233
|
-
},
|
|
2234
|
-
yellow: {
|
|
2235
|
-
schema: "schemas.yellow"
|
|
2236
|
-
},
|
|
2237
|
-
grey: {
|
|
2238
|
-
schema: "schemas.grey"
|
|
2239
|
-
},
|
|
2240
|
-
ocean: {
|
|
2241
|
-
schema: "schemas.ocean"
|
|
2242
|
-
},
|
|
2243
|
-
sunset: {
|
|
2244
|
-
schema: "schemas.sunset"
|
|
2245
|
-
},
|
|
2246
|
-
common: {
|
|
2247
|
-
axis: {
|
|
2248
|
-
stroke: frontColor,
|
|
2249
|
-
title: frontColor
|
|
2250
|
-
},
|
|
2251
|
-
schema: frontColor,
|
|
2252
|
-
background: "hsl(200deg 20% 98%)",
|
|
2253
|
-
grid: {
|
|
2254
|
-
stroke: frontColor,
|
|
2255
|
-
opacity: "0.1"
|
|
2256
|
-
},
|
|
2257
|
-
toolTip: {
|
|
2258
|
-
backgroundColor: "rgb(232, 241, 255)",
|
|
2259
|
-
border: "1px solid #07c",
|
|
2260
|
-
color: frontColor,
|
|
2261
|
-
padding: ".3rem .5rem",
|
|
2262
|
-
borderRadius: "3px",
|
|
2263
|
-
fontSize: "18px",
|
|
2264
|
-
boxShadow: "0 1px 2px rgba(33,33,33,0.2)",
|
|
2265
|
-
lineHeight: "1em"
|
|
2266
|
-
}
|
|
2267
|
-
},
|
|
2268
|
-
".legendContainer": {
|
|
2269
|
-
display: "flex",
|
|
2270
|
-
flexDirection: "row",
|
|
2271
|
-
gap: spacing(3),
|
|
2272
|
-
flexWrap: "wrap"
|
|
2273
|
-
},
|
|
2274
|
-
".chart__combo__wrapper": {
|
|
2275
|
-
position: "absolute"
|
|
2276
|
-
}
|
|
2277
|
-
},
|
|
2278
|
-
// eslint-disable-next-line react/display-name
|
|
2279
|
-
React.forwardRef(
|
|
2280
|
-
({
|
|
2281
|
-
currentChart,
|
|
2282
|
-
chartId,
|
|
2283
|
-
allowZoom
|
|
2284
|
-
}, ref) => {
|
|
2285
|
-
const innerRef = React.useRef(null);
|
|
2286
|
-
const setRefs = useMultipleRefs(
|
|
2287
|
-
ref,
|
|
2288
|
-
innerRef
|
|
2289
|
-
);
|
|
2290
|
-
const contextValue = useMemo(() => ({ chartId }), [chartId]);
|
|
2291
|
-
const CurrentChart = getIndex(
|
|
2292
|
-
[PieChart, HorizontalBars, VerticalBars, LineChart, WaterfallBars],
|
|
2293
|
-
[
|
|
2294
|
-
currentChart.chartType === "pie2D",
|
|
2295
|
-
currentChart.chartType === "barH2D",
|
|
2296
|
-
currentChart.chartType === "barV2D",
|
|
2297
|
-
currentChart.chartType === "linear",
|
|
2298
|
-
currentChart.chartType === "waterfall"
|
|
2299
|
-
],
|
|
2300
|
-
0
|
|
2301
|
-
);
|
|
2302
|
-
return /* @__PURE__ */ jsx(ChartContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
2303
|
-
Box,
|
|
2304
|
-
__spreadProps$1(__spreadValues$1({
|
|
2305
|
-
ref: setRefs,
|
|
2306
|
-
className: "chart__chartRenderer"
|
|
2307
|
-
}, getVariant("layout.charts")), {
|
|
2308
|
-
children: /* @__PURE__ */ jsx(
|
|
2309
|
-
CurrentChart,
|
|
2310
|
-
{
|
|
2311
|
-
chart: currentChart,
|
|
2312
|
-
chartId,
|
|
2313
|
-
parentRef: innerRef,
|
|
2314
|
-
allowZoom
|
|
2315
|
-
}
|
|
2316
|
-
)
|
|
2317
|
-
})
|
|
2318
|
-
) });
|
|
2319
|
-
}
|
|
2320
|
-
),
|
|
2321
|
-
true
|
|
2322
|
-
)
|
|
2323
|
-
});
|
|
2324
|
-
|
|
2325
|
-
var __defProp = Object.defineProperty;
|
|
2326
|
-
var __defProps = Object.defineProperties;
|
|
2327
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
2328
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
2329
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
2330
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
2331
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
2332
|
-
var __spreadValues = (a, b) => {
|
|
2333
|
-
for (var prop in b || (b = {}))
|
|
2334
|
-
if (__hasOwnProp.call(b, prop))
|
|
2335
|
-
__defNormalProp(a, prop, b[prop]);
|
|
2336
|
-
if (__getOwnPropSymbols)
|
|
2337
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
2338
|
-
if (__propIsEnum.call(b, prop))
|
|
2339
|
-
__defNormalProp(a, prop, b[prop]);
|
|
2340
|
-
}
|
|
2341
|
-
return a;
|
|
2342
|
-
};
|
|
2343
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
2344
|
-
const START_ANGLE = 0;
|
|
2345
|
-
const END_ANGLE = 360;
|
|
2346
|
-
const TLight = ({
|
|
2347
|
-
addBorder = false,
|
|
2348
|
-
colorRanges,
|
|
2349
|
-
maxValue,
|
|
2350
|
-
minValue,
|
|
2351
|
-
currentValue,
|
|
2352
|
-
height,
|
|
2353
|
-
valueRanges,
|
|
2354
|
-
width,
|
|
2355
|
-
currentValueColor,
|
|
2356
|
-
currentValueFontSize
|
|
2357
|
-
}) => {
|
|
2358
|
-
const value = currentValue;
|
|
2359
|
-
const diameter = Math.min(height, width);
|
|
2360
|
-
const domainMax = maxValue != null ? maxValue : valueRanges[valueRanges.length - 1];
|
|
2361
|
-
const domainMin = minValue != null ? minValue : valueRanges[0];
|
|
2362
|
-
const gauge = useGauge({
|
|
2363
|
-
domain: [domainMin, domainMax],
|
|
2364
|
-
startAngle: START_ANGLE,
|
|
2365
|
-
endAngle: END_ANGLE,
|
|
2366
|
-
numTicks: 0,
|
|
2367
|
-
diameter
|
|
2368
|
-
});
|
|
2369
|
-
function getColor(value2) {
|
|
2370
|
-
var _a;
|
|
2371
|
-
const index = valueRanges.findIndex((range) => value2 < range);
|
|
2372
|
-
if (index === -1) {
|
|
2373
|
-
return colorRanges[0];
|
|
2374
|
-
}
|
|
2375
|
-
return (_a = colorRanges[index - 1]) != null ? _a : colorRanges[index];
|
|
2376
|
-
}
|
|
2377
|
-
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs("svg", __spreadProps(__spreadValues({}, gauge.getSVGProps()), { viewBox: "-325 -325 600 600", children: [
|
|
2378
|
-
/* @__PURE__ */ jsx("g", { id: "arcs", children: /* @__PURE__ */ jsx(
|
|
2379
|
-
"path",
|
|
2380
|
-
__spreadProps(__spreadValues({}, gauge.getArcProps({
|
|
2381
|
-
offset: 20,
|
|
2382
|
-
startAngle: START_ANGLE,
|
|
2383
|
-
endAngle: END_ANGLE
|
|
2384
|
-
})), {
|
|
2385
|
-
stroke: addBorder ? "black" : "transparent",
|
|
2386
|
-
fill: getColor(value),
|
|
2387
|
-
strokeLinecap: "round",
|
|
2388
|
-
strokeWidth: 5
|
|
2389
|
-
})
|
|
2390
|
-
) }),
|
|
2391
|
-
/* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx(
|
|
2392
|
-
"text",
|
|
2393
|
-
{
|
|
2394
|
-
textAnchor: "middle",
|
|
2395
|
-
style: { fontSize: `${currentValueFontSize != null ? currentValueFontSize : 100}px` },
|
|
2396
|
-
alignmentBaseline: "central",
|
|
2397
|
-
fill: currentValueColor,
|
|
2398
|
-
children: value
|
|
2399
|
-
}
|
|
2400
|
-
) })
|
|
2401
|
-
] })) });
|
|
2402
|
-
};
|
|
2403
|
-
|
|
2404
|
-
const WidgetContainer = () => {
|
|
2405
|
-
const mockData = {
|
|
2406
|
-
addBorder: true,
|
|
2407
|
-
backgColor: "white",
|
|
2408
|
-
currentValue: 1010,
|
|
2409
|
-
height: 400,
|
|
2410
|
-
width: 400,
|
|
2411
|
-
maxValue: 1050,
|
|
2412
|
-
minValue: 1e3,
|
|
2413
|
-
noValueColor: "",
|
|
2414
|
-
pointerColor: "blue",
|
|
2415
|
-
ringAnchor: 5,
|
|
2416
|
-
scaleFontSize: 20,
|
|
2417
|
-
valueColor: "darkblue",
|
|
2418
|
-
valueDecimals: 1,
|
|
2419
|
-
valueFontSize: 50,
|
|
2420
|
-
valueType: "",
|
|
2421
|
-
widKpiType: 0,
|
|
2422
|
-
zones: [
|
|
2423
|
-
{
|
|
2424
|
-
color: "blue",
|
|
2425
|
-
maximum: 1020,
|
|
2426
|
-
minimum: 1e3,
|
|
2427
|
-
transparency: 20
|
|
2428
|
-
},
|
|
2429
|
-
{
|
|
2430
|
-
color: "purple",
|
|
2431
|
-
maximum: 1040,
|
|
2432
|
-
minimum: 1020,
|
|
2433
|
-
transparency: 50
|
|
2434
|
-
},
|
|
2435
|
-
{
|
|
2436
|
-
color: "red",
|
|
2437
|
-
maximum: 1050,
|
|
2438
|
-
minimum: 1040,
|
|
2439
|
-
transparency: 0
|
|
2440
|
-
}
|
|
2441
|
-
]
|
|
2442
|
-
};
|
|
2443
|
-
const valueRanges = Array.from(
|
|
2444
|
-
new Set(
|
|
2445
|
-
arrayOrArray(mockData.zones).map((zone) => {
|
|
2446
|
-
return [zone.minimum, zone.maximum];
|
|
2447
|
-
}).flat().sort((a, b) => a - b)
|
|
2448
|
-
)
|
|
2449
|
-
);
|
|
2450
|
-
const colorRanges = arrayOrArray(mockData.zones).map((zone) => {
|
|
2451
|
-
return tinycolor(zone.color).setAlpha(1 - zone.transparency / 100).toPercentageRgbString();
|
|
2452
|
-
}).flat();
|
|
2453
|
-
return /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(
|
|
2454
|
-
TLight,
|
|
2455
|
-
{
|
|
2456
|
-
addBorder: mockData.addBorder,
|
|
2457
|
-
backgroundColor: mockData.backgColor,
|
|
2458
|
-
colorRanges,
|
|
2459
|
-
currentValue: mockData.currentValue,
|
|
2460
|
-
decimals: mockData.valueDecimals,
|
|
2461
|
-
currentValueColor: mockData.valueColor,
|
|
2462
|
-
currentValueFontSize: mockData.valueFontSize,
|
|
2463
|
-
height: mockData.height,
|
|
2464
|
-
maxValue: mockData.maxValue,
|
|
2465
|
-
minValue: mockData.minValue,
|
|
2466
|
-
pointerColor: mockData.pointerColor,
|
|
2467
|
-
scaleValuesSize: mockData.scaleFontSize,
|
|
2468
|
-
valueRanges,
|
|
2469
|
-
width: mockData.width
|
|
2470
|
-
}
|
|
2471
|
-
) });
|
|
2472
|
-
};
|
|
2473
|
-
|
|
2474
|
-
export { ChartRenderer, WidgetContainer };
|
|
1
|
+
import{jsx as l,jsxs as P,Fragment as q}from"react/jsx-runtime";import de,{createContext as dt,useContext as te,useState as H,useMemo as B,useLayoutEffect as me,useEffect as Ee,useRef as mt}from"react";import{Box as D,Select as ut}from"theme-ui";import{ThemeProviderContext as pt,spacing as je,makeStyledComponent as gt,getVariant as ft}from"@apia/theme";import{uniqueId as ue}from"lodash";import{makeImperativeComponent as _e,arrayOrArray as p,useImperativeComponentEvents as re,getValueByPath as yt,usePanAndZoom as ae,usePrevious as vt,getIndex as xt}from"@apia/util";import{scaleBand as oe,scaleLog as Ce,scaleLinear as pe,scaleOrdinal as Oe}from"@visx/scale";import{Grid as Ne}from"@visx/visx";import{Group as Q}from"@visx/group";import{BarGroupHorizontal as bt,BarGroup as wt,LinePath as $t,Line as kt}from"@visx/shape";import{AxisLeft as ge,AxisBottom as fe}from"@visx/axis";import{usePanelParametersSelector as Le}from"@apia/dashboard";import W from"tinycolor2";import{localPoint as U}from"@visx/event";import{SimpleButton as St,useTooltip as le}from"@apia/components";import{icons as Ct}from"@apia/icons";import Ve from"@visx/shape/lib/shapes/Pie";import{min as ye,max as Re,extent as Ot}from"d3-array";import*as Nt from"@visx/curve";import{Fragment as Pt}from"theme-ui/jsx-runtime";import{GridRows as At}from"@visx/grid";import{useGauge as Tt}from"use-gauge";function ve(e={left:100,right:50,top:50,bottom:70}){return typeof e=="number"?{left:e,right:e,top:e,bottom:e}:e}const ne=dt({}),Mt=({groupId:e,title:t,color:r,className:o,isHighlighted:a,isAnyHighlighted:s,avoidEvent:i})=>{const{chartId:d}=te(ne);return l(St,{variant:"icon-outline",className:`${o??""} ${a?"highlight":""}`,iconColor:r||"black",icon:r==="transparent"?void 0:Ct.SquareFilled,sx:{opacity:s&&!a?"0.15":"1"},onMouseEnter:()=>{i||ot(d,"highlight",e)},onMouseLeave:()=>{i||ot(d,"highlight","")},children:t})},[ee,,ie]=_e()({initialState:{highlightedBarGroup:""},methods:{highlight(e,t){e({highlightedBarGroup:t})}},Component:({references:e,containerClassName:t,highlightedBarGroup:r,avoidEvent:o})=>l(D,{className:t,children:e.map(a=>l(Mt,{isHighlighted:a.title===r,isAnyHighlighted:r!=="",groupId:a.title,color:a.color,title:a.title,avoidEvent:o??!1},a.title))})}),Et=({bar:e,barGroup:t,chart:r,parsedData:o,isSingle:a,effectiveMargin:s,setsWithColor:i})=>{var d;const g=p(r.dataSets.data)[e.index],f=p(g?.sets)[t.index],y=(d=i.find(u=>u.columnName===g.name&&u.key===f.key))==null?void 0:d.color,[v,b]=H(!1),[k,S]=H(!1),{open:V}=le({children:P(q,{children:[l("div",{style:{color:y},children:l("strong",{children:o[t.index].columnName})}),r.showValues&&l("div",{children:e.value}),l("div",{children:e.key})]})});re({highlight(u){u.split(" - ").length===1?(b(u===e.key),S(u!==e.key&&u!=="")):u.split(" - ").length===2&&(b(u.split(" - ")[0]===e.key&&u.split(" - ")[1]===f.key),S(u.split(" - ")[0]!==e.key&&u.split(" - ")[0]!==""))}});const{chartId:x}=te(ne);return P("g",{children:[P("text",{x:e.x+5,y:e.y-5,width:e.width,height:e.height,textAnchor:"start",style:{display:v?"block":"none",opacity:v?1:0,transition:"opacity 500ms"},children:[e.value," - ",o[t.index].columnName]}),l(D,{as:"rect",className:"chart__barRect",sx:B(()=>({fill:k?`#${W(y).desaturate(70).toHex()}`:y,"&:hover":{fill:`#${W(y).saturate(25).toHex()}`},transition:"fill 500ms, opacity 500ms",x:e.x,y:e.y,width:e.width-s.left,opacity:k&&!v?.15:1,height:e.height>0?e.height:0}),[e.height,e.width,e.x,e.y,y,s.left,k,v]),onMouseEnter:u=>{var N,L,A;a||ee.highlight(x,e.key),(N=u.target.classList)==null||N.add("over"),(L=U(u))==null||L.x,(A=U(u))==null||A.y,V({attachToElement:()=>u.target,attachToElementAnchorPoint:"center"})},onMouseLeave:u=>{var N;a||ee.highlight(x,""),(N=u.target.classList)==null||N.remove("over")},children:l("animate",{attributeName:"width",from:0,to:e.width,dur:"0.5s",calcMode:"paced",keySplines:"0.5 0 0.5 1;",keyTimes:"0; 1"})})]})};function ce(e,t,r=!1){const o=e.length;let a=0,s="";if(r)e[t]?s=e[t]:s=W(e[t%o]).toHex();else if(e[t])s=e[t];else{let i=t;for(;i>=o;)i=t/o,a++;s=W(e[t%o]).desaturate(a*5).toHex()}return s}var jt=Object.defineProperty,Ie=Object.getOwnPropertySymbols,_t=Object.prototype.hasOwnProperty,Lt=Object.prototype.propertyIsEnumerable,Be=(e,t,r)=>t in e?jt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,De=(e,t)=>{for(var r in t||(t={}))_t.call(t,r)&&Be(e,r,t[r]);if(Ie)for(var r of Ie(t))Lt.call(t,r)&&Be(e,r,t[r]);return e};function xe(e){var t,r,o;const a=te(pt);a.layout||console.error("The layout property is missing in the current theme");const s=(r=(t=a.layout)==null?void 0:t.charts)!=null?r:{},i=s.common,d={schema:yt(a.colors,(o=s[e||"blue"])==null?void 0:o.schema)};return De(De({},i),d)}var Vt=Object.defineProperty,Rt=Object.defineProperties,It=Object.getOwnPropertyDescriptors,We=Object.getOwnPropertySymbols,Bt=Object.prototype.hasOwnProperty,Dt=Object.prototype.propertyIsEnumerable,He=(e,t,r)=>t in e?Vt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,be=(e,t)=>{for(var r in t||(t={}))Bt.call(t,r)&&He(e,r,t[r]);if(We)for(var r of We(t))Dt.call(t,r)&&He(e,r,t[r]);return e},we=(e,t)=>Rt(e,It(t));function Wt({width:e,height:t,maxWidth:r}){if(e<=r)return{width:e,height:t};const o=e/t,a=r,s=Math.floor(a/o);return{width:a,height:s}}const Ge=e=>e.columnName,Ht=({margin:e={top:20,left:50,bottom:150,right:20},chart:t,className:r,chartId:o,outerClassName:a,allowZoom:s})=>{var i;const d=ve(e);let g=t.ratio.width+(-d.left-d.right)/2,f=t.ratio.height+(-d.top-d.bottom)/2;if(g>t.ratio.maxWidth){const c=Wt({height:f,width:g,maxWidth:t.ratio.maxWidth});g=c.width,f=c.height}const y=p((i=t.dataSets)==null?void 0:i.data).filter(c=>!!c.sets).map(c=>we(be({},c),{sets:c.sets})),v=p(y[0].sets).map(c=>c.key),b=y.map(c=>c.name),k=v.map(c=>y.reduce((n,$)=>we(be({},n),{[$.name]:p($.sets).filter(j=>j.key===c)[0].value}),{columnName:c})),S=oe({range:[typeof d=="number"?d:d.top,f],domain:k.map(Ge),padding:.2}),V=oe({domain:b,range:[0,S.bandwidth()]}),x=Ce({range:[typeof d=="number"?d:d.left,g],domain:[1,Math.max(...k.map(c=>Math.max(...b.map(n=>Number(c[n])))))],base:10}),u=pe({range:[typeof d=="number"?d:d.left,g],domain:[0,Math.max(...k.map(c=>Math.max(...b.map(n=>Number(c[n])))))]}),N=Oe({domain:b,range:y.map(c=>c.color)}),L=Le(c=>c).PRMT_CHART_SCALE==="0",A=B(()=>L?x:u,[L,u,x]),Y=B(()=>`VerticalBars${ue()}`,[]);me(()=>{document.querySelectorAll(`#${Y} .__${o??a}`).forEach(c=>{const n=c.getBoundingClientRect().width;c.style.transformOrigin=c.getAttribute("x")+"px 14px",c.style.transform=`rotate(15deg) translateX(${n/2}px)`})});const R=xe(t.colorSchema),{boxRef:K,elementRef:w}=ae(void 0,!s),T=p(t.dataSets.data).map((c,n)=>{const $=p(t.dataSets.data).length===1,j=c.color!==""&&c.color!==void 0?c.color:p(R.schema).length>0?ce(p(R.schema),n,$):"",E=[];return p(c.sets).forEach(h=>{h.color!==""&&h.color!==void 0?E.push(we(be({},h),{columnName:c.name})):E.push(we(be({},h),{color:j,columnName:c.name}))}),E}),m=T.map(c=>{var n;return{color:(n=c[0].color)!=null?n:"",title:c[0].columnName}});return p(t.dataSets.data).map(c=>{const n=[];return p(c.sets).forEach($=>{$.color!==""&&$.color!==void 0&&n.push({color:$.color,title:c.name+" - "+$.key})}),n}).flat().forEach(c=>m.push(c)),P(q,{children:[l(D,{ref:K,id:Y,className:`${a??""} ${o} ${t.title}`,sx:de.useMemo(()=>({[`.__${o??a}`]:{transform:"rotate(45deg)",transformOrigin:"attr(x) 18px"},overflow:"auto",position:"relative",height:`${t.ratio.height}px`,width:`${t.ratio.width}px`}),[t.ratio.height,t.ratio.width,o,a]),children:P("svg",{ref:w,className:`_${o} ${r||""} chart__svg`,height:t.ratio.height,width:t.ratio.width,style:{position:"absolute"},children:[t.showGrid&&l(Ne.Grid,{xScale:A,yScale:S,left:0,width:g,height:f,numTicksRows:10,numTicksColumns:10,top:(typeof d=="number"?d:d.top)-20}),l(Q,{top:(typeof d=="number"?d:d.top)-20,left:d.left,children:l(bt,{data:k,keys:b,width:g,y0:Ge,y0Scale:S,y1Scale:V,xScale:A,color:N,children:c=>c.map(n=>l(Q,{top:n.y0,children:n.bars.map($=>{const j=`${n.index}-${$.index}-${$.key}`;return l(Et,{isSingle:n.bars.length===1,bar:$,barGroup:n,chart:t,parsedData:k,effectiveMargin:d,setsWithColor:T.flat()},j)})},`bar-group-${n.index}-${n.y0}`))})}),l(ge,{scale:S,left:d.left,label:t.chartType!=="pie2D"&&t.showAxisYTitle?t.axisYTitle:"",tickLabelProps:()=>({display:"none"})}),l(fe,{top:f,scale:A,label:t.chartType!=="pie2D"&&t.showAxisXTitle?t.axisXTitle:"",tickLabelProps:{className:"tickLabel"},labelOffset:50})]})}),m.length>1&&l(ie,{id:o,containerClassName:"legendContainer",references:m})]})},Gt=({arc:e,arcPath:t,chart:r,actualColor:o})=>{const[a,s]=H(!1),[i,d]=H(!1),{open:g}=le({children:P(q,{children:[l("div",{style:{color:`#${W(o).toHex()}`},children:l("strong",{children:e.data.key})}),r.showValues&&l("div",{children:`${e.value} ${e.data.percentage?"- "+e.data.percentage:""}${e.data.percentage?"%":""}`})]})});re({highlight(v){s(v===e.data.key),d(v!==e.data.key&&v!=="")}});const{chartId:f}=te(ne),y=e.data;return l("path",{style:B(()=>({"&:hover":{fill:`#${W(o).saturate(25).toHex()}`},transition:"fill 500ms, opacity 500ms"}),[o]),fill:i?`#${W(o).desaturate(70).toHex()}`:o,opacity:i&&!a?.15:1,d:t??"",onMouseEnter:v=>{var b,k,S;ee.highlight(f,e.data.key),(b=v.target.classList)==null||b.add("over"),(k=U(v))==null||k.x,(S=U(v))==null||S.y,g({attachToElement:()=>v.target,attachToElementAnchorPoint:"center"})},onMouseLeave:v=>{var b;ee.highlight(f,""),(b=v.target.classList)==null||b.remove("over")}},`arc-${y.key}-${y.value}`)};function Ye({chartId:e,pieces:t,className:r,current:o,setCurrent:a}){return P(ut,{sx:{width:"auto"},name:`chartSelector_${e}`,className:`chartSelector_${e} ${r??""}`,value:o??"0",onChange:s=>{s.preventDefault(),a(s.target.value)},children:[t.map((s,i)=>({label:s,value:`${i}`})).map(s=>l("option",{value:s.value,children:s.label},s.value))," "]})}const Yt=({arc:e,x:t,y:r,dy:o})=>{const[a,s]=H(!1);return re({highlight(i){s(i===e.data.key)}}),l("text",{textAnchor:"middle",style:{opacity:a?1:0,display:a?"block":"none",transition:"opacity 500ms"},x:t,y:r,dy:o,children:e.value})};var Xt=Object.defineProperty,zt=Object.defineProperties,Ft=Object.getOwnPropertyDescriptors,Xe=Object.getOwnPropertySymbols,qt=Object.prototype.hasOwnProperty,Zt=Object.prototype.propertyIsEnumerable,ze=(e,t,r)=>t in e?Xt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Kt=(e,t)=>{for(var r in t||(t={}))qt.call(t,r)&&ze(e,r,t[r]);if(Xe)for(var r of Xe(t))Zt.call(t,r)&&ze(e,r,t[r]);return e},Jt=(e,t)=>zt(e,Ft(t));function Qt({width:e,height:t,maxWidth:r}){if(e<=r)return{width:e,height:t};const o=e/t,a=r,s=Math.floor(a/o);return{width:a,height:s}}const Ut=({chart:e,className:t,chartId:r,allowZoom:o})=>{var a;const[s,i]=H({});let d=e.ratio.width>e.ratio.height?e.ratio.width:e.ratio.height,g=e.ratio.width>e.ratio.height?e.ratio.width:e.ratio.height;if(d>e.ratio.maxWidth){const w=Qt({height:g,width:d,maxWidth:e.ratio.maxWidth});d=w.width,g=w.height}const f=p((a=e.dataSets)==null?void 0:a.data).filter(w=>!!w.sets).map(w=>Jt(Kt({},w),{coordinate:w.sets})),[y,v]=H("0");Ee(()=>{i(f[y??0])},[y]);const b=B(()=>g/2.5,[g]),k=B(()=>d/2.5,[d]),S=b,V=k,x=w=>Number(w.value)===0&&f.length===1&&p(f.map(T=>T.coordinate)[0]).length===1?100:Number(w.value),u=Math.min(g,d)/2.5,N=f.map(w=>w.name),L=xe(e.colorSchema).schema,A=p(p(e.dataSets.data)[0].sets).map(w=>w.key).map((w,T)=>({title:w,color:ce(p(L),T)})),{boxRef:Y,elementRef:R}=ae(void 0,!o),K=mt([]);return P(q,{children:[f.length>1&&l(D,{className:"chart__combo__wrapper",children:l(Ye,{chartId:r,pieces:N,className:"chartSelectorCombo",current:y,setCurrent:v})}),l(D,{ref:Y,className:`${t||""} ${r}`,sx:{textAlign:"center",pb:je(5)},children:l("svg",{ref:R,height:u*2,width:u*2,className:`_${r} chart__svg`,children:P(Q,{top:S??0,left:V??0,children:[l(Ve,{data:p(s.coordinate),pieValue:x,pieSort:null,outerRadius:u,children:w=>{const T=p(w.arcs).map(c=>w.path(c)),m=w.arcs.map(c=>{var n,$;const j=c.data,E=w.path(c);return l(Gt,{arc:c,arcPath:E,chart:e,actualColor:($=(n=A.find(h=>h.title===j.key))==null?void 0:n.color)!=null?$:""},`${j.key}_${j.value}`)});return K.current=T,m}}),l(Ve,{data:p(s.coordinate),pieValue:x,pieSort:null,outerRadius:u,children:w=>w.arcs.map(T=>{const m=T.data,c=(T.startAngle-Math.PI+T.endAngle)/2,n=Math.cos(c)*(u*.75),$=Math.sin(c)*(u*.75);return l("g",{children:l(Yt,{arc:T,chart:e,dy:"0.33em",x:n,y:$})},`arc-${m.key}-${m.value}`)})})]})})},s.name),A.length>1&&l(ie,{id:r,containerClassName:"legendContainer",references:A})]})},er=({bar:e,barGroup:t,chart:r,parsedData:o,isSingle:a,setsWithColor:s})=>{var i;const d=p(r.dataSets.data)[e.index],g=p(d?.sets)[t.index],f=(i=s.find(x=>x.columnName===d.name&&x.key===g.key))==null?void 0:i.color,[y,v]=H(!1),[b,k]=H(!1),{open:S}=le({children:P(q,{children:[l("div",{style:{color:f},children:l("strong",{children:o[t.index].columnName})}),r.showValues&&l("div",{children:e.value}),l("div",{children:e.key})]})});re({highlight(x){x.split(" - ").length===1?(v(x===e.key),k(x!==e.key&&x!=="")):x.split(" - ").length===2&&(v(x.split(" - ")[0]===e.key&&x.split(" - ")[1]===g.key),k(x.split(" - ")[0]!==e.key&&x.split(" - ")[0]!==""))}});const{chartId:V}=te(ne);return P("g",{children:[l("text",{x:e.x+e.width/2,y:e.y-5,width:e.width,height:e.height,textAnchor:"middle",style:{display:y?"block":"none",opacity:y?1:0,transition:"opacity 500ms"},children:e.value}),P(D,{as:"rect",className:"chart__barRect",sx:B(()=>({fill:b?`#${W(f).desaturate(70).toHex()}`:f,"&:hover":{fill:`#${W(f).saturate(25).toHex()}`},transition:"fill 500ms, opacity 500ms",x:e.x,y:e.y,width:e.width,opacity:b&&!y?.15:1,height:e.height>0?e.height:0}),[e.height,e.width,e.x,e.y,f,b,y]),onMouseEnter:x=>{var u,N,L;a||ee.highlight(V,e.key),(u=x.target.classList)==null||u.add("over"),(N=U(x))==null||N.x,(L=U(x))==null||L.y,S({attachToElement:()=>x.target,attachToElementAnchorPoint:"center"})},onMouseLeave:x=>{var u;a||ee.highlight(V,""),(u=x.target.classList)==null||u.remove("over")},children:[l("animate",{attributeName:"height",from:0,to:e.height,dur:"0.5s",calcMode:"paced",keySplines:"0.5 0 0.5 1;",keyTimes:"0; 1"}),l("animate",{attributeName:"y",from:e.y+e.height,to:e.y,dur:"0.5s",calcMode:"paced",keySplines:"0.5 0 0.5 1;",keyTimes:"0; 1"})]})]})};var tr=Object.defineProperty,rr=Object.defineProperties,ar=Object.getOwnPropertyDescriptors,Fe=Object.getOwnPropertySymbols,or=Object.prototype.hasOwnProperty,lr=Object.prototype.propertyIsEnumerable,qe=(e,t,r)=>t in e?tr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$e=(e,t)=>{for(var r in t||(t={}))or.call(t,r)&&qe(e,r,t[r]);if(Fe)for(var r of Fe(t))lr.call(t,r)&&qe(e,r,t[r]);return e},ke=(e,t)=>rr(e,ar(t));function nr({width:e,height:t,maxWidth:r}){if(e<=r)return{width:e,height:t};const o=e/t,a=r,s=Math.floor(a/o);return{width:a,height:s}}const Ze=e=>e.columnName,ir=({margin:e={top:20,left:100,bottom:150,right:20},chart:t,className:r,chartId:o,allowZoom:a})=>{var s;const i=ve(e);t.showAxisYTitle||(i.left=50);let d=t.ratio.width+(-i.left-i.right)/2,g=t.ratio.height+(-i.top-i.bottom)/2;if(d>t.ratio.maxWidth){const m=nr({height:g,width:d,maxWidth:t.ratio.maxWidth});d=m.width,g=m.height}const f=xe(t.colorSchema),y=p((s=t.dataSets)==null?void 0:s.data).filter(m=>!!m.sets).map(m=>ke($e({},m),{sets:m.sets})),v=p(y[0].sets).map(m=>m.key),b=y.map(m=>m.name),k=v.map(m=>y.reduce((c,n)=>ke($e({},c),{[n.name]:p(n.sets).filter($=>$.key===m)[0].value}),{columnName:m})),S=oe({range:[typeof i=="number"?i:i.left,d],domain:k.map(Ze),padding:.2}),V=oe({domain:b,range:[0,S.bandwidth()]}),x=Ce({range:[g,typeof i=="number"?i:i.top],domain:[1,Math.max(...k.map(m=>Math.max(...b.map(c=>Number(m[c])))))],base:10}),u=pe({range:[g,typeof i=="number"?i:i.top],domain:[0,Math.max(...k.map(m=>Math.max(...b.map(c=>Number(m[c])))))]}),N=Oe({domain:b,range:y.map(m=>m.color)}),L=Le(m=>m).PRMT_CHART_SCALE==="0",A=B(()=>L?x:u,[L,u,x]),Y=B(()=>`VerticalBars${ue()}`,[]);me(()=>{document.querySelectorAll(`#${Y} .tickLabel`).forEach(m=>{const c=m.getBoundingClientRect().width;m.style.transformOrigin=m.getAttribute("x")+"px 14px",m.style.transform=`rotate(25deg) translateX(${c/2}px)`})});const{boxRef:R,elementRef:K}=ae(void 0,!a),w=p(t.dataSets.data).map((m,c)=>{const n=p(t.dataSets.data).length===1,$=m.color!==""&&m.color!==void 0?m.color:p(f.schema).length>0?ce(p(f.schema),c,n):"",j=[];return p(m.sets).forEach(E=>{E.color!==""&&E.color!==void 0?j.push(ke($e({},E),{columnName:m.name})):j.push(ke($e({},E),{color:$,columnName:m.name}))}),j}),T=p(t.dataSets.data).map((m,c)=>{const n=p(t.dataSets.data).length===1;return{color:m.color!==""&&m.color!==void 0?m.color:p(f.schema).length>0?ce(p(f.schema),c,n):"",title:m.name}});return p(t.dataSets.data).map(m=>{const c=[];return p(m.sets).forEach(n=>{n.color!==""&&n.color!==void 0&&c.push({color:n.color,title:m.name+" - "+n.key})}),c}).flat().forEach(m=>T.push(m)),P(q,{children:[l(D,{ref:R,id:Y,className:`${r??""} ${t.title}`,sx:{overflow:"hidden"},children:P("svg",{ref:K,className:`_${o} chart__svg`,height:t.ratio.height,width:t.ratio.width,children:[t.showGrid&&l(Ne.Grid,{xScale:S,yScale:A,left:0,width:d,height:g,numTicksRows:10,numTicksColumns:10,top:(typeof i=="number"?i:i.top)-20}),l(Q,{top:(typeof i=="number"?i:i.top)-20,children:l(wt,{data:k,keys:b,height:g,x0:Ze,x0Scale:S,x1Scale:V,yScale:A,color:N,children:m=>m.map(c=>l(Q,{left:c.x0,children:c.bars.map(n=>{const $=`${c.index}-${n.index}-${n.key}`;return l(er,{isSingle:c.bars.length===1,bar:n,barGroup:c,chart:t,parsedData:k,setsWithColor:w.flat()},$)})},`bar-group-${c.index}-${c.x0}`))})}),l(ge,{scale:A,left:i.left,label:t.chartType!=="pie2D"&&t.showAxisYTitle?t.axisYTitle:""}),l(fe,{top:g,scale:S,label:t.chartType!=="pie2D"&&t.showAxisXTitle?t.axisXTitle:"",tickLabelProps:{className:"tickLabel"},labelOffset:50})]})}),T.length>1&&l(ie,{id:o,containerClassName:"legendContainer",references:T})]})},cr=({currentCircle:e,innerKey:t,cx:r,cy:o,color:a,setCurrentCircle:s})=>P(Pt,{children:[e.includes(t)&&l("circle",{r:6,cx:r,cy:o,stroke:`#${W(a).saturate(25).toHex()}`,fill:`#${W(a).saturate(25).toHex()}`}),l("circle",{r:3,cx:r,cy:o,stroke:`#${W(a).darken(15).toHex()}`,fill:`#${W(a).darken(15).toHex()}`}),l("circle",{r:10,cx:r,cy:o,stroke:"transparent",fill:"transparent",onMouseEnter:()=>{s([t])},onMouseLeave:()=>{s([])},style:{cursor:"pointer"}})]},t);var sr=Object.defineProperty,hr=Object.defineProperties,dr=Object.getOwnPropertyDescriptors,Ke=Object.getOwnPropertySymbols,mr=Object.prototype.hasOwnProperty,ur=Object.prototype.propertyIsEnumerable,Je=Math.pow,Qe=(e,t,r)=>t in e?sr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Pe=(e,t)=>{for(var r in t||(t={}))mr.call(t,r)&&Qe(e,r,t[r]);if(Ke)for(var r of Ke(t))ur.call(t,r)&&Qe(e,r,t[r]);return e},Ae=(e,t)=>hr(e,dr(t));function pr({width:e,height:t,maxWidth:r}){if(e<=r)return{width:e,height:t};const o=e/t,a=r,s=Math.floor(a/o);return{width:a,height:s}}function se(e){return e.key}function Z(e){return Number(e.value)}function gr(e){var t,r,o,a,s,i,d;const g=p((t=e.dataSets)==null?void 0:t.data),f=g.map(y=>y.sets).reduce((y,v)=>p(y).concat(v),[]);return{columns:g,xScale:Oe({domain:p(g[0].sets).map(se)}),yScale:pe({domain:[((r=ye(f,Z))!=null?r:0<0)&&(o=ye(f,Z))!=null?o:0,(a=Re(f,Z))!=null?a:1]}),yScaleLog:Ce({domain:[((s=ye(f,Z))!=null?s:1>0)&&(i=ye(f,Z))!=null?i:1,(d=Re(f,Z))!=null?d:10]})}}const fr=({chart:e,margin:t={top:20,left:100,bottom:150,right:70},chartId:r,allowZoom:o})=>{const a=ve(t);e.showAxisYTitle||(a.left=50);let s=e.ratio.width,i=e.ratio.height-(a.top+a.bottom)/2;if(s>e.ratio.maxWidth){const h=pr({height:i,width:s,maxWidth:e.ratio.maxWidth});s=h.width,i=h.height}const{columns:d,xScale:g,yScale:f,yScaleLog:y}=gr(e),v=xe(e.colorSchema),b=p(d[0].sets),k=d.map(h=>h.sets),S=s/b.length;g.range(b.map((h,C)=>C===0?a.left:C*S+a.left)),f.range([i-(a.top+a.bottom)/2,typeof a=="number"?a:a.top]),y.range([i,typeof a=="number"?a:a.top]);const[V,x]=H([]),u=B(()=>f,[f]),N=B(()=>`VerticalBars${ue()}`,[]);me(()=>{document.querySelectorAll(`#${N} .tickLabel`).forEach(h=>{const C=h.getBoundingClientRect().width;h.style.transformOrigin=h.getAttribute("x")+"px 14px",h.style.transform=`rotate(25deg) translateX(${C/2}px)`})});function L(h,C,_){return C.map((M,G)=>{const O=Math.floor(G/_),I=h[O];return Ae(Pe({},M),{columnName:I})})}const[A,Y]=H([]);Ee(()=>{const h=k.flat().map(M=>({xValue:M.key,yValue:M.value,x:g(se(M)),y:u(Z(M))})),C=d.map(M=>M.name),_=L(C,h,b.length);Y(_)},[]);const[R,K]=H([]),w=vt(R),T=p(e.dataSets.data).map((h,C)=>{const _=p(e.dataSets.data).length===1,M=h.color!==""&&h.color!==void 0?h.color:p(v.schema).length>0?ce(p(v.schema),C,_):"",G=[];return p(h.sets).forEach(O=>{O.color!==""&&O.color!==void 0?G.push(Ae(Pe({},O),{columnName:h.name})):G.push(Ae(Pe({},O),{color:M,columnName:h.name}))}),{returnColumnsArray:G,columnColor:M}}),m=T.map(h=>{var C;return{color:(C=h.columnColor)!=null?C:"",title:h.returnColumnsArray[0].columnName}});p(e.dataSets.data).map(h=>{const C=[];return p(h.sets).forEach(_=>{_.color!==""&&_.color!==void 0&&C.push({color:_.color,title:h.name+" - "+_.key})}),C}).flat().forEach(h=>m.push(h));const{open:c}=le({children:R.sort((h,C)=>Number(C.yValue)-Number(h.yValue)).map((h,C)=>{const _=m.some(M=>M.title===h.columnName+" - "+h.xValue);return P(D,{children:[l("div",{style:{color:m[m.findIndex(M=>M.title===(_?h.columnName+" - "+h.xValue:h.columnName))].color},children:l("strong",{children:h.columnName})}),e.showValues&&l("div",{children:h.yValue}),l("div",{children:h.xValue}),R[C+1]&&l("hr",{})]},`${h.columnName}_${h.xValue}_${h.yValue}`)})}),[n,$]=H("");re({highlight(h){h.split(" - ").length===1?$(h):h.split(" - ").length===2&&$(h.split(" - ")[0])}});const{boxRef:j,elementRef:E}=ae(void 0,!o);return P(q,{children:[l(D,{id:N,ref:j,children:P("svg",{ref:E,width:s,height:i,id:"LinesChart",className:`_${r} chart__svg`,onMouseMove:h=>{var C;const _=(C=E.current)==null?void 0:C.getBoundingClientRect();let M=h.clientX,G=h.clientY-(a.top+a.bottom)/2;_&&(M=h.clientX-_.left,G=h.clientY-_.top);const O=A.filter(I=>Math.sqrt(Je(I.x-M,2)+Je(I.y-G,2))<20);if(w.current&&O.length>0){const I=d.map(X=>{let z="";return O.forEach(F=>{X.name===F.columnName&&(z=F.columnName)}),z}).filter(X=>X!==""),J=b.findIndex(X=>X.key===O[0].xValue);if(I&&J!==void 0){const X=I.map(z=>`${z}${J}`);x([...X])}K(O),c({attachToElement:()=>h.target,attachToElementAnchorPoint:"center"})}else O.length===0&&x([])},children:[e.showGrid&&l(Ne.Grid,{top:(typeof a=="number"?a:a.top)-20,left:0,xScale:g,yScale:u,width:s,height:i,stroke:v.grid.stroke,strokeOpacity:v.grid.opacity}),d.map((h,C)=>{var _;const M=p(h.sets),G=(_=T.find(O=>O.returnColumnsArray[0].columnName===h.name))==null?void 0:_.columnColor;return P(Q,{top:(typeof a=="number"?a:a.top)-20,style:{opacity:n!==""&&n!==h.name?.15:1,transition:"opacity 500ms"},children:[l($t,{curve:Nt.curveMonotoneX,data:M,x:O=>{var I;return(I=g(se(O)))!=null?I:0},y:O=>{var I;return(I=u(Z(O)))!=null?I:0},stroke:G??"black",strokeWidth:2,strokeOpacity:1,shapeRendering:"geometricPrecision"}),M.map((O,I)=>{var J;const X=h.name+I.toString(),z=(J=T.map(F=>F.returnColumnsArray).flat().find(F=>F.columnName===h.name&&F.key===O.key))==null?void 0:J.color;return P("g",{children:[l("text",{x:g(se(O))+10,y:u(Z(O))-5,textAnchor:"middle",style:{display:n===h.name?"block":"none",opacity:n===h.name?1:0,transition:"opacity 500ms"},children:O.value}),l(cr,{color:z??"black",coordinate:O,currentCircle:V,cx:g(se(O)),cy:u(Z(O)),setCurrentCircle:x,innerKey:X,column:h})]},X)})]},`lines-${h.name+C.toString()}`)}),l(ge,{scale:u,left:a.left,label:e.chartType!=="pie2D"&&e.showAxisYTitle?e.axisYTitle:""}),l(fe,{top:i-(a.top+a.bottom)/2,scale:g,label:e.chartType!=="pie2D"&&e.showAxisXTitle?e.axisXTitle:"",tickLabelProps:{className:"tickLabel"},labelOffset:50})]})}),m.length>1&&l(ie,{id:r,containerClassName:"legendContainer",references:m})]})},yr=({width:e,height:t,x:r,y:o,fill:a,x1:s,lineY:i,x2:d,stroke:g,strokeDashArray:f,textX:y,textY:v,textContent:b,isLast:k,step:S,columnName:V,chart:x})=>{const{open:u}=le({children:P(q,{children:[l("div",{style:{color:S.color},children:l("strong",{children:V})}),x.showValues&&l("div",{children:S.y}),l("div",{children:S.x})]})});return P(q,{children:[l(D,{as:"rect",sx:B(()=>({width:`${e}px`,height:`${t}px`,x:`${r}px`,y:`${o}px`,fill:`${a}`,"&:hover":{fill:`#${W(a).saturate(25).toHex()}`},transition:"fill 500ms"}),[a,t,e,r,o]),onMouseEnter:N=>{u({attachToElement:()=>N.target,attachToElementAnchorPoint:"center"})},onMouseLeave:()=>{}}),!k&&l(kt,{x1:s,x2:d,y1:i,y2:i,stroke:g,strokeDasharray:f}),l("text",{textAnchor:"middle",x:y,y:v,children:b})]})};var vr=Object.defineProperty,xr=Object.defineProperties,br=Object.getOwnPropertyDescriptors,Se=Object.getOwnPropertySymbols,Ue=Object.prototype.hasOwnProperty,et=Object.prototype.propertyIsEnumerable,tt=(e,t,r)=>t in e?vr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,wr=(e,t)=>{for(var r in t||(t={}))Ue.call(t,r)&&tt(e,r,t[r]);if(Se)for(var r of Se(t))et.call(t,r)&&tt(e,r,t[r]);return e},$r=(e,t)=>xr(e,br(t)),kr=(e,t)=>{var r={};for(var o in e)Ue.call(e,o)&&t.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&Se)for(var o of Se(e))t.indexOf(o)<0&&et.call(e,o)&&(r[o]=e[o]);return r};const Sr=({data:e,xAccessor:t,yAccessor:r,showFinal:o,colors:a})=>{let s=0;const i=e.map(d=>{const g=t(d),f=r(d),y=s;return s+=Number(f),{x:g,y:f,start:y,end:s,color:Number(f)>0?a.positive:a.negative}});return o&&i.push({x:"Total",y:s,start:0,end:s,color:a.total}),i};function Cr({width:e,height:t,maxWidth:r}){if(e<=r)return{width:e,height:t};const o=e/t,a=r,s=Math.floor(a/o);return{width:a,height:s}}const Or=e=>{var t=e,{margin:r={top:20,left:100,bottom:150,right:70},chart:o}=t,a=o,{waterfallColors:s={positive:"#49b86f",negative:"#c92e5b",total:"#434857",stepConnector:"#888d94"}}=a,i=kr(a,["waterfallColors"]),{className:d,chartId:g,allowZoom:f}=t,y;const v=ve(r);i.showAxisYTitle||(v.left=50);let b=i.ratio.width+(-v.left-v.right)/2,k=i.ratio.height+(-v.top-v.bottom)/2;if(b>i.ratio.maxWidth){const n=Cr({height:k,width:b,maxWidth:i.ratio.maxWidth});b=n.width,k=n.height}const S=n=>n.key,V=n=>n.value,x=p((y=i.dataSets)==null?void 0:y.data).filter(n=>!!n.sets).map(n=>$r(wr({},n),{coordinate:n.sets})),[u,N]=H("0"),L=x.map(n=>n.name),A=B(()=>{var n;return Sr({data:p(i.dataSets.data)[u].sets,xAccessor:S,yAccessor:V,showFinal:(n=i.showTotal)!=null?n:!0,colors:s})},[i.dataSets.data,i.showTotal,u,s]),Y=.2,R=oe({domain:A.map(n=>n.x),padding:Y,range:[0,b]}),K=B(()=>{const n=A.flatMap(E=>[E.start,E.end]),[$,j]=Ot(n);return $!=null&&j!=null?[$-5,j+5]:void 0},[A]),w=pe({domain:K,nice:!0,range:[k,0]}),T=B(()=>`VerticalBars${ue()}`,[]);me(()=>{document.querySelectorAll(`#${T} .tickLabel`).forEach(n=>{const $=n.getBoundingClientRect().width;n.style.transformOrigin=n.getAttribute("x")+"px 14px",n.style.transform=`rotate(25deg) translateX(${$/2}px)`})});const{boxRef:m,elementRef:c}=ae(void 0,!f);return P(q,{children:[x.length>1&&l(D,{className:"chart__combo__wrapper",children:l(Ye,{chartId:g,pieces:L,className:"chartSelectorCombo",current:u,setCurrent:N})}),l(D,{id:T,className:d,ref:m,children:l("svg",{height:i.ratio.height,width:i.ratio.width,ref:c,children:P(Q,{left:v.left,top:v.top,children:[l(At,{scale:w,width:b,strokeDasharray:"5"}),A.map((n,$)=>{var j;const E=R(n.x),h=w(Math.max(n.start,n.end));if(E==null||h==null)return null;const C=Math.abs(w(n.start)-w(n.end)),_=$===A.length-1,M=2,G=E+R.bandwidth()+M,O=E+R.bandwidth()/(1-Y)-M,I=n.end<n.start?h+C:h,J=10,X=w(n.end)+(n.y<0?J:-J);let z=0;return A.filter((F,Te)=>{var Me;return((Me=i.showTotal)==null||Me)&&!A[Te+1]?!1:Te<=$}).forEach(F=>{z+=Number(F.y)}),l(yr,{chart:i,columnName:L[u],fill:n.color,height:C,isLast:_,lineY:I,step:n,stroke:s.stepConnector,strokeDashArray:2,textContent:(j=i.showTotal)==null||j?n.y:z,textX:E+R.bandwidth()/2,textY:X+5,width:R.bandwidth(),x:E,y:h,x1:G,x2:O},$)}),l(ge,{label:"",scale:w,hideAxisLine:!0,hideTicks:!0,tickLabelProps:()=>({textAnchor:"end",verticalAnchor:"middle"})}),l(fe,{scale:R,top:k,tickLabelProps:()=>({textAnchor:"middle",verticalAnchor:"middle",className:"tickLabel"})})]})})}),l(ie,{id:g,avoidEvent:!0,references:[{title:p(i.dataSets.data)[u].name,color:"transparent"}]})]})};var Nr=Object.defineProperty,Pr=Object.defineProperties,Ar=Object.getOwnPropertyDescriptors,rt=Object.getOwnPropertySymbols,Tr=Object.prototype.hasOwnProperty,Mr=Object.prototype.propertyIsEnumerable,at=(e,t,r)=>t in e?Nr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,Er=(e,t)=>{for(var r in t||(t={}))Tr.call(t,r)&&at(e,r,t[r]);if(rt)for(var r of rt(t))Mr.call(t,r)&&at(e,r,t[r]);return e},jr=(e,t)=>Pr(e,Ar(t));const he="hsl(196, 37%, 13%)";function _r(...e){return de.useCallback(function(t){e.forEach(r=>{r&&(r.current=t)})},[e])}const[,ot,Lr]=_e()({Component:gt("ChartRenderer","layout.charts",{red:{schema:"schemas.red"},orange:{schema:"schemas.orange"},green:{schema:"schemas.green"},blue:{schema:"schemas.blue"},violet:{schema:"schemas.violet"},turquoise:{schema:"schemas.turquoise"},yellow:{schema:"schemas.yellow"},grey:{schema:"schemas.grey"},ocean:{schema:"schemas.ocean"},sunset:{schema:"schemas.sunset"},common:{axis:{stroke:he,title:he},schema:he,background:"hsl(200deg 20% 98%)",grid:{stroke:he,opacity:"0.1"},toolTip:{backgroundColor:"rgb(232, 241, 255)",border:"1px solid #07c",color:he,padding:".3rem .5rem",borderRadius:"3px",fontSize:"18px",boxShadow:"0 1px 2px rgba(33,33,33,0.2)",lineHeight:"1em"}},".legendContainer":{display:"flex",flexDirection:"row",gap:je(3),flexWrap:"wrap"},".chart__combo__wrapper":{position:"absolute"}},de.forwardRef(({currentChart:e,chartId:t,allowZoom:r},o)=>{const a=de.useRef(null),s=_r(o,a),i=B(()=>({chartId:t}),[t]),d=xt([Ut,Ht,ir,fr,Or],[e.chartType==="pie2D",e.chartType==="barH2D",e.chartType==="barV2D",e.chartType==="linear",e.chartType==="waterfall"],0);return l(ne.Provider,{value:i,children:l(D,jr(Er({ref:s,className:"chart__chartRenderer"},ft("layout.charts")),{children:l(d,{chart:e,chartId:t,parentRef:a,allowZoom:r})}))})}),!0)});var Vr=Object.defineProperty,Rr=Object.defineProperties,Ir=Object.getOwnPropertyDescriptors,lt=Object.getOwnPropertySymbols,Br=Object.prototype.hasOwnProperty,Dr=Object.prototype.propertyIsEnumerable,nt=(e,t,r)=>t in e?Vr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,it=(e,t)=>{for(var r in t||(t={}))Br.call(t,r)&&nt(e,r,t[r]);if(lt)for(var r of lt(t))Dr.call(t,r)&&nt(e,r,t[r]);return e},ct=(e,t)=>Rr(e,Ir(t));const st=0,ht=360,Wr=({addBorder:e=!1,colorRanges:t,maxValue:r,minValue:o,currentValue:a,height:s,valueRanges:i,width:d,currentValueColor:g,currentValueFontSize:f})=>{const y=a,v=Math.min(s,d),b=r??i[i.length-1],k=o??i[0],S=Tt({domain:[k,b],startAngle:st,endAngle:ht,numTicks:0,diameter:v});function V(x){var u;const N=i.findIndex(L=>x<L);return N===-1?t[0]:(u=t[N-1])!=null?u:t[N]}return l(D,{children:P("svg",ct(it({},S.getSVGProps()),{viewBox:"-325 -325 600 600",children:[l("g",{id:"arcs",children:l("path",ct(it({},S.getArcProps({offset:20,startAngle:st,endAngle:ht})),{stroke:e?"black":"transparent",fill:V(y),strokeLinecap:"round",strokeWidth:5}))}),l("g",{children:l("text",{textAnchor:"middle",style:{fontSize:`${f??100}px`},alignmentBaseline:"central",fill:g,children:y})})]}))})},Hr=()=>{const e={addBorder:!0,backgColor:"white",currentValue:1010,height:400,width:400,maxValue:1050,minValue:1e3,noValueColor:"",pointerColor:"blue",ringAnchor:5,scaleFontSize:20,valueColor:"darkblue",valueDecimals:1,valueFontSize:50,valueType:"",widKpiType:0,zones:[{color:"blue",maximum:1020,minimum:1e3,transparency:20},{color:"purple",maximum:1040,minimum:1020,transparency:50},{color:"red",maximum:1050,minimum:1040,transparency:0}]},t=Array.from(new Set(p(e.zones).map(o=>[o.minimum,o.maximum]).flat().sort((o,a)=>o-a))),r=p(e.zones).map(o=>W(o.color).setAlpha(1-o.transparency/100).toPercentageRgbString()).flat();return l(D,{children:l(Wr,{addBorder:e.addBorder,backgroundColor:e.backgColor,colorRanges:r,currentValue:e.currentValue,decimals:e.valueDecimals,currentValueColor:e.valueColor,currentValueFontSize:e.valueFontSize,height:e.height,maxValue:e.maxValue,minValue:e.minValue,pointerColor:e.pointerColor,scaleValuesSize:e.scaleFontSize,valueRanges:t,width:e.width})})};export{Lr as ChartRenderer,Hr as WidgetContainer};
|
|
2475
2
|
//# sourceMappingURL=index.js.map
|