{"version":3,"sources":["webpack://checkout/./src/app/ui/form/CheckboxInput.tsx","webpack://checkout/./src/app/ui/form/TextArea.tsx","webpack://checkout/./src/app/address/isEqualAddress.ts","webpack://checkout/./src/app/ui/form/CheckboxFormField.tsx","webpack://checkout/./src/app/shipping/getShippableItemsCount.ts","webpack://checkout/./src/app/formFields/mapCustomFormFieldsFromFormValues.ts","webpack://checkout/./src/app/common/utility/parseAnchor.ts","webpack://checkout/./src/app/address/getAddressFormFieldInputId.ts","webpack://checkout/./src/app/address/googleAutocomplete/AddressSelector.ts","webpack://checkout/./src/app/address/googleAutocomplete/AddressSelectorUk.ts","webpack://checkout/./src/app/address/googleAutocomplete/AddressSelectorFactory.ts","webpack://checkout/./src/app/ui/popover/Popover.tsx","webpack://checkout/./src/app/ui/popover/PopoverList.tsx","webpack://checkout/./src/app/address/googleAutocomplete/getGoogleAutocompleteScriptLoader.ts","webpack://checkout/./src/app/ui/autocomplete/Autocomplete.tsx","webpack://checkout/./src/app/address/googleAutocomplete/GoogleAutocompleteScriptLoader.ts","webpack://checkout/./src/app/address/googleAutocomplete/GoogleAutocompleteService.ts","webpack://checkout/./src/app/address/googleAutocomplete/GoogleAutocomplete.tsx","webpack://checkout/./src/app/address/googleAutocomplete/GoogleAutocompleteFormField.tsx","webpack://checkout/./src/app/address/AddressForm.tsx","webpack://checkout/./src/app/address/googleAutocomplete/mapToAddress.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/address/mapAddressFromFormValues.ts","webpack://checkout/./src/app/address/isValidCustomerAddress.ts","webpack://checkout/./src/app/orderComments/OrderComments.tsx","webpack://checkout/./src/app/payment/getPreselectedPayment.ts","webpack://checkout/./src/app/locale/TranslatedLink.tsx","webpack://checkout/./src/app/ui/dropdown/DropdownTrigger.tsx","webpack://checkout/./src/app/address/AddressSelect.tsx","webpack://checkout/./src/app/shipping/errors/UnassignItemError.ts","webpack://checkout/./src/app/shipping/getShippingMethodId.ts","webpack://checkout/./src/app/address/AddressFormModal.tsx","webpack://checkout/./src/app/shipping/errors/AssignItemInvalidAddressError.ts","webpack://checkout/./src/app/shipping/errors/AssignItemFailedError.ts","webpack://checkout/./src/app/shipping/findConsignment.ts","webpack://checkout/./src/app/shipping/getShippableLineItems.ts","webpack://checkout/./src/app/shipping/ItemAddressSelect.tsx","webpack://checkout/./src/app/ui/accordion/AccordionContext.tsx","webpack://checkout/./src/app/ui/accordion/AccordionItem.tsx","webpack://checkout/./src/app/common/form/connectFormik.tsx","webpack://checkout/./src/app/ui/accordion/Accordion.tsx","webpack://checkout/./src/app/ui/form/Checklist.tsx","webpack://checkout/./src/app/ui/form/ChecklistItemInput.tsx","webpack://checkout/./src/app/ui/form/ChecklistItem.tsx","webpack://checkout/./src/app/shipping/shippingOption/ShippingOptionsList.tsx","webpack://checkout/./src/app/shipping/shippingOption/ShippingOptionsForm.tsx","webpack://checkout/./src/app/shipping/getRecommendedShippingOption.ts","webpack://checkout/./src/app/shipping/shippingOption/ShippingOptions.tsx","webpack://checkout/./src/app/shipping/ShippingFormFooter.tsx","webpack://checkout/./src/app/shipping/MultiShippingForm.tsx","webpack://checkout/./src/app/shipping/updateShippableItems.ts","webpack://checkout/./src/app/shipping/BillingSameAsShippingField.tsx","webpack://checkout/./src/app/shipping/RemoteShippingAddress.tsx","webpack://checkout/./src/app/shipping/ShippingAddressForm.tsx","webpack://checkout/./src/app/shipping/StaticAddressEditable.tsx","webpack://checkout/./src/app/shipping/ShippingAddress.tsx","webpack://checkout/./src/app/shipping/ShippingAddressFields.ts","webpack://checkout/./src/app/shipping/SingleShippingForm.tsx","webpack://checkout/./src/app/shipping/ShippingForm.tsx","webpack://checkout/./src/app/shipping/ShippingHeader.tsx","webpack://checkout/./src/app/shipping/Shipping.tsx"],"names":["CheckboxInput","ref","additionalClassName","label","id","rest","className","type","htmlFor","TextArea","testId","isEqualAddress","address1","address2","normalizeAddress","stateOrProvince","stateOrProvinceCode","isSameState","address","customFields","filter","disabled","labelContent","onChange","name","renderField","field","checked","value","render","getShippableItemsCount","cart","lineItems","physicalItems","item","addedByPromotion","mapCustomFormFieldsFromFormValues","customFieldsObject","key","fieldValue","padMonth","getMonth","toString","padDay","getDate","getFullYear","push","fieldId","parseAnchor","text","div","document","createElement","innerHTML","anchor","querySelector","anchorSiblings","split","outerHTML","ADDRESS_FIELD_IDS","postalCode","getAddressFormFieldLegacyName","getAddressFormFieldInputId","googlePlace","address_components","this","_name","_address","getState","_get","getStreet","getStreet2","getCity","getCountry","getPostCode","access","element","find","types","indexOf","create","autocompleteData","addressSelector","children","getItemClassName","highlightedIndex","index","classes","join","instance","getItemProps","props","menuProps","items","length","map","content","stateReducer","state","changes","stateChangeTypes","blurInput","blurButton","mouseUp","touchEnd","inputValue","changeInput","isOpen","keyDownEnter","handleStateChange","onToggleOpen","undefined","inputProps","initialValue","initialHighlightedIndex","onSelect","listTestId","defaultHighlightedIndex","initialInputValue","itemToString","onStateChange","getInputProps","getMenuProps","toPopoverItem","highlightItem","highlightedSlices","lastIndex","reduce","node","slice","i","offset","notHighlightedLength","substr","_scriptLoader","loadMapsSdk","apiKey","_googleAutoComplete","Promise","resolve","reject","params","window","autocompleteWindow","Boolean","google","maps","places","isAutocompleteWindow","loadScript","catch","e","_apiKey","getAutocompleteService","_autocompletePromise","then","googleMapsSdk","AutocompleteService","Error","getPlacesServices","_placesPromise","PlacesService","fields","nextElement","googleAutocompleteService","service","getDetails","placeId","result","focus","input","isAutocompleteEnabled","resetAutocomplete","setAutocomplete","setItems","autoComplete","componentRestrictions","getPlacePredictions","results","setState","toAutocompleteItems","description","structured_formatting","main_text","matched_substrings","place_id","countryCode","supportedCountries","parentFieldName","fieldName","TranslatedString","renderInput","country","FormField","LABEL","city","company","firstName","lastName","phone","AUTOCOMPLETE","PLACEHOLDER","AUTOCOMPLETE_FIELD_NAME","containerRef","handleDynamicFormFieldChange","syncNonFormikValue","handleAutocompleteChange","handleAutocompleteSelect","place","autocompleteValue","countries","setFieldValue","accessor","c","code","street2","stateName","states","subdivisions","mapToAddress","formFields","dateFormFieldNames","custom","fieldType","DynamicFormFieldType","date","componentDidMount","current","language","countriesWithAutocomplete","googleMapsApiKey","onAutocompleteToggle","shouldShowSaveAddress","Fieldset","addressFieldName","translatedPlaceholderId","DynamicFormField","autocomplete","extraClass","inputId","placeholder","translate","CheckboxFormField","withLanguage","createInjectHoc","LocaleContext","displayNamePrefix","pickProps","Input","Label","options","inputFormat","handleDateChange","dateValue","event","target","dropdown","optionValue","radio","checkbox","Array","isArray","includes","calendarClassName","dateFormat","maxDate","max","Date","minDate","min","placeholderText","toUpperCase","popperClassName","selected","multiline","TextInput","password","onSelectedAll","onSelectedNone","handleSelectAllClick","preventDefault","handleSelectNoneClick","href","onClick","MultiCheckboxFormField","form","values","errors","remove","handleSelectAll","checkedValues","forEach","val","handleSelectNone","handleInputChange","FormFieldContainer","hasError","FormFieldError","renderProps","secret","fieldLabel","required","maxLength","fieldInputId","labelComponent","dynamicFormFieldType","number","helperLabel","rows","mapAddressFromFormValues","formValues","shouldSaveAddress","isValidCustomerAddress","addresses","customerAddress","renderLabel","hidden","legend","getPreselectedPayment","checkout","payments","payment","providerId","data","translatedString","parsedString","shouldShow","handleClick","handleClose","nativeEvent","handleOpen","addEventListener","removeEventListener","componentWillUnmount","placement","modifiers","hide","enabled","flip","preventOverflow","style","width","zIndex","defaultProps","handleSelectAddress","newAddress","onSelectAddress","selectedAddress","handleUseNewAddress","onUseNewAddress","role","AddressSelectMenu","AddressSelectButton","StaticAddress","message","getLanguageService","UnassignItemError","prototype","CustomError","getShippingMethodId","preselectedPayment","SaveAddressForm","handleSubmit","onSaveAddress","mapPropsToValues","defaultCountryCode","validationSchema","getFields","getAddressFormFieldsValidationSchema","isLoading","onRequestClose","Form","LoadingOverlay","AddressForm","Button","variant","Primary","onAfterOpen","addressFormProps","Modal","additionalModalClassName","header","ModalHeader","shouldShowCloseButton","title","AssignItemInvalidAddressError","AssignItemFailedError","findConsignment","consignments","itemId","consignment","lineItemIds","getShippableLineItems","concat","lineItemIndex","splitItems","quantity","variantId","productId","splitItem","imageUrl","alt","src","optionName","nameId","AddressSelect","shippingAddress","onToggle","bodyClassName","classNameSelected","headerClassName","headerClassNameSelected","headerContent","isSelected","transitionEndListener","done","addEndListener","classNames","in","mountOnEnter","timeout","unmountOnExit","connectFormik","OriginalComponent","InnerComponent","prevFormik","prevProps","nextFormik","nextProps","DecoratedComponent","displayName","getContextValue","selectedItemId","handleToggleItem","isDisabled","defaultSelectedItemId","Provider","ChecklistContext","handleSelect","contextValue","htmlId","Function","handleChange","selectedValue","renderHeaderContent","BasicFormField","ShippingOptionListItem","consignmentId","shippingOption","StaticShippingOption","displayAdditionalInformation","method","inputName","shippingOptions","selectedShippingOptionId","onSelectedOption","selectDefaultShippingOptions","selectShippingOption","getConsignments","selectedShippingOption","availableShippingOptions","recommendedOption","getRecommendedShippingOption","singleShippingOption","defaultShippingOption","subscribeToConsignments","unsubscribe","isMultiShippingMode","shouldShowShippingOptions","invalidShippingMessage","methodId","sort","a","b","renderConsignment","hideContentWhenLoading","renderNoShippingOptions","StaticConsignmentItemList","shippingOptionIds","subscribeToConsignmentsSelector","subscribe","subscriber","isLoadingSelector","_","isLoadingShippingOptions","isSelectingShippingOption","isUpdatingConsignment","isCreatingConsignments","isUpdatingAddress","withCheckout","checkoutService","checkoutState","getCart","getConfig","getCustomer","getCheckout","customer","config","checkoutSettings","selectConsignmentShippingOption","cartHasChanged","shouldShowOrderComments","shouldDisableSubmit","Legend","Alert","ShippingOptions","OrderComments","handleCloseErrorModal","createCustomerAddressError","handleSaveAddress","createCustomerAddress","itemAddingAddress","itemKey","handleCloseAddAddressForm","assignItem","onUnhandledError","isValidAddress","syncItems","hasSelectedShippingOptions","currentItems","updatedItemIndex","cartItemIds","updatedConsignment","newId","matchingCartItemIds","findNewItemId","updateShippableItems","findIndex","getDerivedStateFromProps","isGuest","onSignIn","onCreateAccount","TranslatedLink","ErrorModal","error","onClose","shouldShowErrorCode","hasUnassignedLineItems","onSubmit","orderComment","enableReinitialize","handleFieldValueChange","onFieldChange","initialize","deinitialize","containerId","tabIndex","formFieldName","handleAutocompleteToggle","onAddressSelect","formAddress","hasAddresses","hasValidCustomerAddress","unmountContentWhenLoading","buttonId","customFormFields","shouldShowCustomFormFields","padding","size","Tiny","Secondary","hasRequestedShippingOptions","isShippingStepPending","setSubmitted","initializeShipping","defaultOptions","amazon","container","onError","amazonpay","editAddressButtonId","SHIPPING_ADDRESS_FIELDS","SHIPPING_AUTOSAVE_DELAY","isResettingAddress","isUpdatingShippingData","isValid","handleFieldChange","setTimeout","isShippingField","updateAddressWithFormData","handleAddressSelect","updateAddress","setValues","mapAddressToFormValues","deleteConsignments","debouncedUpdateAddress","includeShippingOptions","include","addressForm","shouldShowBillingSameAsShipping","some","updatedShippingAddress","contextType","billingSameAsShipping","isInitialValid","isValidSync","getCustomFormFieldsValidationSchema","customerMessage","isBillingSameAsShipping","onMultiShippingSubmit","onSingleShippingSubmit","shouldShowAddAddressInCheckout","signOut","onMultiShippingChange","shouldShowMultiShipping","handleSingleShippingSubmit","addressValues","updateCheckout","updateShippingAddress","updateBillingAddress","navigateNextStep","billingAddress","promises","hasRemoteBilling","all","unassignItem","location","handleMultiShippingSubmit","isInitializing","loadShippingAddressFields","loadShippingOptions","onReady","initializeShippingMethod","deinitializeShippingMethod","onToggleMultiShipping","shippingFormProps","deleteConsignmentsSelector","deleteConsignment","getShippingAddress","mapToShippingProps","getBillingAddress","getShippingAddressFields","getShippingCountries","isCreatingCustomerAddress","isLoadingShippingCountries","isUpdatingBillingAddress","isUpdatingCheckout","enableOrderComments","features","hasMultiShippingEnabled","shippableItemsCount","assignItemsToAddress","deinitializeShipping","signOutCustomer","unassignItemsToAddress"],"mappings":"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","file":"shipping-3e102efd.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 { Address, AddressRequestBody, BillingAddress, CustomerAddress } from '@bigcommerce/checkout-sdk';\nimport { isEqual, omit } from 'lodash';\n\ntype ComparableAddress = CustomerAddress | Address | BillingAddress | AddressRequestBody;\ntype ComparableAddressFields = keyof CustomerAddress | keyof Address | keyof BillingAddress;\n\nexport default function isEqualAddress(address1?: ComparableAddress, address2?: ComparableAddress): boolean {\n    if (!address1 || !address2) {\n        return false;\n    }\n\n    return isEqual(\n        normalizeAddress(address1),\n        normalizeAddress(address2)\n    ) && isSameState(address1, address2);\n}\n\nfunction isSameState(address1: ComparableAddress, address2: ComparableAddress): boolean {\n    if (address1.stateOrProvince && address1.stateOrProvince === address2.stateOrProvince) {\n        return true;\n    }\n\n    if (address1.stateOrProvinceCode && address1.stateOrProvinceCode === address2.stateOrProvinceCode) {\n        return true;\n    }\n\n    return address1.stateOrProvince === address2.stateOrProvince &&\n        address1.stateOrProvinceCode === address2.stateOrProvinceCode;\n}\n\nfunction normalizeAddress(address: ComparableAddress) {\n    const ignoredFields: ComparableAddressFields[] = [\n        'id',\n        'shouldSaveAddress',\n        'stateOrProvince',\n        'stateOrProvinceCode',\n        'type',\n        'email',\n        'country',\n    ];\n\n    return omit(\n        {\n            ...address,\n            customFields: (address.customFields || []).filter(({ fieldValue }) => !!fieldValue),\n        },\n        ignoredFields\n    );\n}\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 { Cart } from '@bigcommerce/checkout-sdk';\n\nimport getLineItemsCount from './getLineItemsCount';\n\nexport default function getShippableItemsCount(cart: Cart): number {\n    return getLineItemsCount(cart.lineItems.physicalItems.filter(item => !item.addedByPromotion));\n}\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 { AddressKeyMap } from './address';\n\nexport const ADDRESS_FIELD_IDS: AddressKeyMap = {\n    address1: 'addressLine1',\n    address2: 'addressLine2',\n    postalCode: 'postCode',\n    stateOrProvince: 'province',\n    stateOrProvinceCode: 'provinceCode',\n};\n\nexport function getAddressFormFieldLegacyName(name: string): string {\n    return `${ADDRESS_FIELD_IDS[name] || name}`;\n}\n\nexport function getAddressFormFieldInputId(name: string): string {\n    return `${getAddressFormFieldLegacyName(name)}Input`;\n}\n","import { GoogleAddressFieldType } from './googleAutocompleteTypes';\n\nexport default class AddressSelector {\n    protected _address: google.maps.GeocoderAddressComponent[] | undefined;\n    protected _name: string;\n\n    constructor(\n        googlePlace: google.maps.places.PlaceResult\n    ) {\n        const { address_components, name } = googlePlace;\n\n        this._name = name;\n        this._address = address_components;\n    }\n\n    getState(): string {\n        return this._get('administrative_area_level_1', 'short_name');\n    }\n\n    getStreet(): string {\n        return this._name;\n    }\n\n    getStreet2(): string {\n        return '';\n    }\n\n    getCity(): string {\n        return this._get('postal_town', 'long_name') ||\n            this._get('locality', 'long_name') ||\n            this._get('neighborhood', 'short_name');\n    }\n\n    getCountry(): string {\n        return this._get('country', 'short_name');\n    }\n\n    getPostCode(): string {\n        return this._get('postal_code', 'short_name');\n    }\n\n    protected _get(\n        type: GoogleAddressFieldType,\n        access: Exclude<keyof google.maps.GeocoderAddressComponent, 'types'>\n    ): string {\n        const element = this._address && this._address.find(field => field.types.indexOf(type) !== -1);\n\n        if (element) {\n            return element[access];\n        }\n\n        return '';\n    }\n}\n","import AddressSelector from './AddressSelector';\n\nexport default class AddressSelectorUK extends AddressSelector {\n    getState(): string {\n        return this._get('administrative_area_level_2', 'long_name');\n    }\n\n    getStreet2(): string {\n        return this._get('locality', 'long_name');\n    }\n}\n","import AddressSelector from './AddressSelector';\nimport AddressSelectorUK from './AddressSelectorUk';\n\nexport default class AddressSelectorFactory {\n    static create(autocompleteData: google.maps.places.PlaceResult): AddressSelector {\n        const addressSelector = new AddressSelector(autocompleteData);\n\n        switch (addressSelector.getCountry()) {\n        case 'GB':\n            return new AddressSelectorUK(autocompleteData);\n        }\n\n        return addressSelector;\n    }\n}\n","import React, { FunctionComponent } from 'react';\n\nimport './Popover.scss';\n\nexport interface PopoverProps {\n    children: React.ReactNode;\n}\n\nconst Popover: FunctionComponent<PopoverProps> = ({ children }) => {\n    return (\n        <div className=\"popover\">\n            { children }\n        </div>\n    );\n};\n\nexport default Popover;\n","import React, { memo, FunctionComponent } from 'react';\n\nimport './PopoverList.scss';\n\nexport interface PopoverListProps {\n    menuProps?: any;\n    highlightedIndex?: number;\n    getItemProps?: any;\n    items: PopoverListItem[];\n    testId?: string;\n}\n\nexport interface PopoverListItem {\n    id: string;\n    content: React.ReactChild[] | React.ReactChild;\n}\n\nconst PopoverList: FunctionComponent<PopoverListProps> = ({\n    highlightedIndex = -1,\n    testId,\n    getItemProps = (props: any) => props,\n    menuProps = {},\n    items,\n}) => {\n    if (!items || !items.length) {\n        return null;\n    }\n\n    return (\n        <ul\n            className=\"popoverList\"\n            data-test={ testId } { ...menuProps }\n        >\n            { items\n                .map((item, index) => (\n                    <li\n                        className={ getItemClassName(highlightedIndex, index) }\n                        data-test={ testId && `${testId}-item` }\n                        { ...getItemProps({\n                            key: item.id,\n                            index,\n                            item,\n                        }) }\n                        key={ index }\n                    >\n                        { item.content }\n                    </li>\n                )) }\n        </ul>\n    );\n};\n\nfunction getItemClassName(highlightedIndex: number, index: number): string {\n    const classes = ['popoverList-item'];\n\n    if (highlightedIndex === index) {\n        classes.push('is-active');\n    }\n\n    return classes.join(' ');\n}\n\nexport default memo(PopoverList);\n","import GoogleAutocompleteScriptLoader from './GoogleAutocompleteScriptLoader';\n\nlet instance: GoogleAutocompleteScriptLoader;\n\nexport default function getGoogleAutocompleteScriptLoader(): GoogleAutocompleteScriptLoader {\n    if (!instance) {\n        instance = new GoogleAutocompleteScriptLoader();\n    }\n\n    return instance;\n}\n","import Downshift, { DownshiftState, StateChangeOptions } from 'downshift';\nimport { isNumber, noop } from 'lodash';\nimport React, { Fragment, PureComponent, ReactChild, ReactNode } from 'react';\n\nimport { Popover, PopoverList, PopoverListItem } from '../popover';\n\nimport AutocompleteItem from './autocomplete-item';\n\nexport interface AutocompleteProps {\n    initialValue?: string;\n    initialHighlightedIndex?: number;\n    children?: ReactNode;\n    items: AutocompleteItem[];\n    inputProps?: any;\n    listTestId?: string;\n    onToggleOpen?(state: { inputValue: string; isOpen: boolean }): void;\n    onSelect?(item: AutocompleteItem): void;\n    onChange?(value: string, isOpen: boolean): void;\n}\n\nclass Autocomplete extends PureComponent<AutocompleteProps> {\n    render(): ReactNode {\n        const {\n            inputProps,\n            initialValue,\n            initialHighlightedIndex,\n            items,\n            children,\n            onSelect,\n            listTestId,\n        } = this.props;\n\n        return (\n            <Downshift\n                defaultHighlightedIndex={ 0 }\n                initialHighlightedIndex={ initialHighlightedIndex }\n                initialInputValue={ initialValue }\n                itemToString={ this.itemToString }\n                onChange={ onSelect }\n                onStateChange={ this.handleStateChange }\n                stateReducer={ this.stateReducer }\n            >\n                { ({\n                    isOpen,\n                    getInputProps,\n                    getMenuProps,\n                    getItemProps,\n                    highlightedIndex,\n                }) => (\n                    <div>\n                        <input\n                            { ...getInputProps() }\n                            { ...inputProps }\n                        />\n                        { isOpen && !!items.length &&\n                            <Popover>\n                                <PopoverList\n                                    getItemProps={ getItemProps }\n                                    highlightedIndex={ isNumber(highlightedIndex) ? highlightedIndex : -1 }\n                                    items={ items.map(item => this.toPopoverItem(item)) }\n                                    menuProps={ getMenuProps() }\n                                    testId={ listTestId }\n                                />\n                                { children }\n                            </Popover> }\n                    </div>\n                ) }\n            </Downshift>\n        );\n    }\n\n    private toPopoverItem(item: AutocompleteItem): PopoverListItem {\n        return {\n            ...item,\n            content: this.highlightItem(item),\n        };\n    }\n\n    private highlightItem(item: AutocompleteItem): ReactChild[] | ReactChild {\n        if (!item.highlightedSlices || !item.highlightedSlices.length) {\n            return item.label;\n        }\n\n        let lastIndex: number = 0;\n        let key = 0;\n\n        return item.highlightedSlices.reduce((node, slice, i) => {\n            const { label } = item;\n            const { offset, length } = slice;\n            const notHighlightedLength = offset - lastIndex;\n\n            if (notHighlightedLength) {\n                node.push(<Fragment key={ key }>\n                    { label.substr(lastIndex, notHighlightedLength) }\n                </Fragment>);\n                key += 1;\n            }\n\n            lastIndex  = offset + length;\n\n            node.push(<strong key={ key }>{ label.substr(offset, length) }</strong>);\n            key += 1;\n\n            if (i === (item.highlightedSlices || []).length - 1) {\n                node.push(<Fragment key={ key }>\n                    { label.substr(lastIndex) }\n                </Fragment>);\n                key += 1;\n            }\n\n            return node;\n        }, [] as ReactChild[]);\n    }\n\n    private itemToString(item?: AutocompleteItem): string {\n        return item && item.value || '';\n    }\n\n    private stateReducer: (\n        state: DownshiftState<AutocompleteItem>,\n        changes: StateChangeOptions<AutocompleteItem>\n    ) => Partial<StateChangeOptions<AutocompleteItem>> = (state, changes) => {\n        const { onChange } = this.props;\n\n        switch (changes.type) {\n        case Downshift.stateChangeTypes.blurInput:\n        case Downshift.stateChangeTypes.blurButton:\n        case Downshift.stateChangeTypes.mouseUp:\n        case Downshift.stateChangeTypes.touchEnd:\n            return {\n                ...changes,\n                inputValue: state.inputValue,\n            };\n\n        case Downshift.stateChangeTypes.changeInput:\n            if (changes.inputValue !== state.inputValue && onChange) {\n                onChange(changes.inputValue || '', state.isOpen);\n            }\n\n            return changes;\n\n        case Downshift.stateChangeTypes.keyDownEnter:\n            return changes;\n\n        default:\n            return changes;\n        }\n        };\n\n    private handleStateChange = ({ isOpen, inputValue }: StateChangeOptions<string>) => {\n        const { onToggleOpen = noop } = this.props;\n\n        if (isOpen !== undefined) {\n            onToggleOpen({ isOpen, inputValue: inputValue || '' });\n        }\n    };\n}\n\nexport default Autocomplete;\n","import { getScriptLoader, ScriptLoader } from '@bigcommerce/script-loader';\n\nimport { GoogleAutocompleteWindow, GoogleMapsSdk } from './googleAutocompleteTypes';\n\nexport default class GoogleAutocompleteScriptLoader {\n    private _scriptLoader: ScriptLoader;\n    private _googleAutoComplete?: Promise<GoogleMapsSdk>;\n\n    constructor() {\n        this._scriptLoader = getScriptLoader();\n    }\n\n    loadMapsSdk(apiKey: string): Promise<GoogleMapsSdk> {\n        if (this._googleAutoComplete) {\n            return this._googleAutoComplete;\n        }\n\n        this._googleAutoComplete = new Promise((resolve, reject) => {\n            const callbackName = 'initAutoComplete';\n            const params = [\n                'language=en',\n                `key=${apiKey}`,\n                'libraries=places',\n                `callback=${callbackName}`,\n            ].join('&');\n\n            (window as GoogleCallbackWindow)[callbackName] = () => {\n                if (isAutocompleteWindow(window)) {\n                    resolve(window.google.maps);\n                }\n\n                reject();\n            };\n\n            this._scriptLoader.loadScript(`//maps.googleapis.com/maps/api/js?${params}`)\n                .catch(e => {\n                    this._googleAutoComplete = undefined;\n                    throw e;\n                });\n        });\n\n        return this._googleAutoComplete;\n    }\n}\n\nfunction isAutocompleteWindow(window: Window): window is GoogleAutocompleteWindow {\n    const autocompleteWindow = window as GoogleAutocompleteWindow;\n\n    return Boolean(autocompleteWindow.google &&\n        autocompleteWindow.google.maps &&\n        autocompleteWindow.google.maps.places);\n}\n\nexport interface GoogleCallbackWindow extends Window {\n    initAutoComplete?(): void;\n}\n","import getGoogleAutocompleteScriptLoader from './getGoogleAutocompleteScriptLoader';\nimport GoogleAutocompleteScriptLoader from './GoogleAutocompleteScriptLoader';\n\nexport default class GoogleAutocompleteService {\n    private _autocompletePromise?: Promise<google.maps.places.AutocompleteService>;\n    private _placesPromise?: Promise<google.maps.places.PlacesService>;\n\n    constructor(\n        private _apiKey: string,\n        private _scriptLoader: GoogleAutocompleteScriptLoader = getGoogleAutocompleteScriptLoader()\n    ) {}\n\n    getAutocompleteService(): Promise<google.maps.places.AutocompleteService> {\n        if (!this._autocompletePromise) {\n            this._autocompletePromise = this._scriptLoader.loadMapsSdk(this._apiKey)\n                .then(googleMapsSdk => {\n                    if (!googleMapsSdk.places.AutocompleteService) {\n                        throw new Error('`AutocompleteService` is undefined');\n                    }\n\n                    return new googleMapsSdk.places.AutocompleteService();\n                });\n        }\n\n        return this._autocompletePromise;\n    }\n\n    getPlacesServices(): Promise<google.maps.places.PlacesService> {\n        const node = document.createElement('div');\n\n        if (!this._placesPromise) {\n            this._placesPromise = this._scriptLoader.loadMapsSdk(this._apiKey)\n                .then(googleMapsSdk => {\n                    if (!googleMapsSdk.places.PlacesService) {\n                        throw new Error('`PlacesService` is undefined');\n                    }\n\n                    return new googleMapsSdk.places.PlacesService(node);\n                });\n        }\n\n        return this._placesPromise;\n    }\n}\n","import { noop } from 'lodash';\nimport React, { PureComponent, ReactNode } from 'react';\n\nimport { Autocomplete, AutocompleteItem } from '../../ui/autocomplete';\n\nimport { GoogleAutocompleteOptionTypes } from './googleAutocompleteTypes';\nimport './GoogleAutocomplete.scss';\nimport GoogleAutocompleteService from './GoogleAutocompleteService';\n\ninterface GoogleAutocompleteProps {\n    initialValue?: string;\n    componentRestrictions?: google.maps.places.ComponentRestrictions;\n    fields?: string[];\n    apiKey: string;\n    nextElement?: HTMLElement;\n    inputProps?: any;\n    isAutocompleteEnabled?: boolean;\n    types?: GoogleAutocompleteOptionTypes[];\n    onSelect?(place: google.maps.places.PlaceResult, item: AutocompleteItem): void;\n    onToggleOpen?(state: { inputValue: string; isOpen: boolean }): void;\n    onChange?(value: string, isOpen: boolean): void;\n}\n\ninterface GoogleAutocompleteState {\n    items: AutocompleteItem[];\n    autoComplete: string;\n}\n\nclass GoogleAutocomplete extends PureComponent<GoogleAutocompleteProps, GoogleAutocompleteState> {\n    googleAutocompleteService: GoogleAutocompleteService;\n\n    constructor(props: GoogleAutocompleteProps) {\n        super(props);\n        this.googleAutocompleteService = new GoogleAutocompleteService(props.apiKey);\n        this.state = {\n            items: [],\n            autoComplete: 'off',\n        };\n    }\n\n    render(): ReactNode {\n        const {\n            initialValue,\n            onToggleOpen = noop,\n            inputProps = {},\n        } = this.props;\n\n        const {\n            autoComplete,\n            items,\n        } = this.state;\n\n        return (\n            <Autocomplete\n                initialHighlightedIndex={ 0 }\n                initialValue={ initialValue }\n                inputProps={ {\n                    ...inputProps,\n                    autoComplete,\n                } }\n                items={ items }\n                listTestId=\"address-autocomplete-suggestions\"\n                onChange={ this.onChange }\n                onSelect={ this.onSelect }\n                onToggleOpen={ onToggleOpen }\n            >\n                <div className=\"co-googleAutocomplete-footer\" />\n            </Autocomplete>\n        );\n    }\n\n    private onSelect: (item: AutocompleteItem) => void = item => {\n        const {\n            fields,\n            onSelect = noop,\n            nextElement,\n        } = this.props;\n\n        this.googleAutocompleteService.getPlacesServices().then(service => {\n            service.getDetails({\n                placeId: item.id,\n                fields: fields || ['address_components', 'name'],\n            }, result => {\n                if (nextElement) {\n                    nextElement.focus();\n                }\n\n                onSelect(result, item);\n            });\n        });\n    };\n\n    private onChange: (input: string) => void = input => {\n        const {\n            isAutocompleteEnabled,\n            onChange = noop,\n        } = this.props;\n\n        onChange(input, false);\n\n        if (!isAutocompleteEnabled) {\n            return this.resetAutocomplete();\n        }\n\n        this.setAutocomplete(input);\n        this.setItems(input);\n    };\n\n    private setItems(input: string): void {\n        if (!input) {\n            this.setState({ items: [] });\n\n            return;\n        }\n\n        const {\n            componentRestrictions,\n            types,\n        } = this.props;\n\n        this.googleAutocompleteService.getAutocompleteService().then(service => {\n            service.getPlacePredictions({\n                input,\n                types: types || ['geocode'],\n                componentRestrictions,\n            }, results =>\n                this.setState({ items: this.toAutocompleteItems(results) })\n            );\n        });\n    }\n\n    private resetAutocomplete(): void {\n        this.setState({\n            items: [],\n            autoComplete: 'off',\n        });\n    }\n\n    private setAutocomplete(input: string): void {\n        this.setState({\n            ...this.state,\n            autoComplete: input && input.length ? 'nope' : 'off',\n        });\n    }\n\n    private toAutocompleteItems(results?: google.maps.places.AutocompletePrediction[]): AutocompleteItem[] {\n        return (results || []).map(result => ({\n            label: result.description,\n            value: result.structured_formatting.main_text,\n            highlightedSlices: result.matched_substrings,\n            id: result.place_id,\n        }));\n    }\n}\n\nexport default GoogleAutocomplete;\n","import { FormField as FormFieldType } from '@bigcommerce/checkout-sdk';\nimport { FieldProps } from 'formik';\nimport React, { memo, useCallback, useMemo, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../../locale';\nimport { AutocompleteItem } from '../../ui/autocomplete';\nimport { FormField } from '../../ui/form';\nimport { getAddressFormFieldInputId } from '../getAddressFormFieldInputId';\n\nimport GoogleAutocomplete from './GoogleAutocomplete';\n\nexport interface GoogleAutocompleteFormFieldProps {\n    apiKey: string;\n    field: FormFieldType;\n    countryCode?: string;\n    supportedCountries: string[];\n    nextElement?: HTMLElement;\n    parentFieldName?: string;\n    onSelect(place: google.maps.places.PlaceResult, item: AutocompleteItem): void;\n    onToggleOpen?(state: { inputValue: string; isOpen: boolean }): void;\n    onChange(value: string, isOpen: boolean): void;\n}\n\nconst GoogleAutocompleteFormField: FunctionComponent<GoogleAutocompleteFormFieldProps>  = ({\n    field: {\n        name,\n    },\n    countryCode,\n    supportedCountries,\n    parentFieldName,\n    nextElement,\n    apiKey,\n    onSelect,\n    onChange,\n    onToggleOpen,\n}) => {\n    const fieldName = parentFieldName ? `${parentFieldName}.${name}` : name;\n\n    const labelContent = useMemo(() => (\n        <TranslatedString id=\"address.address_line_1_label\" />\n    ), []);\n\n    const inputProps = useMemo(() => ({\n        className: 'form-input optimizedCheckout-form-input',\n        id: getAddressFormFieldInputId(name),\n    }), [name]);\n\n    const renderInput = useCallback(({ field }: FieldProps) => (\n        <GoogleAutocomplete\n            apiKey={ apiKey }\n            componentRestrictions={ countryCode ?\n                { country: countryCode } :\n                undefined }\n            initialValue={ field.value }\n            inputProps={ inputProps }\n            isAutocompleteEnabled={ countryCode ?\n                supportedCountries.indexOf(countryCode) > -1 :\n                false }\n            nextElement={ nextElement }\n            onChange={ onChange }\n            onSelect={ onSelect }\n            onToggleOpen={ onToggleOpen }\n        />\n    ), [\n        apiKey,\n        countryCode,\n        inputProps,\n        nextElement,\n        onChange,\n        onSelect,\n        onToggleOpen,\n        supportedCountries,\n    ]);\n\n    return (\n        <div className={ `dynamic-form-field dynamic-form-field--addressLineAutocomplete` }>\n            <FormField\n                input={ renderInput }\n                labelContent={ labelContent }\n                name={ fieldName }\n            />\n        </div>\n    );\n};\n\nexport default memo(GoogleAutocompleteFormField);\n","import { Address, Country, FormField } from '@bigcommerce/checkout-sdk';\nimport { memoize } from '@bigcommerce/memoize';\nimport { forIn, noop } from 'lodash';\nimport React, { createRef, Component, ReactNode, RefObject } from 'react';\n\nimport { withLanguage, TranslatedString, WithLanguageProps } from '../locale';\nimport { AutocompleteItem } from '../ui/autocomplete';\nimport { CheckboxFormField, DynamicFormField, DynamicFormFieldType, Fieldset } from '../ui/form';\n\nimport { AddressKeyMap } from './address';\nimport { getAddressFormFieldInputId, getAddressFormFieldLegacyName } from './getAddressFormFieldInputId';\nimport { mapToAddress, GoogleAutocompleteFormField } from './googleAutocomplete';\nimport './AddressForm.scss';\n\nexport interface AddressFormProps {\n    fieldName?: string;\n    countryCode?: string;\n    countriesWithAutocomplete?: string[];\n    countries?: Country[];\n    formFields: FormField[];\n    googleMapsApiKey?: string;\n    shouldShowSaveAddress?: boolean;\n    onAutocompleteSelect?(address: Partial<Address>): void;\n    onAutocompleteToggle?(state: { inputValue: string; isOpen: boolean }): void;\n    onChange?(fieldName: string, value: string | string[]): void;\n    setFieldValue?(fieldName: string, value: string | string[]): void;\n}\n\nconst LABEL: AddressKeyMap = {\n    address1: 'address.address_line_1_label',\n    address2: 'address.address_line_2_label',\n    city: 'address.city_label',\n    company: 'address.company_name_label',\n    countryCode: 'address.country_label',\n    firstName: 'address.first_name_label',\n    lastName: 'address.last_name_label',\n    phone: 'address.phone_number_label',\n    postalCode: 'address.postal_code_label',\n    stateOrProvince: 'address.state_label',\n    stateOrProvinceCode: 'address.state_label',\n};\n\nconst AUTOCOMPLETE: AddressKeyMap = {\n    address1: 'address-line1',\n    address2: 'address-line2',\n    city: 'address-level2',\n    company: 'organization',\n    countryCode: 'country',\n    firstName: 'given-name',\n    lastName: 'family-name',\n    phone: 'tel',\n    postalCode: 'postal-code',\n    stateOrProvince: 'address-level1',\n    stateOrProvinceCode: 'address-level1',\n};\n\nconst PLACEHOLDER: AddressKeyMap = {\n    countryCode: 'address.select_country_action',\n    stateOrProvince: 'address.select_state_action',\n    stateOrProvinceCode: 'address.select_state_action',\n};\n\nconst AUTOCOMPLETE_FIELD_NAME = 'address1';\n\nclass AddressForm extends Component<AddressFormProps & WithLanguageProps> {\n    private containerRef: RefObject<HTMLElement> = createRef();\n    private nextElement?: HTMLElement | null;\n\n    private handleDynamicFormFieldChange: (name: string) => (value: string | string[]) => void = memoize(name => value => {\n        this.syncNonFormikValue(name, value);\n    });\n\n    componentDidMount(): void {\n        const { current } = this.containerRef;\n\n        if (current) {\n            this.nextElement = current.querySelector<HTMLElement>('[autocomplete=\"address-line2\"]');\n        }\n    }\n\n    render(): ReactNode {\n        const {\n            formFields,\n            fieldName,\n            language,\n            countriesWithAutocomplete,\n            countryCode,\n            googleMapsApiKey,\n            onAutocompleteToggle,\n            shouldShowSaveAddress,\n        } = this.props;\n\n        return (<>\n            <Fieldset>\n                <div className=\"checkout-address\" ref={ this.containerRef as RefObject<HTMLDivElement> }>\n                    { formFields.map(field => {\n                        const addressFieldName = field.name;\n                        const translatedPlaceholderId = PLACEHOLDER[addressFieldName];\n\n                        if (addressFieldName === 'address1' && googleMapsApiKey && countriesWithAutocomplete) {\n                            return (\n                                <GoogleAutocompleteFormField\n                                    apiKey={ googleMapsApiKey }\n                                    countryCode={ countryCode }\n                                    field={ field }\n                                    key={ field.id }\n                                    nextElement={ this.nextElement || undefined }\n                                    onChange={ this.handleAutocompleteChange }\n                                    onSelect={ this.handleAutocompleteSelect }\n                                    onToggleOpen={ onAutocompleteToggle }\n                                    parentFieldName={ fieldName }\n                                    supportedCountries={ countriesWithAutocomplete }\n                                />\n                            );\n                        }\n\n                        return (\n                            <DynamicFormField\n                                autocomplete={ AUTOCOMPLETE[field.name] }\n                                extraClass={ `dynamic-form-field--${getAddressFormFieldLegacyName(addressFieldName)}` }\n                                field={ field }\n                                inputId={ getAddressFormFieldInputId(addressFieldName) }\n                                // stateOrProvince can sometimes be a dropdown or input, so relying on id is not sufficient\n                                key={ `${field.id}-${field.name}` }\n                                label={ field.custom ? field.label : <TranslatedString id={ LABEL[field.name] } /> }\n                                onChange={ this.handleDynamicFormFieldChange(addressFieldName) }\n                                parentFieldName={ field.custom ?\n                                    (fieldName ? `${fieldName}.customFields` : 'customFields') :\n                                    fieldName }\n                                placeholder={ translatedPlaceholderId && language.translate(translatedPlaceholderId) }\n                            />\n                        );\n                    }) }\n                </div>\n            </Fieldset>\n            { shouldShowSaveAddress &&\n                <CheckboxFormField\n                    labelContent={ <TranslatedString id=\"address.save_in_addressbook\" /> }\n                    name={ fieldName ? `${fieldName}.shouldSaveAddress` : 'shouldSaveAddress' }\n                /> }\n        </>);\n    }\n\n    private handleAutocompleteChange: (value: string, isOpen: boolean) => void = (value, isOpen) => {\n        if (!isOpen) {\n            this.syncNonFormikValue(AUTOCOMPLETE_FIELD_NAME, value);\n        }\n    };\n\n    private handleAutocompleteSelect: (\n        place: google.maps.places.PlaceResult,\n        item: AutocompleteItem\n    ) => void = (place, { value: autocompleteValue }) => {\n        const {\n            countries,\n            setFieldValue = noop,\n            onChange = noop,\n        } = this.props;\n\n        const address = mapToAddress(place, countries);\n\n        forIn(address, (value, fieldName) => {\n            setFieldValue(fieldName, value as string);\n            onChange(fieldName, value as string);\n        });\n\n        if (autocompleteValue) {\n            this.syncNonFormikValue(AUTOCOMPLETE_FIELD_NAME, autocompleteValue);\n        }\n    };\n\n    // because autocomplete state is controlled by Downshift, we need to manually keep formik\n    // value in sync when autocomplete value changes\n    private syncNonFormikValue: (\n        fieldName: string,\n        value: string | string[]\n    ) => void = (fieldName, value) => {\n        const {\n            formFields,\n            setFieldValue = noop,\n            onChange = noop,\n        } = this.props;\n\n        const dateFormFieldNames = formFields\n            .filter(field => field.custom && field.fieldType === DynamicFormFieldType.date)\n            .map(field => field.name);\n\n        if (fieldName === AUTOCOMPLETE_FIELD_NAME || dateFormFieldNames.indexOf(fieldName) > -1) {\n            setFieldValue(fieldName, value);\n        }\n\n        onChange(fieldName, value);\n    };\n}\n\nexport default withLanguage(AddressForm);\n","import { Address, Country, Region } from '@bigcommerce/checkout-sdk';\n\nimport AddressSelectorFactory from './AddressSelectorFactory';\n\nexport default function mapToAddress(\n    autocompleteData: google.maps.places.PlaceResult,\n    countries: Country[] = []\n): Partial<Address> {\n    if (!autocompleteData || !autocompleteData.address_components) {\n        return {};\n    }\n\n    const accessor = AddressSelectorFactory.create(autocompleteData);\n    const state = accessor.getState();\n    const countryCode = accessor.getCountry();\n    const country = countries && countries.find(c => countryCode === c.code);\n    const street2 = accessor.getStreet2();\n\n    return {\n        address2: street2,\n        city: accessor.getCity(),\n        countryCode,\n        postalCode: accessor.getPostCode(),\n        ...state ? getState(state, country && country.subdivisions) : {},\n    };\n}\n\nfunction getState(\n    stateName: string,\n    states: Region[] = []\n): Partial<Address> {\n    const state = states.find(({ code, name }: Region) =>\n        code === stateName || name === stateName\n    );\n\n    if (!state) {\n        return {\n            stateOrProvince: !states.length ? stateName : '',\n            stateOrProvinceCode: '',\n        };\n    }\n\n    return {\n        stateOrProvince: state.name,\n        stateOrProvinceCode: state.code,\n    };\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 { Address } from '@bigcommerce/checkout-sdk';\n\nimport { mapCustomFormFieldsFromFormValues } from '../formFields';\n\nimport { AddressFormValues } from './mapAddressToFormValues';\n\nexport default function mapAddressFromFormValues(formValues: AddressFormValues): Address {\n    const { customFields, ...address } = formValues;\n    const shouldSaveAddress = formValues.shouldSaveAddress;\n\n    return {\n        ...address,\n        shouldSaveAddress,\n        customFields: mapCustomFormFieldsFromFormValues(customFields),\n    };\n}\n","import { Address, CustomerAddress, FormField } from '@bigcommerce/checkout-sdk';\nimport { some } from 'lodash';\n\nimport isEqualAddress from './isEqualAddress';\nimport isValidAddress from './isValidAddress';\n\nexport default function isValidCustomerAddress(\n    address: Address | undefined,\n    addresses: CustomerAddress[],\n    formFields: FormField[]\n): boolean {\n    if (!address || !isValidAddress(address, formFields)) {\n        return false;\n    }\n\n    return some(addresses, customerAddress => isEqualAddress(customerAddress, address));\n}\n","import { FieldProps } from 'formik';\nimport React, { useCallback, useMemo, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { Fieldset, FormField, Label, Legend, TextInput } from '../ui/form';\n\nconst OrderComments: FunctionComponent = () => {\n    const renderLabel = useCallback(name => (\n        <Label hidden htmlFor={ name }>\n            <TranslatedString id=\"shipping.order_comment_label\" />\n        </Label>\n    ), []);\n\n    const renderInput = useCallback(({ field }: FieldProps) => (\n        <TextInput\n            { ...field }\n            autoComplete={ 'off' }\n            maxLength={ 2000 }\n        />\n    ), []);\n\n    const legend = useMemo(() => (\n        <Legend>\n            <TranslatedString id=\"shipping.order_comment_label\" />\n        </Legend>\n    ), []);\n\n    return <Fieldset legend={ legend } testId=\"checkout-shipping-comments\">\n        <FormField\n            input={ renderInput }\n            label={ renderLabel }\n            name=\"orderComment\"\n        />\n    </Fieldset>;\n};\n\nexport default OrderComments;\n","import { Checkout, CheckoutPayment } from '@bigcommerce/checkout-sdk';\n\nimport { isGiftCertificatePayment } from '../giftCertificate';\n\nimport { isStoreCreditPayment } from './storeCredit';\n\nexport default function getPreselectedPayment(checkout: Checkout): CheckoutPayment | undefined {\n    const payments = checkout && checkout.payments ? checkout.payments : [];\n\n    return payments.find(payment =>\n        !isGiftCertificatePayment(payment)\n        && !isStoreCreditPayment(payment)\n        && !!payment.providerId\n    );\n}\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 { Placement } from 'popper.js';\nimport React, { Component, MouseEventHandler, ReactNode } from 'react';\nimport { Manager, Popper, Reference } from 'react-popper';\n\nexport interface DropdownTriggerProps {\n    placement?: Placement;\n    dropdown: ReactNode;\n}\n\nexport interface DropdownTriggerState {\n    shouldShow: boolean;\n}\n\nexport default class DropdownTrigger extends Component<DropdownTriggerProps, DropdownTriggerState> {\n    static defaultProps = {\n        placement: 'bottom-start',\n    };\n\n    state: Readonly<DropdownTriggerState> = {\n        shouldShow: false,\n    };\n\n    componentWillUnmount(): void {\n        document.removeEventListener('click', this.handleClose);\n    }\n\n    render() {\n        const { children, placement, dropdown } = this.props;\n        const { shouldShow } = this.state;\n\n        return (\n            <Manager>\n                <Reference>\n                    { ({ ref }) => (\n                        <div\n                            className=\"dropdownTrigger\"\n                            onClick={ this.handleClick }\n                            ref={ ref }\n                        >\n                            { children }\n                        </div>\n                    ) }\n                </Reference>\n\n                <Popper\n                    modifiers={ {\n                        hide: { enabled: false },\n                        flip: { enabled: false },\n                        preventOverflow: { enabled: false },\n                    } }\n                    placement={ placement }\n                >\n                    { ({ ref, style }) => !shouldShow ? null : (\n                        <div\n                            className=\"dropdownMenu\"\n                            ref={ ref }\n                            style={ {\n                                ...style,\n                                width: '100%',\n                                zIndex: 1,\n                            } }\n                        >\n                            { dropdown }\n                        </div>\n                    ) }\n                </Popper>\n            </Manager>\n        );\n    }\n\n    private handleClick: MouseEventHandler<HTMLElement> = event => {\n        const { shouldShow } = this.state;\n\n        if (shouldShow) {\n            this.handleClose(event.nativeEvent);\n        } else {\n            this.handleOpen(event.nativeEvent);\n        }\n    };\n\n    private handleOpen: (event: MouseEvent) => void = () => {\n        const { shouldShow } = this.state;\n\n        if (shouldShow) {\n            return;\n        }\n\n        this.setState({ shouldShow: true }, () => {\n            document.addEventListener('click', this.handleClose);\n        });\n    };\n\n    private handleClose: (event: MouseEvent) => void = () => {\n        const { shouldShow } = this.state;\n\n        if (!shouldShow) {\n            return;\n        }\n\n        this.setState({ shouldShow: false }, () => {\n            document.removeEventListener('click', this.handleClose);\n        });\n    };\n}\n","import { Address, CustomerAddress } from '@bigcommerce/checkout-sdk';\nimport React, { memo, FunctionComponent, PureComponent, ReactNode } from 'react';\n\nimport { preventDefault } from '../common/dom';\nimport { TranslatedString } from '../locale';\nimport { DropdownTrigger } from '../ui/dropdown';\n\nimport isEqualAddress from './isEqualAddress';\nimport './AddressSelect.scss';\nimport StaticAddress from './StaticAddress';\n\nexport interface AddressSelectProps {\n    addresses: CustomerAddress[];\n    selectedAddress?: Address;\n    onSelectAddress(address: Address): void;\n    onUseNewAddress(currentAddress?: Address): void;\n}\n\nclass AddressSelect extends PureComponent<AddressSelectProps> {\n    render(): ReactNode {\n        const {\n            addresses,\n            selectedAddress,\n        } = this.props;\n\n        return (\n            <div className=\"form-field\">\n                <div className=\"dropdown--select\" role=\"combobox\">\n                    <DropdownTrigger\n                        dropdown={\n                            <AddressSelectMenu\n                                addresses={ addresses }\n                                onSelectAddress={ this.handleSelectAddress }\n                                onUseNewAddress={ this.handleUseNewAddress }\n                                selectedAddress={ selectedAddress }\n                            />\n                        }\n                    >\n                        <AddressSelectButton\n                            addresses={ addresses }\n                            selectedAddress={ selectedAddress }\n                        />\n                    </DropdownTrigger>\n                </div>\n            </div>\n        );\n    }\n\n    private handleSelectAddress: (newAddress: Address) => void = (newAddress: Address) => {\n        const {\n            onSelectAddress,\n            selectedAddress,\n        } = this.props;\n\n        if (!isEqualAddress(selectedAddress, newAddress)) {\n            onSelectAddress(newAddress);\n        }\n    };\n\n    private handleUseNewAddress: () => void = () => {\n        const {\n            selectedAddress,\n            onUseNewAddress,\n        } = this.props;\n\n        onUseNewAddress(selectedAddress);\n    };\n}\n\nconst AddressSelectMenu: FunctionComponent<AddressSelectProps> = ({\n    addresses,\n    onSelectAddress,\n    onUseNewAddress,\n    selectedAddress,\n}) => (\n    <ul\n        className=\"dropdown-menu instrumentSelect-dropdownMenu\"\n        id=\"addressDropdown\"\n    >\n        <li className=\"dropdown-menu-item dropdown-menu-item--select\">\n            <a\n                data-test=\"add-new-address\"\n                href=\"#\"\n                onClick={ preventDefault(() => onUseNewAddress(selectedAddress)) }\n            >\n                <TranslatedString id=\"address.enter_address_action\" />\n            </a>\n        </li>\n        { addresses.map(address => (\n            <li\n                className=\"dropdown-menu-item dropdown-menu-item--select\"\n                key={ address.id }\n            >\n                <a href=\"#\" onClick={ preventDefault(() => onSelectAddress(address)) }>\n                    <StaticAddress address={ address } />\n                </a>\n            </li>\n        )) }\n    </ul>\n);\n\ntype AddressSelectButtonProps = Pick<AddressSelectProps, 'selectedAddress' | 'addresses'>;\n\nconst AddressSelectButton: FunctionComponent<AddressSelectButtonProps> = ({\n    selectedAddress,\n}) => (\n    <a\n        className=\"button dropdown-button dropdown-toggle--select\"\n        href=\"#\"\n        id=\"addressToggle\"\n        onClick={ preventDefault() }\n    >\n        { selectedAddress ?\n            <StaticAddress address={ selectedAddress } /> :\n            <TranslatedString id=\"address.enter_address_action\" /> }\n    </a>\n);\n\nexport default memo(AddressSelect);\n","import { setPrototypeOf, CustomError } from '../../common/error';\nimport { getLanguageService } from '../../locale';\n\nexport default class UnassignItemError extends CustomError {\n    constructor(data: Error) {\n        super({\n            name: 'UNASSIGN_ITEM_FAILED',\n            message: getLanguageService().translate('shipping.unassign_item_error'),\n            data,\n        });\n\n        setPrototypeOf(this, UnassignItemError.prototype);\n    }\n}\n","import { Checkout } from '@bigcommerce/checkout-sdk';\n\nimport { getPreselectedPayment } from '../payment';\n\nexport default function getShippingMethodId(checkout: Checkout): string | undefined {\n    const SHIPPING_METHOD_IDS = ['amazon', 'amazonpay'];\n    const preselectedPayment = getPreselectedPayment(checkout);\n\n    return preselectedPayment && SHIPPING_METHOD_IDS.indexOf(preselectedPayment.providerId) > -1 ?\n        preselectedPayment.providerId :\n        undefined;\n}\n","import { Country, FormField } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport React, { FunctionComponent } from 'react';\nimport { lazy } from 'yup';\n\nimport { preventDefault } from '../common/dom';\nimport { withLanguage, TranslatedString, WithLanguageProps } from '../locale';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { Form } from '../ui/form';\nimport { LoadingOverlay } from '../ui/loading';\nimport { Modal, ModalHeader } from '../ui/modal';\n\nimport getAddressFormFieldsValidationSchema from './getAddressFormFieldsValidationSchema';\nimport { AddressFormValues } from './mapAddressToFormValues';\nimport AddressForm from './AddressForm';\n\nexport interface AddressFormModalProps extends AddressFormProps {\n    isOpen: boolean;\n    onAfterOpen?(): void;\n}\n\nexport interface AddressFormProps {\n    countries?: Country[];\n    countriesWithAutocomplete: string[];\n    googleMapsApiKey?: string;\n    isLoading: boolean;\n    shouldShowSaveAddress?: boolean;\n    defaultCountryCode?: string;\n    getFields(countryCode?: string): FormField[];\n    onSaveAddress(address: AddressFormValues): void;\n    onRequestClose?(): void;\n}\n\nconst SaveAddress: FunctionComponent<AddressFormProps & WithLanguageProps & FormikProps<AddressFormValues>> = ({\n    googleMapsApiKey,\n    getFields,\n    countriesWithAutocomplete,\n    countries,\n    values,\n    setFieldValue,\n    isLoading,\n    onRequestClose,\n}) => (\n    <Form autoComplete=\"on\">\n        <LoadingOverlay isLoading={ isLoading }>\n            <AddressForm\n                countries={ countries }\n                countriesWithAutocomplete={ countriesWithAutocomplete }\n                countryCode={ values.countryCode }\n                formFields={ getFields(values.countryCode) }\n                googleMapsApiKey={ googleMapsApiKey }\n                setFieldValue={ setFieldValue }\n                shouldShowSaveAddress={ false }\n            />\n            <div className=\"form-actions\">\n                <a\n                    className=\"button optimizedCheckout-buttonSecondary\"\n                    href=\"#\"\n                    onClick={ preventDefault(onRequestClose) }\n                >\n                    <TranslatedString id=\"common.cancel_action\" />\n                </a>\n\n                <Button\n                    disabled={ isLoading }\n                    id=\"checkout-save-address\"\n                    type=\"submit\"\n                    variant={ ButtonVariant.Primary }\n                >\n                    <TranslatedString id=\"address.save_address_action\" />\n                </Button>\n            </div>\n        </LoadingOverlay>\n    </Form>\n);\n\nconst SaveAddressForm = withLanguage(withFormik<AddressFormProps & WithLanguageProps, AddressFormValues>({\n    handleSubmit: (values, { props: { onSaveAddress } }) => {\n        onSaveAddress(values);\n    },\n    mapPropsToValues: ({ defaultCountryCode = '' }) => ({\n        firstName: '',\n        lastName: '',\n        address1: '',\n        address2: '',\n        customFields: {},\n        country: '',\n        countryCode: defaultCountryCode,\n        stateOrProvince: '',\n        stateOrProvinceCode: '',\n        postalCode: '',\n        phone: '',\n        city: '',\n        company: '',\n        shouldSaveAddress: false,\n    }),\n    validationSchema: ({\n        language,\n        getFields,\n    }: AddressFormProps & WithLanguageProps) => (\n        lazy<Partial<AddressFormValues>>(values => getAddressFormFieldsValidationSchema({\n            language,\n            formFields: getFields(values && values.countryCode),\n        }))\n    ),\n})(SaveAddress));\n\nconst AddressFormModal: FunctionComponent<AddressFormModalProps> = ({\n    isOpen,\n    onAfterOpen,\n    onRequestClose,\n    ...addressFormProps\n}) => (\n    <Modal\n        additionalModalClassName=\"modal--medium\"\n        header={\n            <ModalHeader>\n                <TranslatedString id=\"address.add_address_heading\" />\n            </ModalHeader>\n        }\n        isOpen={ isOpen }\n        onAfterOpen={ onAfterOpen }\n        onRequestClose={ onRequestClose }\n        shouldShowCloseButton={ true }\n    >\n        <SaveAddressForm\n            { ...addressFormProps }\n            onRequestClose={ onRequestClose }\n        />\n    </Modal>\n);\n\nexport default AddressFormModal;\n","import { setPrototypeOf, CustomError } from '../../common/error';\nimport { getLanguageService } from '../../locale';\n\nexport default class AssignItemInvalidAddressError extends CustomError {\n    constructor(data?: Error) {\n        super({\n            name: 'ASSIGN_ITEM_INVALID_ADDRESS',\n            message: getLanguageService().translate('shipping.assign_item_invalid_address_error'),\n            title: getLanguageService().translate('shipping.assign_item_invalid_address_error_heading'),\n            data,\n        });\n\n        setPrototypeOf(this, AssignItemInvalidAddressError.prototype);\n    }\n}\n","import { setPrototypeOf, CustomError } from '../../common/error';\nimport { getLanguageService } from '../../locale';\n\nexport default class AssignItemFailedError extends CustomError {\n    constructor(data: Error) {\n        super({\n            name: 'ASSIGN_ITEM_FAILED',\n            message: getLanguageService().translate('shipping.assign_item_error'),\n            data,\n        });\n\n        setPrototypeOf(this, AssignItemFailedError.prototype);\n    }\n}\n","import { Consignment } from '@bigcommerce/checkout-sdk';\nimport { find, includes } from 'lodash';\n\nexport default function findConsignment(\n    consignments: Consignment[],\n    itemId: string\n): Consignment | undefined {\n    return find(consignments, consignment => includes(consignment.lineItemIds, itemId));\n}\n","import { Cart, Consignment, PhysicalItem } from '@bigcommerce/checkout-sdk';\nimport { reduce } from 'lodash';\n\nimport findConsignment from './findConsignment';\nimport ShippableItem from './ShippableItem';\n\nexport default function getShippableLineItems(\n    cart: Cart,\n    consignments: Consignment[]\n): ShippableItem[] {\n    return reduce(\n        (cart && cart.lineItems.physicalItems) || [],\n        (result, item, i) => (\n            !item.addedByPromotion ?\n                result.concat(...splitItem(item, consignments, i)) :\n                result\n        ),\n        [] as ShippableItem[]\n    );\n}\n\nfunction splitItem(\n    item: PhysicalItem,\n    consignments: Consignment[],\n    lineItemIndex: number\n): ShippableItem[] {\n    let splitItems: ShippableItem[] = [];\n    const consignment = findConsignment(consignments, item.id as string);\n\n    for (let i = 0; i < item.quantity; i++) {\n        splitItems = splitItems.concat({\n            ...item,\n            key: `${item.variantId}-${item.productId}-${lineItemIndex}-${i}`,\n            consignment,\n            quantity: 1,\n        });\n    }\n\n    return splitItems;\n}\n","import { Address, CustomerAddress } from '@bigcommerce/checkout-sdk';\nimport React, { memo, useCallback, FunctionComponent } from 'react';\n\nimport { AddressSelect } from '../address';\n\nimport ShippableItem from './ShippableItem';\n\nexport interface ItemAddressSelectProps {\n    item: ShippableItem;\n    addresses: CustomerAddress[];\n    onSelectAddress(address: Address, itemId: string, itemKey: string): void;\n    onUseNewAddress(address: Address | undefined, itemId: string, itemKey: string): void;\n}\n\nconst ItemAddressSelect: FunctionComponent<ItemAddressSelectProps> = ({\n    item: {\n        id,\n        key,\n        imageUrl,\n        quantity,\n        name,\n        options,\n        consignment,\n    },\n    addresses,\n    onSelectAddress,\n    onUseNewAddress,\n}) => {\n    const handleUseNewAddress = useCallback((address: Address) => {\n        onUseNewAddress(address, id as string, key);\n    }, [\n        id,\n        onUseNewAddress,\n        key,\n    ]);\n\n    const handleSelectAddress = useCallback((address: Address) => {\n        onSelectAddress(address, id as string, key);\n    }, [\n        id,\n        key,\n        onSelectAddress,\n    ]);\n\n    return <div className=\"consignment\">\n        <figure className=\"consignment-product-figure\">\n            { imageUrl &&\n                <img alt={ name } src={ imageUrl } /> }\n        </figure>\n\n        <div className=\"consignment-product-body\">\n            <h5 className=\"optimizedCheckout-contentPrimary\">\n                { `${quantity} x ${name}` }\n            </h5>\n\n            { (options || []).map(({ name: optionName, value, nameId }) =>\n                <ul\n                    className=\"product-options optimizedCheckout-contentSecondary\"\n                    data-test=\"consigment-item-product-options\"\n                    key={ nameId }\n                >\n                    <li className=\"product-option\">\n                        { `${optionName } ${value}` }\n                    </li>\n                </ul>\n            ) }\n\n            <AddressSelect\n                addresses={ addresses }\n                onSelectAddress={ handleSelectAddress }\n                onUseNewAddress={ handleUseNewAddress }\n                selectedAddress={ consignment && consignment.shippingAddress }\n            />\n        </div>\n    </div>;\n};\n\nexport default memo(ItemAddressSelect);\n","import { noop } from 'lodash';\nimport { createContext } from 'react';\n\nexport interface AccordionContextProps {\n    selectedItemId?: string;\n    onToggle(id: string): void;\n}\n\nconst AccordionContext = createContext<AccordionContextProps>({ onToggle: noop });\n\nexport default AccordionContext;\n","import classNames from 'classnames';\nimport React, { memo, useCallback, useContext, FunctionComponent, ReactNode } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport AccordionContext from './AccordionContext';\n\nexport interface AccordionItemProps {\n    bodyClassName?: string;\n    children?: ReactNode;\n    className?: string;\n    classNameSelected?: string;\n    headerClassName?: string;\n    headerClassNameSelected?: string;\n    itemId: string;\n    headerContent(props: AccordionItemHeaderProps): ReactNode;\n}\n\nexport interface AccordionItemHeaderProps {\n    isSelected: boolean;\n    onToggle(id: string): void;\n}\n\nconst AccordionItem: FunctionComponent<AccordionItemProps> = ({\n    bodyClassName = 'accordion-item-body',\n    children,\n    className = 'accordion-item',\n    classNameSelected = 'accordion-item--selected',\n    headerClassName = 'accordion-item-header',\n    headerClassNameSelected = 'accordion-item-header--selected',\n    headerContent,\n    itemId,\n}) => {\n    const { onToggle, selectedItemId } = useContext(AccordionContext);\n    const isSelected = selectedItemId === itemId;\n\n    const transitionEndListener = useCallback((node, done) => {\n        node.addEventListener('transitionend', ({ target }: Event) => {\n            if (target === node) {\n                done();\n            }\n        });\n    }, []);\n\n    return (\n        <li className={ classNames(\n            className,\n            { [classNameSelected]: isSelected }\n        ) }\n        >\n            <div className={ classNames(\n                headerClassName,\n                { [headerClassNameSelected]: isSelected }\n            ) }\n            >\n                { headerContent({ isSelected, onToggle }) }\n            </div>\n\n            { children && <CSSTransition\n                addEndListener={ transitionEndListener }\n                classNames={ bodyClassName }\n                in={ isSelected }\n                mountOnEnter\n                timeout={ {} }\n                unmountOnExit\n            >\n                <div className={ bodyClassName }>\n                    { children }\n                </div>\n            </CSSTransition> }\n        </li>\n    );\n};\n\nexport default memo(AccordionItem);\n","import { connect } from 'formik';\nimport React, { memo, ComponentType, FunctionComponent } from 'react';\nimport shallowEqual from 'shallowequal';\n\nimport ConnectFormikProps from './ConnectFormikProps';\n\nexport default function connectFormik<\n    TProps extends ConnectFormikProps<TValues>,\n    TValues = any\n>(\n    OriginalComponent: ComponentType<TProps>\n): ComponentType<Omit<TProps, keyof ConnectFormikProps<TValues>>> {\n    const InnerComponent: FunctionComponent<TProps> = memo(\n        props => <OriginalComponent { ...props } />,\n        ({ formik: prevFormik, ...prevProps }, { formik: nextFormik, ...nextProps }) => (\n            shallowEqual(prevFormik, nextFormik) && shallowEqual(prevProps, nextProps)\n        )\n    );\n\n    const DecoratedComponent = connect<TProps, TValues>(InnerComponent) as ComponentType<Omit<TProps, keyof ConnectFormikProps<TValues>>>;\n\n    DecoratedComponent.displayName = `ConnectFormik(${OriginalComponent.displayName || OriginalComponent.name})`;\n\n    return DecoratedComponent;\n}\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { noop } from 'lodash';\nimport React, { Component, ReactNode } from 'react';\n\nimport AccordionContext from './AccordionContext';\n\nexport interface AccordionProps {\n    children: ReactNode;\n    className?: string;\n    defaultSelectedItemId?: string;\n    isDisabled?: boolean;\n    onSelect?(id: string): void;\n}\n\nexport interface AccordionState {\n    selectedItemId?: string;\n}\n\nexport default class Accordion extends Component<AccordionProps, AccordionState> {\n    state: AccordionState = {};\n\n    private getContextValue = memoizeOne(selectedItemId => {\n        return {\n            onToggle: this.handleToggleItem,\n            selectedItemId,\n        };\n    });\n\n    render(): ReactNode {\n        const {\n            children,\n            className = 'accordion',\n            defaultSelectedItemId,\n        } = this.props;\n\n        const { selectedItemId = defaultSelectedItemId } = this.state;\n\n        return (\n            <AccordionContext.Provider value={ this.getContextValue(selectedItemId) }>\n                <ul className={ className }>\n                    { children }\n                </ul>\n            </AccordionContext.Provider>\n        );\n    }\n\n    private handleToggleItem: (id: string) => void = id => {\n        const { isDisabled, onSelect = noop } = this.props;\n\n        if (isDisabled) {\n            return;\n        }\n\n        this.setState({ selectedItemId: id });\n        onSelect(id);\n    };\n}\n","import { noop } from 'lodash';\nimport React, { createContext, memo, useCallback, useMemo, FunctionComponent, ReactNode } from 'react';\n\nimport { connectFormik, ConnectFormikProps } from '../../common/form';\nimport { Accordion } from '../accordion';\n\nexport interface ChecklistProps {\n    children: ReactNode;\n    defaultSelectedItemId?: string;\n    isDisabled?: boolean;\n    name: string;\n    onSelect?(value: string): void;\n}\n\nexport interface ChecklistContextProps {\n    name: string;\n}\n\nexport const ChecklistContext = createContext<ChecklistContextProps | undefined>(undefined);\n\nconst Checklist: FunctionComponent<\n    ChecklistProps &\n    ConnectFormikProps<{ [key: string]: string }>\n> = ({\n    formik: { setFieldValue },\n    name,\n    onSelect = noop,\n    ...props\n}) => {\n    const handleSelect = useCallback((value: string) => {\n        setFieldValue(name, value);\n        onSelect(value);\n    }, [\n        name,\n        onSelect,\n        setFieldValue,\n    ]);\n\n    const contextValue = useMemo(() => ({ name }), [name]);\n\n    return (\n        <ChecklistContext.Provider value={ contextValue }>\n            <Accordion\n                { ...props }\n                className=\"form-checklist optimizedCheckout-form-checklist\"\n                onSelect={ handleSelect }\n            />\n        </ChecklistContext.Provider>\n    );\n};\n\nexport default connectFormik(memo(Checklist));\n","import React, { FunctionComponent, InputHTMLAttributes } from 'react';\n\nimport Input from './Input';\nimport Label from './Label';\n\nexport interface ChecklistItemInputProps extends InputHTMLAttributes<HTMLInputElement> {\n    isSelected: boolean;\n}\n\nconst ChecklistItemInput: FunctionComponent<ChecklistItemInputProps> = ({\n    id,\n    isSelected,\n    children,\n    ...props\n}) => (\n    <>\n        <Input\n            { ...props }\n            checked={ isSelected }\n            className=\"form-checklist-checkbox optimizedCheckout-form-checklist-checkbox\"\n            id={ id }\n            type=\"radio\"\n        />\n\n        <Label htmlFor={ id }>\n            { children }\n        </Label>\n    </>\n);\n\nexport default ChecklistItemInput;\n","import { memoizeOne } from '@bigcommerce/memoize';\nimport { FieldProps } from 'formik';\nimport { kebabCase } from 'lodash';\nimport React, { memo, useCallback, useContext, FunctionComponent, ReactNode } from 'react';\n\nimport { AccordionItem, AccordionItemHeaderProps } from '../accordion';\n\nimport BasicFormField from './BasicFormField';\nimport { ChecklistContext } from './Checklist';\nimport ChecklistItemInput from './ChecklistItemInput';\n\nexport interface ChecklistItemProps {\n    content?: ReactNode;\n    htmlId?: string;\n    isDisabled?: boolean;\n    label: ReactNode | ((isSelected: boolean) => ReactNode);\n    value: string;\n}\n\nconst ChecklistItem: FunctionComponent<ChecklistItemProps> = ({\n    isDisabled,\n    value,\n    content,\n    htmlId = kebabCase(value),\n    label,\n    ...rest\n}) => {\n    const { name = '' } = useContext(ChecklistContext) || {};\n\n    const renderInput = useCallback(memoizeOne((isSelected: boolean) => ({ field }: FieldProps) => (\n        <ChecklistItemInput\n            { ...field }\n            disabled={ isDisabled }\n            id={ htmlId }\n            isSelected={ field.value === value }\n            value={ value }\n        >\n            { label instanceof Function ?\n                label(isSelected) :\n                label }\n        </ChecklistItemInput>\n    )), [\n        htmlId,\n        isDisabled,\n        label,\n        value,\n    ]);\n\n    const handleChange = useCallback(memoizeOne((onToggle: (id: string) => void) => (selectedValue: string) => {\n        if (value === selectedValue) {\n            onToggle(value);\n        }\n    }), []);\n\n    const renderHeaderContent = useCallback(({\n        isSelected,\n        onToggle,\n    }: AccordionItemHeaderProps) => (\n        <BasicFormField\n            className=\"form-checklist-option\"\n            name={ name }\n            onChange={ handleChange(onToggle) }\n            render={ renderInput(isSelected) }\n        />\n    ), [\n        handleChange,\n        name,\n        renderInput,\n    ]);\n\n    return (\n        <AccordionItem\n            { ...rest }\n            bodyClassName=\"form-checklist-body\"\n            className=\"form-checklist-item optimizedCheckout-form-checklist-item\"\n            classNameSelected=\"form-checklist-item--selected optimizedCheckout-form-checklist-item--selected\"\n            headerClassName=\"form-checklist-header\"\n            headerClassNameSelected=\"form-checklist-header--selected\"\n            headerContent={ renderHeaderContent }\n            itemId={ value }\n        >\n            { content }\n        </AccordionItem>\n    );\n};\n\nexport default memo(ChecklistItem);\n","import { ShippingOption } from '@bigcommerce/checkout-sdk';\nimport React, { memo, useCallback, FunctionComponent } from 'react';\n\nimport { EMPTY_ARRAY } from '../../common/utility';\nimport { Checklist, ChecklistItem } from '../../ui/form';\nimport { LoadingOverlay } from '../../ui/loading';\n\nimport StaticShippingOption from './StaticShippingOption';\n\ninterface ShippingOptionListItemProps {\n    consignmentId: string;\n    shippingOption: ShippingOption;\n}\n\nconst ShippingOptionListItem: FunctionComponent<ShippingOptionListItemProps> = ({\n    consignmentId,\n    shippingOption,\n}) => {\n    const renderLabel = useCallback(() => (\n        <div className=\"shippingOptionLabel\">\n            <StaticShippingOption displayAdditionalInformation={ true } method={ shippingOption } />\n        </div>\n    ), [shippingOption]);\n\n    return <ChecklistItem\n        htmlId={ `shippingOptionRadio-${consignmentId}-${shippingOption.id}` }\n        label={ renderLabel }\n        value={ shippingOption.id }\n    />;\n};\n\nexport interface ShippingOptionListProps {\n    consignmentId: string;\n    inputName: string;\n    isLoading: boolean;\n    selectedShippingOptionId?: string;\n    shippingOptions?: ShippingOption[];\n    onSelectedOption(consignmentId: string, shippingOptionId: string): void;\n}\n\nconst ShippingOptionsList: FunctionComponent<ShippingOptionListProps> = ({\n    consignmentId,\n    inputName,\n    isLoading,\n    shippingOptions = EMPTY_ARRAY,\n    selectedShippingOptionId,\n    onSelectedOption,\n }) => {\n    const handleSelect = useCallback((value: string) => {\n        onSelectedOption(consignmentId, value);\n    }, [\n        consignmentId,\n        onSelectedOption,\n    ]);\n\n    if (!shippingOptions.length) {\n        return null;\n    }\n\n    return (\n        <LoadingOverlay isLoading={ isLoading }>\n            <Checklist\n                aria-live=\"polite\"\n                defaultSelectedItemId={ selectedShippingOptionId }\n                name={ inputName }\n                onSelect={ handleSelect }\n            >\n                { shippingOptions.map(shippingOption => (\n                    <ShippingOptionListItem\n                        consignmentId={ consignmentId }\n                        key={ shippingOption.id }\n                        shippingOption={ shippingOption }\n                    />\n                )) }\n            </Checklist>\n        </LoadingOverlay>\n    );\n};\n\nexport default memo(ShippingOptionsList);\n","import { CheckoutSelectors, Consignment } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport { noop } from 'lodash';\nimport React, { PureComponent, ReactNode } from 'react';\n\nimport { StaticAddress } from '../../address';\nimport { TranslatedString } from '../../locale';\nimport { LoadingOverlay } from '../../ui/loading';\nimport getRecommendedShippingOption from '../getRecommendedShippingOption';\nimport StaticConsignmentItemList from '../StaticConsignmentItemList';\n\nimport { ShippingOptionsProps, WithCheckoutShippingOptionsProps } from './ShippingOptions';\nimport './ShippingOptionsForm.scss';\nimport ShippingOptionsList from './ShippingOptionsList';\n\nexport type ShippingOptionsFormProps = ShippingOptionsProps & WithCheckoutShippingOptionsProps;\n\nclass ShippingOptionsForm extends PureComponent<ShippingOptionsFormProps & FormikProps<ShippingOptionsFormValues>> {\n    private unsubscribe?: () => void;\n\n    componentDidMount(): void {\n        const { subscribeToConsignments } = this.props;\n        this.unsubscribe = subscribeToConsignments(this.selectDefaultShippingOptions);\n    }\n\n    componentWillUnmount(): void {\n        if (this.unsubscribe) {\n            this.unsubscribe();\n            this.unsubscribe = undefined;\n        }\n    }\n\n    render(): ReactNode {\n        const {\n            consignments,\n            isMultiShippingMode,\n            selectShippingOption,\n            isLoading,\n            shouldShowShippingOptions,\n            invalidShippingMessage,\n            methodId,\n        } = this.props;\n\n        if (!consignments ||\n            !consignments.length ||\n            !shouldShowShippingOptions\n        ) {\n            return (\n                <LoadingOverlay isLoading={ isLoading() }>\n                    { this.renderNoShippingOptions(\n                        <TranslatedString\n                            id={ methodId || isMultiShippingMode ?\n                                'shipping.select_shipping_address_text' :\n                                'shipping.enter_shipping_address_text' }\n                        />\n                    ) }\n                </LoadingOverlay>\n            );\n        }\n\n        return <>\n            { consignments\n                .slice(0, isMultiShippingMode ? undefined : 1)\n                .sort((a, b) => (a.id > b.id ? -1 : 1))\n                .map(consignment => (\n                <div className=\"shippingOptions-container form-fieldset\" key={ consignment.id }>\n                        { isMultiShippingMode && this.renderConsignment(consignment) }\n\n                        <ShippingOptionsList\n                            consignmentId={ consignment.id }\n                            inputName={ getRadioInputName(consignment.id) }\n                            isLoading={ isLoading(consignment.id) }\n                            onSelectedOption={ selectShippingOption }\n                            selectedShippingOptionId={ consignment.selectedShippingOption && consignment.selectedShippingOption.id }\n                            shippingOptions={ consignment.availableShippingOptions }\n                        />\n\n                        { (!consignment.availableShippingOptions || !consignment.availableShippingOptions.length) &&\n                            <LoadingOverlay hideContentWhenLoading isLoading={ isLoading(consignment.id) }>\n                                { this.renderNoShippingOptions(invalidShippingMessage) }\n                            </LoadingOverlay> }\n                    </div>\n                )) }\n        </>;\n    }\n\n    private selectDefaultShippingOptions: (state: CheckoutSelectors) => void = async ({ data }) => {\n        const { selectShippingOption, setFieldValue } = this.props;\n\n        const consignment = (data.getConsignments() || []).find(({\n            selectedShippingOption,\n            availableShippingOptions: shippingOptions,\n        }) => !selectedShippingOption && shippingOptions);\n\n        if (!consignment || !consignment.availableShippingOptions) {\n            return;\n        }\n\n        const { availableShippingOptions, id } = consignment;\n        const recommendedOption = getRecommendedShippingOption(availableShippingOptions);\n        const singleShippingOption = availableShippingOptions.length === 1 && availableShippingOptions[0];\n        const defaultShippingOption = recommendedOption || singleShippingOption;\n\n        if (!defaultShippingOption) {\n            return;\n        }\n\n        await selectShippingOption(id, defaultShippingOption.id);\n        setFieldValue(`shippingOptionIds.${id}`, defaultShippingOption.id);\n    };\n\n    private renderNoShippingOptions(message: ReactNode): ReactNode {\n        return (\n            <div className=\"shippingOptions-panel optimizedCheckout-overlay\">\n                <p className=\"shippingOptions-panel-message optimizedCheckout-primaryContent\">\n                    { message }\n                </p>\n            </div>\n        );\n    }\n\n    private renderConsignment(consignment: Consignment): ReactNode {\n        const { cart } = this.props;\n\n        return (\n            <div className=\"staticConsignment\">\n                <strong>\n                    <TranslatedString id=\"shipping.shipping_address_heading\" />\n                </strong>\n\n                <StaticAddress address={ consignment.shippingAddress } />\n\n                <StaticConsignmentItemList\n                    cart={ cart }\n                    consignment={ consignment }\n                />\n            </div>\n        );\n    }\n}\n\nfunction getRadioInputName(consignmentId: string): string {\n    return `shippingOptionIds.${consignmentId}`;\n}\n\nexport interface ShippingOptionsFormValues {\n    shippingOptionIds: {\n        [shippingOptionIds: string]: string;\n    };\n}\n\nexport default withFormik<ShippingOptionsFormProps, ShippingOptionsFormValues>({\n    handleSubmit: noop,\n    mapPropsToValues({ consignments }) {\n        const shippingOptionIds: { [id: string]: string } = {};\n\n        (consignments || []).forEach(consignment => {\n            shippingOptionIds[consignment.id] = consignment.selectedShippingOption ?\n                consignment.selectedShippingOption.id :\n                '';\n        });\n\n        return { shippingOptionIds };\n    },\n})(ShippingOptionsForm);\n","import { ShippingOption } from '@bigcommerce/checkout-sdk';\n\nexport default function getRecommendedShippingOption(availableShippingOptions: ShippingOption[]): ShippingOption | undefined {\n    if (!availableShippingOptions) {\n        return;\n    }\n\n    return availableShippingOptions.find(({ isRecommended }: { isRecommended: any }) => isRecommended);\n}\n","import { Cart, CheckoutSelectors, Consignment } from '@bigcommerce/checkout-sdk';\nimport { createSelector } from 'reselect';\n\nimport { withCheckout, CheckoutContextProps } from '../../checkout';\nimport getShippingMethodId from '../getShippingMethodId';\n\nimport ShippingOptionsForm from './ShippingOptionsForm';\n\nexport interface ShippingOptionsProps {\n    isMultiShippingMode: boolean;\n    isUpdatingAddress?: boolean;\n    shouldShowShippingOptions: boolean;\n}\n\nexport interface WithCheckoutShippingOptionsProps {\n    invalidShippingMessage: string;\n    methodId?: string;\n    consignments?: Consignment[];\n    cart: Cart;\n    isSelectingShippingOption(consignmentId?: string): boolean;\n    subscribeToConsignments(subscriber: (state: CheckoutSelectors) => void): () => void;\n    selectShippingOption(consignmentId: string, optionId: string): Promise<CheckoutSelectors>;\n    isLoading(consignmentId?: string): boolean;\n}\n\nconst subscribeToConsignmentsSelector = createSelector(\n    ({ checkoutService }: CheckoutContextProps) => checkoutService.subscribe,\n    subscribe => (subscriber: (state: CheckoutSelectors) => void) => {\n        return subscribe(subscriber, ({ data }) => data.getConsignments());\n    }\n);\n\nconst isLoadingSelector = createSelector(\n    (_: CheckoutSelectors, { isUpdatingAddress }: ShippingOptionsProps) => isUpdatingAddress,\n    ({ statuses }: CheckoutSelectors) => statuses.isLoadingShippingOptions,\n    ({ statuses }: CheckoutSelectors) => statuses.isSelectingShippingOption,\n    ({ statuses }: CheckoutSelectors) => statuses.isUpdatingConsignment,\n    ({ statuses }: CheckoutSelectors) => statuses.isCreatingConsignments,\n    (isUpdatingAddress, isLoadingShippingOptions, isSelectingShippingOption, isUpdatingConsignment, isCreatingConsignments) => {\n        return (consignmentId?: string) => {\n            return (\n                isUpdatingAddress ||\n                isLoadingShippingOptions() ||\n                isSelectingShippingOption(consignmentId) ||\n                isUpdatingConsignment(consignmentId) ||\n                isCreatingConsignments()\n            );\n        };\n    }\n);\n\nfunction mapToShippingOptions(\n    { checkoutService, checkoutState }: CheckoutContextProps,\n    props: ShippingOptionsProps\n): WithCheckoutShippingOptionsProps | null {\n    const {\n        data: {\n            getCart,\n            getConsignments,\n            getConfig,\n            getCustomer,\n            getCheckout,\n        },\n        statuses: {\n            isSelectingShippingOption,\n        },\n    } = checkoutState;\n\n    const consignments = getConsignments() || [];\n    const customer = getCustomer();\n    const cart = getCart();\n    const config = getConfig();\n    const checkout = getCheckout();\n\n    if (!config || !checkout || !customer || !cart) {\n        return null;\n    }\n\n    const methodId = getShippingMethodId(checkout);\n    const { shippingQuoteFailedMessage } = config.checkoutSettings;\n\n    return {\n        cart,\n        consignments,\n        invalidShippingMessage: shippingQuoteFailedMessage,\n        isLoading: isLoadingSelector(checkoutState, props),\n        isSelectingShippingOption,\n        methodId,\n        selectShippingOption: checkoutService.selectConsignmentShippingOption,\n        subscribeToConsignments: subscribeToConsignmentsSelector({ checkoutService, checkoutState }),\n    };\n}\n\nexport default withCheckout(mapToShippingOptions)(ShippingOptionsForm);\n","import React, { PureComponent, ReactNode } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { OrderComments } from '../orderComments';\nimport { Alert, AlertType } from '../ui/alert';\nimport { Button, ButtonVariant } from '../ui/button';\nimport { Fieldset, Legend } from '../ui/form';\n\nimport { ShippingOptions } from './shippingOption';\n\nexport interface ShippingFormFooterProps {\n    cartHasChanged: boolean;\n    isMultiShippingMode: boolean;\n    shouldShowOrderComments: boolean;\n    shouldShowShippingOptions?: boolean;\n    shouldDisableSubmit: boolean;\n    isLoading: boolean;\n}\n\nclass ShippingFormFooter extends PureComponent<ShippingFormFooterProps> {\n    render(): ReactNode {\n        const {\n            cartHasChanged,\n            isMultiShippingMode,\n            shouldShowOrderComments,\n            shouldShowShippingOptions = true,\n            shouldDisableSubmit,\n            isLoading,\n        } = this.props;\n\n        return <>\n            <Fieldset\n                id=\"checkout-shipping-options\"\n                legend={\n                    <>\n                        <Legend>\n                            <TranslatedString id=\"shipping.shipping_method_label\" />\n                        </Legend>\n\n                        { cartHasChanged &&\n                            <Alert type={ AlertType.Error }>\n                                <strong>\n                                    <TranslatedString id=\"shipping.cart_change_error\" />\n                                </strong>\n                            </Alert> }\n                    </>\n                }\n            >\n                <ShippingOptions\n                    isMultiShippingMode={ isMultiShippingMode }\n                    isUpdatingAddress={ isLoading }\n                    shouldShowShippingOptions={ shouldShowShippingOptions }\n                />\n            </Fieldset>\n\n            { shouldShowOrderComments &&\n                <OrderComments /> }\n\n            <div className=\"form-actions\">\n                <Button\n                    disabled={ shouldDisableSubmit }\n                    id=\"checkout-shipping-continue\"\n                    isLoading={ isLoading }\n                    type=\"submit\"\n                    variant={ ButtonVariant.Primary }\n                >\n                    <TranslatedString id=\"common.continue_action\" />\n                </Button>\n            </div>\n        </>;\n    }\n}\n\nexport default ShippingFormFooter;\n","import { Address, AddressRequestBody, Cart, CheckoutSelectors, CheckoutStoreSelector, Consignment, ConsignmentAssignmentRequestBody, Country, CustomerAddress, FormField } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport React, { Fragment, PureComponent, ReactNode } from 'react';\n\nimport { isValidAddress, mapAddressFromFormValues, AddressFormModal, AddressFormValues } from '../address';\nimport { preventDefault } from '../common/dom';\nimport { ErrorModal } from '../common/error';\nimport { withLanguage, TranslatedLink, TranslatedString, WithLanguageProps } from '../locale';\nimport { Form } from '../ui/form';\n\nimport { AssignItemFailedError, AssignItemInvalidAddressError } from './errors';\nimport getShippableItemsCount from './getShippableItemsCount';\nimport getShippableLineItems from './getShippableLineItems';\nimport hasSelectedShippingOptions from './hasSelectedShippingOptions';\nimport hasUnassignedLineItems from './hasUnassignedLineItems';\nimport updateShippableItems from './updateShippableItems';\nimport ItemAddressSelect from './ItemAddressSelect';\nimport ShippableItem from './ShippableItem';\nimport ShippingFormFooter from './ShippingFormFooter';\n\nexport interface MultiShippingFormProps {\n    addresses: CustomerAddress[];\n    cart: Cart;\n    cartHasChanged: boolean;\n    consignments: Consignment[];\n    customerMessage: string;\n    isGuest: boolean;\n    isLoading: boolean;\n    shouldShowOrderComments: boolean;\n    defaultCountryCode?: string;\n    countries?: Country[];\n    countriesWithAutocomplete: string[];\n    googleMapsApiKey?: string;\n    shouldShowAddAddressInCheckout: boolean;\n    assignItem(consignment: ConsignmentAssignmentRequestBody): Promise<CheckoutSelectors>;\n    onCreateAccount(): void;\n    createCustomerAddress(address: AddressRequestBody): void;\n    onSignIn(): void;\n    getFields(countryCode?: string): FormField[];\n    onSubmit(values: MultiShippingFormValues): void;\n    onUnhandledError(error: Error): void;\n    onUseNewAddress(address: Address, itemId: string): void;\n}\n\ninterface ShippableItemId {\n    key: string;\n    itemId: string;\n}\n\nexport interface MultiShippingFormState {\n    items: ShippableItem[];\n    itemAddingAddress?: ShippableItemId;\n    createCustomerAddressError?: Error;\n}\n\nclass MultiShippingForm extends PureComponent<MultiShippingFormProps & WithLanguageProps & FormikProps<MultiShippingFormValues>, MultiShippingFormState> {\n    static getDerivedStateFromProps(\n        { cart, consignments }: MultiShippingFormProps,\n        state: MultiShippingFormState\n    ) {\n        if (!state || !state.items || getShippableItemsCount(cart) !== state.items.length) {\n            return { items: getShippableLineItems(cart, consignments) };\n        }\n\n        return null;\n    }\n\n    state: MultiShippingFormState = { items: [] };\n\n    render(): ReactNode {\n        const {\n            addresses,\n            consignments,\n            cart,\n            isGuest,\n            onSignIn,\n            onCreateAccount,\n            cartHasChanged,\n            shouldShowOrderComments,\n            isLoading,\n            getFields,\n            defaultCountryCode,\n            countries,\n            countriesWithAutocomplete,\n            googleMapsApiKey,\n        } = this.props;\n\n        const { items, itemAddingAddress, createCustomerAddressError } = this.state;\n\n        if (isGuest) {\n            return (\n                <div className=\"checkout-step-info\">\n                    <TranslatedString id=\"shipping.multishipping_guest_intro\" />\n                    { ' ' }\n                    <a data-test=\"shipping-sign-in-link\" href=\"#\" onClick={ preventDefault(onSignIn) }>\n                        <TranslatedString id=\"shipping.multishipping_guest_sign_in\" />\n                    </a>\n                    { ' ' }\n                    <TranslatedLink\n                        id=\"shipping.multishipping_guest_create\"\n                        onClick={ onCreateAccount }\n                    />\n                </div>\n            );\n        }\n\n        return (\n            <Fragment>\n                <ErrorModal\n                    error={ createCustomerAddressError }\n                    message={\n                        <>\n                            <TranslatedString id=\"address.consignment_address_updated_text\" />\n                            { ' ' }\n                            <TranslatedString id=\"customer.create_address_error\" />\n                        </>\n                    }\n                    onClose={ this.handleCloseErrorModal }\n                    shouldShowErrorCode={ false }\n                />\n                { <AddressFormModal\n                    countries={ countries }\n                    countriesWithAutocomplete={ countriesWithAutocomplete }\n                    defaultCountryCode={ defaultCountryCode }\n                    getFields={ getFields }\n                    googleMapsApiKey={ googleMapsApiKey }\n                    isLoading={ isLoading }\n                    isOpen={ !!itemAddingAddress }\n                    onRequestClose={ this.handleCloseAddAddressForm }\n                    onSaveAddress={ this.handleSaveAddress }\n                /> }\n\n                <Form>\n                    <ul className=\"consignmentList\">\n                        { items.map(item => (\n                            <li key={ item.key }>\n                                <ItemAddressSelect\n                                    addresses={ addresses }\n                                    item={ item }\n                                    onSelectAddress={ this.handleSelectAddress }\n                                    onUseNewAddress={ this.handleUseNewAddress }\n                                />\n                            </li>\n                        )) }\n                    </ul>\n\n                    <ShippingFormFooter\n                        cartHasChanged={ cartHasChanged }\n                        isLoading={ isLoading }\n                        isMultiShippingMode={ true }\n                        shouldDisableSubmit={ this.shouldDisableSubmit() }\n                        shouldShowOrderComments={ shouldShowOrderComments }\n                        shouldShowShippingOptions={ !hasUnassignedLineItems(consignments, cart.lineItems) }\n                    />\n                </Form>\n            </Fragment>\n        );\n    }\n\n    private handleCloseErrorModal: () => void = () => {\n        this.setState({ createCustomerAddressError: undefined });\n    };\n\n    private handleSaveAddress: (address: AddressFormValues) => void = async address => {\n        const { createCustomerAddress } = this.props;\n        const { itemAddingAddress } = this.state;\n\n        if (!itemAddingAddress) {\n            return;\n        }\n\n        const shippingAddress = mapAddressFromFormValues(address);\n\n        await this.handleSelectAddress(shippingAddress, itemAddingAddress.itemId, itemAddingAddress.key);\n\n        try {\n            await createCustomerAddress(shippingAddress);\n        } catch (e) {\n            this.setState({ createCustomerAddressError: e });\n        }\n\n        this.setState({\n            itemAddingAddress: undefined,\n        });\n    };\n\n    private handleUseNewAddress: (address: Address, itemId: string, itemKey: string) => void = (address, itemId, itemKey) => {\n        const { onUseNewAddress, shouldShowAddAddressInCheckout } = this.props;\n\n        if (!shouldShowAddAddressInCheckout) {\n            onUseNewAddress(address, itemId);\n\n            return;\n        }\n\n        this.setState({\n            itemAddingAddress: {\n                key: itemKey,\n                itemId,\n            },\n        });\n    };\n\n    private handleCloseAddAddressForm: () => void = () => {\n        this.setState({\n            itemAddingAddress: undefined,\n        });\n    };\n\n    private handleSelectAddress: (address: Address, itemId: string, itemKey: string) => Promise<void> = async (address, itemId, itemKey) => {\n        const {\n            assignItem,\n            onUnhandledError,\n            getFields,\n        } = this.props;\n\n        if (!isValidAddress(address, getFields(address.countryCode))) {\n            return onUnhandledError(new AssignItemInvalidAddressError());\n        }\n\n        try {\n            const { data } = await assignItem({\n                shippingAddress: address,\n                lineItems: [{\n                    itemId,\n                    quantity: 1,\n                }],\n            });\n\n            this.syncItems(itemKey, address, data);\n        } catch (e) {\n            onUnhandledError(new AssignItemFailedError(e));\n        }\n    };\n\n    private shouldDisableSubmit: () => boolean = () => {\n        const { isLoading, consignments } = this.props;\n\n        return isLoading || !hasSelectedShippingOptions(consignments);\n    };\n\n    private syncItems: (\n        key: string,\n        address: Address,\n        data: CheckoutStoreSelector\n    ) => void = (key, address, data) => {\n        const { items: currentItems } = this.state;\n        const items = updateShippableItems(\n            currentItems,\n            {\n                updatedItemIndex: currentItems.findIndex(item => item.key === key),\n                address,\n            },\n            {\n                cart: data.getCart(),\n                consignments: data.getConsignments(),\n            }\n        );\n\n        if (items) {\n            this.setState({ items });\n        }\n    };\n}\n\nexport interface MultiShippingFormValues {\n    orderComment: string;\n}\n\nexport default withLanguage(withFormik<MultiShippingFormProps & WithLanguageProps, MultiShippingFormValues>({\n    handleSubmit: (values, { props: { onSubmit } }) => {\n        onSubmit(values);\n    },\n    mapPropsToValues: ({ customerMessage }) => ({\n        orderComment: customerMessage,\n    }),\n    enableReinitialize: true,\n})(MultiShippingForm));\n","import { Address, Cart, Consignment } from '@bigcommerce/checkout-sdk';\n\nimport { isEqualAddress } from '../address';\n\nimport findConsignment from './findConsignment';\nimport ShippableItem from './ShippableItem';\n\nexport interface UpdateItemParams {\n    updatedItemIndex: number;\n    address: Address;\n}\n\nexport default function updateShippableItems(\n    items: ShippableItem[],\n    { updatedItemIndex, address }: UpdateItemParams,\n    { cart, consignments }: { cart?: Cart; consignments?: Consignment[] }\n): ShippableItem[] | undefined {\n    if (updatedItemIndex < 0 || updatedItemIndex >= items.length || !cart) {\n        return;\n    }\n\n    const cartItemIds = cart.lineItems.physicalItems.map(({ id }) => id);\n\n    const updatedConsignment = (consignments || []).find(consignment =>\n        isEqualAddress(consignment.shippingAddress, address)\n    );\n\n    const newId = findNewItemId(items[updatedItemIndex], cart, updatedConsignment);\n\n    return items.map((item, i) => {\n        if (newId && !cartItemIds.includes(item.id) || i === updatedItemIndex) {\n            const itemId = newId ?? item.id;\n\n            return {\n                ...item,\n                id: itemId,\n                consignment: findConsignment(consignments || [], itemId as string),\n            };\n        } else {\n            return item;\n        }\n    });\n}\n\nfunction findNewItemId(item: ShippableItem, cart?: Cart, consignment?: Consignment): string | undefined {\n    if (!cart || !consignment) {\n        return;\n    }\n\n    const { physicalItems } = cart.lineItems;\n    const matchingCartItems = physicalItems.filter(\n        ({ productId, variantId }) => productId === item.productId && variantId === item.variantId\n    );\n\n    const matchingCartItemIds = matchingCartItems.map(({ id }) => id);\n\n    return consignment.lineItemIds.find(id => matchingCartItemIds.includes(id));\n}\n","import React, { memo, useMemo, FunctionComponent } from 'react';\n\nimport { TranslatedString } from '../locale';\nimport { CheckboxFormField } from '../ui/form';\n\nexport interface BillingSameAsShippingFieldProps {\n    onChange?(isChecked: boolean): void;\n}\n\nconst BillingSameAsShippingField: FunctionComponent<BillingSameAsShippingFieldProps>  = ({\n    onChange,\n}) => {\n    const labelContent = useMemo(() => (\n        <TranslatedString id=\"billing.use_shipping_address_label\" />\n    ), []);\n\n    return <CheckboxFormField\n        id=\"sameAsBilling\"\n        labelContent={ labelContent }\n        name=\"billingSameAsShipping\"\n        onChange={ onChange }\n    />;\n};\n\nexport default memo(BillingSameAsShippingField);\n","import { CheckoutSelectors, FormField, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport { noop } from 'lodash';\nimport React, { PureComponent, ReactNode } from 'react';\n\nimport { DynamicFormField, Fieldset } from '../ui/form';\n\nexport interface RemoteShippingAddressProps {\n    containerId: string;\n    methodId: string;\n    formFields: FormField[];\n    deinitialize(options?: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    initialize(options?: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    onUnhandledError?(error: Error): void;\n    onFieldChange(fieldName: string, value: string): void;\n}\n\nclass RemoteShippingAddress extends PureComponent<RemoteShippingAddressProps> {\n    async componentDidMount(): Promise<void> {\n        const {\n            initialize,\n            methodId,\n            onUnhandledError = noop,\n        } = this.props;\n\n        try {\n            await initialize({ methodId });\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    }\n\n    async componentWillUnmount(): Promise<void> {\n        const {\n            deinitialize,\n            methodId,\n            onUnhandledError = noop,\n        } = this.props;\n\n        try {\n            await deinitialize({ methodId });\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    }\n\n    render(): ReactNode {\n        const {\n            containerId,\n            formFields,\n            methodId,\n        } = this.props;\n\n        return (\n            <>\n                <div\n                    className={ `widget address-widget widget--${methodId}` }\n                    id={ containerId }\n                    tabIndex={ -1 }\n                />\n                <Fieldset>\n                {\n                    formFields.filter(({ custom }) => custom).map(field => (\n                        <DynamicFormField\n                            field={ field }\n                            key={ `${field.id}-${field.name}` }\n                            onChange={ this.handleFieldValueChange(field.name) }\n                            parentFieldName=\"shippingAddress.customFields\"\n                        />\n                    ))\n                }\n                </Fieldset>\n            </>\n        );\n    }\n\n    private handleFieldValueChange: (name: string) => (value: string) => void = name => value => {\n        const { onFieldChange } = this.props;\n        onFieldChange(name, value);\n    };\n}\n\nexport default RemoteShippingAddress;\n","import { Address, Consignment, Country, CustomerAddress, FormField } from '@bigcommerce/checkout-sdk';\nimport React, { Component, ReactNode } from 'react';\n\nimport {  isValidCustomerAddress, AddressForm, AddressSelect } from '../address';\nimport { connectFormik, ConnectFormikProps } from '../common/form';\nimport { Fieldset } from '../ui/form';\nimport { LoadingOverlay } from '../ui/loading';\n\nimport { SingleShippingFormValues } from './SingleShippingForm';\n\nexport interface ShippingAddressFormProps {\n    addresses: CustomerAddress[];\n    address?: Address;\n    consignments: Consignment[];\n    countries?: Country[];\n    countriesWithAutocomplete: string[];\n    googleMapsApiKey?: string;\n    isLoading: boolean;\n    formFields: FormField[];\n    shouldShowSaveAddress?: boolean;\n    onUseNewAddress(): void;\n    onFieldChange(fieldName: string, value: string): void;\n    onAddressSelect(address: Address): void;\n}\n\nconst addressFieldName = 'shippingAddress';\n\nclass ShippingAddressForm extends Component<ShippingAddressFormProps & ConnectFormikProps<SingleShippingFormValues>> {\n    render(): ReactNode {\n        const {\n            addresses,\n            address: shippingAddress,\n            onAddressSelect,\n            onUseNewAddress,\n            shouldShowSaveAddress,\n            countries,\n            countriesWithAutocomplete,\n            formFields,\n            isLoading,\n            googleMapsApiKey,\n            formik: {\n                values: {\n                    shippingAddress: formAddress,\n                },\n            },\n        } = this.props;\n\n        const hasAddresses = addresses && addresses.length > 0;\n        const hasValidCustomerAddress = isValidCustomerAddress(shippingAddress, addresses, formFields);\n\n        return (\n            <Fieldset id=\"checkoutShippingAddress\">\n                { hasAddresses &&\n                    <Fieldset id=\"shippingAddresses\">\n                        <LoadingOverlay isLoading={ isLoading }>\n                            <AddressSelect\n                                addresses={ addresses }\n                                onSelectAddress={ onAddressSelect }\n                                onUseNewAddress={ onUseNewAddress }\n                                selectedAddress={ hasValidCustomerAddress ? shippingAddress : undefined }\n                            />\n                        </LoadingOverlay>\n                    </Fieldset> }\n\n                { !hasValidCustomerAddress &&\n                    <LoadingOverlay isLoading={ isLoading } unmountContentWhenLoading>\n                        <AddressForm\n                            countries={ countries }\n                            countriesWithAutocomplete={ countriesWithAutocomplete }\n                            countryCode={ formAddress && formAddress.countryCode }\n                            fieldName={ addressFieldName }\n                            formFields={ formFields }\n                            googleMapsApiKey={ googleMapsApiKey }\n                            onAutocompleteToggle={ this.handleAutocompleteToggle }\n                            onChange={ this.handleChange }\n                            setFieldValue={ this.setFieldValue }\n                            shouldShowSaveAddress={ shouldShowSaveAddress }\n                        />\n                    </LoadingOverlay> }\n            </Fieldset>\n        );\n    }\n\n    private setFieldValue: (fieldName: string, fieldValue: string) => void = (fieldName, fieldValue) => {\n        const {\n            formik: { setFieldValue },\n            formFields,\n        } = this.props;\n\n        const customFormFieldNames = formFields\n            .filter(field => field.custom)\n            .map(field => field.name);\n\n        const formFieldName = customFormFieldNames.includes(fieldName) ?\n            `customFields.${fieldName}` :\n            fieldName;\n\n        setFieldValue(`${addressFieldName}.${formFieldName}`, fieldValue);\n    };\n\n    private handleChange: (fieldName: string, value: string) => void = (fieldName, value) => {\n        const {\n            onFieldChange,\n        } = this.props;\n\n        onFieldChange(fieldName, value);\n    };\n\n    private handleAutocompleteToggle: (state: { inputValue: string; isOpen: boolean }) => void = ({ isOpen, inputValue }) => {\n        const { onFieldChange } = this.props;\n\n        if (!isOpen) {\n            onFieldChange('address1', inputValue);\n        }\n    };\n}\n\nexport default connectFormik(ShippingAddressForm);\n","import { Address, CheckoutSelectors, FormField, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport { noop } from 'lodash';\nimport React, { PureComponent, ReactNode } from 'react';\n\nimport { StaticAddress } from '../address/';\nimport { preventDefault } from '../common/dom';\nimport { TranslatedString } from '../locale';\nimport { Button, ButtonSize, ButtonVariant } from '../ui/button';\nimport { DynamicFormField, Fieldset } from '../ui/form';\nimport { LoadingOverlay } from '../ui/loading';\n\nimport './StaticAddressEditable.scss';\n\nexport interface StaticAddressEditableProps {\n    address: Address;\n    buttonId: string;\n    formFields: FormField[];\n    isLoading: boolean;\n    methodId?: string;\n    deinitialize(options?: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    initialize(options?: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    onFieldChange(fieldName: string, value: string): void;\n    onUnhandledError?(error: Error): void;\n}\n\nclass StaticAddressEditable extends PureComponent<StaticAddressEditableProps> {\n    async componentDidMount(): Promise<void> {\n        const {\n            initialize,\n            methodId,\n            onUnhandledError = noop,\n        } = this.props;\n\n        try {\n            await initialize({ methodId });\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    }\n\n    async componentWillUnmount(): Promise<void> {\n        const {\n            deinitialize,\n            methodId,\n            onUnhandledError = noop,\n        } = this.props;\n\n        try {\n            await deinitialize({ methodId });\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    }\n\n    render(): ReactNode {\n        const {\n            address,\n            buttonId,\n            formFields,\n            isLoading,\n        } = this.props;\n\n        const customFormFields = formFields.filter(({ custom }) => custom);\n        const shouldShowCustomFormFields = customFormFields.length > 0;\n\n        return (\n            <LoadingOverlay isLoading={ isLoading }>\n                <div className=\"stepHeader\" style={ { padding: 0 } }>\n                    <div className=\"stepHeader-body subheader\">\n                        <StaticAddress\n                            address={ address }\n                        />\n                    </div>\n\n                    <div className=\"stepHeader-actions subheader\">\n                        <Button\n                            id={ buttonId }\n                            onClick={ preventDefault() }\n                            size={ ButtonSize.Tiny }\n                            testId=\"step-edit-button\"\n                            variant={ ButtonVariant.Secondary }\n                        >\n                            <TranslatedString id=\"common.edit_action\" />\n                        </Button>\n                    </div>\n                </div>\n\n                { shouldShowCustomFormFields && <Fieldset id=\"customFieldset\">\n                    {\n                        customFormFields.map(field => (\n                            <DynamicFormField\n                                field={ field }\n                                key={ `${field.id}-${field.name}` }\n                                onChange={ this.handleFieldValueChange(field.name) }\n                                parentFieldName=\"shippingAddress.customFields\"\n                            />\n                        ))\n                    }\n                </Fieldset> }\n            </LoadingOverlay>\n        );\n    }\n\n    private handleFieldValueChange: (name: string) => (value: string) => void = name => value => {\n        const { onFieldChange } = this.props;\n        onFieldChange(name, value);\n    };\n}\n\nexport default StaticAddressEditable;\n","import { Address, CheckoutSelectors, Consignment, Country, CustomerAddress, FormField, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport { memoizeOne } from '@bigcommerce/memoize';\nimport { noop } from 'lodash';\nimport React, { memo, useCallback, useContext, FunctionComponent } from 'react';\n\nimport { FormContext } from '../ui/form';\n\nimport RemoteShippingAddress from './RemoteShippingAddress';\nimport ShippingAddressForm from './ShippingAddressForm';\nimport StaticAddressEditable from './StaticAddressEditable';\n\nexport interface ShippingAddressProps {\n    addresses: CustomerAddress[];\n    consignments: Consignment[];\n    countries?: Country[];\n    countriesWithAutocomplete: string[];\n    formFields: FormField[];\n    googleMapsApiKey?: string;\n    isLoading: boolean;\n    isShippingStepPending: boolean;\n    methodId?: string;\n    shippingAddress?: Address;\n    shouldShowSaveAddress?: boolean;\n    hasRequestedShippingOptions: boolean;\n    deinitialize(options: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    initialize(options: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    onAddressSelect(address: Address): void;\n    onFieldChange(name: string, value: string): void;\n    onUnhandledError?(error: Error): void;\n    onUseNewAddress(): void;\n}\n\nconst ShippingAddress: FunctionComponent<ShippingAddressProps> = props => {\n    const {\n        methodId,\n        formFields,\n        countries,\n        countriesWithAutocomplete,\n        consignments,\n        googleMapsApiKey,\n        onAddressSelect,\n        onFieldChange,\n        onUseNewAddress,\n        initialize,\n        deinitialize,\n        isLoading,\n        shippingAddress,\n        hasRequestedShippingOptions,\n        addresses,\n        shouldShowSaveAddress,\n        onUnhandledError = noop,\n        isShippingStepPending,\n    } = props;\n\n    const { setSubmitted } = useContext(FormContext);\n\n    const initializeShipping = useCallback(memoizeOne((defaultOptions: ShippingInitializeOptions) => (\n        (options?: ShippingInitializeOptions) => initialize({\n            ...defaultOptions,\n            ...options,\n        })\n    )), []);\n\n    const handleFieldChange: (fieldName: string, value: string) => void = (fieldName, value) => {\n        if (hasRequestedShippingOptions) {\n            setSubmitted(true);\n        }\n\n        onFieldChange(fieldName, value);\n    };\n\n    if (methodId) {\n        const containerId = 'addressWidget';\n        let options: ShippingInitializeOptions = {};\n\n        if (methodId === 'amazon') {\n            options = {\n                amazon: {\n                    container: containerId,\n                    onError: onUnhandledError,\n                },\n            };\n\n            return (\n                <RemoteShippingAddress\n                    containerId={ containerId }\n                    deinitialize={ deinitialize }\n                    formFields={ formFields }\n                    initialize={ initializeShipping(options) }\n                    methodId={ methodId }\n                    onFieldChange={ onFieldChange }\n                />\n            );\n        }\n\n        if (methodId === 'amazonpay' && shippingAddress) {\n            const editAddressButtonId = 'edit-ship-button';\n\n            options = {\n                amazonpay: {\n                    editAddressButtonId,\n                },\n            };\n\n            return (\n                <StaticAddressEditable\n                    address={ shippingAddress }\n                    buttonId={ editAddressButtonId }\n                    deinitialize={ deinitialize }\n                    formFields={ formFields }\n                    initialize={ initializeShipping(options) }\n                    isLoading={ isShippingStepPending }\n                    methodId={ methodId }\n                    onFieldChange={ onFieldChange }\n                />\n            );\n        }\n    }\n\n    return (\n        <ShippingAddressForm\n            address={ shippingAddress }\n            addresses={ addresses }\n            consignments={ consignments }\n            countries={ countries }\n            countriesWithAutocomplete={ countriesWithAutocomplete }\n            formFields={ formFields }\n            googleMapsApiKey={ googleMapsApiKey }\n            isLoading={ isLoading }\n            onAddressSelect={ onAddressSelect }\n            onFieldChange={ handleFieldChange }\n            onUseNewAddress={ onUseNewAddress }\n            shouldShowSaveAddress={ shouldShowSaveAddress }\n        />\n    );\n};\n\nexport default memo(ShippingAddress);\n","export const SHIPPING_ADDRESS_FIELDS = [\n    'address1',\n    'postalCode',\n    'countryCode',\n    'city',\n    'stateOrProvince',\n    'stateOrProvinceCode',\n];\n","import { Address, CheckoutParams, CheckoutSelectors, Consignment, Country, CustomerAddress, CustomerRequestOptions, FormField, RequestOptions, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport { withFormik, FormikProps } from 'formik';\nimport { debounce, noop } from 'lodash';\nimport React, { PureComponent, ReactNode } from 'react';\nimport { lazy, object } from 'yup';\n\nimport { getAddressFormFieldsValidationSchema, getTranslateAddressError, isEqualAddress, mapAddressFromFormValues, mapAddressToFormValues, AddressFormValues } from '../address';\nimport { getCustomFormFieldsValidationSchema } from '../formFields';\nimport { withLanguage, WithLanguageProps } from '../locale';\nimport { Fieldset, Form, FormContext } from '../ui/form';\n\nimport hasSelectedShippingOptions from './hasSelectedShippingOptions';\nimport BillingSameAsShippingField from './BillingSameAsShippingField';\nimport ShippingAddress from './ShippingAddress';\nimport { SHIPPING_ADDRESS_FIELDS } from './ShippingAddressFields';\nimport ShippingFormFooter from './ShippingFormFooter';\n\nexport interface SingleShippingFormProps {\n    addresses: CustomerAddress[];\n    isBillingSameAsShipping: boolean;\n    cartHasChanged: boolean;\n    consignments: Consignment[];\n    countries: Country[];\n    countriesWithAutocomplete: string[];\n    customerMessage: string;\n    googleMapsApiKey?: string;\n    isLoading: boolean;\n    isShippingStepPending: boolean;\n    isMultiShippingMode: boolean;\n    methodId?: string;\n    shippingAddress?: Address;\n    shouldShowSaveAddress?: boolean;\n    shouldShowOrderComments: boolean;\n    deinitialize(options: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    deleteConsignments(): Promise<Address | undefined>;\n    getFields(countryCode?: string): FormField[];\n    initialize(options: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    onSubmit(values: SingleShippingFormValues): void;\n    onUnhandledError?(error: Error): void;\n    signOut(options?: CustomerRequestOptions): void;\n    updateAddress(address: Partial<Address>, options?: RequestOptions<CheckoutParams>): Promise<CheckoutSelectors>;\n}\n\nexport interface SingleShippingFormValues {\n    billingSameAsShipping: boolean;\n    shippingAddress?: AddressFormValues;\n    orderComment: string;\n}\n\ninterface SingleShippingFormState {\n    isResettingAddress: boolean;\n    isUpdatingShippingData: boolean;\n    hasRequestedShippingOptions: boolean;\n}\n\nexport const SHIPPING_AUTOSAVE_DELAY = 1700;\n\nclass SingleShippingForm extends PureComponent<SingleShippingFormProps & WithLanguageProps & FormikProps<SingleShippingFormValues>> {\n    static contextType = FormContext;\n\n    state: SingleShippingFormState = {\n        isResettingAddress: false,\n        isUpdatingShippingData: false,\n        hasRequestedShippingOptions: false,\n    };\n\n    private debouncedUpdateAddress: any;\n\n    constructor(props: SingleShippingFormProps & WithLanguageProps & FormikProps<SingleShippingFormValues>) {\n        super(props);\n\n        const { updateAddress } = this.props;\n\n        this.debouncedUpdateAddress = debounce(async (address: Address, includeShippingOptions: boolean) => {\n            try {\n                await updateAddress(address, {\n                    params: {\n                        include: {\n                            'consignments.availableShippingOptions': includeShippingOptions,\n                        },\n                    },\n                });\n                if (includeShippingOptions) {\n                    this.setState({ hasRequestedShippingOptions: true });\n                }\n            } finally {\n                this.setState({ isUpdatingShippingData: false });\n            }\n        }, SHIPPING_AUTOSAVE_DELAY);\n    }\n\n    render(): ReactNode {\n        const {\n            addresses,\n            cartHasChanged,\n            isLoading,\n            onUnhandledError,\n            methodId,\n            shouldShowSaveAddress,\n            countries,\n            countriesWithAutocomplete,\n            googleMapsApiKey,\n            shippingAddress,\n            consignments,\n            shouldShowOrderComments,\n            initialize,\n            isValid,\n            deinitialize,\n            values: { shippingAddress: addressForm },\n            isShippingStepPending,\n        } = this.props;\n\n        const {\n            isResettingAddress,\n            isUpdatingShippingData,\n            hasRequestedShippingOptions,\n        } = this.state;\n\n        const PAYMENT_METHOD_VALID = ['amazon', 'amazonpay'];\n        const shouldShowBillingSameAsShipping = !PAYMENT_METHOD_VALID.some(method => method === methodId);\n\n        return (\n            <Form autoComplete=\"on\">\n                <Fieldset>\n                    <ShippingAddress\n                        addresses={ addresses }\n                        consignments={ consignments }\n                        countries={ countries }\n                        countriesWithAutocomplete={ countriesWithAutocomplete }\n                        deinitialize={ deinitialize }\n                        formFields={ this.getFields(addressForm && addressForm.countryCode) }\n                        googleMapsApiKey={ googleMapsApiKey }\n                        hasRequestedShippingOptions={ hasRequestedShippingOptions }\n                        initialize={ initialize }\n                        isLoading={ isResettingAddress }\n                        isShippingStepPending={ isShippingStepPending }\n                        methodId={ methodId }\n                        onAddressSelect={ this.handleAddressSelect }\n                        onFieldChange={ this.handleFieldChange }\n                        onUnhandledError={ onUnhandledError }\n                        onUseNewAddress={ this.onUseNewAddress }\n                        shippingAddress={ shippingAddress }\n                        shouldShowSaveAddress={ shouldShowSaveAddress }\n                    />\n                    {\n                        shouldShowBillingSameAsShipping && <div className=\"form-body\">\n                            <BillingSameAsShippingField />\n                        </div>\n                    }\n                </Fieldset>\n\n                <ShippingFormFooter\n                    cartHasChanged={ cartHasChanged }\n                    isLoading={ isLoading || isUpdatingShippingData }\n                    isMultiShippingMode={ false }\n                    shouldDisableSubmit={ this.shouldDisableSubmit() }\n                    shouldShowOrderComments={ shouldShowOrderComments }\n                    shouldShowShippingOptions={ isValid }\n                />\n            </Form>\n        );\n    }\n\n    private shouldDisableSubmit: () => boolean = () => {\n        const {\n            isLoading,\n            consignments,\n            isValid,\n        } = this.props;\n\n        const {\n            isUpdatingShippingData,\n        } = this.state;\n\n        if (!isValid) {\n            return false;\n        }\n\n        return isLoading || isUpdatingShippingData || !hasSelectedShippingOptions(consignments);\n    };\n\n    private handleFieldChange: (name: string) => void = async name => {\n        const {\n            setFieldValue,\n        } = this.props;\n\n        if (name === 'countryCode') {\n            setFieldValue('shippingAddress.stateOrProvince', '');\n            setFieldValue('shippingAddress.stateOrProvinceCode', '');\n        }\n\n        // Enqueue the following code to run after Formik has run validation\n        await new Promise(resolve => setTimeout(resolve));\n\n        const isShippingField = SHIPPING_ADDRESS_FIELDS.includes(name);\n\n        const { hasRequestedShippingOptions } = this.state;\n\n        const { isValid } = this.props;\n\n        if (!isValid) {\n            return;\n        }\n\n        this.updateAddressWithFormData(isShippingField || !hasRequestedShippingOptions);\n    };\n\n    private updateAddressWithFormData(includeShippingOptions: boolean) {\n        const {\n            shippingAddress,\n            values: { shippingAddress: addressForm },\n        } = this.props;\n\n        const updatedShippingAddress = addressForm && mapAddressFromFormValues(addressForm);\n\n        if (!updatedShippingAddress || isEqualAddress(updatedShippingAddress, shippingAddress)) {\n            return;\n        }\n\n        this.setState({ isUpdatingShippingData: true });\n        this.debouncedUpdateAddress(updatedShippingAddress, includeShippingOptions);\n    }\n\n    private handleAddressSelect: (\n        address: Address\n    ) => void = async address => {\n        const {\n            updateAddress,\n            onUnhandledError = noop,\n            values,\n            setValues,\n        } = this.props;\n\n        this.setState({ isResettingAddress: true });\n\n        try {\n            await updateAddress(address);\n\n            setValues({\n                ...values,\n                shippingAddress: mapAddressToFormValues(\n                    this.getFields(address.countryCode),\n                    address\n                ),\n            });\n        } catch (error) {\n            onUnhandledError(error);\n        } finally {\n            this.setState({ isResettingAddress: false });\n        }\n    };\n\n    private onUseNewAddress: () => void = async () => {\n        const {\n            deleteConsignments,\n            onUnhandledError = noop,\n            setValues,\n            values,\n        } = this.props;\n\n        this.setState({ isResettingAddress: true });\n\n        try {\n            const address = await deleteConsignments();\n            setValues({\n                ...values,\n                shippingAddress: mapAddressToFormValues(\n                    this.getFields(address && address.countryCode),\n                    address\n                ),\n            });\n        } catch (e) {\n            onUnhandledError(e);\n        } finally {\n            this.setState({ isResettingAddress: false });\n        }\n    };\n\n    private getFields(countryCode: string | undefined): FormField[] {\n        const {\n            getFields,\n        } = this.props;\n\n        return getFields(countryCode);\n    }\n}\n\nexport default withLanguage(withFormik<SingleShippingFormProps & WithLanguageProps, SingleShippingFormValues>({\n    handleSubmit: (values, { props: { onSubmit } }) => {\n        onSubmit(values);\n    },\n    mapPropsToValues: ({ getFields, shippingAddress, isBillingSameAsShipping, customerMessage }) => ({\n        billingSameAsShipping: isBillingSameAsShipping,\n        orderComment: customerMessage,\n        shippingAddress: mapAddressToFormValues(\n            getFields(shippingAddress && shippingAddress.countryCode),\n            shippingAddress\n        ),\n    }),\n    isInitialValid: ({\n        shippingAddress,\n        getFields,\n        language,\n    }) => (\n        !!shippingAddress && getAddressFormFieldsValidationSchema({\n            language,\n            formFields: getFields(shippingAddress.countryCode),\n        }).isValidSync(shippingAddress)\n    ),\n    validationSchema: ({\n        language,\n        getFields,\n        methodId,\n    }: SingleShippingFormProps & WithLanguageProps) => methodId ?\n        object({\n            shippingAddress: lazy<Partial<AddressFormValues>>(formValues =>\n                getCustomFormFieldsValidationSchema({\n                    translate: getTranslateAddressError(language),\n                    formFields: getFields(formValues && formValues.countryCode),\n                })\n            ),\n        }) :\n        object({\n            shippingAddress: lazy<Partial<AddressFormValues>>(formValues =>\n                getAddressFormFieldsValidationSchema({\n                    language,\n                    formFields: getFields(formValues && formValues.countryCode),\n                })\n            ),\n        }),\n    enableReinitialize: false,\n})(SingleShippingForm));\n","import { Address, AddressRequestBody, Cart, CheckoutParams, CheckoutSelectors, Consignment, ConsignmentAssignmentRequestBody, Country, CustomerAddress, CustomerRequestOptions, FormField, RequestOptions, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport React, { Component, ReactNode } from 'react';\n\nimport { withLanguage, WithLanguageProps } from '../locale';\n\nimport MultiShippingForm, { MultiShippingFormValues } from './MultiShippingForm';\nimport SingleShippingForm, { SingleShippingFormValues } from './SingleShippingForm';\n\nexport interface ShippingFormProps {\n    addresses: CustomerAddress[];\n    cart: Cart;\n    cartHasChanged: boolean;\n    consignments: Consignment[];\n    countries: Country[];\n    countriesWithAutocomplete: string[];\n    customerMessage: string;\n    googleMapsApiKey?: string;\n    isBillingSameAsShipping: boolean;\n    isGuest: boolean;\n    isLoading: boolean;\n    isShippingStepPending: boolean;\n    isMultiShippingMode: boolean;\n    methodId?: string;\n    shippingAddress?: Address;\n    shouldShowSaveAddress?: boolean;\n    shouldShowOrderComments: boolean;\n    shouldShowAddAddressInCheckout: boolean;\n    assignItem(consignment: ConsignmentAssignmentRequestBody): Promise<CheckoutSelectors>;\n    deinitialize(options: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    deleteConsignments(): Promise<Address | undefined>;\n    getFields(countryCode?: string): FormField[];\n    initialize(options: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    onCreateAccount(): void;\n    createCustomerAddress(address: AddressRequestBody): Promise<CheckoutSelectors>;\n    onMultiShippingSubmit(values: MultiShippingFormValues): void;\n    onSignIn(): void;\n    onSingleShippingSubmit(values: SingleShippingFormValues): void;\n    onUnhandledError(error: Error): void;\n    onUseNewAddress(address: Address, itemId: string): void;\n    signOut(options?: CustomerRequestOptions): void;\n    updateAddress(address: Partial<Address>, options: RequestOptions<CheckoutParams>): Promise<CheckoutSelectors>;\n}\n\nclass ShippingForm extends Component<ShippingFormProps & WithLanguageProps> {\n    render(): ReactNode {\n        const {\n            addresses,\n            assignItem,\n            cart,\n            cartHasChanged,\n            createCustomerAddress,\n            consignments,\n            countries,\n            countriesWithAutocomplete,\n            onCreateAccount,\n            customerMessage,\n            deinitialize,\n            deleteConsignments,\n            getFields,\n            googleMapsApiKey,\n            initialize,\n            isBillingSameAsShipping,\n            isGuest,\n            isLoading,\n            isMultiShippingMode,\n            methodId,\n            onMultiShippingSubmit,\n            onSignIn,\n            onSingleShippingSubmit,\n            onUnhandledError,\n            onUseNewAddress,\n            shippingAddress,\n            shouldShowOrderComments,\n            shouldShowSaveAddress,\n            shouldShowAddAddressInCheckout,\n            signOut,\n            updateAddress,\n            isShippingStepPending,\n        } = this.props;\n\n        return isMultiShippingMode ?\n            <MultiShippingForm\n                addresses={ addresses }\n                assignItem={ assignItem }\n                cart={ cart }\n                cartHasChanged={ cartHasChanged }\n                consignments={ consignments }\n                countries={ countries }\n                countriesWithAutocomplete={ countriesWithAutocomplete }\n                createCustomerAddress={ createCustomerAddress }\n                customerMessage={ customerMessage }\n                defaultCountryCode={ shippingAddress?.countryCode }\n                getFields={ getFields }\n                googleMapsApiKey={ googleMapsApiKey }\n                isGuest={ isGuest }\n                isLoading={ isLoading }\n                onCreateAccount={ onCreateAccount }\n                onSignIn={ onSignIn }\n                onSubmit={ onMultiShippingSubmit }\n                onUnhandledError={ onUnhandledError }\n                onUseNewAddress={ onUseNewAddress }\n                shouldShowAddAddressInCheckout={ shouldShowAddAddressInCheckout }\n                shouldShowOrderComments={ shouldShowOrderComments }\n            /> :\n            <SingleShippingForm\n                addresses={ addresses }\n                cartHasChanged={ cartHasChanged }\n                consignments={ consignments }\n                countries={ countries }\n                countriesWithAutocomplete={ countriesWithAutocomplete }\n                customerMessage={ customerMessage }\n                deinitialize={ deinitialize }\n                deleteConsignments={ deleteConsignments }\n                getFields={ getFields }\n                googleMapsApiKey={ googleMapsApiKey }\n                initialize={ initialize }\n                isBillingSameAsShipping={ isBillingSameAsShipping }\n                isLoading={ isLoading }\n                isMultiShippingMode={ isMultiShippingMode }\n                isShippingStepPending={ isShippingStepPending }\n                methodId={ methodId }\n                onSubmit={ onSingleShippingSubmit }\n                onUnhandledError={ onUnhandledError }\n                shippingAddress={ shippingAddress }\n                shouldShowOrderComments={ shouldShowOrderComments }\n                shouldShowSaveAddress={ shouldShowSaveAddress }\n                signOut={ signOut }\n                updateAddress={ updateAddress }\n            />;\n    }\n}\n\nexport default withLanguage(ShippingForm);\n","import React, { memo, FunctionComponent } from 'react';\n\nimport { preventDefault } from '../common/dom';\nimport { TranslatedString } from '../locale';\nimport { Legend } from '../ui/form';\n\ninterface ShippingHeaderProps {\n    isMultiShippingMode: boolean;\n    isGuest: boolean;\n    shouldShowMultiShipping: boolean;\n    onMultiShippingChange(): void;\n}\n\nconst ShippingHeader: FunctionComponent<ShippingHeaderProps> = ({\n    isMultiShippingMode,\n    isGuest,\n    onMultiShippingChange,\n    shouldShowMultiShipping,\n}) => (\n    <div className=\"form-legend-container\">\n        <Legend testId=\"shipping-address-heading\">\n            <TranslatedString\n                id={ isMultiShippingMode ?\n                    (isGuest ?\n                        'shipping.multishipping_address_heading_guest' :\n                        'shipping.multishipping_address_heading') :\n                    'shipping.shipping_address_heading' }\n            />\n        </Legend>\n\n        { shouldShowMultiShipping &&\n            <a\n                data-test=\"shipping-mode-toggle\"\n                href=\"#\"\n                onClick={ preventDefault(onMultiShippingChange) }\n            >\n                <TranslatedString id={ isMultiShippingMode ?\n                    'shipping.ship_to_single' :\n                    'shipping.ship_to_multi' }\n                />\n            </a> }\n    </div>\n);\n\nexport default memo(ShippingHeader);\n","import { Address, AddressRequestBody, Cart, CheckoutRequestBody, CheckoutSelectors, Consignment, ConsignmentAssignmentRequestBody, Country, Customer, CustomerRequestOptions, FormField, ShippingInitializeOptions, ShippingRequestOptions } from '@bigcommerce/checkout-sdk';\nimport { noop } from 'lodash';\nimport React, { Component, ReactNode } from 'react';\nimport { createSelector } from 'reselect';\n\nimport { isEqualAddress, mapAddressFromFormValues } from '../address';\nimport { withCheckout, CheckoutContextProps } from '../checkout';\nimport { EMPTY_ARRAY } from '../common/utility';\nimport { LoadingOverlay } from '../ui/loading';\n\nimport { UnassignItemError } from './errors';\nimport getShippableItemsCount from './getShippableItemsCount';\nimport getShippingMethodId from './getShippingMethodId';\nimport { MultiShippingFormValues } from './MultiShippingForm';\nimport ShippingForm from './ShippingForm';\nimport ShippingHeader from './ShippingHeader';\nimport { SingleShippingFormValues } from './SingleShippingForm';\n\nexport interface ShippingProps {\n    isBillingSameAsShipping: boolean;\n    cartHasChanged: boolean;\n    isMultiShippingMode: boolean;\n    onCreateAccount(): void;\n    onToggleMultiShipping(): void;\n    onReady?(): void;\n    onUnhandledError(error: Error): void;\n    onSignIn(): void;\n    navigateNextStep(isBillingSameAsShipping: boolean): void;\n}\n\nexport interface WithCheckoutShippingProps {\n    billingAddress?: Address;\n    cart: Cart;\n    consignments: Consignment[];\n    countries: Country[];\n    countriesWithAutocomplete: string[];\n    customer: Customer;\n    customerMessage: string;\n    googleMapsApiKey: string;\n    isGuest: boolean;\n    isInitializing: boolean;\n    isLoading: boolean;\n    isShippingStepPending: boolean;\n    methodId?: string;\n    shippingAddress?: Address;\n    shouldShowAddAddressInCheckout: boolean;\n    shouldShowMultiShipping: boolean;\n    shouldShowOrderComments: boolean;\n    assignItem(consignment: ConsignmentAssignmentRequestBody): Promise<CheckoutSelectors>;\n    deinitializeShippingMethod(options: ShippingRequestOptions): Promise<CheckoutSelectors>;\n    deleteConsignments(): Promise<Address | undefined>;\n    getFields(countryCode?: string): FormField[];\n    initializeShippingMethod(options: ShippingInitializeOptions): Promise<CheckoutSelectors>;\n    loadShippingAddressFields(): Promise<CheckoutSelectors>;\n    loadShippingOptions(): Promise<CheckoutSelectors>;\n    signOut(options?: CustomerRequestOptions): void;\n    createCustomerAddress(address: AddressRequestBody): Promise<CheckoutSelectors>;\n    unassignItem(consignment: ConsignmentAssignmentRequestBody): Promise<CheckoutSelectors>;\n    updateBillingAddress(address: Partial<Address>): Promise<CheckoutSelectors>;\n    updateCheckout(payload: CheckoutRequestBody): Promise<CheckoutSelectors>;\n    updateShippingAddress(address: Partial<Address>): Promise<CheckoutSelectors>;\n}\n\ninterface ShippingState {\n    isInitializing: boolean;\n}\n\nclass Shipping extends Component<ShippingProps & WithCheckoutShippingProps, ShippingState> {\n    constructor(props: ShippingProps & WithCheckoutShippingProps) {\n        super(props);\n\n        this.state = {\n            isInitializing: true,\n        };\n    }\n\n    async componentDidMount(): Promise<void> {\n        const {\n            loadShippingAddressFields,\n            loadShippingOptions,\n            onReady = noop,\n            onUnhandledError = noop,\n        } = this.props;\n\n        try {\n            await Promise.all([\n                loadShippingAddressFields(),\n                loadShippingOptions(),\n            ]);\n\n            onReady();\n        } catch (error) {\n            onUnhandledError(error);\n        } finally {\n            this.setState({ isInitializing: false });\n        }\n    }\n\n    render(): ReactNode {\n        const {\n            isBillingSameAsShipping,\n            isGuest,\n            shouldShowMultiShipping,\n            customer,\n            unassignItem,\n            updateShippingAddress,\n            initializeShippingMethod,\n            deinitializeShippingMethod,\n            isMultiShippingMode,\n            onToggleMultiShipping,\n            ...shippingFormProps\n        } = this.props;\n\n        const {\n            isInitializing,\n        } = this.state;\n\n        return (\n            <div className=\"checkout-form\">\n                <ShippingHeader\n                    isGuest={ isGuest }\n                    isMultiShippingMode={ isMultiShippingMode }\n                    onMultiShippingChange={ onToggleMultiShipping }\n                    shouldShowMultiShipping={ shouldShowMultiShipping }\n                />\n\n                <LoadingOverlay\n                    isLoading={ isInitializing }\n                    unmountContentWhenLoading\n                >\n                    <ShippingForm\n                        { ...shippingFormProps }\n                        addresses={ customer.addresses }\n                        deinitialize={ deinitializeShippingMethod }\n                        initialize={ initializeShippingMethod }\n                        isBillingSameAsShipping = { isBillingSameAsShipping }\n                        isGuest={ isGuest }\n                        isMultiShippingMode={ isMultiShippingMode }\n                        onMultiShippingSubmit={ this.handleMultiShippingSubmit }\n                        onSingleShippingSubmit={ this.handleSingleShippingSubmit }\n                        onUseNewAddress={ this.handleUseNewAddress }\n                        shouldShowSaveAddress={ !isGuest }\n                        updateAddress={ updateShippingAddress }\n                    />\n                </LoadingOverlay>\n            </div>\n        );\n    }\n\n    private handleSingleShippingSubmit: (values: SingleShippingFormValues) => void = async ({\n        billingSameAsShipping,\n        shippingAddress: addressValues,\n        orderComment,\n    }) => {\n        const {\n            customerMessage,\n            updateCheckout,\n            updateShippingAddress,\n            updateBillingAddress,\n            navigateNextStep,\n            onUnhandledError,\n            shippingAddress,\n            billingAddress,\n            methodId,\n        } = this.props;\n\n        const updatedShippingAddress = addressValues && mapAddressFromFormValues(addressValues);\n        const promises: Array<Promise<CheckoutSelectors>> = [];\n        const hasRemoteBilling = this.hasRemoteBilling(methodId);\n\n        if (!isEqualAddress(updatedShippingAddress, shippingAddress)) {\n            promises.push(updateShippingAddress(updatedShippingAddress || {}));\n        }\n\n        if (billingSameAsShipping &&\n            updatedShippingAddress &&\n            !isEqualAddress(updatedShippingAddress, billingAddress) &&\n            !hasRemoteBilling\n        ) {\n            promises.push(updateBillingAddress(updatedShippingAddress));\n        }\n\n        if (customerMessage !== orderComment) {\n            promises.push(updateCheckout({ customerMessage: orderComment }));\n        }\n\n        try {\n            await Promise.all(promises);\n\n            navigateNextStep(billingSameAsShipping);\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    };\n\n    private hasRemoteBilling: (methodId?: string) => boolean = methodId => {\n        const PAYMENT_METHOD_VALID = ['amazonpay'];\n\n        return PAYMENT_METHOD_VALID.some(method => method === methodId);\n    };\n\n    private handleUseNewAddress: (address: Address, itemId: string) => void = async (address, itemId) => {\n        const { unassignItem, onUnhandledError } = this.props;\n\n        try {\n            await unassignItem({\n                shippingAddress: address,\n                lineItems: [{\n                    quantity: 1,\n                    itemId,\n                }],\n            });\n\n            location.href = '/account.php?action=add_shipping_address&from=checkout';\n        } catch (e) {\n            onUnhandledError(new UnassignItemError(e));\n        }\n    };\n\n    private handleMultiShippingSubmit: (values: MultiShippingFormValues) => void = async ({ orderComment }) => {\n        const {\n            customerMessage,\n            updateCheckout,\n            navigateNextStep,\n            onUnhandledError,\n        } = this.props;\n\n        try {\n            if (customerMessage !== orderComment) {\n                await updateCheckout({ customerMessage: orderComment });\n            }\n\n            navigateNextStep(false);\n        } catch (error) {\n            onUnhandledError(error);\n        }\n    };\n}\n\nconst deleteConsignmentsSelector = createSelector(\n    ({ checkoutService: { deleteConsignment } }: CheckoutContextProps) => deleteConsignment,\n    ({ checkoutState: { data } }: CheckoutContextProps) => data.getConsignments(),\n    (deleteConsignment, consignments) => async () => {\n        if (!consignments || !consignments.length) {\n            return;\n        }\n\n        const [{ data }] = await Promise.all(consignments.map(({ id }) =>\n            deleteConsignment(id)\n        ));\n\n        return data.getShippingAddress();\n    }\n);\n\nexport function mapToShippingProps({\n    checkoutService,\n    checkoutState,\n}: CheckoutContextProps): WithCheckoutShippingProps | null {\n    const {\n        data: {\n            getCart,\n            getCheckout,\n            getConfig,\n            getCustomer,\n            getConsignments,\n            getShippingAddress,\n            getBillingAddress,\n            getShippingAddressFields,\n            getShippingCountries,\n        },\n        statuses: {\n            isShippingStepPending,\n            isSelectingShippingOption,\n            isLoadingShippingOptions,\n            isUpdatingConsignment,\n            isCreatingConsignments,\n            isCreatingCustomerAddress,\n            isLoadingShippingCountries,\n            isUpdatingBillingAddress,\n            isUpdatingCheckout,\n        },\n    } = checkoutState;\n\n    const checkout = getCheckout();\n    const config = getConfig();\n    const consignments = getConsignments() || [];\n    const customer = getCustomer();\n    const cart = getCart();\n\n    if (!checkout || !config || !customer || !cart) {\n        return null;\n    }\n\n    const {\n        checkoutSettings: {\n            enableOrderComments,\n            features,\n            hasMultiShippingEnabled,\n            googleMapsApiKey,\n        },\n    } = config;\n\n    const methodId = getShippingMethodId(checkout);\n    const shippableItemsCount = getShippableItemsCount(cart);\n    const isLoading = (\n        isLoadingShippingOptions() ||\n        isSelectingShippingOption() ||\n        isUpdatingConsignment() ||\n        isCreatingConsignments() ||\n        isUpdatingBillingAddress() ||\n        isUpdatingCheckout() ||\n        isCreatingCustomerAddress()\n    );\n    const shouldShowMultiShipping = (\n        hasMultiShippingEnabled &&\n        !methodId &&\n        shippableItemsCount > 1 &&\n        shippableItemsCount < 50\n    );\n    const countriesWithAutocomplete = ['US', 'CA', 'AU', 'NZ'];\n\n    if (features['CHECKOUT-4183.checkout_google_address_autocomplete_uk']) {\n        countriesWithAutocomplete.push('GB');\n    }\n\n    const shippingAddress = !shouldShowMultiShipping && consignments.length > 1 ? undefined : getShippingAddress();\n\n    return {\n        assignItem: checkoutService.assignItemsToAddress,\n        billingAddress: getBillingAddress(),\n        cart,\n        consignments,\n        countries: getShippingCountries() || EMPTY_ARRAY,\n        countriesWithAutocomplete,\n        customer,\n        customerMessage: checkout.customerMessage,\n        createCustomerAddress: checkoutService.createCustomerAddress,\n        deinitializeShippingMethod: checkoutService.deinitializeShipping,\n        deleteConsignments: deleteConsignmentsSelector({ checkoutService, checkoutState }),\n        getFields: getShippingAddressFields,\n        googleMapsApiKey,\n        initializeShippingMethod: checkoutService.initializeShipping,\n        isGuest: customer.isGuest,\n        isInitializing: isLoadingShippingCountries() || isLoadingShippingOptions(),\n        isLoading,\n        isShippingStepPending: isShippingStepPending(),\n        loadShippingAddressFields: checkoutService.loadShippingAddressFields,\n        loadShippingOptions: checkoutService.loadShippingOptions,\n        methodId,\n        shippingAddress,\n        shouldShowMultiShipping,\n        shouldShowAddAddressInCheckout: features['CHECKOUT-4726.add_address_in_multishipping_checkout'],\n        shouldShowOrderComments: enableOrderComments,\n        signOut: checkoutService.signOutCustomer,\n        unassignItem: checkoutService.unassignItemsToAddress,\n        updateBillingAddress: checkoutService.updateBillingAddress,\n        updateCheckout: checkoutService.updateCheckout,\n        updateShippingAddress: checkoutService.updateShippingAddress,\n    };\n}\n\nexport default withCheckout(mapToShippingProps)(Shipping);\n"],"sourceRoot":""}