@comicrelief/component-library 8.44.3 → 8.45.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.
Files changed (123) hide show
  1. package/dist/components/Atoms/Checkbox/Checkbox.test.js +0 -4
  2. package/dist/components/Atoms/ErrorText/__snapshots__/ErrorText.test.js.snap +0 -2
  3. package/dist/components/Atoms/Input/input.test.js +0 -2
  4. package/dist/components/Atoms/RadioButton/RadioButton.test.js +0 -4
  5. package/dist/components/Atoms/Select/__snapshots__/Select.test.js.snap +0 -1
  6. package/dist/components/Atoms/SocialIcons/Icon/Icon.js +39 -14
  7. package/dist/components/Atoms/SocialIcons/SocialIcons.js +91 -22
  8. package/dist/components/Atoms/SocialIcons/Utils/Icons.js +26 -7
  9. package/dist/components/Atoms/SocialIcons/Utils/Links.js +10 -0
  10. package/dist/components/Atoms/SocialIcons/__snapshots__/SocialIcons.test.js.snap +63 -48
  11. package/{src/components/Atoms/SocialIcons/assets → dist/components/Atoms/SocialIcons/assets/circled}/facebook.svg +1 -1
  12. package/{src/components/Atoms/SocialIcons/assets → dist/components/Atoms/SocialIcons/assets/circled}/twitter.svg +1 -1
  13. package/dist/components/Atoms/SocialIcons/assets/{youtube.svg → circled/youtube.svg} +1 -1
  14. package/dist/components/Atoms/SocialIcons/assets/standard/facebook.svg +3 -0
  15. package/dist/components/Atoms/SocialIcons/assets/standard/instagram.svg +3 -0
  16. package/dist/components/Atoms/SocialIcons/assets/standard/tiktok.svg +3 -0
  17. package/dist/components/Atoms/SocialIcons/assets/standard/x.svg +3 -0
  18. package/dist/components/Atoms/SocialIcons/assets/standard/youtube.svg +3 -0
  19. package/dist/components/Atoms/Text/Text.js +28 -28
  20. package/dist/components/Atoms/Text/Text.md +8 -8
  21. package/dist/components/Atoms/Text/__snapshots__/Text.test.js.snap +0 -9
  22. package/dist/components/Atoms/TextArea/TextArea.test.js +0 -1
  23. package/dist/components/Atoms/TextInputWithDropdown/__snapshots__/TextInputWithDropdown.test.js.snap +0 -7
  24. package/dist/components/Molecules/Accordion/__snapshots__/Accordion.test.js.snap +0 -4
  25. package/dist/components/Molecules/ArticleTeaser/ArticleTeaser.test.js +0 -10
  26. package/dist/components/Molecules/Banner/__snapshots__/Banner.test.js.snap +0 -2
  27. package/dist/components/Molecules/Descriptor/Descriptor.test.js +0 -13
  28. package/dist/components/Molecules/EmailSignUp/EmailSignUp.js +38 -0
  29. package/dist/components/Molecules/EmailSignUp/EmailSignUp.style.js +113 -0
  30. package/dist/components/Molecules/InfoBanner/__snapshots__/InfoBanner.test.js.snap +0 -24
  31. package/dist/components/Molecules/LogoLinked/LogoLinked.js +6 -6
  32. package/dist/components/Molecules/PartnerLink/PartnerLink.test.js +0 -2
  33. package/dist/components/Molecules/Promo/__snapshots__/Promo.test.js.snap +0 -8
  34. package/dist/components/Molecules/SchoolLookup/__snapshots__/SchoolLookup.test.js.snap +0 -1
  35. package/dist/components/Molecules/SearchInput/SearchInput.test.js +0 -1
  36. package/dist/components/Molecules/SearchResult/__snapshots__/SearchResult.test.js.snap +0 -18
  37. package/dist/components/Molecules/SingleMessage/__snapshots__/SingleMessage.test.js.snap +0 -14
  38. package/dist/components/Molecules/SingleMessageDS/__snapshots__/SingleMessageDs.test.js.snap +0 -4
  39. package/dist/components/Molecules/Typeahead/__snapshots__/Typeahead.test.js.snap +0 -1
  40. package/dist/components/Organisms/CookieBanner/CookieBanner.test.js +0 -2
  41. package/dist/components/Organisms/Donate/__snapshots__/Donate.test.js.snap +0 -35
  42. package/dist/components/Organisms/EmailSignUp/__snapshots__/EmailSignUp.test.js.snap +0 -8
  43. package/dist/components/Organisms/Footer/Footer.md +12 -11
  44. package/dist/components/Organisms/Footer/FundraisingRegulatorLogo/FundraisingRegulatorLogo.js +36 -16
  45. package/dist/components/Organisms/Footer/Nav/Nav.style.js +8 -8
  46. package/dist/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +188 -241
  47. package/dist/components/Organisms/FooterNew/FooterNew.js +136 -0
  48. package/dist/components/Organisms/FooterNew/FooterNew.md +47 -0
  49. package/dist/components/Organisms/FooterNew/FooterNew.style.js +312 -0
  50. package/dist/components/Organisms/FooterNew/FooterNew.test.js +20 -0
  51. package/dist/components/Organisms/FooterNew/Nav/PrimaryNav.js +32 -0
  52. package/dist/components/Organisms/FooterNew/Nav/SecondaryNav.js +32 -0
  53. package/dist/components/Organisms/FooterNew/__snapshots__/FooterNew.test.js.snap +1490 -0
  54. package/dist/components/Organisms/FooterNew/dev-data/data.js +106 -0
  55. package/dist/components/Organisms/Membership/Membership.test.js +0 -12
  56. package/dist/components/Organisms/WYMDCarousel/__snapshots__/WYMDCarousel.test.js.snap +0 -3
  57. package/dist/index.js +20 -0
  58. package/dist/theme/crTheme/colors.js +12 -7
  59. package/dist/theme/shared/animations.js +46 -0
  60. package/package.json +1 -1
  61. package/src/components/Atoms/Checkbox/Checkbox.test.js +0 -4
  62. package/src/components/Atoms/ErrorText/__snapshots__/ErrorText.test.js.snap +0 -2
  63. package/src/components/Atoms/Input/input.test.js +0 -2
  64. package/src/components/Atoms/RadioButton/RadioButton.test.js +0 -4
  65. package/src/components/Atoms/Select/__snapshots__/Select.test.js.snap +0 -1
  66. package/src/components/Atoms/SocialIcons/Icon/Icon.js +47 -11
  67. package/src/components/Atoms/SocialIcons/SocialIcons.js +99 -25
  68. package/src/components/Atoms/SocialIcons/Utils/Icons.js +29 -10
  69. package/src/components/Atoms/SocialIcons/Utils/Links.js +10 -0
  70. package/src/components/Atoms/SocialIcons/__snapshots__/SocialIcons.test.js.snap +63 -48
  71. package/{dist/components/Atoms/SocialIcons/assets → src/components/Atoms/SocialIcons/assets/circled}/facebook.svg +1 -1
  72. package/{dist/components/Atoms/SocialIcons/assets → src/components/Atoms/SocialIcons/assets/circled}/twitter.svg +1 -1
  73. package/src/components/Atoms/SocialIcons/assets/{youtube.svg → circled/youtube.svg} +1 -1
  74. package/src/components/Atoms/SocialIcons/assets/standard/facebook.svg +3 -0
  75. package/src/components/Atoms/SocialIcons/assets/standard/instagram.svg +3 -0
  76. package/src/components/Atoms/SocialIcons/assets/standard/tiktok.svg +3 -0
  77. package/src/components/Atoms/SocialIcons/assets/standard/x.svg +3 -0
  78. package/src/components/Atoms/SocialIcons/assets/standard/youtube.svg +3 -0
  79. package/src/components/Atoms/Text/Text.js +19 -19
  80. package/src/components/Atoms/Text/Text.md +8 -8
  81. package/src/components/Atoms/Text/__snapshots__/Text.test.js.snap +0 -9
  82. package/src/components/Atoms/TextArea/TextArea.test.js +0 -1
  83. package/src/components/Atoms/TextInputWithDropdown/__snapshots__/TextInputWithDropdown.test.js.snap +0 -7
  84. package/src/components/Molecules/Accordion/__snapshots__/Accordion.test.js.snap +0 -4
  85. package/src/components/Molecules/ArticleTeaser/ArticleTeaser.test.js +0 -10
  86. package/src/components/Molecules/Banner/__snapshots__/Banner.test.js.snap +0 -2
  87. package/src/components/Molecules/Descriptor/Descriptor.test.js +0 -13
  88. package/src/components/Molecules/EmailSignUp/EmailSignUp.js +55 -0
  89. package/src/components/Molecules/EmailSignUp/EmailSignUp.style.js +107 -0
  90. package/src/components/Molecules/InfoBanner/__snapshots__/InfoBanner.test.js.snap +0 -24
  91. package/src/components/Molecules/LogoLinked/LogoLinked.js +5 -14
  92. package/src/components/Molecules/PartnerLink/PartnerLink.test.js +0 -2
  93. package/src/components/Molecules/Promo/__snapshots__/Promo.test.js.snap +0 -8
  94. package/src/components/Molecules/SchoolLookup/__snapshots__/SchoolLookup.test.js.snap +0 -1
  95. package/src/components/Molecules/SearchInput/SearchInput.test.js +0 -1
  96. package/src/components/Molecules/SearchResult/__snapshots__/SearchResult.test.js.snap +0 -18
  97. package/src/components/Molecules/SingleMessage/__snapshots__/SingleMessage.test.js.snap +0 -14
  98. package/src/components/Molecules/SingleMessageDS/__snapshots__/SingleMessageDs.test.js.snap +0 -4
  99. package/src/components/Molecules/Typeahead/__snapshots__/Typeahead.test.js.snap +0 -1
  100. package/src/components/Organisms/CookieBanner/CookieBanner.test.js +0 -2
  101. package/src/components/Organisms/Donate/__snapshots__/Donate.test.js.snap +0 -35
  102. package/src/components/Organisms/EmailSignUp/__snapshots__/EmailSignUp.test.js.snap +0 -8
  103. package/src/components/Organisms/Footer/Footer.md +12 -11
  104. package/src/components/Organisms/Footer/FundraisingRegulatorLogo/FundraisingRegulatorLogo.js +14 -3
  105. package/src/components/Organisms/Footer/Nav/Nav.style.js +8 -8
  106. package/src/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +188 -241
  107. package/src/components/Organisms/FooterNew/FooterNew.js +211 -0
  108. package/src/components/Organisms/FooterNew/FooterNew.md +47 -0
  109. package/src/components/Organisms/FooterNew/FooterNew.style.js +294 -0
  110. package/src/components/Organisms/FooterNew/FooterNew.test.js +24 -0
  111. package/src/components/Organisms/FooterNew/Nav/PrimaryNav.js +54 -0
  112. package/src/components/Organisms/FooterNew/Nav/SecondaryNav.js +54 -0
  113. package/src/components/Organisms/FooterNew/__snapshots__/FooterNew.test.js.snap +1490 -0
  114. package/src/components/Organisms/FooterNew/dev-data/data.js +123 -0
  115. package/src/components/Organisms/Membership/Membership.test.js +0 -12
  116. package/src/components/Organisms/WYMDCarousel/__snapshots__/WYMDCarousel.test.js.snap +0 -3
  117. package/src/index.js +2 -0
  118. package/src/theme/crTheme/colors.js +13 -7
  119. package/src/theme/shared/animations.js +60 -0
  120. /package/dist/components/Atoms/SocialIcons/assets/{X-white-Subtract.svg → circled/X-white-Subtract.svg} +0 -0
  121. /package/dist/components/Atoms/SocialIcons/assets/{instagram.svg → circled/instagram.svg} +0 -0
  122. /package/src/components/Atoms/SocialIcons/assets/{X-white-Subtract.svg → circled/X-white-Subtract.svg} +0 -0
  123. /package/src/components/Atoms/SocialIcons/assets/{instagram.svg → circled/instagram.svg} +0 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _reactHookForm = require("react-hook-form");
