@comicrelief/component-library 5.4.0 → 5.7.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 (85) hide show
  1. package/.circleci/config.yml +1 -1
  2. package/dist/components/Atoms/Button/Button.js +3 -1
  3. package/dist/components/Atoms/ButtonWithStates/ButtonWithStates.js +91 -0
  4. package/dist/components/Atoms/ButtonWithStates/ButtonWithStates.md +13 -0
  5. package/dist/components/Atoms/Checkbox/Checkbox.js +5 -3
  6. package/dist/components/Atoms/ErrorText/ErrorText.js +3 -1
  7. package/dist/components/Atoms/Icons/Arrow.js +3 -1
  8. package/dist/components/Atoms/Icons/AtSign.js +2 -1
  9. package/dist/components/Atoms/Icons/Chevron.js +3 -1
  10. package/dist/components/Atoms/Icons/Download.js +3 -1
  11. package/dist/components/Atoms/Icons/External.js +3 -1
  12. package/dist/components/Atoms/Icons/Favourite.js +3 -1
  13. package/dist/components/Atoms/Icons/Internal.js +3 -1
  14. package/dist/components/Atoms/Input/Input.js +6 -4
  15. package/dist/components/Atoms/Label/Label.js +5 -2
  16. package/dist/components/Atoms/Link/Link.js +31 -6
  17. package/dist/components/Atoms/Link/Link.style.js +3 -3
  18. package/dist/components/Atoms/Pagination/Item/Item.js +3 -1
  19. package/dist/components/Atoms/Pagination/List/List.js +5 -3
  20. package/dist/components/Atoms/Pagination/Pagination.js +3 -1
  21. package/dist/components/Atoms/Picture/Picture.js +3 -1
  22. package/dist/components/Atoms/RadioButton/RadioButton.js +3 -1
  23. package/dist/components/Atoms/RichText/RichText.js +4 -2
  24. package/dist/components/Atoms/Select/Select.js +3 -1
  25. package/dist/components/Atoms/SocialIcons/Icon/Icon.js +6 -4
  26. package/dist/components/Atoms/SocialIcons/SocialIcons.js +5 -3
  27. package/dist/components/Atoms/Text/Text.js +3 -1
  28. package/dist/components/Atoms/TextArea/TextArea.js +3 -1
  29. package/dist/components/Atoms/TextInputWithDropdown/TextInputWithDropdown.js +5 -2
  30. package/dist/components/Molecules/Accordion/Accordion.js +3 -1
  31. package/dist/components/Molecules/Box/Box.js +3 -1
  32. package/dist/components/Molecules/Card/Card.js +3 -1
  33. package/dist/components/Molecules/CardDs/CardDs.js +8 -6
  34. package/dist/components/Molecules/Countdown/Countdown.style.js +2 -2
  35. package/dist/components/Molecules/HeroBanner/HeroBanner.js +3 -3
  36. package/dist/components/Molecules/Lookup/Lookup.js +201 -0
  37. package/dist/components/Molecules/PartnerLink/PartnerLink.js +3 -1
  38. package/dist/components/Molecules/Promo/Promo.style.js +4 -4
  39. package/dist/components/Molecules/SchoolLookup/SchoolLookup.js +3 -1
  40. package/dist/components/Molecules/SearchInput/SearchInput.js +3 -1
  41. package/dist/components/Molecules/SearchResult/SearchResult.js +5 -5
  42. package/dist/components/Molecules/ShareButton/ShareButton.js +3 -1
  43. package/dist/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.js +112 -0
  44. package/dist/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.md +7 -0
  45. package/dist/components/Molecules/SingleMessage/SingleMessage.js +1 -1
  46. package/dist/components/Molecules/SingleMessage/__snapshots__/SingleMessage.test.js.snap +8 -0
  47. package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.js +3 -1
  48. package/dist/components/Molecules/SingleMessageDS/SingleMessageDs.style.js +9 -9
  49. package/dist/components/Molecules/Typeahead/Typeahead.js +3 -1
  50. package/dist/components/Molecules/VideoBanner/VideoBanner.js +1 -1
  51. package/dist/components/Organisms/CookieBanner/CookieBanner.style.js +4 -4
  52. package/dist/components/Organisms/Donate/Form/Form.js +3 -1
  53. package/dist/components/Organisms/Donate/GivingSelector/GivingSelector.js +4 -4
  54. package/dist/components/Organisms/Donate/MoneyBox/MoneyBox.js +3 -1
  55. package/dist/components/Organisms/EmailSignUp/EmailSignUp.js +3 -1
  56. package/dist/components/Organisms/EmailSignUp/EmailSignUp.style.js +7 -7
  57. package/dist/components/Organisms/Footer/Footer.js +7 -4
  58. package/dist/components/Organisms/Footer/Footer.md +8 -1
  59. package/dist/components/Organisms/Footer/Nav/Nav.js +12 -7
  60. package/dist/components/Organisms/Footer/Nav/Nav.style.js +8 -8
  61. package/dist/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +31 -6
  62. package/dist/components/Organisms/Header/Burger/BurgerMenu.style.js +3 -3
  63. package/dist/components/Organisms/Header/Header.js +3 -1
  64. package/dist/components/Organisms/Header/Nav/Nav.js +3 -3
  65. package/dist/components/Organisms/MarketingPreferencesDS/_TextInput.js +3 -1
  66. package/dist/components/Organisms/Membership/Form/Form.js +3 -1
  67. package/dist/components/Organisms/Membership/MoneyBox/MoneyBox.js +3 -1
  68. package/dist/index.js +24 -0
  69. package/dist/utils/internalLinkHelper.js +27 -5
  70. package/package.json +14 -13
  71. package/src/components/Atoms/ButtonWithStates/ButtonWithStates.js +64 -0
  72. package/src/components/Atoms/ButtonWithStates/ButtonWithStates.md +13 -0
  73. package/src/components/Atoms/Link/Link.js +23 -8
  74. package/src/components/Molecules/Lookup/Lookup.js +148 -0
  75. package/src/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.js +63 -0
  76. package/src/components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup.md +7 -0
  77. package/src/components/Molecules/SingleMessage/SingleMessage.js +1 -1
  78. package/src/components/Molecules/SingleMessage/__snapshots__/SingleMessage.test.js.snap +8 -0
  79. package/src/components/Organisms/Footer/Footer.js +5 -3
  80. package/src/components/Organisms/Footer/Footer.md +8 -1
  81. package/src/components/Organisms/Footer/Nav/Nav.js +4 -3
  82. package/src/components/Organisms/Footer/__snapshots__/Footer.test.js.snap +31 -6
  83. package/src/components/Organisms/Header/Nav/Nav.js +1 -1
  84. package/src/index.js +3 -0
  85. package/src/utils/internalLinkHelper.js +23 -5
