@dxc-technology/halstack-react 6.1.0 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/accordion/Accordion.js +122 -103
  2. package/accordion/Accordion.stories.tsx +1 -2
  3. package/accordion/Accordion.test.js +9 -10
  4. package/accordion/types.d.ts +3 -3
  5. package/accordion-group/AccordionGroup.js +1 -21
  6. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  7. package/accordion-group/AccordionGroup.test.js +20 -45
  8. package/accordion-group/types.d.ts +8 -2
  9. package/alert/Alert.js +1 -1
  10. package/box/Box.js +1 -1
  11. package/checkbox/Checkbox.js +88 -95
  12. package/checkbox/Checkbox.test.js +93 -16
  13. package/checkbox/types.d.ts +2 -2
  14. package/common/variables.js +8 -4
  15. package/dropdown/Dropdown.js +1 -1
  16. package/footer/Footer.stories.tsx +8 -1
  17. package/header/Header.stories.tsx +4 -4
  18. package/layout/ApplicationLayout.stories.tsx +1 -0
  19. package/package.json +8 -8
  20. package/select/Listbox.js +0 -1
  21. package/slider/Slider.js +112 -91
  22. package/slider/Slider.stories.tsx +7 -1
  23. package/slider/Slider.test.js +87 -24
  24. package/slider/types.d.ts +2 -2
  25. package/switch/Switch.js +1 -1
  26. package/tabs/Tab.d.ts +4 -0
  27. package/tabs/Tab.js +135 -0
  28. package/tabs/Tabs.js +360 -104
  29. package/tabs/Tabs.stories.tsx +74 -0
  30. package/tabs/Tabs.test.js +217 -6
  31. package/tabs/types.d.ts +14 -4
  32. package/tag/Tag.js +1 -1
  33. package/text-input/Icons.d.ts +8 -0
  34. package/text-input/Icons.js +60 -0
  35. package/text-input/Suggestion.js +7 -5
  36. package/text-input/Suggestions.d.ts +4 -0
  37. package/text-input/Suggestions.js +134 -0
  38. package/text-input/TextInput.js +103 -201
  39. package/text-input/TextInput.stories.tsx +189 -181
  40. package/text-input/TextInput.test.js +163 -162
  41. package/text-input/types.d.ts +16 -2
package/tabs/Tabs.js CHANGED
@@ -17,24 +17,61 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
17
17
 
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
 
20
- var _Tabs = _interopRequireDefault(require("@material-ui/core/Tabs"));
21
-
22
- var _Tab = _interopRequireDefault(require("@material-ui/core/Tab"));
23
-
24
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
25
21
 
26
22
  var _variables = require("../common/variables.js");
27
23
 
28
- var _Badge = _interopRequireDefault(require("../badge/Badge"));
29
-
30
24
  var _useTheme = _interopRequireDefault(require("../useTheme"));
31
25
 
32
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
26
+ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
27
+
28
+ var _Tab = _interopRequireDefault(require("./Tab"));
29
+
30
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
33
31
 
34
32
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
33
 
36
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
35
 
