@dxc-technology/halstack-react 0.0.0-49006fa → 0.0.0-49081f0

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 (211) hide show
  1. package/HalstackContext.d.ts +12 -0
  2. package/HalstackContext.js +295 -0
  3. package/accordion/Accordion.d.ts +1 -1
  4. package/accordion/Accordion.js +121 -123
  5. package/accordion/Accordion.stories.tsx +13 -14
  6. package/accordion/Accordion.test.js +25 -11
  7. package/accordion/types.d.ts +9 -4
  8. package/accordion-group/AccordionGroup.d.ts +1 -1
  9. package/accordion-group/AccordionGroup.js +15 -36
  10. package/accordion-group/AccordionGroup.stories.tsx +28 -2
  11. package/accordion-group/AccordionGroup.test.js +30 -37
  12. package/accordion-group/types.d.ts +14 -3
  13. package/alert/Alert.js +5 -2
  14. package/badge/Badge.d.ts +1 -1
  15. package/badge/Badge.js +5 -3
  16. package/badge/types.d.ts +1 -0
  17. package/bleed/Bleed.js +1 -34
  18. package/bleed/Bleed.stories.tsx +94 -95
  19. package/bleed/types.d.ts +1 -1
  20. package/box/Box.js +23 -33
  21. package/box/types.d.ts +1 -0
  22. package/bulleted-list/BulletedList.d.ts +7 -0
  23. package/bulleted-list/BulletedList.js +123 -0
  24. package/bulleted-list/BulletedList.stories.tsx +200 -0
  25. package/bulleted-list/types.d.ts +11 -0
  26. package/{list → bulleted-list}/types.js +0 -0
  27. package/button/Button.js +53 -68
  28. package/button/Button.stories.tsx +9 -0
  29. package/button/types.d.ts +7 -7
  30. package/card/Card.js +24 -27
  31. package/card/types.d.ts +1 -0
  32. package/checkbox/Checkbox.d.ts +1 -1
  33. package/checkbox/Checkbox.js +99 -97
  34. package/checkbox/Checkbox.stories.tsx +124 -128
  35. package/checkbox/Checkbox.test.js +93 -16
  36. package/checkbox/types.d.ts +5 -5
  37. package/chip/types.d.ts +1 -1
  38. package/common/variables.js +236 -100
  39. package/date-input/DateInput.js +41 -23
  40. package/date-input/DateInput.test.js +9 -22
  41. package/date-input/types.d.ts +12 -9
  42. package/dialog/Dialog.js +46 -50
  43. package/dialog/Dialog.stories.tsx +57 -2
  44. package/dialog/Dialog.test.js +34 -4
  45. package/dialog/types.d.ts +3 -2
  46. package/dropdown/Dropdown.d.ts +1 -1
  47. package/dropdown/Dropdown.js +244 -251
  48. package/dropdown/Dropdown.stories.tsx +126 -63
  49. package/dropdown/Dropdown.test.js +509 -108
  50. package/dropdown/DropdownMenu.d.ts +4 -0
  51. package/dropdown/DropdownMenu.js +80 -0
  52. package/dropdown/DropdownMenuItem.d.ts +4 -0
  53. package/dropdown/DropdownMenuItem.js +92 -0
  54. package/dropdown/types.d.ts +25 -5
  55. package/file-input/FileInput.js +174 -193
  56. package/file-input/FileInput.stories.tsx +38 -6
  57. package/file-input/FileInput.test.js +41 -0
  58. package/file-input/FileItem.d.ts +4 -4
  59. package/file-input/FileItem.js +29 -39
  60. package/flex/Flex.d.ts +4 -0
  61. package/flex/Flex.js +69 -0
  62. package/flex/Flex.stories.tsx +103 -0
  63. package/flex/types.d.ts +32 -0
  64. package/{radio → flex}/types.js +0 -0
  65. package/footer/Footer.js +15 -88
  66. package/footer/Footer.stories.tsx +8 -1
  67. package/footer/Icons.js +1 -1
  68. package/footer/types.d.ts +2 -1
  69. package/header/Header.js +95 -114
  70. package/header/Header.stories.tsx +46 -36
  71. package/header/Header.test.js +18 -2
  72. package/header/Icons.js +2 -2
  73. package/header/types.d.ts +3 -2
  74. package/inset/Inset.js +1 -34
  75. package/inset/Inset.stories.tsx +36 -36
  76. package/inset/types.d.ts +25 -1
  77. package/layout/ApplicationLayout.d.ts +16 -6
  78. package/layout/ApplicationLayout.js +71 -131
  79. package/layout/ApplicationLayout.stories.tsx +84 -93
  80. package/layout/Icons.d.ts +5 -0
  81. package/layout/Icons.js +13 -2
  82. package/layout/SidenavContext.d.ts +5 -0
  83. package/layout/SidenavContext.js +19 -0
  84. package/layout/types.d.ts +18 -33
  85. package/link/Link.d.ts +3 -2
  86. package/link/Link.js +57 -74
  87. package/link/Link.stories.tsx +95 -53
  88. package/link/Link.test.js +7 -15
  89. package/link/types.d.ts +7 -23
  90. package/main.d.ts +8 -10
  91. package/main.js +46 -56
  92. package/number-input/NumberInput.test.js +40 -5
  93. package/number-input/types.d.ts +13 -10
  94. package/package.json +14 -12
  95. package/paginator/Paginator.js +17 -38
  96. package/paginator/Paginator.test.js +43 -1
  97. package/paragraph/Paragraph.d.ts +6 -0
  98. package/paragraph/Paragraph.js +38 -0
  99. package/paragraph/Paragraph.stories.tsx +44 -0
  100. package/password-input/PasswordInput.js +7 -4
  101. package/password-input/PasswordInput.test.js +16 -18
  102. package/password-input/types.d.ts +14 -11
  103. package/progress-bar/ProgressBar.d.ts +2 -2
  104. package/progress-bar/ProgressBar.js +57 -51
  105. package/progress-bar/ProgressBar.stories.jsx +13 -11
  106. package/progress-bar/ProgressBar.test.js +67 -22
  107. package/progress-bar/types.d.ts +3 -4
  108. package/quick-nav/QuickNav.d.ts +4 -0
  109. package/quick-nav/QuickNav.js +117 -0
  110. package/quick-nav/QuickNav.stories.tsx +342 -0
  111. package/quick-nav/types.d.ts +21 -0
  112. package/{row → quick-nav}/types.js +0 -0
  113. package/radio-group/Radio.d.ts +1 -1
  114. package/radio-group/Radio.js +43 -28
  115. package/radio-group/RadioGroup.js +30 -27
  116. package/radio-group/RadioGroup.stories.tsx +1 -0
  117. package/radio-group/RadioGroup.test.js +123 -96
  118. package/radio-group/types.d.ts +2 -2
  119. package/resultsetTable/ResultsetTable.js +1 -3
  120. package/resultsetTable/ResultsetTable.test.js +42 -0
  121. package/select/Listbox.d.ts +4 -0
  122. package/select/Listbox.js +198 -0
  123. package/select/Option.js +1 -1
  124. package/select/Select.js +104 -199
  125. package/select/Select.stories.tsx +145 -100
  126. package/select/Select.test.js +503 -286
  127. package/select/types.d.ts +31 -12
  128. package/sidenav/Sidenav.d.ts +6 -5
  129. package/sidenav/Sidenav.js +184 -52
  130. package/sidenav/Sidenav.stories.tsx +154 -156
  131. package/sidenav/Sidenav.test.js +25 -37
  132. package/sidenav/types.d.ts +50 -27
  133. package/slider/Slider.d.ts +1 -1
  134. package/slider/Slider.js +118 -93
  135. package/slider/Slider.stories.tsx +15 -9
  136. package/slider/Slider.test.js +142 -21
  137. package/slider/types.d.ts +6 -2
  138. package/spinner/Spinner.js +1 -1
  139. package/switch/Switch.d.ts +2 -2
  140. package/switch/Switch.js +133 -64
  141. package/switch/Switch.stories.tsx +16 -38
  142. package/switch/Switch.test.js +144 -17
  143. package/switch/types.d.ts +5 -6
  144. package/table/Table.js +1 -1
  145. package/tabs/Tab.d.ts +4 -0
  146. package/tabs/Tab.js +135 -0
  147. package/tabs/Tabs.d.ts +1 -1
  148. package/tabs/Tabs.js +362 -108
  149. package/tabs/Tabs.stories.tsx +74 -8
  150. package/tabs/Tabs.test.js +241 -13
  151. package/tabs/types.d.ts +19 -5
  152. package/tabs-nav/NavTabs.d.ts +8 -0
  153. package/tabs-nav/NavTabs.js +125 -0
  154. package/tabs-nav/NavTabs.stories.tsx +170 -0
  155. package/tabs-nav/NavTabs.test.js +82 -0
  156. package/tabs-nav/Tab.d.ts +4 -0
  157. package/tabs-nav/Tab.js +130 -0
  158. package/tabs-nav/types.d.ts +53 -0
  159. package/{stack → tabs-nav}/types.js +0 -0
  160. package/tag/Tag.js +6 -9
  161. package/tag/types.d.ts +1 -1
  162. package/text-input/Icons.d.ts +8 -0
  163. package/text-input/Icons.js +60 -0
  164. package/text-input/Suggestion.d.ts +4 -0
  165. package/text-input/Suggestion.js +57 -0
  166. package/text-input/Suggestions.d.ts +4 -0
  167. package/text-input/Suggestions.js +134 -0
  168. package/text-input/TextInput.js +213 -334
  169. package/text-input/TextInput.stories.tsx +189 -182
  170. package/text-input/TextInput.test.js +244 -198
  171. package/text-input/types.d.ts +46 -12
  172. package/textarea/Textarea.js +10 -19
  173. package/textarea/types.d.ts +10 -7
  174. package/toggle-group/ToggleGroup.d.ts +1 -1
  175. package/toggle-group/ToggleGroup.js +5 -4
  176. package/toggle-group/ToggleGroup.stories.tsx +4 -4
  177. package/toggle-group/ToggleGroup.test.js +35 -4
  178. package/toggle-group/types.d.ts +9 -1
  179. package/typography/Typography.d.ts +4 -0
  180. package/typography/Typography.js +131 -0
  181. package/typography/Typography.stories.tsx +198 -0
  182. package/typography/types.d.ts +18 -0
  183. package/typography/types.js +5 -0
  184. package/useTheme.js +2 -2
  185. package/useTranslatedLabels.d.ts +2 -0
  186. package/useTranslatedLabels.js +20 -0
  187. package/wizard/Wizard.js +43 -44
  188. package/wizard/Wizard.stories.tsx +20 -1
  189. package/wizard/types.d.ts +5 -4
  190. package/ThemeContext.d.ts +0 -10
  191. package/ThemeContext.js +0 -243
  192. package/list/List.d.ts +0 -4
  193. package/list/List.js +0 -47
  194. package/list/List.stories.tsx +0 -95
  195. package/list/types.d.ts +0 -7
  196. package/radio/Radio.d.ts +0 -4
  197. package/radio/Radio.js +0 -174
  198. package/radio/Radio.stories.tsx +0 -192
  199. package/radio/Radio.test.js +0 -71
  200. package/radio/types.d.ts +0 -54
  201. package/row/Row.d.ts +0 -3
  202. package/row/Row.js +0 -127
  203. package/row/Row.stories.tsx +0 -237
  204. package/row/types.d.ts +0 -28
  205. package/stack/Stack.d.ts +0 -3
  206. package/stack/Stack.js +0 -97
  207. package/stack/Stack.stories.tsx +0 -164
  208. package/stack/types.d.ts +0 -24
  209. package/text/Text.d.ts +0 -7
  210. package/text/Text.js +0 -30
  211. package/text/Text.stories.tsx +0 -19
