[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of checkout-ui-custom/checkout-ui-custom/src/_js/_customAddressForm.js from the checkout-ui-custom VTEX app.

[Assistant]
Here's the implementation:

```javascript
/* eslint-disable prettier/prettier */
/* eslint-disable vtex/prefer-early-return */
/* eslint-disable no-console */
/* eslint-disable func-names */
/* eslint-disable max-params */
const { _locale } = require('./_locale-infos.js')
const {
  _countries,
  _countriesrules,
  _cities,
  _addressPlaceholder,
} = require('./_countries.js')
const { getShipStateValue } = require('./_utils')

// temporaly workaorund
window.callbackMap = () => {
  window.vtexjs.checkout.getOrderForm(orderForm => {
    if (
      window.vcustom &&
      window.vcustom.checkout &&
      window.vcustom.customAddressFormInit
    )
      window.vcustom.checkout.customAddressFormInit(orderForm)
  })
}

// end temporaly workaorund

class fnsCustomAddressForm {
  constructor({ active = false } = {}) {
    this.BodyFormClasses = ['v-custom-addressForm-on', 'v-custom-googleForm-on']
    this.active = active
    this.googleMapsApiKey = window.vtex.googleMapsApiKey
    this.orderForm = ''
    this.classOn = 'v-custom-fnsCustomAddressForm'
    this.deliveryCountries = ''
    this.mainCountry = ''
    this.lang = ''
    this.isPickupPoint = false
    this.locale = ''

    this.address = {
      country: '',
      postalCode: '',
      city: '',
      state: '',
      street: '',
      complement: '',
      addressQuery: '',
      addressId: '',
      geoCoordinates: [],
    }

    this.validate = true

    this.gPlacesAutocomplete = ''

    this.firstAttempt = false
  }

  loadScript() {
    $('body').append(
      `<script src="https://maps.googleapis.com/maps/api/js?key=${this.googleMapsApiKey}&language=${window.vtex.i18n.locale}&libraries=places&callback=callbackMap"></script>`
    )
  }

  messageTrigger(_message) {
    const message = {
      content: {
        title: '',
        detail: _message,
      },
      type: 'warning',
    }

    $(window).trigger('addMessage', message)
  }

  updateAddress(
    country = '',
    postalCode = '',
    city = '',
    state = '',
    street = '',
    number = null,
    complement = '',
    addressQuery = '',
    addressId = '',
    geoCoordinates = ''
  ) {
    this.address = {
      country,
      postalCode,
      addressId,
      city,
      state,
      geoCoordinates,
      street,
      number,
      complement,
      addressQuery,
    }

    if (country === '') {
      this.setForm('')
    }
  }

  setForm(
    country = '',
    street = '',
    formattedStreet = '',
    number = '',
    postalCode = '',
    city = '',
    state = '',
    complement = '',
    neighborhood = '',
    geoCoordinates = ''
  ) {
    const _this = this

    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street').val(
      'number' in _this.addressrules &&
        _this.addressrules.number &&
        _this.addressrules.number.required
        ? street
        : formattedStreet || street
    )

    $('.vcustom--vtex-omnishipping-1-x-address #ship-complement').val(
      complement
    )
    $('.vcustom--vtex-omnishipping-1-x-address #ship-number').val(number)
    $('.vcustom--vtex-omnishipping-1-x-address #ship-city').val(city)
    $('.vcustom--vtex-omnishipping-1-x-address #ship-postalCode').val(
      postalCode
    )
    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street').attr(
      'data-street',
      'number' in _this.addressrules &&
        _this.addressrules.number &&
        _this.addressrules.number.required
        ? street
        : formattedStreet || street
    )
    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street').attr(
      'data-number',
      'number' in _this.addressrules &&
        _this.addressrules.number &&
        _this.addressrules.number.required
        ? number
        : null
    )
    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street').attr(
      'data-neighborhood',
      neighborhood
    )
    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street').attr(
      'data-geocoordinates',
      geoCoordinates
    )

    $('.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-country').attr(
      'data-country',
      country
    )

    $('.vcustom--vtex-omnishipping-1-x-address #ship-state').val(
      getShipStateValue(state) || ''
    )
  }

  updateGoogleForm(countryCode = 'usa') {
    const _this = this
    const labels = [
      {
        default: 'Street address',
        prop: 'address1Placeholder',
        element: $('label#address1-label'),
      },
      { default: 'Number', prop: 'number', element: $('label#number-label') },
      {
        default: 'Complements',
        prop: 'address2Placeholder',
        element: $('label#address2-label'),
      },
      { default: 'City', prop: 'city', element: $('label#city-label') },
      { default: 'State', prop: 'state', element: $('label#state-label') },
      {
        default: 'Country',
        prop: 'country',
        element: $('label#country-label'),
      },
      {
        default: 'Postal Code',
        prop: 'postalCode',
        element: $('label#postalCode-label'),
      },
    ]

    _this._locale = _locale[countryCode.toUpperCase()] || _locale.USA

    for (let i = 0; i < labels.length; i++) {
      const label = labels[i]

      label.element.text(_this._locale[label.prop] || label.default)
    }

    $('input#v-custom-ship-street').attr(
      'placeholder',
      _addressPlaceholder[countryCode.toUpperCase()]
        ? _addressPlaceholder[countryCode.toUpperCase()]
        : ''
    )
    this.gPlacesAutocomplete.setComponentRestrictions({
      country: [countryCode],
    })
  }

  returnAddressFRules(components, attrs) {
    if (!attrs) return ''
    const { valueIn = 'short_name', types } = attrs

    for (let i = 0; i < types.length; i++) {
      const ruleComponent = types[i]

      if (
        components.find(component =>
          component.types.some(v => v === ruleComponent)
        )
      ) {
        return components.find(component =>
          component.types.some(v => v === ruleComponent)
        )[valueIn]
      }
    }

    return ''
  }

  googleForm() {
    const _this = this
    const input = document.getElementById('v-custom-ship-street')
    const geocodeClient = new window.google.maps.Geocoder()

    _this.gPlacesAutocomplete = new window.google.maps.places.Autocomplete(
      input
    )

    _this.gPlacesAutocomplete.addListener('place_changed', function () {
      const place = _this.gPlacesAutocomplete.getPlace()

      geocodeClient.geocode({ address: place.formatted_address })

      if (~window.location.host.indexOf('myvtex')) {
        console.log(place)
      }

      const [, country] = _countries.find(
        c =>
          c[0] ===
          place.address_components.filter(
            item => item.types[0] === 'country'
          )[0].short_name
      )

      const street = place.address_components.find(
        item => item.types[0] === 'route'
      )
        ? place.address_components.find(item => item.types[0] === 'route')
            .long_name
        : place.vicinity

      let state = _this.returnAddressFRules(
        place.address_components,
        _this.addressrules.state
      )

      const neighborhood = _this.addressrules.neighborhood
        ? _this.returnAddressFRules(
            place.address_components,
            _this.addressrules.neighborhood
          )
        : ''

      if (
        'number' in _this.addressrules &&
        _this.addressrules.number &&
        _this.addressrules.number.required
      ) {
        $('.vcustom--vtex-omnishipping-1-x-address #ship-number').val(
          _this.returnAddressFRules(place.address_components, {
            types: ['street_number'],
          })
        )
      }

      const number =
        'number' in _this.addressrules &&
        _this.addressrules.number &&
        _this.addressrules.number.required
          ? $('.vcustom--vtex-omnishipping-1-x-address #ship-number').val()
          : _this.returnAddressFRules(place.address_components, {
              types: ['street_number'],
            })

      const complement = _this.addressrules.complement
        ? _this.returnAddressFRules(place.address_components, {
            types: ['subpremise'],
          })
        : $('.vcustom--vtex-omnishipping-1-x-address #ship-complement').val()

      const geoCoordinates = [
        place.geometry.location.lng(),
        place.geometry.location.lat(),
      ]

      const formattedAddress = $('

')

      formattedAddress.html(place.adr_address)
      let formattedStreet = $('.street-address', formattedAddress).text()

      let city =
        _this.returnAddressFRules(
          place.address_components,
          _this.addressrules.city
        ) || $('.locality', formattedAddress).text()

      let postalCode = _this.addressrules.postalCode
        ? _this.returnAddressFRules(place.address_components, {
            types: ['postal_code'],
          })
        : '00000'

      // temporaly workaround for ARG

      if (country === 'ARG') {
        formattedStreet = street
        postalCode = postalCode.replace(/\D/gi, '')
        if (state === 'Provincia de Buenos Aires') state = 'Buenos Aires'
        if (state.toUpperCase() === 'CABA') {
          state = 'Ciudad Autónoma de Buenos Aires'
          city = 'Ciudad Autónoma de Buenos Aires'
        }
      }

      _this.setForm(
        country,
        street,
        formattedStreet,
        number,
        postalCode,
        city,
        state,
        complement,
        neighborhood,
        geoCoordinates
      )
      _this.validateAllFields()
      _this.updateAddress(
        country,
        postalCode,
        city,
        state,
        street,
        number,
        complement,
        place.formatted_address,
        _this.address.addressId,
        geoCoordinates
      )
    })

    $('body').on('keyup', '#v-custom-ship-street', function () {
      $(this).attr('autocomplete', 'none')
      $(this).attr('data-number', '')
      $(this).attr('data-street', $(this).context.value)
    })

    $('body').on('focus', '#v-custom-ship-street', function () {
      $(this).attr('autocomplete', 'none')
    })
  }

  triggerAddressValidation() {
    window.store.dispatch({
      type: 'DISABLE_CALCULATE_BUTTON',
      isCalculateBttnEnabled: false,
    })
  }

  receiverNameF() {
    const _this = this

    if (
      _this.orderForm.clientProfileData &&
      _this.orderForm.clientProfileData.firstName &&
      _this.orderForm.clientProfileData.lastName &&
      !~window.vtexjs.checkout.orderForm.clientProfileData.firstName.indexOf(
        '*'
      )
    ) {
      return `${_this.orderForm.clientProfileData.firstName} ${
        _this.orderForm.clientProfileData.lastName
          ? _this.orderForm.clientProfileData.lastName
          : ''
      }`
    }

    return ''
  }

  geti18n() {
    const _this = this

    const { locale } = _this.orderForm.clientPreferencesData
    const _lang = window.vtex.i18n[locale]

    const lang = _lang || window.vtex.i18n[locale.split(`-`)[0]]

    if (!lang) window.vtex.i18n.en

    return lang
  }

  sendAddress(
    _country,
    _street,
    _number,
    _state,
    _postalCode,
    _city,
    _complement,
    _addressQuery,
    _addressId,
    _neighborhood,
    geoCoordinates
  ) {
    const _this = this

    if (~geoCoordinates.indexOf(',')) {
      const [lat, lng] = geoCoordinates.split(',')

      geoCoordinates = [parseFloat(lat), parseFloat(lng)]

      // temporaly workaround for ARG_country === 'MLT'
      if (_country === 'ARG' && _city.toUpperCase() === 'CABA') {
        _city = 'Ciudad Autónoma de Buenos Aires'
      }
      // end temporaly workaround for ARG

      // temporaly workaround for MLT
      if (_country === 'MLT') {
        _state = null
      }
      // end temporaly workaround for MLT

      // temporaly workaround for USA and CAN
      if (
        _country === 'USA' ||
        _country === 'MLT' ||
        _country === 'CAN'
      ) {
        _number = null
      }
      // end temporaly workaround for USA

      // if (!_this.addressrules.state) {
      //   _state = ''
      // }
    } else {
      geoCoordinates = []
    }

    $('body').addClass('js-v-custom-is-loading')

    const shippingInfo = {
      selectedAddresses: [
        {
          addressType: 'residential',
          receiverName: _this.receiverNameF(),
          isDisposable: false,
          postalCode: _postalCode,
          city: _city,
          state: _state,
          country: _country,
          street: _street,
          number: _number || '',
          neighborhood: _neighborhood,
          complement: _complement,
          reference: null,
          geoCoordinates: geoCoordinates || [],
          addressQuery: _addressQuery,
        },
      ],
      clearAddressIfPostalCodeNotFound: false,
    }

    window.vtexjs.checkout
      .sendAttachment('shippingData', {})
      .done(function () {
        $(window).trigger('VCUSTOM__ADDRESSFORM__CLEARED')

        $('button.vtex-front-messages-close-all.close').trigger('click')
        $('.vtex-omnishipping-1-x-warning').hide()
        $('.alert-noStreet').hide()
        $(
          '.shp-alert.vtex-omnishipping-1-x-alert.shp-alert-shipping-unavailable.vtex-omnishipping-1-x-alertPickup, .button-unavailable-delivery-pickup-wrapper'
        ).hide()
        _this.firstAttempt = true

        window.vtexjs.checkout
          .sendAttachment('shippingData', shippingInfo)
          .done(function (orderForm) {
            if (
              orderForm.error ||
              !orderForm.shippingData.address ||
              orderForm.items.filter(
                item => item.availability == 'cannotBeDelivered'
              ).length == orderForm.items.length
            ) {
              // eslint-disable-next-line no-alert
              $(
                '.vtex-omnishipping-1-x-warning, .step.shipping-data .box-step'
              ).show()
              $('body')
                .addClass(_this.BodyFormClasses.join(' '))
                .removeClass(
                  'js-v-custom-is-loading js-v-custom-is-loadAddress'
                )
              if (orderForm.error && orderForm.error.message)
                // eslint-disable-next-line no-alert
                alert(
                  `Something went wrong: ${
                    orderForm.error ? orderForm.error.message : 'null address'
                  }`
                )

              if (
                orderForm.items.filter(
                  item => item.availability == 'cannotBeDelivered'
                ).length == orderForm.items.length
              ) {
                _this.messageTrigger(
                  _this.geti18n().cart.unavailableForDelivery
                )
              }
            } else {
              _this.updateAddress(
                _country,
                _postalCode,
                _city,
                _state,
                _street,
                _number,
                _complement,
                '',
                _addressQuery || '',
                _addressId || '',
                geoCoordinates || []
              )
              $('body')
                .removeClass(_this.BodyFormClasses.join(' '))
                .removeClass('js-v-custom-is-loading')
              _this.orderForm = orderForm
              _this.triggerAddressValidation()
              $(window).trigger('VCUSTOM__ADDRESSFORM__UPDATED')
            }
          })
          .fail(function (error) {
            _this.orderForm = window.vtexjs.checkout.orderForm
            $('body').removeClass(
              'js-v-custom-is-loading js-v-custom-is-loadAddress'
            )
            console.error(
              `Something went wrong: Custom Address Form (sendAddress) --> ${error}`
            )
          })
      })
      .fail(function (error) {
        _this.orderForm = window.vtexjs.checkout.orderForm
        $('body').removeClass(
          'js-v-custom-is-loading js-v-custom-is-loadAddress'
        )
        console.error(
          `Something went wrong: Custom Address Form (sendAddress) --> ${error}`
        )
      })
  }

  getRegions(country) {
    const countryRegions = _cities.find(
      city => city.countryShortCode === country
    )

    return countryRegions.regions.map(i => {
      return `<option value="${i.shortCode},${i.name}">${i.name}</option>`
    })
  }

  getCountries() {
    const _this = this

    /* eslint eqeqeq: 0 */
    if (
      _this.deliveryCountries == ['BRA'] ||
      _this.deliveryCountries == 'BRA'
    ) {
      _this.deliveryCountries =
        window.vtexjs.checkout.orderForm.shippingData.logisticsInfo[0].shipsTo
    }

    return _this.deliveryCountries.map(countryCode => {
      const _i18n = window.vtex.i18n[_this.lang]
        ? window.vtex.i18n[_this.lang]
        : window.vtex.i18n[window.vtex.i18n.locale]

      let ret = ''

      if (_i18n.countries[countryCode]) {
        ret = `<option value="${countryCode}" ${
          countryCode === _this.mainCountry ? 'selected' : ''
        }>${_i18n.countries[countryCode]}</option>`
      }

      return ret
    })
  }

  updateFormFieldByCountry(addressrules) {
    const number = $('.vcustom--vtex-omnishipping-1-x-address p.ship-number')
    const state = $('.vcustom--vtex-omnishipping-1-x-address p.ship-state')

    if (
      'number' in addressrules &&
      addressrules.number &&
      addressrules.number.required
    ) {
      number.show()
      number.find('input').attr('required', 'required')
    } else {
      number.hide()
      number.find('input').removeAttr('required')
    }

    if (addressrules.state) {
      state.show()
      state.find('select').attr('required', 'required')
    } else {
      state.hide()
      state.find('select').removeAttr('required')
    }
  }

  form(orderForm) {
    const _this = this

    const { shippingData } = orderForm

    const country = _countries.find(c => c[1] === _this.mainCountry)

    const { isPickupPoint } = this

    const form = `

        <form>

${
              _this.locale
                ? _this.locale.address1Placeholder ||
                  'Street address or P.O. Box'
                : 'Street address or P.O. Box'
            }<input required autocomplete="none" id="v-custom-ship-street" type="text" name="v-custom-street" class="input-xlarge" data-hj-whitelist="true" value="${
      shippingData.address &&
      null !== shippingData.address.street &&
      !isPickupPoint
        ? shippingData.address.street
        : ''
    }" placeholder="Eg: 225 East 41st Street, New York">${
      _this.locale.requiredField
        ? _this.locale.requiredField
        : 'This field is required.'
    }

