@dxc-technology/halstack-react 0.0.0-7550efd → 0.0.0-757bc34
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 +3 -3
- package/BackgroundColorContext.js +6 -18
- package/HalstackContext.d.ts +1347 -6
- package/HalstackContext.js +125 -110
- package/README.md +47 -0
- package/accordion/Accordion.d.ts +1 -1
- package/accordion/Accordion.js +116 -157
- package/accordion/Accordion.stories.tsx +101 -125
- package/accordion/Accordion.test.js +25 -41
- package/accordion/types.d.ts +5 -16
- package/accordion-group/AccordionGroup.d.ts +4 -3
- package/accordion-group/AccordionGroup.js +30 -98
- package/accordion-group/AccordionGroup.stories.tsx +94 -67
- package/accordion-group/AccordionGroup.test.js +52 -105
- package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
- package/accordion-group/AccordionGroupAccordion.js +31 -0
- package/accordion-group/types.d.ts +11 -16
- package/alert/Alert.js +19 -55
- package/alert/Alert.stories.tsx +28 -0
- package/alert/Alert.test.js +29 -46
- 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/Bleed.stories.tsx +1 -0
- package/bleed/types.d.ts +2 -2
- package/box/Box.d.ts +1 -1
- package/box/Box.js +18 -56
- package/box/Box.stories.tsx +38 -51
- package/box/Box.test.js +2 -7
- package/box/types.d.ts +3 -14
- package/bulleted-list/BulletedList.js +11 -35
- package/bulleted-list/BulletedList.stories.tsx +8 -92
- package/bulleted-list/types.d.ts +32 -5
- package/button/Button.d.ts +1 -1
- package/button/Button.js +65 -100
- package/button/Button.stories.tsx +152 -91
- package/button/Button.test.js +18 -17
- package/button/types.d.ts +8 -4
- package/card/Card.d.ts +1 -1
- package/card/Card.js +48 -89
- package/card/Card.stories.tsx +12 -42
- package/card/Card.test.js +11 -22
- package/card/types.d.ts +6 -11
- package/checkbox/Checkbox.d.ts +2 -2
- package/checkbox/Checkbox.js +141 -178
- package/checkbox/Checkbox.stories.tsx +128 -94
- package/checkbox/Checkbox.test.js +160 -39
- package/checkbox/types.d.ts +11 -3
- package/chip/Chip.js +39 -79
- package/chip/Chip.stories.tsx +121 -26
- package/chip/Chip.test.js +16 -31
- package/chip/types.d.ts +4 -4
- package/common/OpenSans.css +68 -80
- package/common/coreTokens.d.ts +237 -0
- package/common/coreTokens.js +184 -0
- package/common/utils.d.ts +1 -0
- package/common/utils.js +6 -12
- package/common/variables.d.ts +1499 -0
- package/common/variables.js +1008 -1145
- package/container/Container.d.ts +4 -0
- package/container/Container.js +198 -0
- package/container/Container.stories.tsx +229 -0
- package/container/types.d.ts +74 -0
- package/date-input/Calendar.d.ts +4 -0
- package/date-input/Calendar.js +214 -0
- package/date-input/DateInput.js +150 -299
- package/date-input/DateInput.stories.tsx +203 -56
- package/date-input/DateInput.test.js +700 -371
- package/date-input/DatePicker.d.ts +4 -0
- package/date-input/DatePicker.js +115 -0
- package/date-input/Icons.d.ts +6 -0
- package/date-input/Icons.js +58 -0
- package/date-input/YearPicker.d.ts +4 -0
- package/date-input/YearPicker.js +100 -0
- package/date-input/types.d.ts +72 -15
- package/dialog/Dialog.d.ts +1 -1
- package/dialog/Dialog.js +61 -116
- package/dialog/Dialog.stories.tsx +320 -166
- package/dialog/Dialog.test.js +269 -32
- package/dialog/types.d.ts +18 -25
- package/dropdown/Dropdown.js +72 -125
- package/dropdown/Dropdown.stories.tsx +210 -84
- package/dropdown/Dropdown.test.js +410 -402
- package/dropdown/DropdownMenu.js +20 -37
- package/dropdown/DropdownMenuItem.js +10 -35
- package/dropdown/types.d.ts +17 -19
- package/file-input/FileInput.d.ts +2 -2
- package/file-input/FileInput.js +241 -355
- package/file-input/FileInput.stories.tsx +123 -12
- package/file-input/FileInput.test.js +369 -367
- package/file-input/FileItem.d.ts +4 -14
- package/file-input/FileItem.js +45 -96
- package/file-input/types.d.ts +25 -8
- package/flex/Flex.d.ts +1 -1
- package/flex/Flex.js +40 -40
- package/flex/Flex.stories.tsx +35 -26
- package/flex/types.d.ts +84 -8
- package/footer/Footer.d.ts +1 -1
- package/footer/Footer.js +53 -104
- package/footer/Footer.stories.tsx +41 -19
- package/footer/Footer.test.js +33 -57
- package/footer/Icons.d.ts +2 -2
- package/footer/Icons.js +2 -7
- package/footer/types.d.ts +21 -28
- package/grid/Grid.d.ts +7 -0
- package/grid/Grid.js +76 -0
- package/grid/Grid.stories.tsx +219 -0
- package/grid/types.d.ts +115 -0
- package/header/Header.d.ts +4 -3
- package/header/Header.js +41 -116
- package/header/Header.stories.tsx +118 -39
- package/header/Header.test.js +13 -26
- package/header/Icons.d.ts +2 -2
- package/header/Icons.js +2 -7
- package/header/types.d.ts +5 -19
- package/heading/Heading.js +10 -32
- package/heading/Heading.test.js +71 -88
- package/heading/types.d.ts +7 -7
- package/image/Image.d.ts +4 -0
- package/image/Image.js +70 -0
- package/image/Image.stories.tsx +127 -0
- package/image/types.d.ts +72 -0
- package/inset/Inset.js +13 -21
- package/inset/Inset.stories.tsx +2 -1
- package/inset/types.d.ts +2 -2
- package/layout/ApplicationLayout.d.ts +5 -5
- package/layout/ApplicationLayout.js +29 -66
- package/layout/ApplicationLayout.stories.tsx +1 -1
- package/layout/Icons.d.ts +8 -5
- package/layout/Icons.js +51 -59
- package/layout/SidenavContext.d.ts +1 -1
- package/layout/SidenavContext.js +3 -9
- package/layout/types.d.ts +5 -6
- package/link/Link.js +25 -46
- package/link/Link.stories.tsx +60 -0
- package/link/Link.test.js +24 -44
- package/link/types.d.ts +14 -14
- package/main.d.ts +6 -3
- package/main.js +25 -51
- package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
- package/{tabs-nav → nav-tabs}/NavTabs.js +17 -52
- package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +111 -7
- package/{tabs-nav → nav-tabs}/NavTabs.test.js +37 -44
- package/nav-tabs/Tab.js +117 -0
- package/{tabs-nav → nav-tabs}/types.d.ts +14 -15
- package/nav-tabs/types.js +5 -0
- package/number-input/NumberInput.d.ts +7 -0
- package/number-input/NumberInput.js +26 -35
- package/number-input/NumberInput.stories.tsx +42 -26
- package/number-input/NumberInput.test.js +701 -377
- package/number-input/types.d.ts +11 -5
- package/package.json +37 -40
- package/paginator/Icons.d.ts +5 -0
- package/paginator/Icons.js +21 -47
- package/paginator/Paginator.js +22 -55
- package/paginator/Paginator.stories.tsx +24 -0
- package/paginator/Paginator.test.js +253 -226
- package/paginator/types.d.ts +3 -3
- package/paragraph/Paragraph.d.ts +3 -4
- package/paragraph/Paragraph.js +6 -17
- package/paragraph/Paragraph.stories.tsx +0 -17
- package/password-input/Icons.d.ts +6 -0
- package/password-input/Icons.js +35 -0
- package/password-input/PasswordInput.js +57 -126
- package/password-input/PasswordInput.stories.tsx +1 -32
- package/password-input/PasswordInput.test.js +160 -142
- package/password-input/types.d.ts +8 -7
- package/progress-bar/ProgressBar.d.ts +2 -2
- package/progress-bar/ProgressBar.js +21 -47
- package/progress-bar/{ProgressBar.stories.jsx → ProgressBar.stories.tsx} +36 -3
- package/progress-bar/ProgressBar.test.js +36 -53
- package/progress-bar/types.d.ts +4 -3
- package/quick-nav/QuickNav.js +15 -39
- package/quick-nav/QuickNav.stories.tsx +112 -20
- package/quick-nav/types.d.ts +10 -10
- package/radio-group/Radio.d.ts +1 -1
- package/radio-group/Radio.js +59 -76
- package/radio-group/RadioGroup.js +59 -105
- package/radio-group/RadioGroup.stories.tsx +132 -18
- package/radio-group/RadioGroup.test.js +518 -457
- package/radio-group/types.d.ts +10 -10
- package/resultset-table/Icons.d.ts +7 -0
- package/resultset-table/Icons.js +47 -0
- package/resultset-table/ResultsetTable.js +159 -0
- package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +50 -25
- package/{resultsetTable → resultset-table}/ResultsetTable.test.js +101 -144
- package/{resultsetTable → resultset-table}/types.d.ts +7 -7
- package/resultset-table/types.js +5 -0
- package/select/Icons.d.ts +7 -7
- package/select/Icons.js +1 -5
- package/select/Listbox.d.ts +1 -1
- package/select/Listbox.js +17 -73
- package/select/Option.js +20 -50
- package/select/Select.js +95 -156
- package/select/Select.stories.tsx +497 -153
- package/select/Select.test.js +1934 -1775
- package/select/types.d.ts +16 -17
- package/sidenav/Icons.d.ts +7 -0
- package/sidenav/Icons.js +47 -0
- package/sidenav/Sidenav.d.ts +2 -2
- package/sidenav/Sidenav.js +80 -149
- package/sidenav/Sidenav.stories.tsx +165 -63
- package/sidenav/Sidenav.test.js +3 -10
- package/sidenav/types.d.ts +31 -28
- package/slider/Slider.d.ts +2 -2
- package/slider/Slider.js +57 -96
- package/slider/Slider.test.js +108 -104
- package/slider/types.d.ts +7 -3
- package/spinner/Spinner.js +27 -63
- package/spinner/{Spinner.stories.jsx → Spinner.stories.tsx} +53 -27
- package/spinner/Spinner.test.js +26 -35
- package/spinner/types.d.ts +3 -3
- package/switch/Switch.d.ts +3 -3
- package/switch/Switch.js +112 -144
- package/switch/Switch.stories.tsx +33 -34
- package/switch/Switch.test.js +70 -102
- package/switch/types.d.ts +8 -3
- package/table/Table.js +7 -26
- package/table/{Table.stories.jsx → Table.stories.tsx} +80 -1
- package/table/Table.test.js +3 -8
- package/table/types.d.ts +8 -8
- package/tabs/Tab.js +22 -44
- package/tabs/Tabs.js +59 -141
- package/tabs/Tabs.stories.tsx +45 -5
- package/tabs/Tabs.test.js +66 -123
- package/tabs/types.d.ts +19 -19
- package/tag/Tag.js +29 -61
- package/tag/Tag.stories.tsx +14 -1
- package/tag/Tag.test.js +20 -31
- package/tag/types.d.ts +7 -7
- package/text-input/Icons.d.ts +8 -0
- package/text-input/Icons.js +56 -0
- package/text-input/Suggestion.js +40 -28
- package/text-input/Suggestions.d.ts +4 -0
- package/text-input/Suggestions.js +89 -0
- package/text-input/TextInput.js +272 -441
- package/text-input/TextInput.stories.tsx +266 -274
- package/text-input/TextInput.test.js +1402 -1375
- package/text-input/types.d.ts +43 -16
- package/textarea/Textarea.js +63 -100
- package/textarea/Textarea.stories.tsx +175 -0
- package/textarea/Textarea.test.js +152 -183
- package/textarea/types.d.ts +9 -5
- package/toggle-group/ToggleGroup.d.ts +2 -2
- package/toggle-group/ToggleGroup.js +95 -106
- package/toggle-group/ToggleGroup.stories.tsx +49 -4
- package/toggle-group/ToggleGroup.test.js +69 -88
- package/toggle-group/types.d.ts +26 -17
- package/typography/Typography.d.ts +2 -2
- package/typography/Typography.js +15 -123
- package/typography/Typography.stories.tsx +1 -1
- package/typography/types.d.ts +1 -1
- package/useTheme.d.ts +1251 -1
- package/useTheme.js +2 -9
- package/useTranslatedLabels.d.ts +84 -1
- package/useTranslatedLabels.js +1 -7
- package/utils/BaseTypography.d.ts +21 -0
- package/utils/BaseTypography.js +94 -0
- package/utils/FocusLock.d.ts +13 -0
- package/utils/FocusLock.js +121 -0
- package/wizard/Wizard.js +16 -51
- package/wizard/Wizard.stories.tsx +20 -0
- package/wizard/Wizard.test.js +54 -81
- package/wizard/types.d.ts +8 -9
- package/card/ice-cream.jpg +0 -0
- package/common/RequiredComponent.js +0 -32
- package/number-input/NumberInputContext.d.ts +0 -4
- package/number-input/NumberInputContext.js +0 -19
- package/number-input/numberInputContextTypes.d.ts +0 -19
- package/resultsetTable/ResultsetTable.js +0 -254
- package/slider/Slider.stories.tsx +0 -183
- package/tabs-nav/Tab.js +0 -130
- package/textarea/Textarea.stories.jsx +0 -157
- /package/{resultsetTable → container}/types.js +0 -0
- /package/{tabs-nav → grid}/types.js +0 -0
- /package/{number-input/numberInputContextTypes.js → image/types.js} +0 -0
- /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
- /package/{resultsetTable → resultset-table}/ResultsetTable.d.ts +0 -0
package/tabs/Tabs.stories.tsx
CHANGED
|
@@ -2,6 +2,7 @@ import React from "react";
|
|
|
2
2
|
import DxcTabs from "./Tabs";
|
|
3
3
|
import Title from "../../.storybook/components/Title";
|
|
4
4
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
5
|
+
import { HalstackProvider } from "../HalstackContext";
|
|
5
6
|
|
|
6
7
|
export default {
|
|
7
8
|
title: "Tabs",
|
|
@@ -9,9 +10,8 @@ export default {
|
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
const iconSVG = (
|
|
12
|
-
<svg viewBox="0 0
|
|
13
|
-
<path d="
|
|
14
|
-
<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" />
|
|
13
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" height="20" width="20" fill="currentColor">
|
|
14
|
+
<path d="m10 17-1.042-.938q-2.083-1.854-3.437-3.177-1.354-1.323-2.136-2.354Q2.604 9.5 2.302 8.646 2 7.792 2 6.896q0-1.854 1.271-3.125T6.396 2.5q1.021 0 1.979.438.958.437 1.625 1.229.667-.792 1.625-1.229.958-.438 1.979-.438 1.854 0 3.125 1.271T18 6.896q0 .896-.292 1.729-.291.833-1.073 1.854-.781 1.021-2.145 2.365-1.365 1.344-3.49 3.26Zm0-2.021q1.938-1.729 3.188-2.948 1.25-1.219 1.989-2.125.74-.906 1.031-1.614.292-.709.292-1.396 0-1.229-.833-2.063Q14.833 4 13.604 4q-.729 0-1.364.302-.636.302-1.094.844L10.417 6h-.834l-.729-.854q-.458-.542-1.114-.844Q7.083 4 6.396 4q-1.229 0-2.063.833-.833.834-.833 2.063 0 .687.271 1.364.271.678.989 1.573.719.896 1.98 2.125Q8 13.188 10 14.979Zm0-5.5Z" />
|
|
15
15
|
</svg>
|
|
16
16
|
);
|
|
17
17
|
|
|
@@ -74,10 +74,20 @@ const tabsNotification = tabs.map((tab, index) => ({
|
|
|
74
74
|
notificationNumber: (index === 0 && true) || (index === 1 && 5) || (index === 2 && 200),
|
|
75
75
|
}));
|
|
76
76
|
|
|
77
|
-
const tabsIcon = tabs.map((tab) =>
|
|
77
|
+
const tabsIcon = tabs.map((tab, index) =>
|
|
78
|
+
index <= tabs.length / 2
|
|
79
|
+
? { ...tab, icon: "https://cdn-icons-png.flaticon.com/512/5039/5039041.png" }
|
|
80
|
+
: { ...tab, icon: iconSVG }
|
|
81
|
+
);
|
|
78
82
|
|
|
79
83
|
const tabsNotificationIcon = tabsNotification.map((tab) => ({ ...tab, icon: iconSVG }));
|
|
80
84
|
|
|
85
|
+
const opinionatedTheme = {
|
|
86
|
+
tabs: {
|
|
87
|
+
baseColor: "#5f249f",
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
81
91
|
export const Chromatic = () => (
|
|
82
92
|
<>
|
|
83
93
|
<ExampleContainer>
|
|
@@ -152,7 +162,37 @@ export const Chromatic = () => (
|
|
|
152
162
|
<ExampleContainer>
|
|
153
163
|
<Title title="Xxlarge margin" theme="light" level={4} />
|
|
154
164
|
<DxcTabs tabs={tabs} margin="xxlarge" />
|
|
155
|
-
|
|
165
|
+
</ExampleContainer>
|
|
166
|
+
<Title title="Opinionated theme" theme="light" level={2} />
|
|
167
|
+
<ExampleContainer>
|
|
168
|
+
<Title title="With icon and notification" theme="light" level={4} />
|
|
169
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
170
|
+
<DxcTabs tabs={tabsNotificationIcon} />
|
|
171
|
+
</HalstackProvider>
|
|
172
|
+
</ExampleContainer>
|
|
173
|
+
<ExampleContainer>
|
|
174
|
+
<Title title="Disabled" theme="light" level={4} />
|
|
175
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
176
|
+
<DxcTabs activeTabIndex={0} tabs={disabledTabs} />
|
|
177
|
+
</HalstackProvider>
|
|
178
|
+
</ExampleContainer>
|
|
179
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
180
|
+
<Title title="Hovered" theme="light" level={4} />
|
|
181
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
182
|
+
<DxcTabs tabs={tabs} />
|
|
183
|
+
</HalstackProvider>
|
|
184
|
+
</ExampleContainer>
|
|
185
|
+
<ExampleContainer pseudoState="pseudo-focus">
|
|
186
|
+
<Title title="Focused" theme="light" level={4} />
|
|
187
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
188
|
+
<DxcTabs tabs={tabs} />
|
|
189
|
+
</HalstackProvider>
|
|
190
|
+
</ExampleContainer>
|
|
191
|
+
<ExampleContainer pseudoState="pseudo-active">
|
|
192
|
+
<Title title="Actived" theme="light" level={4} />
|
|
193
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
194
|
+
<DxcTabs tabs={tabs} />
|
|
195
|
+
</HalstackProvider>
|
|
156
196
|
</ExampleContainer>
|
|
157
197
|
</>
|
|
158
198
|
);
|
package/tabs/Tabs.test.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
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
|
-
var _Tabs = _interopRequireDefault(require("./Tabs"));
|
|
10
|
-
|
|
6
|
+
var _Tabs = _interopRequireDefault(require("./Tabs.tsx"));
|
|
11
7
|
var sampleTabs = [{
|
|
12
8
|
label: "Tab-1"
|
|
13
9
|
}, {
|
|
@@ -17,13 +13,13 @@ var sampleTabs = [{
|
|
|
17
13
|
}];
|
|
18
14
|
var sampleTabsWithBadge = [{
|
|
19
15
|
label: "Tab-1",
|
|
20
|
-
notificationNumber:
|
|
16
|
+
notificationNumber: 10
|
|
21
17
|
}, {
|
|
22
18
|
label: "Tab-2",
|
|
23
|
-
notificationNumber:
|
|
19
|
+
notificationNumber: 20
|
|
24
20
|
}, {
|
|
25
21
|
label: "Tab-3",
|
|
26
|
-
notificationNumber:
|
|
22
|
+
notificationNumber: 101
|
|
27
23
|
}];
|
|
28
24
|
var sampleTabsMiddleDisabled = [{
|
|
29
25
|
label: "Tab-1"
|
|
@@ -45,11 +41,10 @@ var sampleTabsLastTabNonDisabled = [{
|
|
|
45
41
|
describe("Tabs component tests", function () {
|
|
46
42
|
test("Tabs render with correct labels", function () {
|
|
47
43
|
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
tabs: sampleTabs
|
|
45
|
+
})),
|
|
46
|
+
getByText = _render.getByText,
|
|
47
|
+
getAllByRole = _render.getAllByRole;
|
|
53
48
|
var tabs = getAllByRole("tab");
|
|
54
49
|
expect(getByText("Tab-1")).toBeTruthy();
|
|
55
50
|
expect(getByText("Tab-2")).toBeTruthy();
|
|
@@ -60,21 +55,19 @@ describe("Tabs component tests", function () {
|
|
|
60
55
|
});
|
|
61
56
|
test("Tabs render with correct labels and badges", function () {
|
|
62
57
|
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
tabs: sampleTabsWithBadge
|
|
59
|
+
})),
|
|
60
|
+
getByText = _render2.getByText;
|
|
67
61
|
expect(getByText("10")).toBeTruthy();
|
|
68
62
|
expect(getByText("20")).toBeTruthy();
|
|
69
63
|
expect(getByText("+99")).toBeTruthy();
|
|
70
64
|
});
|
|
71
65
|
test("Tabs render with an initially active tab", function () {
|
|
72
66
|
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
defaultActiveTabIndex: 2,
|
|
68
|
+
tabs: sampleTabsWithBadge
|
|
69
|
+
})),
|
|
70
|
+
getAllByRole = _render3.getAllByRole;
|
|
78
71
|
var tabs = getAllByRole("tab");
|
|
79
72
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
80
73
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
@@ -82,60 +75,52 @@ describe("Tabs component tests", function () {
|
|
|
82
75
|
});
|
|
83
76
|
test("Tabs render with correct icons", function () {
|
|
84
77
|
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
78
|
+
tabs: [{
|
|
79
|
+
label: "Tab-1",
|
|
80
|
+
icon: "/testIcon1.png"
|
|
81
|
+
}, {
|
|
82
|
+
label: "Tab-2",
|
|
83
|
+
icon: "/testIcon2.png"
|
|
84
|
+
}, {
|
|
85
|
+
label: "Tab-3",
|
|
86
|
+
icon: "/testIcon3.png"
|
|
87
|
+
}]
|
|
88
|
+
})),
|
|
89
|
+
getAllByRole = _render4.getAllByRole;
|
|
98
90
|
expect(getAllByRole("img")[0].getAttribute("src")).toBe("/testIcon1.png");
|
|
99
91
|
expect(getAllByRole("img")[1].getAttribute("src")).toBe("/testIcon2.png");
|
|
100
92
|
expect(getAllByRole("img")[2].getAttribute("src")).toBe("/testIcon3.png");
|
|
101
93
|
});
|
|
102
94
|
test("Tabs render with disabled tab", function () {
|
|
103
95
|
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
96
|
+
tabs: [{
|
|
97
|
+
label: "Tab-1",
|
|
98
|
+
isDisabled: true
|
|
99
|
+
}, {
|
|
100
|
+
label: "Tab-2"
|
|
101
|
+
}]
|
|
102
|
+
})),
|
|
103
|
+
getAllByRole = _render5.getAllByRole;
|
|
113
104
|
expect(getAllByRole("tab")[0].hasAttribute("disabled")).toBeTruthy();
|
|
114
105
|
expect(getAllByRole("tab")[1].hasAttribute("disabled")).toBeFalsy();
|
|
115
106
|
});
|
|
116
107
|
test("Uncontrolled tabs", function () {
|
|
117
108
|
var onTabClick = jest.fn();
|
|
118
|
-
|
|
119
109
|
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
110
|
+
tabs: sampleTabs,
|
|
111
|
+
onTabClick: onTabClick
|
|
112
|
+
})),
|
|
113
|
+
getByText = _render6.getByText,
|
|
114
|
+
getAllByRole = _render6.getAllByRole;
|
|
126
115
|
var tabs = getAllByRole("tab");
|
|
127
116
|
var tab1 = getByText("Tab-1");
|
|
128
117
|
var tab2 = getByText("Tab-2");
|
|
129
|
-
|
|
130
118
|
_react2.fireEvent.click(tab2);
|
|
131
|
-
|
|
132
119
|
expect(onTabClick).toHaveBeenCalledWith(1);
|
|
133
120
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
134
121
|
expect(tabs[1].getAttribute("aria-selected")).toBe("true");
|
|
135
122
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
136
|
-
|
|
137
123
|
_react2.fireEvent.click(tab1);
|
|
138
|
-
|
|
139
124
|
expect(onTabClick).toHaveBeenCalledWith(0);
|
|
140
125
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
141
126
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
@@ -143,26 +128,19 @@ describe("Tabs component tests", function () {
|
|
|
143
128
|
});
|
|
144
129
|
test("Controlled tabs", function () {
|
|
145
130
|
var onTabClick = jest.fn();
|
|
146
|
-
|
|
147
131
|
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
getAllByRole = _render7.getAllByRole;
|
|
154
|
-
|
|
132
|
+
tabs: sampleTabs,
|
|
133
|
+
onTabClick: onTabClick,
|
|
134
|
+
activeTabIndex: 0
|
|
135
|
+
})),
|
|
136
|
+
getAllByRole = _render7.getAllByRole;
|
|
155
137
|
var tabs = getAllByRole("tab");
|
|
156
|
-
|
|
157
138
|
_react2.fireEvent.click(tabs[1]);
|
|
158
|
-
|
|
159
139
|
expect(onTabClick).toHaveBeenCalledWith(1);
|
|
160
140
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
161
141
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
162
142
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
163
|
-
|
|
164
143
|
_react2.fireEvent.click(tabs[2]);
|
|
165
|
-
|
|
166
144
|
expect(onTabClick).toHaveBeenCalledWith(2);
|
|
167
145
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
168
146
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
@@ -170,13 +148,11 @@ describe("Tabs component tests", function () {
|
|
|
170
148
|
});
|
|
171
149
|
test("Uncontrolled tabs should have focus in the first non-disabled tab", function () {
|
|
172
150
|
var onTabClick = jest.fn();
|
|
173
|
-
|
|
174
151
|
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
152
|
+
tabs: sampleTabsLastTabNonDisabled,
|
|
153
|
+
onTabClick: onTabClick
|
|
154
|
+
})),
|
|
155
|
+
getAllByRole = _render8.getAllByRole;
|
|
180
156
|
var tabs = getAllByRole("tab");
|
|
181
157
|
expect(tabs[0].hasAttribute("disabled")).toBeTruthy();
|
|
182
158
|
expect(tabs[1].hasAttribute("disabled")).toBeTruthy();
|
|
@@ -187,14 +163,12 @@ describe("Tabs component tests", function () {
|
|
|
187
163
|
});
|
|
188
164
|
test("Controlled tabs with active index in disabled tab should not change focus to the first available tab", function () {
|
|
189
165
|
var onTabClick = jest.fn();
|
|
190
|
-
|
|
191
166
|
var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
167
|
+
tabs: sampleTabsLastTabNonDisabled,
|
|
168
|
+
onTabClick: onTabClick,
|
|
169
|
+
activeTabIndex: 0
|
|
170
|
+
})),
|
|
171
|
+
getAllByRole = _render9.getAllByRole;
|
|
198
172
|
var tabs = getAllByRole("tab");
|
|
199
173
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
200
174
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
@@ -202,9 +176,7 @@ describe("Tabs component tests", function () {
|
|
|
202
176
|
expect(tabs[0].hasAttribute("disabled")).toBeTruthy();
|
|
203
177
|
expect(tabs[1].hasAttribute("disabled")).toBeTruthy();
|
|
204
178
|
expect(tabs[2].hasAttribute("disabled")).toBeFalsy();
|
|
205
|
-
|
|
206
179
|
_react2.fireEvent.click(tabs[2]);
|
|
207
|
-
|
|
208
180
|
expect(onTabClick).toHaveBeenCalledWith(2);
|
|
209
181
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
210
182
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
@@ -215,99 +187,77 @@ describe("Tabs component tests", function () {
|
|
|
215
187
|
});
|
|
216
188
|
test("Select tabs with keyboard event arrows", function () {
|
|
217
189
|
var onTabClick = jest.fn();
|
|
218
|
-
|
|
219
190
|
var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
191
|
+
tabs: sampleTabs,
|
|
192
|
+
onTabClick: onTabClick
|
|
193
|
+
})),
|
|
194
|
+
getByText = _render10.getByText,
|
|
195
|
+
getByRole = _render10.getByRole,
|
|
196
|
+
getAllByRole = _render10.getAllByRole;
|
|
227
197
|
var tabList = getByRole("tablist");
|
|
228
198
|
var tab1 = getByText("Tab-1");
|
|
229
199
|
var tabs = getAllByRole("tab");
|
|
230
|
-
|
|
231
200
|
_react2.fireEvent.click(tab1);
|
|
232
|
-
|
|
233
201
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
234
202
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
235
203
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
236
204
|
expect(onTabClick).toHaveBeenCalledWith(0);
|
|
237
|
-
|
|
238
205
|
_react2.fireEvent.keyDown(tabList, {
|
|
239
206
|
key: "ArrowRight"
|
|
240
207
|
});
|
|
241
|
-
|
|
242
208
|
_react2.fireEvent.keyDown(tabList, {
|
|
243
209
|
key: "Enter"
|
|
244
210
|
});
|
|
245
|
-
|
|
246
211
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
247
212
|
expect(tabs[1].getAttribute("aria-selected")).toBe("true");
|
|
248
213
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
249
214
|
expect(onTabClick).toHaveBeenCalledWith(1);
|
|
250
|
-
|
|
251
215
|
_react2.fireEvent.keyDown(tabList, {
|
|
252
216
|
key: "ArrowRight"
|
|
253
217
|
});
|
|
254
|
-
|
|
255
218
|
_react2.fireEvent.keyDown(tabList, {
|
|
256
219
|
key: "Enter"
|
|
257
220
|
});
|
|
258
|
-
|
|
259
221
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
260
222
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
261
223
|
expect(tabs[2].getAttribute("aria-selected")).toBe("true");
|
|
262
224
|
expect(onTabClick).toHaveBeenCalledWith(2);
|
|
263
|
-
|
|
264
225
|
_react2.fireEvent.keyDown(tabList, {
|
|
265
226
|
key: "ArrowLeft"
|
|
266
227
|
});
|
|
267
|
-
|
|
268
228
|
_react2.fireEvent.keyDown(tabList, {
|
|
269
229
|
key: "Enter"
|
|
270
230
|
});
|
|
271
|
-
|
|
272
231
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
273
232
|
expect(tabs[1].getAttribute("aria-selected")).toBe("true");
|
|
274
233
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
275
234
|
expect(onTabClick).toHaveBeenCalledWith(1);
|
|
276
|
-
|
|
277
235
|
_react2.fireEvent.keyDown(tabList, {
|
|
278
236
|
key: "ArrowLeft"
|
|
279
237
|
});
|
|
280
|
-
|
|
281
238
|
_react2.fireEvent.keyDown(tabList, {
|
|
282
239
|
key: "Enter"
|
|
283
240
|
});
|
|
284
|
-
|
|
285
241
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
286
242
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
287
243
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
288
244
|
expect(onTabClick).toHaveBeenCalledWith(0);
|
|
289
|
-
|
|
290
245
|
_react2.fireEvent.keyDown(tabList, {
|
|
291
246
|
key: "ArrowLeft"
|
|
292
247
|
});
|
|
293
|
-
|
|
294
248
|
_react2.fireEvent.keyDown(tabList, {
|
|
295
249
|
key: "Enter"
|
|
296
250
|
});
|
|
297
|
-
|
|
298
251
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
299
252
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
300
253
|
expect(tabs[2].getAttribute("aria-selected")).toBe("true");
|
|
301
254
|
expect(onTabClick).toHaveBeenCalledWith(2);
|
|
302
|
-
|
|
303
255
|
_react2.fireEvent.keyDown(tabList, {
|
|
304
256
|
key: "ArrowRight"
|
|
305
257
|
});
|
|
306
|
-
|
|
307
258
|
_react2.fireEvent.keyDown(tabList, {
|
|
308
259
|
key: "Enter"
|
|
309
260
|
});
|
|
310
|
-
|
|
311
261
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
312
262
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
313
263
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
@@ -315,34 +265,27 @@ describe("Tabs component tests", function () {
|
|
|
315
265
|
});
|
|
316
266
|
test("Skip disabled tab with keyboard event arrows", function () {
|
|
317
267
|
var onTabClick = jest.fn();
|
|
318
|
-
|
|
319
268
|
var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
269
|
+
tabs: sampleTabsMiddleDisabled,
|
|
270
|
+
onTabClick: onTabClick
|
|
271
|
+
})),
|
|
272
|
+
getByText = _render11.getByText,
|
|
273
|
+
getByRole = _render11.getByRole,
|
|
274
|
+
getAllByRole = _render11.getAllByRole;
|
|
327
275
|
var tabList = getByRole("tablist");
|
|
328
276
|
var tab1 = getByText("Tab-1");
|
|
329
277
|
var tabs = getAllByRole("tab");
|
|
330
|
-
|
|
331
278
|
_react2.fireEvent.click(tab1);
|
|
332
|
-
|
|
333
279
|
expect(tabs[0].getAttribute("aria-selected")).toBe("true");
|
|
334
280
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
335
281
|
expect(tabs[2].getAttribute("aria-selected")).toBe("false");
|
|
336
282
|
expect(onTabClick).toHaveBeenCalledWith(0);
|
|
337
|
-
|
|
338
283
|
_react2.fireEvent.keyDown(tabList, {
|
|
339
284
|
key: "ArrowRight"
|
|
340
285
|
});
|
|
341
|
-
|
|
342
286
|
_react2.fireEvent.keyDown(tabList, {
|
|
343
287
|
key: " "
|
|
344
288
|
});
|
|
345
|
-
|
|
346
289
|
expect(tabs[0].getAttribute("aria-selected")).toBe("false");
|
|
347
290
|
expect(tabs[1].getAttribute("aria-selected")).toBe("false");
|
|
348
291
|
expect(tabs[2].getAttribute("aria-selected")).toBe("true");
|
package/tabs/types.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
|
|
3
|
+
type Margin = {
|
|
4
4
|
top?: Space;
|
|
5
5
|
bottom?: Space;
|
|
6
6
|
left?: Space;
|
|
7
7
|
right?: Space;
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
|
|
10
|
+
type TabCommonProps = {
|
|
11
11
|
/**
|
|
12
12
|
* Whether the tab is disabled or not.
|
|
13
13
|
*/
|
|
@@ -21,7 +21,7 @@ declare type TabCommonProps = {
|
|
|
21
21
|
*/
|
|
22
22
|
notificationNumber?: boolean | number;
|
|
23
23
|
};
|
|
24
|
-
export
|
|
24
|
+
export type TabLabelProps = TabCommonProps & {
|
|
25
25
|
/**
|
|
26
26
|
* Tab label.
|
|
27
27
|
*/
|
|
@@ -31,7 +31,7 @@ export declare type TabLabelProps = TabCommonProps & {
|
|
|
31
31
|
*/
|
|
32
32
|
icon?: string | SVG;
|
|
33
33
|
};
|
|
34
|
-
export
|
|
34
|
+
export type TabIconProps = TabCommonProps & {
|
|
35
35
|
/**
|
|
36
36
|
* Tab label.
|
|
37
37
|
*/
|
|
@@ -41,7 +41,7 @@ export declare type TabIconProps = TabCommonProps & {
|
|
|
41
41
|
*/
|
|
42
42
|
icon: string | SVG;
|
|
43
43
|
};
|
|
44
|
-
export
|
|
44
|
+
export type TabProps = {
|
|
45
45
|
tab: TabLabelProps | TabIconProps;
|
|
46
46
|
active: boolean;
|
|
47
47
|
tabIndex: number;
|
|
@@ -51,15 +51,7 @@ export declare type TabProps = {
|
|
|
51
51
|
onMouseEnter: () => void;
|
|
52
52
|
onMouseLeave: () => void;
|
|
53
53
|
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* An array of objects representing the tabs.
|
|
57
|
-
*/
|
|
58
|
-
tabs: (TabLabelProps | TabIconProps)[];
|
|
59
|
-
/**
|
|
60
|
-
* Whether the icon should appear above or to the left of the label.
|
|
61
|
-
*/
|
|
62
|
-
iconPosition?: "top" | "left";
|
|
54
|
+
type Props = {
|
|
63
55
|
/**
|
|
64
56
|
* Initially active tab, only when it is uncontrolled.
|
|
65
57
|
*/
|
|
@@ -69,23 +61,31 @@ declare type Props = {
|
|
|
69
61
|
* uncontrolled and the active tab will be managed internally by the component.
|
|
70
62
|
*/
|
|
71
63
|
activeTabIndex?: number;
|
|
64
|
+
/**
|
|
65
|
+
* An array of objects representing the tabs.
|
|
66
|
+
*/
|
|
67
|
+
tabs: (TabLabelProps | TabIconProps)[];
|
|
68
|
+
/**
|
|
69
|
+
* Whether the icon should appear above or to the left of the label.
|
|
70
|
+
*/
|
|
71
|
+
iconPosition?: "top" | "left";
|
|
72
72
|
/**
|
|
73
73
|
* This function will be called when the user clicks on a tab. The index of the
|
|
74
74
|
* clicked tab will be passed as a parameter.
|
|
75
75
|
*/
|
|
76
|
-
onTabClick?: (
|
|
76
|
+
onTabClick?: (index: number) => void;
|
|
77
77
|
/**
|
|
78
78
|
* This function will be called when the user hovers a tab.The index of the
|
|
79
79
|
* hovered tab will be passed as a parameter.
|
|
80
80
|
*/
|
|
81
|
-
onTabHover?: (
|
|
81
|
+
onTabHover?: (index: number) => void;
|
|
82
82
|
/**
|
|
83
83
|
* Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
|
|
84
84
|
* You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
|
|
85
85
|
*/
|
|
86
86
|
margin?: Space | Margin;
|
|
87
87
|
/**
|
|
88
|
-
* Value of the tabindex
|
|
88
|
+
* Value of the tabindex attribute applied to each tab.
|
|
89
89
|
*/
|
|
90
90
|
tabIndex?: number;
|
|
91
91
|
};
|