@dxc-technology/halstack-react 6.1.0 → 6.2.1

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 (44) 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 +3 -3
  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 +8 -2
  9. package/alert/Alert.js +1 -1
  10. package/box/Box.js +1 -1
  11. package/checkbox/Checkbox.js +87 -95
  12. package/checkbox/Checkbox.test.js +93 -16
  13. package/checkbox/types.d.ts +2 -2
  14. package/common/variables.js +8 -4
  15. package/dropdown/Dropdown.js +3 -3
  16. package/dropdown/Dropdown.test.js +1 -1
  17. package/dropdown/DropdownMenuItem.js +1 -1
  18. package/footer/Footer.stories.tsx +8 -1
  19. package/header/Header.stories.tsx +4 -4
  20. package/layout/ApplicationLayout.stories.tsx +1 -0
  21. package/package.json +8 -8
  22. package/select/Listbox.js +0 -1
  23. package/slider/Slider.js +112 -91
  24. package/slider/Slider.stories.tsx +7 -1
  25. package/slider/Slider.test.js +87 -24
  26. package/slider/types.d.ts +2 -2
  27. package/switch/Switch.js +1 -1
  28. package/tabs/Tab.d.ts +4 -0
  29. package/tabs/Tab.js +135 -0
  30. package/tabs/Tabs.js +360 -104
  31. package/tabs/Tabs.stories.tsx +74 -0
  32. package/tabs/Tabs.test.js +217 -6
  33. package/tabs/types.d.ts +14 -4
  34. package/tabs-nav/Tab.js +1 -1
  35. package/tag/Tag.js +1 -1
  36. package/text-input/Icons.d.ts +8 -0
  37. package/text-input/Icons.js +60 -0
  38. package/text-input/Suggestion.js +7 -5
  39. package/text-input/Suggestions.d.ts +4 -0
  40. package/text-input/Suggestions.js +134 -0
  41. package/text-input/TextInput.js +103 -201
  42. package/text-input/TextInput.stories.tsx +189 -181
  43. package/text-input/TextInput.test.js +163 -162
  44. package/text-input/types.d.ts +16 -2
package/box/Box.js CHANGED
@@ -60,7 +60,7 @@ var sizes = {
60
60
  medium: "240px",
61
61
  large: "480px",
62
62
  fillParent: "100%",
63
- fitContent: "unset"
63
+ fitContent: "fit-content"
64
64
  };
65
65
 