36
+ var arrowIcons = {
37
+ left: /*#__PURE__*/_react["default"].createElement("svg", {
38
+ focusable: "false",
39
+ viewBox: "0 0 24 24",
40
+ "aria-hidden": "true"
41
+ }, /*#__PURE__*/_react["default"].createElement("path", {
42
+ d: "M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"
43
+ })),
44
+ right: /*#__PURE__*/_react["default"].createElement("svg", {
45
+ focusable: "false",
46
+ viewBox: "0 0 24 24",
47
+ "aria-hidden": "true"
48
+ }, /*#__PURE__*/_react["default"].createElement("path", {
49
+ d: "M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"
50
+ }))
51
+ };
52
+
53
+ var useResize = function useResize(refTabList) {
54
+ var _useState = (0, _react.useState)(0),
55
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
56
+ viewWidth = _useState2[0],
57
+ setViewWidth = _useState2[1];
58
+
59
+ var handleWindowSizeChange = (0, _react.useCallback)(function () {
60
+ var _refTabList$current;
61
+
62
+ setViewWidth(refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current = refTabList.current) === null || _refTabList$current === void 0 ? void 0 : _refTabList$current.offsetWidth);
63
+ }, [refTabList]);
64
+ (0, _react.useEffect)(function () {
65
+ window.addEventListener("load", handleWindowSizeChange);
66
+ window.addEventListener("resize", handleWindowSizeChange);
67
+ return function () {
68
+ window.removeEventListener("load", handleWindowSizeChange);
69
+ window.removeEventListener("resize", handleWindowSizeChange);
70
+ };
71
+ }, [handleWindowSizeChange]);
72
+ return viewWidth;
73
+ };
74
+
38
75
  var DxcTabs = function DxcTabs(_ref) {
39
76
  var defaultActiveTabIndex = _ref.defaultActiveTabIndex,
40
77
  activeTabIndex = _ref.activeTabIndex,
@@ -46,59 +83,296 @@ var DxcTabs = function DxcTabs(_ref) {
46
83
  iconPosition = _ref$iconPosition === void 0 ? "top" : _ref$iconPosition,
47
84
  _ref$tabIndex = _ref.tabIndex,
48
85
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
49
-
50
- var _useState = (0, _react.useState)(defaultActiveTabIndex !== null && defaultActiveTabIndex !== void 0 ? defaultActiveTabIndex : 0),
51
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
52
- innerActiveTabIndex = _useState2[0],
53
- setInnerActiveTabIndex = _useState2[1];
54
-
55
86
  var colorsTheme = (0, _useTheme["default"])();
56
87
  var hasLabelAndIcon = tabs && tabs.filter(function (tab) {
57
88
  return tab.label && tab.icon;
58
89
  }).length > 0;
59
-
60
- var handleChange = function handleChange(event, newValue) {
90
+ var firstFocus = tabs && tabs.findIndex(function (tab) {
91
+ return !tab.isDisabled;
92
+ });
93
+
94
+ var _useState3 = (0, _react.useState)(tabs && defaultActiveTabIndex && !tabs[defaultActiveTabIndex].isDisabled ? defaultActiveTabIndex : firstFocus),
95
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
96
+ innerActiveTabIndex = _useState4[0],
97
+ setInnerActiveTabIndex = _useState4[1];
98
+
99
+ var _useState5 = (0, _react.useState)(0),
100
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
101
+ activeIndicatorWidth = _useState6[0],
102
+ setActiveIndicatorWidth = _useState6[1];
103
+
104
+ var _useState7 = (0, _react.useState)(0),
105
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
106
+ activeIndicatorLeft = _useState8[0],
107
+ setActiveIndicatorLeft = _useState8[1];
108
+
109
+ var _useState9 = (0, _react.useState)(0),
110
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
111
+ translateScroll = _useState10[0],
112
+ setTranslateScroll = _useState10[1];
113
+
114
+ var _useState11 = (0, _react.useState)(true),
115
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
116
+ scrollRightEnabled = _useState12[0],
117
+ setScrollRightEnabled = _useState12[1];
118
+
119
+ var _useState13 = (0, _react.useState)(false),
120
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
121
+ scrollLeftEnabled = _useState14[0],
122
+ setScrollLeftEnabled = _useState14[1];
123
+
124
+ var _useState15 = (0, _react.useState)(0),
125
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
126
+ countClick = _useState16[0],
127
+ setCountClick = _useState16[1];
128
+
129
+ var _useState17 = (0, _react.useState)(0),
130
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
131
+ totalTabsWidth = _useState18[0],
132
+ setTotalTabsWidth = _useState18[1];
133
+
134
+ var _useState19 = (0, _react.useState)(activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : innerActiveTabIndex),
135
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
136
+ currentFocusIndex = _useState20[0],
137
+ setCurrentFocusIndex = _useState20[1];
138
+
139
+ var _useState21 = (0, _react.useState)(activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : innerActiveTabIndex),
140
+ _useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
141
+ temporalFocusIndex = _useState22[0],
142
+ setTemporalFocusIndex = _useState22[1];
143
+
144
+ var _useState23 = (0, _react.useState)(0),
145
+ _useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
146
+ minHeightTabs = _useState24[0],
147
+ setMinHeightTabs = _useState24[1];
148
+
149
+ var refTabs = (0, _react.useRef)([]);
150
+ var refTabList = (0, _react.useRef)(null);
151
+ var viewWidth = useResize(refTabList);
152
+ var translatedLabels = (0, _useTranslatedLabels["default"])();
153
+ var enabledIndicator = (0, _react.useMemo)(function () {
154
+ return viewWidth < totalTabsWidth;
155
+ }, [viewWidth]);
156
+ (0, _react.useEffect)(function () {
157
+ var _refTabs$current, _refTabs$current2, _refTabs$current3;
158
+
159
+ var sumWidth = refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current = refTabs.current) === null || _refTabs$current === void 0 ? void 0 : _refTabs$current.reduce(function (count, obj) {
160
+ return count + obj.offsetWidth;
161
+ }, 0);
162
+ setTotalTabsWidth(sumWidth);
163
+ setActiveIndicatorWidth(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current2 = refTabs.current[activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : innerActiveTabIndex]) === null || _refTabs$current2 === void 0 ? void 0 : _refTabs$current2.offsetWidth);
164
+ setActiveIndicatorLeft(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current3 = refTabs.current[activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : innerActiveTabIndex]) === null || _refTabs$current3 === void 0 ? void 0 : _refTabs$current3.offsetLeft);
165
+ }, [refTabs]);
166
+ (0, _react.useEffect)(function () {
167
+ var _refTabList$current2;
168
+
169
+ setMinHeightTabs((refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current2 = refTabList.current) === null || _refTabList$current2 === void 0 ? void 0 : _refTabList$current2.offsetHeight) + 1);
170
+ }, [refTabList]);
171
+ (0, _react.useEffect)(function () {
172
+ if (activeTabIndex >= 0) {
173
+ var _refTabs$current$acti, _refTabs$current$acti2;
174
+
175
+ setActiveIndicatorWidth(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current$acti = refTabs.current[activeTabIndex]) === null || _refTabs$current$acti === void 0 ? void 0 : _refTabs$current$acti.offsetWidth);
176
+ setActiveIndicatorLeft(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current$acti2 = refTabs.current[activeTabIndex]) === null || _refTabs$current$acti2 === void 0 ? void 0 : _refTabs$current$acti2.offsetLeft);
177
+ }
178
+ }, [activeTabIndex]);
179
+
180
+ var handleSelected = function handleSelected(newValue) {
61
181
  activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : setInnerActiveTabIndex(newValue);
62
182
  onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(newValue);
183
+
184
+ if (activeTabIndex === undefined) {
185
+ var _refTabs$current$newV, _refTabs$current$newV2;
186
+
187
+ setActiveIndicatorWidth(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current$newV = refTabs.current[newValue]) === null || _refTabs$current$newV === void 0 ? void 0 : _refTabs$current$newV.offsetWidth);
188
+ setActiveIndicatorLeft(refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current$newV2 = refTabs.current[newValue]) === null || _refTabs$current$newV2 === void 0 ? void 0 : _refTabs$current$newV2.offsetLeft);
189
+ }
63
190
  };
