@thecb/components 3.3.5 → 3.3.8-beta.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/index.cjs.js +9848 -11447
- package/package.json +2 -2
- package/src/components/atoms/button-with-link/ButtonWithLink.js +1 -1
- package/src/components/atoms/form-layouts/FormInput.js +0 -1
- package/src/components/atoms/icons/index.js +1 -3
- package/src/components/atoms/index.js +0 -1
- package/src/components/atoms/layouts/Cover.styled.js +1 -0
- package/src/components/atoms/layouts/Imposter.styled.js +1 -0
- package/src/components/atoms/placeholder/Placeholder.js +60 -77
- package/src/components/molecules/email-form/EmailForm.js +14 -1
- package/src/components/molecules/email-form/EmailForm.state.js +9 -1
- package/src/components/molecules/nav-menu/NavMenu.theme.js +1 -3
- package/src/components/molecules/nav-menu/NavMenuDesktop.js +1 -1
- package/src/components/molecules/partial-amount-form/PartialAmountForm.state.js +1 -2
- package/src/components/molecules/radio-section/RadioSection.js +1 -2
- package/src/deprecated/icons/IconAdd.js +44 -0
- package/src/deprecated/icons/index.js +2 -0
- package/.tool-versions +0 -1
- package/src/components/atoms/add-obligation/AddObligation.js +0 -64
- package/src/components/atoms/add-obligation/AddObligation.stories.js +0 -18
- package/src/components/atoms/add-obligation/AddObligation.theme.js +0 -9
- package/src/components/atoms/add-obligation/index.js +0 -3
- package/src/components/atoms/icons/IconAdd.js +0 -36
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thecb/components",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.8-beta.0",
|
|
4
4
|
"description": "Common lib for CityBase react components",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"styled-theming": "^2.2.0"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
|
+
"ramda": "^0.27.0",
|
|
64
65
|
"react": "^16.13.1",
|
|
65
66
|
"react-dom": "^16.13.1",
|
|
66
67
|
"react-router-dom": "6.0.0-alpha.3",
|
|
@@ -73,7 +74,6 @@
|
|
|
73
74
|
}
|
|
74
75
|
},
|
|
75
76
|
"dependencies": {
|
|
76
|
-
"ramda": "^0.27.0",
|
|
77
77
|
"formatted-input": "^0.1.3",
|
|
78
78
|
"framer-motion": "^1.11.0",
|
|
79
79
|
"numeral": "^2.0.6",
|
|
@@ -44,7 +44,7 @@ const ButtonWithLink = ({
|
|
|
44
44
|
url={url}
|
|
45
45
|
disabled={disabled}
|
|
46
46
|
newTab={newTab}
|
|
47
|
-
extraStyles={`text-decoration: none; &:hover {
|
|
47
|
+
extraStyles={`text-decoration: none; ${extraStyles} &:hover {
|
|
48
48
|
text-decoration: none; }`}
|
|
49
49
|
>
|
|
50
50
|
<ButtonWithAction {...otherProps} extraStyles={extraStyles} />
|
|
@@ -135,7 +135,6 @@ const FormInput = ({
|
|
|
135
135
|
color={themeValues.linkColor}
|
|
136
136
|
weight={themeValues.fontWeight}
|
|
137
137
|
hoverStyles={themeValues.hoverFocusStyles}
|
|
138
|
-
focusStyles={themeValues.hoverFocusStyles}
|
|
139
138
|
extraStyles={`cursor: pointer;`}
|
|
140
139
|
onClick={() => setShowPassword(!showPassword)}
|
|
141
140
|
aria-label="Show password"
|
|
@@ -17,7 +17,6 @@ import CheckmarkIcon from "./CheckmarkIcon";
|
|
|
17
17
|
import BankIcon from "./BankIcon";
|
|
18
18
|
import GenericCard from "./GenericCard";
|
|
19
19
|
import PaymentIcon from "./PaymentIcon";
|
|
20
|
-
import IconAdd from "./IconAdd";
|
|
21
20
|
|
|
22
21
|
export {
|
|
23
22
|
AccountsIcon,
|
|
@@ -38,6 +37,5 @@ export {
|
|
|
38
37
|
CheckmarkIcon,
|
|
39
38
|
BankIcon,
|
|
40
39
|
GenericCard,
|
|
41
|
-
PaymentIcon
|
|
42
|
-
IconAdd
|
|
40
|
+
PaymentIcon
|
|
43
41
|
};
|
|
@@ -6,6 +6,7 @@ export const CoverOuterContainer = styled.div`
|
|
|
6
6
|
flex-direction: column;
|
|
7
7
|
min-height: ${({ minHeight }) => minHeight};
|
|
8
8
|
padding: ${({ padding }) => padding};
|
|
9
|
+
min-width: ${({ fillCenter }) => (fillCenter ? "100%" : "auto")};
|
|
9
10
|
|
|
10
11
|
> * {
|
|
11
12
|
margin-top: ${({ childGap }) => childGap};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useContext } from "react";
|
|
2
|
+
import { ThemeContext } from "styled-components";
|
|
2
3
|
import { Link } from "react-router-dom";
|
|
3
4
|
import Text from "../text";
|
|
4
|
-
import { Box, Switcher, Center, Cluster
|
|
5
|
+
import { Box, Switcher, Center, Cluster } from "../layouts";
|
|
5
6
|
import { fallbackValues } from "./Placeholder.theme";
|
|
6
7
|
import { themeComponent } from "../../../util/themeUtils";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
CHARADE_GREY
|
|
11
|
-
} from "../../../constants/colors";
|
|
12
|
-
import { AccountsAddIcon, PropertiesAddIcon, IconAdd } from "../icons";
|
|
8
|
+
import { IconAdd } from "../../../deprecated/icons";
|
|
9
|
+
import { STORM_GREY, GRECIAN_GREY } from "../../../constants/colors";
|
|
10
|
+
import { AccountsAddIcon, PropertiesAddIcon } from "../icons";
|
|
13
11
|
import { FONT_WEIGHT_REGULAR } from "../../../constants/style_constants";
|
|
12
|
+
import withWindowSize from "../../withWindowSize";
|
|
14
13
|
|
|
15
14
|
const PlaceholderContentWrapper = ({
|
|
16
15
|
isLink,
|
|
@@ -41,26 +40,30 @@ const Placeholder = ({
|
|
|
41
40
|
text,
|
|
42
41
|
action,
|
|
43
42
|
visible = true,
|
|
43
|
+
iconID,
|
|
44
44
|
isLink = false,
|
|
45
45
|
destination,
|
|
46
46
|
variant,
|
|
47
47
|
largeIcon,
|
|
48
48
|
themeValues,
|
|
49
49
|
dataQa
|
|
50
|
-
}) =>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
}) => {
|
|
51
|
+
const { isMobile } = useContext(ThemeContext);
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<PlaceholderContentWrapper
|
|
55
|
+
isLink={isLink}
|
|
56
|
+
action={action}
|
|
57
|
+
destination={destination}
|
|
58
|
+
dataQa={dataQa}
|
|
59
|
+
>
|
|
60
|
+
<Box
|
|
61
|
+
padding="0"
|
|
62
|
+
borderRadius="4px"
|
|
63
|
+
border="none"
|
|
64
|
+
minHeight={themeValues.height}
|
|
65
|
+
hiddenStyles={!visible}
|
|
66
|
+
extraStyles={`
|
|
64
67
|
background: linear-gradient(
|
|
65
68
|
to right,
|
|
66
69
|
${STORM_GREY} 40%,
|
|
@@ -75,65 +78,45 @@ const Placeholder = ({
|
|
|
75
78
|
display: flex;
|
|
76
79
|
justify-content: center;
|
|
77
80
|
align-items:center;`}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
fill: ${CHARADE_GREY};
|
|
89
|
-
} .stroke {
|
|
90
|
-
stroke: ${CHARADE_GREY};
|
|
91
|
-
}`}
|
|
92
|
-
>
|
|
93
|
-
{variant === "large" ? (
|
|
94
|
-
<Center intrinsic>
|
|
95
|
-
{largeIcon === "accounts" ? (
|
|
81
|
+
hoverStyles={`background-color: ${GRECIAN_GREY};`}
|
|
82
|
+
>
|
|
83
|
+
<Center maxWidth="300px">
|
|
84
|
+
<Box padding="0px 0px 0px 0px">
|
|
85
|
+
<Cluster justify="center" align="center" minHeight="100%">
|
|
86
|
+
<Switcher maxChildren={2} childGap="0">
|
|
87
|
+
{variant === "large" && <div></div>}
|
|
88
|
+
<Cluster justify="center" align="center" minHeight="100%">
|
|
89
|
+
{variant === "large" ? (
|
|
90
|
+
largeIcon === "accounts" ? (
|
|
96
91
|
<AccountsAddIcon />
|
|
97
92
|
) : (
|
|
98
93
|
<PropertiesAddIcon />
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
</Cluster>
|
|
124
|
-
</Cover>
|
|
125
|
-
)}
|
|
126
|
-
</Box>
|
|
127
|
-
</Switcher>
|
|
128
|
-
</Cluster>
|
|
129
|
-
</Box>
|
|
130
|
-
</Center>
|
|
131
|
-
</Box>
|
|
132
|
-
</PlaceholderContentWrapper>
|
|
133
|
-
);
|
|
134
|
-
|
|
94
|
+
)
|
|
95
|
+
) : (
|
|
96
|
+
<IconAdd iconID={iconID} isMobile={isMobile} />
|
|
97
|
+
)}
|
|
98
|
+
</Cluster>
|
|
99
|
+
<Center intrinsic>
|
|
100
|
+
<Text
|
|
101
|
+
variant="pS"
|
|
102
|
+
color={themeValues.color}
|
|
103
|
+
weight={FONT_WEIGHT_REGULAR}
|
|
104
|
+
textAlign="center"
|
|
105
|
+
extraStyles={variant !== "large" && `padding: 0 0 0 8px;`}
|
|
106
|
+
>
|
|
107
|
+
{text}
|
|
108
|
+
</Text>
|
|
109
|
+
</Center>
|
|
110
|
+
</Switcher>
|
|
111
|
+
</Cluster>
|
|
112
|
+
</Box>
|
|
113
|
+
</Center>
|
|
114
|
+
</Box>
|
|
115
|
+
</PlaceholderContentWrapper>
|
|
116
|
+
);
|
|
117
|
+
};
|
|
135
118
|
export default themeComponent(
|
|
136
|
-
Placeholder,
|
|
119
|
+
withWindowSize(Placeholder),
|
|
137
120
|
"Placeholder",
|
|
138
121
|
fallbackValues,
|
|
139
122
|
"default"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect } from "react";
|
|
2
|
-
import { required, isProbablyEmail } from "redux-freeform";
|
|
2
|
+
import { required, matchesField, isProbablyEmail } from "redux-freeform";
|
|
3
3
|
import {
|
|
4
4
|
FormInput,
|
|
5
5
|
FormContainer,
|
|
@@ -22,6 +22,10 @@ const EmailForm = ({
|
|
|
22
22
|
[required.error]: "Email is required",
|
|
23
23
|
[isProbablyEmail.error]: "Invalid email address"
|
|
24
24
|
};
|
|
25
|
+
const confirmEmailFieldErrorMessages = {
|
|
26
|
+
[matchesField.error]: "Confirm email must match email",
|
|
27
|
+
[required.error]: "Confirm email must match email"
|
|
28
|
+
};
|
|
25
29
|
|
|
26
30
|
return (
|
|
27
31
|
<FormContainer variant={variant} role="form" aria-label="Email">
|
|
@@ -35,6 +39,15 @@ const EmailForm = ({
|
|
|
35
39
|
showErrors={showErrors}
|
|
36
40
|
onKeyDown={e => e.key === "Enter" && handleSubmit(e)}
|
|
37
41
|
/>
|
|
42
|
+
<FormInput
|
|
43
|
+
labelTextWhenNoError="Confirm email"
|
|
44
|
+
errorMessages={confirmEmailFieldErrorMessages}
|
|
45
|
+
type="email"
|
|
46
|
+
field={fields.confirmEmail}
|
|
47
|
+
fieldActions={actions.fields.confirmEmail}
|
|
48
|
+
showErrors={showErrors}
|
|
49
|
+
onKeyDown={e => e.key === "Enter" && handleSubmit(e)}
|
|
50
|
+
/>
|
|
38
51
|
</FormInputColumn>
|
|
39
52
|
</FormContainer>
|
|
40
53
|
);
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createFormState,
|
|
3
|
+
required,
|
|
4
|
+
matchesField,
|
|
5
|
+
isProbablyEmail
|
|
6
|
+
} from "redux-freeform";
|
|
2
7
|
|
|
3
8
|
const formConfig = {
|
|
4
9
|
email: {
|
|
5
10
|
validators: [required(), isProbablyEmail()]
|
|
11
|
+
},
|
|
12
|
+
confirmEmail: {
|
|
13
|
+
validators: [required(), matchesField("email")]
|
|
6
14
|
}
|
|
7
15
|
};
|
|
8
16
|
|
|
@@ -24,7 +24,7 @@ const NavMenuDesktop = ({
|
|
|
24
24
|
extraStyles={`position: relative; ${menuCarat}`}
|
|
25
25
|
background={themeValues.backgroundColor}
|
|
26
26
|
borderRadius="5px"
|
|
27
|
-
boxShadow={`0px 3px 8px 0px ${themeValues.
|
|
27
|
+
boxShadow={`0px 3px 8px 0px ${themeValues.backgroundColor}, 0px 2px 14px 0px ${themeValues.backgroundColor};`}
|
|
28
28
|
onMouseEnter={onMouseEnter}
|
|
29
29
|
onMouseLeave={onMouseLeave}
|
|
30
30
|
onFocus={onFocus}
|
|
@@ -146,9 +146,8 @@ const RadioSection = ({
|
|
|
146
146
|
justify="space-between"
|
|
147
147
|
align="center"
|
|
148
148
|
childGap="0.5rem"
|
|
149
|
-
nowrap
|
|
150
149
|
>
|
|
151
|
-
<Cluster justify="flex-start" align="center"
|
|
150
|
+
<Cluster justify="flex-start" align="center">
|
|
152
151
|
{!section.hideRadioButton && (
|
|
153
152
|
<Box padding="0">
|
|
154
153
|
<RadioButton
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { WHITE, CHARADE_GREY } from "../../constants/colors";
|
|
3
|
+
|
|
4
|
+
export const IconAdd = ({ fill = CHARADE_GREY, iconID, isMobile }) => (
|
|
5
|
+
<svg
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
xmlnsXlink="http://www.w3.org/1999/xlink"
|
|
8
|
+
width="18"
|
|
9
|
+
height="18"
|
|
10
|
+
viewBox={isMobile ? "0 -0.25 20 20" : "-0.5 -0.5 18 18"}
|
|
11
|
+
id={`icon-add-${iconID}`}
|
|
12
|
+
>
|
|
13
|
+
<defs>
|
|
14
|
+
<path
|
|
15
|
+
id="path-1"
|
|
16
|
+
d="M9.91666623 6.78508747L6.78508747 6.78508747 6.78508747 9.91666623 5.74122788 9.91666623 5.74122788 6.78508747 2.60964912 6.78508747 2.60964912 5.74122788 5.74122788 5.74122788 5.74122788 2.60964912 6.78508747 2.60964912 6.78508747 5.74122788 9.91666623 5.74122788z"
|
|
17
|
+
></path>
|
|
18
|
+
</defs>
|
|
19
|
+
<g fill="none" fillRule="evenodd" stroke="none" strokeWidth="1">
|
|
20
|
+
<g transform="translate(-383 -15)">
|
|
21
|
+
<g transform="translate(384 16)">
|
|
22
|
+
<g>
|
|
23
|
+
<g transform="translate(1.94 1.858)">
|
|
24
|
+
<mask id="mask-2" fill={WHITE}>
|
|
25
|
+
<use xlinkHref="#path-1"></use>
|
|
26
|
+
</mask>
|
|
27
|
+
<use fill="#000" fillRule="evenodd" xlinkHref="#path-1"></use>
|
|
28
|
+
<g fill={fill} fillRule="evenodd" mask="url(#mask-2)">
|
|
29
|
+
<path d="M0 0H12.526V12.526H0z"></path>
|
|
30
|
+
</g>
|
|
31
|
+
</g>
|
|
32
|
+
<circle
|
|
33
|
+
cx="8.155"
|
|
34
|
+
cy="8.072"
|
|
35
|
+
r="8"
|
|
36
|
+
stroke={fill}
|
|
37
|
+
strokeWidth="0.644"
|
|
38
|
+
></circle>
|
|
39
|
+
</g>
|
|
40
|
+
</g>
|
|
41
|
+
</g>
|
|
42
|
+
</g>
|
|
43
|
+
</svg>
|
|
44
|
+
);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IconAdd } from "./IconAdd";
|
|
1
2
|
import { IconWarn } from "./IconWarn";
|
|
2
3
|
import { IconCheck } from "./IconCheck";
|
|
3
4
|
import { IconCheckEmail } from "./IconCheckEmail";
|
|
@@ -23,6 +24,7 @@ const AlertIcons = {
|
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
export {
|
|
27
|
+
IconAdd,
|
|
26
28
|
IconWarn,
|
|
27
29
|
IconCheck,
|
|
28
30
|
IconCheckEmail,
|
package/.tool-versions
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
nodejs 10.13.0
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import ButtonWithAction from "../button-with-action";
|
|
3
|
-
import { Box, Center, Cluster, Cover } from "../layouts";
|
|
4
|
-
import { IconAdd } from "../icons";
|
|
5
|
-
import { FONT_WEIGHT_SEMIBOLD } from "../../../constants/style_constants";
|
|
6
|
-
import { fallbackValues } from "./AddObligation.theme";
|
|
7
|
-
import { themeComponent } from "../../../util/themeUtils";
|
|
8
|
-
|
|
9
|
-
const AddObligation = ({
|
|
10
|
-
text,
|
|
11
|
-
action,
|
|
12
|
-
themeValues,
|
|
13
|
-
extraStyles,
|
|
14
|
-
textExtraStyles
|
|
15
|
-
}) => {
|
|
16
|
-
const hoverStyles = `
|
|
17
|
-
&:hover {
|
|
18
|
-
.fill { fill: ${themeValues.hoverColor}; }
|
|
19
|
-
.stroke { stroke: ${themeValues.hoverColor}; }
|
|
20
|
-
button { text-decoration: underline; text-decoration-color: ${themeValues.hoverColor}; }
|
|
21
|
-
span { color: ${themeValues.hoverColor}; }
|
|
22
|
-
}`;
|
|
23
|
-
|
|
24
|
-
const activeStyles = `
|
|
25
|
-
&:active {
|
|
26
|
-
.fill { fill: ${themeValues.activeColor}; }
|
|
27
|
-
.stroke { stroke: ${themeValues.activeColor}; }
|
|
28
|
-
button { text-decoration: underline; text-decoration-color: ${themeValues.activeColor}; }
|
|
29
|
-
span { color: ${themeValues.activeColor}; }
|
|
30
|
-
}`;
|
|
31
|
-
|
|
32
|
-
const defaultStyles = `
|
|
33
|
-
min-height: 0;
|
|
34
|
-
.fill { fill: ${themeValues.color}; }
|
|
35
|
-
.stroke { stroke: ${themeValues.color}; }
|
|
36
|
-
`;
|
|
37
|
-
return (
|
|
38
|
-
<Box
|
|
39
|
-
className="button"
|
|
40
|
-
padding="0.5rem 0"
|
|
41
|
-
hoverStyles={hoverStyles}
|
|
42
|
-
activeStyles={activeStyles}
|
|
43
|
-
extraStyles={defaultStyles}
|
|
44
|
-
onClick={action}
|
|
45
|
-
>
|
|
46
|
-
<Cover singleChild minHeight="100%">
|
|
47
|
-
<Cluster justify="center" align="center" minHeight="100%">
|
|
48
|
-
<IconAdd />
|
|
49
|
-
<Center intrinsic>
|
|
50
|
-
<ButtonWithAction
|
|
51
|
-
action={action}
|
|
52
|
-
text={text}
|
|
53
|
-
variant="smallGhost"
|
|
54
|
-
extraStyles={`min-height: 0; ${extraStyles}`}
|
|
55
|
-
textExtraStyles={`padding: 0 0 0 0.75rem; font-size: 0.875rem; font-weight ${FONT_WEIGHT_SEMIBOLD}; ${textExtraStyles}`}
|
|
56
|
-
/>
|
|
57
|
-
</Center>
|
|
58
|
-
</Cluster>
|
|
59
|
-
</Cover>
|
|
60
|
-
</Box>
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export default themeComponent(AddObligation, "AddObligation", fallbackValues);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { text } from "@storybook/addon-knobs";
|
|
3
|
-
import AddObligation from "./AddObligation";
|
|
4
|
-
import page from "../../../../.storybook/page";
|
|
5
|
-
|
|
6
|
-
export const addObligation = () => (
|
|
7
|
-
<AddObligation
|
|
8
|
-
text={text("text", "Lorem", "props")}
|
|
9
|
-
extraStyles={text("extraStyles", "", "props")}
|
|
10
|
-
textExtraStyles={text("textExtraStyles", "", "props")}
|
|
11
|
-
/>
|
|
12
|
-
);
|
|
13
|
-
|
|
14
|
-
const story = page({
|
|
15
|
-
title: "Components|Atoms/AddObligation",
|
|
16
|
-
Component: AddObligation
|
|
17
|
-
});
|
|
18
|
-
export default story;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
const IconAdd = () => (
|
|
4
|
-
<svg
|
|
5
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
6
|
-
xmlnsXlink="http://www.w3.org/1999/xlink"
|
|
7
|
-
width="18"
|
|
8
|
-
height="18"
|
|
9
|
-
viewBox="0 0 18 18"
|
|
10
|
-
className="icon"
|
|
11
|
-
>
|
|
12
|
-
<defs>
|
|
13
|
-
<path
|
|
14
|
-
id="path-1"
|
|
15
|
-
d="M7.91666623 4.78508747L4.78508747 4.78508747 4.78508747 7.91666623 3.74122788 7.91666623 3.74122788 4.78508747 0.609649123 4.78508747 0.609649123 3.74122788 3.74122788 3.74122788 3.74122788 0.609649123 4.78508747 0.609649123 4.78508747 3.74122788 7.91666623 3.74122788z"
|
|
16
|
-
></path>
|
|
17
|
-
</defs>
|
|
18
|
-
<g fill="none" fillRule="evenodd" stroke="none" strokeWidth="1">
|
|
19
|
-
<g transform="translate(-407 -563)">
|
|
20
|
-
<g transform="translate(408 562)">
|
|
21
|
-
<g transform="translate(0 2)">
|
|
22
|
-
<g transform="translate(3.94 3.858)">
|
|
23
|
-
<mask fill="#fff">
|
|
24
|
-
<use xlinkHref="#path-1"></use>
|
|
25
|
-
</mask>
|
|
26
|
-
<use className="fill" xlinkHref="#path-1"></use>
|
|
27
|
-
</g>
|
|
28
|
-
<circle className="stroke" cx="8.155" cy="8.072" r="8"></circle>
|
|
29
|
-
</g>
|
|
30
|
-
</g>
|
|
31
|
-
</g>
|
|
32
|
-
</g>
|
|
33
|
-
</svg>
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
export default IconAdd;
|