{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/loris-frequence-shelf.js?freq-build=10"],
  "sourcesContent": ["/* LORIS \u2014 Frequence \"Build your shelf\" behaviour.\n   Self-initialising: every [data-freq] section on the page is wired once.\n   Copy and commercial figures arrive as data- attributes from the snippet.\n\n   Pricing is a ladder: the per-bottle price falls with every bottle up to\n   four (55 \u2192 52.50 \u2192 48 \u2192 45) and stays at the four-bottle price after that.\n   The figures arrive as data-unit / data-each2..4 and are enforced at\n   checkout by Shopify automatic discounts; this file only displays them.\n\n   The shelf holds QUANTITIES: the same bottle can be taken more than once.\n   `picked` is a flat list of tile references, so a bottle taken twice appears\n   twice in the shelf and is posted to Shopify as one line with quantity 2. */\n(() => {\n\n  /* Home page: the three photographs scroll sideways on a phone, with dots. */\n  function initDots(root, reduce) {\n    const catsEl = root.querySelector('[data-cats]');\n    const dotsEl = root.querySelector('[data-dots]');\n    const cards = [...root.querySelectorAll('.freq__cat')];\n    if (catsEl && dotsEl && cards.length) {\n      cards.forEach((c, i) => {\n        const b = document.createElement('button');\n        b.type = 'button';\n        b.className = 'freq__dot' + (i === 0 ? ' is-on' : '');\n        b.setAttribute('aria-label', c.querySelector('.freq__catname').textContent);\n        b.addEventListener('click', () => c.scrollIntoView({ behavior: reduce ? 'auto' : 'smooth', block: 'nearest', inline: 'center' }));\n        dotsEl.appendChild(b);\n      });\n      let tick;\n      catsEl.addEventListener('scroll', () => {\n        clearTimeout(tick);\n        tick = setTimeout(() => {\n          const mid = catsEl.scrollLeft + catsEl.clientWidth / 2;\n          let best = 0, gap = Infinity;\n          cards.forEach((c, i) => {\n            const dist = Math.abs(c.offsetLeft + c.offsetWidth / 2 - mid);\n            if (dist < gap) { gap = dist; best = i; }\n          });\n          [...dotsEl.children].forEach((b, i) => b.classList.toggle('is-on', i === best));\n        }, 90);\n      }, { passive: true });\n    }\n  }\n\n  function initFrequenceShelf(root) {\n    if (!root || root.dataset.ready === 'true') return;\n    root.dataset.ready = 'true';\n    if (root.hasAttribute('data-teaser')) {\n      initDots(root, window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n      return;\n    }\n\n    const d = root.dataset;\n    const MAXPER = 20;\n    const SHIP_AT = Number(d.shipThreshold || 10000);\n    const SHIP = Number(d.shipCost || 2000);\n    const KEY = 'loris-freq-shelf';\n\n    const q = (s) => root.querySelector(s);\n    let tiles = [...root.querySelectorAll('[data-tile]')];\n    const chips = [...root.querySelectorAll('[data-filter]')];\n    const pick = q('[data-pick]');\n    const grid = q('[data-grid]');\n    const bar = q('[data-bar]');\n    const qb = (s) => bar.querySelector(s);\n    const trackEl = qb('[data-track]');\n    const nowEl = qb('[data-now]');\n    const wasEl = qb('[data-was]');\n    const unitEl = qb('[data-unit]');\n    const noteEl = qb('[data-note]');\n    const go = qb('[data-go]');\n    const addBtn = qb('[data-add]');\n    const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    const money = (c) => {\n      const v = Math.max(0, c) / 100;\n      const f = v % 1 ? 2 : 0;\n      try {\n        return new Intl.NumberFormat(d.locale || 'en-AE', {\n          style: 'currency', currency: d.currency || 'AED',\n          minimumFractionDigits: f, maximumFractionDigits: f, numberingSystem: 'latn'\n        }).format(v);\n      } catch (e) { return (d.currency || 'AED') + ' ' + v.toFixed(f); }\n    };\n\n    tiles.forEach((t) => {\n      const isScent = /(^|\\s)[UEK]-\\d+/i.test(t.dataset.title || '');\n      if (!isScent || !t.dataset.id || !t.dataset.price) t.remove();\n    });\n    tiles = [...root.querySelectorAll('[data-tile]')];\n    if (!tiles.length) return;\n\n    const picked = [];\n    const UNIT = Number(d.unit || tiles[0].dataset.price || 5500);\n    const EACH = [0, UNIT, Number(d.each2 || UNIT), Number(d.each3 || UNIT), Number(d.each4 || UNIT)];\n    const eachFor = (n) => EACH[Math.min(Math.max(n, 1), 4)];\n\n    /* How many of one bottle the shelf may hold: its real count, whatever the\n       oversell setting says. Two in stock means two on the shelf \u2014 letting a\n       shopper take four only moves the disappointment to the cart, or to the\n       packing table. A variant with no inventory tracking has no ceiling. */\n    const capOf = (t) => {\n      if (t.dataset.tracked !== 'true') return MAXPER;\n      const stock = Number(t.dataset.stock || 0);\n      return Math.min(Math.max(stock, 0), MAXPER);\n    };\n    const countOf = (t) => picked.reduce((n, x) => n + (x === t ? 1 : 0), 0);\n\n    const track = (ev, extra) => {\n      try {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push(Object.assign({ event: ev, item_list_name: 'Frequence Shelf' }, extra || {}));\n      } catch (e) {}\n    };\n\n    const save = () => {\n      try { sessionStorage.setItem(KEY, JSON.stringify(picked.map((t) => t.dataset.id))); } catch (e) {}\n    };\n\n    function scrollTo(el) {\n      if (!el) return;\n      const offset = Math.min(154, Math.max(88, window.innerHeight * 0.14));\n      const top = el.getBoundingClientRect().top + window.pageYOffset - offset;\n      window.scrollTo({ top: Math.max(0, top), behavior: reduce ? 'auto' : 'smooth' });\n    }\n\n    function revealPicker() {\n      scrollTo(pick);\n      if (grid) grid.scrollIntoView({ behavior: reduce ? 'auto' : 'smooth', block: 'nearest' });\n    }\n\n    let shown = 0, tweenId = 0;\n    function tweenTo(target) {\n      cancelAnimationFrame(tweenId);\n      nowEl.textContent = money(target);\n      if (reduce || shown === target) { shown = target; return; }\n      const from = shown, delta = target - from, t0 = performance.now();\n      const step = (t) => {\n        const p = Math.min(1, (t - t0) / 320);\n        const e = 1 - Math.pow(1 - p, 3);\n        nowEl.textContent = money(Math.round((from + delta * e) / 100) * 100);\n        if (p < 1) tweenId = requestAnimationFrame(step);\n        else { shown = target; nowEl.textContent = money(target); }\n      };\n      tweenId = requestAnimationFrame(step);\n    }\n\n    function fly(tile, count) {\n      const slot = trackEl.children[Math.min(count, 4) - 1];\n      if (!slot) return;\n      const settle = () => {\n        slot.classList.remove('is-new');\n        void slot.offsetWidth;\n        slot.classList.add('is-new');\n      };\n      const img = tile.querySelector('[data-thumb]');\n      if (reduce || !img) { settle(); return; }\n      const a = img.getBoundingClientRect();\n      const b = slot.getBoundingClientRect();\n      if (!a.width || !b.width) { settle(); return; }\n      const ghost = img.cloneNode(true);\n      ghost.className = 'freq__fly';\n      ghost.style.left = a.left + 'px';\n      ghost.style.top = a.top + 'px';\n      ghost.style.width = a.width + 'px';\n      ghost.style.height = a.height + 'px';\n      document.body.appendChild(ghost);\n      const dx = (b.left + b.width / 2) - (a.left + a.width / 2);\n      const dy = (b.top + b.height / 2) - (a.top + a.height / 2);\n      const sc = Math.max(0.2, Math.min(b.height / a.height, 1));\n      requestAnimationFrame(() => {\n        ghost.style.transform = 'translate(' + dx + 'px,' + dy + 'px) scale(' + sc + ')';\n        ghost.style.opacity = '.25';\n      });\n      setTimeout(() => ghost.remove(), 480);\n      setTimeout(settle, 360);\n    }\n\n    let flashId = 0;\n    function flash(text, cls) {\n      clearTimeout(flashId);\n      noteEl.textContent = text;\n      noteEl.className = 'freq__note ' + (cls || '');\n      flashId = setTimeout(() => { noteEl.className = 'freq__note'; render(); }, 4200);\n    }\n\n    /* sub is the bottles at full price, goods what the ladder charges for\n       them, saved the difference. Delivery is charged below SHIP_AT only. */\n    function sums() {\n      const n = picked.length;\n      const sub = picked.reduce((s, t) => s + Number(t.dataset.price || 0), 0);\n      const each = n ? eachFor(n) : 0;\n      const goods = n * each;\n      const ship = n === 0 || goods >= SHIP_AT ? 0 : SHIP;\n      return { n, sub, each, goods, ship, total: goods + ship, saved: Math.max(0, sub - goods) };\n    }\n\n    function ensureMarkup(t) {\n      if (t.querySelector('.freq__name')) return;\n      t.textContent = '';\n      const el = (tag, cls, text) => {\n        const e = document.createElement(tag);\n        if (cls) e.className = cls;\n        if (text != null) e.textContent = text;\n        return e;\n      };\n      const shot = el('span', 'freq__shot');\n      const img = el('img');\n      img.src = t.dataset.image || '';\n      img.alt = t.dataset.title || '';\n      img.loading = 'lazy';\n      img.width = 150;\n      img.height = 150;\n      img.setAttribute('data-thumb', '');\n      shot.appendChild(img);\n      t.appendChild(shot);\n      const body = el('span', 'freq__body');\n      if (t.dataset.code) body.appendChild(el('span', 'freq__code', t.dataset.code));\n      body.appendChild(el('span', 'freq__name', t.dataset.name || t.dataset.title || ''));\n      const price = el('span', 'freq__price');\n      const was = Number(t.dataset.was || 0);\n      if (was > 0) price.appendChild(el('s', '', money(was)));\n      price.appendChild(el('b', '', money(Number(t.dataset.price || 0))));\n      if (t.dataset.offText) price.appendChild(el('span', 'freq__off', t.dataset.offText));\n      body.appendChild(price);\n      if (t.dataset.stockText) body.appendChild(el('span', 'freq__low', t.dataset.stockText));\n      t.appendChild(body);\n    }\n\n    function paintTile(t) {\n      ensureMarkup(t);\n      const n = countOf(t);\n      t.classList.toggle('is-on', n > 0);\n      t.classList.toggle('is-max', n > 0 && n >= capOf(t));\n      t.setAttribute('aria-pressed', n > 0 ? 'true' : 'false');\n\n      let tick = t.querySelector('.freq__tick');\n      if (!tick) {\n        tick = document.createElement('span');\n        tick.className = 'freq__tick';\n        t.insertBefore(tick, t.firstChild);\n      }\n      tick.textContent = n > 1 ? '\u00D7' + n : '\u2713';\n\n      let minus = t.querySelector('.freq__minus');\n      if (n > 0 && !minus) {\n        minus = document.createElement('span');\n        minus.className = 'freq__minus';\n        minus.setAttribute('role', 'button');\n        minus.setAttribute('tabindex', '0');\n        minus.setAttribute('aria-label', 'Remove one ' + (t.dataset.name || ''));\n        minus.textContent = '\u2212';\n        minus.addEventListener('click', (e) => { e.stopPropagation(); removeOne(t); });\n        minus.addEventListener('keydown', (e) => {\n          if (e.key !== 'Enter' && e.key !== ' ') return;\n          e.preventDefault(); e.stopPropagation(); removeOne(t);\n        });\n        t.appendChild(minus);\n      } else if (n === 0 && minus) {\n        minus.remove();\n      }\n    }\n\n    let wasBest = false;\n    function render() {\n      const s = sums();\n      const step = Math.min(s.n, 4);\n\n      tiles.forEach(paintTile);\n\n      [...trackEl.children].forEach((li, i) => {\n        li.classList.toggle('is-done', i + 1 < step);\n        li.classList.toggle('is-now', i + 1 === step);\n      });\n\n      if (s.n) tweenTo(s.goods); else { shown = 0; nowEl.textContent = '\u2014'; }\n      wasEl.textContent = s.saved > 0 ? money(s.sub) : '';\n      unitEl.textContent = !s.n ? ''\n        : (s.ship ? '+ ' + money(s.ship) + ' ' + d.lDelivery\n                  : money(s.each) + ' ' + d.lBottle + ' \u00B7 ' + d.lFree);\n\n      go.disabled = s.n === 0;\n      go.classList.toggle('is-ready', s.n > 0);\n      go.textContent = s.n ? d.lCheckout + ' \u2014 ' + money(s.goods) : d.lCheckout;\n\n      addBtn.disabled = s.n === 0;\n      addBtn.textContent = s.n ? d.lBag + ' (' + s.n + ')' : d.lBag;\n\n      const best = s.n >= 4;\n      if (best && !wasBest) {\n        bar.classList.remove('is-hit');\n        void bar.offsetWidth;\n        bar.classList.add('is-hit');\n      }\n      wasBest = best;\n\n      /* The bar rises with the first bottle: an empty bar is only a box of dashes. */\n      const up = pick.classList.contains('is-on') && s.n > 0;\n      bar.classList.toggle('is-up', up);\n      document.body.classList.toggle('freq-bar-open', up);\n      if (noteEl.className.indexOf('is-good') > -1 || noteEl.className.indexOf('is-error') > -1) return;\n\n      const p = (text, cents) => text.replace('{p}', money(cents));\n      let note = d.lStart;\n      if (s.n === 1) note = p(d.lNext, EACH[2]) + d.lNextFree;\n      else if (s.n === 2) note = p(d.lNext, EACH[3]);\n      else if (s.n === 3) note = p(d.lNextBest, EACH[4]);\n      else if (s.n === 4) note = p(d.lBest, EACH[4]) + ' \u00B7 ' + d.lSave + ' ' + money(s.saved);\n      else if (s.n > 4) note = d.lSave + ' ' + money(s.saved) + ' \u00B7 ' + p(d.lExtra, EACH[4]);\n      noteEl.textContent = note;\n    }\n\n    function addOne(tile, quiet) {\n      if (countOf(tile) >= capOf(tile)) {\n        if (!quiet) flash(d.lMax || d.lFail, 'is-error');\n        return false;\n      }\n      picked.push(tile);\n      if (quiet) return true;\n      save();\n      render();\n      track('select_item', { item_name: tile.dataset.title, item_id: tile.dataset.pid, quantity: countOf(tile) });\n      fly(tile, picked.length);\n      return true;\n    }\n\n    function removeOne(tile, quiet) {\n      const i = picked.lastIndexOf(tile);\n      if (i < 0) return false;\n      picked.splice(i, 1);\n      if (quiet) return true;\n      save();\n      render();\n      return true;\n    }\n\n    tiles.forEach((t) => t.addEventListener('click', () => addOne(t)));\n\n    function filter(cat) {\n      chips.forEach((c) => c.classList.toggle('is-on', c.dataset.filter === cat));\n      tiles.forEach((t) => { t.style.display = (cat === 'all' || t.dataset.cat === cat) ? '' : 'none'; });\n      if (grid) grid.scrollTo({ left: 0, behavior: reduce ? 'auto' : 'smooth' });\n    }\n\n    function open(cat, quiet) {\n      pick.classList.add('is-on');\n      filter(cat);\n      render();\n      if (quiet) return;\n      requestAnimationFrame(revealPicker);\n      setTimeout(revealPicker, 280);\n    }\n\n    root.addEventListener('click', (event) => {\n      const opener = event.target.closest('[data-open]');\n      if (!opener || !root.contains(opener)) return;\n      event.preventDefault();\n      open(opener.dataset.open);\n    });\n    chips.forEach((c) => c.addEventListener('click', () => filter(c.dataset.filter)));\n    async function refreshCart() {\n      try {\n        const res = await fetch(d.cartUrl, { headers: { Accept: 'application/json' } });\n        if (!res.ok) return;\n        const cart = await res.json();\n        document.querySelectorAll('[data-cart-count], .t4s-pr-count').forEach((n) => { n.textContent = cart.item_count; });\n        ['cart:refresh', 'cart:updated', 't4s:update_cart'].forEach((ev) =>\n          document.dispatchEvent(new CustomEvent(ev, { detail: { cart } })));\n      } catch (e) {}\n    }\n\n    /* Open the bag drawer the way the theme's own Add to bag does: flag the add\n       as a success and let T4S fetch and render the bag. With the theme setting\n       \"Action when an item is added\" on \"Show drawer cart\" (the default), that\n       render opens the drawer. Returns false when the theme's cart code is absent. */\n    function openBag() {\n      try {\n        if (window.T4SThemeSP && T4SThemeSP.Cart && typeof T4SThemeSP.Cart.getToFetch === 'function') {\n          T4SThemeSP.isATCSuccess = true;\n          T4SThemeSP.Cart.getToFetch();\n          return true;\n        }\n      } catch (e) {}\n      return false;\n    }\n\n    function lines() {\n      const byId = new Map();\n      picked.forEach((t) => {\n        const id = Number(t.dataset.id);\n        byId.set(id, (byId.get(id) || 0) + 1);\n      });\n      return [...byId].map(([id, quantity]) => ({ id, quantity }));\n    }\n\n    let busy = false;\n    async function post(toCheckout, btn) {\n      if (busy) return;\n      const s = sums();\n      if (!s.n) return;\n      busy = true;\n      const label = btn.textContent;\n      btn.classList.add('is-busy');\n      btn.disabled = true;\n      btn.textContent = d.lWorking;\n      try {\n        const res = await fetch(d.addUrl, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items: lines() })\n        });\n        const payload = await res.json().catch(() => ({}));\n        if (!res.ok) throw new Error(payload.description || payload.message || d.lFail);\n        track('add_to_cart', { currency: d.currency, value: s.total / 100, quantity: s.n, bundle_tier: 'shelf_of_' + s.n });\n        try { sessionStorage.removeItem(KEY); } catch (e) {}\n\n        if (toCheckout) {\n          track('begin_checkout', { currency: d.currency, value: s.total / 100, quantity: s.n });\n          window.location.href = d.checkout;\n          return;\n        }\n\n        picked.length = 0;\n        wasBest = false;\n        if (!openBag()) await refreshCart();\n        busy = false;\n        btn.classList.remove('is-busy');\n        btn.disabled = false;\n        btn.textContent = label;\n        render();\n        flash(d.lAdded, 'is-good');\n      } catch (err) {\n        busy = false;\n        btn.classList.remove('is-busy');\n        btn.disabled = false;\n        btn.textContent = label;\n        flash(err.message || d.lFail, 'is-error');\n      }\n    }\n\n    go.addEventListener('click', () => post(true, go));\n    addBtn.addEventListener('click', () => post(false, addBtn));\n\n    try {\n      const saved = JSON.parse(sessionStorage.getItem(KEY) || '[]');\n      saved.forEach((id) => {\n        const t = tiles.find((x) => x.dataset.id === id);\n        if (t) addOne(t, true);\n      });\n    } catch (e) {}\n\n    /* The home page photographs link here with ?cat=women|men|unisex. */\n    let startCat = 'all';\n    try { startCat = new URLSearchParams(location.search).get('cat') || 'all'; } catch (e) {}\n    if (['women', 'men', 'unisex', 'all'].indexOf(startCat) < 0) startCat = 'all';\n    open(startCat, true);\n\n    render();\n\n    if ('IntersectionObserver' in window) {\n      const io = new IntersectionObserver((es) => es.forEach((e) => {\n        if (!e.isIntersecting) return;\n        track('view_item_list', { items_count: tiles.length });\n        io.disconnect();\n      }), { threshold: 0.25 });\n      io.observe(root);\n    }\n  }\n\n  const boot = () => document.querySelectorAll('[data-freq]').forEach(initFrequenceShelf);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n  document.addEventListener('shopify:section:load', boot);\n})();"],
  "mappings": "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",
  "names": []
}
