@pareto-engineering/design-system 5.0.4 → 5.1.0

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 (78) hide show
  1. package/dist/cjs/a/Charts/AreaChart/AreaChart.js +3 -13
  2. package/dist/cjs/a/Charts/BarChart/BarChart.js +6 -4
  3. package/dist/cjs/a/Charts/Common/CustomLegend/CustomLegend.js +26 -7
  4. package/dist/cjs/a/Charts/Common/CustomLegend/styles.scss +41 -14
  5. package/dist/cjs/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +18 -7
  6. package/dist/cjs/a/Charts/Common/YLabelsDropDown/YlabelsDropDown.js +3 -4
  7. package/dist/cjs/a/Charts/Common/YLabelsDropDown/styles.scss +7 -6
  8. package/dist/cjs/a/Charts/PieChart/PieChart.js +99 -0
  9. package/dist/cjs/a/Charts/PieChart/index.js +13 -0
  10. package/dist/cjs/a/Charts/PieChart/styles.scss +48 -0
  11. package/dist/cjs/a/Charts/index.js +8 -1
  12. package/dist/cjs/a/Notification/styles.scss +17 -5
  13. package/dist/cjs/a/index.js +6 -0
  14. package/dist/cjs/f/FormInput/FormInput.js +1 -1
  15. package/dist/cjs/f/fields/LatexPreviewInput/LatexPreviewInput.js +1 -1
  16. package/dist/cjs/f/fields/LatexPreviewInput/styles.scss +1 -0
  17. package/dist/cjs/f/fields/TextareaInput/TextareaInput.js +4 -2
  18. package/dist/cjs/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.js +27 -1
  19. package/dist/cjs/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +15 -0
  20. package/dist/cjs/g/FormBuilder/common/Builder/common/Section/Section.js +6 -2
  21. package/dist/cjs/g/FormBuilder/common/Renderer/Renderer.js +6 -0
  22. package/dist/cjs/utils/applyCharacterLimit.js +75 -0
  23. package/dist/cjs/utils/formatting.js +10 -2
  24. package/dist/cjs/utils/index.js +14 -1
  25. package/dist/es/a/Charts/AreaChart/AreaChart.js +3 -13
  26. package/dist/es/a/Charts/BarChart/BarChart.js +6 -4
  27. package/dist/es/a/Charts/Common/CustomLegend/CustomLegend.js +38 -21
  28. package/dist/es/a/Charts/Common/CustomLegend/styles.scss +41 -14
  29. package/dist/es/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +19 -8
  30. package/dist/es/a/Charts/Common/YLabelsDropDown/YlabelsDropDown.js +3 -5
  31. package/dist/es/a/Charts/Common/YLabelsDropDown/styles.scss +7 -6
  32. package/dist/es/a/Charts/PieChart/PieChart.js +89 -0
  33. package/dist/es/a/Charts/PieChart/index.js +1 -0
  34. package/dist/es/a/Charts/PieChart/styles.scss +48 -0
  35. package/dist/es/a/Charts/index.js +2 -1
  36. package/dist/es/a/Notification/styles.scss +17 -5
  37. package/dist/es/a/index.js +1 -1
  38. package/dist/es/f/FormInput/FormInput.js +1 -1
  39. package/dist/es/f/fields/LatexPreviewInput/LatexPreviewInput.js +1 -1
  40. package/dist/es/f/fields/LatexPreviewInput/styles.scss +1 -0
  41. package/dist/es/f/fields/TextareaInput/TextareaInput.js +4 -2
  42. package/dist/es/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.js +27 -1
  43. package/dist/es/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +15 -0
  44. package/dist/es/g/FormBuilder/common/Builder/common/Section/Section.js +6 -2
  45. package/dist/es/g/FormBuilder/common/Renderer/Renderer.js +6 -0
  46. package/dist/es/utils/applyCharacterLimit.js +67 -0
  47. package/dist/es/utils/formatting.js +7 -0
  48. package/dist/es/utils/index.js +2 -1
  49. package/package.json +3 -3
  50. package/src/stories/a/AreaChart.stories.jsx +1 -1
  51. package/src/stories/a/BarChart.stories.jsx +1 -1
  52. package/src/stories/a/PieChart.stories.jsx +53 -0
  53. package/src/ui/a/Charts/AreaChart/AreaChart.jsx +8 -14
  54. package/src/ui/a/Charts/BarChart/BarChart.jsx +4 -2
  55. package/src/ui/a/Charts/Common/CustomLegend/CustomLegend.jsx +54 -29
  56. package/src/ui/a/Charts/Common/CustomLegend/styles.scss +41 -14
  57. package/src/ui/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.jsx +25 -13
  58. package/src/ui/a/Charts/Common/YLabelsDropDown/YlabelsDropDown.jsx +4 -4
  59. package/src/ui/a/Charts/Common/YLabelsDropDown/styles.scss +7 -6
  60. package/src/ui/a/Charts/PieChart/PieChart.jsx +125 -0
  61. package/src/ui/a/Charts/PieChart/index.js +1 -0
  62. package/src/ui/a/Charts/PieChart/styles.scss +48 -0
  63. package/src/ui/a/Charts/index.js +1 -0
  64. package/src/ui/a/Notification/styles.scss +17 -5
  65. package/src/ui/a/index.js +1 -1
  66. package/src/ui/f/FormInput/FormInput.jsx +1 -0
  67. package/src/ui/f/fields/LatexPreviewInput/LatexPreviewInput.jsx +1 -0
  68. package/src/ui/f/fields/LatexPreviewInput/styles.scss +1 -0
  69. package/src/ui/f/fields/TextareaInput/TextareaInput.jsx +2 -0
  70. package/src/ui/g/FormBuilder/common/Builder/common/InputBuilder/InputBuilder.jsx +34 -0
  71. package/src/ui/g/FormBuilder/common/Builder/common/InputBuilder/styles.scss +15 -0
  72. package/src/ui/g/FormBuilder/common/Builder/common/Section/Section.jsx +10 -2
  73. package/src/ui/g/FormBuilder/common/Renderer/Renderer.jsx +5 -0
  74. package/src/ui/g/FormBuilder/common/Renderer/common/Section/Section.jsx +0 -1
  75. package/src/ui/utils/applyCharacterLimit.js +80 -0
  76. package/src/ui/utils/formatting.js +8 -0
  77. package/src/ui/utils/index.js +4 -1
  78. package/tests/__snapshots__/Storyshots.test.js.snap +1165 -429
