{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/bulier-mini-carrello.js?n=0.7983565238388871"],
  "sourcesContent": ["/* ============================================================\n   BULIER \u2014 IL CARRELLO IN VETRO\n   Si apre DA SOLO dopo ogni aggiunta al carrello riuscita: scheda\n   prodotto, selettore rapido della taglia, look. Non tocca il codice\n   che aggiunge (bulier.js): ascolta le chiamate a /cart/add, e quando\n   una va a buon fine apre il pannello. Cosi' vale anche per i pulsanti\n   che arriveranno, senza ricordarsi di collegarli.\n\n   Il contenuto lo disegna Shopify (sezione bulier-mini-carrello): qui\n   si chiede, si mostra e si gestiscono quantita' e chiusura.\n   ============================================================ */\n(function(){\n  const SEZIONE = 'bulier-mini-carrello';\n  const originale = window.fetch.bind(window);\n  let pannello = null, velo = null, ultimo = null, aperto = false;\n\n  function crea(){\n    if(pannello) return;\n    velo = document.createElement('div');\n    velo.className = 'mc-velo';\n    pannello = document.createElement('aside');\n    pannello.className = 'mc-pannello';\n    pannello.setAttribute('role', 'dialog');\n    pannello.setAttribute('aria-modal', 'true');\n    pannello.setAttribute('aria-labelledby', 'mcTitolo');\n    pannello.setAttribute('tabindex', '-1');\n    pannello.setAttribute('inert', '');\n    document.body.append(velo, pannello);\n\n    velo.addEventListener('click', chiudi);\n    pannello.addEventListener('click', async e => {\n      if(e.target.closest('[data-mc-chiudi]')){ chiudi(); return; }\n      const b = e.target.closest('[data-mc-qta]');\n      if(!b) return;\n      const riga = b.closest('[data-mc-chiave]');\n      const chiave = riga.dataset.mcChiave;\n      riga.classList.add('mc__riga--attesa');\n      let avviso = '';\n      try{\n        const r = await originale('/cart/change.js', {\n          method:'POST',\n          headers:{'Content-Type':'application/json','Accept':'application/json'},\n          body: JSON.stringify({ id: chiave, quantity: Number(b.dataset.mcQta) })\n        });\n        /* di solito e' la disponibilita': \"Solo 1 articolo...\" lo dice\n           Shopify, e va detto alla cliente invece di non fare niente */\n        if(!r.ok){\n          const e = await r.json().catch(() => null);\n          avviso = (e && (e.description || e.message)) || 'Non sono riuscito a cambiare la quantit\u00E0.';\n        }\n      }catch(err){ avviso = 'Non sono riuscito a cambiare la quantit\u00E0.'; }\n      await carica();\n      if(avviso){\n        const nuova = pannello.querySelector('[data-mc-chiave=\"' + chiave + '\"] .mc__info');\n        if(nuova){\n          const p = document.createElement('p');\n          p.className = 'mc__avviso';\n          p.setAttribute('role', 'status');\n          p.textContent = avviso;\n          nuova.append(p);\n        }\n      }\n      if(window.bulierAggiornaCarrello) window.bulierAggiornaCarrello();\n    });\n    addEventListener('keydown', e => { if(e.key === 'Escape' && aperto) chiudi(); });\n  }\n\n  function mostra(html){\n    const t = document.createElement('div');\n    t.innerHTML = html;\n    const dentro = t.querySelector('.mc');\n    if(dentro){ pannello.innerHTML = ''; pannello.append(dentro); return true; }\n    return false;\n  }\n\n  async function carica(){\n    try{\n      const r = await originale('/?section_id=' + SEZIONE);\n      const html = await r.text();\n      const t = document.createElement('div');\n      t.innerHTML = html;\n      const dentro = t.querySelector('.mc');\n      if(dentro){ pannello.innerHTML = ''; pannello.append(dentro); }\n    }catch(err){\n      pannello.innerHTML = '<div class=\"mc\"><p class=\"mc__vuoto\">Non riesco a mostrare il carrello. <a href=\"/cart\">Aprilo qui</a>.</p></div>';\n    }\n  }\n\n  /* VELOCITA': il pannello si apre SUBITO. Il contenuto arriva gia'\n     dentro la risposta dell'aggiunta (Shopify lo manda se glielo si\n     chiede con \"sections\"), quindi niente seconda richiesta. Solo se\n     manca si chiede, e intanto il pannello e' gia' aperto. */\n  async function apri(html){\n    crea();\n    ultimo = document.activeElement;\n    const pronto = html && mostra(html);\n    if(!pronto && !pannello.querySelector('.mc')){\n      pannello.innerHTML = '<div class=\"mc\"><div class=\"mc__testa\"><h2 id=\"mcTitolo\">Il tuo carrello</h2></div><p class=\"mc__vuoto\">Un momento&hellip;</p></div>';\n    }\n    pannello.removeAttribute('inert');\n    pannello.classList.add('aperto');\n    velo.classList.add('aperto');\n    document.documentElement.classList.add('mc-aperto');\n    aperto = true;\n    pannello.focus();\n    if(!pronto) await carica();\n  }\n\n  function chiudi(){\n    if(!aperto) return;\n    pannello.classList.remove('aperto');\n    velo.classList.remove('aperto');\n    pannello.setAttribute('inert', '');\n    document.documentElement.classList.remove('mc-aperto');\n    aperto = false;\n    if(ultimo && ultimo.focus) ultimo.focus();\n  }\n\n  window.bulierApriCarrello = apri;\n\n  /* l'ascolto delle aggiunte: si passa la chiamata a fetch cosi' com'e',\n     e solo dopo si guarda se era un'aggiunta riuscita */\n  window.fetch = async function(input, init){\n    const url = typeof input === 'string' ? input : (input && input.url) || '';\n    const metodo = ((init && init.method) || (input && input.method) || 'GET').toUpperCase();\n    /* nella pagina del carrello no: il carrello e' gia' li' davanti */\n    const nelCarrello = /^\\/cart\\/?$/.test(location.pathname);\n    const aggiunta = !nelCarrello && metodo === 'POST' && /\\/cart\\/add(\\.js)?(\\?|$)/.test(url);\n\n    /* alla richiesta di aggiunta si chiede anche il pannello gia' disegnato */\n    if(aggiunta && init && typeof init.body === 'string'){\n      try{\n        const corpo = JSON.parse(init.body);\n        corpo.sections = SEZIONE;\n        init = Object.assign({}, init, { body: JSON.stringify(corpo) });\n      }catch(err){}\n    }\n\n    const risposta = await originale(input, init);\n    if(aggiunta && risposta.ok){\n      try{\n        const dati = await risposta.clone().json();\n        apri(dati && dati.sections ? dati.sections[SEZIONE] : null);\n      }catch(err){ apri(); }\n    }\n    return risposta;\n  };\n})();\n"],
  "mappings": "CAWC,UAAU,CACT,MAAM,QAAU,uBACV,UAAY,OAAO,MAAM,KAAK,MAAM,EAC1C,IAAI,SAAW,KAAM,KAAO,KAAM,OAAS,KAAM,OAAS,GAE1D,SAAS,MAAM,CACV,WACH,KAAO,SAAS,cAAc,KAAK,EACnC,KAAK,UAAY,UACjB,SAAW,SAAS,cAAc,OAAO,EACzC,SAAS,UAAY,cACrB,SAAS,aAAa,OAAQ,QAAQ,EACtC,SAAS,aAAa,aAAc,MAAM,EAC1C,SAAS,aAAa,kBAAmB,UAAU,EACnD,SAAS,aAAa,WAAY,IAAI,EACtC,SAAS,aAAa,QAAS,EAAE,EACjC,SAAS,KAAK,OAAO,KAAM,QAAQ,EAEnC,KAAK,iBAAiB,QAAS,MAAM,EACrC,SAAS,iBAAiB,QAAS,MAAM,GAAK,CAC5C,GAAG,EAAE,OAAO,QAAQ,kBAAkB,EAAE,CAAE,OAAO,EAAG,MAAQ,CAC5D,MAAM,EAAI,EAAE,OAAO,QAAQ,eAAe,EAC1C,GAAG,CAAC,EAAG,OACP,MAAM,KAAO,EAAE,QAAQ,kBAAkB,EACnC,OAAS,KAAK,QAAQ,SAC5B,KAAK,UAAU,IAAI,kBAAkB,EACrC,IAAI,OAAS,GACb,GAAG,CACD,MAAM,EAAI,MAAM,UAAU,kBAAmB,CAC3C,OAAO,OACP,QAAQ,CAAC,eAAe,mBAAmB,OAAS,kBAAkB,EACtE,KAAM,KAAK,UAAU,CAAE,GAAI,OAAQ,SAAU,OAAO,EAAE,QAAQ,KAAK,CAAE,CAAC,CACxE,CAAC,EAGD,GAAG,CAAC,EAAE,GAAG,CACP,MAAMA,GAAI,MAAM,EAAE,KAAK,EAAE,MAAM,IAAM,IAAI,EACzC,OAAUA,KAAMA,GAAE,aAAeA,GAAE,UAAa,8CAClD,CACF,MAAW,CAAE,OAAS,8CAA6C,CAEnE,GADA,MAAM,OAAO,EACV,OAAO,CACR,MAAM,MAAQ,SAAS,cAAc,oBAAsB,OAAS,cAAc,EAClF,GAAG,MAAM,CACP,MAAM,EAAI,SAAS,cAAc,GAAG,EACpC,EAAE,UAAY,aACd,EAAE,aAAa,OAAQ,QAAQ,EAC/B,EAAE,YAAc,OAChB,MAAM,OAAO,CAAC,CAChB,CACF,CACG,OAAO,wBAAwB,OAAO,uBAAuB,CAClE,CAAC,EACD,iBAAiB,UAAW,GAAK,CAAK,EAAE,MAAQ,UAAY,QAAQ,OAAO,CAAG,CAAC,EACjF,CAEA,SAAS,OAAO,KAAK,CACnB,MAAM,EAAI,SAAS,cAAc,KAAK,EACtC,EAAE,UAAY,KACd,MAAM,OAAS,EAAE,cAAc,KAAK,EACpC,OAAG,QAAS,SAAS,UAAY,GAAI,SAAS,OAAO,MAAM,EAAU,IAC9D,EACT,CAEA,eAAe,QAAQ,CACrB,GAAG,CAED,MAAM,KAAO,MADH,MAAM,UAAU,gBAAkB,OAAO,GAC9B,KAAK,EACpB,EAAI,SAAS,cAAc,KAAK,EACtC,EAAE,UAAY,KACd,MAAM,OAAS,EAAE,cAAc,KAAK,EACjC,SAAS,SAAS,UAAY,GAAI,SAAS,OAAO,MAAM,EAC7D,MAAW,CACT,SAAS,UAAY,mHACvB,CACF,CAMA,eAAe,KAAK,KAAK,CACvB,KAAK,EACL,OAAS,SAAS,cAClB,MAAM,OAAS,MAAQ,OAAO,IAAI,EAC/B,CAAC,QAAU,CAAC,SAAS,cAAc,KAAK,IACzC,SAAS,UAAY,wIAEvB,SAAS,gBAAgB,OAAO,EAChC,SAAS,UAAU,IAAI,QAAQ,EAC/B,KAAK,UAAU,IAAI,QAAQ,EAC3B,SAAS,gBAAgB,UAAU,IAAI,WAAW,EAClD,OAAS,GACT,SAAS,MAAM,EACX,QAAQ,MAAM,OAAO,CAC3B,CAEA,SAAS,QAAQ,CACX,SACJ,SAAS,UAAU,OAAO,QAAQ,EAClC,KAAK,UAAU,OAAO,QAAQ,EAC9B,SAAS,aAAa,QAAS,EAAE,EACjC,SAAS,gBAAgB,UAAU,OAAO,WAAW,EACrD,OAAS,GACN,QAAU,OAAO,OAAO,OAAO,MAAM,EAC1C,CAEA,OAAO,mBAAqB,KAI5B,OAAO,MAAQ,eAAe,MAAO,KAAK,CACxC,MAAM,IAAM,OAAO,OAAU,SAAW,MAAS,OAAS,MAAM,KAAQ,GAClE,QAAW,MAAQ,KAAK,QAAY,OAAS,MAAM,QAAW,OAAO,YAAY,EAGjF,SAAW,CADG,cAAc,KAAK,SAAS,QAAQ,GACvB,SAAW,QAAU,2BAA2B,KAAK,GAAG,EAGzF,GAAG,UAAY,MAAQ,OAAO,KAAK,MAAS,SAC1C,GAAG,CACD,MAAM,MAAQ,KAAK,MAAM,KAAK,IAAI,EAClC,MAAM,SAAW,QACjB,KAAO,OAAO,OAAO,CAAC,EAAG,KAAM,CAAE,KAAM,KAAK,UAAU,KAAK,CAAE,CAAC,CAChE,MAAW,CAAC,CAGd,MAAM,SAAW,MAAM,UAAU,MAAO,IAAI,EAC5C,GAAG,UAAY,SAAS,GACtB,GAAG,CACD,MAAM,KAAO,MAAM,SAAS,MAAM,EAAE,KAAK,EACzC,KAAK,MAAQ,KAAK,SAAW,KAAK,SAAS,OAAO,EAAI,IAAI,CAC5D,MAAW,CAAE,KAAK,CAAG,CAEvB,OAAO,QACT,CACF,GAAG",
  "names": ["e"]
}
