@dxc-technology/halstack-react 6.0.0 → 6.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 (64) hide show
  1. package/accordion/types.d.ts +1 -1
  2. package/accordion-group/types.d.ts +1 -1
  3. package/bulleted-list/types.d.ts +1 -1
  4. package/button/Button.js +43 -61
  5. package/button/Button.stories.tsx +9 -0
  6. package/button/types.d.ts +7 -7
  7. package/chip/types.d.ts +1 -1
  8. package/common/variables.js +15 -6
  9. package/date-input/DateInput.js +3 -3
  10. package/dialog/Dialog.js +52 -28
  11. package/dialog/Dialog.stories.tsx +1 -2
  12. package/dialog/Dialog.test.js +34 -4
  13. package/dialog/types.d.ts +2 -2
  14. package/dropdown/Dropdown.d.ts +1 -1
  15. package/dropdown/Dropdown.js +242 -246
  16. package/dropdown/Dropdown.stories.tsx +126 -63
  17. package/dropdown/Dropdown.test.js +510 -108
  18. package/dropdown/DropdownMenu.d.ts +4 -0
  19. package/dropdown/DropdownMenu.js +80 -0
  20. package/dropdown/DropdownMenuItem.d.ts +4 -0
  21. package/dropdown/DropdownMenuItem.js +92 -0
  22. package/dropdown/types.d.ts +25 -5
  23. package/flex/Flex.js +1 -1
  24. package/flex/types.d.ts +1 -1
  25. package/footer/types.d.ts +1 -1
  26. package/header/Header.js +74 -72
  27. package/header/Icons.js +2 -2
  28. package/header/types.d.ts +2 -2
  29. package/layout/ApplicationLayout.js +3 -3
  30. package/link/Link.js +1 -1
  31. package/link/Link.stories.tsx +12 -5
  32. package/link/types.d.ts +1 -1
  33. package/package.json +7 -7
  34. package/progress-bar/ProgressBar.d.ts +2 -2
  35. package/progress-bar/ProgressBar.js +56 -50
  36. package/progress-bar/ProgressBar.stories.jsx +3 -1
  37. package/progress-bar/ProgressBar.test.js +67 -22
  38. package/progress-bar/types.d.ts +3 -4
  39. package/radio-group/RadioGroup.js +11 -13
  40. package/select/Listbox.d.ts +1 -1
  41. package/select/Listbox.js +25 -1
  42. package/select/Select.js +14 -31
  43. package/select/Select.stories.tsx +6 -5
  44. package/select/Select.test.js +63 -50
  45. package/select/types.d.ts +2 -4
  46. package/sidenav/Sidenav.js +15 -3
  47. package/sidenav/types.d.ts +1 -1
  48. package/slider/Slider.js +3 -3
  49. package/slider/Slider.test.js +37 -0
  50. package/switch/Switch.d.ts +1 -1
  51. package/switch/Switch.js +110 -54
  52. package/switch/Switch.stories.tsx +8 -30
  53. package/switch/Switch.test.js +122 -8
  54. package/switch/types.d.ts +3 -4
  55. package/tabs/types.d.ts +1 -1
  56. package/tabs-nav/NavTabs.js +5 -5
  57. package/tabs-nav/Tab.js +3 -5
  58. package/tabs-nav/types.d.ts +1 -1
  59. package/tag/types.d.ts +1 -1
  60. package/text-input/TextInput.js +12 -21
  61. package/text-input/TextInput.stories.tsx +1 -2
  62. package/text-input/types.d.ts +1 -1
  63. package/toggle-group/types.d.ts +1 -1
  64. package/wizard/types.d.ts +1 -1
@@ -306,7 +306,7 @@ var grouped_icon_options = [{
306
306
  }]
307
307
  }];
