@pareto-engineering/design-system 5.2.0 → 5.3.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 (80) hide show
  1. package/dist/cjs/a/Charts/AreaChart/AreaChart.js +61 -5
  2. package/dist/cjs/a/Charts/AreaChart/styles.scss +22 -0
  3. package/dist/cjs/a/Charts/BarChart/BarChart.js +1 -0
  4. package/dist/cjs/a/Charts/Common/CustomLegend/CustomLegend.js +23 -5
  5. package/dist/cjs/a/Charts/Common/CustomLegend/styles.scss +10 -2
  6. package/dist/cjs/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +139 -42
  7. package/dist/cjs/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  8. package/dist/cjs/a/Charts/PieChart/PieChart.js +39 -8
  9. package/dist/cjs/a/Charts/PieChart/styles.scss +88 -0
  10. package/dist/cjs/a/HamburgerButton/styles.scss +151 -9
  11. package/dist/cjs/a/ThroughPutIndicator/ThroughPutIndicator.js +78 -0
  12. package/dist/cjs/a/ThroughPutIndicator/index.js +13 -0
  13. package/dist/cjs/a/ThroughPutIndicator/styles.scss +35 -0
  14. package/dist/cjs/a/ToggleSwitch/ToggleSwitch.js +2 -1
  15. package/dist/cjs/a/ToggleSwitch/styles.scss +9 -2
  16. package/dist/cjs/a/Tooltip/Tooltip.js +19 -2
  17. package/dist/cjs/a/Tooltip/styles.scss +32 -4
  18. package/dist/cjs/a/XMLEditor/XMLEditor.js +4 -1
  19. package/dist/cjs/a/index.js +8 -1
  20. package/dist/cjs/f/FormInput/FormInput.js +7 -1
  21. package/dist/cjs/f/fields/ToggleInput/ToggleInput.js +126 -0
  22. package/dist/cjs/f/fields/ToggleInput/index.js +13 -0
  23. package/dist/cjs/f/fields/ToggleInput/styles.scss +22 -0
  24. package/dist/cjs/f/fields/index.js +8 -1
  25. package/dist/cjs/utils/formatting.js +27 -18
  26. package/dist/cjs/utils/index.js +6 -0
  27. package/dist/es/a/Charts/AreaChart/AreaChart.js +62 -6
  28. package/dist/es/a/Charts/AreaChart/styles.scss +22 -0
  29. package/dist/es/a/Charts/BarChart/BarChart.js +1 -0
  30. package/dist/es/a/Charts/Common/CustomLegend/CustomLegend.js +23 -5
  31. package/dist/es/a/Charts/Common/CustomLegend/styles.scss +10 -2
  32. package/dist/es/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.js +128 -40
  33. package/dist/es/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  34. package/dist/es/a/Charts/PieChart/PieChart.js +39 -8
  35. package/dist/es/a/Charts/PieChart/styles.scss +88 -0
  36. package/dist/es/a/HamburgerButton/styles.scss +151 -9
  37. package/dist/es/a/ThroughPutIndicator/ThroughPutIndicator.js +66 -0
  38. package/dist/es/a/ThroughPutIndicator/index.js +2 -0
  39. package/dist/es/a/ThroughPutIndicator/styles.scss +35 -0
  40. package/dist/es/a/ToggleSwitch/ToggleSwitch.js +2 -1
  41. package/dist/es/a/ToggleSwitch/styles.scss +9 -2
  42. package/dist/es/a/Tooltip/Tooltip.js +31 -12
  43. package/dist/es/a/Tooltip/styles.scss +32 -4
  44. package/dist/es/a/XMLEditor/XMLEditor.js +6 -3
  45. package/dist/es/a/index.js +2 -1
  46. package/dist/es/f/FormInput/FormInput.js +8 -2
  47. package/dist/es/f/fields/ToggleInput/ToggleInput.js +116 -0
  48. package/dist/es/f/fields/ToggleInput/index.js +2 -0
  49. package/dist/es/f/fields/ToggleInput/styles.scss +22 -0
  50. package/dist/es/f/fields/index.js +2 -1
  51. package/dist/es/utils/formatting.js +25 -17
  52. package/dist/es/utils/index.js +1 -1
  53. package/package.json +7 -6
  54. package/src/ui/a/Charts/AreaChart/AreaChart.jsx +74 -9
  55. package/src/ui/a/Charts/AreaChart/styles.scss +22 -0
  56. package/src/ui/a/Charts/BarChart/BarChart.jsx +1 -0
  57. package/src/ui/a/Charts/Common/CustomLegend/CustomLegend.jsx +26 -3
  58. package/src/ui/a/Charts/Common/CustomLegend/styles.scss +10 -2
  59. package/src/ui/a/Charts/Common/CustomTooltipContent/CustomTooltipContent.jsx +132 -48
  60. package/src/ui/a/Charts/Common/CustomTooltipContent/styles.scss +4 -0
  61. package/src/ui/a/Charts/PieChart/PieChart.jsx +54 -16
  62. package/src/ui/a/Charts/PieChart/styles.scss +88 -0
  63. package/src/ui/a/HamburgerButton/styles.scss +151 -9
  64. package/src/ui/a/ThroughPutIndicator/ThroughPutIndicator.jsx +90 -0
  65. package/src/ui/a/ThroughPutIndicator/index.js +2 -0
  66. package/src/ui/a/ThroughPutIndicator/styles.scss +35 -0
  67. package/src/ui/a/ToggleSwitch/ToggleSwitch.jsx +1 -1
  68. package/src/ui/a/ToggleSwitch/styles.scss +9 -2
  69. package/src/ui/a/Tooltip/Tooltip.jsx +55 -26
  70. package/src/ui/a/Tooltip/styles.scss +32 -4
  71. package/src/ui/a/XMLEditor/XMLEditor.jsx +15 -2
  72. package/src/ui/a/index.js +1 -0
  73. package/src/ui/f/FormInput/FormInput.jsx +11 -0
  74. package/src/ui/f/fields/ToggleInput/ToggleInput.jsx +140 -0
  75. package/src/ui/f/fields/ToggleInput/index.js +2 -0
  76. package/src/ui/f/fields/ToggleInput/styles.scss +22 -0
  77. package/src/ui/f/fields/index.js +1 -0
  78. package/src/ui/utils/formatting.js +38 -29
  79. package/src/ui/utils/index.js +1 -1
  80. package/tests/__snapshots__/Storyshots.test.js.snap +433 -160