@@ -11,6 +11,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/es
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
13
13
 
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectWithoutProperties"));
15
+
14
16
  var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _Text = _interopRequireDefault(require("../../../Atoms/Text/Text"));
@@ -19,16 +21,19 @@ var _breakpoint = require("../../../../theme/shared/breakpoint");
19
21
 
20
22
  var _navHelper = _interopRequireDefault(require("../../../../utils/navHelper"));
21
23
 
22
- var _internalLinkHelper = _interopRequireDefault(require("../../../../utils/internalLinkHelper"));
24
+ var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
23
25
 
24
26
  var _Nav = require("./Nav.style");
25
27
 
28
+ var _excluded = ["navItems"];
29
+
26
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
31
 
28
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
33
 
30
34
  var FooterNav = function FooterNav(_ref) {
31
- var navItems = _ref.navItems;
35
+ var navItems = _ref.navItems,
36
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
32
37
  var menuGroups = navItems.menuGroups;
33
38
 
34
39
  var _useState = (0, _react.useState)(false),
@@ -96,14 +101,14 @@ var FooterNav = function FooterNav(_ref) {
96
101
  }, !isSmallBreakpoint ? /*#__PURE__*/_react.default.createElement(_Text.default, {
97
102
  color: "white",
98
103
  weight: "bold"
99
- }, group.title) : /*#__PURE__*/_react.default.createElement(_Nav.NavLink, {
104
+ }, group.title) : /*#__PURE__*/_react.default.createElement(_Nav.NavLink, Object.assign({
100
105
  href: "#",
101
106
  inline: true,
102
107
  "aria-expanded": !!isSubMenuOpen[group.id],
103
108
  "aria-haspopup": "true",
104
109
  role: "button",
105
110
  onClick: toggleSubMenu(group.id)
106
- }, /*#__PURE__*/_react.default.createElement(_Text.default, {
111
+ }, rest), /*#__PURE__*/_react.default.createElement(_Text.default, {
107
112
  color: "white"
108
113
  }, group.title)), group.links && group.links.length > 0 && /*#__PURE__*/_react.default.createElement(_Nav.SubNavMenu, {
109
114
  role: "list",
@@ -113,15 +118,15 @@ var FooterNav = function FooterNav(_ref) {
113
118
  }, group.links.map(function (child) {
114
119
  /* Determine which field represents our url path */
115
120
  var thisUrl = (0, _navHelper.default)(child);
116
- thisUrl = (0, _internalLinkHelper.default)(thisUrl);
121
+ thisUrl = (0, _internalLinkHelper.InternalLinkHelper)(thisUrl);
117
122
  return /*#__PURE__*/_react.default.createElement(_Nav.SubNavItem, {
118
123
  key: thisUrl,
119
124
  column: group.links.length % 2 === 0 && group.links.length > 2
120
- }, /*#__PURE__*/_react.default.createElement(_Nav.SubNavLink, {
125
+ }, /*#__PURE__*/_react.default.createElement(_Nav.SubNavLink, Object.assign({
121
126
  href: thisUrl,
122
127
  inline: true,
123
128
  role: "menuitem"
124
- }, /*#__PURE__*/_react.default.createElement(_Text.default, {
129
+ }, rest), /*#__PURE__*/_react.default.createElement(_Text.default, {
125
130
  color: "white"
126
131
  }, child.title)));
127
132
  })));
@@ -15,7 +15,7 @@ var _hideVisually = _interopRequireDefault(require("../../../../theme/shared/hid
15
15
 
16
16
  var NavLinkClass = (0, _styledComponents.default)(_Link.default).withConfig({
17
17
  displayName: "Navstyle__NavLinkClass",
18
- componentId: "uzf5hs-0"
18
+ componentId: "sc-uzf5hs-0"
19
19
  })(["border:0;height:46px;width:100%;background-color:", ";&:hover,&:focus{border-bottom:none;}"], function (_ref) {
20
20
  var theme = _ref.theme;
21
21
  return theme.color('deep_violet_dark');
@@ -26,7 +26,7 @@ var NavLinkClass = (0, _styledComponents.default)(_Link.default).withConfig({
26
26
 
27
27
  var Nav = _styledComponents.default.nav.withConfig({
28
28
  displayName: "Navstyle__Nav",
29
- componentId: "uzf5hs-1"
29
+ componentId: "sc-uzf5hs-1"
30
30
  })(["display:block;width:100%;text-align:left;> h2{", ";}"], _hideVisually.default);
31
31
  /**
32
32
  * Sub Navigation Menu (second level)
@@ -37,7 +37,7 @@ exports.Nav = Nav;
37
37
 
38
38
  var SubNavMenu = _styledComponents.default.ul.withConfig({
39
39
  displayName: "Navstyle__SubNavMenu",
40
- componentId: "uzf5hs-2"
40
+ componentId: "sc-uzf5hs-2"
41
41
  })(["display:flex;transition:max-height 0.5s ease;max-height:", ";overflow:hidden;padding:0;position:relative;list-style:none outside;flex-direction:column;> li a{display:", ";font-size:15px;font-weight:500;cursor:pointer;&:after{content:none;}}@media ", "{max-height:none;height:auto;", ";> li a{display:inline;line-height:24px;}}"], function (_ref2) {
42
42
  var isSubMenuOpen = _ref2.isSubMenuOpen;
43
43
  return isSubMenuOpen ? '400px' : '0px';
@@ -60,7 +60,7 @@ exports.SubNavMenu = SubNavMenu;
60
60
 
61
61
  var SubNavItem = _styledComponents.default.li.withConfig({
62
62
  displayName: "Navstyle__SubNavItem",
63
- componentId: "uzf5hs-3"
63
+ componentId: "sc-uzf5hs-3"
64
64
  })(["height:40px;width:100%;background-color:inherit;padding:8px 0;@media ", "{height:auto;margin-top:12px;padding:0;", ";a{background-color:inherit;height:auto;&:after{content:none !important;}&:hover,&:focus{border-bottom:2px solid #fff;span{border-bottom:0;padding-bottom:2px;}}}}@media ", "{", ";}"], function (_ref6) {
65
65
  var theme = _ref6.theme;
66
66
  return theme.breakpoint('small');
@@ -82,7 +82,7 @@ var SubNavItem = _styledComponents.default.li.withConfig({
82
82
  exports.SubNavItem = SubNavItem;
83
83
  var SubNavLink = (0, _styledComponents.default)(NavLinkClass).withConfig({
84
84
  displayName: "Navstyle__SubNavLink",
85
- componentId: "uzf5hs-4"
85
+ componentId: "sc-uzf5hs-4"
86
86
  })(["padding:14px 21px;height:auto;position:relative;"]);
87
87
  /**
88
88
  * Navigation Menu (first level)
@@ -92,7 +92,7 @@ exports.SubNavLink = SubNavLink;
92
92
 
93
93
  var NavMenu = _styledComponents.default.ul.withConfig({
94
94
  displayName: "Navstyle__NavMenu",
95
- componentId: "uzf5hs-5"
95
+ componentId: "sc-uzf5hs-5"
96
96
  })(["background-color:inherit;list-style:none outside;padding:0;margin:0;@media ", "{display:flex;flex-wrap:wrap;justify-content:start;}"], function (_ref10) {
97
97
  var theme = _ref10.theme;
98
98
  return theme.breakpoint('small');
@@ -105,7 +105,7 @@ var NavMenu = _styledComponents.default.ul.withConfig({
105
105
  exports.NavMenu = NavMenu;
106
106
  var NavLink = (0, _styledComponents.default)(NavLinkClass).withConfig({
107
107
  displayName: "Navstyle__NavLink",
108
- componentId: "uzf5hs-6"
108
+ componentId: "sc-uzf5hs-6"
109
109
  })([""]);
110
110
  /**
111
111
  * Menu list items
@@ -115,7 +115,7 @@ exports.NavLink = NavLink;
115
115
 
116
116
  var NavItem = _styledComponents.default.li.withConfig({
117
117
  displayName: "Navstyle__NavItem",
118
- componentId: "uzf5hs-7"
118
+ componentId: "sc-uzf5hs-7"
119
119
  })(["position:relative;font-weight:700;margin:0;margin-bottom:1rem;@media ", "{flex:0 0 30%;margin:0;}@media ", "{flex:0 0 calc(25% - 1rem);margin-right:1rem;margin-bottom:1rem;> span{padding:0;}}a{width:auto;padding:0;height:auto;position:relative;background-color:inherit;font-size:19px;line-height:40px;font-weight:800;@media ", "{font-size:20px;line-height:40px;}&:after{content:'\\2303';position:absolute;font-family:Arial;margin-left:4px;overflow:hidden;line-height:19px;font-size:23px;color:", ";font-weight:100;transition:transform 0.2s ease;transform:", ";top:", ";right:-25px;}@media ", "{cursor:default;display:inline;&:after{content:none;}}}"], function (_ref11) {
120
120
  var theme = _ref11.theme;
121
121
  return theme.breakpoint('small');
@@ -27,7 +27,7 @@ exports[`renders correctly 1`] = `
27
27
  font-family: 'Montserrat',Helvetica,Arial,sans-serif;
28
28
  }
29
29
 
30
- .c25 {
30
+ .c26 {
31
31
  color: #969598;
32
32
  font-size: 1rem;
33
33
  line-height: 1rem;
@@ -69,6 +69,21 @@ exports[`renders correctly 1`] = `
69
69
  border-bottom: 2px solid #000000;
70
70
  }
71
71
 
72
+ .c24 {
73
+ border: 0;
74
+ -webkit-clip: rect(0 0 0 0);
75
+ clip: rect(0 0 0 0);
76
+ -webkit-clip-path: inset(50%);
77
+ clip-path: inset(50%);
78
+ height: 1px;
79
+ margin: -1px;
80
+ overflow: hidden;
81
+ padding: 0;
82
+ position: absolute;
83
+ white-space: nowrap;
84
+ width: 1px;
85
+ }
86
+
72
87
  .c5 {
73
88
  -webkit-text-decoration: none;
74
89
  text-decoration: none;
@@ -313,7 +328,7 @@ exports[`renders correctly 1`] = `
313
328
  align-items: center;
314
329
  }
315
330
 
316
- .c24 {
331
+ .c25 {
317
332
  display: block;
318
333
  width: 100%;
319
334
  height: 100%;
@@ -321,7 +336,7 @@ exports[`renders correctly 1`] = `
321
336
  margin-top: 3rem;
322
337
  }
323
338
 
324
- .c24 p {
339
+ .c25 p {
325
340
  font-size: 15px;
326
341
  line-height: 24px;
327
342
  margin-bottom: 5px;
@@ -528,7 +543,7 @@ exports[`renders correctly 1`] = `
528
543
  }
529
544
 
530
545
  @media (min-width:1024px) {
531
- .c24 p {
546
+ .c25 p {
532
547
  font-size: 16px;
533
548
  line-height: 27px;
534
549
  }
@@ -1166,6 +1181,11 @@ exports[`renders correctly 1`] = `
1166
1181
  >
1167
1182
  Link comp with only URL
1168
1183
  </span>
1184
+ <span
1185
+ className="c24"
1186
+ >
1187
+ (opens in new window)
1188
+ </span>
1169
1189
  </a>
1170
1190
  </li>
1171
1191
  <li
@@ -1206,6 +1226,11 @@ exports[`renders correctly 1`] = `
1206
1226
  >
1207
1227
  Test non-whitelisted external link
1208
1228
  </span>
1229
+ <span
1230
+ className="c24"
1231
+ >
1232
+ (opens in new window)
1233
+ </span>
1209
1234
  </a>
1210
1235
  </li>
1211
1236
  </ul>
@@ -1213,10 +1238,10 @@ exports[`renders correctly 1`] = `
1213
1238
  </ul>
1214
1239
  </nav>
1215
1240
  <div
1216
- className="c24"
1241
+ className="c25"
1217
1242
  >
1218
1243
  <p
1219
- className="c25"
1244
+ className="c26"
1220
1245
  color="grey"
1221
1246
  size="s"
1222
1247
  >
@@ -22,7 +22,7 @@ var _zIndex = _interopRequireDefault(require("../../../../theme/shared/zIndex"))
22
22
  */
23
23
  var BurgerHiddenText = (0, _styledComponents.default)(_Text.default).withConfig({
24
24
  displayName: "BurgerMenustyle__BurgerHiddenText",
25
- componentId: "dtfwej-0"
25
+ componentId: "sc-dtfwej-0"
26
26
  })(["", ";"], _hideVisually.default);
27
27
  /**
28
28
  * Burger menu bar
@@ -32,7 +32,7 @@ exports.BurgerHiddenText = BurgerHiddenText;
32
32
 
33
33
  var BurgerBar = _styledComponents.default.span.withConfig({
34
34
  displayName: "BurgerMenustyle__BurgerBar",
35
- componentId: "dtfwej-1"
35
+ componentId: "sc-dtfwej-1"
36
36
  })(["background-color:", ";margin:0 auto;"], function (_ref) {
37
37
  var theme = _ref.theme;
38
38
  return theme.color('deep_violet_dark');
@@ -45,7 +45,7 @@ var BurgerBar = _styledComponents.default.span.withConfig({
45
45
  exports.BurgerBar = BurgerBar;
46
46
  var BurgerWrapper = (0, _styledComponents.default)(_Link.default).withConfig({
47
47
  displayName: "BurgerMenustyle__BurgerWrapper",
48
- componentId: "dtfwej-2"
48
+ componentId: "sc-dtfwej-2"
49
49
  })(["", ";order:50;display:flex;align-items:center;position:relative;text-indent:-9999px;background-color:transparent;height:100%;width:45px;left:5px;cursor:pointer;transition:all 0.2s;:hover{border:none;font-weight:inherit;}", "{position:relative;&,::before,::after{width:25px;height:3px;display:inline-block;}", ";::before,::after{content:'';position:absolute;left:0;background-color:currentColor;transition:all 0.2s;}::before{top:-0.5rem;", ";}::after{top:0.5rem;", ";}}:hover ", "{&,::before,::after{background-color:", ";}::before{", ";}::after{", ";}}@media ", "{display:none;}"], (0, _zIndex.default)('medium'), BurgerBar, function (_ref2) {
50
50
  var isExpandable = _ref2.isExpandable;
51
51
  return isExpandable && ' background-color: transparent';
@@ -17,11 +17,13 @@ var _Nav = _interopRequireDefault(require("./Nav/Nav"));
17
17
 
18
18
  var _Header = require("./Header.style");
19
19
 
20
+ var _excluded = ["navItems", "metaIcons", "campaign"];
21
+
20
22
  var Header = function Header(_ref) {
21
23
  var navItems = _ref.navItems,
22
24
  metaIcons = _ref.metaIcons,
23
25
  campaign = _ref.campaign,
24
- rest = (0, _objectWithoutProperties2.default)(_ref, ["navItems", "metaIcons", "campaign"]);
26
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
25
27
  return /*#__PURE__*/_react.default.createElement(_Header.HeaderWrapper, Object.assign({
26
28
  navItems: true
27
29
  }, rest), /*#__PURE__*/_react.default.createElement(_Header.InnerWrapper, null, /*#__PURE__*/_react.default.createElement(_Header.Brand, null, /*#__PURE__*/_react.default.createElement(_Logos.default, {
@@ -21,7 +21,7 @@ var _breakpoint = require("../../../../theme/shared/breakpoint");
21
21
 
22
22
  var _navHelper = _interopRequireDefault(require("../../../../utils/navHelper"));
23
23
 
24
- var _internalLinkHelper = _interopRequireDefault(require("../../../../utils/internalLinkHelper"));
24
+ var _internalLinkHelper = require("../../../../utils/internalLinkHelper");
25
25
 
26
26
  var _whiteListed = _interopRequireDefault(require("../../../../utils/whiteListed"));
27
27
 
@@ -104,7 +104,7 @@ var MainNav = function MainNav(_ref) {
104
104
  var relNoopener = !(0, _whiteListed.default)(thisUrl) && 'noopener';
105
105
  var hasSubMenu = group.links && group.links.length > 1;
106
106
  var hasPopUp = hasSubMenu ? 'true' : null;
107
- thisUrl = (0, _internalLinkHelper.default)(thisUrl);
107
+ thisUrl = (0, _internalLinkHelper.InternalLinkHelper)(thisUrl);
108
108
  return /*#__PURE__*/_react.default.createElement(_Nav.NavItem, {
109
109
  role: "none",
110
110
  key: group.id,
@@ -133,7 +133,7 @@ var MainNav = function MainNav(_ref) {
133
133
  isSubMenuOpen: !!isSubMenuOpen[group.id]
134
134
  }, group.links.map(function (child, childIndex) {
135
135
  var thisSubUrl = (0, _navHelper.default)(child);
136
- thisSubUrl = (0, _internalLinkHelper.default)(thisSubUrl);
136
+ thisSubUrl = (0, _internalLinkHelper.InternalLinkHelper)(thisSubUrl);
137
137
  /* Wrap our first child item with special tags */
138
138
 
139
139
  if (childIndex === 0) {
@@ -15,13 +15,15 @@ var _react = _interopRequireDefault(require("react"));
15
15
 
16
16
  var _Input = _interopRequireDefault(require("../../Atoms/Input/Input"));
17
17
 
18
+ var _excluded = ["fieldName", "label", "optional", "fieldType", "formContext"];
19
+
18
20
  var TextInput = function TextInput(_ref) {
19
21
  var fieldName = _ref.fieldName,
20
22
  label = _ref.label,
21
23
  optional = _ref.optional,
22
24
  fieldType = _ref.fieldType,
23
25
  formContext = _ref.formContext,
24
- rest = (0, _objectWithoutProperties2.default)(_ref, ["fieldName", "label", "optional", "fieldType", "formContext"]);
26
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
25
27
  var errors = formContext.errors,
26
28
  register = formContext.register;
27
29
  var props = (0, _objectSpread2.default)({
@@ -25,6 +25,8 @@ var _Membership = require("../../../../utils/Membership");
25
25
 
26
26
  var _Membership2 = require("../Membership.style");
27
27
 
28
+ var _excluded = ["data", "donateLink", "otherDescription", "clientID", "cartID", "mbshipID"];
29
+
28
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
31
 
30
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -36,7 +38,7 @@ var Signup = function Signup(_ref) {
36
38
  clientID = _ref.clientID,
37
39
  cartID = _ref.cartID,
38
40
  mbshipID = _ref.mbshipID,
39
- rest = (0, _objectWithoutProperties2.default)(_ref, ["data", "donateLink", "otherDescription", "clientID", "cartID", "mbshipID"]);
41
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
40
42
 
41
43
  var _useState = (0, _react.useState)({
42
44
  box1: '',
@@ -15,6 +15,8 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
15
15
 
16
16
  var _Input = _interopRequireDefault(require("../../../Atoms/Input/Input"));
17
17
 
18
+ var _excluded = ["setOtherAmount", "amount", "currency", "description"];
19
+
18
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
21
 
20
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -49,7 +51,7 @@ var MoneyBuy = function MoneyBuy(_ref7) {
49
51
  amount = _ref7.amount,
50
52
  currency = _ref7.currency,
51
53
  description = _ref7.description,
52
- rest = (0, _objectWithoutProperties2.default)(_ref7, ["setOtherAmount", "amount", "currency", "description"]);
54
+ rest = (0, _objectWithoutProperties2.default)(_ref7, _excluded);
53
55
  return /*#__PURE__*/_react.default.createElement(MoneyBox, Object.assign({}, rest, {
54
56
  "aria-label": description,
55
57
  value: "".concat(currency, " ").concat(amount),
package/dist/index.js CHANGED
@@ -167,6 +167,12 @@ Object.defineProperty(exports, "Label", {
167
167
  return _Label.default;
168
168
  }
169
169
  });
170
+ Object.defineProperty(exports, "ButtonWithStates", {
171
+ enumerable: true,
172
+ get: function get() {
173
+ return _ButtonWithStates.default;
174
+ }
175
+ });
170
176
  Object.defineProperty(exports, "HeroBanner", {
171
177
  enumerable: true,
172
178
  get: function get() {
@@ -329,6 +335,18 @@ Object.defineProperty(exports, "Descriptor", {
329
335
  return _Descriptor.default;
330
336
  }
331
337
  });
338
+ Object.defineProperty(exports, "Lookup", {
339
+ enumerable: true,
340
+ get: function get() {
341
+ return _Lookup.default;
342
+ }
343
+ });
344
+ Object.defineProperty(exports, "SimpleSchoolLookup", {
345
+ enumerable: true,
346
+ get: function get() {
347
+ return _SimpleSchoolLookup.default;
348
+ }
349
+ });
332
350
  Object.defineProperty(exports, "EmailSignUp", {
333
351
  enumerable: true,
334
352
  get: function get() {
@@ -416,6 +434,8 @@ var _ErrorText = _interopRequireDefault(require("./components/Atoms/ErrorText/Er
416
434
 
417
435
  var _Label = _interopRequireDefault(require("./components/Atoms/Label/Label"));
418
436
 
437
+ var _ButtonWithStates = _interopRequireDefault(require("./components/Atoms/ButtonWithStates/ButtonWithStates"));
438
+
419
439
  var _HeroBanner = _interopRequireDefault(require("./components/Molecules/HeroBanner/HeroBanner"));
420
440
 
421
441
  var _InfoBanner = _interopRequireDefault(require("./components/Molecules/InfoBanner/InfoBanner"));
@@ -470,6 +490,10 @@ var _Chip = _interopRequireDefault(require("./components/Molecules/Chip/Chip"));
470
490
 
471
491
  var _Descriptor = _interopRequireDefault(require("./components/Molecules/Descriptor/Descriptor"));
472
492
 
493
+ var _Lookup = _interopRequireDefault(require("./components/Molecules/Lookup/Lookup"));
494
+
495
+ var _SimpleSchoolLookup = _interopRequireDefault(require("./components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup"));
496
+
473
497
  var _EmailSignUp = _interopRequireDefault(require("./components/Organisms/EmailSignUp/EmailSignUp"));
474
498
 
475
499
  var _CookieBanner = _interopRequireDefault(require("./components/Organisms/CookieBanner/CookieBanner"));
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
- exports.default = void 0;
8
+ exports.getDomain = exports.InternalLinkHelper = void 0;
7
9
 
8
- var InternalLinkHelper = function InternalLinkHelper(link) {
9
- var domainRegEx = new RegExp('(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]'); // Check our URL for a domain pattern, if so return it
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
+
12
+ var domainRegEx = new RegExp('(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]');
10
13
 
14
+ var InternalLinkHelper = function InternalLinkHelper(link) {
15
+ // Check our URL for a domain pattern, if so return it
11
16
  if (domainRegEx.test(link)) {
12
17
  return link;
13
18
  } // If domain-free and internal, prefix it with slash if it doesn't already have one
@@ -16,5 +21,22 @@ var InternalLinkHelper = function InternalLinkHelper(link) {
16
21
  return link.substring(0, 1) === '/' ? link : "/".concat(link);
17
22
  };
18
23
 
19
- var _default = InternalLinkHelper;
20
- exports.default = _default;
24
+ exports.InternalLinkHelper = InternalLinkHelper;
25
+
26
+ var getDomain = function getDomain(url) {
27
+ var thisURL = url; // Strip out protocol
28
+
29
+ thisURL = url.replace(/(https?:\/\/)?(www.)?/i, ''); // Strip out subdirectory/path
30
+
31
+ if (thisURL.indexOf('/') !== -1) {
32
+ var _thisURL$split = thisURL.split('/'),
33
+ _thisURL$split2 = (0, _slicedToArray2.default)(_thisURL$split, 1),
34
+ splitURL = _thisURL$split2[0];
35
+
36
+ thisURL = splitURL;
37
+ }
38
+
39
+ return thisURL;
40
+ };
41
+
42
+ exports.getDomain = getDomain;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@comicrelief/component-library",
3
3
  "author": "Comic Relief Engineering Team",
4
- "version": "5.4.0",
4
+ "version": "5.7.0",
5
5
  "main": "dist/index.js",
6
6
  "license": "ISC",
7
7
  "jest": {
@@ -21,10 +21,10 @@
21
21
  "url": "https://github.com/comicrelief/component-library.git"
22
22
  },
23
23
  "dependencies": {
24
- "@babel/cli": "^7.13.14",
24
+ "@babel/cli": "^7.14.8",
25
25
  "@hookform/resolvers": "^1.3.4",
26
26
  "axios": "^0.21.1",
27
- "jest-styled-components": "^7.0.2",
27
+ "jest-styled-components": "^7.0.5",
28
28
  "lazysizes": "^5.3.2",
29
29
  "lodash": "^4.17.11",
30
30
  "moment": "^2.29.1",
@@ -33,12 +33,13 @@
33
33
  "react-currency-format": "^1.0.0",
34
34
  "react-dom": "^17.0.2",
35
35
  "react-hook-form": "^6.3.0",
36
- "react-modal": "^3.14.2",
36
+ "react-modal": "^3.14.3",
37
37
  "react-scripts": "4.0.3",
38
- "react-styleguidist": "^11.1.6",
38
+ "react-spinners": "^0.11.0",
39
+ "react-styleguidist": "^11.1.7",
39
40
  "react-test-renderer": "^17.0.2",
40
41
  "react-uid": "^2.2.0",
41
- "styled-components": "^5.2.3",
42
+ "styled-components": "^5.3.1",
42
43
  "youtube-player": "^5.5.2",
43
44
  "yup": "^0.32.9",
44
45
  "yup-phone": "^1.2.19"
@@ -73,17 +74,17 @@
73
74
  "devDependencies": {
74
75
  "babel-eslint": "^10.0.2",
75
76
  "cross-env": "^7.0.3",
76
- "cypress": "^7.0.1",
77
- "eslint": "^7.23.0",
77
+ "cypress": "^8.3.0",
78
+ "eslint": "^7.32.0",
78
79
  "eslint-config-airbnb": "^18.2.0",
79
- "eslint-plugin-import": "^2.22.0",
80
+ "eslint-plugin-import": "^2.24.2",
80
81
  "eslint-plugin-jsx-a11y": "^6.3.1",
81
- "eslint-plugin-react": "^7.23.1",
82
+ "eslint-plugin-react": "^7.24.0",
82
83
  "eslint-plugin-react-hooks": "^4.0.5",
83
- "husky": "^5.0.6",
84
+ "husky": "^7.0.2",
84
85
  "jest": "^26.1.0",
85
86
  "npm-run-all": "^4.1.5",
86
- "prettier": "^2.0.5",
87
- "semantic-release": "^17.4.2"
87
+ "prettier": "^2.3.2",
88
+ "semantic-release": "^17.4.6"
88
89
  }
89
90
  }
@@ -0,0 +1,64 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import styled from 'styled-components';
4
+ import ScaleLoader from 'react-spinners/ScaleLoader';
5
+ import spacing from '../../../theme/shared/spacing';
6
+ import Button from '../Button/Button';
7
+
8
+ const ButtonWithDisabledState = styled(Button)`
9
+ &:disabled {
10
+ cursor: not-allowed;
11
+ opacity: 0.75;
12
+ }
13
+ `;
14
+
15
+ const LoaderContainer = styled.div`${({ withMargin }) => (withMargin ? `
16
+ margin-top: ${spacing('xsm')};
17
+ margin-left: ${spacing('md')};
18
+ ` : '')}`;
19
+
20
+ // A button with loading and disabled states.
21
+ const ButtonWithStates = React.forwardRef(({
22
+ children, loadingText, loading, disabled, ...rest
23
+ }, ref) => {
24
+ const [loaderColour, setLoaderColour] = useState(null);
25
+
26
+ // Can't see a simpler way to get the button's text colour, without reading the value
27
+ // via JavaScript.
28
+ // (e.g. the `theme.buttonColours` helper returns a CSS string split into an array -
29
+ // don't really want to be parsing that.)
30
+ // (And can't use inherit because ScaleLoader's color prop is actually setting its
31
+ // background color.)
32
+ const getLoaderColour = useCallback(node => {
33
+ if (node && typeof window.getComputedStyle === 'function') {
34
+ const textColour = window.getComputedStyle(node).color;
35
+ if (textColour) {
36
+ setLoaderColour(textColour);
37
+ }
38
+ }
39
+ }, []);
40
+
41
+ return (
42
+ <ButtonWithDisabledState ref={ref} disabled={disabled} {...rest}>
43
+ {loading ? loadingText : children}
44
+ <LoaderContainer ref={getLoaderColour} withMargin={loading}>
45
+ <ScaleLoader height={16} width={2} loading={loading} color={loaderColour} />
46
+ </LoaderContainer>
47
+ </ButtonWithDisabledState>
48
+ );
49
+ });
50
+
51
+ ButtonWithStates.propTypes = {
52
+ children: PropTypes.node.isRequired,
53
+ loadingText: PropTypes.string,
54
+ loading: PropTypes.bool,
55
+ disabled: PropTypes.bool
56
+ };
57
+
58
+ ButtonWithStates.defaultProps = {
59
+ loading: false,
60
+ disabled: false,
61
+ loadingText: 'Loading'
62
+ };
63
+
64
+ export default ButtonWithStates;
@@ -0,0 +1,13 @@
1
+ ## Disabled and loading
2
+
3
+ ```js
4
+ import ButtonWithStates from './ButtonWithStates';
5
+
6
+ <ButtonWithStates
7
+ type="submit"
8
+ loading
9
+ disabled
10
+ >
11
+ Enter prize draw
12
+ </ButtonWithStates>
13
+ ```