11
+ var _yup = require("@hookform/resolvers/yup");
12
+ var yup = _interopRequireWildcard(require("yup"));
13
+ var _Logo = _interopRequireDefault(require("../../Atoms/Logo/Logo"));
14
+ var _SocialIcons = _interopRequireDefault(require("../../Atoms/SocialIcons/SocialIcons"));
15
+ var _EmailSignUp = _interopRequireDefault(require("../../Molecules/EmailSignUp/EmailSignUp"));
16
+ var _PrimaryNav = _interopRequireDefault(require("./Nav/PrimaryNav"));
17
+ var _SecondaryNav = _interopRequireDefault(require("./Nav/SecondaryNav"));
18
+ var _FundraisingRegulatorLogo = _interopRequireDefault(require("../Footer/FundraisingRegulatorLogo/FundraisingRegulatorLogo"));
19
+ var _FooterNew = require("./FooterNew.style");
20
+ const FooterNew = _ref => {
21
+ let {
22
+ legalText,
23
+ copyrightText,
24
+ showFacebookSocialIcon,
25
+ showInstagramSocialIcon,
26
+ showXSocialIcon,
27
+ showTikTokSocialIcon,
28
+ showYouTubeSocialIcon,
29
+ onNewsletterSubmit,
30
+ primaryLinksList = [],
31
+ secondaryLinksList = [],
32
+ campaign = 'Comic Relief',
33
+ additionalLegalLine = '',
34
+ showFundraisingRegulatorLogo = false,
35
+ showEmailSignup = true,
36
+ animateRotate = true,
37
+ ...rest
38
+ } = _ref;
39
+ // Remove white space between words
40
+ const campaignName = campaign.replace(/\s/g, '').toLowerCase();
41
+ const currentYear = new Date().getFullYear();
42
+ const defaultCopyrightText = `© ${currentYear} Comic Relief`;
43
+ const displayCopyrightText = copyrightText !== undefined ? copyrightText : defaultCopyrightText;
44
+ const validationSchema = yup.object({
45
+ email: yup.string().nullable().transform(value => value === '' ? null : value).email('Please provide a valid email address')
46
+ });
47
+ const formMethods = (0, _reactHookForm.useForm)({
48
+ mode: 'onBlur',
49
+ resolver: (0, _yup.yupResolver)(validationSchema)
50
+ });
51
+ const {
52
+ handleSubmit
53
+ } = formMethods;
54
+ const handleNewsletterSubmit = data => {
55
+ if (onNewsletterSubmit) {
56
+ onNewsletterSubmit(data.email);
57
+ }
58
+ };
59
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_FooterNew.FooterWrapper, rest, /*#__PURE__*/_react.default.createElement(_FooterNew.InnerWrapper, null, additionalLegalLine && /*#__PURE__*/_react.default.createElement(_FooterNew.FooterLegalLine, null, additionalLegalLine), /*#__PURE__*/_react.default.createElement(_FooterNew.LogosContainer, {
60
+ $mobileOnly: true
61
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.Brand, {
62
+ href: "/",
63
+ title: `Go to ${campaign} homepage`,
64
+ animateRotate: animateRotate
65
+ }, /*#__PURE__*/_react.default.createElement(_Logo.default, {
66
+ sizeSm: "48px",
67
+ sizeMd: "72px",
68
+ rotate: false,
69
+ campaign: campaign
70
+ }))), /*#__PURE__*/_react.default.createElement(_FooterNew.TopSection, {
71
+ $hasEmailSignup: showEmailSignup
72
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.TopSectionLeft, null, showEmailSignup && /*#__PURE__*/_react.default.createElement(_FooterNew.NewsletterSignUpWrapper, null, /*#__PURE__*/_react.default.createElement(_reactHookForm.FormProvider, formMethods, /*#__PURE__*/_react.default.createElement("form", {
73
+ onSubmit: handleSubmit(handleNewsletterSubmit),
74
+ noValidate: true
75
+ }, /*#__PURE__*/_react.default.createElement(_EmailSignUp.default, {
76
+ formContext: formMethods
77
+ })))), /*#__PURE__*/_react.default.createElement(_FooterNew.SocialIconWrapper, {
78
+ $desktopOnly: true,
79
+ $inTopSection: true
80
+ }, /*#__PURE__*/_react.default.createElement(_SocialIcons.default, {
81
+ campaign: campaignName,
82
+ newStyle: true,
83
+ invertColor: true,
84
+ showFacebookSocialIcon: showFacebookSocialIcon,
85
+ showInstagramSocialIcon: showInstagramSocialIcon,
86
+ showXSocialIcon: showXSocialIcon,
87
+ showTikTokSocialIcon: showTikTokSocialIcon,
88
+ showYouTubeSocialIcon: showYouTubeSocialIcon
89
+ }))), /*#__PURE__*/_react.default.createElement(_FooterNew.LogosContainer, {
90
+ $desktopOnly: true,
91
+ $showCRLogoOnly: true
92
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.Brand, {
93
+ href: "/",
94
+ title: `Go to ${campaign} homepage`,
95
+ animateRotate: animateRotate
96
+ }, /*#__PURE__*/_react.default.createElement(_Logo.default, {
97
+ sizeSm: "59px",
98
+ sizeMd: "59px",
99
+ rotate: false,
100
+ campaign: campaign
101
+ }))), /*#__PURE__*/_react.default.createElement(_FooterNew.LogosContainer, {
102
+ $desktopOnly: true,
103
+ $showPairedLogos: true
104
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.Brand, {
105
+ href: "/",
106
+ title: `Go to ${campaign} homepage`,
107
+ animateRotate: animateRotate
108
+ }, /*#__PURE__*/_react.default.createElement(_Logo.default, {
109
+ sizeSm: "59px",
110
+ sizeMd: "59px",
111
+ rotate: false,
112
+ campaign: campaign
113
+ })), showFundraisingRegulatorLogo && /*#__PURE__*/_react.default.createElement(_FundraisingRegulatorLogo.default, {
114
+ animateOnHover: true,
115
+ noMargin: true
116
+ }))), /*#__PURE__*/_react.default.createElement(_PrimaryNav.default, Object.assign({
117
+ navItems: primaryLinksList
118
+ }, rest)), /*#__PURE__*/_react.default.createElement(_FooterNew.SocialIconWrapper, {
119
+ $mobileOnly: true
120
+ }, /*#__PURE__*/_react.default.createElement(_SocialIcons.default, {
121
+ campaign: campaignName,
122
+ newStyle: true,
123
+ invertColor: true,
124
+ showFacebookSocialIcon: showFacebookSocialIcon,
125
+ showInstagramSocialIcon: showInstagramSocialIcon,
126
+ showXSocialIcon: showXSocialIcon,
127
+ showTikTokSocialIcon: showTikTokSocialIcon,
128
+ showYouTubeSocialIcon: showYouTubeSocialIcon
129
+ })), /*#__PURE__*/_react.default.createElement(_SecondaryNav.default, Object.assign({
130
+ navItems: secondaryLinksList
131
+ }, rest)), /*#__PURE__*/_react.default.createElement(_FooterNew.FooterCopyright, null, displayCopyrightText && /*#__PURE__*/_react.default.createElement(_FooterNew.FooterCopyrightText, null, displayCopyrightText), legalText && /*#__PURE__*/_react.default.createElement(_FooterNew.FooterCopyrightText, null, legalText)), /*#__PURE__*/_react.default.createElement(_FooterNew.LogosContainer, {
132
+ $mobileOnly: true,
133
+ $showFundraiserAtBottom: true
134
+ }, showFundraisingRegulatorLogo && /*#__PURE__*/_react.default.createElement(_FundraisingRegulatorLogo.default, null)))));
135
+ };
136
+ var _default = exports.default = FooterNew;
@@ -0,0 +1,47 @@
1
+ # FooterNew
2
+
3
+ ## FooterNew with email signup
4
+
5
+ ```js
6
+ import FooterNew from './FooterNew';
7
+ import footerCopy from '../Footer/data/footerCopy';
8
+ import { primaryLinksList, secondaryLinksList } from './dev-data/data';
9
+
10
+ <FooterNew
11
+ primaryLinksList={primaryLinksList}
12
+ secondaryLinksList={secondaryLinksList}
13
+ legalText={footerCopy.copy}
14
+ campaign="Comic Relief"
15
+ showFundraisingRegulatorLogo
16
+ showFacebookSocialIcon
17
+ showInstagramSocialIcon
18
+ showXSocialIcon
19
+ showTikTokSocialIcon
20
+ showYouTubeSocialIcon
21
+ animateRotate
22
+ onNewsletterSubmit={(email) => console.log('Newsletter submitted. Normally at this point, the frontend would run its own function to send.', email)}
23
+ />
24
+ ```
25
+
26
+ ## FooterNew without email signup
27
+
28
+ ```js
29
+ import FooterNew from './FooterNew';
30
+ import footerCopy from '../Footer/data/footerCopy';
31
+ import { primaryLinksList, secondaryLinksList } from './dev-data/data';
32
+
33
+ <FooterNew
34
+ primaryLinksList={primaryLinksList}
35
+ secondaryLinksList={secondaryLinksList}
36
+ legalText={footerCopy.copy}
37
+ campaign="Comic Relief"
38
+ showEmailSignup={false}
39
+ showFundraisingRegulatorLogo
40
+ showFacebookSocialIcon
41
+ showInstagramSocialIcon
42
+ showXSocialIcon
43
+ showTikTokSocialIcon
44
+ showYouTubeSocialIcon
45
+ animateRotate
46
+ />
47
+ ```
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.TopSectionLeft = exports.TopSection = exports.SocialIconWrapper = exports.SecondaryNavText = exports.SecondaryNavLink = exports.SecondaryNavItem = exports.SecondaryNav = exports.PrimaryNavText = exports.PrimaryNavLink = exports.PrimaryNavItem = exports.PrimaryNav = exports.NewsletterSignUpWrapper = exports.LogosContainer = exports.InnerWrapper = exports.FooterWrapper = exports.FooterLegalLine = exports.FooterCopyrightText = exports.FooterCopyright = exports.Brand = void 0;
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
+ var _spacing = _interopRequireDefault(require("../../../theme/shared/spacing"));
10
+ var _Link = _interopRequireDefault(require("../../Atoms/Link/Link"));
11
+ var _Text = _interopRequireDefault(require("../../Atoms/Text/Text"));
12
+ var _animations = require("../../../theme/shared/animations");
13
+ const FooterWrapper = exports.FooterWrapper = _styledComponents.default.footer.attrs(() => ({
14
+ role: 'banner'
15
+ })).withConfig({
16
+ displayName: "FooterNewstyle__FooterWrapper",
17
+ componentId: "sc-17mkhu6-0"
18
+ })(["text-align:left;background:", ";padding-top:6rem;@media ", "{padding-bottom:", ";}"], _ref => {
19
+ let {
20
+ theme
21
+ } = _ref;
22
+ return theme.color('grey_5');
23
+ }, _ref2 => {
24
+ let {
25
+ theme
26
+ } = _ref2;
27
+ return theme.breakpoints2026('M');
28
+ }, (0, _spacing.default)('lg'));
29
+ const InnerWrapper = exports.InnerWrapper = _styledComponents.default.div.withConfig({
30
+ displayName: "FooterNewstyle__InnerWrapper",
31
+ componentId: "sc-17mkhu6-1"
32
+ })(["position:relative;display:block;width:100%;height:100%;max-width:1200px;margin:0 auto;padding:0 ", ";@media ", "{padding:0 ", "};}"], (0, _spacing.default)('md'), _ref3 => {
33
+ let {
34
+ theme
35
+ } = _ref3;
36
+ return theme.breakpoints2026('L');
37
+ }, (0, _spacing.default)('md'));
38
+ const FooterLegalLine = exports.FooterLegalLine = (0, _styledComponents.default)(_Text.default).attrs({
39
+ tag: 'p'
40
+ }).withConfig({
41
+ displayName: "FooterNewstyle__FooterLegalLine",
42
+ componentId: "sc-17mkhu6-2"
43
+ })(["text-align:left;margin-top:1rem;margin-bottom:", ";line-height:1.5rem;color:", ";"], (0, _spacing.default)('md'), _ref4 => {
44
+ let {
45
+ theme
46
+ } = _ref4;
47
+ return theme.color('grey');
48
+ });
49
+ const TopSection = exports.TopSection = _styledComponents.default.div.withConfig({
50
+ displayName: "FooterNewstyle__TopSection",
51
+ componentId: "sc-17mkhu6-3"
52
+ })(["display:flex;flex-direction:column;margin-bottom:", ";gap:", ";@media ", "{flex-direction:row;justify-content:space-between;align-items:", ";}"], (0, _spacing.default)('md'), (0, _spacing.default)('md'), _ref5 => {
53
+ let {
54
+ theme
55
+ } = _ref5;
56
+ return theme.breakpoints2026('M');
57
+ }, _ref6 => {
58
+ let {
59
+ $hasEmailSignup
60
+ } = _ref6;
61
+ return $hasEmailSignup ? 'flex-start' : 'center';
62
+ });
63
+ const TopSectionLeft = exports.TopSectionLeft = _styledComponents.default.div.withConfig({
64
+ displayName: "FooterNewstyle__TopSectionLeft",
65
+ componentId: "sc-17mkhu6-4"
66
+ })(["display:flex;flex-direction:column;gap:", ";@media ", "{flex-direction:column;flex:0 0 auto;}"], (0, _spacing.default)('md'), _ref7 => {
67
+ let {
68
+ theme
69
+ } = _ref7;
70
+ return theme.breakpoints2026('M');
71
+ });
72
+ const NewsletterSignUpWrapper = exports.NewsletterSignUpWrapper = _styledComponents.default.div.withConfig({
73
+ displayName: "FooterNewstyle__NewsletterSignUpWrapper",
74
+ componentId: "sc-17mkhu6-5"
75
+ })(["max-width:100%;@media ", "{max-width:100%;}"], _ref8 => {
76
+ let {
77
+ theme
78
+ } = _ref8;
79
+ return theme.breakpoints2026('M');
80
+ });
81
+ const SocialIconWrapper = exports.SocialIconWrapper = _styledComponents.default.div.withConfig({
82
+ displayName: "FooterNewstyle__SocialIconWrapper",
83
+ componentId: "sc-17mkhu6-6"
84
+ })(["margin-bottom:", ";box-sizing:content-box;gap:", ";display:", ";@media ", "{box-sizing:border-box;display:", ";margin-bottom:", ";align-items:center;}"], (0, _spacing.default)('md'), (0, _spacing.default)('md'), _ref9 => {
85
+ let {
86
+ $desktopOnly
87
+ } = _ref9;
88
+ if ($desktopOnly) return 'none';
89
+ return 'block';
90
+ }, _ref10 => {
91
+ let {
92
+ theme
93
+ } = _ref10;
94
+ return theme.breakpoints2026('M');
95
+ }, _ref11 => {
96
+ let {
97
+ $mobileOnly,
98
+ $inTopSection
99
+ } = _ref11;
100
+ if ($mobileOnly) return 'none';
101
+ if ($inTopSection) return 'flex';
102
+ return 'block';
103
+ }, _ref12 => {
104
+ let {
105
+ $inTopSection
106
+ } = _ref12;
107
+ return $inTopSection ? '0' : (0, _spacing.default)('md');
108
+ });
109
+ const PrimaryNav = exports.PrimaryNav = _styledComponents.default.nav.withConfig({
110
+ displayName: "FooterNewstyle__PrimaryNav",
111
+ componentId: "sc-17mkhu6-7"
112
+ })(["display:flex;flex-direction:column;list-style:none;padding:", " 0;margin:0 0 ", " 0;gap:", ";@media ", "{flex-direction:row;flex-wrap:wrap;gap:", ";}"], (0, _spacing.default)('md'), (0, _spacing.default)('md'), (0, _spacing.default)('l'), _ref13 => {
113
+ let {
114
+ theme
115
+ } = _ref13;
116
+ return theme.breakpoints2026('M');
117
+ }, (0, _spacing.default)('m'));
118
+ const PrimaryNavItem = exports.PrimaryNavItem = _styledComponents.default.li.withConfig({
119
+ displayName: "FooterNewstyle__PrimaryNavItem",
120
+ componentId: "sc-17mkhu6-8"
121
+ })(["margin:0;"]);
122
+ const PrimaryNavLink = exports.PrimaryNavLink = (0, _styledComponents.default)(_Link.default).withConfig({
123
+ displayName: "FooterNewstyle__PrimaryNavLink",
124
+ componentId: "sc-17mkhu6-9"
125
+ })(["color:", ";text-decoration:none;font-weight:bold;&:hover,&:focus{text-decoration:underline;text-decoration-color:", ";}"], _ref14 => {
126
+ let {
127
+ theme
128
+ } = _ref14;
129
+ return theme.color('white');
130
+ }, _ref15 => {
131
+ let {
132
+ theme
133
+ } = _ref15;
134
+ return theme.color('white');
135
+ });
136
+ const PrimaryNavText = exports.PrimaryNavText = (0, _styledComponents.default)(_Text.default).withConfig({
137
+ displayName: "FooterNewstyle__PrimaryNavText",
138
+ componentId: "sc-17mkhu6-10"
139
+ })(["color:", ";font-weight:bold;"], _ref16 => {
140
+ let {
141
+ theme
142
+ } = _ref16;
143
+ return theme.color('white');
144
+ });
145
+ const SecondaryNav = exports.SecondaryNav = _styledComponents.default.nav.withConfig({
146
+ displayName: "FooterNewstyle__SecondaryNav",
147
+ componentId: "sc-17mkhu6-11"
148
+ })(["display:flex;flex-direction:row;flex-wrap:wrap;list-style:none;padding:0;margin:0 0 ", " 0;gap:", ";align-items:center;"], (0, _spacing.default)('md'), (0, _spacing.default)('sm'));
149
+ const SecondaryNavItem = exports.SecondaryNavItem = _styledComponents.default.li.withConfig({
150
+ displayName: "FooterNewstyle__SecondaryNavItem",
151
+ componentId: "sc-17mkhu6-12"
152
+ })(["margin:0;display:flex;align-items:center;@media ", "{display:inline;}&:not(:last-child)::after{content:'|';margin-left:", ";color:", ";}"], _ref17 => {
153
+ let {
154
+ theme
155
+ } = _ref17;
156
+ return theme.breakpoints2026('M');
157
+ }, (0, _spacing.default)('sm'), _ref18 => {
158
+ let {
159
+ theme
160
+ } = _ref18;
161
+ return theme.color('grey');
162
+ });
163
+ const SecondaryNavLink = exports.SecondaryNavLink = (0, _styledComponents.default)(_Link.default).withConfig({
164
+ displayName: "FooterNewstyle__SecondaryNavLink",
165
+ componentId: "sc-17mkhu6-13"
166
+ })(["text-decoration:none;> span{color:", ";text-decoration:underline;text-decoration-color:", ";font-weight:normal;font-size:", ";}@media ", "{> span{text-decoration:none;}}&:hover,&:focus{text-decoration:underline;text-decoration-color:", ";}"], _ref19 => {
167
+ let {
168
+ theme
169
+ } = _ref19;
170
+ return theme.color('grey');
171
+ }, _ref20 => {
172
+ let {
173
+ theme
174
+ } = _ref20;
175
+ return theme.color('grey');
176
+ }, _ref21 => {
177
+ let {
178
+ theme
179
+ } = _ref21;
180
+ return theme.fontSize('xs');
181
+ }, _ref22 => {
182
+ let {
183
+ theme
184
+ } = _ref22;
185
+ return theme.breakpoints2026('M');
186
+ }, _ref23 => {
187
+ let {
188
+ theme
189
+ } = _ref23;
190
+ return theme.color('grey');
191
+ });
192
+ const SecondaryNavText = exports.SecondaryNavText = (0, _styledComponents.default)(_Text.default).withConfig({
193
+ displayName: "FooterNewstyle__SecondaryNavText",
194
+ componentId: "sc-17mkhu6-14"
195
+ })(["color:", ";font-weight:normal;"], _ref24 => {
196
+ let {
197
+ theme
198
+ } = _ref24;
199
+ return theme.color('white');
200
+ });
201
+ const LogosContainer = exports.LogosContainer = _styledComponents.default.div.withConfig({
202
+ displayName: "FooterNewstyle__LogosContainer",
203
+ componentId: "sc-17mkhu6-15"
204
+ })(["display:flex;flex-direction:row;align-items:center;gap:", ";justify-content:", ";margin-top:", ";margin-bottom:", ";", " @media ", "{flex:0 0 auto;margin-top:0;margin-bottom:0;padding-top:", ";display:", ";justify-content:", ";}}@media ", "{display:", ";}"], (0, _spacing.default)('l'), _ref25 => {
205
+ let {
206
+ $mobileOnly
207
+ } = _ref25;
208
+ return $mobileOnly ? 'flex-start' : 'center';
209
+ }, _ref26 => {
210
+ let {
211
+ $mobileOnly
212
+ } = _ref26;
213
+ return $mobileOnly ? (0, _spacing.default)('md') : '0';
214
+ }, _ref27 => {
215
+ let {
216
+ $mobileOnly
217
+ } = _ref27;
218
+ return $mobileOnly ? (0, _spacing.default)('l') : '0';
219
+ }, _ref28 => {
220
+ let {
221
+ $desktopOnly
222
+ } = _ref28;
223
+ return $desktopOnly && 'display: none;';
224
+ }, _ref29 => {
225
+ let {
226
+ theme
227
+ } = _ref29;
228
+ return theme.breakpoints2026('M');
229
+ }, _ref30 => {
230
+ let {
231
+ $desktopOnly
232
+ } = _ref30;
233
+ return $desktopOnly ? (0, _spacing.default)('l') : '0';
234
+ }, _ref31 => {
235
+ let {
236
+ $desktopOnly,
237
+ $mobileOnly,
238
+ $showCRLogoOnly,
239
+ $showPairedLogos,
240
+ $showFundraiserAtBottom
241
+ } = _ref31;
242
+ // Mobile containers
243
+ if ($mobileOnly && $showFundraiserAtBottom) return 'flex';
244
+ if ($mobileOnly) return 'none';
245
+
246
+ // Desktop containers
247
+ if ($desktopOnly && $showCRLogoOnly) return 'flex';
248
+ if ($desktopOnly && $showPairedLogos) return 'none';
249
+ if ($desktopOnly) return 'none';
250
+ return 'flex';
251
+ }, _ref32 => {
252
+ let {
253
+ $desktopOnly,
254
+ $showCRLogoOnly,
255
+ $showFundraiserAtBottom
256
+ } = _ref32;
257
+ if ($showFundraiserAtBottom) return 'flex-start';
258
+ if ($desktopOnly && $showCRLogoOnly) return 'flex-end';
259
+ if ($desktopOnly) return 'flex-end';
260
+ return 'center';
261
+ }, _ref33 => {
262
+ let {
263
+ theme
264
+ } = _ref33;
265
+ return theme.breakpoints2026('L');
266
+ }, _ref34 => {
267
+ let {
268
+ $desktopOnly,
269
+ $mobileOnly,
270
+ $showCRLogoOnly,
271
+ $showPairedLogos,
272
+ $showFundraiserAtBottom
273
+ } = _ref34;
274
+ // Hide fundraiser at bottom for L+ (it's in TopSection)
275
+ if ($mobileOnly && $showFundraiserAtBottom) return 'none';
276
+ if ($mobileOnly) return 'none';
277
+
278
+ // Desktop containers
279
+ if ($desktopOnly && $showCRLogoOnly) return 'none';
280
+ if ($desktopOnly && $showPairedLogos) return 'flex';
281
+ if ($desktopOnly) return 'none';
282
+ return 'flex';
283
+ });
284
+ const Brand = exports.Brand = (0, _styledComponents.default)(_Link.default).withConfig({
285
+ displayName: "FooterNewstyle__Brand",
286
+ componentId: "sc-17mkhu6-16"
287
+ })(["color:transparent;border:0;:hover{border:0;}", ""], _ref35 => {
288
+ let {
289
+ animateRotate
290
+ } = _ref35;
291
+ return (0, _animations.logoRotateAnimation)(animateRotate);
292
+ });
293
+ const FooterCopyright = exports.FooterCopyright = _styledComponents.default.div.withConfig({
294
+ displayName: "FooterNewstyle__FooterCopyright",
295
+ componentId: "sc-17mkhu6-17"
296
+ })(["display:block;width:100%;height:100%;text-align:left;"]);
297
+ const FooterCopyrightText = exports.FooterCopyrightText = (0, _styledComponents.default)(_Text.default).attrs({
298
+ tag: 'p'
299
+ }).withConfig({
300
+ displayName: "FooterNewstyle__FooterCopyrightText",
301
+ componentId: "sc-17mkhu6-18"
302
+ })(["color:", ";font-size:", ";margin-bottom:", ";"], _ref36 => {
303
+ let {
304
+ theme
305
+ } = _ref36;
306
+ return theme.color('grey');
307
+ }, _ref37 => {
308
+ let {
309
+ theme
310
+ } = _ref37;
311
+ return theme.fontSize('xs');
312
+ }, (0, _spacing.default)('sm'));
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _react = _interopRequireDefault(require("react"));
5
+ require("jest-styled-components");
6
+ var _shallowWithTheme = _interopRequireDefault(require("../../../../tests/hoc/shallowWithTheme"));
7
+ var _FooterNew = _interopRequireDefault(require("./FooterNew"));
8
+ var _footerCopy = _interopRequireDefault(require("../Footer/data/footerCopy"));
9
+ var _data = require("./dev-data/data");
10
+ /* eslint-disable react/jsx-wrap-multilines */
11
+
12
+ it('renders correctly', () => {
13
+ const tree = (0, _shallowWithTheme.default)( /*#__PURE__*/_react.default.createElement(_FooterNew.default, {
14
+ primaryLinksList: _data.testPrimaryLinksList,
15
+ secondaryLinksList: _data.testSecondaryLinksList,
16
+ legalText: _footerCopy.default.copy,
17
+ copyrightText: "\xA9 2026 Comic Relief"
18
+ })).toJSON();
19
+ expect(tree).toMatchSnapshot();
20
+ });
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _navHelper = require("../../../../utils/navHelper");
10
+ var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
11
+ var _FooterNew = require("../FooterNew.style");
12
+ const PrimaryNav = _ref => {
13
+ let {
14
+ navItems = [],
15
+ ...rest
16
+ } = _ref;
17
+ if (!navItems || navItems.length === 0) {
18
+ return null;
19
+ }
20
+ return /*#__PURE__*/_react.default.createElement(_FooterNew.PrimaryNav, {
21
+ "aria-label": "Primary footer navigation",
22
+ role: "navigation"
23
+ }, navItems.map(item => {
24
+ const thisUrl = (0, _internalLinkHelper.InternalLinkHelper)((0, _navHelper.NavHelper)(item));
25
+ return /*#__PURE__*/_react.default.createElement(_FooterNew.PrimaryNavItem, {
26
+ key: `primary-${thisUrl}-${item.title}`
27
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.PrimaryNavLink, Object.assign({
28
+ href: thisUrl
29
+ }, rest), /*#__PURE__*/_react.default.createElement(_FooterNew.PrimaryNavText, null, item.title)));
30
+ }));
31
+ };
32
+ var _default = exports.default = PrimaryNav;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _navHelper = require("../../../../utils/navHelper");
10
+ var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
11
+ var _FooterNew = require("../FooterNew.style");
12
+ const SecondaryNav = _ref => {
13
+ let {
14
+ navItems = [],
15
+ ...rest
16
+ } = _ref;
17
+ if (!navItems || navItems.length === 0) {
18
+ return null;
19
+ }
20
+ return /*#__PURE__*/_react.default.createElement(_FooterNew.SecondaryNav, {
21
+ "aria-label": "Secondary footer navigation",
22
+ role: "navigation"
23
+ }, navItems.map(item => {
24
+ const thisUrl = (0, _internalLinkHelper.InternalLinkHelper)((0, _navHelper.NavHelper)(item));
25
+ return /*#__PURE__*/_react.default.createElement(_FooterNew.SecondaryNavItem, {
26
+ key: `secondary-${thisUrl}-${item.title}`
27
+ }, /*#__PURE__*/_react.default.createElement(_FooterNew.SecondaryNavLink, Object.assign({
28
+ href: thisUrl
29
+ }, rest), /*#__PURE__*/_react.default.createElement(_FooterNew.SecondaryNavText, null, item.title)));
30
+ }));
31
+ };
32
+ var _default = exports.default = SecondaryNav;