@pareto-engineering/design-system 5.1.3 → 5.2.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.
Files changed (35) hide show
  1. package/dist/cjs/a/Charts/AreaChart/AreaChart.js +1 -0
  2. package/dist/cjs/a/Charts/BarChart/BarChart.js +1 -0
  3. package/dist/cjs/a/Charts/Common/CustomLegend/CustomLegend.js +6 -2
  4. package/dist/cjs/a/Charts/Common/CustomLegend/styles.scss +10 -2
  5. package/dist/cjs/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +44 -12
  6. package/dist/cjs/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  7. package/dist/cjs/a/Charts/PieChart/PieChart.js +21 -3
  8. package/dist/cjs/a/Charts/PieChart/styles.scss +88 -0
  9. package/dist/cjs/a/HamburgerButton/styles.scss +151 -9
  10. package/dist/cjs/a/XMLEditor/XMLEditor.js +4 -1
  11. package/dist/cjs/f/fields/EditorInput/EditorInput.js +8 -1
  12. package/dist/es/a/Charts/AreaChart/AreaChart.js +1 -0
  13. package/dist/es/a/Charts/BarChart/BarChart.js +1 -0
  14. package/dist/es/a/Charts/Common/CustomLegend/CustomLegend.js +6 -2
  15. package/dist/es/a/Charts/Common/CustomLegend/styles.scss +10 -2
  16. package/dist/es/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +44 -12
  17. package/dist/es/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  18. package/dist/es/a/Charts/PieChart/PieChart.js +21 -3
  19. package/dist/es/a/Charts/PieChart/styles.scss +88 -0
  20. package/dist/es/a/HamburgerButton/styles.scss +151 -9
  21. package/dist/es/a/XMLEditor/XMLEditor.js +6 -3
  22. package/dist/es/f/fields/EditorInput/EditorInput.js +8 -1
  23. package/package.json +6 -5
  24. package/src/ui/a/Charts/AreaChart/AreaChart.jsx +1 -0
  25. package/src/ui/a/Charts/BarChart/BarChart.jsx +1 -0
  26. package/src/ui/a/Charts/Common/CustomLegend/CustomLegend.jsx +11 -3
  27. package/src/ui/a/Charts/Common/CustomLegend/styles.scss +10 -2
  28. package/src/ui/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.jsx +42 -5
  29. package/src/ui/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  30. package/src/ui/a/Charts/PieChart/PieChart.jsx +19 -2
  31. package/src/ui/a/Charts/PieChart/styles.scss +88 -0
  32. package/src/ui/a/HamburgerButton/styles.scss +151 -9
  33. package/src/ui/a/XMLEditor/XMLEditor.jsx +15 -2
  34. package/src/ui/f/fields/EditorInput/EditorInput.jsx +7 -0
  35. package/tests/__snapshots__/Storyshots.test.js.snap +426 -159
@@ -5,6 +5,9 @@ $default-padding: 1rem;
5
5
  $default-text-font-size: calc(var(--s-1) * 1rem);
6
6
  $default-border-radius: .25rem;
7
7
  $default-border-line-width: .0625rem;
8
+ $default-legend-dot-width: .5rem;
9
+ $default-legend-dot-height: .5rem;
10
+ $default-legend-dot-margin-right: .3125rem;
8
11
 
9
12
  .#{bem.$base} {
10
13
  &.custom-tooltip-content {
@@ -20,3 +23,4 @@ $default-border-line-width: .0625rem;
20
23
  }
21
24
  }
22
25
  }