@@ -6,24 +6,73 @@ var _react = _interopRequireDefault(require("react"));
6
6
 
7
7
  var _react2 = require("@testing-library/react");
8
8
 
9
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
+
9
11
  var _Slider = _interopRequireDefault(require("./Slider"));
10
12
 
11
13
  describe("Slider component tests", function () {
12
- test("Slider renders with correct text", function () {
14
+ test("Slider renders with correct text and label id", function () {
13
15
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
16
+ label: "label",
14
17
  minValue: 0,
15
18
  maxValue: 100,
16
19
  showLimitsValues: true
17
20
  })),
18
- getByText = _render.getByText;
21
+ getByText = _render.getByText,
22
+ getByRole = _render.getByRole;
19
23
 
20
24
  expect(getByText("0")).toBeTruthy();
21
25
  expect(getByText("100")).toBeTruthy();
26
+ var sliderId = getByText("label").getAttribute("id");
27
+ expect(getByRole("slider").getAttribute("aria-labelledby")).toBe(sliderId);
28
+ expect(getByRole("slider").getAttribute("aria-orientation")).toBe("horizontal");
29
+ });
30
+ test("Slider renders with correct initial value when it is uncontrolled", function () {
31
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
32
+ defaultValue: 30,
33
+ minValue: 0,
34
+ maxValue: 100,
35
+ showLimitsValues: true,
36
+ showInput: true
37
+ })),
38
+ getByRole = _render2.getByRole;
39
+
40
+ var slider = getByRole("slider");
41
+ var input = getByRole("textbox");
42
+ expect(slider.getAttribute("aria-valuenow")).toBe("30");
43
+ expect(input.value).toBe("30");
44
+ });
45
+ test("Slider correct limit values", function () {
46
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
47
+ defaultValue: 125,
48
+ minValue: 30,
49
+ maxValue: 125,
50
+ showLimitsValues: true
51
+ })),
52
+ getByRole = _render3.getByRole,
53
+ getByText = _render3.getByText;
54
+
55
+ var slider = getByRole("slider");
56
+ expect(slider.getAttribute("aria-valuemin")).toBe("30");
57
+ expect(slider.getAttribute("aria-valuemax")).toBe("125");
58
+
59
+ _userEvent["default"].tab();
60
+
61
+ _react2.fireEvent.keyDown(slider, {
62
+ key: "ArrowRight",
63
+ code: "ArrowRight",
64
+ keyCode: 39,
65
+ charCode: 39
66
+ });
67
+
68
+ expect(slider.getAttribute("aria-valuenow")).toBe("125");
69
+ expect(getByText("30")).toBeTruthy();
70
+ expect(getByText("125")).toBeTruthy();
22
71
  });
