{
  "version": 3,
  "sources": ["/cdn/shop/t/280/assets/wf-flag-picker.js?cb=20261014b"],
  "sourcesContent": ["/* =====================================================================\r\n   wf-flag-picker.js \u2014 Custom Keepsake Flag picker (Shopify tag `heart-flag`)\r\n   ---------------------------------------------------------------------\r\n   One searchable list of the 57 flags, each shown as its heart print art\r\n   (the factory file, served tiny by Cloudinary: ~1 KB WebP, lazy-loaded).\r\n\r\n   Two consumers:\r\n     - PDP: snippets/flag-picker.liquid. Auto-mounts as a dropdown, writes\r\n       the choice to the form's hidden `properties[Flag]` input, swaps each\r\n       metal's gallery photo to that flag's charm, and blocks Add to Cart\r\n       until a flag is chosen.\r\n     - Build Your Charm Set: assets/1r-theme.js addFlagRequest() opens\r\n       #flag-modal (snippets/flag-modal.liquid) and calls\r\n       WFFlagPicker.modal(metal, fallbackImage), which mounts the list\r\n       inline and returns { validate(), value() }.\r\n\r\n   The order pipeline turns the `Flag` property back into the print file BY\r\n   NAME (resolve_heart_flag_url in automations/image_order_processing.py), so\r\n   NAMES must match its HEART_FLAG_COUNTRIES exactly. Adding a flag means\r\n   adding it there, here, in the two portals' lists, and uploading\r\n   heart_flags/<slug>.png + heart_flag_charms/{gold,silver}/<slug>.jpg.\r\n   ===================================================================== */\r\n(function () {\r\n  'use strict';\r\n\r\n  if (window.WFFlagPicker) return;\r\n\r\n  var CLD = 'https://res.cloudinary.com/dgwldii6i/image/upload/';\r\n  var NAMES = [\r\n    'Argentina', 'Armenia', 'Aruba', 'Australia', 'Bahamas', 'Brazil',\r\n    'Canada', 'China', 'Colombia', 'Costa Rica', 'Croatia', 'Cuba',\r\n    'Czech Republic', 'Dominican Republic', 'Ecuador', 'Egypt',\r\n    'El Salvador', 'Ethiopia', 'France', 'Germany', 'Ghana', 'Greece',\r\n    'Guatemala', 'Honduras', 'Iceland', 'India', 'Indonesia', 'Ireland',\r\n    'Israel', 'Italy', 'Jamaica', 'Japan', 'Kenya', 'Lebanon', 'Mexico',\r\n    'Morocco', 'Netherlands', 'Nigeria', 'Norway', 'Peru', 'Philippines',\r\n    'Poland', 'Portugal', 'Puerto Rico', 'Russia', 'Scotland',\r\n    'South Korea', 'Spain', 'Sweden', 'Switzerland', 'Thailand', 'Turkey',\r\n    'Ukraine', 'United Arab Emirates', 'United Kingdom', 'United States',\r\n    'Vietnam'\r\n  ];\r\n  // other names shoppers type for the same flag (search only; never sent)\r\n  var ALIASES = {\r\n    'United States': ['usa', 'us', 'america', 'united states of america'],\r\n    'United Kingdom': ['uk', 'great britain', 'britain'],\r\n    'Netherlands': ['holland'],\r\n    'South Korea': ['korea'],\r\n    'United Arab Emirates': ['uae', 'emirates'],\r\n    'Czech Republic': ['czechia'],\r\n    'Turkey': ['turkiye']\r\n  };\r\n\r\n  function slugify(name) {\r\n    return String(name || '').toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');\r\n  }\r\n  function fold(s) {\r\n    s = String(s || '').toLowerCase();\r\n    try { s = s.normalize('NFD').replace(/[\u0300-\u036F]/g, ''); } catch (e) {}\r\n    return s.replace(/[^a-z0-9 ]+/g, ' ').replace(/\\s+/g, ' ').trim();\r\n  }\r\n\r\n  var FLAGS = NAMES.map(function (name) {\r\n    var words = fold(name).split(' ');\r\n    var aliases = (ALIASES[name] || []).map(fold);\r\n    return { name: name, slug: slugify(name), key: fold(name), words: words, aliases: aliases };\r\n  });\r\n  var BY_SLUG = {};\r\n  FLAGS.forEach(function (f) { BY_SLUG[f.slug] = f; });\r\n\r\n  function find(v) {\r\n    if (!v) return null;\r\n    if (BY_SLUG[slugify(v)]) return BY_SLUG[slugify(v)];\r\n    var q = fold(String(v).replace(/_/g, ' '));\r\n    for (var i = 0; i < FLAGS.length; i++) {\r\n      if (FLAGS[i].aliases.indexOf(q) > -1) return FLAGS[i];\r\n    }\r\n    return null;\r\n  }\r\n  function metalKey(v) {\r\n    return /silver|white|wg/i.test(String(v || '')) ? 'silver' : 'gold';\r\n  }\r\n  /* list icons are the real charm cropped to its heart, bezel and all\r\n     (heart_flag_icons/<metal>/<slug>.png, 160px transparent masters cut from\r\n     the product-photo cutouts): the gold/silver rim keeps a mostly-white flag\r\n     (Japan, Poland, Korea) from melting into a white row, and the icon shows\r\n     the metal being bought. ~2 KB at 1x, ~5 KB at 2x (WebP). */\r\n  function iconUrl(slug, metal, w) {\r\n    return CLD + 'w_' + (w || 96) + ',f_auto,q_auto/heart_flag_icons/' + metalKey(metal) + '/' + slug + '.png';\r\n  }\r\n  function iconSrcset(slug, metal) {\r\n    return iconUrl(slug, metal, 48) + ' 1x, ' + iconUrl(slug, metal, 96) + ' 2x, ' + iconUrl(slug, metal, 120) + ' 3x';\r\n  }\r\n  function iconImg(slug, metal) {\r\n    return el('img', '', { src: iconUrl(slug, metal, 96), srcset: iconSrcset(slug, metal), alt: '', width: '40', height: '40', decoding: 'async' });\r\n  }\r\n  function charmUrl(slug, metal, w) {\r\n    return CLD + 'f_auto,q_auto,w_' + w + '/heart_flag_charms/' + metalKey(metal) + '/' + slug + '.jpg';\r\n  }\r\n\r\n  /* rank: an exact name or alias (\"uk\" is the United Kingdom, not Ukraine),\r\n     then the name starts with the query, then a later word or an alias does,\r\n     then it appears anywhere; ties keep alphabetical order */\r\n  function filter(q) {\r\n    q = fold(q);\r\n    if (!q) return FLAGS.slice();\r\n    var hits = [];\r\n    FLAGS.forEach(function (f, i) {\r\n      var r = -1;\r\n      if (f.key === q || f.aliases.indexOf(q) > -1) r = 0;\r\n      else if (f.key.indexOf(q) === 0) r = 1;\r\n      else if (f.words.some(function (w) { return w.indexOf(q) === 0; })) r = 2;\r\n      else if (f.aliases.some(function (a) { return a.indexOf(q) === 0; })) r = 2;\r\n      else if (f.key.indexOf(q) > -1) r = 3;\r\n      if (r > -1) hits.push({ f: f, r: r, i: i });\r\n    });\r\n    hits.sort(function (a, b) { return a.r - b.r || a.i - b.i; });\r\n    return hits.map(function (h) { return h.f; });\r\n  }\r\n\r\n  var uid = 0;\r\n  var lastPointer = 'mouse';\r\n  document.addEventListener('pointerdown', function (e) { lastPointer = e.pointerType || 'mouse'; }, true);\r\n  function touchy() { return lastPointer === 'touch' || lastPointer === 'pen'; }\r\n\r\n  function el(tag, cls, attrs) {\r\n    var n = document.createElement(tag);\r\n    if (cls) n.className = cls;\r\n    if (attrs) for (var k in attrs) n.setAttribute(k, attrs[k]);\r\n    return n;\r\n  }\r\n  var SEARCH_SVG = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"11\" cy=\"11\" r=\"7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"/><path d=\"M20 20l-4.2-4.2\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\"/></svg>';\r\n  var CHECK_SVG = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M5 12.5l4.5 4.5L19 7.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\r\n  var CHEV_SVG = '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M6 9l6 6 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>';\r\n\r\n  /* ---------------------------------------------------------------------\r\n     mount(root, opts) -> controller\r\n       opts.mode      'dropdown' (PDP: trigger + collapsible panel) or\r\n                      'inline' (modal: search + list always shown)\r\n       opts.labelId   id of the visible \"Flag\" label (dropdown mode)\r\n       opts.onChange  fn(flag|null)\r\n     The search box is an APG combobox (list autocomplete, first match\r\n     active); options are role=option in a role=listbox driven by\r\n     aria-activedescendant, so focus stays in the text box.\r\n     --------------------------------------------------------------------- */\r\n  function mount(root, opts) {\r\n    opts = opts || {};\r\n    var inline = opts.mode === 'inline';\r\n    var id = 'wf-flag-' + (++uid);\r\n    var state = { value: null, open: inline, active: -1, shown: [], swallowEscUp: false, metal: metalKey(opts.metal) };\r\n\r\n    root.classList.add('wf-flag', inline ? 'wf-flag--inline' : 'wf-flag--dropdown');\r\n    root.innerHTML = '';\r\n\r\n    var trigger = null, triggerTile = null, triggerValue = null, triggerHint = null;\r\n    if (!inline) {\r\n      trigger = el('button', 'wf-flag__trigger', {\r\n        type: 'button', id: id + '-trigger', 'aria-expanded': 'false', 'aria-controls': id + '-panel'\r\n      });\r\n      if (opts.labelId) trigger.setAttribute('aria-labelledby', opts.labelId + ' ' + id + '-value');\r\n      if (opts.errorId) trigger.setAttribute('aria-describedby', opts.errorId);\r\n      triggerTile = el('span', 'wf-flag__tile', { 'aria-hidden': 'true' });\r\n      var tt = el('span', 'wf-flag__trigger-text');\r\n      triggerValue = el('span', 'wf-flag__value', { id: id + '-value' });\r\n      triggerHint = el('span', 'wf-flag__hint', { 'aria-hidden': 'true' });\r\n      tt.appendChild(triggerValue); tt.appendChild(triggerHint);\r\n      var chev = el('span', 'wf-flag__chev'); chev.innerHTML = CHEV_SVG;\r\n      trigger.appendChild(triggerTile); trigger.appendChild(tt); trigger.appendChild(chev);\r\n      root.appendChild(trigger);\r\n    }\r\n\r\n    var panel = el('div', 'wf-flag__panel', { id: id + '-panel' });\r\n    if (!inline) panel.hidden = true;\r\n    var searchWrap = el('div', 'wf-flag__search');\r\n    var icon = el('span', 'wf-flag__search-icon'); icon.innerHTML = SEARCH_SVG;\r\n    var input = el('input', 'wf-flag__input', {\r\n      type: 'text', id: id + '-search', role: 'combobox', 'aria-autocomplete': 'list',\r\n      'aria-expanded': 'true', 'aria-controls': id + '-list', 'aria-label': 'Search flags by country',\r\n      placeholder: 'Search countries', autocomplete: 'off', autocapitalize: 'words', spellcheck: 'false',\r\n      enterkeyhint: 'done'\r\n    });\r\n    var clear = el('button', 'wf-flag__clear', { type: 'button', hidden: '' });\r\n    clear.innerHTML = '<span aria-hidden=\"true\">&times;</span><span class=\"visually-hidden\">Clear search</span>';\r\n    searchWrap.appendChild(icon); searchWrap.appendChild(input); searchWrap.appendChild(clear);\r\n    var list = el('ul', 'wf-flag__list', { id: id + '-list', role: 'listbox', 'aria-label': 'Flags' });\r\n    var empty = el('p', 'wf-flag__empty', { hidden: '' });\r\n    panel.appendChild(searchWrap); panel.appendChild(list); panel.appendChild(empty);\r\n    root.appendChild(panel);\r\n    // outside the panel: a live region inside a hidden panel never speaks\r\n    var status = el('p', 'visually-hidden', { role: 'status', 'aria-live': 'polite' });\r\n    root.appendChild(status);\r\n\r\n    /* list icons load as they scroll near view: the rows in view plus ~a\r\n       screen ahead, read off the list's own scroll position (57 rows, cheap).\r\n       Neither native loading=\"lazy\" (never fires for images that start in the\r\n       hidden panel) nor an IntersectionObserver (never fires inside the theme\r\n       modal's preserve-3d shell) worked here: both left the icons blank. */\r\n    function loadIcon(img) {\r\n      if (img.getAttribute('data-loaded')) return;\r\n      var slug = img.getAttribute('data-slug');\r\n      img.srcset = iconSrcset(slug, state.metal);\r\n      img.src = iconUrl(slug, state.metal, 96);\r\n      img.setAttribute('data-loaded', '1');\r\n    }\r\n    function loadVisible() {\r\n      var h = list.clientHeight;\r\n      if (!h) return;                       // panel / dialog not shown yet\r\n      var top = list.scrollTop - 320, bottom = list.scrollTop + h + 320;\r\n      for (var i = 0; i < state.shown.length; i++) {\r\n        var li = items[state.shown[i].slug];\r\n        if (li.offsetTop + li.offsetHeight >= top && li.offsetTop <= bottom) loadIcon(li.firstChild);\r\n      }\r\n    }\r\n    var scrollQueued = false;\r\n    list.addEventListener('scroll', function () {\r\n      if (scrollQueued) return;\r\n      scrollQueued = true;\r\n      setTimeout(function () { scrollQueued = false; loadVisible(); }, 50);\r\n    }, { passive: true });\r\n\r\n    // one <li> per flag, built once; filtering just hides/reorders them\r\n    var items = {};\r\n    FLAGS.forEach(function (f) {\r\n      var li = el('li', 'wf-flag__opt', { id: id + '-opt-' + f.slug, role: 'option', 'aria-selected': 'false', 'data-slug': f.slug });\r\n      var img = el('img', '', { alt: '', width: '40', height: '40', decoding: 'async', 'data-slug': f.slug });\r\n      var name = el('span', 'wf-flag__name'); name.textContent = f.name;\r\n      var check = el('span', 'wf-flag__check'); check.innerHTML = CHECK_SVG;\r\n      li.appendChild(img); li.appendChild(name); li.appendChild(check);\r\n      items[f.slug] = li;\r\n      list.appendChild(li);\r\n    });\r\n\r\n    function paintTrigger() {\r\n      if (!trigger) return;\r\n      var f = state.value;\r\n      trigger.classList.toggle('is-chosen', !!f);\r\n      triggerTile.innerHTML = '';\r\n      if (f) {\r\n        triggerTile.appendChild(iconImg(f.slug, state.metal));\r\n        triggerValue.textContent = f.name;\r\n        triggerHint.textContent = 'Tap to change';\r\n      } else {\r\n        triggerValue.textContent = 'Choose your flag';\r\n        triggerHint.textContent = FLAGS.length + ' countries \u00B7 search by name';\r\n      }\r\n    }\r\n\r\n    var statusTimer = null;\r\n    function announce(msg) {\r\n      clearTimeout(statusTimer);\r\n      statusTimer = setTimeout(function () { status.textContent = msg; }, 350);\r\n    }\r\n\r\n    function render(q) {\r\n      var shown = filter(q);\r\n      state.shown = shown;\r\n      var visible = {};\r\n      shown.forEach(function (f) { visible[f.slug] = 1; list.appendChild(items[f.slug]); });\r\n      FLAGS.forEach(function (f) { items[f.slug].hidden = !visible[f.slug]; });\r\n      empty.hidden = shown.length > 0;\r\n      if (!shown.length) empty.textContent = 'No flags match \u201C' + q.trim() + '\u201D.';\r\n      clear.hidden = !q;\r\n      if (q) announce(shown.length ? shown.length + (shown.length === 1 ? ' flag' : ' flags') + ' found' : 'No flags found');\r\n      // typing makes the top match active so Enter takes it\r\n      setActive(q && shown.length ? 0 : -1, false);\r\n      loadVisible();\r\n    }\r\n\r\n    function setActive(i, scroll) {\r\n      var prev = state.shown[state.active];\r\n      if (prev) items[prev.slug].classList.remove('is-active');\r\n      state.active = i;\r\n      var cur = state.shown[i];\r\n      if (cur) {\r\n        items[cur.slug].classList.add('is-active');\r\n        input.setAttribute('aria-activedescendant', items[cur.slug].id);\r\n        if (scroll !== false) scrollIntoList(items[cur.slug]);\r\n      } else {\r\n        input.removeAttribute('aria-activedescendant');\r\n      }\r\n    }\r\n    function scrollIntoList(li) {\r\n      var top = li.offsetTop, bottom = top + li.offsetHeight;\r\n      if (top < list.scrollTop) list.scrollTop = top;\r\n      else if (bottom > list.scrollTop + list.clientHeight) list.scrollTop = bottom - list.clientHeight;\r\n    }\r\n\r\n    function select(f, fromUser) {\r\n      if (state.value) items[state.value.slug].setAttribute('aria-selected', 'false');\r\n      state.value = f || null;\r\n      if (f) items[f.slug].setAttribute('aria-selected', 'true');\r\n      root.classList.toggle('has-value', !!f);\r\n      paintTrigger();\r\n      if (opts.onChange) opts.onChange(state.value, !!fromUser);\r\n    }\r\n\r\n    function openPanel(focusSearch) {\r\n      if (inline || state.open) return;\r\n      state.open = true;\r\n      panel.hidden = false;\r\n      trigger.setAttribute('aria-expanded', 'true');\r\n      root.classList.add('is-open');\r\n      input.value = '';\r\n      render('');\r\n      // reopening shows the current pick near the top of the list\r\n      list.scrollTop = state.value ? Math.max(0, items[state.value.slug].offsetTop - 48) : 0;\r\n      loadVisible();\r\n      if (focusSearch) input.focus({ preventScroll: true });\r\n      // on phones the card sits low on the screen: bring the list into view\r\n      // (scroll-margin-top in the CSS clears the sticky header)\r\n      var r = panel.getBoundingClientRect();\r\n      if (r.bottom > (window.innerHeight || document.documentElement.clientHeight)) {\r\n        var smooth = !(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);\r\n        root.scrollIntoView({ behavior: smooth ? 'smooth' : 'auto', block: 'start' });\r\n      }\r\n    }\r\n    function closePanel(returnFocus) {\r\n      if (inline || !state.open) return;\r\n      state.open = false;\r\n      panel.hidden = true;\r\n      trigger.setAttribute('aria-expanded', 'false');\r\n      root.classList.remove('is-open');\r\n      setActive(-1, false);\r\n      if (returnFocus) trigger.focus({ preventScroll: true });\r\n    }\r\n\r\n    function choose(f) {\r\n      if (!f) return;\r\n      select(f, true);\r\n      announce(f.name + ' selected');\r\n      if (!inline) closePanel(true);\r\n    }\r\n\r\n    if (trigger) {\r\n      trigger.addEventListener('click', function () {\r\n        if (state.open) closePanel(false);\r\n        else openPanel(!touchy());\r\n      });\r\n      trigger.addEventListener('keydown', function (e) {\r\n        if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && !state.open) {\r\n          e.preventDefault();\r\n          openPanel(true);\r\n        }\r\n      });\r\n      // close when focus or a tap lands outside the picker\r\n      root.addEventListener('focusout', function (e) {\r\n        if (state.open && e.relatedTarget && !root.contains(e.relatedTarget)) closePanel(false);\r\n      });\r\n      document.addEventListener('pointerdown', function (e) {\r\n        if (state.open && !root.contains(e.target)) closePanel(false);\r\n      });\r\n    }\r\n\r\n    input.addEventListener('input', function () { render(input.value); });\r\n    input.addEventListener('keydown', function (e) {\r\n      var n = state.shown.length;\r\n      switch (e.key) {\r\n        case 'ArrowDown':\r\n          e.preventDefault();\r\n          if (n) setActive(state.active < n - 1 ? state.active + 1 : 0);\r\n          break;\r\n        case 'ArrowUp':\r\n          e.preventDefault();\r\n          if (n) setActive(state.active > 0 ? state.active - 1 : n - 1);\r\n          break;\r\n        case 'PageDown':\r\n          e.preventDefault();\r\n          if (n) setActive(Math.min(n - 1, Math.max(0, state.active) + 6));\r\n          break;\r\n        case 'PageUp':\r\n          e.preventDefault();\r\n          if (n) setActive(Math.max(0, state.active - 6));\r\n          break;\r\n        case 'Enter':\r\n          // never let Enter in the search box submit the product form\r\n          e.preventDefault();\r\n          if (state.shown[state.active]) choose(state.shown[state.active]);\r\n          else if (n === 1) choose(state.shown[0]);\r\n          break;\r\n        case 'Escape':\r\n          if (input.value) {\r\n            // first Escape clears the search; keep the dialog/panel open\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            state.swallowEscUp = true;\r\n            input.value = '';\r\n            render('');\r\n          } else if (!inline) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n            closePanel(true);\r\n          }\r\n          break;\r\n      }\r\n    });\r\n    // theme.Modals closes on keyup Escape, so a clearing Escape must not bubble\r\n    input.addEventListener('keyup', function (e) {\r\n      if (e.key === 'Escape' && state.swallowEscUp) { state.swallowEscUp = false; e.stopPropagation(); }\r\n    });\r\n    clear.addEventListener('click', function () { input.value = ''; render(''); input.focus(); });\r\n\r\n    // mousedown keeps focus in the search box while picking with a mouse\r\n    list.addEventListener('mousedown', function (e) { if (e.target.closest('.wf-flag__opt')) e.preventDefault(); });\r\n    list.addEventListener('click', function (e) {\r\n      var li = e.target.closest('.wf-flag__opt');\r\n      if (li) choose(BY_SLUG[li.getAttribute('data-slug')]);\r\n    });\r\n    list.addEventListener('mousemove', function (e) {\r\n      var li = e.target.closest('.wf-flag__opt');\r\n      if (!li) return;\r\n      var i = state.shown.indexOf(BY_SLUG[li.getAttribute('data-slug')]);\r\n      if (i > -1 && i !== state.active) setActive(i, false);\r\n    });\r\n\r\n    // icons show the metal being bought; swapping srcset re-fetches only the rows in view\r\n    function setMetal(m) {\r\n      m = metalKey(m);\r\n      if (m === state.metal) return;\r\n      state.metal = m;\r\n      FLAGS.forEach(function (f) {\r\n        var img = items[f.slug].querySelector('img');\r\n        if (!img || !img.getAttribute('data-loaded')) return;   // the rest load in the new metal\r\n        img.srcset = iconSrcset(f.slug, m);\r\n        img.src = iconUrl(f.slug, m, 96);\r\n      });\r\n      paintTrigger();\r\n    }\r\n\r\n    render('');\r\n    paintTrigger();\r\n\r\n    return {\r\n      root: root,\r\n      setMetal: setMetal,\r\n      value: function () { return state.value; },\r\n      set: function (v) { select(find(v), false); },\r\n      reset: function () { select(null, false); input.value = ''; list.scrollTop = 0; render(''); },\r\n      refresh: loadVisible,\r\n      open: function (focusSearch) { openPanel(focusSearch !== false && !touchy()); },\r\n      close: function () { closePanel(false); },\r\n      focus: function () { (trigger || input).focus({ preventScroll: true }); },\r\n      focusSearch: function () { input.focus({ preventScroll: true }); },\r\n      setInvalid: function (bad) {\r\n        root.classList.toggle('is-invalid', !!bad);\r\n        var t = trigger || input;\r\n        if (bad) t.setAttribute('aria-invalid', 'true'); else t.removeAttribute('aria-invalid');\r\n      }\r\n    };\r\n  }\r\n\r\n  /* ---------------------------------------------------------------------\r\n     PDP: snippets/flag-picker.liquid renders\r\n       <div class=\"wf-flag-field\" data-wf-flag-field>\r\n         label#wf-flag-label, [data-wf-flag-picker], p#wf-flag-error,\r\n         input[name=\"properties[Flag]\"] (disabled until chosen),\r\n         script[data-wf-flag-config] {variants:[{id, metal, imageId}]}\r\n     --------------------------------------------------------------------- */\r\n  function initPdp(field) {\r\n    if (field.getAttribute('data-wf-flag-ready')) return;\r\n    field.setAttribute('data-wf-flag-ready', '1');\r\n    var form = field.closest('form');\r\n    var host = field.querySelector('[data-wf-flag-picker]');\r\n    var hidden = field.querySelector('input[name=\"properties[Flag]\"]');\r\n    var err = field.querySelector('.wf-flag-error');\r\n    var labelInfo = field.querySelector('.wf-flag-label-value');\r\n    var cfg = {};\r\n    try { cfg = JSON.parse((field.querySelector('[data-wf-flag-config]') || {}).textContent || '{}'); } catch (e) {}\r\n    if (!host || !hidden || !form) return;\r\n    var section = form.closest('.product-section') || document;\r\n\r\n    // the selected variant's metal (the theme keeps it in the form's [name=\"id\"])\r\n    function currentMetal() {\r\n      var sel = form.querySelector('[name=\"id\"]');\r\n      var vid = sel && sel.value ? String(sel.value) : ((/[?&]variant=(\\d+)/.exec(location.search) || [])[1] || '');\r\n      for (var i = 0; i < (cfg.variants || []).length; i++) {\r\n        if (String(cfg.variants[i].id) === vid) return cfg.variants[i].metal;\r\n      }\r\n      return (cfg.variants && cfg.variants[0] && cfg.variants[0].metal) || 'gold';\r\n    }\r\n\r\n    var ctrl = mount(host, {\r\n      mode: 'dropdown',\r\n      metal: currentMetal(),\r\n      labelId: 'wf-flag-label',\r\n      errorId: err ? err.id : null,\r\n      onChange: function (f) {\r\n        hidden.value = f ? f.name : '';\r\n        hidden.disabled = !f;\r\n        if (labelInfo) labelInfo.textContent = f ? '\u2014 ' + f.name : '';\r\n        if (f) showError(false);\r\n        swapGallery(f);\r\n        try { hidden.dispatchEvent(new Event('change', { bubbles: true })); } catch (e) {}\r\n      }\r\n    });\r\n\r\n    // metal swatch clicks / keyboard changes update [name=\"id\"] a beat later\r\n    var metalTimer = null;\r\n    function syncMetal() {\r\n      clearTimeout(metalTimer);\r\n      metalTimer = setTimeout(function () { ctrl.setMetal(currentMetal()); }, 60);\r\n    }\r\n    form.addEventListener('change', syncMetal);\r\n    form.addEventListener('click', function (e) {\r\n      if (e.target && e.target.closest && e.target.closest('.variant-input, .variant-wrapper, .color-swatch')) syncMetal();\r\n    });\r\n\r\n    function showError(on) {\r\n      ctrl.setInvalid(on);\r\n      if (!err) return;\r\n      err.hidden = !on;\r\n      err.textContent = on ? 'Please choose your flag.' : '';\r\n    }\r\n\r\n    /* each metal's own variant photo becomes that metal's charm with the\r\n       chosen flag (slides, slick clones, thumbnails, zoom); originals are\r\n       remembered so a different flag always starts from the same slots */\r\n    var variants = (cfg.variants || []).filter(function (v) { return v.imageId; });\r\n    var ids = {};\r\n    variants = variants.filter(function (v) { if (ids[v.imageId]) return false; ids[v.imageId] = 1; return true; });\r\n    var chosen = null;\r\n    /* the theme rebuilds the slides on every metal change (and slick clones\r\n       them), so re-apply the chosen flag whenever gallery nodes are inserted.\r\n       Only attributes change in swapGallery, so this cannot loop; observer\r\n       callbacks run before paint, so the old photo never flashes. */\r\n    var gallery = section.querySelector('.product__photos') || section.querySelector('.product__main-photos');\r\n    if (gallery && window.MutationObserver) {\r\n      new MutationObserver(function (muts) {\r\n        if (!chosen) return;\r\n        for (var i = 0; i < muts.length; i++) {\r\n          if (muts[i].addedNodes && muts[i].addedNodes.length) { swapGallery(chosen); return; }\r\n        }\r\n      }).observe(gallery, { childList: true, subtree: true });\r\n    }\r\n    function swapGallery(f) {\r\n      chosen = f;\r\n      variants.forEach(function (v) {\r\n        var slides = section.querySelectorAll('[data-image-id=\"' + v.imageId + '\"]');\r\n        [].forEach.call(slides, function (slide) {\r\n          [].forEach.call(slide.querySelectorAll('img'), function (img) {\r\n            swapImg(img, f, v.metal, [360, 540, 720, 900, 1080], 1080);\r\n          });\r\n          var z = slide.querySelector('[data-zoom-size]');\r\n          if (z) swapAttr(z, 'data-zoom-size', f ? charmUrl(f.slug, v.metal, 1500) : null);\r\n        });\r\n        var thumbs = section.querySelectorAll('.product__thumb[data-id=\"' + v.imageId + '\"]');\r\n        [].forEach.call(thumbs, function (th) {\r\n          [].forEach.call(th.querySelectorAll('img'), function (img) {\r\n            swapImg(img, f, v.metal, [120, 180, 360], 180);\r\n          });\r\n          if (th.hasAttribute('data-zoom')) swapAttr(th, 'data-zoom', f ? charmUrl(f.slug, v.metal, 1500) : null);\r\n        });\r\n      });\r\n    }\r\n    function swapAttr(node, attr, val) {\r\n      var key = 'wfOrig' + attr.replace(/(^|-)([a-z])/g, function (m, d, c) { return c.toUpperCase(); });\r\n      if (node.dataset[key] === undefined) node.dataset[key] = node.getAttribute(attr) || '';\r\n      node.setAttribute(attr, val === null ? node.dataset[key] : val);\r\n    }\r\n    function swapImg(img, f, metal, widths, w) {\r\n      swapAttr(img, 'src', f ? charmUrl(f.slug, metal, w) : null);\r\n      if (img.hasAttribute('srcset') || f) {\r\n        swapAttr(img, 'srcset', f ? widths.map(function (x) { return charmUrl(f.slug, metal, x) + ' ' + x + 'w'; }).join(', ') : null);\r\n      }\r\n      if (f && img.alt) {\r\n        if (img.dataset.wfOrigAlt === undefined) img.dataset.wfOrigAlt = img.alt;\r\n        img.alt = 'Custom Keepsake Flag in ' + (metalKey(metal) === 'silver' ? 'silver' : 'gold') + ' with the ' + f.name + ' flag';\r\n      } else if (!f && img.dataset.wfOrigAlt !== undefined) {\r\n        img.alt = img.dataset.wfOrigAlt;\r\n      }\r\n    }\r\n\r\n    /* Add to Cart gate. Capture phase on document, so it runs before the\r\n       theme's delegated body handlers and the form submit. The mobile sticky\r\n       proxy forwards to the real button, so it is gated too. */\r\n    function blocked(e) {\r\n      if (ctrl.value()) return false;\r\n      e.preventDefault();\r\n      e.stopImmediatePropagation();\r\n      showError(true);\r\n      ctrl.open(!touchy());\r\n      if (touchy()) ctrl.focus();\r\n      // label + error + card + list, clear of the sticky header (CSS scroll-margin)\r\n      field.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      return true;\r\n    }\r\n    document.addEventListener('click', function (e) {\r\n      var btn = e.target && e.target.closest && e.target.closest('.add-to-cart-btn, button[name=\"add\"]');\r\n      if (btn && form.contains(btn)) blocked(e);\r\n    }, true);\r\n    form.addEventListener('submit', function (e) { blocked(e); }, true);\r\n\r\n    // ?flag=mexico (or ?flag=Mexico) preselects, e.g. from an ad for one flag\r\n    var m = /[?&]flag=([^&#]+)/.exec(location.search);\r\n    if (m) {\r\n      var raw = m[1].replace(/\\+/g, ' ');\r\n      try { raw = decodeURIComponent(raw); } catch (e) {}\r\n      var pre = find(raw);\r\n      if (pre) ctrl.set(pre.slug);\r\n    }\r\n\r\n    window.WFFlagPicker.pdp = ctrl;\r\n  }\r\n\r\n  /* ---------------------------------------------------------------------\r\n     Build Your Charm Set modal (snippets/flag-modal.liquid).\r\n     modal(metal, fallbackImage) mounts once, resets per open, returns\r\n       { validate(), value() -> {name, slug, thumb} }\r\n     --------------------------------------------------------------------- */\r\n  var modalCtrl = null;\r\n  // per-open state; the list's onChange is bound once, so it must read this, not a closure\r\n  var current = { metal: 'gold', fallback: '' };\r\n  function modal(metal, fallbackImage) {\r\n    var box = document.getElementById('flag-modal');\r\n    if (!box) return null;\r\n    var host = box.querySelector('[data-wf-flag-modal-picker]');\r\n    var preview = box.querySelector('.flag-modal__preview img');\r\n    var caption = box.querySelector('.flag-modal__caption');\r\n    var err = box.querySelector('.flag-modal__error');\r\n    var confirmBtn = document.getElementById('confirm-flag-button');\r\n    current.metal = metalKey(metal);\r\n    current.fallback = fallbackImage || '';\r\n\r\n    function paint(f) {\r\n      if (preview) {\r\n        preview.src = f ? charmUrl(f.slug, current.metal, 600) : current.fallback;\r\n        preview.alt = f ? 'Custom Keepsake Flag in ' + current.metal + ' with the ' + f.name + ' flag' : '';\r\n        preview.parentNode.classList.toggle('is-empty', !f);\r\n      }\r\n      if (caption) caption.textContent = f ? f.name : 'Pick a country below';\r\n      if (confirmBtn) confirmBtn.classList.toggle('is-ready', !!f);\r\n      if (f && err) { err.hidden = true; err.textContent = ''; }\r\n      if (modalCtrl) modalCtrl.setInvalid(false);\r\n    }\r\n\r\n    if (!modalCtrl) {\r\n      modalCtrl = mount(host, { mode: 'inline', metal: current.metal, onChange: function (f) { paint(f); } });\r\n      var list = host.querySelector('.wf-flag__list');\r\n      // double-tap / double-click a flag to add it straight away\r\n      if (list && confirmBtn) list.addEventListener('dblclick', function (e) {\r\n        if (e.target.closest('.wf-flag__opt') && modalCtrl.value()) confirmBtn.click();\r\n      });\r\n    }\r\n    modalCtrl.setMetal(current.metal);\r\n    modalCtrl.reset();\r\n    // theme.Modals shows the dialog after this returns (and fades it in)\r\n    [0, 120, 400].forEach(function (t) { setTimeout(modalCtrl.refresh, t); });\r\n    paint(null);\r\n    if (err) { err.hidden = true; err.textContent = ''; }\r\n\r\n    return {\r\n      validate: function () {\r\n        if (modalCtrl.value()) return true;\r\n        if (err) { err.hidden = false; err.textContent = 'Please choose a flag first.'; }\r\n        modalCtrl.setInvalid(true);\r\n        if (!touchy()) modalCtrl.focusSearch();\r\n        return false;\r\n      },\r\n      value: function () {\r\n        var f = modalCtrl.value();\r\n        return f ? { name: f.name, slug: f.slug, thumb: charmUrl(f.slug, current.metal, 250) } : null;\r\n      }\r\n    };\r\n  }\r\n\r\n  window.WFFlagPicker = {\r\n    FLAGS: FLAGS,\r\n    find: find,\r\n    slugify: slugify,\r\n    iconUrl: iconUrl,\r\n    charmUrl: charmUrl,\r\n    mount: mount,\r\n    modal: modal\r\n  };\r\n\r\n  function boot() {\r\n    var fields = document.querySelectorAll('[data-wf-flag-field]');\r\n    for (var i = 0; i < fields.length; i++) initPdp(fields[i]);\r\n  }\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\r\n  else boot();\r\n})();\r\n"],
  "mappings": "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",
  "names": ["m"]
}
