{"version":3,"file":"navigation.min.js","mappings":"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","sources":["webpack://@thesportingnews/frontend/./assets/js/common/_constants.js","webpack://@thesportingnews/frontend/./assets/js/components/helpers/_observer-handler.js","webpack://@thesportingnews/frontend/./assets/js/components/helpers/_media_query.js","webpack://@thesportingnews/frontend/./assets/js/components/helpers/_element-handlers.js","webpack://@thesportingnews/frontend/./assets/js/furniture/_menu.js","webpack://@thesportingnews/frontend/./assets/js/furniture/_edition.js","webpack://@thesportingnews/frontend/./assets/js/components/navigation/navigation.js","webpack://@thesportingnews/frontend/./assets/js/components/navigation/mouse.js","webpack://@thesportingnews/frontend/./assets/js/components/navigation/keyboard.js"],"sourcesContent":["// Viewport breakpoints\nexport const isMobile = () => {\n    return window.innerWidth < 768;\n};\n\nexport const isDesktop = () => {\n    return window.innerWidth >= 768;\n};\n\n// News page items count\n// Note: Changing the count wil require to set the number of child of 'top-news__container' to hide.\nexport const newsCount = {\n    initialItemsCount: 21,\n    addItemsCount: 21,\n};\n\nexport const isTemplateEnv = () => {\n    const hostname = window.location.hostname;\n    return (\n        hostname === \"c1.non-prod.ng-sportingnews.com\" ||\n        hostname === \"local.ng-sportingnews.com\" ||\n        hostname === \"127.0.0.1\"\n    );\n};\n\nexport const isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\n\nexport const isInViewport = (str) => {\n    const elem = document.querySelector(str);\n    var rect = elem.getBoundingClientRect();\n\n    return (\n        rect.bottom > 0 &&\n        rect.right > 0 &&\n        rect.left < (window.Width || document.documentElement.clientWidth) &&\n        rect.top < (window.Height || document.documentElement.clientHeight)\n    );\n};\n\nexport const showElem = (e) => {\n    e.classList.remove(\"inactive\");\n    e.classList.add(\"active\");\n    setTimeout(() => {\n        e.classList.add(\"show\");\n    }, 100);\n};\n\nexport const hideElem = (e) => {\n    e.classList.remove(\"show\");\n\n    setTimeout(() => {\n        e.classList.remove(\"active\");\n        e.classList.add(\"inactive\");\n    }, 500);\n};\n\n// Device Specific\nexport const isIosDevices = () => {\n    return /iPad|iPhone|iPod/.test(navigator.userAgent);\n};\n\nexport const isSafari = () => {\n    return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n};\n\nexport const updateLinkBehavior = e => {\n    const hostname = window.location.hostname;\n    const pattern = /(ar\\.nba)|(nba\\.com\\/australia)|(ca\\.nba)|(es\\.nba)|(nba\\.com\\/japan)|(in\\.nba)|(mx\\.nba)/;\n    const int = \"internal\";\n    const ext = \"external\"\n    const setTarget = (elem,str) => elem.setAttribute('target', str);\n    const setRelation = (elem,str) => elem.setAttribute('rel', str);\n\n    if(e.href) {\n\n        if(e.href.match(hostname) || (!hostname.match(/(c1s2\\.)|(staging\\.)/) && hostname.match(/sportingnews\\.com/) && (e.href.match(/sportingnews\\.com/) || e.href.match(pattern)))) { // For internal links\n            setTarget(e, '_self');\n\n            if(!e.rel.match(/internal/)) {\n                setRelation(e, int);\n            };\n        } else { // For external links\n            setTarget(e, '_blank');\n\n            if(!e.rel.match(/external/)) {\n                setRelation(e, ext);\n            };\n        };\n    };\n};\n\nexport const updateLinksBehavior = () => {\n    const links = [\n        document.querySelectorAll('#tickerNavigation a'), // Default Ticker links\n        document.querySelectorAll('#sibNbaTicker a'), // SIB NBA links\n        document.querySelectorAll('footer a'), // Footer links\n    ]\n\n    links.forEach( e => {\n        if(e.length > 0 ) {\n            e.forEach( elm => {\n                updateLinkBehavior(elm);\n            })\n        };\n    });\n};\n","export const monitorForChanges = (selector, callback) => {\n    const targetElement = document.querySelector(selector)\n\n    const config = { attributes: true, childList: true, subtree: true }\n\n    const observer = new MutationObserver(callback)\n\n    observer.observe(targetElement, config)\n}\n\nconst waitForElm = (getElementFunction) => {\n    return new Promise(resolve => {\n        const element = getElementFunction()\n        if (element) {\n            return resolve(element)\n        }\n\n        const observer = new MutationObserver(mutations => {\n            const element = getElementFunction()\n            if (element) {\n                resolve(element)\n                observer.disconnect()\n            }\n        });\n\n        observer.observe(document.body, {\n            childList: true,\n            subtree: true\n        });\n    });\n}\n\nexport const waitForElmBySelectorIndex = (selector, index) => {\n    return waitForElm(() => document.querySelectorAll(selector)[index])\n}\n\nexport const lazyLoadHandler = (selector, articleImage, closestItem, removeClassname) => {\n    const targetElements = document.querySelectorAll(selector)\n\n    if (targetElements) {\n        let indexCount = 0\n        const imageObserver = new IntersectionObserver(\n            (entries, imgObserver) => {\n                for (const entry of entries) {\n                    if (entry.isIntersecting) {\n                        const lazyImage = entry.target\n                        const loadImage = document.querySelectorAll(articleImage)[indexCount]\n\n                        loadImage.src = loadImage.dataset.src\n                        loadImage.closest(closestItem).classList.remove(removeClassname)\n                        lazyImage.remove()\n\n                        indexCount += 1\n                        imgObserver.unobserve(lazyImage)\n                    }\n                }\n            },\n            { threshold: 0.5 }\n        )\n\n        for (const targetElement of targetElements) {\n            imageObserver.observe(targetElement)\n        }\n    }\n}\n\nexport const loadMoreItemsHandler = (itemsContainer, loadCount, addLoadCount, loadMoreButton) => {\n    if (loadCount >= itemsContainer.length) loadMoreButton.remove()\n    loadMoreButton.addEventListener('click', () => {\n        if (loadCount <= itemsContainer.length) {\n            const setLoadCount = loadCount + addLoadCount\n            const setItemsContainer = itemsContainer.slice(loadCount, setLoadCount)\n\n            for (const setItemContainer of setItemsContainer) {\n                setItemContainer.style.display = 'block'\n            }\n\n            loadCount += addLoadCount\n\n            if (loadCount >= itemsContainer.length) {\n                loadMoreButton.remove()\n            }\n        }\n\n        if (loadMoreButton.innerHTML !== 'Load More') loadMoreButton.innerHTML = 'Load More'\n    })\n}\n\nexport const removeServiceWorker = () => {\n    if ('serviceWorker' in window.navigator) {\n        window.addEventListener('load', () => {\n            window.navigator.serviceWorker.getRegistrations().then((registrations) => {\n                if (registrations.length > 0) {\n                    const unregisterServiceWorkers = ['workbox-54e9ef81.js', 'sw.js'];\n                    for (const registration of registrations) {\n                        if (!registration.active) {\n                            continue;\n                        }\n                        unregisterServiceWorkers.forEach((worker) => {\n                            if (registration.active.scriptURL.includes(worker)) {\n                                registration.unregister();\n                            }\n                        });\n                    }\n                }\n            })\n        })\n    }\n}\n\nexport const lazyLoadTweetsHandler = () => {\n    const twitterTweets = document.querySelectorAll('.twitter-tweet')\n    const txtArray = []\n\n    if (twitterTweets.length > 0) {\n        twitterTweets.forEach((tweet, index) => {\n            const twitterLink = tweet.querySelector('a').getAttribute('href')\n            const div = document.createElement('div')\n            div.className = 'lozad'\n            div.setAttribute('data-twitter-src', twitterLink)\n            div.setAttribute('data-order', index)\n            tweet.parentNode.replaceChild(div, tweet)\n            txtArray.push(tweet.innerHTML)\n        })\n\n\n        const observer = lozad('.lozad', {\n            load(element) {\n                const bq = document.createElement('blockquote')\n                bq.className = 'twitter-tweet'\n\n                const div = document.createElement('div')\n                div.innerHTML = txtArray[element.dataset.order]\n                bq.append(div)\n\n                const script = document.createElement('script')\n                script.src = 'https://platform.twitter.com/widgets.js'\n                script.charset = 'utf8'\n                script.async = true\n\n                element.insertAdjacentElement('beforeEnd', bq)\n                element.insertAdjacentElement('beforeEnd', script)\n            },\n        })\n        observer.observe()\n    }\n}\n\nexport function debounce(callback) {\n    let timeoutId;\n\n    return function () {\n      clearTimeout(timeoutId);\n      timeoutId = setTimeout(callback, 300);\n    };\n}\n","const handleMediaQueryChange = (mobileCallback, desktopCallback) => {\n    const mediaQueryMobile = '(max-width: 767px)';\n    const mediaQueryListMobile = window.matchMedia(mediaQueryMobile);\n\n    const mediaQueryDesktop = '(min-width: 768px)';\n    const mediaQueryListDesktop = window.matchMedia(mediaQueryDesktop);\n\n    const handleMobileChange = (event) => {\n        if (event.matches && mobileCallback) {\n            mobileCallback();\n        }\n    };\n\n    const handleDesktopChange = (event) => {\n        if (event.matches && desktopCallback) {\n            desktopCallback();\n        }\n    };\n\n    mediaQueryListMobile.addEventListener('change', handleMobileChange);\n    mediaQueryListDesktop.addEventListener('change', handleDesktopChange);\n\n    // Initial check for the current state\n    handleMobileChange(mediaQueryListMobile);\n    handleDesktopChange(mediaQueryListDesktop);\n};\n\nexport default handleMediaQueryChange;\n","export const getNextElementUntil = (element, selector) => {\n    // Setup siblings array and get next sibling\n    const siblings = [];\n    let next = element.nextElementSibling;\n\n    // Loop through all siblings\n    while (next) {\n        // If the matching item is found, quit\n        if (selector && next.matches(selector)) break;\n\n        // Otherwise, push to array\n        siblings.push(next);\n\n        // Get the next sibling\n        next = next.nextElementSibling;\n    }\n\n    return siblings;\n};\n\nexport const countElements = (elements, displayLength) => {\n    const selectElements = document.querySelectorAll(elements);\n    const displayElement = document.querySelector(displayLength);\n\n    // Check if selectElements are already loaded\n    if (selectElements && displayElement) {\n        // Display element length\n        displayElement.innerHTML = selectElements.length;\n    }\n};\n\nexport const getSiblings = (element) => {\n    return Array.from(element.parentNode.children).filter(\n        (child) => child !== element,\n    );\n};\n\nexport const adjustFontScale = (selector) => {\n    if (selector) {\n        const containers = selector.querySelectorAll(\"a\");\n        const CONTAINER_PADDING = 24;\n\n        containers.forEach((container) => {\n            const text = container.querySelector(\"p, span\");\n            if (text) {\n                text.classList.remove(\"smaller-size\", \"one-word\");\n            }\n        });\n\n        containers.forEach((container) => {\n            const text = container.querySelector(\"p, span\");\n            if (!text) return;\n\n            const trimmedText = text.textContent.trim();\n            const words = trimmedText\n                .split(/\\s+/)\n                .filter((word) => word.length > 0);\n\n            if (words.length === 1) {\n                text.classList.add(\"one-word\");\n            }\n\n            if (text.clientWidth > container.clientWidth - CONTAINER_PADDING) {\n                text.classList.add(\"smaller-size\");\n            }\n        });\n    }\n};\n","/**\n * TODO: This file contains too many responsibilities and needs refactoring.\n *\n * PLAN: Break this into modular, feature-based files.\n * Suggested structure:\n *\n * /js/furniture/navigation.js\n * ├── shared/\n * ├── mobile/\n * └── desktop/\n *\n */\n\nimport {\n    debounce,\n    monitorForChanges,\n} from \"../components/helpers/_observer-handler\";\nimport handleMediaQueryChange from \"../components/helpers/_media_query\";\nimport { isFirefox, isIosDevices, isSafari } from \"../common/_constants\";\nimport { adjustFontScale } from \"../components/helpers/_element-handlers\";\n\n// Mobile Sidebar Menu\nexport const toggleSidebarHiddenVisible = (\n    buttonSelector,\n    sidebarSelector,\n    featureMenu,\n) => {\n    if (!buttonSelector || !sidebarSelector) {\n        return;\n    }\n\n    if (sidebarSelector.classList.contains(\"hidden\")) {\n        sidebarSelector.classList.remove(\"hidden\");\n    }\n\n    const toggleSidebarClickHandler = () => {\n        sidebarSelector.classList.toggle(\"translate-x-full\");\n        sidebarSelector.classList.toggle(\"translate-x-0\");\n        document.body.classList.toggle(\"sidebar-expanded\");\n\n        if (isIosDevices()) {\n            document.body.classList.toggle(\"fixed\");\n        }\n    };\n\n    if (!buttonSelector._clickHandlerAdded) {\n        buttonSelector.addEventListener(\"click\", toggleSidebarClickHandler);\n        buttonSelector._clickHandlerAdded = true;\n    }\n\n    adjustFontScale(featureMenu);\n};\n\nconst toggleSidebarOnDesktop = (sidebar) => {\n    const sidebarSelector = document.querySelector(sidebar);\n\n    if (sidebarSelector.length === 0) {\n        return;\n    }\n\n    if (sidebarSelector.classList.contains(\"translate-x-0\")) {\n        sidebarSelector.classList.toggle(\"translate-x-full\");\n        sidebarSelector.classList.toggle(\"translate-x-0\");\n        sidebarSelector.classList.add(\"hidden\");\n        document.body.classList.toggle(\"sidebar-expanded\");\n\n        if (isIosDevices()) {\n            document.body.classList.toggle(\"fixed\");\n        }\n    }\n};\n\nconst adjustGridRowForMobileMenus = (menuId) => {\n    const parentMenuElement = document.querySelector(menuId);\n\n    if (!parentMenuElement) return;\n\n    const numberOfMenuItems = parentMenuElement?.children.length;\n    const gridRowsNumber = Math.ceil(numberOfMenuItems / 2);\n    parentMenuElement.style.gridTemplateRows = `repeat(${gridRowsNumber}, 1fr)`;\n};\n\nconst toggleMobileSidebarMenu = () => {\n    const burgerMenu = document.querySelector(\"#burgerMenu\");\n    const sidebarMenu = document.querySelector(\"#sidebarMenu\");\n    const featuredMenu = document.querySelector(\"#featured-sports\");\n    const sidebarCloseButton = document.querySelector(\"#sidebarCloseButton\");\n    const primaryMenuLocator = \"#sidebarPrimaryMenu\";\n    const additionalMenuLocator = \"#sidebarAdditionalMenu\";\n    document.querySelector(\"#burgerMenu\");\n\n    handleMediaQueryChange(\n        window.addEventListener(\n            \"resize\",\n            debounce(adjustFontScale(featuredMenu)),\n        ),\n        null,\n    );\n    adjustGridRowForMobileMenus(primaryMenuLocator);\n    adjustGridRowForMobileMenus(additionalMenuLocator);\n    toggleSidebarHiddenVisible(burgerMenu, sidebarMenu, featuredMenu);\n    toggleSidebarHiddenVisible(sidebarCloseButton, sidebarMenu, featuredMenu);\n};\n\nexport const expandMobileSidebarMenu = () => {\n    const sidebarMenuLocator = \"#sidebarMenu\";\n\n    const mobileSidebarHandler = () => toggleMobileSidebarMenu();\n\n    const desktopSidebarHandler = () => {\n        toggleSidebarOnDesktop(sidebarMenuLocator);\n    };\n\n    handleMediaQueryChange(mobileSidebarHandler, desktopSidebarHandler);\n};\n\nconst resetMobileNavScrollBehavour = () => {\n    const mainNavigation = document.querySelector(\"#mainNavigation\");\n    const secondaryMenu = document.querySelector(\"#secondaryMenu\");\n\n    if (mainNavigation.classList.contains(\"condensed-state\"))\n        mainNavigation.classList.remove(\"condensed-state\");\n    if (mainNavigation.classList.contains(\"expanded-state\"))\n        mainNavigation.classList.remove(\"expanded-state\");\n    if (secondaryMenu?.classList.contains(\"condensed-state\"))\n        secondaryMenu.classList.remove(\"condensed-state\");\n    if (secondaryMenu?.classList.contains(\"expanded-state\"))\n        secondaryMenu.classList.remove(\"expanded-state\");\n\n    window.removeEventListener(\"scroll\", setMobileNavStates);\n};\n\nlet mobileLastScrollTop = 0;\nconst setMobileNavStates = () => {\n    const mainNavigation = document.querySelector(\"#mainNavigation\");\n    const secondaryMenu = document.querySelector(\"#secondaryMenu\");\n    const activeSecondaryMenuDropdown = document.querySelector(\n        \"[data-has-dropdown]:not(.opacity-0)\",\n    );\n    const activeSecondaryMenu = document.querySelector(\n        \"[data-menu-has-dropdown].font-bold\",\n    );\n    const secondaryMenuChevron =\n        activeSecondaryMenuDropdown?.parentElement.querySelector(\n            \"[data-menu-chevron]\",\n        );\n\n    if (!mainNavigation) return;\n\n    let scrollTop = window.scrollY || document.documentElement.scrollTop;\n\n    if (scrollTop > mobileLastScrollTop) {\n        mainNavigation.classList.add(\"condensed-state\");\n        mainNavigation.classList.remove(\"expanded-state\");\n        secondaryMenu?.classList.add(\"condensed-state\");\n        secondaryMenu?.classList.remove(\"expanded-state\");\n        activeSecondaryMenuDropdown?.classList.add(\n            \"opacity-0\",\n            \"pointer-events-none\",\n        );\n        activeSecondaryMenu?.classList.remove(\"font-bold\");\n        secondaryMenuChevron?.classList.add(\"rotate-180\");\n    } else {\n        mainNavigation.classList.remove(\"condensed-state\");\n        mainNavigation.classList.add(\"expanded-state\");\n        secondaryMenu?.classList.remove(\"condensed-state\");\n        secondaryMenu?.classList.add(\"expanded-state\");\n    }\n\n    mobileLastScrollTop = scrollTop;\n};\n\nconst mobileNavScrollBehavour = () => {\n    window.addEventListener(\"scroll\", setMobileNavStates);\n};\n\nexport const condensedMobileNavigationBar = () => {\n    handleMediaQueryChange(\n        mobileNavScrollBehavour,\n        resetMobileNavScrollBehavour,\n    );\n};\n\n// Mobile Edition Menu\nconst toggleEditionMenu = (button, buttonArrow, editions) => {\n    const buttonSelector = document.querySelector(button);\n    const buttonArrowSelector = document.querySelector(buttonArrow);\n    const editionsSelector = document.querySelector(editions);\n\n    if (!buttonSelector || !editionsSelector || !buttonArrowSelector) {\n        return;\n    }\n\n    const editionsContainer = editionsSelector?.firstElementChild;\n    const expandedHeight = `${editionsContainer.offsetHeight}px`;\n    const collapsedHeight = \"0px\";\n    editionsSelector.style.height = collapsedHeight;\n\n    const toggleeditionClickHandler = () => {\n        const currentHeight = editionsSelector.style.height;\n\n        editionsSelector.style.height =\n            currentHeight === collapsedHeight\n                ? expandedHeight\n                : collapsedHeight;\n\n        // Toggle the class for the button\n        buttonArrowSelector.classList.toggle(\"open\");\n    };\n\n    if (!buttonSelector._clickHandlerAdded) {\n        buttonSelector.addEventListener(\"click\", toggleeditionClickHandler);\n        buttonSelector._clickHandlerAdded = true;\n    }\n};\n\nexport const expandMobileEditionMenu = () => {\n    const editionButtonLocator = \"#mobileEditionButton\";\n    const editionsMenuLocator = \"#mobileEditionsMenu\";\n    const editionButtonArrowLocator = \"#mobileEditionButtonArrow\";\n\n    const mobileEditionsHandler = () => {\n        toggleEditionMenu(\n            editionButtonLocator,\n            editionButtonArrowLocator,\n            editionsMenuLocator,\n        );\n    };\n\n    handleMediaQueryChange(mobileEditionsHandler, null);\n};\n\n// Mobile Sub Menu Condensed/Expanded State\nconst touchEventHandler = (secondaryMenu, thirdLevel) => {\n    let startX = 0;\n    let isSwiping = false;\n\n    const secondaryMenuContainer = document.querySelector(secondaryMenu);\n    const thirdLevelContainer = document.querySelector(thirdLevel);\n    const thirdLevelTitle = thirdLevelContainer.querySelector(\"div\");\n\n    secondaryMenuContainer.addEventListener(\"touchstart\", (event) => {\n        startX = event.touches[0].clientX;\n        isSwiping = true;\n\n        thirdLevelTitle.classList.add(\n            \"transition-all\",\n            \"duration-300\",\n            \"ease-sidebar-menu\",\n        );\n        thirdLevelTitle.style.width = `${thirdLevelTitle.offsetWidth}px`;\n    });\n\n    secondaryMenuContainer.addEventListener(\"touchmove\", (event) => {\n        if (!isSwiping) return;\n\n        const currentX = event.touches[0].clientX;\n        const deltaX = currentX - startX;\n\n        if (deltaX < 0) {\n            thirdLevelTitle.style.width = 0;\n        }\n    });\n\n    secondaryMenuContainer.addEventListener(\"touchend\", () => {\n        isSwiping = false;\n    });\n};\n\nconst swipeGestureHandler = () => {\n    const subMenuLocator = \"#secondaryMenu\";\n    const subMenuItemsLocator = \"#mobileSecondaryNavigation\";\n    const thirdLevelLocator = \"#secondaryMenu div #brandLogoAndName\";\n    const activeSportLogoLocator =\n        \"#secondaryMenu div #brandLogoAndName #activeSportLogo\";\n\n    const mobileSecondaryNavigation =\n        document.querySelector(subMenuItemsLocator);\n    const activeSportLogo = document.querySelector(activeSportLogoLocator);\n\n    if (!activeSportLogo) return;\n\n    if (mobileSecondaryNavigation) {\n        const isHorizontallyScrollable =\n            mobileSecondaryNavigation.scrollWidth >\n            mobileSecondaryNavigation.clientWidth;\n\n        if (isHorizontallyScrollable) {\n            touchEventHandler(subMenuLocator, thirdLevelLocator);\n        }\n    }\n};\n\nexport const toggleMobileSubMenuLogo = () => {\n    handleMediaQueryChange(swipeGestureHandler, null);\n    handleMediaQueryChange(\n        window.addEventListener(\"resize\", debounce(swipeGestureHandler)),\n        null,\n    );\n};\n\n// Desktop Hover state of sports menu upon hovering more menu\nconst sportMenusHoverHandler = async () => {\n    const moreMenu = document.querySelector(\"#desktopAdditionalMenu\");\n\n    if (!moreMenu) {\n        return;\n    }\n\n    moreMenu.addEventListener(\"mouseover\", () =>\n        toggleSportMenusTextColor(true),\n    );\n    moreMenu.addEventListener(\"mouseout\", () =>\n        toggleSportMenusTextColor(false),\n    );\n\n    function toggleSportMenusTextColor(isHovered) {\n        const sportsMenu = moreMenu.previousElementSibling;\n\n        if (!sportsMenu) {\n            return;\n        }\n\n        if (isHovered) {\n            sportsMenu.classList.add(\"text-d1\");\n        } else {\n            sportsMenu.classList.remove(\"text-d1\");\n        }\n    }\n\n    const additionalMenuColumns = document.querySelectorAll(\n        \"[data-additional-sub-menu-columns]\",\n    );\n\n    await preSetHoverBoldText(additionalMenuColumns, \"column\");\n};\n\n// Desktop navigation logo condensed state\nlet desktopLastScrollTop = 0;\nconst updateDesktopLogo = () => {\n    let scrollTop = window.scrollY || document.documentElement.scrollTop;\n    const tsnDesktopLogo = document.querySelector(\"#tsnLogo\");\n    const expandedLogoImgDiv = document.querySelector(\"#expanded-logo\");\n    const condensedLogoImgDiv = document.querySelector(\"#condensed-logo\");\n\n    if (!tsnDesktopLogo) {\n        return;\n    }\n\n    if (scrollTop > desktopLastScrollTop) {\n        // Enable transition on the container\n        tsnDesktopLogo.classList.add(\"nav-logo--transition\");\n\n        // Hide expanded logo smoothly\n        expandedLogoImgDiv.classList.remove(\"logo-expanded--visible\");\n        expandedLogoImgDiv.classList.add(\"logo-expanded--hidden\");\n\n        // Show condensed logo smoothly\n        condensedLogoImgDiv.classList.remove(\"logo-condensed--hidden\");\n        condensedLogoImgDiv.classList.add(\"logo-condensed--visible\");\n    } else {\n        // Hide condensed logo smoothly\n        condensedLogoImgDiv.classList.remove(\"logo-condensed--visible\");\n        condensedLogoImgDiv.classList.add(\"logo-condensed--hidden\");\n\n        // Show expanded logo smoothly\n        expandedLogoImgDiv.classList.remove(\"logo-expanded--hidden\");\n        expandedLogoImgDiv.classList.add(\"logo-expanded--visible\");\n    }\n    desktopLastScrollTop = scrollTop;\n};\n\nconst toggleTSNLogo = () => {\n    let ticking = false;\n\n    const scrollHandler = () => {\n        if (!ticking) {\n            window.requestAnimationFrame(() => {\n                updateDesktopLogo();\n                ticking = false;\n            });\n\n            ticking = true;\n        }\n    };\n\n    updateDesktopLogo();\n\n    return scrollHandler;\n};\n\nconst enableToggleTSNLogo = () => {\n    const isExpandedLogoOnly = document.querySelector(\"[data-expanded-logo]\");\n    if (isExpandedLogoOnly) return;\n\n    updateDesktopLogo();\n    window.addEventListener(\"scroll\", toggleTSNLogo);\n};\n\nconst disableToggleTSNLogo = () => {\n    const tsnDesktopLogo = document.querySelector(\"#tsnLogo\");\n    const isExpandedLogoOnly = document.querySelector(\"[data-expanded-logo]\");\n    const expandedLogoImgDiv = document.querySelector(\"#expanded-logo\");\n    const condensedLogoImgDiv = document.querySelector(\"#condensed-logo\");\n\n    if (isExpandedLogoOnly) return;\n\n    if (\n        tsnDesktopLogo &&\n        condensedLogoImgDiv.classList.contains(\"logo-condensed--visible\")\n    ) {\n        // Show expanded logo smoothly\n        expandedLogoImgDiv.classList.remove(\"logo-expanded--hidden\");\n        expandedLogoImgDiv.classList.add(\"logo-expanded--visible\");\n\n        // Hide condensed logo smoothly\n        condensedLogoImgDiv.classList.remove(\"logo-condensed--visible\");\n        condensedLogoImgDiv.classList.add(\"logo-condensed--hidden\");\n    }\n    window.removeEventListener(\"scroll\", toggleTSNLogo);\n};\n\nexport const condensedStateDesktopLogo = () => {\n    handleMediaQueryChange(disableToggleTSNLogo, enableToggleTSNLogo);\n};\n\n// Desktop sub navigation height with teams handlers\nconst setSubNavItemsHeight = () => {\n    const subNavContainers = document.querySelectorAll(\n        \"#desktopNavigation [data-has-dropdown]\",\n    );\n\n    subNavContainers.forEach((subNavContainer) => {\n        const menu = subNavContainer.querySelector(\"[data-sub-menu]\");\n        const teams = subNavContainer.querySelector(\"[data-sub-menu-team]\");\n\n        if (teams?.classList.contains(\"md:hidden\")) return;\n\n        if (!menu || menu.classList.contains(\"md:hidden\")) return;\n\n        const TEAM_NAME_MAX_WIDTH = 148;\n        const items = menu.querySelector(\"ul\");\n        const titles = items.querySelectorAll(\"a\");\n        let longestTitleWidth = 0;\n\n        titles.forEach((title) => {\n            if (\n                title.clientWidth > TEAM_NAME_MAX_WIDTH &&\n                title.clientWidth > longestTitleWidth\n            ) {\n                longestTitleWidth = title.clientWidth;\n            }\n        });\n\n        if (longestTitleWidth > TEAM_NAME_MAX_WIDTH) {\n            titles.forEach((title) => {\n                title.style.width = `${longestTitleWidth}px`;\n            });\n        }\n\n        if (!teams || !isSafari()) return;\n\n        if (menu.scrollHeight - 1 > menu.clientHeight) {\n            const contentHeight = menu.scrollHeight;\n\n            menu.style.height = `${contentHeight}px`;\n        }\n    });\n};\n\nconst observeTeamsContainerHeight = () => {\n    let prevHeight = null;\n    const teamsContainers = document.querySelector(\n        \"#desktopNavigation [data-sub-menu-team]\",\n    );\n\n    if (!teamsContainers) return;\n\n    const teamsContainerResize = new ResizeObserver((entries) => {\n        let rect = entries[0].contentRect;\n        let height = rect.height;\n\n        if (prevHeight !== null && height !== prevHeight) {\n            setSubNavItemsHeight();\n        }\n\n        prevHeight = height;\n    });\n\n    if (teamsContainers) {\n        teamsContainerResize.observe(teamsContainers);\n    }\n\n    setSubNavItemsHeight();\n};\n\nconst sportDropdownWidthSafari = () => {\n    const subNavContainers = document.querySelectorAll(\n        \"#desktopNavigation [data-has-dropdown]\",\n    );\n\n    if (!isSafari() || subNavContainers.length === 0) return;\n\n    subNavContainers.forEach((subNavContainer) => {\n        const menu = subNavContainer.querySelector(\"[data-sub-menu]\");\n\n        if (!menu) return;\n\n        const container = menu.querySelector(\"ul\");\n        const items = container.querySelectorAll(\"li\");\n        const twoColumnsSubMenuDropdown = items.length > 10;\n\n        if (twoColumnsSubMenuDropdown) {\n            container.style.width = `${container.offsetWidth * 2}px`;\n        }\n    });\n};\n\nconst sportSubMenuHoverBold = async () => {\n    const activeSubMenuItems = document.querySelectorAll(\n        \"#desktopSecondaryNavigation > li\",\n    );\n    await preSetHoverBoldText(activeSubMenuItems, \"row\");\n};\n\nexport const updateSubNavItemStyles = () => {\n    handleMediaQueryChange(null, sportSubMenuHoverBold);\n    handleMediaQueryChange(null, observeTeamsContainerHeight);\n    handleMediaQueryChange(null, sportDropdownWidthSafari);\n};\n\n// Desktop ticker navigation dropdown offset position & hover state\nconst toggleDropdown = (ticker, tickerNavigation, dropdown, isHovered) => {\n    if (isHovered) {\n        dropdown.classList.add(\"visible\", \"opacity-100\");\n        dropdown.classList.remove(\"invisible\", \"opacity-0\");\n        ticker.classList.add(\"text-white-js\");\n        tickerNavigation.classList.add(\"grey-text-js\");\n    } else {\n        dropdown.classList.add(\"invisible\", \"opacity-0\");\n        dropdown.classList.remove(\"visible\", \"opacity-100\");\n        ticker.classList.remove(\"text-white-js\");\n        tickerNavigation.classList.remove(\"grey-text-js\");\n    }\n};\n\nconst setupTickerHover = (ticker, tickerNavigation, dropdown) => {\n    let isTickerHovered = false;\n\n    const handleTickerMouseOver = () => {\n        isTickerHovered = true;\n        toggleDropdown(ticker, tickerNavigation, dropdown, true);\n    };\n\n    const handleTickerMouseOut = (event) => {\n        if (\n            !ticker.contains(event.relatedTarget) &&\n            !dropdown.contains(event.relatedTarget)\n        ) {\n            isTickerHovered = false;\n            toggleDropdown(ticker, tickerNavigation, dropdown, false);\n        }\n    };\n\n    const handleDropdownMouseOver = () => {\n        if (isTickerHovered) {\n            toggleDropdown(ticker, tickerNavigation, dropdown, true);\n        }\n    };\n\n    const handleDropdownMouseOut = (event) => {\n        if (isTickerHovered && !ticker.contains(event.relatedTarget)) {\n            toggleDropdown(ticker, tickerNavigation, dropdown, false);\n        }\n    };\n\n    ticker.addEventListener(\"mouseover\", handleTickerMouseOver);\n    ticker.addEventListener(\"mouseout\", handleTickerMouseOut);\n    dropdown.addEventListener(\"mouseover\", handleDropdownMouseOver);\n    dropdown.addEventListener(\"mouseout\", handleDropdownMouseOut);\n};\n\nexport const nbaTickerHoverHandler = () => {\n    const nbaTeamsTicker = document.querySelector(\"#nbaTeamsTicker\");\n    const nbaGlobalTicker = document.querySelector(\"#nbaGlobalTicker\");\n    const nbaTeamsDropdown = document.querySelector(\"#nbaTeamsDropdown\");\n    const nbaGlobalDropdown = document.querySelector(\"#nbaGlobalDropdown\");\n    const tickerNavigation = document.querySelector(\"#tickerNavigation\");\n\n    // The navigation ticker is sometimes not present on the page\n    // This can happen when is_nba_sib is set to true and page.nba_ticker_menu is empty\n    if (!tickerNavigation) {\n        return;\n    }\n\n    if (nbaTeamsTicker && nbaTeamsDropdown) {\n        setupTickerHover(nbaTeamsTicker, tickerNavigation, nbaTeamsDropdown);\n    }\n\n    if (nbaGlobalTicker && nbaGlobalDropdown) {\n        setupTickerHover(nbaGlobalTicker, tickerNavigation, nbaGlobalDropdown);\n    }\n};\n\nconst alignTickerDropdownToLeft = () => {\n    const tickerNav = document.querySelector(\"#tickerNavigation\");\n\n    // The navigation ticker is sometimes not present on the page\n    // This can happen when is_nba_sib is set to true and page.nba_ticker_menu is empty\n    if (!tickerNav) {\n        return;\n    }\n\n    const tickerNavRect = tickerNav.getBoundingClientRect();\n    const nbaTeamsDropdown = document.querySelector(\"#nbaTeamsDropdown\");\n    const nbaGlobalDropdown = document.querySelector(\"#nbaGlobalDropdown\");\n\n    if (!nbaTeamsDropdown || !nbaGlobalDropdown) {\n        return;\n    }\n\n    nbaTeamsDropdown.style.left = 0;\n    nbaTeamsDropdown.style.transform = `translateX(${tickerNavRect.left}px)`;\n    nbaGlobalDropdown.style.transform = `translateX(${tickerNavRect.left}px)`;\n};\n\nexport const updateTickerNavDropdownPosition = () => {\n    handleMediaQueryChange(null, alignTickerDropdownToLeft);\n    handleMediaQueryChange(\n        null,\n        window.addEventListener(\"resize\", debounce(alignTickerDropdownToLeft)),\n    );\n};\n\nlet overflowViewportWidth = null; // Store the viewport width where overflow was detected\nlet overflowDetectorInitialized = false;\nconst desktopOverflowNavDetector = () => {\n    const desktopNavigation = document.querySelector(\"#desktopNavigation\");\n    const desktopNavigationLogo = document.querySelector(\n        \"#desktopNavigationLogo\",\n    );\n    const desktopLogoDivider = document.querySelector(\"#desktopLogoDivider\");\n    const burgerMenu = document.querySelector(\"#burgerMenu\");\n    const mobileEditionPicker = document.querySelector(\n        \"[data-testid='sidebar--edition-picker']\",\n    );\n    const DESKTOP_NAVIGATION_PADDING = 32;\n\n    if (!desktopNavigation || !desktopNavigationLogo) return;\n\n    let desktopNavigationWidth =\n        desktopNavigation.offsetWidth + desktopNavigationLogo.offsetWidth;\n    let documentWidth =\n        document.documentElement.clientWidth - DESKTOP_NAVIGATION_PADDING;\n\n    if (desktopNavigationWidth > documentWidth) {\n        if (documentWidth !== overflowViewportWidth) {\n            // Only toggle if it's the first time we detect overflow\n            overflowViewportWidth = documentWidth;\n\n            desktopNavigation.classList.remove(\"md:flex\");\n            burgerMenu.classList.remove(\"md:hidden\");\n            desktopLogoDivider.classList.remove(\"md:block\");\n            mobileEditionPicker.classList.add(\"mobile-edition-picker\");\n\n            // Burger Toggle\n            toggleMobileSidebarMenu();\n\n            // Edition Picker\n            const editionButtonLocator = \"#mobileEditionButton\";\n            const editionsMenuLocator = \"#mobileEditionsMenu\";\n            const editionButtonArrowLocator = \"#mobileEditionButtonArrow\";\n\n            toggleEditionMenu(\n                editionButtonLocator,\n                editionButtonArrowLocator,\n                editionsMenuLocator,\n            );\n        }\n    } else {\n        if (documentWidth >= overflowViewportWidth) {\n            overflowViewportWidth = null;\n\n            desktopNavigation.classList.add(\"md:flex\");\n            burgerMenu.classList.add(\"md:hidden\");\n            desktopLogoDivider.classList.add(\"md:block\");\n            mobileEditionPicker.classList.remove(\"mobile-edition-picker\");\n        }\n    }\n};\n\nexport const overflowDetector = () => {\n    if (overflowDetectorInitialized) {\n        return;\n    }\n    overflowDetectorInitialized = true;\n    const runDetector = () => desktopOverflowNavDetector();\n    const scheduleInitialRun = () =>\n        window.requestAnimationFrame(() =>\n            window.requestAnimationFrame(runDetector),\n        );\n\n    if (document?.fonts?.ready) {\n        document.fonts.ready.then(scheduleInitialRun).catch(scheduleInitialRun);\n    } else if (document.readyState === \"complete\") {\n        scheduleInitialRun();\n    } else {\n        window.addEventListener(\"load\", scheduleInitialRun, { once: true });\n    }\n\n    window.addEventListener(\"resize\", runDetector);\n};\n\nexport const firefoxaMoreItemsDropdown = () => {\n    const moreItemsContainer = document.querySelector(\n        \"#headerNavigation [data-testid='expandableMenuOnDesktop']\",\n    );\n    if (!isFirefox || !moreItemsContainer) return;\n\n    const moreItems = moreItemsContainer.querySelectorAll(\n        \"li[class*='md:!block']\",\n    );\n\n    const itemsCount = moreItems.length;\n    const storedBaseWidth = moreItemsContainer.dataset.baseWidth\n        ? parseFloat(moreItemsContainer.dataset.baseWidth)\n        : null;\n    const baseWidth = storedBaseWidth ?? moreItemsContainer.offsetWidth;\n    if (!storedBaseWidth) {\n        moreItemsContainer.dataset.baseWidth = String(baseWidth);\n    }\n\n    const columns = Math.max(1, Math.ceil(itemsCount / 5));\n    moreItemsContainer.style.width = `${baseWidth * columns}px`;\n};\n\n// Desktop additonal navigation dropdown offset position\nconst additionalMenuDropdownPlacement = () => {\n    const additionalNav = document.querySelector(\"#desktopAdditionalMenu\");\n    const additionalNavItems = document.querySelectorAll(\n        \"#desktopAdditionalMenu > li\",\n    );\n    const additionalMenuColumns = document.querySelectorAll(\n        \"[data-additional-sub-menu-columns]\",\n    );\n\n    if (isFirefox) {\n        for (const column of additionalMenuColumns) {\n            const itemCount = column.querySelectorAll(\n                \"[data-dropdown-menu-items]\",\n            ).length;\n            const multiplier = Math.ceil(itemCount / 10);\n\n            column.style.width = `${column.offsetWidth * multiplier}px`;\n        }\n    }\n\n    additionalNavItems.forEach((item) => {\n        const dropdown = item.querySelector(\"div\");\n        if (!dropdown) {\n            return;\n        }\n\n        const dropdownRect = dropdown.getBoundingClientRect();\n        const additionalNavRect = additionalNav.getBoundingClientRect();\n\n        if (dropdown.classList.contains(\"md:-translate-x-1/2\")) {\n            const dropdownRectRight = dropdownRect.right;\n            const additionalNavRectRight = additionalNavRect.right;\n\n            if (dropdownRectRight > additionalNavRectRight) {\n                dropdown.style.left = `calc(50% - ${dropdownRectRight - additionalNavRectRight}px)`;\n            } else {\n                dropdown.style.left = \"50%\";\n            }\n        }\n    });\n};\n\nlet expandedDropdownPositions = [];\nlet condensedDropdownPositions = [];\nwindow.__doneNavDetection = false;\n\nconst getExpandedDropdownsPosition = () => {\n    const primaryNav = document.querySelector(\"#headerNavigation\");\n    const primaryNavItems = document.querySelectorAll(\n        \"#desktopPrimaryMenu > [data-menu-item]\",\n    );\n\n    const EXPANDED_CONDENSED_DIFFERENCE = 168;\n    const NAVIGATION_PADDINGS = 23;\n    const BORDER_WIDTH = 2;\n    const extraLeftSpacing =\n        (window.innerWidth - primaryNav.offsetWidth) / 2 - NAVIGATION_PADDINGS;\n\n    const pushDropdownPosition = (\n        dropdownPositionsArray,\n        id,\n        position,\n        transform,\n    ) => {\n        dropdownPositionsArray.push({\n            id,\n            position,\n            transform,\n        });\n    };\n\n    primaryNavItems.forEach((item, id) => {\n        // Skip if the item is hidden\n        if (item.classList.contains(\"md:hidden\")) return;\n\n        const dropdown = item.querySelector(\"[data-has-dropdown]\");\n        if (!dropdown) return; // Skip if no dropdown\n\n        const itemRect = item.getBoundingClientRect();\n        const dropdownRect = dropdown.getBoundingClientRect();\n        const primaryNavRect = primaryNav.getBoundingClientRect();\n\n        const dropdownLeft = Math.round(dropdownRect.left);\n        const primaryNavLeft = Math.round(primaryNavRect.left);\n        const itemLeft = Math.round(itemRect.left);\n\n        const expandedPosition = dropdownLeft - primaryNavLeft - BORDER_WIDTH;\n        const condensedPosition =\n            dropdownLeft -\n            EXPANDED_CONDENSED_DIFFERENCE -\n            primaryNavLeft -\n            BORDER_WIDTH;\n\n        let isDropdownOverlap =\n            itemLeft - primaryNavLeft < itemLeft - dropdownLeft;\n\n        // Handle expanded dropdown positions\n        if (expandedPosition < primaryNavLeft - extraLeftSpacing) {\n            pushDropdownPosition(\n                expandedDropdownPositions,\n                id,\n                isDropdownOverlap ? 0 : \"50%\",\n                isDropdownOverlap,\n            );\n        } else {\n            pushDropdownPosition(expandedDropdownPositions, id, \"50%\", null);\n        }\n\n        // Handle condensed dropdown positions\n        if (condensedPosition < primaryNavLeft - extraLeftSpacing) {\n            pushDropdownPosition(\n                condensedDropdownPositions,\n                id,\n                isDropdownOverlap ? \"50%\" : condensedPosition,\n                isDropdownOverlap,\n            );\n        } else {\n            pushDropdownPosition(condensedDropdownPositions, id, null, null);\n        }\n    });\n    window.__doneNavDetection = true;\n};\n\nconst primaryMenuDropdownPlacement = () => {\n    const primaryNavItems = document.querySelectorAll(\n        \"#desktopPrimaryMenu > [data-menu-item]\",\n    );\n\n    primaryNavItems.forEach((item, index) => {\n        if (!item.classList.contains(\"md:hidden\")) {\n            const dropdown = item.querySelector(\"[data-has-dropdown]\");\n            const expandedLogoImgDiv = document.querySelector(\"#expanded-logo\");\n            const condensedLogoImgDiv =\n                document.querySelector(\"#condensed-logo\");\n\n            if (\n                condensedLogoImgDiv.classList.contains(\n                    \"logo-condensed--visible\",\n                )\n            ) {\n                const condensedDropdownData = condensedDropdownPositions.find(\n                    (obj) => obj.id === index,\n                );\n\n                if (condensedDropdownData) {\n                    dropdown.style.setProperty(\n                        \"left\",\n                        condensedDropdownData.position === 0\n                            ? \"50%\"\n                            : `calc(50% - ${condensedDropdownData.position}px`,\n                    );\n                    if (condensedDropdownData.transform) {\n                        dropdown.style.setProperty(\"transform\", `none`);\n                        dropdown.style.setProperty(\"left\", 0);\n                        dropdown.style.setProperty(\"translate\", \"unset\");\n                        item.style.setProperty(\"position\", `static`);\n                    }\n                }\n            }\n\n            if (\n                expandedLogoImgDiv.classList.contains(\"logo-expanded--visible\")\n            ) {\n                const expandedDropdownData = expandedDropdownPositions.find(\n                    (obj) => obj.id === index,\n                );\n                if (expandedDropdownData) {\n                    dropdown.style.setProperty(\n                        \"left\",\n                        expandedDropdownData.position,\n                    );\n\n                    if (expandedDropdownData.transform) {\n                        dropdown.style.setProperty(\"transform\", `none`);\n                        dropdown.style.setProperty(\"translate\", \"unset\");\n                        item.style.setProperty(\"position\", `static`);\n                    }\n                }\n            }\n        }\n    });\n};\n\nconst BOLD_FONT_WIDTH_ALLOWANCE = 2;\n\nconst preSetHoverBoldText = async (items, direction) => {\n    if (items.length === 0) return;\n\n    await document.fonts.ready;\n\n    if (direction === \"column\") {\n        Array.from(items).forEach((item) => {\n            const links = item.querySelectorAll(\"[data-dropdown-menu-items]\");\n            if (links.length) {\n                const naturalWidth = links[0].clientWidth;\n                links.forEach((el) => {\n                    el.style.width = `${naturalWidth + BOLD_FONT_WIDTH_ALLOWANCE}px`;\n                });\n            }\n        });\n    }\n\n    if (direction === \"row\") {\n        items.forEach((item) => {\n            item.style.width = `${item.offsetWidth + BOLD_FONT_WIDTH_ALLOWANCE}px`;\n\n            if (item.classList.contains(\"mr-0.5\")) {\n                item.classList.remove(\"mr-0.5\");\n            }\n        });\n    }\n};\n\nconst resetPreSetHoverBoldText = async (items) => {\n    if (items.length === 0) return;\n\n    await document.fonts.ready;\n\n    items.forEach((item) => {\n        const allLinks = item.querySelectorAll(\"[data-dropdown-menu-items]\");\n\n        allLinks.forEach((link) => {\n            link.style.removeProperty(\"width\");\n            link.style.width = \"\";\n        });\n    });\n};\n\nconst checkTeamName = (teams) => {\n    let isTeamNameWrapped = false;\n    if (teams) {\n        teams.forEach((team) => {\n            team.querySelectorAll(\"[data-team-title]\").forEach((title) => {\n                const city = title.children[0];\n                const name = title.children[title.children.length - 1];\n\n                if (\n                    city.getBoundingClientRect().top !==\n                    name.getBoundingClientRect().top\n                ) {\n                    isTeamNameWrapped = true;\n                }\n            });\n        });\n    }\n\n    if (isTeamNameWrapped) {\n        teams.forEach((team) => {\n            team.querySelectorAll(\"[data-team-title]\").forEach((title) => {\n                const city = title.children[0];\n                city.style.display = \"none\";\n            });\n        });\n    }\n};\n\nconst getTeamsDivision = () => {\n    const dropdownWithTeams = document.querySelectorAll(\n        \"[data-has-dropdown] [data-sub-menu-team]\",\n    );\n\n    dropdownWithTeams.forEach(async (teamDropdown) => {\n        const division = teamDropdown.querySelector(\"[data-teams-division]\");\n        if (!division) return;\n\n        const teams = division.querySelectorAll(\"[data-team]\");\n        const dropdown = teamDropdown.closest(\"[data-has-dropdown]\");\n        const menu = dropdown.closest(\"[data-menu-item]\");\n\n        switch (teams.length) {\n            case 1:\n                division.classList.add(\"js-grid-cols-1\");\n                dropdown.classList.add(\"js-dropdown-centered\");\n                menu.classList.add(\"md:relative\");\n                break;\n            case 2:\n                division.classList.add(\"js-grid-cols-2\");\n                dropdown.classList.add(\"js-dropdown-centered\");\n                menu.classList.add(\"md:relative\");\n                break;\n            case 3:\n                division.classList.add(\"js-grid-cols-3\");\n                dropdown.classList.add(\"js-dropdown-centered\");\n                menu.classList.add(\"md:relative\");\n                break;\n            default: {\n                const threeColumnSports = dropdown.querySelectorAll(\n                    \"a[href*='/nba'], a[href*='/mlb'], a[href*='/soccer']\",\n                );\n\n                if (threeColumnSports.length > 0) {\n                    threeColumnSports.forEach((dropdown) => {\n                        dropdown.classList.add(\"js-dropdown-centered\");\n                        division.classList.add(\"js-grid-cols-3\");\n                        menu.classList.add(\"js-relative-three-column\");\n                    });\n                } else {\n                    division.classList.add(\"js-grid-cols-4\");\n                }\n                break;\n            }\n        }\n\n        checkTeamName(teams);\n        await preSetHoverBoldText(teams, \"column\");\n    });\n};\n\nexport const updatePrimaryNavDropdownPosition = async () => {\n    await sportMenusHoverHandler();\n\n    handleMediaQueryChange(null, getTeamsDivision);\n    handleMediaQueryChange(null, getExpandedDropdownsPosition);\n    handleMediaQueryChange(null, primaryMenuDropdownPlacement);\n    handleMediaQueryChange(null, additionalMenuDropdownPlacement);\n\n    handleMediaQueryChange(\n        null,\n        monitorForChanges(\"#tsnLogo\", primaryMenuDropdownPlacement),\n    );\n};\n\nexport const secondaryMenuDropdown = () => {\n    let state = {\n        dropdown: null,\n        menu: null,\n        chevron: null,\n    };\n\n    const menuHasDropdowns = document.querySelectorAll(\n        \"[data-secondary-menu-navigation] [data-menu-has-dropdown]\",\n    );\n    if (!menuHasDropdowns.length) return;\n\n    preSetHoverBoldText(menuHasDropdowns, \"column\");\n    menuHasDropdowns.forEach((menu) => {\n        const dropdown = menu.querySelector(\"[data-has-dropdown]\");\n        const chevron = menu.querySelector(\"[data-menu-chevron]\");\n        const secondaryNav = document.querySelector(\"[data-secondary-menu-navigation]\");\n        if (!dropdown) return;\n\n        menu.addEventListener(\"click\", (event) => {\n            event.stopPropagation();\n\n            const willOpen = dropdown.classList.contains(\"opacity-0\");\n\n            // Close any previously active dropdown\n            if (state.dropdown && state.dropdown !== dropdown) {\n                resetSecondaryMenuDropdown(state);\n            }\n\n            // If the secondary nav has no horizontal scroll, remove overflow classes.\n            // If it has horizontal scroll and the dropdown is about to open, recalculate the dropdown position so it follows the correct horizontal offset.\n            if (!hasHorizontalScroll(secondaryNav)) {\n                secondaryNav.classList.remove(\"overflow-x-auto\", \"overflow-y-hidden\");\n            } else if (willOpen && secondaryNav.classList.contains(\"sub-nav\")) {\n                attachDropdownPositioning(menu, dropdown);\n            }\n\n            // Always hide ellipsis dropdown when opening another dropdown\n            hideEllipsisDropdownSubnav()\n\n            // Toggle current dropdown\n            menu.classList.toggle(\"font-bold\", willOpen);\n            dropdown.classList.toggle(\"opacity-0\", !willOpen);\n            dropdown.classList.toggle(\"pointer-events-none\", !willOpen);\n            chevron.classList.toggle(\"rotate-180\", !willOpen);\n\n            // Update State\n            Object.assign(\n                state,\n                willOpen\n                    ? { dropdown, menu, chevron }\n                    : { dropdown: null, menu: null, chevron: null },\n            );\n        });\n    });\n\n    // Close on outside click\n    document.addEventListener(\"click\", () => {\n        if (state.dropdown) resetSecondaryMenuDropdown(state);\n    });\n\n    const secondaryNav = document.querySelector(\"[data-secondary-menu-navigation]\");\n\n    // Close dropdown if user scrolled horizontally on subnav\n    secondaryNav.addEventListener('scroll', e => {\n        if ( e.deltaX !== 0 && secondaryNav.classList.contains(\"sub-nav\") && window.innerWidth >= 768 ) {\n            if (state.dropdown) resetSecondaryMenuDropdown(state);\n        }\n    })\n\n    // Close on hover into main menu\n    document\n        .querySelectorAll(\"#mainNavigation [data-menu-has-dropdown]\")\n        .forEach((menu) => {\n            menu.addEventListener(\"mouseenter\", () => {\n                if (state.dropdown) resetSecondaryMenuDropdown(state);\n            });\n        });\n};\n\nexport const updateSecondaryNavDropdownPosition = async () => {\n    const menuHasDropdowns = document.querySelectorAll(\n        \"[data-secondary-menu-navigation] [data-menu-has-dropdown]\",\n    );\n    if (!menuHasDropdowns.length) return;\n\n    await preSetHoverBoldText(menuHasDropdowns, \"column\");\n\n    handleMediaQueryChange(\n        mobileSecondaryMenuDropdown(),\n        secondaryMenuDropdownPlacement(),\n    );\n\n    handleMediaQueryChange(\n        window.addEventListener(\"resize\", debounce(shrinkFontWithLongTitle)),\n        window.addEventListener(\n            \"resize\",\n            debounce(secondaryMenuDropdownPlacement),\n        ),\n    );\n};\n\nasync function shrinkFontWithLongTitle() {\n    const subNavContainers = document.querySelectorAll(\n        \"#mobileSecondaryNavigation [data-has-dropdown]\",\n    );\n    const SINGLE_LINE_HEIGHT = 18;\n\n    if (subNavContainers.length < 1) return;\n\n    await document.fonts.ready;\n\n    subNavContainers.forEach((subNavContainer) => {\n        const menuItems = subNavContainer.querySelectorAll(\n            \"[data-dropdown-menu-items] .text-nav-secondary\",\n        );\n        const anyTruncated = Array.from(menuItems).some(\n            (item) => item.scrollHeight > SINGLE_LINE_HEIGHT,\n        );\n\n        if (anyTruncated) {\n            menuItems.forEach((item) => {\n                item.style.fontSize = \"10px\";\n            });\n        }\n    });\n}\n\nfunction mobileSecondaryMenuDropdown() {\n    const menuHasDropdowns = document.querySelectorAll(\n        \"#mobileSecondaryNavigation[data-secondary-menu-navigation] [data-menu-has-dropdown]\",\n    );\n    if (!menuHasDropdowns.length) return;\n\n    resetPreSetHoverBoldText(menuHasDropdowns);\n\n    shrinkFontWithLongTitle();\n}\n\nfunction secondaryMenuDropdownPlacement() {\n    const secondaryNav = document.querySelector(\n        \"#desktopSecondaryNavigation[data-secondary-menu-navigation]\",\n    );\n    if (!secondaryNav) return;\n\n    const menuHasDropdowns = secondaryNav.querySelectorAll(\n        \"[data-menu-has-dropdown]\",\n    );\n    if (!menuHasDropdowns.length) return;\n\n    menuHasDropdowns.forEach((menu) => {\n        const dropdown = menu.querySelector(\"[data-has-dropdown]\");\n        if (!dropdown) return;\n\n        const dropdownRectRight = dropdown.getBoundingClientRect().right;\n        const secondaryNavRectRight =\n            secondaryNav.getBoundingClientRect().right;\n\n        if (dropdownRectRight > secondaryNavRectRight) {\n            dropdown.classList.replace(\"md:-left-3\", \"md:right-0\");\n            menu.classList.remove(\"relative\");\n        }\n    });\n}\n\nfunction resetSecondaryMenuDropdown(state) {\n    state.menu?.classList.remove(\"font-bold\");\n    state.dropdown?.classList.add(\"opacity-0\", \"pointer-events-none\");\n    state.chevron?.classList.add(\"rotate-180\");\n\n    state.menu = null;\n    state.dropdown = null;\n    state.chevron = null;\n}\n\n/**\n * Enable click-to-open behavior for desktop dropdowns on devices that cannot hover.\n */\nexport const enableDesktopClickDropdownsOnNoHover = () => {\n    const SELECTOR_PRIMARY_ITEMS = \"#desktopPrimaryMenu > [data-menu-item]\";\n    const SELECTOR_ADDITIONAL_ITEMS = \"#desktopAdditionalMenu > li\";\n    const SELECTOR_TEXT = \"a, button\";\n    const SELECTOR_DROPDOWN = \"[data-has-dropdown]\";\n\n    const hoverMediaQuery = window.matchMedia(\n        \"(hover: hover) and (pointer: fine)\",\n    );\n\n    let openDropdownState = null;\n    let menuTexts = [];\n\n    const clearTextStyles = () => {\n        if (!menuTexts || menuTexts.length === 0) return;\n        menuTexts.forEach((el) => {\n            el.classList.remove(\"text-white\", \"text-d1\");\n        });\n    };\n\n    const getTextsFor = (menuItems) =>\n        menuItems\n            .map((item) => item.querySelector(SELECTOR_TEXT))\n            .filter(Boolean);\n\n    const setActiveText = (selectedText) => {\n        if (!menuTexts || menuTexts.length === 0) return;\n        menuTexts.forEach((el) => {\n            const isSelected = el === selectedText;\n            el.classList.toggle(\"text-white\", isSelected);\n            el.classList.toggle(\"text-d1\", !isSelected);\n        });\n    };\n\n    const closeCurrentDropdown = () => {\n        clearTextStyles();\n        if (!openDropdownState) return;\n        const { dropdown } = openDropdownState;\n        hideDropdownPanel(dropdown);\n        openDropdownState = null;\n    };\n\n    const hideDropdownPanel = (panelEl) => {\n        if (!panelEl) return;\n        panelEl.style.removeProperty(\"visibility\");\n        panelEl.style.removeProperty(\"opacity\");\n        panelEl.style.removeProperty(\"pointer-events\");\n    };\n\n    const showDropdownPanel = (panelEl) => {\n        if (!panelEl) return;\n        panelEl.style.visibility = \"visible\";\n        panelEl.style.opacity = \"1\";\n        panelEl.style.pointerEvents = \"auto\";\n    };\n\n    const bindClickDropdowns = () => {\n        const canHover = hoverMediaQuery.matches;\n        if (canHover) return;\n\n        const primaryMenuItems = document.querySelectorAll(\n            SELECTOR_PRIMARY_ITEMS,\n        );\n        const additionalMenuItems = document.querySelectorAll(\n            SELECTOR_ADDITIONAL_ITEMS,\n        );\n\n        const menuItems = [...primaryMenuItems, ...additionalMenuItems];\n        if (menuItems.length === 0) return;\n\n        menuTexts = getTextsFor(menuItems);\n\n        const onDocumentClickOutside = (e) => {\n            if (!openDropdownState) return;\n            const { item } = openDropdownState;\n            if (!item.contains(e.target)) {\n                closeCurrentDropdown();\n            }\n        };\n\n        document.addEventListener(\"click\", onDocumentClickOutside);\n\n        menuItems.forEach((item) => {\n            const dropdownPanel = item.querySelector(SELECTOR_DROPDOWN);\n            const textEl = item.querySelector(SELECTOR_TEXT);\n\n            if (!dropdownPanel || !textEl) return;\n\n            const onTextClick = (e) => {\n                if (!openDropdownState || openDropdownState.item !== item) {\n                    e.preventDefault();\n                    closeCurrentDropdown();\n                    setActiveText(textEl);\n                    showDropdownPanel(dropdownPanel);\n                    openDropdownState = { item, dropdown: dropdownPanel };\n                } else {\n                    closeCurrentDropdown();\n                }\n            };\n\n            textEl.addEventListener(\"click\", onTextClick);\n        });\n    };\n\n    hoverMediaQuery.addEventListener?.(\"change\", bindClickDropdowns);\n    bindClickDropdowns();\n};\n\n// Positions the dropdown relative to its menu button.\n// A small adjustment is added when using the ellipsis dropdown.\nfunction attachDropdownPositioning(menu, dropdown) {\n    const rect = menu.getBoundingClientRect();\n    let baseTop = rect.top + rect.height;\n    const baseLeft = rect.left;\n\n    dropdown.style.position = \"fixed\";\n    dropdown.style.top = `${baseTop}px`;\n    dropdown.style.left = `${baseLeft}px`;\n\n    let openedAtTop = window.scrollY === 0;\n    let ticking = false;\n\n    const onScroll = () => {\n        if (!dropdown || dropdown.style.display === \"none\") return;\n        if (ticking) return;\n\n        ticking = true;\n\n        requestAnimationFrame(() => {\n            const isAtTop = window.scrollY === 0;\n\n            if (isAtTop) {\n                const newRect = menu.getBoundingClientRect();\n                baseTop = newRect.top + newRect.height;\n\n                dropdown.style.top = `${baseTop}px`;\n\n                openedAtTop = true;\n            } else if (openedAtTop) {\n                const offset = Math.min(window.scrollY, 32);\n\n                dropdown.style.top = `${baseTop - offset}px`;\n            }\n\n            ticking = false;\n        });\n    };\n\n    window.addEventListener(\"scroll\", onScroll, { passive: true });\n}\n\n// Checks if the element has horizontal scroll.\nfunction hasHorizontalScroll(el) {\n    if (!el) return false;\n    return el.scrollWidth > el.clientWidth;\n}\n\n// Hides the ellipsis dropdown instantly.\nfunction hideEllipsisDropdownSubnav() {\n    const dropdown = document.querySelector(\".hover-sub-nav div:has(ul)\");\n    if (!dropdown) return;\n    dropdown.classList.remove(\"md:visible\");\n    dropdown.classList.remove(\"md:opacity-100\");\n}\n\nexport const enableClickEllipsisDropdownSubnav = () => {\n    const hoverableItemSubNav = document.querySelector(\".hover-sub-nav\");\n    const hoverableSubnavDropdown = document.querySelector(\".hover-sub-nav div:has(ul)\");\n    const secondaryNav = document.querySelector(\"[data-secondary-menu-navigation]\");\n\n    const showEllipsisDropdown = () => {\n        if (!hoverableSubnavDropdown) return;\n        hoverableSubnavDropdown.classList.add(\"md:visible\");\n        hoverableSubnavDropdown.classList.add(\"md:opacity-100\");\n    };\n\n    // Checks if element is at least partially inside viewport.\n    const isPartiallyOrFullyOutOfViewport = (el) => {\n        if (!el) return false;\n        const rect = el.getBoundingClientRect();\n\n        return (\n            rect.bottom > 0 &&\n            rect.right > 0 &&\n            rect.top < window.innerHeight &&\n            rect.left < window.innerWidth\n        );\n    };\n\n    // Touchscreen or horizontal scroll mode.\n    const isTouchscreen = window.matchMedia(\"(pointer: coarse)\").matches;\n\n    // Add click event on touch device or subnav with scrollbar\n    if (hasHorizontalScroll(secondaryNav) || isTouchscreen) {\n        hoverableItemSubNav.addEventListener(\"click\", (event) => {\n            event.stopPropagation();\n            showEllipsisDropdown();\n        });\n\n        document.addEventListener(\"click\", () => {\n            hideEllipsisDropdownSubnav();\n        });\n\n        // Close ellipsis dropdown if user scrolled horizontally\n        secondaryNav.addEventListener(\"scroll\", (e) => {\n            if (e.deltaX !== 0 && secondaryNav.classList.contains(\"sub-nav\")) {\n                hideEllipsisDropdownSubnav();\n            }\n        });\n    }\n\n    window.onload = () => {\n        requestAnimationFrame(() => {\n            const subnavHasScroll = hasHorizontalScroll(secondaryNav);\n            const dropdownOutOfView = isPartiallyOrFullyOutOfViewport(hoverableSubnavDropdown);\n            if (!hoverableItemSubNav || !hoverableSubnavDropdown || !secondaryNav) return;\n            // If the user is using a touch device and inside a scrollbar subnav, use dropdown recalculation else remove overflow and proceed with the existing hover positioning functionality\n            if (subnavHasScroll) {\n                attachDropdownPositioning(\n                    hoverableItemSubNav,\n                    hoverableSubnavDropdown);\n            } else {\n                hoverableItemSubNav.addEventListener(\"mouseover\", () => {\n                    secondaryNav.classList.remove(\"overflow-x-auto\", \"overflow-y-hidden\");\n                });\n            }\n\n            // Position the ellipsis dropdown to the right if the dropdown is not shown fully initially\n            if (dropdownOutOfView && subnavHasScroll) {\n                hoverableSubnavDropdown.style.left = \"unset\";\n                hoverableSubnavDropdown.style.right = \"8px\";\n                hoverableSubnavDropdown.style.translate = \"none\";\n            }\n        });\n    };\n};","export const setEditionItemsWidth = () => {\n    const editionItems = document.querySelectorAll(\n        \"#desktopEditionsMenu [data-edition-item]\",\n    );\n    let longestEditionWidth = 0;\n\n    editionItems.forEach((edition) => {\n        if (edition.clientWidth > longestEditionWidth) {\n            longestEditionWidth = edition.clientWidth;\n        }\n    });\n\n    editionItems.forEach((edition) => {\n        edition.style.width = `${longestEditionWidth}px`;\n    });\n};\n\n// Toggles the footer edition picker. Opens or closes when the dropdown is clicked.\nexport const toggleEditionHandlerV2 = () => {\n    const editionPickerButton = document.querySelector(\"#tickerEditionPickerV2\");\n    const editionPickerWindow = document.querySelector(\"#desktopEditionsMenuV2\");\n    const editionPickerArrow = document.querySelector(\"#tickerEditionPickerV2 #desktopEditionButton\");\n    const editionPickerCloseButton = document.querySelector(\"#editionPickerTitleV2 #editionCloseButton\");\n\n    if (!editionPickerButton || !editionPickerWindow || !editionPickerArrow || !editionPickerCloseButton) return;\n\n    const showClasses = [\"md:opacity-100\", \"md:visible\"];\n    const hideClasses = [\"md:opacity-0\", \"md:invisible\"];\n    editionPickerArrow.classList.add(\"rotate-180\")\n\n    const toggleEditionPickerWindow = () => {\n        const isHidden = editionPickerWindow.classList.contains(\"md:opacity-0\");\n        editionPickerWindow.classList.remove(...(isHidden ? hideClasses : showClasses));\n        editionPickerWindow.classList.add(...(isHidden ? showClasses : hideClasses));\n        editionPickerArrow.classList.toggle(\"rotate-180\");\n    };\n\n    const closeEditionPickerWindow = () => {\n        editionPickerWindow.classList.remove(...showClasses);\n        editionPickerWindow.classList.add(...hideClasses);\n        editionPickerArrow.classList.add(\"rotate-180\");\n    };\n\n    editionPickerButton.addEventListener('click', toggleEditionPickerWindow);\n    editionPickerCloseButton.addEventListener(\"click\", closeEditionPickerWindow);\n\n    editionPickerWindow.addEventListener(\"click\", (e) => {\n        e.stopPropagation();\n    });\n}","import { keyboardNavigation } from \"./keyboard\";\nimport { mouseNavigation } from \"./mouse\";\nimport {\n    condensedStateDesktopLogo,\n    secondaryMenuDropdown,\n    updateSubNavItemStyles,\n    updatePrimaryNavDropdownPosition,\n    updateTickerNavDropdownPosition,\n    updateSecondaryNavDropdownPosition,\n    nbaTickerHoverHandler,\n    overflowDetector,\n    enableDesktopClickDropdownsOnNoHover,\n    enableClickEllipsisDropdownSubnav,\n} from \"../../furniture/_menu\";\n\nimport { setEditionItemsWidth } from \"../../furniture/_edition\";\n\nconst runDesktopNavigationHandlers = () => {\n    keyboardNavigation();\n    mouseNavigation();\n    condensedStateDesktopLogo();\n    secondaryMenuDropdown();\n    updateSubNavItemStyles();\n    updatePrimaryNavDropdownPosition();\n    updateTickerNavDropdownPosition();\n    updateSecondaryNavDropdownPosition();\n    nbaTickerHoverHandler();\n    overflowDetector();\n    enableDesktopClickDropdownsOnNoHover();\n    setEditionItemsWidth();\n    enableClickEllipsisDropdownSubnav();\n};\n\nif (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", runDesktopNavigationHandlers);\n} else {\n    runDesktopNavigationHandlers();\n}\n\nwindow.addEventListener(\"resize\", () => {\n    setEditionItemsWidth();\n});\n","import { isDesktop, hideElem } from \"../../common/_constants\";\n\nexport const mouseNavigation = () => {\n    const skiptocontentElem = document.querySelector(\"#skiptocontent\");\n\n    if (isDesktop && skiptocontentElem) {\n        /* Mouse click outside the visible \"Skip to main content\" button will hide the button. */\n        document.addEventListener(\"click\", () => {\n            if (skiptocontentElem.classList.contains(\"active\")) {\n                hideElem(skiptocontentElem);\n            }\n        });\n    }\n};\n","import { isDesktop, showElem, hideElem } from \"../../common/_constants\";\n\nexport const keyboardNavigation = () => {\n\n    if(isDesktop){\n        document.addEventListener('keydown', e => {\n            const skiptocontentElem = document.querySelector('#skiptocontent');\n            \n            if(e.key === \" \") {\n                /* Disable spacebar default event while \"skip to main content\" button is active */\n                if(skiptocontentElem.classList.contains('active')) {\n                    e.preventDefault();\n                }\n            }\n        });\n\n        document.addEventListener('keyup', e => {\n            const skiptocontentElem = document.querySelector('#skiptocontent');\n\n            const activeElem = e.target;\n            const key = e.key;\n\n            switch (key) {\n                case \"Tab\": {\n                    if(activeElem.href?.match(/#main-content/) && !skiptocontentElem.classList.contains('active')){\n                        showElem(skiptocontentElem);\n                    } else if(!activeElem.href?.match(/#main-content/) && skiptocontentElem.classList.contains('active')) {\n                        hideElem(skiptocontentElem);\n                    }\n                    break;\n                }\n                case \"Escape\": {\n                    if(skiptocontentElem.classList.contains('active')) {\n                        hideElem(skiptocontentElem);\n                    }\n                    break;\n                }\n                case \"Enter\": {\n                    if(skiptocontentElem.classList.contains('active')) {\n                        hideElem(skiptocontentElem);\n                    }\n                    break;\n                }\n                case \" \": {\n                    if(skiptocontentElem.classList.contains('active')) {\n                        activeElem.click()\n                    }\n                    break;\n                }\n            }\n        });\n    }\n}"],"names":["isDesktop","window","innerWidth","isFirefox","navigator","userAgent","toLowerCase","includes","hideElem","e","classList","remove","setTimeout","add","isSafari","test","monitorForChanges","selector","callback","targetElement","document","querySelector","MutationObserver","observe","attributes","childList","subtree","debounce","timeoutId","clearTimeout","mobileCallback","desktopCallback","mediaQueryListMobile","matchMedia","mediaQueryListDesktop","handleMobileChange","event","matches","handleDesktopChange","addEventListener","adjustFontScale","containers","querySelectorAll","forEach","container","text","textContent","trim","split","filter","word","length","clientWidth","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","toggleSidebarHiddenVisible","buttonSelector","sidebarSelector","featureMenu","contains","_clickHandlerAdded","toggle","body","adjustGridRowForMobileMenus","menuId","parentMenuElement","numberOfMenuItems","children","gridRowsNumber","Math","ceil","style","gridTemplateRows","concat","sportMenusHoverHandler","_ref","_callee","moreMenu","toggleSportMenusTextColor","additionalMenuColumns","_context","isHovered","sportsMenu","previousElementSibling","preSetHoverBoldText","desktopLastScrollTop","updateDesktopLogo","scrollTop","scrollY","documentElement","tsnDesktopLogo","expandedLogoImgDiv","condensedLogoImgDiv","toggleTSNLogo","ticking","requestAnimationFrame","enableToggleTSNLogo","disableToggleTSNLogo","isExpandedLogoOnly","removeEventListener","setSubNavItemsHeight","subNavContainer","menu","teams","titles","longestTitleWidth","title","width","scrollHeight","clientHeight","contentHeight","height","observeTeamsContainerHeight","prevHeight","teamsContainers","teamsContainerResize","ResizeObserver","entries","contentRect","sportDropdownWidthSafari","subNavContainers","offsetWidth","sportSubMenuHoverBold","_ref2","_callee2","activeSubMenuItems","_context2","toggleDropdown","ticker","tickerNavigation","dropdown","setupTickerHover","isTickerHovered","relatedTarget","alignTickerDropdownToLeft","tickerNav","tickerNavRect","getBoundingClientRect","nbaTeamsDropdown","nbaGlobalDropdown","left","transform","overflowViewportWidth","overflowDetectorInitialized","overflowDetector","_document","runDetector","desktopNavigation","desktopNavigationLogo","desktopLogoDivider","burgerMenu","mobileEditionPicker","desktopNavigationWidth","documentWidth","sidebarMenu","featuredMenu","sidebarCloseButton","handleMediaQueryChange","toggleMobileSidebarMenu","button","buttonArrow","editions","buttonArrowSelector","editionsSelector","editionsContainer","firstElementChild","expandedHeight","offsetHeight","collapsedHeight","currentHeight","toggleEditionMenu","desktopOverflowNavDetector","scheduleInitialRun","fonts","ready","readyState","once","additionalMenuDropdownPlacement","additionalNav","additionalNavItems","_step","_iterator","_createForOfIteratorHelper","s","column","itemCount","multiplier","err","item","dropdownRect","additionalNavRect","dropdownRectRight","right","additionalNavRectRight","expandedDropdownPositions","condensedDropdownPositions","__doneNavDetection","getExpandedDropdownsPosition","primaryNav","primaryNavItems","extraLeftSpacing","pushDropdownPosition","dropdownPositionsArray","id","position","push","itemRect","primaryNavRect","dropdownLeft","round","primaryNavLeft","itemLeft","condensedPosition","isDropdownOverlap","primaryMenuDropdownPlacement","index","condensedDropdownData","find","obj","setProperty","expandedDropdownData","_ref3","_callee3","items","direction","_context3","Array","from","links","naturalWidth","el","_x","_x2","resetPreSetHoverBoldText","_ref4","_callee4","_context4","link","removeProperty","_x3","checkTeamName","isTeamNameWrapped","team","city","name","top","display","getTeamsDivision","_ref5","_callee5","teamDropdown","division","threeColumnSports","_t","_context5","closest","_x4","updatePrimaryNavDropdownPosition","_ref6","_callee6","_context6","updateSecondaryNavDropdownPosition","_ref7","_callee7","menuHasDropdowns","_context7","mobileSecondaryMenuDropdown","secondaryMenuDropdownPlacement","shrinkFontWithLongTitle","_shrinkFontWithLongTitle","_callee8","SINGLE_LINE_HEIGHT","_context8","menuItems","some","fontSize","secondaryNav","replace","resetSecondaryMenuDropdown","state","_state$menu","_state$dropdown","_state$chevron","chevron","attachDropdownPositioning","rect","baseTop","baseLeft","openedAtTop","newRect","offset","min","passive","hasHorizontalScroll","scrollWidth","hideEllipsisDropdownSubnav","setEditionItemsWidth","editionItems","longestEditionWidth","edition","runDesktopNavigationHandlers","skiptocontentElem","nbaTeamsTicker","nbaGlobalTicker","hoverableItemSubNav","hoverableSubnavDropdown","isTouchscreen","_hoverMediaQuery$addE","SELECTOR_TEXT","hoverMediaQuery","openDropdownState","menuTexts","closeCurrentDropdown","hideDropdownPanel","bindClickDropdowns","key","preventDefault","activeElem","target","_activeElem$href","_activeElem$href2","href","match","showElem","click","stopPropagation","willOpen","assign","deltaX","secondaryMenuDropdown","panelEl","primaryMenuItems","additionalMenuItems","_toConsumableArray","map","Boolean","getTextsFor","dropdownPanel","textEl","selectedText","isSelected","visibility","opacity","pointerEvents","onload","subnavHasScroll","dropdownOutOfView","bottom","innerHeight","isPartiallyOrFullyOutOfViewport","translate"],"sourceRoot":""}