{"version":3,"file":"global-navigation-DngtZVDR.js","sources":["../../../../node_modules/@rei/cdr-tokens/dist/rei-dot-com/js/cdr-tokens.mjs","../../../../src/main/js/navigation/global/util/getScreenSize.js","../../../../src/main/js/navigation/global/util/eventDelegationUtil.js","../../../../src/main/js/navigation/global/util/menuLinkUtil.js","../../../../src/main/js/navigation/global/components/mobile-menu.js","../../../../src/main/js/navigation/global/components/desktop-menu.js","../../../../src/main/js/navigation/global/util/mediaQuery.js","../../../../src/main/js/navigation/global/components/menu.js","../../../../src/main/js/navigation/global/util/navEvent.js","../../../../src/main/js/navigation/global/util/urlUtil.js","../../../../src/main/js/navigation/global/components/cartCounterFetcher.js","../../../../src/main/js/navigation/global/components/cartCounter.js","../../../../src/main/js/navigation/global/main/main.js","../../../../src/main/js/navigation/global/global.js"],"sourcesContent":["export const CdrColorBackgroundAccordionHover = \"#fafbf9\";\nexport const CdrColorBackgroundButtonPrimaryRest = \"#1f513f\";\nexport const CdrColorBackgroundButtonPrimaryActive = \"#1f513f\";\nexport const CdrColorBackgroundButtonPrimaryHover = \"#c7dfd1\";\nexport const CdrColorBackgroundButtonPrimaryIconAltHover = \"#fafbf9\";\nexport const CdrColorBackgroundButtonSecondaryRest = \"#fafbf9\";\nexport const CdrColorBackgroundButtonSecondaryActive = \"#958e83\";\nexport const CdrColorBackgroundButtonSecondaryHover = \"#f9f8f6\";\nexport const CdrColorBackgroundButtonSecondaryDisabled = \"#fafbf9\";\nexport const CdrColorBackgroundButtonDarkRest = \"#4b4a48\";\nexport const CdrColorBackgroundButtonDarkActive = \"#4b4a48\";\nexport const CdrColorBackgroundButtonDarkHover = \"#edeae3\";\nexport const CdrColorBackgroundButtonSaleRest = \"#c7370f\";\nexport const CdrColorBackgroundButtonSaleActive = \"#c7370f\";\nexport const CdrColorBackgroundButtonSaleHover = \"#fde2e2\";\nexport const CdrColorBackgroundButtonDefaultDisabled = \"#d5cfc3\";\nexport const CdrColorBackgroundButtonIconOnlyActive = \"#f7f5f3\";\nexport const CdrColorBackgroundChipDefaultRest = \"#ffffff\";\nexport const CdrColorBackgroundChipDefaultDisabled = \"#ffffff\";\nexport const CdrColorBackgroundChipDefaultHover = \"#f7f5f3\";\nexport const CdrColorBackgroundChipDefaultFocus = \"#ffffff\";\nexport const CdrColorBackgroundChipDefaultActive = \"#edeae3\";\nexport const CdrColorBackgroundChipDefaultSelected = \"#d5cfc3\";\nexport const CdrColorBackgroundChipDefaultSelectedHover = \"#edeae3\";\nexport const CdrColorBackgroundChipDefaultSelectedFocus = \"#d5cfc3\";\nexport const CdrColorBackgroundChipDefaultSelectedActive = \"#edeae3\";\nexport const CdrColorBackgroundTransparent = \"rgba(255, 255, 255, 0)\";\nexport const CdrColorBackgroundPrimary = \"#ffffff\";\nexport const CdrColorBackgroundSecondary = \"#f7f5f3\";\nexport const CdrColorBackgroundSale = \"#c7370f\";\nexport const CdrColorBackgroundBrandSpruce = \"#1f513f\";\nexport const CdrColorBackgroundSuccess = \"#ecf9e6\";\nexport const CdrColorBackgroundInfo = \"#e2f4fe\";\nexport const CdrColorBackgroundWarning = \"#fdf6e2\";\nexport const CdrColorBackgroundError = \"#fcefe4\";\nexport const CdrColorBackgroundLabelDefaultHover = \"#fafbf9\";\nexport const CdrColorBackgroundLabelDefaultActive = \"#edeae3\";\nexport const CdrColorBackgroundLabelDefaultFocus = \"#fafbf9\";\nexport const CdrColorBackgroundLabelSecondaryHover = \"rgba(255, 255, 255, 0.75)\";\nexport const CdrColorBackgroundLabelSecondaryActive = \"#ffffff\";\nexport const CdrColorBackgroundLabelSecondaryFocus = \"rgba(255, 255, 255, 0.75)\";\nexport const CdrColorBackgroundInputDefault = \"rgba(247, 245, 243, 0.15)\";\nexport const CdrColorBackgroundInputSecondary = \"rgba(255, 255, 255, 0.85)\";\nexport const CdrColorBackgroundInputError = \"rgba(255, 242, 242, 0.75)\";\nexport const CdrColorBackgroundInputDefaultHover = \"#fafbf9\";\nexport const CdrColorBackgroundInputDefaultActive = \"#fafbf9\";\nexport const CdrColorBackgroundInputDefaultSelected = \"#4b4a48\";\nexport const CdrColorBackgroundInputSecondaryActive = \"#ffffff\";\nexport const CdrColorBackgroundInputDefaultSelectedHover = \"#958e83\";\nexport const CdrColorBackgroundInputDefaultDisabled = \"#fafbf9\";\nexport const CdrColorBackgroundInputDefaultSelectedFocus = \"#958e83\";\nexport const CdrColorBackgroundInputDefaultFocus = \"#fafbf9\";\nexport const CdrColorBackgroundMessageDefault01 = \"#f9f8f6\";\nexport const CdrColorBackgroundMessageDefault02 = \"#e8e0ce\";\nexport const CdrColorBackgroundMessageSuccess = \"#ecf9e6\";\nexport const CdrColorBackgroundMessageSuccess01 = \"#f4fbf5\";\nexport const CdrColorBackgroundMessageSuccess02 = \"#d5e6cb\";\nexport const CdrColorBackgroundMessageWarning = \"#fdf6e2\";\nexport const CdrColorBackgroundMessageWarning01 = \"#fefcf1\";\nexport const CdrColorBackgroundMessageWarning02 = \"#f5e9b7\";\nexport const CdrColorBackgroundMessageError = \"#fcefe4\";\nexport const CdrColorBackgroundMessageError01 = \"#fdf7f7\";\nexport const CdrColorBackgroundMessageError02 = \"#eecbc1\";\nexport const CdrColorBackgroundMessageInfo = \"#e2f4fe\";\nexport const CdrColorBackgroundMessageInfo01 = \"#edf4f5\";\nexport const CdrColorBackgroundMessageInfo02 = \"#c2d8db\";\nexport const CdrColorBackgroundMessageSale = \"#c7370f\";\nexport const CdrColorBackgroundModalOverlay = \"rgba(247, 245, 243, 0.85)\";\nexport const CdrColorBackgroundPaginationHover = \"#fafbf9\";\nexport const CdrColorBackgroundPaginationKeyline = \"#406eb5\";\nexport const CdrColorBackgroundRatingStarDefault = \"#fafbf9\";\nexport const CdrColorBackgroundRatingStarHighlighted = \"#ffd280\";\nexport const CdrColorBackgroundSlideHover = \"#fafbf9\";\nexport const CdrColorBackgroundSlideDefault = \"#fafbf9\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultRest = \"#ffffff\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultActive = \"#ffffff\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultHover = \"#ffffff\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultChecked = \"#ffffff\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultDisabled = \"#f7f5f3\";\nexport const CdrColorBackgroundSurfaceSelectionDefaultLoading = \"#fafbf9\";\nexport const CdrColorBackgroundSurfacePrimary = \"#ffffff\";\nexport const CdrColorBackgroundSurfaceSecondary = \"#f7f5f3\";\nexport const CdrColorBackgroundSurfaceBrandSpruce = \"#1f513f\";\nexport const CdrColorBackgroundSurfaceSale = \"#c7370f\";\nexport const CdrColorBackgroundSwitchDefaultRest = \"#fafbf9\";\nexport const CdrColorBackgroundSwitchDefaultHover = \"#fafbf9\";\nexport const CdrColorBackgroundSwitchDefaultFocus = \"#fafbf9\";\nexport const CdrColorBackgroundSwitchSelectedDefaultRest = \"#4b4a48\";\nexport const CdrColorBackgroundSwitchSelectedDefaultHover = \"#2e2e2b\";\nexport const CdrColorBackgroundSwitchSelectedDefaultFocus = \"#2e2e2b\";\nexport const CdrColorBackgroundSwitchHandleDefaultRest = \"#d5cfc3\";\nexport const CdrColorBackgroundSwitchHandleDefaultHover = \"#edeae3\";\nexport const CdrColorBackgroundSwitchHandleDefaultFocus = \"#d5cfc3\";\nexport const CdrColorBackgroundSwitchHandleSelectedDefaultRest = \"#d5cfc3\";\nexport const CdrColorBackgroundSwitchHandleSelectedDefaultHover = \"#d5cfc3\";\nexport const CdrColorBackgroundSwitchHandleSelectedDefaultFocus = \"#d5cfc3\";\nexport const CdrColorBackgroundTableHeader = \"#f7f5f3\";\nexport const CdrColorBackgroundTableRow = \"#ffffff\";\nexport const CdrColorBackgroundTableRowAlt = \"#fafbf9\";\nexport const CdrColorBackgroundToggleGroupDefaultRest = \"#fafbf9\";\nexport const CdrColorBackgroundToggleButtonDefaultRest = \"#fafbf9\";\nexport const CdrColorBackgroundToggleButtonDefaultHover = \"#edeae3\";\nexport const CdrColorBackgroundToggleButtonDefaultFocus = \"#edeae3\";\nexport const CdrColorBackgroundToggleButtonDefaultSelectedRest = \"#ffffff\";\nexport const CdrColorBackgroundToggleButtonDefaultSelectedHover = \"#ffffff\";\nexport const CdrColorBackgroundTooltipDefault = \"#2e2e2b\";\nexport const CdrColorTextButtonPrimary = \"#fafbf9\";\nexport const CdrColorTextButtonPrimaryHover = \"#1f513f\";\nexport const CdrColorTextButtonPrimaryActive = \"#fafbf9\";\nexport const CdrColorTextButtonPrimaryDisabled = \"#ffffff\";\nexport const CdrColorTextButtonSecondary = \"#4b4a48\";\nexport const CdrColorTextButtonSecondaryHover = \"#4b4a48\";\nexport const CdrColorTextButtonSecondaryActive = \"#fafbf9\";\nexport const CdrColorTextButtonSecondaryDisabled = \"#d5cfc3\";\nexport const CdrColorTextButtonDark = \"#fafbf9\";\nexport const CdrColorTextButtonDarkHover = \"#4b4a48\";\nexport const CdrColorTextButtonDarkActive = \"#fafbf9\";\nexport const CdrColorTextButtonDarkDisabled = \"#ffffff\";\nexport const CdrColorTextButtonSale = \"#ffffff\";\nexport const CdrColorTextButtonSaleHover = \"#c7370f\";\nexport const CdrColorTextButtonSaleActive = \"#ffffff\";\nexport const CdrColorTextButtonSaleDisabled = \"#ffffff\";\nexport const CdrColorTextChipDefault = \"#4b4a48\";\nexport const CdrColorTextChipDisabled = \"#d5cfc3\";\nexport const CdrColorTextPrimary = \"#4b4a48\";\nexport const CdrColorTextSecondary = \"#736e65\";\nexport const CdrColorTextEmphasis = \"#2e2e2b\";\nexport const CdrColorTextBrand = \"#1f513f\";\nexport const CdrColorTextSale = \"#c7370f\";\nexport const CdrColorTextInverse = \"#fafbf9\";\nexport const CdrColorTextDisabled = \"#d5cfc3\";\nexport const CdrColorTextSuccess = \"#2e6b34\";\nexport const CdrColorTextWarning = \"#854714\";\nexport const CdrColorTextError = \"#811823\";\nexport const CdrColorTextInfo = \"#1b437e\";\nexport const CdrColorTextInputDefault = \"#2e2e2b\";\nexport const CdrColorTextInputLabel = \"#4b4a48\";\nexport const CdrColorTextInputLabelDisabled = \"#b2ab9f\";\nexport const CdrColorTextInputPlaceholder = \"#736e65\";\nexport const CdrColorTextInputRequired = \"#4b4a48\";\nexport const CdrColorTextInputOptional = \"#736e65\";\nexport const CdrColorTextInputDisabled = \"#d5cfc3\";\nexport const CdrColorTextInputFilled = \"#2e2e2b\";\nexport const CdrColorTextInputHelp = \"#736e65\";\nexport const CdrColorTextInputError = \"#b33322\";\nexport const CdrColorTextLinkRest = \"#406eb5\";\nexport const CdrColorTextLinkHover = \"#406eb5\";\nexport const CdrColorTextLinkActive = \"#0b2d60\";\nexport const CdrColorTextLinkDisabled = \"#d5cfc3\";\nexport const CdrColorTextLinkVisited = \"#406eb5\";\nexport const CdrColorTextMessageError = \"#bb4045\";\nexport const CdrColorTextRatingDefault = \"#4b4a48\";\nexport const CdrColorTextRatingHover = \"#406eb5\";\nexport const CdrColorTextRatingSeparator = \"#b2ab9f\";\nexport const CdrColorTextTabRest = \"#736e65\";\nexport const CdrColorTextTabActive = \"#4b4a48\";\nexport const CdrColorTextTabHover = \"#406eb5\";\nexport const CdrColorTextTabDisabled = \"#d5cfc3\";\nexport const CdrColorTextToggleButtonDefaultRest = \"#4b4a48\";\nexport const CdrColorTextTooltipDefault = \"#fafbf9\";\nexport const CdrColorBorderButtonPrimaryRest = \"#1f513f\";\nexport const CdrColorBorderButtonPrimaryActive = \"#1f513f\";\nexport const CdrColorBorderButtonPrimaryActiveInset = \"#f7f5f3\";\nexport const CdrColorBorderButtonPrimaryHover = \"#1f513f\";\nexport const CdrColorBorderButtonSecondaryRest = \"#958e83\";\nexport const CdrColorBorderButtonSecondaryActive = \"#958e83\";\nexport const CdrColorBorderButtonSecondaryActiveInset = \"#f7f5f3\";\nexport const CdrColorBorderButtonSecondaryHover = \"#4b4a48\";\nexport const CdrColorBorderButtonDarkRest = \"#4b4a48\";\nexport const CdrColorBorderButtonDarkActive = \"#4b4a48\";\nexport const CdrColorBorderButtonDarkActiveInset = \"#edeae3\";\nexport const CdrColorBorderButtonDarkHover = \"#4b4a48\";\nexport const CdrColorBorderButtonSaleRest = \"#c7370f\";\nexport const CdrColorBorderButtonSaleActive = \"#c7370f\";\nexport const CdrColorBorderButtonSaleActiveInset = \"#fde2e2\";\nexport const CdrColorBorderButtonSaleHover = \"#c7370f\";\nexport const CdrColorBorderButtonDefaultDisabled = \"#d5cfc3\";\nexport const CdrColorBorderButtonIconOnlyActive = \"#958e83\";\nexport const CdrColorBorderChipDefaultRest = \"#958e83\";\nexport const CdrColorBorderChipDefaultDisabled = \"#d5cfc3\";\nexport const CdrColorBorderChipDefaultHover = \"#958e83\";\nexport const CdrColorBorderChipDefaultFocus = \"#4b4a48\";\nexport const CdrColorBorderChipDefaultActive = \"#4b4a48\";\nexport const CdrColorBorderChipDefaultSelectedRest = \"#4b4a48\";\nexport const CdrColorBorderChipDefaultSelectedHover = \"#736e65\";\nexport const CdrColorBorderChipDefaultSelectedFocus = \"#4b4a48\";\nexport const CdrColorBorderTransparent = \"rgba(255, 255, 255, 0)\";\nexport const CdrColorBorderPrimary = \"#d5cfc3\";\nexport const CdrColorBorderSecondary = \"#958e83\";\nexport const CdrColorBorderSuccess = \"#3b8349\";\nexport const CdrColorBorderWarning = \"#b68b37\";\nexport const CdrColorBorderError = \"#bb4045\";\nexport const CdrColorBorderInfo = \"#406eb5\";\nexport const CdrColorBorderLabelDefaultFocus = \"#2e2e2b\";\nexport const CdrColorBorderInputDefault = \"#958e83\";\nexport const CdrColorBorderInputError = \"#b33322\";\nexport const CdrColorBorderInputDefaultActive = \"#4b4a48\";\nexport const CdrColorBorderInputDefaultSelected = \"#4b4a48\";\nexport const CdrColorBorderInputDefaultFocus = \"#2e2e2b\";\nexport const CdrColorBorderInputDefaultSelectedHover = \"#4b4a48\";\nexport const CdrColorBorderInputDefaultHover = \"#2e2e2b\";\nexport const CdrColorBorderInputDefaultDisabled = \"#d5cfc3\";\nexport const CdrColorBorderLinkRest = \"#406eb5\";\nexport const CdrColorBorderLinkHover = \"#406eb5\";\nexport const CdrColorBorderLinkActive = \"#0b2d60\";\nexport const CdrColorBorderLinkDisabled = \"#d5cfc3\";\nexport const CdrColorBorderLinkVisited = \"#406eb5\";\nexport const CdrColorBorderMessageDefault01 = \"#726d64\";\nexport const CdrColorBorderMessageDefault02 = \"#e8e0ce\";\nexport const CdrColorBorderMessageSuccess01 = \"#3b8349\";\nexport const CdrColorBorderMessageSuccess02 = \"#d5e6cb\";\nexport const CdrColorBorderMessageWarning01 = \"#b68b37\";\nexport const CdrColorBorderMessageWarning02 = \"#f5e9b7\";\nexport const CdrColorBorderMessageError01 = \"#bb4045\";\nexport const CdrColorBorderMessageError02 = \"#eecbc1\";\nexport const CdrColorBorderMessageInfo01 = \"#408e86\";\nexport const CdrColorBorderMessageInfo02 = \"#c2d8db\";\nexport const CdrColorBorderRatingStarDefault = \"#958e83\";\nexport const CdrColorBorderRatingStarHighlighted = \"#bd7b2d\";\nexport const CdrColorBorderSurfaceSelectionDefaultRest = \"#958e83\";\nexport const CdrColorBorderSurfaceSelectionDefaultActive = \"#958e83\";\nexport const CdrColorBorderSurfaceSelectionDefaultHover = \"#958e83\";\nexport const CdrColorBorderSurfaceSelectionDefaultChecked = \"#2e2e2b\";\nexport const CdrColorBorderSurfaceSelectionDefaultDisabled = \"#958e83\";\nexport const CdrColorBorderSurfaceSelectionDefaultLoading = \"#958e83\";\nexport const CdrColorBorderSurfacePrimary = \"#d5cfc3\";\nexport const CdrColorBorderSurfaceSecondary = \"#958e83\";\nexport const CdrColorBorderSurfaceSuccess = \"#3b8349\";\nexport const CdrColorBorderSurfaceWarning = \"#b68b37\";\nexport const CdrColorBorderSurfaceError = \"#bb4045\";\nexport const CdrColorBorderSurfaceInfo = \"#406eb5\";\nexport const CdrColorBorderSwitchDefaultHover = \"#4b4a48\";\nexport const CdrColorBorderSwitchHandleDefaultRest = \"#d5cfc3\";\nexport const CdrColorBorderSwitchHandleDefaultHover = \"#4b4a48\";\nexport const CdrColorBorderSwitchHandleDefaultFocus = \"#d5cfc3\";\nexport const CdrColorBorderTabKeylineRest = \"#958e83\";\nexport const CdrColorBorderTabKeylineActive = \"#406eb5\";\nexport const CdrColorBorderTabKeylineActiveAlt = \"#78b1e8\";\nexport const CdrColorBorderTabKeylineHover = \"#406eb5\";\nexport const CdrColorBorderTabKeylineHoverAlt = \"#78b1e8\";\nexport const CdrColorBorderTabKeylineDisabled = \"#d5cfc3\";\nexport const CdrColorBorderTableDefault = \"#d5cfc3\";\nexport const CdrColorBorderTableHead = \"#958e83\";\nexport const CdrColorBorderToggleButtonDefaultFocus = \"#4b4a48\";\nexport const CdrColorBorderToggleButtonDefaultSelectedRest = \"#4b4a48\";\nexport const CdrColorBorderToggleButtonDefaultSelectedFocus = \"#4b4a48\";\nexport const CdrColorBorderTooltipDefault = \"#fafbf9\";\nexport const CdrColorIconDefault = \"#958e83\";\nexport const CdrColorIconEmphasis = \"#4b4a48\";\nexport const CdrColorIconLink = \"#406eb5\";\nexport const CdrColorIconDisabled = \"#d5cfc3\";\nexport const CdrColorIconCheckboxDefaultSelected = \"#ffffff\";\nexport const CdrColorIconCheckboxDefaultSelectedHover = \"#ffffff\";\nexport const CdrColorIconCheckboxDefaultSelectedActive = \"#4b4a48\";\nexport const CdrColorIconMessageDefault = \"#726d64\";\nexport const CdrColorIconMessageSuccess = \"#3b8349\";\nexport const CdrColorIconMessageWarning = \"#b68b37\";\nexport const CdrColorIconMessageError = \"#bb4045\";\nexport const CdrColorIconMessageInfo = \"#408e86\";\nexport const CdrColorIconSwitchSelectedDefaultRest = \"#d5cfc3\";\nexport const CdrColorIconSwitchSelectedDefaultHover = \"#d5cfc3\";\nexport const CdrColorIconSwitchSelectedDefaultFocus = \"#d5cfc3\";\nexport const CdrFormInputHeightDefault = \"40\";\nexport const CdrFormInputHeightLarge = \"48\";\nexport const CdrFormFigureSizeSmall = \"16\";\nexport const CdrFormFigureSizeMedium = \"16\";\nexport const CdrFormFigureSizeLarge = \"20\";\nexport const CdrIconSizeSm = \"16\";\nexport const CdrIconSize = \"24\";\nexport const CdrIconSizeLg = \"32\";\nexport const CdrDuration1X = \"100ms\";\nexport const CdrDuration2X = \"200ms\";\nexport const CdrDuration3X = \"300ms\";\nexport const CdrDuration4X = \"400ms\";\nexport const CdrDuration5X = \"500ms\";\nexport const CdrDuration6X = \"600ms\";\nexport const CdrTimingFunctionEaseOut = \"cubic-bezier(0.32, 0.94, 0.60, 1)\";\nexport const CdrTimingFunctionEase = \"cubic-bezier(0.15, 0, 0.15, 0)\";\nexport const CdrTimingFunctionLinear = \"cubic-bezier(0, 0, 1, 1)\";\nexport const CdrProminenceFlatX = \"0\";\nexport const CdrProminenceFlatY = \"0\";\nexport const CdrProminenceFlatBlur = \"0\";\nexport const CdrProminenceFlatSpread = \"0\";\nexport const CdrProminenceFlatColor = \"rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceRaisedX = \"0\";\nexport const CdrProminenceRaisedY = \"2px\";\nexport const CdrProminenceRaisedBlur = \"2px\";\nexport const CdrProminenceRaisedSpread = \"0\";\nexport const CdrProminenceRaisedColor = \"rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceElevatedX = \"0\";\nexport const CdrProminenceElevatedY = \"4px\";\nexport const CdrProminenceElevatedBlur = \"4px\";\nexport const CdrProminenceElevatedSpread = \"0\";\nexport const CdrProminenceElevatedColor = \"rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceFloatingX = \"0\";\nexport const CdrProminenceFloatingY = \"8px\";\nexport const CdrProminenceFloatingBlur = \"8px\";\nexport const CdrProminenceFloatingSpread = \"0\";\nexport const CdrProminenceFloatingColor = \"rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceLiftedX = \"0\";\nexport const CdrProminenceLiftedY = \"16px\";\nexport const CdrProminenceLiftedBlur = \"16px\";\nexport const CdrProminenceLiftedSpread = \"0\";\nexport const CdrProminenceLiftedColor = \"rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceFlat = \"0 0 0 0 rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceRaised = \"0 2px 2px 0 rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceElevated = \"0 4px 4px 0 rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceFloating = \"0 8px 8px 0 rgba(46, 46, 43, 0.2)\";\nexport const CdrProminenceLifted = \"0 16px 16px 0 rgba(46, 46, 43, 0.2)\";\nexport const CdrRadiusSharp = \"0\";\nexport const CdrRadiusSoft = \"2\";\nexport const CdrRadiusSofter = \"4\";\nexport const CdrRadiusSoftest = \"6\";\nexport const CdrRadiusRound = \"9999\";\nexport const CdrSpaceZero = \"0\";\nexport const CdrSpaceSixteenthX = \"1\";\nexport const CdrSpaceEighthX = \"2\";\nexport const CdrSpaceThreeSixteenthX = \"3\";\nexport const CdrSpaceQuarterX = \"4\";\nexport const CdrSpaceThreeEighthX = \"6\";\nexport const CdrSpaceHalfX = \"8\";\nexport const CdrSpaceThreeQuarterX = \"12\";\nexport const CdrSpaceOneX = \"16\";\nexport const CdrSpaceOneAndAHalfX = \"24\";\nexport const CdrSpaceTwoX = \"32\";\nexport const CdrSpaceThreeX = \"48\";\nexport const CdrSpaceFourX = \"64\";\nexport const CdrSpaceInsetSixteenthX = \"1\";\nexport const CdrSpaceInsetEighthX = \"2\";\nexport const CdrSpaceInsetEighthXSquishTopBottom = \"0\";\nexport const CdrSpaceInsetEighthXSquishLeftRight = \"2\";\nexport const CdrSpaceInsetEighthXStretchTopBottom = \"4\";\nexport const CdrSpaceInsetEighthXStretchLeftRight = \"2\";\nexport const CdrSpaceInsetThreeSixteenthX = \"3\";\nexport const CdrSpaceInsetQuarterX = \"4\";\nexport const CdrSpaceInsetQuarterXSquishTopBottom = \"2\";\nexport const CdrSpaceInsetQuarterXSquishLeftRight = \"4\";\nexport const CdrSpaceInsetQuarterXStretchTopBottom = \"6\";\nexport const CdrSpaceInsetQuarterXStretchLeftRight = \"4\";\nexport const CdrSpaceInsetThreeEighthX = \"6\";\nexport const CdrSpaceInsetHalfX = \"8\";\nexport const CdrSpaceInsetHalfXSquishTopBottom = \"4\";\nexport const CdrSpaceInsetHalfXSquishLeftRight = \"8\";\nexport const CdrSpaceInsetHalfXStretchTopBottom = \"12\";\nexport const CdrSpaceInsetHalfXStretchLeftRight = \"8\";\nexport const CdrSpaceInsetThreeQuarterX = \"12\";\nexport const CdrSpaceInsetThreeQuarterXSquishTopBottom = \"6\";\nexport const CdrSpaceInsetThreeQuarterXSquishLeftRight = \"12\";\nexport const CdrSpaceInsetThreeQuarterXStretchTopBottom = \"18\";\nexport const CdrSpaceInsetThreeQuarterXStretchLeftRight = \"12\";\nexport const CdrSpaceInsetOneX = \"16\";\nexport const CdrSpaceInsetOneXSquishTopBottom = \"8\";\nexport const CdrSpaceInsetOneXSquishLeftRight = \"16\";\nexport const CdrSpaceInsetOneXStretchTopBottom = \"24\";\nexport const CdrSpaceInsetOneXStretchLeftRight = \"16\";\nexport const CdrSpaceInsetOneAndAHalfX = \"24\";\nexport const CdrSpaceInsetOneAndAHalfXSquishTopBottom = \"12\";\nexport const CdrSpaceInsetOneAndAHalfXSquishLeftRight = \"24\";\nexport const CdrSpaceInsetOneAndAHalfXStretchTopBottom = \"36\";\nexport const CdrSpaceInsetOneAndAHalfXStretchLeftRight = \"24\";\nexport const CdrSpaceInsetTwoX = \"32\";\nexport const CdrSpaceInsetTwoXSquishTopBottom = \"16\";\nexport const CdrSpaceInsetTwoXSquishLeftRight = \"32\";\nexport const CdrSpaceInsetTwoXStretchTopBottom = \"48\";\nexport const CdrSpaceInsetTwoXStretchLeftRight = \"32\";\nexport const CdrSpaceInsetThreeX = \"48\";\nexport const CdrSpaceInsetThreeXSquishTopBottom = \"24\";\nexport const CdrSpaceInsetThreeXSquishLeftRight = \"48\";\nexport const CdrSpaceInsetThreeXStretchTopBottom = \"72\";\nexport const CdrSpaceInsetThreeXStretchLeftRight = \"48\";\nexport const CdrSpaceInsetFourX = \"64\";\nexport const CdrSpaceInsetFourXSquishTopBottom = \"32\";\nexport const CdrSpaceInsetFourXSquishLeftRight = \"64\";\nexport const CdrSpaceInsetFourXStretchTopBottom = \"96\";\nexport const CdrSpaceInsetFourXStretchLeftRight = \"64\";\nexport const CdrSpaceInsetEighthXSquish = \"0 2\";\nexport const CdrSpaceInsetEighthXStretch = \"4 2\";\nexport const CdrSpaceInsetQuarterXSquish = \"2 4\";\nexport const CdrSpaceInsetQuarterXStretch = \"6 4\";\nexport const CdrSpaceInsetHalfXSquish = \"4 8\";\nexport const CdrSpaceInsetHalfXStretch = \"12 8\";\nexport const CdrSpaceInsetThreeQuarterXSquish = \"6 12\";\nexport const CdrSpaceInsetThreeQuarterXStretch = \"18 12\";\nexport const CdrSpaceInsetOneXSquish = \"8 16\";\nexport const CdrSpaceInsetOneXStretch = \"24 16\";\nexport const CdrSpaceInsetOneAndAHalfXSquish = \"12 24\";\nexport const CdrSpaceInsetOneAndAHalfXStretch = \"36 24\";\nexport const CdrSpaceInsetTwoXSquish = \"16 32\";\nexport const CdrSpaceInsetTwoXStretch = \"48 32\";\nexport const CdrSpaceInsetThreeXSquish = \"24 48\";\nexport const CdrSpaceInsetThreeXStretch = \"72 48\";\nexport const CdrSpaceInsetFourXSquish = \"32 64\";\nexport const CdrSpaceInsetFourXStretch = \"96 64\";\nexport const CdrBreakpointXs = \"0\";\nexport const CdrBreakpointSm = \"768\";\nexport const CdrBreakpointMd = \"992\";\nexport const CdrBreakpointLg = \"1232\";\nexport const CdrFontFamilySerifBrandFont = \"Stuart\";\nexport const CdrFontFamilySerif = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrFontFamilySansBrandFont = \"Graphik\";\nexport const CdrFontFamilySans = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrFontFamilyMonoBrandFont = \"Pressura, \\\"Avenir Next\\\", Roboto, sans-serif\";\nexport const CdrTextBody300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBody300Style = \"normal\";\nexport const CdrTextBody300Weight = \"400\";\nexport const CdrTextBody300Spacing = \"0.08\";\nexport const CdrTextBody300Size = \"16\";\nexport const CdrTextBody300Height = \"26\";\nexport const CdrTextBody400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBody400Style = \"normal\";\nexport const CdrTextBody400Weight = \"400\";\nexport const CdrTextBody400Spacing = \"0\";\nexport const CdrTextBody400Size = \"18\";\nexport const CdrTextBody400Height = \"30\";\nexport const CdrTextBody500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBody500Style = \"normal\";\nexport const CdrTextBody500Weight = \"400\";\nexport const CdrTextBody500Spacing = \"-0.16\";\nexport const CdrTextBody500Size = \"20\";\nexport const CdrTextBody500Height = \"36\";\nexport const CdrTextBodyStrong300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBodyStrong300Style = \"normal\";\nexport const CdrTextBodyStrong300Weight = \"600\";\nexport const CdrTextBodyStrong300Spacing = \"0.08\";\nexport const CdrTextBodyStrong300Size = \"16\";\nexport const CdrTextBodyStrong300Height = \"26\";\nexport const CdrTextBodyStrong400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBodyStrong400Style = \"normal\";\nexport const CdrTextBodyStrong400Weight = \"600\";\nexport const CdrTextBodyStrong400Spacing = \"0\";\nexport const CdrTextBodyStrong400Size = \"18\";\nexport const CdrTextBodyStrong400Height = \"30\";\nexport const CdrTextBodyStrong500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextBodyStrong500Style = \"normal\";\nexport const CdrTextBodyStrong500Weight = \"600\";\nexport const CdrTextBodyStrong500Spacing = \"-0.08\";\nexport const CdrTextBodyStrong500Size = \"20\";\nexport const CdrTextBodyStrong500Height = \"36\";\nexport const CdrTextDefaultFamily = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextDefaultStyle = \"normal\";\nexport const CdrTextDefaultWeight = \"400\";\nexport const CdrTextDefaultSpacing = \"-0.16\";\nexport const CdrTextDefaultSize = \"16\";\nexport const CdrTextDefaultHeight = \"22\";\nexport const CdrTextEyebrow100Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextEyebrow100Style = \"normal\";\nexport const CdrTextEyebrow100Weight = \"500\";\nexport const CdrTextEyebrow100Spacing = \"0.32\";\nexport const CdrTextEyebrow100Size = \"12\";\nexport const CdrTextEyebrow100Height = \"18\";\nexport const CdrTextEyebrow100Transform = \"uppercase\";\nexport const CdrTextHeadingSans200Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextHeadingSans200Style = \"normal\";\nexport const CdrTextHeadingSans200Weight = \"500\";\nexport const CdrTextHeadingSans200Spacing = \"0\";\nexport const CdrTextHeadingSans200Size = \"14\";\nexport const CdrTextHeadingSans200Height = \"18\";\nexport const CdrTextHeadingSans300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextHeadingSans300Style = \"normal\";\nexport const CdrTextHeadingSans300Weight = \"500\";\nexport const CdrTextHeadingSans300Spacing = \"0\";\nexport const CdrTextHeadingSans300Size = \"16\";\nexport const CdrTextHeadingSans300Height = \"20\";\nexport const CdrTextHeadingSans400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextHeadingSans400Style = \"normal\";\nexport const CdrTextHeadingSans400Weight = \"500\";\nexport const CdrTextHeadingSans400Spacing = \"0\";\nexport const CdrTextHeadingSans400Size = \"18\";\nexport const CdrTextHeadingSans400Height = \"24\";\nexport const CdrTextHeadingSans500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextHeadingSans500Style = \"normal\";\nexport const CdrTextHeadingSans500Weight = \"500\";\nexport const CdrTextHeadingSans500Spacing = \"0\";\nexport const CdrTextHeadingSans500Size = \"20\";\nexport const CdrTextHeadingSans500Height = \"26\";\nexport const CdrTextHeadingSans600Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextHeadingSans600Style = \"normal\";\nexport const CdrTextHeadingSans600Weight = \"500\";\nexport const CdrTextHeadingSans600Spacing = \"0\";\nexport const CdrTextHeadingSans600Size = \"24\";\nexport const CdrTextHeadingSans600Height = \"30\";\nexport const CdrTextHeadingSerif200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif200Style = \"normal\";\nexport const CdrTextHeadingSerif200Weight = \"500\";\nexport const CdrTextHeadingSerif200Spacing = \"0\";\nexport const CdrTextHeadingSerif200Size = \"14\";\nexport const CdrTextHeadingSerif200Height = \"18\";\nexport const CdrTextHeadingSerif300Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif300Style = \"normal\";\nexport const CdrTextHeadingSerif300Weight = \"500\";\nexport const CdrTextHeadingSerif300Spacing = \"0\";\nexport const CdrTextHeadingSerif300Size = \"16\";\nexport const CdrTextHeadingSerif300Height = \"20\";\nexport const CdrTextHeadingSerif400Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif400Style = \"normal\";\nexport const CdrTextHeadingSerif400Weight = \"500\";\nexport const CdrTextHeadingSerif400Spacing = \"0\";\nexport const CdrTextHeadingSerif400Size = \"18\";\nexport const CdrTextHeadingSerif400Height = \"24\";\nexport const CdrTextHeadingSerif500Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif500Style = \"normal\";\nexport const CdrTextHeadingSerif500Weight = \"500\";\nexport const CdrTextHeadingSerif500Spacing = \"0\";\nexport const CdrTextHeadingSerif500Size = \"20\";\nexport const CdrTextHeadingSerif500Height = \"26\";\nexport const CdrTextHeadingSerif600Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif600Style = \"normal\";\nexport const CdrTextHeadingSerif600Weight = \"500\";\nexport const CdrTextHeadingSerif600Spacing = \"0\";\nexport const CdrTextHeadingSerif600Size = \"24\";\nexport const CdrTextHeadingSerif600Height = \"30\";\nexport const CdrTextHeadingSerif700Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif700Style = \"normal\";\nexport const CdrTextHeadingSerif700Weight = \"500\";\nexport const CdrTextHeadingSerif700Spacing = \"0\";\nexport const CdrTextHeadingSerif700Size = \"28\";\nexport const CdrTextHeadingSerif700Height = \"32\";\nexport const CdrTextHeadingSerif800Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif800Style = \"normal\";\nexport const CdrTextHeadingSerif800Weight = \"500\";\nexport const CdrTextHeadingSerif800Spacing = \"0\";\nexport const CdrTextHeadingSerif800Size = \"32\";\nexport const CdrTextHeadingSerif800Height = \"36\";\nexport const CdrTextHeadingSerif900Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif900Style = \"normal\";\nexport const CdrTextHeadingSerif900Weight = \"500\";\nexport const CdrTextHeadingSerif900Spacing = \"0\";\nexport const CdrTextHeadingSerif900Size = \"36\";\nexport const CdrTextHeadingSerif900Height = \"44\";\nexport const CdrTextHeadingSerif1000Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif1000Style = \"normal\";\nexport const CdrTextHeadingSerif1000Weight = \"500\";\nexport const CdrTextHeadingSerif1000Spacing = \"0\";\nexport const CdrTextHeadingSerif1000Size = \"42\";\nexport const CdrTextHeadingSerif1000Height = \"50\";\nexport const CdrTextHeadingSerif1100Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif1100Style = \"normal\";\nexport const CdrTextHeadingSerif1100Weight = \"500\";\nexport const CdrTextHeadingSerif1100Spacing = \"0\";\nexport const CdrTextHeadingSerif1100Size = \"48\";\nexport const CdrTextHeadingSerif1100Height = \"56\";\nexport const CdrTextHeadingSerif1200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerif1200Style = \"normal\";\nexport const CdrTextHeadingSerif1200Weight = \"500\";\nexport const CdrTextHeadingSerif1200Spacing = \"0\";\nexport const CdrTextHeadingSerif1200Size = \"54\";\nexport const CdrTextHeadingSerif1200Height = \"64\";\nexport const CdrTextHeadingSerifStrong600Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong600Style = \"normal\";\nexport const CdrTextHeadingSerifStrong600Weight = \"600\";\nexport const CdrTextHeadingSerifStrong600Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong600Size = \"24\";\nexport const CdrTextHeadingSerifStrong600Height = \"30\";\nexport const CdrTextHeadingSerifStrong700Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong700Style = \"normal\";\nexport const CdrTextHeadingSerifStrong700Weight = \"600\";\nexport const CdrTextHeadingSerifStrong700Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong700Size = \"28\";\nexport const CdrTextHeadingSerifStrong700Height = \"32\";\nexport const CdrTextHeadingSerifStrong800Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong800Style = \"normal\";\nexport const CdrTextHeadingSerifStrong800Weight = \"600\";\nexport const CdrTextHeadingSerifStrong800Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong800Size = \"32\";\nexport const CdrTextHeadingSerifStrong800Height = \"36\";\nexport const CdrTextHeadingSerifStrong900Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong900Style = \"normal\";\nexport const CdrTextHeadingSerifStrong900Weight = \"600\";\nexport const CdrTextHeadingSerifStrong900Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong900Size = \"36\";\nexport const CdrTextHeadingSerifStrong900Height = \"44\";\nexport const CdrTextHeadingSerifStrong1000Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong1000Style = \"normal\";\nexport const CdrTextHeadingSerifStrong1000Weight = \"600\";\nexport const CdrTextHeadingSerifStrong1000Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong1000Size = \"42\";\nexport const CdrTextHeadingSerifStrong1000Height = \"50\";\nexport const CdrTextHeadingSerifStrong1100Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong1100Style = \"normal\";\nexport const CdrTextHeadingSerifStrong1100Weight = \"600\";\nexport const CdrTextHeadingSerifStrong1100Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong1100Size = \"48\";\nexport const CdrTextHeadingSerifStrong1100Height = \"56\";\nexport const CdrTextHeadingSerifStrong1200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingSerifStrong1200Style = \"normal\";\nexport const CdrTextHeadingSerifStrong1200Weight = \"600\";\nexport const CdrTextHeadingSerifStrong1200Spacing = \"0\";\nexport const CdrTextHeadingSerifStrong1200Size = \"54\";\nexport const CdrTextHeadingSerifStrong1200Height = \"64\";\nexport const CdrTextHeadingDisplay800Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay800Style = \"normal\";\nexport const CdrTextHeadingDisplay800Weight = \"400\";\nexport const CdrTextHeadingDisplay800Spacing = \"0\";\nexport const CdrTextHeadingDisplay800Size = \"32\";\nexport const CdrTextHeadingDisplay800Height = \"36\";\nexport const CdrTextHeadingDisplay900Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay900Style = \"normal\";\nexport const CdrTextHeadingDisplay900Weight = \"400\";\nexport const CdrTextHeadingDisplay900Spacing = \"0\";\nexport const CdrTextHeadingDisplay900Size = \"36\";\nexport const CdrTextHeadingDisplay900Height = \"40\";\nexport const CdrTextHeadingDisplay1000Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1000Style = \"normal\";\nexport const CdrTextHeadingDisplay1000Weight = \"400\";\nexport const CdrTextHeadingDisplay1000Spacing = \"0\";\nexport const CdrTextHeadingDisplay1000Size = \"42\";\nexport const CdrTextHeadingDisplay1000Height = \"48\";\nexport const CdrTextHeadingDisplay1100Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1100Style = \"normal\";\nexport const CdrTextHeadingDisplay1100Weight = \"400\";\nexport const CdrTextHeadingDisplay1100Spacing = \"0\";\nexport const CdrTextHeadingDisplay1100Size = \"48\";\nexport const CdrTextHeadingDisplay1100Height = \"52\";\nexport const CdrTextHeadingDisplay1200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1200Style = \"normal\";\nexport const CdrTextHeadingDisplay1200Weight = \"400\";\nexport const CdrTextHeadingDisplay1200Spacing = \"0\";\nexport const CdrTextHeadingDisplay1200Size = \"54\";\nexport const CdrTextHeadingDisplay1200Height = \"60\";\nexport const CdrTextHeadingDisplay1300Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1300Style = \"normal\";\nexport const CdrTextHeadingDisplay1300Weight = \"400\";\nexport const CdrTextHeadingDisplay1300Spacing = \"0\";\nexport const CdrTextHeadingDisplay1300Size = \"60\";\nexport const CdrTextHeadingDisplay1300Height = \"64\";\nexport const CdrTextHeadingDisplay1400Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1400Style = \"normal\";\nexport const CdrTextHeadingDisplay1400Weight = \"400\";\nexport const CdrTextHeadingDisplay1400Spacing = \"0\";\nexport const CdrTextHeadingDisplay1400Size = \"68\";\nexport const CdrTextHeadingDisplay1400Height = \"72\";\nexport const CdrTextHeadingDisplay1500Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1500Style = \"normal\";\nexport const CdrTextHeadingDisplay1500Weight = \"400\";\nexport const CdrTextHeadingDisplay1500Spacing = \"0\";\nexport const CdrTextHeadingDisplay1500Size = \"76\";\nexport const CdrTextHeadingDisplay1500Height = \"80\";\nexport const CdrTextHeadingDisplay1600Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextHeadingDisplay1600Style = \"normal\";\nexport const CdrTextHeadingDisplay1600Weight = \"400\";\nexport const CdrTextHeadingDisplay1600Spacing = \"0\";\nexport const CdrTextHeadingDisplay1600Size = \"86\";\nexport const CdrTextHeadingDisplay1600Height = \"92\";\nexport const CdrTextSubheadingSans300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextSubheadingSans300Style = \"normal\";\nexport const CdrTextSubheadingSans300Weight = \"500\";\nexport const CdrTextSubheadingSans300Spacing = \"0\";\nexport const CdrTextSubheadingSans300Size = \"16\";\nexport const CdrTextSubheadingSans300Height = \"20\";\nexport const CdrTextSubheadingSans400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextSubheadingSans400Style = \"normal\";\nexport const CdrTextSubheadingSans400Weight = \"500\";\nexport const CdrTextSubheadingSans400Spacing = \"0\";\nexport const CdrTextSubheadingSans400Size = \"18\";\nexport const CdrTextSubheadingSans400Height = \"24\";\nexport const CdrTextSubheadingSans500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextSubheadingSans500Style = \"normal\";\nexport const CdrTextSubheadingSans500Weight = \"500\";\nexport const CdrTextSubheadingSans500Spacing = \"0\";\nexport const CdrTextSubheadingSans500Size = \"20\";\nexport const CdrTextSubheadingSans500Height = \"26\";\nexport const CdrTextSubheadingSans600Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextSubheadingSans600Style = \"normal\";\nexport const CdrTextSubheadingSans600Weight = \"500\";\nexport const CdrTextSubheadingSans600Spacing = \"0\";\nexport const CdrTextSubheadingSans600Size = \"24\";\nexport const CdrTextSubheadingSans600Height = \"30\";\nexport const CdrTextUtilitySans100Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans100Style = \"normal\";\nexport const CdrTextUtilitySans100Weight = \"400\";\nexport const CdrTextUtilitySans100Spacing = \"-0.08\";\nexport const CdrTextUtilitySans100Size = \"12\";\nexport const CdrTextUtilitySans100Height = \"16\";\nexport const CdrTextUtilitySans200Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans200Style = \"normal\";\nexport const CdrTextUtilitySans200Weight = \"400\";\nexport const CdrTextUtilitySans200Spacing = \"-0.16\";\nexport const CdrTextUtilitySans200Size = \"14\";\nexport const CdrTextUtilitySans200Height = \"18\";\nexport const CdrTextUtilitySans300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans300Style = \"normal\";\nexport const CdrTextUtilitySans300Weight = \"400\";\nexport const CdrTextUtilitySans300Spacing = \"-0.16\";\nexport const CdrTextUtilitySans300Size = \"16\";\nexport const CdrTextUtilitySans300Height = \"22\";\nexport const CdrTextUtilitySans400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans400Style = \"normal\";\nexport const CdrTextUtilitySans400Weight = \"400\";\nexport const CdrTextUtilitySans400Spacing = \"-0.16\";\nexport const CdrTextUtilitySans400Size = \"18\";\nexport const CdrTextUtilitySans400Height = \"24\";\nexport const CdrTextUtilitySans500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans500Style = \"normal\";\nexport const CdrTextUtilitySans500Weight = \"400\";\nexport const CdrTextUtilitySans500Spacing = \"-0.32\";\nexport const CdrTextUtilitySans500Size = \"20\";\nexport const CdrTextUtilitySans500Height = \"26\";\nexport const CdrTextUtilitySans600Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans600Style = \"normal\";\nexport const CdrTextUtilitySans600Weight = \"400\";\nexport const CdrTextUtilitySans600Spacing = \"-0.32\";\nexport const CdrTextUtilitySans600Size = \"24\";\nexport const CdrTextUtilitySans600Height = \"30\";\nexport const CdrTextUtilitySans700Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans700Style = \"normal\";\nexport const CdrTextUtilitySans700Weight = \"400\";\nexport const CdrTextUtilitySans700Spacing = \"-0.32\";\nexport const CdrTextUtilitySans700Size = \"28\";\nexport const CdrTextUtilitySans700Height = \"36\";\nexport const CdrTextUtilitySans800Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySans800Style = \"normal\";\nexport const CdrTextUtilitySans800Weight = \"400\";\nexport const CdrTextUtilitySans800Spacing = \"-0.64\";\nexport const CdrTextUtilitySans800Size = \"32\";\nexport const CdrTextUtilitySans800Height = \"40\";\nexport const CdrTextUtilitySansStrong100Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong100Style = \"normal\";\nexport const CdrTextUtilitySansStrong100Weight = \"600\";\nexport const CdrTextUtilitySansStrong100Spacing = \"-0.08\";\nexport const CdrTextUtilitySansStrong100Size = \"12\";\nexport const CdrTextUtilitySansStrong100Height = \"16\";\nexport const CdrTextUtilitySansStrong200Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong200Style = \"normal\";\nexport const CdrTextUtilitySansStrong200Weight = \"600\";\nexport const CdrTextUtilitySansStrong200Spacing = \"-0.08\";\nexport const CdrTextUtilitySansStrong200Size = \"14\";\nexport const CdrTextUtilitySansStrong200Height = \"18\";\nexport const CdrTextUtilitySansStrong300Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong300Style = \"normal\";\nexport const CdrTextUtilitySansStrong300Weight = \"600\";\nexport const CdrTextUtilitySansStrong300Spacing = \"-0.08\";\nexport const CdrTextUtilitySansStrong300Size = \"16\";\nexport const CdrTextUtilitySansStrong300Height = \"22\";\nexport const CdrTextUtilitySansStrong400Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong400Style = \"normal\";\nexport const CdrTextUtilitySansStrong400Weight = \"600\";\nexport const CdrTextUtilitySansStrong400Spacing = \"-0.08\";\nexport const CdrTextUtilitySansStrong400Size = \"18\";\nexport const CdrTextUtilitySansStrong400Height = \"24\";\nexport const CdrTextUtilitySansStrong500Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong500Style = \"normal\";\nexport const CdrTextUtilitySansStrong500Weight = \"600\";\nexport const CdrTextUtilitySansStrong500Spacing = \"-0.16\";\nexport const CdrTextUtilitySansStrong500Size = \"20\";\nexport const CdrTextUtilitySansStrong500Height = \"26\";\nexport const CdrTextUtilitySansStrong600Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong600Style = \"normal\";\nexport const CdrTextUtilitySansStrong600Weight = \"600\";\nexport const CdrTextUtilitySansStrong600Spacing = \"-0.16\";\nexport const CdrTextUtilitySansStrong600Size = \"24\";\nexport const CdrTextUtilitySansStrong600Height = \"30\";\nexport const CdrTextUtilitySansStrong700Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong700Style = \"normal\";\nexport const CdrTextUtilitySansStrong700Weight = \"600\";\nexport const CdrTextUtilitySansStrong700Spacing = \"-0.16\";\nexport const CdrTextUtilitySansStrong700Size = \"28\";\nexport const CdrTextUtilitySansStrong700Height = \"36\";\nexport const CdrTextUtilitySansStrong800Family = \"Graphik, \\\"Graphik fallback\\\", \\\"Helvetica Neue\\\", sans-serif\";\nexport const CdrTextUtilitySansStrong800Style = \"normal\";\nexport const CdrTextUtilitySansStrong800Weight = \"600\";\nexport const CdrTextUtilitySansStrong800Spacing = \"-0.32\";\nexport const CdrTextUtilitySansStrong800Size = \"32\";\nexport const CdrTextUtilitySansStrong800Height = \"40\";\nexport const CdrTextUtilitySerif200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif200Style = \"normal\";\nexport const CdrTextUtilitySerif200Weight = \"400\";\nexport const CdrTextUtilitySerif200Spacing = \"-0.08\";\nexport const CdrTextUtilitySerif200Size = \"14\";\nexport const CdrTextUtilitySerif200Height = \"18\";\nexport const CdrTextUtilitySerif300Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif300Style = \"normal\";\nexport const CdrTextUtilitySerif300Weight = \"400\";\nexport const CdrTextUtilitySerif300Spacing = \"-0.08\";\nexport const CdrTextUtilitySerif300Size = \"16\";\nexport const CdrTextUtilitySerif300Height = \"22\";\nexport const CdrTextUtilitySerif400Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif400Style = \"normal\";\nexport const CdrTextUtilitySerif400Weight = \"400\";\nexport const CdrTextUtilitySerif400Spacing = \"-0.16\";\nexport const CdrTextUtilitySerif400Size = \"18\";\nexport const CdrTextUtilitySerif400Height = \"24\";\nexport const CdrTextUtilitySerif500Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif500Style = \"normal\";\nexport const CdrTextUtilitySerif500Weight = \"400\";\nexport const CdrTextUtilitySerif500Spacing = \"-0.32\";\nexport const CdrTextUtilitySerif500Size = \"20\";\nexport const CdrTextUtilitySerif500Height = \"26\";\nexport const CdrTextUtilitySerif600Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif600Style = \"normal\";\nexport const CdrTextUtilitySerif600Weight = \"400\";\nexport const CdrTextUtilitySerif600Spacing = \"-0.32\";\nexport const CdrTextUtilitySerif600Size = \"24\";\nexport const CdrTextUtilitySerif600Height = \"30\";\nexport const CdrTextUtilitySerif700Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif700Style = \"normal\";\nexport const CdrTextUtilitySerif700Weight = \"400\";\nexport const CdrTextUtilitySerif700Spacing = \"-0.32\";\nexport const CdrTextUtilitySerif700Size = \"28\";\nexport const CdrTextUtilitySerif700Height = \"36\";\nexport const CdrTextUtilitySerif800Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerif800Style = \"normal\";\nexport const CdrTextUtilitySerif800Weight = \"400\";\nexport const CdrTextUtilitySerif800Spacing = \"-0.32\";\nexport const CdrTextUtilitySerif800Size = \"32\";\nexport const CdrTextUtilitySerif800Height = \"40\";\nexport const CdrTextUtilitySerifStrong200Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong200Style = \"normal\";\nexport const CdrTextUtilitySerifStrong200Weight = \"600\";\nexport const CdrTextUtilitySerifStrong200Spacing = \"-0.08\";\nexport const CdrTextUtilitySerifStrong200Size = \"14\";\nexport const CdrTextUtilitySerifStrong200Height = \"18\";\nexport const CdrTextUtilitySerifStrong300Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong300Style = \"normal\";\nexport const CdrTextUtilitySerifStrong300Weight = \"600\";\nexport const CdrTextUtilitySerifStrong300Spacing = \"-0.08\";\nexport const CdrTextUtilitySerifStrong300Size = \"16\";\nexport const CdrTextUtilitySerifStrong300Height = \"22\";\nexport const CdrTextUtilitySerifStrong400Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong400Style = \"normal\";\nexport const CdrTextUtilitySerifStrong400Weight = \"600\";\nexport const CdrTextUtilitySerifStrong400Spacing = \"-0.08\";\nexport const CdrTextUtilitySerifStrong400Size = \"18\";\nexport const CdrTextUtilitySerifStrong400Height = \"24\";\nexport const CdrTextUtilitySerifStrong500Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong500Style = \"normal\";\nexport const CdrTextUtilitySerifStrong500Weight = \"600\";\nexport const CdrTextUtilitySerifStrong500Spacing = \"-0.08\";\nexport const CdrTextUtilitySerifStrong500Size = \"20\";\nexport const CdrTextUtilitySerifStrong500Height = \"26\";\nexport const CdrTextUtilitySerifStrong600Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong600Style = \"normal\";\nexport const CdrTextUtilitySerifStrong600Weight = \"600\";\nexport const CdrTextUtilitySerifStrong600Spacing = \"-0.16\";\nexport const CdrTextUtilitySerifStrong600Size = \"24\";\nexport const CdrTextUtilitySerifStrong600Height = \"30\";\nexport const CdrTextUtilitySerifStrong700Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong700Style = \"normal\";\nexport const CdrTextUtilitySerifStrong700Weight = \"600\";\nexport const CdrTextUtilitySerifStrong700Spacing = \"-0.16\";\nexport const CdrTextUtilitySerifStrong700Size = \"28\";\nexport const CdrTextUtilitySerifStrong700Height = \"36\";\nexport const CdrTextUtilitySerifStrong800Family = \"Stuart, \\\"Stuart fallback\\\", Georgia, serif\";\nexport const CdrTextUtilitySerifStrong800Style = \"normal\";\nexport const CdrTextUtilitySerifStrong800Weight = \"600\";\nexport const CdrTextUtilitySerifStrong800Spacing = \"-0.16\";\nexport const CdrTextUtilitySerifStrong800Size = \"32\";\nexport const CdrTextUtilitySerifStrong800Height = \"40\";\nexport const CdrTextItalicVariation = \"'ital' 1\";\nexport const CdrTextItalicStyle = \"italic\";\nexport const CdrTextStrongWeight = \"700\";\nexport const CdrMembershipVibrantColorTextButtonPrimaryHover = \"#13352c\";\nexport const CdrMembershipVibrantColorTextPrimary = \"#13352c\";\nexport const CdrMembershipVibrantColorTextLinkRest = \"#13352C\";\nexport const CdrMembershipVibrantColorTextLinkHover = \"#13352C\";\nexport const CdrMembershipVibrantColorTextLinkVisited = \"#13352C\";\nexport const CdrMembershipVibrantColorBackgroundButtonPrimaryRest = \"#13352c\";\nexport const CdrMembershipVibrantColorBackgroundButtonPrimaryActive = \"#13352c\";\nexport const CdrMembershipVibrantColorBackgroundPrimary = \"#ffdc52\";\nexport const CdrMembershipVibrantColorBorderButtonPrimaryRest = \"#13352c\";\nexport const CdrMembershipVibrantColorBorderButtonPrimaryActive = \"#13352c\";\nexport const CdrMembershipVibrantColorBorderButtonPrimaryHover = \"#13352c\";\nexport const CdrMembershipVibrantColorBorderLinkRest = \"#13352C\";\nexport const CdrMembershipVibrantColorBorderLinkHover = \"#13352C\";\nexport const CdrMembershipVibrantColorBorderLinkVisited = \"#13352C\";\nexport const CdrMembershipSubtleColorTextButtonPrimaryHover = \"#13352c\";\nexport const CdrMembershipSubtleColorTextPrimary = \"#13352c\";\nexport const CdrMembershipSubtleColorTextLinkRest = \"#13352C\";\nexport const CdrMembershipSubtleColorTextLinkHover = \"#13352C\";\nexport const CdrMembershipSubtleColorTextLinkVisited = \"#13352C\";\nexport const CdrMembershipSubtleColorBackgroundButtonPrimaryRest = \"#13352c\";\nexport const CdrMembershipSubtleColorBackgroundButtonPrimaryActive = \"#13352c\";\nexport const CdrMembershipSubtleColorBackgroundPrimary = \"#bfb33e\";\nexport const CdrMembershipSubtleColorBorderButtonPrimaryRest = \"#13352c\";\nexport const CdrMembershipSubtleColorBorderButtonPrimaryActive = \"#13352c\";\nexport const CdrMembershipSubtleColorBorderButtonPrimaryHover = \"#13352c\";\nexport const CdrMembershipSubtleColorBorderLinkRest = \"#13352C\";\nexport const CdrMembershipSubtleColorBorderLinkHover = \"#13352C\";\nexport const CdrMembershipSubtleColorBorderLinkVisited = \"#13352C\";\n","import { CdrBreakpointMd } from '@rei/cdr-tokens';\n\nexport const isDesktop = () => window?.matchMedia(`(min-width: ${CdrBreakpointMd}px)`)?.matches;\nexport const isMobile = () => !isDesktop();\nconst getScreenSize = () => (isMobile() ? 'mobile' : 'desktop');\n\nexport default getScreenSize;\n","/** Event Delegation Util\n * Util module containing helper methods related to returning the preferred target\n * element when using either event delegation or individual handlers.\n */\n\nconst isClickSubscriber = (elem = {}) => (elem.tagName === 'A' || elem.tagName === 'BUTTON');\n\n/**\n * Recursive method that checks if elem param is an anchor or button, if not\n * then calls itself with the parentElement. Base cases are:\n * - the elem param is falsey\n * - the elem param is the same as the currentTarget (subscribing element)\n * - the elem param is an anchor or button element\n * @param elem\n * @param currentTarget\n * @returns {*}\n */\nconst traverseToFindClickSubscriber = (elem, currentTarget) => (\n (!elem || isClickSubscriber(elem) || elem === currentTarget)\n ? elem\n : traverseToFindClickSubscriber(elem.parentElement, currentTarget)\n);\n\n/**\n * Will return event.currentTarget if it is an anchor or button. Otherwise\n * uses event.target as starting point to find anchor or button element.\n * @param event\n * @returns {HTMLElement|*} a falsey value or an HTMLElement\n */\nconst getClickSubscriber = (event) => {\n const { target, currentTarget } = event || {};\n return isClickSubscriber(currentTarget)\n ? currentTarget : traverseToFindClickSubscriber(target, currentTarget);\n};\n\nexport default getClickSubscriber;\n","/** Menu Link Util\n * Util module containing helper methods shared between the mobile and desktop menus.\n * Mainly related to managing arrays containing the visible links of an open menu.\n */\n\n/**\n * Helper method used to find the index of a DOM element\n * @param elemArray: array of DOM elements to iterate through\n * @param elem: DOM element to look for\n * @returns {number} index or -1 if not found\n */\nexport const getCurrentIndex = (elemArray = [], elem = null) => (\n elem ? elemArray.findIndex((el) => elem.isEqualNode(el)) : -1\n);\n\n/**\n * Returns an object containing commonly used values needed when managing keyboard\n * interactions within an open menu.\n * @param visibleLinks\n * @returns {{firstVisibleLink: null, lastVisibleLink: null, visibleLinks: *[]}}\n */\nexport const getMenuLinkData = (visibleLinks = []) => {\n let firstVisibleLink = null;\n let lastVisibleLink = null;\n if (visibleLinks.length > 0) {\n [firstVisibleLink] = visibleLinks;\n lastVisibleLink = visibleLinks[visibleLinks.length - 1];\n }\n return {\n visibleLinks, firstVisibleLink, lastVisibleLink,\n };\n};\n\n/**\n * Returns numeric value of element's data-nav-level attribute, if it exists.\n * @param elem: DOM element to get nav-level for\n * @returns {number} nav-level for element or -1 if unknown\n */\nexport const getNavLevel = (elem = {}) => {\n const { dataset: { navLevel = '-1' } = {} } = elem;\n return !navLevel ? -1 : navLevel * 1;\n};\n","/**\n * Mobile Menu\n * this contains functionality specific to the mobile menu\n */\nimport { getCurrentIndex, getMenuLinkData, getNavLevel } from '../util/menuLinkUtil';\nimport { getVisibleFocusableElems } from '../../../_shared-components/getDomElems';\n\n/**\n * Mobile Menu State\n * @type {{openSubMenus: Array, openButtons: Array}}\n * @param {array} openSubMenus: Array of menus recently opened\n * @param {array} openButtons: Array of parent buttons for these menus\n * @param {Number} currentLevel: Nav level depth of current mobile\n */\nconst menuState = {\n openSubMenus: [],\n openButtons: [],\n currentLevel: 1,\n};\n\n/**\n * Sets menu state on mobile slide menus and the\n * button that controls them\n * @param {object} button: the button that opens the slide menu\n * @param {object} menuHandled: the menu that's being opened / closed\n * @param {string|enum} state: ['open', 'closed']\n * whether the menu is being set to the open or closed state\n */\nconst setSlideMenuState = (button, menuHandled, state) => {\n const ariaState = state === 'open' ? 'true' : 'false';\n button.setAttribute('aria-expanded', ariaState);\n if (state === 'open') {\n menuHandled.setAttribute('data-toggle', state);\n } else {\n menuHandled.removeAttribute('data-toggle');\n }\n};\n\n/**\n * Add or remove elements from menuState arrays, as well as increment/decrement menuState\n * \"currentLevel\" property.\n * @param button\n * @param menuHandled\n */\nconst updateMenuStateTracking = (button = null, menuHandled = null) => {\n if (button && menuHandled) {\n menuState.openSubMenus.push(menuHandled);\n menuState.openButtons.push(button);\n menuState.currentLevel += 1;\n } else {\n menuState.openSubMenus.pop();\n menuState.openButtons.pop();\n menuState.currentLevel -= 1;\n }\n};\n\n/**\n * Will add or remove a class from the navMenu only if the menu that is being opened or closed\n * is at level 2. I.e. the first level of menu entries (aka category links) is about to be hidden\n * or displayed.\n * @see {@link https://issues.rei.com/browse/NAV1-645 NAV1-645} for more information\n * @param {object} navMenu: parent element containing all menus for a subsite\n * @param {object} menuHandled: the menu that's being opened / closed\n * @param {string|enum} state: ['open', 'closed']\n */\nconst setFirstLevelVisibility = (navMenu, menuHandled, state) => {\n if (getNavLevel(menuHandled) === 2) {\n if (state === 'open') {\n navMenu.classList.add('hide-level-1');\n } else {\n navMenu.classList.remove('hide-level-1');\n }\n }\n};\n\n/**\n * Mobile menu sliders (internal)\n * @param {Event} e: click event\n * @param {object} subscriber: <button> or <a> node subscribed to event\n * @param {string} controlType: 'slide-open' or 'slide-closed' (back-button)\n * @param {string} menuName: name of menu to be opened or closed\n * @param {object} navMenu: parent element containing all menus for a subsite\n */\nexport const slideMenu = (e, subscriber, controlType, menuName, navMenu) => {\n const childMenu = navMenu.querySelector(`[data-menu-name=${menuName}]`);\n if (controlType === 'slide-open') {\n /* Prevents activating link when a submenu exists */\n e.preventDefault();\n setSlideMenuState(subscriber, childMenu, 'open');\n setFirstLevelVisibility(navMenu, childMenu, 'open');\n updateMenuStateTracking(subscriber, childMenu);\n const childBackButton = childMenu.querySelector('[data-control-type=\"slide-closed\"]');\n /* move focus to the close button on that menu */\n childMenu.addEventListener('transitionend', () => {\n childBackButton.focus();\n }, { once: true });\n }\n if (controlType === 'slide-closed') {\n const parentButton = navMenu.querySelector(`[data-control-type=\"slide-open\"][data-controls=\"${menuName}\"]`);\n setSlideMenuState(parentButton, childMenu, 'closed');\n setFirstLevelVisibility(navMenu, childMenu, 'closed');\n updateMenuStateTracking();\n /* move focus back to the parent after transition */\n childMenu.addEventListener('transitionend', () => {\n parentButton.focus();\n }, { once: true });\n }\n};\n\n/**\n * Clears all subMenus when main menu is toggled closed. If open-close\n * button is clicked in quick succession - user may see open submenu\n * sliding closed. Can fix by speeding up closing transition.\n */\nexport const clearSubMenus = (navMenu) => {\n menuState.openSubMenus.forEach((el) => el.removeAttribute('data-toggle'));\n menuState.openButtons.forEach((el) => el.setAttribute('aria-expanded', 'false'));\n navMenu.classList.remove('hide-level-1');\n /* reset menuState */\n menuState.openSubMenus = [];\n menuState.openButtons = [];\n menuState.currentLevel = 1;\n};\n\n/**\n * Closes mobile menu, and waits until transition is complete before\n * allowing browser to scroll to location on current page. Edge-case that\n * cannot be handled via toggleMenu function, but contains similar code.\n * @param {HTMLButtonElement} backdrop\n * @param {HTMLBodyElement} body\n * @param {HTMLDivElement} navMenu\n * @param {HTMLButtonElement} openButton\n * @param {HTMLElement} gnav\n * @param {string} href\n */\nexport const closeToScroll = (backdrop, body, navMenu, openButton, gnav, href) => {\n gnav.setAttribute('data-toggle', 'closed');\n openButton.setAttribute('aria-expanded', 'false');\n clearSubMenus(navMenu);\n backdrop.setAttribute('data-toggle', 'hidden');\n backdrop.addEventListener('transitionend', () => {\n body.classList.remove('no-scroll');\n /* refresh reference to trigger scroll */\n window.location.href = href;\n }, { once: true });\n};\n\n/**\n * Iterates through all mobile-panels/mobile-cards (if any exist) and returns array of elements\n * that meet the requirements of the filterFn method.\n * @param {object} gnav: Node element to limit query to gnav section of DOM\n * @param {function} filterFn: filtering method that determines if element is included in array\n * @returns {[]}\n */\nconst getMobilePanelElems = (gnav, filterFn) => {\n const elemArr = [];\n [...gnav.querySelectorAll('[data-nav-js=\"mobile-panel\"]')].forEach((mobileCard) => {\n elemArr.push(...filterFn(mobileCard));\n });\n return elemArr;\n};\n\n/**\n * Returns mobile-specific elements that must subscribe to event handler(s) on initialization.\n * @param {object} gnav: Node element to limit query to gnav section of DOM\n * @returns {*[]}\n */\nexport const getMobileMenuSubscribers = (gnav) => (\n [...gnav.querySelectorAll('.actions__item [data-ui=\"nav-level-1\"]'), ...gnav.querySelectorAll('[data-nav-js=\"mobile-panel\"]')]\n);\n\n/**\n * Used for keyboard interactions. Returns an array of DOM Elems that represent all\n * visible entries for the open mobile menu.\n * @param gnav: Node element to limit query to gnav section of DOM, defaults to global window\n * document.\n * @returns {*[]}\n */\nconst getMenuEntries = (gnav = document) => {\n const { openSubMenus, currentLevel } = menuState;\n let menuEntries;\n if (currentLevel === 1) {\n menuEntries = [...gnav.querySelectorAll('li > [data-ui=\"nav-level-1\"]'), ...getMobilePanelElems(gnav, getVisibleFocusableElems)];\n } else {\n const lastIndx = openSubMenus.length - 1;\n const subMenuId = openSubMenus[lastIndx].id;\n menuEntries = [...gnav.querySelectorAll(`#${subMenuId} [data-ui=\"nav-level-${currentLevel}\"]`)];\n }\n return menuEntries;\n};\n\n/**\n * Helper method - if DOM element and event are not null, then will set focus and prevent default.\n * @param {object} elem\n * @param event\n */\nconst focusOnElem = (elem = null, event = null) => {\n if (elem && event) {\n elem.focus();\n event.preventDefault();\n }\n};\n\n/**\n * Tab: Limits tabbing to only visible links in an open menu. Tab on lastVisibleLink will\n * wrap focus back to the firstVisibleLink. Shift+tab on firstVisibleLink will move the\n * focus to the close button.\n * @param e\n * @param gnav\n * @param closeButton\n */\nexport const tabKeyDown = (e, gnav, closeButton) => {\n let elem;\n const { target, shiftKey } = e;\n const {\n firstVisibleLink,\n lastVisibleLink,\n } = getMenuLinkData(getMenuEntries(gnav));\n const closeBtnToOpenSubmenu = (target.isEqualNode(closeButton) && menuState.currentLevel > 1);\n if ((closeBtnToOpenSubmenu || target.isEqualNode(lastVisibleLink)) && !shiftKey) {\n elem = firstVisibleLink;\n } else if (target.isEqualNode(firstVisibleLink) && menuState.currentLevel > 1 && shiftKey) {\n elem = closeButton;\n }\n focusOnElem(elem, e);\n};\n\n/**\n * ArrowDown | ArrowRight: Moves focus to consecutive indices within visibleLinks array.\n * If starting focus is on the closeButton elem or on the lastVisibleLink, then the focus\n * will go to the firstVisibleLink.\n * @param e\n * @param gnav\n * @param closeButton\n */\nexport const arrowDownKeyDown = (e, gnav, closeButton) => {\n let elem;\n const { target } = e;\n const {\n visibleLinks,\n firstVisibleLink,\n lastVisibleLink,\n } = getMenuLinkData(getMenuEntries(gnav));\n const currentLinkIndex = getCurrentIndex(visibleLinks, target);\n /* if target is in the open menu, but not the lastVisibleLink */\n if (currentLinkIndex > -1 && currentLinkIndex < (visibleLinks.length - 1)) {\n elem = visibleLinks[currentLinkIndex + 1];\n } else if (target.isEqualNode(closeButton) || target.isEqualNode(lastVisibleLink)) {\n elem = firstVisibleLink;\n }\n focusOnElem(elem, e);\n};\n\n/**\n * ArrowUp | ArrowLeft: Moves focus to previous indices within visibleLinks array.\n * If starting focus is on the firstVisibleLink, then the focus will move to the\n * closeButton.\n * If starting focus is on closeButton then moves focus to lastVisibleLink.\n * @param e\n * @param gnav\n * @param closeButton\n */\nexport const arrowUpKeyDown = (e, gnav, closeButton) => {\n let elem;\n const { target } = e;\n const {\n visibleLinks,\n firstVisibleLink,\n lastVisibleLink,\n } = getMenuLinkData(getMenuEntries(gnav));\n const currentLinkIndex = getCurrentIndex(visibleLinks, target);\n /* if target in the open menu, but not the firstVisibleLink */\n if (currentLinkIndex > 0 && currentLinkIndex < visibleLinks.length) {\n elem = visibleLinks[currentLinkIndex - 1];\n } else if (target.isEqualNode(closeButton) || target.isEqualNode(firstVisibleLink)) {\n elem = target.isEqualNode(closeButton) ? lastVisibleLink : closeButton;\n }\n focusOnElem(elem, e);\n};\n\n/**\n * End or Page Down: Moves focus to the lastVisibleLink\n * @param e\n * @param gnav\n */\nexport const endKeyDown = (e, gnav) => {\n const {\n lastVisibleLink,\n } = getMenuLinkData(getMenuEntries(gnav));\n focusOnElem(lastVisibleLink, e);\n};\n\n/**\n * Home or Page Up: Moves focus to firstVisibleLink\n * @param e\n * @param gnav\n */\nexport const homeKeyDown = (e, gnav) => {\n const {\n firstVisibleLink,\n } = getMenuLinkData(getMenuEntries(gnav));\n focusOnElem(firstVisibleLink, e);\n};\n\n/**\n * Adjust the css \"top\" property of open mobile menu based on bottom of global nav. This prevents\n * open space between global nav and open menu even if other common-components are hidden.\n * @param gnav\n * @param navMenu\n */\nexport const setTopForOpenMenu = (gnav, navMenu) => {\n const { bottom } = gnav.getBoundingClientRect();\n const scrollOffset = window.scrollY;\n const { style } = navMenu || {};\n style.top = `${scrollOffset + bottom}px`;\n};\n\n/**\n * Sets initial aria states on mobile menu entry\n * @param {HTMLAnchorElement|HTMLButtonElement} target: target of focus event\n * @param {string} controls: name of menu being controlled\n */\nexport const setAriaStatesOnFocus = (target, controls) => {\n target.setAttribute('aria-controls', controls);\n target.setAttribute('aria-expanded', 'false');\n};\n\n/**\n * Call after baseHideMenu in menu.js when closing a mobile menu\n * @param {HTMLButtonElement} openButton\n */\nexport const hideMobileMenu = (openButton) => {\n openButton.focus({ preventScroll: true });\n};\n\n/**\n * Call after baseShowMenu in menu.js when showing a mobile menu\n * @param {HTMLElement} backdrop\n * @param {HTMLButtonElement} closeButton\n * @param {HTMLElement} body\n * @param {(int) => void} sets navMenu.scrollTop\n */\nexport const showMobileMenu = (backdrop, closeButton, body, setNavMenuScrollTop) => {\n // ESLint error to set property on param so had to pass in function to do it\n setNavMenuScrollTop(0);\n backdrop.setAttribute('data-toggle', 'visible');\n closeButton.focus({ preventScroll: true });\n body.classList.add('no-scroll');\n};","/**\n * Desktop Menu\n * this contains functionality specific to the desktop menu\n */\nimport { getCurrentIndex, getMenuLinkData, getNavLevel } from '../util/menuLinkUtil';\n\n/**\n * If a NavigationNode is not a leaf, then it has child links to display\n * @param elem {HTMLLIElement|HTMLAnchorElement|HTMLButtonElement|HTMLSpanElement}\n * @returns {boolean}\n */\nexport const hasChildren = (elem) => {\n const { dataset: { isLeaf } = {} } = elem || {};\n return isLeaf === 'false' || isLeaf === false;\n};\n\n/**\n * Confirm category node has a menu that can be opened.\n * @param {HTMLLIElement} category: <li> node that may contain an\n * expandable submenu or is just a link.\n */\nexport const openMenu = (category) => {\n if (hasChildren(category)) {\n category.firstElementChild.setAttribute('aria-expanded', 'true');\n category.classList.add('is-open');\n }\n};\n/**\n * Grab all category <li> nodes that indicate a menu is open.\n * Then iterate through each node and reset classes and arias\n * to a closed state.\n * @param navMenu: selector taken from menu init.\n */\nexport const closeMenu = (navMenu) => {\n navMenu.querySelectorAll('.is-open').forEach((categoryItem) => {\n categoryItem.classList.remove('is-open');\n categoryItem.firstElementChild.setAttribute('aria-expanded', 'false');\n });\n};\n/**\n * Returns an array of <a> nodes for a given category. If no <a> nodes\n * are found or the category is null - then returns an empty array.\n * Order of elements matter as result is used for keyboard interactions\n * @param {object} category: <li> node\n * @returns {*[]}\n */\nconst getMenuLinks = (category = null) => {\n const merchZoneLinksSelector = '.gnav-submenu-wrapper .extra a.subsite-navigation__link';\n const menuLinksSelector = '.gnav-submenu-wrapper .subsite-navigation__item > a.subsite-navigation__link';\n const megaMenuHeaderLinkSelector = '.gnav-submenu-wrapper__header-link';\n return [...category.querySelectorAll(`\n ${menuLinksSelector},\n ${merchZoneLinksSelector},\n ${megaMenuHeaderLinkSelector}\n `)];\n};\n\n/**\n * Returns true if el node is an anchor and contains a data-nav-level\n * attribute greater than 1 (i.e. is not a top-level category link).\n * @param {object} el: DOM node to check\n * @returns {boolean|boolean}\n */\nexport const isMenuLink = (el) => (\n el.tagName === 'A' && (getNavLevel(el) > 1)\n);\n\n/**\n * Returns true if element param is a top level category button or link\n * that has displayable children.\n * @param {HTMLAnchorElement|HTMLButtonElement|HTMLLIElement} el\n * @returns {boolean}\n */\nexport const isMenuRoot = (el) => (\n (getNavLevel(el) === 1) && hasChildren(el)\n);\n\n/**\n * ESCAPE: Closes menu and returns focus to top level category\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const escapeKeyDown = (e, menuState, toggleMenu) => {\n const { target } = e;\n const { isOpen, activeCategory } = menuState;\n if (isOpen) {\n toggleMenu();\n }\n /* Move focus to category if starting focus was on\n * link in open menu */\n if (isMenuLink(target)) {\n const categoryAnchor = activeCategory.firstElementChild;\n categoryAnchor.focus();\n }\n};\n\n/**\n * ArrowDown: If starting focus is on a category then opens submenu & moves\n * focus to the first submenu link. If starting focus is on a submenu link,\n * then moves focus to the next submenu link (wrapping from the last to first)\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const arrowDownKeyDown = (e, menuState, toggleMenu) => {\n const { target } = e;\n const { isOpen, activeCategory } = menuState;\n let rel;\n if (!isMenuLink(target)) {\n if (isOpen) {\n toggleMenu();\n }\n /* toggle shared menu state */\n toggleMenu();\n openMenu(activeCategory);\n }\n const {\n visibleLinks,\n firstVisibleLink,\n lastVisibleLink,\n } = getMenuLinkData(getMenuLinks(activeCategory));\n const currentLinkIndex = getCurrentIndex(visibleLinks, target);\n\n /* If target is a category link or the lastVisibleLink focus on the FIRST link in menu */\n if (!isMenuLink(target) || target === lastVisibleLink) {\n rel = firstVisibleLink;\n } else if (currentLinkIndex > -1 && currentLinkIndex < (visibleLinks.length - 1)) {\n rel = visibleLinks[currentLinkIndex + 1];\n }\n\n if (rel) {\n rel.focus();\n e.preventDefault();\n }\n};\n\n/**\n * ArrowUp: If focus is on a link within open menu then move focus to previous link / link\n * above starting focus. If starting at the the top item, move focus to the last (bottom)\n * link. If focus is on a Category with a submenu then opens the submenu and places focus\n * on the LAST link in submenu\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const arrowUpKeyDown = (e, menuState, toggleMenu) => {\n const { target } = e;\n const { isOpen, activeCategory } = menuState;\n let rel;\n if (!isMenuLink(target)) {\n /* close any open menus */\n if (isOpen) {\n toggleMenu();\n }\n toggleMenu();\n openMenu(activeCategory);\n }\n const {\n visibleLinks,\n firstVisibleLink,\n lastVisibleLink,\n } = getMenuLinkData(getMenuLinks(activeCategory));\n const currentLinkIndex = getCurrentIndex(visibleLinks, target);\n /* If target is on a top-level tab or the firstVisibleLink\n * then focus on the LAST link in menu */\n if (!isMenuLink(target) || target === firstVisibleLink) {\n rel = lastVisibleLink;\n } else if (currentLinkIndex > 0) {\n rel = visibleLinks[currentLinkIndex - 1];\n }\n\n if (rel) {\n rel.focus();\n e.preventDefault();\n }\n};\n/**\n * ArrowRight: If starting focus is on a link within an open menu then close the current menu,\n * move focus to category on the right (or wrap around to first/left-most category), and open\n * menu. Do not move focus into the newly opened menu.\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const arrowRightKeyDown = (e, menuState, toggleMenu) => {\n const { isOpen, activeCategory, subsiteCategories } = menuState;\n let openNextTarget = false;\n if (isOpen) {\n openNextTarget = true;\n /* close current menu */\n toggleMenu();\n }\n\n const currentCategoryIndex = getCurrentIndex(subsiteCategories, activeCategory);\n /* Go to next category - if on the last category wrap around to first */\n const nextCategoryIndex = (currentCategoryIndex === subsiteCategories.length - 1)\n ? 0 : currentCategoryIndex + 1;\n /* Focus on next top-level-tab and open mega-menu (sans inner focus) */\n const nextTarget = subsiteCategories[nextCategoryIndex];\n\n if (openNextTarget) {\n toggleMenu();\n openMenu(nextTarget);\n }\n nextTarget.firstElementChild.focus();\n e.preventDefault();\n};\n\n/**\n * ArrowLeft: If focus is in submenu of an item in a menubar (aka category) then\n * close submenu, move focus to category on the left (or wrap to right-most category),\n * and open submenu of that category without moving focus into newly opened submenu\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const arrowLeftKeyDown = (e, menuState, toggleMenu) => {\n const { isOpen, activeCategory, subsiteCategories } = menuState;\n let openNextTarget = false;\n if (isOpen) {\n openNextTarget = true;\n /* close current menu */\n toggleMenu();\n }\n const currentCategoryIndex = getCurrentIndex(subsiteCategories, activeCategory);\n /* Go to previous tab - if on the first tab go to last */\n const nextCategoryIndex = (currentCategoryIndex === 0)\n ? subsiteCategories.length - 1 : currentCategoryIndex - 1;\n /* Focus on next top-level-tab and open mega-menu (sans inner focus) */\n const nextTarget = subsiteCategories[nextCategoryIndex];\n\n if (openNextTarget) {\n toggleMenu();\n openMenu(nextTarget);\n }\n nextTarget.firstElementChild.focus({ preventScroll: true });\n e.preventDefault();\n};\n\n/**\n * Home or Page Up: If menu is open and link has focus - move focus to the first item in the\n * current menu. If menu is closed or open but not in focus then move focus to\n * first Category in the gnav (open menu if original target was open)\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const homeKeyDown = (e, menuState, toggleMenu) => {\n let openNextTarget = false;\n let nextTarget;\n const { target } = e;\n const { isOpen, activeCategory, subsiteCategories } = menuState;\n if (isOpen) {\n const { firstVisibleLink } = getMenuLinkData(getMenuLinks(activeCategory));\n if (isMenuLink(target)) {\n /* Focus on first visible link */\n nextTarget = firstVisibleLink;\n } else {\n openNextTarget = true;\n /* close current menu */\n toggleMenu();\n /* Focus on first top-level-tab and open mega-menu (sans inner focus) */\n [nextTarget] = subsiteCategories;\n }\n } else {\n /* Focus on first category */\n [nextTarget] = subsiteCategories;\n }\n if (openNextTarget) {\n toggleMenu();\n openMenu(nextTarget);\n }\n if (nextTarget.classList.contains('subsite-category')) {\n nextTarget.firstElementChild.focus();\n } else {\n nextTarget.focus();\n }\n e.preventDefault();\n};\n\n/**\n * End or Page Down: If menu is open and link has focus - move focus to the last item\n * in the current menu. If menu is open without link focus or is closed -\n * move focus to last item in the gnav\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const endKeyDown = (e, menuState, toggleMenu) => {\n const { isOpen, activeCategory, subsiteCategories } = menuState;\n let openNextTarget = false;\n let nextTarget;\n const { target } = e;\n const { lastVisibleLink } = getMenuLinkData(getMenuLinks(activeCategory));\n if (isOpen) {\n if (isMenuLink(target)) {\n /* Focus on last visible link */\n nextTarget = lastVisibleLink;\n } else {\n openNextTarget = true;\n /* close current menu */\n toggleMenu();\n /* Focus on last category and open menu (sans inner focus) */\n nextTarget = subsiteCategories[subsiteCategories.length - 1];\n }\n } else {\n /* Focus on last category */\n nextTarget = subsiteCategories[subsiteCategories.length - 1];\n }\n\n if (openNextTarget) {\n toggleMenu();\n openMenu(nextTarget);\n }\n\n if (nextTarget.classList.contains('subsite-category')) {\n nextTarget.firstElementChild.focus();\n } else {\n nextTarget.focus();\n }\n e.preventDefault();\n};\n/**\n * Solves edge case with tabbing and open menus:\n * If focus moves to different category - any open menus should close\n * @param e\n * @param {object} menuState\n * @param {function} toggleMenu: function which toggles the menu state\n * shared in both desktop and mobile platforms\n */\nexport const tabKeyDown = (e, menuState, toggleMenu) => {\n const { target, shiftKey } = e;\n const { isOpen, activeCategory } = menuState;\n if (isOpen) {\n /* If shift+tabbing away from category with open menu - close menu */\n if (!isMenuLink(target) && shiftKey) {\n toggleMenu();\n }\n const { lastVisibleLink } = getMenuLinkData(getMenuLinks(activeCategory));\n /* If tabbing away from last link on open menu - close menu */\n if (target === lastVisibleLink && !shiftKey) {\n toggleMenu();\n }\n }\n};\n/**\n * Tracking function for hovers on the desktop menu NAV1-1337\n * Adds map so each top level is only tracked once\n * @param target\n */\nconst hoverTrackMap = {};\nexport const handleHoverTrack = (target) => {\n if (window && window.metrics && isMenuRoot(target)) {\n const targetUi = target.dataset?.ui;\n\n // if we already tracked this item, stop early\n if (hoverTrackMap?.[targetUi]) {\n return;\n }\n\n const menu = target.querySelector('.gnav-submenu-wrapper');\n\n const track = () => {\n // check again since multiple transition will trigger the \"transitionend\" event\n if (hoverTrackMap?.[targetUi]) {\n return;\n }\n\n hoverTrackMap[targetUi] = true;\n\n // mouseenter works on the LI so get the button\n const button = target.querySelector('.subsite-navigation__link[data-ui=\"nav-level-1\"]');\n window.metrics.link({ linkName: button.dataset.analyticsId });\n\n menu.removeEventListener('transitionend', track);\n };\n\n // only send/set tracking once transition is done and the menu is visible\n menu.addEventListener('transitionend', track);\n }\n};\n","/**\n * Constants containing media queries when actions occur in the application\n * Example:\n * // Attach listener when media query happens\n * const event = window.matchMedia(eventQuery.PLATFORM_SWITCH);\n * if (event.addEventListener) {\n * event.addEventListener('change', () => {});\n * } else if (event.addEventListener) {\n * // Safari Support\n * event.addListener(() => {});\n * }\n */\nconst eventQuery = {\n /*\n * $cdr-breakpoint-md = 992px\n * Media query when platform changes between mobile and desktop\n */\n PLATFORM_SWITCH: '(min-width: 992px)',\n /*\n * $cdr-breakpoint-sm = 768px\n * Media query when masthead height changes\n */\n MOBILE_MASTHEAD_HEIGHT_SWITCH: '(min-width: 768px)',\n};\n\n/**\n * Constants containing media queries for checking for matches\n * Example:\n * // Check if matches the media query\n * window.matchMedia(matchQuery.REDUCED_MOTION).matches\n */\nconst matchQuery = {\n /*\n * Media query if reduced motion is set\n */\n REDUCED_MOTION: '(prefers-reduced-motion)',\n};\n\nexport {\n eventQuery,\n};\n\nexport default matchQuery;\n","/**\n * Menu js\n * Contains the main handlers for the sub-site navigation\n * menus. Functions specific to mobile or desktop\n * belong in those files.\n */\nimport { isDesktop, isMobile } from '../util/getScreenSize';\nimport { getDomElems } from '../../../_shared-components/getDomElems';\nimport { getKeyCode, code, keyCode } from '../../../_shared-components/keyCode';\nimport getClickSubscriber from '../util/eventDelegationUtil';\nimport * as mobile from './mobile-menu';\nimport * as desktop from './desktop-menu';\nimport { eventQuery } from '../util/mediaQuery';\n\n/**\n * Holds menu state elements (as needed)\n * @type {{isOpen: boolean, activeCategory: null, subsiteCategories: []}}\n * @param {boolean} isOpen: indicates whether a category menu is open\n * @param {boolean} openOnClick: indicates if menu should open on click\n * @param {object} activeCategory: <li> node that is either in focus or has an open menu\n * @param {array} subsiteCategories: Array of <li> nodes that represent a subsite's top\n * level categories\n */\nconst menu = {\n isOpen: false,\n activeCategory: null,\n subsiteCategories: [],\n openOnClick: false,\n};\n/* Added for testing - resets state on init */\nconst setInitMenuState = () => {\n menu.isOpen = false;\n menu.activeCategory = null;\n menu.subsiteCategories = [];\n};\n\n/**\n * Sets menu state for activeCategory\n * @param {Element} tab default null\n */\nconst setActiveCategory = (tab = null) => {\n menu.activeCategory = tab;\n};\n\n/**\n * Default behavior for desktop and mobile to hide menu\n */\nconst baseHideMenu = () => {\n const {\n gnav, openButton, navMenu, body, backdrop,\n } = menu;\n gnav.setAttribute('data-toggle', 'closed');\n openButton.setAttribute('aria-expanded', 'false');\n menu.isOpen = false;\n /* keep closed menu states in sync for mobile & desktop */\n mobile.clearSubMenus(navMenu);\n body.classList.remove('no-scroll');\n backdrop.setAttribute('data-toggle', 'hidden');\n desktop.closeMenu(navMenu);\n};\n\n/**\n * Default behavior for desktop and mobile to show menu\n */\nconst baseShowMenu = () => {\n const {\n gnav, openButton,\n } = menu;\n gnav.setAttribute('data-toggle', 'open');\n openButton.setAttribute('aria-expanded', 'true');\n menu.isOpen = true;\n};\n\n/**\n * Close navigation menu\n */\nconst closeMenu = () => {\n const {\n openButton,\n } = menu;\n\n baseHideMenu();\n if (isMobile()) {\n mobile.hideMobileMenu(openButton);\n }\n};\n\n/**\n * Open navigation menu\n */\nconst openMenu = () => {\n const {\n navMenu, gnav, backdrop, closeButton, body,\n } = menu;\n\n if (isMobile()) {\n mobile.setTopForOpenMenu(gnav, navMenu);\n const setNavMenuScrollTop = (position) => {\n navMenu.scrollTop = position;\n };\n mobile.showMobileMenu(backdrop, closeButton, body, setNavMenuScrollTop);\n }\n // call base function after isMobile block\n // mobile.setTopForOpenMenu performs a style read,\n // so it should occur before all style writes\n // https://web.dev/articles/avoid-large-complex-layouts-and-layout-thrashing#avoid_forced_synchronous_layouts\n baseShowMenu();\n};\n\n/**\n * Toggle navigation menu for mobile or desktop open / closed\n */\nconst toggleMenu = () => {\n if (menu.isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n};\n\nconst hasOpenMenus = () => menu.navMenu.querySelectorAll('.is-open').length;\n\n/**\n * Handle all navigation menu clicks\n * @param e: event\n */\nconst clickHandler = (e) => {\n const subscriber = getClickSubscriber(e);\n if (!subscriber) {\n return;\n }\n const { controlType, controls } = subscriber.dataset;\n const {\n navMenu, isOpen, backdrop, body, openButton, gnav,\n } = menu;\n /* mobile only */\n if (isMobile()) {\n const { location } = window;\n const { pathname, hash, href } = subscriber;\n /* Close menu and scroll if clicked link is located within current page. */\n if ((location.pathname === pathname && hash) && isOpen) {\n menu.isOpen = false;\n mobile.closeToScroll(backdrop, body, navMenu, openButton, gnav, href);\n return;\n }\n if (controlType === 'toggle-menu') {\n toggleMenu();\n return;\n }\n\n /* add slider functionality */\n if (controls !== undefined) {\n mobile.slideMenu(e, subscriber, controlType, controls, navMenu);\n }\n }\n\n /* desktop */\n if (isDesktop() && desktop.isMenuRoot(subscriber)) {\n /* do not activate link */\n e.preventDefault();\n\n const isCurrentMenuOpen = subscriber.parentElement.classList.contains('is-open');\n\n if (hasOpenMenus()) {\n closeMenu();\n }\n\n // current menu is open and its clicked again\n if (isCurrentMenuOpen) {\n return;\n }\n\n /* Menu is in closed state and should be opened. */\n openMenu();\n desktop.openMenu(subscriber.parentElement);\n setActiveCategory(subscriber.parentElement);\n }\n};\n\n/**\n * Handle all navigation focus events\n * @param e: focus Event\n */\nconst focusHandler = (e) => {\n /* adding aria-states dynamically */\n const { target } = e;\n const { dataset: data } = target || {};\n if (!data || !target) {\n return;\n }\n const { navLevel, controls, controlType } = data;\n /* desktop focus handling - state management only */\n if (isDesktop() && navLevel === '1') {\n setActiveCategory(target.parentElement);\n }\n\n /* set initial aria states */\n if (isMobile()) {\n const { openButton } = menu;\n if (target === openButton || controlType === 'slide-open') {\n mobile.setAriaStatesOnFocus(target, controls);\n }\n }\n};\n\n/**\n * Handle all navigation blur events\n * @param e\n */\nconst blurHandler = (e) => {\n const { navMenu } = menu;\n const { relatedTarget } = e;\n const isOpen = hasOpenMenus();\n if (isDesktop()) {\n /* If focus is moving outside of navigation - make sure menus are closed */\n if (((relatedTarget && !navMenu.contains(relatedTarget))) && isOpen) {\n closeMenu();\n }\n }\n};\n\n/**\n * Checks activeElement parent contains expected subsite-category class\n * @returns {Boolean}\n */\nconst isActiveElementChildOfSubsiteCategory = () => document.activeElement && document.activeElement.parentElement.classList.contains('subsite-category');\n\n/**\n * Checks activeElement contains expected subsite-navigation__link class\n * @returns {Boolean}\n */\nconst isActiveElementNavigationLink = () => document.activeElement && document.activeElement.classList.contains('subsite-navigation__link');\n\n/**\n * Checks activeElement contains expected subsite-navigation__link class\n * @returns {Boolean}\n */\nconst isActiveElementCategory = () => isActiveElementChildOfSubsiteCategory()\n && isActiveElementNavigationLink();\n\n/**\n * Blur active element if determined to be a category element\n * to prevent undesirable styles\n */\nconst clearCategoryFocus = () => {\n if (isActiveElementCategory()) {\n document.activeElement.blur();\n }\n};\n\n/**\n * Target will always be li.subsite-category\n * @param e\n */\nconst mouseLeave = (e) => {\n const { target } = e;\n /* desktop focus handling */\n if (isDesktop()) {\n toggleMenu();\n target.removeEventListener('mouseleave', mouseLeave, false);\n }\n};\n\nconst mouseEnter = (e) => {\n const { target } = e;\n /* desktop focus handling */\n if (isDesktop()) {\n // Remove focus to fix styles when selecting a new category\n clearCategoryFocus();\n if (hasOpenMenus()) {\n closeMenu();\n }\n toggleMenu();\n\n // add this before the open function so we have the transitionend\n // event listener added before it starts\n desktop.handleHoverTrack(target);\n\n desktop.openMenu(target);\n target.addEventListener('mouseleave', mouseLeave, false);\n setActiveCategory(target);\n }\n};\n\nconst handleDocumentClick = (e) => {\n const { navMenu } = menu;\n\n if (hasOpenMenus() && !navMenu.contains(e.target)) {\n closeMenu();\n }\n};\n\nconst handleEscape = (e) => {\n const isOpen = hasOpenMenus();\n const currentKey = getKeyCode(e);\n\n if (currentKey === keyCode.ESCAPE || currentKey === code.ESCAPE) {\n if (isDesktop()) {\n desktop.escapeKeyDown(e, { ...menu, isOpen }, closeMenu);\n } else if (isMobile() && menu.isOpen) {\n closeMenu();\n }\n }\n};\n\nconst keyDown = (e) => {\n const { closeButton, gnav } = menu;\n const currentKey = getKeyCode(e);\n\n switch (currentKey) {\n case keyCode.ARROW_DOWN:\n case code.ARROW_DOWN:\n if (isDesktop()) {\n desktop.arrowDownKeyDown(e, menu, toggleMenu);\n } else {\n mobile.arrowDownKeyDown(e, gnav, closeButton);\n }\n break;\n case keyCode.ARROW_UP:\n case code.ARROW_UP:\n if (isDesktop()) {\n desktop.arrowUpKeyDown(e, menu, toggleMenu);\n } else {\n mobile.arrowUpKeyDown(e, gnav, closeButton);\n }\n break;\n case keyCode.ARROW_RIGHT:\n case code.ARROW_RIGHT:\n if (isDesktop()) {\n desktop.arrowRightKeyDown(e, menu, toggleMenu);\n } else {\n mobile.arrowDownKeyDown(e, gnav, closeButton);\n }\n break;\n case keyCode.ARROW_LEFT:\n case code.ARROW_LEFT:\n if (isDesktop()) {\n desktop.arrowLeftKeyDown(e, menu, toggleMenu);\n } else {\n mobile.arrowUpKeyDown(e, gnav, closeButton);\n }\n break;\n case keyCode.HOME:\n case keyCode.PAGE_UP:\n case code.HOME:\n case code.PAGE_UP:\n if (isDesktop()) {\n desktop.homeKeyDown(e, menu, toggleMenu);\n } else {\n mobile.homeKeyDown(e, gnav);\n }\n break;\n case keyCode.END:\n case keyCode.PAGE_DOWN:\n case code.END:\n case code.PAGE_DOWN:\n if (isDesktop()) {\n desktop.endKeyDown(e, menu, toggleMenu);\n } else {\n mobile.endKeyDown(e, gnav);\n }\n break;\n case keyCode.TAB:\n case code.TAB:\n if (isDesktop()) {\n /* edge case with tab and open menus:\n * If focus moves to different category - any open menus should close */\n desktop.tabKeyDown(e, menu, toggleMenu);\n } else {\n mobile.tabKeyDown(e, gnav, closeButton);\n }\n break;\n default:\n break;\n }\n};\n\n/**\n * Adds mobile menu settings if a menu is open while user switches platforms\n * on browser resize\n */\nconst syncMenuStateOnPlatformChange = () => {\n const {\n gnav, isOpen, navMenu, body,\n } = menu;\n if (isOpen) {\n mobile.setTopForOpenMenu(gnav, navMenu);\n navMenu.scrollTop = 0;\n body.classList.add('no-scroll');\n }\n};\n/**\n * Listen to media queries where the platform changes (ex. mobile to desktop),\n * and where the mobile masthead height changes (impacts an open mobile menu).\n * Includes support for Safari (addListener)\n */\nconst addMediaQueryListeners = () => {\n const { gnav, navMenu } = menu;\n /* $cdr-breakpoint-md = 992px */\n const platformSwitch = window.matchMedia(eventQuery.PLATFORM_SWITCH);\n /* $cdr-breakpoint-sm = 768px */\n const dynamicMobileMastheadHeight = window.matchMedia(eventQuery.MOBILE_MASTHEAD_HEIGHT_SWITCH);\n platformSwitch.addEventListener('change', syncMenuStateOnPlatformChange);\n dynamicMobileMastheadHeight.addEventListener(\n 'change',\n mobile.setTopForOpenMenu.bind(null, gnav, navMenu)\n );\n};\n\n/**\n * Init\n * @param selectors: selectors for dom elems that must\n * be present in order for menus to function\n */\nconst init = (selectors) => {\n const navElems = getDomElems(selectors);\n /* Exit if one (or more) selectors are not found */\n if (navElems === null) {\n return;\n }\n setInitMenuState();\n /* Add body to prevent scroll on open mobile menu */\n const bodyElem = getDomElems({ body: 'body' });\n Object.assign(menu, navElems, bodyElem);\n const {\n gnav, closeButton, openButton, navMenu, backdrop,\n } = navElems;\n\n menu.openOnClick = navMenu.dataset?.openOnClick === 'true';\n\n /* add click handlers */\n [navMenu, openButton, closeButton, backdrop].forEach((elem) => {\n elem.addEventListener('click', clickHandler);\n });\n const categories = navMenu.getElementsByClassName('subsite-category');\n [...categories].forEach((category) => {\n // don't add mouse hover if using click only\n if (!menu.openOnClick) {\n category.addEventListener('mouseenter', mouseEnter, false);\n }\n\n category.addEventListener('keydown', keyDown);\n });\n menu.subsiteCategories = [...categories];\n /* Set up handlers for elements that only exist in mobile */\n [closeButton, ...mobile.getMobileMenuSubscribers(gnav)].forEach((mobileElem) => {\n mobileElem.addEventListener('keydown', keyDown);\n });\n /* add focus handlers */\n gnav.addEventListener('focusin', focusHandler);\n gnav.addEventListener('focusout', blurHandler);\n /* listen for a couple media queries */\n addMediaQueryListeners();\n\n document.addEventListener('keydown', handleEscape);\n\n if (isDesktop()) {\n document.addEventListener('click', handleDocumentClick);\n }\n};\n\nexport default init;\n","/**\n * List of custom nav events\n */\nconst navEvent = {\n CART_COUNT_CHANGE_EVENT: 'rei.gnav.cartCountChange',\n};\n\nexport default navEvent;","// Static urls and targets to append on urls\nconst CART_PING_TARGET = 'https://www.rei.com/rest/cart/count.json';\n\n// Contains all static urls and targets\nconst urls = {\n CART_PING_TARGET,\n};\n\n// Helper contains useful functions for modifying urls\nconst urlHelper = {\n /**\n * Adds _ property containing a new data to the end of a url\n * currently used to ping cart\n * @param {string} url\n * @returns\n */\n appendPingDate: (url) => `${url}?_=${+new Date()}`,\n};\n\nexport {\n urlHelper,\n CART_PING_TARGET,\n};\n\nexport default urls;\n","export const useCartCounterFetch = (url, err, cb) => {\n const req = new XMLHttpRequest();\n req.open('GET', url);\n req.withCredentials = true;\n req.onreadystatechange = () => {\n if (req.readyState !== 4) {\n return;\n }\n switch (req.status) {\n case 401:\n cb(0);\n return;\n case 200:\n try {\n const data = JSON.parse(req.responseText);\n cb(data);\n } catch (e) {\n err(e);\n }\n return;\n default:\n err(new Error('Bad response'));\n }\n };\n req.send();\n return () => req.abort();\n};\n\nexport default useCartCounterFetch;","import getScriptData from '../util/getScriptData';\nimport navEvent from '../util/navEvent';\nimport { urlHelper, CART_PING_TARGET } from '../util/urlUtil';\nimport { useCartCounterFetch } from './cartCounterFetcher';\n\nconst reflow = (el) => el.offsetParent;\n\nexport default ({\n window: { document },\n selectors,\n}) => {\n const maxCartDisplayCount = 99;\n\n let cancelUpdate;\n let config;\n const cart = document.querySelector(selectors.cart); // Init cart\n\n /**\n * Checks if string or boolean are \"truthy\"\n * NOTE: Not the basic definition of truthy, if string is 'true' case insensitive\n * or boolean is true\n * @param {String|Boolean} value\n * @returns {Boolean}\n */\n const isConfigPropertyTruthy = (value) => (typeof value === 'string' ? value.toLocaleLowerCase() === 'true' : value === true);\n\n /**\n * Adds a ?_={new Date} to a url\n * @returns {String}\n */\n const getCartCountPingUrl = () => urlHelper.appendPingDate(config.cartCountTarget);\n\n const fetchUpdate = (err, cb) => (\n useCartCounterFetch(getCartCountPingUrl(), err, cb)\n );\n\n /**\n * Return true if count is greater than the max number that should be displayed\n * @param {Number} count\n * @returns\n */\n const isCountGreaterThanMaxDisplayCount = (count) => count > maxCartDisplayCount;\n\n /**\n * Build label string for display of\n * Example: display count unless greater than the max number to display else display '{max}+'\n * @param {Number} count\n * @return\n */\n const buildCountLabel = (count) => (isCountGreaterThanMaxDisplayCount(count) ? `${maxCartDisplayCount}+` : `${count}`);\n\n /**\n * Updates count on an Element. Anything about 999 will show as 999+ for\n * desktop and about 99 will show as 99+ for mobile\n * @param {number|string} count\n */\n const updateCount = (count) => {\n /* if number is a string and/or contains decimals, make a whole number. */\n const numericCount = Number(count) ? Math.trunc(count * 1) : -1;\n // Exit if no Element found\n if (!cart) {\n return;\n }\n // Remove count attribute & update aria label if count is less than zero\n if (numericCount <= 0) {\n cart.removeAttribute('data-count-label');\n cart.removeAttribute('data-count');\n cart.setAttribute('aria-label', 'Shopping cart is empty');\n } else {\n // Update count, label, and aria-label\n cart.dataset.count = `${numericCount}`;\n // Display of item count\n cart.dataset.countLabel = buildCountLabel(numericCount);\n cart.setAttribute('aria-label', `Shopping cart contains ${numericCount} ${numericCount === 1 ? 'item' : 'items'}`);\n }\n reflow(cart);\n };\n\n const onSuccess = (count) => {\n updateCount(count);\n };\n\n const onError = (/* error */) => {\n // TODO what to do here?\n };\n\n /**\n * Handle CART_COUNT_EVENT event being fired\n * to update cart count\n * @param {Event} evt\n */\n const cartCountChangeHandler = (evt) => {\n cancelUpdate();\n if (evt.detail != null) {\n /* validates detail and updates cartCount. Does not fetch data / ping endpoint */\n onSuccess(evt.detail);\n } else {\n /* Fetches cart / pings endpoint if evt or evt.detail is null, undefined or missing */\n cancelUpdate = fetchUpdate(onError, onSuccess);\n }\n };\n\n /**\n * Replacement for adding event listeners to handle cross browser support in one location\n * TODO: Should move into its own global util, so we can update app if we find other\n * cross platform issues\n * @param {window|document|Element} target\n * @param {String} event\n * @param {() => {}} handler\n */\n const addEventListener = (target, event, handler) => {\n if (target.addEventListener) {\n target.addEventListener(event, handler);\n } else if (target.addListener) {\n /* Safari Support */\n target.addListener(handler);\n } else {\n // eslint-disable-next-line no-console\n console.warn(`unable to add listener to target of type ${target.constructor.name}`);\n }\n };\n\n const addCartCountChangeListener = () => {\n addEventListener(document, navEvent.CART_COUNT_CHANGE_EVENT, cartCountChangeHandler);\n };\n\n const addListeners = () => {\n addCartCountChangeListener();\n };\n\n // Pull gnav-data config and assign config required for the component\n const initConfig = () => {\n const {\n pingCartOnLoad = false,\n cartCountTarget = CART_PING_TARGET,\n } = getScriptData('gnav-data') || {};\n\n config = {\n pingCartOnLoad,\n cartCountTarget,\n };\n };\n\n const initCounter = () => {\n initConfig();\n addListeners();\n\n /* Don't ping cart endpoint if cart is not configured */\n if (cart && isConfigPropertyTruthy(config.pingCartOnLoad)) {\n cancelUpdate = fetchUpdate(onError, onSuccess);\n }\n };\n\n initCounter();\n};\n","/** Global Navigation\n * Base component for global navigation. Contains foundational functionality for desktop and\n * mobile menu, initialization of click analytics, lazy loader initialization (for images in\n * mega-menus), and the cart counter. Cart counter initializes conditionally depending on\n * site-level configuration.\n */\nimport menuInit from '../components/menu';\nimport cartCounter from '../components/cartCounter';\nimport analyticsInit from '../../../_shared-components/navigationMetrics';\n\nexport function app(win) {\n /* init the mobile menu toggle */\n menuInit({\n openButton: '[data-js=\"open-menu\"]',\n gnav: '[data-js=\"gnav\"]',\n backdrop: '[data-js=\"backdrop\"]',\n closeButton: '[data-js=\"close-menu\"]',\n navMenu: '[data-js=\"subsite-navigation\"]',\n });\n cartCounter({\n window: win,\n selectors: {\n cart: '[data-js=\"cart-button\"]',\n },\n });\n analyticsInit('[data-js=\"gnav\"]');\n return win;\n}\n\nexport function main(win = window) {\n if (win.document.readyState === 'loading') {\n // Loading hasn't finished yet\n win.document.addEventListener('DOMContentLoaded', app.bind(null, win));\n } else {\n // `DOMContentLoaded` has already fired\n app(win);\n }\n}\n","import '../../../style/navigation/global/global.scss';\nimport '../../util/global-shim';\nimport { main } from './main/main';\n\n/**\n * This is the main js entry point.\n *\n * @param win Window object. Pass in to allow for window stubbing.\n * @returns {Window}\n */\n\nmain(window);\n"],"names":["CdrBreakpointMd","isDesktop","window","matchMedia","matches","isMobile","isClickSubscriber","elem","tagName","traverseToFindClickSubscriber","currentTarget","parentElement","getClickSubscriber","event","target","getCurrentIndex","elemArray","findIndex","el","isEqualNode","getMenuLinkData","visibleLinks","firstVisibleLink","lastVisibleLink","length","getNavLevel","dataset","navLevel","menuState","openSubMenus","openButtons","currentLevel","setSlideMenuState","button","menuHandled","state","ariaState","setAttribute","removeAttribute","updateMenuStateTracking","push","pop","setFirstLevelVisibility","navMenu","classList","add","remove","slideMenu","e","subscriber","controlType","menuName","childMenu","querySelector","preventDefault","childBackButton","addEventListener","focus","once","parentButton","clearSubMenus","forEach","closeToScroll","backdrop","body","openButton","gnav","href","location","getMobilePanelElems","filterFn","elemArr","querySelectorAll","mobileCard","getMobileMenuSubscribers","getMenuEntries","document","menuEntries","getVisibleFocusableElems","lastIndx","subMenuId","id","focusOnElem","tabKeyDown","closeButton","shiftKey","arrowDownKeyDown","currentLinkIndex","arrowUpKeyDown","endKeyDown","homeKeyDown","setTopForOpenMenu","bottom","getBoundingClientRect","scrollOffset","scrollY","style","top","setAriaStatesOnFocus","controls","hideMobileMenu","preventScroll","showMobileMenu","setNavMenuScrollTop","hasChildren","isLeaf","openMenu","category","firstElementChild","closeMenu","categoryItem","getMenuLinks","isMenuLink","isMenuRoot","escapeKeyDown","toggleMenu","isOpen","activeCategory","rel","arrowRightKeyDown","subsiteCategories","openNextTarget","currentCategoryIndex","nextCategoryIndex","nextTarget","arrowLeftKeyDown","contains","hoverTrackMap","handleHoverTrack","metrics","targetUi","ui","menu","track","link","linkName","analyticsId","removeEventListener","eventQuery","PLATFORM_SWITCH","MOBILE_MASTHEAD_HEIGHT_SWITCH","openOnClick","setInitMenuState","setActiveCategory","tab","baseHideMenu","mobile","desktop","baseShowMenu","position","scrollTop","hasOpenMenus","clickHandler","pathname","hash","undefined","isCurrentMenuOpen","focusHandler","data","blurHandler","relatedTarget","isActiveElementChildOfSubsiteCategory","activeElement","isActiveElementNavigationLink","isActiveElementCategory","clearCategoryFocus","blur","mouseLeave","mouseEnter","handleDocumentClick","handleEscape","currentKey","getKeyCode","keyCode","ESCAPE","code","keyDown","ARROW_DOWN","ARROW_UP","ARROW_RIGHT","ARROW_LEFT","HOME","PAGE_UP","END","PAGE_DOWN","TAB","syncMenuStateOnPlatformChange","addMediaQueryListeners","platformSwitch","dynamicMobileMastheadHeight","bind","init","selectors","navElems","getDomElems","bodyElem","Object","assign","categories","getElementsByClassName","mobileElem","navEvent","CART_COUNT_CHANGE_EVENT","CART_PING_TARGET","urlHelper","appendPingDate","url","Date","useCartCounterFetch","err","cb","req","XMLHttpRequest","open","withCredentials","onreadystatechange","readyState","status","JSON","parse","responseText","send","abort","reflow","offsetParent","cartCounter","cancelUpdate","config","cart","isConfigPropertyTruthy","value","toLocaleLowerCase","getCartCountPingUrl","cartCountTarget","fetchUpdate","isCountGreaterThanMaxDisplayCount","count","maxCartDisplayCount","buildCountLabel","updateCount","numericCount","Number","Math","trunc","countLabel","onSuccess","onError","cartCountChangeHandler","evt","detail","handler","addListener","console","warn","constructor","name","addCartCountChangeListener","addListeners","initConfig","pingCartOnLoad","getScriptData","initCounter","app","win","menuInit","analyticsInit","main"],"mappings":"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","x_google_ignoreList":[0]}