26
+
@@ -52,9 +52,27 @@ const PieChart = ({
52
52
  strokeWidth: 0
53
53
  }))), /*#__PURE__*/React.createElement(Tooltip, {
54
54
  content: /*#__PURE__*/React.createElement(CustomTooltipContent, {
55
- isDateValue: false
55
+ isDateValue: false,
56
+ isPieChart: true
56
57
  })
57
- }))), /*#__PURE__*/React.createElement(CustomLegend, {
58
+ }), /*#__PURE__*/React.createElement("text", {
59
+ x: "50%",
60
+ y: "50%",
61
+ textAnchor: "middle",
62
+ dominantBaseline: "middle",
63
+ style: {}
64
+ }, /*#__PURE__*/React.createElement("tspan", {
65
+ x: "50%",
66
+ dy: "-1.2em",
67
+ fontSize: "14",
68
+ fill: "grey"
69
+ }, "Total"), /*#__PURE__*/React.createElement("tspan", {
70
+ x: "50%",
71
+ dy: "1.2em",
72
+ fill: "var(--heading)",
73
+ fontSize: "22"
74
+ }, `${total}`)))), /*#__PURE__*/React.createElement(CustomLegend, {
75
+ key: id,
58
76
  colorsArray: colors,
59
77
  yKeysArray: formattedData,
60
78
  capitalizedLegend: true,
@@ -83,7 +101,7 @@ PieChart.defaultProps = {
83
101
  className: undefined,
84
102
  width: '100%',
85
103
  height: 300,
86
- innerRadius: '0%',
104
+ innerRadius: '50%',
87
105
  outerRadius: '100%'
88
106
  };
89
107
  export default PieChart;
@@ -3,7 +3,11 @@
3
3
  $default-margin: 1rem;
4
4
  $default-padding: 1rem;
5
5
  $default-box-shadow: 0 .25rem .75rem var(--ui-lines);
6
+ $soft-box-shadow: 0 .25rem 1rem var(--soft-shadow);
6
7
  $default-text-font-size: calc(var(--s-1) * 1rem);
8
+ $default-legend-dot-width: .75rem;
9
+ $default-legend-dot-height: .75rem;
10
+ $default-legend-dot-margin-right: .3125rem;
7
11
 
8
12
  .#{bem.$base} {
9
13
  &.pie-chart {
@@ -13,6 +17,90 @@ $default-text-font-size: calc(var(--s-1) * 1rem);
13
17
  margin: $default-margin 0;
14
18
  padding: $default-padding;
15
19
 
20
+ .custom-legend {
21
+ .item {
22
+ padding-top: 0;
23
+ }
24
+
25
+ .title .dot {
26
+ height: $default-legend-dot-height;
27
+ width: $default-legend-dot-width;
28
+ }
29
+
30
+ .title .text {
31
+ font-size: calc($default-text-font-size * 1.5);
32
+ }
33
+
34
+ .sub-title-percentage-container {
35
+ align-items: center;
36
+ display: flex;
37
+ gap: .8rem;
38
+ margin-left: .5rem;
39
+ width: fit-content;
40
+ }
41
+
42
+ .sub-title-percentage-container .sub-title {
43
+ font-size: calc($default-text-font-size * 1.25);
44
+ }
45
+
46
+ .sub-title-percentage-container .percentage-title {
47
+ font-size: calc($default-text-font-size * 1);
48
+ }
49
+ }
50
+
51
+ .custom-tooltip-content {
52
+ box-shadow: $soft-box-shadow;
53
+
54
+ p {
55
+ color: var(--hard-paragraph);
56
+ font-size: calc($default-text-font-size * .8);
57
+ font-weight: 600;
58
+ margin: 0;
59
+ }
60
+
61
+ .pie-chart-label {
62
+ align-items: center;
63
+ display: flex;
64
+ gap: 1.25rem;
65
+ justify-content: flex-start;
66
+
67
+ .status {
68
+ align-items: center;
69
+ display: flex;
70
+ gap: .1rem;
71
+ }
72
+
73
+ .label {
74
+ color: var(--hard-paragraph);
75
+ font-size: calc($default-text-font-size * 1);
76
+ font-weight: 600;
77
+ text-transform: capitalize;
78
+ }
79
+
80
+ .dot {
81
+ border-radius: 50%;
82
+ display: inline-block;
83
+ height: $default-legend-dot-height;
84
+ margin-right: $default-legend-dot-margin-right;
85
+ width: $default-legend-dot-width;
86
+ }
87
+
88
+ .value {
89
+ color: var(--hard-paragraph);
90
+ font-size: calc($default-text-font-size * 1);
91
+ font-weight: 600;
92
+ text-transform: capitalize;
93
+ }
94
+
95
+ .percentage-title {
96
+ color: var(--soft-paragraph);
97
+ font-size: calc($default-text-font-size * 1);
98
+ font-weight: 300;
99
+ text-transform: capitalize;
100
+ }
101
+ }
102
+ }
103
+
16
104
  .chart-header {
17
105
  align-items: center;
18
106
  display: flex;
@@ -1,6 +1,8 @@
1
1
  /* @pareto-engineering/generator-front 1.0.12 */
2
2
 
3
3
  @use "@pareto-engineering/bem";
4
+ @use "sass:math";
5
+ @use "sass:list";
4
6
 
5
7
  /*
6
8
  $hamburger-padding-x : 15px !default;
@@ -22,17 +24,157 @@ $hamburger-hover-filter : opacity(50%) !default;
22
24
  $hamburger-active-hover-filter: $hamburger-hover-filter !default;
23
25
  */
24
26
 
25
- $hamburgers-types:(
26
- squeeze
27
- );
28
- $hamburger-layer-color : var(--x);
29
- $hamburger-padding-x : .5em;
30
- $hamburger-padding-y : .5em;
27
+ // Define the variables to be used with the hamburgers library
28
+ $hamburger-types: (squeeze);
29
+ $hamburger-layer-color: var(--x);
30
+ $hamburger-padding-x: .5em;
31
+ $hamburger-padding-y: .5em;
31
32
 
32
- // Open the following file for the template
33
+ // Additional hamburger variables with defaults
34
+ $hamburger-layer-width: 40px !default;
35
+ $hamburger-layer-height: 4px !default;
36
+ $hamburger-layer-spacing: 6px !default;
37
+ $hamburger-layer-border-radius: 4px !default;
38
+ $hamburger-hover-opacity: .7 !default;
39
+ $hamburger-hover-use-filter: false !default;
40
+ $hamburger-hover-filter: opacity(50%) !default;
41
+ $hamburger-active-layer-color: $hamburger-layer-color !default;
42
+ $hamburger-active-hover-opacity: $hamburger-hover-opacity !default;
43
+ $hamburger-active-hover-filter: $hamburger-hover-filter !default;
44
+
45
+ // Base Hamburger Styles
46
+ // ==================================================
47
+ .hamburger {
48
+ background-color: transparent;
49
+ border: 0;
50
+ color: inherit;
51
+ cursor: pointer;
52
+ display: inline-block;
53
+
54
+ // Normalize (<button>)
55
+ font: inherit;
56
+ margin: 0;
57
+ overflow: visible;
58
+ padding: $hamburger-padding-y $hamburger-padding-x;
59
+ text-transform: none;
60
+ transition-duration: .15s;
61
+
62
+ transition-property: opacity, filter;
63
+ transition-timing-function: linear;
64
+
65
+ &:hover {
66
+ @if $hamburger-hover-use-filter == true {
67
+ filter: $hamburger-hover-filter;
68
+ }
69
+ @else {
70
+ opacity: $hamburger-hover-opacity;
71
+ }
72
+ }
73
+
74
+ &.is-active {
75
+ &:hover {
76
+ @if $hamburger-hover-use-filter == true {
77
+ filter: $hamburger-active-hover-filter;
78
+ }
79
+ @else {
80
+ opacity: $hamburger-active-hover-opacity;
81
+ }
82
+ }
83
+
84
+ .hamburger-inner,
85
+ .hamburger-inner::before,
86
+ .hamburger-inner::after {
87
+ background-color: $hamburger-active-layer-color;
88
+ }
89
+ }
90
+ }
91
+
92
+ .hamburger-box {
93
+ display: inline-block;
94
+ height: $hamburger-layer-height * 3 + $hamburger-layer-spacing * 2;
95
+ position: relative;
96
+ width: $hamburger-layer-width;
97
+ }
98
+
99
+ .hamburger-inner {
100
+ display: block;
101
+ margin-top: math.div($hamburger-layer-height, -2);
102
+ top: 50%;
103
+
104
+ &,
105
+ &::before,
106
+ &::after {
107
+ background-color: $hamburger-layer-color;
108
+ border-radius: $hamburger-layer-border-radius;
109
+ height: $hamburger-layer-height;
110
+ position: absolute;
111
+ transition-duration: .15s;
112
+ transition-property: transform;
113
+ transition-timing-function: ease;
114
+ width: $hamburger-layer-width;
115
+ }
116
+
117
+ &::before,
118
+ &::after {
119
+ content: "";
120
+ display: block;
121
+ }
122
+
123
+ &::before {
124
+ top: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
125
+ }
126
+
127
+ &::after {
128
+ bottom: ($hamburger-layer-spacing + $hamburger-layer-height) * -1;
129
+ }
130
+ }
131
+
132
+ // Squeeze Type
133
+ // ==================================================
134
+
135
+ @if list.index($hamburger-types, squeeze) {
136
+ /*
137
+ * Squeeze
138
+ */
139
+ .hamburger-squeeze {
140
+ .hamburger-inner {
141
+ transition-duration: .1s;
142
+ transition-timing-function: cubic-bezier(.55, .055, .675, .19);
143
+
144
+ &::before {
145
+ transition: top .1s .12s ease,
146
+ opacity .1s ease;
147
+ }
148
+
149
+ &::after {
150
+ transition: bottom .1s .12s ease,
151
+ transform .1s cubic-bezier(.55, .055, .675, .19);
152
+ }
153
+ }
154
+
155
+ &.is-active {
156
+ .hamburger-inner {
157
+ transform: rotate(45deg);
158
+ transition-delay: .12s;
159
+ transition-timing-function: cubic-bezier(.215, .61, .355, 1);
160
+
161
+ &::before {
162
+ opacity: 0;
163
+ top: 0;
164
+ transition: top .1s ease,
165
+ opacity .1s .12s ease;
166
+ }
33
167
 
34
- @import "hamburgers/_sass/hamburgers/hamburgers";
35
- @import "hamburgers/_sass/hamburgers/types/squeeze";
168
+ &::after {
169
+ bottom: 0;
170
+ transform: rotate(-90deg);
171
+ transition: bottom .1s ease,
172
+ transform .1s .12s cubic-bezier(.215, .61, .355, 1);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
36
178
 
37
179
  /*
38
180
  .#{bem.$base}.hamburger-button{
@@ -2,9 +2,9 @@
2
2
  import * as React from 'react';
3
3
  import { useEffect, useRef } from 'react';
4
4
  import PropTypes from 'prop-types';
5
- import { EditorState } from '@codemirror/state';
5
+ import { EditorState, Prec } from '@codemirror/state';
6
6
  import { EditorView, keymap, lineNumbers, drawSelection, dropCursor, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, crosshairCursor, rectangularSelection } from '@codemirror/view';
7
- import { defaultKeymap, indentWithTab, history, historyKeymap } from '@codemirror/commands';
7
+ import { defaultKeymap, indentWithTab, history, historyKeymap, insertNewlineAndIndent } from '@codemirror/commands';
8
8
  import { indentOnInput, bracketMatching, foldGutter } from '@codemirror/language';
9
9
  import { xml } from '@codemirror/lang-xml';
10
10
  import styleNames from '@pareto-engineering/bem/exports';
@@ -33,7 +33,10 @@ const XMLEditor = ({
33
33
  useEffect(() => {
34
34
  const startState = EditorState.create({
35
35
  doc: config,
36
- extensions: [keymap.of([defaultKeymap, indentWithTab, ...historyKeymap]), indentOnInput(), lineNumbers(), bracketMatching(), foldGutter(), drawSelection(), highlightActiveLine(), highlightActiveLineGutter(), highlightSpecialChars(), dropCursor(), rectangularSelection(), crosshairCursor(), xml(), history(), theme, EditorState.readOnly.of(readOnly), EditorView.updateListener.of(view => {
36
+ extensions: [Prec.highest(keymap.of([{
37
+ key: 'Enter',
38
+ run: view => insertNewlineAndIndent(view)
39
+ }])), keymap.of([defaultKeymap, indentWithTab, ...historyKeymap]), indentOnInput(), lineNumbers(), bracketMatching(), foldGutter(), drawSelection(), highlightActiveLine(), highlightActiveLineGutter(), highlightSpecialChars(), dropCursor(), rectangularSelection(), crosshairCursor(), xml(), history(), theme, EditorState.readOnly.of(readOnly), EditorView.updateListener.of(view => {
37
40
  onChange(view);
38
41
  // view.state.doc.toString() to receive the current content in the editor.
39
42
  }), EditorView.focusChangeEffect.of((state, focused) => {
@@ -2,6 +2,7 @@
2
2
  /* eslint-disable import/no-extraneous-dependencies -- required here */
3
3
  import * as React from 'react';
4
4
  import { memo, useEffect } from 'react';
5
+ import { $getRoot } from 'lexical';
5
6
  import { useField, useFormikContext } from 'formik';
6
7
  import { LexicalComposer } from '@lexical/react/LexicalComposer';
7
8
  import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
@@ -57,7 +58,8 @@ const EditorInput = ({
57
58
  disabled,
58
59
  showDebugger,
59
60
  setEditorState,
60
- setPlainTextKey
61
+ setPlainTextKey,
62
+ validate
61
63
  // ...otherProps
62
64
  }) => {
63
65
  const [field,,] = useField(name);
@@ -104,6 +106,11 @@ const EditorInput = ({
104
106
  };
105
107
  const onChange = state => {
106
108
  setFieldValue(name, JSON.stringify(state));
109
+ validate?.(state.read(() => {
110
+ const root = $getRoot();
111
+ const textContent = root.getTextContent();
112
+ return textContent;
113
+ }));
107
114
  };
108
115
  const initialConfig = {
109
116
  nameSpace: name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pareto-engineering/design-system",
3
- "version": "5.1.3",
3
+ "version": "5.2.1",
4
4
  "description": "",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/es/index.js",
@@ -45,7 +45,8 @@
45
45
  "css-loader": "^6.7.3",
46
46
  "identity-obj-proxy": "^3.0.0",
47
47
  "jest-environment-jsdom": "^29.5.0",
48
- "sass-loader": "^13.2.2",
48
+ "sass": "^1.85.1",
49
+ "sass-loader": "^16.0.5",
49
50
  "storybook": "^7.0.6",
50
51
  "style-loader": "^3.3.2"
51
52
  },
@@ -60,8 +61,8 @@
60
61
  "@lexical/table": "0.12.2",
61
62
  "@lexical/utils": "0.12.2",
62
63
  "@pareto-engineering/assets": "^5.1.1",
63
- "@pareto-engineering/bem": "^5.0.0",
64
- "@pareto-engineering/styles": "^5.0.0",
64
+ "@pareto-engineering/bem": "^5.2.1",
65
+ "@pareto-engineering/styles": "^5.2.1",
65
66
  "@pareto-engineering/utils": "^5.0.0",
66
67
  "better-react-mathjax": "^2.0.3",
67
68
  "codemirror": "^6.0.1",
@@ -87,5 +88,5 @@
87
88
  "remark-math": "^6.0.0"
88
89
  },
89
90
  "browserslist": "> 2%",
90
- "gitHead": "69430d231ad4a47353233b67c9368db91758ad14"
91
+ "gitHead": "dad6ef35dec907ece7e046fdd5697e44e70c8941"
91
92
  }
@@ -78,6 +78,7 @@ const AreaChart = ({
78
78
  />
79
79
  </div>
80
80
  <CustomLegend
81
+ key={id}
81
82
  colorsArray={colors}
82
83
  yKeysArray={yKeys}
83
84
  capitalizedLegend={capitalizedLegend}
@@ -68,6 +68,7 @@ const BarChart = ({
68
68
  />
69
69
  </div>
70
70
  <CustomLegend
71
+ key={id}
71
72
  colorsArray={selectedYLabels.map((item) => item.color)}
72
73
  yKeysArray={selectedYLabels.map((item) => item.label)}
73
74
  capitalizedLegend={capitalizedLegend}
@@ -46,11 +46,19 @@ const CustomLegend = ({
46
46
  ? snakeCaseToTitleCase(getLegendItemTitle(key))
47
47
  : getLegendItemTitle(key)
48
48
  }
49
+
50
+ </span>
51
+ </div>
52
+ <div className="sub-title-percentage-container">
53
+ <span className="sub-title">
54
+ {getLegendItemSubtitle(key)}
49
55
  </span>
56
+ {key.percentage && (
57
+ <span className="percentage-title">
58
+ {`${key.percentage}%`}
59
+ </span>
60
+ )}
50
61
  </div>
51
- <span className="sub-title">
52
- {getLegendItemSubtitle(key)}
53
- </span>
54
62
  </div>
55
63
  ))}
56
64
  </div>
@@ -24,7 +24,6 @@ $default-box-shadow: 0 4px 16px 0 var(--soft-shadow);
24
24
  min-width: fit-content;
25
25
 
26
26
  .item {
27
- box-shadow: $default-box-shadow;
28
27
  padding-top: $default-padding;
29
28
  }
30
29
  }
@@ -55,12 +54,21 @@ $default-box-shadow: 0 4px 16px 0 var(--soft-shadow);
55
54
  }
56
55
  }
57
56
 
57
+
58
+
58
59
  .sub-title {
59
60
  color: var(--heading);
60
61
  display: flex;
61
62
  font-size: calc($default-text-font-size * 1.2);
62
63
  font-weight: 500;
63
- justify-content: flex-end;
64
+ justify-content: flex-start;
65
+ margin-left: 1rem;
66
+ }
67
+
68
+ .percentage-title {
69
+ color: var(--paragraph);
70
+ font-size: calc($default-text-font-size * .75);
71
+ justify-content: flex-start;
64
72
  }
65
73
  }
66
74
  }
@@ -23,6 +23,7 @@ const CustomTooltipContent = ({
23
23
  active,
24
24
  payload,
25
25
  label,
26
+ isPieChart,
26
27
  }) => {
27
28
  const formatLabelValue = (value) => {
28
29
  if (isTimeFormat) {
@@ -37,8 +38,40 @@ const CustomTooltipContent = ({
37
38
  return value
38
39
  }
39
40
 
40
- if (active && payload && payload.length) {
41
- const newPayload = payload.filter((item) => item.name !== 'bounds')
41
+ const renderContent = (entry) => {
42
+ if (isPieChart) {
43
+ return (
44
+ <>
45
+ <p>Submissions</p>
46
+ <div className="pie-chart-label">
47
+ <div className="status">
48
+ <span
49
+ className="dot"
50
+ style={{ backgroundColor: entry?.payload?.color }}
51
+ />
52
+ <p className="label" key={`${entry.name}`} style={{ color: entry.color, textTransform: 'capitalize' }}>
53
+ {`${snakeCaseToTitleCase(entry.name)} `}
54
+ </p>
55
+ </div>
56
+ <p className="value">
57
+ {`${formatLabelValue(entry.value)}`}
58
+ </p>
59
+ <p className="percentage-title">
60
+ {`${entry?.payload?.percentage}%`}
61
+ </p>
62
+ </div>
63
+ </>
64
+ )
65
+ }
66
+ return (
67
+ <p className="label" key={`${entry.name}`} style={{ color: entry.color, textTransform: 'capitalize' }}>
68
+ {`${snakeCaseToTitleCase(entry.name)}: ${formatLabelValue(entry.value)}`}
69
+ </p>
70
+ )
71
+ }
72
+
73
+ if (active && payload && payload?.length) {
74
+ const newPayload = payload.filter((item) => item?.name !== 'bounds')
42
75
  return (
43
76
  <div
44
77
  id={id}
@@ -54,9 +87,7 @@ const CustomTooltipContent = ({
54
87
  {isDateValue ? formatDate(label, dateFormat) : label}
55
88
  </p>
56
89
  {newPayload.map((entry) => (
57
- <p className="label" key={`${entry.name}`} style={{ color: entry.color, textTransform: 'capitalize' }}>
58
- {`${snakeCaseToTitleCase(entry.name)}: ${formatLabelValue(entry.value)}`}
59
- </p>
90
+ renderContent(entry)
60
91
  ))}
61
92
  </div>
62
93
  )
@@ -106,12 +137,18 @@ CustomTooltipContent.propTypes = {
106
137
  *The label value which is active now, usually calculated internally.
107
138
  */
108
139
  label:PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
140
+
141
+ /**
142
+ * Flag on whether the chart is a pie chart or not
143
+ */
144
+ isPieChart:PropTypes.bool,
109
145
  }
110
146
 
111
147
  CustomTooltipContent.defaultProps = {
112
148
  isTimeFormat:false,
113
149
  isDateValue :true,
114
150
  dateFormat :DATE_FORMATS.HUMAN_READABLE,
151
+ isPieChart :false,
115
152
  }
116
153
 
117
154
  export default CustomTooltipContent
@@ -5,6 +5,9 @@ $default-padding: 1rem;
5
5
  $default-text-font-size: calc(var(--s-1) * 1rem);
6
6
  $default-border-radius: .25rem;
7
7
  $default-border-line-width: .0625rem;
8
+ $default-legend-dot-width: .5rem;
9
+ $default-legend-dot-height: .5rem;
10
+ $default-legend-dot-margin-right: .3125rem;
8
11
 
9
12
  .#{bem.$base} {
10
13
  &.custom-tooltip-content {
@@ -20,3 +23,4 @@ $default-border-line-width: .0625rem;
20
23
  }
21
24
  }
22
25
  }
26
+
@@ -78,10 +78,27 @@ const PieChart = ({
78
78
  />
79
79
  ))}
80
80
  </Pie>
81
- <Tooltip content={<CustomTooltipContent isDateValue={false} />} />
81
+ <Tooltip content={<CustomTooltipContent isDateValue={false} isPieChart />} />
82
+
83
+ <text
84
+ x="50%"
85
+ y="50%"
86
+ textAnchor="middle"
87
+ dominantBaseline="middle"
88
+ style={{
89
+ }}
90
+ >
91
+ <tspan x="50%" dy="-1.2em" fontSize="14" fill="grey">
92
+ Total
93
+ </tspan>
94
+ <tspan x="50%" dy="1.2em" fill="var(--heading)" fontSize="22">
95
+ {`${total}`}
96
+ </tspan>
97
+ </text>
82
98
  </RechartsPieChart>
83
99
  </ResponsiveContainer>
84
100
  <CustomLegend
101
+ key={id}
85
102
  colorsArray={colors}
86
103
  yKeysArray={formattedData}
87
104
  capitalizedLegend
@@ -118,7 +135,7 @@ PieChart.defaultProps = {
118
135
  className :undefined,
119
136
  width :'100%',
120
137
  height :300,
121
- innerRadius:'0%',
138
+ innerRadius:'50%',
122
139
  outerRadius:'100%',
123
140
  }
124
141