66
66
  var calculateWidth = function calculateWidth(margin, size, padding) {
@@ -19,8 +19,6 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
23
-
24
22
  var _variables = require("../common/variables.js");
25
23
 
26
24
  var _utils = require("../common/utils.js");
@@ -33,12 +31,21 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
33
31
 
34
32
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
35
33
 
36
- var _templateObject, _templateObject2, _templateObject3;
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
 
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
 
40
+ var checkedIcon = /*#__PURE__*/_react["default"].createElement("svg", {
41
+ fill: "currentColor",
42
+ focusable: "false",
43
+ "aria-hidden": "true",
44
+ viewBox: "0 0 24 24"
45
+ }, /*#__PURE__*/_react["default"].createElement("path", {
46
+ d: "M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
47
+ }));
48
+
42
49
  var DxcCheckbox = function DxcCheckbox(_ref) {
43
50
  var checked = _ref.checked,
44
51
  _ref$defaultChecked = _ref.defaultChecked,
@@ -61,88 +68,77 @@ var DxcCheckbox = function DxcCheckbox(_ref) {
61
68
  _ref$tabIndex = _ref.tabIndex,
62
69
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
63
70
 
64
- var _useState = (0, _react.useState)("checkbox-".concat((0, _uuid.v4)())),
71
+ var _useState = (0, _react.useState)("label-checkbox-".concat((0, _uuid.v4)())),
65
72
  _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
66
- switchId = _useState2[0];
67
-
68
- var labelId = "label-".concat(switchId);
73
+ labelId = _useState2[0];
69
74
 
70
75
  var _useState3 = (0, _react.useState)(defaultChecked),
71
76
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
72
77
  innerChecked = _useState4[0],
73
78
  setInnerChecked = _useState4[1];
74
79
 
75
- var _useState5 = (0, _react.useState)(false),
76
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
77
- isLabelHovered = _useState6[0],
78
- setIsLabelHovered = _useState6[1];
79
-
80
+ var checkboxRef = (0, _react.useRef)(null);
80
81
  var colorsTheme = (0, _useTheme["default"])();
81
82
  var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
82
83
  var translatedLabels = (0, _useTranslatedLabels["default"])();
83
84
 
84
- var handlerCheckboxChange = function handlerCheckboxChange(checkboxValue) {
85
- if (checked === undefined) {
86
- var isChecked = checkboxValue.target.checked === undefined ? !innerChecked : checkboxValue.target.checked;
87
- setInnerChecked(isChecked);
88
-
89
- if (typeof onChange === "function") {
90
- onChange(isChecked);
91
- }
92
- } else {
93
- if (typeof onChange === "function") {
94
- onChange(!checked);
95
- }
96
- }
97
- };
85
+ var handleCheckboxChange = function handleCheckboxChange() {
86
+ var _checkboxRef$current;
98
87
 
99
- var handleLabelHover = function handleLabelHover() {
100
- setIsLabelHovered(!isLabelHovered);
88
+ document.activeElement !== (checkboxRef === null || checkboxRef === void 0 ? void 0 : checkboxRef.current) && (checkboxRef === null || checkboxRef === void 0 ? void 0 : (_checkboxRef$current = checkboxRef.current) === null || _checkboxRef$current === void 0 ? void 0 : _checkboxRef$current.focus());
89
+ var newChecked = checked !== null && checked !== void 0 ? checked : innerChecked;
90
+ checked !== null && checked !== void 0 ? checked : setInnerChecked(function (innerChecked) {
91
+ return !innerChecked;
92
+ });
93
+ onChange === null || onChange === void 0 ? void 0 : onChange(!newChecked);
101
94
  };
102
95
 
103
- var labelComponent = /*#__PURE__*/_react["default"].createElement(LabelContainer, {
104
- id: labelId,
105
- labelPosition: labelPosition,
106
- onClick: disabled === true ? function () {} : handlerCheckboxChange,
107
- disabled: disabled,
108
- className: "labelContainer",
109
- backgroundType: backgroundType,
110
- onMouseOver: handleLabelHover,
111
- onMouseOut: handleLabelHover
112
- }, 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, "(Optional)"), " ", label));
96
+ var handleKeyboard = function handleKeyboard(event) {
97
+ switch (event.key) {
98
+ case " ":
99
+ event.preventDefault();
100
+ handleCheckboxChange();
101
+ }
102
+ };
113
103
 
114
104
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
115
105
  theme: colorsTheme.checkbox
116
- }, /*#__PURE__*/_react["default"].createElement(CheckboxContainer, {
117
- id: name,
118
- brightness: _variables.componentTokens,
119
- label: label,
120
- labelPosition: labelPosition,
106
+ }, /*#__PURE__*/_react["default"].createElement(MainContainer, {
121
107
  disabled: disabled,
108
+ onClick: disabled ? undefined : handleCheckboxChange,
122
109
  margin: margin,
123
110
  size: size,
124
- backgroundType: backgroundType,
125
- isLabelHovered: isLabelHovered
126
- }, label && labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
127
111
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
128
- inputProps: {
129
- name: name,
130
- "aria-labelledby": labelId,
131
- role: "checkbox",
132
- "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked
133
- },
134
- onChange: handlerCheckboxChange,
135
- value: value,
112
+ backgroundType: backgroundType
113
+ }, label && labelPosition === "before" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
114
+ id: labelId,
136
115
  disabled: disabled,
137
- disableRipple: true,
138
- className: "test",
139
- tabIndex: tabIndex
140
- }), /*#__PURE__*/_react["default"].createElement(CheckboxBlackBack, {
141
- labelPosition: labelPosition,
116
+ backgroundType: backgroundType
117
+ }, label, optional && " ".concat(translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
118
+ type: "checkbox",
119
+ checked: checked !== null && checked !== void 0 ? checked : innerChecked,
120
+ name: name,
121
+ "aria-hidden": "true",
122
+ value: value,
142
123
  disabled: disabled,
124
+ readOnly: true
125
+ }), /*#__PURE__*/_react["default"].createElement(CheckboxContainer, null, /*#__PURE__*/_react["default"].createElement(Checkbox, {
126
+ onKeyDown: handleKeyboard,
127
+ role: "checkbox",
128
+ tabIndex: disabled ? -1 : tabIndex,
129
+ "aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
130
+ "aria-disabled": disabled,
131
+ "aria-required": !disabled && !optional,
132
+ "aria-labelledby": labelId,
133
+ backgroundType: backgroundType,
143
134
  checked: checked !== null && checked !== void 0 ? checked : innerChecked,
135
+ disabled: disabled,
136
+ ref: checkboxRef
137
+ }, (checked !== null && checked !== void 0 ? checked : innerChecked) && checkedIcon)), label && labelPosition === "after" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
138
+ id: labelId,
139
+ disabled: disabled,
144
140
  backgroundType: backgroundType
