{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/consent-popup-focus.js"],
  "sourcesContent": ["const TRUSTARC_IFRAME_NAME = 'trustarc_cm';\nconst TRUSTARC_IFRAME_CLASSNAME = 'truste_popframe';\n\nlet returnedFocusedElement = null;\n\nfunction isHidden(node) {\n  const computedStyle = getComputedStyle(node);\n\n  if (computedStyle.visibility === 'hidden' || computedStyle.display === 'none') return true;\n\n  return false;\n}\n\nfunction trapFocusOnConsentPopup(container) {\n  trapFocus(container, container, true);\n  const candidates = getFocusableElements(container);\n  const first = candidates[0];\n  returnedFocusedElement = container;\n\n  // when using screen readers, Chrome seem to auto focus on the first focusable element on \"load\" event\n  // this override that behavior\n  window.addEventListener('load', () => {\n    first.focus();\n  });\n}\n\nfunction augmentDialogAriaAttribute(parent) {\n  const dialog = parent.querySelector('#truste-consent-content');\n  if (dialog) {\n    dialog.setAttribute('role', 'dialog');\n  }\n}\n\nfunction createFocusGuard(tabIndexLevel) {\n  const element = document.createElement('span');\n  element.setAttribute('data-focus-guard', '');\n  element.tabIndex = tabIndexLevel ? tabIndexLevel : 0;\n  element.style.outline = 'none';\n  element.style.opacity = '0';\n  element.style.position = 'fixed';\n  element.style.pointerEvents = 'none';\n  return element;\n}\n\nfunction focusOnConsentPopup(containerSelector) {\n  const container = document.querySelector(containerSelector);\n\n  if (!container) {\n    return;\n  }\n\n  visibilityObserver = new MutationObserver((mutationsList) => {\n    for (const mutation of mutationsList) {\n      if (mutation.addedNodes.length) {\n        trapFocusOnConsentPopup(container);\n        augmentDialogAriaAttribute(container);\n      } else if (\n        mutation.type === 'attributes' &&\n        (mutation.attributeName === 'style' ||\n          mutation.attributeName === 'class' ||\n          mutation.attributeName === 'hidden')\n      ) {\n        const children = Array.from(container.children);\n        if (children.every((child) => isHidden(child))) {\n          returnedFocusedElement = null;\n          removeTrapFocus();\n        } else {\n          trapFocusOnConsentPopup(container);\n          augmentDialogAriaAttribute(container);\n        }\n      }\n    }\n  });\n\n  visibilityObserver.observe(container, {\n    childList: true,\n    attributes: true,\n    subtree: true,\n    attributeFilter: ['style', 'class', 'hidden'],\n  });\n\n  // consent manager iframe can appear in multiple ways\n  // this mutation observer 'watch' for it\n  const consentManagerIframeObserver = new MutationObserver((mutations) => {\n    for (const mutation of mutations) {\n      for (const node of mutation.addedNodes) {\n        if (\n          node.nodeType === 1 &&\n          node.tagName === 'IFRAME' &&\n          node.name === TRUSTARC_IFRAME_NAME &&\n          node.classList.contains(TRUSTARC_IFRAME_CLASSNAME)\n        ) {\n          // Injects a pair of focus guards at the edges of the whole DOM tree\n          // to ensure `focusin` & `focusout` events can be caught consistently.\n          document.body.insertAdjacentElement('afterbegin', createFocusGuard(1));\n          document.body.insertAdjacentElement('beforeend', createFocusGuard(1));\n          trapFocus(node.parentElement, undefined, true);\n        }\n      }\n\n      for (const removed of mutation.removedNodes) {\n        if (removed.nodeType === 1) {\n          const trustarcIframe = removed.querySelector(\n            `iframe[name=${TRUSTARC_IFRAME_NAME}].${TRUSTARC_IFRAME_CLASSNAME}`\n          );\n          if (trustarcIframe) {\n            document.querySelectorAll('[data-focus-guard]').forEach((node) => node.remove());\n            const returnedFocus = returnedFocusedElement || document.querySelector('a[href=\"#MainContent\"]');\n            trapFocus(returnedFocus, returnedFocus, true);\n          }\n        }\n      }\n    }\n  });\n\n  consentManagerIframeObserver.observe(document.body, {\n    childList: true,\n    subtree: true,\n  });\n}\n\nfocusOnConsentPopup('#consent_blackbar');\n"],
  "mappings": "AAAA,MAAM,qBAAuB,cACvB,0BAA4B,kBAElC,IAAI,uBAAyB,KAE7B,SAAS,SAAS,KAAM,CACtB,MAAM,cAAgB,iBAAiB,IAAI,EAE3C,OAAI,cAAc,aAAe,UAAY,cAAc,UAAY,MAGzE,CAEA,SAAS,wBAAwB,UAAW,CAC1C,UAAU,UAAW,UAAW,EAAI,EAEpC,MAAM,MADa,qBAAqB,SAAS,EACxB,CAAC,EAC1B,uBAAyB,UAIzB,OAAO,iBAAiB,OAAQ,IAAM,CACpC,MAAM,MAAM,CACd,CAAC,CACH,CAEA,SAAS,2BAA2B,OAAQ,CAC1C,MAAM,OAAS,OAAO,cAAc,yBAAyB,EACzD,QACF,OAAO,aAAa,OAAQ,QAAQ,CAExC,CAEA,SAAS,iBAAiB,cAAe,CACvC,MAAM,QAAU,SAAS,cAAc,MAAM,EAC7C,eAAQ,aAAa,mBAAoB,EAAE,EAC3C,QAAQ,SAAW,eAAgC,EACnD,QAAQ,MAAM,QAAU,OACxB,QAAQ,MAAM,QAAU,IACxB,QAAQ,MAAM,SAAW,QACzB,QAAQ,MAAM,cAAgB,OACvB,OACT,CAEA,SAAS,oBAAoB,kBAAmB,CAC9C,MAAM,UAAY,SAAS,cAAc,iBAAiB,EAE1D,GAAI,CAAC,UACH,OAGF,mBAAqB,IAAI,iBAAkB,eAAkB,CAC3D,UAAW,YAAY,cACjB,SAAS,WAAW,QACtB,wBAAwB,SAAS,EACjC,2BAA2B,SAAS,GAEpC,SAAS,OAAS,eACjB,SAAS,gBAAkB,SAC1B,SAAS,gBAAkB,SAC3B,SAAS,gBAAkB,YAEZ,MAAM,KAAK,UAAU,QAAQ,EACjC,MAAO,OAAU,SAAS,KAAK,CAAC,GAC3C,uBAAyB,KACzB,gBAAgB,IAEhB,wBAAwB,SAAS,EACjC,2BAA2B,SAAS,GAI5C,CAAC,EAED,mBAAmB,QAAQ,UAAW,CACpC,UAAW,GACX,WAAY,GACZ,QAAS,GACT,gBAAiB,CAAC,QAAS,QAAS,QAAQ,CAC9C,CAAC,EAIoC,IAAI,iBAAkB,WAAc,CACvE,UAAW,YAAY,UAAW,CAChC,UAAW,QAAQ,SAAS,WAExB,KAAK,WAAa,GAClB,KAAK,UAAY,UACjB,KAAK,OAAS,sBACd,KAAK,UAAU,SAAS,yBAAyB,IAIjD,SAAS,KAAK,sBAAsB,aAAc,iBAAiB,CAAC,CAAC,EACrE,SAAS,KAAK,sBAAsB,YAAa,iBAAiB,CAAC,CAAC,EACpE,UAAU,KAAK,cAAe,OAAW,EAAI,GAIjD,UAAW,WAAW,SAAS,aAC7B,GAAI,QAAQ,WAAa,GACA,QAAQ,cAC7B,eAAe,oBAAoB,KAAK,yBAAyB,EACnE,EACoB,CAClB,SAAS,iBAAiB,oBAAoB,EAAE,QAAS,MAAS,KAAK,OAAO,CAAC,EAC/E,MAAM,cAAgB,wBAA0B,SAAS,cAAc,wBAAwB,EAC/F,UAAU,cAAe,cAAe,EAAI,CAC9C,CAGN,CACF,CAAC,EAE4B,QAAQ,SAAS,KAAM,CAClD,UAAW,GACX,QAAS,EACX,CAAC,CACH,CAEA,oBAAoB,mBAAmB",
  "names": []
}
