{"version":3,"sources":["webpack:///./obj/desktop/src/login/components/login-page/desktop/login-page.less","webpack:///./obj/desktop/src/login/components/reset-confirm/desktop/reset-confirm.less","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/CheckBoxOutlineBlank.js","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/CheckBox.js","webpack:///./node_modules/@material-ui/core/esm/internal/svg-icons/IndeterminateCheckBox.js","webpack:///./node_modules/@material-ui/core/esm/Checkbox/Checkbox.js","webpack:///./obj/desktop/src/util/validators.ts","webpack:///./obj/desktop/src/login/shared/consts.ts","webpack:///./obj/desktop/src/login/components/login-page/desktop/login-page.tsx","webpack:///./obj/desktop/src/login/components/login-page/login-page.tsx","webpack:///./obj/desktop/src/login/shared/email-form-state.ts","webpack:///./obj/desktop/src/login/components/forgot-password/desktop/forgot-password.tsx","webpack:///./obj/desktop/src/login/components/forgot-password/forgot-password.tsx","webpack:///./obj/desktop/src/login/components/reset-confirm/desktop/reset-confirm.tsx","webpack:///./obj/desktop/src/login/components/reset-confirm/reset-confirm.tsx","webpack:///./obj/desktop/src/login/shared/password-form-state.ts","webpack:///./obj/desktop/src/login/components/reset-password/desktop/reset-password.tsx","webpack:///./obj/desktop/src/login/components/reset-password/reset-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-email/desktop/sign-up-email.tsx","webpack:///./obj/desktop/src/login/components/sign-up-email/sign-up-email.tsx","webpack:///./obj/desktop/src/login/components/sign-up-password/desktop/sign-up-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-password/sign-up-password.tsx","webpack:///./obj/desktop/src/login/components/sign-up-welcome/desktop/sign-up-welcome.tsx","webpack:///./obj/desktop/src/login/components/sign-up-welcome/sign-up-welcome.tsx","webpack:///./obj/desktop/src/login/components/welcome/welcome.tsx","webpack:///./obj/desktop/src/login/components/login-routes.tsx"],"names":["module","exports","createSvgIcon","d","defaultCheckedIcon","CheckBox","defaultIcon","CheckBoxOutlineBlank","defaultIndeterminateIcon","IndeterminateCheckBox","props","ref","_props$checkedIcon","checkedIcon","classes","_props$color","color","_props$icon","icon","iconProp","_props$indeterminate","indeterminate","_props$indeterminateI","indeterminateIcon","indeterminateIconProp","inputProps","_props$size","size","other","SwitchBase","type","root","concat","capitalize","checked","disabled","fontSize","undefined","withStyles","theme","palette","text","secondary","colorPrimary","primary","main","backgroundColor","action","hoverOpacity","colorSecondary","name","passwordValidator","value","length","test","EMAIL_REGEXP","emailValidator","Consts","termsUrl","emailErrorMap","required","email","passwordErrorMap","error","LoginPage","container","data","handleSubmit","loginError","clearError","className","message","onClose","onSubmit","formField","label","fieldState","errorMap","autoFocus","password","autoComplete","endAdornment","to","checkbox","FormControlLabel","control","Checkbox","stayLoggedIn","onChange","e","target","href","Button","variant","form","id","validators","isBusy","validate","preventDefault","setBusy","grecaptcha","execute","handleLogin","token","req","$","reCaptchaToken","reset","withBusy","loginStore","authenticate","then","from","location","state","history","replace","pathname","err","componentDidMount","renderReCaptcha","this","render","LoginPageContainer","submitAction","emailSent","toString","ForgotPassword","absolute","messageClass","fullWidth","placeholder","hasError","resetEmail","loginApi","getMessage","success","response","ForgotPasswordContainer","ResetConfirm","img","src","srcSet","onClick","push","pwFormEmail","pwFormPassword","promise","callback","ResetConfirmContainer","step","submitRoute","showPassword","router","errorMessage","toggleShowPassord","path","substr","checkToken","needsLetter","needsNumber","noMatch","ResetPassword","hasFormError","resetPassword","result","resetForm","componentWillReceiveProps","nextProps","match","params","ResetPasswordContainer","SignUpEmail","invite","clientData","portalData","brandData","phone","errorCode","NUMBER_2","SignUpEmailContainer","SignUpPassword","create","getReCaptchaPromise","Promise","reject","reCaptchaCallback","resolvePromise","resolve","SignUpPasswordContainer","SignUpWelcome","firstName","readOnly","pwFormFirstName","SignUpWelcomeContainer","Welcome","LoginRoutes","exact","component"],"mappings":"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","file":"login.bundle.js?a221c7bfcfa527100776","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"form-field\":\"XSsVPMDYpmIkuaCAJVyor\",\"formField\":\"XSsVPMDYpmIkuaCAJVyor\",\"checkbox\":\"_17ORMxPjduN5CYjOyFzyzm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"img\":\"_1iJql0VKnkhP5_iILOqzf9\"};","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport SwitchBase from '../internal/SwitchBase';\nimport CheckBoxOutlineBlankIcon from '../internal/svg-icons/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '../internal/svg-icons/CheckBox';\nimport { fade } from '../styles/colorManipulator';\nimport IndeterminateCheckBoxIcon from '../internal/svg-icons/IndeterminateCheckBox';\nimport capitalize from '../utils/capitalize';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      color: theme.palette.text.secondary\n    },\n\n    /* Pseudo-class applied to the root element if `checked={true}`. */\n    checked: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `indeterminate={true}`. */\n    indeterminate: {},\n\n    /* Styles applied to the root element if `color=\"primary\"`. */\n    colorPrimary: {\n      '&$checked': {\n        color: theme.palette.primary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if `color=\"secondary\"`. */\n    colorSecondary: {\n      '&$checked': {\n        color: theme.palette.secondary.main,\n        '&:hover': {\n          backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: 'transparent'\n          }\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }\n  };\n};\nvar defaultCheckedIcon = /*#__PURE__*/React.createElement(CheckBoxIcon, null);\nvar defaultIcon = /*#__PURE__*/React.createElement(CheckBoxOutlineBlankIcon, null);\nvar defaultIndeterminateIcon = /*#__PURE__*/React.createElement(IndeterminateCheckBoxIcon, null);\nvar Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(props, ref) {\n  var _props$checkedIcon = props.checkedIcon,\n      checkedIcon = _props$checkedIcon === void 0 ? defaultCheckedIcon : _props$checkedIcon,\n      classes = props.classes,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'secondary' : _props$color,\n      _props$icon = props.icon,\n      iconProp = _props$icon === void 0 ? defaultIcon : _props$icon,\n      _props$indeterminate = props.indeterminate,\n      indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n      _props$indeterminateI = props.indeterminateIcon,\n      indeterminateIconProp = _props$indeterminateI === void 0 ? defaultIndeterminateIcon : _props$indeterminateI,\n      inputProps = props.inputProps,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      other = _objectWithoutProperties(props, [\"checkedIcon\", \"classes\", \"color\", \"icon\", \"indeterminate\", \"indeterminateIcon\", \"inputProps\", \"size\"]);\n\n  var icon = indeterminate ? indeterminateIconProp : iconProp;\n  var indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n  return /*#__PURE__*/React.createElement(SwitchBase, _extends({\n    type: \"checkbox\",\n    classes: {\n      root: clsx(classes.root, classes[\"color\".concat(capitalize(color))], indeterminate && classes.indeterminate),\n      checked: classes.checked,\n      disabled: classes.disabled\n    },\n    color: color,\n    inputProps: _extends({\n      'data-indeterminate': indeterminate\n    }, inputProps),\n    icon: /*#__PURE__*/React.cloneElement(icon, {\n      fontSize: icon.props.fontSize === undefined && size === \"small\" ? size : icon.props.fontSize\n    }),\n    checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n      fontSize: indeterminateIcon.props.fontSize === undefined && size === \"small\" ? size : indeterminateIcon.props.fontSize\n    }),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'primary', 'secondary']),\n\n  /**\n   * If `true`, the checkbox will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the input.\n   */\n  indeterminate: PropTypes.bool,\n\n  /**\n   * The icon to display when the component is indeterminate.\n   */\n  indeterminateIcon: PropTypes.node,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * The size of the checkbox.\n   * `small` is equivalent to the dense checkbox styling.\n   */\n  size: PropTypes.oneOf(['medium', 'small']),\n\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiCheckbox'\n})(Checkbox);","import { Validator } from 'formstate';\n\nexport const passwordValidator: Validator<string> = (value) => {\n    if (typeof value !== 'string' || value.length === 0) {\n        return 'required';\n    }\n\n    if (value.length < 8) {\n        return 'length';\n    }\n\n    if (!/[a-z]/i.test(value)) {\n        return 'needsLetter';\n    }\n\n    if (!/\\d/.test(value)) {\n        return 'needsNumber';\n    }\n};\n\n// Copied from app repo's Util\\EmailUtils.cs\n/* tslint:disable-next-line */\nconst EMAIL_REGEXP =\n    /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\n\nexport const emailValidator: Validator<string> = (value) => {\n    if (typeof value !== 'string' || value.length === 0) {\n        return 'required';\n    }\n\n    return EMAIL_REGEXP.test(value) ? false : 'email';\n};\n","const literal = <V extends keyof any>(v: V) => v;\n\nexport const Consts = {\n    termsUrl: literal('assets/terms/ServiceTitan_-_Interim_Customer_Portal_Terms_11.1.2020.pdf'),\n};\n","import { Button, Checkbox, FormControlLabel } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { NavLink } from 'react-router-dom';\n\nimport { LoginPageContainer } from '../login-page';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nimport styles from './login-page.less';\nimport { Consts } from 'src/login/shared/consts';\n\nconst emailErrorMap = {\n    required: null,\n    email: null,\n};\n\nconst passwordErrorMap = {\n    error: null,\n};\n\ninterface Props {\n    container: LoginPageContainer;\n}\n\nexport const LoginPage: React.SFC<Props> = observer(\n    ({ container: { data, handleSubmit, loginError, clearError } }) => (\n        <div className=\"page page-inverted login-image-background\">\n            <div className=\"page-topping\">\n                <PageError message={loginError} onClose={clearError} />\n            </div>\n\n            <div className=\"row\">\n                <div className=\"col\">\n                    <div className=\"page-title\">\n                        <h1>\n                            Welcome <br />\n                            <i>to customer portal</i>\n                        </h1>\n                    </div>\n                </div>\n                <div className=\"col\">\n                    <div className=\"card\">\n                        <form className=\"flex-form\" onSubmit={handleSubmit}>\n                            <h1>Let's log in</h1>\n                            <div className=\"card-content\">\n                                <div className={styles.formField}>\n                                    <MatField\n                                        className=\"full-width\"\n                                        type=\"email\"\n                                        name=\"email\"\n                                        label=\"Email\"\n                                        fieldState={data.email}\n                                        errorMap={emailErrorMap}\n                                        autoFocus\n                                    />\n                                </div>\n                                <div className={styles.formField}>\n                                    <MatField\n                                        className=\"full-width\"\n                                        type=\"password\"\n                                        name=\"password\"\n                                        label=\"Password\"\n                                        fieldState={data.password}\n                                        errorMap={passwordErrorMap}\n                                        autoComplete=\"new-password\"\n                                        endAdornment={\n                                            <NavLink to=\"/login/forgot\">Forgot Password</NavLink>\n                                        }\n                                    />\n                                </div>\n                                <div className={styles.checkbox}>\n                                    <FormControlLabel\n                                        control={\n                                            <Checkbox\n                                                name=\"stayLoggedIn\"\n                                                checked={data.stayLoggedIn.value}\n                                                onChange={(e) =>\n                                                    data.stayLoggedIn.onChange(e.target.checked)\n                                                }\n                                            />\n                                        }\n                                        label=\"Stay logged in\"\n                                    />\n                                </div>\n                            </div>\n                            <div className=\"space-filler\" />\n                            <div>\n                                <span>\n                                    By clicking Login below you agree to the{' '}\n                                    <a href={Consts.termsUrl} target=\"blank\">\n                                        Terms of Service\n                                    </a>\n                                </span>\n                            </div>\n                            <Button\n                                className=\"next-step-button\"\n                                type=\"submit\"\n                                variant=\"contained\"\n                                color=\"primary\"\n                                disabled={!!data.form.error}\n                            >\n                                Login\n                            </Button>\n                            <div id=\"recaptcha-div\" />\n                        </form>\n                    </div>\n                    <div className=\"centered-content\">\n                        <p className=\"last-help\">\n                            <span className=\"gray-text\">Not a member?</span>{' '}\n                            <NavLink to=\"/login/sign-up\">Request an invitation</NavLink>\n                        </p>\n                    </div>\n                </div>\n                <div className=\"col\" />\n            </div>\n        </div>\n    )\n);\n","import { FormState, FieldState } from 'formstate';\nimport { Location } from 'history';\nimport { observable, action } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { AuthenticateRequest } from 'src/api';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { emailValidator } from 'src/util/validators';\nimport { LoginStore } from 'src/login/stores/login.store';\nimport { lazyInject } from '../../ioc';\n\nimport { LoginPage } from './desktop/login-page';\n\ninterface LocationState {\n    from?: Location;\n}\n\nclass LoginFormState extends BusyFormState {\n    email = new FieldState('').validators(emailValidator);\n    password = new FieldState('').validators((value) =>\n        value && value.length >= 8 ? null : 'error'\n    );\n    stayLoggedIn = new FieldState(true);\n\n    form = new FormState({\n        email: this.email,\n        password: this.password,\n        stayLoggedIn: this.stayLoggedIn,\n        isBusy: this.isBusy,\n    });\n\n    constructor() {\n        super();\n        this.form.validate();\n    }\n}\n\n@observer\nexport class LoginPageContainer extends React.Component<RouteComponentProps<void>> {\n    @lazyInject(LoginStore) loginStore!: LoginStore;\n\n    @observable loginError: string | undefined;\n    data = new LoginFormState();\n\n    componentDidMount() {\n        renderReCaptcha(this.handleLogin, () => {\n            this.loginError = 'An error occurred with reCAPTCHA. Please try again later.';\n            this.data.setBusy(false);\n        });\n    }\n\n    render() {\n        return <LoginPage container={this} />;\n    }\n\n    handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n        e.preventDefault();\n        if (this.data.form.error) {\n            return;\n        }\n\n        this.loginError = undefined;\n        this.data.setBusy(true);\n        grecaptcha.execute();\n    };\n\n    /**\n     * @param {string} token the response token get from reCAPTCHA after user submit the form, it's used to check if the user has been verified by Google\n     */\n    @action private handleLogin = (token: string) => {\n        const req: AuthenticateRequest = {\n            email: this.data.email.$,\n            password: this.data.password.$,\n            reCaptchaToken: token,\n            stayLoggedIn: this.data.stayLoggedIn.$,\n        };\n        grecaptcha.reset(); // prepare reCAPTCHA for next use in case there was an authentication error\n        this.data.withBusy(this.loginStore.authenticate(req)).then(\n            () => {\n                const from = this.props.location.state\n                    ? (this.props.location.state as LocationState).from\n                    : undefined;\n                this.props.history.replace(from ? from.pathname : '/');\n            },\n            (err) => (this.loginError = err)\n        );\n    };\n\n    @action clearError = () => {\n        this.loginError = undefined;\n    };\n}\n","import { observable } from 'mobx';\n\nimport { BusyFormState } from 'src/util/busy-form';\nimport { FieldState, FormState } from 'formstate';\nimport { emailValidator } from 'src/util/validators';\n\nexport interface EmailActionResult {\n    message: string;\n    emailSent: boolean;\n}\n\nexport class EmailFormState extends BusyFormState {\n    @observable emailSent = false;\n    @observable message: string | undefined;\n\n    email = new FieldState('').validators(emailValidator);\n\n    form = new FormState({\n        email: this.email,\n        isBusy: this.isBusy,\n    });\n\n    constructor(private submitAction: (email: string) => Promise<EmailActionResult>) {\n        super();\n        this.form.validate();\n    }\n\n    handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n        e.preventDefault();\n        const email = this.email.$;\n        this.emailSent = false;\n        this.message = undefined;\n        this.withBusy(this.submitAction(email)).then(\n            ({ message, emailSent }) => {\n                this.message = message;\n                this.emailSent = emailSent;\n            },\n            (error) => {\n                this.message = error.toString();\n            }\n        );\n    };\n\n    clearError = () => {\n        this.message = undefined;\n    };\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ForgotPasswordContainer } from '../forgot-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n    required: null,\n    email: null,\n};\n\ninterface Props {\n    container: ForgotPasswordContainer;\n}\n\nexport const ForgotPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n    <div className=\"page page-inverted login-image-background\">\n        <div className=\"page-topping\">\n            <PageError\n                absolute\n                messageClass={data.emailSent ? 'page-note' : ''}\n                message={data.message}\n                onClose={data.clearError}\n            />\n        </div>\n\n        <div className=\"card\">\n            <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n                <h1>Reset Password</h1>\n                <div className=\"card-content\">\n                    <p>\n                        Enter the email address associated with your account, and we’ll email you a\n                        link to reset your password.\n                    </p>\n                    <div className={classnames('form-field', 'single-input')}>\n                        <MatField\n                            fullWidth\n                            type=\"email\"\n                            name=\"email\"\n                            placeholder=\"Email\"\n                            fieldState={data.email}\n                            errorMap={emailErrorMap}\n                            disabled={data.emailSent}\n                            autoFocus\n                        />\n                    </div>\n                </div>\n                <div className=\"space-filler\" />\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    disabled={data.form.hasError || data.emailSent}\n                >\n                    Send Reset Link\n                </Button>\n            </form>\n        </div>\n    </div>\n));\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { EmailFormState, EmailActionResult } from '../../shared/email-form-state';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\nimport { ResetEmailResponse } from 'src/api/model/resetEmailResponse';\n\nimport { ForgotPassword } from './desktop/forgot-password';\n\n@observer\nexport class ForgotPasswordContainer extends React.Component {\n    @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n    data = new EmailFormState((email) => this.resetEmail(email));\n\n    async resetEmail(email: string): Promise<EmailActionResult> {\n        const { data } = await this.loginApi.resetEmail({ email });\n        return {\n            message: this.getMessage(data, email),\n            emailSent: data.success,\n        };\n    }\n\n    private getMessage(response: ResetEmailResponse, email: string) {\n        return response.success\n            ? `A link to reset your password has been sent to ${email}`\n            : 'Failed to send email';\n    }\n\n    render() {\n        return <ForgotPassword container={this} />;\n    }\n}\n","import { Button } from '@material-ui/core';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ResetConfirmContainer } from '../reset-confirm';\n\nimport styles from './reset-confirm.less';\n\ninterface Props {\n    container: ResetConfirmContainer;\n}\n\nexport const ResetConfirm: React.SFC<Props> = observer(\n    ({ container: { email, handleSubmit, isBusy } }) => (\n        <div className=\"page page-inverted login-image-background\">\n            <div className=\"card\">\n                <h1>Password updated</h1>\n                <div className=\"card-content centered-content\">\n                    <p>The password for {email} has been reset.</p>\n                    <img\n                        className={styles.img}\n                        src=\"/assets/images/mountain.png\"\n                        srcSet=\"/assets/images/mountain.png, /assets/images/mountain@2x.png 2x, /assets/images/mountain@3x.png 3x\"\n                    />\n                </div>\n\n                <div className=\"space-filler\" />\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    onClick={handleSubmit}\n                    disabled={isBusy}\n                >\n                    Click here to log in\n                </Button>\n                <div id=\"recaptcha-div\" />\n            </div>\n        </div>\n    )\n);\n","import { observable, action } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { AuthenticateRequest } from 'src/api';\nimport { LoginStore } from 'src/login/stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { ResetConfirm } from './desktop/reset-confirm';\n\n@observer\nexport class ResetConfirmContainer extends React.Component<RouteComponentProps<void>> {\n    @lazyInject(LoginStore) loginStore!: LoginStore;\n\n    @observable isBusy = false;\n\n    email: string | undefined;\n    private password: string | undefined;\n\n    constructor(props: RouteComponentProps<void>) {\n        super(props);\n\n        if (!this.loginStore.pwFormEmail || !this.loginStore.pwFormPassword) {\n            this.props.history.push('/login');\n            return;\n        }\n\n        this.email = this.loginStore.pwFormEmail;\n        this.password = this.loginStore.pwFormPassword;\n    }\n\n    componentDidMount() {\n        renderReCaptcha(this.handleLogin);\n    }\n\n    render() {\n        return <ResetConfirm container={this} />;\n    }\n\n    private withBusy<T>(promise: Promise<T>): Promise<T> {\n        this.isBusy = true;\n        const callback = () => (this.isBusy = false);\n        promise.then(callback, callback);\n        return promise;\n    }\n\n    handleSubmit = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n        e.preventDefault();\n        grecaptcha.execute();\n    };\n\n    /**\n     * @param {string} token the response token get from reCAPTCHA after user submit the form, it's used to check if the user has been verified by Google\n     */\n    @action private handleLogin = (token: string) => {\n        if (!this.email || !this.password) {\n            return;\n        }\n        const req: AuthenticateRequest = {\n            email: this.email,\n            password: this.password,\n            reCaptchaToken: token,\n            stayLoggedIn: false,\n        };\n        this.withBusy(this.loginStore.authenticate(req)).then(\n            () => this.props.history.push('/'),\n            () => this.props.history.push('/login')\n        );\n    };\n}\n","import { FieldState, FormState } from 'formstate';\nimport { observable } from 'mobx';\n\nimport { LoginStore } from '../stores/login.store';\nimport { RouterStore } from 'src/core/stores/router.store';\nimport { lazyInject } from '../ioc';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { passwordValidator } from 'src/util/validators';\n\nexport interface RouteParams {\n    token: string;\n}\n\nexport class PasswordFormState extends BusyFormState {\n    @lazyInject(LoginStore) loginStore!: LoginStore;\n    @lazyInject(RouterStore) router!: RouterStore;\n\n    @observable showPassword = false;\n    @observable errorMessage: string | undefined;\n\n    password = new FieldState('').validators(passwordValidator);\n\n    private token: string | undefined;\n\n    form = new FormState({\n        password: this.password,\n        isBusy: this.isBusy,\n    }).validators(() => (!this.token || !this.loginStore.pwFormPassword) && 'invalid');\n\n    constructor(\n        public step: 1 | 2,\n        token: string,\n        private submitAction: (token: string, email: string, password: string) => Promise<boolean>,\n        private submitRoute: string\n    ) {\n        super();\n\n        if (this.step === 1) {\n            this.loginStore.pwFormPassword = undefined;\n        } else {\n            if (!this.loginStore.pwFormPassword) {\n                // go to step 1 if it was skipped\n                const path = this.router.location.pathname;\n                this.router.history.replace(path.substr(0, path.length - 2));\n            } else {\n                this.password.validators(\n                    (value) => this.loginStore.pwFormPassword !== value && 'noMatch'\n                );\n            }\n        }\n\n        this.form.validate();\n\n        this.loginStore.checkToken(token).then(\n            () => {\n                this.token = token;\n                this.form.validate();\n            },\n            (err) => (this.errorMessage = err)\n        );\n    }\n\n    handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n        e.preventDefault();\n\n        if (this.step === 1) {\n            this.loginStore.pwFormPassword = this.password.$;\n            this.router.history.push(`${this.router.location.pathname}/2`);\n            return;\n        }\n\n        const token = this.token;\n        const email = this.loginStore.pwFormEmail;\n        const password = this.password.$;\n\n        if (!token || !email || !password) {\n            return;\n        }\n\n        this.errorMessage = undefined;\n        this.withBusy(this.submitAction(token, email, password)).then(\n            (success) => {\n                if (success) {\n                    this.router.history.push(this.submitRoute);\n                } else {\n                    this.errorMessage = 'Failed to set password';\n                }\n            },\n            (error) => {\n                this.errorMessage = error.toString();\n            }\n        );\n    };\n\n    clearError = () => {\n        this.errorMessage = undefined;\n    };\n\n    toggleShowPassord = () => {\n        this.showPassword = !this.showPassword;\n    };\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ResetPasswordContainer } from '../reset-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst passwordErrorMap = {\n    required: 'This field is required.',\n    length: 'The password needs to be longer.',\n    needsLetter: 'You’re missing a letter.',\n    needsNumber: 'You’re missing a number.',\n    noMatch: 'Oops, that’s not the same password as the first one.',\n};\n\ninterface Props {\n    container: ResetPasswordContainer;\n}\n\nexport const ResetPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n    <div className=\"page page-inverted login-image-background\">\n        <div className=\"page-topping\">\n            <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n        </div>\n\n        <div className=\"card\">\n            <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n                <h1>Reset your password</h1>\n                {data.step === 1 ? (\n                    <p>\n                        Your password must be at least 8 characters long. Make sure to use 1 letter\n                        and 1 number.\n                    </p>\n                ) : (\n                    <p>Please confirm your password, we’re just being extra safe.</p>\n                )}\n                <div className={classnames('form-field', 'single-input')}>\n                    <MatField\n                        fullWidth\n                        type={data.showPassword ? 'text' : 'password'}\n                        autoFocus\n                        label={data.step === 1 ? 'New password' : 'Confirm password'}\n                        fieldState={data.password}\n                        errorMap={passwordErrorMap}\n                        disabled={data.form.hasFormError}\n                        autoComplete=\"new-password\"\n                        endAdornment={\n                            <a onClick={data.toggleShowPassord}>\n                                {data.showPassword ? 'Hide' : 'Show'}\n                            </a>\n                        }\n                    />\n                </div>\n                <div className=\"space-filler\" />\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    disabled={data.form.hasError}\n                >\n                    {data.step === 1 ? 'Continue' : 'Submit'}\n                </Button>\n            </form>\n        </div>\n    </div>\n));\n","import { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { PasswordFormState, RouteParams } from '../../shared/password-form-state';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\n\nimport { ResetPassword } from './desktop/reset-password';\nimport { RouteComponentProps } from 'react-router';\n\ninterface Props extends RouteComponentProps<RouteParams> {\n    step: 1 | 2;\n}\n\n@observer\nexport class ResetPasswordContainer extends React.Component<Props> {\n    @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n    @observable data!: PasswordFormState;\n\n    constructor(props: Props) {\n        super(props);\n        this.resetForm(props);\n    }\n\n    componentWillReceiveProps(nextProps: Readonly<Props>) {\n        if (this.props.step !== nextProps.step) {\n            this.resetForm(nextProps);\n        }\n    }\n\n    private resetForm(props: Readonly<Props>) {\n        this.data = new PasswordFormState(\n            props.step,\n            props.match.params.token,\n            this.onSubmit,\n            '/login/reset/confirm'\n        );\n    }\n\n    private onSubmit = (token: string, email: string, password: string) =>\n        this.loginApi\n            .resetPassword({ token, email, password })\n            .then((result) => result.data.success);\n\n    render() {\n        return <ResetPassword container={this} />;\n    }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpEmailContainer } from '../sign-up-email';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n    required: null,\n    email: null,\n};\n\ninterface Props {\n    container: SignUpEmailContainer;\n}\n\nexport const SignUpEmail = observer<React.SFC<Props>>(({ container: { data } }) => (\n    <div className=\"page page-inverted login-image-background\">\n        <div className=\"page-topping\">\n            <PageError\n                absolute\n                messageClass={data.emailSent ? 'page-note' : ''}\n                message={data.message}\n                onClose={data.clearError}\n            />\n        </div>\n\n        <div className=\"card\">\n            <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n                <h1>Verify your email</h1>\n                <div className=\"card-content\">\n                    <p>Enter the email address associated with your account.</p>\n                    <div className={classnames('form-field', 'single-input')}>\n                        <MatField\n                            fullWidth\n                            type=\"email\"\n                            name=\"email\"\n                            placeholder=\"Email\"\n                            fieldState={data.email}\n                            errorMap={emailErrorMap}\n                            disabled={data.emailSent}\n                            autoFocus\n                        />\n                    </div>\n                </div>\n                <div className=\"space-filler\" />\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    disabled={data.form.hasError || data.emailSent}\n                >\n                    Submit\n                </Button>\n            </form>\n        </div>\n    </div>\n));\n","import { observer } from 'mobx-react';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { InviteResponse } from 'src/api/model/inviteResponse';\nimport { EmailFormState, EmailActionResult } from '../../shared/email-form-state';\nimport { lazyInject } from '../../ioc';\nimport { InviteErrorCode, LoginApiService } from 'src/api';\n\nimport { ClientDataStore } from 'src/core/stores/client-data.store';\nimport { SignUpEmail } from './desktop/sign-up-email';\n\n@observer\nexport class SignUpEmailContainer extends React.Component {\n    @lazyInject(ClientDataStore) private clientData!: ClientDataStore;\n    @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n\n    @computed private get phone() {\n        return this.clientData.portalData && this.clientData.portalData.brandData.phone;\n    }\n\n    data = new EmailFormState((email) => this.invite(email));\n\n    async invite(email: string): Promise<EmailActionResult> {\n        const { data } = await this.loginApi.invite({ email });\n        return {\n            message: this.getMessage(data, email),\n            emailSent: data.success,\n        };\n    }\n\n    private getMessage(response: InviteResponse, email: string): string {\n        if (response.success) {\n            return `A link to join our customer portal has been sent to ${email}`;\n        }\n        if (response.errorCode === InviteErrorCode.NUMBER_2) {\n            return `Please contact the office at ${this.phone} to register.`;\n        }\n        return 'Failed to send email';\n    }\n\n    render() {\n        return <SignUpEmail container={this} />;\n    }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpPasswordContainer } from '../sign-up-password';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\nimport { Consts } from 'src/login/shared/consts';\n\nconst passwordErrorMap = {\n    required: 'This field is required.',\n    length: 'The password needs to be longer.',\n    needsLetter: 'You’re missing a letter.',\n    needsNumber: 'You’re missing a number.',\n    noMatch: 'Oops, that’s not the same password as the first one.',\n};\n\ninterface Props {\n    container: SignUpPasswordContainer;\n}\n\nexport const SignUpPassword = observer<React.SFC<Props>>(({ container: { data } }) => (\n    <div className=\"page page-inverted login-image-background\">\n        <div className=\"page-topping\">\n            <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n        </div>\n\n        <div className=\"card\">\n            <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n                <h1>Create a password</h1>\n                <div className=\"card-content\">\n                    {data.step === 1 ? (\n                        <p>\n                            Your password must be at least 8 characters long. Make sure to use 1\n                            letter and 1 number.\n                        </p>\n                    ) : (\n                        <p>Please confirm your password, we’re just being extra safe.</p>\n                    )}\n                    <div className={classnames('form-field', 'single-input')}>\n                        <MatField\n                            fullWidth\n                            type={data.showPassword ? 'text' : 'password'}\n                            autoFocus\n                            label={data.step === 1 ? 'Password' : 'Confirm password'}\n                            fieldState={data.password}\n                            errorMap={passwordErrorMap}\n                            disabled={data.form.hasFormError}\n                            autoComplete=\"new-password\"\n                            endAdornment={\n                                <a onClick={data.toggleShowPassord}>\n                                    {data.showPassword ? 'Hide' : 'Show'}\n                                </a>\n                            }\n                        />\n                    </div>\n                </div>\n                <div className=\"space-filler\" />\n                {data.step === 2 && (\n                    <span>\n                        By clicking Agree and Submit below you agree to the{' '}\n                        <a href={Consts.termsUrl} target=\"blank\">\n                            Terms of Service\n                        </a>\n                    </span>\n                )}\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    disabled={data.form.hasError}\n                >\n                    {data.step === 1 ? 'Continue' : 'Agree and Submit'}\n                </Button>\n                <div id=\"recaptcha-div\" />\n            </form>\n        </div>\n    </div>\n));\n","import { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { PasswordFormState, RouteParams } from '../../shared/password-form-state';\nimport { LoginStore } from '../../stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { LoginApiService } from 'src/api';\n\nimport { SignUpPassword } from './desktop/sign-up-password';\nimport { RouteComponentProps } from 'react-router';\n\ninterface Props extends RouteComponentProps<RouteParams> {\n    step: 1 | 2;\n}\n\n@observer\nexport class SignUpPasswordContainer extends React.Component<Props> {\n    @lazyInject(LoginApiService) private loginApi!: LoginApiService;\n    @lazyInject(LoginStore) private loginStore!: LoginStore;\n\n    @observable data!: PasswordFormState;\n    private resolvePromise: ((token: string) => void) | undefined;\n\n    constructor(props: Props) {\n        super(props);\n        this.resetForm(props);\n    }\n\n    componentWillReceiveProps(nextProps: Readonly<Props>) {\n        if (this.props.step !== nextProps.step) {\n            this.resetForm(nextProps);\n        }\n    }\n\n    componentDidMount() {\n        renderReCaptcha(this.reCaptchaCallback);\n    }\n\n    private resetForm(props: Readonly<Props>) {\n        this.data = new PasswordFormState(props.step, props.match.params.token, this.onSubmit, '/');\n    }\n\n    private onSubmit = async (token: string, email: string, password: string) => {\n        try {\n            const result = await this.loginApi.create({ token, email, password });\n            if (!result.data.success) {\n                return Promise.reject('Cannot set up password');\n            }\n\n            const reCaptchaToken = await this.getReCaptchaPromise();\n            return this.loginStore\n                .authenticate({\n                    email,\n                    password,\n                    reCaptchaToken,\n                    stayLoggedIn: false,\n                })\n                .then(() => true);\n        } catch (e) {\n            return Promise.reject(e);\n        }\n    };\n\n    private getReCaptchaPromise(): Promise<string> {\n        const promise = new Promise<string>((resolve) => (this.resolvePromise = resolve));\n        grecaptcha.execute();\n        return promise;\n    }\n\n    private reCaptchaCallback = (reCaptchaToken: string) => {\n        if (this.resolvePromise) {\n            this.resolvePromise(reCaptchaToken);\n            this.resolvePromise = undefined;\n        }\n    };\n\n    render() {\n        return <SignUpPassword container={this} />;\n    }\n}\n","import { Button } from '@material-ui/core';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpWelcomeContainer } from '../sign-up-welcome';\nimport { MatField } from 'src/core/components/mat-field';\nimport { PageError } from 'src/core/components/page-error/page-error';\n\nconst emailErrorMap = {\n    required: 'This field is required.',\n    email: 'Invalid email address.',\n};\n\ninterface Props {\n    container: SignUpWelcomeContainer;\n}\n\nexport const SignUpWelcome = observer<React.SFC<Props>>(({ container: { data } }) => (\n    <div className=\"page page-inverted login-image-background\">\n        <div className=\"page-topping\">\n            <PageError absolute message={data.errorMessage} onClose={data.clearError} />\n        </div>\n\n        <div className=\"card\">\n            <form className=\"flex-form\" onSubmit={data.handleSubmit}>\n                <h1>Welcome {data.firstName}</h1>\n                <div className=\"card-content\">\n                    <p>Confirm your email address.</p>\n                    <div className={classnames('form-field', 'single-input')}>\n                        <MatField\n                            fullWidth\n                            type=\"email\"\n                            name=\"email\"\n                            label=\"Email\"\n                            fieldState={data.email}\n                            errorMap={emailErrorMap}\n                            autoFocus\n                            readOnly\n                        />\n                    </div>\n                </div>\n                <div className=\"space-filler\" />\n                <Button\n                    type=\"submit\"\n                    variant=\"contained\"\n                    color=\"primary\"\n                    className=\"next-step-button\"\n                    disabled={data.form.hasError}\n                >\n                    Continue\n                </Button>\n            </form>\n        </div>\n    </div>\n));\n","import { FieldState, FormState } from 'formstate';\nimport { observable, computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { RouteComponentProps } from 'react-router';\n\nimport { LoginStore } from '../../stores/login.store';\nimport { lazyInject } from '../../ioc';\nimport { RouterStore } from 'src/core/stores/router.store';\nimport { BusyFormState } from 'src/util/busy-form';\nimport { emailValidator } from 'src/util/validators';\n\nimport { SignUpWelcome } from './desktop/sign-up-welcome';\n\ninterface RouteParams {\n    token: string;\n}\n\nexport class SignUpWelcomeFormState extends BusyFormState {\n    @lazyInject(LoginStore) private loginStore!: LoginStore;\n    @lazyInject(RouterStore) private router!: RouterStore;\n\n    email = new FieldState('').validators(emailValidator);\n\n    @observable errorMessage: string | undefined;\n    @computed get firstName() {\n        return this.loginStore.pwFormFirstName;\n    }\n\n    form = new FormState({\n        email: this.email,\n        isBusy: this.isBusy,\n    }).validators(() => !this.token && 'invalid');\n\n    private token: string | undefined;\n\n    constructor(token: string) {\n        super();\n\n        this.form.validate();\n\n        this.withBusy(this.loginStore.checkToken(token)).then(\n            (email) => {\n                this.email.onChange(email);\n                this.token = token;\n                this.form.validate();\n            },\n            (err) => (this.errorMessage = err)\n        );\n    }\n\n    clearError = () => {\n        this.errorMessage = undefined;\n    };\n\n    handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n        e.preventDefault();\n        this.loginStore.pwFormEmail = this.email.$;\n        this.router.history.push(`/login/sign-up/${this.token}`);\n    };\n}\n\n@observer\nexport class SignUpWelcomeContainer extends React.Component<RouteComponentProps<RouteParams>> {\n    data: SignUpWelcomeFormState;\n\n    constructor(props: RouteComponentProps<RouteParams>) {\n        super(props);\n        this.data = new SignUpWelcomeFormState(props.match.params.token);\n    }\n\n    render() {\n        return <SignUpWelcome container={this} />;\n    }\n}\n","import classnames from 'classnames';\nimport { Button } from '@material-ui/core';\nimport * as React from 'react';\nimport { RouteComponentProps, Redirect } from 'react-router';\nimport { NavLink } from 'react-router-dom';\n\nimport styles from './welcome.less';\n\nexport const Welcome: React.SFC<RouteComponentProps<void>> = (props) => (\n    <React.Fragment>\n        {}\n        <Redirect to=\"/login\" />\n        {}\n\n        {}\n    </React.Fragment>\n);\n","import * as React from 'react';\nimport { Route, Switch } from 'react-router';\n\nimport { LoginPageContainer } from './login-page/login-page';\nimport { ForgotPasswordContainer } from './forgot-password/forgot-password';\nimport { ResetConfirmContainer } from './reset-confirm/reset-confirm';\nimport { ResetPasswordContainer } from './reset-password/reset-password';\nimport { SignUpEmailContainer } from './sign-up-email/sign-up-email';\nimport { SignUpPasswordContainer } from './sign-up-password/sign-up-password';\nimport { SignUpWelcomeContainer } from './sign-up-welcome/sign-up-welcome';\nimport { Welcome } from './welcome/welcome';\nimport { ErrorPage } from 'src/core/components/error-page/error-page';\n\nexport const LoginRoutes: React.SFC = () => (\n    <Switch>\n        <Route exact path=\"/login\" component={LoginPageContainer} />\n        <Route exact path=\"/login/welcome\" component={Welcome} />\n        <Route exact path=\"/login/forgot\" component={ForgotPasswordContainer} />\n        <Route exact path=\"/login/reset/confirm\" component={ResetConfirmContainer} />\n        <Route\n            exact\n            path=\"/login/reset/:token\"\n            render={(props) => <ResetPasswordContainer {...props} step={1} />}\n        />\n        <Route\n            exact\n            path=\"/login/reset/:token/2\"\n            render={(props) => <ResetPasswordContainer {...props} step={2} />}\n        />\n        <Route exact path=\"/login/sign-up\" component={SignUpEmailContainer} />\n        <Route exact path=\"/login/sign-up/:token/welcome\" component={SignUpWelcomeContainer} />\n        <Route\n            exact\n            path=\"/login/sign-up/:token\"\n            render={(props) => <SignUpPasswordContainer {...props} step={1} />}\n        />\n        <Route\n            exact\n            path=\"/login/sign-up/:token/2\"\n            render={(props) => <SignUpPasswordContainer {...props} step={2} />}\n        />\n        <Route component={() => <ErrorPage type=\"not-found\" />} />\n    </Switch>\n);\n"],"sourceRoot":""}