@comicrelief/component-library 8.54.1 → 8.55.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/dist/components/Atoms/Logo/Logo.js +0 -5
- package/dist/components/Atoms/Logo/Logo.test.js +1 -1
- package/dist/components/Atoms/LogoNav2026/LogoNav2026.test.js +94 -0
- package/dist/components/Atoms/LogoNav2026/_LogoNav2026.js +63 -0
- package/dist/components/Atoms/LogoNav2026/assets/cr-logo-mob.svg +14 -0
- package/dist/components/Atoms/LogoNav2026/assets/cr-logo.svg +14 -0
- package/dist/components/Molecules/LogoLinked/LogoLinked.md +6 -1
- package/dist/components/Organisms/Header/HeaderNav/HeaderNav.style.js +3 -3
- package/dist/components/Organisms/Header2025/Header2025.md +1 -1
- package/dist/components/Organisms/Header2025/HeaderNav2025/HeaderNav2025.js +1 -1
- package/dist/components/Organisms/Header2025/HeaderNav2025/HeaderNav2025.style.js +3 -3
- package/dist/components/Organisms/Header2026/Burger/BurgerMenu.js +25 -0
- package/dist/components/Organisms/Header2026/Burger/BurgerMenu.style.js +58 -0
- package/dist/components/Organisms/Header2026/Header2026.js +148 -0
- package/dist/components/Organisms/Header2026/Header2026.md +14 -0
- package/dist/components/Organisms/Header2026/Header2026.style.js +129 -0
- package/dist/components/Organisms/Header2026/Navs/Navs.js +209 -0
- package/dist/components/Organisms/Header2026/Navs/Navs.style.js +104 -0
- package/dist/components/Organisms/Header2026/Navs/PrimaryNavItem.js +227 -0
- package/dist/components/Organisms/Header2026/Navs/PrimaryNavItem.style.js +401 -0
- package/dist/components/Organisms/Header2026/Navs/arrow-right.png +0 -0
- package/dist/components/Organisms/Header2026/Navs/arrow.svg +6 -0
- package/dist/components/Organisms/Header2026/Navs/chevron-down.svg +3 -0
- package/dist/components/Organisms/Header2026/assets/arrow-icon.svg +3 -0
- package/dist/components/Organisms/Header2026/assets/chevron-icon.svg +3 -0
- package/dist/components/Organisms/Header2026/assets/search-icon.svg +10 -0
- package/dist/components/Organisms/Header2026/header2026.test.js +24 -0
- package/dist/components/Organisms/Header2026/mockData/mockData.json +569 -0
- package/dist/components/Organisms/Header2026/mockData/query.graphql +64 -0
- package/dist/theme/shared/animations.js +6 -1
- package/dist/utils/navHelper.js +75 -3
- package/dist/utils/remove-extra-styles-in-preview.css +14 -0
- package/dist/utils/urlHelper.js +30 -0
- package/package.json +1 -1
- package/src/components/Atoms/Logo/Logo.js +0 -4
- package/src/components/Atoms/Logo/Logo.test.js +5 -5
- package/src/components/Atoms/LogoNav2026/LogoNav2026.test.js +91 -0
- package/src/components/Atoms/LogoNav2026/_LogoNav2026.js +75 -0
- package/src/components/Atoms/LogoNav2026/assets/cr-logo-mob.svg +14 -0
- package/src/components/Atoms/LogoNav2026/assets/cr-logo.svg +14 -0
- package/src/components/Molecules/LogoLinked/LogoLinked.md +6 -1
- package/src/components/Organisms/Header/HeaderNav/HeaderNav.style.js +2 -2
- package/src/components/Organisms/Header2025/Header2025.md +1 -1
- package/src/components/Organisms/Header2025/HeaderNav2025/HeaderNav2025.js +1 -1
- package/src/components/Organisms/Header2025/HeaderNav2025/HeaderNav2025.style.js +2 -2
- package/src/components/Organisms/Header2026/Burger/BurgerMenu.js +26 -0
- package/src/components/Organisms/Header2026/Burger/BurgerMenu.style.js +104 -0
- package/src/components/Organisms/Header2026/Header2026.js +215 -0
- package/src/components/Organisms/Header2026/Header2026.md +14 -0
- package/src/components/Organisms/Header2026/Header2026.style.js +195 -0
- package/src/components/Organisms/Header2026/Navs/Navs.js +251 -0
- package/src/components/Organisms/Header2026/Navs/Navs.style.js +168 -0
- package/src/components/Organisms/Header2026/Navs/PrimaryNavItem.js +354 -0
- package/src/components/Organisms/Header2026/Navs/PrimaryNavItem.style.js +658 -0
- package/src/components/Organisms/Header2026/Navs/arrow-right.png +0 -0
- package/src/components/Organisms/Header2026/Navs/arrow.svg +6 -0
- package/src/components/Organisms/Header2026/Navs/chevron-down.svg +3 -0
- package/src/components/Organisms/Header2026/assets/arrow-icon.svg +3 -0
- package/src/components/Organisms/Header2026/assets/chevron-icon.svg +3 -0
- package/src/components/Organisms/Header2026/assets/search-icon.svg +10 -0
- package/src/components/Organisms/Header2026/header2026.test.js +22 -0
- package/src/components/Organisms/Header2026/mockData/mockData.json +569 -0
- package/src/components/Organisms/Header2026/mockData/query.graphql +64 -0
- package/src/theme/crTheme/theme.js +0 -1
- package/src/theme/shared/animations.js +43 -2
- package/src/utils/navHelper.js +82 -2
- package/src/utils/remove-extra-styles-in-preview.css +14 -0
- package/src/utils/urlHelper.js +27 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SearchIconWrapperDesktop = exports.MobileMenuOverlay = exports.MobileBackHeader = exports.InnerWrapper = exports.Header2026Wrapper = exports.DonateButtonTopBarWrapper = exports.ButtonsAndIcons = exports.Brand = exports.BackChevron = void 0;
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
var _zIndex = _interopRequireDefault(require("../../../theme/shared/zIndex"));
|
|
10
|
+
var _containers = _interopRequireDefault(require("../../../theme/shared/containers"));
|
|
11
|
+
var _animations = require("../../../theme/shared/animations");
|
|
12
|
+
const Header2026Wrapper = exports.Header2026Wrapper = _styledComponents.default.header.withConfig({
|
|
13
|
+
displayName: "Header2026style__Header2026Wrapper",
|
|
14
|
+
componentId: "sc-1do20kd-0"
|
|
15
|
+
})(["position:relative;z-index:2;background-color:", ";border:1px solid ", ";box-shadow:0 5px 20px 0 rgba(0,0,0,0.05);border-radius:16px;@media ", "{height:66px;margin-top:18px;&:has(li:hover),&:has(li:focus-within){border-radius:16px 16px 0 0;}}"], _ref => {
|
|
16
|
+
let {
|
|
17
|
+
theme
|
|
18
|
+
} = _ref;
|
|
19
|
+
return theme.color('white');
|
|
20
|
+
}, _ref2 => {
|
|
21
|
+
let {
|
|
22
|
+
theme
|
|
23
|
+
} = _ref2;
|
|
24
|
+
return theme.color('grey_light');
|
|
25
|
+
}, _ref3 => {
|
|
26
|
+
let {
|
|
27
|
+
theme
|
|
28
|
+
} = _ref3;
|
|
29
|
+
return theme.breakpoints2026('L');
|
|
30
|
+
});
|
|
31
|
+
const InnerWrapper = exports.InnerWrapper = _styledComponents.default.div.withConfig({
|
|
32
|
+
displayName: "Header2026style__InnerWrapper",
|
|
33
|
+
componentId: "sc-1do20kd-1"
|
|
34
|
+
})(["display:flex;align-items:center;height:100%;cursor:pointer;max-width:", ";padding:10px;position:relative;z-index:2;@media ", "{padding:10px 16px 10px 14px;}@media ", "{padding:10px 16px;}@media ", "{margin:0 auto;gap:24px;}"], _containers.default.large, _ref4 => {
|
|
35
|
+
let {
|
|
36
|
+
theme
|
|
37
|
+
} = _ref4;
|
|
38
|
+
return theme.breakpoints2026('S');
|
|
39
|
+
}, _ref5 => {
|
|
40
|
+
let {
|
|
41
|
+
theme
|
|
42
|
+
} = _ref5;
|
|
43
|
+
return theme.breakpoints2026('M');
|
|
44
|
+
}, _ref6 => {
|
|
45
|
+
let {
|
|
46
|
+
theme
|
|
47
|
+
} = _ref6;
|
|
48
|
+
return theme.breakpoints2026('L');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// size of "Comic Relief" logo is set with props on LogoLinked2026
|
|
52
|
+
const Brand = exports.Brand = _styledComponents.default.div.withConfig({
|
|
53
|
+
displayName: "Header2026style__Brand",
|
|
54
|
+
componentId: "sc-1do20kd-2"
|
|
55
|
+
})(["", ";margin-right:auto;display:flex;align-items:center;a{border:0;color:transparent;:hover{border:0;}}@media ", "{margin-right:0}"], (0, _zIndex.default)('high'), _ref7 => {
|
|
56
|
+
let {
|
|
57
|
+
theme
|
|
58
|
+
} = _ref7;
|
|
59
|
+
return theme.breakpoints2026('L');
|
|
60
|
+
});
|
|
61
|
+
const ButtonsAndIcons = exports.ButtonsAndIcons = _styledComponents.default.div.withConfig({
|
|
62
|
+
displayName: "Header2026style__ButtonsAndIcons",
|
|
63
|
+
componentId: "sc-1do20kd-3"
|
|
64
|
+
})(["margin-left:auto;display:flex;"]);
|
|
65
|
+
const DonateButtonTopBarWrapper = exports.DonateButtonTopBarWrapper = _styledComponents.default.div.withConfig({
|
|
66
|
+
displayName: "Header2026style__DonateButtonTopBarWrapper",
|
|
67
|
+
componentId: "sc-1do20kd-4"
|
|
68
|
+
})(["display:flex;justify-content:center;a{", ";padding:8px;border-radius:8px;font-family:Montserrat;font-size:0.875rem;width:100%;height:inherit;transition:width 0.4s cubic-bezier(0.5,1.5,0.5,0.80);&:hover,&:focus{width:100%;box-shadow:0 5px 20px 0 rgba(0,0,0,0.05);", ";}@media ", "{padding:8px 12px;}@media ", "{font-size:1rem;padding:10px 16px;}}"], _animations.pulseOutAnimation, _animations.pulseInAnimation, _ref8 => {
|
|
69
|
+
let {
|
|
70
|
+
theme
|
|
71
|
+
} = _ref8;
|
|
72
|
+
return theme.breakpoints2026('S');
|
|
73
|
+
}, _ref9 => {
|
|
74
|
+
let {
|
|
75
|
+
theme
|
|
76
|
+
} = _ref9;
|
|
77
|
+
return theme.breakpoints2026('L');
|
|
78
|
+
});
|
|
79
|
+
const SearchIconWrapperDesktop = exports.SearchIconWrapperDesktop = _styledComponents.default.div.withConfig({
|
|
80
|
+
displayName: "Header2026style__SearchIconWrapperDesktop",
|
|
81
|
+
componentId: "sc-1do20kd-5"
|
|
82
|
+
})(["display:none;@media ", "{position:relative;display:flex;align-items:center;width:auto;margin-right:0px;right:0px;background-color:", ";img{margin-right:24px;width:18px;height:18px;transition:transform 0.2s ease;transform-origin:center;}a{overflow:visible;display:block;}&:hover img,&:focus-within img{transform:scale(1.33);}}"], _ref10 => {
|
|
83
|
+
let {
|
|
84
|
+
theme
|
|
85
|
+
} = _ref10;
|
|
86
|
+
return theme.breakpoints2026('L');
|
|
87
|
+
}, _ref11 => {
|
|
88
|
+
let {
|
|
89
|
+
theme
|
|
90
|
+
} = _ref11;
|
|
91
|
+
return theme.color('white');
|
|
92
|
+
});
|
|
93
|
+
const MobileBackHeader = exports.MobileBackHeader = _styledComponents.default.button.withConfig({
|
|
94
|
+
displayName: "Header2026style__MobileBackHeader",
|
|
95
|
+
componentId: "sc-1do20kd-6"
|
|
96
|
+
})(["display:flex;align-items:center;gap:12px;background:transparent;border:none;padding:0;cursor:pointer;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal;color:", ";@media ", "{display:none;}"], _ref12 => {
|
|
97
|
+
let {
|
|
98
|
+
theme
|
|
99
|
+
} = _ref12;
|
|
100
|
+
return theme.color('black');
|
|
101
|
+
}, _ref13 => {
|
|
102
|
+
let {
|
|
103
|
+
theme
|
|
104
|
+
} = _ref13;
|
|
105
|
+
return theme.breakpoints2026('L');
|
|
106
|
+
});
|
|
107
|
+
const BackChevron = exports.BackChevron = _styledComponents.default.span.withConfig({
|
|
108
|
+
displayName: "Header2026style__BackChevron",
|
|
109
|
+
componentId: "sc-1do20kd-7"
|
|
110
|
+
})(["display:flex;align-items:center;justify-content:center;width:8px;transform:rotate(180deg);img{width:100%;height:auto;display:block;}"]);
|
|
111
|
+
const MobileMenuOverlay = exports.MobileMenuOverlay = _styledComponents.default.div.withConfig({
|
|
112
|
+
displayName: "Header2026style__MobileMenuOverlay",
|
|
113
|
+
componentId: "sc-1do20kd-8"
|
|
114
|
+
})(["display:", ";position:fixed;top:0;left:0;right:0;bottom:0;background-color:", ";z-index:1;@media ", "{display:none;}"], _ref14 => {
|
|
115
|
+
let {
|
|
116
|
+
isVisible
|
|
117
|
+
} = _ref14;
|
|
118
|
+
return isVisible ? 'block' : 'none';
|
|
119
|
+
}, _ref15 => {
|
|
120
|
+
let {
|
|
121
|
+
theme
|
|
122
|
+
} = _ref15;
|
|
123
|
+
return theme.color('grey_medium');
|
|
124
|
+
}, _ref16 => {
|
|
125
|
+
let {
|
|
126
|
+
theme
|
|
127
|
+
} = _ref16;
|
|
128
|
+
return theme.breakpoints2026('L');
|
|
129
|
+
});
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _Link = _interopRequireDefault(require("../../../Atoms/Link/Link"));
|
|
11
|
+
var _Text = _interopRequireDefault(require("../../../Atoms/Text/Text"));
|
|
12
|
+
var _BurgerMenu = _interopRequireDefault(require("../Burger/BurgerMenu"));
|
|
13
|
+
var _Icon = _interopRequireDefault(require("../../../Atoms/SocialIcons/Icon/Icon"));
|
|
14
|
+
var _breakpoints = require("../../../../theme/shared/breakpoints2026");
|
|
15
|
+
var _navHelper = require("../../../../utils/navHelper");
|
|
16
|
+
var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
|
|
17
|
+
var _allowListed = _interopRequireDefault(require("../../../../utils/allowListed"));
|
|
18
|
+
var _PrimaryNavItem = _interopRequireDefault(require("./PrimaryNavItem"));
|
|
19
|
+
var _searchIcon = _interopRequireDefault(require("../assets/search-icon.svg"));
|
|
20
|
+
var _urlHelper = _interopRequireDefault(require("../../../../utils/urlHelper"));
|
|
21
|
+
var _Navs = require("./Navs.style");
|
|
22
|
+
const Navs = _ref => {
|
|
23
|
+
let {
|
|
24
|
+
navItems = {},
|
|
25
|
+
characterLimit,
|
|
26
|
+
isMenuOpen,
|
|
27
|
+
setIsMenuOpen,
|
|
28
|
+
devMode = false,
|
|
29
|
+
onSubMenuChange = () => {},
|
|
30
|
+
onTertiaryMenuChange = () => {}
|
|
31
|
+
} = _ref;
|
|
32
|
+
const {
|
|
33
|
+
headerPageGroups
|
|
34
|
+
} = navItems;
|
|
35
|
+
const [openedSubMenu, setOpenedSubMenu] = (0, _react.useState)({});
|
|
36
|
+
const [isNotDesktop, setIsNotDesktop] = (0, _react.useState)(() => {
|
|
37
|
+
if (typeof window !== 'undefined') {
|
|
38
|
+
return window.innerWidth < _breakpoints.breakpointValues2026.L;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
});
|
|
42
|
+
const [processedItems, setProcessedItems] = (0, _react.useState)(null);
|
|
43
|
+
const [isTertiaryOpen, setIsTertiaryOpen] = (0, _react.useState)(false);
|
|
44
|
+
let theseGroups = null;
|
|
45
|
+
|
|
46
|
+
// Check if any submenu is currently open
|
|
47
|
+
const isSubMenuOpen = Object.values(openedSubMenu).some(v => v);
|
|
48
|
+
|
|
49
|
+
// Close all submenus (used by back button in header)
|
|
50
|
+
const closeSubMenus = (0, _react.useCallback)(() => {
|
|
51
|
+
setOpenedSubMenu({});
|
|
52
|
+
}, []);
|
|
53
|
+
|
|
54
|
+
// Handle tertiary menu changes from PrimaryNavItem
|
|
55
|
+
const handleTertiaryMenuChange = (0, _react.useCallback)((isOpen, parentName, closeFunction) => {
|
|
56
|
+
setIsTertiaryOpen(isOpen);
|
|
57
|
+
onTertiaryMenuChange(isOpen && isNotDesktop, parentName, closeFunction);
|
|
58
|
+
}, [isNotDesktop, onTertiaryMenuChange]);
|
|
59
|
+
|
|
60
|
+
// Notify parent when submenu state changes, passing close function
|
|
61
|
+
(0, _react.useEffect)(() => {
|
|
62
|
+
onSubMenuChange(isSubMenuOpen && isNotDesktop, closeSubMenus);
|
|
63
|
+
}, [isSubMenuOpen, isNotDesktop, onSubMenuChange, closeSubMenus]);
|
|
64
|
+
const toggleBurgerMenu = e => {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
setIsMenuOpen(!isMenuOpen);
|
|
67
|
+
|
|
68
|
+
// If we've just closed the nav, collapse any open submenus and reset tertiary state:
|
|
69
|
+
if (isMenuOpen) {
|
|
70
|
+
setOpenedSubMenu({});
|
|
71
|
+
setIsTertiaryOpen(false);
|
|
72
|
+
onTertiaryMenuChange(false, null, null);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// Toggle the open/not-open value of the specific submenu passed
|
|
77
|
+
const toggleSubMenu = (e, item) => {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
setOpenedSubMenu({
|
|
80
|
+
[item]: !openedSubMenu[item]
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Called by eventHandler to reset the nav on a specific mouse interaction
|
|
85
|
+
const resetMoreNavMouse = () => {
|
|
86
|
+
// Remove active 'opened' state for any open More Nav submenus
|
|
87
|
+
setOpenedSubMenu({});
|
|
88
|
+
// And also remove the focus state so the 'focus-within' nav rules don't apply:
|
|
89
|
+
document.activeElement.blur();
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// Process the nav items on initial mount:
|
|
93
|
+
(0, _react.useMemo)(() => {
|
|
94
|
+
if (!headerPageGroups) return;
|
|
95
|
+
// Divide up nav items accordingly
|
|
96
|
+
const theseItems = (0, _navHelper.MoreNavPreProcessNew)(headerPageGroups, characterLimit);
|
|
97
|
+
setProcessedItems(theseItems);
|
|
98
|
+
}, [headerPageGroups, characterLimit]);
|
|
99
|
+
|
|
100
|
+
// Custom function to let us update the nav dynamically:
|
|
101
|
+
const screenResizeNav = (0, _react.useCallback)(() => {
|
|
102
|
+
// Grab the current width:
|
|
103
|
+
const currentScreenWidth = typeof window !== 'undefined' ? window.innerWidth : null;
|
|
104
|
+
|
|
105
|
+
// Compare to our breakpoint:
|
|
106
|
+
const isCurrentlyNotDesktop = currentScreenWidth < _breakpoints.breakpointValues2026.L;
|
|
107
|
+
|
|
108
|
+
// Only if the screen size has *changed*, update the state:
|
|
109
|
+
if (currentScreenWidth !== null && isNotDesktop !== isCurrentlyNotDesktop) {
|
|
110
|
+
// listeners, BEFORE we update the flag that'd remove the elements from the DOM:
|
|
111
|
+
if (isCurrentlyNotDesktop && processedItems.moreNavGroups.length) {
|
|
112
|
+
document.getElementById('more-nav-ul').removeEventListener('mouseleave', resetMoreNavMouse);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Update our desktop flag to prevent any further calls:
|
|
116
|
+
setIsNotDesktop(isCurrentlyNotDesktop);
|
|
117
|
+
}
|
|
118
|
+
}, [isNotDesktop, processedItems]);
|
|
119
|
+
|
|
120
|
+
// Hook into browser's own onresize event to call our custom wrapper function:
|
|
121
|
+
(0, _react.useEffect)(() => {
|
|
122
|
+
if (typeof window !== 'undefined') window.onresize = screenResizeNav;
|
|
123
|
+
}, [screenResizeNav]);
|
|
124
|
+
|
|
125
|
+
// Once we've processed the items, assign according to breakpoint; sub-desktop 'Nav'
|
|
126
|
+
// breakpoints use 'raw' unprocessed header page groups, Desktop ('Nav' breakpoint and up)
|
|
127
|
+
// uses the divided-up versions:
|
|
128
|
+
if (processedItems) theseGroups = isNotDesktop ? headerPageGroups : processedItems.standardGroups;
|
|
129
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Navs.Navigation, {
|
|
130
|
+
"data-testid": "Nav",
|
|
131
|
+
"aria-label": "main-menu",
|
|
132
|
+
isMenuOpen: isMenuOpen,
|
|
133
|
+
role: "navigation",
|
|
134
|
+
id: "main-nav"
|
|
135
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, {
|
|
136
|
+
id: "main-menu",
|
|
137
|
+
tag: "h2"
|
|
138
|
+
}, "Main navigation"), /*#__PURE__*/_react.default.createElement(_Navs.PrimaryMenuWrapper, {
|
|
139
|
+
"data-testid": "PrimaryMenuWrapper"
|
|
140
|
+
}, processedItems &&
|
|
141
|
+
/*#__PURE__*/
|
|
142
|
+
// First level of the navigation (ul tag): Parent
|
|
143
|
+
_react.default.createElement(_Navs.PrimaryMenu, {
|
|
144
|
+
"data-testid": "PrimaryMenu",
|
|
145
|
+
role: "menubar"
|
|
146
|
+
}, theseGroups.map((group, index) => {
|
|
147
|
+
/* Generate an ID from the primary page name */
|
|
148
|
+
const thisID = group.primaryPageName.toLowerCase().replace(/\s+/g, '-');
|
|
149
|
+
/* Determine which field represents our url path */
|
|
150
|
+
let thisUrl = (0, _navHelper.NavHelperPrimary)(group);
|
|
151
|
+
const relNoopener = !(0, _allowListed.default)(thisUrl) && 'noopener' || undefined;
|
|
152
|
+
/* Get all column links for submenu */
|
|
153
|
+
const columnLinks = (0, _navHelper.getColumnLinks)(group);
|
|
154
|
+
const hasSubMenu = columnLinks.length > 0;
|
|
155
|
+
const hasPopUp = hasSubMenu ? 'true' : null;
|
|
156
|
+
thisUrl = (0, _internalLinkHelper.InternalLinkHelper)(thisUrl);
|
|
157
|
+
|
|
158
|
+
// Renders the primary page as the parent; a button for the dropdown
|
|
159
|
+
// on mobile, a clickable LINK on desktop but hover to reveal the submenu:
|
|
160
|
+
return (
|
|
161
|
+
/*#__PURE__*/
|
|
162
|
+
// Secondary Menu is nested inside PrimaryNavItem
|
|
163
|
+
_react.default.createElement(_PrimaryNavItem.default, {
|
|
164
|
+
thisID: thisID,
|
|
165
|
+
key: group.id,
|
|
166
|
+
index: index,
|
|
167
|
+
hasSubMenu: hasSubMenu,
|
|
168
|
+
openedSubMenu: openedSubMenu,
|
|
169
|
+
toggleSubMenu: toggleSubMenu,
|
|
170
|
+
hasPopUp: hasPopUp,
|
|
171
|
+
isNotDesktop: isNotDesktop,
|
|
172
|
+
thisUrl: thisUrl,
|
|
173
|
+
group: group,
|
|
174
|
+
navHelperNew: _navHelper.NavHelperNew,
|
|
175
|
+
internalLinkHelper: _internalLinkHelper.InternalLinkHelper,
|
|
176
|
+
relNoopener: relNoopener,
|
|
177
|
+
devMode: devMode,
|
|
178
|
+
onTertiaryMenuChange: handleTertiaryMenuChange,
|
|
179
|
+
isTertiaryOpenGlobal: isTertiaryOpen,
|
|
180
|
+
isSubMenuOpenGlobal: isSubMenuOpen
|
|
181
|
+
})
|
|
182
|
+
);
|
|
183
|
+
}), !isSubMenuOpen && !isTertiaryOpen && /*#__PURE__*/_react.default.createElement(_Navs.SearchWrapperMobile, null, /*#__PURE__*/_react.default.createElement(_Navs.SearchLinkMobile, {
|
|
184
|
+
href: (0, _urlHelper.default)('/search', devMode)
|
|
185
|
+
}, "Search", /*#__PURE__*/_react.default.createElement(_Navs.SearchIconWrapperMobile, {
|
|
186
|
+
"data-testid": "SearchIconWrapperMobile"
|
|
187
|
+
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
188
|
+
icon: _searchIcon.default,
|
|
189
|
+
title: "Search",
|
|
190
|
+
target: "self",
|
|
191
|
+
role: "button",
|
|
192
|
+
href: (0, _urlHelper.default)('/search', devMode),
|
|
193
|
+
brand: "comicrelief",
|
|
194
|
+
tabIndex: "0",
|
|
195
|
+
id: "search",
|
|
196
|
+
isHeader: true
|
|
197
|
+
})))))), isMenuOpen && !isTertiaryOpen && /*#__PURE__*/_react.default.createElement(_Navs.DonateButtonMobileModalWrapper, {
|
|
198
|
+
"data-testid": "donate-button--mobile"
|
|
199
|
+
}, /*#__PURE__*/_react.default.createElement(_Link.default, {
|
|
200
|
+
color: "red",
|
|
201
|
+
type: "button",
|
|
202
|
+
href: "https://donation.comicrelief.com/"
|
|
203
|
+
}, "Donate"))), /*#__PURE__*/_react.default.createElement(_BurgerMenu.default, {
|
|
204
|
+
"data-testid": "BurgerMenu",
|
|
205
|
+
toggle: toggleBurgerMenu,
|
|
206
|
+
isMenuOpen: isMenuOpen
|
|
207
|
+
}));
|
|
208
|
+
};
|
|
209
|
+
var _default = exports.default = Navs;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SearchWrapperMobile = exports.SearchLinkMobile = exports.SearchIconWrapperMobile = exports.PrimaryMenuWrapper = exports.PrimaryMenu = exports.Navigation = exports.DonateButtonMobileModalWrapper = void 0;
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
var _Link = _interopRequireDefault(require("../../../Atoms/Link/Link"));
|
|
10
|
+
var _hideVisually = _interopRequireDefault(require("../../../../theme/shared/hideVisually"));
|
|
11
|
+
var _zIndex = _interopRequireDefault(require("../../../../theme/shared/zIndex"));
|
|
12
|
+
const Navigation = exports.Navigation = _styledComponents.default.nav.withConfig({
|
|
13
|
+
displayName: "Navsstyle__Navigation",
|
|
14
|
+
componentId: "sc-1hd9a50-0"
|
|
15
|
+
})(["display:", ";width:100%;position:absolute;top:75px;left:0;", ";@media ", "{", ";position:static;top:0;display:block;margin:0;width:100%;height:100%;box-shadow:none;}> h2{", ";}"], _ref => {
|
|
16
|
+
let {
|
|
17
|
+
isMenuOpen
|
|
18
|
+
} = _ref;
|
|
19
|
+
return isMenuOpen ? 'block' : 'none';
|
|
20
|
+
}, (0, _zIndex.default)('higher'), _ref2 => {
|
|
21
|
+
let {
|
|
22
|
+
theme
|
|
23
|
+
} = _ref2;
|
|
24
|
+
return theme.breakpoints2026('L');
|
|
25
|
+
}, (0, _zIndex.default)('medium'), _hideVisually.default);
|
|
26
|
+
const PrimaryMenuWrapper = exports.PrimaryMenuWrapper = _styledComponents.default.div.withConfig({
|
|
27
|
+
displayName: "Navsstyle__PrimaryMenuWrapper",
|
|
28
|
+
componentId: "sc-1hd9a50-1"
|
|
29
|
+
})(["background-color:", ";box-shadow:0 5px 20px 0 rgba(0,0,0,0.05);border-radius:16px;overflow:hidden;position:static;@media ", "{box-shadow:none;border-radius:0;height:100%;display:flex;justify-content:center;align-items:center;overflow:visible;}"], _ref3 => {
|
|
30
|
+
let {
|
|
31
|
+
theme
|
|
32
|
+
} = _ref3;
|
|
33
|
+
return theme.color('white');
|
|
34
|
+
}, _ref4 => {
|
|
35
|
+
let {
|
|
36
|
+
theme
|
|
37
|
+
} = _ref4;
|
|
38
|
+
return theme.breakpoints2026('L');
|
|
39
|
+
});
|
|
40
|
+
const PrimaryMenu = exports.PrimaryMenu = _styledComponents.default.ul.withConfig({
|
|
41
|
+
displayName: "Navsstyle__PrimaryMenu",
|
|
42
|
+
componentId: "sc-1hd9a50-2"
|
|
43
|
+
})(["background-color:transparent;list-style:none outside;padding:0;margin:0;width:100%;height:100%;position:relative border:1px solid green;@media ", "{position:static;display:flex;justify-content:center;align-items:center;gap:24px;width:100%;height:100%;background-color:", ";}"], _ref5 => {
|
|
44
|
+
let {
|
|
45
|
+
theme
|
|
46
|
+
} = _ref5;
|
|
47
|
+
return theme.breakpoints2026('L');
|
|
48
|
+
}, _ref6 => {
|
|
49
|
+
let {
|
|
50
|
+
theme
|
|
51
|
+
} = _ref6;
|
|
52
|
+
return theme.color('white');
|
|
53
|
+
});
|
|
54
|
+
const DonateButtonMobileModalWrapper = exports.DonateButtonMobileModalWrapper = _styledComponents.default.div.withConfig({
|
|
55
|
+
displayName: "Navsstyle__DonateButtonMobileModalWrapper",
|
|
56
|
+
componentId: "sc-1hd9a50-3"
|
|
57
|
+
})(["display:block;background-color:inherit;margin-top:48px;width:100%;a{box-sizing:border-box;display:block;text-align:center;border-radius:16px;width:100%;margin:0;font-family:Montserrat;height:auto;padding:18px 0;&:hover,&:focus{width:100%;box-shadow:0 5px 20px 0 rgba(0,0,0,0.05);}}@media ", "{display:none;}"], _ref7 => {
|
|
58
|
+
let {
|
|
59
|
+
theme
|
|
60
|
+
} = _ref7;
|
|
61
|
+
return theme.breakpoints2026('L');
|
|
62
|
+
});
|
|
63
|
+
const SearchWrapperMobile = exports.SearchWrapperMobile = _styledComponents.default.div.withConfig({
|
|
64
|
+
displayName: "Navsstyle__SearchWrapperMobile",
|
|
65
|
+
componentId: "sc-1hd9a50-4"
|
|
66
|
+
})(["display:block;width:100%;border-top:1px solid ", ";@media ", "{display:none;}"], _ref8 => {
|
|
67
|
+
let {
|
|
68
|
+
theme
|
|
69
|
+
} = _ref8;
|
|
70
|
+
return theme.color('grey_medium');
|
|
71
|
+
}, _ref9 => {
|
|
72
|
+
let {
|
|
73
|
+
theme
|
|
74
|
+
} = _ref9;
|
|
75
|
+
return theme.breakpoints2026('L');
|
|
76
|
+
});
|
|
77
|
+
const SearchLinkMobile = exports.SearchLinkMobile = (0, _styledComponents.default)(_Link.default).withConfig({
|
|
78
|
+
displayName: "Navsstyle__SearchLinkMobile",
|
|
79
|
+
componentId: "sc-1hd9a50-5"
|
|
80
|
+
})(["display:flex;align-items:center;justify-content:space-between;padding:25px;width:100%;text-decoration:none;font-family:Montserrat;font-weight:600;color:", ";transition:color 0.2s ease;outline-offset:-3px;&:hover,&:focus{color:", ";background-color:", ";}"], _ref10 => {
|
|
81
|
+
let {
|
|
82
|
+
theme
|
|
83
|
+
} = _ref10;
|
|
84
|
+
return theme.color('black');
|
|
85
|
+
}, _ref11 => {
|
|
86
|
+
let {
|
|
87
|
+
theme
|
|
88
|
+
} = _ref11;
|
|
89
|
+
return theme.color('red');
|
|
90
|
+
}, _ref12 => {
|
|
91
|
+
let {
|
|
92
|
+
theme
|
|
93
|
+
} = _ref12;
|
|
94
|
+
return theme.color('grey_extra_light');
|
|
95
|
+
});
|
|
96
|
+
const SearchIconWrapperMobile = exports.SearchIconWrapperMobile = _styledComponents.default.div.withConfig({
|
|
97
|
+
displayName: "Navsstyle__SearchIconWrapperMobile",
|
|
98
|
+
componentId: "sc-1hd9a50-6"
|
|
99
|
+
})(["overflow:visible;img{width:18px;height:18px;transition:transform 0.2s ease;transform-origin:center;}a{overflow:visible;display:block;}&:hover img,&:focus-within img{transform:scale(1.33);}@media ", "{display:none;}"], _ref13 => {
|
|
100
|
+
let {
|
|
101
|
+
theme
|
|
102
|
+
} = _ref13;
|
|
103
|
+
return theme.breakpoints2026('L');
|
|
104
|
+
});
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _Text = _interopRequireDefault(require("../../../Atoms/Text/Text"));
|
|
11
|
+
var _chevronIcon = _interopRequireDefault(require("../assets/chevron-icon.svg"));
|
|
12
|
+
var _urlHelper = _interopRequireDefault(require("../../../../utils/urlHelper"));
|
|
13
|
+
var _PrimaryNavItem = require("./PrimaryNavItem.style");
|
|
14
|
+
// Helper to group tertiary links (pageLevel: false)
|
|
15
|
+
// so that they sit under their parent secondary links (pageLevel: true)
|
|
16
|
+
const groupTertiaryLinks = links => {
|
|
17
|
+
if (!links) return {};
|
|
18
|
+
const groups = {};
|
|
19
|
+
let currentSecondaryId = null;
|
|
20
|
+
links.forEach(link => {
|
|
21
|
+
if (link.pageLevel) {
|
|
22
|
+
currentSecondaryId = link.id;
|
|
23
|
+
groups[currentSecondaryId] = [];
|
|
24
|
+
} else if (currentSecondaryId) {
|
|
25
|
+
groups[currentSecondaryId].push(link);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return groups;
|
|
29
|
+
};
|
|
30
|
+
const PrimaryNavItem = _ref => {
|
|
31
|
+
let {
|
|
32
|
+
thisID,
|
|
33
|
+
relNoopener,
|
|
34
|
+
hasSubMenu,
|
|
35
|
+
index,
|
|
36
|
+
openedSubMenu,
|
|
37
|
+
isNotDesktop,
|
|
38
|
+
hasPopUp,
|
|
39
|
+
thisUrl,
|
|
40
|
+
toggleSubMenu,
|
|
41
|
+
group,
|
|
42
|
+
navHelperNew,
|
|
43
|
+
internalLinkHelper,
|
|
44
|
+
devMode = false,
|
|
45
|
+
onTertiaryMenuChange,
|
|
46
|
+
isTertiaryOpenGlobal = false,
|
|
47
|
+
isSubMenuOpenGlobal = false,
|
|
48
|
+
...rest
|
|
49
|
+
} = _ref;
|
|
50
|
+
const [openTertiaryMenu, setOpenTertiaryMenu] = (0, _react.useState)(null);
|
|
51
|
+
const handleTertiaryToggle = (e, linkId) => {
|
|
52
|
+
e.preventDefault();
|
|
53
|
+
e.stopPropagation();
|
|
54
|
+
const isOpening = openTertiaryMenu !== linkId;
|
|
55
|
+
setOpenTertiaryMenu(isOpening ? linkId : null);
|
|
56
|
+
if (onTertiaryMenuChange) {
|
|
57
|
+
onTertiaryMenuChange(isOpening, isOpening ? group.primaryPageName : null, () => {
|
|
58
|
+
setOpenTertiaryMenu(null);
|
|
59
|
+
onTertiaryMenuChange(false, null, null);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Reset tertiary menu state when the secondary submenu closes
|
|
65
|
+
(0, _react.useEffect)(() => {
|
|
66
|
+
if (!openedSubMenu[thisID]) {
|
|
67
|
+
setOpenTertiaryMenu(null);
|
|
68
|
+
}
|
|
69
|
+
}, [openedSubMenu, thisID]);
|
|
70
|
+
|
|
71
|
+
// Collect all column links into a single array for iteration
|
|
72
|
+
const allColumnLinks = (0, _react.useMemo)(() => [group.column1PageLinks, group.column2PageLinks, group.column3PageLinks], [group.column1PageLinks, group.column2PageLinks, group.column3PageLinks]);
|
|
73
|
+
|
|
74
|
+
// Group tertiary links for all columns (run once per data change)
|
|
75
|
+
const tertiaryGroups = (0, _react.useMemo)(() => allColumnLinks.reduce((acc, links) => ({
|
|
76
|
+
...acc,
|
|
77
|
+
...groupTertiaryLinks(links)
|
|
78
|
+
}), {}), [allColumnLinks]);
|
|
79
|
+
|
|
80
|
+
// All links flattened (run once per data change)
|
|
81
|
+
const allLinks = (0, _react.useMemo)(() => allColumnLinks.flatMap(links => links || []), [allColumnLinks]);
|
|
82
|
+
|
|
83
|
+
// Check if a secondary link has tertiary children
|
|
84
|
+
const hasTertiaryChildren = linkId => {
|
|
85
|
+
var _tertiaryGroups$linkI;
|
|
86
|
+
return ((_tertiaryGroups$linkI = tertiaryGroups[linkId]) === null || _tertiaryGroups$linkI === void 0 ? void 0 : _tertiaryGroups$linkI.length) > 0;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// Get the currently active tertiary menu data
|
|
90
|
+
const activeTertiaryLinks = tertiaryGroups[openTertiaryMenu] || [];
|
|
91
|
+
|
|
92
|
+
// Find the parent link (pageLevel: true) for the currently open tertiary menu
|
|
93
|
+
const activeParentLink = (0, _react.useMemo)(() => openTertiaryMenu ? allLinks.find(link => link.id === openTertiaryMenu) : null, [openTertiaryMenu, allLinks]);
|
|
94
|
+
|
|
95
|
+
// Pre-process URLs for all links (run once per data change)
|
|
96
|
+
const processedLinkUrls = (0, _react.useMemo)(() => {
|
|
97
|
+
const urls = {};
|
|
98
|
+
allLinks.forEach(link => {
|
|
99
|
+
urls[link.id] = internalLinkHelper(navHelperNew(link));
|
|
100
|
+
});
|
|
101
|
+
return urls;
|
|
102
|
+
}, [allLinks, navHelperNew, internalLinkHelper]);
|
|
103
|
+
|
|
104
|
+
// Helper to render a column's links
|
|
105
|
+
const renderColumnLinks = (links, ColumnComponent) => {
|
|
106
|
+
if (!links) return null;
|
|
107
|
+
return links.map(child => {
|
|
108
|
+
// On mobile, only show secondary links (pageLevel: true)
|
|
109
|
+
// Tertiary links (pageLevel: false) will be shown in the third modal
|
|
110
|
+
if (isNotDesktop && !child.pageLevel) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const linkId = child.id;
|
|
114
|
+
const hasChildren = hasTertiaryChildren(linkId);
|
|
115
|
+
return /*#__PURE__*/_react.default.createElement(ColumnComponent, {
|
|
116
|
+
key: child.id,
|
|
117
|
+
$isSecondary: child.pageLevel
|
|
118
|
+
}, hasChildren && isNotDesktop ? /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryNavLinkWithChildren, {
|
|
119
|
+
href: "#",
|
|
120
|
+
inline: true,
|
|
121
|
+
role: "menuitem",
|
|
122
|
+
onClick: e => handleTertiaryToggle(e, linkId),
|
|
123
|
+
$isSecondary: child.pageLevel
|
|
124
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, null, child.pageName), /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryChevronWrapper, null, /*#__PURE__*/_react.default.createElement("img", {
|
|
125
|
+
src: _chevronIcon.default,
|
|
126
|
+
alt: "chevron icon"
|
|
127
|
+
}))) : /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryNavLink, {
|
|
128
|
+
href: (0, _urlHelper.default)(processedLinkUrls[linkId], devMode),
|
|
129
|
+
inline: true,
|
|
130
|
+
role: "menuitem",
|
|
131
|
+
$isSecondary: child.pageLevel
|
|
132
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, null, child.pageName)));
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
// Determine what to render for the primary nav link
|
|
137
|
+
const renderPrimaryLink = () => {
|
|
138
|
+
// Mobile: Hide NavLink when secondary or tertiary menu is open
|
|
139
|
+
if (isNotDesktop) {
|
|
140
|
+
if (isTertiaryOpenGlobal || isSubMenuOpenGlobal) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
return /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavLink, {
|
|
144
|
+
"data-testid": "NavLink",
|
|
145
|
+
href: hasPopUp ? '#' : (0, _urlHelper.default)(thisUrl, devMode),
|
|
146
|
+
inline: true,
|
|
147
|
+
rel: relNoopener,
|
|
148
|
+
"aria-expanded": !!openedSubMenu[thisID],
|
|
149
|
+
"aria-haspopup": hasPopUp,
|
|
150
|
+
onClick: hasPopUp ? e => toggleSubMenu(e, thisID) : null,
|
|
151
|
+
role: "button",
|
|
152
|
+
isExpanded: !!openedSubMenu[thisID]
|
|
153
|
+
}, group.primaryPageName, hasSubMenu && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.ChevronWrapper, {
|
|
154
|
+
"data-testid": "ChevronWrapper"
|
|
155
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
156
|
+
src: _chevronIcon.default,
|
|
157
|
+
alt: "chevron icon"
|
|
158
|
+
})));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Desktop: Always show StyledText with DesktopNavLink
|
|
162
|
+
return /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.StyledText, {
|
|
163
|
+
"data-testid": "StyledText"
|
|
164
|
+
}, /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.DesktopNavLink, Object.assign({
|
|
165
|
+
"data-testid": "DesktopNavLink",
|
|
166
|
+
href: (0, _urlHelper.default)(thisUrl, devMode),
|
|
167
|
+
inline: true,
|
|
168
|
+
rel: relNoopener,
|
|
169
|
+
"aria-haspopup": hasPopUp,
|
|
170
|
+
hasSubMenu: hasSubMenu
|
|
171
|
+
}, rest), group.primaryPageName, hasSubMenu && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.ChevronWrapper, {
|
|
172
|
+
"data-testid": "ChevronWrapper"
|
|
173
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
174
|
+
src: _chevronIcon.default,
|
|
175
|
+
alt: "chevron down icon"
|
|
176
|
+
}))));
|
|
177
|
+
};
|
|
178
|
+
return /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.StyledNavItem, {
|
|
179
|
+
"data-testid": "StyledNavItem",
|
|
180
|
+
role: "none",
|
|
181
|
+
index: index,
|
|
182
|
+
isSubMenuOpen: !!openedSubMenu,
|
|
183
|
+
isTertiaryOpen: isTertiaryOpenGlobal
|
|
184
|
+
}, renderPrimaryLink(), hasSubMenu && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryNavMenu, {
|
|
185
|
+
role: "list",
|
|
186
|
+
isSubMenuOpen: !!openedSubMenu[thisID],
|
|
187
|
+
isTertiaryOpen: isTertiaryOpenGlobal
|
|
188
|
+
}, isNotDesktop && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryMenuPrimaryLink, null, /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.SecondaryMenuPrimaryLinkAnchor, {
|
|
189
|
+
href: (0, _urlHelper.default)(thisUrl, devMode),
|
|
190
|
+
inline: true,
|
|
191
|
+
role: "menuitem"
|
|
192
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, null, group.primaryPageName))), allColumnLinks.map((links, colIndex) => {
|
|
193
|
+
var _group$column3PageCar;
|
|
194
|
+
return (
|
|
195
|
+
/*#__PURE__*/
|
|
196
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
197
|
+
_react.default.createElement(_PrimaryNavItem.ColumnWrapper, {
|
|
198
|
+
key: colIndex
|
|
199
|
+
}, colIndex === 2 && !isNotDesktop && ((_group$column3PageCar = group.column3PageCards) === null || _group$column3PageCar === void 0 ? void 0 : _group$column3PageCar.length) > 0 ? group.column3PageCards.map(card => {
|
|
200
|
+
var _card$image;
|
|
201
|
+
return /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavCard, {
|
|
202
|
+
key: card.id,
|
|
203
|
+
href: (0, _urlHelper.default)(card.primaryPageUrlIfExternal || '', devMode)
|
|
204
|
+
}, ((_card$image = card.image) === null || _card$image === void 0 ? void 0 : _card$image.url) && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavCardImage, null, /*#__PURE__*/_react.default.createElement("img", {
|
|
205
|
+
src: card.image.url,
|
|
206
|
+
alt: card.image.title || card.pageName
|
|
207
|
+
})), /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavCardContent, null, /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavCardTitle, null, card.pageName), card.pageDescription && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.NavCardDescription, null, card.pageDescription)));
|
|
208
|
+
}) : renderColumnLinks(links, _PrimaryNavItem.SecondaryNavItem))
|
|
209
|
+
);
|
|
210
|
+
})), hasSubMenu && isNotDesktop && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.TertiaryNavMenu, {
|
|
211
|
+
isOpen: openTertiaryMenu !== null
|
|
212
|
+
}, activeParentLink && /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.TertiaryNavItem, {
|
|
213
|
+
$isParent: true
|
|
214
|
+
}, /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.TertiaryNavLink, {
|
|
215
|
+
href: (0, _urlHelper.default)(processedLinkUrls[activeParentLink.id], devMode),
|
|
216
|
+
inline: true,
|
|
217
|
+
role: "menuitem",
|
|
218
|
+
$isParent: true
|
|
219
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, null, activeParentLink.pageName))), activeTertiaryLinks.map(tertiaryLink => /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.TertiaryNavItem, {
|
|
220
|
+
key: tertiaryLink.id
|
|
221
|
+
}, /*#__PURE__*/_react.default.createElement(_PrimaryNavItem.TertiaryNavLink, {
|
|
222
|
+
href: (0, _urlHelper.default)(processedLinkUrls[tertiaryLink.id], devMode),
|
|
223
|
+
inline: true,
|
|
224
|
+
role: "menuitem"
|
|
225
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, null, tertiaryLink.pageName))))));
|
|
226
|
+
};
|
|
227
|
+
var _default = exports.default = PrimaryNavItem;
|