@stackshift-ui/signin-signup 6.0.3 → 6.0.5-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.
@@ -0,0 +1,298 @@
1
+ import { Button } from "@stackshift-ui/button";
2
+ import { Container } from "@stackshift-ui/container";
3
+ import { Flex } from "@stackshift-ui/flex";
4
+ import { Form } from "@stackshift-ui/form";
5
+ import { FormField } from "@stackshift-ui/form-field";
6
+ import { Heading } from "@stackshift-ui/heading";
7
+ import { Image } from "@stackshift-ui/image";
8
+ import { Input } from "@stackshift-ui/input";
9
+ import { Link } from "@stackshift-ui/link";
10
+ import { Section } from "@stackshift-ui/section";
11
+ import { Text } from "@stackshift-ui/text";
12
+ import React from "react";
13
+
14
+ import { SignUpFormProps } from ".";
15
+ import { logoLink, thankYouPageLink } from "./helper";
16
+ import { LabeledRoute, LabeledRouteWithKey, Logo, Form as iForm } from "./types";
17
+
18
+ export default function SigninSignup_A({ logo, form, formLinks, signInLink }: SignUpFormProps) {
19
+ return (
20
+ <Section className="py-10 rounded-md bg-gray-50 lg:py-20">
21
+ <Container maxWidth={576}>
22
+ <LogoSection logo={logo} />
23
+ <Container className="mb-6 text-center lg:mb-10">
24
+ <SubtitleAndHeadingText form={form} />
25
+ <SignupForm
26
+ form={form}
27
+ signInLink={signInLink}
28
+ thankYouPage={thankYouPageLink(form?.thankYouPage)}
29
+ />
30
+ </Container>
31
+ <FormLinks formLinks={formLinks} />
32
+ </Container>
33
+ </Section>
34
+ );
35
+ }
36
+
37
+ function LogoSection({ logo }: { logo?: Logo }) {
38
+ if (!logo) return null;
39
+
40
+ return (
41
+ <div className="mb-10">
42
+ <Link
43
+ aria-label={`Go to ${logoLink(logo) === "/" ? "home page" : logoLink(logo)}`}
44
+ className="flex justify-center mx-auto text-3xl font-bold leading-none"
45
+ href={logoLink(logo)}
46
+ target={logo?.linkTarget}
47
+ rel={logo?.linkTarget === "_blank" ? "noopener noreferrer" : ""}>
48
+ <Image
49
+ src={logo?.image}
50
+ alt={logo?.alt ?? "signup-logo"}
51
+ width={100}
52
+ height={100}
53
+ className="flex justify-center mx-auto text-3xl font-bold leading-none"
54
+ />
55
+ </Link>
56
+ </div>
57
+ );
58
+ }
59
+
60
+ function SubtitleAndHeadingText({ form }: { form?: iForm }) {
61
+ return (
62
+ <div className="mb-6">
63
+ {form?.subtitle ? <Text muted>{form?.subtitle}</Text> : null}
64
+ {form?.name ? <Heading className="text-2xl lg:text-2xl">{form?.name}</Heading> : null}
65
+ </div>
66
+ );
67
+ }
68
+
69
+ function SignupForm({
70
+ form,
71
+ signInLink,
72
+ thankYouPage,
73
+ }: {
74
+ form?: iForm;
75
+ signInLink?: LabeledRoute;
76
+ thankYouPage?: LabeledRoute;
77
+ }) {
78
+ if (!form?.fields) return null;
79
+ const [showPasswords, setShowPasswords] = React.useState<{ [key: string]: boolean }>({});
80
+
81
+ const togglePasswordVisibility = (fieldName: string) => {
82
+ setShowPasswords(prev => ({
83
+ ...prev,
84
+ [fieldName]: !prev[fieldName],
85
+ }));
86
+ };
87
+
88
+ return (
89
+ <Form
90
+ id={form?.id ?? undefined}
91
+ name="SignUp-VariantA-Form"
92
+ className="form-signup"
93
+ thankyouPage={thankYouPage}>
94
+ <FormFields
95
+ form={form}
96
+ showPasswords={showPasswords}
97
+ togglePasswordVisibility={togglePasswordVisibility}
98
+ />
99
+ <div>
100
+ <div className="webriq-recaptcha" />
101
+ </div>
102
+ <div className="text-center">
103
+ {form?.buttonLabel && (
104
+ <Button
105
+ as="button"
106
+ variant="custom"
107
+ ariaLabel={form?.buttonLabel ?? "Sign Up form submit button"}
108
+ className="w-full py-4 text-sm font-bold tex-gray-50"
109
+ type="submit">
110
+ {form?.buttonLabel}
111
+ </Button>
112
+ )}
113
+ </div>
114
+ {signInLink && <SignInLink signInLink={signInLink} />}
115
+ </Form>
116
+ );
117
+ }
118
+
119
+ function FormFields({
120
+ form,
121
+ showPasswords,
122
+ togglePasswordVisibility,
123
+ }: {
124
+ form?: iForm;
125
+ showPasswords: { [key: string]: boolean };
126
+ togglePasswordVisibility: (fieldName: string) => void;
127
+ }) {
128
+ return (
129
+ <>
130
+ <Flex wrap className="-mx-2">
131
+ {form?.fields?.slice(0, 2).map((formFields, index) => (
132
+ <div className="w-full px-2 mb-3 lg:w-1/2" key={index}>
133
+ {formFields.type === "inputText" ? (
134
+ <Input
135
+ textSize="sm"
136
+ variant="primary"
137
+ noLabel
138
+ placeholder={formFields?.placeholder}
139
+ required={formFields?.isRequired}
140
+ className="w-full py-4 text-xs bg-white"
141
+ name={formFields?.name}
142
+ ariaLabel={formFields?.label}
143
+ {...formFields}
144
+ type="text"
145
+ />
146
+ ) : (
147
+ <FormField textSize="sm" noLabel name={formFields?.name ?? ""} {...formFields} />
148
+ )}
149
+ </div>
150
+ ))}
151
+ </Flex>
152
+ {form?.fields?.slice(2).map((formFields, index) => (
153
+ <div key={index} className="my-3">
154
+ {formFields.type === "inputPassword" && formFields.name ? ( // Check if name exists
155
+ <PasswordField
156
+ formFields={formFields}
157
+ showPassword={showPasswords[formFields.name] || false}
158
+ togglePassword={() => togglePasswordVisibility(formFields.name!)}
159
+ />
160
+ ) : (
161
+ <FormField
162
+ className="py-4"
163
+ textSize="sm"
164
+ noLabel
165
+ variant="primary"
166
+ placeholder={formFields?.placeholder}
167
+ required={formFields?.isRequired}
168
+ name={formFields?.name ?? ""}
169
+ items={formFields?.items}
170
+ type={formFields?.type}
171
+ {...formFields}
172
+ />
173
+ )}
174
+ </div>
175
+ ))}
176
+ </>
177
+ );
178
+ }
179
+
180
+ function SignInLink({ signInLink }: { signInLink?: LabeledRoute }) {
181
+ if (!signInLink?.label) return null;
182
+
183
+ return (
184
+ <div className="w-full text-center mt-3">
185
+ <span className="text-xs text-gray-500">Already have an account? </span>
186
+ <Button
187
+ as="link"
188
+ variant="link"
189
+ link={signInLink}
190
+ className="text-xs text-primary cursor-pointer hover:underline"
191
+ ariaLabel={signInLink?.label}>
192
+ {signInLink?.label}
193
+ </Button>
194
+ </div>
195
+ );
196
+ }
197
+
198
+ function PasswordField({
199
+ formFields,
200
+ showPassword,
201
+ togglePassword,
202
+ }: {
203
+ formFields?: any;
204
+ showPassword: boolean;
205
+ togglePassword: () => void;
206
+ }) {
207
+ return (
208
+ <Flex className="relative">
209
+ <Input
210
+ className="py-4"
211
+ textSize="sm"
212
+ noLabel
213
+ aria-label={formFields?.placeholder ?? formFields?.name}
214
+ variant="primary"
215
+ type={showPassword ? "text" : "password"}
216
+ placeholder={formFields?.placeholder}
217
+ name={formFields?.name}
218
+ required={formFields?.isRequired}
219
+ />
220
+ <Button
221
+ as="button"
222
+ variant="unstyled"
223
+ ariaLabel={showPassword ? "Show password" : "Hide password"}
224
+ className="absolute top-0 right-0 h-full p-2"
225
+ type="button"
226
+ onClick={togglePassword}>
227
+ <PasswordIcon showPassword={showPassword} />
228
+ </Button>
229
+ </Flex>
230
+ );
231
+ }
232
+
233
+ function FormLinks({ formLinks }: { formLinks?: LabeledRouteWithKey[] }) {
234
+ if (!formLinks) return null;
235
+
236
+ return (
237
+ <p className="mt-10 text-xs text-center text-gray-700">
238
+ {formLinks?.map((link: any, index: number, { length }: any) => (
239
+ <span key={index}>
240
+ <Button
241
+ as="link"
242
+ variant="link"
243
+ link={link}
244
+ className="text-xs text-primary cursor-pointer hover:underline"
245
+ ariaLabel={link?.label}>
246
+ {link?.label}
247
+ </Button>
248
+ {index === length - 1 ? null : index === length - 2 ? (
249
+ <span>&nbsp;and&nbsp;</span>
250
+ ) : (
251
+ <span>&nbsp;,&nbsp;</span>
252
+ )}
253
+ </span>
254
+ ))}
255
+ </p>
256
+ );
257
+ }
258
+
259
+ function PasswordIcon({ showPassword }: { showPassword: boolean }) {
260
+ return (
261
+ <>
262
+ {showPassword ? (
263
+ <svg
264
+ className="w-5 h-5 my-auto ml-4 text-gray-500"
265
+ xmlns="http://www.w3.org/2000/svg"
266
+ aria-hidden="true"
267
+ role="img"
268
+ width="1em"
269
+ height="1em"
270
+ preserveAspectRatio="xMidYMid meet"
271
+ viewBox="0 0 16 16">
272
+ <g fill="currentColor">
273
+ <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288c-.335.48-.83 1.12-1.465 1.755c-.165.165-.337.328-.517.486l.708.709z" />
274
+ <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829l.822.822zm-2.943 1.299l.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829z" />
275
+ <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884l-12-12l.708-.708l12 12l-.708.708z" />
276
+ </g>
277
+ </svg>
278
+ ) : (
279
+ <svg
280
+ className="w-5 h-5 my-auto ml-4 text-gray-500"
281
+ xmlns="http://www.w3.org/2000/svg"
282
+ aria-hidden="true"
283
+ role="img"
284
+ width="1em"
285
+ height="1em"
286
+ preserveAspectRatio="xMidYMid meet"
287
+ viewBox="0 0 16 16">
288
+ <g fill="currentColor">
289
+ <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288c-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
290
+ <path d="M8 5.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0a3.5 3.5 0 0 1-7 0z" />
291
+ </g>
292
+ </svg>
293
+ )}
294
+ </>
295
+ );
296
+ }
297
+
298
+ export { SigninSignup_A };
@@ -0,0 +1,286 @@
1
+ import { Button } from "@stackshift-ui/button";
2
+ import { Card } from "@stackshift-ui/card";
3
+ import { Container } from "@stackshift-ui/container";
4
+ import { Flex } from "@stackshift-ui/flex";
5
+ import { Form } from "@stackshift-ui/form";
6
+ import { FormField } from "@stackshift-ui/form-field";
7
+ import { Heading } from "@stackshift-ui/heading";
8
+ import { Image } from "@stackshift-ui/image";
9
+ import { Input } from "@stackshift-ui/input";
10
+ import { Link } from "@stackshift-ui/link";
11
+ import { Section } from "@stackshift-ui/section";
12
+ import { Text } from "@stackshift-ui/text";
13
+ import React from "react";
14
+ import { SignUpFormProps } from ".";
15
+ import { logoLink, thankYouPageLink } from "./helper";
16
+ import { LabeledRoute, Logo, Form as iForm } from "./types";
17
+
18
+ export default function SigninSignup_B({ logo, form, formLinks, signInLink }: SignUpFormProps) {
19
+ return (
20
+ <Section className="py-10 bg-primary lg:py-20">
21
+ <Container maxWidth={1280}>
22
+ <Container maxWidth={576}>
23
+ <LogoSection logo={logo} />
24
+ <Card borderRadius="md" className="p-6 mb-6 bg-white lg:mb-10 lg:p-12">
25
+ <SubtitleAndHeadingText form={form} />
26
+ <SignupForm form={form} signInLink={signInLink} />
27
+ </Card>
28
+ <FormLinks formLinks={formLinks} />
29
+ </Container>
30
+ </Container>
31
+ </Section>
32
+ );
33
+ }
34
+
35
+ function LogoSection({ logo }: { logo?: Logo }) {
36
+ if (!logo) return null;
37
+
38
+ return (
39
+ <div className="mb-10">
40
+ <Link
41
+ aria-label={`Go to ${logoLink(logo) === "/" ? "home page" : logoLink(logo)}`}
42
+ className="flex justify-center mx-auto text-3xl font-bold leading-none"
43
+ href={logoLink(logo)}
44
+ target={logo?.linkTarget}
45
+ rel={logo?.linkTarget === "_blank" ? "noopener noreferrer" : ""}>
46
+ <Image
47
+ src={logo?.image}
48
+ alt={logo?.alt ?? "signup-logo"}
49
+ width={100}
50
+ height={100}
51
+ className="flex justify-center text-3xl font-bold leading-none text-white"
52
+ />
53
+ </Link>
54
+ </div>
55
+ );
56
+ }
57
+
58
+ function SubtitleAndHeadingText({ form }: { form?: iForm }) {
59
+ return (
60
+ <div className="mb-6">
61
+ <Text muted>{form?.subtitle}</Text>
62
+ <Heading className="text-2xl lg:text-2xl">{form?.name}</Heading>
63
+ </div>
64
+ );
65
+ }
66
+
67
+ function SignupForm({ form, signInLink }: { form?: iForm; signInLink?: LabeledRoute }) {
68
+ if (!form?.fields) return null;
69
+ const [showPasswords, setShowPasswords] = React.useState<{ [key: string]: boolean }>({});
70
+
71
+ const togglePasswordVisibility = (fieldName: string) => {
72
+ setShowPasswords(prev => ({
73
+ ...prev,
74
+ [fieldName]: !prev[fieldName],
75
+ }));
76
+ };
77
+
78
+ return (
79
+ <Form
80
+ id={form?.id ?? undefined}
81
+ name="SignUp-VariantB-Form"
82
+ className="form-signup"
83
+ thankyouPage={thankYouPageLink(form?.thankYouPage)}>
84
+ <FormFields
85
+ form={form}
86
+ showPassword={showPasswords}
87
+ togglePasswordVisibility={togglePasswordVisibility}
88
+ />
89
+ <div>
90
+ <div className="webriq-recaptcha" />
91
+ </div>
92
+ <div className="text-center">
93
+ <FormButtonLabel form={form} />
94
+ <SigninLink signInLink={signInLink} />
95
+ </div>
96
+ </Form>
97
+ );
98
+ }
99
+
100
+ function FormFields({
101
+ form,
102
+ showPassword,
103
+ togglePasswordVisibility,
104
+ }: {
105
+ form?: iForm;
106
+ showPassword: { [key: string]: boolean };
107
+ togglePasswordVisibility: (fieldName: string) => void;
108
+ }) {
109
+ return (
110
+ <React.Fragment>
111
+ <Flex className="flex-col lg:flex-row gap-3">
112
+ {form?.fields?.slice(0, 2)?.map((formFields, index) => (
113
+ <div className="w-full" key={index}>
114
+ <FormField
115
+ noLabel
116
+ variant="secondary"
117
+ placeholder={formFields?.placeholder}
118
+ required={formFields?.isRequired}
119
+ name={formFields?.name ?? ""}
120
+ items={formFields?.items}
121
+ type={formFields?.type}
122
+ {...formFields}
123
+ />
124
+ </div>
125
+ ))}
126
+ </Flex>
127
+
128
+ {form?.fields?.slice(2)?.map((formFields, index) => (
129
+ <div key={index} className="my-3">
130
+ {formFields?.type === "inputPassword" && formFields.name ? (
131
+ <PasswordField
132
+ formFields={formFields}
133
+ showPassword={showPassword[formFields.name] || false}
134
+ togglePassword={() => togglePasswordVisibility(formFields.name!)}
135
+ />
136
+ ) : (
137
+ <FormField
138
+ noLabel
139
+ variant="secondary"
140
+ name={formFields?.name ?? ""}
141
+ placeholder={formFields?.placeholder}
142
+ required={formFields?.isRequired}
143
+ items={formFields?.items}
144
+ type={formFields?.type}
145
+ {...formFields}
146
+ />
147
+ )}
148
+ </div>
149
+ ))}
150
+ </React.Fragment>
151
+ );
152
+ }
153
+
154
+ function PasswordField({
155
+ formFields,
156
+ showPassword,
157
+ togglePassword,
158
+ }: {
159
+ formFields?: any;
160
+ showPassword: boolean;
161
+ togglePassword: () => void;
162
+ }) {
163
+ return (
164
+ <div className="flex">
165
+ <Input
166
+ noLabel
167
+ ariaLabel={formFields?.placeholder ?? formFields?.name}
168
+ variant="secondary"
169
+ type={showPassword ? "text" : "password"}
170
+ placeholder={formFields?.placeholder}
171
+ name={formFields?.name}
172
+ required={formFields?.isRequired}
173
+ />
174
+ {/* SVG icon on the right of the password input field */}
175
+ <Button
176
+ variant="unstyled"
177
+ as="button"
178
+ ariaLabel={showPassword ? "Show password" : "Hide password"}
179
+ className="focus:outline-none mr-4"
180
+ type="button"
181
+ onClick={togglePassword}>
182
+ <PasswordIcon showPassword={showPassword} />
183
+ </Button>
184
+ </div>
185
+ );
186
+ }
187
+
188
+ function FormButtonLabel({ form }: { form?: iForm }) {
189
+ if (!form?.buttonLabel) return null;
190
+
191
+ return (
192
+ <Button
193
+ as="button"
194
+ className="w-full py-4 mb-3"
195
+ ariaLabel={form?.buttonLabel ?? "Sign Up form submit button"}
196
+ variant="custom"
197
+ type="submit">
198
+ {form?.buttonLabel}
199
+ </Button>
200
+ );
201
+ }
202
+
203
+ function SigninLink({ signInLink }: { signInLink?: LabeledRoute }) {
204
+ if (!signInLink?.label) return null;
205
+
206
+ return (
207
+ <span className="text-xs text-gray-900">
208
+ <span>Already have an account?</span>{" "}
209
+ <Button
210
+ as="link"
211
+ variant="link"
212
+ link={signInLink}
213
+ className="text-xs text-primary hover:underline"
214
+ ariaLabel={signInLink?.label}>
215
+ {signInLink?.label}
216
+ </Button>
217
+ </span>
218
+ );
219
+ }
220
+
221
+ function FormLinks({ formLinks }: { formLinks?: LabeledRoute[] }) {
222
+ if (!formLinks) return null;
223
+
224
+ return (
225
+ <p className="text-xs text-center text-secondary-foreground">
226
+ {formLinks?.map((link, index, { length }) => (
227
+ <span key={index}>
228
+ <Button
229
+ as="link"
230
+ variant="link"
231
+ link={link}
232
+ className="text-xs underline text-secondary-foreground hover:text-gray-50"
233
+ ariaLabel={link?.label}>
234
+ {link?.label}
235
+ </Button>
236
+ {index === length - 1 ? null : index === length - 2 ? (
237
+ <span>&nbsp;and&nbsp;</span>
238
+ ) : (
239
+ <span>&nbsp;,&nbsp;</span>
240
+ )}
241
+ </span>
242
+ ))}
243
+ </p>
244
+ );
245
+ }
246
+
247
+ function PasswordIcon({ showPassword }: { showPassword: boolean }) {
248
+ return (
249
+ <React.Fragment>
250
+ {showPassword ? (
251
+ <svg
252
+ className="w-5 h-5 my-auto ml-4 text-gray-500"
253
+ xmlns="http://www.w3.org/2000/svg"
254
+ aria-hidden="true"
255
+ role="img"
256
+ width="1em"
257
+ height="1em"
258
+ preserveAspectRatio="xMidYMid meet"
259
+ viewBox="0 0 16 16">
260
+ <g fill="currentColor">
261
+ <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288c-.335.48-.83 1.12-1.465 1.755c-.165.165-.337.328-.517.486l.708.709z" />
262
+ <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829l.822.822zm-2.943 1.299l.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829z" />
263
+ <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884l-12-12l.708-.708l12 12l-.708.708z" />
264
+ </g>
265
+ </svg>
266
+ ) : (
267
+ <svg
268
+ className="w-5 h-5 my-auto ml-4 text-gray-500"
269
+ xmlns="http://www.w3.org/2000/svg"
270
+ aria-hidden="true"
271
+ role="img"
272
+ width="1em"
273
+ height="1em"
274
+ preserveAspectRatio="xMidYMid meet"
275
+ viewBox="0 0 16 16">
276
+ <g fill="currentColor">
277
+ <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288c-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
278
+ <path d="M8 5.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0a3.5 3.5 0 0 1-7 0z" />
279
+ </g>
280
+ </svg>
281
+ )}
282
+ </React.Fragment>
283
+ );
284
+ }
285
+
286
+ export { SigninSignup_B };