{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/tb-product.js?x=1794560351225"],
  "sourcesContent": ["/* Toybox product page: gallery with zoom, variant and quantity, gift wrap, PIN check, add to cart, the\n   \"In your cart\" row (change quantity or remove, keeping gift wrap lines matched), recommendations.\n   Shopify quietly caps quantities at the stock on hand, so after every add or change the cart is read\n   back and the message reports what really happened. */\n\nclass TbGallery extends HTMLElement {\n  connectedCallback() {\n    this.track = this.querySelector('[data-track]');\n    this.slides = [...this.querySelectorAll('[data-slide]')];\n    this.thumbs = [...this.querySelectorAll('[data-thumb]')];\n    this.count = this.querySelector('[data-count]');\n    this.dialog = this.querySelector('dialog');\n    this.i = 0;\n    if (!this.track) return;\n    this.querySelector('[data-prev]')?.addEventListener('click', () => this.go(this.i - 1));\n    this.querySelector('[data-next]')?.addEventListener('click', () => this.go(this.i + 1));\n    this.thumbs.forEach((t, k) => t.addEventListener('click', () => this.go(k)));\n    this.track.addEventListener('scroll', () => { cancelAnimationFrame(this.raf); this.raf = requestAnimationFrame(() => this.sync()); }, { passive: true });\n    this.querySelector('[data-zoom-open]')?.addEventListener('click', () => this.openZoom());\n    if (this.dialog) {\n      this.zimg = this.dialog.querySelector('img');\n      this.dialog.querySelector('[data-zoom-close]').addEventListener('click', () => this.dialog.close());\n      this.dialog.querySelector('[data-zoom-toggle]').addEventListener('click', (e) => this.toggleZoom(e));\n      this.dialog.querySelector('[data-zoom-stage]').addEventListener('click', (e) => this.toggleZoom(e, true));\n      this.dialog.querySelector('[data-zoom-prev]')?.addEventListener('click', () => { this.go(this.i - 1); this.setZoomImg(); });\n      this.dialog.querySelector('[data-zoom-next]')?.addEventListener('click', () => { this.go(this.i + 1); this.setZoomImg(); });\n      this.dialog.addEventListener('close', () => this.dialog.classList.remove('is-zoomed'));\n    }\n    this.onVariant = (e) => {\n      const id = e.detail && e.detail.mediaId;\n      if (!id) return;\n      const k = this.slides.findIndex((s) => s.dataset.mediaId === String(id));\n      if (k > -1) this.go(k);\n    };\n    document.addEventListener('tb:variant', this.onVariant);\n  }\n  /* Product cards in the phone viewer are removed when it closes; stop listening then (2026-11-07). */\n  disconnectedCallback() { if (this.onVariant) document.removeEventListener('tb:variant', this.onVariant); }\n  go(k) {\n    const n = this.slides.length;\n    if (!n) return;\n    this.i = (k + n) % n;\n    this.track.scrollTo({ left: this.i * this.track.clientWidth });\n    this.mark();\n  }\n  sync() { this.i = Math.round(this.track.scrollLeft / Math.max(1, this.track.clientWidth)); this.mark(); }\n  mark() {\n    this.thumbs.forEach((t, j) => t.setAttribute('aria-current', j === this.i ? 'true' : 'false'));\n    this.slides.forEach((s, j) => s.setAttribute('aria-hidden', j === this.i ? 'false' : 'true'));\n    if (this.count) this.count.textContent = (this.i + 1) + ' / ' + this.slides.length;\n  }\n  setZoomImg() { const s = this.slides[this.i]; if (s && this.zimg) { this.zimg.src = s.dataset.zoom; this.zimg.alt = s.querySelector('img')?.alt || ''; } this.dialog.classList.remove('is-zoomed'); }\n  openZoom() { if (!this.dialog) return; this.setZoomImg(); this.dialog.showModal(); }\n  toggleZoom(e, fromStage) {\n    const on = !this.dialog.classList.contains('is-zoomed');\n    if (fromStage && this.zimg && on) {\n      const r = this.zimg.getBoundingClientRect();\n      this.zimg.style.transformOrigin = ((e.clientX - r.left) / r.width * 100) + '% ' + ((e.clientY - r.top) / r.height * 100) + '%';\n    } else if (this.zimg) { this.zimg.style.transformOrigin = '50% 50%'; }\n    this.dialog.classList.toggle('is-zoomed', on);\n    const b = this.dialog.querySelector('[data-zoom-toggle]');\n    if (b) { b.setAttribute('aria-pressed', on ? 'true' : 'false'); b.textContent = on ? 'Zoom out' : 'Zoom in'; }\n  }\n}\ncustomElements.get('tb-gallery') || customElements.define('tb-gallery', TbGallery);\n\nclass TbProductForm extends HTMLElement {\n  connectedCallback() {\n    this.form = this.querySelector('form');\n    if (!this.form) return;\n    try { this.variants = JSON.parse(this.querySelector('[data-variants]')?.textContent || '[]'); } catch (e) { this.variants = []; }\n    this.money = (cents) => {\n      const v = (cents / 100);\n      return '\u20B9' + v.toLocaleString('en-IN', { minimumFractionDigits: v % 1 ? 2 : 0, maximumFractionDigits: 2 });\n    };\n    this.root = (window.Shopify && Shopify.routes && Shopify.routes.root) || '/';\n    this.idInput = this.form.querySelector('[name=\"id\"]');\n    this.qty = this.querySelector('[data-qty]');\n    this.btn = this.querySelector('[data-cta]');\n    this.msg = this.querySelector('[data-added]');\n    this.inCart = this.querySelector('[data-incart]');\n    this.querySelector('[data-variant-select]')?.addEventListener('change', (e) => this.setVariant(e.target.value));\n    this.querySelector('[data-dec]')?.addEventListener('click', () => this.step(-1));\n    this.querySelector('[data-inc]')?.addEventListener('click', () => this.step(1));\n    this.querySelector('[data-incart-dec]')?.addEventListener('click', () => this.changeBy(-1));\n    this.querySelector('[data-incart-inc]')?.addEventListener('click', () => this.changeBy(1));\n    this.querySelector('[data-incart-rm]')?.addEventListener('click', () => this.removeAll());\n    const gift = this.querySelector('[data-gift]');\n    const fields = this.querySelector('[data-gift-fields]');\n    const box = this.querySelector('.tb-gift');\n    gift?.addEventListener('change', () => { fields.hidden = !gift.checked; box.classList.toggle('is-on', gift.checked); fields.querySelectorAll('textarea, input').forEach((f) => f.disabled = !gift.checked); });\n    const ta = this.querySelector('[data-gift-msg]');\n    const cnt = this.querySelector('[data-gift-count]');\n    ta?.addEventListener('input', () => { if (cnt) cnt.textContent = ta.value.length + ' / ' + ta.maxLength; });\n    this.form.addEventListener('submit', (e) => this.submit(e));\n    this.refreshCart();\n    this.onCart = () => this.refreshCart();\n    document.addEventListener('cart:update', this.onCart);\n    // The cart drawer saves with Shopify.actions, which announces shopify:cart:lines-update (not cart:update)\n    // when a change starts. Refresh once it's saved, so \"In your cart\" and the gift wrap note match the drawer.\n    this.onLines = (e) => { const p = e && e.promise; if (p && typeof p.then === 'function') p.then(this.onCart, this.onCart); else setTimeout(this.onCart, 800); };\n    document.addEventListener('shopify:cart:lines-update', this.onLines);\n  }\n  /* Each product card opened in the phone viewer has its own form. Before (2026-11-07; original in\n     assets/bak-20261107-tb-product.js) these kept listening after the viewer closed, so every later cart\n     change fetched the cart once per product ever opened. */\n  disconnectedCallback() {\n    if (this.onCart) document.removeEventListener('cart:update', this.onCart);\n    if (this.onLines) document.removeEventListener('shopify:cart:lines-update', this.onLines);\n  }\n\n  /* One cart fetch feeds both the order gift wrap note and the \"In your cart\" row. */\n  async refreshCart() {\n    if (!this.isConnected) return;\n    const cart = await TbProductForm.getCart(this.root);\n    if (!cart) return;\n    this.cart = cart;\n    this.checkOrderWrap();\n    this.renderInCart();\n  }\n  /* Several forms (the product page and the cards around it in the phone viewer) refresh at the same\n     moment, for example on one cart:update. They share one request when it started under 50 ms ago.\n     A refresh after an add or a change always starts its own request, so it never sees an older cart. */\n  static getCart(root) {\n    const now = performance.now();\n    const c = TbProductForm.cartReq;\n    if (c && now - c.at < 50) return c.p;\n    const p = fetch(root + 'cart.js', { headers: { Accept: 'application/json' } })\n      .then((r) => (r.ok ? r.json() : null))\n      .catch(() => null);\n    TbProductForm.cartReq = { at: now, p };\n    return p;\n  }\n\n  /* When the whole order is already being gift wrapped from the cart, new items are wrapped\n     automatically, so the per-item gift wrap option is replaced with a short note. */\n  checkOrderWrap() {\n    const box = this.querySelector('.tb-gift');\n    if (!box || !this.cart) return;\n    const on = (this.cart.items || []).some((i) => i.handle === 'gift-wrap' && i.properties && i.properties.Wrap === 'Whole order');\n    const gift = this.querySelector('[data-gift]');\n    if (on && gift && gift.checked) {\n      gift.checked = false;\n      gift.dispatchEvent(new Event('change'));\n    }\n    box.hidden = on;\n    let note = this.querySelector('[data-wrap-note]');\n    if (on && !note) {\n      note = document.createElement('p');\n      note.dataset.wrapNote = '';\n      note.className = 'tb-gift tb-gift--note';\n      note.style.cssText = 'margin:0;flex-direction:row;align-items:center;gap:10px;font-weight:600;font-size:15px';\n      note.textContent = 'Your order is being gift wrapped, so this item will be wrapped too.';\n      box.after(note);\n    }\n    if (note) note.hidden = !on;\n  }\n\n  /* \"In your cart\" row: how many of the selected variant are in the cart, with \u2212 / + and Remove. */\n  linesFor() {\n    const id = String(this.idInput.value);\n    return ((this.cart && this.cart.items) || []).filter((i) => String(i.variant_id) === id && i.handle !== 'gift-wrap');\n  }\n  countFor() { return this.linesFor().reduce((a, l) => a + l.quantity, 0); }\n  renderInCart() {\n    if (!this.inCart || !this.cart) return;\n    const n = this.countFor();\n    this.inCart.hidden = n === 0;\n    if (!n) return;\n    this.inCart.querySelector('[data-incart-text]').textContent = n + ' in your cart';\n    this.inCart.querySelector('[data-incart-qty]').textContent = n;\n    const dec = this.inCart.querySelector('[data-incart-dec]');\n    dec.innerHTML = n === 1\n      ? '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 7h16M10 11v6M14 11v6M6 7l1 13h10l1-13M9 7V4h6v3\"/></svg>'\n      : '<svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.8\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14\"/></svg>';\n    dec.setAttribute('aria-label', n === 1 ? 'Remove from cart' : 'One less in your cart');\n  }\n  /* Gift wrap follows the toys: a wrapped line moves the per-item wrap, an unwrapped one moves the\n     whole-order wrap (if the order is being wrapped). */\n  wrapDelta(updates, line, d) {\n    const wrapped = !!(line.properties && line.properties['Gift wrap'] === 'Yes');\n    const w = (this.cart.items || []).find((i) => i.handle === 'gift-wrap' && ((i.properties || {}).Wrap === 'Whole order') === !wrapped);\n    if (!w) return;\n    const cur = updates[w.key] != null ? updates[w.key] : w.quantity;\n    updates[w.key] = Math.max(0, cur + d);\n  }\n  /* After a capped add, set the per-item wrap line back to the number of wrapped toys. */\n  async fixItemWrap() {\n    const items = (this.cart && this.cart.items) || [];\n    const w = items.find((i) => i.handle === 'gift-wrap' && (i.properties || {}).Wrap !== 'Whole order');\n    if (!w) return;\n    const wrapped = items.filter((i) => i.handle !== 'gift-wrap' && (i.properties || {})['Gift wrap'] === 'Yes').reduce((a, i) => a + i.quantity, 0);\n    if (w.quantity !== wrapped) await this.send({ [w.key]: wrapped });\n  }\n  changeBy(d) {\n    const lines = this.linesFor();\n    if (!lines.length || this.busy) return;\n    const l = lines[0];\n    const updates = { [l.key]: Math.max(0, l.quantity + d) };\n    this.wrapDelta(updates, l, d);\n    this.applyUpdates(updates, { want: this.countFor() + d });\n  }\n  removeAll() {\n    const lines = this.linesFor();\n    if (!lines.length || this.busy) return;\n    const updates = {};\n    lines.forEach((l) => { updates[l.key] = 0; this.wrapDelta(updates, l, -l.quantity); });\n    this.applyUpdates(updates, { want: 0 });\n  }\n  note(text, isError, showLink) {\n    this.msg.classList.toggle('is-error', !!isError);\n    this.msg.querySelector('[data-added-text]').textContent = text;\n    this.msg.querySelector('a').hidden = !showLink;\n    this.msg.hidden = false;\n  }\n  async send(updates) {\n    const actions = window.Shopify && window.Shopify.actions;\n    if (actions && actions.updateCart) {\n      const res = await actions.updateCart({ lines: Object.entries(updates).map(([id, quantity]) => ({ id, quantity })) }, { event: { context: 'product' } });\n      if (res && res.userErrors && res.userErrors.length) throw new Error(res.userErrors[0].message);\n    } else {\n      const r = await fetch(this.root + 'cart/update.js', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ updates }) });\n      const j = await r.json();\n      if (!r.ok) throw new Error(j.description || j.message || 'Could not update your cart');\n      document.dispatchEvent(new CustomEvent('cart:update', { bubbles: true, detail: { resource: j, data: { source: 'tb-product' } } }));\n    }\n    await this.refreshCart();\n  }\n  stockNote(now) {\n    return now === 1 ? 'Only 1 in stock, and it\u2019s already in your cart' : 'Only ' + now + ' in stock, and they\u2019re all in your cart';\n  }\n  async applyUpdates(updates, opts) {\n    const want = opts && typeof opts.want === 'number' ? opts.want : null;\n    this.busy = true;\n    this.inCart.classList.add('is-busy');\n    this.msg.hidden = true;\n    try {\n      await this.send(updates);\n      let now = this.countFor();\n      if (want != null && now < want) { await this.fixItemWrap(); now = this.countFor(); }\n      if (want === 0 && now === 0) this.note('Removed from your cart');\n      else if (want != null && now < want) this.note(this.stockNote(now), true);\n    } catch (err) {\n      this.note(err.message || 'Something went wrong. Please try again.', true);\n      this.refreshCart();\n    } finally {\n      this.busy = false;\n      this.inCart.classList.remove('is-busy');\n    }\n  }\n\n  step(d) { const q = Math.max(1, Math.min(99, (parseInt(this.qty.value, 10) || 1) + d)); this.qty.value = q; }\n  setVariant(id) {\n    const v = this.variants.find((x) => String(x.id) === String(id));\n    if (!v) return;\n    this.idInput.value = v.id;\n    const set = (sel, html, show) => { const el = this.querySelector(sel); if (!el) return; if (html != null) el.innerHTML = html; el.hidden = !show; };\n    const deal = v.compare_at_price && v.compare_at_price > v.price;\n    set('[data-price]', this.money(v.price), true);\n    set('[data-compare]', deal ? this.money(v.compare_at_price) : '', deal);\n    set('[data-save]', deal ? 'Save ' + this.money(v.compare_at_price - v.price) : '', deal);\n    this.btn.disabled = !v.available;\n    this.btn.textContent = v.available ? this.btn.dataset.label : 'Sold out';\n    const u = new URL(location.href); u.searchParams.set('variant', v.id); history.replaceState(null, '', u);\n    document.dispatchEvent(new CustomEvent('tb:variant', { detail: { mediaId: v.featured_media && v.featured_media.id } }));\n    this.renderInCart();\n  }\n  async submit(e) {\n    e.preventDefault();\n    const id = this.idInput.value;\n    const quantity = parseInt(this.qty?.value, 10) || 1;\n    const gift = this.querySelector('[data-gift]');\n    const wrapOn = !!(gift && gift.checked && !this.querySelector('.tb-gift')?.hidden);\n    const props = {};\n    if (wrapOn) {\n      props['Gift wrap'] = 'Yes';\n      const m = this.querySelector('[data-gift-msg]')?.value.trim(); if (m) props['Gift message'] = m;\n      const f = this.querySelector('[data-gift-from]')?.value.trim(); if (f) props['From'] = f;\n    }\n    // One wrap per item: adding 3 of a toy with gift wrap adds 3 wraps.\n    const wrapId = wrapOn ? this.dataset.wrapVariant : null;\n    this.btn.classList.add('is-loading');\n    this.msg.hidden = true;\n    try {\n      await this.refreshCart();\n      const before = this.countFor();\n      const actions = window.Shopify && window.Shopify.actions;\n      if (actions && actions.updateCart) {\n        const lines = [{ merchandiseId: 'gid://shopify/ProductVariant/' + id, quantity, attributes: Object.entries(props).map(([key, value]) => ({ key, value })) }];\n        if (wrapId) lines.push({ merchandiseId: 'gid://shopify/ProductVariant/' + wrapId, quantity });\n        const res = await actions.updateCart({ lines }, { event: { context: 'product' } });\n        if (res && res.userErrors && res.userErrors.length) throw new Error(res.userErrors[0].message);\n      } else {\n        const items = [{ id: Number(id), quantity, properties: props }];\n        if (wrapId) items.push({ id: Number(wrapId), quantity });\n        const r = await fetch(this.root + 'cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ items }) });\n        const j = await r.json();\n        if (!r.ok) throw new Error(j.description || j.message || 'Could not add to cart');\n      }\n      await this.refreshCart();\n      let added = this.countFor() - before;\n      if (added < quantity && wrapId) { await this.fixItemWrap(); added = this.countFor() - before; }\n      if (added <= 0) this.note(this.stockNote(this.countFor()), true, true);\n      else if (added < quantity) this.note('Only ' + added + ' more in stock, so ' + added + ' added to your cart', true, true);\n      else this.note(added > 1 ? added + ' added to your cart' : 'Added to your cart', false, true);\n      if (this.qty) this.qty.value = 1;\n    } catch (err) {\n      this.note(err.message || 'Something went wrong. Please try again.', true);\n    } finally {\n      this.btn.classList.remove('is-loading');\n    }\n  }\n}\ncustomElements.get('tb-product-form') || customElements.define('tb-product-form', TbProductForm);\n\nclass TbPinCheck extends HTMLElement {\n  connectedCallback() {\n    const input = this.querySelector('input');\n    const out = this.querySelector('[data-out]');\n    const check = () => {\n      const v = input.value.replace(/[^0-9]/g, '');\n      if (!/^[1-9][0-9]{5}$/.test(v)) { out.innerHTML = '<span class=\"tb-msg-err\">Enter a 6-digit PIN code</span>'; return; }\n      out.innerHTML = '<span class=\"tb-msg-ok\">\u2713 ' + this.dataset.ok.replace('{pin}', v) + '</span>';\n    };\n    this.querySelector('button').addEventListener('click', check);\n    input.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); check(); } });\n  }\n}\ncustomElements.get('tb-pin-check') || customElements.define('tb-pin-check', TbPinCheck);\n\n/* Loads Shopify's related products into the section after the page loads. */\nclass TbRecommendations extends HTMLElement {\n  connectedCallback() {\n    const url = this.dataset.url;\n    if (!url) return;\n    fetch(url).then((r) => r.text()).then((html) => {\n      const doc = new DOMParser().parseFromString(html, 'text/html');\n      const inner = doc.querySelector('tb-recommendations');\n      if (inner && inner.innerHTML.trim()) { this.innerHTML = inner.innerHTML; this.hidden = false; }\n    }).catch(() => {});\n  }\n}\ncustomElements.get('tb-recommendations') || customElements.define('tb-recommendations', TbRecommendations);"],
  "mappings": "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",
  "names": []
}
