{
  "version": 3,
  "sources": ["/cdn/shop/t/31/assets/sa-soucoupe.js?cb=9"],
  "sourcesContent": ["/* =====================================================================\n   SA SOUCOUPE / ITS MATCHING SAUCER  -  ligne compacte\n   ---------------------------------------------------------------------\n   Custom element <sa-soucoupe>. Ecoute `variant:change` (qui bulle au\n   document, cf. nn-atelier.js) et met a jour la ligne (vignette, nom,\n   taille, prix, lien vers la fiche, variante a ajouter) sans reload.\n   Etat initial rendu serveur par snippets/sa-soucoupe.liquid.\n   ===================================================================== */\n(function () {\n  'use strict';\n\n  var SIZE_ORDER = ['XS', 'S', 'M', 'L', 'XL'];\n  var DURATION = 260;\n  var EASE = 'cubic-bezier(0.22, 0.61, 0.36, 1)';\n\n  // suit la couleur du mug, sinon blanc, sinon \"default\", sinon la 1ere\n  function pickColour(list, colour) {\n    return (\n      (colour && list.filter(function (v) { return v.colour === colour; })[0]) ||\n      list.filter(function (v) { return v.colour === 'white'; })[0] ||\n      list.filter(function (v) { return v.colour === 'default'; })[0] ||\n      list[0]\n    );\n  }\n\n  function firstToken(s) {\n    return s == null ? '' : String(s).trim().split(' ')[0];\n  }\n\n  customElements.define('sa-soucoupe', class extends HTMLElement {\n    connectedCallback() {\n      try {\n        this.variants = JSON.parse(this.querySelector('script[data-sc-variants]').textContent) || [];\n        this.cfg = JSON.parse(this.querySelector('script[data-sc-config]').textContent) || {};\n      } catch (e) {\n        return;\n      }\n      if (!this.variants.length) return;\n\n      this.elThumb = this.querySelector('[data-sc-thumb]');\n      this.elImg = this.elThumb ? this.elThumb.querySelector('img') : null;\n      this.elNameLine = this.querySelector('.sc-saucer__name');\n      this.elName = this.querySelector('[data-sc-name]');\n      this.elMeta = this.querySelector('[data-sc-meta]');\n      this.elLinks = this.querySelectorAll('[data-sc-link]');\n      this.elInput = this.querySelector('[data-sc-input]');\n      this.elAdd = this.querySelector('[data-sc-add]');\n\n      this._onVariant = this._onVariant.bind(this);\n      document.addEventListener('variant:change', this._onVariant);\n\n      // feedback \"Ajoute\" sur le lien Add (le product-form gere l'ajout reel)\n      if (this.elAdd) {\n        var self = this;\n        this.elAdd.addEventListener('click', function () {\n          var added = self.elAdd.getAttribute('data-label-added');\n          var base = self.elAdd.getAttribute('data-label-add');\n          if (!added) return;\n          self.elAdd.textContent = added;\n          clearTimeout(self._addT);\n          self._addT = setTimeout(function () { self.elAdd.textContent = base; }, 1500);\n        });\n      }\n\n      // calage initial (sans animation) sur la variante mug par defaut\n      var initial = this._currentMugVariant();\n      if (initial) this._render(this._resolve(initial), false);\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener('variant:change', this._onVariant);\n    }\n\n    _onVariant(ev) {\n      var v = ev && ev.detail && ev.detail.variant;\n      if (!v) return;\n      this._render(this._resolve(v), true);\n    }\n\n    _currentMugVariant() {\n      var holder = document.querySelector('variant-picker script[data-variant]');\n      if (!holder) return null;\n      try { return JSON.parse(holder.textContent); } catch (e) { return null; }\n    }\n\n    // variante mug -> etat soucoupe a afficher\n    _resolve(mugVariant) {\n      var cfg = this.cfg;\n      var opts = mugVariant.options || [];\n      var mugSize = cfg.mugDimIndex >= 0 ? firstToken(opts[cfg.mugDimIndex]) : '';\n      var mugColour = cfg.mugColorIndex >= 0 ? firstToken(opts[cfg.mugColorIndex]).toLowerCase() : '';\n\n      // une seule variante -> soucoupe fixe (produits sans taille)\n      if (this.variants.length === 1) {\n        return { variant: this.variants[0], closest: false, fallback: !!cfg.fallback };\n      }\n\n      var want = mugSize; // le vivier encode deja un eventuel decalage\n      var avail = this.variants.filter(function (v) { return v.available; });\n      if (!avail.length) avail = this.variants.slice();\n\n      var atWant = avail.filter(function (v) { return v.size === want; });\n      var chosen = null;\n      var closest = false;\n\n      if (atWant.length) {\n        chosen = pickColour(atWant, mugColour);\n      } else {\n        var wi = SIZE_ORDER.indexOf(want);\n        var bestSize = null;\n        var bestD = 99;\n        avail.forEach(function (v) {\n          var d = Math.abs(SIZE_ORDER.indexOf(v.size) - wi);\n          if (d < bestD) { bestD = d; bestSize = v.size; }\n        });\n        if (bestSize !== null) {\n          chosen = pickColour(avail.filter(function (v) { return v.size === bestSize; }), mugColour);\n          closest = true;\n        }\n      }\n      if (!chosen) chosen = this.variants[0];\n\n      return {\n        variant: chosen,\n        closest: !cfg.explicit && closest && chosen.size !== want,\n        fallback: !!cfg.fallback\n      };\n    }\n\n    _render(state, animate) {\n      if (!state || !state.variant) return;\n      var v = state.variant;\n      var c = this.cfg.copy || {};\n      var self = this;\n\n      // meta : \u00B7 {dimension cm}[ \u00B7 {plus proche}] \u00B7 {prix}\n      // dimension cm (ex. \"\u230014 cm\", \"16\u00D716 cm\") au lieu de la lettre ; repli sur la\n      // lettre puis rien (la dimension est omise si la soucoupe n'en a pas).\n      var parts = [];\n      var dim = v.dim || v.size;\n      if (dim) parts.push(dim);\n      if (state.closest && c.closest) parts.push(c.closest);\n      if (v.price) parts.push(v.price);\n      var metaText = '\u00B7 ' + parts.join(' \u00B7 ');\n\n      var applyImg = function () {\n        if (self.elImg && v.img) {\n          self.elImg.src = v.img;\n          if (self.elImg.getAttribute('srcset')) self.elImg.removeAttribute('srcset');\n        }\n      };\n      var applyName = function () {\n        if (self.elName && v.name) self.elName.textContent = v.name;\n        if (self.elMeta) self.elMeta.textContent = metaText;\n      };\n\n      // liens vers la fiche soucoupe + variante du form : immediat\n      if (this.elLinks && v.url) this.elLinks.forEach(function (a) { a.href = v.url; });\n      if (this.elInput) this.elInput.value = v.id;\n\n      if (!animate) { applyImg(); applyName(); return; }\n      this._fade(this.elImg, applyImg);\n      this._fade(this.elNameLine, applyName);\n    }\n\n    // fondu d'entree : 0 sans transition, puis remonte a 1 sur DURATION\n    _fade(el, mutate) {\n      if (!el) { mutate(); return; }\n      el.style.transition = 'none';\n      el.style.opacity = '0';\n      mutate();\n      void el.offsetWidth;\n      el.style.transition = 'opacity ' + DURATION + 'ms ' + EASE;\n      el.style.opacity = '1';\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