64
191
 
65
- var getLabelForTab = function getLabelForTab(tab) {
66
- return /*#__PURE__*/_react["default"].createElement(ParentLabelSpan, null, /*#__PURE__*/_react["default"].createElement(MainLabelContainer, {
67
- hasBadge: tab.notificationNumber
68
- }, /*#__PURE__*/_react["default"].createElement(TabLabelContainer, {
69
- hasLabelAndIcon: hasLabelAndIcon,
70
- iconPosition: iconPosition
71
- }, tab.icon && /*#__PURE__*/_react["default"].createElement(TabIconContainer, {
72
- hasLabelAndIcon: hasLabelAndIcon,
73
- iconPosition: iconPosition
74
- }, typeof tab.icon === "string" ? /*#__PURE__*/_react["default"].createElement(TabIcon, {
75
- src: tab.icon
76
- }) : tab.icon), /*#__PURE__*/_react["default"].createElement(LabelTextContainer, null, tab.label))), tab.notificationNumber && tab.notificationNumber !== false && /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
77
- hasLabelAndIcon: hasLabelAndIcon,
78
- iconPosition: iconPosition
79
- }, /*#__PURE__*/_react["default"].createElement(_Badge["default"], {
80
- notificationText: tab.notificationNumber > 99 ? "+99" : tab.notificationNumber
81
- })));
192
+ var scrollLeft = function scrollLeft() {
193
+ var _refTabList$current3;
194
+
195
+ var scrollWidth = (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current3 = refTabList.current) === null || _refTabList$current3 === void 0 ? void 0 : _refTabList$current3.offsetWidth) * 0.75;
196
+ var moveX;
197
+
198
+ if (countClick <= scrollWidth) {
199
+ moveX = 0;
200
+ setScrollLeftEnabled(false);
201
+ setScrollRightEnabled(true);
202
+ } else {
203
+ moveX = countClick - scrollWidth;
204
+ setScrollRightEnabled(true);
205
+ setScrollLeftEnabled(true);
206
+ }
207
+
208
+ setTranslateScroll(-moveX);
209
+ setCountClick(moveX);
82
210
  };