145
- }), label && labelPosition === "after" && labelComponent));
141
+ }, optional && "".concat(translatedLabels.formFields.optionalLabel, " "), label)));
146
142
  };
147
143
 
148
144
  var sizes = {
@@ -150,7 +146,7 @@ var sizes = {
150
146
  medium: "240px",
151
147
  large: "480px",
152
148
  fillParent: "100%",
153
- fitContent: "unset"
149
+ fitContent: "fit-content"
154
150
  };
155
151
 
156
152
  var calculateWidth = function calculateWidth(margin, size) {
@@ -185,15 +181,21 @@ var getNotDisabledColor = function getNotDisabledColor(props, element) {
185
181
  case "background":
186
182
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.backgroundColorCheckedOnDark : props.theme.backgroundColorChecked;
187
183
 
184
+ case "hoverBackground":
185
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
186
+
188
187
  case "border":
189
188
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.borderColorOnDark : props.theme.borderColor;
190
189
 
190
+ case "hoverBorder":
191
+ return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
192
+
191
193
  case "label":
192
194
  return props.backgroundType && props.backgroundType === "dark" ? props.theme.fontColorOnDark : props.theme.fontColor;
193
195
  }
194
196
  };
195
197
 
196
- var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n cursor: ", ";\n"])), function (props) {
198
+ var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n"])), function (props) {
197
199
  return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
198
200
  }, function (props) {
199
201
  return props.theme.fontFamily;
@@ -201,11 +203,27 @@ var LabelContainer = _styledComponents["default"].span(_templateObject || (_temp
201
203
  return props.theme.fontSize;
202
204
  }, function (props) {
203
205
  return props.theme.fontWeight;
206
+ });
207
+
208
+ var ValueInput = _styledComponents["default"].input(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
209
+
210
+ var CheckboxContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n width: 24px;\n"])));
211
+
212
+ var Checkbox = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n width: 18px;\n border: solid 2px\n ", ";\n border-radius: 2px;\n background-color: ", ";\n color: ", ";\n\n &:focus {\n outline: 2px solid\n ", ";\n outline-offset: 2px;\n }\n svg {\n position: absolute;\n width: 22px;\n height: 22px;\n }\n ", "\n"])), function (props) {
213
+ return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "border");
204
214
  }, function (props) {
205
- return props.disabled ? "not-allowed" : "pointer";
215
+ return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
216
+ }, function (props) {
217
+ return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
218
+ }, function (props) {
219
+ return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
220
+ }, function (props) {
221
+ return props.disabled && "pointer-events: none;";
206
222
  });
207
223
 
