@dnanpm/styleguide 3.9.13 → 3.9.14
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/build/cjs/components/ButtonIcon/ButtonIcon.d.ts +4 -0
- package/build/cjs/components/ButtonIcon/ButtonIcon.js +49 -13
- package/build/cjs/components/Checkbox/Checkbox.js +1 -1
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/BusinessMenu.js +2 -3
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/DesktopMenu.js +15 -16
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/LanguageSelector.js +1 -2
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/LinkModifier.d.ts +2 -2
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/LinkModifier.js +5 -7
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/LoginTooltip.js +3 -5
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/MainNavTooltipMenu.js +5 -5
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/MainNavTooltipMenuExportedStyles.js +4 -4
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/MinicartTooltip.d.ts +3 -2
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/MinicartTooltip.js +6 -10
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/MobileMenu.js +3 -3
- package/build/cjs/components/MainHeaderNavigation/ChildComponents/PageSearch.js +3 -5
- package/build/cjs/components/MainHeaderNavigation/MainHeaderNavigation.d.ts +5 -1
- package/build/cjs/components/MainHeaderNavigation/MainHeaderNavigation.js +7 -7
- package/build/cjs/components/MainHeaderNavigation/globalNavStyles.js +6 -0
- package/build/cjs/components/Pill/Pill.js +1 -1
- package/build/cjs/components/PriorityNavigation/PriorityNavigation.js +17 -2
- package/build/cjs/components/RadioButton/RadioButton.js +1 -1
- package/build/cjs/components/Switch/Switch.js +1 -1
- package/build/es/components/ButtonIcon/ButtonIcon.d.ts +4 -0
- package/build/es/components/ButtonIcon/ButtonIcon.js +49 -13
- package/build/es/components/Checkbox/Checkbox.js +1 -1
- package/build/es/components/MainHeaderNavigation/ChildComponents/BusinessMenu.js +2 -3
- package/build/es/components/MainHeaderNavigation/ChildComponents/DesktopMenu.js +15 -16
- package/build/es/components/MainHeaderNavigation/ChildComponents/LanguageSelector.js +1 -2
- package/build/es/components/MainHeaderNavigation/ChildComponents/LinkModifier.d.ts +2 -2
- package/build/es/components/MainHeaderNavigation/ChildComponents/LinkModifier.js +5 -7
- package/build/es/components/MainHeaderNavigation/ChildComponents/LoginTooltip.js +3 -5
- package/build/es/components/MainHeaderNavigation/ChildComponents/MainNavTooltipMenu.js +5 -5
- package/build/es/components/MainHeaderNavigation/ChildComponents/MainNavTooltipMenuExportedStyles.js +4 -4
- package/build/es/components/MainHeaderNavigation/ChildComponents/MinicartTooltip.d.ts +3 -2
- package/build/es/components/MainHeaderNavigation/ChildComponents/MinicartTooltip.js +6 -10
- package/build/es/components/MainHeaderNavigation/ChildComponents/MobileMenu.js +3 -3
- package/build/es/components/MainHeaderNavigation/ChildComponents/PageSearch.js +3 -5
- package/build/es/components/MainHeaderNavigation/MainHeaderNavigation.d.ts +5 -1
- package/build/es/components/MainHeaderNavigation/MainHeaderNavigation.js +8 -8
- package/build/es/components/MainHeaderNavigation/globalNavStyles.js +6 -0
- package/build/es/components/Pill/Pill.js +1 -1
- package/build/es/components/PriorityNavigation/PriorityNavigation.js +17 -2
- package/build/es/components/RadioButton/RadioButton.js +1 -1
- package/build/es/components/Switch/Switch.js +1 -1
- package/package.json +1 -1
|
@@ -300,7 +300,7 @@ const PriorityNavigation = (_a) => {
|
|
|
300
300
|
]);
|
|
301
301
|
const handleNavigationListKeyDown = React.useCallback((e) => {
|
|
302
302
|
var _a;
|
|
303
|
-
if (isMobile && isMobileNavigationOpen
|
|
303
|
+
if (isMobile && isMobileNavigationOpen) {
|
|
304
304
|
const focusableElements = (_a = navigationListRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll('a, button, input, [tabindex]:not([tabindex="-1"])');
|
|
305
305
|
const lastElement = focusableElements === null || focusableElements === void 0 ? void 0 : focusableElements[focusableElements.length - 1];
|
|
306
306
|
if (document.activeElement === lastElement) {
|
|
@@ -309,6 +309,21 @@ const PriorityNavigation = (_a) => {
|
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
}, [isMobile, isMobileNavigationOpen]);
|
|
312
|
+
const handleNavigationListFocus = React.useCallback(() => {
|
|
313
|
+
if (isMobile && isMobileNavigationOpen) {
|
|
314
|
+
setTimeout(() => {
|
|
315
|
+
var _a, _b;
|
|
316
|
+
const focusableElements = (_a = navigationListRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll('a, button, input, [tabindex]:not([tabindex="-1"])');
|
|
317
|
+
if (!focusableElements || focusableElements.length === 0)
|
|
318
|
+
return;
|
|
319
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
320
|
+
if (document.activeElement === lastElement) {
|
|
321
|
+
setIsMobileNavigationOpen(false);
|
|
322
|
+
(_b = dropdownButtonRef.current) === null || _b === void 0 ? void 0 : _b.focus();
|
|
323
|
+
}
|
|
324
|
+
}, 0);
|
|
325
|
+
}
|
|
326
|
+
}, [isMobile, isMobileNavigationOpen]);
|
|
312
327
|
const handleItemClick = (e) => {
|
|
313
328
|
setIsMobileNavigationOpen(false);
|
|
314
329
|
if (props.onClick) {
|
|
@@ -324,7 +339,7 @@ const PriorityNavigation = (_a) => {
|
|
|
324
339
|
props.categoryLabel && React__default.default.createElement(Category, null, props.categoryLabel),
|
|
325
340
|
selectedItem),
|
|
326
341
|
React__default.default.createElement(Icon.default, { icon: isMobileNavigationOpen ? icons.OvalChevronUp : icons.OvalChevronDown, size: "2.5rem" }))),
|
|
327
|
-
React__default.default.createElement(NavigationList, { ref: navigationListRef, isMobileNavigationOpen: isMobileNavigationOpen, onKeyDown: handleNavigationListKeyDown }, React.Children.map([...state.navigationItems, ...(isMobile ? state.dropdownItems : [])], (navigationItem, index) => {
|
|
342
|
+
React__default.default.createElement(NavigationList, { ref: navigationListRef, isMobileNavigationOpen: isMobileNavigationOpen, onKeyDown: handleNavigationListKeyDown, onFocus: handleNavigationListFocus }, React.Children.map([...state.navigationItems, ...(isMobile ? state.dropdownItems : [])], (navigationItem, index) => {
|
|
328
343
|
if (React.isValidElement(navigationItem) &&
|
|
329
344
|
navigationItem.type === PriorityNavigationItem.default) {
|
|
330
345
|
return (React__default.default.createElement(PriorityNavigationItem.default, { id: navigationItem.props.id, key: navigationItem.key, onClick: handleItemClick, onKeyDown: navigationItem.props.onKeyDown || props.onKeyDown, isActive: navigationItem.props.isActive, className: navigationItem.props.className, "data-testid": navigationItem.props['data-testid'], ref: instance => {
|
|
@@ -104,7 +104,7 @@ const RadioButtonGroup = ({ label, description, groupName, value, onChange, id,
|
|
|
104
104
|
const descriptionId = `${baseId}-description`;
|
|
105
105
|
const combinedDescribedBy = [description ? descriptionId : undefined].filter(Boolean).join(' ');
|
|
106
106
|
const content = children ||
|
|
107
|
-
(options === null || options === void 0 ? void 0 : options.map(option => (React__default.default.createElement(RadioButtonComponent, { key: option.id, id: option.id, name: groupName, value: option.value, label: option.label, disabled: option.disabled, checked: value === option.value, onChange: onChange, className: option.className, "data-testid": option['data-testid'] }))));
|
|
107
|
+
(options === null || options === void 0 ? void 0 : options.map(option => (React__default.default.createElement(RadioButtonComponent, { key: option.id, id: option.id, name: groupName, value: option.value, label: option.label, disabled: option.disabled, checked: value === option.value, onChange: onChange, className: option.className, "data-testid": option['data-testid'], "data-checked": value === option.value }))));
|
|
108
108
|
const Wrapper = isFieldset ? StyledFieldset : 'div';
|
|
109
109
|
const renderLabel = () => {
|
|
110
110
|
if (!label)
|
|
@@ -115,7 +115,7 @@ const Switch = (_a) => {
|
|
|
115
115
|
};
|
|
116
116
|
const accessibleLabel = props.label ? undefined : ariaLabel || 'Toggle switch';
|
|
117
117
|
return (React__namespace.createElement(Container, { className: props.className, "data-testid": dataTestId },
|
|
118
|
-
React__namespace.createElement(Checkbox, { id: props.id, name: props.name, checked: Boolean(props.isChecked), "aria-label": accessibleLabel, disabled: props.disabled, onChange: handleChange, role: "switch", type: "checkbox" }),
|
|
118
|
+
React__namespace.createElement(Checkbox, { id: props.id, name: props.name, checked: Boolean(props.isChecked), "aria-label": accessibleLabel, disabled: props.disabled, onChange: handleChange, role: "switch", type: "checkbox", "data-checked": Boolean(props.isChecked) }),
|
|
119
119
|
React__namespace.createElement(LabelWrapper, { htmlFor: props.id },
|
|
120
120
|
React__namespace.createElement(Rail, { isChecked: props.isChecked },
|
|
121
121
|
React__namespace.createElement(Button, { isChecked: props.isChecked })),
|
|
@@ -30,6 +30,10 @@ interface Props extends Omit<ButtonProps, 'fullWidth'> {
|
|
|
30
30
|
* Screen reader label describing the purpose of the ButtonIcon,
|
|
31
31
|
*/
|
|
32
32
|
ariaLabel?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Show the element with link color (pink)
|
|
35
|
+
*/
|
|
36
|
+
isLinkStyle?: boolean;
|
|
33
37
|
}
|
|
34
38
|
/** @visibleName Button Icon */
|
|
35
39
|
declare const ButtonIcon: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -7,6 +7,47 @@ import { getDividedSize, media } from '../../utils/styledUtils.js';
|
|
|
7
7
|
import Icon from '../Icon/Icon.js';
|
|
8
8
|
import PixelLoader from '../PixelLoader/PixelLoader.js';
|
|
9
9
|
|
|
10
|
+
const getStandardStyle = ({ isLinkStyle }) => {
|
|
11
|
+
const colorValue = isLinkStyle ? theme.color.default.pink : theme.color.text.black;
|
|
12
|
+
const colorHoverValue = isLinkStyle ? theme.color.hover.pink : theme.color.text.black;
|
|
13
|
+
return `
|
|
14
|
+
color: ${colorValue};
|
|
15
|
+
&:focus-visible {
|
|
16
|
+
border: 2px solid ${theme.color.focus.light};
|
|
17
|
+
box-shadow: 0px 0px 0px 2px ${theme.color.focus.dark};
|
|
18
|
+
}
|
|
19
|
+
&:hover {
|
|
20
|
+
color: ${colorHoverValue};
|
|
21
|
+
}
|
|
22
|
+
&:active {
|
|
23
|
+
color: ${theme.color.text.black + theme.color.transparency.T80};
|
|
24
|
+
}
|
|
25
|
+
&:disabled,
|
|
26
|
+
&[disabled] {
|
|
27
|
+
color: ${theme.color.text.gray};
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
};
|
|
31
|
+
const getDarkBgStyle = () => {
|
|
32
|
+
const colorValue = theme.color.text.white;
|
|
33
|
+
return `
|
|
34
|
+
color: ${colorValue};
|
|
35
|
+
&:focus-visible {
|
|
36
|
+
border: 2px solid ${theme.color.focus.dark};
|
|
37
|
+
box-shadow: 0px 0px 0px 2px ${theme.color.focus.light};
|
|
38
|
+
}
|
|
39
|
+
&:hover {
|
|
40
|
+
color: ${colorValue};
|
|
41
|
+
}
|
|
42
|
+
&:active {
|
|
43
|
+
color: ${colorValue + theme.color.transparency.T90};
|
|
44
|
+
}
|
|
45
|
+
&:disabled,
|
|
46
|
+
&[disabled] {
|
|
47
|
+
color: ${colorValue + theme.color.transparency.T70};
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
};
|
|
10
51
|
const ButtonElement = styled__default.button `
|
|
11
52
|
display: inline-flex;
|
|
12
53
|
align-items: center;
|
|
@@ -15,10 +56,11 @@ const ButtonElement = styled__default.button `
|
|
|
15
56
|
font-size: ${({ small }) => (small ? theme.fontSize.s : theme.fontSize.default)};
|
|
16
57
|
line-height: ${({ small }) => (small ? theme.lineHeight.xs : theme.lineHeight.default)};
|
|
17
58
|
cursor: pointer;
|
|
18
|
-
color: ${({ darkBg }) => (darkBg ? theme.color.text.white : theme.color.text.black)};
|
|
19
59
|
background-color: transparent;
|
|
20
60
|
border: 2px solid transparent;
|
|
21
61
|
padding: ${getDividedSize(theme.base.baseWidth, 5)} 0;
|
|
62
|
+
text-align: left;
|
|
63
|
+
transition: all 0.2s ease-in-out;
|
|
22
64
|
|
|
23
65
|
& svg {
|
|
24
66
|
pointer-events: none;
|
|
@@ -26,29 +68,23 @@ const ButtonElement = styled__default.button `
|
|
|
26
68
|
|
|
27
69
|
${({ isReversed }) => isReversed && `flex-direction: row-reverse;`}
|
|
28
70
|
|
|
71
|
+
${({ darkBg, isLinkStyle }) => (darkBg ? getDarkBgStyle() : getStandardStyle({ isLinkStyle }))}
|
|
72
|
+
|
|
29
73
|
&:focus-visible {
|
|
30
74
|
border-radius: ${theme.radius.s};
|
|
31
75
|
text-decoration: underline;
|
|
32
|
-
border: 2px solid
|
|
33
|
-
${({ darkBg }) => (darkBg ? theme.color.focus.dark : theme.color.focus.light)};
|
|
34
|
-
box-shadow: 0px 0px 0px 2px
|
|
35
|
-
${({ darkBg }) => (darkBg ? theme.color.focus.light : theme.color.focus.dark)};
|
|
36
76
|
outline: none;
|
|
37
77
|
}
|
|
38
78
|
|
|
39
79
|
&:hover {
|
|
40
80
|
text-decoration: underline;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
color: ${({ darkBg }) => darkBg
|
|
45
|
-
? theme.color.text.white + theme.color.transparency.T90
|
|
46
|
-
: theme.color.text.black + theme.color.transparency.T80};
|
|
81
|
+
text-underline-offset: 0.2em;
|
|
82
|
+
text-decoration-skip-ink: auto;
|
|
83
|
+
text-decoration-thickness: from-font;
|
|
47
84
|
}
|
|
48
85
|
|
|
49
86
|
&:disabled,
|
|
50
87
|
&[disabled] {
|
|
51
|
-
color: ${({ darkBg }) => darkBg ? theme.color.text.white + theme.color.transparency.T70 : theme.color.text.gray};
|
|
52
88
|
pointer-events: none;
|
|
53
89
|
}
|
|
54
90
|
|
|
@@ -83,7 +119,7 @@ const ButtonElement = styled__default.button `
|
|
|
83
119
|
const ButtonIcon = forwardRef((_a, ref) => {
|
|
84
120
|
var { icon = EditUnderline, 'data-testid': dataTestId, 'data-no-close': dataNoClose, 'data-track-value': dataTrackValue } = _a, props = __rest(_a, ["icon", 'data-testid', 'data-no-close', 'data-track-value']);
|
|
85
121
|
const position = props.isReversed ? 'right' : 'left';
|
|
86
|
-
return (React__default.createElement(ButtonElement, Object.assign({ ref: ref, id: props.id, name: props.name, type: props.type, onClick: props.onClick, onMouseDown: props.onMouseDown, small: props.small, darkBg: props.darkBg, "$loading": props.loading, tabIndex: props.loading ? -1 : 0, "data-loading": props.loading, disabled: props.disabled, hideChildrenMobile: props.hideChildrenMobile, isReversed: props.isReversed, className: props.className, "data-testid": dataTestId, "data-no-close": dataNoClose, "data-track-value": dataTrackValue, "aria-expanded": props.ariaExpanded, "aria-label": props.ariaLabel }, props.dataAttributes), props.loading ? (React__default.createElement(PixelLoader, { color: props.darkBg ? theme.color.default.white : theme.color.default.black, label: props.loadingLabel })) : (React__default.createElement(React__default.Fragment, null,
|
|
122
|
+
return (React__default.createElement(ButtonElement, Object.assign({ ref: ref, id: props.id, name: props.name, type: props.type, onClick: props.onClick, onMouseDown: props.onMouseDown, small: props.small, darkBg: props.darkBg, "$loading": props.loading, tabIndex: props.loading ? -1 : 0, "data-loading": props.loading, disabled: props.disabled, hideChildrenMobile: props.hideChildrenMobile, isReversed: props.isReversed, className: props.className, "data-testid": dataTestId, "data-no-close": dataNoClose, "data-track-value": dataTrackValue, "aria-expanded": props.ariaExpanded, "aria-label": props.ariaLabel, isLinkStyle: props.isLinkStyle }, props.dataAttributes), props.loading ? (React__default.createElement(PixelLoader, { color: props.darkBg ? theme.color.default.white : theme.color.default.black, label: props.loadingLabel })) : (React__default.createElement(React__default.Fragment, null,
|
|
87
123
|
React__default.createElement(Icon, { icon: icon, color: props.darkBg ? theme.color.default.white : theme.color.default.pink, size: props.small ? '1.25rem' : '1.5rem', position: props.children ? position : undefined, "aria-hidden": true }),
|
|
88
124
|
props.children && (React__default.createElement("span", { "data-testid": dataTestId && `${dataTestId}-text`, "data-no-close": dataNoClose }, props.children))))));
|
|
89
125
|
});
|
|
@@ -110,7 +110,7 @@ const Checkbox = (_a) => {
|
|
|
110
110
|
};
|
|
111
111
|
return (React__default.createElement(React__default.Fragment, null,
|
|
112
112
|
React__default.createElement(Container, null,
|
|
113
|
-
React__default.createElement(Input, { id: props.id, name: props.name, type: "checkbox", className: props.className, checked: Boolean(props.value), onChange: handleChange, disabled: props.disabled, "data-testid": dataTestId, "aria-required": props.required, "aria-invalid": props.error ? 'true' : undefined, "aria-errormessage": props.error && props.errorMessage ? errorId : undefined }),
|
|
113
|
+
React__default.createElement(Input, { id: props.id, name: props.name, type: "checkbox", className: props.className, checked: Boolean(props.value), onChange: handleChange, disabled: props.disabled, "data-testid": dataTestId, "aria-required": props.required, "aria-invalid": props.error ? 'true' : undefined, "aria-errormessage": props.error && props.errorMessage ? errorId : undefined, "data-checked": Boolean(props.value) }),
|
|
114
114
|
React__default.createElement("label", { htmlFor: props.id, "data-testid": dataTestId && `${dataTestId}-label` },
|
|
115
115
|
props.label,
|
|
116
116
|
props.required && React__default.createElement(Mandatory, null, "*"))),
|
|
@@ -39,8 +39,7 @@ const BusinessMenuLink = styled.a `
|
|
|
39
39
|
const BusinessMenuList = styled.nav `
|
|
40
40
|
display: flex;
|
|
41
41
|
gap: ${getMultipliedSize(theme.base.baseWidth, 1)};
|
|
42
|
-
padding: ${getMultipliedSize(theme.base.baseHeight, 0.5)}
|
|
43
|
-
${getMultipliedSize(theme.base.baseWidth, 1)};
|
|
42
|
+
padding: ${getMultipliedSize(theme.base.baseHeight, 0.5)} ${getMultipliedSize(theme.base.baseWidth, 1)};
|
|
44
43
|
${media.md `
|
|
45
44
|
padding: ${getMultipliedSize(theme.base.baseHeight, 1)} ${getMultipliedSize(theme.base.baseWidth, 1.5)};
|
|
46
45
|
`};
|
|
@@ -49,7 +48,7 @@ const BusinessMenu = ({ ariaLabel, currentBusinessId, items, lang }) => {
|
|
|
49
48
|
if (!(items === null || items === void 0 ? void 0 : items.length)) {
|
|
50
49
|
return null;
|
|
51
50
|
}
|
|
52
|
-
return (React__default.createElement(BusinessMenuList, { "aria-label": ariaLabel, "data-testid": "business-menu"
|
|
51
|
+
return (React__default.createElement(BusinessMenuList, { "aria-label": ariaLabel, "data-testid": "business-menu" }, items.map(item => (React__default.createElement(BusinessMenuLink, { className: `menu-link ${item.businessId === currentBusinessId ? 'active-site' : ''}`, href: item.urls[lang], isActive: item.businessId === currentBusinessId, key: item.businessId }, item.titles[lang])))));
|
|
53
52
|
};
|
|
54
53
|
|
|
55
54
|
export { BusinessMenu as default };
|
|
@@ -28,13 +28,12 @@ const noAnimation = css `
|
|
|
28
28
|
const MegaMenuContent = styled.ul `
|
|
29
29
|
display: grid;
|
|
30
30
|
grid-template-columns: 25% 25% 25% 25%;
|
|
31
|
-
padding-left: 0;
|
|
32
31
|
`;
|
|
33
|
-
const CategoryTitle = styled.
|
|
32
|
+
const CategoryTitle = styled.h2 `
|
|
34
33
|
display: flex;
|
|
35
34
|
font-size: ${theme.fontSize.default};
|
|
36
35
|
line-height: ${theme.lineHeight.default};
|
|
37
|
-
|
|
36
|
+
margin: 0;
|
|
38
37
|
padding: 0 ${getMultipliedSize(theme.base.baseHeight, 2)}
|
|
39
38
|
${getMultipliedSize(theme.base.baseWidth, 1)};
|
|
40
39
|
${media.xl `
|
|
@@ -121,21 +120,21 @@ const SubMenuLevel1 = ({ menuItem }) => {
|
|
|
121
120
|
const pagesWithSubItems = menuItem.pages.filter(element => element.pages.length > 0);
|
|
122
121
|
// Helper function to render a sub menu item
|
|
123
122
|
const renderSubMenuItem = (element, index, currUrl) => (React__default.createElement(SubMenuItem, { key: element.id, isHighlighted: isSelected(currUrl, element.urls[lang], true), "data-testid": `desktop-nav-item-level-2-${index + 1}` },
|
|
124
|
-
React__default.createElement(LinkModifier, { menuItem: element,
|
|
123
|
+
React__default.createElement(LinkModifier, { menuItem: element, disabledTabIndex: false })));
|
|
125
124
|
if (!level1HasElements) {
|
|
126
125
|
return null;
|
|
127
126
|
}
|
|
128
127
|
return (React__default.createElement(SubMenuList, { "aria-hidden": false, menuStates: menuLevel, navItemId: menuItem.id, navZIndex: navZIndex },
|
|
129
|
-
React__default.createElement(MegaMenuContent,
|
|
128
|
+
React__default.createElement(MegaMenuContent, { "aria-labelledby": `menu-id-${menuItem.id}` },
|
|
130
129
|
pagesWithSubItems.slice(0, 5).map(element => (React__default.createElement(CategoryBlock, { key: element.id },
|
|
131
|
-
React__default.createElement(CategoryTitle,
|
|
132
|
-
React__default.createElement("ul", { "data-testid": "desktop-nav-menu-ul-level-2" }, element.pages.map((subElement, index) => renderSubMenuItem(subElement, index, currentUrl)))))),
|
|
130
|
+
React__default.createElement(CategoryTitle, { id: `menu-id-${element.id}` }, element.titles[lang]),
|
|
131
|
+
React__default.createElement("ul", { "aria-labelledby": `menu-id-${element.id}`, "data-testid": "desktop-nav-menu-ul-level-2" }, element.pages.map((subElement, index) => renderSubMenuItem(subElement, index, currentUrl)))))),
|
|
133
132
|
pagesWithSubItems.length > 5 && (React__default.createElement(CategoryCollectionBlock, null,
|
|
134
|
-
React__default.createElement(CategoryTitle,
|
|
135
|
-
React__default.createElement("ul", { "data-testid": "desktop-nav-menu-ul-level-2" }, pagesWithSubItems
|
|
133
|
+
React__default.createElement(CategoryTitle, { id: "misc-categories" }, categoryCollectionText),
|
|
134
|
+
React__default.createElement("ul", { "aria-labelledby": "misc-categories", "data-testid": "desktop-nav-menu-ul-level-2" }, pagesWithSubItems
|
|
136
135
|
.slice(5)
|
|
137
136
|
.map((element, index) => renderSubMenuItem(element, index, currentUrl))))),
|
|
138
|
-
React__default.createElement(FeaturedBlock, { collapseSize: collapseSize, "data-testid": "desktop-nav-menu-level-2-featured" }, menuItem.pages.map(element => element.pages.length ? null : (React__default.createElement(LinkModifier, { key: element.id, showIcon: true, menuItem: element,
|
|
137
|
+
React__default.createElement(FeaturedBlock, { collapseSize: collapseSize, "data-testid": "desktop-nav-menu-level-2-featured" }, menuItem.pages.map(element => element.pages.length ? null : (React__default.createElement(LinkModifier, { key: element.id, showIcon: true, menuItem: element, disabledTabIndex: false })))))));
|
|
139
138
|
};
|
|
140
139
|
const MenuItemWithChildren = ({ menuItem, currentLevel }) => {
|
|
141
140
|
const { lang, handleNavMenuClick, currentUrl, menuLevel } = useContext(NavContext);
|
|
@@ -144,9 +143,9 @@ const MenuItemWithChildren = ({ menuItem, currentLevel }) => {
|
|
|
144
143
|
e.preventDefault();
|
|
145
144
|
handleNavMenuClick(element.id, 'level1');
|
|
146
145
|
};
|
|
147
|
-
return (React__default.createElement(DesktopMenuItem, { isActive: isSelected(currentUrl,
|
|
148
|
-
React__default.createElement(MenuLinkWithChildren, { isOpen: menuLevel.level1 === menuItem.id, onClick: menuClickMain(menuItem), "data-testid": "menu-button-with-children", href: linkUrl },
|
|
149
|
-
React__default.createElement("span",
|
|
146
|
+
return (React__default.createElement(DesktopMenuItem, { isActive: isSelected(currentUrl, linkUrl), "data-testid": `desktop-nav-item-level-1-${currentLevel + 1}` },
|
|
147
|
+
React__default.createElement(MenuLinkWithChildren, { isOpen: menuLevel.level1 === menuItem.id, onClick: menuClickMain(menuItem), "data-testid": "menu-button-with-children", "aria-current": isSelected(currentUrl, linkUrl) ? 'true' : undefined, "aria-expanded": menuLevel.level1 === menuItem.id, href: linkUrl },
|
|
148
|
+
React__default.createElement("span", { id: `menu-id-${menuItem.id}` }, menuItem.titles[lang]),
|
|
150
149
|
React__default.createElement(ChevronRight, { size: "1rem" })),
|
|
151
150
|
React__default.createElement(SubMenuLevel1, { menuItem: menuItem })));
|
|
152
151
|
};
|
|
@@ -166,10 +165,10 @@ const DesktopMenu = () => {
|
|
|
166
165
|
return (React__default.createElement(MenuList, { "aria-hidden": false, ref: ref, "data-testid": "desktop-nav-menu-ul" }, mainNavigation.map((navElement, index) => {
|
|
167
166
|
const displaySubMenu = !navElement.pageIsLinkInDesktopNavigation && !!navElement.pages.length;
|
|
168
167
|
if (displaySubMenu) {
|
|
169
|
-
return (React__default.createElement(MenuItemWithChildren, {
|
|
168
|
+
return (React__default.createElement(MenuItemWithChildren, { currentLevel: index, key: navElement.id, menuItem: navElement }));
|
|
170
169
|
}
|
|
171
|
-
return (React__default.createElement(DesktopMenuItem, {
|
|
172
|
-
React__default.createElement(LinkModifier, { menuItem: navElement,
|
|
170
|
+
return (React__default.createElement(DesktopMenuItem, { "data-testid": `desktop-nav-item-level-1-${index + 1}`, isActive: isSelected(currentUrl, navElement.urls[lang]), key: navElement.id },
|
|
171
|
+
React__default.createElement(LinkModifier, { menuItem: navElement, disabledTabIndex: false })));
|
|
173
172
|
})));
|
|
174
173
|
};
|
|
175
174
|
|
|
@@ -4,7 +4,6 @@ import styled from '../../../themes/styled.js';
|
|
|
4
4
|
import theme from '../../../themes/theme.js';
|
|
5
5
|
import { navIconSize } from '../../../themes/themeComponents/navigation.js';
|
|
6
6
|
import { getMultipliedSize } from '../../../utils/styledUtils.js';
|
|
7
|
-
import Icon from '../../Icon/Icon.js';
|
|
8
7
|
import NavContext from '../context/NavContext.js';
|
|
9
8
|
import { MenuLink } from '../globalNavStyles.js';
|
|
10
9
|
import MainNavTooltipMenu from './MainNavTooltipMenu.js';
|
|
@@ -24,7 +23,7 @@ const LanguageSelector = ({ currentLanguage, languagesObject, languageSelectorLa
|
|
|
24
23
|
return null;
|
|
25
24
|
}
|
|
26
25
|
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: languageSelectorLabel, closeWhenTagClicked: ['a'], contentComponent: LngComponent, contentWidth: "5rem", globalStateString: "lang", tooltipRight: isMobileMenu ? '13.8rem' : '11.8rem', zIndex: navZIndex + 1 },
|
|
27
|
-
React__default.createElement(
|
|
26
|
+
React__default.createElement(Globe, { size: navIconSize }),
|
|
28
27
|
React__default.createElement("span", { "data-testid": "header-lang-label" }, currentLanguage.toUpperCase())));
|
|
29
28
|
};
|
|
30
29
|
|
|
@@ -2,9 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import type { MenuLevelItem } from '../types/globalNavProps';
|
|
3
3
|
interface LinkModifierProps {
|
|
4
4
|
menuItem: MenuLevelItem;
|
|
5
|
-
|
|
5
|
+
disabledTabIndex?: boolean;
|
|
6
6
|
showIcon?: boolean;
|
|
7
7
|
}
|
|
8
8
|
export declare const isSelected: (currentUrl: string, linkUrl: string, exactMatch?: boolean) => boolean;
|
|
9
|
-
declare const LinkModifier: ({ menuItem,
|
|
9
|
+
declare const LinkModifier: ({ menuItem, disabledTabIndex, showIcon }: LinkModifierProps) => React.JSX.Element;
|
|
10
10
|
export default LinkModifier;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Open, ArrowRight } from '@dnanpm/icons';
|
|
2
2
|
import React__default, { useContext } from 'react';
|
|
3
|
-
import theme from '../../../themes/theme.js';
|
|
4
|
-
import Icon from '../../Icon/Icon.js';
|
|
5
3
|
import NavContext from '../context/NavContext.js';
|
|
6
4
|
import { MenuLink } from '../globalNavStyles.js';
|
|
7
5
|
|
|
@@ -16,12 +14,12 @@ const isSelected = (currentUrl, linkUrl, exactMatch = false) => {
|
|
|
16
14
|
return false;
|
|
17
15
|
};
|
|
18
16
|
const isMenuItemLinkAbsolute = (menuItemLink) => menuItemLink.includes('http');
|
|
19
|
-
const LinkModifier = ({ menuItem,
|
|
20
|
-
const { lang, nextJSLinkComponent, resetMenuEvents } = useContext(NavContext);
|
|
21
|
-
const menuItemLink = menuItem.urls[lang]
|
|
17
|
+
const LinkModifier = ({ menuItem, disabledTabIndex, showIcon }) => {
|
|
18
|
+
const { lang, currentUrl, nextJSLinkComponent, resetMenuEvents } = useContext(NavContext);
|
|
19
|
+
const menuItemLink = menuItem.urls[lang];
|
|
22
20
|
const isExternalLink = menuItem.target === '_blank';
|
|
23
|
-
const MenuLinkComponent = (React__default.createElement(MenuLink, { href: menuItemLink, id: menuItem.id, onClick: resetMenuEvents, tabIndex:
|
|
24
|
-
showIcon && (React__default.createElement(
|
|
21
|
+
const MenuLinkComponent = (React__default.createElement(MenuLink, { "aria-current": isSelected(currentUrl, menuItemLink) ? 'page' : undefined, href: menuItemLink, id: menuItem.id, onClick: resetMenuEvents, tabIndex: disabledTabIndex ? -1 : undefined, target: isExternalLink ? '_blank' : '_self' },
|
|
22
|
+
showIcon && (isExternalLink ? React__default.createElement(Open, null) : React__default.createElement(ArrowRight, null)),
|
|
25
23
|
React__default.createElement("span", null, menuItem.titles[lang])));
|
|
26
24
|
if (nextJSLinkComponent && !isMenuItemLinkAbsolute(menuItemLink)) {
|
|
27
25
|
const NextJSLinkComponent = nextJSLinkComponent;
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { User } from '@dnanpm/icons';
|
|
2
2
|
import React__default, { useContext } from 'react';
|
|
3
|
-
import { navIconSize } from '../../../themes/themeComponents/navigation.js';
|
|
4
|
-
import Icon from '../../Icon/Icon.js';
|
|
5
3
|
import NavContext from '../context/NavContext.js';
|
|
6
4
|
import MainNavTooltipMenu from './MainNavTooltipMenu.js';
|
|
7
5
|
|
|
8
6
|
const LoginTooltip = ({ isLogged, loginLabel }) => {
|
|
9
|
-
const { navZIndex, isMobileMenu, loginComponent
|
|
10
|
-
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: loginLabel, closeWhenTagClicked: ['a', 'button'], contentComponent:
|
|
11
|
-
React__default.createElement(
|
|
7
|
+
const { navZIndex, isMobileMenu, loginComponent } = useContext(NavContext);
|
|
8
|
+
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: loginLabel, closeWhenTagClicked: ['a', 'button'], contentComponent: loginComponent, globalStateString: "login", tooltipRight: isMobileMenu ? '3rem' : '1rem', zIndex: navZIndex + 1 }, !isLogged ? (loginLabel) : (React__default.createElement(React__default.Fragment, null,
|
|
9
|
+
React__default.createElement(User, null),
|
|
12
10
|
React__default.createElement("span", { "data-testid": "header-login-label" }, loginLabel)))));
|
|
13
11
|
};
|
|
14
12
|
|
|
@@ -20,19 +20,19 @@ const IconContainer = styled.div `
|
|
|
20
20
|
min-width: ${IconContainerMinWidth};
|
|
21
21
|
transition: color 0.2s ease-in-out;
|
|
22
22
|
|
|
23
|
-
>
|
|
23
|
+
> svg {
|
|
24
24
|
display: block;
|
|
25
25
|
height: ${navIconSize};
|
|
26
26
|
width: ${navIconSize};
|
|
27
27
|
}
|
|
28
|
-
>
|
|
29
|
-
|
|
28
|
+
> svg,
|
|
29
|
+
+ span {
|
|
30
30
|
color: ${p => (p.isActive ? theme.color.text.pink : 'inherit')};
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
@media (min-width: ${p => p.collapseSize + 1}px) {
|
|
34
34
|
min-width: ${getMultipliedSize(theme.base.baseWidth, 6)};
|
|
35
|
-
|
|
35
|
+
+ span {
|
|
36
36
|
display: block;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -103,7 +103,7 @@ const MainNavTooltipMenu = (_a) => {
|
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
105
|
return (React__default.createElement(IconContainer, { "data-testid": `header-${globalStateKey}-container`, collapseSize: collapseSize, ref: ref },
|
|
106
|
-
globalStateKey === 'login' && !isLoggedIn ? (React__default.createElement(ButtonPrimary, { onClick: ContentComponent ? toggleState : undefined, small: true }, children)) : (React__default.createElement(TooltipWrapper, { "aria-label": ariaLabel, isLoggedIn: isLoginItemAndLoggedIn, collapseSize: collapseSize, isHighlighted: tooltipItems[globalStateKey] || isLoginItemAndLoggedIn, onClick: props.onCartButtonClick || (ContentComponent ? toggleState : undefined) }, children)),
|
|
106
|
+
globalStateKey === 'login' && !isLoggedIn ? (React__default.createElement(ButtonPrimary, { onClick: ContentComponent ? toggleState : undefined, small: true }, children)) : (React__default.createElement(TooltipWrapper, { "aria-label": ariaLabel, "aria-expanded": tooltipItems[globalStateKey], isLoggedIn: isLoginItemAndLoggedIn, collapseSize: collapseSize, isHighlighted: tooltipItems[globalStateKey] || isLoginItemAndLoggedIn, onClick: props.onCartButtonClick || (ContentComponent ? toggleState : undefined) }, children)),
|
|
107
107
|
tooltipItems[globalStateKey] && ContentComponent && (React__default.createElement(React__default.Fragment, null,
|
|
108
108
|
React__default.createElement(Caret, { zIndex: zIndex, collapseSize: collapseSize }),
|
|
109
109
|
React__default.createElement(Tooltip, { zIndex: zIndex, tooltipRight: tooltipRight, contentWidth: contentWidth, collapseSize: collapseSize, fullWidthDesktop: fullWidthDesktop, fullWidthBreakpoint: fullWidthBreakpoint },
|
package/build/es/components/MainHeaderNavigation/ChildComponents/MainNavTooltipMenuExportedStyles.js
CHANGED
|
@@ -20,7 +20,7 @@ const TooltipWrapper = styled.button `
|
|
|
20
20
|
border-left: ${p => (p.isLoggedIn ? `2px solid ${theme.color.line.L03}` : 'none')};
|
|
21
21
|
&:active,
|
|
22
22
|
&:focus {
|
|
23
|
-
|
|
23
|
+
> svg,
|
|
24
24
|
> span {
|
|
25
25
|
color: ${theme.color.text.pink};
|
|
26
26
|
}
|
|
@@ -30,12 +30,12 @@ const TooltipWrapper = styled.button `
|
|
|
30
30
|
border-radius: ${theme.radius.s};
|
|
31
31
|
box-shadow: 0px 0px 0px 2px ${theme.color.focus.light},
|
|
32
32
|
0px 0px 0px 4px ${theme.color.focus.dark};
|
|
33
|
-
|
|
33
|
+
> svg,
|
|
34
34
|
> span {
|
|
35
35
|
color: ${theme.color.text.black};
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
> svg {
|
|
39
39
|
align-content: center;
|
|
40
40
|
display: flex;
|
|
41
41
|
margin: 0 auto;
|
|
@@ -44,7 +44,7 @@ const TooltipWrapper = styled.button `
|
|
|
44
44
|
width: 1.625em;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
> span {
|
|
48
48
|
display: none;
|
|
49
49
|
@media (min-width: ${p => p.collapseSize + 1}px) {
|
|
50
50
|
font-size: ${theme.fontSize.xs};
|
|
@@ -2,7 +2,8 @@ import React from 'react';
|
|
|
2
2
|
import type { MainHeaderNavigationProps } from '../MainHeaderNavigation';
|
|
3
3
|
interface MinicartTooltipProps extends Pick<MainHeaderNavigationProps, 'onCartButtonClick'> {
|
|
4
4
|
minicartAmount: number;
|
|
5
|
-
minicartLabel
|
|
5
|
+
minicartLabel: string;
|
|
6
|
+
minicartAmountLabel: string;
|
|
6
7
|
}
|
|
7
|
-
declare const MinicartTooltip: ({ minicartAmount, minicartLabel,
|
|
8
|
+
declare const MinicartTooltip: ({ minicartAmount, minicartAmountLabel, minicartLabel, onCartButtonClick, }: MinicartTooltipProps) => React.JSX.Element;
|
|
8
9
|
export default MinicartTooltip;
|
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
import { __rest } from 'tslib';
|
|
2
1
|
import { Cart } from '@dnanpm/icons';
|
|
3
2
|
import React__default, { useContext } from 'react';
|
|
4
3
|
import theme from '../../../themes/theme.js';
|
|
5
|
-
import { navIconSize } from '../../../themes/themeComponents/navigation.js';
|
|
6
|
-
import Icon from '../../Icon/Icon.js';
|
|
7
4
|
import NotificationBadge from '../../NotificationBadge/NotificationBadge.js';
|
|
8
5
|
import NavContext from '../context/NavContext.js';
|
|
9
6
|
import MainNavTooltipMenu from './MainNavTooltipMenu.js';
|
|
10
7
|
|
|
11
|
-
const MinicartTooltip = (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
React__default.createElement(
|
|
16
|
-
React__default.createElement("
|
|
17
|
-
minicartAmount > 0 && (React__default.createElement(NotificationBadge, { top: "-5px", right: "5px", "data-testid": "header-minicart-amount" }, minicartAmount))));
|
|
8
|
+
const MinicartTooltip = ({ minicartAmount, minicartAmountLabel, minicartLabel, onCartButtonClick, }) => {
|
|
9
|
+
const { navZIndex, minicartComponent } = useContext(NavContext);
|
|
10
|
+
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: minicartLabel, closeWhenTagClicked: ['a', 'button'], onCartButtonClick: onCartButtonClick, contentComponent: minicartComponent, contentWidth: "35rem", fullWidthBreakpoint: theme.breakpoints.md, globalStateString: "minicart", tooltipRight: "5rem", zIndex: navZIndex + 1 },
|
|
11
|
+
React__default.createElement(Cart, null),
|
|
12
|
+
React__default.createElement("span", { "aria-hidden": true }, minicartLabel),
|
|
13
|
+
minicartAmount > 0 && (React__default.createElement(NotificationBadge, { "data-testid": "header-minicart-amount", right: "5px", top: "-5px", visuallyHiddenText: minicartAmountLabel }, minicartAmount))));
|
|
18
14
|
};
|
|
19
15
|
|
|
20
16
|
export { MinicartTooltip as default };
|
|
@@ -124,7 +124,7 @@ const CreateSubMenuItem = ({ menuItem, currentLevel, itemIndex }) => {
|
|
|
124
124
|
menuItem.titles[lang],
|
|
125
125
|
React__default.createElement(ChevronRight, { color: theme.color.default.pink })));
|
|
126
126
|
}
|
|
127
|
-
return renderMenuItem(React__default.createElement(LinkModifier, { menuItem: menuItem,
|
|
127
|
+
return renderMenuItem(React__default.createElement(LinkModifier, { menuItem: menuItem, disabledTabIndex: tabNavigationDisabled }));
|
|
128
128
|
};
|
|
129
129
|
const SubMenuMobile = ({ currentLevel, menuItem }) => {
|
|
130
130
|
const featuredItems = menuItem.pages.filter(subMenuItem => !subMenuItem.pages.length && currentLevel === 2);
|
|
@@ -136,7 +136,7 @@ const SubMenuMobile = ({ currentLevel, menuItem }) => {
|
|
|
136
136
|
}
|
|
137
137
|
return (React__default.createElement(React__default.Fragment, null,
|
|
138
138
|
currentLevel > 1 && React__default.createElement(MenuItemBackLink, { currentLevel: currentLevel }),
|
|
139
|
-
featuredItems.length > 0 && (React__default.createElement(FeaturedBlock, { collapseSize: collapseSize }, featuredItems.map(subMenuItem => (React__default.createElement(LinkModifier, { key: subMenuItem.id, menuItem: subMenuItem, showIcon: true,
|
|
139
|
+
featuredItems.length > 0 && (React__default.createElement(FeaturedBlock, { collapseSize: collapseSize }, featuredItems.map(subMenuItem => (React__default.createElement(LinkModifier, { key: subMenuItem.id, menuItem: subMenuItem, showIcon: true, disabledTabIndex: tabNavigationDisabled }))))),
|
|
140
140
|
menuItem.pages
|
|
141
141
|
.filter(subMenuItem => !featuredItems.includes(subMenuItem))
|
|
142
142
|
.map((subMenuItem, index) => (React__default.createElement(CreateSubMenuItem, { currentLevel: currentLevel, itemIndex: index, key: subMenuItem.id, menuItem: subMenuItem })))));
|
|
@@ -147,7 +147,7 @@ const NavigationMenuMobile = () => {
|
|
|
147
147
|
if (!(mainNavigation === null || mainNavigation === void 0 ? void 0 : mainNavigation.pages.length)) {
|
|
148
148
|
return null;
|
|
149
149
|
}
|
|
150
|
-
const renderMenuList = (scrollPosition, level, menuItem) => (React__default.createElement(MenuList, {
|
|
150
|
+
const renderMenuList = (scrollPosition, level, menuItem) => (React__default.createElement(MenuList, { "aria-hidden": menuLevel.scrollPosition !== scrollPosition, "aria-disabled": menuLevel.scrollPosition !== scrollPosition, "data-testid": `mobile-nav-menu-level-${level}`, isInView: menuLevel.scrollPosition === scrollPosition },
|
|
151
151
|
React__default.createElement(SubMenuMobile, { currentLevel: level, menuItem: menuItem })));
|
|
152
152
|
return (React__default.createElement(React__default.Fragment, null,
|
|
153
153
|
renderMenuList(0, 1, mainNavigation),
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { Search } from '@dnanpm/icons';
|
|
2
2
|
import React__default, { useContext } from 'react';
|
|
3
|
-
import { navIconSize } from '../../../themes/themeComponents/navigation.js';
|
|
4
|
-
import Icon from '../../Icon/Icon.js';
|
|
5
3
|
import NavContext from '../context/NavContext.js';
|
|
6
4
|
import MainNavTooltipMenu from './MainNavTooltipMenu.js';
|
|
7
5
|
|
|
8
6
|
const PageSearch = ({ searchLabel }) => {
|
|
9
|
-
const { navZIndex, searchComponent
|
|
10
|
-
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: searchLabel, closeWhenTagClicked: ['a'], contentComponent:
|
|
11
|
-
React__default.createElement(
|
|
7
|
+
const { navZIndex, searchComponent } = useContext(NavContext);
|
|
8
|
+
return (React__default.createElement(MainNavTooltipMenu, { ariaLabel: searchLabel, closeWhenTagClicked: ['a'], contentComponent: searchComponent, contentWidth: "100%", "data-testid": "header-search-container", fullWidthDesktop: true, globalStateString: "search", tooltipRight: "0", zIndex: navZIndex + 1 },
|
|
9
|
+
React__default.createElement(Search, null),
|
|
12
10
|
React__default.createElement("span", null, searchLabel)));
|
|
13
11
|
};
|
|
14
12
|
|
|
@@ -16,6 +16,7 @@ export interface MainHeaderNavigationProps {
|
|
|
16
16
|
minicart?: boolean;
|
|
17
17
|
minicartText?: string;
|
|
18
18
|
minicartAmount?: number;
|
|
19
|
+
minicartAmountLabel?: string;
|
|
19
20
|
/**
|
|
20
21
|
* Defines MinicartComponent when used. If minicart is true but component is not provided, shown as disabled element.
|
|
21
22
|
*
|
|
@@ -27,6 +28,9 @@ export interface MainHeaderNavigationProps {
|
|
|
27
28
|
* On Cart button click callback
|
|
28
29
|
*/
|
|
29
30
|
onCartButtonClick?: (e: MouseEvent<HTMLElement>) => void;
|
|
31
|
+
dnaLogoLinkAriaLabel?: string;
|
|
32
|
+
openMainMenuAriaLabel?: string;
|
|
33
|
+
closeMainMenuAriaLabel?: string;
|
|
30
34
|
showLoginTooltip?: boolean;
|
|
31
35
|
languageSelector?: boolean;
|
|
32
36
|
languageSelectorText?: string;
|
|
@@ -40,6 +44,6 @@ export interface MainHeaderNavigationProps {
|
|
|
40
44
|
notificationText?: string;
|
|
41
45
|
}
|
|
42
46
|
/** @visibleName MainHeaderNavigation */
|
|
43
|
-
declare const MainHeaderNavigation: ({ businessMenuAriaLabel, categoryCollectionText, className, collapseSize, currentUrl, isLoggedIn, items, language, languageSelector, languageSelectorText, login, loginComponent, loginText, mainMenuAriaLabel, minicart, minicartAmount, minicartComponent, minicartText, nextJSLinkComponent, notificationText, search, searchComponent, searchText, showLoginTooltip, showMinicart, zIndex, ...props }: MainHeaderNavigationProps) => React.JSX.Element;
|
|
47
|
+
declare const MainHeaderNavigation: ({ businessMenuAriaLabel, categoryCollectionText, closeMainMenuAriaLabel, className, collapseSize, currentUrl, dnaLogoLinkAriaLabel, isLoggedIn, items, language, languageSelector, languageSelectorText, login, loginComponent, loginText, mainMenuAriaLabel, minicart, minicartAmount, minicartAmountLabel, minicartComponent, minicartText, nextJSLinkComponent, notificationText, openMainMenuAriaLabel, search, searchComponent, searchText, showLoginTooltip, showMinicart, zIndex, ...props }: MainHeaderNavigationProps) => React.JSX.Element;
|
|
44
48
|
/** @component */
|
|
45
49
|
export default MainHeaderNavigation;
|
|
@@ -6,10 +6,9 @@ import useScrollPosition from '../../hooks/useScrollPosition.js';
|
|
|
6
6
|
import useWindowSize from '../../hooks/useWindowSize.js';
|
|
7
7
|
import styled, { createGlobalStyle, keyframes } from '../../themes/styled.js';
|
|
8
8
|
import theme from '../../themes/theme.js';
|
|
9
|
-
import { navMaxHeight, headerLogoSize
|
|
9
|
+
import { navMaxHeight, headerLogoSize } from '../../themes/themeComponents/navigation.js';
|
|
10
10
|
import { getMultipliedSize } from '../../utils/styledUtils.js';
|
|
11
11
|
import DnaLogo from '../DnaLogo/DnaLogo.js';
|
|
12
|
-
import Icon from '../Icon/Icon.js';
|
|
13
12
|
import Notification from '../Notification/Notification.js';
|
|
14
13
|
import BusinessMenu from './ChildComponents/BusinessMenu.js';
|
|
15
14
|
import DesktopMenu from './ChildComponents/DesktopMenu.js';
|
|
@@ -127,7 +126,7 @@ const initiateScrollToHeader = (componentRef) => {
|
|
|
127
126
|
/** @visibleName MainHeaderNavigation */
|
|
128
127
|
const MainHeaderNavigation = (_a) => {
|
|
129
128
|
var _b, _c, _d;
|
|
130
|
-
var { businessMenuAriaLabel = 'Sivustot', categoryCollectionText = 'Muut kategoriat', className, collapseSize = 767, currentUrl = '', isLoggedIn = false, items = {}, language = 'fi', languageSelector = false, languageSelectorText = 'Vaihda kieltä', login = true, loginComponent, loginText = 'Kirjaudu', mainMenuAriaLabel = 'Päänavigaatio', minicart = true, minicartAmount = 0, minicartComponent = false, minicartText = 'Ostoskori', nextJSLinkComponent = false, notificationText = '', search = true, searchComponent = false, searchText = 'Haku', showLoginTooltip = false, showMinicart = false, zIndex = 1030 } = _a, props = __rest(_a, ["businessMenuAriaLabel", "categoryCollectionText", "className", "collapseSize", "currentUrl", "isLoggedIn", "items", "language", "languageSelector", "languageSelectorText", "login", "loginComponent", "loginText", "mainMenuAriaLabel", "minicart", "minicartAmount", "minicartComponent", "minicartText", "nextJSLinkComponent", "notificationText", "search", "searchComponent", "searchText", "showLoginTooltip", "showMinicart", "zIndex"]);
|
|
129
|
+
var { businessMenuAriaLabel = 'Sivustot', categoryCollectionText = 'Muut kategoriat', closeMainMenuAriaLabel, className, collapseSize = 767, currentUrl = '', dnaLogoLinkAriaLabel, isLoggedIn = false, items = {}, language = 'fi', languageSelector = false, languageSelectorText = 'Vaihda kieltä', login = true, loginComponent, loginText = 'Kirjaudu', mainMenuAriaLabel = 'Päänavigaatio', minicart = true, minicartAmount = 0, minicartAmountLabel, minicartComponent = false, minicartText = 'Ostoskori', nextJSLinkComponent = false, notificationText = '', openMainMenuAriaLabel, search = true, searchComponent = false, searchText = 'Haku', showLoginTooltip = false, showMinicart = false, zIndex = 1030 } = _a, props = __rest(_a, ["businessMenuAriaLabel", "categoryCollectionText", "closeMainMenuAriaLabel", "className", "collapseSize", "currentUrl", "dnaLogoLinkAriaLabel", "isLoggedIn", "items", "language", "languageSelector", "languageSelectorText", "login", "loginComponent", "loginText", "mainMenuAriaLabel", "minicart", "minicartAmount", "minicartAmountLabel", "minicartComponent", "minicartText", "nextJSLinkComponent", "notificationText", "openMainMenuAriaLabel", "search", "searchComponent", "searchText", "showLoginTooltip", "showMinicart", "zIndex"]);
|
|
131
130
|
const { isMobile } = useWindowSize(collapseSize);
|
|
132
131
|
const navigationEl = useRef(null);
|
|
133
132
|
const key = prop('id');
|
|
@@ -293,24 +292,25 @@ const MainHeaderNavigation = (_a) => {
|
|
|
293
292
|
};
|
|
294
293
|
return (React__default.createElement(React__default.Fragment, null,
|
|
295
294
|
isPageOverlay && React__default.createElement(PageOverlay, { "data-testid": "navigation-overlay", navZIndex: zIndex }),
|
|
296
|
-
React__default.createElement(GlobalNavigationContainer, { className: className, collapseSize: collapseSize, "data-testid": "dna-main-header", navZIndex: zIndex, ref: navigationEl
|
|
295
|
+
React__default.createElement(GlobalNavigationContainer, { className: className, collapseSize: collapseSize, "data-testid": "dna-main-header", navZIndex: zIndex, ref: navigationEl },
|
|
297
296
|
React__default.createElement(NavContext.Provider, { value: navigationContext },
|
|
298
297
|
React__default.createElement(GlobalStyle, null),
|
|
299
298
|
!items.mainNavigation && notificationText && (React__default.createElement(Notification, { type: "info" }, notificationText)),
|
|
300
299
|
React__default.createElement(BusinessMenu, { ariaLabel: businessMenuAriaLabel, currentBusinessId: items.businessId, items: (_d = items.businessSelector) === null || _d === void 0 ? void 0 : _d.items, lang: language }),
|
|
301
300
|
React__default.createElement(NavigationWrapper, { collapseSize: collapseSize },
|
|
302
|
-
React__default.createElement(LogoLink, { "data-testid": "dna-logo-link", href: currentBusinessSite === null || currentBusinessSite === void 0 ? void 0 : currentBusinessSite.urls[language],
|
|
301
|
+
React__default.createElement(LogoLink, { "data-testid": "dna-logo-link", href: currentBusinessSite === null || currentBusinessSite === void 0 ? void 0 : currentBusinessSite.urls[language], "aria-label": dnaLogoLinkAriaLabel },
|
|
303
302
|
React__default.createElement(DnaLogo, { size: headerLogoSize })),
|
|
304
303
|
React__default.createElement(DesktopMenuContainer, { "aria-label": mainMenuAriaLabel, collapseSize: collapseSize },
|
|
305
304
|
React__default.createElement(DesktopMenu, null)),
|
|
306
305
|
React__default.createElement(HeaderIconContainer, { collapseSize: collapseSize },
|
|
307
306
|
languagesObject && languageSelector && (React__default.createElement(LanguageSelector, { currentLanguage: language, languagesObject: languagesObject, languageSelectorLabel: languageSelectorText })),
|
|
308
307
|
search && React__default.createElement(PageSearch, { searchLabel: searchText }),
|
|
309
|
-
minicart && (React__default.createElement(MinicartTooltip, { minicartAmount: minicartAmount, minicartLabel: minicartText, onCartButtonClick: props.onCartButtonClick })),
|
|
308
|
+
minicart && (React__default.createElement(MinicartTooltip, { minicartAmount: minicartAmount, minicartAmountLabel: minicartAmountLabel !== null && minicartAmountLabel !== void 0 ? minicartAmountLabel : '', minicartLabel: minicartText, onCartButtonClick: props.onCartButtonClick })),
|
|
310
309
|
login && React__default.createElement(LoginTooltip, { loginLabel: loginText, isLogged: isLoggedIn }),
|
|
311
310
|
React__default.createElement(IconContainer, { collapseSize: collapseSize, "data-testid": "header-mobile-menu-container" },
|
|
312
|
-
React__default.createElement(MobileMenuButton, { "aria-expanded": isMobileMenuOpen, "aria-label":
|
|
313
|
-
|
|
311
|
+
React__default.createElement(MobileMenuButton, { "aria-expanded": isMobileMenuOpen, "aria-label": isMobileMenuOpen
|
|
312
|
+
? closeMainMenuAriaLabel
|
|
313
|
+
: openMainMenuAriaLabel, "data-testid": "header-mobile-menu-toggle", onClick: handleToggleClick }, isMobileMenuOpen ? React__default.createElement(Close, null) : React__default.createElement(Menu, null)))),
|
|
314
314
|
isMobile && React__default.createElement(RenderMobileMenu, null))))));
|
|
315
315
|
};
|
|
316
316
|
|