@pareto-engineering/design-system 5.2.0 → 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 (32) 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/es/a/Charts/AreaChart/AreaChart.js +1 -0
  12. package/dist/es/a/Charts/BarChart/BarChart.js +1 -0
  13. package/dist/es/a/Charts/Common/CustomLegend/CustomLegend.js +6 -2
  14. package/dist/es/a/Charts/Common/CustomLegend/styles.scss +10 -2
  15. package/dist/es/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +44 -12
  16. package/dist/es/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  17. package/dist/es/a/Charts/PieChart/PieChart.js +21 -3
  18. package/dist/es/a/Charts/PieChart/styles.scss +88 -0
  19. package/dist/es/a/HamburgerButton/styles.scss +151 -9
  20. package/dist/es/a/XMLEditor/XMLEditor.js +6 -3
  21. package/package.json +6 -5
  22. package/src/ui/a/Charts/AreaChart/AreaChart.jsx +1 -0
  23. package/src/ui/a/Charts/BarChart/BarChart.jsx +1 -0
  24. package/src/ui/a/Charts/Common/CustomLegend/CustomLegend.jsx +11 -3
  25. package/src/ui/a/Charts/Common/CustomLegend/styles.scss +10 -2
  26. package/src/ui/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.jsx +42 -5
  27. package/src/ui/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  28. package/src/ui/a/Charts/PieChart/PieChart.jsx +19 -2
  29. package/src/ui/a/Charts/PieChart/styles.scss +88 -0
  30. package/src/ui/a/HamburgerButton/styles.scss +151 -9
  31. package/src/ui/a/XMLEditor/XMLEditor.jsx +15 -2
  32. package/tests/__snapshots__/Storyshots.test.js.snap +426 -159
@@ -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) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pareto-engineering/design-system",
3
- "version": "5.2.0",
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": "2f0f3c933a23635520aebf9b3bb932a4063c432e"
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
 
@@ -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;