@dxc-technology/halstack-react 0.0.0-a7043e2 → 0.0.0-a799608

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 (75) hide show
  1. package/accordion/Accordion.js +122 -103
  2. package/accordion/Accordion.stories.tsx +1 -2
  3. package/accordion/Accordion.test.js +9 -10
  4. package/accordion/types.d.ts +4 -4
  5. package/accordion-group/AccordionGroup.js +1 -21
  6. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  7. package/accordion-group/AccordionGroup.test.js +20 -45
  8. package/accordion-group/types.d.ts +9 -3
  9. package/bulleted-list/types.d.ts +1 -1
  10. package/button/types.d.ts +1 -1
  11. package/chip/types.d.ts +1 -1
  12. package/common/variables.js +18 -7
  13. package/date-input/DateInput.js +3 -3
  14. package/dialog/Dialog.js +52 -28
  15. package/dialog/Dialog.stories.tsx +1 -2
  16. package/dialog/Dialog.test.js +34 -4
  17. package/dialog/types.d.ts +2 -2
  18. package/dropdown/Dropdown.d.ts +1 -1
  19. package/dropdown/Dropdown.js +242 -246
  20. package/dropdown/Dropdown.stories.tsx +126 -63
  21. package/dropdown/Dropdown.test.js +510 -108
  22. package/dropdown/DropdownMenu.d.ts +4 -0
  23. package/dropdown/DropdownMenu.js +80 -0
  24. package/dropdown/DropdownMenuItem.d.ts +4 -0
  25. package/dropdown/DropdownMenuItem.js +92 -0
  26. package/dropdown/types.d.ts +25 -5
  27. package/flex/Flex.js +1 -1
  28. package/flex/types.d.ts +1 -1
  29. package/footer/Footer.stories.tsx +8 -1
  30. package/footer/types.d.ts +1 -1
  31. package/header/Header.js +74 -72
  32. package/header/Header.stories.tsx +4 -4
  33. package/header/Icons.js +2 -2
  34. package/header/types.d.ts +2 -2
  35. package/layout/ApplicationLayout.js +3 -3
  36. package/layout/ApplicationLayout.stories.tsx +1 -0
  37. package/link/types.d.ts +1 -1
  38. package/package.json +9 -9
  39. package/progress-bar/ProgressBar.d.ts +2 -2
  40. package/progress-bar/ProgressBar.js +56 -50
  41. package/progress-bar/ProgressBar.stories.jsx +3 -1
  42. package/progress-bar/ProgressBar.test.js +67 -22
  43. package/progress-bar/types.d.ts +3 -4
  44. package/radio-group/RadioGroup.js +11 -13
  45. package/select/Listbox.d.ts +1 -1
  46. package/select/Listbox.js +25 -1
  47. package/select/Select.js +14 -31
  48. package/select/Select.stories.tsx +6 -5
  49. package/select/Select.test.js +63 -50
  50. package/select/types.d.ts +2 -4
  51. package/sidenav/types.d.ts +1 -1
  52. package/slider/Slider.js +112 -97
  53. package/slider/Slider.stories.tsx +7 -1
  54. package/slider/Slider.test.js +121 -21
  55. package/slider/types.d.ts +2 -2
  56. package/switch/Switch.d.ts +1 -1
  57. package/switch/Switch.js +110 -54
  58. package/switch/Switch.stories.tsx +8 -30
  59. package/switch/Switch.test.js +122 -8
  60. package/switch/types.d.ts +3 -4
  61. package/tabs/Tab.d.ts +4 -0
  62. package/tabs/Tab.js +135 -0
  63. package/tabs/Tabs.js +360 -104
  64. package/tabs/Tabs.stories.tsx +74 -0
  65. package/tabs/Tabs.test.js +217 -6
  66. package/tabs/types.d.ts +15 -5
  67. package/tabs-nav/NavTabs.js +5 -5
  68. package/tabs-nav/Tab.js +3 -5
  69. package/tabs-nav/types.d.ts +1 -1
  70. package/tag/types.d.ts +1 -1
  71. package/text-input/TextInput.js +12 -21
  72. package/text-input/TextInput.stories.tsx +1 -2
  73. package/text-input/types.d.ts +1 -1
  74. package/toggle-group/types.d.ts +1 -1
  75. package/wizard/types.d.ts +1 -1