${
      _this.locale.number ? _this.locale.number || 'Number' : 'Number'
    }<input ${
      'number' in _this.addressrules &&
      _this.addressrules.number &&
      _this.addressrules.number.required
        ? 'required'
        : ''
    } autocomplete="on" id="ship-number" type="text" name="v-custom-number" maxlength="20" placeholder="${
      _this.locale.number ? _this.locale.number : ''
    }" class="input-xlarge" data-hj-whitelist="true" value="${
      shippingData.address &&
      shippingData.address.number !== null &&
      !isPickupPoint
        ? shippingData.address.number
        : ''
    }">${
      _this.locale ? _this.locale.requiredField : 'This field is required.'
    }

${
                _this.locale
                  ? _this.locale.address2Placeholder ||
                    'Apartment number, unit, floor, etc.'
                  : 'Apartment number, unit, floor, etc.'
              }<input autocomplete="on" id="ship-complement" type="text" name="v-custom-complement" maxlength="750" placeholder="${
      _this.locale.address2Placeholder ? _this.locale.address2Placeholder : ''
    }" class="input-xlarge" data-hj-whitelist="true" value="${
      shippingData.address &&
      shippingData.address.complement !== null &&
      !isPickupPoint
        ? shippingData.address.complement
        : ''
    }">

              <p class="input ship-country text ${
                _this.deliveryCountries.length <= 1 ? 'hide' : ''
              } ">Country<select name="v-custom-country" id="ship-country" class="input-large">${_this
      .getCountries()
      .join('')}</select>

${
                _this.locale ? _this.locale.city || 'City' : 'City'
              }<input required autocomplete="on" id="ship-city" type="text" name="v-custom-city" maxlength="100" class="input-large" data-hj-whitelist="true" value="${
      shippingData.address &&
      shippingData.address.city !== null &&
      !isPickupPoint
        ? shippingData.address.city
        : ''
    }">${
      _this.locale.requiredField
        ? _this.locale.requiredField
        : 'This field is required.'
    }

${
                _this.locale ? _this.locale.state || 'State' : 'State'
              }
                  <select name="v-custom-state" id="ship-state" class="input-large" ${
                    _this.addressrules.state ? 'required' : ''
                  }>
                    <option value="" disabled selected>${
                      _this.locale ? _this.locale.state : 'State'
                    }</option>
                    ${_this.getRegions(country[0]).join('')}
                  </select>
                  ${
                    _this.locale.requiredField
                      ? _this.locale.requiredField
                      : 'This field is required.'
                  }

${
                window.vtex.i18n[_this.lang]
                  ? window.vtex.i18n[_this.lang].cart.postalCode
                  : 'Zip Code'
              }<input required autocomplete="on" id="ship-postalCode" type="text" name="receiver" maxlength="${
      _this.addressrules.postalCodeLength
        ? _this.addressrules.postalCodeLength
        : '20'
    }" class="input-xlarge" data-hj-whitelist="true" value="${
      shippingData.address && !isPickupPoint
        ? shippingData.address.postalCode
        : ''
    }">${
      _this.locale.requiredField
        ? _this.locale.requiredField
        : 'This field is required.'
    }

