@dxc-technology/halstack-react 0.0.0-6a36022 → 0.0.0-6b2dd6f
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/bleed/Bleed.d.ts +3 -0
- package/bleed/Bleed.js +84 -0
- package/bleed/Bleed.stories.tsx +342 -0
- package/bleed/types.d.ts +13 -0
- package/bleed/types.js +5 -0
- package/button/Button.d.ts +1 -1
- package/button/Button.js +7 -15
- package/button/Button.stories.tsx +6 -8
- package/button/types.d.ts +3 -7
- package/list/List.d.ts +3 -7
- package/list/types.d.ts +7 -0
- package/list/types.js +5 -0
- package/package.json +1 -1
- package/progress-bar/ProgressBar.js +2 -2
- package/radio-group/Radio.js +31 -21
- package/radio-group/RadioGroup.js +8 -3
- package/radio-group/RadioGroup.stories.tsx +1 -1
- package/radio-group/RadioGroup.test.js +248 -0
- package/radio-group/types.d.ts +1 -1
- package/resultsetTable/ResultsetTable.stories.tsx +6 -8
- package/row/Row.d.ts +3 -11
- package/row/Row.stories.tsx +5 -7
- package/row/types.d.ts +10 -0
- package/row/types.js +5 -0
- package/stack/Stack.d.ts +3 -10
- package/stack/Stack.stories.tsx +4 -6
- package/stack/types.d.ts +9 -0
- package/stack/types.js +5 -0
- package/tabs/Tabs.js +7 -7
- package/tabs/Tabs.stories.tsx +6 -8
- package/tabs/types.d.ts +23 -15
package/radio-group/Radio.js
CHANGED
|
@@ -21,7 +21,7 @@ var _uuid = require("uuid");
|
|
|
21
21
|
|
|
22
22
|
var _useTheme = _interopRequireDefault(require("../useTheme"));
|
|
23
23
|
|
|
24
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
24
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
25
25
|
|
|
26
26
|
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); }
|
|
27
27
|
|
|
@@ -63,11 +63,25 @@ var DxcRadio = function DxcRadio(_ref) {
|
|
|
63
63
|
}, [focused]);
|
|
64
64
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
|
|
65
65
|
theme: colorsTheme.radioGroup
|
|
66
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
66
|
+
}, /*#__PURE__*/_react["default"].createElement(RadioMainContainer, null, /*#__PURE__*/_react["default"].createElement(RadioContainer, {
|
|
67
|
+
error: error,
|
|
68
|
+
disabled: disabled,
|
|
69
|
+
readonly: readonly,
|
|
70
|
+
onMouseDown: function onMouseDown(event) {
|
|
71
|
+
// Prevents div's onclick from stealing the radio button's focus
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
},
|
|
74
|
+
onClick: function onClick() {
|
|
75
|
+
var _ref$current2;
|
|
76
|
+
|
|
77
|
+
ref === null || ref === void 0 ? void 0 : (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.focus();
|
|
78
|
+
|
|
79
|
+
_onClick();
|
|
80
|
+
}
|
|
81
|
+
}, /*#__PURE__*/_react["default"].createElement(RadioInputContainer, null, /*#__PURE__*/_react["default"].createElement(RadioInput, {
|
|
67
82
|
error: error,
|
|
68
83
|
disabled: disabled,
|
|
69
84
|
readonly: readonly,
|
|
70
|
-
onClick: _onClick,
|
|
71
85
|
onFocus: onFocus,
|
|
72
86
|
role: "radio",
|
|
73
87
|
"aria-checked": checked,
|
|
@@ -81,35 +95,31 @@ var DxcRadio = function DxcRadio(_ref) {
|
|
|
81
95
|
error: error
|
|
82
96
|
}))), /*#__PURE__*/_react["default"].createElement(Label, {
|
|
83
97
|
id: radioLabelId,
|
|
84
|
-
onMouseDown: function onMouseDown(event) {
|
|
85
|
-
event.preventDefault();
|
|
86
|
-
},
|
|
87
|
-
onClick: function onClick() {
|
|
88
|
-
var _ref$current2;
|
|
89
|
-
|
|
90
|
-
ref === null || ref === void 0 ? void 0 : (_ref$current2 = ref.current) === null || _ref$current2 === void 0 ? void 0 : _ref$current2.focus();
|
|
91
|
-
|
|
92
|
-
_onClick();
|
|
93
|
-
},
|
|
94
98
|
disabled: disabled
|
|
95
|
-
}, option.label)));
|
|
99
|
+
}, option.label))));
|
|
96
100
|
};
|
|
97
101
|
|
|
98
|
-
var
|
|
102
|
+
var RadioMainContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"])));
|
|
103
|
+
|
|
104
|
+
var RadioContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n cursor: ", ";\n \n ", "\n"])), function (props) {
|
|
105
|
+
return props.disabled ? "not-allowed" : props.readonly ? "default" : "pointer";
|
|
106
|
+
}, function (props) {
|
|
107
|
+
return !props.disabled && "\n &:hover {\n & > div > div { \n border-color: ".concat(props.error ? props.theme.hoverErrorRadioInputColor : props.readonly ? props.theme.hoverReadonlyRadioInputColor : props.theme.hoverRadioInputColor, ";\n & > span {\n background-color: ").concat(props.error ? props.theme.hoverErrorRadioInputColor : props.readonly ? props.theme.hoverReadonlyRadioInputColor : props.theme.hoverRadioInputColor, ";\n }\n };\n }\n &:active {\n & > div > div {\n border-color: ").concat(props.error ? props.theme.activeErrorRadioInputColor : props.readonly ? props.theme.activeReadonlyRadioInputColor : props.theme.activeRadioInputColor, ";\n & > span {\n background-color: ").concat(props.error ? props.theme.activeErrorRadioInputColor : props.readonly ? props.theme.activeReadonlyRadioInputColor : props.theme.activeRadioInputColor, ";\n }\n }\n }\n ");
|
|
108
|
+
});
|
|
99
109
|
|
|
100
|
-
var RadioInputContainer = _styledComponents["default"].div(
|
|
110
|
+
var RadioInputContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n width: 24px;\n"])));
|
|
101
111
|
|
|
102
|
-
var RadioInput = _styledComponents["default"].div(
|
|
112
|
+
var RadioInput = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 18px;\n height: 18px;\n border: 2px solid\n ", ";\n border-radius: 50%;\n box-shadow: 0 0 0 2px transparent;\n\n ", "\n"])), function (props) {
|
|
103
113
|
if (props.disabled) return props.theme.disabledRadioInputColor;else if (props.error) return props.theme.errorRadioInputColor;else if (props.readonly) return props.theme.readonlyRadioInputColor;else return props.theme.radioInputColor;
|
|
104
114
|
}, function (props) {
|
|
105
|
-
return !props.disabled ? "
|
|
115
|
+
return !props.disabled ? "&:focus {\n outline: 2px solid ".concat(props.theme.focusBorderColor, ";\n outline-offset: 1px;\n }\n &:focus-visible {\n outline: 2px solid ").concat(props.theme.focusBorderColor, ";\n outline-offset: 1px;\n }\n ") : "\n pointer-events: none;\n :focus-visible {\n outline: none;\n }\n ";
|
|
106
116
|
});
|
|
107
117
|
|
|
108
|
-
var Dot = _styledComponents["default"].span(
|
|
118
|
+
var Dot = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n height: 10px;\n width: 10px;\n border-radius: 50%;\n background-color: ", ";\n"])), function (props) {
|
|
109
119
|
if (props.disabled) return props.theme.disabledRadioInputColor;else if (props.error) return props.theme.errorRadioInputColor;else if (props.readonly) return props.theme.readonlyRadioInputColor;else return props.theme.radioInputColor;
|
|
110
120
|
});
|
|
111
121
|
|
|
112
|
-
var Label = _styledComponents["default"].span(
|
|
122
|
+
var Label = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n ", "\n"])), function (props) {
|
|
113
123
|
return props.theme.radioInputLabelMargin;
|
|
114
124
|
}, function (props) {
|
|
115
125
|
return props.theme.fontFamily;
|
|
@@ -122,7 +132,7 @@ var Label = _styledComponents["default"].span(_templateObject5 || (_templateObje
|
|
|
122
132
|
}, function (props) {
|
|
123
133
|
return props.theme.radioInputLabelLineHeight;
|
|
124
134
|
}, function (props) {
|
|
125
|
-
return props.disabled
|
|
135
|
+
return props.disabled && "color: ".concat(props.theme.disabledRadioInputLabelFontColor, "; pointer-events: none;");
|
|
126
136
|
});
|
|
127
137
|
|
|
128
138
|
var _default = /*#__PURE__*/_react["default"].memo(DxcRadio);
|
|
@@ -59,11 +59,12 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
|
|
|
59
59
|
onBlur = _ref.onBlur,
|
|
60
60
|
error = _ref.error;
|
|
61
61
|
|
|
62
|
-
var _useState = (0, _react.useState)("
|
|
62
|
+
var _useState = (0, _react.useState)("radio-group-".concat((0, _uuid.v4)())),
|
|
63
63
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 1),
|
|
64
64
|
radioGroupId = _useState2[0];
|
|
65
65
|
|
|
66
66
|
var radioGroupLabelId = "label-".concat(radioGroupId);
|
|
67
|
+
var errorId = "error-".concat(radioGroupId);
|
|
67
68
|
|
|
68
69
|
var _useState3 = (0, _react.useState)(defaultValue),
|
|
69
70
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
@@ -185,6 +186,7 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
|
|
|
185
186
|
"aria-disabled": disabled,
|
|
186
187
|
"aria-labelledby": radioGroupLabelId,
|
|
187
188
|
"aria-invalid": error ? "true" : "false",
|
|
189
|
+
"aria-errormessage": error ? errorId : undefined,
|
|
188
190
|
"aria-required": !optional
|
|
189
191
|
}, /*#__PURE__*/_react["default"].createElement(ValueInput, {
|
|
190
192
|
name: name,
|
|
@@ -207,10 +209,13 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
|
|
|
207
209
|
focused: currentFocusIndex === index,
|
|
208
210
|
readonly: readonly
|
|
209
211
|
});
|
|
210
|
-
})), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error,
|
|
212
|
+
})), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
|
|
213
|
+
id: errorId,
|
|
214
|
+
"aria-live": error ? "assertive" : "off"
|
|
215
|
+
}, error)));
|
|
211
216
|
});
|
|
212
217
|
|
|
213
|
-
var RadioGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n"])));
|
|
218
|
+
var RadioGroupContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: column;\n box-sizing: border-box;\n"])));
|
|
214
219
|
|
|
215
220
|
var Label = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n ", "\n"])), function (props) {
|
|
216
221
|
return props.disabled ? props.theme.disabledLabelFontColor : props.theme.labelFontColor;
|
|
@@ -24,7 +24,7 @@ export const Chromatic = () => (
|
|
|
24
24
|
<>
|
|
25
25
|
<ExampleContainer>
|
|
26
26
|
<Title title="Label only" theme="light" level={4} />
|
|
27
|
-
<DxcRadioGroup label="Example of label" options={options}/>
|
|
27
|
+
<DxcRadioGroup label="Example of a label only" options={options} />
|
|
28
28
|
</ExampleContainer>
|
|
29
29
|
<ExampleContainer>
|
|
30
30
|
<Title title="Column" theme="light" level={4} />
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _RadioGroup = _interopRequireDefault(require("./RadioGroup"));
|
|
8
|
+
|
|
9
|
+
var _react2 = require("@testing-library/react");
|
|
10
|
+
|
|
11
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
12
|
+
|
|
13
|
+
var single_options = [{
|
|
14
|
+
label: "Option 01",
|
|
15
|
+
value: "1"
|
|
16
|
+
}, {
|
|
17
|
+
label: "Option 02",
|
|
18
|
+
value: "2"
|
|
19
|
+
}, {
|
|
20
|
+
label: "Option 03",
|
|
21
|
+
value: "3"
|
|
22
|
+
}, {
|
|
23
|
+
label: "Option 04",
|
|
24
|
+
value: "4"
|
|
25
|
+
}, {
|
|
26
|
+
label: "Option 05",
|
|
27
|
+
value: "5"
|
|
28
|
+
}, {
|
|
29
|
+
label: "Option 06",
|
|
30
|
+
value: "6"
|
|
31
|
+
}, {
|
|
32
|
+
label: "Option 07",
|
|
33
|
+
value: "7"
|
|
34
|
+
}, {
|
|
35
|
+
label: "Option 08",
|
|
36
|
+
value: "8"
|
|
37
|
+
}, {
|
|
38
|
+
label: "Option 09",
|
|
39
|
+
value: "9"
|
|
40
|
+
}, {
|
|
41
|
+
label: "Option 10",
|
|
42
|
+
value: "10"
|
|
43
|
+
}];
|
|
44
|
+
describe("Radio Group component tests", function () {
|
|
45
|
+
test("Controlled - Not optional constraint - undefined", function () {
|
|
46
|
+
var onChange = jest.fn();
|
|
47
|
+
var onBlur = jest.fn();
|
|
48
|
+
|
|
49
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
50
|
+
label: "test-select-label",
|
|
51
|
+
options: single_options,
|
|
52
|
+
onChange: onChange,
|
|
53
|
+
onBlur: onBlur
|
|
54
|
+
})),
|
|
55
|
+
getByRole = _render.getByRole,
|
|
56
|
+
getAllByRole = _render.getAllByRole;
|
|
57
|
+
|
|
58
|
+
var radioGroup = getByRole("radiogroup");
|
|
59
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("true");
|
|
60
|
+
|
|
61
|
+
_react2.fireEvent.focus(radioGroup);
|
|
62
|
+
|
|
63
|
+
_react2.fireEvent.blur(radioGroup);
|
|
64
|
+
|
|
65
|
+
expect(onBlur).toHaveBeenCalled();
|
|
66
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
67
|
+
error: "This field is required. Please, choose an option."
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
_userEvent["default"].click(radioGroup);
|
|
71
|
+
|
|
72
|
+
_userEvent["default"].click(getAllByRole("radio")[0]);
|
|
73
|
+
|
|
74
|
+
expect(onChange).toHaveBeenCalled();
|
|
75
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
76
|
+
|
|
77
|
+
_react2.fireEvent.focus(radioGroup);
|
|
78
|
+
|
|
79
|
+
_react2.fireEvent.blur(radioGroup);
|
|
80
|
+
|
|
81
|
+
expect(onBlur).toHaveBeenCalled();
|
|
82
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
83
|
+
value: "1"
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
test("Controlled - Not optional constraint - empty string", function () {
|
|
87
|
+
var onChange = jest.fn();
|
|
88
|
+
var onBlur = jest.fn();
|
|
89
|
+
|
|
90
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
91
|
+
label: "test-select-label",
|
|
92
|
+
value: "",
|
|
93
|
+
options: single_options,
|
|
94
|
+
onChange: onChange,
|
|
95
|
+
onBlur: onBlur
|
|
96
|
+
})),
|
|
97
|
+
getByRole = _render2.getByRole,
|
|
98
|
+
getAllByRole = _render2.getAllByRole;
|
|
99
|
+
|
|
100
|
+
var radioGroup = getByRole("radiogroup");
|
|
101
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("true");
|
|
102
|
+
|
|
103
|
+
_react2.fireEvent.focus(radioGroup);
|
|
104
|
+
|
|
105
|
+
_react2.fireEvent.blur(radioGroup);
|
|
106
|
+
|
|
107
|
+
expect(onBlur).toHaveBeenCalled();
|
|
108
|
+
expect(onBlur).toHaveBeenCalledWith({
|
|
109
|
+
value: "",
|
|
110
|
+
error: "This field is required. Please, choose an option."
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
_userEvent["default"].click(getAllByRole("radio")[0]);
|
|
114
|
+
|
|
115
|
+
expect(onChange).toHaveBeenCalled();
|
|
116
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
117
|
+
});
|
|
118
|
+
test("Controlled - Optional constraint", function () {
|
|
119
|
+
var onChange = jest.fn();
|
|
120
|
+
var onBlur = jest.fn();
|
|
121
|
+
|
|
122
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
123
|
+
label: "test-radio-group-label",
|
|
124
|
+
helperText: "test-radio-group-helper-text",
|
|
125
|
+
options: single_options,
|
|
126
|
+
onChange: onChange,
|
|
127
|
+
onBlur: onBlur,
|
|
128
|
+
optional: true
|
|
129
|
+
})),
|
|
130
|
+
getByRole = _render3.getByRole;
|
|
131
|
+
|
|
132
|
+
var radioGroup = getByRole("radiogroup");
|
|
133
|
+
expect(radioGroup.getAttribute("aria-required")).toBe("false");
|
|
134
|
+
|
|
135
|
+
_react2.fireEvent.focus(radioGroup);
|
|
136
|
+
|
|
137
|
+
_react2.fireEvent.blur(radioGroup);
|
|
138
|
+
|
|
139
|
+
expect(onBlur).toHaveBeenCalled();
|
|
140
|
+
expect(onBlur).toHaveBeenCalledWith({});
|
|
141
|
+
expect(radioGroup.getAttribute("aria-invalid")).toBe("false");
|
|
142
|
+
});
|
|
143
|
+
test("Select an option - Click on radio input label", function () {
|
|
144
|
+
var onChange = jest.fn();
|
|
145
|
+
|
|
146
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
147
|
+
label: "test-radio-group-label",
|
|
148
|
+
helperText: "test-radio-group-helper-text",
|
|
149
|
+
options: single_options,
|
|
150
|
+
onChange: onChange
|
|
151
|
+
})),
|
|
152
|
+
getByText = _render4.getByText,
|
|
153
|
+
getAllByRole = _render4.getAllByRole;
|
|
154
|
+
|
|
155
|
+
var radio = getByText("Option 10");
|
|
156
|
+
|
|
157
|
+
_userEvent["default"].click(radio);
|
|
158
|
+
|
|
159
|
+
expect(onChange).toHaveBeenCalled();
|
|
160
|
+
expect(onChange).toHaveBeenCalledWith("10");
|
|
161
|
+
expect(getAllByRole("radio")[9].getAttribute("aria-checked")).toBe("true");
|
|
162
|
+
});
|
|
163
|
+
test("Select an option - Click on radio input", function () {
|
|
164
|
+
var onChange = jest.fn();
|
|
165
|
+
|
|
166
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
167
|
+
label: "test-radio-group-label",
|
|
168
|
+
helperText: "test-radio-group-helper-text",
|
|
169
|
+
options: single_options,
|
|
170
|
+
onChange: onChange
|
|
171
|
+
})),
|
|
172
|
+
getAllByRole = _render5.getAllByRole;
|
|
173
|
+
|
|
174
|
+
var radio = getAllByRole("radio")[6];
|
|
175
|
+
|
|
176
|
+
_userEvent["default"].click(radio);
|
|
177
|
+
|
|
178
|
+
expect(onChange).toHaveBeenCalled();
|
|
179
|
+
expect(onChange).toHaveBeenCalledWith("7");
|
|
180
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
181
|
+
});
|
|
182
|
+
test("Select an option - Tab and Enter key", function () {
|
|
183
|
+
var onChange = jest.fn();
|
|
184
|
+
|
|
185
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
186
|
+
label: "test-radio-group-label",
|
|
187
|
+
helperText: "test-radio-group-helper-text",
|
|
188
|
+
options: single_options,
|
|
189
|
+
onChange: onChange
|
|
190
|
+
})),
|
|
191
|
+
getByRole = _render6.getByRole,
|
|
192
|
+
getAllByRole = _render6.getAllByRole;
|
|
193
|
+
|
|
194
|
+
var radioGroup = getByRole("radiogroup");
|
|
195
|
+
var radio = getAllByRole("radio")[0];
|
|
196
|
+
|
|
197
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
198
|
+
key: "Tab",
|
|
199
|
+
code: "Tab",
|
|
200
|
+
keyCode: 9,
|
|
201
|
+
charCode: 9
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
205
|
+
key: "Enter",
|
|
206
|
+
code: "Enter",
|
|
207
|
+
keyCode: 13,
|
|
208
|
+
charCode: 13
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
expect(onChange).toHaveBeenCalled();
|
|
212
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
213
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
214
|
+
});
|
|
215
|
+
test("Select an option - Tab and Space key", function () {
|
|
216
|
+
var onChange = jest.fn();
|
|
217
|
+
|
|
218
|
+
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
219
|
+
label: "test-radio-group-label",
|
|
220
|
+
helperText: "test-radio-group-helper-text",
|
|
221
|
+
options: single_options,
|
|
222
|
+
onChange: onChange
|
|
223
|
+
})),
|
|
224
|
+
getByRole = _render7.getByRole,
|
|
225
|
+
getAllByRole = _render7.getAllByRole;
|
|
226
|
+
|
|
227
|
+
var radioGroup = getByRole("radiogroup");
|
|
228
|
+
var radio = getAllByRole("radio")[0];
|
|
229
|
+
|
|
230
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
231
|
+
key: "Tab",
|
|
232
|
+
code: "Tab",
|
|
233
|
+
keyCode: 9,
|
|
234
|
+
charCode: 9
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
_react2.fireEvent.keyDown(radioGroup, {
|
|
238
|
+
key: "Space",
|
|
239
|
+
code: "Space",
|
|
240
|
+
keyCode: 32,
|
|
241
|
+
charCode: 32
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
expect(onChange).toHaveBeenCalled();
|
|
245
|
+
expect(onChange).toHaveBeenCalledWith("1");
|
|
246
|
+
expect(radio.getAttribute("aria-checked")).toBe("true");
|
|
247
|
+
});
|
|
248
|
+
});
|
package/radio-group/types.d.ts
CHANGED
|
@@ -10,14 +10,12 @@ export default {
|
|
|
10
10
|
component: DxcResultsetTable,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
const deleteIcon = (
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
);
|
|
20
|
-
};
|
|
13
|
+
const deleteIcon = (
|
|
14
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">
|
|
15
|
+
<path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" />
|
|
16
|
+
<path d="M0 0h24v24H0z" fill="none" />
|
|
17
|
+
</svg>
|
|
18
|
+
);
|
|
21
19
|
|
|
22
20
|
const columns = [{ displayValue: "Id" }, { displayValue: "Name" }, { displayValue: "City" }];
|
|
23
21
|
|
package/row/Row.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
5
|
-
justify?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly";
|
|
6
|
-
wrap?: boolean;
|
|
7
|
-
reverse?: boolean;
|
|
8
|
-
children: React.ReactNode;
|
|
9
|
-
};
|
|
10
|
-
export default function Row({ gutter, align, justify, wrap, reverse, children }: RowProps): JSX.Element;
|
|
11
|
-
export {};
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import RowPropsType from "./types";
|
|
3
|
+
export default function Row({ gutter, align, justify, wrap, reverse, children, }: RowPropsType): JSX.Element;
|
package/row/Row.stories.tsx
CHANGED
|
@@ -106,7 +106,7 @@ export const Chromatic = () => (
|
|
|
106
106
|
<Placeholder paddingTop={60}></Placeholder>
|
|
107
107
|
</DxcRow>
|
|
108
108
|
</Container>
|
|
109
|
-
|
|
109
|
+
<Title title="gutter = xxxsmall" theme="light" level={4} />
|
|
110
110
|
<Container>
|
|
111
111
|
<DxcRow gutter="xxxsmall">
|
|
112
112
|
<Placeholder></Placeholder>
|
|
@@ -222,18 +222,16 @@ export const Chromatic = () => (
|
|
|
222
222
|
);
|
|
223
223
|
|
|
224
224
|
const Container = styled.div`
|
|
225
|
-
background: #
|
|
225
|
+
background: #f2eafa;
|
|
226
226
|
padding: 10px;
|
|
227
|
-
border-radius: 10px;
|
|
228
227
|
width: ${({ width }) => (width ? `${width}px` : "unset")};
|
|
229
228
|
`;
|
|
230
229
|
|
|
231
230
|
const Placeholder = styled.div`
|
|
232
|
-
min-height:
|
|
231
|
+
min-height: 40px;
|
|
233
232
|
min-width: 120px;
|
|
234
|
-
border: 1px solid #
|
|
235
|
-
background-color: #
|
|
236
|
-
border-radius: 5px;
|
|
233
|
+
border: 1px solid #a46ede;
|
|
234
|
+
background-color: #e5d5f6;
|
|
237
235
|
padding-top: ${({ paddingTop }) => `${paddingTop ?? 0}px`};
|
|
238
236
|
padding-bottom: ${({ paddingBottom }) => `${paddingBottom ?? 0}px`};
|
|
239
237
|
`;
|
package/row/types.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type Props = {
|
|
3
|
+
gutter?: "none" | "xxxsmall" | "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge" | "xxxlarge";
|
|
4
|
+
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
5
|
+
justify?: "start" | "center" | "end" | "spaceBetween" | "spaceAround" | "spaceEvenly";
|
|
6
|
+
wrap?: boolean;
|
|
7
|
+
reverse?: boolean;
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export default Props;
|
package/row/types.js
ADDED
package/stack/Stack.d.ts
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
divider?: boolean;
|
|
5
|
-
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
6
|
-
as?: React.ElementType;
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
};
|
|
9
|
-
export default function Stack({ gutter, divider, align, as, children }: StackProps): JSX.Element;
|
|
10
|
-
export {};
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import StackPropsType from "./types";
|
|
3
|
+
export default function Stack({ gutter, divider, align, as, children }: StackPropsType): JSX.Element;
|
package/stack/Stack.stories.tsx
CHANGED
|
@@ -150,17 +150,15 @@ export const Chromatic = () => (
|
|
|
150
150
|
);
|
|
151
151
|
|
|
152
152
|
const Container = styled.div`
|
|
153
|
-
background: #
|
|
153
|
+
background: #f2eafa;
|
|
154
154
|
padding: 10px;
|
|
155
|
-
border-radius: 10px;
|
|
156
155
|
`;
|
|
157
156
|
|
|
158
157
|
const Placeholder = styled.div`
|
|
159
|
-
min-height:
|
|
158
|
+
min-height: 40px;
|
|
160
159
|
min-width: 120px;
|
|
161
|
-
border: 1px solid #
|
|
162
|
-
background-color: #
|
|
163
|
-
border-radius: 5px;
|
|
160
|
+
border: 1px solid #a46ede;
|
|
161
|
+
background-color: #e5d5f6;
|
|
164
162
|
padding-left: ${({ paddingLeft }) => `${paddingLeft ?? 0}px`};
|
|
165
163
|
padding-right: ${({ paddingRight }) => `${paddingRight ?? 0}px`};
|
|
166
164
|
`;
|
package/stack/types.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type Props = {
|
|
3
|
+
gutter?: "none" | "xxxsmall" | "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge" | "xxxlarge";
|
|
4
|
+
divider?: boolean;
|
|
5
|
+
align?: "start" | "center" | "end" | "baseline" | "stretch";
|
|
6
|
+
as?: React.ElementType;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
export default Props;
|
package/stack/types.js
ADDED
package/tabs/Tabs.js
CHANGED
|
@@ -9,10 +9,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports["default"] = void 0;
|
|
11
11
|
|
|
12
|
-
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
|
-
|
|
14
12
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
15
13
|
|
|
14
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
15
|
+
|
|
16
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
17
|
|
|
18
18
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -70,12 +70,12 @@ var DxcTabs = function DxcTabs(_ref) {
|
|
|
70
70
|
}, /*#__PURE__*/_react["default"].createElement(TabLabelContainer, {
|
|
71
71
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
72
72
|
iconPosition: iconPosition
|
|
73
|
-
}, tab.icon
|
|
73
|
+
}, tab.icon && /*#__PURE__*/_react["default"].createElement(TabIconContainer, {
|
|
74
74
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
75
75
|
iconPosition: iconPosition
|
|
76
|
-
},
|
|
77
|
-
src: tab.
|
|
78
|
-
}), /*#__PURE__*/_react["default"].createElement(LabelTextContainer, null, tab.label))), tab.notificationNumber && tab.notificationNumber !== false && /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
|
|
76
|
+
}, typeof tab.icon === "string" ? /*#__PURE__*/_react["default"].createElement(TabIcon, {
|
|
77
|
+
src: tab.icon
|
|
78
|
+
}) : tab.icon), /*#__PURE__*/_react["default"].createElement(LabelTextContainer, null, tab.label))), tab.notificationNumber && tab.notificationNumber !== false && /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
|
|
79
79
|
hasLabelAndIcon: hasLabelAndIcon,
|
|
80
80
|
iconPosition: iconPosition
|
|
81
81
|
}, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
|
|
@@ -201,7 +201,7 @@ var DxCTabs = _styledComponents["default"].div(_templateObject7 || (_templateObj
|
|
|
201
201
|
return props.theme.scrollButtonsWidth;
|
|
202
202
|
});
|
|
203
203
|
|
|
204
|
-
var TabIcon = _styledComponents["default"].img(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["
|
|
204
|
+
var TabIcon = _styledComponents["default"].img(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])([""])));
|
|
205
205
|
|
|
206
206
|
var TabIconContainer = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n max-height: 22px;\n max-width: 22px;\n margin-bottom: ", ";\n margin-right: ", ";\n overflow: hidden;\n display: flex;\n align-items: center;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
|
|
207
207
|
return props.hasLabelAndIcon && props.iconPosition === "top" && "8px" || "";
|
package/tabs/Tabs.stories.tsx
CHANGED
|
@@ -9,14 +9,12 @@ export default {
|
|
|
9
9
|
component: DxcTabs,
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
const iconSVG = (
|
|
13
|
-
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
);
|
|
19
|
-
};
|
|
12
|
+
const iconSVG = (
|
|
13
|
+
<svg viewBox="0 0 24 24" fill="currentColor">
|
|
14
|
+
<path d="M0 0h24v24H0z" fill="none" />
|
|
15
|
+
<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
|
|
16
|
+
</svg>
|
|
17
|
+
);
|
|
20
18
|
|
|
21
19
|
const tabs: any = [
|
|
22
20
|
{
|