308
308
  describe("Select component tests", function () {
309
- test("Renders with correct label", function () {
309
+ test("When clicking the label, the focus goes to the select", function () {
310
310
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
311
311
  label: "test-select-label",
312
312
  helperText: "test-select-helper-text",
@@ -317,40 +317,18 @@ describe("Select component tests", function () {
317
317
 
318
318
  var select = getByRole("combobox");
319
319
  var label = getByText("test-select-label");
320
- expect(label).toBeTruthy();
321
320
 
322
321
  _userEvent["default"].click(label);
323
322
 
324
323
  expect(document.activeElement).toEqual(select);
325
324
  });
326
- test("Renders with correct helper text and placeholder", function () {
325
+ test("Renders with correct aria attributes when is in error state", function () {
327
326
  var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
328
- label: "test-select-label",
329
- helperText: "test-select-helper-text",
330
- placeholder: "Example text"
331
- })),
332
- getByText = _render2.getByText;
333
-
334
- expect(getByText("test-select-helper-text")).toBeTruthy();
335
- expect(getByText("Example text")).toBeTruthy();
336
- });
337
- test("Renders with correct optional label", function () {
338
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
339
- label: "test-select-label",
340
- optional: true
341
- })),
342
- getByText = _render3.getByText;
343
-
344
- expect(getByText("test-select-label")).toBeTruthy();
345
- expect(getByText("(Optional)")).toBeTruthy();
346
- });
347
- test("Renders with error message and correct aria attributes", function () {
348
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
349
327
  label: "Error label",
350
328
  error: "Error message."
351
329
  })),
352
- getByText = _render4.getByText,
353
- getByRole = _render4.getByRole;
330
+ getByText = _render2.getByText,
331
+ getByRole = _render2.getByRole;
354
332
 
355
333
  var select = getByRole("combobox");
356
334
  var errorMessage = getByText("Error message.");
@@ -360,13 +338,13 @@ describe("Select component tests", function () {
360
338
  expect(errorMessage.getAttribute("aria-live")).toBe("assertive");
361
339
  });
362
340
  test("Renders with correct aria attributes", function () {
363
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
341
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
364
342
  label: "test-select-label",
365
343
  placeholder: "Example",
366
344
  options: single_options
367
345
  })),
368
- getByText = _render5.getByText,
369
- getByRole = _render5.getByRole;
346
+ getByText = _render3.getByText,
347
+ getByRole = _render3.getByRole;
370
348
 
371
349
  var select = getByRole("combobox");
372
350
  var label = getByText("test-select-label");
@@ -385,17 +363,17 @@ describe("Select component tests", function () {
385
363
  expect(list.getAttribute("aria-multiselectable")).toBe("false");
386
364
  });
387
365
  test("Single selection: Renders with correct default value", function () {
388
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
366
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
389
367
  label: "test-select-label",
390
368
  name: "test",
391
369
  defaultValue: "4",
392
370
  options: single_options
393
371
  })),
394
- getByText = _render6.getByText,
395
- getByRole = _render6.getByRole,
396
- getAllByRole = _render6.getAllByRole,
397
- queryByRole = _render6.queryByRole,
398
- container = _render6.container;
372
+ getByText = _render4.getByText,
373
+ getByRole = _render4.getByRole,
374
+ getAllByRole = _render4.getAllByRole,
375
+ queryByRole = _render4.queryByRole,
376
+ container = _render4.container;
399
377
 
400
378
  var select = getByRole("combobox");
401
379
  var submitInput = container.querySelector("input[name=\"test\"]");
@@ -413,18 +391,18 @@ describe("Select component tests", function () {
413
391
  expect(submitInput.value).toBe("8");
414
392
  });
415
393
  test("Multiple selection: Renders with correct default value", function () {
416
- var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
394
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
417
395
  label: "test-select-label",
418
396
  name: "test",
419
397
  defaultValue: ["4", "2", "6"],
420
398
  options: single_options,
421
399
  multiple: true
422
400
  })),
423
- getByText = _render7.getByText,
424
- getByRole = _render7.getByRole,
425
- getAllByRole = _render7.getAllByRole,
426
- queryByRole = _render7.queryByRole,
427
- container = _render7.container;
401
+ getByText = _render5.getByText,
402
+ getByRole = _render5.getByRole,
403
+ getAllByRole = _render5.getAllByRole,
404
+ queryByRole = _render5.queryByRole,
405
+ container = _render5.container;
428
406
 
429
407
  var select = getByRole("combobox");
430
408
  var submitInput = container.querySelector("input[name=\"test\"]");