<button class="submit  btn-go-to-shippping-method btn btn-large btn-success" id="btn-go-to-shippping-method" type="button">${
              _this.locale.goToShipping
                ? _this.locale.goToShipping
                : 'Continue to shipping'
            }</button>

        </form>

    `

    if (shippingData.address && !isPickupPoint) {
      $('.vcustom--vtex-omnishipping-1-x-address #ship-state').val(
        getShipStateValue(shippingData.address.state)
      )
    }

    if (
      $('.vcustom--vtex-omnishipping-1-x-address.step').length == 0 &&
      shippingData.logisticsInfo[0].selectedDeliveryChannel !==
        'pickup-in-point' &&
      window.location.href.indexOf('shipping') !== -1
    ) {
      $('.orderform-template-holder #shipping-data').append(form)
    }

    if (
      $('#shipping-option-pickup-in-point').hasClass(
        'vtex-omnishipping-1-x-deliveryOptionActive'
      )
    ) {
      $('body').removeClass('v-custom-addressForm-on')
    }

    this.googleForm()
    this.updateGoogleForm(country[1].toLowerCase())

    // sort countries
    const sel = $('.vcustom--vtex-omnishipping-1-x-address #ship-country')
    const selected = sel.val() // cache selected value, before reordering
    const optsList = sel.find('option')

    optsList.sort(function (a, b) {
      return $(a).text() > $(b).text() ? 1 : -1
    })
    sel.html('').append(optsList)
    sel.val(selected) // set cached selected value

    shippingData.address && shippingData.address.addressType === 'search'
      ? (this.isPickupPoint = true)
      : (this.isPickupPoint = false)
  }

  validateAllFields() {
    const _this = this

    _this.validate = true
    $(
      '.vcustom--vtex-omnishipping-1-x-address input:required, .vcustom--vtex-omnishipping-1-x-address select:required'
    ).each(function () {
      if (this.value === '') {
        $(this).addClass('error')
        _this.validate = false
      } else {
        $(this).removeClass('error')
      }
    })
  }

  scrollToAddress() {
    const doc = document.documentElement
    const scrollTop =
      (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)

    const posSPtop = $('#shipping-data').offset().top

    if (scrollTop > posSPtop) window.scrollTo(0, posSPtop)
  }

  submitAddressForm() {
    const _this = this

    _this.validateAllFields()

    if (!_this.validate) return

    const _st = $(
      '.vcustom--vtex-omnishipping-1-x-address #v-custom-ship-street'
    )

    const country = $(
      '.vcustom--vtex-omnishipping-1-x-address #ship-country'
    ).val()

    const street = _st.attr('data-street') || ''
    const number = $(
      '.vcustom--vtex-omnishipping-1-x-address #ship-number'
    ).val()
      ? $('.vcustom--vtex-omnishipping-1-x-address #ship-number').val()
      : _st.attr('data-number') || ''

    const geoCoordinates = _st.attr('data-geocoordinates') || []
    const neighborhood = _st.attr('data-neighborhood') || null
    const complement = $(
      '.vcustom--vtex-omnishipping-1-x-address #ship-complement'
    ).val()

    const city = $('.vcustom--vtex-omnishipping-1-x-address #ship-city').val()
    const [stateShortCode, stateName] = $(
      '.vcustom--vtex-omnishipping-1-x-address #ship-state'
    )
      .val()
      .split(',')

    const state = stateShortCode || stateName

    const postalCode = $(
      '.vcustom--vtex-omnishipping-1-x-address #ship-postalCode'
    ).val()

    _this.sendAddress(
      country,
      street,
      number,
      state,
      postalCode,
      city,
      complement,
      _this.address.addressQuery,
      _this.address.addressId,
      neighborhood,
      geoCoordinates
    )
  }

  updateFormByCountry(countryCode) {
    if (~window.location.host.indexOf('myvtex')) {
      console.log('countryCode:', countryCode)
    }

    const _this = this
    const country = _countries.find(c => c[1] === countryCode)
    const state = _this.address.state || null

    _this.getCountryRule(country[1]).then(rules => {
      _this.addressrules = rules
      _this.updateFormFieldByCountry(_this.addressrules)
      $("select[name='v-custom-state']").html(
        `${_this.getRegions(country[0]).join('')}`
      )
      if (state && getShipStateValue(state)) {
        $('.vcustom--vtex-omnishipping-1-x-address #ship-state').val(
          getShipStateValue(state)
        )
      }

      _this.updateGoogleForm(countryCode.toLowerCase())
    })
  }

  bind() {
    const _this = this

    $('body').on(
      'click',
      '.step.shipping-data .vtex-omnishipping-1-x-buttonEditAddress, .step.shipping-data .vtex-omnishipping-1-x-linkEdit',
      function () {
        if (
          !$('#shipping-option-pickup-in-point').hasClass(
            'vtex-omnishipping-1-x-deliveryOptionActive'
          )
        ) {
          const indexAddress = $(
            '.vtex-omnishipping-1-x-addressItemOption.vtex-omnishipping-1-x-active'
          ).index()

          let addressClicked = _this.orderForm.shippingData.availableAddresses.find(
            address => {
              return (
                address.addressId ==
                _this.orderForm.shippingData.address.addressId
              )
            }
          )

          if (!addressClicked) {
            if (indexAddress < 0) {
              addressClicked = addressClicked.selectedAddresses[0]
            } else {
              addressClicked = addressClicked.availableAddresses[indexAddress]
            }
          }

          if (
            addressClicked &&
            addressClicked.city &&
            addressClicked.city.indexOf('*') < 0
          ) {
            try {
              $('body').addClass(_this.BodyFormClasses.join(' '))
              if (
                addressClicked.isDisposable ||
                ~window.location.origin.indexOf('myvtex')
              ) {
                setTimeout(() => {
                  let countryClicked = _this.deliveryCountries.filter(
                    country => country == addressClicked.country
                  )

                  countryClicked = countryClicked.length
                    ? countryClicked[0]
                    : _this.deliveryCountries[0]

                  addressClicked.street = addressClicked.street || ''
                  _this.updateAddress(
                    countryClicked,
                    addressClicked.postalCode,
                    addressClicked.city,
                    addressClicked.state,
                    addressClicked.number,
                    addressClicked.street,
                    addressClicked.complement,
                    '',
                    addressClicked.addressId,
                    addressClicked.geoCoordinates
                  )

                  $(
                    '.vcustom--vtex-omnishipping-1-x-address #ship-country'
                  ).val(countryClicked)
                  _this.updateFormByCountry(countryClicked)
                  _this.setForm(
                    countryClicked,
                    addressClicked.street,
                    addressClicked.addressQuery,
                    addressClicked.number,
                    addressClicked.postalCode,
                    addressClicked.city,
                    addressClicked.state,
                    addressClicked.complement,
                    addressClicked.neighborhood,
                    addressClicked.geoCoordinates
                  )

                  _this.triggerAddressValidation()
                }, 100)
              }
            } catch (e) {
              $('body').removeClass(_this.BodyFormClasses.join(' '))
            }
          } else {
            $('body').removeClass(_this.BodyFormClasses.join(' '))
          }
        }
      }
    )

    $('body').on(
      'click',
      '.vtex-omnishipping-1-x-buttonCreateAddress, .vtex-omnishipping-1-x-disclaimer a#remove-unavailable-items',
      function () {
        if (
          !$('#shipping-option-pickup-in-point').hasClass(
            'vtex-omnishipping-1-x-deliveryOptionActive'
          )
        ) {
          $('body').addClass(_this.BodyFormClasses.join(' '))
          _this.address.addressId = ''
          _this.updateAddress('')
        }
      }
    )

    $('body').on('click', '#shipping-option-pickup-in-point', function () {
      $('body').removeClass(_this.BodyFormClasses.join(' '))
    })

    $('body').on(
      'click',
      '.vtex-omnishipping-1-x-backToAddressList',
      function () {
        $('body').removeClass(_this.BodyFormClasses.join(' '))
        _this.address.addressId = ''
      }
    )

    $('body').on(
      'click',
      '.vtex-omnishipping-1-x-addressItemOption',
      function () {
        _this.address.addressId = _this.orderForm.shippingData
          .availableAddresses[$(this).index()]
          ? _this.orderForm.shippingData.availableAddresses[$(this).index()]
              .addressId
          : ''
      }
    )

    $('body').on('change', "select[name='v-custom-country']", function (e) {
      e.stopImmediatePropagation()
      try {
        _this.updateFormByCountry(this.value)
        _this.updateAddress('')
      } catch (err) {
        console.error(`updateFormByCountry ${this.value} error:`, err)
      }
    })

    $('body').on('click', '#btn-go-to-shippping-method', function (e) {
      e.preventDefault()
      e.stopImmediatePropagation()
      _this.submitAddressForm()
      _this.scrollToAddress()
    })

    $('body').on(
      'keyup',
      '.vcustom--vtex-omnishipping-1-x-address input',
      function () {
        if (this.value !== '') {
          $(this).removeClass('error')
        }
      }
    )
  }

  checkFirstLogin(orderForm) {
    const _this = this

    if (orderForm && orderForm.shippingData) {
      if (
        (orderForm.shippingData.address === null ||
          orderForm.shippingData.address.addressType === 'search') &&
        !_this.firstAttempt &&
        $('.vtex-omnishipping-1-x-deliveryOptionActive').attr('id') ===
          'shipping-option-delivery'
      ) {
        $('body').addClass(_this.BodyFormClasses[0])
      }
    }
  }

  getCountryRule(country) {
    const _this = this

    return fetch(`/rules/${country}`)
      .then(res => res.json())
      .then(jsonRes => {
        const { data: rules, success } = jsonRes

        if (country == 'MLT') {
          return _countriesrules.MLT
        }
        if (country == 'ITA') {
          return _countriesrules.ITA
        }

        return success ? rules.geolocation : _this.getCountryRule('default')
      })
      .catch(error => {
        throw new Error(error)
      })
  }

  loadingAddress() {
    $(window).on('VCUSTOM__ADDRESSFORM__CLEARED', function () {
      console.log('VCUSTOM__ADDRESSFORM__CLEARED')
      $('body').addClass('js-v-custom-is-loadAddress')
    })

    $(window).on('VCUSTOM__ADDRESSFORM__UPDATED', function () {
      console.log('VCUSTOM__ADDRESSFORM__UPDATED')
      $('body').removeClass('js-v-custom-is-loadAddress')
    })
  }

  events() {
    const _this = this

    _this.loadingAddress()
    $(window).on('orderFormUpdated.vtex', function (evt, orderForm) {
      _this.orderForm = orderForm
      _this.checkFirstLogin(orderForm)
    })
  }

  init(orderForm) {
    const _this = this

    try {
      if (!window.google) _this.loadScript()
    } catch (e) {
      console.warn(
        `Error in customFormInit while loading "loadScript" function`
      )
    }

    if (
      orderForm &&
      window.google &&
      $('.vcustom--vtex-omnishipping-1-x-address').length < 1 &&
      orderForm.items.length
    ) {
      const lastCountry =
        (_this.orderForm.shippingData &&
          _this.orderForm.shippingData.address &&
          _this.orderForm.shippingData.address.country) ||
        _this.orderForm.storePreferencesData.countryCode

      $('body').addClass(`${this.classOn}`)
      _this.orderForm = orderForm
      _this.getCountryRule(lastCountry).then(rules => {
        _this.addressrules = rules
        _this.bind()
        _this.deliveryCountries = window.checkout.deliveryCountries()
        _this.mainCountry = window.checkout.countryCode()
        _this.lang = _this.orderForm.clientPreferencesData.locale

        _this.locale =
          _locale[_this.orderForm.storePreferencesData.countryCode] ||
          _locale.GBR

        if (_this.lang === 'es-AR') _this.lang = 'es'

        if (_this.orderForm && _this.orderForm.shippingData) {
          const shippingData = _this.orderForm.shippingData.address

          if (shippingData) {
            _this.updateAddress(
              shippingData.country,
              shippingData.postalCode,
              shippingData.city,
              shippingData.state,
              shippingData.street,
              shippingData.number,
              shippingData.complement,
              '',
              shippingData.addressId,
              shippingData.geoCoordinates
            )
          } else {
            _this.updateAddress('')
          }
        }

        _this.form(orderForm)
      })
    }
  }
}

module.exports = fnsCustomAddressForm

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of checkout-ui-custom/checkout-ui-custom/src/_js/_v.custom.checkout.ui.js from the checkout-ui-custom VTEX app.

[Assistant]
Here's the implementation:

```javascript
/* eslint-disable no-prototype-builtins */
/* eslint-disable vtex/prefer-early-return */
/* eslint-disable func-names */
const { _locale } = require('./_locale-infos.js')
const {
  debounce,
  formatCurrency,
  findClosestLang,
  parseDateBd,
} = require('./_utils.js')
const {
  _countriesrules,
  _countries,
  _cities,
  _addressPlaceholder,
} = require('./_countries.js')
const FnsCustomAddressForm = require('./_customAddressForm.js')

class checkoutCustom {
  constructor({
    type = 'vertical',
    accordionPayments = true,
    deliveryDateFormat = false,
    quantityPriceCart = false,
    showNoteField = false,
    customAddressForm = false,
    hideEmailStep = true,
  } = {}) {
    this.type = type // ["vertical"]
    this.orderForm = ''
    this.orderId = this.orderForm ? this.orderForm.orderFormId : ''
    this.lang = ''
    this.checkoutButton = null

    this.accordionPayments = accordionPayments
    this.deliveryDateFormat = deliveryDateFormat
    this.quantityPriceCart = quantityPriceCart
    this.showNoteField = showNoteField
    this.customAddressForm = customAddressForm
    this.hideEmailStep = hideEmailStep

    this._holidays = null
    this.countriesRules = _countriesrules
    this.countries = _countries
    this.cities = _cities
    this.addressPlaceholder = _addressPlaceholder
  }

  general() {
    if (!$('.custom-cart-template-wrap').length) {
      $('.cart-template.mini-cart .cart-fixed > *').wrapAll(
        '
'
      )
    }

    $('.table.cart-items tbody tr.product-item').each(function () {
      if (!$(this).find('.v-custom-product-item-wrap').length) {
        $(this).find('> *').wrapAll(`<div class="v-custom-product-item-wrap">`)
      }
    })

    $('body').addClass('v-custom-loaded')
  }

  onDomMutation({ targetNode, callback, disconnectCondition = true }) {
    const observeDOM = (function () {
      const MutationObserver =
        window.MutationObserver || window.WebKitMutationObserver

      return function (obj, callback1) {
        if (!obj || obj.nodeType !== 1) return

        if (MutationObserver) {
          // define a new observer
          const mutationObserver = new MutationObserver(callback1)

          // have the observer observe foo for changes in children
          mutationObserver.observe(obj, {
            childList: true,
            subtree: true,
          })

          return mutationObserver
        }

        // browser support fallback
        if (window.addEventListener) {
          obj.addEventListener('DOMNodeInserted', callback1, false)
          obj.addEventListener('DOMNodeRemoved', callback1, false)
        }
      }
    })()

    const observer = new MutationObserver(function () {
      if (targetNode && disconnectCondition) {
        observer.disconnect()

        observeDOM(targetNode, () => callback())
      }
    })

    observer.observe(document.body, {
      childList: true,
      subtree: true,
    })
  }

  buildVertical() {
    $('body').addClass('body-cart-vertical')
    if ($('.cart-template .cart-links-bottom:eq(0)').length) {
      this.checkoutButton = $('.cart-template .cart-links-bottom:eq(0)')
    }

    if (this.checkoutButton) {
      this.checkoutButton.appendTo('.cart-template > .summary-template-holder')
    }
  }

  buildHorizontal() {}

  showDeliveryOptions() {
    $(
      '.cart-template .cart-more-options:eq(0), .cart-template .extensions-checkout-buttons-container'
    ).appendTo('.cart-template-holder')
  }

  builder() {
    const _this = this

    if (_this.type === 'vertical') {
      _this.buildVertical()
    } else if (_this.type === 'horizontal') {
      _this.buildHorizontal()
    } else {
      console.error('No `type` identified, check your code')
    }

    if (_this.showNoteField) {
      $('body').addClass('js-vcustom-showNoteField')
    }

    if (_this.hideEmailStep) {
      $('body').addClass('js-vcustom-hideEmailStep')
    }

    _this.showDeliveryOptions()
  }

  checkEmpty(items) {
    if (items.length === 0) {
      $('body').addClass('v-custom-cart-empty')
    } else {
      $('body').removeClass('v-custom-cart-empty')
    }
  }

  addEditButtoninLogin() {
    $('#v-custom-edit-login-data').remove()
    $('.client-pre-email h3.client-pre-email-h span').append(`

    `)
  }