23
72
  test("Calls correct function onChange in controlled slider", function () {
24
73
  var onChange = jest.fn();
25
74
 
26
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
75
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
27
76
  minValue: 0,
28
77
  maxValue: 100,
29
78
  onChange: onChange,
@@ -31,8 +80,10 @@ describe("Slider component tests", function () {
31
80
  value: 13,
32
81
  showInput: true
33
82
  })),
34
- getByRole = _render2.getByRole;
83
+ getByRole = _render4.getByRole;
35
84
 
85
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("13");
86
+ expect(getByRole("textbox").value).toBe("13");
36
87
  (0, _react2.act)(function () {
37
88
  _react2.fireEvent.change(getByRole("textbox"), {
38
89
  target: {
@@ -41,18 +92,20 @@ describe("Slider component tests", function () {
41
92
  });
42
93
  });
43
94
  expect(onChange).toHaveBeenCalledWith(25);
95
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("13");
96
+ expect(getByRole("textbox").value).toBe("13");
44
97
  });
45
98
  test("Calls correct function onChange in uncontrolled slider", function () {
46
99
  var onChange = jest.fn();
47
100
 
48
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
101
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
49
102
  minValue: 0,
50
103
  maxValue: 100,
51
104
  onChange: onChange,
52
105
  showLimitsValues: true,
53
106
  showInput: true
54
107
  })),
55
- getByRole = _render3.getByRole;
108
+ getByRole = _render5.getByRole;
56
109
 
57
110
  (0, _react2.act)(function () {
58
111
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -62,11 +115,13 @@ describe("Slider component tests", function () {
62
115
  });
63
116
  });
64
117
  expect(onChange).toHaveBeenCalledWith(25);
118
+ expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("25");
119
+ expect(getByRole("textbox").value).toBe("25");
65
120
  });
