@dxc-technology/halstack-react 6.1.0 → 6.2.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.
- package/accordion/Accordion.js +122 -103
- package/accordion/Accordion.stories.tsx +1 -2
- package/accordion/Accordion.test.js +9 -10
- package/accordion/types.d.ts +3 -3
- package/accordion-group/AccordionGroup.js +1 -21
- package/accordion-group/AccordionGroup.stories.tsx +27 -1
- package/accordion-group/AccordionGroup.test.js +20 -45
- package/accordion-group/types.d.ts +8 -2
- package/alert/Alert.js +1 -1
- package/box/Box.js +1 -1
- package/checkbox/Checkbox.js +88 -95
- package/checkbox/Checkbox.test.js +93 -16
- package/checkbox/types.d.ts +2 -2
- package/common/variables.js +8 -4
- package/dropdown/Dropdown.js +1 -1
- package/footer/Footer.stories.tsx +8 -1
- package/header/Header.stories.tsx +4 -4
- package/layout/ApplicationLayout.stories.tsx +1 -0
- package/package.json +8 -8
- package/select/Listbox.js +0 -1
- package/slider/Slider.js +112 -91
- package/slider/Slider.stories.tsx +7 -1
- package/slider/Slider.test.js +87 -24
- package/slider/types.d.ts +2 -2
- package/switch/Switch.js +1 -1
- package/tabs/Tab.d.ts +4 -0
- package/tabs/Tab.js +135 -0
- package/tabs/Tabs.js +360 -104
- package/tabs/Tabs.stories.tsx +74 -0
- package/tabs/Tabs.test.js +217 -6
- package/tabs/types.d.ts +14 -4
- package/tag/Tag.js +1 -1
- package/text-input/Icons.d.ts +8 -0
- package/text-input/Icons.js +60 -0
- package/text-input/Suggestion.js +7 -5
- package/text-input/Suggestions.d.ts +4 -0
- package/text-input/Suggestions.js +134 -0
- package/text-input/TextInput.js +103 -201
- package/text-input/TextInput.stories.tsx +189 -181
- package/text-input/TextInput.test.js +163 -162
- package/text-input/types.d.ts +16 -2
package/box/Box.js
CHANGED
package/checkbox/Checkbox.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 _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,78 @@ 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
|
-
|
|
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
|
|
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
|
|
85
|
-
|
|
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
|
-
|
|
100
|
-
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
+
case "Space":
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
handleCheckboxChange();
|
|
102
|
+
}
|
|
103
|
+
};
|
|
113
104
|
|
|
114
105
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
|
|
115
106
|
theme: colorsTheme.checkbox
|
|
116
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
117
|
-
id: name,
|
|
118
|
-
brightness: _variables.componentTokens,
|
|
119
|
-
label: label,
|
|
120
|
-
labelPosition: labelPosition,
|
|
107
|
+
}, /*#__PURE__*/_react["default"].createElement(MainContainer, {
|
|
121
108
|
disabled: disabled,
|
|
109
|
+
onClick: disabled ? undefined : handleCheckboxChange,
|
|
122
110
|
margin: margin,
|
|
123
111
|
size: size,
|
|
124
|
-
backgroundType: backgroundType,
|
|
125
|
-
isLabelHovered: isLabelHovered
|
|
126
|
-
}, label && labelPosition === "before" && labelComponent, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
127
112
|
checked: checked !== null && checked !== void 0 ? checked : innerChecked,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
role: "checkbox",
|
|
132
|
-
"aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked
|
|
133
|
-
},
|
|
134
|
-
onChange: handlerCheckboxChange,
|
|
135
|
-
value: value,
|
|
113
|
+
backgroundType: backgroundType
|
|
114
|
+
}, label && labelPosition === "before" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
|
|
115
|
+
id: labelId,
|
|
136
116
|
disabled: disabled,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
117
|
+
backgroundType: backgroundType
|
|
118
|
+
}, label, optional && " ".concat(translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(ValueInput, {
|
|
119
|
+
type: "checkbox",
|
|
120
|
+
checked: checked !== null && checked !== void 0 ? checked : innerChecked,
|
|
121
|
+
name: name,
|
|
122
|
+
"aria-hidden": "true",
|
|
123
|
+
value: value,
|
|
142
124
|
disabled: disabled,
|
|
125
|
+
readOnly: true
|
|
126
|
+
}), /*#__PURE__*/_react["default"].createElement(CheckboxContainer, null, /*#__PURE__*/_react["default"].createElement(Checkbox, {
|
|
127
|
+
onKeyDown: handleKeyboard,
|
|
128
|
+
role: "checkbox",
|
|
129
|
+
tabIndex: disabled ? -1 : tabIndex,
|
|
130
|
+
"aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
|
|
131
|
+
"aria-disabled": disabled,
|
|
132
|
+
"aria-required": !disabled && !optional,
|
|
133
|
+
"aria-labelledby": labelId,
|
|
134
|
+
backgroundType: backgroundType,
|
|
143
135
|
checked: checked !== null && checked !== void 0 ? checked : innerChecked,
|
|
136
|
+
disabled: disabled,
|
|
137
|
+
ref: checkboxRef
|
|
138
|
+
}, (checked !== null && checked !== void 0 ? checked : innerChecked) && checkedIcon)), label && labelPosition === "after" && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
|
|
139
|
+
id: labelId,
|
|
140
|
+
disabled: disabled,
|
|
144
141
|
backgroundType: backgroundType
|
|
145
|
-
}
|
|
142
|
+
}, optional && "".concat(translatedLabels.formFields.optionalLabel, " "), label)));
|
|
146
143
|
};
|
|
147
144
|
|
|
148
145
|
var sizes = {
|
|
@@ -150,7 +147,7 @@ var sizes = {
|
|
|
150
147
|
medium: "240px",
|
|
151
148
|
large: "480px",
|
|
152
149
|
fillParent: "100%",
|
|
153
|
-
fitContent: "
|
|
150
|
+
fitContent: "fit-content"
|
|
154
151
|
};
|
|
155
152
|
|
|
156
153
|
var calculateWidth = function calculateWidth(margin, size) {
|
|
@@ -185,15 +182,21 @@ var getNotDisabledColor = function getNotDisabledColor(props, element) {
|
|
|
185
182
|
case "background":
|
|
186
183
|
return props.backgroundType && props.backgroundType === "dark" ? props.theme.backgroundColorCheckedOnDark : props.theme.backgroundColorChecked;
|
|
187
184
|
|
|
185
|
+
case "hoverBackground":
|
|
186
|
+
return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBackgroundColorCheckedOnDark : props.theme.hoverBackgroundColorChecked;
|
|
187
|
+
|
|
188
188
|
case "border":
|
|
189
189
|
return props.backgroundType && props.backgroundType === "dark" ? props.theme.borderColorOnDark : props.theme.borderColor;
|
|
190
190
|
|
|
191
|
+
case "hoverBorder":
|
|
192
|
+
return props.backgroundType && props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor;
|
|
193
|
+
|
|
191
194
|
case "label":
|
|
192
195
|
return props.backgroundType && props.backgroundType === "dark" ? props.theme.fontColorOnDark : props.theme.fontColor;
|
|
193
196
|
}
|
|
194
197
|
};
|
|
195
198
|
|
|
196
|
-
var LabelContainer = _styledComponents["default"].span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n
|
|
199
|
+
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
200
|
return props.disabled ? getDisabledColor(props, "label") : getNotDisabledColor(props, "label");
|
|
198
201
|
}, function (props) {
|
|
199
202
|
return props.theme.fontFamily;
|
|
@@ -201,11 +204,27 @@ var LabelContainer = _styledComponents["default"].span(_templateObject || (_temp
|
|
|
201
204
|
return props.theme.fontSize;
|
|
202
205
|
}, function (props) {
|
|
203
206
|
return props.theme.fontWeight;
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
var ValueInput = _styledComponents["default"].input(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
|
|
210
|
+
|
|
211
|
+
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"])));
|
|
212
|
+
|
|
213
|
+
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) {
|
|
214
|
+
return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "border");
|
|
204
215
|
}, function (props) {
|
|
205
|
-
return props.disabled ? "
|
|
216
|
+
return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
|
|
217
|
+
}, function (props) {
|
|
218
|
+
return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "background");
|
|
219
|
+
}, function (props) {
|
|
220
|
+
return props.backgroundType === "dark" ? props.theme.focusColorOnDark : props.theme.focusColor;
|
|
221
|
+
}, function (props) {
|
|
222
|
+
return props.disabled && "pointer-events: none;";
|
|
206
223
|
});
|
|
207
224
|
|
|
208
|
-
var
|
|
225
|
+
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) {
|
|
226
|
+
return calculateWidth(props.margin, props.size);
|
|
227
|
+
}, function (props) {
|
|
209
228
|
return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
|
|
210
229
|
}, function (props) {
|
|
211
230
|
return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
|
|
@@ -215,42 +234,16 @@ var CheckboxContainer = _styledComponents["default"].span(_templateObject2 || (_
|
|
|
215
234
|
return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
|
|
216
235
|
}, function (props) {
|
|
217
236
|
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
237
|
}, function (props) {
|
|
221
238
|
return props.disabled ? "not-allowed" : "pointer";
|
|
222
239
|
}, function (props) {
|
|
223
|
-
return props.
|
|
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";
|
|
240
|
+
return props.theme.checkLabelSpacing;
|
|
241
|
+
}, Checkbox, function (props) {
|
|
242
|
+
return props.disabled ? getDisabledColor(props, "border") : getNotDisabledColor(props, "hoverBorder");
|
|
250
243
|
}, function (props) {
|
|
251
|
-
return props.
|
|
244
|
+
return props.checked ? props.disabled ? getDisabledColor(props, "check") : getNotDisabledColor(props, "check") : "transparent";
|
|
252
245
|
}, function (props) {
|
|
253
|
-
return props.
|
|
246
|
+
return props.disabled ? getDisabledColor(props, "background") : getNotDisabledColor(props, "hoverBackground");
|
|
254
247
|
});
|
|
255
248
|
|
|
256
249
|
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
|
|
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
|
-
|
|
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
|
|
37
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
24
38
|
label: "Checkbox",
|
|
25
39
|
onChange: onChange
|
|
26
40
|
})),
|
|
27
|
-
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
|
-
|
|
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
|
|
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 =
|
|
111
|
+
getByRole = _render5.getByRole,
|
|
112
|
+
getByText = _render5.getByText,
|
|
113
|
+
container = _render5.container;
|
|
72
114
|
|
|
73
115
|
var input = getByRole("checkbox");
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
});
|
package/checkbox/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;
|
package/common/variables.js
CHANGED
|
@@ -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:
|
|
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...",
|
package/dropdown/Dropdown.js
CHANGED
|
@@ -28,7 +28,14 @@ const social = [
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
href: "https://twitter.com/dxctechnology",
|
|
31
|
-
logo:
|
|
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: [
|
|
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: [
|
|
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: [
|
|
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: [
|
|
166
|
+
chromatic: { viewports: [375] },
|
|
167
167
|
};
|
|
168
168
|
ResponsiveHeaderMenu.play = async ({ canvasElement }) => {
|
|
169
169
|
const canvas = within(canvasElement);
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxc-technology/halstack-react",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"description": "DXC Halstack React components library",
|
|
5
5
|
"repository": "dxc-technology/halstack-react",
|
|
6
|
-
"homepage": "
|
|
6
|
+
"homepage": "https://developer.dxc.com/halstack",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "DXC Technology",
|
|
10
10
|
"email": "DigitalInsurance@dxc.com",
|
|
11
|
-
"url": "https://dxc.com"
|
|
11
|
+
"url": "https://developer.dxc.com"
|
|
12
12
|
},
|
|
13
13
|
"main": "./main.js",
|
|
14
14
|
"types": "./main.d.ts",
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"react": "^18.
|
|
17
|
-
"react-dom": "^18.
|
|
16
|
+
"react": "^18.x",
|
|
17
|
+
"react-dom": "^18.x",
|
|
18
18
|
"styled-components": "^5.0.1"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@material-ui/lab": "4.0.0-alpha.17",
|
|
25
25
|
"@material-ui/pickers": "3.2.2",
|
|
26
26
|
"@material-ui/styles": "4.0.2",
|
|
27
|
-
"@radix-ui/react-popover": "
|
|
27
|
+
"@radix-ui/react-popover": "0.1.6",
|
|
28
28
|
"@types/styled-components": "^5.1.24",
|
|
29
29
|
"@types/uuid": "^8.3.4",
|
|
30
30
|
"color": "^3.1.3",
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"eslint-plugin-storybook": "^0.5.5",
|
|
74
74
|
"identity-obj-proxy": "^3.0.0",
|
|
75
75
|
"jest": "^25.5.4",
|
|
76
|
-
"react": "^18.
|
|
77
|
-
"react-dom": "^18.
|
|
76
|
+
"react": "^18.x",
|
|
77
|
+
"react-dom": "^18.x",
|
|
78
78
|
"react-test-renderer": "^16.8.6",
|
|
79
79
|
"storybook-addon-pseudo-states": "^1.0.0",
|
|
80
80
|
"styled-components": "^5.0.1",
|
package/select/Listbox.js
CHANGED
|
@@ -151,7 +151,6 @@ var Listbox = function Listbox(_ref) {
|
|
|
151
151
|
ref: listboxRef,
|
|
152
152
|
role: "listbox",
|
|
153
153
|
"aria-multiselectable": multiple,
|
|
154
|
-
"aria-orientation": "vertical",
|
|
155
154
|
style: styles
|
|
156
155
|
}, searchable && (options.length === 0 || !groupsHaveOptions(options)) ? /*#__PURE__*/_react["default"].createElement(OptionsSystemMessage, null, /*#__PURE__*/_react["default"].createElement(NoMatchesFoundIcon, null, _Icons["default"].searchOff), translatedLabels.select.noMatchesErrorMessage) : optional && !multiple && /*#__PURE__*/_react["default"].createElement(_Option["default"], {
|
|
157
156
|
key: "option-".concat(optionalItem.value),
|