@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.
Files changed (279) hide show
  1. package/BackgroundColorContext.d.ts +3 -3
  2. package/BackgroundColorContext.js +6 -18
  3. package/HalstackContext.d.ts +1347 -6
  4. package/HalstackContext.js +125 -110
  5. package/README.md +47 -0
  6. package/accordion/Accordion.d.ts +1 -1
  7. package/accordion/Accordion.js +116 -157
  8. package/accordion/Accordion.stories.tsx +101 -125
  9. package/accordion/Accordion.test.js +25 -41
  10. package/accordion/types.d.ts +5 -16
  11. package/accordion-group/AccordionGroup.d.ts +4 -3
  12. package/accordion-group/AccordionGroup.js +30 -98
  13. package/accordion-group/AccordionGroup.stories.tsx +94 -67
  14. package/accordion-group/AccordionGroup.test.js +52 -105
  15. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  16. package/accordion-group/AccordionGroupAccordion.js +31 -0
  17. package/accordion-group/types.d.ts +11 -16
  18. package/alert/Alert.js +19 -55
  19. package/alert/Alert.stories.tsx +28 -0
  20. package/alert/Alert.test.js +29 -46
  21. package/alert/types.d.ts +5 -5
  22. package/badge/Badge.js +4 -17
  23. package/badge/types.d.ts +1 -1
  24. package/bleed/Bleed.js +13 -21
  25. package/bleed/Bleed.stories.tsx +1 -0
  26. package/bleed/types.d.ts +2 -2
  27. package/box/Box.d.ts +1 -1
  28. package/box/Box.js +18 -56
  29. package/box/Box.stories.tsx +38 -51
  30. package/box/Box.test.js +2 -7
  31. package/box/types.d.ts +3 -14
  32. package/bulleted-list/BulletedList.js +11 -35
  33. package/bulleted-list/BulletedList.stories.tsx +8 -92
  34. package/bulleted-list/types.d.ts +32 -5
  35. package/button/Button.d.ts +1 -1
  36. package/button/Button.js +65 -100
  37. package/button/Button.stories.tsx +152 -91
  38. package/button/Button.test.js +18 -17
  39. package/button/types.d.ts +8 -4
  40. package/card/Card.d.ts +1 -1
  41. package/card/Card.js +48 -89
  42. package/card/Card.stories.tsx +12 -42
  43. package/card/Card.test.js +11 -22
  44. package/card/types.d.ts +6 -11
  45. package/checkbox/Checkbox.d.ts +2 -2
  46. package/checkbox/Checkbox.js +141 -178
  47. package/checkbox/Checkbox.stories.tsx +128 -94
  48. package/checkbox/Checkbox.test.js +160 -39
  49. package/checkbox/types.d.ts +11 -3
  50. package/chip/Chip.js +39 -79
  51. package/chip/Chip.stories.tsx +121 -26
  52. package/chip/Chip.test.js +16 -31
  53. package/chip/types.d.ts +4 -4
  54. package/common/OpenSans.css +68 -80
  55. package/common/coreTokens.d.ts +237 -0
  56. package/common/coreTokens.js +184 -0
  57. package/common/utils.d.ts +1 -0
  58. package/common/utils.js +6 -12
  59. package/common/variables.d.ts +1499 -0
  60. package/common/variables.js +1008 -1145
  61. package/container/Container.d.ts +4 -0
  62. package/container/Container.js +198 -0
  63. package/container/Container.stories.tsx +229 -0
  64. package/container/types.d.ts +74 -0
  65. package/date-input/Calendar.d.ts +4 -0
  66. package/date-input/Calendar.js +214 -0
  67. package/date-input/DateInput.js +150 -299
  68. package/date-input/DateInput.stories.tsx +203 -56
  69. package/date-input/DateInput.test.js +700 -371
  70. package/date-input/DatePicker.d.ts +4 -0
  71. package/date-input/DatePicker.js +115 -0
  72. package/date-input/Icons.d.ts +6 -0
  73. package/date-input/Icons.js +58 -0
  74. package/date-input/YearPicker.d.ts +4 -0
  75. package/date-input/YearPicker.js +100 -0
  76. package/date-input/types.d.ts +72 -15
  77. package/dialog/Dialog.d.ts +1 -1
  78. package/dialog/Dialog.js +61 -116
  79. package/dialog/Dialog.stories.tsx +320 -166
  80. package/dialog/Dialog.test.js +269 -32
  81. package/dialog/types.d.ts +18 -25
  82. package/dropdown/Dropdown.js +72 -125
  83. package/dropdown/Dropdown.stories.tsx +210 -84
  84. package/dropdown/Dropdown.test.js +410 -402
  85. package/dropdown/DropdownMenu.js +20 -37
  86. package/dropdown/DropdownMenuItem.js +10 -35
  87. package/dropdown/types.d.ts +17 -19
  88. package/file-input/FileInput.d.ts +2 -2
  89. package/file-input/FileInput.js +241 -355
  90. package/file-input/FileInput.stories.tsx +123 -12
  91. package/file-input/FileInput.test.js +369 -367
  92. package/file-input/FileItem.d.ts +4 -14
  93. package/file-input/FileItem.js +45 -96
  94. package/file-input/types.d.ts +25 -8
  95. package/flex/Flex.d.ts +1 -1
  96. package/flex/Flex.js +40 -40
  97. package/flex/Flex.stories.tsx +35 -26
  98. package/flex/types.d.ts +84 -8
  99. package/footer/Footer.d.ts +1 -1
  100. package/footer/Footer.js +53 -104
  101. package/footer/Footer.stories.tsx +41 -19
  102. package/footer/Footer.test.js +33 -57
  103. package/footer/Icons.d.ts +2 -2
  104. package/footer/Icons.js +2 -7
  105. package/footer/types.d.ts +21 -28
  106. package/grid/Grid.d.ts +7 -0
  107. package/grid/Grid.js +76 -0
  108. package/grid/Grid.stories.tsx +219 -0
  109. package/grid/types.d.ts +115 -0
  110. package/header/Header.d.ts +4 -3
  111. package/header/Header.js +41 -116
  112. package/header/Header.stories.tsx +118 -39
  113. package/header/Header.test.js +13 -26
  114. package/header/Icons.d.ts +2 -2
  115. package/header/Icons.js +2 -7
  116. package/header/types.d.ts +5 -19
  117. package/heading/Heading.js +10 -32
  118. package/heading/Heading.test.js +71 -88
  119. package/heading/types.d.ts +7 -7
  120. package/image/Image.d.ts +4 -0
  121. package/image/Image.js +70 -0
  122. package/image/Image.stories.tsx +127 -0
  123. package/image/types.d.ts +72 -0
  124. package/inset/Inset.js +13 -21
  125. package/inset/Inset.stories.tsx +2 -1
  126. package/inset/types.d.ts +2 -2
  127. package/layout/ApplicationLayout.d.ts +5 -5
  128. package/layout/ApplicationLayout.js +29 -66
  129. package/layout/ApplicationLayout.stories.tsx +1 -1
  130. package/layout/Icons.d.ts +8 -5
  131. package/layout/Icons.js +51 -59
  132. package/layout/SidenavContext.d.ts +1 -1
  133. package/layout/SidenavContext.js +3 -9
  134. package/layout/types.d.ts +5 -6
  135. package/link/Link.js +25 -46
  136. package/link/Link.stories.tsx +60 -0
  137. package/link/Link.test.js +24 -44
  138. package/link/types.d.ts +14 -14
  139. package/main.d.ts +6 -3
  140. package/main.js +25 -51
  141. package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
  142. package/{tabs-nav → nav-tabs}/NavTabs.js +17 -52
  143. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +111 -7
  144. package/{tabs-nav → nav-tabs}/NavTabs.test.js +37 -44
  145. package/nav-tabs/Tab.js +117 -0
  146. package/{tabs-nav → nav-tabs}/types.d.ts +14 -15
  147. package/nav-tabs/types.js +5 -0
  148. package/number-input/NumberInput.d.ts +7 -0
  149. package/number-input/NumberInput.js +26 -35
  150. package/number-input/NumberInput.stories.tsx +42 -26
  151. package/number-input/NumberInput.test.js +701 -377
  152. package/number-input/types.d.ts +11 -5
  153. package/package.json +37 -40
  154. package/paginator/Icons.d.ts +5 -0
  155. package/paginator/Icons.js +21 -47
  156. package/paginator/Paginator.js +22 -55
  157. package/paginator/Paginator.stories.tsx +24 -0
  158. package/paginator/Paginator.test.js +253 -226
  159. package/paginator/types.d.ts +3 -3
  160. package/paragraph/Paragraph.d.ts +3 -4
  161. package/paragraph/Paragraph.js +6 -17
  162. package/paragraph/Paragraph.stories.tsx +0 -17
  163. package/password-input/Icons.d.ts +6 -0
  164. package/password-input/Icons.js +35 -0
  165. package/password-input/PasswordInput.js +57 -126
  166. package/password-input/PasswordInput.stories.tsx +1 -32
  167. package/password-input/PasswordInput.test.js +160 -142
  168. package/password-input/types.d.ts +8 -7
  169. package/progress-bar/ProgressBar.d.ts +2 -2
  170. package/progress-bar/ProgressBar.js +21 -47
  171. package/progress-bar/{ProgressBar.stories.jsx → ProgressBar.stories.tsx} +36 -3
  172. package/progress-bar/ProgressBar.test.js +36 -53
  173. package/progress-bar/types.d.ts +4 -3
  174. package/quick-nav/QuickNav.js +15 -39
  175. package/quick-nav/QuickNav.stories.tsx +112 -20
  176. package/quick-nav/types.d.ts +10 -10
  177. package/radio-group/Radio.d.ts +1 -1
  178. package/radio-group/Radio.js +59 -76
  179. package/radio-group/RadioGroup.js +59 -105
  180. package/radio-group/RadioGroup.stories.tsx +132 -18
  181. package/radio-group/RadioGroup.test.js +518 -457
  182. package/radio-group/types.d.ts +10 -10
  183. package/resultset-table/Icons.d.ts +7 -0
  184. package/resultset-table/Icons.js +47 -0
  185. package/resultset-table/ResultsetTable.js +159 -0
  186. package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +50 -25
  187. package/{resultsetTable → resultset-table}/ResultsetTable.test.js +101 -144
  188. package/{resultsetTable → resultset-table}/types.d.ts +7 -7
  189. package/resultset-table/types.js +5 -0
  190. package/select/Icons.d.ts +7 -7
  191. package/select/Icons.js +1 -5
  192. package/select/Listbox.d.ts +1 -1
  193. package/select/Listbox.js +17 -73
  194. package/select/Option.js +20 -50
  195. package/select/Select.js +95 -156
  196. package/select/Select.stories.tsx +497 -153
  197. package/select/Select.test.js +1934 -1775
  198. package/select/types.d.ts +16 -17
  199. package/sidenav/Icons.d.ts +7 -0
  200. package/sidenav/Icons.js +47 -0
  201. package/sidenav/Sidenav.d.ts +2 -2
  202. package/sidenav/Sidenav.js +80 -149
  203. package/sidenav/Sidenav.stories.tsx +165 -63
  204. package/sidenav/Sidenav.test.js +3 -10
  205. package/sidenav/types.d.ts +31 -28
  206. package/slider/Slider.d.ts +2 -2
  207. package/slider/Slider.js +57 -96
  208. package/slider/Slider.test.js +108 -104
  209. package/slider/types.d.ts +7 -3
  210. package/spinner/Spinner.js +27 -63
  211. package/spinner/{Spinner.stories.jsx → Spinner.stories.tsx} +53 -27
  212. package/spinner/Spinner.test.js +26 -35
  213. package/spinner/types.d.ts +3 -3
  214. package/switch/Switch.d.ts +3 -3
  215. package/switch/Switch.js +112 -144
  216. package/switch/Switch.stories.tsx +33 -34
  217. package/switch/Switch.test.js +70 -102
  218. package/switch/types.d.ts +8 -3
  219. package/table/Table.js +7 -26
  220. package/table/{Table.stories.jsx → Table.stories.tsx} +80 -1
  221. package/table/Table.test.js +3 -8
  222. package/table/types.d.ts +8 -8
  223. package/tabs/Tab.js +22 -44
  224. package/tabs/Tabs.js +59 -141
  225. package/tabs/Tabs.stories.tsx +45 -5
  226. package/tabs/Tabs.test.js +66 -123
  227. package/tabs/types.d.ts +19 -19
  228. package/tag/Tag.js +29 -61
  229. package/tag/Tag.stories.tsx +14 -1
  230. package/tag/Tag.test.js +20 -31
  231. package/tag/types.d.ts +7 -7
  232. package/text-input/Icons.d.ts +8 -0
  233. package/text-input/Icons.js +56 -0
  234. package/text-input/Suggestion.js +40 -28
  235. package/text-input/Suggestions.d.ts +4 -0
  236. package/text-input/Suggestions.js +89 -0
  237. package/text-input/TextInput.js +272 -441
  238. package/text-input/TextInput.stories.tsx +266 -274
  239. package/text-input/TextInput.test.js +1402 -1375
  240. package/text-input/types.d.ts +43 -16
  241. package/textarea/Textarea.js +63 -100
  242. package/textarea/Textarea.stories.tsx +175 -0
  243. package/textarea/Textarea.test.js +152 -183
  244. package/textarea/types.d.ts +9 -5
  245. package/toggle-group/ToggleGroup.d.ts +2 -2
  246. package/toggle-group/ToggleGroup.js +95 -106
  247. package/toggle-group/ToggleGroup.stories.tsx +49 -4
  248. package/toggle-group/ToggleGroup.test.js +69 -88
  249. package/toggle-group/types.d.ts +26 -17
  250. package/typography/Typography.d.ts +2 -2
  251. package/typography/Typography.js +15 -123
  252. package/typography/Typography.stories.tsx +1 -1
  253. package/typography/types.d.ts +1 -1
  254. package/useTheme.d.ts +1251 -1
  255. package/useTheme.js +2 -9
  256. package/useTranslatedLabels.d.ts +84 -1
  257. package/useTranslatedLabels.js +1 -7
  258. package/utils/BaseTypography.d.ts +21 -0
  259. package/utils/BaseTypography.js +94 -0
  260. package/utils/FocusLock.d.ts +13 -0
  261. package/utils/FocusLock.js +121 -0
  262. package/wizard/Wizard.js +16 -51
  263. package/wizard/Wizard.stories.tsx +20 -0
  264. package/wizard/Wizard.test.js +54 -81
  265. package/wizard/types.d.ts +8 -9
  266. package/card/ice-cream.jpg +0 -0
  267. package/common/RequiredComponent.js +0 -32
  268. package/number-input/NumberInputContext.d.ts +0 -4
  269. package/number-input/NumberInputContext.js +0 -19
  270. package/number-input/numberInputContextTypes.d.ts +0 -19
  271. package/resultsetTable/ResultsetTable.js +0 -254
  272. package/slider/Slider.stories.tsx +0 -183
  273. package/tabs-nav/Tab.js +0 -130
  274. package/textarea/Textarea.stories.jsx +0 -157
  275. /package/{resultsetTable → container}/types.js +0 -0
  276. /package/{tabs-nav → grid}/types.js +0 -0
  277. /package/{number-input/numberInputContextTypes.js → image/types.js} +0 -0
  278. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  279. /package/{resultsetTable → resultset-table}/ResultsetTable.d.ts +0 -0