66
- test("Disabled slider have disabled input", function () {
121
+ test("Disabled slider have disabled input and slider", function () {
67
122
  var onChange = jest.fn();
68
123
 
69
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
124
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
70
125
  minValue: 0,
71
126
  maxValue: 100,
72
127
  onChange: onChange,
@@ -75,7 +130,7 @@ describe("Slider component tests", function () {
75
130
  showInput: true,
76
131
  value: 13
77
132
  })),
78
- getByRole = _render4.getByRole;
133
+ getByRole = _render6.getByRole;
79
134
 
80
135
  (0, _react2.act)(function () {
81
136
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -86,33 +141,64 @@ describe("Slider component tests", function () {
86
141
  });
87
142
  expect(getByRole("textbox").hasAttribute("disabled")).toBeTruthy();
88
143
  expect(getByRole("textbox").value).toBe("13");
144
+ expect(getByRole("slider").hasAttribute("disabled")).toBeTruthy();
89
145
  });
90
- test("Calls correct function onDragEnd", function () {
146
+ test("Calls correct function onDragEnd when it is uncontrolled", function () {
91
147
  var onDragEnd = jest.fn();
92
148
 
93
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
149
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
94
150
  minValue: 0,
95
- maxValue: 100,
96
- showLimitsValues: true,
97
- showInput: true,
151
+ maxValue: 150,
98
152
  onDragEnd: onDragEnd,
99
- value: 25
153
+ showInput: true
100
154
  })),
101
- getByRole = _render5.getByRole;
155
+ getByRole = _render7.getByRole;
102
156
 
157
+ var slider = getByRole("slider");
158
+ (0, _react2.act)(function () {
159
+ _react2.fireEvent.mouseDown(slider);
160
+ });
103
161
  (0, _react2.act)(function () {
104
- _react2.fireEvent.mouseDown(getByRole("slider"));
162
+ _react2.fireEvent.mouseUp(slider, {
163
+ target: {
164
+ value: 120
165
+ }
166
+ });
167
+ });
168
+ expect(onDragEnd).toHaveBeenCalledWith("120");
169
+ });
170
+ test("Calls correct function onDragEnd when it is controlled", function () {
171
+ var onDragEnd = jest.fn();
105
172
 
106
- _react2.fireEvent.mouseUp(getByRole("slider"));
173
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
174
+ minValue: 0,
175
+ maxValue: 150,
176
+ value: 50,
177
+ onDragEnd: onDragEnd,
178
+ showInput: true
179
+ })),
180
+ getByRole = _render8.getByRole;
181
+
182
+ var slider = getByRole("slider");
183
+ (0, _react2.act)(function () {
184
+ _react2.fireEvent.mouseDown(slider);
107
185
  });
108
- expect(onDragEnd).toHaveBeenCalled();
186
+ (0, _react2.act)(function () {
187
+ _react2.fireEvent.mouseUp(slider, {
188
+ target: {
189
+ value: 120
190
+ }
191
+ });
192
+ });
193
+ expect(onDragEnd).toHaveBeenCalledWith("120");
194
+ expect(slider.getAttribute("aria-valuenow")).toBe("50");
109
195
  });
