@dxc-technology/halstack-react 10.1.0 → 11.0.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/BackgroundColorContext.d.ts +2 -2
- package/BackgroundColorContext.js +5 -17
- package/HalstackContext.d.ts +18 -6
- package/HalstackContext.js +9 -34
- package/accordion/Accordion.js +21 -58
- package/accordion/Accordion.stories.tsx +1 -15
- package/accordion/Accordion.test.js +18 -33
- package/accordion/types.d.ts +5 -5
- package/accordion-group/AccordionGroup.js +15 -42
- package/accordion-group/AccordionGroup.stories.tsx +1 -1
- package/accordion-group/AccordionGroup.test.js +42 -60
- package/accordion-group/AccordionGroupAccordion.js +9 -21
- package/accordion-group/types.d.ts +6 -6
- package/alert/Alert.js +14 -46
- package/alert/Alert.test.js +28 -45
- package/alert/types.d.ts +5 -5
- package/badge/Badge.js +4 -17
- package/badge/types.d.ts +1 -1
- package/bleed/Bleed.js +13 -21
- package/bleed/types.d.ts +2 -2
- package/box/Box.js +10 -29
- package/box/Box.test.js +1 -6
- package/box/types.d.ts +3 -3
- package/bulleted-list/BulletedList.js +7 -33
- package/bulleted-list/BulletedList.stories.tsx +1 -91
- package/bulleted-list/types.d.ts +5 -5
- package/button/Button.js +23 -46
- package/button/Button.stories.tsx +5 -86
- package/button/Button.test.js +11 -21
- package/button/types.d.ts +4 -4
- package/card/Card.js +21 -44
- package/card/Card.test.js +10 -21
- package/card/types.d.ts +5 -5
- package/checkbox/Checkbox.js +81 -111
- package/checkbox/Checkbox.stories.tsx +16 -54
- package/checkbox/Checkbox.test.js +107 -63
- package/checkbox/types.d.ts +8 -4
- package/chip/Chip.js +12 -31
- package/chip/Chip.test.js +15 -28
- package/chip/types.d.ts +4 -4
- package/common/coreTokens.js +1 -2
- package/common/utils.js +2 -8
- package/common/variables.d.ts +15 -6
- package/common/variables.js +17 -15
- package/date-input/Calendar.js +13 -57
- package/date-input/DateInput.js +50 -96
- package/date-input/DateInput.stories.tsx +11 -30
- package/date-input/DateInput.test.js +674 -701
- package/date-input/DatePicker.js +11 -42
- package/date-input/Icons.d.ts +6 -6
- package/date-input/Icons.js +6 -23
- package/date-input/YearPicker.js +8 -34
- package/date-input/types.d.ts +27 -21
- package/dialog/Dialog.js +11 -35
- package/dialog/Dialog.test.js +125 -187
- package/dialog/types.d.ts +18 -13
- package/dropdown/Dropdown.js +39 -93
- package/dropdown/Dropdown.test.js +391 -378
- package/dropdown/DropdownMenu.js +8 -19
- package/dropdown/DropdownMenuItem.js +5 -17
- package/dropdown/types.d.ts +17 -19
- package/file-input/FileInput.js +131 -220
- package/file-input/FileInput.stories.tsx +1 -1
- package/file-input/FileInput.test.js +293 -342
- package/file-input/FileItem.js +12 -39
- package/file-input/types.d.ts +9 -9
- package/flex/Flex.js +25 -39
- package/flex/types.d.ts +6 -6
- package/footer/Footer.js +9 -39
- package/footer/Footer.test.js +18 -32
- package/footer/Icons.d.ts +2 -2
- package/footer/Icons.js +2 -7
- package/footer/types.d.ts +13 -13
- package/grid/Grid.js +1 -16
- package/grid/types.d.ts +10 -10
- package/header/Header.d.ts +1 -1
- package/header/Header.js +19 -64
- package/header/Header.test.js +12 -25
- package/header/Icons.d.ts +2 -2
- package/header/Icons.js +2 -7
- package/header/types.d.ts +5 -7
- package/heading/Heading.js +9 -31
- package/heading/Heading.test.js +70 -87
- package/heading/types.d.ts +7 -7
- package/image/Image.d.ts +2 -2
- package/image/Image.js +17 -32
- package/image/types.d.ts +2 -2
- package/inset/Inset.js +13 -21
- package/inset/types.d.ts +2 -2
- package/layout/ApplicationLayout.d.ts +1 -1
- package/layout/ApplicationLayout.js +14 -54
- package/layout/Icons.d.ts +5 -5
- package/layout/Icons.js +1 -5
- package/layout/SidenavContext.d.ts +1 -1
- package/layout/SidenavContext.js +3 -9
- package/layout/types.d.ts +3 -3
- package/link/Link.js +21 -42
- package/link/Link.test.js +23 -41
- package/link/types.d.ts +14 -14
- package/main.d.ts +1 -1
- package/main.js +3 -52
- package/nav-tabs/NavTabs.js +11 -43
- package/nav-tabs/NavTabs.stories.tsx +1 -1
- package/nav-tabs/NavTabs.test.js +36 -43
- package/nav-tabs/Tab.js +16 -45
- package/nav-tabs/types.d.ts +9 -9
- package/number-input/NumberInput.d.ts +1 -1
- package/number-input/NumberInput.js +24 -35
- package/number-input/NumberInput.stories.tsx +42 -26
- package/number-input/NumberInput.test.js +682 -577
- package/number-input/types.d.ts +11 -5
- package/package.json +27 -25
- package/paginator/Icons.d.ts +5 -5
- package/paginator/Icons.js +5 -19
- package/paginator/Paginator.js +14 -39
- package/paginator/Paginator.test.js +224 -207
- package/paginator/types.d.ts +3 -3
- package/paragraph/Paragraph.js +3 -14
- package/paragraph/Paragraph.stories.tsx +0 -17
- package/password-input/Icons.d.ts +3 -3
- package/password-input/Icons.js +1 -5
- package/password-input/PasswordInput.js +26 -48
- package/password-input/PasswordInput.stories.tsx +1 -33
- package/password-input/PasswordInput.test.js +153 -129
- package/password-input/types.d.ts +8 -7
- package/progress-bar/ProgressBar.js +16 -42
- package/progress-bar/{ProgressBar.stories.jsx → ProgressBar.stories.tsx} +1 -1
- package/progress-bar/ProgressBar.test.js +35 -52
- package/progress-bar/types.d.ts +3 -3
- package/quick-nav/QuickNav.js +4 -27
- package/quick-nav/QuickNav.stories.tsx +1 -1
- package/quick-nav/types.d.ts +10 -10
- package/radio-group/Radio.d.ts +1 -1
- package/radio-group/Radio.js +22 -54
- package/radio-group/RadioGroup.js +37 -83
- package/radio-group/RadioGroup.stories.tsx +10 -10
- package/radio-group/RadioGroup.test.js +504 -470
- package/radio-group/types.d.ts +8 -8
- package/resultset-table/Icons.d.ts +7 -0
- package/{resultsetTable → resultset-table}/Icons.js +1 -5
- package/{resultsetTable → resultset-table}/ResultsetTable.js +22 -58
- package/{resultsetTable → resultset-table}/ResultsetTable.test.js +72 -92
- package/{resultsetTable → resultset-table}/types.d.ts +7 -7
- package/select/Icons.d.ts +7 -7
- package/select/Icons.js +1 -5
- package/select/Listbox.js +13 -39
- package/select/Option.js +9 -26
- package/select/Select.js +54 -138
- package/select/Select.test.js +1902 -1796
- package/select/types.d.ts +14 -15
- package/sidenav/Icons.d.ts +4 -4
- package/sidenav/Icons.js +1 -5
- package/sidenav/Sidenav.js +24 -63
- package/sidenav/Sidenav.test.js +3 -10
- package/sidenav/types.d.ts +18 -18
- package/slider/Slider.js +38 -86
- package/slider/Slider.test.js +107 -103
- package/slider/types.d.ts +4 -4
- package/spinner/Spinner.js +10 -40
- package/spinner/Spinner.test.js +25 -34
- package/spinner/types.d.ts +3 -3
- package/switch/Switch.js +26 -69
- package/switch/Switch.stories.tsx +0 -34
- package/switch/Switch.test.js +51 -96
- package/switch/types.d.ts +4 -4
- package/table/Table.js +4 -23
- package/table/Table.test.js +1 -6
- package/table/types.d.ts +8 -8
- package/tabs/Tab.js +10 -29
- package/tabs/Tabs.js +48 -124
- package/tabs/Tabs.test.js +62 -118
- package/tabs/types.d.ts +19 -19
- package/tag/Tag.js +21 -51
- package/tag/Tag.test.js +19 -30
- package/tag/types.d.ts +7 -7
- package/text-input/Icons.d.ts +5 -5
- package/text-input/Icons.js +1 -5
- package/text-input/Suggestion.js +9 -26
- package/text-input/Suggestions.d.ts +1 -1
- package/text-input/Suggestions.js +12 -57
- package/text-input/TextInput.js +128 -193
- package/text-input/TextInput.stories.tsx +48 -152
- package/text-input/TextInput.test.js +1210 -1194
- package/text-input/types.d.ts +25 -17
- package/textarea/Textarea.js +60 -96
- package/textarea/{Textarea.stories.jsx → Textarea.stories.tsx} +58 -99
- package/textarea/Textarea.test.js +150 -179
- package/textarea/types.d.ts +9 -5
- package/toggle-group/ToggleGroup.js +20 -57
- package/toggle-group/ToggleGroup.stories.tsx +1 -1
- package/toggle-group/ToggleGroup.test.js +48 -81
- package/toggle-group/types.d.ts +10 -10
- package/typography/Typography.js +4 -13
- package/typography/types.d.ts +1 -1
- package/useTheme.d.ts +12 -3
- package/useTheme.js +1 -8
- package/useTranslatedLabels.js +1 -7
- package/utils/BaseTypography.d.ts +2 -2
- package/utils/BaseTypography.js +16 -30
- package/utils/FocusLock.js +12 -36
- package/wizard/Wizard.js +14 -49
- package/wizard/Wizard.test.js +53 -80
- package/wizard/types.d.ts +6 -6
- package/resultsetTable/Icons.d.ts +0 -7
- package/slider/Slider.stories.tsx +0 -240
- /package/{resultsetTable → resultset-table}/ResultsetTable.d.ts +0 -0
- /package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +0 -0
- /package/{resultsetTable → resultset-table}/types.js +0 -0
- /package/spinner/{Spinner.stories.jsx → Spinner.stories.tsx} +0 -0
- /package/table/{Table.stories.jsx → Table.stories.tsx} +0 -0
package/dialog/Dialog.test.js
CHANGED
|
@@ -1,35 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _react = _interopRequireDefault(require("react"));
|
|
6
|
-
|
|
7
5
|
var _react2 = require("@testing-library/react");
|
|
8
|
-
|
|
9
6
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
-
|
|
11
7
|
var _Dialog = _interopRequireDefault(require("./Dialog.tsx"));
|
|
12
|
-
|
|
13
8
|
var _TextInput = _interopRequireDefault(require("../text-input/TextInput.tsx"));
|
|
14
|
-
|
|
15
9
|
var _Textarea = _interopRequireDefault(require("../textarea/Textarea.tsx"));
|
|
16
|
-
|
|
17
10
|
var _Checkbox = _interopRequireDefault(require("../checkbox/Checkbox.tsx"));
|
|
18
|
-
|
|
19
11
|
var _Select = _interopRequireDefault(require("../select/Select.tsx"));
|
|
20
|
-
|
|
21
12
|
var _Button = _interopRequireDefault(require("../button/Button.tsx"));
|
|
22
|
-
|
|
23
13
|
var _Link = _interopRequireDefault(require("../link/Link.tsx"));
|
|
24
|
-
|
|
25
14
|
var _Card = _interopRequireDefault(require("../card/Card.tsx"));
|
|
26
|
-
|
|
27
15
|
var _RadioGroup = _interopRequireDefault(require("../radio-group/RadioGroup.tsx"));
|
|
28
|
-
|
|
29
16
|
var _Slider = _interopRequireDefault(require("../slider/Slider.tsx"));
|
|
30
|
-
|
|
31
17
|
var _Switch = _interopRequireDefault(require("../switch/Switch.tsx"));
|
|
32
|
-
|
|
33
18
|
var options = [{
|
|
34
19
|
label: "Female",
|
|
35
20
|
value: "female"
|
|
@@ -46,324 +31,277 @@ var options = [{
|
|
|
46
31
|
describe("Dialog component tests", function () {
|
|
47
32
|
test("Dialog renders with correct text and accesibility attributes", function () {
|
|
48
33
|
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, "dialog-text")),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
34
|
+
getByText = _render.getByText,
|
|
35
|
+
getByRole = _render.getByRole;
|
|
52
36
|
expect(getByRole("dialog")).toBeTruthy();
|
|
53
37
|
expect(getByRole("dialog").getAttribute("aria-modal")).toBe("true");
|
|
54
38
|
expect(getByText("dialog-text")).toBeTruthy();
|
|
55
39
|
});
|
|
56
40
|
test("Dialog renders without close button", function () {
|
|
57
41
|
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
isCloseVisible: false
|
|
43
|
+
}, "dialog-text")),
|
|
44
|
+
queryByRole = _render2.queryByRole;
|
|
62
45
|
expect(queryByRole("button")).toBeFalsy();
|
|
63
46
|
});
|
|
64
47
|
test("Dialog renders with aria-modal false when overlay is not used", function () {
|
|
65
48
|
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
49
|
+
isCloseVisible: false,
|
|
50
|
+
overlay: false
|
|
51
|
+
}, "dialog-text")),
|
|
52
|
+
getByRole = _render3.getByRole;
|
|
71
53
|
expect(getByRole("dialog")).toBeTruthy();
|
|
72
54
|
expect(getByRole("dialog").getAttribute("aria-modal")).toBe("false");
|
|
73
55
|
});
|
|
74
56
|
test("Calls correct function onCloseClick", function () {
|
|
75
57
|
var onCloseClick = jest.fn();
|
|
76
|
-
|
|
77
58
|
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
59
|
+
onCloseClick: onCloseClick
|
|
60
|
+
}, "dialog-text")),
|
|
61
|
+
getByRole = _render4.getByRole;
|
|
82
62
|
var closeButton = getByRole("button");
|
|
83
|
-
|
|
84
63
|
_react2.fireEvent.click(closeButton);
|
|
85
|
-
|
|
86
64
|
expect(onCloseClick).toHaveBeenCalled();
|
|
87
65
|
});
|
|
88
66
|
test("Calls correct function onCloseClick when 'Escape' key is pressed", function () {
|
|
89
67
|
var onCloseClick = jest.fn();
|
|
90
|
-
|
|
91
68
|
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
69
|
+
onCloseClick: onCloseClick
|
|
70
|
+
}, "dialog-text")),
|
|
71
|
+
getByRole = _render5.getByRole;
|
|
96
72
|
_react2.fireEvent.keyDown(getByRole("dialog"), {
|
|
97
73
|
key: "Escape",
|
|
98
74
|
code: "Escape",
|
|
99
75
|
keyCode: 27,
|
|
100
76
|
charCode: 27
|
|
101
77
|
});
|
|
102
|
-
|
|
103
78
|
expect(onCloseClick).toHaveBeenCalled();
|
|
104
79
|
});
|
|
105
80
|
});
|
|
106
81
|
describe("Dialog component: Focus lock tests", function () {
|
|
107
82
|
test("Close action: when there's no focusable content, the focus never leaves the close action (unless you click outside)", function () {
|
|
108
83
|
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, "example-dialog")),
|
|
109
|
-
|
|
110
|
-
|
|
84
|
+
getByRole = _render6.getByRole;
|
|
111
85
|
var button = getByRole("button");
|
|
112
86
|
var dialog = getByRole("dialog");
|
|
113
87
|
expect(document.activeElement).toEqual(button);
|
|
114
88
|
expect(button.getAttribute("aria-label")).toBe("Close dialog");
|
|
115
|
-
|
|
116
89
|
_userEvent["default"].tab();
|
|
117
|
-
|
|
118
90
|
expect(document.activeElement).toEqual(button);
|
|
119
|
-
|
|
120
91
|
_react2.fireEvent.keyDown(dialog, {
|
|
121
92
|
key: "Tab",
|
|
122
93
|
shiftKey: true
|
|
123
94
|
});
|
|
124
|
-
|
|
125
95
|
expect(document.activeElement).toEqual(button);
|
|
126
96
|
});
|
|
127
97
|
test("Autofocus with Button component", function () {
|
|
128
98
|
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
99
|
+
label: "Accept"
|
|
100
|
+
}))),
|
|
101
|
+
getAllByRole = _render7.getAllByRole;
|
|
133
102
|
var button = getAllByRole("button")[0];
|
|
134
103
|
expect(document.activeElement).toEqual(button);
|
|
135
104
|
expect(button.getAttribute("aria-label")).not.toBe("Close dialog");
|
|
136
105
|
});
|
|
137
106
|
test("Autofocus with Card component", function () {
|
|
138
107
|
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Card["default"], {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
108
|
+
linkHref: "https://developer.dxc.com/halstack/next/components/card/"
|
|
109
|
+
}, "example-card"))),
|
|
110
|
+
getByRole = _render8.getByRole;
|
|
143
111
|
var card = getByRole("link");
|
|
144
112
|
expect(document.activeElement).toEqual(card);
|
|
145
113
|
});
|
|
146
114
|
test("Autofocus with Checkbox component", function () {
|
|
147
115
|
var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
116
|
+
label: "Name"
|
|
117
|
+
}))),
|
|
118
|
+
getByRole = _render9.getByRole;
|
|
152
119
|
var checkbox = getByRole("checkbox");
|
|
153
120
|
expect(document.activeElement).toEqual(checkbox);
|
|
154
121
|
});
|
|
155
122
|
test("Autofocus with Link component", function () {
|
|
156
123
|
var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, "This is a text with a ", /*#__PURE__*/_react["default"].createElement(_Link["default"], {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
124
|
+
href: "#"
|
|
125
|
+
}, "Link"), " to another page.")),
|
|
126
|
+
getByRole = _render10.getByRole;
|
|
161
127
|
var link = getByRole("link");
|
|
162
128
|
expect(document.activeElement).toEqual(link);
|
|
163
129
|
});
|
|
164
130
|
test("Autofocus with RadioGroup component", function () {
|
|
165
131
|
var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
132
|
+
label: "Example",
|
|
133
|
+
options: options
|
|
134
|
+
}))),
|
|
135
|
+
getAllByRole = _render11.getAllByRole;
|
|
171
136
|
var checkedRadio = getAllByRole("radio")[0];
|
|
172
137
|
expect(document.activeElement).toEqual(checkedRadio);
|
|
173
138
|
});
|
|
174
139
|
test("Autofocus with Select component", function () {
|
|
175
140
|
var _render12 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
141
|
+
label: "Country",
|
|
142
|
+
options: options
|
|
143
|
+
}))),
|
|
144
|
+
getByRole = _render12.getByRole;
|
|
181
145
|
var select = getByRole("combobox");
|
|
182
146
|
expect(document.activeElement).toEqual(select);
|
|
183
147
|
});
|
|
184
148
|
test("Autofocus with Slider component", function () {
|
|
185
149
|
var _render13 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
150
|
+
label: "label",
|
|
151
|
+
minValue: 0,
|
|
152
|
+
maxValue: 100,
|
|
153
|
+
showLimitsValues: true
|
|
154
|
+
}))),
|
|
155
|
+
getByRole = _render13.getByRole;
|
|
193
156
|
var slider = getByRole("slider");
|
|
194
157
|
expect(document.activeElement).toEqual(slider);
|
|
195
158
|
});
|
|
196
159
|
test("Autofocus with Switch component", function () {
|
|
197
160
|
var _render14 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
161
|
+
label: "Example"
|
|
162
|
+
}))),
|
|
163
|
+
getByRole = _render14.getByRole;
|
|
202
164
|
var switchButton = getByRole("switch");
|
|
203
165
|
expect(document.activeElement).toEqual(switchButton);
|
|
204
166
|
});
|
|
205
167
|
test("Autofocus with Text Input component", function () {
|
|
206
168
|
var _render15 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
169
|
+
label: "Name"
|
|
170
|
+
}))),
|
|
171
|
+
getByRole = _render15.getByRole;
|
|
211
172
|
var input = getByRole("textbox");
|
|
212
173
|
expect(document.activeElement).toEqual(input);
|
|
213
174
|
});
|
|
214
175
|
test("Autofocus with Textarea component", function () {
|
|
215
176
|
var _render16 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
177
|
+
label: "Name"
|
|
178
|
+
}))),
|
|
179
|
+
getByRole = _render16.getByRole;
|
|
220
180
|
var textarea = getByRole("textbox");
|
|
221
181
|
expect(document.activeElement).toEqual(textarea);
|
|
222
182
|
});
|
|
223
183
|
test("Negative tabindex elements are not automatically focused, even if it is enabled and a valid focusable item (programatically and by click)", function () {
|
|
224
184
|
var _render17 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement("input", {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
185
|
+
label: "Name",
|
|
186
|
+
tabIndex: -1
|
|
187
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
188
|
+
label: "Name"
|
|
189
|
+
}))),
|
|
190
|
+
getAllByRole = _render17.getAllByRole,
|
|
191
|
+
getByRole = _render17.getByRole;
|
|
233
192
|
var inputs = getAllByRole("textbox");
|
|
234
193
|
var button = getByRole("button");
|
|
235
194
|
expect(document.activeElement).toEqual(inputs[1]);
|
|
236
|
-
|
|
237
195
|
_userEvent["default"].tab();
|
|
238
|
-
|
|
239
196
|
expect(document.activeElement).toEqual(button);
|
|
240
|
-
|
|
241
197
|
_userEvent["default"].tab();
|
|
242
|
-
|
|
243
198
|
expect(document.activeElement).toEqual(inputs[1]);
|
|
244
199
|
});
|
|
245
200
|
test("Focus jumps disabled components and negative tabIndexes when autofocusing first item", function () {
|
|
246
201
|
var _render18 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
202
|
+
label: "Accept",
|
|
203
|
+
disabled: true
|
|
204
|
+
}), /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
205
|
+
label: "Older age",
|
|
206
|
+
disabled: true
|
|
207
|
+
}), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
208
|
+
label: "Country",
|
|
209
|
+
options: options,
|
|
210
|
+
disabled: true
|
|
211
|
+
}), /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
212
|
+
label: "Country",
|
|
213
|
+
options: options,
|
|
214
|
+
disabled: true
|
|
215
|
+
}), /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
216
|
+
label: "Name",
|
|
217
|
+
disabled: true
|
|
218
|
+
}), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
219
|
+
label: "Accept",
|
|
220
|
+
tabIndex: -1
|
|
221
|
+
}), /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
222
|
+
label: "Older age",
|
|
223
|
+
tabIndex: -1
|
|
224
|
+
}), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
225
|
+
label: "Country",
|
|
226
|
+
options: options,
|
|
227
|
+
tabIndex: -1
|
|
228
|
+
}), /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
229
|
+
label: "Country",
|
|
230
|
+
options: options,
|
|
231
|
+
tabIndex: -1
|
|
232
|
+
}), /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
233
|
+
label: "Name",
|
|
234
|
+
tabIndex: -1
|
|
235
|
+
}), /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
236
|
+
label: "Description"
|
|
237
|
+
}))),
|
|
238
|
+
getAllByRole = _render18.getAllByRole;
|
|
285
239
|
var textarea = getAllByRole("textbox")[2];
|
|
286
240
|
expect(document.activeElement).toEqual(textarea);
|
|
287
241
|
});
|
|
288
242
|
test("Focus jumps from last element to the first", function () {
|
|
289
243
|
var _render19 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
244
|
+
label: "Accept",
|
|
245
|
+
disabled: true
|
|
246
|
+
}), /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
247
|
+
label: "Name"
|
|
248
|
+
}), /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
|
|
249
|
+
label: "Name",
|
|
250
|
+
options: options
|
|
251
|
+
}))),
|
|
252
|
+
getByRole = _render19.getByRole;
|
|
300
253
|
var closeAction = getByRole("button");
|
|
301
254
|
var textarea = getByRole("textbox");
|
|
302
255
|
expect(document.activeElement).toEqual(textarea);
|
|
303
|
-
|
|
304
256
|
_userEvent["default"].tab();
|
|
305
|
-
|
|
306
257
|
_userEvent["default"].tab();
|
|
307
|
-
|
|
308
258
|
expect(document.activeElement).toEqual(closeAction);
|
|
309
|
-
|
|
310
259
|
_userEvent["default"].tab();
|
|
311
|
-
|
|
312
260
|
expect(document.activeElement).toEqual(textarea);
|
|
313
261
|
});
|
|
314
262
|
test("'display: none;', 'visibility: hidden;' and 'type = 'hidden'' elements are never autofocused", function () {
|
|
315
263
|
var _render20 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Dialog["default"], null, /*#__PURE__*/_react["default"].createElement("input", {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
264
|
+
label: "Name",
|
|
265
|
+
style: {
|
|
266
|
+
display: "none"
|
|
267
|
+
}
|
|
268
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
269
|
+
label: "Name",
|
|
270
|
+
style: {
|
|
271
|
+
visibility: "hidden"
|
|
272
|
+
}
|
|
273
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
274
|
+
type: "hidden",
|
|
275
|
+
name: "example"
|
|
276
|
+
}))),
|
|
277
|
+
getByRole = _render20.getByRole;
|
|
331
278
|
var closeAction = getByRole("button");
|
|
332
279
|
expect(document.activeElement).toEqual(closeAction);
|
|
333
|
-
|
|
334
280
|
_userEvent["default"].tab();
|
|
335
|
-
|
|
336
281
|
expect(document.activeElement).toEqual(closeAction);
|
|
337
282
|
});
|
|
338
283
|
test("Focus gets trapped in the Dialog when there are not focusable elements inside until it is closed", function () {
|
|
339
284
|
var _render21 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
285
|
+
label: "Name"
|
|
286
|
+
}), /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
287
|
+
isCloseVisible: false
|
|
288
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", null, "Policy agreement"), /*#__PURE__*/_react["default"].createElement("p", null, "Sample text.")), /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
289
|
+
label: "Surname"
|
|
290
|
+
}))),
|
|
291
|
+
getAllByRole = _render21.getAllByRole;
|
|
348
292
|
var inputs = getAllByRole("textbox");
|
|
349
293
|
var dialog = getAllByRole("dialog")[0];
|
|
350
|
-
|
|
351
294
|
_userEvent["default"].tab();
|
|
352
|
-
|
|
353
295
|
_userEvent["default"].tab();
|
|
354
|
-
|
|
355
296
|
expect(document.activeElement).not.toEqual(inputs[1]);
|
|
356
|
-
|
|
357
297
|
_react2.fireEvent.keyDown(dialog, {
|
|
358
298
|
key: "Tab",
|
|
359
299
|
shiftKey: true
|
|
360
300
|
});
|
|
361
|
-
|
|
362
301
|
_react2.fireEvent.keyDown(dialog, {
|
|
363
302
|
key: "Tab",
|
|
364
303
|
shiftKey: true
|
|
365
304
|
});
|
|
366
|
-
|
|
367
305
|
expect(document.activeElement).not.toEqual(inputs[0]);
|
|
368
306
|
});
|
|
369
307
|
});
|
package/dialog/types.d.ts
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
2
|
+
type Props = {
|
|
3
3
|
/**
|
|
4
|
-
* If true, the close
|
|
4
|
+
* If true, the close button will be visible.
|
|
5
5
|
*/
|
|
6
6
|
isCloseVisible?: boolean;
|
|
7
7
|
/**
|
|
8
|
-
* This function will be called when the user clicks the close
|
|
9
|
-
* The responsibility of hiding the
|
|
8
|
+
* This function will be called when the user clicks the close button.
|
|
9
|
+
* The responsibility of hiding the dialog lies with the user.
|
|
10
10
|
*/
|
|
11
11
|
onCloseClick?: () => void;
|
|
12
|
+
/**
|
|
13
|
+
* This function will be called when the user clicks on the background of the modal.
|
|
14
|
+
* The responsibility of hiding the dialog lies with the user.
|
|
15
|
+
*/
|
|
16
|
+
onBackgroundClick?: () => void;
|
|
12
17
|
/**
|
|
13
18
|
* If true, the dialog will be displayed over a darker background that covers the content behind.
|
|
14
19
|
*/
|
|
15
20
|
overlay?: boolean;
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
22
|
+
* Area within the dialog that can be used to render custom content.
|
|
23
|
+
* We strongly encourage users to not change the
|
|
24
|
+
* tabindex of the inner components or elements. This
|
|
25
|
+
* can lead to unpredictable behaviour for keyboard users, affecting
|
|
26
|
+
* the order of focus and focus locking within the dialog.
|
|
19
27
|
*/
|
|
20
|
-
|
|
28
|
+
children: React.ReactNode;
|
|
21
29
|
/**
|
|
22
|
-
* Value of the tabindex
|
|
30
|
+
* Value of the tabindex applied to the close button.
|
|
31
|
+
* Note that values greater than 0 are strongly discouraged. It can
|
|
32
|
+
* lead to unexpected behaviours with the focus within the dialog.
|
|
23
33
|
*/
|
|
24
34
|
tabIndex?: number;
|
|
25
|
-
/**
|
|
26
|
-
* The area inside the dialog. This area can be used to render
|
|
27
|
-
* custom content.
|
|
28
|
-
*/
|
|
29
|
-
children: React.ReactNode;
|
|
30
35
|
};
|
|
31
36
|
export default Props;
|