@@ -40,17 +40,6 @@ const AreaChart = _ref => {
40
40
  color: colors[yKeys.indexOf(key)]
41
41
  }));
42
42
  const [selectedYLabels, setSelectedYLabels] = (0, _react.useState)(allYLabels);
43
- const processedData = data.map(item => {
44
- const yValues = yKeys.map(key => item[key]);
45
- const lowerBound = Math.min(...yValues);
46
- const upperBound = Math.max(...yValues);
47
- const margin = (upperBound - lowerBound) * 0.1;
48
- return {
49
- ...item,
50
- bounds: [lowerBound - margin, upperBound + margin],
51
- isTimeFormat
52
- };
53
- });
54
43
  const yAxisBounds = () => {
55
44
  const yValues = data.map(item => yKeys.map(key => item[key]));
56
45
  const min = Math.min(...yValues.flat());
@@ -75,7 +64,7 @@ const AreaChart = _ref => {
75
64
  width: width,
76
65
  height: height
77
66
  }, /*#__PURE__*/React.createElement(_recharts.AreaChart, {
78
- data: processedData
67
+ data: data
79
68
  }, /*#__PURE__*/React.createElement(_recharts.CartesianGrid, {
80
69
  strokeDasharray: "3 3"
81
70
  }), /*#__PURE__*/React.createElement(_recharts.XAxis, {
@@ -116,7 +105,8 @@ const AreaChart = _ref => {
116
105
  }
117
106
  }), /*#__PURE__*/React.createElement(_recharts.Tooltip, {
118
107
  content: /*#__PURE__*/React.createElement(_Common.CustomTooltipContent, {
119
- xLabel: xLabel
108
+ dateFormat: dateFormat,
109
+ isTimeFormat: isTimeFormat
120
110
  })
121
111
  }), filled && /*#__PURE__*/React.createElement(_recharts.Area, {
122
112
  id: "bounds",
@@ -30,8 +30,9 @@ const BarChart = _ref => {
30
30
  yLabel,
31
31
  colors,
32
32
  height,
33
- width
34
- // ...otherProps
33
+ width,
34
+ isTimeFormat,
35
+ capitalizedLegend
35
36
  } = _ref;
36
37
  const allYLabels = yKeys.map(key => ({
37
38
  label: key,
@@ -49,7 +50,8 @@ const BarChart = _ref => {
49
50
  setSelectedYLabels: setSelectedYLabels
50
51
  })), /*#__PURE__*/React.createElement(_Common.CustomLegend, {
51
52
  colorsArray: selectedYLabels.map(item => item.color),
52
- yKeysArray: selectedYLabels.map(item => item.label)
53
+ yKeysArray: selectedYLabels.map(item => item.label),
54
+ capitalizedLegend: capitalizedLegend
53
55
  }), /*#__PURE__*/React.createElement(_recharts.ResponsiveContainer, {
54
56
  width: width,
55
57
  height: height
@@ -79,7 +81,7 @@ const BarChart = _ref => {
79
81
  tickLine: false
80
82
  }), /*#__PURE__*/React.createElement(_recharts.Tooltip, {
81
83
  content: /*#__PURE__*/React.createElement(_Common.CustomTooltipContent, {
82
- xLabel: xLabel
84
+ isTimeFormat: isTimeFormat
83
85
  })
84
86
  }), selectedYLabels.map(key => /*#__PURE__*/React.createElement(_recharts.Bar, {
85
87
  stackId: "a",
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
10
+ var _utils = require("../../../../utils");
10
11
  require("./styles.scss");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
@@ -19,19 +20,19 @@ const CustomLegend = _ref => {
19
20
  className: userClassName,
20
21
  colorsArray,
21
22
  yKeysArray,
23
+ orientation,
24
+ getLegendItemTitle,
25
+ getLegendItemSubtitle,
22
26
  capitalizedLegend
23
27
  } = _ref;
24
- const capitalizeWord = word => {
25
- if (!capitalizedLegend) return word;
26
- const wordsToCapitalize = ['average', 'best', 'worst'];
27
- return word.split(' ').map(part => wordsToCapitalize.includes(part.toLowerCase()) ? part.charAt(0).toUpperCase() + part.slice(1).toLowerCase() : part).join(' ');
28
- };
29
28
  return /*#__PURE__*/React.createElement("div", {
30
29
  id: id,
31
- className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' ')
30
+ className: [baseClassName, componentClassName, userClassName, orientation].filter(e => e).join(' ')
32
31
  }, yKeysArray.map((key, index) => /*#__PURE__*/React.createElement("div", {
33
32
  key: key,
34
33
  className: "item"
34
+ }, /*#__PURE__*/React.createElement("div", {
35
+ className: "title"
35
36
  }, /*#__PURE__*/React.createElement("span", {
36
37
  className: "dot",
37
38
  style: {
@@ -39,7 +40,9 @@ const CustomLegend = _ref => {
39
40
  }
40
41
  }), /*#__PURE__*/React.createElement("span", {
41
42
  className: "text"
42
- }, capitalizeWord(key)))));
43
+ }, capitalizedLegend ? (0, _utils.snakeCaseToTitleCase)(getLegendItemTitle(key)) : getLegendItemTitle(key))), /*#__PURE__*/React.createElement("span", {
44
+ className: "sub-title"
45
+ }, getLegendItemSubtitle(key)))));
43
46
  };
44
47
  CustomLegend.propTypes = {
45
48
  /**
@@ -58,12 +61,28 @@ CustomLegend.propTypes = {
58
61
  * Array of keys for the y-axis data.
59
62
  */
60
63
  yKeysArray: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
64
+ /**
65
+ * The orientation of the Legend
66
+ */
67
+ orientation: _propTypes.default.oneOf(['vertical', 'horizontal']),
68
+ /**
69
+ * The function to get the legendItemKey
70
+ */
71
+ getLegendItemTitle: _propTypes.default.func,
72
+ /**
73
+ * The function to get legend children
74
+ */
75
+ getLegendItemSubtitle: _propTypes.default.func,
61
76
  /**
62
77
  * Flag on whether to capitalize legend keys
63
78
  */
64
79
  capitalizedLegend: _propTypes.default.bool
65
80
  };
66
81
  CustomLegend.defaultProps = {
82
+ orientation: 'horizontal',
83
+ getLegendItemTitle: key => key,
84
+ /* eslint-disable no-unused-vars */
85
+ getLegendItemSubtitle: () => {},
67
86
  capitalizedLegend: false
68
87
  };
69
88
  var _default = exports.default = CustomLegend;
@@ -1,6 +1,7 @@
1
1
  @use "@pareto-engineering/bem";
2
2
 
3
3
  $default-padding: 1rem;
4
+ $default-margin: 1rem;
4
5
  $default-text-font-size: calc(var(--s-1) * 1rem);
5
6
  $default-border-radius: .25rem;
6
7
  $default-legend-gap: .625rem;
@@ -8,33 +9,59 @@ $default-legend-padding: calc($default-padding * .125) calc($default-padding * .
8
9
  $default-legend-dot-width: .5rem;
9
10
  $default-legend-dot-height: .5rem;
10
11
  $default-legend-dot-margin-right: .3125rem;
12
+ $default-box-shadow: 0 4px 16px 0 var(--soft-shadow);
11
13
 
12
14
  .#{bem.$base} {
13
15
  &.custom-legend {
14
- display: flex;
15
16
  gap: $default-legend-gap;
16
17
  justify-content: flex-end;
17
18
  padding-bottom: $default-padding;
18
19
  padding-right: calc($default-padding * .25);
19
20
 
21
+ &.vertical {
22
+ display: block;
23
+ margin-right: calc($default-margin * 2);
24
+ min-width: fit-content;
25
+
26
+ .item {
27
+ box-shadow: $default-box-shadow;
28
+ padding-top: $default-padding;
29
+ }
30
+ }
31
+
32
+ &.horizontal {
33
+ display: flex;
34
+ }
35
+
20
36
  .item {
21
- align-items: center;
22
37
  border-radius: $default-border-radius;
23
- display: flex;
24
38
  padding: $default-legend-padding;
25
- }
26
39
 
27
- .dot {
28
- border-radius: 50%;
29
- display: inline-block;
30
- height: $default-legend-dot-height;
31
- margin-right: $default-legend-dot-margin-right;
32
- width: $default-legend-dot-width;
33
- }
40
+ .title {
41
+ align-items: center;
42
+ display: flex;
43
+
44
+ .dot {
45
+ border-radius: 50%;
46
+ display: inline-block;
47
+ height: $default-legend-dot-height;
48
+ margin-right: $default-legend-dot-margin-right;
49
+ width: $default-legend-dot-width;
50
+ }
51
+
52
+ .text {
53
+ color: var(--paragraph);
54
+ font-size: calc($default-text-font-size * .75);
55
+ }
56
+ }
34
57
 
35
- .text {
36
- color: var(--paragraph);
37
- font-size: calc($default-text-font-size * .75);
58
+ .sub-title {
59
+ color: var(--heading);
60
+ display: flex;
61
+ font-size: calc($default-text-font-size * 1.2);
62
+ font-weight: 500;
63
+ justify-content: flex-end;
64
+ }
38
65
  }
39
66
  }
40
67
  }
@@ -18,13 +18,23 @@ const CustomTooltipContent = _ref => {
18
18
  let {
19
19
  id,
20
20
  className: userClassName,
21
- xLabel,
22
21
  dateFormat,
23
22
  isTimeFormat,
23
+ isDateValue,
24
24
  active,
25
25
  payload,
26
26
  label
27
27
  } = _ref;
28
+ const formatLabelValue = value => {
29
+ if (isTimeFormat) {
30
+ return (0, _utils.formatTime)(value);
31
+ }
32
+ if (typeof value === 'number') {
33
+ if (Number.isInteger(value)) return value;
34
+ return value.toFixed(2);
35
+ }
36
+ return value;
37
+ };
28
38
  if (active && payload && payload.length) {
29
39
  const newPayload = payload.filter(item => item.name !== 'bounds');
30
40
  return /*#__PURE__*/React.createElement("div", {
@@ -32,14 +42,14 @@ const CustomTooltipContent = _ref => {
32
42
  className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' ')
33
43
  }, /*#__PURE__*/React.createElement("p", {
34
44
  className: "label"
35
- }, `${xLabel}: ${(0, _utils.formatDate)(label, dateFormat)}`), newPayload.map(entry => /*#__PURE__*/React.createElement("p", {
45
+ }, isDateValue ? (0, _utils.formatDate)(label, dateFormat) : label), newPayload.map(entry => /*#__PURE__*/React.createElement("p", {
36
46
  className: "label",
37
47
  key: `${entry.name}`,
38
48
  style: {
39
49
  color: entry.color,
40
50
  textTransform: 'capitalize'
41
51
  }
42
- }, `${entry.name}: ${isTimeFormat ? (0, _utils.formatTime)(entry.value) : entry.value}`)));
52
+ }, `${(0, _utils.snakeCaseToTitleCase)(entry.name)}: ${formatLabelValue(entry.value)}`)));
43
53
  }
44
54
  return null;
45
55
  };