208
- var CheckboxContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n width: ", ";\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n position: relative;\n .MuiCheckbox-colorSecondary {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n &.Mui-disabled {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n opacity: 0.34;\n }\n }\n }\n &.Mui-checked {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n\n &:hover {\n background-color: transparent;\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n background-color: transparent;\n color: ", ";\n }\n }\n }\n }\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n width: 24px;\n height: 24px;\n }\n }\n }\n\n .MuiIconButton-colorSecondary {\n &:hover {\n background-color: transparent;\n }\n }\n .MuiButtonBase-root {\n &:hover {\n .MuiIconButton-label {\n & > .MuiSvgIcon-root {\n color: ", ";\n }\n }\n }\n\n &.Mui-focusVisible {\n .MuiIconButton-label {\n border-radius: 2px;\n outline: 2px solid\n ", ";\n outline-offset: -1px;\n }\n }\n z-index: 1;\n margin-left: ", ";\n margin-right: ", ";\n padding: 0px;\n left: ", ";\n right: ", ";\n }\n"])), function (props) {
224
+ var MainContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n gap: ", ";\n\n &:hover ", " {\n border: 2px solid\n ", ";\n background-color: ", ";\n color: ", ";\n }\n"])), function (props) {
225
+ return calculateWidth(props.margin, props.size);
226
+ }, function (props) {
209
227
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
210
228
  }, function (props) {
211
229
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
@@ -215,42 +233,16 @@ var CheckboxContainer = _styledComponents["default"].span(_templateObject2 || (_
215
233
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
216
234
  }, function (props) {
217
235
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
218
- }, function (props) {
219
- return calculateWidth(props.margin, props.size);
220
236
  }, function (props) {
221
237
  return props.disabled ? "not-allowed" : "pointer";
222
238
  }, function (props) {
223
- return props.isLabelHovered ? props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor : getNotDisabledColor(props, "border");
224
- }, function (props) {
225
- return getDisabledColor(props, "border");
226
- }, function (props) {
227
- return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
228
- }, function (props) {
229
- return props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
230
- }, function (props) {
231
- return props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
232
- }, function (props) {
233
- return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
234
- }, function (props) {
235
- return props.labelPosition === "before" && props.label ? props.theme.checkLabelSpacing : "0";
236
- }, function (props) {
237
- return props.labelPosition === "after" && props.label ? props.theme.checkLabelSpacing : "0";
238
- }, function (props) {
239
- return props.labelPosition === "before" ? "unset" : "1px";
240
- }, function (props) {
241
- return props.labelPosition === "before" ? "1px" : "unset";
242
- });
243
-
244
- var CheckboxBlackBack = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n width: 16px;\n height: 16px;\n position: absolute;\n left: ", ";\n right: ", ";\n z-index: 0;\n margin-left: ", ";\n margin-right: ", ";\n"])), function (props) {
245
- return !props.checked ? "transparent" : props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check");
246
- }, function (props) {
247
- return props.labelPosition === "before" ? "unset" : "5px";
248
- }, function (props) {
249
- return props.labelPosition === "before" ? "5px" : "unset";
239
+ return props.theme.checkLabelSpacing;
240
+ }, Checkbox, function (props) {
241
+ return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "hoverBorder");
250
242
  }, function (props) {
251
- return props.labelPosition === "after" ? "0px" : "";
243
+ return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
252
244
  }, function (props) {
253
- return props.labelPosition === "before" ? "0px" : "";
245
+ return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "hoverBackground");
254
246
  });
255
247
 
256
248
  var _default = DxcCheckbox;
@@ -6,25 +6,39 @@ 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 _Checkbox = _interopRequireDefault(require("./Checkbox"));
10
12
 
11
13
  describe("Checkbox component tests", function () {
12
- test("Checkbox renders with correct text", function () {
14
+ test("Checkbox renders with correct aria-labelledby and aria-required", function () {
13
15
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
14
16
  label: "Checkbox"
15
17
  })),
16
- getByText = _render.getByText;
18
+ getByText = _render.getByText,
19
+ getByRole = _render.getByRole;
17
20
 
18
- expect(getByText("Checkbox")).toBeTruthy();
21
+ var labelId = getByText("Checkbox").getAttribute("id");
22
+ expect(getByRole("checkbox").getAttribute("aria-labelledby")).toBe(labelId);
23
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("true");
24
+ });
25
+ test("Optional checkbox renders with correct aria-required", function () {
26
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
27
+ label: "Checkbox",
28
+ optional: true
29
+ })),
30
+ getByRole = _render2.getByRole;
31
+
32
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("false");
19
33
  });
20
34
  test("Calls correct function on click", function () {
21
35
  var onChange = jest.fn();
22
36
 
23
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
37
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
24
38
  label: "Checkbox",
25
39
  onChange: onChange
26
40
  })),
27
- getByText = _render2.getByText;
41
+ getByText = _render3.getByText;
28
42
 
29
43
  _react2.fireEvent.click(getByText("Checkbox"));
30
44
 
