{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/bhr-quick-add.js?z=1788514301758"],
  "sourcesContent": ["/* Bh\u1E5Bngi quick-add dialog - reads window.BHR_QUICK (emitted by\n   snippets/bhr-quick-add.liquid from real product/variant data) and adds to\n   cart through the same `bhr:cart:add` event the product page dispatches,\n   handled by bhr-cart.js. This file never talks to the network itself. */\n(function () {\n  'use strict';\n\n  var FREE_SHIP_OVER = 59900; // \u20B9599, in cents - matches the price/variant unit\n  var FLAT_SHIP = 90;\n\n  var dialog = document.getElementById('bhr-quick-add');\n  if (!dialog) return;\n  var DATA = window.BHR_QUICK || {};\n  var SHOT_LABELS = window.BHR_QUICK_SHOT_LABELS || ['Jar front', 'Honey pouring', 'Label detail', 'Hive comb'];\n\n  var el = function (sel) { return dialog.querySelector(sel); };\n  var state = { key: null, size: 0, qty: 1, img: 0 };\n\n  /* Pinch/double-tap zoom on whichever image is currently on display.\n     window.BHR_IMAGE_ZOOM is deferred but loads BEFORE this file in\n     theme.liquid (both deferred scripts run in document order), so it is\n     already there - no DOMContentLoaded wait needed here the way the PDP's\n     inline script does.\n     Attached to the whole wrap, not just the gallery strip, because desktop\n     now has two zones - the hero display and the thumbnail row below it -\n     and a gesture can start on either. The getter picks whichever one is\n     actually the display: the hero on desktop (offsetParent is null while\n     it's display:none on mobile), the active frame on mobile, where the\n     swiped-to frame IS the display, same as before this changed. */\n  var qaGalleryWrap = el('.bhr-qa__gallery-wrap');\n  var qaZoom = (qaGalleryWrap && window.BHR_IMAGE_ZOOM)\n    ? window.BHR_IMAGE_ZOOM.attach(qaGalleryWrap, function () {\n        var heroImg = el('[data-qa-hero] img');\n        if (heroImg && heroImg.offsetParent) return heroImg;\n        return el('[data-qa-gallery] .bhr-qa__frame.is-active img');\n      })\n    : null;\n\n  function money(cents) { return '\u20B9' + Math.round(cents / 100).toLocaleString('en-IN'); }\n\n  function render() {\n    var p = DATA[state.key];\n    if (!p) return;\n    /* render() below wipes and rebuilds every frame's DOM regardless of what\n       changed (size, qty, a fresh open()...), so whatever the zoom module\n       was holding onto is about to go stale - reset it every time, not only\n       when the active frame index changes. */\n    if (qaZoom) qaZoom.reset();\n    var size = p.sizes[Math.min(state.size, p.sizes.length - 1)];\n    var total = size.p * state.qty;\n\n    el('[data-qa=\"tier\"]').textContent = p.tier;\n    el('[data-qa=\"name\"]').textContent = p.name;\n    el('[data-qa=\"eng\"]').textContent = p.eng || '';\n    el('[data-qa-best]').hidden = !p.bestseller;\n\n    /* Rating comes from the reviews.* metafields Judge.me maintains. The band\n       always shows; a product nobody has reviewed gets empty stars and \"No\n       reviews yet\", never filled stars or a 0.0 score - an unrated jar is not\n       a badly rated one. The score is dropped entirely in that state rather\n       than printed as a zero. */\n    var rating = parseFloat(p.rating);\n    var rcount = parseInt(p.rcount, 10);\n    var hasReviews = !isNaN(rating) && !isNaN(rcount) && rcount > 0;\n    el('[data-qa-stars-fill]').style.width = hasReviews ? (rating / 5 * 100) + '%' : '0%';\n    el('[data-qa-score]').textContent = hasReviews ? rating.toFixed(1) : '';\n    el('[data-qa-score]').hidden = !hasReviews;\n    el('[data-qa-review]').textContent = hasReviews\n      ? 'from ' + rcount + (rcount === 1 ? ' review' : ' reviews')\n      : 'No reviews yet';\n\n    el('[data-qa-href]').setAttribute('href', p.href);\n    el('[data-qa-review]').setAttribute('href', p.href + '#reviews');\n    el('[data-qa=\"qty\"]').value = state.qty;\n    el('[data-qa=\"total\"]').textContent = money(total);\n    el('[data-qa=\"ship\"]').textContent = total >= FREE_SHIP_OVER\n      ? 'Free shipping - above ' + money(FREE_SHIP_OVER)\n      : 'Flat \u20B9' + FLAT_SHIP + ' shipping below ' + money(FREE_SHIP_OVER);\n    el('[data-qa-note]').hidden = p.sizes.length > 1;\n\n    var cta = el('[data-qa-add]');\n    cta.textContent = 'Add to cart';\n    cta.disabled = !size.id;\n\n    /* gallery - real images when they exist, a labelled placeholder frame\n       (matching the product page's own fallback) when they don't */\n    var gal = el('[data-qa-gallery]');\n    gal.innerHTML = '';\n    var frames = p.imgs.length > 0 ? p.imgs : SHOT_LABELS.map(function (label) { return { placeholder: label }; });\n\n    /* hero - desktop-only main display (hidden on mobile via CSS, where the\n       swipeable strip below is the display instead). Always shows the frame\n       at state.img; every frame still gets its own permanent thumbnail in\n       the loop below, unlike the old grow-the-active-frame layout this\n       replaced. */\n    var hero = el('[data-qa-hero]');\n    var activeFrame = frames[Math.min(state.img, frames.length - 1)];\n    hero.innerHTML = '';\n    if (activeFrame.placeholder) {\n      hero.innerHTML = '<span>[IMAGE - ' + p.name + ', ' + activeFrame.placeholder + ']</span>';\n    } else {\n      var heroImg = document.createElement('img');\n      heroImg.src = activeFrame.src;\n      heroImg.alt = activeFrame.alt || p.name;\n      hero.appendChild(heroImg);\n    }\n\n    frames.forEach(function (frame, i) {\n      var b = document.createElement('button');\n      b.type = 'button';\n      b.className = 'bhr-qa__frame' + (i === state.img ? ' is-active' : '');\n      if (frame.placeholder) {\n        b.classList.add('bhr-hatch');\n        b.setAttribute('aria-label', 'Show ' + frame.placeholder);\n        b.innerHTML = '<span>[IMAGE - ' + p.name + ', ' + frame.placeholder + ']</span>';\n      } else {\n        b.setAttribute('aria-label', frame.alt || p.name);\n        var img = document.createElement('img');\n        img.src = frame.src;\n        img.alt = frame.alt || p.name;\n        img.loading = 'lazy';\n        b.appendChild(img);\n      }\n      b.setAttribute('aria-pressed', String(i === state.img));\n      b.addEventListener('click', function () { state.img = i; render(); });\n      gal.appendChild(b);\n    });\n\n    /* Page dots - one per frame, current one amber and larger. Hidden\n       entirely at one frame: there is nothing to paginate, and a single dot\n       would just read as an unexplained mark rather than a position\n       indicator. Rebuilt here alongside the frames themselves so the two\n       can never disagree about how many there are. */\n    var dots = el('[data-qa-dots]');\n    dots.innerHTML = '';\n    dots.hidden = frames.length <= 1;\n    if (!dots.hidden) {\n      frames.forEach(function (_, i) {\n        var d = document.createElement('span');\n        d.className = 'bhr-qa__dot' + (i === state.img ? ' is-on' : '');\n        dots.appendChild(d);\n      });\n    }\n\n    /* size options */\n    var row = el('[data-qa-sizes]');\n    row.innerHTML = '';\n    p.sizes.forEach(function (s, i) {\n      var b = document.createElement('button');\n      b.type = 'button';\n      b.className = 'bhr-size';\n      b.setAttribute('aria-pressed', String(i === state.size));\n      b.setAttribute('data-price', s.p);\n      b.innerHTML = '<span class=\"bhr-size__g\">' + s.g + '</span><span class=\"bhr-size__p\">' + money(s.p) + '</span>';\n      b.addEventListener('click', function () { state.size = i; render(); });\n      row.appendChild(b);\n    });\n  }\n\n  /* Keeps the frame/dot \"current\" state in sync with state.img WITHOUT going\n     through render(). render() wipes and rebuilds the gallery's innerHTML,\n     which would reset the swipeable strip's own scroll position back to 0 -\n     exactly the position the scroll handler below is reading from mid-swipe.\n     Calling render() there would fight the very swipe it is tracking. This\n     only ever toggles classes on nodes that already exist. */\n  function syncActive() {\n    var gal = el('[data-qa-gallery]');\n    Array.prototype.forEach.call(gal.children, function (b, i) {\n      var on = i === state.img;\n      b.classList.toggle('is-active', on);\n      b.setAttribute('aria-pressed', String(on));\n    });\n    var dots = el('[data-qa-dots]');\n    Array.prototype.forEach.call(dots.children, function (d, i) {\n      d.classList.toggle('is-on', i === state.img);\n    });\n  }\n\n  /* MOBILE ONLY - matches mqSheet below. Desktop's gallery is a wrapped grid\n     with overflow-x:visible (no horizontal scroll to track at all, so this\n     is inert there regardless); mobile is a one-frame-per-swipe strip with\n     no other affordance that reports which frame is currently in view.\n     Without this, swiping past a frame (as opposed to tapping one) never\n     touched state.img at all, so the new dots would freeze at whichever\n     frame was last tapped - or never move from 0 if the user only ever\n     swiped. Index is computed from scroll position, not counted via\n     IntersectionObserver: with every frame exactly one gallery-width wide,\n     scrollLeft / clientWidth is an exact integer at rest and needs no\n     threshold tuning. rAF-throttled the same way the How It's Made\n     timeline's scroll handler is, so this never runs more than once per\n     paint even though 'scroll' can fire far more often than that. */\n  var galScrollTicking = false;\n  function onGalleryScroll() {\n    if (galScrollTicking) return;\n    galScrollTicking = true;\n    requestAnimationFrame(function () {\n      galScrollTicking = false;\n      var gal = el('[data-qa-gallery]');\n      if (!gal || !gal.clientWidth || !gal.children.length) return;\n      var idx = Math.round(gal.scrollLeft / gal.clientWidth);\n      idx = Math.max(0, Math.min(idx, gal.children.length - 1));\n      if (idx !== state.img) { state.img = idx; syncActive(); if (qaZoom) qaZoom.reset(); }\n    });\n  }\n  el('[data-qa-gallery]').addEventListener('scroll', onGalleryScroll, { passive: true });\n\n  /* Preselect 250g - the hero jar and the best per-gram value - to match the\n     product page's own default. Falls back to the middle size, then the only\n     size, so a Reserve product (250g-only) and any future size line-up both\n     still resolve to something valid. */\n  function defaultSizeIndex(p) {\n    for (var i = 0; i < p.sizes.length; i++) {\n      if (String(p.sizes[i].g).toLowerCase().replace(/\\s+/g, '') === '250g') return i;\n    }\n    return p.sizes.length > 1 ? 1 : 0;\n  }\n\n  /* MOBILE ONLY (< 768px). The bottom sheet's rise and fall is transition-\n     driven off .is-open / .is-closing; desktop keeps its original keyframe\n     entrance on [open] and closes instantly, so none of this runs there.\n     Two things have to be true for the sheet to animate every single time:\n\n       1. the panel must be painted at its from-state BEFORE the class that\n          transitions it away is added - hence the double rAF. One frame is\n          not enough: showModal() promotes the dialog to the top layer and\n          render() has just rewritten the gallery and size chips, so the\n          first frame after that is still resolving style and layout, and a\n          class added inside it gets folded into the same style pass with no\n          transition to run. The second rAF guarantees a settled paint to\n          transition from.\n       2. the panel must not be mid-transition when the next open starts -\n          hence clearing is-closing and cancelling the pending close timer. */\n  var SHEET_MS = 340;\n  var mqSheet = window.matchMedia('(max-width: 767px)');\n  var mqStill = window.matchMedia('(prefers-reduced-motion: reduce)');\n  var closeTimer = null;\n  /* The sheet transition only exists below 768px and only when motion is\n     allowed. Anywhere else, open and close are immediate - which is exactly\n     what desktop did before the sheet was added. */\n  function animatedSheet() { return mqSheet.matches && !mqStill.matches; }\n\n  function open(key) {\n    var p = DATA[key];\n    if (!p) return;\n    state = { key: key, size: defaultSizeIndex(p), qty: 1, img: 0, added: false };\n    render();\n    clearTimeout(closeTimer);\n    closeTimer = null;\n    dialog.classList.remove('is-closing', 'is-open');\n    if (!dialog.open) dialog.showModal(); // native: focus trap + Escape\n    /* showModal() just focused the close button, and focus scrolls its\n       scrollable ancestors - which on browsers without overflow:clip means\n       the dialog itself (UA dialog:modal{overflow:auto}) has been scrolled\n       down to the off-screen sheet, defeating the slide. Undo it before the\n       from-state is painted. Under overflow:clip this is a no-op. */\n    dialog.scrollTop = 0;\n    document.body.style.overflow = 'hidden';\n    if (!animatedSheet()) return;\n    requestAnimationFrame(function () {\n      requestAnimationFrame(function () { dialog.classList.add('is-open'); });\n    });\n  }\n\n  function close() {\n    if (!dialog.open || closeTimer) return;\n    dialog.classList.remove('is-open');\n    if (!animatedSheet()) { finishClose(); return; }\n    dialog.classList.add('is-closing');\n    /* A timer rather than transitionend: a backgrounded tab can drop the\n       event entirely, which would strand the dialog open with no way out. */\n    closeTimer = setTimeout(finishClose, SHEET_MS);\n  }\n\n  function finishClose() {\n    closeTimer = null;\n    dialog.classList.remove('is-closing', 'is-open');\n    if (dialog.open) dialog.close();\n  }\n\n  dialog.addEventListener('close', function () {\n    /* Covers any close we did not drive ourselves (form method=dialog, a\n       browser-level dismissal) - never leave the page unscrollable. */\n    clearTimeout(closeTimer);\n    closeTimer = null;\n    dialog.classList.remove('is-closing', 'is-open');\n    document.body.style.overflow = '';\n  });\n  /* Escape fires `cancel` and would close instantly, skipping the sheet's\n     exit. Desktop has no exit to skip, so it is left to the native path. */\n  dialog.addEventListener('cancel', function (e) {\n    if (!animatedSheet()) return;\n    e.preventDefault();\n    close();\n  });\n  dialog.addEventListener('click', function (e) { if (e.target === dialog) close(); });\n  el('[data-qa-close]').addEventListener('click', close);\n\n  document.addEventListener('click', function (e) {\n    var trigger = e.target.closest('[data-bhr-quick-add]');\n    if (trigger) { e.preventDefault(); open(trigger.getAttribute('data-bhr-quick-add')); }\n  });\n\n  dialog.querySelectorAll('[data-qa-qty]').forEach(function (btn) {\n    btn.addEventListener('click', function () {\n      var d = parseInt(btn.getAttribute('data-qa-qty'), 10);\n      state.qty = Math.min(9, Math.max(1, state.qty + d));\n      render();\n    });\n  });\n\n  /* add to cart \u2192 the same event the product page uses, so it goes through\n     the one real Cart AJAX + drawer-refresh pipeline in bhr-cart.js */\n  el('[data-qa-add]').addEventListener('click', function () {\n    var p = DATA[state.key];\n    if (!p) return;\n    var size = p.sizes[Math.min(state.size, p.sizes.length - 1)];\n    if (!size.id) return;\n    var cta = el('[data-qa-add]');\n    var original = cta.textContent;\n    cta.disabled = true;\n    document.dispatchEvent(new CustomEvent('bhr:cart:add', {\n      detail: {\n        id: size.id,\n        quantity: state.qty,\n        done: function (ok) {\n          cta.disabled = false;\n          if (ok) {\n            /* Closes on success rather than sitting on an \"Added to cart\"\n               state - the cart drawer itself (bhr-cart.js opens it on this\n               same add) is the confirmation now. */\n            close();\n          } else {\n            cta.textContent = 'Could not add - try again';\n            setTimeout(function () { cta.textContent = original; }, 2500);\n          }\n        }\n      }\n    }));\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
