{"version":3,"sources":["webpack://checkout/./src/app/ui/form/CheckboxInput.tsx","webpack://checkout/./src/app/ui/form/TextArea.tsx","webpack://checkout/./src/app/ui/form/CheckboxFormField.tsx","webpack://checkout/./src/app/formFields/mapCustomFormFieldsFromFormValues.ts","webpack://checkout/./src/app/common/utility/parseAnchor.ts","webpack://checkout/./src/app/locale/withDate.tsx","webpack://checkout/./src/app/ui/form/RadioInput.tsx","webpack://checkout/./src/app/ui/form/DynamicInput.tsx","webpack://checkout/./src/app/ui/form/MultiCheckboxControl.tsx","webpack://checkout/./src/app/ui/form/CheckboxGroupFormField.tsx","webpack://checkout/./src/app/ui/form/DynamicFormField.tsx","webpack://checkout/./src/app/locale/TranslatedLink.tsx","webpack://checkout/./src/app/customer/mapCreateAccountFromFormValues.ts","webpack://checkout/./src/app/customer/validationPatterns.ts","webpack://checkout/./src/app/customer/getEmailValidationSchema.ts","webpack://checkout/./src/app/customer/getCreateCustomerValidationSchema.ts","webpack://checkout/./src/app/customer/CreateAccountForm.tsx","webpack://checkout/./src/app/customer/EmailField.tsx","webpack://checkout/./src/app/customer/EmailLoginForm.tsx","webpack://checkout/./src/app/privacyPolicy/PrivacyPolicyField.tsx","webpack://checkout/./src/app/customer/SubscribeField.tsx","webpack://checkout/./src/app/customer/GuestForm.tsx","webpack://checkout/./src/app/privacyPolicy/getPrivacyPolicyValidationSchema.ts","webpack://checkout/./src/app/ui/icon/IconEye.tsx","webpack://checkout/./src/app/ui/icon/IconEyeSlash.tsx","webpack://checkout/./src/app/customer/PasswordField.tsx","webpack://checkout/./src/app/customer/LoginForm.tsx","webpack://checkout/./src/app/customer/mapErrorMessage.ts","webpack://checkout/./src/app/customer/Customer.tsx"],"names":["CheckboxInput","ref","additionalClassName","label","id","rest","className","type","htmlFor","TextArea","testId","disabled","labelContent","onChange","name","renderField","field","checked","value","render","mapCustomFormFieldsFromFormValues","customFieldsObject","customFields","key","fieldValue","padMonth","getMonth","toString","padDay","getDate","getFullYear","push","fieldId","parseAnchor","text","div","document","createElement","innerHTML","anchor","querySelector","anchorSiblings","split","outerHTML","createInjectHoc","LocaleContext","displayNamePrefix","pickProps","Input","Label","date","fieldType","options","placeholder","inputFormat","handleDateChange","dateValue","event","target","DynamicFormFieldType","dropdown","map","optionValue","radio","length","checkbox","Array","isArray","includes","autoComplete","calendarClassName","dateFormat","maxDate","max","Date","undefined","minDate","min","placeholderText","toUpperCase","popperClassName","selected","multiline","TextInput","password","onSelectedAll","onSelectedNone","handleSelectAllClick","preventDefault","handleSelectNoneClick","TranslatedString","href","onClick","MultiCheckboxFormField","form","values","errors","remove","handleSelectAll","checkedValues","forEach","val","handleSelectNone","handleInputChange","indexOf","FormFieldContainer","hasError","FormFieldError","renderProps","secret","fieldLabel","required","maxLength","parentFieldName","inputId","autocomplete","extraClass","fieldInputId","fieldName","labelComponent","dynamicFormFieldType","number","renderInput","items","helperLabel","rows","FormField","input","data","language","translatedString","translate","parsedString","mapCreateAccountFromFormValues","acceptsMarketingEmails","EMAIL_REGEXP","getEmailValidationSchema","email","matches","getTranslateCreateCustomerError","formFields","passwordRequirements","description","numeric","alpha","minLength","firstName","lastName","concat","getCustomFormFieldsValidationSchema","withLanguage","handleSubmit","onSubmit","mapPropsToValues","validationSchema","find","requirements","Error","getPasswordRequirements","createAccountError","isCreatingAccount","onCancel","createAccountErrorMessage","isRequestError","status","splitMessage","message","trim","Form","Fieldset","Alert","DynamicFormField","custom","Button","variant","Primary","props","onSendLoginEmail","isOpen","isSendingEmail","emailHasBeenRequested","onRequestClose","sentEmailError","sentEmail","submitForm","formEmail","modalHeaderStringId","okButton","footer","LoadingSpinner","isLoading","sent_email","TranslatedLink","error","expiry","TranslatedHtml","minutes","Math","round","Modal","additionalBodyClassName","additionalModalClassName","header","ModalHeader","shouldShowCloseButton","PrivacyPolicyCheckboxFieldLink","url","CheckboxFormField","requiresMarketingConsent","defaultShouldSubscribe","shouldSubscribe","privacyPolicy","onContinueAsGuest","privacyPolicyUrl","baseSchema","isRequired","schemaFields","oneOf","getPrivacyPolicyValidationSchema","canSubscribe","checkoutButtons","onChangeEmail","onShowLogin","fieldProps","legend","Legend","hidden","BasicFormField","PrivacyPolicyField","withIconContainer","viewBox","xmlns","d","forgotPasswordUrl","Toggle","openByDefault","toggle","rel","onSignIn","canCancel","isSignInEmailEnabled","isSigningIn","onCreateAccount","signInError","shouldShowCreateAccountLink","viewType","CustomerViewType","Login","changeEmailLink","body","mapErrorMessage","SuggestedLogin","Info","CancellableEnforcedLogin","EnforcedLogin","state","isEmailLoginFormOpen","hasRequestedLoginEmail","closeEmailLoginFormForm","setState","handleEmailLoginClicked","this","draftEmail","handleSendLoginEmail","sendLoginEmail","handleContinueAsGuest","formValues","continueAsGuest","onChangeViewType","onContinueAsGuestError","acceptsMarketingNewsletter","acceptsAbandonedCartEmails","customer","getCustomer","shouldEncourageSignIn","isGuest","handleSignIn","credentials","signIn","onSignInError","handleCreateAccount","createAccount","onAccountCreated","showCreateAccount","CreateAccount","handleCancelCreateAccount","clearError","handleCancelSignIn","Guest","handleChangeEmail","handleShowLogin","componentDidMount","onReady","shouldRenderGuestForm","shouldRenderCreateAccountForm","shouldRenderLoginForm","renderEmailLoginLinkForm","renderLoginForm","renderGuestForm","renderCreateAccountForm","checkEmbeddedSupport","checkoutButtonIds","deinitializeCustomer","initializeCustomer","isContinuingAsGuest","isInitializing","onUnhandledError","CheckoutButtonList","deinitialize","initialize","methodIds","onError","isSendingSignInEmail","signInEmailError","signInEmail","customerAccountFields","isEmbedded","isGuestEnabled","isAccountCreationEnabled","mapToWithCheckoutCustomerProps","checkoutService","checkoutState","getBillingAddress","getCustomerAccountFields","getCheckout","getSignInEmail","getConfig","getSignInError","getSignInEmailError","getCreateCustomerAccountError","isInitializingCustomer","isCreatingCustomerAccount","billingAddress","checkout","config","shopperConfig","showNewsletterSignup","checkoutSettings","remoteCheckoutProviders","createCustomerAccount","sendSignInEmail","defaultNewsletterSignup","links","forgotPasswordLink","guestCheckoutEnabled","signInCustomer","withCheckout"],"mappings":"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","file":"customer-9c4f772b.js","sourcesContent":["import classNames from 'classnames';\nimport React, { forwardRef, ReactNode, Ref } from 'react';\n\nimport Input, { InputProps } from './Input';\nimport Label from './Label';\n\nexport interface CheckboxInputProps extends InputProps {\n    additionalClassName?: string;\n    label: ReactNode;\n    value: string;\n    checked: boolean;\n}\n\nconst CheckboxInput = forwardRef((\n    {\n        additionalClassName,\n        label,\n        id,\n        ...rest\n    }: CheckboxInputProps,\n    ref: Ref<HTMLInputElement>\n) => (\n    <>\n        <Input\n            { ...rest }\n            className={ classNames(\n                'form-checkbox',\n                'optimizedCheckout-form-checkbox',\n                additionalClassName\n            ) }\n            id={ id }\n            ref={ ref }\n            type=\"checkbox\"\n        />\n        <Label htmlFor={ id }>\n            { label }\n        </Label>\n    </>\n));\n\nexport default CheckboxInput;\n","import classNames from 'classnames';\nimport React, { forwardRef, Ref, TextareaHTMLAttributes } from 'react';\n\nexport interface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n    additionalClassName?: string;\n    testId?: string;\n}\n\nconst TextArea = forwardRef((\n    { additionalClassName, testId, className, ...rest }: TextAreaProps,\n    ref: Ref<HTMLTextAreaElement>\n) => (\n    <textarea\n        { ...rest }\n        className={ className || classNames(\n            'form-input',\n            'optimizedCheckout-form-input',\n            additionalClassName\n        ) }\n        data-test={ testId }\n        ref={ ref }\n    />\n));\n\nexport default TextArea;\n","import { FieldProps } from 'formik';\nimport { kebabCase } from 'lodash';\nimport React, { memo, useCallback, Fragment, FunctionComponent, ReactNode } from 'react';\n\nimport BasicFormField from './BasicFormField';\nimport CheckboxInput from './CheckboxInput';\nimport FormFieldError from './FormFieldError';\n\nexport interface CheckboxFormFieldProps {\n    additionalClassName?: string;\n    disabled?: boolean;\n    name: string;\n    id?: string;\n    labelContent: ReactNode;\n    onChange?(isChecked: boolean): void;\n}\n\nconst CheckboxFormField: FunctionComponent<CheckboxFormFieldProps> = ({\n    additionalClassName,\n    disabled = false,\n    labelContent,\n    onChange,\n    name,\n    id,\n}) => {\n    const renderField = useCallback(({ field }: FieldProps) => (\n        <Fragment>\n            { <CheckboxInput\n                { ...field }\n                checked={ !!field.value }\n                disabled={ disabled }\n                id={ id || field.name }\n                label={ labelContent }\n            /> }\n\n            <FormFieldError\n                name={ name }\n                testId={ `${kebabCase(name)}-field-error-message` }\n            />\n        </Fragment>\n    ), [\n        disabled,\n        id,\n        labelContent,\n        name,\n    ]);\n\n    return <BasicFormField\n        additionalClassName={ additionalClassName }\n        name={ name }\n        onChange={ onChange }\n        render={ renderField }\n    />;\n};\n\nexport default memo(CheckboxFormField);\n","import { forIn, isDate, padStart } from 'lodash';\n\nexport default function mapCustomFormFieldsFromFormValues(\n    customFieldsObject: { [id: string]: any }\n): Array<{fieldId: string; fieldValue: string}> {\n    const customFields: Array<{fieldId: string; fieldValue: string}> = [];\n    forIn(customFieldsObject, (value, key) => {\n        let fieldValue: string;\n\n        if (isDate(value)) {\n            const padMonth = padStart((value.getMonth() + 1).toString(), 2, '0');\n            const padDay = padStart((value.getDate()).toString(), 2, '0');\n            fieldValue = `${value.getFullYear()}-${padMonth}-${padDay}`;\n        } else {\n            fieldValue = value;\n        }\n\n        customFields.push({\n            fieldId: key,\n            fieldValue,\n        });\n    });\n\n    return customFields;\n}\n","export default function parseAnchor(text: string): string[] {\n    const div = document.createElement('div');\n    div.innerHTML = text;\n\n    const anchor = div.querySelector('a');\n\n    if (!anchor) {\n        return [];\n    }\n\n    const anchorSiblings = div.innerHTML.split(anchor.outerHTML);\n\n    return [ anchorSiblings[0], anchor.text, anchorSiblings[1] ];\n}\n","import { createInjectHoc, InjectHoc } from '../common/hoc';\n\nimport LocaleContext from './LocaleContext';\n\nexport interface WithDateProps {\n    date: {\n        inputFormat: string;\n    };\n}\n\nconst withDate: InjectHoc<WithDateProps> = createInjectHoc(LocaleContext, {\n    displayNamePrefix: 'withDate',\n    pickProps: (value, key) => key === 'date' && !!value,\n});\n\nexport default withDate;\n","import classNames from 'classnames';\nimport React, { forwardRef, ReactNode, Ref } from 'react';\n\nimport Input, { InputProps } from './Input';\nimport Label from './Label';\n\nexport interface RadioInputProps extends InputProps {\n    additionalClassName?: string;\n    label: ReactNode;\n    value: string;\n    checked: boolean;\n}\n\nconst RadioInput = forwardRef((\n    {\n        additionalClassName,\n        label,\n        value,\n        checked,\n        id,\n        ...rest\n    }: RadioInputProps,\n    ref: Ref<HTMLInputElement>\n) => (\n    <>\n        <Input\n            { ...rest }\n            checked={ checked }\n            className={ classNames(\n                'form-radio',\n                'optimizedCheckout-form-radio',\n                additionalClassName\n            ) }\n            id={ id }\n            ref={ ref }\n            type=\"radio\"\n            value={ value }\n        />\n        <Label htmlFor={ id }>\n            { label }\n        </Label>\n    </>\n));\n\nexport default RadioInput;\n","import { FormFieldItem } from '@bigcommerce/checkout-sdk';\nimport { isDate, noop } from 'lodash';\nimport React, { memo, useCallback, FunctionComponent } from 'react';\nimport ReactDatePicker from 'react-datepicker';\n\nimport { withDate, WithDateProps } from '../../locale';\n\nimport CheckboxInput from './CheckboxInput';\nimport DynamicFormFieldType from './DynamicFormFieldType';\nimport { InputProps } from './Input';\nimport RadioInput from './RadioInput';\nimport TextArea from './TextArea';\nimport TextInput from './TextInput';\n\nexport interface DynamicInputProps extends InputProps {\n    id: string;\n    additionalClassName?: string;\n    value?: string | string[];\n    rows?: number;\n    fieldType?: DynamicFormFieldType;\n    options?: FormFieldItem[];\n}\n\nconst DynamicInput: FunctionComponent<DynamicInputProps & WithDateProps> = ({\n    additionalClassName,\n    date,\n    fieldType,\n    id,\n    name,\n    onChange = noop,\n    options,\n    placeholder,\n    value,\n    ...rest\n}) => {\n    const { inputFormat } = date;\n    const handleDateChange = useCallback((dateValue, event) => onChange({\n        ...event,\n        target: {\n            name,\n            value: dateValue,\n        },\n    }), [\n        onChange,\n        name,\n    ]);\n\n    switch (fieldType) {\n    case DynamicFormFieldType.dropdown:\n        return (\n            <select\n                { ...rest as any }\n                className=\"form-select optimizedCheckout-form-select\"\n                data-test={ `${id}-select` }\n                id={ id }\n                name={ name }\n                onChange={ onChange }\n                value={ value === null ? '' : value }\n            >\n                { placeholder &&\n                    <option value=\"\">\n                        { placeholder }\n                    </option> }\n                { options && options.map(({ label, value: optionValue }) =>\n                    <option\n                        key={ optionValue }\n                        value={ optionValue }\n                    >\n                        { label }\n                    </option>\n                ) }\n            </select>\n        );\n\n    case DynamicFormFieldType.radio:\n        if (!options || !options.length) {\n            return null;\n        }\n\n        return <>\n            { options.map(({ label, value: optionValue }) =>\n                <RadioInput\n                    { ...rest }\n                    checked={ optionValue === value }\n                    id={ `${id}-${optionValue}` }\n                    key={ optionValue }\n                    label={ label }\n                    name={ name }\n                    onChange={ onChange }\n                    testId={ `${id}-${optionValue}-radio` }\n                    value={ optionValue }\n                />) }\n        </>;\n\n    case DynamicFormFieldType.checkbox:\n        if (!options || !options.length) {\n            return null;\n        }\n\n        return <>\n            { options.map(({ label, value: optionValue }) =>\n                <CheckboxInput\n                    { ...rest }\n                    checked={ Array.isArray(value) ? value.includes(optionValue) : false }\n                    id={ `${id}-${optionValue}` }\n                    key={ optionValue }\n                    label={ label }\n                    name={ name }\n                    onChange={ onChange }\n                    testId={ `${id}-${optionValue}-checkbox` }\n                    value={ optionValue }\n                />) }\n        </>;\n\n    case DynamicFormFieldType.date:\n        return (\n            <ReactDatePicker\n                { ...rest as any }\n                autoComplete=\"off\"\n                // FIXME: we can avoid this by simply using onChangeRaw, but it's not being triggered properly\n                // https://github.com/Hacker0x01/react-datepicker/issues/1357\n                // onChangeRaw={ rest.onChange }\n                calendarClassName=\"optimizedCheckout-contentPrimary\"\n                className=\"form-input optimizedCheckout-form-input\"\n                dateFormat={ inputFormat }\n                maxDate={ rest.max ? new Date(`${rest.max}T00:00:00Z`) : undefined }\n                minDate={ rest.min ? new Date(`${rest.min}T00:00:00Z`) : undefined }\n                name={ name }\n                onChange={ handleDateChange }\n                placeholderText={ inputFormat.toUpperCase() }\n                popperClassName=\"optimizedCheckout-contentPrimary\"\n                selected={ isDate(value) ? value : undefined }\n            />\n        );\n\n    case DynamicFormFieldType.multiline:\n        return (\n            <TextArea\n                { ...rest as any }\n                id={ id }\n                name={ name }\n                onChange={ onChange }\n                testId={ `${id}-text` }\n                type={ fieldType }\n                value={ value }\n            />\n        );\n\n    default:\n        return (\n            <TextInput\n                { ...rest }\n                id={ id }\n                name={ name }\n                onChange={ onChange }\n                testId={ `${id}-${ fieldType === DynamicFormFieldType.password ?\n                    'password' :\n                    'text' }` }\n                type={ fieldType }\n                value={ value }\n            />\n        );\n    }\n};\n\nexport default memo(withDate(DynamicInput));\n","import React, { memo, useCallback, FunctionComponent, MouseEvent } from 'react';\n\nimport { TranslatedString } from '../../locale';\n\nimport './MultiCheckboxControl.scss';\n\nexport interface MultiCheckboxControlProps {\n    testId?: string;\n    onSelectedAll(): void;\n    onSelectedNone(): void;\n}\n\nconst MultiCheckboxControl: FunctionComponent<MultiCheckboxControlProps> = ({\n    testId,\n    onSelectedAll,\n    onSelectedNone,\n}) => {\n    const handleSelectAllClick = useCallback((event: MouseEvent) => {\n        event.preventDefault();\n        onSelectedAll();\n    }, [onSelectedAll]);\n\n    const handleSelectNoneClick = useCallback((event: MouseEvent) => {\n        event.preventDefault();\n        onSelectedNone();\n    }, [onSelectedNone]);\n\n    return <ul className=\"multiCheckbox--controls\">\n        <li className=\"multiCheckbox--control\">\n            <TranslatedString id=\"address.select\" />\n        </li>\n\n        <li className=\"multiCheckbox--control\">\n            <a\n                data-test={ `${testId}Checkbox-all-button` }\n                href=\"#\"\n                onClick={ handleSelectAllClick }\n            >\n                <TranslatedString id=\"address.select_all\" />\n            </a>\n        </li>\n\n        <li className=\"multiCheckbox--control\">\n            <a\n                data-test={ `${testId}Checkbox-none-button` }\n                href=\"#\"\n                onClick={ handleSelectNoneClick }\n            >\n                <TranslatedString id=\"address.select_none\" />\n            </a>\n        </li>\n    </ul>;\n};\n\nexport default memo(MultiCheckboxControl);\n","import { FormFieldItem } from '@bigcommerce/checkout-sdk';\nimport { getIn, FieldArray, FieldArrayRenderProps } from 'formik';\nimport { difference, kebabCase, noop, pick } from 'lodash';\nimport React, { memo, useCallback, ChangeEvent, FunctionComponent, ReactNode } from 'react';\n\nimport DynamicFormFieldType from './DynamicFormFieldType';\nimport DynamicInput from './DynamicInput';\nimport FormFieldContainer from './FormFieldContainer';\nimport FormFieldError from './FormFieldError';\nimport MultiCheckboxControl from './MultiCheckboxControl';\n\nexport interface CheckboxGroupFormFieldProps {\n    id: string;\n    label: ReactNode;\n    name: string;\n    options: FormFieldItem[];\n    onChange?(values: string[]): void;\n}\n\ntype MultiCheckboxFormFieldProps = (\n    CheckboxGroupFormFieldProps &\n    Pick<FieldArrayRenderProps, 'push' | 'remove' | 'pop' | 'form'>\n);\n\nconst MultiCheckboxFormField: FunctionComponent<MultiCheckboxFormFieldProps> = ({\n    form: { values, errors },\n    id,\n    label,\n    name,\n    onChange = noop,\n    options,\n    push,\n    remove,\n}) => {\n    const handleSelectAll = useCallback(() => {\n        const checkedValues: string[] = getIn(values, name) || [];\n\n        difference(options.map(({ value }) => value), checkedValues)\n            .forEach(val => push(val));\n\n        onChange(getIn(values, name));\n    }, [\n        name,\n        onChange,\n        options,\n        push,\n        values,\n    ]);\n\n    const handleSelectNone = useCallback(() => {\n        const checkedValues: string[] = getIn(values, name) || [];\n\n        checkedValues.forEach(() => remove(0));\n\n        onChange(getIn(values, name));\n    }, [\n        name,\n        onChange,\n        remove,\n        values,\n    ]);\n\n    const handleInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n        const checkedValues: string[] = getIn(values, name) || [];\n        const { value, checked } = event.target;\n\n        if (checked) {\n            push(value);\n        } else {\n            remove(checkedValues.indexOf(value));\n        }\n\n        onChange(getIn(values, name));\n    }, [\n        name,\n        onChange,\n        push,\n        remove,\n        values,\n    ]);\n\n    return <FormFieldContainer hasError={ getIn(errors, name) && getIn(errors, name).length }>\n        { label }\n\n        { options.length > 1 && <MultiCheckboxControl\n            onSelectedAll={ handleSelectAll }\n            onSelectedNone={ handleSelectNone }\n            testId={ id }\n        /> }\n\n        <DynamicInput\n            fieldType={ DynamicFormFieldType.checkbox }\n            id={ id }\n            name={ name }\n            onChange={ handleInputChange }\n            options={ options }\n            value={ getIn(values, name) || [] }\n        />\n\n        <FormFieldError\n            name={ name }\n            testId={ `${kebabCase(name)}-field-error-message` }\n        />\n    </FormFieldContainer>;\n};\n\nconst CheckboxGroupFormField: FunctionComponent<CheckboxGroupFormFieldProps> = ({\n    id,\n    label,\n    name,\n    onChange,\n    options,\n}) => {\n    const renderField = useCallback((renderProps: FieldArrayRenderProps) => (\n        <MultiCheckboxFormField\n            id={ id }\n            label={ label }\n            name={ name }\n            onChange={ onChange }\n            options={ options }\n            { ...pick(renderProps, [\n                'form',\n                'pop',\n                'push',\n                'remove',\n            ]) }\n        />\n    ), [\n        id,\n        label,\n        name,\n        onChange,\n        options,\n    ]);\n\n    return <FieldArray\n        name={ name }\n        render={ renderField }\n    />;\n};\n\nexport default memo(CheckboxGroupFormField);\n","import { FormField as FormFieldType } from '@bigcommerce/checkout-sdk';\nimport { FieldProps } from 'formik';\nimport React, { memo, useCallback, useMemo, FunctionComponent, ReactNode } from 'react';\n\nimport { TranslatedString } from '../../locale';\n\nimport CheckboxGroupFormField from './CheckboxGroupFormField';\nimport DynamicFormFieldType from './DynamicFormFieldType';\nimport DynamicInput from './DynamicInput';\nimport FormField from './FormField';\nimport Label from './Label';\n\nexport interface DynamicFormFieldOption {\n    code: string;\n    name: string;\n}\n\nexport interface DynamicFormFieldProps {\n    field: FormFieldType;\n    inputId?: string;\n    extraClass?: string;\n    autocomplete?: string;\n    parentFieldName?: string;\n    placeholder?: string;\n    label?: ReactNode;\n    onChange?(value: string | string[]): void;\n}\n\nconst DynamicFormField: FunctionComponent<DynamicFormFieldProps>  = ({\n    field: {\n        fieldType,\n        type,\n        secret,\n        name,\n        label: fieldLabel,\n        required,\n        options,\n        max,\n        min,\n        maxLength,\n    },\n    parentFieldName,\n    onChange,\n    placeholder,\n    inputId,\n    autocomplete,\n    label,\n    extraClass,\n}) => {\n    const fieldInputId = inputId || name;\n    const fieldName = parentFieldName ? `${parentFieldName}.${name}` : name;\n\n    const labelComponent = useMemo(() => (\n        <Label htmlFor={ fieldInputId }>\n            { label || fieldLabel }\n            { !required &&\n                <>\n                    { ' ' }\n                    <small className=\"optimizedCheckout-contentSecondary\">\n                        <TranslatedString id=\"common.optional_text\" />\n                    </small>\n                </> }\n        </Label>\n    ), [\n        fieldInputId,\n        fieldLabel,\n        required,\n        label,\n    ]);\n\n    const dynamicFormFieldType = useMemo((): DynamicFormFieldType => {\n        if (fieldType === 'text') {\n            if (type === 'integer') {\n                return DynamicFormFieldType.number;\n            }\n\n            return secret ?\n                DynamicFormFieldType.password :\n                DynamicFormFieldType.text;\n        }\n\n        return fieldType as DynamicFormFieldType;\n    }, [fieldType, type, secret]);\n\n    const renderInput = useCallback(({ field }: FieldProps<string>) => (\n        <DynamicInput\n            { ...field }\n            autoComplete={ autocomplete }\n            fieldType={ dynamicFormFieldType }\n            id={ fieldInputId }\n            max={ max }\n            maxLength={ maxLength || undefined }\n            min={ min }\n            options={ options && options.items }\n            placeholder={ placeholder || (options && options.helperLabel) }\n            rows={ options && (options as any).rows }\n        />\n    ), [\n        fieldInputId,\n        max,\n        maxLength,\n        min,\n        options,\n        placeholder,\n        dynamicFormFieldType,\n        autocomplete,\n    ]);\n\n    return (\n        <div className={ `dynamic-form-field ${extraClass}` }>\n            { fieldType === DynamicFormFieldType.checkbox ?\n                <CheckboxGroupFormField\n                    id={ fieldInputId }\n                    label={ labelComponent }\n                    name={ fieldName }\n                    onChange={ onChange }\n                    options={ (options && options.items) || [] }\n                /> :\n                <FormField\n                    input={ renderInput }\n                    label={ labelComponent }\n                    name={ fieldName }\n                    onChange={ onChange }\n                /> }\n        </div>\n    );\n};\n\nexport default memo(DynamicFormField);\n","import React, { FunctionComponent, MouseEventHandler } from 'react';\n\nimport { preventDefault } from '../common/dom';\nimport { parseAnchor } from '../common/utility';\n\nimport withLanguage, { WithLanguageProps } from './withLanguage';\nimport { TranslatedStringProps } from './TranslatedString';\n\nexport type TranslatedLinkProps = TranslatedStringProps & {\n    testId?: string;\n    onClick: MouseEventHandler;\n};\n\nconst TranslatedLink: FunctionComponent<TranslatedLinkProps & WithLanguageProps> = ({\n    data,\n    id,\n    language,\n    onClick,\n    testId,\n}) => {\n    const translatedString = language.translate(id, data);\n    const parsedString = parseAnchor(translatedString);\n\n    return parsedString.length ?\n        <>\n            { parsedString[0] }\n            <a\n                data-test={ testId }\n                href=\"#\"\n                onClick={ preventDefault(onClick) }\n            >\n                { parsedString[1] }\n            </a>\n            { parsedString[2] }\n        </> :\n        <>{ translatedString }</>;\n};\n\nexport default withLanguage(TranslatedLink);\n","import { CustomerAccountRequestBody } from '@bigcommerce/checkout-sdk';\n\nimport { mapCustomFormFieldsFromFormValues } from '../formFields';\n\nimport { CreateAccountFormValues } from './getCreateCustomerValidationSchema';\n\nexport default function mapCreateAccountFromFormValues(\n    { acceptsMarketingEmails, customFields, ...values }: CreateAccountFormValues\n): CustomerAccountRequestBody {\n    return {\n        ...values,\n        acceptsMarketingEmails: acceptsMarketingEmails && acceptsMarketingEmails.length > 0,\n        customFields: mapCustomFormFieldsFromFormValues(customFields),\n    };\n}\n","// NOTE: This is a legacy regex used to create accounts, more flexible than the current used one\n// we need to keep this regex for login validation as accounts might have been created using this regex\nexport const EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;\n","import { LanguageService } from '@bigcommerce/checkout-sdk';\nimport { object, string, ObjectSchema } from 'yup';\n\nimport { EMAIL_REGEXP } from './validationPatterns';\n\nexport interface EmailValidationSchemaOptions {\n    language: LanguageService;\n}\n\nexport default function getEmailValidationSchema({\n    language,\n}: EmailValidationSchemaOptions): ObjectSchema<{ email: string }> {\n    return object({\n        email: string()\n            .max(256)\n            .matches(EMAIL_REGEXP, language.translate('customer.email_invalid_error'))\n            .required(language.translate('customer.email_required_error')),\n    });\n}\n","import { FormField, LanguageService } from '@bigcommerce/checkout-sdk';\nimport { memoize } from '@bigcommerce/memoize';\nimport { object, string, ObjectSchema } from 'yup';\n\nimport { getCustomFormFieldsValidationSchema, CustomFormFieldValues, TranslateValidationErrorFunction } from '../formFields';\n\nimport getEmailValidationSchema from './getEmailValidationSchema';\nimport { PasswordRequirements } from './getPasswordRequirements';\n\nexport type CreateAccountFormValues = {\n    firstName: string;\n    lastName: string;\n    email: string;\n    password: string;\n    acceptsMarketingEmails?: string[];\n    token?: string;\n} & CustomFormFieldValues;\n\nexport interface CreateCustomerValidationSchema {\n    formFields: FormField[];\n    language: LanguageService;\n    passwordRequirements: PasswordRequirements;\n}\n\nfunction getTranslateCreateCustomerError(language?: LanguageService): TranslateValidationErrorFunction {\n    return (type, { label, min, max }) => {\n        if (!language) {\n            return;\n        }\n\n        if (type === 'required') {\n            return language.translate('customer.required_error', { label });\n        }\n\n        if (type === 'max' && max) {\n            return language.translate('customer.max_error', { label, max });\n        }\n\n        if (type === 'min' && min) {\n            return language.translate('customer.min_error', { label, min });\n        }\n\n        if (type === 'invalid') {\n            return language.translate('customer.invalid_characters_error', { label });\n        }\n\n        return;\n    };\n}\n\nexport default memoize(function getCreateCustomerValidationSchema({\n    formFields,\n    language,\n    passwordRequirements: { description, numeric, alpha, minLength },\n}: CreateCustomerValidationSchema): ObjectSchema<CreateAccountFormValues> {\n    return object({\n            firstName: string().required(language.translate('address.first_name_required_error')),\n            lastName: string().required(language.translate('address.last_name_required_error')),\n            password: string()\n                .required(description || language.translate('customer.password_required_error'))\n                .matches(numeric, description || language.translate('customer.password_number_required_error'))\n                .matches(alpha, description || language.translate('customer.password_letter_required_error'))\n                .min(minLength, description || language.translate('customer.password_under_minimum_length_error'))\n                .max(100, language.translate('customer.password_over_maximum_length_error')),\n        })\n        .concat(getEmailValidationSchema({ language }))\n        .concat(getCustomFormFieldsValidationSchema({\n            formFields,\n            translate: getTranslateCreateCustomerError(language),\n        }));\n});\n","import { FormField } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport { noop } from 'lodash';\nimport React, { useMemo, FunctionComponent } from 'react';\n\nimport { preventDefault } from '../common/dom';\nimport { isRequestError } from '../common/error';\nimport { withLanguage, TranslatedString, WithLanguageProps } from '../locale';\nimport { Alert, AlertType } from '../ui/alert';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { DynamicFormField, Fieldset, Form } from '../ui/form';\n\nimport getCreateCustomerValidationSchema, { CreateAccountFormValues } from './getCreateCustomerValidationSchema';\nimport getPasswordRequirements from './getPasswordRequirements';\nimport './CreateAccountForm.scss';\n\nexport interface CreateAccountFormProps {\n    formFields: FormField[];\n    createAccountError?: Error;\n    isCreatingAccount?: boolean;\n    onCancel?(): void;\n    onSubmit?(values: CreateAccountFormValues): void;\n}\n\nconst CreateAccountForm: FunctionComponent<CreateAccountFormProps & WithLanguageProps & FormikProps<CreateAccountFormValues>> = ({\n    formFields,\n    createAccountError,\n    isCreatingAccount,\n    onCancel,\n}) => {\n    const createAccountErrorMessage = useMemo(() => {\n        if (!createAccountError) {\n            return;\n        }\n\n        if (isRequestError(createAccountError) && createAccountError.status === 409) {\n            const splitMessage = createAccountError.message.split(':');\n\n            if (splitMessage.length > 1) {\n                return <TranslatedString\n                    data={ { email:  splitMessage[1].trim() } }\n                    id=\"customer.email_in_use_text\"\n                />;\n            }\n\n            return <TranslatedString id=\"customer.unknown_email_in_use_text\" />;\n        }\n\n        return createAccountError.message;\n    }, [createAccountError]);\n\n    return (<>\n        <Form\n            className=\"checkout-form\"\n            id=\"checkout-customer-returning\"\n            testId=\"checkout-customer-returning\"\n        >\n            <Fieldset>\n                { createAccountErrorMessage && <Alert\n                    type={ AlertType.Error }\n                >\n                    { createAccountErrorMessage }\n                </Alert> }\n                <div className=\"create-account-form\">\n                    { formFields.map(field => (\n                        <DynamicFormField\n                            autocomplete={ field.name }\n                            extraClass={ `dynamic-form-field--${field.name}` }\n                            field={ field }\n                            key={ field.id }\n                            parentFieldName={ field.custom ? 'customFields'  : undefined }\n                        />\n                    )) }\n                </div>\n            </Fieldset>\n\n           <div className=\"form-actions\">\n                <Button\n                    disabled={ isCreatingAccount }\n                    id=\"checkout-customer-create\"\n                    testId=\"customer-continue-create\"\n                    type=\"submit\"\n                    variant={ ButtonVariant.Primary }\n                >\n                    <TranslatedString id=\"customer.create_account_action\" />\n                </Button>\n\n                <a\n                    className=\"button optimizedCheckout-buttonSecondary\"\n                    data-test=\"customer-cancel-button\"\n                    href=\"#\"\n                    id=\"checkout-customer-cancel\"\n                    onClick={ preventDefault(onCancel) }\n                >\n                    <TranslatedString id=\"common.cancel_action\" />\n                </a>\n            </div>\n        </Form>\n    </>);\n};\n\nexport default withLanguage(withFormik<CreateAccountFormProps & WithLanguageProps, CreateAccountFormValues>({\n    handleSubmit: (values, { props: { onSubmit = noop } }) => {\n        onSubmit(values);\n    },\n    mapPropsToValues: () => ({\n        firstName: '',\n        lastName: '',\n        email: '',\n        password: '',\n        customFields: {},\n        acceptsMarketingEmails: [],\n    }),\n    validationSchema: ({\n        language,\n        formFields,\n    }: CreateAccountFormProps & WithLanguageProps) => {\n        const passwordRequirements = formFields.find(({ requirements }) => requirements)?.requirements;\n\n        if (!passwordRequirements) {\n            throw new Error('Password requirements missing');\n        }\n\n        const schema = getCreateCustomerValidationSchema({\n            language,\n            formFields,\n            passwordRequirements: getPasswordRequirements(passwordRequirements),\n        });\n\n        return schema;\n    },\n})(CreateAccountForm));\n","import { FieldProps } from 'formik';\nimport React, { memo, useCallback, useMemo, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { FormField, TextInput } from '../ui/form';\n\nexport interface EmailFieldProps {\n    onChange?(value: string): void;\n}\n\nconst EmailField: FunctionComponent<EmailFieldProps>  = ({\n    onChange,\n}) => {\n    const renderInput = useCallback((props: FieldProps) => (\n        <TextInput\n            { ...props.field }\n            autoComplete={ props.field.name }\n            id={ props.field.name }\n            type=\"email\"\n        />\n    ), []);\n\n    const labelContent = useMemo(() => (\n        <TranslatedString id=\"customer.email_label\" />\n    ), []);\n\n    return <FormField\n        input={ renderInput }\n        labelContent={ labelContent }\n        name=\"email\"\n        onChange={ onChange }\n    />;\n};\n\nexport default memo(EmailField);\n","import { SignInEmail } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport { noop } from 'lodash';\nimport React, { memo, useMemo, FunctionComponent } from 'react';\n\nimport { withLanguage, TranslatedHtml, TranslatedLink, TranslatedString, WithLanguageProps } from '../locale';\nimport { Alert, AlertType } from '../ui/alert';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { Form } from '../ui/form';\nimport { LoadingSpinner } from '../ui/loading';\nimport { Modal, ModalHeader } from '../ui/modal';\n\nimport getEmailValidationSchema from './getEmailValidationSchema';\nimport EmailField from './EmailField';\n\nexport interface EmailLoginFormProps {\n    email?: string;\n    isOpen: boolean;\n    isSendingEmail?: boolean;\n    emailHasBeenRequested?: boolean;\n    sentEmail?: SignInEmail;\n    sentEmailError?: any;\n    onRequestClose?(): void;\n    onSendLoginEmail?(values: EmailLoginFormValues): void;\n}\n\nexport interface EmailLoginFormValues {\n    email: string;\n}\n\nconst EmailLoginForm: FunctionComponent<EmailLoginFormProps & WithLanguageProps & FormikProps<EmailLoginFormValues>> = ({\n    email,\n    isOpen,\n    isSendingEmail = false,\n    emailHasBeenRequested,\n    onRequestClose = noop,\n    sentEmailError,\n    sentEmail,\n    submitForm,\n    values: {\n        email: formEmail,\n    },\n}) => {\n    const modalHeaderStringId = useMemo(() => {\n        if (emailHasBeenRequested) {\n            if (sentEmailError) {\n                return 'common.error_heading';\n            }\n\n            return 'login_email.sent_header';\n        }\n\n        if (email) {\n            return 'login_email.header_with_email';\n        }\n\n        return 'login_email.header';\n    }, [emailHasBeenRequested, sentEmailError, email]);\n\n    const okButton = useMemo(() => (\n        <div className=\"modal-footer\">\n            <Button onClick={ onRequestClose }>\n                <TranslatedString id=\"common.ok_action\" />\n            </Button>\n        </div>\n    ), [onRequestClose]);\n\n    const footer = useMemo(() => {\n        if (sentEmailError && sentEmailError.status === 429) {\n            return okButton;\n        }\n\n        if (emailHasBeenRequested && !sentEmailError) {\n            if (isSendingEmail) {\n                return <LoadingSpinner isLoading />;\n            }\n\n            if (sentEmail && sentEmail.sent_email === 'reset_password') {\n                return okButton;\n            }\n\n            return (\n                <p>\n                    <TranslatedLink\n                        id=\"login_email.resend_link\"\n                        onClick={ submitForm }\n                    />\n                    <TranslatedLink\n                        id=\"login_email.use_password_link\"\n                        onClick={ onRequestClose }\n                    />\n                </p>\n            );\n        }\n\n        return (\n            <div className=\"modal-footer\">\n                <Button\n                    className=\"optimizedCheckout-buttonSecondary\"\n                    onClick={ onRequestClose }\n                    type=\"button\"\n                >\n                    <TranslatedString id=\"common.go_back\" />\n                </Button>\n                <Button\n                    isLoading={ isSendingEmail }\n                    type=\"submit\"\n                    variant={ ButtonVariant.Primary }\n                >\n                    <TranslatedString id=\"login_email.send\" />\n                </Button>\n            </div>\n        );\n    }, [\n        sentEmailError,\n        emailHasBeenRequested,\n        okButton,\n        submitForm,\n        isSendingEmail,\n        onRequestClose,\n        sentEmail,\n    ]);\n\n    const error = useMemo(() => {\n        if (!sentEmailError) {\n            return null;\n        }\n\n        const { status } = sentEmailError;\n\n        return (\n            <Alert type={ AlertType.Error }>\n                { status === 429 ?\n                    <TranslatedString id=\"login_email.error_temporary_disabled\" /> :\n                    <TranslatedString id={ status === 404 ?\n                        'login_email.error_not_found' :\n                        'login_email.error_server' }\n                    /> }\n            </Alert>\n        );\n    }, [sentEmailError]);\n\n    const form = useMemo(() => {\n        if (sentEmailError && sentEmailError.status === 429) {\n            return null;\n        }\n\n        if (emailHasBeenRequested && sentEmail && !sentEmailError) {\n            const { expiry, sent_email } = sentEmail;\n\n            return (\n                <p>\n                    <TranslatedHtml\n                        data={ {\n                            email: formEmail,\n                            minutes: Math.round(expiry / 60),\n                        } }\n                        id={ sent_email === 'sign_in' ?\n                            'login_email.sent_text' :\n                            'customer.reset_password_before_login_error' }\n                    />\n                </p>\n            );\n        }\n\n        if (emailHasBeenRequested && !sentEmail) {\n            return <EmailField />;\n        }\n\n        return (<>\n            <p>\n                <TranslatedString id=\"login_email.text\" />\n            </p>\n            <EmailField />\n        </>);\n    }, [sentEmailError, emailHasBeenRequested, sentEmail, formEmail]);\n\n    return (\n        <Modal\n            additionalBodyClassName=\"modal--withText\"\n            additionalModalClassName=\"modal--medium\"\n            header={\n                <ModalHeader>\n                    <TranslatedString id={ modalHeaderStringId } />\n                </ModalHeader>\n            }\n            isOpen={ isOpen }\n            onRequestClose={ onRequestClose }\n            shouldShowCloseButton={ true }\n        >\n            <Form>\n                <LoadingSpinner isLoading={ isSendingEmail && !email } />\n                { error }\n                { form }\n                { footer }\n            </Form>\n        </Modal>);\n};\n\nexport default withLanguage(withFormik<EmailLoginFormProps & WithLanguageProps, EmailLoginFormValues>({\n    mapPropsToValues: ({\n        email = '',\n    }) => ({\n        email,\n    }),\n    handleSubmit: (values, { props: { onSendLoginEmail = noop } }) => {\n        onSendLoginEmail(values);\n    },\n    validationSchema: ({ language }: WithLanguageProps) => getEmailValidationSchema({ language }),\n})(memo(EmailLoginForm)));\n","import React, { memo, FunctionComponent } from 'react';\n\nimport { TranslatedHtml } from '../locale';\nimport { CheckboxFormField, Fieldset } from '../ui/form';\n\nconst PrivacyPolicyCheckboxFieldLink: FunctionComponent<{ url: string }> = ({\n    url,\n}) => (\n    <CheckboxFormField\n        labelContent={ <TranslatedHtml data={ { url } } id=\"privacy_policy.label\" /> }\n        name=\"privacyPolicy\"\n    />\n);\n\nconst PrivacyPolicyFieldset: FunctionComponent<{ url: string }> = ({\n    url,\n}) => (\n    <Fieldset additionalClassName=\"checkout-privacy-policy\">\n        <PrivacyPolicyCheckboxFieldLink url={ url } />\n    </Fieldset>\n);\n\nexport default memo(PrivacyPolicyFieldset);\n","import { FieldProps } from 'formik';\nimport React, { memo, Fragment, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { Input, Label } from '../ui/form';\n\nexport type SubscribeFieldProps = FieldProps<boolean> & {\n    requiresMarketingConsent: boolean;\n};\n\nconst SubscribeField: FunctionComponent<SubscribeFieldProps> = ({ field, requiresMarketingConsent }) => (\n    <Fragment>\n        <Input\n            { ...field }\n            checked={ field.value }\n            className=\"form-checkbox\"\n            id={ field.name }\n            type=\"checkbox\"\n        />\n\n        <Label htmlFor={ field.name }>\n            <TranslatedString id={ requiresMarketingConsent ?\n                'customer.guest_marketing_consent' :\n                'customer.guest_subscribe_to_newsletter_text' }\n            />\n        </Label>\n    </Fragment>\n);\n\nexport default memo(SubscribeField);\n","import { withFormik, FieldProps, FormikProps } from 'formik';\nimport React, { memo, useCallback, FunctionComponent, ReactNode } from 'react';\nimport { object, string } from 'yup';\n\nimport { withLanguage, TranslatedHtml, TranslatedString, WithLanguageProps } from '../locale';\nimport { getPrivacyPolicyValidationSchema, PrivacyPolicyField } from '../privacyPolicy';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { BasicFormField, Fieldset, Form, Legend  } from '../ui/form';\n\nimport EmailField from './EmailField';\nimport SubscribeField from './SubscribeField';\n\nexport interface GuestFormProps {\n    canSubscribe: boolean;\n    checkoutButtons?: ReactNode;\n    requiresMarketingConsent: boolean;\n    defaultShouldSubscribe: boolean;\n    email?: string;\n    isLoading: boolean;\n    privacyPolicyUrl?: string;\n    onChangeEmail(email: string): void;\n    onContinueAsGuest(data: GuestFormValues): void;\n    onShowLogin(): void;\n}\n\nexport interface GuestFormValues {\n    email: string;\n    shouldSubscribe: boolean;\n}\n\nconst GuestForm: FunctionComponent<GuestFormProps & WithLanguageProps & FormikProps<GuestFormValues>> = ({\n    canSubscribe,\n    checkoutButtons,\n    isLoading,\n    onChangeEmail,\n    onShowLogin,\n    privacyPolicyUrl,\n    requiresMarketingConsent,\n}) => {\n    const renderField = useCallback((fieldProps: FieldProps<boolean>) => (\n        <SubscribeField\n            { ...fieldProps }\n            requiresMarketingConsent={ requiresMarketingConsent }\n        />\n    ), [\n        requiresMarketingConsent,\n    ]);\n\n    return (\n        <Form\n            className=\"checkout-form\"\n            id=\"checkout-customer-guest\"\n            testId=\"checkout-customer-guest\"\n        >\n            <Fieldset\n                legend={\n                    <Legend hidden>\n                        <TranslatedString id=\"customer.guest_customer_text\" />\n                    </Legend>\n                }\n            >\n                <p>\n                    <TranslatedHtml id=\"customer.checkout_as_guest_text\" />\n                </p>\n\n                <div className=\"customerEmail-container\">\n                    <div className=\"customerEmail-body\">\n                        <EmailField onChange={ onChangeEmail } />\n\n                        { (canSubscribe || requiresMarketingConsent) && <BasicFormField\n                            name=\"shouldSubscribe\"\n                            render={ renderField }\n                        /> }\n\n                        { privacyPolicyUrl && <PrivacyPolicyField\n                            url={ privacyPolicyUrl }\n                        /> }\n                    </div>\n\n                    <div className=\"form-actions customerEmail-action\">\n                        <Button\n                            className=\"customerEmail-button\"\n                            id=\"checkout-customer-continue\"\n                            isLoading={ isLoading }\n                            testId=\"customer-continue-as-guest-button\"\n                            type=\"submit\"\n                            variant={ ButtonVariant.Primary }\n                        >\n                            <TranslatedString id=\"customer.continue_as_guest_action\" />\n                        </Button>\n                    </div>\n                </div>\n\n                {\n                    !isLoading && <p>\n                        <TranslatedString id=\"customer.login_text\" />\n                        { ' ' }\n                        <a\n                            data-test=\"customer-continue-button\"\n                            id=\"checkout-customer-login\"\n                            onClick={ onShowLogin }\n                        >\n                            <TranslatedString id=\"customer.login_action\" />\n                        </a>\n                    </p>\n                }\n\n                { checkoutButtons }\n            </Fieldset>\n        </Form>\n    );\n};\n\nexport default withLanguage(withFormik<GuestFormProps & WithLanguageProps, GuestFormValues>({\n    mapPropsToValues: ({\n        email = '',\n        defaultShouldSubscribe = false,\n        requiresMarketingConsent,\n    }) => ({\n        email,\n        shouldSubscribe: requiresMarketingConsent ? false : defaultShouldSubscribe,\n        privacyPolicy: false,\n    }),\n    handleSubmit: (values, { props: { onContinueAsGuest } }) => {\n        onContinueAsGuest(values);\n    },\n    validationSchema: ({ language, privacyPolicyUrl }: GuestFormProps & WithLanguageProps) => {\n        const email = string()\n            .email(language.translate('customer.email_invalid_error'))\n            .max(256)\n            .required(language.translate('customer.email_required_error'));\n\n        const baseSchema = object({ email });\n\n        if (privacyPolicyUrl) {\n            return baseSchema.concat(getPrivacyPolicyValidationSchema({\n                isRequired: !!privacyPolicyUrl,\n                language,\n            }));\n        }\n\n        return baseSchema;\n    },\n})(memo(GuestForm)));\n","import { LanguageService } from '@bigcommerce/checkout-sdk';\nimport { boolean, object, BooleanSchema, ObjectSchema } from 'yup';\n\nexport interface PrivacyPolicyValidatonSchemaProps {\n    isRequired: boolean;\n    language: LanguageService;\n}\n\nexport default function getPrivacyPolicyValidationSchema({\n    isRequired,\n    language,\n}: PrivacyPolicyValidatonSchemaProps): ObjectSchema<{ privacyPolicy?: boolean }> {\n    const schemaFields: {\n        privacyPolicy?: BooleanSchema;\n    } = {};\n\n    if (isRequired) {\n        schemaFields.privacyPolicy = boolean()\n            .oneOf([true], language.translate('privacy_policy.required_error'));\n    }\n\n    return object(schemaFields);\n}\n","import React, { FunctionComponent } from 'react';\n\nimport withIconContainer from './withIconContainer';\n\nconst IconEye: FunctionComponent = () => (\n    <svg\n        viewBox=\"0 0 576 512\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n    >\n        <path d=\"M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z\" />\n    </svg>\n);\n\nexport default withIconContainer(IconEye);\n","import React, { FunctionComponent } from 'react';\n\nimport withIconContainer from './withIconContainer';\n\nconst IconEyeSlash: FunctionComponent = () => (\n    <svg\n        viewBox=\"0 0 640 512\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n    >\n        <path d=\"M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z\" />\n    </svg>\n);\n\nexport default withIconContainer(IconEyeSlash);\n","import { FieldProps } from 'formik';\nimport React, { memo, useCallback, useMemo, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { FormField, TextInput } from '../ui/form';\nimport { IconEye, IconEyeSlash } from '../ui/icon';\nimport { Toggle } from '../ui/toggle';\n\nexport interface PasswordFieldProps {\n    forgotPasswordUrl?: string;\n}\n\nconst PasswordField: FunctionComponent<PasswordFieldProps> = ({\n    forgotPasswordUrl,\n}) => {\n    const renderInput = useCallback((props: FieldProps) => (\n        <Toggle openByDefault={ false }>\n            { ({ isOpen, toggle }) => (\n                <div className=\"form-field-password\">\n                    <TextInput\n                        { ...props.field }\n                        additionalClassName=\"form-input--withIcon\"\n                        id={ props.field.name }\n                        type={ isOpen ? 'text' : 'password' }\n                    />\n                    <a className=\"form-toggle-password form-input-icon\" href=\"#\" onClick={ toggle }>\n                        { isOpen ? <IconEye /> : <IconEyeSlash /> }\n                    </a>\n                </div>\n            ) }\n        </Toggle>\n    ), []);\n\n    const labelContent = useMemo(() => (\n        <TranslatedString id={ 'customer.password_label' } />\n    ), []);\n\n    const footer = useMemo(() => {\n        if (!forgotPasswordUrl) {\n            return null;\n        }\n\n        return <a\n            data-test=\"forgot-password-link\"\n            href={ forgotPasswordUrl }\n            rel=\"noopener noreferrer\"\n            target=\"_blank\"\n        >\n            <TranslatedString id=\"customer.forgot_password_action\" />\n        </a>;\n    }, [forgotPasswordUrl]);\n\n    return <FormField\n        footer={ footer }\n        input={ renderInput }\n        labelContent={ labelContent }\n        name=\"password\"\n    />;\n};\n\nexport default memo(PasswordField);\n","import { withFormik, FormikProps } from 'formik';\nimport { noop } from 'lodash';\nimport React, { memo, useCallback, FunctionComponent } from 'react';\nimport { object, string } from 'yup';\n\nimport { preventDefault } from '../common/dom';\nimport { withLanguage, TranslatedHtml, TranslatedLink, TranslatedString, WithLanguageProps } from '../locale';\nimport { Alert, AlertType } from '../ui/alert';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { Fieldset, Form, Legend } from '../ui/form';\n\nimport getEmailValidationSchema from './getEmailValidationSchema';\nimport mapErrorMessage from './mapErrorMessage';\nimport CustomerViewType from './CustomerViewType';\nimport EmailField from './EmailField';\nimport PasswordField from './PasswordField';\n\nexport interface LoginFormProps {\n    canCancel?: boolean;\n    email?: string;\n    forgotPasswordUrl: string;\n    isSignInEmailEnabled?: boolean;\n    isSendingSignInEmail?: boolean;\n    isSigningIn?: boolean;\n    signInError?: Error;\n    signInEmailError?: Error;\n    viewType?: Omit<CustomerViewType, 'guest'>;\n    passwordlessLogin?: boolean;\n    shouldShowCreateAccountLink?: boolean;\n    onCancel?(): void;\n    onCreateAccount?(): void;\n    onChangeEmail?(email: string): void;\n    onSignIn(data: LoginFormValues): void;\n    onSendLoginEmail?(): void;\n    onContinueAsGuest?(): void;\n}\n\nexport interface LoginFormValues {\n    email: string;\n    password: string;\n}\n\nconst LoginForm: FunctionComponent<LoginFormProps & WithLanguageProps & FormikProps<LoginFormValues>> = ({\n    canCancel,\n    forgotPasswordUrl,\n    email,\n    isSignInEmailEnabled,\n    isSigningIn,\n    language,\n    onCancel = noop,\n    onChangeEmail,\n    onContinueAsGuest,\n    onCreateAccount = noop,\n    onSendLoginEmail = noop,\n    signInError,\n    shouldShowCreateAccountLink,\n    viewType = CustomerViewType.Login,\n}) => {\n    const changeEmailLink = useCallback(() => {\n        if (!email) {\n            return null;\n        }\n\n        return (\n            <p className=\"optimizedCheckout-contentSecondary\">\n                <TranslatedLink\n                    data={ { email } }\n                    id=\"customer.guest_could_login_change_email\"\n                    onClick={ onCancel }\n                    testId=\"change-email\"\n                />\n            </p>\n        );\n    }, [email, onCancel]);\n\n    return (\n        <Form\n            className=\"checkout-form\"\n            id=\"checkout-customer-returning\"\n            testId=\"checkout-customer-returning\"\n        >\n            <Fieldset legend={\n                <Legend hidden>\n                    <TranslatedString id=\"customer.returning_customer_text\" />\n                </Legend>\n            }\n            >\n                { signInError && <Alert\n                    testId=\"customer-login-error-message\"\n                    type={ AlertType.Error }\n                >\n                    { mapErrorMessage(signInError, key => language.translate(key)) }\n                </Alert> }\n\n                { viewType === CustomerViewType.SuggestedLogin &&\n                    <Alert type={ AlertType.Info }>\n                        <TranslatedHtml\n                            data={ { email } }\n                            id=\"customer.guest_could_login\"\n                        />\n                    </Alert> }\n\n                { viewType === CustomerViewType.Login && shouldShowCreateAccountLink && <p>\n                    <TranslatedLink\n                        id=\"customer.create_account_to_continue_text\"\n                        onClick={ onCreateAccount }\n                    />\n                </p> }\n\n                { viewType === CustomerViewType.CancellableEnforcedLogin &&\n                    <Alert type={ AlertType.Info }>\n                        <TranslatedHtml\n                            data={ { email } }\n                            id=\"customer.guest_must_login\"\n                        />\n                    </Alert> }\n\n                { viewType === CustomerViewType.EnforcedLogin &&\n                    <Alert type={ AlertType.Error }>\n                        <TranslatedLink\n                            id=\"customer.guest_temporary_disabled\"\n                            onClick={ onCreateAccount }\n                        />\n                    </Alert> }\n\n                { (viewType === CustomerViewType.Login || viewType === CustomerViewType.EnforcedLogin) &&\n                    <EmailField onChange={ onChangeEmail } /> }\n\n                <PasswordField forgotPasswordUrl={ isSignInEmailEnabled ? undefined : forgotPasswordUrl } />\n\n                { isSignInEmailEnabled && <p>\n                    <TranslatedLink\n                        id=\"login_email.link\"\n                        onClick={ onSendLoginEmail }\n                        testId=\"customer-signin-link\"\n                    />\n                </p> }\n\n                <div className=\"form-actions\">\n                    <Button\n                        disabled={ isSigningIn }\n                        id=\"checkout-customer-continue\"\n                        testId=\"customer-continue-button\"\n                        type=\"submit\"\n                        variant={ ButtonVariant.Primary }\n                    >\n                        <TranslatedString id=\"customer.sign_in_action\" />\n                    </Button>\n\n                    { viewType === CustomerViewType.SuggestedLogin && <a\n                        className=\"button optimizedCheckout-buttonSecondary\"\n                        data-test=\"customer-guest-continue\"\n                        href=\"#\"\n                        id=\"checkout-guest-continue\"\n                        onClick={ preventDefault(onContinueAsGuest) }\n                    >\n                        <TranslatedString id=\"customer.continue_as_guest_action\" />\n                    </a> }\n\n                    { canCancel &&\n                        viewType !== CustomerViewType.EnforcedLogin &&\n                        viewType !== CustomerViewType.SuggestedLogin &&\n                        <a\n                            className=\"button optimizedCheckout-buttonSecondary\"\n                            data-test=\"customer-cancel-button\"\n                            href=\"#\"\n                            id=\"checkout-customer-cancel\"\n                            onClick={ preventDefault(onCancel) }\n                        >\n                            <TranslatedString id={ viewType === CustomerViewType.CancellableEnforcedLogin ?\n                                'login_email.use_another_email' :\n                                'common.cancel_action' }\n                            />\n                        </a> }\n                </div>\n\n                { viewType === CustomerViewType.SuggestedLogin && changeEmailLink() }\n            </Fieldset>\n        </Form>);\n};\n\nexport default withLanguage(withFormik<LoginFormProps & WithLanguageProps, LoginFormValues>({\n    mapPropsToValues: ({\n        email = '',\n    }) => ({\n        email,\n        password: '',\n    }),\n    handleSubmit: (values, { props: { onSignIn } }) => {\n        onSignIn(values);\n    },\n    validationSchema: ({ language }: LoginFormProps & WithLanguageProps) =>\n        getEmailValidationSchema({ language }).concat(object({\n            password: string()\n                .required(language.translate('customer.password_required_error')),\n        })),\n})(memo(LoginForm)));\n","export default function mapErrorMessage(\n    error: any, // TODO: Export `RequestError`\n    translate: (key: string) => string\n): string {\n    const type = error.body && error.body.type;\n\n    switch (type) {\n    case 'throttled_login':\n        return translate('customer.sign_in_throttled_error');\n\n    case 'reset_password_before_login':\n        return translate('customer.reset_password_before_login_error');\n\n    default:\n        return translate('customer.sign_in_error');\n    }\n}\n","import { CheckoutSelectors, CustomerAccountRequestBody, CustomerCredentials, CustomerInitializeOptions, CustomerRequestOptions, FormField, GuestCredentials, SignInEmail, StoreConfig } from '@bigcommerce/checkout-sdk';\nimport { noop } from 'lodash';\nimport React, { Component, Fragment, ReactNode } from 'react';\n\nimport { withCheckout, CheckoutContextProps } from '../checkout';\n\nimport { CreateAccountFormValues } from './getCreateCustomerValidationSchema';\nimport mapCreateAccountFromFormValues from './mapCreateAccountFromFormValues';\nimport CheckoutButtonList from './CheckoutButtonList';\nimport CreateAccountForm from './CreateAccountForm';\nimport CustomerViewType from './CustomerViewType';\nimport EmailLoginForm, { EmailLoginFormValues } from './EmailLoginForm';\nimport GuestForm, { GuestFormValues } from './GuestForm';\nimport LoginForm from './LoginForm';\n\nexport interface CustomerProps {\n    viewType: CustomerViewType;\n    isEmbedded?: boolean;\n    checkEmbeddedSupport?(methodIds: string[]): void;\n    onChangeViewType?(viewType: CustomerViewType): void;\n    onAccountCreated?(): void;\n    onContinueAsGuest?(): void;\n    onContinueAsGuestError?(error: Error): void;\n    onReady?(): void;\n    onSignIn?(): void;\n    onSignInError?(error: Error): void;\n    onUnhandledError?(error: Error): void;\n}\n\nexport interface WithCheckoutCustomerProps {\n    canSubscribe: boolean;\n    customerAccountFields: FormField[];\n    checkoutButtonIds: string[];\n    defaultShouldSubscribe: boolean;\n    email?: string;\n    firstName?: string;\n    forgotPasswordUrl: string;\n    isContinuingAsGuest: boolean;\n    isCreatingAccount: boolean;\n    isGuestEnabled: boolean;\n    isInitializing: boolean;\n    isSendingSignInEmail: boolean;\n    isSignInEmailEnabled: boolean;\n    isSigningIn: boolean;\n    privacyPolicyUrl?: string;\n    requiresMarketingConsent: boolean;\n    signInEmail?: SignInEmail;\n    signInEmailError?: Error;\n    isAccountCreationEnabled: boolean;\n    createAccountError?: Error;\n    signInError?: Error;\n    clearError(error: Error): Promise<CheckoutSelectors>;\n    continueAsGuest(credentials: GuestCredentials): Promise<CheckoutSelectors>;\n    deinitializeCustomer(options: CustomerRequestOptions): Promise<CheckoutSelectors>;\n    initializeCustomer(options: CustomerInitializeOptions): Promise<CheckoutSelectors>;\n    sendLoginEmail(params: { email: string }): Promise<CheckoutSelectors>;\n    signIn(credentials: CustomerCredentials): Promise<CheckoutSelectors>;\n    createAccount(values: CustomerAccountRequestBody): Promise<CheckoutSelectors>;\n}\n\nexport interface CustomerState {\n    isEmailLoginFormOpen: boolean;\n    hasRequestedLoginEmail: boolean;\n}\n\nclass Customer extends Component<CustomerProps & WithCheckoutCustomerProps, CustomerState> {\n    state: CustomerState = {\n        isEmailLoginFormOpen: false,\n        hasRequestedLoginEmail: false,\n    };\n\n    private draftEmail?: string;\n\n    componentDidMount(): void {\n        const {\n            onReady = noop,\n            email,\n        } = this.props;\n\n        this.draftEmail = email;\n\n        onReady();\n    }\n\n    render(): ReactNode {\n        const { viewType } = this.props;\n        const { isEmailLoginFormOpen } = this.state;\n        const shouldRenderGuestForm = viewType === CustomerViewType.Guest;\n        const shouldRenderCreateAccountForm = viewType === CustomerViewType.CreateAccount;\n        const shouldRenderLoginForm = !shouldRenderGuestForm && !shouldRenderCreateAccountForm;\n\n        return (\n            <Fragment>\n                { isEmailLoginFormOpen && this.renderEmailLoginLinkForm() }\n                { shouldRenderLoginForm && this.renderLoginForm() }\n                { shouldRenderGuestForm && this.renderGuestForm() }\n                { shouldRenderCreateAccountForm && this.renderCreateAccountForm() }\n            </Fragment>\n        );\n    }\n\n    private renderGuestForm(): ReactNode {\n        const {\n            canSubscribe,\n            checkEmbeddedSupport,\n            checkoutButtonIds,\n            defaultShouldSubscribe,\n            deinitializeCustomer,\n            email,\n            initializeCustomer,\n            isContinuingAsGuest = false,\n            isInitializing = false,\n            privacyPolicyUrl,\n            requiresMarketingConsent,\n            onUnhandledError = noop,\n        } = this.props;\n\n        return (\n            <GuestForm\n                canSubscribe={ canSubscribe }\n                checkoutButtons={\n                    <CheckoutButtonList\n                        checkEmbeddedSupport={ checkEmbeddedSupport }\n                        deinitialize={ deinitializeCustomer }\n                        initialize={ initializeCustomer }\n                        isInitializing={ isInitializing }\n                        methodIds={ checkoutButtonIds }\n                        onError={ onUnhandledError }\n                    />\n                }\n                defaultShouldSubscribe={ defaultShouldSubscribe }\n                email={ this.draftEmail || email }\n                isLoading={ isContinuingAsGuest || isInitializing }\n                onChangeEmail={ this.handleChangeEmail }\n                onContinueAsGuest={ this.handleContinueAsGuest }\n                onShowLogin={ this.handleShowLogin }\n                privacyPolicyUrl={ privacyPolicyUrl }\n                requiresMarketingConsent={ requiresMarketingConsent }\n            />\n        );\n    }\n\n    private renderEmailLoginLinkForm(): ReactNode {\n        const {\n            isEmailLoginFormOpen,\n            hasRequestedLoginEmail,\n        } = this.state;\n\n        const {\n            isSendingSignInEmail,\n            signInEmailError,\n            signInEmail,\n        } = this.props;\n\n        return (\n            <EmailLoginForm\n                email={ this.draftEmail }\n                emailHasBeenRequested={ hasRequestedLoginEmail }\n                isOpen={ isEmailLoginFormOpen }\n                isSendingEmail={ isSendingSignInEmail }\n                onRequestClose={ this.closeEmailLoginFormForm }\n                onSendLoginEmail={ this.handleSendLoginEmail }\n                sentEmail={ signInEmail }\n                sentEmailError={ signInEmailError }\n            />\n        );\n    }\n\n    private closeEmailLoginFormForm: () => void = () => {\n        this.setState({\n            isEmailLoginFormOpen: false,\n            hasRequestedLoginEmail: false,\n        });\n    };\n\n    private renderCreateAccountForm(): ReactNode {\n        const {\n            customerAccountFields,\n            isCreatingAccount,\n            createAccountError,\n        } = this.props;\n\n        return (\n            <CreateAccountForm\n                createAccountError={ createAccountError }\n                formFields={ customerAccountFields }\n                isCreatingAccount={ isCreatingAccount }\n                onCancel={ this.handleCancelCreateAccount }\n                onSubmit={ this.handleCreateAccount }\n            />\n        );\n    }\n\n    private renderLoginForm(): ReactNode {\n        const {\n            isEmbedded,\n            email,\n            forgotPasswordUrl,\n            isSignInEmailEnabled,\n            isGuestEnabled,\n            isSendingSignInEmail,\n            isSigningIn,\n            isAccountCreationEnabled,\n            onContinueAsGuest,\n            signInError,\n            viewType,\n        } = this.props;\n\n        return (\n            <LoginForm\n                canCancel={ isGuestEnabled }\n                email={ this.draftEmail || email }\n                forgotPasswordUrl={ forgotPasswordUrl }\n                isSendingSignInEmail={ isSendingSignInEmail }\n                isSignInEmailEnabled={ isSignInEmailEnabled && !isEmbedded }\n                isSigningIn={ isSigningIn }\n                onCancel={ this.handleCancelSignIn }\n                onChangeEmail={ this.handleChangeEmail }\n                onContinueAsGuest={ onContinueAsGuest }\n                onCreateAccount={ this.showCreateAccount }\n                onSendLoginEmail={ this.handleEmailLoginClicked }\n                onSignIn={ this.handleSignIn }\n                shouldShowCreateAccountLink={ isAccountCreationEnabled }\n                signInError={ signInError }\n                viewType={ viewType }\n            />\n        );\n    }\n\n    private handleEmailLoginClicked: () => void = async () => {\n        const { viewType } = this.props;\n\n        try {\n            if (viewType !== CustomerViewType.Login && this.draftEmail) {\n                await this.handleSendLoginEmail({ email: this.draftEmail });\n            }\n        } finally {\n            this.setState({\n                isEmailLoginFormOpen: true,\n            });\n        }\n    };\n\n    private handleSendLoginEmail: (values: EmailLoginFormValues) => Promise<void> = async values => {\n        const {\n            sendLoginEmail,\n        } = this.props;\n\n        try {\n            await sendLoginEmail(values);\n        } finally {\n            this.setState({\n                hasRequestedLoginEmail: true,\n            });\n        }\n    };\n\n    private handleContinueAsGuest: (formValues: GuestFormValues) => Promise<void> = async formValues => {\n        const {\n            canSubscribe,\n            continueAsGuest,\n            onChangeViewType = noop,\n            onContinueAsGuest = noop,\n            onContinueAsGuestError = noop,\n        } = this.props;\n\n        const email = formValues.email.trim();\n        try {\n            const { data } = await continueAsGuest({\n                email,\n                acceptsMarketingNewsletter: canSubscribe && formValues.shouldSubscribe ? true : undefined,\n                acceptsAbandonedCartEmails: formValues.shouldSubscribe ? true : undefined,\n            });\n\n            const customer = data.getCustomer();\n\n            if (customer && customer.shouldEncourageSignIn && customer.isGuest) {\n                return onChangeViewType(CustomerViewType.SuggestedLogin);\n            }\n\n            onContinueAsGuest();\n\n            this.draftEmail = undefined;\n        } catch (error) {\n            if (error.type === 'update_subscriptions') {\n                this.draftEmail = undefined;\n\n                return onContinueAsGuest();\n            }\n\n            if (error.status === 429) {\n                return onChangeViewType(CustomerViewType.EnforcedLogin);\n            }\n\n            if (error.status === 403) {\n                return onChangeViewType(CustomerViewType.CancellableEnforcedLogin);\n            }\n\n            onContinueAsGuestError(error);\n        }\n    };\n\n    private handleSignIn: (credentials: CustomerCredentials) => Promise<void> = async credentials => {\n        const {\n            signIn,\n            onSignIn = noop,\n            onSignInError = noop,\n        } = this.props;\n\n        try {\n            await signIn(credentials);\n            onSignIn();\n\n            this.draftEmail = undefined;\n        } catch (error) {\n            onSignInError(error);\n        }\n    };\n\n    private handleCreateAccount: (values: CreateAccountFormValues) => void = async values => {\n        const {\n            createAccount = noop,\n            onAccountCreated = noop,\n        } = this.props;\n\n        await createAccount(mapCreateAccountFromFormValues(values));\n\n        onAccountCreated();\n    };\n\n    private showCreateAccount: () => void = () => {\n        const {\n            onChangeViewType = noop,\n        } = this.props;\n\n        onChangeViewType(CustomerViewType.CreateAccount);\n    };\n\n    private handleCancelCreateAccount: () => void = () => {\n        const {\n            clearError,\n            onChangeViewType = noop,\n            createAccountError,\n        } = this.props;\n\n        if (createAccountError) {\n            clearError(createAccountError);\n        }\n\n        onChangeViewType(CustomerViewType.Login);\n    };\n\n    private handleCancelSignIn: () => void = () => {\n        const {\n            clearError,\n            onChangeViewType = noop,\n            signInError,\n        } = this.props;\n\n        if (signInError) {\n            clearError(signInError);\n        }\n\n        onChangeViewType(CustomerViewType.Guest);\n    };\n\n    private handleChangeEmail: (email: string) => void = email => {\n        this.draftEmail = email;\n    };\n\n    private handleShowLogin: () => void = () => {\n        const { onChangeViewType = noop } = this.props;\n\n        onChangeViewType(CustomerViewType.Login);\n    };\n}\n\nexport function mapToWithCheckoutCustomerProps(\n    { checkoutService, checkoutState }: CheckoutContextProps\n): WithCheckoutCustomerProps | null {\n    const {\n        data: { getBillingAddress, getCustomerAccountFields, getCheckout, getCustomer, getSignInEmail, getConfig },\n        errors: { getSignInError, getSignInEmailError, getCreateCustomerAccountError },\n        statuses: { isContinuingAsGuest, isInitializingCustomer, isSigningIn, isSendingSignInEmail, isCreatingCustomerAccount },\n    } = checkoutState;\n\n    const billingAddress = getBillingAddress();\n    const checkout = getCheckout();\n    const customer = getCustomer();\n    const signInEmail = getSignInEmail();\n    const config = getConfig();\n\n    if (!checkout || !config) {\n        return null;\n    }\n\n    const {\n        checkoutSettings: {\n            privacyPolicyUrl,\n            requiresMarketingConsent,\n            isSignInEmailEnabled,\n            isAccountCreationEnabled,\n        },\n    } = config as StoreConfig & { checkoutSettings: { isAccountCreationEnabled: boolean } };\n\n    return {\n        customerAccountFields: getCustomerAccountFields(),\n        canSubscribe: config.shopperConfig.showNewsletterSignup,\n        checkoutButtonIds: config.checkoutSettings.remoteCheckoutProviders,\n        clearError: checkoutService.clearError,\n        createAccount: checkoutService.createCustomerAccount,\n        continueAsGuest: checkoutService.continueAsGuest,\n        sendLoginEmail: checkoutService.sendSignInEmail,\n        defaultShouldSubscribe: config.shopperConfig.defaultNewsletterSignup,\n        deinitializeCustomer: checkoutService.deinitializeCustomer,\n        email: (billingAddress && billingAddress.email) || (customer && customer.email),\n        firstName: customer && customer.firstName,\n        forgotPasswordUrl: config.links.forgotPasswordLink,\n        initializeCustomer: checkoutService.initializeCustomer,\n        isCreatingAccount: isCreatingCustomerAccount(),\n        createAccountError: getCreateCustomerAccountError(),\n        isContinuingAsGuest: isContinuingAsGuest(),\n        isInitializing:  isInitializingCustomer(),\n        isSignInEmailEnabled,\n        isAccountCreationEnabled,\n        isGuestEnabled: config.checkoutSettings.guestCheckoutEnabled,\n        isSigningIn: isSigningIn(),\n        isSendingSignInEmail: isSendingSignInEmail(),\n        signInEmail,\n        signInEmailError: getSignInEmailError(),\n        privacyPolicyUrl,\n        requiresMarketingConsent,\n        signIn: checkoutService.signInCustomer,\n        signInError: getSignInError(),\n    };\n}\n\nexport default withCheckout(mapToWithCheckoutCustomerProps)(Customer);\n"],"sourceRoot":""}