@@ -52,10 +62,6 @@ CustomTooltipContent.propTypes = {
52
62
  * Additional class names for the dropdown component.
53
63
  */
54
64
  className: _propTypes.default.string,
55
- /**
56
- * The label for the x-axis.
57
- */
58
- xLabel: _propTypes.default.string,
59
65
  /**
60
66
  * Flag on whether it is a timeformat or not
61
67
  */
@@ -64,6 +70,10 @@ CustomTooltipContent.propTypes = {
64
70
  * The type of format for the datetime value
65
71
  */
66
72
  dateFormat: _propTypes.default.oneOf(Object.values(_utils.DATE_FORMATS)),
73
+ /**
74
+ * Flag on whether the label is a date value or not
75
+ */
76
+ isDateValue: _propTypes.default.bool,
67
77
  /**
68
78
  * If set true, the tooltip is displayed.
69
79
  * If set false, the tooltip is hidden, usually calculated internally.
@@ -81,6 +91,7 @@ CustomTooltipContent.propTypes = {
81
91
  };
82
92
  CustomTooltipContent.defaultProps = {
83
93
  isTimeFormat: false,
94
+ isDateValue: true,
84
95
  dateFormat: _utils.DATE_FORMATS.HUMAN_READABLE
85
96
  };
86
97
  var _default = exports.default = CustomTooltipContent;
@@ -7,14 +7,13 @@ exports.default = void 0;
7
7
  var React = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
10
+ var _utils = require("../../../../utils");
10
11
  require("./styles.scss");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
14
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
15
  // DropdownStatus.js
15
16
 
16
- // Local Definitions
17
-
18
17
  const baseClassName = _exports.default.base;
19
18
  const componentClassName = 'y-labels-dropdown';
20
19
  const YLabelsDropDown = _ref => {
@@ -56,7 +55,7 @@ const YLabelsDropDown = _ref => {
56
55
  style: {
57
56
  backgroundColor: item.color
58
57
  }
59
- }), item.label, selectedYLabels.some(label => label.label === item.label) && /*#__PURE__*/React.createElement("span", {
58
+ }), (0, _utils.snakeCaseToTitleCase)(item.label), selectedYLabels.some(label => label.label === item.label) && /*#__PURE__*/React.createElement("span", {
60
59
  className: "icon checkmark"
61
60
  }, "I")))));