@@ -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 24 24" fill="currentColor">
13
- <path d="M0 0h24v24H0z" fill="none" />
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) => ({ ...tab, icon: iconSVG }));
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
- <hr />
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: "10"
16
+ notificationNumber: 10
21
17
  }, {
22
18
  label: "Tab-2",
23
- notificationNumber: "20"
19
+ notificationNumber: 20
24
20
  }, {
25
21
  label: "Tab-3",
26
- notificationNumber: "101"
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
- tabs: sampleTabs
49
- })),
50
- getByText = _render.getByText,
51
- getAllByRole = _render.getAllByRole;
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
- tabs: sampleTabsWithBadge
64
- })),
65
- getByText = _render2.getByText;
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
- defaultActiveTabIndex: 2,
74
- tabs: sampleTabsWithBadge
75
- })),
76
- getAllByRole = _render3.getAllByRole;
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
- tabs: [{
86
- label: "Tab-1",
87
- icon: "/testIcon1.png"
88
- }, {
89
- label: "Tab-2",
90
- icon: "/testIcon2.png"
91
- }, {
92
- label: "Tab-3",
93
- icon: "/testIcon3.png"
94
- }]
95
- })),
96
- getAllByRole = _render4.getAllByRole;
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
- tabs: [{
105
- label: "Tab-1",
106
- isDisabled: true
107
- }, {
108
- label: "Tab-2"
109
- }]
110
- })),
111
- getAllByRole = _render5.getAllByRole;
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
- tabs: sampleTabs,
121
- onTabClick: onTabClick
122
- })),
123
- getByText = _render6.getByText,
124
- getAllByRole = _render6.getAllByRole;
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
- tabs: sampleTabs,
149
- onTabClick: onTabClick,
150
- activeTabIndex: 0
151
- })),
152
- getByText = _render7.getByText,
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
- tabs: sampleTabsLastTabNonDisabled,
176
- onTabClick: onTabClick
177
- })),
178
- getAllByRole = _render8.getAllByRole;
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
- tabs: sampleTabsLastTabNonDisabled,
193
- onTabClick: onTabClick,
194
- activeTabIndex: 0
195
- })),
196
- getAllByRole = _render9.getAllByRole;
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
- tabs: sampleTabs,
221
- onTabClick: onTabClick
222
- })),
223
- getByText = _render10.getByText,
224
- getByRole = _render10.getByRole,
225
- getAllByRole = _render10.getAllByRole;
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
- tabs: sampleTabsMiddleDisabled,
321
- onTabClick: onTabClick
322
- })),
323
- getByText = _render11.getByText,
324
- getByRole = _render11.getByRole,
325
- getAllByRole = _render11.getAllByRole;
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
- export declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
- export declare type Margin = {
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
- declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
10
- declare type TabCommonProps = {
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 declare type TabLabelProps = TabCommonProps & {
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 declare type TabIconProps = TabCommonProps & {
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 declare type TabProps = {
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
- declare type Props = {
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?: (tabIndex: number) => void;
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?: (tabIndex: number) => void;
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 for each tab.
88
+ * Value of the tabindex attribute applied to each tab.
89
89
  */
90
90
  tabIndex?: number;
91
91
  };