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 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 CsvDownloadButtonStyle = exports.CsvDownloadButtonStyle = _styledComponents["default"].button(_templateObject6 || (_templateObject6 = (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]);
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.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.4",
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.20.1",
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.1",
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.5",
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';