amazing-react-charts 1.2.2 → 1.2.3
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/commonStyles.d.ts +6 -0
- package/commonStyles.js +9 -3
- package/core/gauge-chart/GaugeChart.d.ts +21 -0
- package/core/gauge-chart/GaugeChart.js +147 -0
- package/core/gauge-chart/GaugeChart.stories.d.ts +8 -0
- package/core/types.d.ts +4 -0
- package/package.json +5 -5
- package/test/gauge-chart.spec.d.ts +1 -0
package/commonStyles.d.ts
CHANGED
|
@@ -29,4 +29,10 @@ export declare const DonutWrapper: import("styled-components/dist/types").IStyle
|
|
|
29
29
|
export declare const ChartStorieWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
30
30
|
export declare const ChartWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
31
31
|
export declare const ChartTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
|
|
32
|
+
export declare const GaugeLegendContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
33
|
+
export declare const GaugeLegendContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
34
|
+
export declare const GaugeCircle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
35
|
+
color?: string;
|
|
36
|
+
}>> & string;
|
|
37
|
+
export declare const GaugeLegend: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
32
38
|
export declare const CsvDownloadButtonStyle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
|
package/commonStyles.js
CHANGED
|
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.TOOLTIP_DEFAULT_PROPS = exports.TOOLBOX_DEFAULT_PROPS = exports.STRAIGHT_LINE_ICON = exports.PictorialWrapper = exports.MIN_WIDTH = exports.DonutWrapper = exports.DASHED_LINE_ICON = exports.CsvDownloadButtonStyle = exports.ChartWrapper = exports.ChartTitle = exports.ChartStorieWrapper = exports.CHART_WIDTH = exports.CHART_HEIGHT = void 0;
|
|
7
|
+
exports.TOOLTIP_DEFAULT_PROPS = exports.TOOLBOX_DEFAULT_PROPS = exports.STRAIGHT_LINE_ICON = exports.PictorialWrapper = exports.MIN_WIDTH = exports.GaugeLegendContent = exports.GaugeLegendContainer = exports.GaugeLegend = exports.GaugeCircle = exports.DonutWrapper = exports.DASHED_LINE_ICON = exports.CsvDownloadButtonStyle = exports.ChartWrapper = exports.ChartTitle = exports.ChartStorieWrapper = exports.CHART_WIDTH = exports.CHART_HEIGHT = void 0;
|
|
8
8
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
9
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
10
10
|
var _theme = require("flipper-ui/theme");
|
|
11
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
11
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
|
|
12
12
|
var neutral = _theme.theme.colors.neutral;
|
|
13
13
|
var STRAIGHT_LINE_ICON = exports.STRAIGHT_LINE_ICON = 'path://M0 0H25H50V2H25H0V0Z';
|
|
14
14
|
var DASHED_LINE_ICON = exports.DASHED_LINE_ICON = 'path://M180 1000 l0 -40 200 0 200 0 0 40 0 40 -200 0 -200 0 0 -40z, M810 ' + '1000 l0 -40 200 0 200 0 0 40 0 40 -200 0 -200 0 0 -40zm, M1440 1000 l0 ' + '-40 200 0 200 0 0 40 0 40 -200 0 -200 0 0 -40z';
|
|
@@ -41,4 +41,10 @@ var DonutWrapper = exports.DonutWrapper = _styledComponents["default"].div(_temp
|
|
|
41
41
|
var ChartStorieWrapper = exports.ChartStorieWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n width: 50%;\n margin: 0 auto;\n"])));
|
|
42
42
|
var ChartWrapper = exports.ChartWrapper = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n position: relative;\n"])));
|
|
43
43
|
var ChartTitle = exports.ChartTitle = _styledComponents["default"].h1(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: Roboto, Helvetica, Arial, sans-serif;\n color: ", ";\n top: 5;\n margin: 0px;\n font-size: 16px;\n font-weight: 400;\n position: absolute;\n"])), neutral[200]);
|
|
44
|
-
var
|
|
44
|
+
var GaugeLegendContainer = exports.GaugeLegendContainer = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n gap: 16px;\n align-items: center;\n justify-content: center;\n"])));
|
|
45
|
+
var GaugeLegendContent = exports.GaugeLegendContent = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n font-family: Roboto, Helvetica, Arial, sans-serif;\n"])));
|
|
46
|
+
var GaugeCircle = exports.GaugeCircle = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n width: 20px;\n height: 20px;\n margin-bottom: 4px;\n border-radius: 100%;\n background-color: ", ";\n"])), function (props) {
|
|
47
|
+
return props.color;
|
|
48
|
+
});
|
|
49
|
+
var GaugeLegend = exports.GaugeLegend = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 14px;\n"])));
|
|
50
|
+
var CsvDownloadButtonStyle = exports.CsvDownloadButtonStyle = _styledComponents["default"].button(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n font-weight: bold;\n background: ", ";\n text-transform: uppercase;\n border: none;\n width: 40px;\n height: 20px;\n cursor: pointer;\n display: block;\n position: absolute;\n margin-top: -295px;\n margin-left: 80%;\n\n &:hover::after {\n content: 'Save as CSV';\n position: absolute;\n text-transform: none;\n font-weight: lighter;\n top: 123%;\n left: 50%;\n transform: translateX(-50%);\n background-color: ", ";\n opacity: 55%;\n color: ", ";\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n height: 19px;\n white-space: nowrap;\n text-align: center;\n display: flex;\n align-items: center;\n }\n"])), neutral[50], neutral[200], neutral[50]);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { IDefaultChartProps, GaugeData } from '../types';
|
|
3
|
+
export interface IProps extends Omit<IDefaultChartProps, 'data'> {
|
|
4
|
+
data: GaugeData[];
|
|
5
|
+
legendValue?: number;
|
|
6
|
+
axisLineWidth?: number;
|
|
7
|
+
titleFontSize?: number;
|
|
8
|
+
detailFontSize?: number;
|
|
9
|
+
height?: number | string;
|
|
10
|
+
colorLine?: [number, string][];
|
|
11
|
+
axisLabel?: {
|
|
12
|
+
limit: number;
|
|
13
|
+
label: string;
|
|
14
|
+
}[];
|
|
15
|
+
legendData?: {
|
|
16
|
+
icon: JSX.Element;
|
|
17
|
+
legend: number;
|
|
18
|
+
}[];
|
|
19
|
+
}
|
|
20
|
+
declare const GaugeChart: (props: IProps) => React.JSX.Element;
|
|
21
|
+
export default GaugeChart;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _echartsForReact = _interopRequireDefault(require("echarts-for-react"));
|
|
11
|
+
var _auxiliarFunctions = require("../../lib/auxiliarFunctions");
|
|
12
|
+
var _commonStyles = require("../../commonStyles");
|
|
13
|
+
var _theme = require("flipper-ui/theme");
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
var _theme$colors = _theme.theme.colors,
|
|
17
|
+
amber = _theme$colors.amber,
|
|
18
|
+
green = _theme$colors.green,
|
|
19
|
+
red = _theme$colors.red,
|
|
20
|
+
orange = _theme$colors.orange,
|
|
21
|
+
gray = _theme$colors.gray,
|
|
22
|
+
neutral = _theme$colors.neutral;
|
|
23
|
+
var GaugeChart = function GaugeChart(props) {
|
|
24
|
+
var _toolboxTooltip$saveA;
|
|
25
|
+
var data = props.data,
|
|
26
|
+
height = props.height,
|
|
27
|
+
tooltip = props.tooltip,
|
|
28
|
+
axisLabel = props.axisLabel,
|
|
29
|
+
colorLine = props.colorLine,
|
|
30
|
+
legendData = props.legendData,
|
|
31
|
+
legendValue = props.legendValue,
|
|
32
|
+
axisLineWidth = props.axisLineWidth,
|
|
33
|
+
titleFontSize = props.titleFontSize,
|
|
34
|
+
toolboxTooltip = props.toolboxTooltip,
|
|
35
|
+
detailFontSize = props.detailFontSize;
|
|
36
|
+
var CHART_STYLE = {
|
|
37
|
+
width: '99.9%',
|
|
38
|
+
height: height || 400
|
|
39
|
+
};
|
|
40
|
+
var getColor = function getColor(value) {
|
|
41
|
+
return value <= (legendValue !== null && legendValue !== void 0 ? legendValue : 75) ? red[500] : green[300];
|
|
42
|
+
};
|
|
43
|
+
var formatTooltip = function formatTooltip() {
|
|
44
|
+
return tooltip ? "".concat(tooltip.label, ": ").concat(Number(tooltip.labelComplement) * 100, " %") : '';
|
|
45
|
+
};
|
|
46
|
+
var formatAxisLabel = function formatAxisLabel(value) {
|
|
47
|
+
var match = axisLabel === null || axisLabel === void 0 ? void 0 : axisLabel.find(function (item) {
|
|
48
|
+
return item.limit === value;
|
|
49
|
+
});
|
|
50
|
+
return match ? match.label : '';
|
|
51
|
+
};
|
|
52
|
+
var toolbox = toolboxTooltip && {
|
|
53
|
+
showTitle: false,
|
|
54
|
+
top: '10%',
|
|
55
|
+
right: '15%',
|
|
56
|
+
feature: {
|
|
57
|
+
saveAsImage: toolboxTooltip.saveAsImage && (0, _auxiliarFunctions.getSaveAsImage)((_toolboxTooltip$saveA = toolboxTooltip.saveAsImage.title) !== null && _toolboxTooltip$saveA !== void 0 ? _toolboxTooltip$saveA : '')
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
var options = {
|
|
61
|
+
series: [{
|
|
62
|
+
type: 'gauge',
|
|
63
|
+
startAngle: 180,
|
|
64
|
+
endAngle: 0,
|
|
65
|
+
center: ['50%', '70%'],
|
|
66
|
+
radius: '90%',
|
|
67
|
+
min: 0,
|
|
68
|
+
max: 1,
|
|
69
|
+
splitNumber: 8,
|
|
70
|
+
data: data,
|
|
71
|
+
axisLine: {
|
|
72
|
+
lineStyle: {
|
|
73
|
+
width: axisLineWidth !== null && axisLineWidth !== void 0 ? axisLineWidth : 75,
|
|
74
|
+
color: colorLine !== null && colorLine !== void 0 ? colorLine : [[0.25, red[500]], [0.5, orange[600]], [0.75, amber[500]], [1, green[300]]]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
pointer: {
|
|
78
|
+
width: 20,
|
|
79
|
+
length: '95%',
|
|
80
|
+
offsetCenter: [0, '-5%'],
|
|
81
|
+
icon: 'path://M12.8,-0.7l12,-40.1H0.7L12.8,-0.7z',
|
|
82
|
+
itemStyle: {
|
|
83
|
+
color: gray[900]
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
axisTick: {
|
|
87
|
+
length: 0
|
|
88
|
+
},
|
|
89
|
+
splitLine: {
|
|
90
|
+
length: 0
|
|
91
|
+
},
|
|
92
|
+
axisLabel: {
|
|
93
|
+
color: gray[800],
|
|
94
|
+
fontSize: 16,
|
|
95
|
+
distance: -40,
|
|
96
|
+
rotate: 'tangential',
|
|
97
|
+
formatter: formatAxisLabel
|
|
98
|
+
},
|
|
99
|
+
title: {
|
|
100
|
+
fontSize: titleFontSize !== null && titleFontSize !== void 0 ? titleFontSize : 30,
|
|
101
|
+
color: gray[800],
|
|
102
|
+
offsetCenter: [0, '20%']
|
|
103
|
+
},
|
|
104
|
+
detail: {
|
|
105
|
+
fontSize: detailFontSize !== null && detailFontSize !== void 0 ? detailFontSize : 24,
|
|
106
|
+
color: gray[900],
|
|
107
|
+
valueAnimation: true,
|
|
108
|
+
offsetCenter: [0, '40%'],
|
|
109
|
+
formatter: function formatter(value) {
|
|
110
|
+
return Math.round(value * 100) + ' %';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}],
|
|
114
|
+
tooltip: {
|
|
115
|
+
trigger: 'item',
|
|
116
|
+
formatter: formatTooltip,
|
|
117
|
+
backgroundColor: "".concat(neutral[200], "99"),
|
|
118
|
+
textStyle: {
|
|
119
|
+
fontFamily: 'Roboto, Helvetica, Arial, sans-serif',
|
|
120
|
+
fontSize: 11.5,
|
|
121
|
+
color: neutral[50]
|
|
122
|
+
},
|
|
123
|
+
extraCssText: 'border: none; padding: 6px;'
|
|
124
|
+
},
|
|
125
|
+
toolbox: _objectSpread(_objectSpread({}, toolbox), {}, {
|
|
126
|
+
tooltip: _objectSpread(_objectSpread({}, _commonStyles.TOOLTIP_DEFAULT_PROPS), {}, {
|
|
127
|
+
// @ts-expect-error issue
|
|
128
|
+
// if the trigger it's not set to none, the tooltip shows an arrow
|
|
129
|
+
trigger: 'none',
|
|
130
|
+
formatter: function formatter(param) {
|
|
131
|
+
return "<div>".concat(param.title, "</div>");
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
};
|
|
136
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_echartsForReact["default"], {
|
|
137
|
+
option: options,
|
|
138
|
+
style: CHART_STYLE
|
|
139
|
+
}), /*#__PURE__*/_react["default"].createElement(_commonStyles.GaugeLegendContainer, null, legendData === null || legendData === void 0 ? void 0 : legendData.map(function (it, i) {
|
|
140
|
+
return /*#__PURE__*/_react["default"].createElement(_commonStyles.GaugeLegendContent, {
|
|
141
|
+
key: i
|
|
142
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, it.icon), /*#__PURE__*/_react["default"].createElement(_commonStyles.GaugeCircle, {
|
|
143
|
+
color: getColor(it.legend)
|
|
144
|
+
}), /*#__PURE__*/_react["default"].createElement(_commonStyles.GaugeLegend, null, it.legend + ' %'));
|
|
145
|
+
})));
|
|
146
|
+
};
|
|
147
|
+
var _default = exports["default"] = GaugeChart;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import GaugeChart from './GaugeChart';
|
|
3
|
+
declare const meta: Meta<typeof GaugeChart>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof GaugeChart>;
|
|
6
|
+
export declare const gaugeChart: Story;
|
|
7
|
+
export declare const gaugeChartWithoutLegend: Story;
|
|
8
|
+
export declare const gaugeChartWithLabelAndTooltip: Story;
|
package/core/types.d.ts
CHANGED
|
@@ -102,6 +102,10 @@ export type PictorialEntryData = {
|
|
|
102
102
|
value: number;
|
|
103
103
|
symbol: string;
|
|
104
104
|
};
|
|
105
|
+
export type GaugeData = {
|
|
106
|
+
value: number;
|
|
107
|
+
name: string;
|
|
108
|
+
};
|
|
105
109
|
export type EntryDataNTuples = Array<EntryData[]>;
|
|
106
110
|
export type DomainValues = {
|
|
107
111
|
min: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amazing-react-charts",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "An amazing react charts package based in echarts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,14 +51,14 @@
|
|
|
51
51
|
"@testing-library/react": "16.2.0",
|
|
52
52
|
"@testing-library/user-event": "14.6.1",
|
|
53
53
|
"@types/jest": "29.5.14",
|
|
54
|
-
"@types/node": "22.13.
|
|
54
|
+
"@types/node": "22.13.5",
|
|
55
55
|
"@types/ramda": "0.30.2",
|
|
56
56
|
"@types/react": "18.3.12",
|
|
57
57
|
"@typescript-eslint/eslint-plugin": "8.24.1",
|
|
58
58
|
"@typescript-eslint/parser": "8.24.1",
|
|
59
59
|
"canvas": "2.11.2",
|
|
60
60
|
"date-fns": "4.1.0",
|
|
61
|
-
"eslint": "9.
|
|
61
|
+
"eslint": "9.21.0",
|
|
62
62
|
"eslint-config-prettier": "10.0.1",
|
|
63
63
|
"eslint-import-resolver-typescript": "3.8.3",
|
|
64
64
|
"eslint-plugin-import": "2.31.0",
|
|
@@ -68,13 +68,13 @@
|
|
|
68
68
|
"flipper-ui": "0.35.6",
|
|
69
69
|
"jest": "29.7.0",
|
|
70
70
|
"jest-environment-jsdom": "29.7.0",
|
|
71
|
-
"prettier": "3.5.
|
|
71
|
+
"prettier": "3.5.2",
|
|
72
72
|
"ramda": "0.30.1",
|
|
73
73
|
"react": "18.3.1",
|
|
74
74
|
"react-dom": "18.3.1",
|
|
75
75
|
"storybook": "8.5.8",
|
|
76
76
|
"styled-components": "6.1.15",
|
|
77
|
-
"ts-jest": "29.2.
|
|
77
|
+
"ts-jest": "29.2.6",
|
|
78
78
|
"ts-node": "10.9.2",
|
|
79
79
|
"typescript": "5.7.3",
|
|
80
80
|
"typescript-eslint": "8.24.1",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@testing-library/jest-dom';
|