62
61
  };
@@ -93,6 +92,6 @@ YLabelsDropDown.propTypes = {
93
92
  }))
94
93
  };
95
94
  YLabelsDropDown.defaultProps = {
96
- placeholder: 'Submission status'
95
+ placeholder: 'Select Item'
97
96
  };
98
97
  var _default = exports.default = YLabelsDropDown;
@@ -1,7 +1,8 @@
1
1
  @use "@pareto-engineering/bem";
2
2
 
3
3
  $default-margin: 1rem;
4
- $default-border-radius: .25rem;
4
+ $default-border: var(--theme-default-input-border);
5
+ $default-border-radius: var(--theme-default-input-border-radius);
5
6
  $default-padding: 1rem;
6
7
  $default-width: 15rem;
7
8
  $default-box-shadow: 0 .25rem .75rem var(--ui-lines);
@@ -16,9 +17,9 @@ $default-checkmark-font-size: calc(var(--s-1) * .75rem);
16
17
 
17
18
  .dropdown-button {
18
19
  align-items: center;
19
- background-color: var(--soft-background-inputs);
20
- border: none;
21
- border-radius: $default-border-radius;
20
+ background-color: var(--background-far);
21
+ border: $default-border;
22
+ border-radius: calc($default-border-radius / 2);
22
23
  color: var(--hard-paragraph);
23
24
  cursor: pointer;
24
25
  display: flex;
@@ -53,8 +54,8 @@ $default-checkmark-font-size: calc(var(--s-1) * .75rem);
53
54
 
54
55
  .dropdown-item {
55
56
  align-items: center;
56
- border-radius: $default-border-radius;
57
- color: var(--hard-paragraph);
57
+ border-radius: calc($default-border-radius / 2);
58
+ color: var(--paragraph);
58
59
  cursor: pointer;
59
60
  display: flex;
60
61
  margin: calc($default-margin * .125);
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _recharts = require("recharts");
10
+ var _exports = _interopRequireDefault(require("@pareto-engineering/bem/exports"));
11
+ var _Common = require("../Common");
12
+ require("./styles.scss");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ const baseClassName = _exports.default.base;
17
+ const componentClassName = 'pie-chart';
18
+ const PieChart = _ref => {
19
+ let {
20
+ id,
21
+ className: userClassName,
22
+ data,
23
+ title,
24
+ valueKey,
25
+ labelKey,
26
+ colors,
27
+ height,
28
+ width,
29
+ innerRadius,
30
+ outerRadius
31
+ } = _ref;
32
+ const total = data.reduce((sum, item) => sum + item[valueKey], 0);
33
+ const formattedData = data.map(item => ({
34
+ ...item,
35
+ label: item[labelKey],
36
+ color: colors[data.indexOf(item)],
37
+ percentage: (item[valueKey] / total * 100).toFixed(0)
38
+ }));
39
+ return /*#__PURE__*/React.createElement("div", {
40
+ id: id,
41
+ className: [baseClassName, componentClassName, userClassName].filter(e => e).join(' ')
42
+ }, /*#__PURE__*/React.createElement("div", {
43
+ className: "chart-header"
44
+ }, /*#__PURE__*/React.createElement("h3", null, title)), /*#__PURE__*/React.createElement("div", {
45
+ className: "chart-content"
46
+ }, /*#__PURE__*/React.createElement(_recharts.ResponsiveContainer, {
47
+ width: width,
48
+ height: height
49
+ }, /*#__PURE__*/React.createElement(_recharts.PieChart, null, /*#__PURE__*/React.createElement(_recharts.Pie, {
50
+ data: formattedData,
51
+ dataKey: valueKey,
52
+ nameKey: labelKey,
53
+ cx: "50%",
54
+ cy: "50%",
55
+ innerRadius: innerRadius,
56
+ outerRadius: outerRadius,
57
+ label: false,
58
+ paddingAngle: 0
59
+ }, formattedData.map((entry, index) => /*#__PURE__*/React.createElement(_recharts.Cell, {
60
+ key: entry[labelKey],
61
+ fill: colors[index],
62
+ strokeWidth: 0
63
+ }))), /*#__PURE__*/React.createElement(_recharts.Tooltip, {
64
+ content: /*#__PURE__*/React.createElement(_Common.CustomTooltipContent, {
65
+ isDateValue: false
66
+ })
67
+ }))), /*#__PURE__*/React.createElement(_Common.CustomLegend, {
68
+ colorsArray: colors,
69
+ yKeysArray: formattedData,
70
+ capitalizedLegend: true,
71
+ orientation: "vertical",
72
+ getLegendItemTitle: entry => entry[labelKey],
73
+ getLegendItemSubtitle: entry => entry[valueKey]
74
+ })));
75
+ };
76
+ PieChart.propTypes = {
77
+ id: _propTypes.default.string,
78
+ className: _propTypes.default.string,
79
+ data: _propTypes.default.arrayOf(_propTypes.default.shape({
80
+ [_propTypes.default.string]: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
81
+ })).isRequired,
82
+ title: _propTypes.default.string.isRequired,
83
+ valueKey: _propTypes.default.string.isRequired,
84
+ labelKey: _propTypes.default.string.isRequired,
85
+ colors: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
86
+ height: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
87
+ width: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
88
+ innerRadius: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
89
+ outerRadius: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])
90
+ };
91
+ PieChart.defaultProps = {
92
+ id: undefined,
93
+ className: undefined,
94
+ width: '100%',
95
+ height: 300,
96
+ innerRadius: '0%',
97
+ outerRadius: '100%'
98
+ };
99
+ var _default = exports.default = PieChart;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "PieChart", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _PieChart.default;
10
+ }
11
+ });
12
+ var _PieChart = _interopRequireDefault(require("./PieChart"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -0,0 +1,48 @@
1
+ @use "@pareto-engineering/bem";
2
+
3
+ $default-margin: 1rem;
4
+ $default-padding: 1rem;
5
+ $default-box-shadow: 0 .25rem .75rem var(--ui-lines);
6
+ $default-text-font-size: calc(var(--s-1) * 1rem);
7
+
8
+ .#{bem.$base} {
9
+ &.pie-chart {
10
+ background-color: var(--background-far);
11
+ border-radius: var(--theme-default-border-radius);
12
+ box-shadow: $default-box-shadow;
13
+ margin: $default-margin 0;
14
+ padding: $default-padding;
15
+
16
+ .chart-header {
17
+ align-items: center;
18
+ display: flex;
19
+ justify-content: space-between;
20
+ margin-bottom: $default-margin;
21
+
22
+ h3 {
23
+ color: var(--subtitle);
24
+ margin: calc($default-margin / 5);
25
+ text-align: left;
26
+ }
27
+ }
28
+
29
+ .chart-content {
30
+ align-items: flex-start;
31
+ display: flex;
32
+ }
33
+
34
+ .recharts-wrapper {
35
+ .recharts-surface {
36
+ .recharts-text {
37
+ fill: var(--soft-paragraph);
38
+ font-size: calc($default-text-font-size * .75);
39
+ }
40
+
41
+ .recharts-text.recharts-label {
42
+ fill: var(--paragraph);
43
+ font-size: $default-text-font-size;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -15,5 +15,12 @@ Object.defineProperty(exports, "BarChart", {
15
15
  return _BarChart.BarChart;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "PieChart", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _PieChart.PieChart;
22
+ }
23
+ });
18
24
  var _AreaChart = require("./AreaChart");
19
- var _BarChart = require("./BarChart");
25
+ var _BarChart = require("./BarChart");
26
+ var _PieChart = require("./PieChart");
@@ -4,6 +4,7 @@
4
4
  @use "@pareto-engineering/styles/src/mixins";
5
5
  @use "@pareto-engineering/styles/src/globals" as *;
6
6
 
7
+ $default-border: 1px solid var(--x);
7
8
  $default-padding: 1rem;
8
9
  $default-margin: 1rem;
9
10
  $default-border-radius: 1.5rem;
@@ -12,10 +13,11 @@ $default-height: var(--notification-height, 5rem);
12
13
 
13
14
  .#{bem.$base}.notification {
14
15
  align-items: center;
15
- background-color: var(--x);
16
+ background-color: var(--background-far);
17
+ border: $default-border;
16
18
  border-radius: $default-border-radius;
17
19
  bottom: 0;
18
- color: var(--on-x);
20
+ color: var(--paragraph);
19
21
  display: flex;
20
22
  justify-content: space-between;
21
23
  margin-bottom: $default-margin;
@@ -31,8 +33,16 @@ $default-height: var(--notification-height, 5rem);
31
33
  > .message-container {
32
34
  align-items: center;
33
35
  display: flex;
36
+ gap: $default-padding;
34
37
  overflow: auto;
35
38
 
39
+ > .icon {
40
+ background-color: var(--x);
41
+ border-radius: 50%;
42
+ color: var(--white);
43
+ padding: calc($default-padding / 2);
44
+ }
45
+
36
46
  > .message {
37
47
  font-size: calc(var(--s0) * 1rem);
38
48
  margin-left: calc($default-margin / 2);
@@ -44,12 +54,14 @@ $default-height: var(--notification-height, 5rem);
44
54
  }
45
55
 
46
56
  .#{bem.$base}.button {
57
+ background-color: transparent;
58
+ color: var(--paragraph);
47
59
  padding: calc($default-padding / 2);
48
60
 
49
- &:focus {
61
+ &:focus,
62
+ &:hover {
50
63
  background-color: transparent;
64
+ color: var(--hard-paragraph);
51
65
  }
52
66
  }
53
67
  }
54
-
55
-
@@ -123,6 +123,12 @@ Object.defineProperty(exports, "People", {
123
123
  return _People.People;
124
124
  }
125
125
  });
126
+ Object.defineProperty(exports, "PieChart", {
127
+ enumerable: true,
128
+ get: function () {
129
+ return _Charts.PieChart;
130
+ }
131
+ });
126
132
  Object.defineProperty(exports, "Popover", {
127
133
  enumerable: true,
128
134
  get: function () {
@@ -30,7 +30,7 @@ const FormInput = _ref => {
30
30
  disabled,
31
31
  ...otherProps
32
32
  } = _ref;
33
- const newClassName = [className, componentClassName].filter(Boolean).join(' ');
33
+ const newClassName = [className, componentClassName, otherProps.hasCharacterLimit && otherProps.maxLength && `limit-character-count-${otherProps.maxLength}`].filter(Boolean).join(' ');
34
34
  if (type === 'textarea') {
35
35
  return /*#__PURE__*/React.createElement(_fields.TextareaInput, _extends({
36
36
  className: newClassName,
@@ -42,7 +42,7 @@ const LatexPreviewInput = _ref => {
42
42
  const LatexPreview = (0, _react.useMemo)(() => (0, _convertLatexToHtml.default)(values[name]), [values[name]]);
43
43
  return /*#__PURE__*/React.createElement("div", {
44
44
  id: id,
45
- className: [baseClassName, componentClassName, userClassName, 'form-input'].filter(e => e).join(' '),
45
+ className: [baseClassName, componentClassName, className, userClassName, 'form-input'].filter(e => e).join(' '),
46
46
  style: style
47
47
  }, /*#__PURE__*/React.createElement(_TextareaInput.TextareaInput, _extends({
48
48
  className: "preview-child",
@@ -11,6 +11,7 @@ $default-margin: 1em;
11
11
 
12
12
  > .preview-child {
13
13
  flex: 1;
14
+ position: relative;
14
15
  }
15
16
 
16
17
  > .latex-container {
@@ -37,7 +37,8 @@ const TextareaInput = _ref => {
37
37
  disabled,
38
38
  placeholder,
39
39
  autoComplete,
40
- resize
40
+ resize,
41
+ maxLength
41
42
  // ...otherProps
42
43
  } = _ref;
43
44
  const [field] = (0, _formik.useField)({
@@ -62,7 +63,8 @@ const TextareaInput = _ref => {
62
63
  placeholder: placeholder,
63
64
  rows: rows,
64
65
  disabled: disabled,
65
- autoComplete: autoComplete
66
+ autoComplete: autoComplete,
67
+ maxLength: maxLength
66
68
  })), /*#__PURE__*/React.createElement(_common.FormDescription, {
67
69
  className: "s-1",
68
70
  description: description,