@dxc-technology/halstack-react 0.0.0-c796a1b → 0.0.0-c8b251f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BackgroundColorContext.js +0 -1
- package/ThemeContext.d.ts +4 -9
- package/ThemeContext.js +32 -32
- package/accordion/Accordion.d.ts +1 -1
- package/accordion/Accordion.js +11 -43
- package/accordion/Accordion.stories.tsx +307 -0
- package/accordion/Accordion.test.js +72 -0
- package/accordion/types.d.ts +8 -8
- package/accordion-group/AccordionGroup.d.ts +1 -1
- package/accordion-group/AccordionGroup.js +13 -15
- package/accordion-group/AccordionGroup.stories.tsx +1 -1
- package/accordion-group/AccordionGroup.test.js +151 -0
- package/accordion-group/types.d.ts +8 -8
- package/alert/Alert.test.js +92 -0
- package/badge/Badge.d.ts +4 -0
- package/badge/types.d.ts +4 -0
- package/badge/types.js +5 -0
- package/bleed/Bleed.d.ts +3 -0
- package/bleed/Bleed.js +84 -0
- package/bleed/Bleed.stories.tsx +342 -0
- package/bleed/types.d.ts +37 -0
- package/bleed/types.js +5 -0
- package/box/Box.test.js +18 -0
- package/button/Button.d.ts +1 -1
- package/button/Button.js +9 -17
- package/button/Button.stories.tsx +6 -8
- package/button/Button.test.js +35 -0
- package/button/types.d.ts +3 -7
- package/card/Card.stories.tsx +1 -1
- package/card/Card.test.js +50 -0
- package/checkbox/Checkbox.d.ts +1 -1
- package/checkbox/Checkbox.js +7 -13
- package/checkbox/Checkbox.stories.tsx +14 -14
- package/checkbox/Checkbox.test.js +78 -0
- package/checkbox/types.d.ts +5 -1
- package/chip/Chip.d.ts +1 -1
- package/chip/Chip.js +16 -54
- package/chip/Chip.stories.tsx +6 -8
- package/chip/Chip.test.js +56 -0
- package/chip/types.d.ts +7 -15
- package/common/variables.js +43 -245
- package/date-input/DateInput.js +50 -39
- package/date-input/DateInput.stories.tsx +7 -7
- package/date-input/DateInput.test.js +479 -0
- package/date-input/types.d.ts +16 -9
- package/dialog/Dialog.js +6 -33
- package/dialog/Dialog.test.js +40 -0
- package/dropdown/Dropdown.d.ts +1 -1
- package/dropdown/Dropdown.js +12 -34
- package/dropdown/Dropdown.stories.tsx +249 -0
- package/dropdown/Dropdown.test.js +189 -0
- package/dropdown/types.d.ts +5 -14
- package/file-input/FileInput.js +102 -33
- package/file-input/FileInput.stories.tsx +507 -0
- package/file-input/FileInput.test.js +457 -0
- package/footer/Footer.js +19 -96
- package/footer/Footer.test.js +109 -0
- package/header/Header.js +20 -44
- package/header/Header.stories.tsx +46 -36
- package/header/Header.test.js +79 -0
- package/heading/Heading.stories.tsx +3 -2
- package/heading/Heading.test.js +186 -0
- package/inset/Inset.d.ts +3 -0
- package/inset/Inset.js +84 -0
- package/inset/Inset.stories.tsx +229 -0
- package/inset/types.d.ts +37 -0
- package/inset/types.js +5 -0
- package/layout/ApplicationLayout.js +7 -14
- package/link/Link.js +7 -15
- package/link/Link.stories.tsx +6 -1
- package/link/Link.test.js +91 -0
- package/link/types.d.ts +5 -9
- package/list/List.d.ts +3 -6
- package/list/List.js +17 -7
- package/list/List.stories.tsx +25 -0
- package/list/types.d.ts +7 -0
- package/list/types.js +5 -0
- package/main.d.ts +5 -6
- package/main.js +28 -36
- package/number-input/NumberInput.js +11 -18
- package/number-input/NumberInput.stories.tsx +5 -5
- package/number-input/NumberInput.test.js +506 -0
- package/number-input/types.d.ts +16 -9
- package/package.json +6 -3
- package/paginator/Paginator.test.js +266 -0
- package/password-input/PasswordInput.stories.tsx +3 -3
- package/password-input/PasswordInput.test.js +181 -0
- package/password-input/types.d.ts +13 -10
- package/progress-bar/ProgressBar.js +2 -2
- package/progress-bar/ProgressBar.test.js +65 -0
- package/quick-nav/QuickNav.d.ts +4 -0
- package/quick-nav/QuickNav.js +66 -0
- package/quick-nav/QuickNav.stories.tsx +237 -0
- package/quick-nav/types.d.ts +21 -0
- package/quick-nav/types.js +5 -0
- package/radio/Radio.test.js +71 -0
- package/radio-group/Radio.d.ts +4 -0
- package/radio-group/Radio.js +141 -0
- package/radio-group/RadioGroup.d.ts +4 -0
- package/radio-group/RadioGroup.js +280 -0
- package/radio-group/RadioGroup.stories.tsx +100 -0
- package/radio-group/RadioGroup.test.js +695 -0
- package/radio-group/types.d.ts +114 -0
- package/radio-group/types.js +5 -0
- package/resultsetTable/ResultsetTable.js +5 -2
- package/resultsetTable/ResultsetTable.stories.tsx +7 -8
- package/resultsetTable/ResultsetTable.test.js +306 -0
- package/row/Row.d.ts +3 -11
- package/row/Row.js +12 -9
- package/row/Row.stories.tsx +20 -6
- package/row/types.d.ts +28 -0
- package/row/types.js +5 -0
- package/select/Icons.d.ts +10 -0
- package/select/Icons.js +93 -0
- package/select/Listbox.d.ts +4 -0
- package/select/Listbox.js +148 -0
- package/select/Option.d.ts +4 -0
- package/select/Option.js +110 -0
- package/select/Select.d.ts +4 -0
- package/select/Select.js +94 -302
- package/select/Select.stories.tsx +91 -81
- package/select/Select.test.js +2057 -0
- package/select/types.d.ts +213 -0
- package/select/types.js +5 -0
- package/sidenav/Sidenav.stories.tsx +18 -1
- package/sidenav/Sidenav.test.js +56 -0
- package/slider/Slider.d.ts +1 -1
- package/slider/Slider.js +2 -1
- package/slider/Slider.stories.tsx +8 -8
- package/slider/Slider.test.js +150 -0
- package/slider/types.d.ts +4 -0
- package/spinner/Spinner.stories.jsx +1 -0
- package/spinner/Spinner.test.js +64 -0
- package/stack/Stack.d.ts +3 -10
- package/stack/Stack.js +12 -9
- package/stack/Stack.stories.tsx +20 -6
- package/stack/types.d.ts +24 -0
- package/stack/types.js +5 -0
- package/switch/Switch.d.ts +1 -1
- package/switch/Switch.js +19 -6
- package/switch/Switch.stories.tsx +7 -7
- package/switch/Switch.test.js +98 -0
- package/switch/types.d.ts +4 -0
- package/table/Table.stories.jsx +2 -1
- package/table/Table.test.js +26 -0
- package/tabs/Tabs.d.ts +1 -1
- package/tabs/Tabs.js +16 -18
- package/tabs/Tabs.stories.tsx +8 -11
- package/tabs/Tabs.test.js +140 -0
- package/tabs/types.d.ts +27 -15
- package/tag/Tag.d.ts +1 -1
- package/tag/Tag.js +15 -22
- package/tag/Tag.stories.tsx +26 -29
- package/tag/Tag.test.js +60 -0
- package/tag/types.d.ts +23 -14
- package/text/Text.js +1 -1
- package/text-input/TextInput.js +22 -12
- package/text-input/TextInput.stories.tsx +34 -16
- package/text-input/TextInput.test.js +1712 -0
- package/text-input/types.d.ts +18 -11
- package/textarea/Textarea.d.ts +4 -0
- package/textarea/Textarea.js +10 -38
- package/textarea/Textarea.stories.jsx +37 -15
- package/textarea/Textarea.test.js +437 -0
- package/textarea/types.d.ts +137 -0
- package/textarea/types.js +5 -0
- package/toggle-group/ToggleGroup.d.ts +1 -1
- package/toggle-group/ToggleGroup.js +12 -14
- package/toggle-group/ToggleGroup.stories.tsx +27 -32
- package/toggle-group/ToggleGroup.test.js +156 -0
- package/toggle-group/types.d.ts +46 -25
- package/wizard/Wizard.d.ts +1 -1
- package/wizard/Wizard.js +71 -16
- package/wizard/{Wizard.stories.jsx → Wizard.stories.tsx} +13 -23
- package/wizard/Wizard.test.js +141 -0
- package/wizard/types.d.ts +8 -8
- package/V3Select/V3Select.js +0 -455
- package/V3Select/index.d.ts +0 -27
- package/V3Textarea/V3Textarea.js +0 -260
- package/V3Textarea/index.d.ts +0 -27
- package/date/Date.js +0 -373
- package/date/index.d.ts +0 -27
- package/input-text/Icons.js +0 -22
- package/input-text/InputText.js +0 -611
- package/input-text/index.d.ts +0 -36
- package/select/index.d.ts +0 -131
- package/textarea/index.d.ts +0 -127
- package/toggle/Toggle.js +0 -186
- package/toggle/index.d.ts +0 -21
- package/upload/Upload.js +0 -201
- package/upload/buttons-upload/ButtonsUpload.js +0 -111
- package/upload/buttons-upload/Icons.js +0 -40
- package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
- package/upload/dragAndDropArea/Icons.js +0 -39
- package/upload/file-upload/FileToUpload.js +0 -115
- package/upload/file-upload/Icons.js +0 -66
- package/upload/files-upload/FilesToUpload.js +0 -109
- package/upload/index.d.ts +0 -15
- package/upload/transaction/Icons.js +0 -160
- package/upload/transaction/Transaction.js +0 -104
- package/upload/transactions/Transactions.js +0 -94
- package/wizard/Icons.js +0 -65
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
|
|
9
|
+
var _linkedin = _interopRequireDefault(require("../../app/src/images/linkedin.svg"));
|
|
10
|
+
|
|
11
|
+
var _Footer = _interopRequireDefault(require("./Footer"));
|
|
12
|
+
|
|
13
|
+
describe("Footer component tests", function () {
|
|
14
|
+
test("Footer renders with default logo", function () {
|
|
15
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], null)),
|
|
16
|
+
getByTitle = _render.getByTitle;
|
|
17
|
+
|
|
18
|
+
expect(getByTitle("DXC Logo")).toBeTruthy();
|
|
19
|
+
});
|
|
20
|
+
test("Footer renders with social links", function () {
|
|
21
|
+
var social = [{
|
|
22
|
+
href: "https://www.test.com/test",
|
|
23
|
+
logo: _linkedin["default"]
|
|
24
|
+
}];
|
|
25
|
+
|
|
26
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], {
|
|
27
|
+
socialLinks: social
|
|
28
|
+
})),
|
|
29
|
+
getByRole = _render2.getByRole;
|
|
30
|
+
|
|
31
|
+
var socialIcon = getByRole("link");
|
|
32
|
+
expect(socialIcon.getAttribute("href")).toBe("https://www.test.com/test");
|
|
33
|
+
});
|
|
34
|
+
test("Footer renders with bottom links", function () {
|
|
35
|
+
var bottom = [{
|
|
36
|
+
href: "https://www.test.com/test",
|
|
37
|
+
text: "bottom-link-text"
|
|
38
|
+
}];
|
|
39
|
+
|
|
40
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], {
|
|
41
|
+
bottomLinks: bottom
|
|
42
|
+
})),
|
|
43
|
+
getByText = _render3.getByText;
|
|
44
|
+
|
|
45
|
+
var link = getByText("bottom-link-text");
|
|
46
|
+
expect(link.getAttribute("href")).toBe("https://www.test.com/test");
|
|
47
|
+
});
|
|
48
|
+
test("Footer renders with copyright text", function () {
|
|
49
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], {
|
|
50
|
+
copyright: "test-copyright"
|
|
51
|
+
})),
|
|
52
|
+
getByText = _render4.getByText;
|
|
53
|
+
|
|
54
|
+
expect(getByText("test-copyright")).toBeTruthy();
|
|
55
|
+
});
|
|
56
|
+
test("Footer renders with correct children", function () {
|
|
57
|
+
//We need to force the offsetWidth value
|
|
58
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
59
|
+
configurable: true,
|
|
60
|
+
value: 1024
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], null, /*#__PURE__*/_react["default"].createElement("p", null, "footer-child-text"))),
|
|
64
|
+
getByText = _render5.getByText;
|
|
65
|
+
|
|
66
|
+
expect(getByText("footer-child-text")).toBeTruthy();
|
|
67
|
+
});
|
|
68
|
+
test("Footer renders with children in mobile", function () {
|
|
69
|
+
//425 is mobile width
|
|
70
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
71
|
+
configurable: true,
|
|
72
|
+
value: 425
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], null, /*#__PURE__*/_react["default"].createElement("p", null, "footer-child-text"))),
|
|
76
|
+
queryByText = _render6.queryByText;
|
|
77
|
+
|
|
78
|
+
expect(queryByText("footer-child-text")).toBeTruthy();
|
|
79
|
+
});
|
|
80
|
+
test("Footer is fully rendered", function () {
|
|
81
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
82
|
+
configurable: true,
|
|
83
|
+
value: 1024
|
|
84
|
+
});
|
|
85
|
+
var social = [{
|
|
86
|
+
href: "https://www.test.com/social",
|
|
87
|
+
logo: _linkedin["default"]
|
|
88
|
+
}];
|
|
89
|
+
var bottom = [{
|
|
90
|
+
href: "https://www.test.com/bottom",
|
|
91
|
+
text: "bottom-link-text"
|
|
92
|
+
}];
|
|
93
|
+
|
|
94
|
+
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Footer["default"], {
|
|
95
|
+
socialLinks: social,
|
|
96
|
+
bottomLinks: bottom,
|
|
97
|
+
copyright: "test-copyright"
|
|
98
|
+
}, /*#__PURE__*/_react["default"].createElement("p", null, "footer-child-text"))),
|
|
99
|
+
getAllByRole = _render7.getAllByRole,
|
|
100
|
+
getByText = _render7.getByText;
|
|
101
|
+
|
|
102
|
+
var socialIcon = getAllByRole("link")[0];
|
|
103
|
+
expect(socialIcon.getAttribute("href")).toBe("https://www.test.com/social");
|
|
104
|
+
var bottomLink = getByText("bottom-link-text");
|
|
105
|
+
expect(bottomLink.getAttribute("href")).toBe("https://www.test.com/bottom");
|
|
106
|
+
expect(getByText("test-copyright")).toBeTruthy();
|
|
107
|
+
expect(getByText("footer-child-text")).toBeTruthy();
|
|
108
|
+
});
|
|
109
|
+
});
|
package/header/Header.js
CHANGED
|
@@ -92,31 +92,18 @@ var DxcHeader = function DxcHeader(_ref) {
|
|
|
92
92
|
var colorsTheme = (0, _useTheme["default"])();
|
|
93
93
|
var ref = (0, _react.useRef)(null);
|
|
94
94
|
|
|
95
|
-
var _useState = (0, _react.useState)(),
|
|
95
|
+
var _useState = (0, _react.useState)(false),
|
|
96
96
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
isResponsive = _useState2[0],
|
|
98
|
+
setIsResponsive = _useState2[1];
|
|
99
99
|
|
|
100
100
|
var _useState3 = (0, _react.useState)(false),
|
|
101
101
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
var
|
|
106
|
-
|
|
107
|
-
isMenuVisible = _useState6[0],
|
|
108
|
-
setIsMenuVisible = _useState6[1];
|
|
109
|
-
|
|
110
|
-
var handleResize = function handleResize(refWidth) {
|
|
111
|
-
if (refWidth) {
|
|
112
|
-
setRefSize(refWidth);
|
|
113
|
-
|
|
114
|
-
if (refWidth <= _variables.responsiveSizes.tablet && !isResponsive) {
|
|
115
|
-
setIsResponsive(true);
|
|
116
|
-
} else {
|
|
117
|
-
setIsResponsive(false);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
102
|
+
isMenuVisible = _useState4[0],
|
|
103
|
+
setIsMenuVisible = _useState4[1];
|
|
104
|
+
|
|
105
|
+
var handleResize = function handleResize() {
|
|
106
|
+
setIsResponsive(window.matchMedia("(max-width: ".concat(_variables.responsiveSizes.medium, "rem)")).matches && !isResponsive);
|
|
120
107
|
};
|
|
121
108
|
|
|
122
109
|
var ContentContainerComponent = function ContentContainerComponent() {
|
|
@@ -143,19 +130,14 @@ var DxcHeader = function DxcHeader(_ref) {
|
|
|
143
130
|
var headerResponsiveLogo = (0, _react.useMemo)(function () {
|
|
144
131
|
return getLogoElement(colorsTheme.header.logoResponsive);
|
|
145
132
|
}, [colorsTheme.header.logoResponsive]);
|
|
146
|
-
|
|
147
|
-
var handleEventListener = function handleEventListener() {
|
|
148
|
-
handleResize(ref.current.offsetWidth);
|
|
149
|
-
};
|
|
150
|
-
|
|
151
133
|
(0, _react.useEffect)(function () {
|
|
152
134
|
if (ref.current) {
|
|
153
|
-
window.addEventListener("resize",
|
|
154
|
-
handleResize(
|
|
135
|
+
window.addEventListener("resize", handleResize);
|
|
136
|
+
handleResize();
|
|
155
137
|
}
|
|
156
138
|
|
|
157
139
|
return function () {
|
|
158
|
-
window.removeEventListener("resize",
|
|
140
|
+
window.removeEventListener("resize", handleResize);
|
|
159
141
|
};
|
|
160
142
|
}, []);
|
|
161
143
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
|
|
@@ -176,8 +158,7 @@ var DxcHeader = function DxcHeader(_ref) {
|
|
|
176
158
|
underlined: underlined,
|
|
177
159
|
onClick: handleMenu
|
|
178
160
|
}, hamburgerIcon, /*#__PURE__*/_react["default"].createElement(HamburguerTitle, null, "Menu"))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(ResponsiveMenu, {
|
|
179
|
-
hasVisibility: isMenuVisible
|
|
180
|
-
refSize: refSize
|
|
161
|
+
hasVisibility: isMenuVisible
|
|
181
162
|
}, /*#__PURE__*/_react["default"].createElement(ResponsiveLogoContainer, null, headerResponsiveLogo), /*#__PURE__*/_react["default"].createElement(_BackgroundColorContext.BackgroundColorProvider, {
|
|
182
163
|
color: colorsTheme.header.menuBackgroundColor
|
|
183
164
|
}, /*#__PURE__*/_react["default"].createElement(ContentContainerComponent, null)), /*#__PURE__*/_react["default"].createElement(CloseContainer, {
|
|
@@ -186,8 +167,7 @@ var DxcHeader = function DxcHeader(_ref) {
|
|
|
186
167
|
className: "closeIcon"
|
|
187
168
|
}, closeIcon)), /*#__PURE__*/_react["default"].createElement(Overlay, {
|
|
188
169
|
onClick: handleMenu,
|
|
189
|
-
hasVisibility: isMenuVisible
|
|
190
|
-
refSize: refSize
|
|
170
|
+
hasVisibility: isMenuVisible
|
|
191
171
|
}))), !isResponsive && /*#__PURE__*/_react["default"].createElement(_BackgroundColorContext.BackgroundColorProvider, {
|
|
192
172
|
color: colorsTheme.header.backgroundColor
|
|
193
173
|
}, /*#__PURE__*/_react["default"].createElement(ContentContainerComponent, null))));
|
|
@@ -276,16 +256,14 @@ var HamburguerTitle = _styledComponents["default"].span(_templateObject9 || (_te
|
|
|
276
256
|
|
|
277
257
|
var MainContainer = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-grow: 1;\n"])));
|
|
278
258
|
|
|
279
|
-
var ResponsiveMenu = _styledComponents["default"].div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-evenly;\n background-color: ", ";\n position: fixed;\n top: 0;\n right: 0;\n z-index: ", ";\n width: ", ";\n height: 100vh;\n padding: 20px;\n transform: ", ";\n opacity: ", ";\n transition-property: transform, opacity;\n transition-duration: 0.6s;\n transition-timing-function: ease-in-out;\n box-sizing: border-box;\n"])), function (props) {
|
|
259
|
+
var ResponsiveMenu = _styledComponents["default"].div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: space-evenly;\n background-color: ", ";\n position: fixed;\n top: 0;\n right: 0;\n z-index: ", ";\n\n @media (max-width: ", "rem) and (min-width: ", "rem) {\n //tablet\n width: ", ";\n }\n\n @media not((max-width: ", "rem) and (min-width: ", "rem)) {\n //mobile phones\n width: ", ";\n }\n\n height: 100vh;\n padding: 20px;\n transform: ", ";\n opacity: ", ";\n transition-property: transform, opacity;\n transition-duration: 0.6s;\n transition-timing-function: ease-in-out;\n box-sizing: border-box;\n"])), function (props) {
|
|
280
260
|
return props.theme.menuBackgroundColor;
|
|
281
261
|
}, function (props) {
|
|
282
262
|
return props.theme.menuZindex;
|
|
283
|
-
}, function (props) {
|
|
284
|
-
return props.
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
return props.theme.menuMobileWidth;
|
|
288
|
-
});
|
|
263
|
+
}, _variables.responsiveSizes.large, _variables.responsiveSizes.small, function (props) {
|
|
264
|
+
return props.theme.menuTabletWidth;
|
|
265
|
+
}, _variables.responsiveSizes.large, _variables.responsiveSizes.small, function (props) {
|
|
266
|
+
return props.theme.menuMobileWidth;
|
|
289
267
|
}, function (props) {
|
|
290
268
|
return props.hasVisibility ? "translateX(0)" : "translateX(100vw)";
|
|
291
269
|
}, function (props) {
|
|
@@ -306,7 +284,7 @@ var MenuContent = _styledComponents["default"].div(_templateObject14 || (_templa
|
|
|
306
284
|
return props.backgroundType === "dark" ? props.theme.contentColorOnDark : props.theme.contentColor;
|
|
307
285
|
});
|
|
308
286
|
|
|
309
|
-
var Overlay = _styledComponents["default"].div(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: ", ";\n opacity: ", " !important;\n visibility: ", ";\n opacity: ", ";\n
|
|
287
|
+
var Overlay = _styledComponents["default"].div(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n background-color: ", ";\n opacity: ", " !important;\n visibility: ", ";\n opacity: ", ";\n\n @media (max-width: ", "rem) {\n //mobile phones\n display: none;\n }\n\n transition: opacity 0.2s 0.2s ease-in-out;\n z-index: ", ";\n"])), function (props) {
|
|
310
288
|
return props.theme.overlayColor;
|
|
311
289
|
}, function (props) {
|
|
312
290
|
return props.theme.overlayOpacity;
|
|
@@ -314,9 +292,7 @@ var Overlay = _styledComponents["default"].div(_templateObject15 || (_templateOb
|
|
|
314
292
|
return props.hasVisibility ? "visible" : "hidden";
|
|
315
293
|
}, function (props) {
|
|
316
294
|
return props.hasVisibility ? "1" : "0";
|
|
317
|
-
}, function (props) {
|
|
318
|
-
return props.refSize <= _variables.responsiveSizes.mobileLarge ? "none" : "";
|
|
319
|
-
}, function (props) {
|
|
295
|
+
}, _variables.responsiveSizes.small, function (props) {
|
|
320
296
|
return props.theme.overlayZindex;
|
|
321
297
|
});
|
|
322
298
|
|
|
@@ -26,15 +26,6 @@ export const Chromatic = () => (
|
|
|
26
26
|
<Title title="Underlined with text" theme="light" level={4} />
|
|
27
27
|
<DxcHeader underlined content={<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras felis.</p>} />
|
|
28
28
|
</ExampleContainer>
|
|
29
|
-
<ExampleContainer>
|
|
30
|
-
<Title title="Responsive" theme="light" level={4} />
|
|
31
|
-
<div style={{ width: "400px" }}>
|
|
32
|
-
<DxcHeader
|
|
33
|
-
responsiveContent={(closeHandler) => <DxcHeader.Dropdown options={options} label="Default Dropdown" />}
|
|
34
|
-
underlined
|
|
35
|
-
/>
|
|
36
|
-
</div>
|
|
37
|
-
</ExampleContainer>
|
|
38
29
|
<Title title="Margins" theme="light" level={2} />
|
|
39
30
|
<ExampleContainer>
|
|
40
31
|
<Title title="Xxsmall margin" theme="light" level={4} />
|
|
@@ -104,59 +95,78 @@ export const Chromatic = () => (
|
|
|
104
95
|
</>
|
|
105
96
|
);
|
|
106
97
|
|
|
107
|
-
const
|
|
98
|
+
export const ResponsiveHeader = () => (
|
|
108
99
|
<ExampleContainer>
|
|
109
100
|
<Title title="Responsive" theme="light" level={4} />
|
|
110
|
-
<
|
|
111
|
-
<DxcHeader
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
</div>
|
|
101
|
+
<DxcHeader
|
|
102
|
+
content={<DxcHeader.Dropdown options={options} label="Default Dropdown" />}
|
|
103
|
+
responsiveContent={(closeHandler) => <DxcHeader.Dropdown options={options} label="Default Dropdown" />}
|
|
104
|
+
underlined
|
|
105
|
+
/>
|
|
116
106
|
</ExampleContainer>
|
|
117
107
|
);
|
|
118
108
|
|
|
119
109
|
const RespHeaderFocus = () => (
|
|
120
110
|
<ExampleContainer pseudoState="pseudo-focus">
|
|
121
|
-
<Title title="Responsive" theme="light" level={4} />
|
|
122
|
-
<
|
|
123
|
-
<DxcHeader
|
|
124
|
-
responsiveContent={(closeHandler) => <p>Lorem ipsum dolor sit amet.</p>}
|
|
125
|
-
underlined
|
|
126
|
-
/>
|
|
127
|
-
</div>
|
|
111
|
+
<Title title="Responsive focus" theme="light" level={4} />
|
|
112
|
+
<DxcHeader responsiveContent={(closeHandler) => <p>Lorem ipsum dolor sit amet.</p>} underlined />
|
|
128
113
|
</ExampleContainer>
|
|
129
114
|
);
|
|
130
115
|
|
|
131
116
|
const RespHeaderHover = () => (
|
|
132
117
|
<ExampleContainer pseudoState="pseudo-hover">
|
|
133
|
-
<Title title="Responsive" theme="light" level={4} />
|
|
134
|
-
<
|
|
135
|
-
<DxcHeader
|
|
136
|
-
responsiveContent={(closeHandler) => <p>Lorem ipsum dolor sit amet.</p>}
|
|
137
|
-
underlined
|
|
138
|
-
/>
|
|
139
|
-
</div>
|
|
118
|
+
<Title title="Responsive hover" theme="light" level={4} />
|
|
119
|
+
<DxcHeader responsiveContent={(closeHandler) => <p>Lorem ipsum dolor sit amet.</p>} underlined />
|
|
140
120
|
</ExampleContainer>
|
|
141
121
|
);
|
|
142
122
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
123
|
+
const RespHeaderMenu = () => (
|
|
124
|
+
<ExampleContainer>
|
|
125
|
+
<Title title="Responsive menu" theme="light" level={4} />
|
|
126
|
+
<DxcHeader responsiveContent={(closeHandler) => <p>Lorem ipsum dolor sit amet.</p>} underlined />
|
|
127
|
+
</ExampleContainer>
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
ResponsiveHeader.parameters = {
|
|
131
|
+
viewport: {
|
|
132
|
+
defaultViewport: "iphonex",
|
|
133
|
+
},
|
|
134
|
+
chromatic: { viewports: [720] },
|
|
148
135
|
};
|
|
149
136
|
|
|
150
137
|
export const ResponsiveHeaderFocus = RespHeaderFocus.bind({});
|
|
138
|
+
ResponsiveHeaderFocus.parameters = {
|
|
139
|
+
viewport: {
|
|
140
|
+
defaultViewport: "iphonex",
|
|
141
|
+
},
|
|
142
|
+
chromatic: { viewports: [720] },
|
|
143
|
+
};
|
|
151
144
|
ResponsiveHeaderFocus.play = async ({ canvasElement }) => {
|
|
152
145
|
const canvas = within(canvasElement);
|
|
153
146
|
await waitFor(() => canvas.findByText("Menu"));
|
|
154
|
-
await userEvent.click(canvas.getByText("Menu"));
|
|
155
147
|
};
|
|
156
148
|
|
|
157
149
|
export const ResponsiveHeaderHover = RespHeaderHover.bind({});
|
|
150
|
+
ResponsiveHeaderHover.parameters = {
|
|
151
|
+
viewport: {
|
|
152
|
+
defaultViewport: "iphonex",
|
|
153
|
+
},
|
|
154
|
+
chromatic: { viewports: [720] },
|
|
155
|
+
};
|
|
158
156
|
ResponsiveHeaderHover.play = async ({ canvasElement }) => {
|
|
159
157
|
const canvas = within(canvasElement);
|
|
160
158
|
await waitFor(() => canvas.findByText("Menu"));
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export const ResponsiveHeaderMenu = RespHeaderMenu.bind({});
|
|
162
|
+
ResponsiveHeaderMenu.parameters = {
|
|
163
|
+
viewport: {
|
|
164
|
+
defaultViewport: "iphonex",
|
|
165
|
+
},
|
|
166
|
+
chromatic: { viewports: [720] },
|
|
167
|
+
};
|
|
168
|
+
ResponsiveHeaderMenu.play = async ({ canvasElement }) => {
|
|
169
|
+
const canvas = within(canvasElement);
|
|
170
|
+
await waitFor(() => canvas.findByText("Menu"));
|
|
161
171
|
await userEvent.click(canvas.getByText("Menu"));
|
|
162
172
|
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
|
|
9
|
+
var _Header = _interopRequireDefault(require("./Header"));
|
|
10
|
+
|
|
11
|
+
describe("Header component tests", function () {
|
|
12
|
+
beforeAll(function () {
|
|
13
|
+
Object.defineProperty(window, "matchMedia", {
|
|
14
|
+
writable: true,
|
|
15
|
+
value: jest.fn().mockImplementation(function () {
|
|
16
|
+
return {
|
|
17
|
+
matches: false
|
|
18
|
+
};
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
test("Header renders with default logo", function () {
|
|
23
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Header["default"], null)),
|
|
24
|
+
getByTitle = _render.getByTitle;
|
|
25
|
+
|
|
26
|
+
expect(getByTitle("DXC Logo")).toBeTruthy();
|
|
27
|
+
});
|
|
28
|
+
test("Call correct function on logo click", function () {
|
|
29
|
+
var onClick = jest.fn();
|
|
30
|
+
|
|
31
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Header["default"], {
|
|
32
|
+
onClick: onClick
|
|
33
|
+
})),
|
|
34
|
+
getByTitle = _render2.getByTitle;
|
|
35
|
+
|
|
36
|
+
var logo = getByTitle("DXC Logo");
|
|
37
|
+
|
|
38
|
+
_react2.fireEvent.click(logo);
|
|
39
|
+
|
|
40
|
+
expect(onClick).toHaveBeenCalled();
|
|
41
|
+
});
|
|
42
|
+
test("Header renders with correct children", function () {
|
|
43
|
+
// We need to force the offsetWidth value
|
|
44
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
45
|
+
configurable: true,
|
|
46
|
+
value: 1024
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Header["default"], {
|
|
50
|
+
content: /*#__PURE__*/_react["default"].createElement("p", null, "header-child-text")
|
|
51
|
+
})),
|
|
52
|
+
getByText = _render3.getByText;
|
|
53
|
+
|
|
54
|
+
expect(getByText("header-child-text")).toBeTruthy();
|
|
55
|
+
});
|
|
56
|
+
test("Header renders menu button in mobile", function () {
|
|
57
|
+
Object.defineProperty(HTMLElement.prototype, "offsetWidth", {
|
|
58
|
+
configurable: true,
|
|
59
|
+
value: 425
|
|
60
|
+
});
|
|
61
|
+
Object.defineProperty(window, "matchMedia", {
|
|
62
|
+
writable: true,
|
|
63
|
+
value: jest.fn().mockImplementation(function () {
|
|
64
|
+
return {
|
|
65
|
+
matches: true
|
|
66
|
+
};
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Header["default"], {
|
|
71
|
+
responsiveContent: function responsiveContent(closeMenu) {
|
|
72
|
+
return /*#__PURE__*/_react["default"].createElement("p", null, "header-child-text");
|
|
73
|
+
}
|
|
74
|
+
})),
|
|
75
|
+
getByText = _render4.getByText;
|
|
76
|
+
|
|
77
|
+
expect(getByText("Menu")).toBeTruthy();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -28,9 +28,9 @@ export const Chromatic = () => (
|
|
|
28
28
|
<Title title="'light' Weight" theme="light" level={4} />
|
|
29
29
|
<DxcHeading text="Heading for sections within the page" level={2} weight="light" />
|
|
30
30
|
<Title title="'normal' Weight" theme="light" level={4} />
|
|
31
|
-
<DxcHeading text="Heading for sections within the page" level={
|
|
31
|
+
<DxcHeading text="Heading for sections within the page" level={2} weight="normal" />
|
|
32
32
|
<Title title="'bold' Weight" theme="light" level={4} />
|
|
33
|
-
<DxcHeading text="Heading for sections within the page" weight="bold" />
|
|
33
|
+
<DxcHeading text="Heading for sections within the page" level={2} weight="bold" />
|
|
34
34
|
</ExampleContainer>
|
|
35
35
|
<Title title="Margins" theme="light" level={2} />
|
|
36
36
|
<ExampleContainer>
|
|
@@ -48,6 +48,7 @@ export const Chromatic = () => (
|
|
|
48
48
|
<DxcHeading text="Xlarge" margin="xlarge" />
|
|
49
49
|
<Title title="Xxlarge" theme="light" level={4} />
|
|
50
50
|
<DxcHeading text="Xxlarge" margin="xxlarge" />
|
|
51
|
+
<hr />
|
|
51
52
|
</ExampleContainer>
|
|
52
53
|
</>
|
|
53
54
|
);
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
|
|
9
|
+
var _Heading = _interopRequireDefault(require("./Heading"));
|
|
10
|
+
|
|
11
|
+
describe("Heading component tests", function () {
|
|
12
|
+
test("Heading renders with default level", function () {
|
|
13
|
+
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
14
|
+
text: "my-heading-test"
|
|
15
|
+
})),
|
|
16
|
+
getByText = _render.getByText,
|
|
17
|
+
getByRole = _render.getByRole;
|
|
18
|
+
|
|
19
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
20
|
+
expect(getByRole("heading", {
|
|
21
|
+
level: 1
|
|
22
|
+
})).toBeTruthy();
|
|
23
|
+
});
|
|
24
|
+
test("Heading renders with level 1", function () {
|
|
25
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
26
|
+
text: "my-heading-test",
|
|
27
|
+
level: 1
|
|
28
|
+
})),
|
|
29
|
+
getByText = _render2.getByText,
|
|
30
|
+
getByRole = _render2.getByRole;
|
|
31
|
+
|
|
32
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
33
|
+
expect(getByRole("heading", {
|
|
34
|
+
level: 1
|
|
35
|
+
})).toBeTruthy();
|
|
36
|
+
});
|
|
37
|
+
test("Heading renders with level 2", function () {
|
|
38
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
39
|
+
text: "my-heading-test",
|
|
40
|
+
level: 2
|
|
41
|
+
})),
|
|
42
|
+
getByText = _render3.getByText,
|
|
43
|
+
getByRole = _render3.getByRole;
|
|
44
|
+
|
|
45
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
46
|
+
expect(getByRole("heading", {
|
|
47
|
+
level: 2
|
|
48
|
+
})).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
test("Heading renders with level 3", function () {
|
|
51
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
52
|
+
text: "my-heading-test",
|
|
53
|
+
level: 3
|
|
54
|
+
})),
|
|
55
|
+
getByText = _render4.getByText,
|
|
56
|
+
getByRole = _render4.getByRole;
|
|
57
|
+
|
|
58
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
59
|
+
expect(getByRole("heading", {
|
|
60
|
+
level: 3
|
|
61
|
+
})).toBeTruthy();
|
|
62
|
+
});
|
|
63
|
+
test("Heading renders with level 4", function () {
|
|
64
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
65
|
+
text: "my-heading-test",
|
|
66
|
+
level: 4
|
|
67
|
+
})),
|
|
68
|
+
getByText = _render5.getByText,
|
|
69
|
+
getByRole = _render5.getByRole;
|
|
70
|
+
|
|
71
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
72
|
+
expect(getByRole("heading", {
|
|
73
|
+
level: 4
|
|
74
|
+
})).toBeTruthy();
|
|
75
|
+
});
|
|
76
|
+
test("Heading renders with level 5", function () {
|
|
77
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
78
|
+
text: "my-heading-test",
|
|
79
|
+
level: 5
|
|
80
|
+
})),
|
|
81
|
+
getByText = _render6.getByText,
|
|
82
|
+
getByRole = _render6.getByRole;
|
|
83
|
+
|
|
84
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
85
|
+
expect(getByRole("heading", {
|
|
86
|
+
level: 5
|
|
87
|
+
})).toBeTruthy();
|
|
88
|
+
});
|
|
89
|
+
test("Heading renders with default level and as h5", function () {
|
|
90
|
+
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
91
|
+
text: "my-heading-test",
|
|
92
|
+
as: "h5"
|
|
93
|
+
})),
|
|
94
|
+
getByText = _render7.getByText,
|
|
95
|
+
getByRole = _render7.getByRole;
|
|
96
|
+
|
|
97
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
98
|
+
expect(getByRole("heading", {
|
|
99
|
+
level: 5
|
|
100
|
+
})).toBeTruthy();
|
|
101
|
+
});
|
|
102
|
+
test("Heading renders with level 1 and as h5", function () {
|
|
103
|
+
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
104
|
+
text: "my-heading-test",
|
|
105
|
+
level: 1,
|
|
106
|
+
as: "h5"
|
|
107
|
+
})),
|
|
108
|
+
getByText = _render8.getByText,
|
|
109
|
+
getByRole = _render8.getByRole;
|
|
110
|
+
|
|
111
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
112
|
+
expect(getByRole("heading", {
|
|
113
|
+
level: 5
|
|
114
|
+
})).toBeTruthy();
|
|
115
|
+
});
|
|
116
|
+
test("Heading renders with level 2 and as h4", function () {
|
|
117
|
+
var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
118
|
+
text: "my-heading-test",
|
|
119
|
+
level: 2,
|
|
120
|
+
as: "h4"
|
|
121
|
+
})),
|
|
122
|
+
getByText = _render9.getByText,
|
|
123
|
+
getByRole = _render9.getByRole;
|
|
124
|
+
|
|
125
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
126
|
+
expect(getByRole("heading", {
|
|
127
|
+
level: 4
|
|
128
|
+
})).toBeTruthy();
|
|
129
|
+
});
|
|
130
|
+
test("Heading renders with level 3 and as h2", function () {
|
|
131
|
+
var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
132
|
+
text: "my-heading-test",
|
|
133
|
+
level: 3,
|
|
134
|
+
as: "h2"
|
|
135
|
+
})),
|
|
136
|
+
getByText = _render10.getByText,
|
|
137
|
+
getByRole = _render10.getByRole;
|
|
138
|
+
|
|
139
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
140
|
+
expect(getByRole("heading", {
|
|
141
|
+
level: 2
|
|
142
|
+
})).toBeTruthy();
|
|
143
|
+
});
|
|
144
|
+
test("Heading renders with level 4 and as h3", function () {
|
|
145
|
+
var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
146
|
+
text: "my-heading-test",
|
|
147
|
+
level: 4,
|
|
148
|
+
as: "h3"
|
|
149
|
+
})),
|
|
150
|
+
getByText = _render11.getByText,
|
|
151
|
+
getByRole = _render11.getByRole;
|
|
152
|
+
|
|
153
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
154
|
+
expect(getByRole("heading", {
|
|
155
|
+
level: 3
|
|
156
|
+
})).toBeTruthy();
|
|
157
|
+
});
|
|
158
|
+
test("Heading renders with level 5 as h4", function () {
|
|
159
|
+
var _render12 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
160
|
+
text: "my-heading-test",
|
|
161
|
+
level: 5,
|
|
162
|
+
as: "h4"
|
|
163
|
+
})),
|
|
164
|
+
getByText = _render12.getByText,
|
|
165
|
+
getByRole = _render12.getByRole;
|
|
166
|
+
|
|
167
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
168
|
+
expect(getByRole("heading", {
|
|
169
|
+
level: 4
|
|
170
|
+
})).toBeTruthy();
|
|
171
|
+
});
|
|
172
|
+
test("Heading renders with level 5 and invalid as", function () {
|
|
173
|
+
var _render13 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
|
|
174
|
+
text: "my-heading-test",
|
|
175
|
+
level: 5,
|
|
176
|
+
as: "h4afdssf"
|
|
177
|
+
})),
|
|
178
|
+
getByText = _render13.getByText,
|
|
179
|
+
getByRole = _render13.getByRole;
|
|
180
|
+
|
|
181
|
+
expect(getByText("my-heading-test")).toBeTruthy();
|
|
182
|
+
expect(getByRole("heading", {
|
|
183
|
+
level: 5
|
|
184
|
+
})).toBeTruthy();
|
|
185
|
+
});
|
|
186
|
+
});
|
package/inset/Inset.d.ts
ADDED