{"version":3,"sources":["common/components/Form/TextError.tsx","common/style/components/input.tsx","common/components/Form/validators.ts","common/images/cleever-logo.svg","common/style/components/checked.svg","common/images/checkok.svg","common/components/Form/MoonaPassword/MoonaPassword.tsx","common/components/Form/MoonaInput.tsx","common/components/Form/CheckIcon.tsx","pages/Login/components/LoginForm.tsx","common/components/Form/MoonaPassword/hide.svg","common/components/Form/MoonaPassword/show.svg","common/components/Form/MoonaPassword/lock.svg","common/images/check.svg","common/images/checkko.svg","pages/Login/Login.tsx"],"names":["ErrorContainer","styled","Container","ErrorNewTabLink","NewTabLink","ErrorBody","label","links","name","map","link","i","newtab","to","target","key","TextError","children","IsJsonString","JSON","parse","defaultInputBorder","css","activeInputBorder","baseFontCss","baseErrorInputCss","baseInputCss","focusInputCss","activeInputCss","Input","Field","Label","baseTitleCss","Radio","input","attrs","type","checked","Form","ValidateEmail","mail","endsWith","RegExp","test","validateWebSiteUrl","value","bundle","adress","stringify","str","e","validateText","msg","error","text","ValidateText","validateEmail","invalidformat","inuse","isRegisteredEmail","then","existing","validateExistingEmail","validatePhone","yupPasswordValidationRule","password","Yup","required","matches","module","exports","PwdInput","InputContainer","div","ShowPasswordContainer","LockContainer","Lock","Image","ShowPassword","BaseButton","props","icon","Helper","MdBody","hovered","MoonaPassword","placeholder","errors","touched","validate","autofocus","disabled","useState","hidden","setHidden","useTranslation","t","setHovered","errorClass","inputRef","useRef","useEffect","current","ref","focus","htmlFor","content","src","lock","onMouseEnter","onMouseLeave","className","innerRef","id","autoComplete","onClick","hide","show","component","MoonaInput","isValid","onKeyUp","validationIcon","isError","meta","Icon","CheckIcon","checkIcon","checkko","check","checkok","LoginFormContainer","Section","tablet","FormWrapper","LoginButton","SubmittablePrimaryButton","LoginFormSection","validationSchema","email","min","initialValues","initialErrors","LoginForm","button","validation","loginfailure","isProcessing","setProcessing","isSubmitted","dispatch","useDispatch","onSubmit","values","a","loginRequest","toLowerCase","isSubmitting","width","LoginCenteredMain","CenteredMain","extraSmall","LoginInlineLink","InlineLink","LoginNewTabLink","LoginImage","LoginTitle","MdH1","LoginWrapper","Login","returnObjects","title","form","cta","cta2","useSelector","state","auth","isMobile","session","titleLabel","mobile","desktop","setSubmitted","logo"],"mappings":"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","file":"static/js/14.351c9410.chunk.js","sourcesContent":["import React from 'react'\nimport styled from 'styled-components'\nimport { Container, NameableSpan } from 'common/style/components/Section'\nimport { IsJsonString } from './validators'\nimport { InlineLink, NewTabLink } from '../../style/components/links'\n\nexport const ErrorContainer = styled(Container)`\n margin-top: 0.4rem;\n font-weight: 500;\n font-size: 14px;\n line-height: 24px;\n color: var(--color-red-danger);\n`\n\nconst ErrorNewTabLink = styled(NewTabLink)`\n font-size: 1.4rem;\n`\n\nconst TextError: React.FC = ({ children }) => {\n const isJson = IsJsonString(children as string)\n if (!isJson) {\n return <ErrorContainer>{children}</ErrorContainer>\n }\n\n const { label, links, name }: ErrorBodyProps = JSON.parse(children as string)\n return (\n <ErrorContainer>\n <ErrorBody label={label} links={links} name={name} />\n </ErrorContainer>\n )\n}\n\ninterface ErrorBodyProps {\n label: string\n links?: { label: string; target: string; newtab: boolean }[]\n name: string\n}\nconst ErrorBody: React.FC<ErrorBodyProps> = ({ label, links, name }) => {\n return (\n <NameableSpan name={name}>\n {label + ' '}{' '}\n {links?.map((link, i) => {\n if (link.newtab) {\n return (\n <ErrorNewTabLink to={link.target} key={i} name={`texterror-${i}`}>\n {link.label}\n </ErrorNewTabLink>\n )\n }\n return (\n <InlineLink to={link.target} key={i} name={`texterror-${i}`}>\n {link.label}\n </InlineLink>\n )\n })}\n </NameableSpan>\n )\n}\nexport default TextError\n","import { Field, Form } from 'formik'\nimport styled, { css } from 'styled-components'\nimport { baseTitleCss } from './Typography'\nimport checked from './checked.svg'\n\nconst defaultInputBorder = css`\n border: 1px solid #dee0e7;\n`\nconst activeInputBorder = css`\n border: 1px solid var(--color-grey-main);\n`\n\nexport const baseFontCss = css`\n font-family: 'Aeonik';\n font-style: normal;\n font-weight: normal;\n font-size: 1.4rem;\n line-height: 2.4rem;\n color: var(--color-blackmain-moona);\n`\n\nconst baseErrorInputCss = css`\n border: 1px solid var(--color-red-danger);\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);\n`\nexport const baseInputCss = css`\n text-align: left;\n width: 100%;\n height: 4rem;\n padding-left: 1.4rem;\n background: #ffffff;\n outline: none;\n ${defaultInputBorder}\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);\n border-radius: 8px;\n &:focus,\n &:active {\n ${activeInputBorder}\n }\n &.error:active {\n ${baseErrorInputCss}\n }\n\n &::placeholder {\n font-family: 'Aeonik';\n font-size: 1.4rem;\n\n line-height: 2.4rem;\n @-moz-document url-prefix() {\n line-height: 3.7rem;\n }\n color: var(--color-blackmain-moona);\n opacity: 0.3;\n }\n\n &.error {\n ${baseErrorInputCss}\n }\n &:disabled {\n background: #f2f3f3;\n color: #bdbec0;\n opacity: 1;\n }\n`\n\nexport const focusInputCss = css`\n border: 1px solid var(--color-purple-moona);\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);\n`\n\nexport const activeInputCss = css`\n position: absolute;\n display: block;\n z-index: -1;\n top: -2px;\n left: -2px;\n right: -2px;\n bottom: -2px;\n\n border: 4px solid #ecddff;\n border-radius: 8px;\n\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);\n`\nexport const Input = styled(Field)`\n ${baseInputCss}\n font-family: 'Aeonik';\n font-style: normal;\n font-weight: normal;\n font-size: 1.4rem;\n line-height: 2.4rem;\n color: var(--color-blackmain-moona);\n position: relative;\n &:hover {\n cursor: pointer;\n }\n &:focus {\n ${focusInputCss}\n }\n\n &:active + span:after {\n content: '';\n ${activeInputCss}\n }\n`\n\nexport const Label = styled.label`\n ${baseTitleCss}\n font-weight: 500;\n font-size: 1.4rem;\n line-height: 2.4rem;\n margin-bottom: 0.4rem;\n color: var(--color-grey-main);\n`\n\nexport const InlineLabel = styled(Label)`\n display: inline;\n outline: none;\n font-size: 1.2rem;\n line-height: 2.1rem;\n font-weight: normal;\n padding-left: 3rem;\n position: relative;\n &:hover {\n cursor: pointer;\n }\n &::before {\n content: '';\n display: block;\n height: 0;\n width: 0;\n margin-top: -0.5rem;\n }\n`\n\nexport const Radio = styled.input.attrs({\n type: 'radio'\n})`\n &:checked,\n &:not(:checked) {\n position: absolute;\n left: -9999px;\n }\n &:checked + label,\n &:not(:checked) + label {\n width: 100%;\n position: relative;\n padding-left: 0px;\n cursor: pointer;\n line-height: 20px;\n display: inline-block;\n color: #666;\n }\n &:checked + label:before,\n &:not(:checked) + label:before {\n content: '';\n position: absolute;\n left: 2.5rem;\n top: 50%;\n transform: translateY(-50%);\n width: 17px;\n height: 17px;\n border: 1px solid #9540ff;\n border-radius: 100%;\n background: #9540ff;\n }\n &:not(:checked) + label:before {\n content: '';\n position: absolute;\n left: 2.5rem;\n top: 50%;\n transform: translateY(-50%);\n width: 17px;\n height: 17px;\n border: 1px solid #9540ff;\n border-radius: 100%;\n background: #fff;\n }\n\n &:checked + label:after,\n &:not(:checked) + label:after {\n content: '';\n width: 7px;\n height: 7px;\n background: #fff;\n position: absolute;\n top: 50%;\n left: 3rem;\n border-radius: 100%;\n -webkit-transition: all 0.2s ease;\n transition: all 0.2s ease;\n }\n &:not(:checked) + label:after {\n opacity: 0;\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n &:checked + label:after {\n top: 50%;\n opacity: 1;\n -webkit-transform: scale(1) translateY(-50%);\n transform: scale(1) translateY(-50%);\n }\n`\n\nexport const Checkbox = styled(Field).attrs({\n type: 'checkbox'\n})`\n position: absolute;\n left: 0;\n opacity: 0.01;\n &:not(:checked) + label::before,\n &:checked + label::before {\n content: '';\n position: absolute;\n left: 0;\n top: 1.1rem;\n width: 1.6rem;\n height: 1.6rem;\n background: #fff;\n border-radius: 0.2em;\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1),\n 0 0 0 rgba(203, 34, 237, 0.2);\n transition: all 0.275s;\n }\n\n &:not(:checked) + label::before {\n ${defaultInputBorder}\n }\n &:not(:checked) + label:hover:before,\n &:not(:checked) + label:focus:before,\n &:focus + label:before {\n background: #ffffff;\n border: 1px solid var(--color-purple-moona);\n box-sizing: border-box;\n\n box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n }\n\n position: relative;\n\n &:focus ~ span:after {\n content: '';\n position: absolute;\n display: block;\n z-index: -1;\n\n border: 3px solid #ecddff;\n border-radius: 8px;\n\n box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);\n top: 3px;\n left: 10px;\n width: 21px;\n height: 21px;\n }\n\n &:checked + label:before {\n ${activeInputBorder}\n }\n\n /* Aspect de la coche */\n &:not(:checked) + label::after,\n &:checked + label::after {\n content: '';\n\n position: absolute;\n left: 0;\n top: 6px;\n width: 16px;\n height: 16px;\n\n background-image: url(${checked});\n background-repeat: no-repeat;\n }\n\n /* Aspect non cochée */\n &:not(:checked) + label::after {\n opacity: 0;\n }\n\n /* Aspect cochée */\n &:checked + label::after {\n opacity: 1;\n }\n display: inline-block;\n`\n\nexport const StyledForm = styled(Form)`\n height: 100%;\n width: 100%;\n`\n","import * as Yup from 'yup'\nimport { isRegisteredEmail } from 'state/features/users/api'\nexport type ValidationMessage = { label: string; name: string }\nexport interface BaseBundleMessage {\n label: string\n name: string\n links?: { label: string; target: string }[]\n}\n\nfunction ValidateEmail(mail: string): boolean {\n const pattern = mail.endsWith('moona.com')\n ? new RegExp(\n /^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*(\\+[a-zA-Z0-9-]+)?@[a-zA-Z0-9-]+[\\\\.][a-zA-Z0-9-.]+$/\n )\n : new RegExp(\n /^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*?@[a-zA-Z0-9-]+[\\\\.][a-zA-Z0-9-.]+$/\n )\n\n // : new RegExp(/^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,3})+$/)\n\n if (pattern.test(mail)) {\n return true\n }\n\n return false\n}\n\nfunction ValidateWebSiteAdress(adress: string): boolean {\n const pattern = new RegExp(\n /^(http:\\/\\/|https:\\/\\/)?(www.)?[~._a-zA-Z0-9-]+[\\\\.][a-zA-Z0-9-]+$/\n )\n if (pattern.test(adress)) {\n return true\n }\n\n return false\n}\n\nexport const validateWebSiteUrl = (\n value: string,\n bundle: BaseBundleMessage\n) => {\n // const { label, name } = bundle\n if (!ValidateWebSiteAdress(value)) {\n return JSON.stringify(bundle)\n }\n\n return ''\n}\nfunction isEmpty(text: string): boolean {\n if (text === '') {\n return true\n }\n return false\n}\n\nexport function validateUKpostcode(postcode: string) {\n postcode = postcode.replace(/\\s/g, '')\n var regex = /^[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}$/i\n return regex.test(postcode)\n}\n\nexport function validatePostalCode(postcode: string, msg: BaseBundleMessage) {\n let error = ''\n if (!postcode) {\n error = JSON.stringify(msg)\n }\n return error\n}\n\nfunction ValidateText(text: string): boolean {\n if (text === '') {\n return false\n }\n const re = /^[ \\-'a-zA-ZÀ-ÿ\\u00f1\\u00d1]*$/g\n if (re.test(text)) {\n return true\n }\n return false\n}\n\nexport function IsJsonString(str: string): boolean {\n try {\n JSON.parse(str)\n } catch (e) {\n return false\n }\n return true\n}\n\nexport function validateText(value: string, msg: BaseBundleMessage): string {\n let error = ''\n if (isEmpty(value)) {\n error = JSON.stringify(msg)\n } else if (!ValidateText(value)) {\n error = JSON.stringify(msg)\n }\n return error\n}\n\nexport interface BundleMail {\n label?: string\n placeholder?: string\n invalidformat: BaseBundleMessage\n inuse: BaseBundleMessage\n}\nexport const validateEmail = (value: string, bundle: BundleMail) => {\n const { invalidformat, inuse } = bundle\n\n if (!value || value === '') {\n return JSON.stringify(invalidformat)\n }\n\n if (!ValidateEmail(value)) {\n return JSON.stringify(invalidformat)\n }\n\n return isRegisteredEmail(value).then(existing => {\n if (existing) {\n return JSON.stringify(inuse)\n } else {\n return ''\n }\n })\n}\nexport const validateExistingEmail = (value: string, bundle: BundleMail) => {\n const { invalidformat, inuse } = bundle\n if (!ValidateEmail(value)) {\n return JSON.stringify(invalidformat)\n }\n return isRegisteredEmail(value).then(existing => {\n if (!existing) {\n return JSON.stringify(inuse)\n } else {\n return ''\n }\n })\n}\n\nexport function validatePhone(value: string, msg: BaseBundleMessage) {\n let error = ''\n if (value === 'invalid_phone_number') {\n error = JSON.stringify(msg)\n }\n return error\n}\n\nexport const yupPasswordValidationRule = (msg: BaseBundleMessage) => ({\n password: Yup.string()\n .required(JSON.stringify(msg))\n .matches(\n /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!\"'()*+,/:;<>?[\\] `{|}~@\\-#$%^&+=])(?=.{8,})/,\n JSON.stringify(msg)\n )\n})\n","module.exports = __webpack_public_path__ + \"static/media/cleever-logo.0b728524.svg\";","module.exports = __webpack_public_path__ + \"static/media/checked.24af96c2.svg\";","module.exports = __webpack_public_path__ + \"static/media/checkok.e4242c67.svg\";","import React, { useState, useRef, useEffect } from 'react'\n\nimport { ErrorMessage, FormikErrors, FormikTouched } from 'formik'\nimport TextError from '../TextError'\nimport { Label, Input } from '../../../style/components/input'\nimport { Image } from '../../../style/components/image'\nimport { InputWrapper } from '../../../style/components/Section'\nimport styled from 'styled-components'\nimport { BaseButton } from '../../../style/components/buttons'\nimport hide from './hide.svg'\nimport show from './show.svg'\nimport lock from './lock.svg'\nimport { useTranslation } from 'react-i18next'\nimport { MdBody } from 'common/style/components/Typography'\n\ninterface InputProps {\n label: string\n name: string\n placeholder?: string\n errors: FormikErrors<{\n [field: string]: any\n }>\n touched: FormikTouched<{\n [field: string]: any\n }>\n validate?: (value: string) => string\n autofocus?: boolean\n disabled?: boolean\n}\n\nconst PwdInput = styled(Input)`\n padding-left: 3.2rem;\n`\n\nconst InputContainer = styled.div`\n position: relative;\n`\nconst ShowPasswordContainer = styled.div`\n position: absolute;\n top: 0;\n right: 1.5rem;\n height: 100%;\n\n display: flex;\n align-items: center;\n`\nconst LockContainer = styled.div`\n z-index: 2;\n position: absolute;\n top: 0;\n left: 1.2rem;\n height: 100%;\n width: 1.5rem;\n display: flex;\n align-items: center;\n`\n\nconst Lock = styled(Image)<{\n onMouseEnter: () => void\n onMouseLeave: () => void\n}>``\nconst ShowPassword = styled(BaseButton)<{ icon: string }>`\n background: 100% no-repeat url(${props => props.icon});\n width: 2rem;\n height: 2rem;\n`\nconst Helper = styled(MdBody)<{\n hovered: boolean\n}>`\n display: ${({ hovered }) => (hovered ? 'flex' : 'none')};\n background: rgba(41, 43, 54, 0.4);\n backdrop-filter: blur(20px);\n border-radius: 8px;\n flex-direction: column;\n font-weight: 500;\n font-size: 1.4rem;\n line-height: 2.4rem;\n color: #ffffff;\n padding: 0.8rem 1.2rem;\n white-space: nowrap;\n align-items: flex-start;\n position: absolute;\n top: 3.5rem;\n`\n\nexport const MoonaPassword: React.FC<InputProps> = ({\n name,\n label,\n placeholder,\n errors,\n touched,\n validate,\n autofocus = false,\n disabled\n}) => {\n const [hidden, setHidden] = useState(true)\n const [t] = useTranslation('app')\n const [hovered, setHovered] = useState(false)\n const isError = errors[name] && touched[name]\n const toggleShow = () => setHidden(!hidden)\n const errorClass = isError ? 'error' : ''\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (inputRef.current) {\n const ref = inputRef.current\n\n if (autofocus) {\n ref.focus()\n }\n }\n }, [inputRef, autofocus])\n return (\n <InputWrapper>\n <Label htmlFor={name}>{label}</Label>\n <InputContainer>\n <LockContainer>\n <Helper content={t('general.helper.password')} hovered={hovered} />\n\n <Lock\n src={lock}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n />\n </LockContainer>\n <PwdInput\n className={errorClass}\n type={hidden ? 'password' : 'text'}\n innerRef={inputRef}\n id={name}\n name={name}\n placeholder={placeholder || ''}\n validate={validate}\n autoComplete=\"off\"\n disabled={disabled}\n />\n <span></span>\n <ShowPasswordContainer>\n <ShowPassword\n onClick={toggleShow}\n icon={hidden ? hide : show}\n name=\"showpassword\"\n />\n </ShowPasswordContainer>\n </InputContainer>\n <ErrorMessage component={TextError} name={name} />\n </InputWrapper>\n )\n}\n","import React, { useRef, useEffect } from 'react'\n\nimport {\n Field,\n FieldProps,\n ErrorMessage,\n FormikErrors,\n FormikTouched\n} from 'formik'\nimport TextError from './TextError'\nimport { Label, Input } from '../../style/components/input'\nimport { InputWrapper } from '../../style/components/Section'\nimport styled from 'styled-components'\nimport CheckIcon from './CheckIcon'\n\ninterface InputProps {\n label: string\n name: string\n placeholder?: string\n errors: FormikErrors<{\n [field: string]: any\n }>\n touched: FormikTouched<{\n [field: string]: any\n }>\n validate?: (value: string) => Promise<string> | string\n isValid?: React.Dispatch<React.SetStateAction<boolean>>\n onKeyUp?: () => void\n disabled?: boolean\n autofocus?: boolean\n validationIcon?: boolean\n}\n\nconst InputContainer = styled.div`\n position: relative;\n`\n\nexport const MoonaInput: React.FC<InputProps> = ({\n name,\n label,\n placeholder,\n errors,\n touched,\n validate,\n isValid,\n onKeyUp,\n autofocus = false,\n disabled = false,\n\n validationIcon = true\n}) => {\n const isError = errors[name] && touched[name]\n const errorClass = isError ? 'error' : ''\n if (isValid) isValid(!isError)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (inputRef.current) {\n const ref = inputRef.current\n\n if (autofocus) {\n ref.focus()\n }\n }\n }, [inputRef, autofocus])\n\n return (\n <InputWrapper>\n <Label htmlFor={name}>{label}</Label>\n <Field name={name} validate={validate}>\n {({ meta }: FieldProps) => {\n return (\n <InputContainer>\n <Input\n innerRef={inputRef}\n className={errorClass}\n id={name}\n name={name}\n placeholder={placeholder || ''}\n validate={validate}\n autoComplete=\"off\"\n onKeyUp={onKeyUp}\n disabled={disabled}\n />\n <span></span>\n {validationIcon && <CheckIcon meta={meta} />}\n </InputContainer>\n )\n }}\n </Field>\n <ErrorMessage component={TextError} name={name} />\n </InputWrapper>\n )\n}\n","import React from 'react'\nimport { Image } from 'common/style/components/image'\nimport styled from 'styled-components'\nimport check from 'common/images/check.svg'\nimport checkok from 'common/images/checkok.svg'\nimport checkko from 'common/images/checkko.svg'\nimport { FieldMetaProps } from 'formik'\nexport const Icon = styled(Image)`\n position: absolute;\n right: 1.2rem;\n top: 50%;\n transform: translateY(-50%);\n`\nconst CheckIcon = ({ meta }: { meta: FieldMetaProps<any> }) => {\n let checkIcon = ''\n if (!meta.touched && meta.value === 'invalid_phone_number') {\n checkIcon = check\n } else {\n checkIcon =\n meta.touched && (meta.error || meta.value === 'invalid_phone_number')\n ? checkko\n : meta.value !== '' && !meta.error\n ? checkok\n : check\n }\n return <Icon src={checkIcon} />\n}\n\nexport default CheckIcon\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Formik, Form } from 'formik'\nimport * as Yup from 'yup'\nimport { useDispatch } from 'react-redux'\nimport { Section } from 'common/style/components/Section'\n\nimport { MoonaPassword } from 'common/components/Form/MoonaPassword/MoonaPassword'\nimport { SubmittablePrimaryButton } from 'common/style/components/buttons'\nimport { MoonaInput } from 'common/components/Form/MoonaInput'\nimport { loginRequest } from 'state/features/auth/actions'\nimport TextError from 'common/components/Form/TextError'\nimport { FormBundle } from '../Login'\nimport { tablet } from 'common/style/queries/media-queries'\nimport { validateExistingEmail } from 'common/components/Form/validators'\ninterface LoginFormProps extends FormBundle {\n loginfailure: boolean\n isProcessing: boolean\n setProcessing: React.Dispatch<React.SetStateAction<boolean>>\n isSubmitted: boolean\n setSubmitted: React.Dispatch<React.SetStateAction<boolean>>\n}\n\nexport const LoginFormContainer = styled(Section)`\n margin-top: 3.2rem;\n width: 100%;\n @media ${tablet} {\n }\n`\n\nexport const FormWrapper = styled(Form)`\n width: 100%;\n`\n\nexport const LoginButton = styled(SubmittablePrimaryButton)`\n margin-top: 0rem;\n background: var(--color-purple-moona);\n &:disabled {\n background-color: #ca9fff;\n }\n &:focus:before {\n z-index: 10;\n background-color: transparent;\n }\n`\n\nexport const LoginFormSection = styled(Section)`\n margin: 0;\n width: 100%;\n align-items: center;\n\n & > :not(:last-child) {\n margin-bottom: 1.6rem;\n }\n\n @media ${tablet} {\n width: 32.4rem;\n }\n\n & > div > label {\n color: #ffffff;\n }\n`\n\nconst validationSchema = Yup.object({\n email: Yup.string().email('Invalid email format'),\n password: Yup.string().min(8)\n})\n\nconst initialValues = {\n password: '',\n email: ''\n}\n\nconst initialErrors = {\n email: '{\"label\":\"\",\"name\":\"\"}'\n}\n\nexport const LoginForm: React.FC<LoginFormProps> = ({\n email,\n password,\n button,\n validation,\n loginfailure,\n isProcessing,\n setProcessing,\n isSubmitted\n}) => {\n const dispatch = useDispatch()\n return (\n <LoginFormContainer>\n <Formik\n initialErrors={initialErrors}\n initialValues={initialValues}\n validationSchema={validationSchema}\n onSubmit={async values => {\n setProcessing(true)\n dispatch(loginRequest(values.email.toLowerCase(), values.password))\n }}\n >\n {({ errors, touched, isValid }) => {\n return (\n <FormWrapper autoComplete=\"off\">\n <LoginFormSection className={'login-form-section'}>\n {loginfailure && (\n <TextError>{JSON.stringify(validation)}</TextError>\n )}\n <MoonaInput\n name=\"email\"\n label={email.label}\n placeholder={email.placeholder}\n errors={errors}\n touched={touched}\n autofocus={true}\n validate={value => {\n return value !== ''\n ? validateExistingEmail(value.toLowerCase(), email)\n : ''\n }}\n disabled={isProcessing}\n />\n <MoonaPassword\n name=\"password\"\n label={password.label}\n placeholder={password.placeholder}\n errors={errors}\n touched={touched}\n disabled={isProcessing}\n />\n\n <LoginButton\n isSubmitting={isProcessing}\n isSubmitted={isSubmitted && !loginfailure}\n label={button.label}\n type=\"submit\"\n disabled={!isValid || isProcessing}\n name=\"set-password-submit\"\n width=\"100%\"\n />\n </LoginFormSection>\n </FormWrapper>\n )\n }}\n </Formik>\n </LoginFormContainer>\n )\n}\n","module.exports = __webpack_public_path__ + \"static/media/hide.defee299.svg\";","module.exports = __webpack_public_path__ + \"static/media/show.048e85cf.svg\";","module.exports = __webpack_public_path__ + \"static/media/lock.b431ca5c.svg\";","module.exports = __webpack_public_path__ + \"static/media/check.c9deb4e7.svg\";","module.exports = __webpack_public_path__ + \"static/media/checkko.34c4dc02.svg\";","import React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useSelector } from 'react-redux'\nimport {\n LoginSection,\n CenteredMain\n} from '../../common/style/components/Section'\nimport { Image } from '../../common/style/components/image'\nimport { MdH1 } from '../../common/style/components/Typography'\nimport logo from 'common/images/cleever-logo.svg'\nimport { LoginForm } from './components/LoginForm'\nimport { useTranslation } from 'react-i18next'\nimport { InlineLink, NewTabLink } from 'common/style/components/links'\nimport { AppState } from 'state/features/types'\nimport { extraSmall, tablet } from 'common/style/queries/media-queries'\nimport { BaseBundleMessage } from 'common/components/Form/validators'\n\nexport const LoginCenteredMain = styled(CenteredMain)`\n width: 33.5rem;\n padding: 3.6rem 2.4rem 2.6rem 2.4rem;\n\n background-color: #27244b;\n border: 1px solid #e8e9ed;\n border-radius: 16px;\n @media ${tablet} {\n padding: 6.4rem 17.6rem 6.5rem 17.6rem;\n width: 100%;\n }\n @media ${extraSmall} {\n width: 100%;\n padding: 3.6rem 2.4rem 2.6rem 2.4rem;\n }\n`\n\nexport const LoginInlineLink = styled(InlineLink)`\n margin-top: 0.8rem;\n font-weight: 500;\n font-size: 1.2rem;\n line-height: 2.1rem;\n color: #fff;\n &:hover {\n text-decoration: underline;\n }\n`\n\nexport const LoginNewTabLink = styled(NewTabLink)`\n margin-top: 0.8rem;\n font-weight: 500;\n font-size: 1.2rem;\n line-height: 2.1rem;\n color: #fff;\n &:hover {\n text-decoration: underline;\n }\n`\n\nexport interface FormBundle {\n email: {\n label: string\n placeholder: string\n validation: string\n invalidformat: BaseBundleMessage\n inuse: BaseBundleMessage\n }\n password: { label: string; placeholder: string; validation: string }\n button: { label: string }\n validation: { label: string; links: { label: string; target: string }[] }\n}\ninterface PageBundle {\n title: { mobile: string; desktop: string }\n form: FormBundle\n cta: { to: string; label: string }\n cta2: { to: string; label: string }\n}\n\nexport const LoginImage = styled(Image)`\n width: 167px;\n margin-bottom: 3.6rem;\n margin-top: 3.8rem;\n @media ${tablet} {\n margin-bottom: 0rem;\n margin-top: 0rem;\n }\n`\nexport const LoginTitle = styled(MdH1)`\n width: 100%;\n margin-top: 0rem;\n font-weight: 500;\n font-size: 2rem;\n line-height: 2.7rem;\n color: #ffffff;\n display: flex;\n justify-content: center;\n @media ${tablet} {\n margin-top: 3rem;\n }\n`\n\nexport const LoginWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n @media ${tablet} {\n }\n`\nconst Login: React.FC = () => {\n const [t] = useTranslation('app')\n const {\n title,\n form: { email, password, button, validation },\n cta,\n cta2\n }: PageBundle = t('login', { returnObjects: true })\n\n const { loginfailure } = useSelector((state: AppState) => {\n return state.auth\n })\n\n const { isMobile } = useSelector((state: AppState) => state.session)\n const titleLabel = isMobile ? title.mobile : title.desktop\n const [isProcessing, setProcessing] = useState(false)\n const [isSubmitted, setSubmitted] = useState(false)\n\n useEffect(() => {\n if (loginfailure) {\n setProcessing(false)\n }\n }, [loginfailure])\n\n return (\n <LoginSection>\n <LoginWrapper>\n {isMobile && <LoginImage src={logo} />}\n <LoginCenteredMain>\n {!isMobile && <LoginImage src={logo} />}\n <LoginTitle content={titleLabel} />\n <LoginForm\n email={email}\n password={password}\n button={button}\n loginfailure={loginfailure}\n validation={validation}\n isProcessing={isProcessing}\n setProcessing={setProcessing}\n isSubmitted={isSubmitted}\n setSubmitted={setSubmitted}\n />\n <LoginNewTabLink to={cta.to} name=\"forgotten-password\">\n {cta.label}\n </LoginNewTabLink>\n <LoginInlineLink to={cta2.to} name=\"forgotten-password\">\n {cta2.label}\n </LoginInlineLink>\n </LoginCenteredMain>\n </LoginWrapper>\n </LoginSection>\n )\n}\n\nexport default Login\n"],"sourceRoot":""}