@@ -443,18 +421,15 @@ describe("Select component tests", function () {
443
421
  expect(getByText("Option 02, Option 03, Option 04, Option 06")).toBeTruthy();
444
422
  expect(submitInput.value).toBe("4,2,6,3");
445
423
  });
446
- test("Disabled select - Clear all options action must be shown but not clickable", function () {
447
- var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
424
+ test("Disabled select - Cannot gain focus or open the listbox via click", function () {
425
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
448
426
  label: "test-select-label",
449
427
  value: ["1", "2"],
450
428
  options: single_options,
451
- disabled: true,
452
- searchable: true,
453
- multiple: true
429
+ disabled: true
454
430
  })),
455
- getByRole = _render8.getByRole,
456
- getByText = _render8.getByText,
457
- queryByRole = _render8.queryByRole;
431
+ getByRole = _render6.getByRole,
432
+ queryByRole = _render6.queryByRole;
458
433
 
459
434
  var select = getByRole("combobox");
460
435
  expect(select.getAttribute("aria-disabled")).toBe("true");
@@ -462,12 +437,49 @@ describe("Select component tests", function () {
462
437
  _userEvent["default"].click(select);
463
438
 
464
439
  expect(queryByRole("listbox")).toBeFalsy();
440
+ expect(document.activeElement === select).toBeFalsy();
441
+ });
442
+ test("Disabled select - Clear all options action must be shown but not clickable", function () {
443
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
444
+ label: "test-select-label",
445
+ value: ["1", "2"],
446
+ options: single_options,
447
+ disabled: true,
448
+ searchable: true,
449
+ multiple: true
450
+ })),
451
+ getByRole = _render7.getByRole,
452
+ getByText = _render7.getByText;
465
453
 
466
454
  _userEvent["default"].click(getByRole("button"));
467
455
 
468
456
  expect(getByText("Option 01, Option 02")).toBeTruthy();
469
457
  });