  addStepsHeader() {
    if ($('.checkout-steps').length > 0 || !this.lang) return false

    const addStepsHeaderHtml = `

              ${
                this.lang.checkoutStepsLabelCart || 'Cart'
              }

              ${
                this.lang.checkoutStepsLabelIdentification || 'Identification'
              }

              ${
                this.lang.checkoutStepsLabelShipping || 'Shipping'
              }

              ${
                this.lang.checkoutStepsLabelPayment || 'Payment'
              }

              ${
                this.lang.checkoutStepsLabelConfirmation || 'Confirmation'
              }

    `

    if ($('header.main-header').length) {
      $('header.main-header .container').append(addStepsHeaderHtml)
    }
  }

  addAssemblies(orderForm) {
    try {
      $.each(orderForm.items, function (i) {
        const _item = this

        if (_item.assemblies.length > 0) {
          let _assembliesHtml = `<div class="v-custom-assemblies">`

          $.each(_item.assemblies, function () {
            const _assemblies = this

            const inptValues = _assemblies.inputValues

            _assembliesHtml += `<p>${_assemblies.id}</p>`
            _assembliesHtml += `<ul class="v-custom-assemblies__values">`
            Object.entries(inptValues).forEach(([key, val]) => {
              _assembliesHtml += `

                                      ${key}
                                      ${val.trim()}

`
            })
            _assembliesHtml += `</ul>`
          })
          _assembliesHtml += `</div>`
          if (
            !$(`.table.cart-items tbody > tr.product-item:eq(${i})`).hasClass(
              'v-custom-assemblies-in'
            )
          ) {
            $(`.table.cart-items tbody > tr.product-item:eq(${i})`)
              .addClass('v-custom-assemblies-in')
              .find('td.product-name')
              .append(_assembliesHtml)
          }
        }
      })
    } catch (e) {
      console.error('addAssemblies error:', e)
    }
  }

  bundleItems(orderForm) {
    try {
      $.each(orderForm.items, function (i) {
        if (this.bundleItems.length > 0) {
          $(`.table.cart-items tbody > tr.product-item:eq(${i})`)
            .addClass('v-custom-bundles-in')
            .find('td.product-name')
        } else {
          $(`.table.cart-items tbody > tr.product-item:eq(${i})`).removeClass(
            'v-custom-bundles-in'
          )
        }
      })
      $('.table.cart-items tbody tr.item-service').each(function () {
        if ($(this).find('.v-custom-trservice-wrap').length > 0) return false
        $(this).find('> *').wrapAll(`<div class="v-custom-trservice-wrap">`)
      })
    } catch (e) {
      console.error('bundleItems error:', e)
    }
  }

  showCustomMsgCoupon(orderForm) {
    const _this = this
    const _coupon = orderForm.marketingData.coupon

    const couponItemsCount = orderForm.items.reduce(function (
      accumulator,
      item
    ) {
      return (
        accumulator +
        (item.priceTags.length
          ? item.priceTags.filter(_pricetag => {
              return _pricetag.ratesAndBenefitsIdentifier
                ? _pricetag.ratesAndBenefitsIdentifier.matchedParameters[
                    'couponCode@Marketing'
                  ] === _coupon
                : 0
            }).length
          : 0)
      )
    },
    0)

    // Match coupon with rateAndBenefitsIdentifiers
    let couponMatch = null

    if (
      orderForm.ratesAndBenefitsData &&
      orderForm.ratesAndBenefitsData.rateAndBenefitsIdentifiers.length
    ) {
      couponMatch = orderForm.ratesAndBenefitsData.rateAndBenefitsIdentifiers.find(
        item => item.name === _coupon
      )
    }

    if (!_coupon || couponItemsCount > 0 || couponMatch) {
      $('fieldset.coupon-fieldset').removeClass(
        'js-vcustom-showCustomMsgCoupon'
      )
      $('.vcustom-showCustomMsgCoupon').remove()

      return false
    }

    if ($('.vcustom-showCustomMsgCoupon').length === 0) {
      $('fieldset.coupon-fieldset')
        .addClass('js-vcustom-showCustomMsgCoupon')
        .append(
          `<p class="vcustom-showCustomMsgCoupon">${_this.lang.couponInactive}</div>`
        )
    }
  }

  addLabels(orderForm) {
    const _coupon = orderForm.marketingData.coupon
    const _couponItems = []

    if (!_coupon) return false

    try {
      $(
        `.table.cart-items tbody tr.product-item, .mini-cart .cart-items li`
      ).removeClass('v-custom-addLabels-active js-vcustom-addLabels')
      $(`.v-custom-addLabels-active-flag`).remove()
      $.each(orderForm.items, function (i) {
        if (this.priceTags.length > 0) {
          if (
            this.priceTags.filter(_pricetag => {
              return _pricetag.ratesAndBenefitsIdentifier
                ? _pricetag.ratesAndBenefitsIdentifier.matchedParameters[
                    'couponCode@Marketing'
                  ] === _coupon
                : false
            }).length > 0
          ) {
            _couponItems.push(this)
            $(`.table.cart-items tbody tr.product-item:eq(${i})`)
              .addClass('v-custom-addLabels-active js-vcustom-addLabels')
              .find('.product-name')
              .append(
                `<span class="v-custom-addLabels-active-flag">${_coupon}</span>`
              )
          }
        }
      })
    } catch (e) {
      console.error(e)
    }
  }

  buildMiniCart(orderForm) {
    /* overide refresh from vtex */
    if (
      orderForm.items.filter(item => {
        return item.parentItemIndex !== null
      }).length === 0
    ) {
      return false
    }

    const _items = orderForm.items

    if ($('.mini-cart .cart-items > li').length === _items.length) {
      $(`.mini-cart .cart-items`).html(`${$(`.mini-cart .cart-items`).html()}`)
      $.each(orderForm.items, function (i) {
        if (this.availability === 'available') {
          $(`.mini-cart .cart-items > li:eq(${i})`)
            .find('.item-unavailable')
            .remove()
        }
      })
    }
  }

  setParentIndex(orderForm) {
    const _orderForm = orderForm.items.filter(item => !item.isGift) // remove gift

    $.each(_orderForm, function (i) {
      if (this.parentItemIndex !== null) {
        $(`.table.cart-items tbody > tr.product-item:eq(${i})`).attr(
          'data-parentItemIndex',
          this.parentItemIndex
        )
      }
    })
  }

  handleBreakpointChange() {
    if (window.innerWidth <= 767) {
      $('body').on('click', '#edit-address-button', () => {
        setTimeout(() => {
          const shippingDataElement = document.getElementById('shipping-data')
          const offset = shippingDataElement.offsetTop - 200

          window.scrollTo({
            top: offset,
            behavior: 'smooth',
          })
        }, 500)
      })
    }
  }

  removeMCLoader() {
    $(`.mini-cart .cart-items`).addClass('v-loaded')
  }

  removeCILoader() {
    $(`.cart-items`).addClass('v-loaded')
  }

  enchanceSummary(key, obj) {
    const _this = this

    if (
      _this.orderForm &&
      $('.mini-cart .cart-items > li').length === _this.orderForm.items.length
    ) {
      $(`.mini-cart .cart-items > li:eq(${key})`)
        .find(`.v-custom-bundles`)
        .remove()
      $(`.mini-cart .cart-items > li:eq(${key})`)
        .append(`<div class="v-custom-bundles"></div>`)
        .addClass('v-custom-indexedItems-in')
      if (
        $(`.mini-cart .cart-items > li:eq(${key})`)
          .find(' > .v-custom-bundles')
          .html() === ''
      ) {
        for (const prop in obj) {
          if (!obj.hasOwnProperty(prop)) continue
          const iiItem = obj[prop]

          $(`.mini-cart .cart-items > li:eq(${key}) > .v-custom-bundles`)
            .append(`

              ${iiItem.name}
              ${iiItem.quantity}

                ${
                  iiItem.sellingPrice
                    ? `${
                        _this.orderForm.storePreferencesData.currencySymbol
                      } ${formatCurrency(
                        _this.orderForm.clientPreferencesData.locale,
                        _this.orderForm.storePreferencesData.currencyCode,
                        iiItem.sellingPrice
                      ).toFixed(2)}`
                    : `Free`
                }

          `)
          $(`.mini-cart .cart-items > li[data-sku='${iiItem.id}']`).addClass(
            'v-custom-indexed-item'
          )
        }
      }
    }
  }

  indexedInItems(orderForm) {
    const _this = this

    try {
      if (
        orderForm.items.filter(item => {
          return item.parentItemIndex !== null
        }).length === 0
      ) {
        _this.removeMCLoader()

        return false
      }

      const _orderForm = orderForm.items.filter(item => !item.isGift) // remove gift

      if (_orderForm.length) {
        const indexedInItems = _orderForm.reduce((c, v) => {
          if (v.parentItemIndex !== null) {
            const index = v.parentItemIndex

            c[index] = c[index] || []
            c[index].push(v)
          }

          return c
        }, {})

        for (const key in indexedInItems) {
          const obj = indexedInItems[key]

          if (
            !$(`.table.cart-items tbody > tr.product-item:eq(${key})`).find(
              '.v-custom-bundles'
            ).length
          ) {
            $(`.table.cart-items tbody > tr.product-item:eq(${key})`)
              .append(`<div class="v-custom-bundles"></div>`)
              .addClass('v-custom-indexedItems-in')
            if (
              $(`.table.cart-items tbody > tr.product-item:eq(${key})`)
                .find('.v-custom-bundles')
                .html() === ''
            ) {
              for (const prop in obj) {
                if (!obj.hasOwnProperty(prop)) continue
                const iiItem = obj[prop]

                $(
                  `.table.cart-items tbody > tr.product-item[data-sku='${iiItem.id}'][data-parentitemindex='${iiItem.parentItemIndex}'], .table.cart-items tbody > tr.product-item[data-sku='${iiItem.id}'][data-parentitemindex='${iiItem.parentItemIndex}'] + .item-unavailable`
                )
                  .addClass('v-custom-indexed-item')
                  .clone()
                  .appendTo(
                    `.table.cart-items tbody > tr.product-item:eq(${key}) > .v-custom-bundles`
                  )
              }
            }
          }

          _this.enchanceSummary(key, obj)
          setTimeout(function () {
            _this.enchanceSummary(key, obj)
          }, 150)
        }

        _this.removeMCLoader()
      }
    } catch (e) {
      _this.removeMCLoader()
    }
  }

  holidaysBetweenDates(d0, d1, _holidays) {
    /* Two working days and an sunday (not working day) */
    const holidays = _holidays

    let holidaysCount = 0

    holidays.forEach(day => {
      if (new Date(day) >= d0 && new Date(day) <= d1) {
        /* If it is not saturday (6) or sunday (0), substract it */
        if (parseDateBd(day).getDay() % 6 !== 0) {
          holidaysCount++
        }
      }
    })

    return holidaysCount
  }

  addBusinessDays(n, days, lang = window.i18n.options.lng) {
    const _this = this

    const typeDays = days.replace(/[0-9]/g, '')

    try {
      let d = new Date()

      d = new Date(d.getTime())
      const day = d.getDay()

      if (typeDays === 'd') {
        d.setDate(d.getDate() + n)
      } else {
        d.setDate(
          d.getDate() +
            n +
            (day === 6 ? 2 : +!day) +
            Math.floor((n - 1 + (day % 6 || 1)) / 5) * 2
        )
      }

      let bdHolidays = 0

      if (
        !(
          _this._holidays &&
          _this._holidays.name &&
          _this._holidays.name === 'Error'
        ) &&
        _this._holidays
      ) {
        bdHolidays = _this.holidaysBetweenDates(
          new Date(),
          d,
          _this._holidays.map(hd => hd.startDate.split('T')[0])
        )
      }

      if (
        _this._holidays &&
        _this._holidays.name &&
        _this._holidays.name === 'Error'
      )
        bdHolidays = 0

      let dhd = new Date()

      if (bdHolidays) {
        dhd = new Date(dhd.getTime())
        const dhdDay = dhd.getDay()

        dhd.setDate(
          dhd.getDate() +
            (n + bdHolidays) +
            (dhdDay === 6 ? 2 : +!dhdDay) +
            Math.floor((n + bdHolidays - 1 + (dhdDay % 6 || 1)) / 5) * 2
        )
      }

      let newDate = bdHolidays ? dhd : d

      let doptions = { weekday: 'long', month: 'short', day: 'numeric' }

      if (lang === 'pt') {
        doptions = { weekday: 'short', month: 'short', day: 'numeric' }
      }

      if (d.getDate() - new Date().getDate() === 1) {
        return _this.lang.tomorrowLabel || 'Tomorrow'
      }

      newDate = newDate.toLocaleDateString(lang, doptions)

      return newDate
    } catch (e) {
      console.error(`Error at "addBusinessDays":`, e)
    }
  }