83
211
 
212
+ var scrollRight = function scrollRight() {
213
+ var _refTabList$current4, _refTabList$current5;
214
+
215
+ var scrollWidth = (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current4 = refTabList.current) === null || _refTabList$current4 === void 0 ? void 0 : _refTabList$current4.offsetWidth) * 0.75;
216
+ var moveX;
217
+
218
+ if (countClick + scrollWidth + (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current5 = refTabList.current) === null || _refTabList$current5 === void 0 ? void 0 : _refTabList$current5.offsetWidth) >= totalTabsWidth) {
219
+ var _refTabList$current6;
220
+
221
+ moveX = totalTabsWidth - (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current6 = refTabList.current) === null || _refTabList$current6 === void 0 ? void 0 : _refTabList$current6.offsetWidth);
222
+ setScrollRightEnabled(false);
223
+ setScrollLeftEnabled(true);
224
+ } else {
225
+ moveX = countClick + scrollWidth;
226
+ setScrollLeftEnabled(true);
227
+ setScrollRightEnabled(true);
228
+ }
229
+
230
+ setTranslateScroll(-moveX);
231
+ setCountClick(moveX);
232
+ };
233
+
234
+ var setPreviousTabFocus = function setPreviousTabFocus() {
235
+ setTemporalFocusIndex(function (temporalFocusIndex) {
236
+ var index = temporalFocusIndex === 0 ? tabs.length - 1 : temporalFocusIndex - 1;
237
+
238
+ while (tabs[index].isDisabled) {
239
+ index = index === 0 ? tabs.length - 1 : index - 1;
240
+ }
241
+
242
+ refTabs === null || refTabs === void 0 ? void 0 : refTabs.current[index].focus({
243
+ preventScroll: true
244
+ });
245
+ setScrollFocus(index);
246
+ return index;
247
+ });
248
+ };
249
+
250
+ var setNextTabFocus = function setNextTabFocus() {
251
+ setTemporalFocusIndex(function (temporalFocusIndex) {
252
+ var index = temporalFocusIndex === tabs.length - 1 ? 0 : temporalFocusIndex + 1;
253
+
254
+ while (tabs[index].isDisabled) {
255
+ index = index === tabs.length - 1 ? 0 : index + 1;
256
+ }
257
+
258
+ refTabs === null || refTabs === void 0 ? void 0 : refTabs.current[index].focus({
259
+ preventScroll: true
260
+ });
261
+ setScrollFocus(index);
262
+ return index;
263
+ });
264
+ };
265
+
266
+ var setScrollFocus = function setScrollFocus(actualIndex) {
267
+ var _refTabs$current4, _refTabList$current8;
268
+
269
+ var sumPrev = 0;
270
+ refTabs === null || refTabs === void 0 ? void 0 : (_refTabs$current4 = refTabs.current) === null || _refTabs$current4 === void 0 ? void 0 : _refTabs$current4.map(function (item, index) {
271
+ if (index <= actualIndex) {
272
+ sumPrev += item.offsetWidth;
273
+ }
274
+ });
275
+ var moveX = 0;
276
+
277
+ if (actualIndex === tabs.length - 1) {
278
+ var _refTabList$current7;
279
+
280
+ moveX = totalTabsWidth - (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current7 = refTabList.current) === null || _refTabList$current7 === void 0 ? void 0 : _refTabList$current7.offsetWidth);
281
+ setScrollLeftEnabled(true);
282
+ setScrollRightEnabled(false);
283
+ } else if (sumPrev > (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current8 = refTabList.current) === null || _refTabList$current8 === void 0 ? void 0 : _refTabList$current8.offsetWidth)) {
284
+ var _refTabList$current9;
285
+
286
+ moveX = sumPrev - (refTabList === null || refTabList === void 0 ? void 0 : (_refTabList$current9 = refTabList.current) === null || _refTabList$current9 === void 0 ? void 0 : _refTabList$current9.offsetWidth) + 1; //plus 1px for the outline
287
+
288
+ setScrollLeftEnabled(true);
289
+ setScrollRightEnabled(true);
290
+ } else {
291
+ setScrollLeftEnabled(false);
292
+ setScrollRightEnabled(true);
293
+ }
294
+
295
+ setTranslateScroll(-moveX);
296
+ setCountClick(moveX);
297
+ };
298
+
299
+ var handleOnKeyDown = function handleOnKeyDown(event) {
300
+ switch (event.key) {
301
+ case "Left":
302
+ case "ArrowLeft":
303
+ event.preventDefault();
304
+ setPreviousTabFocus();
305
+ break;
306
+
307
+ case "Right":
308
+ case "ArrowRight":
309
+ event.preventDefault();
310
+ setNextTabFocus();
311
+ break;
312
+
313
+ case "Enter":
314
+ case " ":
315
+ event.preventDefault();
316
+ setCurrentFocusIndex(temporalFocusIndex);
317
+ handleSelected(temporalFocusIndex);
318
+ break;
319
+
320
+ case "Tab":
321
+ if (temporalFocusIndex !== currentFocusIndex) {
322
+ event.preventDefault();
323
+ setTemporalFocusIndex(currentFocusIndex);
324
+ refTabs === null || refTabs === void 0 ? void 0 : refTabs.current[currentFocusIndex].focus();
325
+ }
326
+
327
+ handleSelected(currentFocusIndex);
328
+ break;
329
+ }
330
+ };
331
+
332
+ var isTabActive = function isTabActive(index) {
333
+ return activeTabIndex >= 0 ? activeTabIndex === index : innerActiveTabIndex === index;
334
+ };
335
+
336
+ var isActiveIndicatorDisabled = firstFocus === -1 || tabs && activeTabIndex >= 0 && tabs[activeTabIndex].isDisabled;
84
337
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
85
338
  theme: colorsTheme.tabs
