{
  "version": 3,
  "sources": ["/cdn/shop/t/39/assets/dbj-menu-keyboard.js?check=22845"],
  "sourcesContent": ["/* ==========================================================================\n   Header menus on computers: open with the keyboard as well as the mouse\n   (QA review, 10 Nov 2026). Loaded by sections/navigation.liquid.\n   Styles: theme-styles.scss.liquid (Nov 2026 block, \"Header menus on computers: keyboard\").\n\n   Before, the Jewelry and Accessories menus opened only on mouse hover, and the\n   Tab key jumped from JEWELRY straight to ACCESSORIES, skipping every link inside.\n   Now:\n   - Tab onto a menu heading opens its menu; Tab and Shift+Tab move through its\n     links, and leaving the menu closes it.\n   - Down arrow on a heading opens its menu and moves to its first link.\n   - Esc closes the open menu and puts the focus back on its heading, so the next\n     Tab goes on to the next heading.\n   - Screen readers hear whether each menu is open (aria-expanded).\n   Menus open on focus only when the focus comes from the keyboard, so a mouse\n   click never leaves a menu stuck open. Phones and tablets (under 1200px) keep\n   the theme's own slide-in menu.\n   ========================================================================== */\n(function () {\n  var nav = document.querySelector('.wrapper-navigation .site-nav');\n  if (!nav || !window.matchMedia) return;\n  var desktop = window.matchMedia('(min-width: 1200px)');\n\n  // Headings with a menu: the top row, plus second-level items of simple (non-mega)\n  // dropdowns, which open sideways. Mega menus show all their columns at once.\n  var items = Array.prototype.filter.call(nav.querySelectorAll('li.dropdown'), function (li) {\n    return li.classList.contains('menu-lv-1') || !!li.closest('.no-mega-menu');\n  });\n\n  function child(li, test) {\n    for (var i = 0; i < li.children.length; i++) {\n      if (test(li.children[i])) return li.children[i];\n    }\n    return null;\n  }\n\n  function heading(li) {\n    return child(li, function (el) { return el.tagName === 'A'; });\n  }\n\n  function panel(li) {\n    return child(li, function (el) { return el.classList.contains('sub-menu-mobile'); });\n  }\n\n  function fromKeyboard(el) {\n    try { return el.matches(':focus-visible'); } catch (e) { return true; }\n  }\n\n  function firstLink(sub) {\n    var links = sub.querySelectorAll('a[href]');\n    for (var i = 0; i < links.length; i++) {\n      if (links[i].getClientRects().length && getComputedStyle(links[i]).visibility === 'visible') return links[i];\n    }\n    return null;\n  }\n\n  // A menu shows when it was opened from the keyboard, or while the mouse is over it,\n  // unless Esc closed it (dbj-menu-closed).\n  function setOpen(li, open) {\n    li.classList.toggle('dbj-menu-open', open);\n    var a = heading(li);\n    var shown = open || (li.matches(':hover') && !li.classList.contains('dbj-menu-closed'));\n    if (a && desktop.matches) a.setAttribute('aria-expanded', shown ? 'true' : 'false');\n  }\n\n  items.forEach(function (li, index) {\n    var a = heading(li);\n    var sub = panel(li);\n    if (!a || !sub) return;\n    if (!sub.id) sub.id = 'dbj-menu-' + (index + 1);\n\n    li.addEventListener('focusin', function (e) {\n      if (!desktop.matches || li.classList.contains('dbj-menu-closed')) return;\n      if (fromKeyboard(e.target)) setOpen(li, true);\n    });\n\n    li.addEventListener('focusout', function (e) {\n      if (li.contains(e.relatedTarget)) return;\n      li.classList.remove('dbj-menu-closed');\n      setOpen(li, false);\n    });\n\n    li.addEventListener('mouseenter', function () {\n      li.classList.remove('dbj-menu-closed');\n      if (desktop.matches) a.setAttribute('aria-expanded', 'true');\n    });\n\n    li.addEventListener('mouseleave', function () {\n      li.classList.remove('dbj-menu-closed');\n      if (desktop.matches) a.setAttribute('aria-expanded', li.classList.contains('dbj-menu-open') ? 'true' : 'false');\n    });\n\n    li.addEventListener('keydown', function (e) {\n      if (!desktop.matches) return;\n      var isOpen = li.classList.contains('dbj-menu-open') || (li.matches(':hover') && !li.classList.contains('dbj-menu-closed'));\n      if ((e.key === 'Escape' || e.key === 'Esc') && isOpen) {\n        // Close this menu only; a second Esc closes the one around it.\n        e.stopPropagation();\n        li.classList.add('dbj-menu-closed');\n        setOpen(li, false);\n        a.focus();\n      } else if ((e.key === 'ArrowDown' || e.key === 'Down') && e.target === a && li.classList.contains('menu-lv-1')) {\n        e.preventDefault();\n        li.classList.remove('dbj-menu-closed');\n        setOpen(li, true);\n        var first = firstLink(sub);\n        if (first) first.focus();\n      }\n    });\n  });\n\n  // Esc also closes a menu opened by the mouse while the focus is elsewhere on the\n  // page; it opens again once the mouse leaves and comes back.\n  document.addEventListener('keydown', function (e) {\n    if (!desktop.matches || (e.key !== 'Escape' && e.key !== 'Esc')) return;\n    items.forEach(function (li) {\n      if (li.matches(':hover') && !li.contains(document.activeElement)) {\n        li.classList.add('dbj-menu-closed');\n        setOpen(li, false);\n      }\n    });\n  });\n\n  // aria-expanded and aria-controls only on computers; under 1200px the theme's\n  // slide-in menu takes over and these menus are never shown as dropdowns.\n  function onViewportChange() {\n    items.forEach(function (li) {\n      var a = heading(li);\n      var sub = panel(li);\n      li.classList.remove('dbj-menu-open', 'dbj-menu-closed');\n      if (!a || !sub) return;\n      if (desktop.matches) {\n        a.setAttribute('aria-expanded', 'false');\n        a.setAttribute('aria-controls', sub.id);\n      } else {\n        a.removeAttribute('aria-expanded');\n        a.removeAttribute('aria-controls');\n      }\n    });\n  }\n\n  onViewportChange();\n  if (desktop.addEventListener) desktop.addEventListener('change', onViewportChange);\n  else if (desktop.addListener) desktop.addListener(onViewportChange);\n})();\n"],
  "mappings": "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",
  "names": []
}