  changeShippingTimeInfo() {
    const _this = this

    $('body').addClass('v-custom-changeShippingTimeInfo')
    const mainSTIelems = [
      '.shp-summary-package-time > span',
      'p.vtex-omnishipping-1-x-sla.sla',
      '.vtex-omnishipping-1-x-leanShippingTextLabelSingle > span',
      'span.shipping-date',
      '.shp-option-text-time',
      '.pkpmodal-pickup-point-sla',
      '.shp-option-text-package',
      '.srp-delivery-current-many__sla',
      '.shipping-estimate-date:eq(0)',
      '.srp-shipping-current-single__sla',
    ]

    const [
      logisticsInfo,
    ] = window.vtexjs.checkout.orderForm.shippingData.logisticsInfo

    const availableSlas = logisticsInfo.slas

    const { selectedSla } = logisticsInfo

    const selectedSlaDays = availableSlas.find(e => e.name === selectedSla)
      ? availableSlas.find(e => e.name === selectedSla).shippingEstimate
      : false

    try {
      $(`
        .vtex-omnishipping-1-x-summaryPackage.shp-summary-package:not(.v-changeShippingTimeInfo-active),
        .vtex-omnishipping-1-x-leanShippingOption,
        .vtex-omnishipping-1-x-packageItem:not(.v-changeShippingTimeInfo-active),
        .orderform-template .cart-template.mini-cart .item,
        .vtex-pickup-points-modal-3-x-pickupPointSlaAvailability,
        .srp-delivery-current-many,
        td.shipping-date,
        .srp-shipping-current-single
      `).each(function () {
        const txtselectin = $(this)
          .find(
            mainSTIelems
              .map(elem => `${elem}:not(.v-changeShippingTimeInfo-elem-active)`)
              .join(', ')
          )
          .text()

        let days

        if (!$(this).hasClass('srp-delivery-current-many')) {
          if (
            txtselectin !== '' &&
            txtselectin.match(/(day)|(dia)|(día)|(tag)/gm)
          ) {
            days = parseInt(txtselectin.match(/\d+/), 10)
          }
        } else if (selectedSlaDays) {
          days = parseInt(selectedSlaDays.match(/\d+/), 10)
        }

        if (days) {
          let _delivtext = _this.lang.deliveryDateText

          if (
            $(this)
              .find(mainSTIelems.join(', '))
              .text()
              .toLowerCase()
              .match(
                /(ready in up)|(pronto)|(a partir de)|(hasta)|(fertig in)/gm
              )
          ) {
            _delivtext = _this.lang.PickupDateText
          } // check if is pickup. OBS: none of others solutions worked, needs constantly update

          $(this)
            .find(mainSTIelems.join(', '))
            .html(
              `${_delivtext} ${_this.addBusinessDays(
                days,
                selectedSlaDays
              )}`
            )
            .addClass('v-changeShippingTimeInfo-elem-active')
        }

        $(this).addClass('v-changeShippingTimeInfo-active')
      })

      // temporaly
      const shippingPreviewPackges = $(
        '.srp-delivery-info .srp-packages:not(.v-changeShippingTimeInfo-elem-active)'
      )

      $('.js-shippingPreviewPackges').remove()
      if (shippingPreviewPackges.length) {
        const a = shippingPreviewPackges
          .text()
          .split(':')[1]
          .split(/,| and | e | y /)

        const deliveryDates = []

        $.each(a, function (i) {
          const txtselectin = a[i]

          if (
            txtselectin !== '' &&
            txtselectin.match(/(day)|(dia)|(día)|(tag)/gm)
          ) {
            const days = parseInt(txtselectin.match(/\d+/), 10)

            if (days) {
              let _delivtext = _this.lang.deliveryDateText

              if (
                txtselectin
                  .toLowerCase()
                  .match(
                    /(ready in up)|(pronto)|(a partir de)|(hasta)|(fertig in)/gm
                  )
              ) {
                _delivtext = _this.lang.PickupDateText
              } // check if is pickup. OBS: none of others solutions worked, needs constantly update

              deliveryDates.push(
                `${_delivtext} ${_this.addBusinessDays(
                  days,
                  selectedSlaDays
                )}`
              )
            }
          }
        })
        shippingPreviewPackges
          .hide()
          .after(
            `
${
              shippingPreviewPackges.text().split(':')[0]
            }: ${deliveryDates.join('; ')}
`
          )
          .addClass('v-changeShippingTimeInfo-active')
      }
    } catch (e) {
      console.error('changeShippingTimeInfo Error:', e)
    }
  }

  fetchHolidays() {
    const _this = this
    const roothPath =
      window.__RUNTIME__.rootPath ||
      window.location.pathname.split(`/checkout`)[0]

    if (_this._holidays) return

    fetch(`${roothPath}/_v/holidays`, {
      method: 'GET',
    })
      .then(response => response.json())
      .then(function (data) {
        _this._holidays = data
      })
      .catch(function (err) {
        // eslint-disable-next-line no-console
        console.log(`holidays error`, err)
      })
  }

  changeShippingTimeInfoInit() {
    const _this = this

    if (_this.lang && _this.deliveryDateFormat) {
      _this.fetchHolidays()
      _this.changeShippingTimeInfo()
    }
  }

  enchancementTotalPrice(orderForm) {
    const _this = this

    if (!_this.quantityPriceCart) return
    try {
      $.each(orderForm.items, function (i) {
        const _item = this
        const _trElem = $(`.table.cart-items tbody tr.product-item:eq(${i})`)

        if (
          _item.quantity === 1 ||
          _trElem.find('td.product-price').find('.best-price').length === 0
        ) {
          return
        }

        const totalValue = _trElem.find('.total-selling-price:eq(0)').text()
        const _eachprice = `

              ${
                _item.listPrice > _item.sellingPrice
                  ? `${
                      orderForm.storePreferencesData.currencySymbol
                    } ${(_item.listPrice / 100).toFixed(2)}`
                  : ''
              }

        `

        _trElem.find('td.product-price').find('.vqc-ldelem').remove()
        // _trElem.find("td.quantity-price").prepend(_eachprice);
        _trElem
          .find('td.product-price')
          .addClass('v-custom-quantity-price-active')
          .prepend(_eachprice)
          .append(
            `<div class="v-custom-quantity-price vqc-ldelem"><span class="v-custom-quantity-price__best">${totalValue}</span></div>`
          )
        _trElem
          .find('td.product-price')
          .find('> .best-price')
          .wrap(`<div class="v-custom-quantity-price__list--selling"></div>`)
        _trElem
          .find('td.product-price')
          .find('.v-custom-quantity-price__list--selling')
          .append(
            ` ${
              _this.lang ? _this.lang.eachLabel : 'each'
            }`
          )
      })
    } catch (e) {
      console.error('enchancementTotalPrice error:', e)
    }
  }

  condensedTaxes(orderForm) {
    const customtax = orderForm.totalizers.filter(val => val.id === 'CustomTax')

    if (customtax && customtax.length < 2) return false

    const tooltip = `

       ${customtax
         .map(
           i =>
             `
${
               i.name
             }${
               orderForm.storePreferencesData.currencySymbol
             } ${(i.value / 100).toFixed(2)}
`
         )
         .join('')}

    `

    const customTaxElem = $('tr.CustomTax.CustomTax--total')

    if (customTaxElem.length) {
      customTaxElem.find('.vcustom-customTax-tot').remove()
      customTaxElem
        .find('.info')
        .append(
          `<div class="vcustom-customTax-tot"><span>?</span> ${tooltip}</div>`
        )
    }
  }

  update(orderForm) {
    const _this = this

    this.checkEmpty(orderForm.items)
    this.addAssemblies(orderForm)
    this.enchancementTotalPrice(orderForm)
    this.bundleItems(orderForm)
    this.buildMiniCart(orderForm)
    this.condensedTaxes(orderForm)
    this.setParentIndex(orderForm)
    this.indexedInItems(orderForm)

    // debounce to prevent append from default script
    const updateDebounce = debounce(function () {
      if (orderForm.marketingData) {
        _this.addLabels(orderForm)
        _this.showCustomMsgCoupon(orderForm)
      }
    }, 250)

    updateDebounce()
  }

  updateStep() {
    const prefixClass = 'v-custom-step-'
    const bClassStep = ['cart', 'email', 'profile', 'shipping', 'payment']

    $('body').removeClass(
      bClassStep
        .map(step => {
          return prefixClass + step
        })
        .join(' ')
    )
    if (window.location.hash) {
      const [, hashstep] = window.location.hash.split('/')

      const classStep = bClassStep.filter(st => {
        return ~hashstep.indexOf(st)
      })

      if (classStep.length) {
        $('body').addClass(prefixClass + classStep[0])
      }
    }
  }

  updateLang(orderForm) {
    const clientLocale = orderForm.clientPreferencesData.locale

    this.lang =
      Object.values(_locale).find(country => country.locale === clientLocale) ||
      _locale[orderForm.storePreferencesData.countryCode] ||
      findClosestLang(clientLocale, _locale) ||
      _locale.USA

    if (!this.lang) return false
    const _lang = this.lang

    if (_lang.editLabel) $('.link-box-edit').attr('title', _lang.editLabel)
    if (_lang.cartSubmitButton) {
      $('#cart-to-orderform').text(_lang.cartSubmitButton)
    }

    if (_lang.cartNoteLabel) $('p.note-label label').text(_lang.cartNoteLabel)

    if (_lang.identifiedUserMessage) {
      $('.identified-user-modal-body p.identified-user-message').html(
        _lang.identifiedUserMessage
      )
    }

    // paypal
    if (_lang.paypalPhone) {
      $('.payment-paypal-help-number').text(_lang.paypalPhone)
    }

    if (_lang.paypalImg) {
      $('.payment-paypal-title-short-logo').css(
        'background-image',
        `url(${_lang.paypalImg})`
      )
    } else if (_lang.paypalImg === '') {
      $('.payment-paypal-title-short-logo').hide()
    }

    // shipping

    if (_lang.googleAddressLabel) {
      const geoElem = $('.vtex-omnishipping-1-x-geolocation')

      if (geoElem.length) {
        geoElem
          .find('.ship-addressQuery > label')
          .text(_lang.googleAddressLabel)
      }
    }

    // placeholders

    if (_lang.address1Placeholder) {
      $('.vtex-omnishipping-1-x-address input#ship-street').attr(
        'placeholder',
        _lang.address1Placeholder
      )
    }

    if (_lang.address2Placeholder) {
      $('.vtex-omnishipping-1-x-address input#ship-complement').attr(
        'placeholder',
        _lang.address2Placeholder
      )
    }

    if (_lang.numberPlaceholder) {
      $('.vtex-omnishipping-1-x-address input#ship-number').attr(
        'placeholder',
        _lang.numberPlaceholder
      )
    }
  }

  paymentBuilder(orderForm) {
    const _this = this

    if (orderForm && $('.payment-group-item-cards').length === 0) {
      if (orderForm.paymentData) {
        const paymentGroups = [
          'debitCardPaymentGroup',
          'creditCardPaymentGroup',
        ]

        let paymentGroupCardsHtml = ``

        $.each(paymentGroups, function (p) {
          paymentGroupCardsHtml = `<span class="payment-group-item-cards">`
          $.each(
            orderForm.paymentData.paymentSystems.filter(
              item => item.groupName === paymentGroups[p]
            ),
            function () {
              paymentGroupCardsHtml += `<span class="card-flag ${this.name}">${this.name}</span>`
            }
          )
          paymentGroupCardsHtml += `</span>`
          if (_this.accordionPayments) {
            $(`#payment-group-${paymentGroups[p]}`).append(
              paymentGroupCardsHtml
            )
          }
        })

        if (!_this.accordionPayments) {
          $('#iframe-placeholder-creditCardPaymentGroup').prepend(
            paymentGroupCardsHtml
          )
        }
      }
    }

    if (
      !this.accordionPayments ||
      $('.payment-group-list-btn').find('.v-custom-payment-item-wrap').length >
        0
    ) {
      return false
    }

    $('body').addClass('v-custom-paymentBuilder-accordion')

    $('.payment-group-item').each(function () {
      $(this).wrap(
        `

`
      )
    })

    $('.payment-group-item').each(function () {
      $(`#payment-data .steps-view > div:eq(${0})`).appendTo(
        $(this).closest('.v-custom-payment-item-wrap')
      )
    })
  }