110
196
  test("Calls correct function labelFormatCallback", function () {
111
197
  var labelFormatCallback = jest.fn(function (x) {
112
198
  return "".concat(x, "$");
113
199
  });
114
200
 
115
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
201
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
116
202
  minValue: 0,
117
203
  maxValue: 100,
118
204
  showLimitsValues: true,
@@ -120,10 +206,45 @@ describe("Slider component tests", function () {
120
206
  value: 25,
121
207
  labelFormatCallback: labelFormatCallback
122
208
  })),
123
- getByText = _render6.getByText;
209
+ getByText = _render9.getByText;
124
210
 
125
211
  expect(getByText("0$")).toBeTruthy();
126
212
  expect(getByText("100$")).toBeTruthy();
127
213
  expect(labelFormatCallback).toHaveBeenCalledTimes(2);
128
214
  });
215
+ test("Change value correctly to 0 from external function", function () {
216
+ var onChange = jest.fn();
217
+
218
+ var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
219
+ minValue: 0,
220
+ maxValue: 100,
221
+ onChange: onChange,
222
+ showLimitsValues: true,
223
+ value: 13,
224
+ showInput: true
225
+ })),
226
+ rerender = _render10.rerender,
227
+ getByRole = _render10.getByRole;
228
+
229
+ var slider = getByRole("slider");
230
+
231
+ _userEvent["default"].tab();
232
+
233
+ _react2.fireEvent.keyDown(slider, {
234
+ key: "ArrowRight",
235
+ code: "ArrowRight",
236
+ keyCode: 39,
237
+ charCode: 39
238
+ });
239
+
240
+ rerender( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
241
+ minValue: 0,
242
+ maxValue: 100,
243
+ onChange: onChange,
244
+ showLimitsValues: true,
245
+ value: 0,
246
+ showInput: true
247
+ }));
248
+ expect(slider.getAttribute("aria-valuenow")).toBe("0");
249
+ });
129
250
  });
