{
  "version": 3,
  "sources": ["/cdn/shop/t/15/assets/cart-shipping-calculator.js?pb=0"],
  "sourcesContent": ["/**\n * Cart drawer CEP shipping estimator (Brazil).\n * ViaCEP + Shopify /cart/shipping_rates.json \u2014 no jQuery.\n * Rates are display-only (checkout recalculates; no selection).\n */\n(() => {\n  const STORAGE_KEY = 'studio-athletic-cart-shipping-zip';\n\n  const UF_TO_PROVINCE = {\n    AC: 'Acre',\n    AL: 'Alagoas',\n    AM: 'Amazonas',\n    AP: 'Amap\u00E1',\n    BA: 'Bahia',\n    CE: 'Cear\u00E1',\n    DF: 'Distrito Federal',\n    ES: 'Esp\u00EDrito Santo',\n    GO: 'Goi\u00E1s',\n    MA: 'Maranh\u00E3o',\n    MG: 'Minas Gerais',\n    MS: 'Mato Grosso do Sul',\n    MT: 'Mato Grosso',\n    PA: 'Par\u00E1',\n    PB: 'Para\u00EDba',\n    PE: 'Pernambuco',\n    PI: 'Piau\u00ED',\n    PR: 'Paran\u00E1',\n    RJ: 'Rio de Janeiro',\n    RN: 'Rio Grande do Norte',\n    RO: 'Rond\u00F4nia',\n    RR: 'Roraima',\n    RS: 'Rio Grande do Sul',\n    SC: 'Santa Catarina',\n    SE: 'Sergipe',\n    SP: 'S\u00E3o Paulo',\n    TO: 'Tocantins',\n  };\n\n  const I18N = {\n    invalidZip: 'Digite um CEP v\u00E1lido',\n    zipNotFound: 'CEP n\u00E3o encontrado',\n    zipUnavailable: 'Consulta de CEP indispon\u00EDvel no momento',\n    noRates: 'N\u00E3o h\u00E1 frete dispon\u00EDvel para este CEP',\n    ratesError: 'N\u00E3o foi poss\u00EDvel calcular o frete. Tente novamente.',\n    calculating: 'Calculando\u2026',\n    deliveryHours: 'at\u00E9 2 horas \u00FAteis',\n    deliveryDay: '1 dia \u00FAtil',\n    deliveryDays: (n) => `${n} dias \u00FAteis`,\n  };\n\n  function digitsOnly(value) {\n    return String(value || '').replace(/\\D/g, '');\n  }\n\n  function maskCep(value) {\n    const digits = digitsOnly(value).slice(0, 8);\n    if (digits.length > 5) return `${digits.slice(0, 5)}-${digits.slice(5)}`;\n    return digits;\n  }\n\n  function formatMoney(cents) {\n    const amount = (Number(cents) || 0) / 100;\n    try {\n      return new Intl.NumberFormat('pt-BR', {\n        style: 'currency',\n        currency: 'BRL',\n      }).format(amount);\n    } catch {\n      return `R$ ${amount.toFixed(2).replace('.', ',')}`;\n    }\n  }\n\n  /**\n   * @param {{ delivery_days?: number[] }} rate\n   */\n  function formatDelivery(rate) {\n    const days = rate.delivery_days;\n    if (!Array.isArray(days) || !days.length || days[0] == null) return '';\n    const n = Number(days[0]);\n    if (Number.isNaN(n)) return '';\n    if (n === 0) return I18N.deliveryHours;\n    if (n === 1) return I18N.deliveryDay;\n    return I18N.deliveryDays(n);\n  }\n\n  class CartShippingCalculator extends HTMLElement {\n    /** @type {HTMLInputElement | null} */\n    #zip = null;\n    /** @type {HTMLButtonElement | null} */\n    #submit = null;\n    /** @type {HTMLElement | null} */\n    #status = null;\n    /** @type {HTMLElement | null} */\n    #rates = null;\n    /** @type {AbortController | null} */\n    #abort = null;\n    /** @type {((event: Event) => void) | null} */\n    #onInput = null;\n    /** @type {((event: Event) => void) | null} */\n    #onSubmit = null;\n    /** @type {((event: KeyboardEvent) => void) | null} */\n    #onKeydown = null;\n\n    connectedCallback() {\n      this.#zip = this.querySelector('[data-shipping-zip]');\n      this.#submit = this.querySelector('[data-shipping-submit]');\n      this.#status = this.querySelector('[data-shipping-status]');\n      this.#rates = this.querySelector('[data-shipping-rates]');\n\n      if (!this.#zip || !this.#submit) return;\n\n      const saved = sessionStorage.getItem(STORAGE_KEY);\n      if (saved && !this.#zip.value) {\n        this.#zip.value = maskCep(saved);\n      }\n\n      this.#onInput = (event) => {\n        const el = /** @type {HTMLInputElement} */ (event.target);\n        const start = el.selectionStart;\n        const before = el.value.length;\n        el.value = maskCep(el.value);\n        const diff = el.value.length - before;\n        if (typeof start === 'number') {\n          el.setSelectionRange(start + diff, start + diff);\n        }\n      };\n\n      this.#onSubmit = (event) => {\n        event.preventDefault();\n        this.#calculate();\n      };\n\n      this.#onKeydown = (event) => {\n        if (event.key === 'Enter') {\n          event.preventDefault();\n          this.#calculate();\n        }\n      };\n\n      this.#zip.addEventListener('input', this.#onInput);\n      this.#zip.addEventListener('keydown', this.#onKeydown);\n      this.#submit.addEventListener('click', this.#onSubmit);\n    }\n\n    disconnectedCallback() {\n      this.#abort?.abort();\n      if (this.#zip && this.#onInput) this.#zip.removeEventListener('input', this.#onInput);\n      if (this.#zip && this.#onKeydown) this.#zip.removeEventListener('keydown', this.#onKeydown);\n      if (this.#submit && this.#onSubmit) this.#submit.removeEventListener('click', this.#onSubmit);\n    }\n\n    /**\n     * @param {string} message\n     * @param {string} [state]\n     */\n    #setStatus(message, state = '') {\n      if (!this.#status) return;\n      if (!message) {\n        this.#status.hidden = true;\n        this.#status.textContent = '';\n        this.#status.removeAttribute('data-state');\n        return;\n      }\n      this.#status.hidden = false;\n      this.#status.textContent = message;\n      if (state) this.#status.setAttribute('data-state', state);\n      else this.#status.removeAttribute('data-state');\n    }\n\n    /**\n     * @param {Array<{name: string, price: string|number, delivery_days?: number[]}>} rates\n     */\n    #setRates(rates) {\n      if (!this.#rates) return;\n      this.#rates.innerHTML = '';\n      if (!rates?.length) {\n        this.#rates.hidden = true;\n        return;\n      }\n\n      const frag = document.createDocumentFragment();\n      for (const rate of rates) {\n        const li = document.createElement('li');\n        li.className = 'cart-shipping-calculator__rate';\n\n        const main = document.createElement('div');\n        main.className = 'cart-shipping-calculator__rate-main';\n\n        const name = document.createElement('span');\n        name.className = 'cart-shipping-calculator__rate-name';\n        name.textContent = rate.name || '';\n\n        main.appendChild(name);\n\n        const delivery = formatDelivery(rate);\n        if (delivery) {\n          const eta = document.createElement('span');\n          eta.className = 'cart-shipping-calculator__rate-eta';\n          eta.textContent = delivery;\n          main.appendChild(eta);\n        }\n\n        const priceEl = document.createElement('span');\n        priceEl.className = 'cart-shipping-calculator__rate-price';\n        const priceNum = Number(rate.price);\n        priceEl.textContent =\n          priceNum === 0 ? 'Gr\u00E1tis' : formatMoney(Math.round(priceNum * 100));\n\n        li.appendChild(main);\n        li.appendChild(priceEl);\n        frag.appendChild(li);\n      }\n\n      this.#rates.appendChild(frag);\n      this.#rates.hidden = false;\n    }\n\n    async #calculate() {\n      if (!this.#zip) return;\n\n      const zipMasked = maskCep(this.#zip.value);\n      const zipDigits = digitsOnly(zipMasked);\n      this.#zip.value = zipMasked;\n\n      if (zipDigits.length !== 8) {\n        this.#setRates([]);\n        this.#setStatus(I18N.invalidZip, 'error');\n        return;\n      }\n\n      sessionStorage.setItem(STORAGE_KEY, zipMasked);\n      this.#abort?.abort();\n      this.#abort = new AbortController();\n      const { signal } = this.#abort;\n\n      this.dataset.loading = '';\n      this.#setRates([]);\n      this.#setStatus(I18N.calculating);\n\n      try {\n        const viaCepRes = await fetch(`https://viacep.com.br/ws/${zipDigits}/json/`, { signal });\n        if (!viaCepRes.ok) throw new Error('viacep');\n        const viaCep = await viaCepRes.json();\n        if (viaCep.erro) {\n          this.#setStatus(I18N.zipNotFound, 'error');\n          return;\n        }\n\n        const province = UF_TO_PROVINCE[String(viaCep.uf || '').toUpperCase()];\n        if (!province) {\n          this.#setStatus(I18N.zipNotFound, 'error');\n          return;\n        }\n\n        const params = new URLSearchParams({\n          'shipping_address[zip]': zipMasked,\n          'shipping_address[country]': 'Brazil',\n          'shipping_address[province]': province,\n        });\n\n        const ratesRes = await fetch(`/cart/shipping_rates.json?${params.toString()}`, {\n          headers: { Accept: 'application/json' },\n          signal,\n        });\n\n        if (!ratesRes.ok) {\n          this.#setStatus(I18N.ratesError, 'error');\n          return;\n        }\n\n        const data = await ratesRes.json();\n        const rates = data.shipping_rates || [];\n        if (!rates.length) {\n          this.#setStatus(I18N.noRates, 'error');\n          return;\n        }\n\n        this.#setStatus('');\n        this.#setRates(rates);\n      } catch (error) {\n        if (error?.name === 'AbortError') return;\n        this.#setStatus(\n          String(error?.message || '').includes('viacep') ? I18N.zipUnavailable : I18N.ratesError,\n          'error'\n        );\n      } finally {\n        delete this.dataset.loading;\n      }\n    }\n  }\n\n  if (!customElements.get('cart-shipping-calculator')) {\n    customElements.define('cart-shipping-calculator', CartShippingCalculator);\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