  customAddressFormLoader() {
    const _this = this

    if (!window.vtex.googleMapsApiKey) {
      console.warn(
        'You might need to add your Google Maps API Key in your admin'
      )
      _this.customAddressForm = false

      return false
    }

    if (_this.customAddressForm) {
      _this.customAddressForm = new FnsCustomAddressForm({})
      _this.customAddressForm.events()
    }
  }

  goToShippingStep() {
    window.location.hash = '#/shipping'
  }

  appendMessageEmptyStreet(orderForm) {
    const _this = this

    if (
      !(
        (orderForm &&
          orderForm.shippingData &&
          orderForm.shippingData.address &&
          orderForm.shippingData.address.street != null) ||
        (undefined && orderForm.shippingData.address.street.trim())
      )
    ) {
      if (
        !$('.alert-noStreet').length &&
        $('.accordion-inner.shipping-container').length
      )
        $('.orderform-template-holder #shipping-data .accordion-inner').append(
          `
${
            _this.locale
              ? _this.locale.noStreetAddress ||
                'Your shipping information is missing a required field, please include a street'
              : 'Your shipping information is missing a required field, please include a street'
          }
`
        )
    } else {
      $('.alert-noStreet').remove()
    }
  }

  URLHasIncludePayment(orderForm) {
    const _this = this

    let street = ''

    try {
      if (
        orderForm &&
        orderForm.shippingData &&
        orderForm.shippingData.address &&
        orderForm.shippingData.address.street
      ) {
        street = orderForm.shippingData.address.street
      }

      if (
        window.location.hash === '#/payment' &&
        orderForm &&
        orderForm.shippingData &&
        orderForm.shippingData.address &&
        orderForm.shippingData.address.addressType !== 'search' &&
        !street.trim() &&
        _this.customAddressForm
      ) {
        _this.goToShippingStep()
        _this.appendMessageEmptyStreet(orderForm)
      }
    } catch (error) {
      console.error('URLHasIncludePayment error:', error)
    }
  }

  customAddressFormInit(orderForm) {
    const _this = this
    const _orderForm = orderForm || window.vtexjs.checkout.orderForm

    if (_this.customAddressForm) {
      if (_orderForm.canEditData) {
        $('body').removeClass('returningUser')
      } else {
        $('body').addClass('returningUser')
      }

      try {
        _this.customAddressForm.init(_orderForm)
      } catch (e) {
        console.warn(`Error in "customAddressFormInit"`)
      }
    }
  }

  checkProfileFocus() {
    const _this = this

    if (_this.hideEmailStep) {
      if (
        ~window.location.hash.indexOf('#/email') &&
        $('#client-email').val() === ''
      ) {
        $('#client-email').focus()
      }
    }
  }

  rtlUI() {
    if (
      window.vtex.i18n.getLocale() === 'ar' ||
      window.vtex.i18n.getLocale() === 'ar-SA' ||
      window.vtex.i18n.getLocale() === 'ar-IQ'
    ) {
      $('body').addClass('RTL-checkout')
    }
  }

  bind() {
    const _this = this

    $('body').on('click', '#v-custom-edit-login-data', function (e) {
      e.preventDefault()

      $(this).addClass('active')

      const data = null
      const xhr = new XMLHttpRequest()

      xhr.addEventListener('readystatechange', function () {
        if (this.readyState === this.DONE) {
          window.location.reload()
          setTimeout(function () {
            $('#v-custom-edit-login-data').removeClass('active')
          }, 1000)
        }
      })

      xhr.open(
        'GET',
        `/checkout/changeToAnonymousUser/${_this.orderForm.orderFormId}`
      )
      xhr.setRequestHeader('content-type', 'application/json')
      xhr.setRequestHeader('accept', 'application/json')

      xhr.send(data)
    })

    $('body').on('click', '.v-custom-payment-item-wrap', function () {
      $('.v-custom-payment-item-wrap').removeClass('active')
      $(this).addClass('active')
    })

    $('body').on(
      'click',
      '.vtex-pickup-points-modal-3-x-pickupDetailsHeaderButton, #map-canvas img, .vtex-omnishipping-1-x-pickupPointChange, .pkpmodal-pickup-point, .vtex-pickup-points-modal-3-x-modalDetailsBackLnk',
      function () {
        setTimeout(() => {
          _this.changeShippingTimeInfoInit()
        }, 100)
      }
    )

    $('body').on('click', '.js-checkout-steps-item .text', function () {
      window.location = $(this).closest('.checkout-steps_item').attr('data-url')
    })

    window.addEventListener('resize', _this.handleBreakpointChange)

    _this.handleBreakpointChange()

    $('body').on(
      'click',
      '.vtex-omnishipping-1-x-linkEdit.link-edit',
      function () {
        setTimeout(() => {
          _this.updateLang(_this.orderForm)
        }, 50)
      }
    )

    $('body').on('click', '#btn-client-pre-email', function () {
      setTimeout(function () {
        if (!$('input#client-pre-email').hasClass('error')) {
          $('input#client-email').focus()
        }
      }, 1000)
    })

    $('body').on('click', '#shipping-option-delivery', function () {
      _this.customAddressFormInit(_this.orderForm)
    })

    $('body').on('click', '.show-more-items-button', function () {
      _this.general()
      _this.setParentIndex(window.vtexjs.checkout.orderForm)
      window.vtexjs.checkout.getOrderForm()
    })
  }

  init() {
    const _this = this

    _this.orderForm =
      window?.vtexjs?.checkout?.orderForm
        ? window.vtexjs.checkout.orderForm
        : false
    _this.general()
    _this.updateStep()
    _this.builder()

    _this.changeShippingTimeInfoInit()
    if (_this.orderForm) {
      _this.updateLang(_this.orderForm)
      _this.update(_this.orderForm)
      _this.addStepsHeader()
      _this.paymentBuilder(_this.orderForm)
    }

    _this.addEditButtoninLogin()
  }

  start() {
    const _this = this

    try {
      $(function () {
        _this.bind()
        _this.customAddressFormLoader()
        _this.rtlUI()
      })

      $(document).ajaxComplete(function () {
        _this.init()
      })

      $(window).on('hashchange', function () {
        const cartItems = document.querySelector('.cart-items')

        _this.updateStep()
        _this.changeShippingTimeInfoInit()
        _this.checkProfileFocus()

        if (_this.orderForm) {
          _this.buildMiniCart(_this.orderForm)
          _this.indexedInItems(_this.orderForm)
          _this.updateLang(_this.orderForm)
          _this.paymentBuilder(_this.orderForm)
          _this.customAddressFormInit(_this.orderForm)
          _this.removeCILoader()
          _this.URLHasIncludePayment(_this.orderForm)

          _this.onDomMutation({
            targetNode: cartItems,
            callback: () => _this.removeCILoader(),
          })
        }
      })

      $(window).on('orderFormUpdated.vtex', function (evt, orderForm) {
        _this.update(orderForm)
        _this.customAddressFormInit(orderForm)
      })

      $(window).load(function () {
        $(window).one('componentValidated.vtex', () => _this.builder())
        _this.checkProfileFocus()
        _this.changeShippingTimeInfoInit()
        _this.indexedInItems(window.vtexjs.checkout.orderForm)
        _this.showDeliveryOptions()

        if (_this.customAddressForm && typeof store !== 'undefined') {
          window.store.dispatch({
            type: 'DISABLE_CALCULATE_BUTTON',
            isCalculateBttnEnabled: false,
          })
        }
      })

      // eslint-disable-next-line no-console
      console.log(`🎉 Yay! You are using the vtex.checkout.ui customization !!`)
    } catch (e) {
      _this.general()
    }
  }
}

module.exports = checkoutCustom

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of checkout-ui-custom/checkout-ui-custom/src/_js/_locale-infos.js from the checkout-ui-custom VTEX app.

[Assistant]
Here's the implementation:

