{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/tb-gifting.js?x=1794560341934"],
  "sourcesContent": ["/* Wrapped in a block (2026-11-07) so the file can be included by more than one section on a page\n   without a \"class already declared\" error; the custom elements are still defined once. */\n{\n/* Gift finder (sections/tb-gift-finder): four quick questions, then a carousel of matching gifts.\n   1 Age, 2 Who it's for and 4 Budget are single-pick chips (\"Any\" chips have no value).\n   3 \"What do they love?\" is a multi-select dropdown of interests, one per shop category. Each ticked\n   interest adds a Category filter (filter.p.product_type) to the gifts collection, so several interests\n   show gifts from any of them. If the store's Category filter is switched off in Search & Discovery,\n   the cards are narrowed here instead, using each card's data-cat (its product type).\n   Results come from the gifts collection page and fill a scrolling carousel with arrows. Selected interests\n   also show as removable pills; \"Start over\" returns to the first choices; an empty result offers one-tap\n   ways to widen the search. Tells the phone Add + stepper about the new cards (tb:cards-added). */\nclass TbGiftFinder extends HTMLElement {\n  connectedCallback() {\n    this.base = this.dataset.base || '/collections/gifts';\n    this.grid = this.querySelector('[data-results]');\n    /* Not named `title`: every element already has a built-in title property that only holds text. */\n    this.resTitle = this.querySelector('[data-res-title]');\n    this.resCount = this.querySelector('[data-res-count]');\n    this.seeAll = this.querySelector('[data-see-all]');\n    this.sort = this.querySelector('[data-sort]');\n    this.sort0 = this.sort ? this.sort.value : '';\n    this.prev = this.querySelector('[data-rail-prev]');\n    this.next = this.querySelector('[data-rail-next]');\n    this.resetBtn = this.querySelector('[data-reset]');\n    this.querySelectorAll('[data-group]').forEach((g) => {\n      g.querySelectorAll('button').forEach((b) => b.addEventListener('click', () => {\n        g.querySelectorAll('button').forEach((x) => x.setAttribute('aria-pressed', x === b ? 'true' : 'false'));\n        this.update();\n      }));\n    });\n    this.setupInterests();\n    if (this.resetBtn) this.resetBtn.addEventListener('click', () => this.reset());\n    if (this.sort) this.sort.addEventListener('change', () => this.update());\n    if (this.prev) this.prev.addEventListener('click', () => this.step(-1));\n    if (this.next) this.next.addEventListener('click', () => this.step(1));\n    if (this.grid) {\n      this.grid.addEventListener('scroll', () => {\n        if (this.raf) return;\n        this.raf = requestAnimationFrame(() => { this.raf = 0; this.arrows(); });\n      }, { passive: true });\n      this.grid.addEventListener('keydown', (e) => {\n        if (e.target !== this.grid) return;\n        if (e.key === 'ArrowRight') { e.preventDefault(); this.step(1); }\n        else if (e.key === 'ArrowLeft') { e.preventDefault(); this.step(-1); }\n      });\n      this.grid.addEventListener('click', (e) => {\n        const fix = e.target.closest('[data-fix]');\n        if (fix) this.widen(fix.dataset.fix);\n      });\n      if ('ResizeObserver' in window) { this.ro = new ResizeObserver(() => this.arrows()); this.ro.observe(this.grid); }\n    }\n    this.syncInterests();\n    this.update();\n  }\n  disconnectedCallback() {\n    if (this.ro) this.ro.disconnect();\n    if (this.outside) document.removeEventListener('pointerdown', this.outside, true);\n  }\n  pick(name) { return this.querySelector('[data-group=\"' + name + '\"] [aria-pressed=\"true\"]'); }\n  choose(name, test) {\n    this.querySelectorAll('[data-group=\"' + name + '\"] button').forEach((b) => b.setAttribute('aria-pressed', test(b) ? 'true' : 'false'));\n  }\n\n  /* ---------- Interests dropdown ---------- */\n  setupInterests() {\n    const box = this.querySelector('[data-interests]');\n    if (!box) { this.boxes = []; return; }\n    this.fsel = box;\n    this.fselBtn = box.querySelector('[data-fsel-btn]');\n    this.fselPanel = box.querySelector('[data-fsel-panel]');\n    this.fselTxt = box.querySelector('[data-fsel-txt]');\n    this.fselDots = box.querySelector('[data-fsel-dots]');\n    this.pills = this.querySelector('[data-fsel-pills]');\n    this.boxes = [...box.querySelectorAll('input[type=\"checkbox\"]')];\n    this.boxes.forEach((i) => i.addEventListener('change', () => { this.syncInterests(); this.later(); }));\n    this.fselBtn.addEventListener('click', () => this.openList(this.fselPanel.hidden));\n    box.querySelector('[data-fsel-done]').addEventListener('click', () => { this.openList(false); this.fselBtn.focus(); this.update(); });\n    box.querySelector('[data-fsel-clear]').addEventListener('click', () => { this.boxes.forEach((i) => { i.checked = false; }); this.syncInterests(); this.later(); });\n    box.addEventListener('keydown', (e) => { if (e.key === 'Escape' && !this.fselPanel.hidden) { e.stopPropagation(); this.openList(false); this.fselBtn.focus(); } });\n    this.outside = (e) => { if (!this.fselPanel.hidden && !box.contains(e.target)) this.openList(false); };\n    document.addEventListener('pointerdown', this.outside, true);\n    if (this.pills) this.pills.addEventListener('click', (e) => {\n      const p = e.target.closest('[data-remove]');\n      if (!p) return;\n      const i = this.boxes.find((x) => x.value === p.dataset.remove);\n      if (i) { i.checked = false; this.syncInterests(); this.update(); }\n    });\n  }\n  openList(open) {\n    if (!this.fselPanel) return;\n    this.fselPanel.hidden = !open;\n    this.fselBtn.setAttribute('aria-expanded', open ? 'true' : 'false');\n    this.fsel.classList.toggle('is-open', open);\n    if (open) { const f = this.boxes.find((i) => i.checked) || this.boxes[0]; if (f) f.focus({ preventScroll: true }); }\n    else if (this.wait) { clearTimeout(this.wait); this.wait = 0; this.update(); }\n  }\n  /* While the list is open, wait for a pause in ticking before loading gifts. */\n  later() { clearTimeout(this.wait); this.wait = setTimeout(() => { this.wait = 0; this.update(); }, 450); }\n  picked() { return (this.boxes || []).filter((i) => i.checked); }\n  syncInterests() {\n    if (!this.fselTxt) return;\n    const on = this.picked();\n    const names = on.map((i) => i.dataset.name);\n    this.fselTxt.textContent = !names.length ? 'Any interest' : names.length <= 2 ? names.join(', ') : names.slice(0, 2).join(', ') + ' +' + (names.length - 2) + ' more';\n    this.fsel.classList.toggle('has-value', !!names.length);\n    this.fselDots.innerHTML = on.slice(0, 4).map((i) => '<i style=\"background:' + i.dataset.colour + '\"></i>').join('');\n    if (this.pills) {\n      this.pills.innerHTML = on.map((i) => '<button type=\"button\" class=\"tb-fpill\" data-remove=\"' + i.value.replace(/\"/g, '&quot;') + '\" aria-label=\"Remove ' + i.dataset.name.replace(/\"/g, '&quot;') + '\"><i style=\"background:' + i.dataset.colour + '\"></i>' + i.dataset.name.replace(/</g, '&lt;') + '<span aria-hidden=\"true\">\u00D7</span></button>').join('');\n      this.pills.hidden = !on.length;\n    }\n  }\n\n  /* ---------- Start over and widening ---------- */\n  isDefault() {\n    const groups = [...this.querySelectorAll('[data-group]')];\n    const chipsDefault = groups.every((g) => { const d = g.querySelector('[data-default]'), p = g.querySelector('[aria-pressed=\"true\"]'); return !d || d === p; });\n    return chipsDefault && !this.picked().length && (!this.sort || this.sort.value === this.sort0);\n  }\n  reset() {\n    this.querySelectorAll('[data-group]').forEach((g) => {\n      const d = g.querySelector('[data-default]');\n      if (d) g.querySelectorAll('button').forEach((b) => b.setAttribute('aria-pressed', b === d ? 'true' : 'false'));\n    });\n    (this.boxes || []).forEach((i) => { i.checked = false; });\n    if (this.sort) this.sort.value = this.sort0;\n    this.syncInterests();\n    this.openList(false);\n    this.update();\n  }\n  widen(what) {\n    if (what === 'interests') { (this.boxes || []).forEach((i) => { i.checked = false; }); this.syncInterests(); }\n    else if (what === 'budget') this.choose('budget', (b) => !b.dataset.min && !b.dataset.max);\n    else if (what === 'age') this.choose('age', (b) => !b.dataset.value);\n    else if (what === 'who') this.choose('who', (b) => !b.dataset.value);\n    this.update();\n  }\n\n  /* ---------- Carousel ---------- */\n  /* Moves the carousel by however many whole cards fit on screen. */\n  step(dir) {\n    if (!this.grid) return;\n    const item = this.grid.querySelector('.tb-finder__item');\n    const gap = parseFloat(getComputedStyle(this.grid).columnGap) || 0;\n    const w = item ? item.getBoundingClientRect().width + gap : this.grid.clientWidth;\n    const per = Math.max(1, Math.floor((this.grid.clientWidth + gap) / w));\n    const still = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    this.grid.scrollBy({ left: dir * w * per, behavior: still ? 'auto' : 'smooth' });\n  }\n  arrows() {\n    if (!this.grid) return;\n    const max = this.grid.scrollWidth - this.grid.clientWidth;\n    const x = this.grid.scrollLeft;\n    const none = !this.grid.querySelector('.tb-finder__item');\n    if (this.prev) this.prev.disabled = none || x <= 2;\n    if (this.next) this.next.disabled = none || x >= max - 2;\n  }\n  empty() {\n    const fixes = [];\n    if (this.picked().length) fixes.push(['interests', 'Any interest']);\n    const bud = this.pick('budget');\n    if (bud && (bud.dataset.min || bud.dataset.max)) fixes.push(['budget', 'Any budget']);\n    const age = this.pick('age');\n    if (age && age.dataset.value) fixes.push(['age', 'Any age']);\n    const who = this.pick('who');\n    if (who && who.dataset.value) fixes.push(['who', 'Anyone']);\n    /* The arrow after text links is added by assets/tb-buttons.css, so it isn't typed here. */\n    this.grid.innerHTML = '<div class=\"tb-empty tb-finder__empty\"><p>' + (this.dataset.empty || 'No gifts match all of those yet. Try one of these:') + '</p>' +\n      (fixes.length ? '<div class=\"tb-finder__fixes\">' + fixes.map((f) => '<button type=\"button\" class=\"tb-fchip\" data-fix=\"' + f[0] + '\">' + f[1] + '</button>').join('') + '</div>' : '') +\n      '<a class=\"tb-link\" href=\"#gift-cards\">Or send a gift card</a></div>';\n    if (this.resCount) this.resCount.textContent = '';\n  }\n  /* Shopify names a JSON-template section like template--123__main, so the real id is read from the\n     collection page once and reused; until then the whole page is fetched. */\n  sectionKey() { return 'tbGiftSection:' + this.base; }\n  getSection() {\n    if (this.section) return this.section;\n    try { this.section = sessionStorage.getItem(this.sectionKey()) || ''; } catch (e) { this.section = ''; }\n    return this.section;\n  }\n  setSection(id) {\n    this.section = id;\n    try { if (id) sessionStorage.setItem(this.sectionKey(), id); else sessionStorage.removeItem(this.sectionKey()); } catch (e) {}\n  }\n  load(url, useSection) {\n    const sec = useSection ? this.getSection() : '';\n    const sep = url.includes('?') ? '&' : '?';\n    return fetch(sec ? url + sep + 'section_id=' + encodeURIComponent(sec) : url).then((r) => {\n      if (!r.ok) {\n        if (sec) { this.setSection(''); return this.load(url, false); }\n        throw new Error('HTTP ' + r.status);\n      }\n      return r.text().then((html) => {\n        const doc = new DOMParser().parseFromString(html, 'text/html');\n        if (!sec) {\n          const wrap = doc.querySelector('[data-grid], .tb-col__empty');\n          const host = wrap && wrap.closest('[id^=\"shopify-section-\"]');\n          if (host) this.setSection(host.id.replace('shopify-section-', ''));\n        }\n        return doc;\n      });\n    });\n  }\n  phrase(list) { return list.length <= 1 ? list.join('') : list.slice(0, -1).join(', ') + ' or ' + list[list.length - 1]; }\n  update() {\n    clearTimeout(this.wait); this.wait = 0;\n    const p = new URLSearchParams();\n    const age = this.pick('age'), who = this.pick('who'), bud = this.pick('budget');\n    const ints = this.picked();\n    const bits = [];\n    if (age && age.dataset.value) { p.append('filter.p.m.custom.age_group', age.dataset.value); bits.push(age.dataset.phrase || age.textContent.trim()); }\n    if (who && who.dataset.value) { p.append('filter.p.m.custom.shopping_for', who.dataset.value); bits.push(who.dataset.phrase || who.textContent.trim().toLowerCase()); }\n    ints.forEach((i) => p.append('filter.p.product_type', i.value));\n    if (bud && (bud.dataset.min || bud.dataset.max)) { if (bud.dataset.min) p.set('filter.v.price.gte', bud.dataset.min); if (bud.dataset.max) p.set('filter.v.price.lte', bud.dataset.max); }\n    if (this.sort && this.sort.value) p.set('sort_by', this.sort.value);\n    const url = this.base + (p.toString() ? '?' + p.toString() : '');\n    if (this.seeAll) this.seeAll.href = url;\n    let t = bits.length ? 'Gifts for ' + bits.join(', ') : 'Gifts';\n    if (ints.length) t += (bits.length ? ' who love ' : ' for ') + this.phrase(ints.map((i) => i.dataset.name.split(' ').map((w) => (w.length > 1 && w === w.toUpperCase() ? w : w.toLowerCase())).join(' ')));\n    if (bud && (bud.dataset.min || bud.dataset.max)) t += ' \u00B7 ' + bud.textContent.trim();\n    if (t === 'Gifts') t = 'All gifts';\n    if (this.resTitle) this.resTitle.textContent = t;\n    if (this.resetBtn) this.resetBtn.hidden = this.isDefault();\n    if (!this.grid) return;\n    const req = (this.req = (this.req || 0) + 1);\n    this.grid.classList.add('is-loading');\n    this.grid.setAttribute('aria-busy', 'true');\n    this.load(url, true).then((doc) => {\n      if (req !== this.req) return;\n      let cards = [...doc.querySelectorAll('[data-grid] > *')];\n      /* Category filter switched off in Search & Discovery: narrow the cards by product type here. */\n      if (ints.length && !doc.querySelector('[name=\"filter.p.product_type\"]')) {\n        const want = new Set(ints.map((i) => i.dataset.cat));\n        cards = cards.filter((c) => { const a = c.matches('[data-cat]') ? c : c.querySelector('[data-cat]'); return a && want.has(a.dataset.cat); });\n      }\n      cards = cards.slice(0, parseInt(this.dataset.count, 10) || 12);\n      this.grid.innerHTML = '';\n      this.grid.scrollLeft = 0;\n      if (cards.length) {\n        cards.forEach((c) => {\n          const item = document.createElement('div');\n          item.className = 'tb-finder__item';\n          item.appendChild(document.importNode(c, true));\n          this.grid.appendChild(item);\n        });\n        if (this.resCount) this.resCount.textContent = cards.length + (cards.length === 1 ? ' gift' : ' gifts');\n        document.dispatchEvent(new CustomEvent('tb:cards-added'));\n      } else this.empty();\n    }).catch(() => { if (req === this.req) this.empty(); }).finally(() => {\n      if (req !== this.req) return;\n      this.grid.classList.remove('is-loading');\n      this.grid.removeAttribute('aria-busy');\n      this.arrows();\n    });\n  }\n}\ncustomElements.get('tb-gift-finder') || customElements.define('tb-gift-finder', TbGiftFinder);\n\n/* Gift card art shows the picked amount. */\nclass TbGiftCard extends HTMLElement {\n  connectedCallback() {\n    const out = this.querySelector('[data-amount]');\n    this.querySelectorAll('input[name=\"id\"]').forEach((r) => r.addEventListener('change', () => { if (out) out.textContent = r.dataset.label; const b = this.querySelector('[data-buy-amt]'); if (b) b.textContent = r.dataset.label; }));\n  }\n}\ncustomElements.get('tb-gift-card') || customElements.define('tb-gift-card', TbGiftCard);\n}\n"],
  "mappings": "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",
  "names": []
}