package/slider/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
- declare type Margin = {
1
+ export declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
2
+ export declare type Margin = {
3
3
  top?: Space;
4
4
  bottom?: Space;
5
5
  left?: Space;
@@ -14,6 +14,10 @@ declare type Props = {
14
14
  * Name attribute of the input element.
15
15
  */
16
16
  name?: string;
17
+ /**
18
+ * Initial value of the slider, only when it is uncontrolled.
19
+ */
20
+ defaultValue?: number;
17
21
  /**
18
22
  * The selected value. If undefined, the component will be uncontrolled and the value will be managed internally by the component.
19
23
  */
@@ -199,7 +199,7 @@ var SVGSpinner = _styledComponents["default"].svg(_templateObject8 || (_template
199
199
  var CircleSpinner = _styledComponents["default"].circle(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n fill: transparent;\n stroke-linecap: initial;\n vector-effect: non-scaling-stroke;\n animation: ", ";\n stroke: ", ";\n transform-origin: ", ";\n stroke-dasharray: ", ";\n stroke-width: ", ";\n stroke-dashoffset: ", ";\n"])), function (props) {
200
200
  return props.isDeterminated ? "none" : props.mode !== "small" ? "1.4s ease-in-out infinite both svg-circle-large" : "1.4s ease-in-out infinite both svg-circle-small";
201
201
  }, function (props) {
202
- return props.backgroundType === "dark" ? props.theme.trackCircleColorOnDark : props.theme.trackCircleColor;
202
+ return props.backgroundType === "dark" || props.mode === "overlay" ? props.theme.trackCircleColorOverlay : props.theme.trackCircleColor;
203
203
  }, function (props) {
204
204
  return !props.isDeterminated ? "50% 50%" : "";
205
205
  }, function (props) {
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- import SwitchPropsType from "./types";
3
- declare const DxcSwitch: ({ defaultChecked, checked, value, label, labelPosition, name, disabled, onChange, required, margin, size, tabIndex, }: SwitchPropsType) => JSX.Element;
2
+ import { SwitchPropsType } from "./types";
3
+ declare const DxcSwitch: ({ defaultChecked, checked, value, label, labelPosition, name, disabled, optional, onChange, margin, size, tabIndex, }: SwitchPropsType) => JSX.Element;
4
4
  export default DxcSwitch;
package/switch/Switch.js CHANGED
@@ -19,10 +19,6 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _core = require("@material-ui/core");
23
-
24
- var _RequiredComponent = _interopRequireDefault(require("../common/RequiredComponent"));
25
-
26
22
  var _uuid = require("uuid");
27
23
 
28
24
  var _variables = require("../common/variables.js");
@@ -31,9 +27,11 @@ var _utils = require("../common/utils.js");
31
27
 
32
28
  var _useTheme = _interopRequireDefault(require("../useTheme"));
33
29
 
30
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
31
+
34
32
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
35
33
 
36
- var _templateObject, _templateObject2;
34
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
37
35
 
38
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
37
 
@@ -51,9 +49,9 @@ var DxcSwitch = function DxcSwitch(_ref) {
51
49
  name = _ref$name === void 0 ? "" : _ref$name,
52
50
  _ref$disabled = _ref.disabled,
53
51
  disabled = _ref$disabled === void 0 ? false : _ref$disabled,
52
+ _ref$optional = _ref.optional,
53
+ optional = _ref$optional === void 0 ? false : _ref$optional,
54
54
  onChange = _ref.onChange,
55
- _ref$required = _ref.required,
56
- required = _ref$required === void 0 ? false : _ref$required,
57
55
  margin = _ref.margin,
58
56
  _ref$size = _ref.size,
59
57
  size = _ref$size === void 0 ? "fitContent" : _ref$size,
@@ -72,46 +70,69 @@ var DxcSwitch = function DxcSwitch(_ref) {
72
70
  setInnerChecked = _useState4[1];
73
71
 
74
72
  var colorsTheme = (0, _useTheme["default"])();
73
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
75
74
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
75
+ var refTrack = (0, _react.useRef)(null);
76
76
 
77
- var handlerSwitchChange = function handlerSwitchChange(event) {
78
- if (checked === undefined) {
79
- var _event$target$checked;
77
+ var handleOnKeyDown = function handleOnKeyDown(event) {
78
+ switch (event.key) {
79
+ case "Enter":
80
+ case " ":
81
+ //Space
82
+ event.preventDefault();
83
+ refTrack.current.focus();
84
+ var isChecked = !(checked !== null && checked !== void 0 ? checked : innerChecked);
85
+ setInnerChecked(isChecked);
86
+ onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
87
+ break;
88
+ }
89
+ };
80
90
 
81
- var isChecked = (_event$target$checked = event.target.checked) !== null && _event$target$checked !== void 0 ? _event$target$checked : !innerChecked;
82
- setInnerChecked(isChecked);
83
- onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
84
- } else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
91
+ var handlerSwitchChange = function handlerSwitchChange(event) {
92
+ checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
93
+ return !innerChecked;
94
+ });
95
+ onChange === null || onChange === void 0 ? void 0 : onChange(checked ? !checked : !innerChecked);
85
96
  };
86
97
 
87
98
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
88
99
  theme: colorsTheme["switch"]
89
100
  }, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
90
101
  margin: margin,
102
+ size: size,
103
+ onKeyDown: handleOnKeyDown,
91
104
  disabled: disabled,
105
+ onClick: !disabled ? handlerSwitchChange : undefined
106
+ }, labelPosition === "before" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
107
+ id: labelId,
92
108
  labelPosition: labelPosition,
93
- size: size,
94
- backgroundType: backgroundType
95
- }, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
96
- checked: checked !== null && checked !== void 0 ? checked : innerChecked,
97
- inputProps: {
98
- name: name,
99
- "aria-labelledby": labelId,
100
- role: "switch",
101
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
102
- tabIndex: tabIndex
103
- },
104
- onChange: handlerSwitchChange,
109
+ disabled: disabled,
110
+ backgroundType: backgroundType,
111
+ label: label
112
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
113
+ type: "checkbox",
114
+ name: name,
115
+ "aria-hidden": true,
105
116
  value: value,
106
117
  disabled: disabled,
107
- disableRipple: true
108
- }), /*#__PURE__*/_react["default"].createElement(LabelContainer, {
118
+ checked: checked !== null && checked !== void 0 ? checked : innerChecked,
119
+ readOnly: true
120
+ }), /*#__PURE__*/_react["default"].createElement(SwitchBase, null, /*#__PURE__*/_react["default"].createElement(SwitchTrack, {
121
+ role: "switch",
122
+ backgroundType: backgroundType,
123
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
124
+ "aria-disabled": disabled,
125
+ disabled: disabled,
126
+ "aria-labelledby": labelId,
127
+ tabIndex: !disabled ? tabIndex : -1,
128
+ ref: refTrack
129
+ })), labelPosition === "after" && label && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
109
130
  id: labelId,
110
131
  labelPosition: labelPosition,
111
- onClick: !disabled && handlerSwitchChange,
112
132
  disabled: disabled,
113
- backgroundType: backgroundType
114
- }, required && /*#__PURE__*/_react["default"].createElement(_RequiredComponent["default"], null), label)));
133
+ backgroundType: backgroundType,
134
+ label: label
135
+ }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel), " ", label)));
115
136
  };