470
- test("Focused select does not open the listbox", function () {
458
+ test("Disabled select - Does not call onBlur event", function () {
459
+ var onBlur = jest.fn();
460
+
461
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
462
+ label: "test-select-label",
463
+ options: single_options,
464
+ disabled: true,
465
+ onBlur: onBlur
466
+ })),
467
+ getByRole = _render8.getByRole;
468
+
469
+ var select = getByRole("combobox");
470
+
471
+ _userEvent["default"].click(select);
472
+
473
+ _react2.fireEvent.keyDown(getByRole("combobox"), {
474
+ key: "Tab",
475
+ code: "Tab",
476
+ keyCode: 9,
477
+ charCode: 9
478
+ });
479
+
480
+ expect(onBlur).not.toHaveBeenCalled();
481
+ });
482
+ test("Disabled select - When the component gains the focus, the listbox does not open", function () {
471
483
  var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
472
484
  label: "test-select-label",
473
485
  value: ["1", "2"],
@@ -484,6 +496,7 @@ describe("Select component tests", function () {
484
496
  _react2.fireEvent.focus(select);
485
497
 
486
498
  expect(queryByRole("listbox")).toBeFalsy();
499
+ expect(document.activeElement === select).toBeFalsy();
487
500
  });
488
501
  test("Controlled - Single selection - Not optional constraint", function () {
489
502
  var onChange = jest.fn();
package/select/types.d.ts CHANGED
@@ -6,7 +6,7 @@ declare type Margin = {
6
6
  left?: Space;
7
7
  right?: Space;
8
8
  };
9
- declare type SVG = React.SVGProps<SVGSVGElement>;
9
+ declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
10
10
  declare type OptionGroup = {
11
11
  /**
12
12
  * Label of the group to be shown in the select's listbox.
@@ -201,9 +201,7 @@ export declare type ListboxProps = {
201
201
  optionalItem: Option;
202
202
  searchable: boolean;
203
203
  handleOptionOnClick: (option: Option) => void;
204
- styles: {
205
- width: number;
206
- };
204
+ getSelectWidth: () => number;
207
205
  };
208
206
  /**
209
207
  * Reference to the select component.
@@ -124,12 +124,20 @@ var Group = function Group(_ref4) {
124
124
  collapsed = _useState2[0],
125
125
  setCollapsed = _useState2[1];
126
126
 
127
+ var selectedGroup = (0, _react.useMemo)(function () {
128
+ return collapsed ? _react["default"].Children.toArray(children).some(function (child) {
129
+ var _child$props;
130
+
131
+ return (_child$props = child["props"]) === null || _child$props === void 0 ? void 0 : _child$props.selected;
132
+ }) : false;
133
+ }, [collapsed, children]);
127
134
  return /*#__PURE__*/_react["default"].createElement(SidenavGroup, null, collapsable && title ? /*#__PURE__*/_react["default"].createElement(SidenavGroupTitleButton, {
128
135
  role: "button",
129
136
  "aria-expanded": !collapsed,
130
137
  onClick: function onClick() {
131
138
  return setCollapsed(!collapsed);
132
- }
139
+ },
140
+ selectedGroup: selectedGroup
133
141
  }, /*#__PURE__*/_react["default"].createElement(SidenavContent, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(SidenavIcon, {
134
142
  src: icon
135
143
  }) : icon, title), collapsed ? collapsedIcon : collapsableIcon) : title && /*#__PURE__*/_react["default"].createElement(SidenavGroupTitle, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(SidenavIcon, {
@@ -206,7 +214,7 @@ var SidenavGroupTitle = _styledComponents["default"].span(_templateObject5 || (_
206
214
  return props.theme.groupTitleFontSize;
207
215
  });
208
216
 
209
- var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n all: unset;\n cursor: pointer;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n display: flex;\n align-items: center;\n margin: 0px;\n padding: 0.5rem 1.2rem;\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n\n svg {\n width: 18px;\n height: auto;\n }\n"])), function (props) {
217
+ var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n all: unset;\n cursor: pointer;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n display: flex;\n align-items: center;\n margin: 0px;\n padding: 0.5rem 1.2rem;\n &:focus-visible {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n &:hover {\n ", "\n }\n &:active {\n background-color: ", ";\n color: ", ";\n }\n ", "\n svg {\n width: 18px;\n height: auto;\n }\n"])), function (props) {
210
218
  return props.theme.groupTitleFontFamily;
211
219
  }, function (props) {
212
220
  return props.theme.groupTitleFontStyle;
@@ -217,9 +225,13 @@ var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObjec
217
225
  }, function (props) {
218
226
  return props.theme.linkFocusColor;
219
227
  }, function (props) {
220
- return props.theme.groupTitleHoverBackgroundColor;
228
+ return props.selectedGroup ? "color: ".concat(props.theme.groupTitleSelectedHoverFontColor, "; background: ").concat(props.theme.groupTitleSelectedHoverBackgroundColor, ";") : "color: ".concat(props.theme.groupTitleFontColor, "; background: ").concat(props.theme.groupTitleHoverBackgroundColor, ";");
221
229
  }, function (props) {
222
230
  return props.theme.groupTitleActiveBackgroundColor;
231
+ }, function (props) {
232
+ return props.theme.groupTitleFontColor;
233
+ }, function (props) {
234
+ return props.selectedGroup ? "color: ".concat(props.theme.groupTitleSelectedFontColor, "; background: ").concat(props.theme.groupTitleSelectedBackgroundColor, ";") : "color: ".concat(props.theme.groupTitleFontColor, "; background: transparent;");
223
235
  });
224
236
 
225
237
  var SidenavLink = _styledComponents["default"].a(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n letter-spacing: ", ";\n\n text-transform: ", ";\n text-decoration: ", ";\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n ", "\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n box-shadow: 0 0 0 2px transparent;\n\n padding: 0.5rem 1.2rem;\n\n cursor: pointer;\n svg {\n width: 16px;\n margin-right: 0.5rem;\n }\n\n &:hover {\n ", "\n }\n\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n\n &:active {\n color: #ffffff;\n background: #4d4d4d;\n outline: 2px solid #0095ff;\n outline-offset: -2px;\n }\n"])), function (props) {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- declare type SVG = React.SVGProps<SVGSVGElement>;
2
+ declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
3
3
  declare type SidenavPropsType = {
4
4
  /**
5
5
  * The area inside the sidenav. This area can be used to render the content inside the sidenav.
package/slider/Slider.js CHANGED
@@ -89,7 +89,7 @@ var DxcSlider = function DxcSlider(_ref) {
89
89
  }, [labelFormatCallback, maxValue]);
90
90
 
91
91
  var handlerSliderChange = function handlerSliderChange(event, newValue) {
92
- var valueToCheck = value !== null && value !== void 0 ? value : innerValue;
92
+ var valueToCheck = value != null && value >= 0 ? value : innerValue;
93
93
  valueToCheck !== newValue && setInnerValue(newValue);
94
94
  onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
95
95
  };
@@ -128,7 +128,7 @@ var DxcSlider = function DxcSlider(_ref) {
128
128
  backgroundType: backgroundType,
129
129
  disabled: disabled
130
130
  }, minLabel), /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
131
- value: value != null && value >= 0 && value || innerValue,
131
+ value: value != null && value >= 0 ? value : innerValue,
132
132
  min: minValue,
133
133
  max: maxValue,
134
134
  onChange: handlerSliderChange,
@@ -143,7 +143,7 @@ var DxcSlider = function DxcSlider(_ref) {
143
143
  step: step
144
144
  }, maxLabel), showInput && /*#__PURE__*/_react["default"].createElement(StyledTextInput, null, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
145
145
  name: name,
146
- value: value != null && value >= 0 && value.toString() || innerValue.toString(),
146
+ value: value != null && value >= 0 ? value.toString() : innerValue.toString(),
147
147
  disabled: disabled,
148
148
  onChange: handlerInputChange,
149
149
  size: "fillParent"
@@ -6,6 +6,8 @@ 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 () {
@@ -147,4 +149,39 @@ describe("Slider component tests", function () {
147
149
  expect(getByText("100$")).toBeTruthy();
148
150
  expect(labelFormatCallback).toHaveBeenCalledTimes(2);
149
151
  });
152
+ test("Change value correctly to 0 from external function", function () {
153
+ var onChange = jest.fn();
154
+
155
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
156
+ minValue: 0,
157
+ maxValue: 100,
158
+ onChange: onChange,
159
+ showLimitsValues: true,
160
+ value: 13,
161
+ showInput: true
162
+ })),
163
+ rerender = _render8.rerender,
164
+ getByRole = _render8.getByRole;
165
+
166
+ var slider = getByRole("slider");
167
+
168
+ _userEvent["default"].tab();
169
+
170
+ _react2.fireEvent.keyDown(slider, {
171
+ key: "ArrowRight",
172
+ code: "ArrowRight",
173
+ keyCode: 39,
174
+ charCode: 39
175
+ });
176
+
177
+ rerender( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
178
+ minValue: 0,
179
+ maxValue: 100,
180
+ onChange: onChange,
181
+ showLimitsValues: true,
182
+ value: 0,
183
+ showInput: true
184
+ }));
185
+ expect(slider.getAttribute("aria-valuenow")).toBe("0");
186
+ });
150
187
  });
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- import SwitchPropsType from "./types";
2
+ import { SwitchPropsType } from "./types";
3
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,8 +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
22
  var _uuid = require("uuid");
25
23
 
26
24
  var _variables = require("../common/variables.js");
@@ -33,13 +31,15 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
33
31
 
34
32
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
35
33
 
36
- var _templateObject, _templateObject2;
34
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
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
 
40
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
39
 
42
40
  var DxcSwitch = function DxcSwitch(_ref) {
41
+ var _ref2;
42
+
43
43
  var defaultChecked = _ref.defaultChecked,
44
44
  checked = _ref.checked,
45
45
  value = _ref.value,
@@ -71,9 +71,32 @@ var DxcSwitch = function DxcSwitch(_ref) {
71
71
  innerChecked = _useState4[0],
72
72
  setInnerChecked = _useState4[1];
73
73
 
74
+ var _useState5 = (0, _react.useState)((_ref2 = label !== "" && label !== null && label !== undefined) !== null && _ref2 !== void 0 ? _ref2 : false),
75
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 1),
76
+ hasLabel = _useState6[0];
77
+
74
78
  var colorsTheme = (0, _useTheme["default"])();
75
79
  var translatedLabels = (0, _useTranslatedLabels["default"])();
76
80
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
81
+ var refTrack = (0, _react.useRef)(null);
82
+
83
+ var handleOnKeyDown = function handleOnKeyDown(event) {
84
+ switch (event.key) {
85
+ case "Enter":
86
+ case " ":
87
+ //Space
88
+ event.preventDefault();
89
+ refTrack.current.focus();
90
+ var isChecked = !(checked !== null && checked !== void 0 ? checked : innerChecked);
91
+ setInnerChecked(isChecked);
92
+
93
+ if (typeof onChange === "function") {
94
+ onChange(isChecked);
95
+ }
96
+
97
+ break;
98
+ }
99
+ };
77
100
 
78
101
  var handlerSwitchChange = function handlerSwitchChange(event) {
79
102
  if (checked === undefined) {
@@ -81,40 +104,64 @@ var DxcSwitch = function DxcSwitch(_ref) {
81
104
 
82
105
  var isChecked = (_event$target$checked = event.target.checked) !== null && _event$target$checked !== void 0 ? _event$target$checked : !innerChecked;
83
106
  setInnerChecked(isChecked);
84
- onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
85
- } else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
86
- };
87
107
 
88
- var labelComponent = /*#__PURE__*/_react["default"].createElement(LabelContainer, {
89
- id: labelId,
90
- labelPosition: labelPosition,
91
- onClick: !disabled && handlerSwitchChange,
92
- disabled: disabled,
93
- backgroundType: backgroundType
94
- }, labelPosition === "before" ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, label, " ", optional && /*#__PURE__*/_react["default"].createElement("span", null, translatedLabels.formFields.optionalLabel)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, optional && /*#__PURE__*/_react["default"].createElement("span", null, translatedLabels.formFields.optionalLabel), " ", label));
108
+ if (typeof onChange === "function") {
109
+ onChange(isChecked);
110
+ }
111
+ } else {
112
+ if (typeof onChange === "function") {
113
+ onChange(!checked);
114
+ }
115
+ }
116
+ };
95
117
 
96
118
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
97
119
  theme: colorsTheme["switch"]
98
120
  }, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
99
121
  margin: margin,
122
+ size: size,
123
+ onKeyDown: handleOnKeyDown
124
+ }, labelPosition === "before" && hasLabel && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
125
+ id: labelId,
126
+ labelPosition: labelPosition,
127
+ onClick: !disabled ? handlerSwitchChange : undefined,
100
128
  disabled: disabled,
129
+ backgroundType: backgroundType,
130
+ hasLabel: hasLabel
131
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(SwitchBase, {
101
132
  labelPosition: labelPosition,
102
- size: size,
103
- backgroundType: backgroundType
104
- }, labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_core.Switch, {
105
- checked: checked !== null && checked !== void 0 ? checked : innerChecked,
106
- inputProps: {
107
- name: name,
108
- "aria-labelledby": labelId,
109
- role: "switch",
110
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
111
- tabIndex: tabIndex
112
- },
113
- onChange: handlerSwitchChange,
133
+ hasLabel: hasLabel,
134
+ htmlFor: labelId,
135
+ onClick: disabled === true ? function () {} : handlerSwitchChange
136
+ }, /*#__PURE__*/_react["default"].createElement(SwitchInput, {
137
+ type: "checkbox",
138
+ role: "switch",
139
+ name: name,
140
+ id: labelId,
141
+ disabled: disabled,
114
142
  value: value,
143
+ "aria-labelledby": labelId,
144
+ "aria-label": hasLabel ? label : undefined,
145
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
146
+ defaultChecked: defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : undefined,
147
+ tabIndex: -1
148
+ }), disabled ? /*#__PURE__*/_react["default"].createElement(DisabledSwitchTrack, {
149
+ backgroundType: backgroundType,
150
+ "data-checked": checked !== null && checked !== void 0 ? checked : innerChecked ? innerChecked : undefined,
151
+ tabIndex: -1
152
+ }) : /*#__PURE__*/_react["default"].createElement(SwitchTrack, {
153
+ backgroundType: backgroundType,
154
+ "data-checked": checked !== null && checked !== void 0 ? checked : innerChecked ? innerChecked : undefined,
155
+ tabIndex: tabIndex,
156
+ ref: refTrack
157
+ })), labelPosition === "after" && hasLabel && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
158
+ id: labelId,
159
+ labelPosition: labelPosition,
160
+ onClick: !disabled ? handlerSwitchChange : undefined,
115
161
  disabled: disabled,
116
- disableRipple: true
117
- }), labelPosition === "after" && labelComponent));
162
+ backgroundType: backgroundType,
163
+ hasLabel: hasLabel
164
+ }, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel), " ", label)));
118
165
  };