@@ -34,45 +48,108 @@ describe("Checkbox component tests", function () {
34
48
  var onChange = jest.fn();
35
49
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
36
50
  label: "Checkbox",
37
- onChange: onChange
51
+ onChange: onChange,
52
+ name: "test"
38
53
  }));
39
54
  var visibleCheckbox = component.getByText("Checkbox");
40
55
  var input = component.getByRole("checkbox");
41
- expect(input.checked).toBe(false);
56
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
57
+ expect(input.getAttribute("aria-checked")).toBe("false");
58
+ expect(submitInput.checked).toBe(false);
42
59
 
43
60
  _react2.fireEvent.click(visibleCheckbox);
44
61
 
45
62
  expect(onChange).toHaveBeenCalled();
46
63
  expect(onChange).toHaveBeenCalledWith(true);
47
- expect(input.checked).toBe(true);
64
+ expect(input.getAttribute("aria-checked")).toBe("true");
65
+ expect(submitInput.checked).toBe(true);
48
66
  });
49
67
  test("Controlled checkbox", function () {
50
68
  var onChange = jest.fn();
51
69
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
52
70
  label: "Checkbox",
53
71
  checked: false,
54
- onChange: onChange
72
+ onChange: onChange,
73
+ name: "test"
55
74
  }));
56
75
  var input = component.getByRole("checkbox");
57
76
  var visibleCheckbox = component.getByText("Checkbox");
77
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
58
78
 
59
79
  _react2.fireEvent.click(visibleCheckbox);
60
80
 
61
81
  expect(onChange).toHaveBeenCalled();
62
82
  expect(onChange).toHaveBeenCalledWith(true);
63
- expect(input.checked).toBe(false);
83
+ expect(input.getAttribute("aria-checked")).toBe("false");
84
+ expect(submitInput.checked).toBe(false);
64
85
  });
65
86
  test("Renders with correct initial value and initial state when it is uncontrolled", function () {
66
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
87
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
67
88
  label: "Default label",
68
89
  defaultChecked: true,
69
- value: "test-defaultChecked"
90
+ value: "test-defaultChecked",
91
+ name: "test"
92
+ })),
93
+ getByRole = _render4.getByRole,
94
+ container = _render4.container;
95
+
96
+ var checkbox = getByRole("checkbox");
97
+ var submitInput = container.querySelector("input[name=\"test\"]");
98
+ expect(submitInput.value).toBe("test-defaultChecked");
99
+ expect(checkbox.getAttribute("aria-checked")).toBe("true");
100
+ expect(submitInput.checked).toBe(true);
101
+ });
102
+ test("Test disable keyboard and mouse interactions", function () {
103
+ var onChange = jest.fn();
104
+
105
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
106
+ label: "Checkbox",
107
+ onChange: onChange,
108
+ disabled: true,
109
+ name: "test"
70
110
  })),
71
- getByRole = _render3.getByRole;
111
+ getByRole = _render5.getByRole,
112
+ getByText = _render5.getByText,
113
+ container = _render5.container;
72
114
 
73
115
  var input = getByRole("checkbox");
74
- expect(input.checked).toBe(true);
75
- expect(input.value).toBe("test-defaultChecked");
76
- expect(input.getAttribute("aria-checked")).toBe("true");
116
+ var visibleCheckbox = getByText("Checkbox");
117
+ var submitInput = container.querySelector("input[name=\"test\"]");
118
+
119
+ _react2.fireEvent.click(visibleCheckbox);
120
+
121
+ expect(onChange).toHaveBeenCalledTimes(0);
122
+ expect(input.getAttribute("aria-checked")).toBe("false");
123
+ expect(input.getAttribute("aria-disabled")).toBe("true");
124
+ expect(submitInput.checked).toBe(false);
125
+
126
+ _userEvent["default"].tab();
127
+
128
+ expect(document.activeElement === input).toBeFalsy();
129
+ });
130
+ test("Test keyboard interactions", function () {
131
+ var onChange = jest.fn();
132
+
133
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
134
+ label: "Checkbox",
135
+ name: "test",
136
+ onChange: onChange
137
+ })),
138
+ getByRole = _render6.getByRole;
139
+
140
+ var checkbox = getByRole("checkbox");
141
+
142
+ _userEvent["default"].tab();
143
+
144
+ expect(document.activeElement === checkbox).toBeTruthy();
145
+
146
+ _react2.fireEvent.keyDown(checkbox, {
147
+ key: " ",
148
+ code: "Space",
149
+ keyCode: 32,
150
+ charCode: 32
151
+ });
152
+
153
+ expect(onChange).toHaveBeenCalledWith(true);
77
154
  });
