{
  "version": 3,
  "sources": ["/cdn/shop/t/30/assets/ffs-custom-select.js?ffs=20260723select1"],
  "sourcesContent": ["/**\n * Replaces native OS select menus with an on-brand dropdown.\n * Opt-in: <select data-ffs-select>\n * Keeps the native <select> for forms; syncs value + input/change events.\n */\n(function () {\n  if (window.__ffsCustomSelect) return;\n\n  const OPEN_CLASS = 'is-open';\n  let nextSelectId = 0;\n\n  function selectedLabel(select) {\n    const opt = select.options[select.selectedIndex];\n    return opt ? opt.textContent.trim() : '';\n  }\n\n  function closeAll(except) {\n    document.querySelectorAll('.ffs-select.' + OPEN_CLASS).forEach((root) => {\n      if (except && root === except) return;\n      root.classList.remove(OPEN_CLASS);\n      const btn = root.querySelector('.ffs-select__button');\n      const list = root.querySelector('.ffs-select__list');\n      if (btn) btn.setAttribute('aria-expanded', 'false');\n      if (list) list.hidden = true;\n    });\n  }\n\n  function buildOptions(select, list, labelEl) {\n    list.innerHTML = '';\n    Array.from(select.options).forEach((opt) => {\n      const li = document.createElement('li');\n      li.className = 'ffs-select__option';\n      li.setAttribute('role', 'option');\n      li.tabIndex = -1;\n      li.dataset.value = opt.value;\n      li.textContent = opt.textContent.trim();\n      if (opt.disabled) {\n        li.setAttribute('aria-disabled', 'true');\n        li.classList.add('is-disabled');\n      }\n      if (opt.selected) {\n        li.setAttribute('aria-selected', 'true');\n        li.classList.add('is-selected');\n      }\n      list.appendChild(li);\n    });\n    if (labelEl) labelEl.textContent = selectedLabel(select) || 'Select';\n  }\n\n  function enhance(select) {\n    if (!select || select.dataset.ffsSelectReady === '1') return;\n    if (!select.options || select.options.length === 0) return;\n\n    select.dataset.ffsSelectReady = '1';\n    select.classList.add('ffs-select__native');\n    select.setAttribute('tabindex', '-1');\n\n    const parent = select.parentElement;\n    if (!parent) return;\n    parent.classList.add('ffs-select');\n\n    const legacyCaret = parent.querySelector(':scope > .svg-wrapper');\n    if (legacyCaret) legacyCaret.setAttribute('hidden', '');\n\n    const btn = document.createElement('button');\n    btn.type = 'button';\n    btn.className = 'ffs-select__button';\n    btn.setAttribute('aria-haspopup', 'listbox');\n    btn.setAttribute('aria-expanded', 'false');\n    const controlId = select.id || 'ffs-select-' + ++nextSelectId;\n    btn.id = controlId + '-ffs-trigger';\n    if (select.getAttribute('aria-describedby')) {\n      btn.setAttribute('aria-describedby', select.getAttribute('aria-describedby'));\n    }\n\n    const labelEl = document.createElement('span');\n    labelEl.className = 'ffs-select__label';\n\n    const caret = document.createElement('span');\n    caret.className = 'ffs-select__caret';\n    caret.setAttribute('aria-hidden', 'true');\n    caret.innerHTML =\n      '<svg viewBox=\"0 0 10 6\" focusable=\"false\"><path fill=\"currentColor\" d=\"M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 1 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708\"/></svg>';\n\n    btn.append(labelEl, caret);\n\n    const list = document.createElement('ul');\n    list.className = 'ffs-select__list';\n    list.setAttribute('role', 'listbox');\n    list.hidden = true;\n    list.id = controlId + '-ffs-list';\n    list.setAttribute('aria-labelledby', btn.id);\n    btn.setAttribute('aria-controls', list.id);\n\n    parent.append(btn, list);\n    buildOptions(select, list, labelEl);\n\n    const open = () => {\n      closeAll(parent);\n      parent.classList.add(OPEN_CLASS);\n      btn.setAttribute('aria-expanded', 'true');\n      list.hidden = false;\n      const selected = list.querySelector('[aria-selected=\"true\"]');\n      (selected || list.querySelector('.ffs-select__option'))?.scrollIntoView({ block: 'nearest' });\n    };\n\n    const close = () => {\n      parent.classList.remove(OPEN_CLASS);\n      btn.setAttribute('aria-expanded', 'false');\n      list.hidden = true;\n    };\n\n    const enabledOptions = () => Array.from(list.querySelectorAll('.ffs-select__option:not([aria-disabled=\"true\"])'));\n\n    const focusOption = (option) => {\n      if (!option) return;\n      option.focus();\n      option.scrollIntoView({ block: 'nearest' });\n    };\n\n    const focusSelected = () => {\n      const options = enabledOptions();\n      focusOption(options.find((option) => option.getAttribute('aria-selected') === 'true') || options[0]);\n    };\n\n    const chooseOption = (option) => {\n      if (!option || option.getAttribute('aria-disabled') === 'true') return;\n      const value = option.dataset.value ?? '';\n      if (select.value !== value) {\n        select.value = value;\n        select.dispatchEvent(new Event('input', { bubbles: true }));\n        select.dispatchEvent(new Event('change', { bubbles: true }));\n      }\n      buildOptions(select, list, labelEl);\n      close();\n      // A change handler may replace the select's containing section.\n      (document.getElementById(btn.id) || btn).focus();\n    };\n\n    btn.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      if (parent.classList.contains(OPEN_CLASS)) close();\n      else open();\n    });\n\n    list.addEventListener('click', (event) => {\n      chooseOption(event.target.closest('.ffs-select__option'));\n    });\n\n    btn.addEventListener('keydown', (event) => {\n      if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault();\n        if (!parent.classList.contains(OPEN_CLASS)) open();\n        focusSelected();\n      } else if (event.key === 'Escape') {\n        close();\n      } else if (event.key === 'Tab') {\n        close();\n      }\n    });\n\n    list.addEventListener('keydown', (event) => {\n      const option = event.target.closest('.ffs-select__option');\n      const options = enabledOptions();\n      const index = options.indexOf(option);\n      if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n        event.preventDefault();\n        const direction = event.key === 'ArrowDown' ? 1 : -1;\n        focusOption(options[Math.max(0, Math.min(options.length - 1, index + direction))]);\n      } else if (event.key === 'Home' || event.key === 'End') {\n        event.preventDefault();\n        focusOption(options[event.key === 'Home' ? 0 : options.length - 1]);\n      } else if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault();\n        chooseOption(option);\n      } else if (event.key === 'Escape') {\n        event.preventDefault();\n        close();\n        btn.focus();\n      } else if (event.key === 'Tab') {\n        close();\n      }\n    });\n\n    // Fishing report (and similar) rebuild <option>s after load\n    const optionWatcher = new MutationObserver(() => buildOptions(select, list, labelEl));\n    optionWatcher.observe(select, { childList: true, subtree: true, characterData: true });\n\n    select.addEventListener('change', () => buildOptions(select, list, labelEl));\n  }\n\n  function scan(root) {\n    const scope = root && root.querySelectorAll ? root : document;\n    scope.querySelectorAll('select[data-ffs-select]').forEach(enhance);\n    if (root && root.matches?.('select[data-ffs-select]')) enhance(root);\n  }\n\n  document.addEventListener('click', (event) => {\n    if (!event.target.closest('.ffs-select')) closeAll();\n  });\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape') closeAll();\n  });\n\n  const boot = () => scan(document);\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n\n  // Facet AJAX re-renders SortBy \u2014 re-enhance new nodes\n  const domWatcher = new MutationObserver((mutations) => {\n    for (const mutation of mutations) {\n      mutation.addedNodes.forEach((node) => {\n        if (node.nodeType !== 1) return;\n        scan(node);\n      });\n    }\n  });\n  domWatcher.observe(document.documentElement, { childList: true, subtree: true });\n\n  window.__ffsCustomSelect = { scan, enhance };\n})();\n"],
  "mappings": "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",
  "names": []
}