119
166
 
120
167
  var sizes = {
@@ -129,7 +176,7 @@ var calculateWidth = function calculateWidth(margin, size) {
129
176
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
130
177
  };
131
178
 
132
- var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n display: inline-flex;\n align-items: center;\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) {
179
+ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n width: ", ";\n height: 40px;\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
133
180
  return calculateWidth(props.margin, props.size);
134
181
  }, function (props) {
135
182
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
@@ -141,16 +188,38 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
141
188
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
142
189
  }, function (props) {
143
190
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
191
+ });
192
+
193
+ 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 ", ";\n\n ", "\n"])), function (props) {
194
+ return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
144
195
  }, function (props) {
145
- return props.disabled ? "not-allowed" : "default";
196
+ return props.theme.labelFontFamily;
146
197
  }, function (props) {
147
- return props.theme.trackWidth;
198
+ return props.theme.labelFontSize;
148
199
  }, function (props) {
149
- return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
200
+ return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
150
201
  }, function (props) {
151
- return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
202
+ return props.theme.labelFontWeight;
203
+ }, function (props) {
204
+ return props.disabled === true ? "not-allowed" : "pointer";
205
+ }, function (props) {
206
+ return !props.hasLabel ? "margin: 0px;" : props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
207
+ }, function (props) {
208
+ return props.labelPosition === "before" && "order: -1";
209
+ });
210
+
211
+ 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: ", ";\n"])), function (props) {
212
+ return !props.hasLabel ? "0px 4px" : props.labelPosition === "before" ? "0 4px 0 12px" : "0 12px 0 4px";
213
+ });
214
+
215
+ var SwitchInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0px;\n"])));
216
+
217
+ var SwitchTrack = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 15px;\n width: ", ";\n height: ", ";\n position: relative;\n transition: transform 0.2s ease;\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 transition: transform 0.2s ease;\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 &[data-checked=\"true\"] {\n background-color: ", ";\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
218
+ return props.theme.trackWidth;
152
219
  }, function (props) {
153
220
  return props.theme.trackHeight;
221
+ }, function (props) {
222
+ return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
154
223
  }, function (props) {
155
224
  return props.theme.thumbWidth;
156
225
  }, function (props) {
@@ -158,38 +227,25 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
158
227
  }, function (props) {
159
228
  return props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
160
229
  }, function (props) {
161
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
162
- }, function (props) {
163
- return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
164
- }, function (props) {
165
- return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
166
- }, function (props) {
167
- return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
230
+ return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
168
231
  }, function (props) {
169
- return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
232
+ return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
170
233
  }, function (props) {
171
234
  return props.theme.thumbShift;
172
235
  }, function (props) {
173
- return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
236
+ return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
174
237
  });
175
238
 
176
- 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\n ", "\n"])), function (props) {
177
- return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
178
- }, function (props) {
179
- return props.theme.labelFontFamily;
180
- }, function (props) {
181
- return props.theme.labelFontSize;
182
- }, function (props) {
183
- return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
239
+ var DisabledSwitchTrack = (0, _styledComponents["default"])(SwitchTrack)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n cursor: not-allowed;\n\n /* Unchecked */\n background-color: ", ";\n\n ::before {\n background-color: ", ";\n }\n\n /* Checked */\n &[data-checked=\"true\"] {\n background-color: ", ";\n\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
240
+ return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
184
241
  }, function (props) {
185
- return props.theme.labelFontWeight;
242
+ return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
186
243
  }, function (props) {
187
- return props.disabled === true ? "not-allowed" : "pointer";
244
+ return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
188
245
  }, function (props) {
189
- return props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
246
+ return props.theme.thumbShift;
190
247
  }, function (props) {
191
- return props.labelPosition === "before" && "order: -1";
248
+ return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
192
249
  });
193
-
194
250
  var _default = DxcSwitch;
195
251
  exports["default"] = _default;