86
- }, /*#__PURE__*/_react["default"].createElement(DxCTabs, {
87
- margin: margin,
339
+ }, /*#__PURE__*/_react["default"].createElement(TabsContainer, {
340
+ margin: margin
341
+ }, /*#__PURE__*/_react["default"].createElement(Underline, null), /*#__PURE__*/_react["default"].createElement(Tabs, {
88
342
  hasLabelAndIcon: hasLabelAndIcon,
89
343
  iconPosition: iconPosition
90
- }, /*#__PURE__*/_react["default"].createElement(Underline, null), /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
91
- value: activeTabIndex !== null && activeTabIndex !== void 0 ? activeTabIndex : innerActiveTabIndex,
92
- onChange: handleChange,
93
- variant: "scrollable",
94
- scrollButtons: "auto"
344
+ }, /*#__PURE__*/_react["default"].createElement(ScrollIndicator, {
345
+ onClick: scrollLeft,
346
+ scrollLeftEnabled: scrollLeftEnabled,
347
+ enabled: enabledIndicator,
348
+ "aria-disabled": !scrollLeftEnabled,
349
+ "aria-label": translatedLabels.tabs.scrollLeft,
350
+ tabIndex: scrollLeftEnabled ? tabIndex : -1,
351
+ minHeightTabs: minHeightTabs
352
+ }, arrowIcons.left), /*#__PURE__*/_react["default"].createElement(TabsContent, null, /*#__PURE__*/_react["default"].createElement(TabsContentScroll, {
353
+ translateScroll: translateScroll,
354
+ ref: refTabList,
355
+ enabled: enabledIndicator
356
+ }, /*#__PURE__*/_react["default"].createElement(TabList, {
357
+ role: "tablist",
358
+ onKeyDown: handleOnKeyDown,
359
+ minHeightTabs: minHeightTabs
95
360
  }, tabs.map(function (tab, i) {
96
361
  return /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
97
- tabIndex: (activeTabIndex === i || innerActiveTabIndex === i) && !tab.isDisabled ? tabIndex : -1,
362
+ tab: tab,
98
363
  key: "tab".concat(i).concat(tab.label),
99
- label: getLabelForTab(tab),
100
- disabled: tab.isDisabled,
101
- disableRipple: true,
364
+ active: isTabActive(i),
365
+ tabIndex: isTabActive(i) && !tab.isDisabled ? tabIndex : -1,
366
+ hasLabelAndIcon: hasLabelAndIcon,
367
+ iconPosition: iconPosition,
368
+ ref: function ref(el) {
369
+ return refTabs.current[i] = el;
370
+ },
371
+ onClick: function onClick() {
372
+ setCurrentFocusIndex(i);
373
+ setTemporalFocusIndex(i);
374
+ handleSelected(i);
375
+ },
102
376
  onMouseEnter: function onMouseEnter() {
103
377
  onTabHover === null || onTabHover === void 0 ? void 0 : onTabHover(i);
104
378
  },
@@ -106,34 +380,28 @@ var DxcTabs = function DxcTabs(_ref) {
106
380
  onTabHover === null || onTabHover === void 0 ? void 0 : onTabHover(null);
107
381
  }
108
382
  });
109
- }))));
383
+ })), /*#__PURE__*/_react["default"].createElement(ActiveIndicator, {
384
+ tabWidth: activeIndicatorWidth,
385
+ tabLeft: activeIndicatorLeft,
386
+ "aria-disabled": isActiveIndicatorDisabled
387
+ }))), /*#__PURE__*/_react["default"].createElement(ScrollIndicator, {
388
+ onClick: scrollRight,
389
+ scrollRightEnabled: scrollRightEnabled,
390
+ enabled: enabledIndicator,
391
+ "aria-disabled": !scrollRightEnabled,
392
+ "aria-label": translatedLabels.tabs.scrollRight,
393
+ tabIndex: scrollRightEnabled ? tabIndex : -1,
394
+ minHeightTabs: minHeightTabs
395
+ }, arrowIcons.right))));
110
396
  };