@@ -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{
@@ -0,0 +1,66 @@
1
+ import * as React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import styleNames from '@pareto-engineering/bem/exports';
4
+ import "./styles.scss";
5
+
6
+ // Local Definitions
7
+ const baseClassName = styleNames.base;
8
+ const componentClassName = 'throughput-indicator';
9
+ const ThroughPutIndicator = ({
10
+ data,
11
+ keyName = 'reserved'
12
+ }) => {
13
+ const renderNoChange = () => /*#__PURE__*/React.createElement("div", {
14
+ className: [baseClassName, componentClassName].filter(e => e).join(' ')
15
+ }, /*#__PURE__*/React.createElement("span", {
16
+ className: "no-change-text"
17
+ }, "No change"));
18
+ const renderChange = (direction, percentage, icon = direction === 'positive' ? 'S' : 'R') => /*#__PURE__*/React.createElement("div", {
19
+ className: [baseClassName, componentClassName].filter(e => e).join(' ')
20
+ }, /*#__PURE__*/React.createElement("span", {
21
+ className: `ai-icon ${direction}-throughput-indicator`
22
+ }, icon), /*#__PURE__*/React.createElement("p", null, percentage, "%"));
23
+
24
+ // Handle invalid or insufficient data
25
+ if (!data || data.length < 2) {
26
+ return renderNoChange();
27
+ }
28
+ const first = data[0][keyName];
29
+ const last = data[data.length - 1][keyName];
30
+
31
+ // Handle no change scenarios
32
+ if (first === 0 && last === 0) {
33
+ return renderNoChange();
34
+ }
35
+
36
+ // Handle special case: starting from zero
37
+ if (first === 0 && last !== 0) {
38
+ return renderChange('positive', '100');
39
+ }
40
+
41
+ // Calculate percentage change
42
+ const percentChange = (last - first) / Math.abs(first) * 100;
43
+ const rounded = Math.abs(percentChange).toFixed(1);
44
+
45
+ // No change
46
+ if (percentChange === 0) {
47
+ return renderNoChange();
48
+ }
49
+
50
+ // Positive or negative change
51
+ const direction = percentChange > 0 ? 'positive' : 'negative';
52
+ const icon = direction === 'positive' ? 'S' : 'R';
53
+ return renderChange(direction, rounded, icon);
54
+ };
55
+ ThroughPutIndicator.propTypes = {
56
+ /**
57
+ * The data to be displayed in the throughput indicator
58
+ */
59
+ // eslint-disable-next-line react/forbid-prop-types
60
+ data: PropTypes.arrayOf(PropTypes.object).isRequired,
61
+ /**
62
+ * The key name to be displayed in the throughput indicator
63
+ */
64
+ keyName: PropTypes.string
65
+ };
66
+ export default ThroughPutIndicator;
@@ -0,0 +1,2 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+ export { default as ThroughPutIndicator } from "./ThroughPutIndicator";
@@ -0,0 +1,35 @@
1
+ /* @pareto-engineering/generator-front 1.0.12 */
2
+
3
+ @use "@pareto-engineering/bem";
4
+
5
+ $default-text-font-size: calc(var(--s-1) * 1rem);
6
+
7
+ .#{bem.$base} {
8
+ .throughput-indicator {
9
+ align-items: center;
10
+ border: 1px solid var(--hard-grey);
11
+ border-radius: 2rem;
12
+ display: flex;
13
+ gap: .5rem;
14
+ height: 3rem;
15
+ padding: .5rem;
16
+
17
+ .positive-throughput-indicator {
18
+ color: var(--success);
19
+ font-size: 1rem;
20
+ }
21
+
22
+ .negative-throughput-indicator {
23
+ color: var(--error);
24
+ font-size: .75rem;
25
+ }
26
+
27
+ .no-change-text {
28
+ color: var(--paragraph);
29
+ }
30
+
31
+ p {
32
+ font-size: 1rem;
33
+ }
34
+ }
35
+ }
@@ -36,7 +36,8 @@ const ToggleSwitch = ({
36
36
  checked: checked,
37
37
  onChange: handleOnChange
38
38
  }), /*#__PURE__*/React.createElement("label", {
39
- htmlFor: inputId
39
+ htmlFor: inputId,
40
+ className: checked ? 'checked' : ''
40
41
  }));
