@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.
- package/accordion/Accordion.js +122 -103
- package/accordion/Accordion.stories.tsx +1 -2
- package/accordion/Accordion.test.js +9 -10
- package/accordion/types.d.ts +3 -3
- package/accordion-group/AccordionGroup.js +1 -21
- package/accordion-group/AccordionGroup.stories.tsx +27 -1
- package/accordion-group/AccordionGroup.test.js +20 -45
- package/accordion-group/types.d.ts +8 -2
- package/alert/Alert.js +1 -1
- package/box/Box.js +1 -1
- package/checkbox/Checkbox.js +88 -95
- package/checkbox/Checkbox.test.js +93 -16
- package/checkbox/types.d.ts +2 -2
- package/common/variables.js +8 -4
- package/dropdown/Dropdown.js +1 -1
- package/footer/Footer.stories.tsx +8 -1
- package/header/Header.stories.tsx +4 -4
- package/layout/ApplicationLayout.stories.tsx +1 -0
- package/package.json +8 -8
- package/select/Listbox.js +0 -1
- package/slider/Slider.js +112 -91
- package/slider/Slider.stories.tsx +7 -1
- package/slider/Slider.test.js +87 -24
- package/slider/types.d.ts +2 -2
- package/switch/Switch.js +1 -1
- package/tabs/Tab.d.ts +4 -0
- package/tabs/Tab.js +135 -0
- package/tabs/Tabs.js +360 -104
- package/tabs/Tabs.stories.tsx +74 -0
- package/tabs/Tabs.test.js +217 -6
- package/tabs/types.d.ts +14 -4
- package/tag/Tag.js +1 -1
- package/text-input/Icons.d.ts +8 -0
- package/text-input/Icons.js +60 -0
- package/text-input/Suggestion.js +7 -5
- package/text-input/Suggestions.d.ts +4 -0
- package/text-input/Suggestions.js +134 -0
- package/text-input/TextInput.js +103 -201
- package/text-input/TextInput.stories.tsx +189 -181
- package/text-input/TextInput.test.js +163 -162
- 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
|
|
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
|
-
|
|
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
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
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(
|
|
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(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
362
|
+
tab: tab,
|
|
98
363
|
key: "tab".concat(i).concat(tab.label),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
|
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
|
|
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
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
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.
|
|
174
|
-
}, function (props) {
|
|
175
|
-
return props.theme.unselectedIconColor;
|
|
427
|
+
return props.theme.scrollButtonsWidth;
|
|
176
428
|
}, function (props) {
|
|
177
|
-
return props.
|
|
429
|
+
return props.minHeightTabs - 1;
|
|
178
430
|
}, function (props) {
|
|
179
|
-
return props.theme.
|
|
431
|
+
return props.theme.dividerThickness;
|
|
180
432
|
}, function (props) {
|
|
181
|
-
return props.theme.
|
|
433
|
+
return props.theme.dividerColor;
|
|
182
434
|
}, function (props) {
|
|
183
|
-
return props.theme.
|
|
435
|
+
return "".concat(props.theme.hoverBackgroundColor, " !important");
|
|
184
436
|
}, function (props) {
|
|
185
|
-
return props.theme.
|
|
437
|
+
return props.theme.focusOutline;
|
|
186
438
|
}, function (props) {
|
|
187
|
-
return props.theme.
|
|
439
|
+
return "".concat(props.theme.pressedBackgroundColor, " !important");
|
|
188
440
|
}, function (props) {
|
|
189
|
-
return props.theme.
|
|
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.
|
|
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.
|
|
198
|
-
}, function (props) {
|
|
199
|
-
return props.theme.scrollButtonsWidth;
|
|
453
|
+
return props.theme.disabledFontColor;
|
|
200
454
|
});
|
|
201
455
|
|
|
202
|
-
var
|
|
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
|
|
205
|
-
return props.
|
|
206
|
-
}
|
|
207
|
-
|
|
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;
|
package/tabs/Tabs.stories.tsx
CHANGED
|
@@ -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
|
+
};
|