111
397
 
112
- var ParentLabelSpan = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n"])));
113
-
114
- var TabLabelContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: ", ";\n align-items: center;\n"])), function (props) {
115
- return props.hasLabelAndIcon && props.iconPosition === "top" && "column" || "row";
116
- });
117
-
118
- var LabelTextContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])([""])));
119
-
120
- var BadgeContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: 0;\n top: ", ";\n width: 23px;\n height: 17px;\n"])), function (props) {
121
- return props.hasLabelAndIcon && props.iconPosition === "top" && "0" || "5px";
122
- });
123
-
124
- var MainLabelContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n margin-left: ", ";\n margin-right: ", ";\n"])), function (props) {
125
- return props.hasBadge && "35px" || "unset";
126
- }, function (props) {
127
- return props.hasBadge && "35px" || "unset";
128
- });
129
-
130
- var Underline = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n left: 0px;\n bottom: 0;\n width: 100%;\n height: ", ";\n position: absolute;\n background-color: ", ";\n"])), function (props) {
398
+ var Underline = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n height: ", ";\n background-color: ", ";\n z-index: 1;\n"])), function (props) {
131
399
  return props.theme.dividerThickness;
132
400
  }, function (props) {
133
401
  return props.theme.dividerColor;
134
402
  });
135
403
 
