bento-charts 1.0.2 → 1.0.4
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/ChartConfigProvider.d.ts +11 -0
- package/dist/ChartConfigProvider.js +35 -0
- package/dist/ChartConfigProvider.js.map +1 -0
- package/dist/Charts/BentoBarChart.d.ts +4 -0
- package/dist/Charts/BentoBarChart.js +65 -0
- package/dist/Charts/BentoBarChart.js.map +1 -0
- package/dist/Charts/BentoPie.d.ts +4 -0
- package/dist/Charts/BentoPie.js +122 -0
- package/dist/Charts/BentoPie.js.map +1 -0
- package/dist/constants/chartConstants.d.ts +24 -0
- package/dist/constants/chartConstants.js +105 -0
- package/dist/constants/chartConstants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js.map +1 -0
- package/dist/types/chartTypes.d.ts +63 -0
- package/dist/types/chartTypes.js +2 -0
- package/dist/types/chartTypes.js.map +1 -0
- package/dist/util/chartUtils.d.ts +4 -0
- package/dist/util/chartUtils.js +8 -0
- package/dist/util/chartUtils.js.map +1 -0
- package/package.json +1 -1
- package/src/ChartConfigProvider.tsx +27 -9
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ChartTheme, LngDictionary, TranslationObject } from "./types/chartTypes";
|
|
3
|
+
export declare function useChartTheme(): ChartTheme;
|
|
4
|
+
export declare function useChartTranslation(): LngDictionary;
|
|
5
|
+
declare const ChartConfigProvider: ({ theme, Lng, translationMap, children, }: {
|
|
6
|
+
theme?: ChartTheme | undefined;
|
|
7
|
+
Lng: string;
|
|
8
|
+
translationMap?: TranslationObject | undefined;
|
|
9
|
+
children: React.ReactElement;
|
|
10
|
+
}) => JSX.Element;
|
|
11
|
+
export default ChartConfigProvider;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import React, { useContext } from "react";
|
|
14
|
+
import { DEFAULT_CHART_THEME, defaultTranslationObject, } from "./constants/chartConstants";
|
|
15
|
+
var ChartThemeContext = React.createContext(DEFAULT_CHART_THEME);
|
|
16
|
+
export function useChartTheme() {
|
|
17
|
+
return useContext(ChartThemeContext);
|
|
18
|
+
}
|
|
19
|
+
var ChartTranslationContext = React.createContext(defaultTranslationObject.en);
|
|
20
|
+
export function useChartTranslation() {
|
|
21
|
+
return useContext(ChartTranslationContext);
|
|
22
|
+
}
|
|
23
|
+
var ChartConfigProvider = function (_a) {
|
|
24
|
+
var _b = _a.theme, theme = _b === void 0 ? useChartTheme() : _b, Lng = _a.Lng, translationMap = _a.translationMap, children = _a.children;
|
|
25
|
+
var lang = "en";
|
|
26
|
+
try {
|
|
27
|
+
lang = Lng;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
console.error("Lng is not a supported language");
|
|
31
|
+
}
|
|
32
|
+
return (_jsx(ChartThemeContext.Provider, __assign({ value: theme }, { children: _jsx(ChartTranslationContext.Provider, __assign({ value: translationMap ? translationMap[lang] : defaultTranslationObject[lang] }, { children: children })) })));
|
|
33
|
+
};
|
|
34
|
+
export default ChartConfigProvider;
|
|
35
|
+
//# sourceMappingURL=ChartConfigProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartConfigProvider.js","sourceRoot":"","sources":["../src/ChartConfigProvider.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EACL,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAQpC,IAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAa,mBAAmB,CAAC,CAAC;AAC/E,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,IAAM,uBAAuB,GAAG,KAAK,CAAC,aAAa,CACjD,wBAAwB,CAAC,EAAE,CAC5B,CAAC;AACF,MAAM,UAAU,mBAAmB;IACjC,OAAO,UAAU,CAAC,uBAAuB,CAAC,CAAC;AAC7C,CAAC;AAED,IAAM,mBAAmB,GAAG,UAAC,EAU5B;QATC,aAAuB,EAAvB,KAAK,mBAAG,aAAa,EAAE,KAAA,EACvB,GAAG,SAAA,EACH,cAAc,oBAAA,EACd,QAAQ,cAAA;IAOR,IAAI,IAAI,GAAiB,IAAI,CAAC;IAC9B,IAAI;QACF,IAAI,GAAG,GAAmB,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;KAClD;IACD,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,aAAC,KAAK,EAAE,KAAK,gBACtC,KAAC,uBAAuB,CAAC,QAAQ,aAC/B,KAAK,EACH,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAGvE,QAAQ,IACwB,IACR,CAC9B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { BarChartProps } from '../types/chartTypes';
|
|
3
|
+
declare const BentoBarChart: ({ data, height, units, title, preFilter, dataMap, postFilter, removeEmpty, colorTheme, }: BarChartProps) => JSX.Element;
|
|
4
|
+
export default BentoBarChart;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
21
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
import { BarChart, Bar, Cell, XAxis, YAxis, Tooltip, Label } from 'recharts';
|
|
23
|
+
import { TOOL_TIP_STYLE, COUNT_STYLE, LABEL_STYLE, CHART_WRAPPER_STYLE, MAX_TICK_LABEL_CHARS, TITLE_STYLE, ASPECT_RATIO, TICKS_SHOW_ALL_LABELS_BELOW, UNITS_LABEL_OFFSET, TICK_MARGIN, } from '../constants/chartConstants';
|
|
24
|
+
import { useChartTheme, useChartTranslation } from '../ChartConfigProvider';
|
|
25
|
+
var tickFormatter = function (tickLabel) {
|
|
26
|
+
if (tickLabel.length <= MAX_TICK_LABEL_CHARS) {
|
|
27
|
+
return tickLabel;
|
|
28
|
+
}
|
|
29
|
+
return "".concat(tickLabel.substring(0, MAX_TICK_LABEL_CHARS), "...");
|
|
30
|
+
};
|
|
31
|
+
var BentoBarChart = function (_a) {
|
|
32
|
+
var data = _a.data, height = _a.height, units = _a.units, title = _a.title, preFilter = _a.preFilter, dataMap = _a.dataMap, postFilter = _a.postFilter, _b = _a.removeEmpty, removeEmpty = _b === void 0 ? true : _b, _c = _a.colorTheme, colorTheme = _c === void 0 ? 'default' : _c;
|
|
33
|
+
var t = useChartTranslation();
|
|
34
|
+
var _d = useChartTheme().bar[colorTheme], chartFill = _d.fill, missing = _d.missing;
|
|
35
|
+
var fill = function (entry) { return (entry.x === 'missing' ? missing : chartFill); };
|
|
36
|
+
data = __spreadArray([], data, true);
|
|
37
|
+
if (preFilter)
|
|
38
|
+
data = data.filter(preFilter);
|
|
39
|
+
if (dataMap)
|
|
40
|
+
data = data.map(dataMap);
|
|
41
|
+
if (postFilter)
|
|
42
|
+
data = data.filter(postFilter);
|
|
43
|
+
if (removeEmpty)
|
|
44
|
+
data = data.filter(function (d) { return d.y !== 0; });
|
|
45
|
+
var totalCount = data.reduce(function (sum, e) { return sum + e.y; }, 0);
|
|
46
|
+
// Regarding XAxis.ticks below:
|
|
47
|
+
// The weird conditional is added from https://github.com/recharts/recharts/issues/2593#issuecomment-1311678397
|
|
48
|
+
// Basically, if data is empty, Recharts will default to a domain of [0, "auto"] and our tickFormatter trips up
|
|
49
|
+
// on formatting a non-string. This hack manually overrides the ticks for the axis and blanks it out.
|
|
50
|
+
// - David L, 2023-01-03
|
|
51
|
+
return (_jsxs("div", __assign({ style: CHART_WRAPPER_STYLE }, { children: [_jsx("div", __assign({ style: TITLE_STYLE }, { children: title })), _jsxs(BarChart, __assign({ width: height * ASPECT_RATIO, height: height, data: data, margin: { top: 10, bottom: 100, right: 20 } }, { children: [_jsx(XAxis, __assign({ dataKey: "x", height: 20, angle: -45, ticks: data.length ? undefined : [''], tickFormatter: tickFormatter, tickMargin: TICK_MARGIN, textAnchor: "end", interval: data.length < TICKS_SHOW_ALL_LABELS_BELOW ? 0 : 'preserveStartEnd' }, { children: _jsx(Label, { value: units, offset: UNITS_LABEL_OFFSET, position: "insideBottom" }) })), _jsx(YAxis, { children: _jsx(Label, { value: t['Count'], offset: -10, position: "left", angle: 270 }) }), _jsx(Tooltip, { content: _jsx(BarTooltip, { totalCount: totalCount }) }), _jsx(Bar, __assign({ dataKey: "y", isAnimationActive: false }, { children: data.map(function (entry) { return (_jsx(Cell, { fill: fill(entry) }, entry.x)); }) }))] }))] })));
|
|
52
|
+
};
|
|
53
|
+
var BarTooltip = function (_a) {
|
|
54
|
+
var _b, _c, _d;
|
|
55
|
+
var active = _a.active, payload = _a.payload, totalCount = _a.totalCount;
|
|
56
|
+
if (!active) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
var name = (payload && ((_c = (_b = payload[0]) === null || _b === void 0 ? void 0 : _b.payload) === null || _c === void 0 ? void 0 : _c.x)) || '';
|
|
60
|
+
var value = (payload && ((_d = payload[0]) === null || _d === void 0 ? void 0 : _d.value)) || 0;
|
|
61
|
+
var percentage = totalCount ? Math.round((value / totalCount) * 100) : 0;
|
|
62
|
+
return (_jsxs("div", __assign({ style: TOOL_TIP_STYLE }, { children: [_jsx("p", __assign({ style: LABEL_STYLE }, { children: name })), _jsxs("p", __assign({ style: COUNT_STYLE }, { children: [value, " (", percentage, "%)"] }))] })));
|
|
63
|
+
};
|
|
64
|
+
export default BentoBarChart;
|
|
65
|
+
//# sourceMappingURL=BentoBarChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BentoBarChart.js","sourceRoot":"","sources":["../../src/Charts/BentoBarChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
21
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
+
import { useState } from 'react';
|
|
23
|
+
import { PieChart, Pie, Cell, Curve, Tooltip, Sector } from 'recharts';
|
|
24
|
+
import { TOOL_TIP_STYLE, LABEL_STYLE, COUNT_STYLE, OTHER_THRESHOLD, CHART_MISSING_FILL, CHART_WRAPPER_STYLE, RADIAN, MAX_LABEL_CHARS, CHART_ASPECT_RATIO, LABEL_THRESHOLD, COUNT_TEXT_STYLE, TEXT_STYLE, } from '../constants/chartConstants';
|
|
25
|
+
import { useChartTheme, useChartTranslation } from '../ChartConfigProvider';
|
|
26
|
+
import { polarToCartesian } from '../util/chartUtils';
|
|
27
|
+
var labelShortName = function (name) {
|
|
28
|
+
if (name.length <= MAX_LABEL_CHARS) {
|
|
29
|
+
return name;
|
|
30
|
+
}
|
|
31
|
+
// removing 3 character cause ... s add three characters
|
|
32
|
+
return "".concat(name.substring(0, MAX_LABEL_CHARS - 3), "\u2026");
|
|
33
|
+
};
|
|
34
|
+
var BentoPie = function (_a) {
|
|
35
|
+
var data = _a.data, height = _a.height, preFilter = _a.preFilter, dataMap = _a.dataMap, postFilter = _a.postFilter, _b = _a.sort, sort = _b === void 0 ? true : _b, _c = _a.removeEmpty, removeEmpty = _c === void 0 ? true : _c, _d = _a.colorTheme, colorTheme = _d === void 0 ? 'default' : _d;
|
|
36
|
+
var t = useChartTranslation();
|
|
37
|
+
var theme = useChartTheme().pie[colorTheme];
|
|
38
|
+
var _e = useState(undefined), activeIndex = _e[0], setActiveIndex = _e[1];
|
|
39
|
+
// ##################### Data processing #####################
|
|
40
|
+
data = __spreadArray([], data, true); // Changing immutable data to mutable data
|
|
41
|
+
if (preFilter)
|
|
42
|
+
data = data.filter(preFilter);
|
|
43
|
+
if (dataMap)
|
|
44
|
+
data = data.map(dataMap);
|
|
45
|
+
if (postFilter)
|
|
46
|
+
data = data.filter(postFilter);
|
|
47
|
+
// removing empty values
|
|
48
|
+
if (removeEmpty)
|
|
49
|
+
data = data.filter(function (e) { return e.y !== 0; });
|
|
50
|
+
if (sort)
|
|
51
|
+
data.sort(function (a, b) { return a.y - b.y; });
|
|
52
|
+
// combining sections with less than OTHER_THRESHOLD
|
|
53
|
+
var sum = data.reduce(function (acc, e) { return acc + e.y; }, 0);
|
|
54
|
+
var length = data.length;
|
|
55
|
+
var threshold = OTHER_THRESHOLD * sum;
|
|
56
|
+
var temp = data.filter(function (e) { return e.y > threshold; });
|
|
57
|
+
// length - 1 intentional: if there is just one category bellow threshold the "Other" category is not necessary
|
|
58
|
+
data = temp.length === length - 1 ? data : temp;
|
|
59
|
+
if (data.length !== length) {
|
|
60
|
+
data.push({ x: t['Other'], y: sum - data.reduce(function (acc, e) { return acc + e.y; }, 0) });
|
|
61
|
+
}
|
|
62
|
+
var bentoFormatData = data.map(function (e) { return ({ name: e.x, value: e.y }); });
|
|
63
|
+
// ##################### Rendering #####################
|
|
64
|
+
var onEnter = function (_data, index) {
|
|
65
|
+
setActiveIndex(index);
|
|
66
|
+
};
|
|
67
|
+
var onHover = function (_data, _index, e) {
|
|
68
|
+
var target = e.target;
|
|
69
|
+
if (target)
|
|
70
|
+
target.style.cursor = 'pointer';
|
|
71
|
+
};
|
|
72
|
+
var onLeave = function () {
|
|
73
|
+
setActiveIndex(undefined);
|
|
74
|
+
};
|
|
75
|
+
return (_jsx("div", __assign({ style: CHART_WRAPPER_STYLE }, { children: _jsxs(PieChart, __assign({ height: height, width: height * CHART_ASPECT_RATIO }, { children: [_jsx(Pie, __assign({ data: bentoFormatData, dataKey: "value", cx: "50%", cy: "50%", innerRadius: 35, outerRadius: 80, label: RenderLabel, labelLine: false, isAnimationActive: false, onMouseEnter: onEnter, onMouseLeave: onLeave, onMouseOver: onHover, activeIndex: activeIndex, activeShape: RenderActiveLabel }, { children: data.map(function (entry, index) {
|
|
76
|
+
var fill = theme[index % theme.length];
|
|
77
|
+
fill = entry.x.toLowerCase() === 'missing' ? CHART_MISSING_FILL : fill;
|
|
78
|
+
return _jsx(Cell, { fill: fill }, index);
|
|
79
|
+
}) })), _jsx(Tooltip, { content: _jsx(CustomTooltip, { totalCount: sum }), isAnimationActive: false, allowEscapeViewBox: { x: true, y: true } })] })) })));
|
|
80
|
+
};
|
|
81
|
+
var RenderLabel = function (params) {
|
|
82
|
+
var cx = params.cx, cy = params.cy, midAngle = params.midAngle, outerRadius = params.outerRadius, fill = params.fill, payload = params.payload, index = params.index, activeIndex = params.activeIndex;
|
|
83
|
+
// skip rendering this static label if the sector is selected.
|
|
84
|
+
// this will let the 'renderActiveState' draw without overlapping.
|
|
85
|
+
// also, skip rendering if segment is too small a percentage (avoids label clutter)
|
|
86
|
+
if (index === activeIndex || params.percent < LABEL_THRESHOLD) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
var name = payload.name === 'null' ? '(Empty)' : payload.name;
|
|
90
|
+
var sin = Math.sin(-RADIAN * midAngle);
|
|
91
|
+
var cos = Math.cos(-RADIAN * midAngle);
|
|
92
|
+
var sx = cx + (outerRadius + 10) * cos;
|
|
93
|
+
var sy = cy + (outerRadius + 10) * sin;
|
|
94
|
+
var mx = cx + (outerRadius + 20) * cos;
|
|
95
|
+
var my = cy + (outerRadius + 20) * sin;
|
|
96
|
+
var ex = mx + (cos >= 0 ? 1 : -1) * 22;
|
|
97
|
+
var ey = my;
|
|
98
|
+
var textAnchor = cos >= 0 ? 'start' : 'end';
|
|
99
|
+
var currentTextStyle = __assign(__assign({}, TEXT_STYLE), { fontWeight: payload.selected ? 'bold' : 'normal', fontStyle: payload.name === 'null' ? 'italic' : 'normal' });
|
|
100
|
+
var offsetRadius = 20;
|
|
101
|
+
var startPoint = polarToCartesian(params.cx, params.cy, params.outerRadius, midAngle);
|
|
102
|
+
var endPoint = polarToCartesian(params.cx, params.cy, params.outerRadius + offsetRadius, midAngle);
|
|
103
|
+
var lineProps = __assign(__assign({}, params), { fill: 'none', stroke: fill, points: [startPoint, endPoint] });
|
|
104
|
+
return (_jsxs("g", { children: [_jsx(Curve, __assign({}, lineProps, { type: "linear", className: "recharts-pie-label-line" })), _jsx("path", { d: "M".concat(sx, ",").concat(sy, "L").concat(mx, ",").concat(my, "L").concat(ex, ",").concat(ey), stroke: fill, fill: "none" }), _jsx("circle", { cx: ex, cy: ey, r: 2, fill: fill, stroke: "none" }), _jsx("text", __assign({ x: ex + (cos >= 0 ? 1 : -1) * 12, y: ey + 3, textAnchor: textAnchor, style: currentTextStyle }, { children: labelShortName(name) })), _jsx("text", __assign({ x: ex + (cos >= 0 ? 1 : -1) * 12, y: ey, dy: 14, textAnchor: textAnchor, style: COUNT_TEXT_STYLE }, { children: "(".concat(payload.value, ")") }))] }));
|
|
105
|
+
};
|
|
106
|
+
var RenderActiveLabel = function (params) {
|
|
107
|
+
var cx = params.cx, cy = params.cy, innerRadius = params.innerRadius, outerRadius = params.outerRadius, startAngle = params.startAngle, endAngle = params.endAngle, fill = params.fill;
|
|
108
|
+
// render arc around active segment
|
|
109
|
+
return (_jsxs("g", { children: [_jsx(Sector, { cx: cx, cy: cy, startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius, fill: fill }), _jsx(Sector, { cx: cx, cy: cy, startAngle: startAngle, endAngle: endAngle, innerRadius: outerRadius + 6, outerRadius: outerRadius + 10, fill: fill })] }));
|
|
110
|
+
};
|
|
111
|
+
var CustomTooltip = function (_a) {
|
|
112
|
+
var active = _a.active, payload = _a.payload, totalCount = _a.totalCount;
|
|
113
|
+
if (!active) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
var name = payload ? payload[0].name : '';
|
|
117
|
+
var value = payload ? payload[0].value : 0;
|
|
118
|
+
var percentage = totalCount ? Math.round((value / totalCount) * 100) : 0;
|
|
119
|
+
return (_jsxs("div", __assign({ style: TOOL_TIP_STYLE }, { children: [_jsx("p", __assign({ style: LABEL_STYLE }, { children: name })), _jsxs("p", __assign({ style: COUNT_STYLE }, { children: [' ', value, " (", percentage, "%)"] }))] })));
|
|
120
|
+
};
|
|
121
|
+
export default BentoPie;
|
|
122
|
+
//# sourceMappingURL=BentoPie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BentoPie.js","sourceRoot":"","sources":["../../src/Charts/BentoPie.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type CSS from 'csstype';
|
|
2
|
+
import { ChartTheme, HexColor, TranslationObject } from '../types/chartTypes';
|
|
3
|
+
export declare const defaultTranslationObject: TranslationObject;
|
|
4
|
+
export declare const COLORS: HexColor[];
|
|
5
|
+
export declare const BAR_CHART_FILL = "#4575b4";
|
|
6
|
+
export declare const CHART_MISSING_FILL = "#bbbbbb";
|
|
7
|
+
export declare const DEFAULT_CHART_THEME: ChartTheme;
|
|
8
|
+
export declare const TOOL_TIP_STYLE: CSS.Properties;
|
|
9
|
+
export declare const LABEL_STYLE: CSS.Properties;
|
|
10
|
+
export declare const COUNT_STYLE: CSS.Properties;
|
|
11
|
+
export declare const CHART_WRAPPER_STYLE: CSS.Properties;
|
|
12
|
+
export declare const TITLE_STYLE: CSS.Properties;
|
|
13
|
+
export declare const TEXT_STYLE: CSS.Properties;
|
|
14
|
+
export declare const COUNT_TEXT_STYLE: CSS.Properties;
|
|
15
|
+
export declare const ASPECT_RATIO = 1.2;
|
|
16
|
+
export declare const MAX_TICK_LABEL_CHARS = 15;
|
|
17
|
+
export declare const UNITS_LABEL_OFFSET = -75;
|
|
18
|
+
export declare const TICKS_SHOW_ALL_LABELS_BELOW = 11;
|
|
19
|
+
export declare const TICK_MARGIN = 5;
|
|
20
|
+
export declare const CHART_ASPECT_RATIO = 1.4;
|
|
21
|
+
export declare const LABEL_THRESHOLD = 0.05;
|
|
22
|
+
export declare const MAX_LABEL_CHARS = 14;
|
|
23
|
+
export declare const OTHER_THRESHOLD = 0.01;
|
|
24
|
+
export declare const RADIAN: number;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// ################### PACKAGE CONSTANTS ###################
|
|
2
|
+
export var defaultTranslationObject = {
|
|
3
|
+
en: {
|
|
4
|
+
Count: 'Count',
|
|
5
|
+
Other: 'Other',
|
|
6
|
+
},
|
|
7
|
+
fr: {
|
|
8
|
+
Count: 'Comptage',
|
|
9
|
+
Other: 'Autre',
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
// ################### THEME CONSTANTS ###################
|
|
13
|
+
// Bento-web colours
|
|
14
|
+
export var COLORS = [
|
|
15
|
+
'#3366CC',
|
|
16
|
+
'#DC3912',
|
|
17
|
+
'#FF9900',
|
|
18
|
+
'#109618',
|
|
19
|
+
'#990099',
|
|
20
|
+
'#3B3EAC',
|
|
21
|
+
'#0099C6',
|
|
22
|
+
'#DD4477',
|
|
23
|
+
'#66AA00',
|
|
24
|
+
'#B82E2E',
|
|
25
|
+
'#316395',
|
|
26
|
+
'#994499',
|
|
27
|
+
'#22AA99',
|
|
28
|
+
'#AAAA11',
|
|
29
|
+
'#6633CC',
|
|
30
|
+
'#E67300',
|
|
31
|
+
'#8B0707',
|
|
32
|
+
'#329262',
|
|
33
|
+
'#5574A6',
|
|
34
|
+
'#3B3EAC',
|
|
35
|
+
];
|
|
36
|
+
export var BAR_CHART_FILL = '#4575b4';
|
|
37
|
+
export var CHART_MISSING_FILL = '#bbbbbb';
|
|
38
|
+
export var DEFAULT_CHART_THEME = {
|
|
39
|
+
pie: {
|
|
40
|
+
default: COLORS,
|
|
41
|
+
},
|
|
42
|
+
bar: {
|
|
43
|
+
default: {
|
|
44
|
+
fill: BAR_CHART_FILL,
|
|
45
|
+
missing: CHART_MISSING_FILL,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
// ################### CHART STYLES ###################
|
|
50
|
+
// common
|
|
51
|
+
export var TOOL_TIP_STYLE = {
|
|
52
|
+
backgroundColor: 'rgba(255, 255, 255, 0.9)',
|
|
53
|
+
padding: '5px',
|
|
54
|
+
border: '1px solid grey',
|
|
55
|
+
boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.9)',
|
|
56
|
+
borderRadius: '2px',
|
|
57
|
+
textAlign: 'left',
|
|
58
|
+
};
|
|
59
|
+
export var LABEL_STYLE = {
|
|
60
|
+
fontWeight: 'bold',
|
|
61
|
+
fontSize: '12px',
|
|
62
|
+
padding: '0',
|
|
63
|
+
margin: '0',
|
|
64
|
+
};
|
|
65
|
+
export var COUNT_STYLE = {
|
|
66
|
+
fontWeight: 'normal',
|
|
67
|
+
fontSize: '11px',
|
|
68
|
+
padding: '0',
|
|
69
|
+
margin: '0',
|
|
70
|
+
};
|
|
71
|
+
export var CHART_WRAPPER_STYLE = {
|
|
72
|
+
display: 'flex',
|
|
73
|
+
flexDirection: 'column',
|
|
74
|
+
alignItems: 'center',
|
|
75
|
+
};
|
|
76
|
+
// bar chart
|
|
77
|
+
export var TITLE_STYLE = {
|
|
78
|
+
fontStyle: 'italic',
|
|
79
|
+
fontSize: '1.5em',
|
|
80
|
+
textAlign: 'center',
|
|
81
|
+
};
|
|
82
|
+
// pie chart
|
|
83
|
+
export var TEXT_STYLE = {
|
|
84
|
+
fontSize: '11px',
|
|
85
|
+
fill: '#333',
|
|
86
|
+
};
|
|
87
|
+
export var COUNT_TEXT_STYLE = {
|
|
88
|
+
fontSize: '10px',
|
|
89
|
+
fill: '#999',
|
|
90
|
+
};
|
|
91
|
+
// ################### CHART CONSTANTS ###################
|
|
92
|
+
// bar chart
|
|
93
|
+
export var ASPECT_RATIO = 1.2;
|
|
94
|
+
export var MAX_TICK_LABEL_CHARS = 15;
|
|
95
|
+
export var UNITS_LABEL_OFFSET = -75;
|
|
96
|
+
export var TICKS_SHOW_ALL_LABELS_BELOW = 11; // Below this # of X-axis ticks, force-show all labels
|
|
97
|
+
export var TICK_MARGIN = 5; // vertical spacing between tick line and tick label
|
|
98
|
+
// pie chart
|
|
99
|
+
export var CHART_ASPECT_RATIO = 1.4;
|
|
100
|
+
export var LABEL_THRESHOLD = 0.05;
|
|
101
|
+
export var MAX_LABEL_CHARS = 14;
|
|
102
|
+
export var OTHER_THRESHOLD = 0.01;
|
|
103
|
+
// ################### UTIL CONSTANTS ###################
|
|
104
|
+
export var RADIAN = Math.PI / 180;
|
|
105
|
+
//# sourceMappingURL=chartConstants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartConstants.js","sourceRoot":"","sources":["../../src/constants/chartConstants.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEvD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface ChartDataType extends Array<ChartDataItem> {
|
|
2
|
+
}
|
|
3
|
+
export interface ChartDataItem {
|
|
4
|
+
x: string;
|
|
5
|
+
y: number;
|
|
6
|
+
}
|
|
7
|
+
export interface TooltipPayload extends Array<TooltipPayloadItem> {
|
|
8
|
+
}
|
|
9
|
+
interface TooltipPayloadItem {
|
|
10
|
+
name: string;
|
|
11
|
+
payload: {
|
|
12
|
+
x: string;
|
|
13
|
+
};
|
|
14
|
+
value: number;
|
|
15
|
+
}
|
|
16
|
+
export type HexColor = `#${string}`;
|
|
17
|
+
export type ChartTheme = {
|
|
18
|
+
pie: {
|
|
19
|
+
[key in string]: HexColor[];
|
|
20
|
+
} & {
|
|
21
|
+
default: HexColor[];
|
|
22
|
+
};
|
|
23
|
+
bar: {
|
|
24
|
+
[key in string]: {
|
|
25
|
+
fill: HexColor;
|
|
26
|
+
missing: HexColor;
|
|
27
|
+
};
|
|
28
|
+
} & {
|
|
29
|
+
default: {
|
|
30
|
+
fill: HexColor;
|
|
31
|
+
missing: HexColor;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export type FilterCallback<T> = (value: T, index: number, array: T[]) => boolean;
|
|
36
|
+
export type UnitaryMapCallback<T> = (value: T, index: number, array: T[]) => T;
|
|
37
|
+
export type ChartFilterCallback = FilterCallback<ChartDataItem>;
|
|
38
|
+
export type SupportedLng = 'en' | 'fr';
|
|
39
|
+
type TranslationWords = 'Count' | 'Other';
|
|
40
|
+
export type LngDictionary = {
|
|
41
|
+
[key in TranslationWords]: string;
|
|
42
|
+
};
|
|
43
|
+
export type TranslationObject = {
|
|
44
|
+
[key in SupportedLng]: LngDictionary;
|
|
45
|
+
};
|
|
46
|
+
interface BaseChartProps {
|
|
47
|
+
data: ChartDataType;
|
|
48
|
+
height: number;
|
|
49
|
+
preFilter?: ChartFilterCallback;
|
|
50
|
+
dataMap?: UnitaryMapCallback<ChartDataItem>;
|
|
51
|
+
postFilter?: ChartFilterCallback;
|
|
52
|
+
removeEmpty?: boolean;
|
|
53
|
+
}
|
|
54
|
+
export interface PieChartProps extends BaseChartProps {
|
|
55
|
+
colorTheme?: keyof ChartTheme['pie'];
|
|
56
|
+
sort?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface BarChartProps extends BaseChartProps {
|
|
59
|
+
colorTheme?: keyof ChartTheme['bar'];
|
|
60
|
+
title?: string;
|
|
61
|
+
units: string;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartTypes.js","sourceRoot":"","sources":["../../src/types/chartTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RADIAN } from '../constants/chartConstants';
|
|
2
|
+
export var polarToCartesian = function (cx, cy, radius, angle) {
|
|
3
|
+
return {
|
|
4
|
+
x: cx + Math.cos(-RADIAN * angle) * radius,
|
|
5
|
+
y: cy + Math.sin(-RADIAN * angle) * radius,
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=chartUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartUtils.js","sourceRoot":"","sources":["../../src/util/chartUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAErD,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,EAAU,EAAE,EAAU,EAAE,MAAc,EAAE,KAAa;IACpF,OAAO;QACL,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,MAAM;QAC1C,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,MAAM;KAC3C,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
|
-
import React, { useContext } from
|
|
1
|
+
import React, { useContext } from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_CHART_THEME,
|
|
5
|
+
defaultTranslationObject,
|
|
6
|
+
} from "./constants/chartConstants";
|
|
7
|
+
import {
|
|
8
|
+
ChartTheme,
|
|
9
|
+
LngDictionary,
|
|
10
|
+
SupportedLng,
|
|
11
|
+
TranslationObject,
|
|
12
|
+
} from "./types/chartTypes";
|
|
5
13
|
|
|
6
14
|
const ChartThemeContext = React.createContext<ChartTheme>(DEFAULT_CHART_THEME);
|
|
7
|
-
export
|
|
15
|
+
export function useChartTheme() {
|
|
16
|
+
return useContext(ChartThemeContext);
|
|
17
|
+
}
|
|
8
18
|
|
|
9
|
-
const ChartTranslationContext = React.createContext<LngDictionary>(
|
|
10
|
-
|
|
19
|
+
const ChartTranslationContext = React.createContext<LngDictionary>(
|
|
20
|
+
defaultTranslationObject.en
|
|
21
|
+
);
|
|
22
|
+
export function useChartTranslation() {
|
|
23
|
+
return useContext(ChartTranslationContext);
|
|
24
|
+
}
|
|
11
25
|
|
|
12
26
|
const ChartConfigProvider = ({
|
|
13
27
|
theme = useChartTheme(),
|
|
@@ -20,15 +34,19 @@ const ChartConfigProvider = ({
|
|
|
20
34
|
translationMap?: TranslationObject;
|
|
21
35
|
children: React.ReactElement;
|
|
22
36
|
}) => {
|
|
23
|
-
let lang: SupportedLng =
|
|
37
|
+
let lang: SupportedLng = "en";
|
|
24
38
|
try {
|
|
25
39
|
lang = Lng as SupportedLng;
|
|
26
40
|
} catch (e) {
|
|
27
|
-
console.error(
|
|
41
|
+
console.error("Lng is not a supported language");
|
|
28
42
|
}
|
|
29
43
|
return (
|
|
30
44
|
<ChartThemeContext.Provider value={theme}>
|
|
31
|
-
<ChartTranslationContext.Provider
|
|
45
|
+
<ChartTranslationContext.Provider
|
|
46
|
+
value={
|
|
47
|
+
translationMap ? translationMap[lang] : defaultTranslationObject[lang]
|
|
48
|
+
}
|
|
49
|
+
>
|
|
32
50
|
{children}
|
|
33
51
|
</ChartTranslationContext.Provider>
|
|
34
52
|
</ChartThemeContext.Provider>
|