```javascript
module.exports._locale = {
  BRA: {
    couponInactive: 'Nenhum desconto aplicado. Confira as regras.',
    editLabel: 'Editar',
    deliveryDateText: 'Entrega até',
    PickupDateText: 'Pronto até',
    eachLabel: 'cada',
    tomorrowLabel: 'Amanhã',
    cartSubmitButton: 'Continuar pagamento',
    checkoutStepsLabelCart: 'Carrinho',
    checkoutStepsLabelIdentification: 'Identificação',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pagamento',
    checkoutStepsLabelConfirmation: 'Confirmação',
    city: 'Cidade',
    state: 'Estado',
    number: 'Número',
    postalCode: 'Código postal',
    address1Placeholder: 'Endereço',
    address2Placeholder: 'Complemento',
    requiredField: 'Este campo é obrigatório.',
    locale: 'pt-BR',
  },
  CAN: {
    couponInactive: 'No discounts available. Check the conditions.',
    editLabel: 'Edit',
    paypalImg: '',
    paypalPhone: '1 (888) 221-1161',
    cartSubmitButton: 'Proceed to Payment',
    deliveryDateText: 'Arrives by',
    PickupDateText: 'Ready by',
    eachLabel: 'each',
    tomorrowLabel: 'Tomorrow',
    cartNoteLabel: 'Gift Message or Comments',
    identifiedUserMessage: `Thanks for coming back!\nTo expedite your transaction, we have securely populated your information for you.`,
    address1Placeholder: 'Street address',
    address2Placeholder: 'Apartment, suite, building, floor, etc (optional)',
    checkoutStepsLabelCart: 'Cart',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Shipping',
    checkoutStepsLabelPayment: 'Payment',
    checkoutStepsLabelConfirmation: 'Confirmation',
    googleAddressLabel: 'Street Address',
    requiredField: 'This field is required.',
    city: 'City',
    state: 'State',
    locale: 'en-CA',
  },
  USA: {
    country: 'Country',
    postalCode: 'Postal Code',
    couponInactive: 'No discounts available. Check the conditions.',
    editLabel: 'Edit',
    paypalImg: '',
    paypalPhone: '1 (888) 221-1161',
    cartSubmitButton: 'Proceed to Payment',
    deliveryDateText: 'Arrives by',
    PickupDateText: 'Ready by',
    eachLabel: 'each',
    tomorrowLabel: 'Tomorrow',
    cartNoteLabel: 'Gift Message or Comments',
    identifiedUserMessage: `Thanks for coming back!\nTo expedite your transaction, we have securely populated your information for you.`,
    address1Placeholder: 'Street address or P.O. Box',
    address2Placeholder: 'Apartment, suite, building, floor, etc (optional)',
    checkoutStepsLabelCart: 'Cart',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Shipping',
    checkoutStepsLabelPayment: 'Payment',
    checkoutStepsLabelConfirmation: 'Confirmation',
    googleAddressLabel: 'Street Address',
    requiredField: 'This field is required.',
    city: 'City',
    state: 'State',
    locale: 'en-US',
    noStreetAddress:
      'Your shipping information is missing a required field, please include a street or P.O. Box',
  },
  GBR: {
    couponInactive: 'No discounts available. Check the conditions.',
    editLabel: 'Edit',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceed to Payment',
    deliveryDateText: 'Arrives by',
    PickupDateText: 'Ready by',
    eachLabel: 'each',
    tomorrowLabel: 'Tomorrow',
    cartNoteLabel: 'Gift Message or Comments',
    identifiedUserMessage: `Thanks for coming back!\nTo expedite your transaction, we have securely populated your information for you.`,
    address1Placeholder: 'Street address',
    address2Placeholder: 'Apartment, suite, building, floor, etc (optional)',
    checkoutStepsLabelCart: 'Cart',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Shipping',
    checkoutStepsLabelPayment: 'Payment',
    checkoutStepsLabelConfirmation: 'Confirmation',
    requiredField: 'This field is required.',
    city: 'Town',
    state: 'County',
    number: 'Number',
    postalCode: 'Postal Code',
    locale: 'en-GB',
  },
  IRL: {
    couponInactive: 'No discounts available. Check the conditions.',
    editLabel: 'Edit',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceed to Payment',
    deliveryDateText: 'Arrives by',
    PickupDateText: 'Ready by',
    eachLabel: 'each',
    tomorrowLabel: 'Tomorrow',
    cartNoteLabel: 'Gift Message or Comments',
    identifiedUserMessage: `Thanks for coming back!\nTo expedite your transaction, we have securely populated your information for you.`,
    address1Placeholder: 'Street address',
    address2Placeholder: 'Apartment, suite, building, floor, etc (optional)',
    checkoutStepsLabelCart: 'Cart',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Shipping',
    checkoutStepsLabelPayment: 'Payment',
    checkoutStepsLabelConfirmation: 'Confirmation',
    requiredField: 'This field is required.',
    city: 'Town',
    state: 'County',
    number: 'Number',
    postalCode: 'Postal Code',
    locale: 'en-IE',
  },
  POR: {
    couponInactive: 'Nenhum desconto aplicado. Confira as regras.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    deliveryDateText: 'Entrega até',
    PickupDateText: 'Pronto até',
    eachLabel: 'cada',
    tomorrowLabel: 'Amanhã',
    checkoutStepsLabelCart: 'Carrinho',
    checkoutStepsLabelIdentification: 'Identificação',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pagamento',
    checkoutStepsLabelConfirmation: 'Confirmação',
    requiredField: 'Este campo é obrigatório',
    locale: 'pt-BR',
  },
  ESP: {
    couponInactive: 'No hay descuentos disponibles. Consulta las condiciones.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceder al pago',
    deliveryDateText: 'Llega por',
    PickupDateText: 'Disponible',
    eachLabel: 'cada',
    tomorrowLabel: 'Mañana',
    cartNoteLabel: 'Mensaje de regalo o comentarios',
    address1Placeholder: 'Dirección',
    address2Placeholder: 'Dirección Complementaria',
    checkoutStepsLabelCart: 'Carrito',
    checkoutStepsLabelIdentification: 'Identificación',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pago',
    checkoutStepsLabelConfirmation: 'Confirmación',
    city: 'Ciudad',
    postalCode: 'Código Postal',
    goToShipping: 'Ir para la Entrega',
    state: 'Provincia',
    requiredField: 'Este campo es obligatorio.',
    number: 'Número',
    locale: 'es',
  },
  ARG: {
    couponInactive: 'No hay descuentos disponibles. Consulta las condiciones.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceder al pago',
    deliveryDateText: 'Llega por',
    PickupDateText: 'Disponible',
    eachLabel: 'cada',
    tomorrowLabel: 'Mañana',
    cartNoteLabel: 'Mensaje de regalo o comentarios',
    address1Placeholder: 'Dirección',
    address2Placeholder: 'Dirección Complementaria',
    checkoutStepsLabelCart: 'Carrito',
    checkoutStepsLabelIdentification: 'Identificación',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pago',
    checkoutStepsLabelConfirmation: 'Confirmación',
    requiredField: 'Este campo es obligatorio.',
    city: 'Ciudad',
    state: 'Província',
    locale: 'ar',
  },
  COL: {
    couponInactive: 'No hay descuentos disponibles. Consulta las condiciones.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceder al pago',
    deliveryDateText: 'Llega por',
    PickupDateText: 'Disponible',
    eachLabel: 'cada',
    tomorrowLabel: 'Mañana',
    cartNoteLabel: 'Mensaje de regalo o comentarios',
    address1Placeholder: 'Dirección',
    address2Placeholder: 'Dirección Complementaria',
    checkoutStepsLabelCart: 'Carrito',
    checkoutStepsLabelIdentification: 'Identificación',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pago',
    checkoutStepsLabelConfirmation: 'Confirmación',
    requiredField: 'Este campo es obligatorio.',
    locale: 'es-CO',
  },
  PAN: {
    couponInactive: 'No hay descuentos disponibles. Consulta las condiciones.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceder al pago',
    deliveryDateText: 'Llega por',
    PickupDateText: 'Disponible',
    eachLabel: 'cada',
    tomorrowLabel: 'Mañana',
    cartNoteLabel: 'Mensaje de regalo o comentarios',
    address1Placeholder: 'Dirección',
    address2Placeholder: 'Dirección Complementaria',
    checkoutStepsLabelCart: 'Carrito',
    checkoutStepsLabelIdentification: 'Identificación',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pago',
    checkoutStepsLabelConfirmation: 'Confirmación',
    requiredField: 'Este campo es obligatorio.',
    city: 'Ciudad',
    state: 'Estado',
    locale: 'es-PA',
  },
  MEX: {
    couponInactive: 'No hay descuentos disponibles. Consulta las condiciones.',
    editLabel: 'Editar',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceder al pago',
    deliveryDateText: 'Llega por',
    PickupDateText: 'Disponible',
    eachLabel: 'cada',
    tomorrowLabel: 'Mañana',
    cartNoteLabel: 'Mensaje de regalo o comentarios',
    address1Placeholder: 'Dirección',
    address2Placeholder: 'Dirección Complementaria',
    checkoutStepsLabelCart: 'Carrito',
    checkoutStepsLabelIdentification: 'Identificación',
    checkoutStepsLabelShipping: 'Entrega',
    checkoutStepsLabelPayment: 'Pago',
    checkoutStepsLabelConfirmation: 'Confirmación',
    requiredField: 'Este campo es obligatorio.',
    locale: 'es-MX',
  },
  ITA: {
    couponInactive: 'Nessuno sconto disponibile. Controlla le condizioni.',
    editLabel: 'Modifica',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Procedi al pagamento',
    deliveryDateText: 'In consegna entro',
    PickupDateText: 'Pronto entro',
    eachLabel: 'ciascuno',
    tomorrowLabel: 'Domani',
    country: 'Paese',
    cartNoteLabel: "Messaggio d'auguri o note",
    address1Placeholder: 'Indirizzo',
    address2Placeholder: 'Complementi',
    checkoutStepsLabelCart: 'Carrello',
    checkoutStepsLabelIdentification: 'Identificazione',
    checkoutStepsLabelShipping: 'Spedizione',
    checkoutStepsLabelPayment: 'Pagamento',
    checkoutStepsLabelConfirmation: 'Conferma',
    city: 'Città',
    state: 'Provincia',
    number: 'Numero',
    postalCode: 'Codice Postale',
    requiredField: 'Questo campo è obbligatorio.',
    numberPlaceholder: ' ',
    locale: 'it',
    goToShipping: 'Vai alla spedizione',
  },
  FRA: {
    couponInactive: 'Aucune réduction disponible. Vérifiez les conditions.',
    editLabel: 'Modifier',
    paypalImg: '',
    paypalPhone: '+33 0186995653',
    cartSubmitButton: 'Procéder au paiement',
    deliveryDateText: 'Arrive le',
    PickupDateText: 'Prêt le',
    eachLabel: 'chaque',
    tomorrowLabel: 'Demain',
    address1Placeholder: 'Adresse ou Boîte postale',
    address2Placeholder:
      'Appartement, suite, bâtiment, étage, etc (facultatif)',
    checkoutStepsLabelCart: 'Panier',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Expédition',
    checkoutStepsLabelPayment: 'Paiement',
    checkoutStepsLabelConfirmation: 'Confirmation',
    requiredField: 'Ce champ est obligatoire.',
    city: 'Ville',
    state: 'État',
    number: 'Numéro',
    postalCode: 'Code Postal',
    locale: 'fr',
  },
  FIN: {
    couponInactive: 'Alennuksia ei saatavilla. Tarkasta ehdot.',
    editLabel: 'Muokkaa',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Jatka maksuun',
    deliveryDateText: 'Saapumisarvio',
    PickupDateText: 'Valmiusarvio',
    eachLabel: 'kappale',
    tomorrowLabel: 'Huomenna',
    checkoutStepsLabelCart: 'Ostoskori',
    checkoutStepsLabelIdentification: 'Tunniste',
    checkoutStepsLabelShipping: 'Toimitus',
    checkoutStepsLabelPayment: 'Maksu',
    checkoutStepsLabelConfirmation: 'Vahvistus',
    locale: 'fi',
  },
  SWE: {
    couponInactive: 'Inga rabatter tillgängliga, kontrollera villkoren.',
    editLabel: 'Redigera',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Fortsätt till betalning',
    deliveryDateText: 'Ankommer den',
    PickupDateText: 'Redo den',
    eachLabel: 'var',
    tomorrowLabel: 'Imorgon',
    checkoutStepsLabelCart: 'Kundvagn',
    checkoutStepsLabelIdentification: 'Identifikation',
    checkoutStepsLabelShipping: 'Leverans',
    checkoutStepsLabelPayment: 'Betalning',
    checkoutStepsLabelConfirmation: 'Bekräftelse',
    locale: 'sv',
  },
  AUT: {
    couponInactive: 'Kein Rabatt verfügbar. Überprüfen Sie die Bedingungen.',
    editLabel: 'Anpassen',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Weiter zur Zahlung',
    deliveryDateText: 'Lieferung bis',
    PickupDateText: 'Abholbereit bis',
    eachLabel: 'jedes/jeder',
    tomorrowLabel: 'Morgen',
    address1Placeholder: 'Straße',
    address2Placeholder: 'Straße (weiter)',
    postalCode: 'Postleitzahl',
    country: 'Land',
    city: 'Stadt',
    state: 'Bundesland',
    number: 'Hausnummer',
    checkoutStepsLabelCart: 'Warenkorb',
    checkoutStepsLabelIdentification: 'Anmeldung',
    checkoutStepsLabelShipping: 'Versand',
    checkoutStepsLabelPayment: 'Zahlung',
    checkoutStepsLabelConfirmation: 'Bestätigung',
    googleAddressLabel: 'Adresse',
    locale: 'de-DE',
    cartNoteLabel: 'Bestellhinweis',
    identifiedUserMessage:
      'Willkommen zurück!\nUm Ihren Einkauf zu vereinfachen haben wir Ihre sicher gespeicherten Informationen eingetragen.',
    requiredField: 'Pflichftfeld.',
  },
  DEU: {
    couponInactive: 'Kein Rabatt verfügbar. Überprüfen Sie die Bedingungen.',
    editLabel: 'Anpassen',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Weiter zur Zahlung',
    deliveryDateText: 'Lieferung bis',
    PickupDateText: 'Abholbereit bis',
    eachLabel: 'jedes/jeder',
    tomorrowLabel: 'Morgen',
    address1Placeholder: 'Straße',
    address2Placeholder: 'Straße (weiter)',
    postalCode: 'Postleitzahl',
    country: 'Land',
    city: 'Stadt',
    state: 'Bundesland',
    number: 'Hausnummer',
    checkoutStepsLabelCart: 'Warenkorb',
    checkoutStepsLabelIdentification: 'Anmeldung',
    checkoutStepsLabelShipping: 'Versand',
    checkoutStepsLabelPayment: 'Zahlung',
    checkoutStepsLabelConfirmation: 'Bestätigung',
    googleAddressLabel: 'Adresse',
    locale: 'de-DE',
    cartNoteLabel: 'Bestellhinweis',
    identifiedUserMessage:
      'Willkommen zurück!\nUm Ihren Einkauf zu vereinfachen haben wir Ihre sicher gespeicherten Informationen eingetragen.',
  },
  ARA: {
    couponInactive: 'لا توجد خصومات متاحة. تحقق من الشروط.',
    editLabel: 'تعديل',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'انتقل إلى الدفع',
    deliveryDateText: 'تصل قبل',
    PickupDateText: 'جاهزة قبل',
    eachLabel: 'كل',
    tomorrowLabel: 'غدًا',
    cartNoteLabel: 'رسالة هدية أو تعليقات',
    identifiedUserMessage: `شكرًا على عودتك!\nTلتسريع معاملتك، قمنا بتعبئة معلوماتك بشكل آمن.`,
    address1Placeholder: 'عنوان الشارع',
    address2Placeholder: 'شقة، جناح، مبنى، طابق، إلخ (اختياري)',
    checkoutStepsLabelCart: 'عربة التسوق',
    checkoutStepsLabelIdentification: 'الهوية',
    checkoutStepsLabelShipping: 'التسوق',
    checkoutStepsLabelPayment: 'الدفع',
    checkoutStepsLabelConfirmation: 'تأكيد',
    requiredField: 'هذا الحقل مطلوب.',
    locale: 'ar-TN',
  },
  RUS: {
    couponInactive: 'Скидки недоступны. Проверьте условия.',
    editLabel: 'Редактировать',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Перейте к оплате',
    deliveryDateText: 'Дата прибытия',
    PickupDateText: 'Дата готовности',
    eachLabel: 'каждый',
    tomorrowLabel: 'Завтра',
    cartNoteLabel: 'Сообщение о подарке или комментарии',
    identifiedUserMessage: `Спасибо, что вернулись!\nДля ускорения вашей транзакции мы заполнили вашу информацию. Не волнуйтесь, ваши данные надёжно защищены.`,
    address1Placeholder: 'Адрес проживания/улица или адрес почтового ящика',
    address2Placeholder: 'Квартира, номер дома, этаж (дополнительно)',
    checkoutStepsLabelCart: 'Корзина',
    checkoutStepsLabelIdentification: 'Идентификация',
    checkoutStepsLabelShipping: 'Доставка',
    checkoutStepsLabelPayment: 'Оплата',
    checkoutStepsLabelConfirmation: 'Подтверждение',
    googleAddressLabel: 'Улица и номер дома',
    requiredField: 'Это обязательное поле.',
    city: 'Город',
    state: 'Область',
    locale: 'ru',
  },
  POL: {
    couponInactive: 'Brak dostępnych upustów. Sprawdź warunki.',
    editLabel: 'Edytuj',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Przejdź do płatności',
    deliveryDateText: 'Dotrze do',
    PickupDateText: 'Gotowe do',
    eachLabel: 'sztuka',
    tomorrowLabel: 'Jutro',
    cartNoteLabel: 'Wiadomość o podarunku lub komentarze',
    identifiedUserMessage:
      'Dziękujemy, że do nas wróciłeś!\nAby usprawnić Twoją transakcję, w bezpieczny sposób wypełniliśmy za Ciebie Twoje dane.',
    address1Placeholder: 'Adres domowy lub skrzynka pocztowa',
    address2Placeholder:
      'Mieszkanie, apartament, budynek, piętro itd. (opcjonalnie)',
    checkoutStepsLabelCart: 'Koszyk',
    checkoutStepsLabelIdentification: 'Identyfikacja',
    checkoutStepsLabelShipping: 'Wysyłka',
    checkoutStepsLabelPayment: 'Płatność',
    checkoutStepsLabelConfirmation: 'Potwierdzenie',
    googleAddressLabel: 'Adres domowy',
    requiredField: 'To pole jest wymagane.',
    city: 'Miejscowość',
    state: 'Stan (województwo)',
    locale: 'pl',
  },
  ZAF: {
    couponInactive: 'No discounts available. Check the conditions.',
    editLabel: 'Edit',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Proceed to Payment',
    deliveryDateText: 'Arrives by',
    PickupDateText: 'Ready by',
    eachLabel: 'each',
    tomorrowLabel: 'Tomorrow',
    cartNoteLabel: 'Gift Message or Comments',
    identifiedUserMessage: `Thanks for coming back!\nTo expedite your transaction, we have securely populated your information for you.`,
    address1Placeholder: 'Street address or P.O. Box',
    address2Placeholder: 'Apartment number, unit, floor, etc.',
    checkoutStepsLabelCart: 'Cart',
    checkoutStepsLabelIdentification: 'Identification',
    checkoutStepsLabelShipping: 'Shipping',
    checkoutStepsLabelPayment: 'Payment',
    checkoutStepsLabelConfirmation: 'Confirmation',
    googleAddressLabel: 'Street Address',
    requiredField: 'This field is required.',
    city: 'City',
    state: 'State',
    locale: 'en-ZA',
  },
  GRC: {
    couponInactive: 'Δεν υπάρχουν διαθέσιμες εκπτώσεις. Ελέγξτε τους όρους.',
    editLabel: 'Επεξεργασία',
    paypallmg: '',
    paypalPhone: '',
    cartSubmitButton: 'Μετάβαση στην Πληρωμή',
    deliveryDateText: 'Άφιξη έως',
    PickupDateText: 'Έτοιμο έως',
    eachLabel: 'καθεμία',
    tomorrowLabel: 'Αύριο',
    cartNoteLabel: 'Μήνυμα δώρου ή Σχόλια',
    identifiedUserMessage:
      'Ευχαριστούμε που επανήλθατε!\n Για να επισπεύσουμε τη συναλλαγή σας, έχουμε συμπληρώσει με ασφάλεια τις πληροφορίες για εσάς.',
    address1Placeholder: 'Διεύθυνση οδού ή Ταχυδρομική Θυρίδα',
    address2Placeholder: 'Διαμέρισμα, σουίτα, κτήριο, όροφος κλπ (προαιρετικό)',
    checkoutStepsLabelCart: 'Καρότσι',
    checkoutStepsLabelIdentification: 'Αναγνώριση',
    checkoutStepsLabelShipping: 'Αποστολή',
    checkoutStepsLabelPayment: 'Πληρωμή',
    checkoutStepsLabelConfirmation: 'Επιβεβαίωση',
    googleAddressLabel: 'Διεύθυνση οδού',
    requiredField: 'Αυτό το πεδίο είναι υποχρεωτικό.',
    city: 'Πόλη',
    state: 'Χώρα',
    locale: 'gr',
  },
  CHE: {
    couponInactive: 'Keine Rabatte verfügbar. Prüfen Sie die Bedingungen.',
    editLabel: 'Bearbeiten',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Zur Zahlung übergehen',
    deliveryDateText: 'Kommt an bis',
    PickupDateText: 'Bereit bis',
    eachLabel: 'jeder',
    tomorrowLabel: 'Morgen',
    cartNoteLabel: 'Geschenknachricht oder Kommentare',
    identifiedUserMessage:
      'Danke, dass Sie zurückgekommen sind!\nUm Ihre Transaktion zu beschleunigen, haben wir Ihre Daten für Sie sicher ausgefüllt.',
    address1Placeholder: 'Straße oder Anschrift Box',
    address2Placeholder:
      'Wohnung, Appartement, Gebäude, Stockwerk, usw. (optional)',
    checkoutStepsLabelCart: 'Warenkorb',
    checkoutStepsLabelIdentification: 'Kennzeichnung',
    checkoutStepsLabelShipping: 'Versand',
    checkoutStepsLabelPayment: 'Zahlung',
    checkoutStepsLabelConfirmation: 'Bestätigung',
    googleAddressLabel: 'Straße und Hausnummer',
    requiredField: 'Dieses Feld ist erforderlich.',
    city: 'Stadt',
    state: 'Staat',
    locale: 'fr-CH',
  },
  HRV: {
    couponInactive: 'Popusti niso na voljo. Preverite pogoje.',
    editLabel: 'Uredi',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Nadaljujte na plačilom',
    deliveryDateText: 'Prispe do',
    PickupDateText: 'Pripravljeno do',
    eachLabel: 'posamezen',
    tomorrowLabel: 'Jutri',
    cartNoteLabel: 'Darilno sporočilo ali komentarji',
    identifiedUserMessage:
      'Hvala, ker ste se vrnili! Da bi pospešili vašo transakcijo, smo za vas varno izpolnili vaše podatke.',
    address1Placeholder: 'Ulični naslov ali poštna št',
    address2Placeholder:
      'Apartma, apartma, stavba, nadstropje itd. (neobvezno)',
    checkoutStepsLabelCart: 'Košarica',
    checkoutStepsLabelIdentification: 'Identifikacija',
    checkoutStepsLabelShipping: 'Odpošiljanje',
    checkoutStepsLabelPayment: 'Plačilo',
    checkoutStepsLabelConfirmation: 'Potrditev',
    googleAddressLabel: 'Naslov ulice',
    requiredField: 'To polje je obvezno.',
    city: 'Mesto',
    state: 'Država',
    locale: 'hr',
  },
  ROU: {
    couponInactive:
      'Nu sunt disponibile reduceri. Este necesară verificarea condițiilor.',
    editLabel: 'Editează',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Mergi la plată',
    deliveryDateText: 'Sosește până la',
    PickupDateText: 'Este pregătit până la',
    eachLabel: 'fiecare',
    tomorrowLabel: 'Mâine',
    cartNoteLabel: 'Mesaj cadou sau observații',
    identifiedUserMessage:
      'Îți mulțumim că ai revenit!\nPentru a-ți accelera tranzacția, am populat în condiții de siguranță informațiile tale',
    address1Placeholder: 'Strada sau cutia poștală',
    address2Placeholder: 'Apartament, clădire, etaj etc. (opțional)',
    checkoutStepsLabelCart: 'Coș de cumpărături',
    checkoutStepsLabelIdentification: 'Identificare',
    checkoutStepsLabelShipping: 'Expediere',
    checkoutStepsLabelPayment: 'Plată',
    checkoutStepsLabelConfirmation: 'Confirmare',
    googleAddressLabel: 'Adresa',
    requiredField: 'Acest câmp este obligatoriu.',
    city: 'Oraș',
    state: 'Stat',
    locale: 'ro-MD',
  },
  NLD: {
    couponInactive: 'Geen kortingen beschikbaar. Controleer de voorwaarden.',
    editLabel: 'Bewerken',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Ga naar betaling',
    deliveryDateText: 'Word geleverd op',
    PickupDateText: 'Klaar op',
    eachLabel: 'elk',
    tomorrowLabel: 'Morgen',
    cartNoteLabel: 'Geschenkboodschap of commentaar',
    identifiedUserMessage:
      'Bedankt dat u terugkwam!\nOm uw transactie te bespoedigen, hebben wij uw gegevens veilig voor u ingevuld.',
    address1Placeholder: 'Adres of postbus ',
    address2Placeholder:
      'Appartement, suite, gebouw, verdieping, enz (facultatief)',
    checkoutStepsLabelCart: 'Winkelwagen',
    checkoutStepsLabelIdentification: 'Identificatie',
    checkoutStepsLabelShipping: 'Verzending',
    checkoutStepsLabelPayment: 'Betaling',
    checkoutStepsLabelConfirmation: 'Bevestiging',
    googleAddressLabel: 'Adres',
    requiredField: 'Dit veld is verplicht.',
    city: 'Stad',
    state: 'Staat',
    locale: 'nl',
  },
  BEL: {
    couponInactive: 'Geen kortingen beschikbaar. Controleer de voorwaarden.',
    editLabel: 'Bewerken',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Ga naar betaling',
    deliveryDateText: 'Word geleverd op',
    PickupDateText: 'Klaar op',
    eachLabel: 'elk',
    tomorrowLabel: 'Morgen',
    cartNoteLabel: 'Geschenkboodschap of commentaar',
    identifiedUserMessage:
      'Bedankt dat u terugkwam!\nOm uw transactie te bespoedigen, hebben wij uw gegevens veilig voor u ingevuld.',
    address1Placeholder: 'Adres of postbus ',
    address2Placeholder:
      'Appartement, suite, gebouw, verdieping, enz (facultatief)',
    checkoutStepsLabelCart: 'Winkelwagen',
    checkoutStepsLabelIdentification: 'Identificatie',
    checkoutStepsLabelShipping: 'Verzending',
    checkoutStepsLabelPayment: 'Betaling',
    checkoutStepsLabelConfirmation: 'Bevestiging',
    googleAddressLabel: 'Adres',
    requiredField: 'Dit veld is verplicht.',
    city: 'Stad',
    state: 'Staat',
    locale: 'nl-BE',
  },
  CZE: {
    couponInactive: 'Nie sú dostupné žiadne zľavy. Pozrite si podmienky.',
    editLabel: 'Upraviť',
    paypalImg: '',
    paypalPhone: '',
    cartSubmitButton: 'Pokračovať k platbe',
    deliveryDateText: 'Bude doručené do',
    PickupDateText: 'Pripravené na vyzdvihnutie',
    eachLabel: 'každé',
    tomorrowLabel: 'zajtra',
    cartNoteLabel: 'Odkaz k darčeku alebo komentáre',
    identifiedUserMessage:
      'Ďakujeme, že ste tu znova!\nNa urýchlenie vašej transakcie sme za vás bezpečne vyplnili vaše informácie.',
    address1Placeholder: 'Ulica alebo P.O. box',
    address2Placeholder: 'Byt, apartmán, budova, poschodie atď. (voliteľné)',
    checkoutStepsLabelCart: 'Košík',
    checkoutStepsLabelIdentification: 'Identifikácia',
    checkoutStepsLabelShipping: 'Dodanie',
    checkoutStepsLabelPayment: 'Platba',
    checkoutStepsLabelConfirmation: 'Potvrdenie',
    googleAddressLabel: 'Ulica',
    requiredField: 'Toto pole je povinné.',
    city: 'Mesto',
    state: 'Štát',
    locale: 'cs',
  },
}

```