136
- var DxCTabs = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n .MuiTabs-root {\n background: white;\n min-height: ", ";\n\n .MuiTabs-scroller {\n .MuiTabs-flexContainer + span {\n z-index: 4;\n }\n }\n .MuiTab-root {\n text-transform: ", " !important;\n }\n .MuiButtonBase-root {\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n\n padding: ", ";\n height: ", ";\n min-width: 90px;\n max-width: 360px;\n min-height: ", ";\n\n &:hover {\n background-color: ", ";\n }\n &:active {\n background-color: ", ";\n font-weight: ", ";\n }\n &:not(.Mui-selected) {\n background-color: ", ";\n color: ", ";\n svg {\n color: ", ";\n }\n }\n &.Mui-selected {\n background-color: ", ";\n color: ", ";\n svg {\n color: ", ";\n }\n }\n &.Mui-disabled {\n background-color: ", " !important;\n cursor: not-allowed !important;\n pointer-events: all;\n color: ", ";\n font-style: ", ";\n svg {\n color: ", ";\n }\n outline: none !important;\n }\n &:focus {\n outline: ", " auto 1px;\n }\n }\n .MuiTabs-indicator {\n background-color: ", ";\n height: ", ";\n }\n .MuiTabs-scrollButtons {\n min-width: ", ";\n width: ", ";\n padding: 0;\n }\n @media (max-width: 599.95px) {\n .MuiTabs-scrollButtonsDesktop {\n display: flex;\n }\n }\n }\n"])), function (props) {
404
+ var TabsContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
137
405
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
138
406
  }, function (props) {
139
407
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
@@ -143,68 +411,56 @@ var DxCTabs = _styledComponents["default"].div(_templateObject7 || (_templateObj
143
411
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
144
412
  }, function (props) {
145
413
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
146
- }, function (props) {
147
- return (!props.hasLabelAndIcon || props.hasLabelAndIcon && props.iconPosition !== "top") && "48px" || "72px";
148
- }, function (props) {
149
- return props.theme.fontTextTransform;
150
- }, function (props) {
151
- return props.theme.fontFamily;
152
- }, function (props) {
153
- return props.theme.fontSize;
154
- }, function (props) {
155
- return props.theme.fontStyle;
156
- }, function (props) {
157
- return props.theme.fontWeight;
158
- }, function (props) {
159
- return (!props.hasLabelAndIcon || props.hasLabelAndIcon && props.iconPosition !== "top") && "12px 16px" || "8px 16px";
160
- }, function (props) {
414
+ });
415
+
416
+ var Tabs = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n min-height: ", ";\n height: ", ";\n display: flex;\n overflow: hidden;\n background-color: ", ";\n"])), function (props) {
161
417
  return (!props.hasLabelAndIcon || props.hasLabelAndIcon && props.iconPosition !== "top") && "48px" || "72px";
162
418
  }, function (props) {
163
419
  return (!props.hasLabelAndIcon || props.hasLabelAndIcon && props.iconPosition !== "top") && "48px" || "72px";
164
- }, function (props) {
165
- return "".concat(props.theme.hoverBackgroundColor, " !important");
166
- }, function (props) {
167
- return "".concat(props.theme.pressedBackgroundColor, " !important");
168
- }, function (props) {
169
- return "".concat(props.theme.pressedFontWeight, " !important");
170
420
  }, function (props) {
171
421
  return props.theme.unselectedBackgroundColor;
422
+ });
423
+
424
+ var ScrollIndicator = _styledComponents["default"].button(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: ", ";\n background-color: #ffffff;\n font-size: 1.25rem;\n min-width: ", ";\n height: ", "px;\n padding: 0;\n justify-content: center;\n cursor: pointer;\n border-bottom: solid ", " ", ";\n box-sizing: border-box;\n border: none;\n &:hover {\n background-color: ", ";\n }\n &:focus {\n outline: ", " solid 1px;\n outline-offset: -1px;\n }\n &:active {\n background-color: ", ";\n }\n svg {\n height: 20px;\n width: 20px;\n align-self: center;\n fill: ", ";\n visibility: visible;\n }\n &[aria-disabled=\"true\"] {\n pointer-events: none;\n cursor: default;\n svg {\n visibility: hidden;\n }\n &:focus {\n outline: none;\n }\n &:hover,\n &:active {\n background-color: transparent !important;\n }\n }\n"])), function (props) {
425
+ return props.enabled ? "flex" : "none";
172
426
  }, function (props) {
173
- return props.theme.unselectedFontColor;
174
- }, function (props) {
175
- return props.theme.unselectedIconColor;
427
+ return props.theme.scrollButtonsWidth;
176
428
  }, function (props) {
177
- return props.theme.selectedBackgroundColor;
429
+ return props.minHeightTabs - 1;
178
430
  }, function (props) {
179
- return props.theme.selectedFontColor;
431
+ return props.theme.dividerThickness;
180
432
  }, function (props) {
181
- return props.theme.selectedIconColor;
433
+ return props.theme.dividerColor;
182
434
  }, function (props) {
183
- return props.theme.unselectedBackgroundColor;
435
+ return "".concat(props.theme.hoverBackgroundColor, " !important");
184
436
  }, function (props) {
185
- return props.theme.disabledFontColor;
437
+ return props.theme.focusOutline;
186
438
  }, function (props) {
187
- return props.theme.disabledFontStyle;
439
+ return "".concat(props.theme.pressedBackgroundColor, " !important");
188
440
  }, function (props) {
189
- return props.theme.disabledIconColor;
441
+ return props.theme.unselectedFontColor;
442
+ });
443
+
444
+ var ActiveIndicator = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n left: ", ";\n width: ", ";\n z-index: 2;\n background-color: ", ";\n bottom: 0;\n height: ", ";\n position: absolute;\n &[aria-disabled=\"true\"] {\n background-color: ", ";\n display: none;\n }\n"])), function (props) {
445
+ return "".concat(props.tabLeft, "px");
190
446
  }, function (props) {
191
- return props.theme.focusOutline;
447
+ return "".concat(props.tabWidth, "px");
192
448
  }, function (props) {
193
449
  return props.theme.selectedUnderlineColor;
194
450
  }, function (props) {
195
451
  return props.theme.selectedUnderlineThickness;
196
452
  }, function (props) {
197
- return props.theme.scrollButtonsWidth;
198
- }, function (props) {
199
- return props.theme.scrollButtonsWidth;
453
+ return props.theme.disabledFontColor;
200
454
  });
201
455
 