41
42
  ToggleSwitch.propTypes = {
42
43
  /**
@@ -7,7 +7,7 @@ $default-size: var(--size, 1.2em);
7
7
  $default-slider-color: var(--slider-color, var(--background-far));
8
8
  $default-slider-border-color: var(--slider-border-color, var(--ui-lines));
9
9
  $default-background-color: var(--slider-background-color, var(--interactive));
10
-
10
+ $default-background-disabled: var(--disabled, var(--background-far));
11
11
  .#{bem.$base}.toggle-switch {
12
12
  background: transparent;
13
13
  border: none;
@@ -21,7 +21,6 @@ $default-background-color: var(--slider-background-color, var(--interactive));
21
21
  }
22
22
 
23
23
  >label {
24
- background: $default-background-color;
25
24
  border-radius: $default-border-radius;
26
25
  cursor: pointer;
27
26
  display: block;
@@ -29,6 +28,14 @@ $default-background-color: var(--slider-background-color, var(--interactive));
29
28
  position: relative;
30
29
  width: calc($default-size * 2);
31
30
 
31
+ &.checked {
32
+ background: $default-background-color;
33
+ }
34
+
35
+ &:not(.checked) {
36
+ background: $default-background-disabled;
37
+ }
38
+
32
39
  &::after {
33
40
  background: $default-slider-color;
34
41
  border: 1px solid $default-slider-border-color;
@@ -1,5 +1,6 @@
1
1
  /* @pareto-engineering/generator-front 1.0.12 */
2
2
  import * as React from 'react';
3
+ import { useEffect } from 'react';
3
4
  import PropTypes from 'prop-types';
4
5
  import styleNames from '@pareto-engineering/bem/exports';
5
6
  import "./styles.scss";
@@ -17,23 +18,37 @@ const Tooltip = ({
17
18
  className: userClassName,
18
19
  style,
19
20
  position,
21
+ isFloating,
20
22
  color,
21
23
  description,
22
24
  content,
23
25
  children
24
26
  // ...otherProps
25
- }) => /*#__PURE__*/React.createElement("div", {
26
- id: id,
27
- className: [baseClassName, componentClassName, userClassName, `x-${color}`].filter(e => e).join(' '),
28
- style: style
29
- }, /*#__PURE__*/React.createElement("div", {
30
- className: "tooltip-trigger-wrapper",
31
- "aria-describedby": description
32
- }, children), /*#__PURE__*/React.createElement("div", {
33
- className: `tooltip-content ${position}`,
34
- role: "tooltip",
35
- id: description
36
- }, content));
27
+ }) => {
28
+ useEffect(() => {
29
+ const handleMouseMove = e => {
30
+ document.documentElement.style.setProperty('--mouse-x', `${e.clientX}px`);
31
+ document.documentElement.style.setProperty('--mouse-y', `${e.clientY}px`);
32
+ };
33
+ if (!isFloating) {
34
+ return () => window.removeEventListener('mousemove', handleMouseMove);
35
+ }
36
+ window.addEventListener('mousemove', handleMouseMove);
37
+ return () => window.removeEventListener('mousemove', handleMouseMove);
38
+ }, [isFloating]);
39
+ return /*#__PURE__*/React.createElement("div", {
40
+ id: id,
41
+ className: [baseClassName, componentClassName, userClassName, `x-${color}`].filter(e => e).join(' '),
42
+ style: style
43
+ }, /*#__PURE__*/React.createElement("div", {
44
+ className: "tooltip-trigger-wrapper",
45
+ "aria-describedby": description
46
+ }, children), /*#__PURE__*/React.createElement("div", {
47
+ className: ['tooltip-content', position, isFloating ? 'floating' : ''].filter(e => e).join(' '),
48
+ role: "tooltip",
49
+ id: description
50
+ }, content));
51
+ };
37
52
  Tooltip.propTypes = {
38
53
  /**
39
54
  * The HTML id for this element
@@ -63,6 +78,10 @@ Tooltip.propTypes = {
63
78
  * The position of the tooltip with respect to the trigger element
64
79
  */
65
80
  position: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
81
+ /**
82
+ * Whether or not the tooltip should be floating
83
+ */
84
+ isFloating: PropTypes.bool,
66
85
  /**
67
86
  * The base color of the tooltip
68
87
  */
@@ -24,25 +24,53 @@ $default-width: var(--tooltip-width, 20rem);
24
24
  visibility: hidden;
25
25
  z-index: 10;
26
26
 
27
- &.top {
27
+ &.floating.top {
28
+ left: var(--mouse-x);
29
+ position: fixed;
30
+ top: calc(var(--mouse-y) - $default-block-padding);
31
+ transform: translate(-50%, -100%);
32
+ }
33
+
34
+ &.floating.right {
35
+ left: calc(var(--mouse-x) + $default-inline-padding);
36
+ position: fixed;
37
+ top: var(--mouse-y);
38
+ transform: translateY(-50%);
39
+ }
40
+
41
+ &.floating.bottom {
42
+ left: var(--mouse-x);
43
+ position: fixed;
44
+ top: calc(var(--mouse-y) + $default-block-padding);
45
+ transform: translateX(-50%);
46
+ }
47
+
48
+ &.floating.left {
49
+ left: calc(var(--mouse-x) - $default-inline-padding);
50
+ position: fixed;
51
+ top: var(--mouse-y);
52
+ transform: translate(-100%, -50%);
53
+ }
54
+
55
+ &:not(.floating).top {
28
56
  --horizontal: -50%;
29
57
  bottom: calc(100% + $default-block-padding);
30
58
  left: 50%;
31
59
  }
32
60
 
33
- &.right {
61
+ &:not(.floating).right {
34
62
  --vertical: 50%;
35
63
  bottom: 50%;
36
64
  left: calc(100% + $default-inline-padding);
37
65
  }
38
66
 
39
- &.bottom {
67
+ &:not(.floating).bottom {
40
68
  --horizontal: -50%;
41
69
  left: 50%;
42
70
  top: calc(100% + $default-block-padding);
43
71
  }
44
72
 
45
- &.left {
73
+ &:not(.floating).left {
46
74
  --vertical: 50%;
47
75
  bottom: 50%;
48
76
  right: calc(100% + $default-inline-padding);
@@ -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) => {
@@ -28,4 +28,5 @@ export { ToggleSwitch } from "./ToggleSwitch";
28
28
  export { XMLEditor } from "./XMLEditor";
29
29
  export { DatePicker } from "./DatePicker";
30
30
  export { Tooltip } from "./Tooltip";
31
- export { AreaChart, BarChart, PieChart } from "./Charts";
31
+ export { AreaChart, BarChart, PieChart } from "./Charts";
32
+ export { ThroughPutIndicator } from "./ThroughPutIndicator";
@@ -3,7 +3,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  import * as React from 'react';
4
4
  import { memo } from 'react';
5
5
  import PropTypes from 'prop-types';
6
- import { TextInput, TextareaInput, ChoicesInput, SelectInput, QueryCombobox, QuerySelect, RatingsInput, Checkbox, QueryChoices, LinkInput, EditorInput, FileUpload, LatexPreviewInput } from "../fields";
6
+ import { TextInput, TextareaInput, ChoicesInput, SelectInput, QueryCombobox, QuerySelect, RatingsInput, Checkbox, QueryChoices, LinkInput, EditorInput, FileUpload, LatexPreviewInput, ToggleInput } from "../fields";
7
7
  import "./styles.scss";
8
8
 
9
9
  // Local Definitions
@@ -60,6 +60,12 @@ const FormInput = ({
60
60
  disabled: disabled
61
61
  }, otherProps));
62
62
  }
63
+ if (type === 'toggle') {
64
+ return /*#__PURE__*/React.createElement(ToggleInput, _extends({
65
+ className: newClassName,
66
+ disabled: disabled
67
+ }, otherProps));
68
+ }
63
69
  if (type === 'query-choices') {
64
70
  return /*#__PURE__*/React.createElement(QueryChoices, _extends({
65
71
  className: newClassName,
@@ -122,7 +128,7 @@ FormInput.propTypes = {
122
128
  /**
123
129
  * The HTML class names for this element
124
130
  */
125
- type: PropTypes.oneOf(['text', 'email', 'password', 'number', 'date', 'datetime', 'month', 'tel', 'hidden', 'select', 'choices', 'textarea', 'query-combobox', 'query-select', 'url', 'rating', 'checkbox',
131
+ type: PropTypes.oneOf(['text', 'email', 'password', 'number', 'date', 'datetime', 'month', 'tel', 'hidden', 'select', 'choices', 'textarea', 'query-combobox', 'query-select', 'url', 'rating', 'checkbox', 'toggle',
126
132
  // to be removed
127
133
  'extendedTypeInput']),
128
134
  /**