{"version":3,"file":"static/chunks/8444-2590bdf9fa7c8444.js","mappings":"qUAiJkBA,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,wHACf,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACC,UAAU,EAK7C,OAAC,CAAEH,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAK1BR,EAAAA,EAAMA,CAACS,EAAE,CAAAP,UAAA,oFAEV,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMO,UAAU,CAACC,YAAY,CAACC,OAAO,GAKhDZ,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,kFCrIlBF,EAAAA,EAAMA,CAACa,MAAM,CAAAX,UAAA,uJACT,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMO,UAAU,CAACC,YAAY,CAACG,SAAS,EAG5D,OAAC,CAAEX,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EAKvC,OAAC,CAAEC,oBAAAA,CAAmB,CAAE,CAAAZ,SAAKY,GAAuB,+BAGxChB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,+IAIT,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMO,UAAU,CAACC,YAAY,CAACG,SAAS,EAInE,OAAC,CAAEE,oBAAAA,CAAmB,CAAE,CAAAZ,SACtBY,GACC,2FCpBT,IAAMC,EAAqBC,CAAAA,EAAAA,EAAAA,EAAAA,EAASA,qCASlBlB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,uXAGJ,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACc,OAAO,CAAG,MAOxCF,GAUDjB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,2IASPF,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,yFAMPF,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,0KAIb,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,CAAG,OAOpCf,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,6KAE3B,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAY9C,IAAMY,EAAYpB,EAAAA,EAAMA,CAACqB,CAAC,CAAAnB,UAAA,uIACb,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,GAQvBf,CAAAA,EAAAA,EAAAA,EAAAA,EAAOoB,GAAAA,UAAAA,CAAAA,qHAGZ,OAAC,CAAEjB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,uCC5ErBf,CAAAA,EAAAA,EAAAA,EAAAA,EAAOsB,EAAAA,OAAIA,EAAAA,UAAAA,CAAAA,sFAGjC,OAAC,CAAEnB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgB,qBAAqB,GAK9BvB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,2HAEnC,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgB,qBAAqB,GAQnCvB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,gGAG9B,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAMnBR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,2KCkCfF,EAAAA,EAAMA,CAACwB,EAAE,CAAAtB,UAAA,6KAQP,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,GAIvCf,EAAAA,EAAMA,CAACyB,EAAE,CAAAvB,UAAA,oGAIE,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACqB,oBAAoB,GAIvD1B,CAAAA,EAAAA,EAAAA,EAAAA,EAAOsB,EAAAA,OAAIA,EAAAA,UAAAA,CAAAA,0OAGnB,OAAC,CAAEnB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACsB,gBAAgB,EAQ1B,OAAC,CAAExB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACuB,iBAAiB,GAG/C5B,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,2GAQdF,EAAAA,EAAMA,CAAC6B,IAAI,CAAA3B,UAAA,8EAGvB,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACyB,oBAAoB,GC/F3C9B,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,oIAUbF,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,8JAMZ,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EACrB,OAAC,CAAEZ,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACc,OAAO,GAG7BnB,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,8OAU3B,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EACrB,OAAC,CAAEZ,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACc,OAAO,GAI/BnB,EAAAA,EAAMA,CAAC6B,IAAI,CAAA3B,UAAA,iFCgJRF,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,uGAKnC,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAKFR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,qFAIhD,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAIlBR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,6GCjLrBF,EAAAA,EAAMA,CAACyB,EAAE,CAAAvB,UAAA,uJAGL,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,QAAK,aAA4C2B,MAAA,CAA/B5B,EAAME,MAAM,CAACuB,iBAAiB,GAC5D,OAAC,CAAEzB,MAAAA,CAAK,CAAE6B,SAAAA,CAAQ,CAAE,CAAA5B,SAC/B4B,EAAW,aAAoCD,MAAA,CAAvB5B,EAAME,MAAM,CAAC4B,SAAS,EAAK,aAA+BF,MAAA,CAAlB5B,EAAME,MAAM,CAACU,IAAI,GAE5E,OAAC,CAAEZ,MAAAA,CAAK,CAAE6B,SAAAA,CAAQ,CAAE,CAAA5B,SACzB4B,EAAW,GAA0BD,MAAA,CAAvB5B,EAAME,MAAM,CAAC4B,SAAS,EAAK,GAAwCF,MAAA,CAArC5B,EAAME,MAAM,CAAC6B,uBAAuB,GAE5D,OAAC,CAAE/B,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAAC8B,iBAAiB,GAIpDnC,CAAAA,EAAAA,EAAAA,EAAAA,EAAOsB,EAAAA,OAAIA,EAAAA,UAAAA,CAAAA,oLC3CdtB,EAAAA,EAAMA,CAACwB,EAAE,CAAAtB,UAAA,kMAKd,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACsB,gBAAgB,EACjC,OAAC,CAAExB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EAMtC,OAAC,CAAEZ,MAAAA,CAAK,CAAEiC,WAAAA,CAAU,CAAE,CAAAhC,SAAKgC,EAAa,aAA4CL,MAAA,CAA/B5B,EAAME,MAAM,CAACuB,iBAAiB,EAAK,KCcxF5B,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,+QAKC,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACgC,kBAAkB,EAC9D,OAAC,CAAElC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACsB,gBAAgB,EACnD,OAAC,CAAExB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAWvBR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,kPAUL,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACqB,oBAAoB,EAEtE,OAAC,CAAEvB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAOvBR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,4IAGJ,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACgC,kBAAkB,EAErE,OAAC,CAAElC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAMpBR,EAAAA,EAAMA,CAACqB,CAAC,CAAAnB,UAAA,sIAMN,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACqB,oBAAoB,YEpG1D1B,EAAAA,EAAMA,CAACsC,MAAM,CAAApC,UAAA,4TAIP,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EACrC,OAAC,CAAEZ,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMO,UAAU,CAACC,YAAY,CAACG,SAAS,EAKnE,OAAC,CAAEX,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,EAQxC,OAAC,CAAEL,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgC,KAAK,GAMxBvC,EAAAA,EAAMA,CAACwC,GAAG,CAAAtC,UAAA,oHAKzB,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GAKpBR,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,gMAK9B,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgC,KAAK,EAKvC,OAAC,CAAEpC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,oBClCpBR,EAAAA,EAAMA,CAACwB,EAAE,CAAAtB,UAAA,+VAEtB,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EAeb,OAAC,CAAEZ,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACU,IAAI,EAO1D,OAAC,CAAEZ,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,GCxB5BR,EAAAA,EAAMA,CAACwC,GAAG,CAAAtC,UAAA,qNAOJ,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAME,MAAM,CAACc,OAAO,EAErD,OAAC,CAAEhB,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACC,MAAM,EAIxC,OAAC,CAAEL,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgC,KAAK,GAKZvC,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,kJAIrC,OAAC,CAAEC,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAMI,YAAY,CAACgC,KAAK,mFQ9CrBE,CAAAA,EAAAA,SAAAA,OAAAA,EACpB,IAAMC,QAAAC,GAAA,EAAAC,EAAAC,CAAA,OAAAD,EAAAC,CAAA,OAAAD,EAAAC,CAAA,OAAAD,EAAAC,CAAA,OAAAD,EAAAC,CAAA,QAAAC,IAAA,CAAAF,EAAAG,IAAA,CAAAH,EAAA,QAAwDE,IAAI,CAAC,GAASE,EAAIC,qBAAqB,2CAEjGC,IAAK,GACLC,QAAS,IAAM,GAAAC,EAAAC,GAAA,EAACC,EAASA,UAAC,sCAalC,IAAMA,EAAYtD,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,2IKIrB,IAAMC,EAAQoD,QAAAA,CAAUA,CCtBlBC,EAAoBC,CAAAA,EAAAA,EAAAA,IAAAA,EAC7B,OAAC,CAAEC,MAAAA,EAAQ,EAAE,CAAEC,OAAAA,EAAS,EAAE,CAAEC,gBAAAA,EAAkBzD,EAAME,MAAM,CAACwD,aAAa,CAAa,CAAAzD,EACjF,MACI,GAAAgD,EAAAU,IAAA,EAACC,MAAAA,CACGL,MAAOA,EACPC,OAAQA,EACRK,QAAS,OAAgBL,MAAAA,CAATD,EAAM,KAAU3B,MAAA,CAAP4B,GACzBM,KAAK,OACLC,MAAM,uCAEN,GAAAd,EAAAC,GAAA,EAACc,OAAAA,CAAKT,MAAOA,EAAOC,OAAQD,EAAOU,GAAG,KAAKH,KAAML,IACjD,GAAAR,EAAAC,GAAA,EAACgB,OAAAA,CACGC,EAAE,+QACFL,KAAK,YAIrB,EAGJT,CAAAA,EAAkBe,WAAW,CAAG,oBCbzB,IAAMC,EAAoB,OAAC,CAC9BC,MAAAA,EATsB,cASG,CACzBC,YAAAA,EATwB,wFASS,CACZ,CAAAtE,EACrB,MACI,GAAAgD,EAAAU,IAAA,EAACa,EAAAA,WACG,GAAAvB,EAAAC,GAAA,EAACuB,EAAAA,UAAmBH,IACpB,GAAArB,EAAAC,GAAA,EAACwB,EAAAA,UAAkBH,MAG/B,CAEAF,CAAAA,EAAkBD,WAAW,CAAG,oBAEhC,IAAMI,EAA6B3E,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,6KAYvC4E,EAAiBC,CAAAA,EAAAA,EAAAA,EAAAA,EAAGA,4GAIP,OAAC,CAAE5E,MAAAA,CAAK,CAAE,CAAAC,SAAKD,EAAM6E,KAAK,CAACC,qBAAqB,GAK7DL,EAAoB5E,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,qGAC9B4E,GAOAD,EAAmB7E,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA,iHAC7B4E,GASOI,EAAe,OAAC,CAAET,MAAAA,CAAK,CAAEC,YAAAA,CAAW,CAAqB,CAAAtE,EAClE,MACI,GAAAgD,EAAAU,IAAA,EAACR,EAASA,WACN,GAAAF,EAAAC,GAAA,EAACG,EAAiBA,CAAAA,GAClB,GAAAJ,EAAAC,GAAA,EAACmB,EAAAA,CAAkBC,MAAOA,EAAOC,YAAaA,MAG1D,EAEMpB,EAAYtD,EAAAA,EAAMA,CAACC,GAAG,CAAAC,UAAA","sources":["webpack://_N_E/./components/modules/settingsPopup/settingsPopup.tsx","webpack://_N_E/./components/elements/settings/settingsContainer.tsx","webpack://_N_E/./components/modules/hamburgerMenu/hamburgerMenu.tsx","webpack://_N_E/./components/elements/navbarLogo/navbarLogo.tsx","webpack://_N_E/./components/modules/location/locationSelector/favoriteLocationsDropdown/favoriteLocationsList.tsx","webpack://_N_E/./components/modules/location/locationSelector/favoriteLocationsDropdown/favoriteLocationsDropdown.tsx","webpack://_N_E/./components/modules/location/locationSelector/locationSearcher/locationSearcher.tsx","webpack://_N_E/./components/modules/location/locationSelector/locationSuggestionList/locationSuggestionListItem.tsx","webpack://_N_E/./components/modules/location/locationSelector/locationSuggestionList/locationSuggestionList.tsx","webpack://_N_E/./components/modules/location/locationSelector/locationSelectorView.tsx","webpack://_N_E/./components/modules/location/locationSelector/locationSelector.tsx","webpack://_N_E/./components/modules/primaryNavbar/primaryNavbar.tsx","webpack://_N_E/./components/modules/navUtilityList/navUtilityList.tsx","webpack://_N_E/./components/modules/utilityNavbar/utilityNavbar.tsx","webpack://_N_E/./components/layouts/navbar/navbar.tsx","webpack://_N_E/./components/layouts/layout.tsx","webpack://_N_E/./components/modules/ads/adScriptLoader/adScriptLoader.tsx","webpack://_N_E/./components/utilities/pageRouteConfig.ts","webpack://_N_E/./hooks/appState/useAppState.ts","webpack://_N_E/./components/modules/appStateManager/appStateManagerWrapper.ts","webpack://_N_E/./components/modules/cmpScriptLoader/cmpScriptLoader.tsx","webpack://_N_E/./components/modules/location/locationManagerPopup/lazyLoadedManageLocationDialog.tsx","webpack://_N_E/./components/modules/video/jwPlayerScriptLoadingComponent.tsx","webpack://_N_E/./lib/utils/seoConfigs/jsonLd/jsonLds.tsx","webpack://_N_E/./lib/utils/seoConfigs/jsonLd/defaultJsonLd.tsx","webpack://_N_E/./next-seo.config.ts","webpack://_N_E/./pages/_app.tsx","webpack://_N_E/./components/elements/icons/errorBoundaryIcon/errorBoundaryIcon.tsx","webpack://_N_E/./app/lib/errorUIs/generic/error.tsx","webpack://_N_E/./styles/smartBanner.css?34a2"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable prettier/prettier */\nimport { useState } from 'react';\nimport type { ModalProps } from 'react-responsive-modal';\nimport Modal from 'react-responsive-modal';\nimport styled from 'styled-components';\n\nimport {\n pressureUnitAbbreviations,\n pressureUnits,\n pressureUnitsEnum,\n speedUnits,\n speedUnitsEnum,\n temperatureUnitAbbreviations,\n temperatureUnits\n} from '@weatherbug/common-v2';\nimport router from 'next/router';\nimport { selectUserProfile } from '../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppDispatch, useAppSelector } from '../../../store/redux/storeHooks/hooks';\nimport { translate } from '../../utilities/translate';\nimport { setUnits } from '../../utilities/units/dataLayer/slices/unitsThunks';\nimport { activeHurricanePath } from '../hurricane/constants';\nimport { SettingSelector } from './settingSelector';\n\nexport interface SettingsPopupProps {\n open: boolean;\n onClose: () => void;\n}\n\nexport const SettingsPopup = ({ open = false, onClose }: SettingsPopupProps) => {\n const dispatch = useAppDispatch();\n const { userProfile } = useAppSelector(selectUserProfile);\n const { DeviceId } = userProfile || {};\n\n const [currentTempUnit, setCurrentTempUnit] = useState(userProfile?.TempUnit || 1);\n const [currentWindUnit, setCurrentWindUnit] = useState(userProfile?.WindUnit || 1);\n const [currentPressureUnit, setCurrentPressureUnit] = useState(userProfile?.PressureUnit || 1);\n\n const onCloseEvent = () => {\n if (DeviceId) {\n dispatch(\n setUnits({\n appInstanceId: DeviceId,\n unitval: currentTempUnit,\n tempUnitVal: currentTempUnit,\n windUnitVal: currentWindUnit,\n pressureUnitVal: currentPressureUnit\n })\n );\n }\n\n if (\n router.isReady\n && router.pathname.includes(activeHurricanePath) \n && (currentWindUnit !== userProfile?.WindUnit || currentPressureUnit !== userProfile?.PressureUnit)\n ) {\n router\n .replace({\n pathname: activeHurricanePath,\n query: { su: currentWindUnit, pu: currentPressureUnit }\n })\n .then(() => router.reload());\n }\n\n onClose();\n };\n\n return (\n \n \n {translate('settings')}\n \n \n \n \n \n \n \n );\n};\n\nconst modalStyles: ModalProps['styles'] = {\n closeIcon: {\n fill: '#555555',\n width: 48,\n height: 48,\n padding: 13\n },\n closeButton: {\n position: 'absolute',\n top: 3,\n right: 3,\n border: 'none',\n padding: 0,\n backgroundColor: '#ffffff'\n },\n overlay: {\n position: 'fixed',\n inset: 0,\n background: '#000000',\n opacity: 0.7,\n zIndex: 1000\n },\n modalContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100vw',\n top: 0,\n left: 0,\n zIndex: 1001,\n position: 'fixed'\n },\n modal: {\n minWidth: 279,\n maxWidth: 792,\n margin: 'auto',\n position: 'relative',\n backgroundColor: '#ffffff'\n },\n root: {\n zIndex: 1000\n }\n};\n\nconst Container = styled.div`\n color: ${({ theme }) => theme.colors.strongText};\n width: 360px;\n margin-top: -15px;\n font-size: 16px;\n padding: 24px;\n ${({ theme }) => theme.mediaQueries.mobile} {\n width: 100%;\n }\n`;\n\nconst ModalHeader = styled.h1`\n /* font-family: ${({ theme }) => theme.typography.fontFamilies.secondary}; */\n font-family: ${({ theme }) => theme.typography.fontFamilies.primary};\n font-size: 18px;\n font-weight: 600;\n`;\n\nconst InnerContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n","/* eslint-disable operator-linebreak */\n/* eslint-disable prettier/prettier */\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport { SettingsPopup } from '../../modules/settingsPopup/settingsPopup';\nimport { translate } from '../../utilities/translate';\nimport GearIcon from '../icons/gearIcon/gearIcon';\n\nexport interface SettingsContainerProps {\n isHamburgerMenuItem?: boolean;\n}\n\nconst SettingsContainer = ({ isHamburgerMenuItem = false }: SettingsContainerProps) => {\n const [showSettingsPopup, setShowSettingsPopup] = useState(false);\n\n const handleModal = (open: boolean) => {\n setShowSettingsPopup(open);\n };\n\n return (\n \n \n {showSettingsPopup && handleModal(false)} />}\n \n );\n};\n\nconst Button = styled.button>`\n font-family: ${({ theme }) => theme.typography.fontFamilies.secondary};\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.base};\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n ${({ isHamburgerMenuItem }) => isHamburgerMenuItem && 'text-transform: uppercase;'}\n`;\n\nconst Container = styled.div>`\n display: flex;\n align-items: center;\n justify-content: center;\n font-family: ${({ theme }) => theme.typography.fontFamilies.secondary};\n font-weight: 400;\n font-size: 14px;\n\n ${({ isHamburgerMenuItem }) =>\n isHamburgerMenuItem &&\n `\n padding: 30px 0px;\n justify-content: center;\n `};\n`;\n\nexport default SettingsContainer;\n","import styled, { keyframes } from 'styled-components';\nimport { HamburgerCloseIcon } from '../../elements/icons/hamburgerCloseIcon/HamburgerCloseIcon';\nimport SettingsContainer from '../../elements/settings/settingsContainer';\nimport { GroundTruthRoute, WeatherBugForAdvertisers } from '../../utilities/routes/navRoutes';\nimport NavHamburgerList from '../navHamburgerList/navHamburgerList';\n\ninterface HamburgerMenuProps {\n onClose: () => void;\n}\n\nconst HamburgerMenu = ({ onClose }: HamburgerMenuProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n {GroundTruthRoute.labelTranslationKey}\n \n {WeatherBugForAdvertisers.labelTranslationKey}\n \n \n \n );\n};\n\nconst containerKeyframes = keyframes`\n 0% {\n width: 0px;\n }\n 100% {\n width: 100%;\n }\n`;\n\nconst Container = styled.div`\n position: fixed;\n inset: 0;\n background-color: ${({ theme }) => theme.colors.brandBg + 'f2'};\n z-index: 999;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow: auto;\n\n animation-name: ${containerKeyframes};\n animation-duration: 0.25s;\n animation-timing-function: ease-in-out;\n animation-delay: 0s;\n animation-iteration-count: 1;\n animation-direction: normal;\n animation-fill-mode: none;\n animation-play-state: running;\n`;\n\nconst TopContainer = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 30px;\n margin-bottom: 30px;\n`;\n\nconst BottomContainer = styled.div`\n overflow: auto;\n height: calc(100% - 160px);\n width: 100%;\n`;\n\nconst CloseIconContainer = styled.div`\n border-radius: 100%;\n width: 40px;\n height: 40px;\n border: 2px solid ${({ theme }) => theme.colors.base + '80'};\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n`;\n\nconst BrandContainer = styled.div`\n display: none;\n ${({ theme }) => theme.mediaQueries.mobile} {\n display: flex;\n max-height: 60px;\n bottom: 0px;\n left: 0px;\n width: 100%;\n padding: 16px 0px;\n text-align: center;\n justify-content: center;\n }\n`;\n\nconst BrandLink = styled.a`\n color: ${({ theme }) => theme.colors.base};\n text-decoration: none;\n font-size: 16px;\n font-weight: 600;\n line-height: 20.11px;\n text-align: left;\n`;\n\nconst CorporateLink = styled(BrandLink)`\n &::after {\n content: ' • ';\n color: ${({ theme }) => theme.colors.base};\n margin: 0 7px;\n }\n &:last-of-type::after {\n content: '';\n }\n`;\n\nexport default HamburgerMenu;\n","import Link from 'next/link';\nimport { useState } from 'react';\nimport styled from 'styled-components';\nimport HamburgerMenu from '../../modules/hamburgerMenu/hamburgerMenu';\nimport { primaryNavRoutes } from '../../utilities/routes/navRoutes';\nimport { HamburgerLogoIcon } from '../icons/logos/hamburgerLogoIcon';\nimport { TextOnlyLogoIcon } from '../icons/logos/textOnlyLogoIcon';\nimport { WeatherBugLargeIcon } from '../icons/logos/weatherBugLargeIcon';\nimport { NavNonLinkItem } from '../navNonLinkItem/navNonLinkItem';\n\nconst NavbarLogo = () => {\n const [hamburgerMenuOpen, setHamburgerMenuOpen] = useState(false);\n\n const toggleHamburgerMenu = () => {\n setHamburgerMenuOpen(!hamburgerMenuOpen);\n };\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n {hamburgerMenuOpen && }\n \n \n );\n};\n\nconst LargeScreenLogoLink = styled(Link)`\n display: flex;\n align-items: center;\n ${({ theme }) => theme.mediaQueries.navHamburgerMenuQuery} {\n display: none;\n }\n`;\n\nconst HamburgerLogoContainer = styled.div`\n display: none;\n ${({ theme }) => theme.mediaQueries.navHamburgerMenuQuery} {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n } ;\n`;\n\nconst TextLogoContainer = styled.div`\n display: flex;\n margin-top: 4px;\n ${({ theme }) => theme.mediaQueries.mobile} {\n display: none;\n margin-top: 0;\n }\n`;\n\nconst ClickableContainer = styled.div`\n display: flex;\n cursor: pointer;\n`;\n\nexport default NavbarLogo;\n","/* eslint-disable operator-linebreak */\n/* eslint-disable prettier/prettier */\nimport styled from 'styled-components';\n\nimport { clearLocationSearchSuggestions } from '@weatherbug/common-v2';\nimport Link from 'next/link';\nimport router, { useRouter } from 'next/router';\nimport { FavoriteLocation, Locality } from '../../../../../lib/services/locationDataService/types';\nimport { isValidString } from '../../../../../lib/utils/guardUtils/guardUtils';\nimport { selectAppConfig } from '../../../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport { getUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userThunks';\nimport { useAppDispatch, useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport { FavoriteLocationIcon } from '../../../../elements/icons/favoriteLocation/favoriteLocationIcon';\nimport { setRecentSearchLocation } from '../../dataLayer/slices/locationSlice';\nimport { defaultStationName } from '../../locationConstants';\nimport { getLocationUrl } from '../../utilities';\nimport { LocationAlert } from '../locationAlert/locationAlert';\n\nconst defaultMapZoom = 7;\nconst defaultLayerId = 'Radar.Global';\nconst FavoriteLocationIconHeight = 17;\nconst FavoriteLocationIconWidth = 17;\n\nexport interface FavoriteLocationsListProps {\n sortedFavoriteLocations: FavoriteLocation[];\n}\n\nexport const FavoriteLocationsList = ({ sortedFavoriteLocations }: FavoriteLocationsListProps) => {\n const dispatch = useAppDispatch();\n const { pathname: currentPath } = useRouter();\n const { config, pageRouteInfo } = useAppSelector(selectAppConfig);\n const { pageId } = pageRouteInfo || {};\n const { pageIdsToSupportLocationChanges2, pageIdsToSupportLocationChanges } = config || {};\n const shouldSupportActivelLocationChanges =\n pageId &&\n !pageIdsToSupportLocationChanges?.includes(pageId) &&\n !pageIdsToSupportLocationChanges2?.includes(pageId as string);\n\n const handleFavoritesActiveLocationChange = async (location: Locality, url: string) => {\n if (isValidString(location.SlugName)) {\n dispatch(getUserProfile({ locationSlugName: location.SlugName }));\n dispatch(clearLocationSearchSuggestions());\n }\n\n dispatch(setRecentSearchLocation(location));\n if (shouldSupportActivelLocationChanges && url) {\n router.push(url);\n }\n };\n\n return (\n \n {sortedFavoriteLocations.map((favoriteLocation, index) => {\n const stationRouteString = favoriteLocation?.Location?.Station?.RouteString;\n const locationRouteString =\n favoriteLocation?.Location?.Locality?.RouteString || favoriteLocation?.Location?.Locality?.SlugName;\n const favoriteLocationLatitude = favoriteLocation?.Location?.Locality?.Latitude;\n const favoriteLocationLongitude = favoriteLocation?.Location?.Locality?.Longitude;\n const favoriteLocationId = favoriteLocation?.Location?.Id;\n const { Latitude, Longitude } = favoriteLocation?.Location?.Locality || {};\n const mapPageParams = `center=${Latitude},${Longitude},${defaultMapZoom}&layerId=${defaultLayerId}`;\n const locUrlWithParams =\n pageId === 'maps' ? `${locationRouteString}/?${mapPageParams}` : locationRouteString;\n const updatedRouteString = stationRouteString\n ? `${locUrlWithParams}&station=${stationRouteString}`\n : locUrlWithParams;\n const location = favoriteLocation?.Location?.Locality;\n const url = getLocationUrl(currentPath, updatedRouteString);\n\n if (location && favoriteLocationLatitude && favoriteLocationLongitude && favoriteLocationId && url) {\n return (\n \n handleFavoritesActiveLocationChange(location, url)}>\n \n \n {favoriteLocation?.Location?.Locality?.DisplayCompositeName}\n \n {favoriteLocation?.Location?.Station?.StationName ?? defaultStationName}\n \n \n \n \n \n );\n } else return;\n })}\n \n );\n};\n\nconst LocationsList = styled.ul`\n display: flex;\n flex-direction: column;\n max-height: 335px;\n height: auto;\n overflow-y: auto;\n list-style: none;\n padding: 0;\n background-color: ${({ theme }) => theme.colors.base};\n margin: 0;\n`;\n\nconst ListItem = styled.li`\n padding-left: 10px;\n cursor: pointer;\n &:hover {\n background-color: ${({ theme }) => theme.colors.hoverBackgroundColor};\n }\n`;\n\nconst ListItemLink = styled(Link)`\n display: flex;\n align-items: center;\n color: ${({ theme }) => theme.colors.listItemLinkGray};\n font-size: 16px;\n font-weight: 400;\n text-overflow: ellipsis;\n overflow: hidden;\n text-decoration: none;\n padding-top: 10px;\n padding-bottom: 10px;\n border-bottom: 1px solid ${({ theme }) => theme.colors.borderBottomColor};\n`;\n\nconst DisplayNameContainer = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n width: 70%;\n margin-left: 10px;\n`;\n\nconst StationContainer = styled.span`\n font-size: 11px;\n font-weight: 400;\n color: ${({ theme }) => theme.colors.stationContainerGray};\n`;\n","/* eslint-disable no-extra-parens */\n/* eslint-disable prettier/prettier */\nimport sortBy from 'lodash.sortby';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nimport { selectUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppDispatch, useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport GearIcon from '../../../../elements/icons/gearIcon/gearIcon';\nimport { translate } from '../../../../utilities/translate';\nimport { shouldDisplayLocationManagerPopup } from '../../locationManagerPopup/dataLayer/slices/locationManagerPopupSlice';\nimport { FavoriteLocationsList } from './favoriteLocationsList';\n\nexport interface FavoriteLocationsDropdownProps {\n close: () => void;\n}\n\nexport const FavoriteLocationsDropdown = ({ close }: FavoriteLocationsDropdownProps) => {\n const dispatch = useAppDispatch();\n const { userProfile } = useAppSelector(selectUserProfile);\n const { FavoriteLocations: favoriteLocations } = userProfile || {};\n const [sortedFavoriteLocations, setSortedFavoriteLocations] = useState(favoriteLocations);\n\n const manageLocationsClick = useCallback(() => {\n dispatch(shouldDisplayLocationManagerPopup(true));\n close();\n }, [close, dispatch]);\n\n useEffect(() => {\n setSortedFavoriteLocations(sortBy(favoriteLocations, 'Position'));\n }, [favoriteLocations]);\n\n return (\n \n
{translate('favoriteLocations')}
\n {sortedFavoriteLocations && (\n \n )}\n \n \n {translate('manageLocations')}\n \n
\n );\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 56px;\n right: 0;\n width: 100%;\n z-index: 1000;\n`;\n\nconst Header = styled.div`\n padding: 6px 15px;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.25;\n text-transform: uppercase;\n color: ${({ theme }) => theme.colors.base};\n background-color: ${({ theme }) => theme.colors.brandBg};\n`;\n\nconst ManageLocationsButton = styled.div`\n display: flex;\n align-items: center;\n font-size: 16px;\n font-weight: 400;\n text-transform: uppercase;\n padding: 0px;\n padding-left: 10px;\n padding-top: 12px;\n padding-bottom: 12px;\n color: ${({ theme }) => theme.colors.base};\n background-color: ${({ theme }) => theme.colors.brandBg};\n cursor: pointer;\n`;\n\nconst ManageLocationsText = styled.span`\n margin-left: 8px;\n`;\n","/* eslint-disable no-extra-parens */\n/* eslint-disable operator-linebreak */\n/* eslint-disable prettier/prettier */\nimport router, { useRouter } from 'next/router';\nimport {\n ChangeEvent,\n MutableRefObject,\n RefObject,\n useCallback,\n useDeferredValue,\n useEffect,\n useRef,\n useState\n} from 'react';\nimport { useKey } from 'rooks';\nimport styled from 'styled-components';\n\nimport {\n clearLocationSearchSuggestions,\n searchLocationBySearchString,\n setLocationSuggestionIndex\n} from '@weatherbug/common-v2';\nimport { Locality } from '../../../../../lib/services/locationDataService/types';\nimport { isValidString } from '../../../../../lib/utils/guardUtils/guardUtils';\nimport { selectAppConfig } from '../../../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport { selectUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { getUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userThunks';\nimport { useAppDispatch, useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport { SearchIcon } from '../../../../elements/icons/search/searchIcon';\nimport { Input } from '../../../../elements/input/input';\nimport { translate } from '../../../../utilities/translate';\nimport { recentSearchLocationsSelector, setRecentSearchLocation } from '../../dataLayer/slices/locationSlice';\nimport { selectManageLocationModal } from '../../locationManagerPopup/dataLayer/slices/locationManagerPopupSlice';\nimport { getLocationUrl } from '../../utilities';\nimport { keyCodes } from './constants';\n\nexport interface LocationSearcherProps {\n toggleSuggestionPopup: (value: boolean) => void;\n}\n\nexport const LocationSearcher = ({ toggleSuggestionPopup }: LocationSearcherProps) => {\n const { pathname: currentPath } = useRouter();\n const recentSearchLocations = useAppSelector(recentSearchLocationsSelector);\n\n const { config, pageRouteInfo, stdParameters } = useAppSelector(selectAppConfig);\n const { authId, locationBaseUrl, pageIdsToSupportLocationChanges2, pageIdsToSupportLocationChanges, secret } =\n config || {};\n const { userProfile } = useAppSelector(selectUserProfile);\n const {\n CityName: cityName,\n DisplayCompositeName: displayCompositeName,\n TerritoryName: territoryName\n } = userProfile?.ActiveLocation?.Locality || {};\n const cityNameTerritoryName =\n isValidString(cityName) && isValidString(territoryName) ? `${cityName}, ${territoryName}` : '';\n const cityTerritoryName = displayCompositeName || cityNameTerritoryName;\n\n const dispatch = useAppDispatch();\n const locationSuggestionIndex = useAppSelector((state) => state.locationSearch.locationSuggestionIndex);\n const locationSearchResults = useAppSelector((state) => state.locationSearch.locationSearchResults);\n const manageLocationDialog = useAppSelector(selectManageLocationModal);\n const { isLocationManagerPopupDisplayed } = manageLocationDialog || {};\n const isRecentSearchLocationListDisplayed =\n locationSearchResults?.length > 0 ? false : !!recentSearchLocations?.length;\n const { pageId } = pageRouteInfo || {};\n const shouldSupportActivelLocationChanges =\n pageId &&\n pageIdsToSupportLocationChanges?.includes(pageId) &&\n !pageIdsToSupportLocationChanges2?.includes(pageId as string);\n\n const [locationInputHasFocus, setLocationInputHasFocus] = useState(false);\n const [searchText, setSearchText] = useState('');\n const deferredSearchText = useDeferredValue(searchText);\n const inputRef = useRef();\n\n useEffect(() => {\n if (locationInputHasFocus) {\n if (\n (locationSearchResults?.length && deferredSearchText) ||\n (recentSearchLocations?.length && !deferredSearchText)\n ) {\n toggleSuggestionPopup(true);\n }\n }\n if (!locationInputHasFocus && !deferredSearchText && !isLocationManagerPopupDisplayed) {\n dispatch(clearLocationSearchSuggestions());\n if (isRecentSearchLocationListDisplayed) {\n setTimeout(() => {\n toggleSuggestionPopup(false);\n }, 150);\n } else {\n toggleSuggestionPopup(false);\n }\n }\n }, [\n locationInputHasFocus,\n locationSearchResults,\n deferredSearchText,\n toggleSuggestionPopup,\n recentSearchLocations,\n dispatch,\n isRecentSearchLocationListDisplayed,\n isLocationManagerPopupDisplayed\n ]);\n\n useEffect(() => {\n if (searchText === '') {\n dispatch(clearLocationSearchSuggestions());\n }\n }, [searchText, dispatch]);\n\n useEffect(() => {\n if (!locationInputHasFocus && deferredSearchText) {\n setTimeout(() => {\n setSearchText('');\n }, 150);\n }\n }, [locationInputHasFocus, deferredSearchText]);\n\n useEffect(() => {\n if (authId && locationBaseUrl && secret && stdParameters && deferredSearchText) {\n dispatch(\n searchLocationBySearchString({\n searchString: deferredSearchText,\n baseUrl: locationBaseUrl,\n authId,\n secret,\n stdParameters: stdParameters as unknown as Record,\n verbose: true,\n refresh: true,\n maxResults: 10\n })\n );\n }\n }, [authId, deferredSearchText, dispatch, locationBaseUrl, secret, stdParameters]);\n\n const onSearchInputChange = useCallback((e: ChangeEvent) => {\n const searchText = e.currentTarget.value;\n setSearchText(searchText);\n }, []);\n\n const onFocusChanged = (inputHasFocus: boolean) => {\n setLocationInputHasFocus(inputHasFocus);\n };\n\n const escapePressed = () => {\n setSearchText('');\n };\n\n const enterPressed = () => {\n const selectedLocation = locationSearchResults[locationSuggestionIndex];\n\n if (selectedLocation) {\n const locationRouteString = selectedLocation?.RouteString || selectedLocation?.SlugName;\n const url = getLocationUrl(currentPath, locationRouteString);\n\n dispatch(setRecentSearchLocation(selectedLocation as Locality));\n\n if (shouldSupportActivelLocationChanges && url) {\n router.push(url);\n } else {\n if (isValidString(selectedLocation.SlugName)) {\n dispatch(getUserProfile({ locationSlugName: selectedLocation.SlugName }));\n dispatch(clearLocationSearchSuggestions());\n }\n }\n setLocationInputHasFocus(false);\n inputRef.current?.blur();\n }\n };\n\n const upArrowPressed = (event: KeyboardEvent) => {\n if (searchText?.length > 1) {\n dispatch(setLocationSuggestionIndex(false));\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n const downArrowPressed = (event: KeyboardEvent) => {\n if (searchText?.length > 1) {\n dispatch(setLocationSuggestionIndex(true));\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n useKey([keyCodes.escape], escapePressed, {\n target: inputRef as RefObject,\n eventTypes: ['keydown']\n });\n useKey([keyCodes.enter], enterPressed, {\n target: inputRef as RefObject,\n eventTypes: ['keydown']\n });\n useKey([keyCodes.arrowUp], upArrowPressed, {\n target: inputRef as RefObject,\n eventTypes: ['keydown']\n });\n useKey([keyCodes.arrowDown], downArrowPressed, {\n target: inputRef as RefObject,\n eventTypes: ['keydown']\n });\n\n const placeholderText =\n locationInputHasFocus && cityTerritoryName ? translate('searchInputPlaceholder') : cityTerritoryName;\n\n return (\n \n \n }\n value={searchText || ''}\n onSearchInputChange={onSearchInputChange}\n onFocusChanged={onFocusChanged}\n placeholder={placeholderText}\n />\n \n \n \n \n \n );\n};\n\nconst LocationInputContainer = styled.div`\n display: flex;\n align-items: center;\n position: relative;\n\n ${({ theme }) => theme.mediaQueries.mobile} {\n width: 100%;\n }\n`;\n\nconst LocationSearcherInputContentWrapper = styled.div`\n display: flex;\n align-items: center;\n\n ${({ theme }) => theme.mediaQueries.mobile} {\n width: 100%;\n }\n`;\nconst SearchIconContainer = styled.div`\n margin-left: -22px;\n transform: rotate(270deg);\n cursor: pointer;\n display: flex;\n`;\n","/* eslint-disable prettier/prettier */\n/* eslint-disable operator-linebreak */\nimport { clearLocationSearchSuggestions, isValidString } from '@weatherbug/common-v2';\nimport Link from 'next/link';\nimport router, { useRouter } from 'next/router';\nimport { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Locality } from '../../../../../lib/services/locationDataService/types';\nimport { selectAppConfig } from '../../../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport { getUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userThunks';\nimport { useAppDispatch, useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport { setRecentSearchLocation } from '../../dataLayer/slices/locationSlice';\nimport { getLocationUrl } from '../../utilities';\n\nexport interface LocationSuggestionListItemProps {\n location: Locality;\n selected: boolean;\n}\n\nexport const LocationSuggestionListItem = ({ location, selected }: LocationSuggestionListItemProps) => {\n const [listItemIsSelected, setListItemIsSelected] = useState(false);\n const dispatch = useAppDispatch();\n const { pathname: currentPath } = useRouter();\n const { config, pageRouteInfo } = useAppSelector(selectAppConfig);\n const { pageIdsToSupportLocationChanges2, pageIdsToSupportLocationChanges } = config || {};\n const { pageId } = pageRouteInfo || {};\n const locationSearchResults = useAppSelector((state) => state.locationSearch.locationSearchResults);\n const locationSuggestionIndex = useAppSelector((state) => state.locationSearch.locationSuggestionIndex);\n\n const locationRouteString = location?.RouteString || location?.SlugName;\n const url = getLocationUrl(currentPath, locationRouteString);\n const shouldSupportActivelLocationChanges = !pageIdsToSupportLocationChanges?.includes(pageId as string) && !pageIdsToSupportLocationChanges2?.includes(pageId as string);\n\n useEffect(() => {\n if (locationSearchResults?.length) {\n const selectedListItem = locationSearchResults[locationSuggestionIndex];\n if (selectedListItem && locationSearchResults?.length && location?.CityId === selectedListItem?.CityId) {\n setListItemIsSelected(true);\n } else if (listItemIsSelected) {\n setListItemIsSelected(false);\n }\n }\n }, [locationSuggestionIndex, location?.CityId, locationSearchResults, listItemIsSelected]);\n\n const handleSuggestionsActiveLocationChange = async () => {\n dispatch(setRecentSearchLocation(location));\n if (shouldSupportActivelLocationChanges && url) {\n router.push(url);\n } else {\n if (isValidString(location.SlugName)) {\n dispatch(getUserProfile({ locationSlugName: location.SlugName }));\n dispatch(clearLocationSearchSuggestions());\n }\n }\n };\n\n return (\n \n \n {location?.DisplayCompositeName}\n \n \n );\n};\n\ninterface ListItemProps {\n selected: boolean;\n}\nconst ListItem = styled.li`\n display: flex;\n height: 54px;\n border-bottom: ${({ theme }) => `1px solid ${theme.colors.borderBottomColor}`};\n border-left: ${({ theme, selected }) =>\n selected ? `4px solid ${theme.colors.theAccent}` : `4px solid ${theme.colors.base}`};\n cursor: pointer;\n color: ${({ theme, selected }) =>\n selected ? `${theme.colors.theAccent}` : `${theme.colors.locationSearchTextColor}`};\n &:hover {\n background-color: ${({ theme }) => theme.colors.dividerLineWeaker};\n }\n`;\n\nconst LocationLink = styled(Link)`\n display: block;\n padding: 16px;\n height: 100%;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: inherit;\n text-decoration: none;\n`;\n","/* eslint-disable prettier/prettier */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport styled from 'styled-components';\nimport { selectUserProfile } from '../../../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppSelector } from '../../../../../store/redux/storeHooks/hooks';\nimport { recentSearchLocationsSelector } from '../../dataLayer/slices/locationSlice';\nimport { LocationSuggestionListItem } from './locationSuggestionListItem';\n\nexport const LocationSuggestionList = () => {\n const { userProfile } = useAppSelector(selectUserProfile);\n const recentSearchLocations = useAppSelector(recentSearchLocationsSelector);\n const { CityId } = userProfile?.ActiveLocation?.Locality || {};\n\n const locationSearchResults = useAppSelector((state) => state.locationSearch.locationSearchResults);\n const recentSearchLocationsLength = recentSearchLocations?.length | 0;\n const hasResults = locationSearchResults?.length > 0 || recentSearchLocationsLength > 0;\n const suggestionLocations = locationSearchResults?.length > 0 ? locationSearchResults : recentSearchLocations;\n\n return (\n \n {suggestionLocations?.map((location) => {\n return (\n \n );\n })}\n \n );\n};\n\ninterface ContainerProps {\n hasResults: boolean;\n}\nconst Container = styled.ul`\n position: absolute;\n top: 38px;\n left: 0;\n right: 0;\n color: ${({ theme }) => theme.colors.listItemLinkGray};\n background-color: ${({ theme }) => theme.colors.base};\n list-style: none;\n font-weight: 400;\n font-size: 16px;\n z-index: 100;\n padding: 0;\n border-top: ${({ theme, hasResults }) => hasResults ? `1px solid ${theme.colors.borderBottomColor}` : ''};\n`;\n","/* eslint-disable no-extra-parens */\n/* eslint-disable prettier/prettier */\nimport React from 'react';\nimport { useOutsideClickRef } from 'rooks';\nimport styled from 'styled-components';\n\nimport { selectUserProfile } from '../../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppSelector } from '../../../../store/redux/storeHooks/hooks';\nimport { ArrowIcon } from '../../../elements/icons/arrow/arrowIcon';\nimport { ArrowDirections } from '../../../elements/icons/iconConstants';\nimport { FavoriteLocationButton } from './favoriteLocationButton/favoriteLocationButton';\nimport { FavoriteLocationsDropdown } from './favoriteLocationsDropdown/favoriteLocationsDropdown';\nimport { LocationAlert } from './locationAlert/locationAlert';\nimport { LocationSearcher } from './locationSearcher/locationSearcher';\nimport { LocationSuggestionList } from './locationSuggestionList/locationSuggestionList';\n\nexport interface LocationSelectorViewParams {\n toggleLocationSuggestionPopup: (value: boolean) => void;\n toggleFavoriteLocationsDropdown: () => void;\n showFavoriteLocationsDropdown: boolean;\n latitude: number;\n longitude: number;\n activeLocationId: string;\n setShowFavoriteLocationsDropdown: React.Dispatch>;\n showLocationSuggestionPopup: boolean;\n}\n\nconst defaultAlertsRoute = 'https://www.weatherbug.com/alerts/';\n\nexport const LocationSelectorView = ({\n toggleLocationSuggestionPopup,\n toggleFavoriteLocationsDropdown,\n showFavoriteLocationsDropdown,\n latitude,\n longitude,\n activeLocationId,\n setShowFavoriteLocationsDropdown,\n showLocationSuggestionPopup\n}: LocationSelectorViewParams) => {\n const { userProfile } = useAppSelector(selectUserProfile);\n const { SlugName } = userProfile?.ActiveLocation?.Locality || {};\n\n const [containerRef] = useOutsideClickRef(() => setShowFavoriteLocationsDropdown(false));\n const locationAlertRoute = SlugName ? `${defaultAlertsRoute}${SlugName}` : defaultAlertsRoute;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {showFavoriteLocationsDropdown && (\n setShowFavoriteLocationsDropdown(false)} />\n )}\n {showLocationSuggestionPopup && }\n \n );\n};\n\nconst Container = styled.div`\n display: flex;\n height: 54px;\n align-items: center;\n position: relative;\n border-left: 1px solid ${({ theme }) => theme.colors.listItemBorderGray};\n color: ${({ theme }) => theme.colors.listItemLinkGray};\n ${({ theme }) => theme.mediaQueries.mobile} {\n display: grid;\n grid-template-columns: 23px 1fr 23px 33px;\n justify-content: center;\n width: 100%;\n max-width: 100%;\n border-left: none;\n gap: 0.2rem;\n }\n`;\n\nconst ArrowContainer = styled.div`\n display: flex;\n padding-left: 16px;\n padding-right: 16px;\n cursor: pointer;\n height: 56px;\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n &:hover {\n background-color: ${({ theme }) => theme.colors.hoverBackgroundColor};\n }\n ${({ theme }) => theme.mediaQueries.mobile} {\n width: 100%;\n padding: 0;\n margin-left: 0;\n }\n`;\n\nconst AlertContainer = styled.div`\n display: flex;\n height: 54px;\n border-left: 1px solid ${({ theme }) => theme.colors.listItemBorderGray};\n align-items: center;\n ${({ theme }) => theme.mediaQueries.mobile} {\n border-left: none;\n width: 100%;\n }\n`;\n\nconst LocationAlertLink = styled.a`\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n &:hover {\n background-color: ${({ theme }) => theme.colors.hoverBackgroundColor};\n }\n`;\n","/* eslint-disable operator-linebreak */\n/* eslint-disable prettier/prettier */\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { getNotificationsStatus } from '@weatherbug/common-v2';\nimport { isValidNumber, isValidString } from '../../../../lib/utils/guardUtils/guardUtils';\nimport { selectAppConfig } from '../../../../store/redux/common/dataLayer/appConfig/slices/appConfigSlice';\nimport { selectUserProfile } from '../../../../store/redux/common/dataLayer/user/slices/userSlice';\nimport { useAppDispatch, useAppSelector } from '../../../../store/redux/storeHooks/hooks';\nimport { LocationSelectorView } from './locationSelectorView';\n\nconst LocationSelector = () => {\n const dispatch = useAppDispatch();\n const { config, stdParameters } = useAppSelector(selectAppConfig);\n const { authId, notificationsBaseUrl: baseUrl, secret } = config || {};\n const { userProfile } = useAppSelector(selectUserProfile);\n const { ActiveLocation } = userProfile || {};\n const activeLocationId = ActiveLocation?.Id;\n const { Latitude, Longitude } = ActiveLocation?.Locality || {};\n\n const [showFavoriteLocationsDropdown, setShowFavoriteLocationsDropdown] = useState(false);\n const [showLocationSuggestionPopup, setShowLocationSuggestionPopup] = useState(false);\n\n useEffect(() => {\n if (\n isValidString(baseUrl) &&\n isValidString(authId) &&\n isValidString(secret) &&\n isValidString(secret) &&\n isValidNumber(Latitude) &&\n isValidNumber(Longitude)\n ) {\n dispatch(\n getNotificationsStatus({\n baseUrl: baseUrl as string,\n authId: authId as string,\n secret: secret as string,\n latitude: Latitude as number,\n longitude: Longitude as number,\n stdParameters: stdParameters as unknown as Record,\n verbose: false,\n refresh: true,\n emLocationId: activeLocationId as string\n })\n );\n }\n }, [Latitude, Longitude, activeLocationId, authId, baseUrl, dispatch, secret, stdParameters]);\n\n const toggleLocationSuggestionPopup = useCallback(\n (open: boolean) => {\n const newValue = !!open;\n if (newValue !== showLocationSuggestionPopup) {\n if (showFavoriteLocationsDropdown) {\n setShowFavoriteLocationsDropdown(false);\n }\n setShowLocationSuggestionPopup(newValue);\n }\n },\n [showLocationSuggestionPopup, showFavoriteLocationsDropdown]\n );\n\n const toggleFavoriteLocationsDropdown = useCallback(() => {\n if (showLocationSuggestionPopup) {\n setShowFavoriteLocationsDropdown(false);\n }\n setShowFavoriteLocationsDropdown(!showFavoriteLocationsDropdown);\n }, [showLocationSuggestionPopup, showFavoriteLocationsDropdown]);\n\n return (\n \n );\n};\n\nexport default LocationSelector;\n","import styled from 'styled-components';\nimport NavbarLogo from '../../elements/navbarLogo/navbarLogo';\nimport LocationSelector from '../location/locationSelector/locationSelector';\nimport NavPrimaryList from '../navPrimaryList/navPrimaryList';\n\nexport const PrimaryNavbar = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst Container = styled.header`\n display: flex;\n width: 100%;\n height: 54px;\n background-color: ${({ theme }) => theme.colors.base};\n font-family: ${({ theme }) => theme.typography.fontFamilies.secondary}, sans-serif;\n padding-left: 25px;\n justify-content: space-between;\n align-items: center;\n\n ${({ theme }) => theme.mediaQueries.mobile} {\n margin: auto;\n max-width: 100%;\n padding-left: 3%;\n padding-right: 3%;\n position: relative;\n }\n\n ${({ theme }) => theme.mediaQueries.large} {\n justify-content: center;\n padding-left: 0px;\n }\n`;\n\nconst NavContainer = styled.nav`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 38px;\n ${({ theme }) => theme.mediaQueries.mobile} {\n gap: 0;\n }\n`;\n\nconst NavContentWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n ${({ theme }) => theme.mediaQueries.large} {\n max-width: calc(1218px + 8%);\n padding-left: 4%;\n padding-right: 4%;\n }\n ${({ theme }) => theme.mediaQueries.mobile} {\n gap: 0.7rem;\n }\n`;\n","import styled from 'styled-components';\nimport NavLinkItem from '../../elements/navLinkItem/navLinkItem';\nimport { NavNonLinkItem } from '../../elements/navNonLinkItem/navNonLinkItem';\nimport SettingsContainer from '../../elements/settings/settingsContainer';\nimport { utilityNavRoutes } from '../../utilities/routes/navRoutes';\nimport { translate } from '../../utilities/translate';\nimport { SignInOutWrapper } from '../auth/signInOutWrapper/signInOutWrapper';\n\nconst NavUtilityList = () => {\n return (\n \n \n \n \n {utilityNavRoutes.map(({ path, labelTranslationKey }) => {\n return (\n \n );\n })}\n \n \n );\n};\n\nconst StyledUtilityList = styled.ul`\n display: flex;\n color: ${({ theme }) => theme.colors.base};\n height: 30px;\n flex: 1 1 0%;\n justify-content: flex-end;\n align-items: center;\n margin: 0px 9px 0px 0px;\n list-style: none;\n\n li:not(:last-child) {\n &:after {\n content: '';\n display: flex;\n margin: 3.5px 8px 2px;\n width: 3px;\n height: 3px;\n background-color: ${({ theme }) => theme.colors.base};\n border-radius: 50%;\n opacity: 0.5;\n align-items: center;\n }\n }\n\n ${({ theme }) => theme.mediaQueries.mobile} {\n display: none;\n }\n`;\n\nexport default NavUtilityList;\n","import styled from 'styled-components';\nimport NavLinkItem from '../../elements/navLinkItem/navLinkItem';\nimport { GroundTruthRoute, WeatherBugForAdvertisers } from '../../utilities/routes/navRoutes';\nimport NavUtilityList from '../navUtilityList/navUtilityList';\n\nexport const UtilityNavbar = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nconst Container = styled.nav`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 7px 0px 6px 0px;\n background-color: ${({ theme }) => theme.colors.brandBg};\n\n ${({ theme }) => theme.mediaQueries.mobile} {\n display: none;\n }\n\n ${({ theme }) => theme.mediaQueries.large} {\n justify-content: center;\n }\n`;\n\nconst UtilityNavContentWrapper = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n ${({ theme }) => theme.mediaQueries.large} {\n max-width: calc(1218px + 8%);\n padding-left: 4%;\n padding-right: 4%;\n }\n`;\n","import { PrimaryNavbar } from '../../modules/primaryNavbar/primaryNavbar';\nimport { UtilityNavbar } from '../../modules/utilityNavbar/utilityNavbar';\n\nexport default function Navbar() {\n return (\n <>\n \n \n \n );\n}\n","import type { ReactNode } from 'react';\nimport { NotificationsFooter } from '../modules/notificationsFooter/notificationsFooter';\nimport { SmartAppBannerLazyLoad } from '../modules/smartAppBanner/smartAppBannerLazyLoad';\nimport Footer from './footer/footer';\nimport Navbar from './navbar/navbar';\n\ninterface LayoutType {\n children: ReactNode;\n}\n\nexport default function Layout({ children }: LayoutType) {\n return (\n <>\n \n \n
{children}
\n \n