202
- var TabIcon = _styledComponents["default"].img(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])([""])));
456
+ var TabsContent = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n z-index: 1;\n flex: 1 1 auto;\n display: inline-block;\n position: relative;\n white-space: nowrap;\n overflow-x: scroll;\n ::-webkit-scrollbar {\n display: none;\n }\n"])));
203
457
 
204
- var TabIconContainer = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n max-height: 22px;\n max-width: 22px;\n margin-bottom: ", ";\n margin-right: ", ";\n overflow: hidden;\n display: flex;\n align-items: center;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
205
- return props.hasLabelAndIcon && props.iconPosition === "top" && "8px" || "";
206
- }, function (props) {
207
- return props.hasLabelAndIcon && props.iconPosition === "left" && "12px" || "";
458
+ var TabList = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n min-height: ", "px;\n"])), function (props) {
459
+ return props.minHeightTabs;
460
+ });
461
+
462
+ var TabsContentScroll = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n ", ";\n transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n"])), function (props) {
463
+ return props.enabled ? "transform: translateX(".concat(props.translateScroll, "px)") : "transform: translateX(0px)";
208
464
  });
209
465
 
210
466
  var _default = DxcTabs;
@@ -29,6 +29,44 @@ const tabs: any = [
29
29
  {
30
30
  label: "Tab 4",
31
31
  },
32
+ {
33
+ label: "Tab 5",
34
+ },
35
+ {
36
+ label: "Tab 6",
37
+ },
38
+ {
39
+ label: "Tab 7",
40
+ },
41
+ ];
42
+
43
+ const disabledTabs: any = [
44
+ {
45
+ label: "Tab 1",
46
+ isDisabled: true,
47
+ },
48
+ {
49
+ label: "Tab 2",
50
+ isDisabled: true,
51
+ },
52
+ {
53
+ label: "Tab 3",
54
+ isDisabled: true,
55
+ },
56
+ ];
57
+
58
+ const firstDisabledTabs: any = [
59
+ {
60
+ label: "Tab 1",
61
+ isDisabled: true,
62
+ },
63
+ {
64
+ label: "Tab 2",
65
+ isDisabled: true,
66
+ },
67
+ {
68
+ label: "Tab 3",
69
+ },
32
70
  ];
33
71
 
34
72
  const tabsNotification = tabs.map((tab, index) => ({
@@ -46,6 +84,14 @@ export const Chromatic = () => (
46
84
  <Title title="Only label" theme="light" level={4} />
47
85
  <DxcTabs tabs={tabs} />
48
86
  </ExampleContainer>
87
+ <ExampleContainer>
88
+ <Title title="Disabled tabs" theme="light" level={4} />
89
+ <DxcTabs activeTabIndex={0} tabs={disabledTabs} />
90
+ </ExampleContainer>
91
+ <ExampleContainer>
92
+ <Title title="First two tabs disabled" theme="light" level={4} />
93
+ <DxcTabs tabs={firstDisabledTabs} />
94
+ </ExampleContainer>
49
95
  <ExampleContainer pseudoState="pseudo-hover">
50
96
  <Title title="Hovered tabs" theme="light" level={4} />
51
97
  <DxcTabs tabs={tabs} />
@@ -110,3 +156,31 @@ export const Chromatic = () => (
110
156
  </ExampleContainer>
111
157
  </>
112
158
  );
159
+
160
+ export const ScrollableTabs = () => (
161
+ <>
162
+ <ExampleContainer>
163
+ <Title title="Only label" theme="light" level={4} />
164
+ <DxcTabs tabs={tabs} />
165
+ </ExampleContainer>
166
+ <ExampleContainer pseudoState="pseudo-hover">
167
+ <Title title="Hovered tabs" theme="light" level={4} />
168
+ <DxcTabs tabs={tabs} />
169
+ </ExampleContainer>
170
+ <ExampleContainer pseudoState="pseudo-focus">
171
+ <Title title="Focused tabs" theme="light" level={4} />
172
+ <DxcTabs tabs={tabs} />
173
+ </ExampleContainer>
174
+ <ExampleContainer pseudoState="pseudo-active">
175
+ <Title title="Actived tabs" theme="light" level={4} />
176
+ <DxcTabs tabs={tabs} />
177
+ </ExampleContainer>
178
+ </>
179
+ );
180
+
181
+ ScrollableTabs.parameters = {
182
+ viewport: {
183
+ defaultViewport: "iphonex",
184
+ },
185
+ chromatic: { viewports: [375], delay: 5000 },
186
+ };