@comicrelief/component-library 8.13.7 → 8.15.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/Checkbox/Checkbox.js +50 -34
- package/dist/components/Atoms/Checkbox/Checkbox.md +10 -1
- package/dist/components/Atoms/Checkbox/Checkbox.test.js +1 -1
- package/dist/components/Molecules/{Logos/Logos.js → LogoLinked/LogoLinked.js} +10 -9
- package/dist/components/Molecules/LogoLinked/LogoLinked.md +11 -0
- package/dist/components/Organisms/Header/Header.js +2 -2
- package/dist/components/Organisms/Header2025/Header2025.js +2 -2
- package/dist/index.js +7 -0
- package/package.json +1 -1
- package/src/components/Atoms/Checkbox/Checkbox.js +47 -25
- package/src/components/Atoms/Checkbox/Checkbox.md +10 -1
- package/src/components/Atoms/Checkbox/Checkbox.test.js +34 -48
- package/src/components/Molecules/{Logos/Logos.js → LogoLinked/LogoLinked.js} +10 -9
- package/src/components/Molecules/LogoLinked/LogoLinked.md +11 -0
- package/src/components/Organisms/Header/Header.js +2 -2
- package/src/components/Organisms/Header2025/Header2025.js +2 -2
- package/src/index.js +1 -0
- package/dist/components/Molecules/Logos/Logos.md +0 -5
- package/src/components/Molecules/Logos/Logos.md +0 -5
|
@@ -10,68 +10,79 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
10
10
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
11
|
var _Text = _interopRequireDefault(require("../Text/Text"));
|
|
12
12
|
var _tick = _interopRequireDefault(require("./assets/tick.svg"));
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
displayName: "Checkbox__StyledCheckboxInput",
|
|
13
|
+
// This label wraps both the input and the span that is the visual square checkbox you see */
|
|
14
|
+
const Label = _styledComponents.default.label.withConfig({
|
|
15
|
+
displayName: "Checkbox__Label",
|
|
17
16
|
componentId: "sc-ngak0-0"
|
|
18
|
-
})(["
|
|
17
|
+
})(["display:flex;", " margin-bottom:8px;", ""], _ref => {
|
|
19
18
|
let {
|
|
20
|
-
|
|
19
|
+
hasLabelAsString
|
|
21
20
|
} = _ref;
|
|
22
|
-
return
|
|
21
|
+
return hasLabelAsString && 'align-items: center;';
|
|
23
22
|
}, _ref2 => {
|
|
24
23
|
let {
|
|
25
|
-
|
|
24
|
+
labelColour
|
|
26
25
|
} = _ref2;
|
|
27
|
-
return
|
|
28
|
-
}
|
|
26
|
+
return labelColour && "color: ".concat(labelColour, ";");
|
|
27
|
+
});
|
|
28
|
+
const StyledCheckboxInput = _styledComponents.default.input.attrs({
|
|
29
|
+
type: 'checkbox'
|
|
30
|
+
}).withConfig({
|
|
31
|
+
displayName: "Checkbox__StyledCheckboxInput",
|
|
32
|
+
componentId: "sc-ngak0-1"
|
|
33
|
+
})(["width:0;height:0;margin:0;+ span{margin-right:12px;width:24px;height:24px;border-radius:4px;background-color:", ";border:1px solid ", ";float:left;flex-shrink:0;}:checked + span{background:url(", ") no-repeat center;background-size:contain;background-color:", ";border:1px solid ", ";}:focus + span{border:1px solid ", ";}"], _ref3 => {
|
|
29
34
|
let {
|
|
30
|
-
theme
|
|
35
|
+
theme,
|
|
36
|
+
checkboxBg
|
|
31
37
|
} = _ref3;
|
|
32
|
-
return theme.color('white');
|
|
38
|
+
return checkboxBg ? theme.color(checkboxBg) : theme.color('white');
|
|
33
39
|
}, _ref4 => {
|
|
34
40
|
let {
|
|
35
|
-
theme
|
|
41
|
+
theme,
|
|
42
|
+
checkboxBorder
|
|
36
43
|
} = _ref4;
|
|
37
|
-
return theme.color('grey');
|
|
44
|
+
return checkboxBorder ? theme.color(checkboxBorder) : theme.color('grey');
|
|
38
45
|
}, _tick.default, _ref5 => {
|
|
39
46
|
let {
|
|
40
|
-
theme
|
|
47
|
+
theme,
|
|
48
|
+
checkboxBgChecked
|
|
41
49
|
} = _ref5;
|
|
42
|
-
return theme.color('red');
|
|
50
|
+
return checkboxBgChecked ? theme.color(checkboxBgChecked) : theme.color('red');
|
|
43
51
|
}, _ref6 => {
|
|
44
52
|
let {
|
|
45
|
-
theme
|
|
53
|
+
theme,
|
|
54
|
+
checkboxBorderChecked
|
|
46
55
|
} = _ref6;
|
|
47
|
-
return theme.color('red');
|
|
56
|
+
return checkboxBorderChecked ? theme.color(checkboxBorderChecked) : theme.color('red');
|
|
48
57
|
}, _ref7 => {
|
|
49
58
|
let {
|
|
50
|
-
theme
|
|
59
|
+
theme,
|
|
60
|
+
checkboxBorderChecked
|
|
51
61
|
} = _ref7;
|
|
52
|
-
return theme.color('red');
|
|
62
|
+
return checkboxBorderChecked ? theme.color(checkboxBorderChecked) : theme.color('red');
|
|
53
63
|
});
|
|
54
|
-
const
|
|
55
|
-
displayName: "Checkbox__Label",
|
|
56
|
-
componentId: "sc-ngak0-1"
|
|
57
|
-
})(["display:flex;", " margin-bottom:8px;"], _ref8 => {
|
|
58
|
-
let {
|
|
59
|
-
hasLabelAsString
|
|
60
|
-
} = _ref8;
|
|
61
|
-
return hasLabelAsString && 'align-items: center;';
|
|
62
|
-
});
|
|
63
|
-
const Checkbox = /*#__PURE__*/_react.default.forwardRef((_ref9, ref) => {
|
|
64
|
+
const Checkbox = /*#__PURE__*/_react.default.forwardRef((_ref8, ref) => {
|
|
64
65
|
let {
|
|
65
66
|
label = undefined,
|
|
66
67
|
value,
|
|
67
68
|
children = undefined,
|
|
69
|
+
labelColour,
|
|
70
|
+
checkboxBg,
|
|
71
|
+
checkboxBorder,
|
|
72
|
+
checkboxBgChecked,
|
|
73
|
+
checkboxBorderChecked,
|
|
68
74
|
...rest
|
|
69
|
-
} =
|
|
75
|
+
} = _ref8;
|
|
70
76
|
return /*#__PURE__*/_react.default.createElement(Label, {
|
|
71
|
-
hasLabelAsString: !!label
|
|
77
|
+
hasLabelAsString: !!label,
|
|
78
|
+
labelColour: labelColour
|
|
72
79
|
}, /*#__PURE__*/_react.default.createElement(StyledCheckboxInput, Object.assign({}, rest, {
|
|
73
80
|
value: value,
|
|
74
|
-
ref: ref
|
|
81
|
+
ref: ref,
|
|
82
|
+
checkboxBg: checkboxBg,
|
|
83
|
+
checkboxBorder: checkboxBorder,
|
|
84
|
+
checkboxBgChecked: checkboxBgChecked,
|
|
85
|
+
checkboxBorderChecked: checkboxBorderChecked
|
|
75
86
|
})), /*#__PURE__*/_react.default.createElement("span", null), label ? /*#__PURE__*/_react.default.createElement(_Text.default, {
|
|
76
87
|
weight: "bold"
|
|
77
88
|
}, label) : children);
|
|
@@ -79,7 +90,12 @@ const Checkbox = /*#__PURE__*/_react.default.forwardRef((_ref9, ref) => {
|
|
|
79
90
|
Checkbox.propTypes = {
|
|
80
91
|
name: _propTypes.default.string.isRequired,
|
|
81
92
|
value: _propTypes.default.string.isRequired,
|
|
93
|
+
children: _propTypes.default.node,
|
|
82
94
|
label: _propTypes.default.string,
|
|
83
|
-
|
|
95
|
+
labelColour: _propTypes.default.string,
|
|
96
|
+
checkboxBg: _propTypes.default.string,
|
|
97
|
+
checkboxBorder: _propTypes.default.string,
|
|
98
|
+
checkboxBgChecked: _propTypes.default.string,
|
|
99
|
+
checkboxBorderChecked: _propTypes.default.string
|
|
84
100
|
};
|
|
85
101
|
var _default = exports.default = Checkbox;
|
|
@@ -27,7 +27,16 @@ const LongLabel = () => (
|
|
|
27
27
|
<Checkbox name="sport" value="Tennis" label="Tennis" />
|
|
28
28
|
<Checkbox name="sport" value="Basketball" label="Basketball" />
|
|
29
29
|
<Checkbox name="sport" value="Cycling" label="Cycling" />
|
|
30
|
-
<Checkbox
|
|
30
|
+
<Checkbox
|
|
31
|
+
name="sport"
|
|
32
|
+
value="Football"
|
|
33
|
+
label="Tennis (with wacky styling to test props)"
|
|
34
|
+
labelColour="pink"
|
|
35
|
+
checkboxBg="red"
|
|
36
|
+
checkboxBorder="blue"
|
|
37
|
+
checkboxBgChecked="green"
|
|
38
|
+
checkboxBorderChecked="red"
|
|
39
|
+
/>
|
|
31
40
|
<br/>
|
|
32
41
|
<p>A checkbox with a long label containing links</p>
|
|
33
42
|
<Checkbox name="node_label" value="node_label">
|
|
@@ -15,5 +15,5 @@ it('renders correctly', () => {
|
|
|
15
15
|
value: "Handball",
|
|
16
16
|
label: "Handball"
|
|
17
17
|
}))).toJSON();
|
|
18
|
-
expect(tree).toMatchInlineSnapshot("\n Array [\n .c2 {\n font-size: 1rem;\n line-height: 1rem;\n text-transform: inherit;\n font-weight: bold;\n line-height: normal;\n font-family: 'Montserrat',Helvetica,Arial,sans-serif;\n }\n\n .
|
|
18
|
+
expect(tree).toMatchInlineSnapshot("\n Array [\n .c2 {\n font-size: 1rem;\n line-height: 1rem;\n text-transform: inherit;\n font-weight: bold;\n line-height: normal;\n font-family: 'Montserrat',Helvetica,Arial,sans-serif;\n }\n\n .c0 {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-align-items: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .c1 {\n width: 0;\n height: 0;\n margin: 0;\n }\n\n .c1 + span {\n margin-right: 12px;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background-color: #FFFFFF;\n border: 1px solid #969598;\n float: left;\n -webkit-flex-shrink: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n }\n\n .c1:checked + span {\n background: url(mock.asset) no-repeat center;\n background-size: contain;\n background-color: #E52630;\n border: 1px solid #E52630;\n }\n\n .c1:focus + span {\n border: 1px solid #E52630;\n }\n\n <label\n className=\"c0\"\n >\n <input\n className=\"c1\"\n name=\"sport\"\n type=\"checkbox\"\n value=\"Tenis\"\n />\n <span />\n <span\n className=\"c2\"\n color=\"inherit\"\n size=\"s\"\n >\n Tenis\n </span>\n </label>,\n .c2 {\n font-size: 1rem;\n line-height: 1rem;\n text-transform: inherit;\n font-weight: bold;\n line-height: normal;\n font-family: 'Montserrat',Helvetica,Arial,sans-serif;\n }\n\n .c0 {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-align-items: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .c1 {\n width: 0;\n height: 0;\n margin: 0;\n }\n\n .c1 + span {\n margin-right: 12px;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background-color: #FFFFFF;\n border: 1px solid #969598;\n float: left;\n -webkit-flex-shrink: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n }\n\n .c1:checked + span {\n background: url(mock.asset) no-repeat center;\n background-size: contain;\n background-color: #E52630;\n border: 1px solid #E52630;\n }\n\n .c1:focus + span {\n border: 1px solid #E52630;\n }\n\n <label\n className=\"c0\"\n >\n <input\n className=\"c1\"\n name=\"sport\"\n type=\"checkbox\"\n value=\"Handball\"\n />\n <span />\n <span\n className=\"c2\"\n color=\"inherit\"\n size=\"s\"\n >\n Handball\n </span>\n </label>,\n ]\n ");
|
|
19
19
|
});
|
|
@@ -10,21 +10,22 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
10
10
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
11
11
|
var _Logo = _interopRequireDefault(require("../../Atoms/Logo/Logo"));
|
|
12
12
|
const TitleLabel = _styledComponents.default.span.withConfig({
|
|
13
|
-
displayName: "
|
|
14
|
-
componentId: "sc-
|
|
13
|
+
displayName: "LogoLinked__TitleLabel",
|
|
14
|
+
componentId: "sc-1l32h77-0"
|
|
15
15
|
})(["line-height:0;font-size:0;color:transparent;"]);
|
|
16
16
|
const LogoLink = _styledComponents.default.a.withConfig({
|
|
17
|
-
displayName: "
|
|
18
|
-
componentId: "sc-
|
|
17
|
+
displayName: "LogoLinked__LogoLink",
|
|
18
|
+
componentId: "sc-1l32h77-1"
|
|
19
19
|
})(["", ""], _ref => {
|
|
20
20
|
let {
|
|
21
21
|
animateRotate
|
|
22
22
|
} = _ref;
|
|
23
23
|
return animateRotate && (0, _styledComponents.css)(["img{transition:transform 0.35s cubic-bezier(0.41,1.64,0.41,0.8);}&:hover,&:focus{img{transform:rotate(-14deg);}}"]);
|
|
24
24
|
});
|
|
25
|
-
const
|
|
25
|
+
const LogoLinked = _ref2 => {
|
|
26
26
|
let {
|
|
27
27
|
campaign = 'Comic Relief',
|
|
28
|
+
title = 'Go to Comic Relief homepage',
|
|
28
29
|
animateRotate = false,
|
|
29
30
|
sizeSm,
|
|
30
31
|
sizeMd
|
|
@@ -77,14 +78,14 @@ const Logos = _ref2 => {
|
|
|
77
78
|
}
|
|
78
79
|
return /*#__PURE__*/_react.default.createElement(LogoLink, {
|
|
79
80
|
href: "/",
|
|
80
|
-
title:
|
|
81
|
+
title: title,
|
|
81
82
|
animateRotate: animateRotate
|
|
82
83
|
}, /*#__PURE__*/_react.default.createElement(_Logo.default, {
|
|
83
84
|
rotate: false,
|
|
84
85
|
campaign: "Comic Relief",
|
|
85
|
-
title:
|
|
86
|
+
title: title,
|
|
86
87
|
sizeSm: sizeSm,
|
|
87
88
|
sizeMd: sizeMd
|
|
88
|
-
}), /*#__PURE__*/_react.default.createElement(TitleLabel, null,
|
|
89
|
+
}), /*#__PURE__*/_react.default.createElement(TitleLabel, null, title));
|
|
89
90
|
};
|
|
90
|
-
var _default = exports.default =
|
|
91
|
+
var _default = exports.default = LogoLinked;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Comic Relief Logo without animation
|
|
2
|
+
|
|
3
|
+
```js
|
|
4
|
+
<LogoLinked sizeSm="50px" sizeMd="60px" />
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
# Comic Relief Logo with hover animation and custom hovertext
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
<LogoLinked animateRotate sizeSm="50px" title="I'm a custom title" sizeMd="60px" />
|
|
11
|
+
```
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var
|
|
9
|
+
var _LogoLinked = _interopRequireDefault(require("../../Molecules/LogoLinked/LogoLinked"));
|
|
10
10
|
var _Nav = _interopRequireDefault(require("./Nav/Nav"));
|
|
11
11
|
var _Header = require("./Header.style");
|
|
12
12
|
const Header = _ref => {
|
|
@@ -18,7 +18,7 @@ const Header = _ref => {
|
|
|
18
18
|
} = _ref;
|
|
19
19
|
return /*#__PURE__*/_react.default.createElement(_Header.HeaderWrapper, Object.assign({
|
|
20
20
|
navItems: true
|
|
21
|
-
}, rest), /*#__PURE__*/_react.default.createElement(_Header.InnerWrapper, null, /*#__PURE__*/_react.default.createElement(_Header.Brand, null, /*#__PURE__*/_react.default.createElement(
|
|
21
|
+
}, rest), /*#__PURE__*/_react.default.createElement(_Header.InnerWrapper, null, /*#__PURE__*/_react.default.createElement(_Header.Brand, null, /*#__PURE__*/_react.default.createElement(_LogoLinked.default, {
|
|
22
22
|
campaign: campaign
|
|
23
23
|
})), /*#__PURE__*/_react.default.createElement(_Nav.default, {
|
|
24
24
|
navItems: navItems
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var
|
|
9
|
+
var _LogoLinked = _interopRequireDefault(require("../../Molecules/LogoLinked/LogoLinked"));
|
|
10
10
|
var _HeaderNav = _interopRequireDefault(require("./HeaderNav2025/HeaderNav2025"));
|
|
11
11
|
var _Header = require("./Header2025.style");
|
|
12
12
|
const Header2025 = _ref => {
|
|
@@ -22,7 +22,7 @@ const Header2025 = _ref => {
|
|
|
22
22
|
return /*#__PURE__*/_react.default.createElement(_Header.Header2025Wrapper, Object.assign({
|
|
23
23
|
navItems: true,
|
|
24
24
|
showBoxShadow: showBoxShadow
|
|
25
|
-
}, rest), /*#__PURE__*/_react.default.createElement(_Header.InnerWrapper, null, /*#__PURE__*/_react.default.createElement(_Header.Brand, null, /*#__PURE__*/_react.default.createElement(
|
|
25
|
+
}, rest), /*#__PURE__*/_react.default.createElement(_Header.InnerWrapper, null, /*#__PURE__*/_react.default.createElement(_Header.Brand, null, /*#__PURE__*/_react.default.createElement(_LogoLinked.default, {
|
|
26
26
|
campaign: campaign,
|
|
27
27
|
sizeSm: "50px",
|
|
28
28
|
sizeMd: "55px",
|
package/dist/index.js
CHANGED
|
@@ -196,6 +196,12 @@ Object.defineProperty(exports, "Logo", {
|
|
|
196
196
|
return _Logo.default;
|
|
197
197
|
}
|
|
198
198
|
});
|
|
199
|
+
Object.defineProperty(exports, "LogoLinked", {
|
|
200
|
+
enumerable: true,
|
|
201
|
+
get: function () {
|
|
202
|
+
return _LogoLinked.default;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
199
205
|
Object.defineProperty(exports, "Lookup", {
|
|
200
206
|
enumerable: true,
|
|
201
207
|
get: function () {
|
|
@@ -476,6 +482,7 @@ var _Chip = _interopRequireDefault(require("./components/Molecules/Chip/Chip"));
|
|
|
476
482
|
var _Descriptor = _interopRequireDefault(require("./components/Molecules/Descriptor/Descriptor"));
|
|
477
483
|
var _Lookup = _interopRequireDefault(require("./components/Molecules/Lookup/Lookup"));
|
|
478
484
|
var _SimpleSchoolLookup = _interopRequireDefault(require("./components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup"));
|
|
485
|
+
var _LogoLinked = _interopRequireDefault(require("./components/Molecules/LogoLinked/LogoLinked"));
|
|
479
486
|
var _EmailSignUp = require("./components/Organisms/EmailSignUp/_EmailSignUp");
|
|
480
487
|
var _CookieBanner = _interopRequireDefault(require("./components/Organisms/CookieBanner/CookieBanner"));
|
|
481
488
|
var _Membership = _interopRequireDefault(require("./components/Organisms/Membership/Membership"));
|
package/package.json
CHANGED
|
@@ -5,50 +5,67 @@ import styled from 'styled-components';
|
|
|
5
5
|
import Text from '../Text/Text';
|
|
6
6
|
import checkBoxIcon from './assets/tick.svg';
|
|
7
7
|
|
|
8
|
+
// This label wraps both the input and the span that is the visual square checkbox you see */
|
|
9
|
+
const Label = styled.label`
|
|
10
|
+
display: flex;
|
|
11
|
+
${({ hasLabelAsString }) => hasLabelAsString && 'align-items: center;'}
|
|
12
|
+
margin-bottom: 8px;
|
|
13
|
+
${({ labelColour }) => labelColour && `color: ${labelColour};`}
|
|
14
|
+
`;
|
|
15
|
+
|
|
8
16
|
const StyledCheckboxInput = styled.input.attrs({ type: 'checkbox' })`
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
opacity: 0;
|
|
13
|
-
position: absolute;
|
|
14
|
-
left: 0px;
|
|
15
|
-
width: 24px;
|
|
16
|
-
height: 24px;
|
|
17
|
+
/* This input is not visible */
|
|
18
|
+
width: 0;
|
|
19
|
+
height: 0;
|
|
17
20
|
margin: 0;
|
|
18
|
-
|
|
21
|
+
/* This span is actually the visual square Checkbox you see */
|
|
19
22
|
+ span {
|
|
20
23
|
margin-right: 12px;
|
|
21
24
|
width: 24px;
|
|
22
25
|
height: 24px;
|
|
23
26
|
border-radius: 4px;
|
|
24
|
-
background-color: ${({ theme }) => theme.color('white')};
|
|
25
|
-
border: 1px solid ${({ theme }) => theme.color('grey')};
|
|
27
|
+
background-color: ${({ theme, checkboxBg }) => (checkboxBg ? theme.color(checkboxBg) : theme.color('white'))};
|
|
28
|
+
border: 1px solid ${({ theme, checkboxBorder }) => (checkboxBorder ? theme.color(checkboxBorder) : theme.color('grey'))};
|
|
26
29
|
float: left;
|
|
27
30
|
flex-shrink: 0;
|
|
28
31
|
}
|
|
32
|
+
/* Visual checkbox when ticked */
|
|
29
33
|
:checked + span {
|
|
30
34
|
background: url(${checkBoxIcon}) no-repeat center;
|
|
31
|
-
background-color: ${({ theme }) => theme.color('red')};
|
|
32
|
-
border-color: ${({ theme }) => theme.color('red')};
|
|
33
35
|
background-size: contain;
|
|
36
|
+
background-color: ${({ theme, checkboxBgChecked }) => (checkboxBgChecked ? theme.color(checkboxBgChecked) : theme.color('red'))};
|
|
37
|
+
border: 1px solid ${({ theme, checkboxBorderChecked }) => (checkboxBorderChecked ? theme.color(checkboxBorderChecked) : theme.color('red'))};
|
|
34
38
|
}
|
|
39
|
+
/* Visual checkbox when focused */
|
|
35
40
|
:focus + span {
|
|
36
|
-
border
|
|
37
|
-
border-width: 1px;
|
|
41
|
+
border: 1px solid ${({ theme, checkboxBorderChecked }) => (checkboxBorderChecked ? theme.color(checkboxBorderChecked) : theme.color('red'))};
|
|
38
42
|
}
|
|
39
43
|
`;
|
|
40
44
|
|
|
41
|
-
const Label = styled.label`
|
|
42
|
-
display: flex;
|
|
43
|
-
${({ hasLabelAsString }) => hasLabelAsString && 'align-items: center;'}
|
|
44
|
-
margin-bottom: 8px;
|
|
45
|
-
`;
|
|
46
|
-
|
|
47
45
|
const Checkbox = React.forwardRef(({
|
|
48
|
-
label = undefined,
|
|
46
|
+
label = undefined,
|
|
47
|
+
value,
|
|
48
|
+
children = undefined,
|
|
49
|
+
labelColour,
|
|
50
|
+
checkboxBg,
|
|
51
|
+
checkboxBorder,
|
|
52
|
+
checkboxBgChecked,
|
|
53
|
+
checkboxBorderChecked,
|
|
54
|
+
...rest
|
|
49
55
|
}, ref) => (
|
|
50
|
-
<Label
|
|
51
|
-
|
|
56
|
+
<Label
|
|
57
|
+
hasLabelAsString={!!label}
|
|
58
|
+
labelColour={labelColour}
|
|
59
|
+
>
|
|
60
|
+
<StyledCheckboxInput
|
|
61
|
+
{...rest}
|
|
62
|
+
value={value}
|
|
63
|
+
ref={ref}
|
|
64
|
+
checkboxBg={checkboxBg}
|
|
65
|
+
checkboxBorder={checkboxBorder}
|
|
66
|
+
checkboxBgChecked={checkboxBgChecked}
|
|
67
|
+
checkboxBorderChecked={checkboxBorderChecked}
|
|
68
|
+
/>
|
|
52
69
|
<span />
|
|
53
70
|
{label ? <Text weight="bold">{label}</Text> : children}
|
|
54
71
|
</Label>
|
|
@@ -57,8 +74,13 @@ const Checkbox = React.forwardRef(({
|
|
|
57
74
|
Checkbox.propTypes = {
|
|
58
75
|
name: PropTypes.string.isRequired,
|
|
59
76
|
value: PropTypes.string.isRequired,
|
|
77
|
+
children: PropTypes.node,
|
|
60
78
|
label: PropTypes.string,
|
|
61
|
-
|
|
79
|
+
labelColour: PropTypes.string,
|
|
80
|
+
checkboxBg: PropTypes.string,
|
|
81
|
+
checkboxBorder: PropTypes.string,
|
|
82
|
+
checkboxBgChecked: PropTypes.string,
|
|
83
|
+
checkboxBorderChecked: PropTypes.string
|
|
62
84
|
};
|
|
63
85
|
|
|
64
86
|
export default Checkbox;
|
|
@@ -27,7 +27,16 @@ const LongLabel = () => (
|
|
|
27
27
|
<Checkbox name="sport" value="Tennis" label="Tennis" />
|
|
28
28
|
<Checkbox name="sport" value="Basketball" label="Basketball" />
|
|
29
29
|
<Checkbox name="sport" value="Cycling" label="Cycling" />
|
|
30
|
-
<Checkbox
|
|
30
|
+
<Checkbox
|
|
31
|
+
name="sport"
|
|
32
|
+
value="Football"
|
|
33
|
+
label="Tennis (with wacky styling to test props)"
|
|
34
|
+
labelColour="pink"
|
|
35
|
+
checkboxBg="red"
|
|
36
|
+
checkboxBorder="blue"
|
|
37
|
+
checkboxBgChecked="green"
|
|
38
|
+
checkboxBorderChecked="red"
|
|
39
|
+
/>
|
|
31
40
|
<br/>
|
|
32
41
|
<p>A checkbox with a long label containing links</p>
|
|
33
42
|
<Checkbox name="node_label" value="node_label">
|
|
@@ -22,16 +22,22 @@ it('renders correctly', () => {
|
|
|
22
22
|
font-family: 'Montserrat',Helvetica,Arial,sans-serif;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
.c0 {
|
|
26
|
+
display: -webkit-box;
|
|
27
|
+
display: -webkit-flex;
|
|
28
|
+
display: -ms-flexbox;
|
|
29
|
+
display: flex;
|
|
30
|
+
-webkit-align-items: center;
|
|
31
|
+
-webkit-box-align: center;
|
|
32
|
+
-ms-flex-align: center;
|
|
33
|
+
align-items: center;
|
|
34
|
+
margin-bottom: 8px;
|
|
35
|
+
}
|
|
36
|
+
|
|
25
37
|
.c1 {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
opacity: 0;
|
|
29
|
-
position: absolute;
|
|
30
|
-
left: 0px;
|
|
31
|
-
width: 24px;
|
|
32
|
-
height: 24px;
|
|
38
|
+
width: 0;
|
|
39
|
+
height: 0;
|
|
33
40
|
margin: 0;
|
|
34
|
-
border: 1px solid #969598;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
.c1 + span {
|
|
@@ -49,26 +55,13 @@ it('renders correctly', () => {
|
|
|
49
55
|
|
|
50
56
|
.c1:checked + span {
|
|
51
57
|
background: url(mock.asset) no-repeat center;
|
|
52
|
-
background-color: #E52630;
|
|
53
|
-
border-color: #E52630;
|
|
54
58
|
background-size: contain;
|
|
59
|
+
background-color: #E52630;
|
|
60
|
+
border: 1px solid #E52630;
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
.c1:focus + span {
|
|
58
|
-
border
|
|
59
|
-
border-width: 1px;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.c0 {
|
|
63
|
-
display: -webkit-box;
|
|
64
|
-
display: -webkit-flex;
|
|
65
|
-
display: -ms-flexbox;
|
|
66
|
-
display: flex;
|
|
67
|
-
-webkit-align-items: center;
|
|
68
|
-
-webkit-box-align: center;
|
|
69
|
-
-ms-flex-align: center;
|
|
70
|
-
align-items: center;
|
|
71
|
-
margin-bottom: 8px;
|
|
64
|
+
border: 1px solid #E52630;
|
|
72
65
|
}
|
|
73
66
|
|
|
74
67
|
<label
|
|
@@ -98,16 +91,22 @@ it('renders correctly', () => {
|
|
|
98
91
|
font-family: 'Montserrat',Helvetica,Arial,sans-serif;
|
|
99
92
|
}
|
|
100
93
|
|
|
94
|
+
.c0 {
|
|
95
|
+
display: -webkit-box;
|
|
96
|
+
display: -webkit-flex;
|
|
97
|
+
display: -ms-flexbox;
|
|
98
|
+
display: flex;
|
|
99
|
+
-webkit-align-items: center;
|
|
100
|
+
-webkit-box-align: center;
|
|
101
|
+
-ms-flex-align: center;
|
|
102
|
+
align-items: center;
|
|
103
|
+
margin-bottom: 8px;
|
|
104
|
+
}
|
|
105
|
+
|
|
101
106
|
.c1 {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
opacity: 0;
|
|
105
|
-
position: absolute;
|
|
106
|
-
left: 0px;
|
|
107
|
-
width: 24px;
|
|
108
|
-
height: 24px;
|
|
107
|
+
width: 0;
|
|
108
|
+
height: 0;
|
|
109
109
|
margin: 0;
|
|
110
|
-
border: 1px solid #969598;
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
.c1 + span {
|
|
@@ -125,26 +124,13 @@ it('renders correctly', () => {
|
|
|
125
124
|
|
|
126
125
|
.c1:checked + span {
|
|
127
126
|
background: url(mock.asset) no-repeat center;
|
|
128
|
-
background-color: #E52630;
|
|
129
|
-
border-color: #E52630;
|
|
130
127
|
background-size: contain;
|
|
128
|
+
background-color: #E52630;
|
|
129
|
+
border: 1px solid #E52630;
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
.c1:focus + span {
|
|
134
|
-
border
|
|
135
|
-
border-width: 1px;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.c0 {
|
|
139
|
-
display: -webkit-box;
|
|
140
|
-
display: -webkit-flex;
|
|
141
|
-
display: -ms-flexbox;
|
|
142
|
-
display: flex;
|
|
143
|
-
-webkit-align-items: center;
|
|
144
|
-
-webkit-box-align: center;
|
|
145
|
-
-ms-flex-align: center;
|
|
146
|
-
align-items: center;
|
|
147
|
-
margin-bottom: 8px;
|
|
133
|
+
border: 1px solid #E52630;
|
|
148
134
|
}
|
|
149
135
|
|
|
150
136
|
<label
|
|
@@ -5,9 +5,9 @@ import styled, { css } from 'styled-components';
|
|
|
5
5
|
import Logo from '../../Atoms/Logo/Logo';
|
|
6
6
|
|
|
7
7
|
const TitleLabel = styled.span`
|
|
8
|
-
line-height: 0;
|
|
8
|
+
line-height: 0;
|
|
9
9
|
font-size: 0;
|
|
10
|
-
color: transparent;
|
|
10
|
+
color: transparent;
|
|
11
11
|
`;
|
|
12
12
|
|
|
13
13
|
const LogoLink = styled.a`
|
|
@@ -25,8 +25,8 @@ const LogoLink = styled.a`
|
|
|
25
25
|
`}
|
|
26
26
|
`;
|
|
27
27
|
|
|
28
|
-
const
|
|
29
|
-
campaign = 'Comic Relief', animateRotate = false, sizeSm, sizeMd
|
|
28
|
+
const LogoLinked = ({
|
|
29
|
+
campaign = 'Comic Relief', title = 'Go to Comic Relief homepage', animateRotate = false, sizeSm, sizeMd
|
|
30
30
|
}) => {
|
|
31
31
|
if (campaign === 'Sport Relief Gameon') {
|
|
32
32
|
return (
|
|
@@ -62,18 +62,19 @@ const Logos = ({
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
return (
|
|
65
|
-
<LogoLink href="/" title=
|
|
66
|
-
<Logo rotate={false} campaign="Comic Relief" title=
|
|
67
|
-
<TitleLabel>
|
|
65
|
+
<LogoLink href="/" title={title} animateRotate={animateRotate}>
|
|
66
|
+
<Logo rotate={false} campaign="Comic Relief" title={title} sizeSm={sizeSm} sizeMd={sizeMd} />
|
|
67
|
+
<TitleLabel>{title}</TitleLabel>
|
|
68
68
|
</LogoLink>
|
|
69
69
|
);
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
LogoLinked.propTypes = {
|
|
73
73
|
campaign: PropTypes.string,
|
|
74
74
|
animateRotate: PropTypes.bool,
|
|
75
|
+
title: PropTypes.string,
|
|
75
76
|
sizeSm: PropTypes.string,
|
|
76
77
|
sizeMd: PropTypes.string
|
|
77
78
|
};
|
|
78
79
|
|
|
79
|
-
export default
|
|
80
|
+
export default LogoLinked;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Comic Relief Logo without animation
|
|
2
|
+
|
|
3
|
+
```js
|
|
4
|
+
<LogoLinked sizeSm="50px" sizeMd="60px" />
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
# Comic Relief Logo with hover animation and custom hovertext
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
<LogoLinked animateRotate sizeSm="50px" title="I'm a custom title" sizeMd="60px" />
|
|
11
|
+
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import LogoLinked from '../../Molecules/LogoLinked/LogoLinked';
|
|
5
5
|
import MainNav from './Nav/Nav';
|
|
6
6
|
import {
|
|
7
7
|
Brand, HeaderWrapper, InnerWrapper, MetaIcons
|
|
@@ -13,7 +13,7 @@ const Header = ({
|
|
|
13
13
|
<HeaderWrapper navItems {...rest}>
|
|
14
14
|
<InnerWrapper>
|
|
15
15
|
<Brand>
|
|
16
|
-
<
|
|
16
|
+
<LogoLinked campaign={campaign} />
|
|
17
17
|
</Brand>
|
|
18
18
|
<MainNav navItems={navItems} />
|
|
19
19
|
<MetaIcons>{metaIcons}</MetaIcons>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import LogoLinked from '../../Molecules/LogoLinked/LogoLinked';
|
|
5
5
|
import HeaderNav2025 from './HeaderNav2025/HeaderNav2025';
|
|
6
6
|
import {
|
|
7
7
|
Brand, Header2025Wrapper, InnerWrapper,
|
|
@@ -15,7 +15,7 @@ const Header2025 = ({
|
|
|
15
15
|
<Header2025Wrapper navItems showBoxShadow={showBoxShadow} {...rest}>
|
|
16
16
|
<InnerWrapper>
|
|
17
17
|
<Brand>
|
|
18
|
-
<
|
|
18
|
+
<LogoLinked
|
|
19
19
|
campaign={campaign}
|
|
20
20
|
sizeSm="50px"
|
|
21
21
|
sizeMd="55px"
|
package/src/index.js
CHANGED
|
@@ -63,6 +63,7 @@ export { default as Chip } from './components/Molecules/Chip/Chip';
|
|
|
63
63
|
export { default as Descriptor } from './components/Molecules/Descriptor/Descriptor';
|
|
64
64
|
export { default as Lookup } from './components/Molecules/Lookup/Lookup';
|
|
65
65
|
export { default as SimpleSchoolLookup } from './components/Molecules/SimpleSchoolLookup/SimpleSchoolLookup';
|
|
66
|
+
export { default as LogoLinked } from './components/Molecules/LogoLinked/LogoLinked';
|
|
66
67
|
|
|
67
68
|
/* Organisms */
|
|
68
69
|
export {
|