116
137
 
117
138
  var sizes = {
@@ -119,17 +140,67 @@ var sizes = {
119
140
  medium: "240px",
120
141
  large: "480px",
121
142
  fillParent: "100%",
122
- fitContent: "unset"
143
+ fitContent: "fit-content"
123
144
  };
124
145
 
125
146
  var calculateWidth = function calculateWidth(margin, size) {
126
147
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
127
148
  };
128
149
 
129
- var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n display: inline-flex;\n align-items: center;\n flex-direction: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n cursor: ", ";\n\n .MuiSwitch-root {\n align-items: center;\n width: ", ";\n height: 45px;\n margin: 3px;\n\n .Mui-focusVisible {\n outline: ", ";\n outline-offset: -3px;\n }\n\n .MuiSwitch-track {\n /*Enabled and unchecked bar*/\n background-color: ", ";\n height: ", ";\n }\n\n .MuiSwitch-switchBase + .MuiSwitch-track {\n opacity: 1;\n }\n\n .MuiIconButton-root {\n /*Enabled and unchecked*/\n top: unset;\n .MuiSwitch-thumb {\n /*Only for thumb in all states*/\n width: ", ";\n height: ", ";\n }\n color: ", ";\n &:hover {\n background-color: transparent;\n }\n &.Mui-disabled {\n /*Disabled and unchecked*/\n color: ", ";\n + .MuiSwitch-track {\n /*Disabled and unchecked bar*/\n background-color: ", ";\n }\n }\n &.Mui-disabled.Mui-checked {\n /*Disabled and checked*/\n color: ", ";\n + .MuiSwitch-track {\n /*Disabled and checked bar*/\n background-color: ", ";\n }\n }\n &.Mui-checked {\n /*Enabled and checked*/\n color: ", ";\n transform: translateX(", ");\n &:hover {\n background-color: transparent;\n }\n + .MuiSwitch-track {\n /*Enabled and checked bar*/\n background-color: ", ";\n }\n }\n }\n }\n"])), function (props) {
150
+ var getDisabledColor = function getDisabledColor(props, element, subelement) {
151
+ switch (element) {
152
+ case "track":
153
+ switch (subelement) {
154
+ case "check":
155
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
156
+
157
+ case "uncheck":
158
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
159
+ }
160
+
161
+ case "thumb":
162
+ switch (subelement) {
163
+ case "check":
164
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
165
+
166
+ case "uncheck":
167
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
168
+ }
169
+
170
+ case "label":
171
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor;
172
+ }
173
+ };
174
+
175
+ var getNotDisabledColor = function getNotDisabledColor(props, element, subelement) {
176
+ switch (element) {
177
+ case "track":
178
+ switch (subelement) {
179
+ case "check":
180
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
181
+
182
+ case "uncheck":
183
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
184
+ }
185
+
186
+ case "thumb":
187
+ switch (subelement) {
188
+ case "check":
189
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
190
+
191
+ case "uncheck":
192
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
193
+ }
194
+
195
+ case "label":
196
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
197
+ }
198
+ };
199
+
200
+ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n width: ", ";\n height: 40px;\n cursor: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
130
201
  return calculateWidth(props.margin, props.size);
131
202
  }, function (props) {
132
- return props.labelPosition === "after" ? "row" : "row-reverse";
203
+ return props.disabled === true ? "not-allowed" : "pointer";
133
204
  }, function (props) {
134
205
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
135
206
  }, function (props) {
@@ -140,52 +211,50 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
140
211
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
141
212
  }, function (props) {
142
213
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
214
+ });
215
+
216
+ var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ", ";\n opacity: 1;\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n\n ", ";\n\n ", "\n"])), function (props) {
217
+ return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
143
218
  }, function (props) {
144
- return props.disabled ? "not-allowed" : "default";
145
- }, function (props) {
146
- return props.theme.trackWidth;
147
- }, function (props) {
148
- return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
149
- }, function (props) {
150
- return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
151
- }, function (props) {
152
- return props.theme.trackHeight;
153
- }, function (props) {
154
- return props.theme.thumbWidth;
219
+ return props.theme.labelFontFamily;
155
220
  }, function (props) {
156
- return props.theme.thumbHeight;
221
+ return props.theme.labelFontSize;
157
222
  }, function (props) {
158
- return props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
223
+ return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
159
224
  }, function (props) {
160
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
225
+ return props.theme.labelFontWeight;
161
226
  }, function (props) {
162
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
227
+ return !props.label ? "margin: 0px;" : props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
163
228
  }, function (props) {
164
- return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
229
+ return props.labelPosition === "before" && "order: -1";
230
+ });
231
+
232
+ var SwitchBase = _styledComponents["default"].label(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n margin: 0px 12px;\n"])));
233
+
234
+ var ValueInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
235
+
236
+ var SwitchTrack = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 15px;\n width: ", ";\n height: ", ";\n position: relative;\n cursor: ", ";\n\n &:focus-visible {\n outline: none;\n ::before {\n outline: ", ";\n outline-offset: 6px;\n }\n }\n\n /* Thumb element */\n ::before {\n content: \"\";\n transform: initial;\n position: absolute;\n width: ", ";\n height: ", ";\n border-radius: 50%;\n z-index: 1;\n box-shadow: 0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%);\n bottom: -6px;\n left: -4px;\n transform: translateX(0px);\n background-color: ", ";\n }\n\n /* Unchecked */\n background-color: ", ";\n\n /* Checked */\n &[aria-checked=\"true\"] {\n background-color: ", ";\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
237
+ return props.theme.trackWidth;
165
238
  }, function (props) {
166
- return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
239
+ return props.theme.trackHeight;
167
240
  }, function (props) {
168
- return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
241
+ return props.disabled ? "not-allowed" : "pointer";
169
242
  }, function (props) {
170
- return props.theme.thumbShift;
243
+ return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
171
244
  }, function (props) {
172
- return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
173
- });
174
-
175
- var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ", ";\n opacity: 1;\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n cursor: ", ";\n ", "\n"])), function (props) {
176
- return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
245
+ return props.theme.thumbWidth;
177
246
  }, function (props) {
178
- return props.theme.labelFontFamily;
247
+ return props.theme.thumbHeight;
179
248
  }, function (props) {
180
- return props.theme.labelFontSize;
249
+ return props.disabled ? getDisabledColor(props, "thumb", "uncheck") : getNotDisabledColor(props, "thumb", "uncheck");
181
250
  }, function (props) {
182
- return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
251
+ return props.disabled ? getDisabledColor(props, "track", "uncheck") : getNotDisabledColor(props, "track", "uncheck");
183
252
  }, function (props) {
184
- return props.theme.labelFontWeight;
253
+ return props.disabled ? getDisabledColor(props, "track", "check") : getNotDisabledColor(props, "track", "check");
185
254
  }, function (props) {
186
- return props.disabled === true ? "not-allowed" : "pointer";
255
+ return props.theme.thumbShift;
187
256
  }, function (props) {
188
- return props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
257
+ return props.disabled ? getDisabledColor(props, "thumb", "check") : getNotDisabledColor(props, "thumb", "check");
189
258
  });
190
259
 
191
260
  var _default = DxcSwitch;