78
155
  });
@@ -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;
@@ -179,13 +179,13 @@ var componentTokens = {
179
179
  titleLabelFontStyle: globalTokens.type_normal,
180
180
  titleLabelFontColor: globalTokens.hal_black,
181
181
  disabledTitleLabelFontColor: globalTokens.hal_grey_l_60,
182
- titleLabelPaddingLeft: "0px",
183
- titleLabelPaddingRight: "16px",
184
182
  titleLabelPaddingTop: "0px",
185
183
  titleLabelPaddingBottom: "0px",
184
+ titleLabelPaddingLeft: "0px",
185
+ titleLabelPaddingRight: "16px",
186
+ focusBorderColor: globalTokens.hal_blue_l_50,
186
187
  focusBorderStyle: "solid",
187
188
  focusBorderThickness: "2px",
188
- focusBorderColor: globalTokens.hal_blue_l_50,
189
189
  borderRadius: "4px",
190
190
  boxShadowOffsetX: "0px",
191
191
  boxShadowOffsetY: "6px",
@@ -354,7 +354,7 @@ var componentTokens = {
354
354
  backgroundColorChecked: globalTokens.hal_blue_s_35,
355
355
  backgroundColorCheckedOnDark: globalTokens.hal_grey_l_90,
356
356
  hoverBackgroundColorChecked: globalTokens.hal_blue_d_20,
357
- hoverBackgroundColorCheckedOnDark: global.hal_white,
357
+ hoverBackgroundColorCheckedOnDark: globalTokens.hal_white,
358
358
  disabledBackgroundColorChecked: globalTokens.hal_grey_l_60,
359
359
  disabledBackgroundColorCheckedOnDark: globalTokens.color_grey_800,
360
360
  borderColor: globalTokens.hal_blue_s_35,
@@ -1486,6 +1486,10 @@ var defaultTranslatedComponentLabels = {
1486
1486
  actionClearSelectionTitle: "Clear selection",
1487
1487
  actionClearSearchTitle: "Clear search"
1488
1488
  },
1489
+ tabs: {
1490
+ scrollLeft: "Scroll left",
1491
+ scrollRight: "Scroll right"
1492
+ },
1489
1493
  textInput: {
1490
1494
  clearFieldActionTitle: "Clear field",
1491
1495
  searchingMessage: "Searching...",
@@ -146,7 +146,7 @@ var DxcDropdown = function DxcDropdown(_ref) {
146
146
  handleOnOpenMenu();
147
147
  break;
148
148
 
149
- case "Space":
149
+ case " ":
150
150
  case "Down":
151
151
  case "ArrowDown":
152
152
  case "Enter":
@@ -186,7 +186,7 @@ var DxcDropdown = function DxcDropdown(_ref) {
186
186
  setNextIndexFocus();
187
187
  break;
188
188
 
189
- case "Space":
189
+ case " ":
190
190
  case "Enter":
191
191
  event.preventDefault();
192
192
  handleMenuItemOnClick(options[visualFocusIndex].value);
@@ -302,7 +302,7 @@ var sizes = {
302
302
  medium: "240px",
303
303
  large: "480px",
304
304
  fillParent: "100%",
305
- fitContent: "unset"
305
+ fitContent: "fit-content"
306
306
  };
307
307
 
308
308
  var calculateWidth = function calculateWidth(margin, size) {
@@ -267,7 +267,7 @@ describe("Dropdown component tests", function () {
267
267
  var dropdown = getByRole("button");
268
268
 
269
269
  _react2.fireEvent.keyDown(dropdown, {
270
- key: "Space",
270
+ key: " ",
271
271
  code: "Space",
272
272
  keyCode: 32,
273
273
  charCode: 32
@@ -49,7 +49,7 @@ var DropdownMenuItem = function DropdownMenuItem(_ref) {
49
49
  }) : option.icon), iconPosition === "before" && /*#__PURE__*/_react["default"].createElement(DropdownMenuItemLabel, null, option.label)));
50
50
  };
51
51
 
52
- var DropdownMenuItemContainer = _styledComponents["default"].li(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: ", ";\n min-height: 36px;\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n cursor: pointer;\n\n ", "\n :hover {\n background-color: ", ";\n }\n :active {\n background-color: ", ";\n }\n"])), function (props) {
52
+ var DropdownMenuItemContainer = _styledComponents["default"].li(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: ", ";\n min-height: 36px;\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n cursor: pointer;\n\n ", "\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (props) {
53
53
  return props.theme.optionIconSpacing;
54
54
  }, function (props) {
55
55
  return props.theme.optionPaddingTop;
@@ -28,7 +28,14 @@ const social = [
28
28
  },
29
29
  {
30
30
  href: "https://twitter.com/dxctechnology",
31
- logo: "http://assets.stickpng.com/images/580b57fcd9996e24bc43c53e.png",
31
+ logo: (
32
+ <svg viewBox="0 0 248 204" fill="currentColor">
33
+ <path
34
+ fill="#1d9bf0"
35
+ d="M221.95 51.29c.15 2.17.15 4.34.15 6.53 0 66.73-50.8 143.69-143.69 143.69v-.04c-27.44.04-54.31-7.82-77.41-22.64 3.99.48 8 .72 12.02.73 22.74.02 44.83-7.61 62.72-21.66-21.61-.41-40.56-14.5-47.18-35.07 7.57 1.46 15.37 1.16 22.8-.87-23.56-4.76-40.51-25.46-40.51-49.5v-.64c7.02 3.91 14.88 6.08 22.92 6.32C11.58 63.31 4.74 33.79 18.14 10.71c25.64 31.55 63.47 50.73 104.08 52.76-4.07-17.54 1.49-35.92 14.61-48.25 20.34-19.12 52.33-18.14 71.45 2.19 11.31-2.23 22.15-6.38 32.07-12.26-3.77 11.69-11.66 21.62-22.2 27.93 10.01-1.18 19.79-3.86 29-7.95-6.78 10.16-15.32 19.01-25.2 26.16z"
36
+ />
37
+ </svg>
38
+ ),
32
39
  },
33
40
  {
34
41
  href: "https://www.facebook.com/DXCTechnology/",
@@ -131,7 +131,7 @@ ResponsiveHeader.parameters = {
131
131
  viewport: {
132
132
  defaultViewport: "iphonex",
133
133
  },
134
- chromatic: { viewports: [720] },
134
+ chromatic: { viewports: [375] },
135
135
  };
136
136
 
137
137
  export const ResponsiveHeaderFocus = RespHeaderFocus.bind({});
@@ -139,7 +139,7 @@ ResponsiveHeaderFocus.parameters = {
139
139
  viewport: {
140
140
  defaultViewport: "iphonex",
141
141
  },
142
- chromatic: { viewports: [720] },
142
+ chromatic: { viewports: [375] },
143
143
  };
144
144
  ResponsiveHeaderFocus.play = async ({ canvasElement }) => {
145
145
  const canvas = within(canvasElement);
@@ -151,7 +151,7 @@ ResponsiveHeaderHover.parameters = {
151
151
  viewport: {
152
152
  defaultViewport: "iphonex",
153
153
  },
154
- chromatic: { viewports: [720] },
154
+ chromatic: { viewports: [375] },
155
155
  };
156
156
  ResponsiveHeaderHover.play = async ({ canvasElement }) => {
157
157
  const canvas = within(canvasElement);
@@ -163,7 +163,7 @@ ResponsiveHeaderMenu.parameters = {
163
163
  viewport: {
164
164
  defaultViewport: "iphonex",
165
165
  },
166
- chromatic: { viewports: [720] },
166
+ chromatic: { viewports: [375] },
167
167
  };
168
168
  ResponsiveHeaderMenu.play = async ({ canvasElement }) => {
169
169
  const canvas = within(canvasElement);
@@ -94,6 +94,7 @@ ApplicationLayoutWithResponsiveSidenav.parameters = {
94
94
  viewport: {
95
95
  defaultViewport: "pixel",
96
96
  },
97
+ chromatic: { viewports: [540] },
97
98
  };
98
99
 
99
100
  export const ApplicationLayoutWithCustomHeader = () => (