@comicrelief/component-library 8.54.1 → 8.55.1
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/HeroBanner/HeroBanner.style.js +68 -62
- package/dist/components/Molecules/HeroBanner/__snapshots__/HeroBanner.test.js.snap +7 -4
- 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 +15 -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/HeroBanner/HeroBanner.style.js +4 -3
- package/src/components/Molecules/HeroBanner/__snapshots__/HeroBanner.test.js.snap +7 -4
- 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 +67 -3
- 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
|
@@ -1,4 +1,43 @@
|
|
|
1
|
-
import { css } from 'styled-components';
|
|
1
|
+
import { keyframes, css } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
const pulseIn = keyframes`
|
|
4
|
+
from {
|
|
5
|
+
transform: scale3d(1, 1, 1);
|
|
6
|
+
}
|
|
7
|
+
30% {
|
|
8
|
+
transform: scale3d(1.04, 1.04, 1.04);
|
|
9
|
+
}
|
|
10
|
+
60% {
|
|
11
|
+
transform: scale3d(1.03, 1.03, 1.03);
|
|
12
|
+
}
|
|
13
|
+
to {
|
|
14
|
+
transform: scale3d(1.04, 1.04, 1.04);
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
const pulseOut = keyframes`
|
|
19
|
+
from {
|
|
20
|
+
transform: scale3d(1.03, 1.03, 1.03);
|
|
21
|
+
}
|
|
22
|
+
30% {
|
|
23
|
+
transform: scale3d(0.99, 0.99, 0.99);
|
|
24
|
+
}
|
|
25
|
+
60% {
|
|
26
|
+
transform: scale3d(1.01, 1.01, 1.01);
|
|
27
|
+
}
|
|
28
|
+
to {
|
|
29
|
+
transform: scale3d(1, 1, 1);
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
const pulseInAnimation = css`
|
|
34
|
+
animation: ${pulseIn} 0.4s ease-in-out forwards;
|
|
35
|
+
`;
|
|
36
|
+
|
|
37
|
+
const pulseOutAnimation = css`
|
|
38
|
+
${pulseInAnimation}
|
|
39
|
+
animation-name: ${pulseOut};
|
|
40
|
+
`;
|
|
2
41
|
|
|
3
42
|
/**
|
|
4
43
|
* Logo rotation animation on hover
|
|
@@ -84,9 +123,14 @@ const formFieldInputAnimation = (shiftPx = 4) => css`
|
|
|
84
123
|
* @param {boolean} animateScale - Whether to enable the scale animation
|
|
85
124
|
* @param {number} pixelMovement - Amount of movement to apply on hover
|
|
86
125
|
* @param {number} bounceIntensity - Intensity of the springy bounce effect (0-3, default: 1)
|
|
126
|
+
* @param {boolean} targetChild - Where to apply the transform
|
|
127
|
+
|
|
87
128
|
* @returns {css} template literal for the animation
|
|
88
129
|
*/
|
|
89
|
-
const bounceUpAnimation = (animateScale,
|
|
130
|
+
const bounceUpAnimation = (animateScale,
|
|
131
|
+
pixelMovement = 10,
|
|
132
|
+
bounceIntensity = 1,
|
|
133
|
+
targetChild = false) => {
|
|
90
134
|
if (!animateScale) {
|
|
91
135
|
return css``;
|
|
92
136
|
}
|
|
@@ -95,6 +139,24 @@ const bounceUpAnimation = (animateScale, pixelMovement = 10, bounceIntensity = 1
|
|
|
95
139
|
const overshoot = 1.55 + (bounceIntensity * 0.4);
|
|
96
140
|
const duration = 0.2 + (bounceIntensity * 0.1);
|
|
97
141
|
|
|
142
|
+
// The Hero Banner requires us to apply the transform inside
|
|
143
|
+
// the anchor, in order to address the 'infinity bounce' bug
|
|
144
|
+
if (targetChild) {
|
|
145
|
+
return css`
|
|
146
|
+
> div {
|
|
147
|
+
transition: transform ${duration}s cubic-bezier(0.68, ${pullBack}, 0.265, ${overshoot});
|
|
148
|
+
transform-origin: center;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
&:hover,
|
|
152
|
+
&:focus {
|
|
153
|
+
> div {
|
|
154
|
+
transform: translateY(-${pixelMovement}px);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
`;
|
|
158
|
+
}
|
|
159
|
+
|
|
98
160
|
return css`
|
|
99
161
|
transition: transform ${duration}s cubic-bezier(0.68, ${pullBack}, 0.265, ${overshoot});
|
|
100
162
|
transform-origin: center;
|
|
@@ -110,5 +172,7 @@ export {
|
|
|
110
172
|
logoRotateAnimation,
|
|
111
173
|
springScaleAnimation,
|
|
112
174
|
formFieldInputAnimation,
|
|
113
|
-
bounceUpAnimation
|
|
175
|
+
bounceUpAnimation,
|
|
176
|
+
pulseInAnimation,
|
|
177
|
+
pulseOutAnimation
|
|
114
178
|
};
|
package/src/utils/navHelper.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/* Determine where to grab the URL, depending on the component type and values supplied */
|
|
2
2
|
const NavHelper = navItem => {
|
|
3
|
+
if (!navItem) return '';
|
|
4
|
+
|
|
3
5
|
/* Default url path location for 'Pages' */
|
|
4
6
|
let thisUrl = navItem.path;
|
|
5
7
|
|
|
6
|
-
if (navItem.internal.type === 'ContentfulComponentLink') {
|
|
8
|
+
if (navItem.internal && navItem.internal.type === 'ContentfulComponentLink') {
|
|
7
9
|
thisUrl = navItem.reference && navItem.reference.path
|
|
8
10
|
? navItem.reference.path
|
|
9
11
|
: navItem.url;
|
|
@@ -12,6 +14,40 @@ const NavHelper = navItem => {
|
|
|
12
14
|
return thisUrl;
|
|
13
15
|
};
|
|
14
16
|
|
|
17
|
+
/* NavHelper for new Contentful data structure (headerPageGroups format) */
|
|
18
|
+
const NavHelperNew = pageLink => {
|
|
19
|
+
if (!pageLink) return '';
|
|
20
|
+
|
|
21
|
+
// pageSelector path takes priority
|
|
22
|
+
if (pageLink.pageSelector && pageLink.pageSelector.path) {
|
|
23
|
+
return `/${pageLink.pageSelector.path}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Otherwise use external URL
|
|
27
|
+
if (pageLink.pageUrlIfExternal) {
|
|
28
|
+
return pageLink.pageUrlIfExternal;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return '';
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/* Get URL for primary page in new data structure */
|
|
35
|
+
const NavHelperPrimary = group => {
|
|
36
|
+
if (!group) return '';
|
|
37
|
+
|
|
38
|
+
// primaryPageSelector path takes priority
|
|
39
|
+
if (group.primaryPageSelector && group.primaryPageSelector.path) {
|
|
40
|
+
return `/${group.primaryPageSelector.path}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Otherwise use external URL
|
|
44
|
+
if (group.primaryPageUrlIfExternal) {
|
|
45
|
+
return group.primaryPageUrlIfExternal;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return '';
|
|
49
|
+
};
|
|
50
|
+
|
|
15
51
|
const MoreNavPreProcess = (menuGroups, characterLimit) => {
|
|
16
52
|
let characterCount = 0;
|
|
17
53
|
const overLimit = false;
|
|
@@ -35,4 +71,48 @@ const MoreNavPreProcess = (menuGroups, characterLimit) => {
|
|
|
35
71
|
return { standardGroups, moreNavGroups };
|
|
36
72
|
};
|
|
37
73
|
|
|
38
|
-
|
|
74
|
+
/* MoreNavPreProcess for new Contentful data structure */
|
|
75
|
+
const MoreNavPreProcessNew = (headerPageGroups, characterLimit) => {
|
|
76
|
+
let characterCount = 0;
|
|
77
|
+
const overLimit = false;
|
|
78
|
+
const standardGroups = [];
|
|
79
|
+
const moreNavGroups = [];
|
|
80
|
+
|
|
81
|
+
headerPageGroups.map(group => {
|
|
82
|
+
// Use primaryPageName for character count
|
|
83
|
+
characterCount += group.primaryPageName.length;
|
|
84
|
+
|
|
85
|
+
// Assign groups to the relevant array if we're over the limit
|
|
86
|
+
return characterCount > characterLimit !== overLimit
|
|
87
|
+
? moreNavGroups.push(group)
|
|
88
|
+
: standardGroups.push(group);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return { standardGroups, moreNavGroups };
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/* Combine all column links into a single array for submenu rendering */
|
|
95
|
+
const getColumnLinks = group => {
|
|
96
|
+
const links = [];
|
|
97
|
+
|
|
98
|
+
if (group.column1PageLinks) {
|
|
99
|
+
links.push(...group.column1PageLinks);
|
|
100
|
+
}
|
|
101
|
+
if (group.column2PageLinks) {
|
|
102
|
+
links.push(...group.column2PageLinks);
|
|
103
|
+
}
|
|
104
|
+
if (group.column3PageLinks) {
|
|
105
|
+
links.push(...group.column3PageLinks);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return links;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
export {
|
|
112
|
+
NavHelper,
|
|
113
|
+
NavHelperNew,
|
|
114
|
+
NavHelperPrimary,
|
|
115
|
+
MoreNavPreProcess,
|
|
116
|
+
MoreNavPreProcessNew,
|
|
117
|
+
getColumnLinks
|
|
118
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* Overiding the extra Styleguidest / preview styles */
|
|
2
|
+
.rsg--preview-35 {
|
|
3
|
+
padding: 0 !important;
|
|
4
|
+
border: none !important;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.rsg--content-3 {
|
|
8
|
+
padding: 0 !important;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.rsg--header-11,
|
|
12
|
+
.rsg--tabs-12 {
|
|
13
|
+
display: none !important;;
|
|
14
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const BASE_URL = 'https://www.comicrelief.com';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Prepends base URL to relative paths when in dev mode
|
|
5
|
+
* @param {string} path - The path to process into url
|
|
6
|
+
* @param {boolean} devMode - for adding real world urls when dev in CL
|
|
7
|
+
* @returns {string} The processed path / url
|
|
8
|
+
*/
|
|
9
|
+
const prependBaseUrl = (path, devMode) => {
|
|
10
|
+
// Return the url as-is if not in dev mode
|
|
11
|
+
if (!devMode) return path;
|
|
12
|
+
|
|
13
|
+
// Don't prepend if it's already an absolute URL
|
|
14
|
+
if (path.startsWith('http://')
|
|
15
|
+
|| path.startsWith('https://')
|
|
16
|
+
|| path.startsWith('//')) {
|
|
17
|
+
return path;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Don't prepend to anchor-only links
|
|
21
|
+
if (path === '#') return path;
|
|
22
|
+
|
|
23
|
+
// Prepend base URL
|
|
24
|
+
return `${BASE_URL}${path.startsWith('/') ? '' : '/'}${path}`;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export default prependBaseUrl;
|