@@ -6,19 +6,26 @@ 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");
22
29
  });
23
30
  test("Slider renders with correct initial value when it is uncontrolled", function () {
24
31
  var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
@@ -35,10 +42,37 @@ describe("Slider component tests", function () {
35
42
  expect(slider.getAttribute("aria-valuenow")).toBe("30");
36
43
  expect(input.value).toBe("30");
37
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();
71
+ });
38
72
  test("Calls correct function onChange in controlled slider", function () {
39
73
  var onChange = jest.fn();
40
74
 
41
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
75
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
42
76
  minValue: 0,
43
77
  maxValue: 100,
44
78
  onChange: onChange,
@@ -46,7 +80,7 @@ describe("Slider component tests", function () {
46
80
  value: 13,
47
81
  showInput: true
48
82
  })),
49
- getByRole = _render3.getByRole;
83
+ getByRole = _render4.getByRole;
50
84
 
51
85
  expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("13");
52
86
  expect(getByRole("textbox").value).toBe("13");
@@ -64,14 +98,14 @@ describe("Slider component tests", function () {
64
98
  test("Calls correct function onChange in uncontrolled slider", function () {
65
99
  var onChange = jest.fn();
66
100
 
67
- var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
101
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
68
102
  minValue: 0,
69
103
  maxValue: 100,
70
104
  onChange: onChange,
71
105
  showLimitsValues: true,
72
106
  showInput: true
73
107
  })),
74
- getByRole = _render4.getByRole;
108
+ getByRole = _render5.getByRole;
75
109
 
76
110
  (0, _react2.act)(function () {
77
111
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -84,10 +118,10 @@ describe("Slider component tests", function () {
84
118
  expect(getByRole("slider").getAttribute("aria-valuenow")).toBe("25");
85
119
  expect(getByRole("textbox").value).toBe("25");
86
120
  });
87
- test("Disabled slider have disabled input", function () {
121
+ test("Disabled slider have disabled input and slider", function () {
88
122
  var onChange = jest.fn();
89
123
 
90
- var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
124
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
91
125
  minValue: 0,
92
126
  maxValue: 100,
93
127
  onChange: onChange,
@@ -96,7 +130,7 @@ describe("Slider component tests", function () {
96
130
  showInput: true,
97
131
  value: 13
98
132
  })),
99
- getByRole = _render5.getByRole;
133
+ getByRole = _render6.getByRole;
100
134
 
101
135
  (0, _react2.act)(function () {
102
136
  _react2.fireEvent.change(getByRole("textbox"), {
@@ -107,33 +141,64 @@ describe("Slider component tests", function () {
107
141
  });
108
142
  expect(getByRole("textbox").hasAttribute("disabled")).toBeTruthy();
109
143
  expect(getByRole("textbox").value).toBe("13");
144
+ expect(getByRole("slider").hasAttribute("disabled")).toBeTruthy();
110
145
  });
111
- test("Calls correct function onDragEnd", function () {
146
+ test("Calls correct function onDragEnd when it is uncontrolled", function () {
112
147
  var onDragEnd = jest.fn();
113
148
 
114
- var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
149
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
115
150
  minValue: 0,
116
- maxValue: 100,
117
- showLimitsValues: true,
118
- showInput: true,
151
+ maxValue: 150,
119
152
  onDragEnd: onDragEnd,
120
- value: 25
153
+ showInput: true
121
154
  })),
122
- getByRole = _render6.getByRole;
155
+ getByRole = _render7.getByRole;
123
156
 
157
+ var slider = getByRole("slider");
158
+ (0, _react2.act)(function () {
159
+ _react2.fireEvent.mouseDown(slider);
160
+ });
124
161
  (0, _react2.act)(function () {
125
- _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();
126
172
 
127
- _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);
128
185
  });
129
- 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");
130
195
  });
131
196
  test("Calls correct function labelFormatCallback", function () {
132
197
  var labelFormatCallback = jest.fn(function (x) {
133
198
  return "".concat(x, "$");
134
199
  });
135
200
 
136
- var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
201
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
137
202
  minValue: 0,
138
203
  maxValue: 100,
139
204
  showLimitsValues: true,
@@ -141,10 +206,45 @@ describe("Slider component tests", function () {
141
206
  value: 25,
142
207
  labelFormatCallback: labelFormatCallback
143
208
  })),
144
- getByText = _render7.getByText;
209
+ getByText = _render9.getByText;
145
210
 
146
211
  expect(getByText("0$")).toBeTruthy();
147
212
  expect(getByText("100$")).toBeTruthy();
148
213
  expect(labelFormatCallback).toHaveBeenCalledTimes(2);
149
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
+ });
150
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;
@@ -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;
@@ -1,5 +1,4 @@
1
1
  import React from "react";
2
- import { userEvent, within } from "@storybook/testing-library";
3
2
  import DxcSwitch from "./Switch";
4
3
  import { BackgroundColorProvider } from "../BackgroundColorContext";
5
4
  import Title from "../../.storybook/components/Title";
@@ -21,6 +20,10 @@ export const Chromatic = () => (
21
20
  <Title title="Without label" theme="light" level={4} />
22
21
  <DxcSwitch />
23
22
  </ExampleContainer>
23
+ <ExampleContainer pseudoState="pseudo-focus-visible">
24
+ <Title title="Focused" theme="light" level={4} />
25
+ <DxcSwitch label="Switch" labelPosition="after" />
26
+ </ExampleContainer>
24
27
  <ExampleContainer>
25
28
  <Title title="Checked" theme="light" level={4} />
26
29
  <DxcSwitch label="Switch" defaultChecked />
@@ -47,6 +50,10 @@ export const Chromatic = () => (
47
50
  <Title title="With label" theme="dark" level={4} />
48
51
  <DxcSwitch label="Switch" />
49
52
  </ExampleContainer>
53
+ <ExampleContainer pseudoState="pseudo-focus-visible">
54
+ <Title title="Focused" theme="dark" level={4} />
55
+ <DxcSwitch label="Switch" labelPosition="after" />
56
+ </ExampleContainer>
50
57
  <ExampleContainer>
51
58
  <Title title="Checked" theme="dark" level={4} />
52
59
  <DxcSwitch label="Switch" defaultChecked />
@@ -129,32 +136,3 @@ export const Chromatic = () => (
129
136
  </ExampleContainer>
130
137
  </>
131
138
  );
132
-
133
- const Switch = () => (
134
- <ExampleContainer>
135
- <Title title="Focused" theme="light" level={4} />
136
- <DxcSwitch label="Switch" />
137
- </ExampleContainer>
138
- );
139
- export const FocusedSwitch = Switch.bind({});
140
- FocusedSwitch.play = async ({ canvasElement }) => {
141
- const canvas = within(canvasElement);
142
- canvas.getByRole("switch").focus();
143
- };
144
-
145
- const DarkSwitch = () => (
146
- <BackgroundColorProvider color="#333333">
147
- <DarkContainer>
148
- <ExampleContainer>
149
- <Title title="Focused" theme="dark" level={4} />
150
- <DxcSwitch label="Switch" />
151
- </ExampleContainer>
152
- </DarkContainer>
153
- </BackgroundColorProvider>
154
- );
155
-
156
- export const FocusedSwitchOnDark = DarkSwitch.bind({});
157
- FocusedSwitchOnDark.play = async ({ canvasElement }) => {
158
- const canvas = within(canvasElement);
159
- canvas.getByRole("switch").focus();
160
- };