{"version":3,"file":"assets/js/chunks/1562.bd827ad5b72945b1f016.js","mappings":"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","sources":["webpack://web-pwa/./src/utils/keyboard.constants.js","webpack://web-pwa/./src/domain/suggest/SuggestContent.less?14aa","webpack://web-pwa/./src/domain/suggest/SuggestFavoritesContent.jsx","webpack://web-pwa/./src/domain/suggest/SuggestSearchHistoryContent.jsx","webpack://web-pwa/./src/domain/suggest/SuggestServiceContent.jsx","webpack://web-pwa/./src/domain/suggest/SuggestClearHistory.jsx","webpack://web-pwa/./src/domain/suggest/SuggestClearHistory.less?7aaa","webpack://web-pwa/./src/domain/suggest/SuggestContentError.jsx","webpack://web-pwa/./src/domain/suggest/SuggestContentError.less?3f67","webpack://web-pwa/./src/domain/suggest/SuggestContent.jsx","webpack://web-pwa/./src/domain/utils/DelayComponent.jsx","webpack://web-pwa/./src/store/location/location.actions.js","webpack://web-pwa/./src/domain/seo/Breadcrumbs.less?9b17","webpack://web-pwa/./src/domain/seo/BreadcrumbItem.jsx","webpack://web-pwa/./src/domain/seo/BreadcrumbItem.less?85e6","webpack://web-pwa/./src/domain/seo/Breadcrumbs.jsx","webpack://web-pwa/./src/domain/autopromo/FooterAppAutoPromoPE.less?4307","webpack://web-pwa/./src/domain/autopromo/FooterAppAutoPromoPE.jsx","webpack://web-pwa/./src/domain/footer/FooterCocorico.jsx","webpack://web-pwa/./src/domain/footer/FooterCocorico.less?90a0","webpack://web-pwa/./src/domain/footer/footerInfos/FooterContact.jsx","webpack://web-pwa/./src/domain/footer/footerInfos/FooterContact.less?de87","webpack://web-pwa/./src/domain/footer/footerInfos/FooterInfos.less?5cd6","webpack://web-pwa/./src/domain/footer/footerInfos/SocialNetworkButtons.less?4486","webpack://web-pwa/./src/domain/footer/footerInfos/SocialNetworkButtons.jsx","webpack://web-pwa/./src/domain/footer/footerInfos/FooterInfos.jsx","webpack://web-pwa/./src/domain/footer/footerInfos/FooterPrivacy.less?4c0f","webpack://web-pwa/./src/domain/footer/footerInfos/FooterPrivacy.jsx","webpack://web-pwa/./src/domain/seo/footer/TopSearchLinks.less?fedd","webpack://web-pwa/./src/domain/seo/footer/TopSearchLinks.jsx","webpack://web-pwa/./src/domain/footer/FooterTopSearch.jsx","webpack://web-pwa/./src/domain/footer/FooterTopSearch.less?137b","webpack://web-pwa/./src/domain/footer/Footer.jsx","webpack://web-pwa/./src/domain/footer/Footer.less?debd","webpack://web-pwa/./src/domain/autopromo/AutoPromoPopinGE.less?cba7","webpack://web-pwa/./src/domain/autopromo/AutoPromoPopinGE.jsx","webpack://web-pwa/./src/domain/autopromo/AutoPromoOpenButton.jsx","webpack://web-pwa/./src/domain/utils/useDebounce.js","webpack://web-pwa/./src/domain/genericComponents/Anchor.jsx","webpack://web-pwa/./src/domain/genericComponents/Anchor.less?5ad8","webpack://web-pwa/./src/domain/menu/MenuSubCategoriesPE.less?f85a","webpack://web-pwa/./src/domain/menu/MenuSubCategoriesPE.jsx","webpack://web-pwa/./src/domain/menu/MenuCategoriesPE.jsx","webpack://web-pwa/./src/domain/menu/MenuCategoriesPE.less?691d","webpack://web-pwa/./src/domain/genericComponents/StatusMessage.jsx","webpack://web-pwa/./src/domain/genericComponents/StatusMessage.less?81a6","webpack://web-pwa/./src/domain/UserAccount/shared/CloseUserAreaButton.jsx","webpack://web-pwa/./src/domain/UserAccount/shared/CloseUserAreaButton.less?8716","webpack://web-pwa/./src/domain/genericComponents/LogoMappyImg.jsx","webpack://web-pwa/./src/domain/genericComponents/LogoMappyImg.less?56bd","webpack://web-pwa/./src/domain/UserAccount/anonymous/UserAreaAnonymous.jsx","webpack://web-pwa/./src/domain/UserAccount/anonymous/UserAreaAnonymous.less?42c3","webpack://web-pwa/./src/domain/UserAccount/shared/UserScreenContent.jsx","webpack://web-pwa/./src/domain/UserAccount/shared/UserScreenContent.less?8e7b","webpack://web-pwa/./src/domain/UserAccount/shared/UserScreenHeader.jsx","webpack://web-pwa/./src/domain/UserAccount/shared/UserScreenHeader.less?4524","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserFavoriteItem.less?0c42","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserFavoriteItem.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserFavorites.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/FavoriteInput.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/FavoriteInput.less?ef31","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserManageFavorite.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userItineraryOptions/UserItineraryOptions.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userItineraryOptions/UserItineraryOptions.less?1ae9","webpack://web-pwa/./src/domain/UserAccount/connected/userMenu/UserLogout.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userMenu/UserMenu.less?c846","webpack://web-pwa/./src/domain/UserAccount/connected/userMenu/UserMenu.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/UserAreaConnected.jsx","webpack://web-pwa/./src/domain/UserAccount/UserAreaPlaceHolder.jsx","webpack://web-pwa/./src/domain/UserAccount/UserArea.jsx","webpack://web-pwa/./src/domain/UserAccount/UserArea.less?9351","webpack://web-pwa/./src/domain/UserAccount/connectionIncentive/UserAccountIncentiveCarrousel.less?dca6","webpack://web-pwa/./src/domain/UserAccount/connectionIncentive/UserAccountIncentiveCarrousel.jsx","webpack://web-pwa/./src/domain/UserAccount/connectionIncentive/UserAccountIncentivePopin.less?94aa","webpack://web-pwa/./src/domain/UserAccount/connectionIncentive/UserAccountIncentivePopin.jsx","webpack://web-pwa/./src/domain/advertising/UtiqLoader.jsx","webpack://web-pwa/./src/domain/cmp/CMPPlaceholder.jsx","webpack://web-pwa/./src/domain/cms/AlertBanner.less?d926","webpack://web-pwa/./src/domain/cms/AlertBanner.jsx","webpack://web-pwa/./src/domain/cms/cms.client.requests.js","webpack://web-pwa/./src/domain/menu/MenuCategoriesGE.less?8d71","webpack://web-pwa/./src/domain/advertising/AdMenu.jsx","webpack://web-pwa/./src/domain/advertising/AdMenu.less?280f","webpack://web-pwa/./src/domain/menu/MenuSubCategoriesGE.jsx","webpack://web-pwa/./src/domain/menu/MenuSubCategoriesGE.less?e55b","webpack://web-pwa/./src/domain/menu/MenuCategoriesGE.jsx","webpack://web-pwa/./src/domain/outdoor/Outdoor.jsx","webpack://web-pwa/./src/domain/outdoor/Outdoor.less?c1d0","webpack://web-pwa/./src/domain/genericComponents/Page.jsx","webpack://web-pwa/./src/domain/ui/useModal.js","webpack://web-pwa/./src/domain/menu/usePublisherBarreCategorieTag.js","webpack://web-pwa/./src/domain/genericComponents/ClosePopinButton.jsx","webpack://web-pwa/./src/domain/genericComponents/ClosePopinButton.less?e368","webpack://web-pwa/./src/domain/suggest/SuggestItem.less?6cfe","webpack://web-pwa/./src/domain/suggest/SuggestItem.jsx","webpack://web-pwa/./src/domain/suggest/SuggestContentList.jsx","webpack://web-pwa/./src/domain/suggest/SuggestContentList.less?e46d","webpack://web-pwa/./src/domain/menu/MenuCategoryItem.jsx","webpack://web-pwa/./src/domain/menu/MenuCategoryItem.less?6f21","webpack://web-pwa/./src/domain/itinerary/ModeItem.jsx","webpack://web-pwa/./src/domain/itinerary/ModeItem.less?47d7","webpack://web-pwa/./src/domain/main/Main.jsx","webpack://web-pwa/./src/domain/main/Main.less?6328","webpack://web-pwa/./src/domain/ui/useMainScroll.js","webpack://web-pwa/./src/domain/suggest/SuggestError.js","webpack://web-pwa/./src/store/suggest/suggest.dataParser.js","webpack://web-pwa/./src/store/suggest/suggest.actions.js","webpack://web-pwa/./src/dataSource/suggest/suggest.requests.js","webpack://web-pwa/./src/domain/advertising/AdLoader.jsx","webpack://web-pwa/./src/domain/advertising/AdLoader.less?2534","webpack://web-pwa/./src/domain/genericComponents/NumericInput.jsx","webpack://web-pwa/./src/domain/header/BackButton.less?7ee0","webpack://web-pwa/./src/domain/header/BackButton.jsx","webpack://web-pwa/./src/domain/genericComponents/ImageGallery.jsx","webpack://web-pwa/./src/store/search/searchHistory/searchHistory.selectors.js","webpack://web-pwa/./src/store/suggest/suggest.selectors.js","webpack://web-pwa/./src/domain/menu/MenuSubCategoryItem.jsx","webpack://web-pwa/./src/store/suggest/suggest.service.constants.js","webpack://web-pwa/./src/domain/i18n/i18nSite.jsx","webpack://web-pwa/./src/domain/seo/footer/seo-footer.selectors.js","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserManageFavorite.less?ffd6","webpack://web-pwa/./src/domain/UserAccount/UserLoginButton.jsx","webpack://web-pwa/./src/store/itineraryOptions/itineraryOptions.actions.js","webpack://web-pwa/./src/store/itineraryOptions/itineraryOptions.dataParsers.js","webpack://web-pwa/./src/domain/genericComponents/Modal.jsx","webpack://web-pwa/./src/domain/genericComponents/Modal.less?a1f9","webpack://web-pwa/./src/domain/loading/Throbber.less?bc51","webpack://web-pwa/./src/domain/loading/Throbber.jsx","webpack://web-pwa/./src/domain/menu/CategorySubMenuStyle.jsx","webpack://web-pwa/./src/domain/utils/useTimeout.js","webpack://web-pwa/./src/domain/genericComponents/ResponsiveScrollableWrapper/ResponsiveScrollableWrapper.jsx","webpack://web-pwa/./src/domain/genericComponents/ResponsiveScrollableWrapper/ResponsiveScrollableWrapper.less?c3b9","webpack://web-pwa/./src/domain/UserAccount/UserButton.jsx","webpack://web-pwa/./src/domain/UserAccount/UserButton.less?32ba","webpack://web-pwa/./src/domain/header/ItineraryUniverseButton.jsx","webpack://web-pwa/./src/domain/header/ItineraryUniverseButton.less?0bcb","webpack://web-pwa/./src/domain/header/DesktopPreHeader.jsx","webpack://web-pwa/./src/domain/header/DesktopPreHeader.less?d786","webpack://web-pwa/./src/domain/header/SubHeader.jsx","webpack://web-pwa/./src/domain/header/SubHeader.less?40b2","webpack://web-pwa/./src/domain/header/Header.jsx","webpack://web-pwa/./src/domain/genericComponents/Details.less?3bbd","webpack://web-pwa/./src/domain/genericComponents/Details.jsx","webpack://web-pwa/./src/domain/menu/MenuSubCategoryItem.less?8f0c","webpack://web-pwa/./src/domain/menu/MenuApplicationItem.jsx","webpack://web-pwa/./src/domain/ui/ImageWithFallback.jsx","webpack://web-pwa/./src/domain/ui/ImageWithFallback.less?df04","webpack://web-pwa/./src/domain/map/markers/ImageMarker.jsx","webpack://web-pwa/./src/domain/UserAccount/UserPicture.jsx","webpack://web-pwa/./src/domain/UserAccount/UserPicture.less?5213","webpack://web-pwa/./src/routes/routeService.js","webpack://web-pwa/./src/domain/itinerary/ModeSelector.less?4832","webpack://web-pwa/./src/domain/utils/SwitchInput.jsx","webpack://web-pwa/./src/domain/utils/useEffectExceptMount.js","webpack://web-pwa/./src/domain/utils/SwitchInput.less?d8a4","webpack://web-pwa/./src/domain/suggest/useIncentiveClick.js","webpack://web-pwa/./src/domain/genericComponents/useTemporaryVisible.js","webpack://web-pwa/./src/domain/UserAccount/shared/withKeycloak.jsx","webpack://web-pwa/./src/domain/header/Header.less?4029","webpack://web-pwa/./src/domain/analytics/useImpressionTag.jsx","webpack://web-pwa/./src/domain/genericComponents/MapEventPopin.jsx","webpack://web-pwa/./src/domain/genericComponents/MapEventPopin.less?d4f0","webpack://web-pwa/./src/domain/outdoor/UPI.jsx","webpack://web-pwa/./src/domain/outdoor/UPI.less?8f7e","webpack://web-pwa/./src/domain/map/Geolocation.js","webpack://web-pwa/./src/domain/error/MapLoadingError.js","webpack://web-pwa/./src/domain/map/maplibre.fixes.js","webpack://web-pwa/./src/domain/map/tools/useMapBoundsInteraction.js","webpack://web-pwa/./src/domain/map/MapProvider.jsx","webpack://web-pwa/./src/domain/map/DynamicMap.less?a5fe","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItem.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenu.less?a138","webpack://web-pwa/./src/domain/map/contextmenu/contextmenu.utils.js","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemItineraryAddStep.jsx","webpack://web-pwa/./src/domain/map/contextmenu/contextmenu.constants.js","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemItineraryFrom.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemItineraryTo.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemShowAddress.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemShowCity.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemShowDepartment.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenuItemShowRegion.jsx","webpack://web-pwa/./src/domain/map/contextmenu/ContextMenu.jsx","webpack://web-pwa/./src/domain/map/debug/FPS.jsx","webpack://web-pwa/./src/domain/map/debug/FPS.less?bf25","webpack://web-pwa/./src/domain/map/debug/BboxDebugger.jsx","webpack://web-pwa/./src/domain/map/debug/ZoomDebugger.jsx","webpack://web-pwa/./src/domain/map/tools/ZoomButtons.less?5296","webpack://web-pwa/./src/domain/map/debug/MapDebugger.jsx","webpack://web-pwa/./src/domain/map/markers/AddressMarker.jsx","webpack://web-pwa/./src/domain/map/markers/AddressMarker.less?6e27","webpack://web-pwa/./src/domain/map/markers/AddressMarkersContainer.jsx","webpack://web-pwa/./src/domain/map/markers/GeolocMarker.jsx","webpack://web-pwa/./src/domain/utils/useCompass.js","webpack://web-pwa/./src/domain/map/markers/GeolocMarker.less?c358","webpack://web-pwa/./src/domain/map/popup/Popup.jsx","webpack://web-pwa/./src/domain/map/popup/Popup.less?62d0","webpack://web-pwa/./src/domain/map/raster/useLayersManager.js","webpack://web-pwa/./src/domain/map/raster/useIntegerZoom.js","webpack://web-pwa/./src/domain/map/useMapZoomHandler.js","webpack://web-pwa/./src/domain/map/useMapPerfMetrics.js","webpack://web-pwa/./src/domain/map/useMapMoveHandler.js","webpack://web-pwa/./src/domain/map/useMapPaddingHandler.js","webpack://web-pwa/./src/domain/map/tools/useTooltip.js","webpack://web-pwa/./src/domain/map/vector/HdTooltip.jsx","webpack://web-pwa/./src/domain/map/vector/HdTooltip.less?571b","webpack://web-pwa/./src/domain/map/common/LayerButtons.less?fa65","webpack://web-pwa/./src/domain/map/common/LayerButton.jsx","webpack://web-pwa/./src/domain/map/common/LayersButtons.less?447d","webpack://web-pwa/./src/domain/map/common/LayersButtonsConfig.js","webpack://web-pwa/./src/domain/map/common/useDynamicButtons.js","webpack://web-pwa/./src/domain/map/common/LayersButtons.jsx","webpack://web-pwa/./src/domain/map/raster/RasterMap.jsx","webpack://web-pwa/./src/domain/map/shape/MapAddressContour.jsx","webpack://web-pwa/./src/domain/map/tools/Copyrights.less?482c","webpack://web-pwa/./src/domain/map/tools/Copyrights.jsx","webpack://web-pwa/./src/domain/map/tools/GeolocButton.less?c64a","webpack://web-pwa/./src/domain/map/tools/GeolocButton.jsx","webpack://web-pwa/./src/domain/map/tools/Logo.jsx","webpack://web-pwa/./src/domain/map/tools/Logo.less?2072","webpack://web-pwa/./src/domain/map/tools/OutdoorButton.jsx","webpack://web-pwa/./src/domain/map/tools/OutdoorButton.less?90b1","webpack://web-pwa/./src/domain/map/tools/Scale.js","webpack://web-pwa/./src/domain/map/tools/ToggleFullScreenGeButton.jsx","webpack://web-pwa/./src/domain/map/tools/ToggleFullScreenGeButton.less?d973","webpack://web-pwa/./src/domain/map/tools/ToggleFullscreenPeButton.jsx","webpack://web-pwa/./src/domain/map/tools/ToggleFullscreenPeButton.less?e669","webpack://web-pwa/./src/domain/map/tools/TrafficLegend.jsx","webpack://web-pwa/./src/domain/map/tools/TrafficLegend.less?dcda","webpack://web-pwa/./src/domain/map/tools/ZoomButtons.jsx","webpack://web-pwa/./src/domain/map/vector/MapTooSlowTooltip.jsx","webpack://web-pwa/./src/domain/map/vector/MapTooSlowTooltip.less?a8d9","webpack://web-pwa/./src/domain/map/vector/VectorMap.jsx","webpack://web-pwa/./src/domain/map/vector/useClickMyMapLayers.js","webpack://web-pwa/./src/domain/map/useMapPointerHandler.js","webpack://web-pwa/./src/domain/map/vector/useClickMapEventsHandler.js","webpack://web-pwa/./src/domain/map/DynamicMap.jsx","webpack://web-pwa/./src/domain/map/StaticMap.jsx","webpack://web-pwa/./src/domain/genericComponents/AskForUpdate.jsx","webpack://web-pwa/./src/domain/genericComponents/AskForUpdate.less?ef67","webpack://web-pwa/./src/domain/map/Map.jsx","webpack://web-pwa/./src/domain/itineraryOptions/VehicleSettingsBox.less?f893","webpack://web-pwa/./src/domain/itineraryOptions/CritairChoice.jsx","webpack://web-pwa/./src/domain/itineraryOptions/CritairChoice.less?cfb3","webpack://web-pwa/./src/domain/itineraryOptions/CritairSelect.jsx","webpack://web-pwa/./src/domain/itineraryOptions/VehicleSettingsBox.jsx","webpack://web-pwa/./src/domain/map/markers/Marker.jsx","webpack://web-pwa/./src/domain/map/markers/Marker.less?619e","webpack://web-pwa/./src/domain/map/MapContext.jsx","webpack://web-pwa/./src/domain/UserAccount/connected/userFavorites/UserFavoriteError.jsx","webpack://web-pwa/./src/domain/UserAccount/connectionIncentive/incentive.constants.js","webpack://web-pwa/./src/domain/utils/useToggle.js","webpack://web-pwa/./src/domain/UserAccount/useKeycloak.js","webpack://web-pwa/./src/domain/utils/color.js","webpack://web-pwa/./src/domain/utils/css.js","webpack://web-pwa/./src/domain/itineraryOptions/FavouriteModeBox.jsx","webpack://web-pwa/./src/domain/itineraryOptions/ItineraryOptions.less?309c","webpack://web-pwa/./src/domain/itineraryOptions/ModeSpeedSettingsBox.jsx","webpack://web-pwa/./src/domain/itineraryOptions/ModeSpeedSettingsBox.less?7c54","webpack://web-pwa/./src/domain/itineraryOptions/ItineraryOptions.jsx","webpack://web-pwa/./src/domain/itineraryOptions/VehicleOwnedSwitcher.jsx","webpack://web-pwa/./src/domain/itineraryOptions/VehicleOwnedSwitcher.less?e109","webpack://web-pwa/./src/domain/ui/useHeaderHeight.js"],"sourcesContent":["export const KEYS = {\n  DOWN: 'ArrowDown',\n  UP: 'ArrowUp',\n  ENTER: 'Enter',\n  TAB: 'Tab',\n  SHIFT: 'Shift'\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"SuggestContent\":\"EZNio\",\"SuggestTitle\":\"QoZV9\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsUserAccountEnabled, selectIsUserConnected } from '../../store/userAccount/userAccount.selectors'\nimport SuggestContentList from './SuggestContentList'\nimport T from '../i18n/T'\nimport { selectIsSuggestInputValueEmpty } from '../../store/suggest/suggest.selectors'\nimport s from './SuggestContent.less'\nimport { isEmpty } from '../../utils/lang'\n\nconst SuggestFavoritesContent = ({ suggestionsFavorites, idxStartAt, selectedId, updateSelectedId, onClick }) => {\n  const isInputValueEmpty = useSelector(selectIsSuggestInputValueEmpty)\n  const isConnected = useSelector(selectIsUserConnected)\n  const isUserAccountAvailable = useSelector(selectIsUserAccountEnabled)\n  const hasFavoriteSuggests = !isConnected ? isUserAccountAvailable : !isEmpty(suggestionsFavorites)\n\n  if (!isUserAccountAvailable) return <></>\n\n  return (\n    <>\n      {hasFavoriteSuggests && isInputValueEmpty && (\n        <div className={s.SuggestTitle}>\n          <span>\n            <T id={'suggest.favorites.my-favorites'} />\n          </span>\n        </div>\n      )}\n\n      <SuggestContentList\n        suggestions={suggestionsFavorites}\n        idxStartAt={idxStartAt}\n        onClick={onClick}\n        selectedId={selectedId}\n        updateSelectedId={updateSelectedId}\n      />\n    </>\n  )\n}\n\nexport default SuggestFavoritesContent\n","import React from 'react'\nimport T from '../i18n/T'\nimport { selectIsSuggestInputValueEmpty } from '../../store/suggest/suggest.selectors'\nimport { useSelector } from 'react-redux'\nimport SuggestContentList from './SuggestContentList'\nimport s from './SuggestContent.less'\nimport { isEmpty } from '../../utils/lang'\n\nconst SuggestSearchHistoryContent = ({\n  suggestionsSearchHistory,\n  idxStartAt,\n  selectedId,\n  updateSelectedId,\n  onClick\n}) => {\n  const isInputValueEmpty = useSelector(selectIsSuggestInputValueEmpty)\n  const hasSearchHistorySuggests = !isEmpty(suggestionsSearchHistory)\n\n  return (\n    <>\n      {hasSearchHistorySuggests && isInputValueEmpty && (\n        <div className={s.SuggestTitle}>\n          <span>\n            <T id={'suggest.history.last-searches'} />\n          </span>\n        </div>\n      )}\n\n      <SuggestContentList\n        suggestions={suggestionsSearchHistory}\n        idxStartAt={idxStartAt}\n        onClick={onClick}\n        selectedId={selectedId}\n        updateSelectedId={updateSelectedId}\n      />\n    </>\n  )\n}\nexport default SuggestSearchHistoryContent\n","import React from 'react'\nimport SuggestContentList from './SuggestContentList'\nimport { isEmpty } from '../../utils/lang'\n\nconst SuggestServiceContent = ({ suggestionsService, idxStartAt, selectedId, updateSelectedId, onClick }) => {\n  if (isEmpty(suggestionsService)) return <></>\n  return (\n    <SuggestContentList\n      suggestions={suggestionsService}\n      idxStartAt={idxStartAt}\n      onClick={onClick}\n      selectedId={selectedId}\n      updateSelectedId={updateSelectedId}\n    />\n  )\n}\nexport default SuggestServiceContent\n","import React from 'react'\nimport T from '../i18n/T'\nimport { resetSearchHistory } from '../../store/search/searchSlice'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './SuggestClearHistory.less'\nimport { isEmpty } from '../../utils/lang'\nimport { useDispatch } from 'react-redux'\n\nconst SuggestClearHistory = ({ suggestionsSearchHistory }) => {\n  const dispatch = useDispatch()\n  const hasSearchHistorySuggests = !isEmpty(suggestionsSearchHistory)\n\n  const onSuggestCleanHistory = useEventCallback(() => {\n    dispatch(resetSearchHistory())\n  }, [])\n\n  if (!hasSearchHistorySuggests) return <></>\n  return (\n    <div className={s.SuggestCleanHistory}>\n      <span onClick={onSuggestCleanHistory}>\n        <T id={'suggest.history.clear'} />\n      </span>\n    </div>\n  )\n}\n\nexport default SuggestClearHistory\n","// extracted by mini-css-extract-plugin\nexport default {\"SuggestCleanHistory\":\"cuyUO\"};","import React from 'react'\n\nimport { useSelector } from 'react-redux'\nimport { selectIsSuggestInputValueEmpty } from '../../store/suggest/suggest.selectors'\nimport T from '../i18n/T'\nimport s from './SuggestContentError.less'\n\nconst SuggestContentError = ({ hasSuggests, error }) => {\n  const isInputValueEmpty = useSelector(selectIsSuggestInputValueEmpty)\n  if (hasSuggests || isInputValueEmpty) return <></>\n\n  return (\n    <div className={s.SuggestError}>\n      <T id={error?.name ?? 'suggest.no-result'} />\n    </div>\n  )\n}\n\nexport default SuggestContentError\n","// extracted by mini-css-extract-plugin\nexport default {\"SuggestError\":\"qmbIb\"};","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectAllSuggestions } from '../../store/suggest/suggest.selectors'\nimport { KEYS } from '../../utils/keyboard.constants'\nimport { selectIsUserConnected, selectIsUserAccountEnabled } from '../../store/userAccount/userAccount.selectors'\nimport SuggestFavoritesContent from './SuggestFavoritesContent'\nimport SuggestSearchHistoryContent from './SuggestSearchHistoryContent'\nimport SuggestServiceContent from './SuggestServiceContent'\nimport SuggestClearHistory from './SuggestClearHistory'\nimport useIncentiveClick from './useIncentiveClick'\nimport SuggestContentError from './SuggestContentError'\nimport s from './SuggestContent.less'\nimport { TAG_SUGGEST } from '../analytics/analytics.tagids.constants'\nimport { isEmpty } from '../../utils/lang'\n\nconst DEBOUNCE_DURATION = 150\n\nconst SuggestContent = ({ onClick, positionComponent, withoutFavorites = false }) => {\n  const { suggestions, error } = useSelector(selectAllSuggestions(withoutFavorites))\n  const isUserAccountAvailable = useSelector(selectIsUserAccountEnabled)\n  const isConnected = useSelector(selectIsUserConnected)\n  const [selectedId, setSelectedId] = useState(null)\n  const [timestamp, setTimestamp] = useState(null)\n  const hasFavoriteSuggests = !isConnected ? isUserAccountAvailable : !isEmpty(suggestions.favorites)\n  const hasSearchHistorySuggests = !isEmpty(suggestions.searchHistory)\n  const hasServiceSuggests = !isEmpty(suggestions.service)\n  const hasSuggests = hasFavoriteSuggests || hasSearchHistorySuggests || hasServiceSuggests\n  const stateRef = useRef({\n    suggestsRef: suggestions,\n    errorRef: error,\n    selectedIdRef: selectedId,\n    timestampRef: timestamp\n  })\n\n  const incentiveTagClickBuilder = useCallback(() => {\n    if (isConnected) return <></>\n    return { type: TAG_SUGGEST }\n  }, [isConnected])\n\n  const { onIncentiveClick } = useIncentiveClick({ onClick, incentiveTagClickBuilder })\n\n  useEffect(() => {\n    if (__SERVER__) return\n    document.addEventListener('keydown', handleKeyboardEvent, false)\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyboardEvent, false)\n    }\n  }, [])\n\n  useEffect(() => {\n    stateRef.current = {\n      ...stateRef.current,\n      suggestsRef: suggestions,\n      errorRef: error\n    }\n  }, [suggestions, error])\n\n  const updateSelectedId = idx => {\n    const now = Date.now()\n    setSelectedId(idx)\n    setTimestamp(now)\n    stateRef.current = {\n      ...stateRef.current,\n      selectedIdRef: idx,\n      timestampRef: now\n    }\n  }\n\n  const hasSpeedScrollLimitReached = (currentTimestamp, newTimestamp, key) => {\n    return (\n      currentTimestamp &&\n      newTimestamp - currentTimestamp < DEBOUNCE_DURATION &&\n      (key === KEYS.DOWN || key === KEYS.UP || key === KEYS.ENTER || key === KEYS.TAB)\n    )\n  }\n\n  const handleKeyboardEvent = e => {\n    const { suggestsRef, errorRef, selectedIdRef, timestampRef } = stateRef.current\n\n    if (errorRef) {\n      return\n    }\n\n    const currentSelectedId = selectedIdRef\n    const currentTimestamp = timestampRef\n    let newSelectedId\n    let newTimestamp = Date.now()\n    const suggestsSize = suggestsRef.favorites.length + suggestsRef.service.length + suggestsRef.searchHistory.length\n    const isKeyDown = e.key === KEYS.DOWN || (!e.shiftKey && e.key === KEYS.TAB)\n    const isKeyUp = e.key === KEYS.UP || (e.shiftKey && e.key === KEYS.TAB)\n    const isKeyEnter = e.key === KEYS.ENTER\n\n    // handle speed scrolling with arrow\n    if (hasSpeedScrollLimitReached(currentTimestamp, newTimestamp, e.key)) {\n      return e.preventDefault()\n    }\n\n    if (isKeyDown) {\n      e.preventDefault()\n      newSelectedId = currentSelectedId !== null ? (currentSelectedId + 1) % suggestsSize : 0\n    } else if (isKeyUp) {\n      e.preventDefault()\n      newSelectedId =\n        currentSelectedId !== null\n          ? currentSelectedId - 1 >= 0\n            ? currentSelectedId - 1\n            : suggestsSize - 1\n          : suggestsSize - 1\n    } else if (isKeyEnter && currentSelectedId !== null) {\n      e.preventDefault()\n      e.stopPropagation()\n      newSelectedId = null\n      const allSuggests = [...suggestsRef.favorites, ...suggestsRef.searchHistory, ...suggestsRef.service]\n      const suggest = allSuggests[currentSelectedId]\n      return onIncentiveClick(suggest)\n    } else if (e.shiftKey && e.key === KEYS.SHIFT) {\n      // Condition pour éviter de perdre la position de l'item sélectionné, quand on appuie que sur shift\n      e.preventDefault()\n      newSelectedId = currentSelectedId\n      newTimestamp = currentTimestamp\n    } else {\n      newTimestamp = null\n      newSelectedId = null\n    }\n\n    setSelectedId(newSelectedId)\n    setTimestamp(newTimestamp)\n    stateRef.current = {\n      ...stateRef.current,\n      selectedIdRef: newSelectedId,\n      timestampRef: newTimestamp\n    }\n  }\n\n  return (\n    <div className={s.SuggestContent}>\n      {positionComponent}\n\n      <SuggestFavoritesContent\n        suggestionsFavorites={suggestions.favorites}\n        idxStartAt={0}\n        selectedId={selectedId}\n        updateSelectedId={updateSelectedId}\n        onClick={onIncentiveClick}\n      />\n\n      <SuggestSearchHistoryContent\n        suggestionsSearchHistory={suggestions.searchHistory}\n        idxStartAt={suggestions.favorites.length}\n        selectedId={selectedId}\n        updateSelectedId={updateSelectedId}\n        onClick={onClick}\n      />\n\n      <SuggestServiceContent\n        suggestionsService={suggestions.service}\n        idxStartAt={suggestions.favorites.length + suggestions.searchHistory.length}\n        selectedId={selectedId}\n        updateSelectedId={updateSelectedId}\n        onClick={onClick}\n      />\n\n      <SuggestClearHistory suggestionsSearchHistory={suggestions.searchHistory} />\n\n      <SuggestContentError hasSuggests={hasSuggests} error={error} />\n    </div>\n  )\n}\n\nexport default SuggestContent\n","import React, { useEffect, useState } from 'react'\n\nconst DEFAULT_DELAY_BEFORE_LAUNCH = 0\nconst STATUS_WAITING = 'waiting'\nconst STATUS_READY = 'ready'\n\nconst DelayComponent = ({ children, delay = DEFAULT_DELAY_BEFORE_LAUNCH }) => {\n  const [status, setStatus] = useState(STATUS_WAITING)\n\n  useEffect(() => {\n    const timeout = setTimeout(() => setStatus(STATUS_READY), delay)\n    return () => {\n      clearTimeout(timeout)\n    }\n  }, [])\n\n  if (status !== STATUS_READY) return <></>\n  return children\n}\n\nexport default DelayComponent\n","import { setAddressFromAmbiguity } from '../address/address.actions'\nimport { selectIsItineraryUniverse } from '../history/history.selectors'\nimport { setStepFromAddress } from '../itinerary/itinerary.actions'\n\nexport const setAmbiguityAddress = address => (dispatch, getState) => {\n  const isItineraryRoute = selectIsItineraryUniverse(getState())\n\n  return isItineraryRoute\n    ? setStepFromAddress(address)(dispatch, getState)\n    : setAddressFromAmbiguity(address)(dispatch, getState)\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"QECe9\",\"breadcrumbs\":\"ElTrW\"};","import React from 'react'\nimport T from '../i18n/T'\nimport s from './BreadcrumbItem.less'\n\nconst BreadcrumbItem = props => {\n  const { labelKey, labelArgs, url, idx } = props\n\n  return (\n    <li itemProp=\"itemListElement\" itemScope={true} itemType=\"https://schema.org/ListItem\" className={s.breadcrumbItem}>\n      {url ? (\n        <a className={s.breadcrumbLink} itemProp=\"item\" href={url}>\n          <span itemProp=\"name\">{labelKey && <T id={labelKey} args={labelArgs} />}</span>\n        </a>\n      ) : (\n        <span itemProp=\"name\">{labelKey && <T id={labelKey} args={labelArgs} />}</span>\n      )}\n      <meta itemProp=\"position\" content={idx} />\n    </li>\n  )\n}\n\nexport default BreadcrumbItem\n","// extracted by mini-css-extract-plugin\nexport default {\"breadcrumbItem\":\"r3WBM\",\"breadcrumbLink\":\"pfDNZ\"};","import React from 'react'\nimport s from './Breadcrumbs.less'\nimport { useSelector } from 'react-redux'\nimport { selectBreadcrumbs } from '../../store/seo/seo.selectors'\nimport BreadcrumbItem from './BreadcrumbItem'\n\nconst Breadcrumbs = () => {\n  const breadcrumbs = useSelector(selectBreadcrumbs)\n\n  return (\n    <div className={s.wrapper}>\n      <ol itemScope={true} itemType=\"https://schema.org/BreadcrumbList\" className={s.breadcrumbs}>\n        {(breadcrumbs || []).map(({ labelKey, labelArgs, url }, idx) => (\n          <BreadcrumbItem labelKey={labelKey} labelArgs={labelArgs} url={url} idx={idx} key={idx} />\n        ))}\n      </ol>\n    </div>\n  )\n}\n\nexport default Breadcrumbs\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"V3759\",\"infos\":\"wfAtZ\",\"content\":\"btW2U\",\"textContainer\":\"bHZxH\",\"title\":\"AA8hC\",\"text\":\"l5__q\"};","import classnames from 'classnames'\nimport React from 'react'\nimport { APPS_ADJUST_URL } from '../../parameters'\nimport { TAG_BLOCK_AUTOPROMO } from '../analytics/analytics.tagids.constants'\nimport analyticsConstants from '../analytics/analytics.constants'\nimport RectangleActionButton, {\n  COLOR_GREEN,\n  SIZE_MEDIUM\n} from '../genericComponents/buttons/RectangleActionButton'\nimport TagActionLink from '../genericComponents/TagActionLink'\nimport { withFrenchSite } from '../i18n/i18nSite'\nimport prefooterDevicePng from './assets/prefooter_image.png'\nimport prefooterDeviceWebp from './assets/prefooter_image.webp'\nimport s from './FooterAppAutoPromoPE.less'\nimport ImageWithFallback from '../ui/ImageWithFallback'\n\nconst FooterAppAutoPromoPE = ({ className }) => {\n  return (\n    <div className={classnames(s.wrapper, className)}>\n      <div className={s.infos}>\n        <ImageWithFallback\n          className={s.device}\n          image={prefooterDeviceWebp}\n          fallbackImage={prefooterDevicePng}\n          width=\"102\"\n          height=\"108\"\n        />\n        <div className={s.content}>\n          <div className={s.textContainer}>\n            <span className={s.title}>{\"Laissez vous guider par le GPS de l'application Mappy\"}</span>\n            <span className={s.text}>{'Info trafic, alertes de vitesse et radars'}</span>\n          </div>\n          <div>\n            <TagActionLink\n              href={APPS_ADJUST_URL}\n              nofollow={true}\n              targetBlank={true}\n              type={TAG_BLOCK_AUTOPROMO}\n              tagInfo={{\n                area: analyticsConstants.autopromo.area.main\n              }}\n            >\n              <RectangleActionButton label={\"Installer l'App\"} color={COLOR_GREEN} size={SIZE_MEDIUM} />\n            </TagActionLink>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport default withFrenchSite(FooterAppAutoPromoPE)\n","import React from 'react'\nimport T from '../i18n/T'\nimport s from './FooterCocorico.less'\nimport frenchFlag from './french-flag.svg'\n\nconst FooterCocorico = () => {\n  return (\n    <div className={s.cocorico}>\n      <div className={s.frenchFlag}>\n        <img src={frenchFlag} alt=\"drapeau Français\" width={16} height={16} />\n      </div>\n      <T id={'footer.cocorico'} />\n    </div>\n  )\n}\n\nexport default FooterCocorico\n","// extracted by mini-css-extract-plugin\nexport default {\"cocorico\":\"vEsdL\",\"frenchFlag\":\"qo_Zj\"};","import React from 'react'\nimport { TAG_CLICK_HELP_BUTTON } from '../../analytics/analytics.tagids.constants'\nimport TagActionLink from '../../genericComponents/TagActionLink'\nimport question from '../../genericComponents/assets/question.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport s from './FooterContact.less'\n\nexport default function FooterContact(props) {\n  return (\n    <div className={props.className}>\n      <TagActionLink\n        type={TAG_CLICK_HELP_BUTTON}\n        href=\"https://mappy.uservoice.com/\"\n        className={s.link}\n        target=\"_blank\"\n        rel=\"nofollow noopener noreferrer\"\n      >\n        <SVGIcon url={question} className=\"ssrFooterImg\" />\n        <T id={'footer.needhelp'} />\n      </TagActionLink>\n    </div>\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"gXpPZ\"};","// extracted by mini-css-extract-plugin\nexport default {\"footerInfosHover\":\"g8qaV\",\"title\":\"Sd1SL\",\"chevron\":\"ELG48\",\"content\":\"HyCVJ\",\"LogoGroupe\":\"eA3Rq\",\"LogoMappy\":\"hJG03\",\"flag\":\"TZiRn\",\"France\":\"MZkqe\",\"Belgium\":\"m6tGi\",\"UnitedKingdom\":\"xCe7w\",\"block\":\"bptyn\"};","// extracted by mini-css-extract-plugin\nexport default {\"socialNetworkList\":\"HOmwj\",\"button\":\"LE5bN\",\"facebook\":\"b16m9\",\"twitter\":\"nnSji\",\"blog\":\"dNnmX\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { TAG_FOOTER_SOCIAL_NETWORKS_LINKS } from '../../analytics/analytics.tagids.constants'\nimport TagActionLink from '../../genericComponents/TagActionLink'\nimport facebook from '../../genericComponents/assets/facebook.svg'\nimport rss from '../../genericComponents/assets/rss.svg'\nimport twitter from '../../genericComponents/assets/twitter.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport s from './SocialNetworkButtons.less'\n\nexport default function SocialNetworkButtons(props) {\n  return (\n    <ul className={s.socialNetworkList}>\n      <li>\n        <FacebookButton />\n      </li>\n      <li>\n        <TwitterButton />\n      </li>\n      <li>\n        <BlogButton />\n      </li>\n    </ul>\n  )\n}\n\nexport function FacebookButton(props) {\n  return (\n    <TagActionLink\n      className={classNames(s.button, s.facebook)}\n      href=\"https://www.facebook.com/MappyOfficiel\"\n      nofollow={true}\n      targetBlank={true}\n      title=\"Mappy sur Facebook\"\n      type={TAG_FOOTER_SOCIAL_NETWORKS_LINKS}\n      tagInfo={{ target: 'Facebook_Mappy' }}\n    >\n      <SVGIcon url={facebook} ssrWhite={true} />\n    </TagActionLink>\n  )\n}\n\nexport function TwitterButton(props) {\n  return (\n    <TagActionLink\n      className={classNames(s.button, s.twitter)}\n      href=\"https://twitter.com/Mappy\"\n      nofollow={true}\n      targetBlank={true}\n      title=\"Mappy sur Twitter\"\n      type={TAG_FOOTER_SOCIAL_NETWORKS_LINKS}\n      tagInfo={{ target: 'Twitter_Mappy' }}\n    >\n      <SVGIcon url={twitter} ssrWhite={true} />\n    </TagActionLink>\n  )\n}\n\nexport function BlogButton(props) {\n  return (\n    <TagActionLink\n      className={classNames(s.button, s.blog)}\n      href=\"https://blog.mappy.com\"\n      title=\"Blog Mappy\"\n      disableNoreferrer={true}\n      targetBlank={true}\n      type={TAG_FOOTER_SOCIAL_NETWORKS_LINKS}\n      tagInfo={{ target: 'Blog_Mappy' }}\n    >\n      <SVGIcon url={rss} ssrWhite={true} />\n    </TagActionLink>\n  )\n}\n","import classNames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsFrenchSite } from '../../../store/navigation/navigation.selectors'\nimport Details from '../../genericComponents/Details'\nimport tooltipRight from '../../genericComponents/assets/tooltip-right.svg'\nimport logoMappy from '../../genericComponents/logo-mappy.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport FooterContact from './FooterContact'\nimport s from './FooterInfos.less'\nimport SocialNetworkButtons from './SocialNetworkButtons'\nimport logoRatpEn from './logo-ratp-group-en.png'\nimport logoRatpFr from './logo-ratp-group-fr.png'\nimport logoRSS from './logo-ratp-ss.png'\nimport logoBonjour from './logo_bonjour.svg'\n\nconst FooterInfos = () => {\n  const isFR = useSelector(selectIsFrenchSite)\n  return (\n    <Details\n      summary={\n        <span>\n          <SVGIcon url={tooltipRight} className=\"ssrFooterImg\" />\n          <T id={'footer.infos'} />\n        </span>\n      }\n      classes={[s.footerInfosHover]}\n      toggleClasses={[s.chevron]}\n    >\n      <div className={s.content}>\n        <div className={s.block}>\n          <FooterContact />\n        </div>\n        {isFR && renderSocialNetworks()}\n        {isFR && renderB2B()}\n        {renderLanguagesWebsites()}\n        {isFR ? renderFrenchContent() : renderInternationalContent()}\n        {renderGroupLogos(isFR)}\n      </div>\n    </Details>\n  )\n}\n\nconst renderFrenchContent = () => {\n  return (\n    <>\n      <div className={s.block}>\n        <div className={s.title}>\n          <T id={'footer.about.title'} />\n        </div>\n        <ul>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/entreprise/\" rel=\"nofollow noopener\">\n              <T id={'footer.link.about-us'} />\n            </a>\n          </li>\n          <li>\n            <a\n              target=\"_blank\"\n              href=\"https://www.welcometothejungle.com/fr/companies/ratp-smart-systems/jobs?page=1&aroundQuery=Paris%2C%20France&aroundLatLng=48.85718%2C2.34141&aroundRadius=20000\"\n              rel=\"nofollow noopener noreferrer\"\n            >\n              Recrutement\n            </a>\n          </li>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/\" rel=\"noopener\">\n              Blog Mappy\n            </a>\n          </li>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/categorie/espace-presse/\" rel=\"nofollow noopener\">\n              Presse\n            </a>\n            {' | '}\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/nos-partenaires/\" rel=\"nofollow noopener\">\n              Partenaires\n            </a>\n          </li>\n        </ul>\n      </div>\n      <div className={s.block}>\n        <div className={s.title}>Vos questions</div>\n        <ul>\n          <li>\n            {/* eslint-disable react/jsx-no-target-blank */}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/entreprise/conditions-dutilisations/\"\n              rel=\"nofollow noopener\"\n            >\n              <T id={'footer.link.terms-of-use'} />\n            </a>\n            {' | '}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/entreprise/conditions-dutilisations/vie-privee/\"\n              rel=\"nofollow noopener\"\n            >\n              Vie privée\n            </a>\n            {' | '}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/entreprise/conditions-dutilisations/cookies/\"\n              rel=\"nofollow noopener\"\n            >\n              <T id={'footer.link.cookies'} />\n            </a>\n            {/* eslint-enable react/jsx-no-target-blank */}\n          </li>\n          <li>\n            <a target=\"_blank\" href=\"https://mappy.uservoice.com/\" rel=\"nofollow noopener noreferrer\">\n              FAQ - Nous contacter\n            </a>\n          </li>\n          <li>\n            {/* eslint-disable react/jsx-no-target-blank */}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/les-transports-en-commun-sur-mappy/\"\n              rel=\"nofollow noopener\"\n            >\n              Couverture transports en commun\n            </a>\n            {/* eslint-enable react/jsx-no-target-blank */}\n          </li>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/mappy-photographie-votre-ville/\" rel=\"nofollow noopener\">\n              Mappy photographie votre ville\n            </a>\n          </li>\n        </ul>\n      </div>\n    </>\n  )\n}\n/* eslint-disable react/jsx-no-target-blank */\n\nconst renderInternationalContent = () => {\n  return (\n    <>\n      <div className={s.block}>\n        <div className={s.title}>\n          <T id={'footer.about.title'} />\n        </div>\n        <ul>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a target=\"_blank\" href=\"https://blog.mappy.com/entreprise/\" rel=\"nofollow noopener\">\n              <T id={'footer.link.about-us'} />\n            </a>\n          </li>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/entreprise/conditions-dutilisations/\"\n              rel=\"nofollow noopener\"\n            >\n              <T id={'footer.link.terms-of-use'} />\n            </a>{' '}\n          </li>\n          <li>\n            {/* eslint-disable-next-line react/jsx-no-target-blank */}\n            <a\n              target=\"_blank\"\n              href=\"https://blog.mappy.com/entreprise/conditions-dutilisations/cookies/\"\n              rel=\"nofollow noopener\"\n            >\n              <T id={'footer.link.cookies'} />\n            </a>\n          </li>\n          <li>\n            <a target=\"_blank\" href=\"https://mappy.uservoice.com/\" rel=\"nofollow noopener noreferrer\">\n              <T id={'footer.link.contact'} />\n            </a>\n          </li>\n        </ul>\n      </div>\n    </>\n  )\n}\n\nconst renderB2B = () => {\n  return (\n    <div>\n      <div className={s.title}>Solutions</div>\n      <ul>\n        <li>\n          {/* eslint-disable-next-line react/jsx-no-target-blank */}\n          <a target=\"_blank\" href=\"https://blog.mappy.com/entreprise/nos-offres-commerciales/\" rel=\"nofollow noopener\">\n            API\n          </a>\n        </li>\n        <li>\n          {/* eslint-disable-next-line react/jsx-no-target-blank */}\n          <a target=\"_blank\" href=\"https://blog.mappy.com/entreprise/nos-produits/\" rel=\"nofollow noopener\">\n            Mappy sur mobile\n          </a>\n        </li>\n      </ul>\n    </div>\n  )\n}\n\nconst renderGroupLogos = isFR => {\n  return (\n    <div className={s.LogoGroupe}>\n      <a target=\"_blank\" href=\"https://www.bonjour-ratp.fr/\" rel=\"noreferrer noopener\">\n        <img src={logoBonjour} width=\"72\" height=\"22\" loading=\"lazy\" alt=\"Bonjour RATP\" />\n      </a>\n      <a className={s.LogoMappy} target=\"_blank\" href=\"https://www.mappy.com/\" rel=\"noreferrer noopener\">\n        <img src={logoMappy} width=\"66\" height=\"15\" loading=\"lazy\" alt=\"Mappy\" />\n      </a>\n      <a target=\"_blank\" href=\"https://www.ratp.fr/groupe-ratp\" rel=\"noreferrer noopener\">\n        <img\n          src={isFR ? logoRatpFr : logoRatpEn}\n          width=\"43\"\n          height=\"23\"\n          loading=\"lazy\"\n          alt={isFR ? 'Groupe RATP' : 'RATP Group'}\n        />\n      </a>\n      <a target=\"_blank\" href=\"https://www.ratpsmartsystems.com/\" rel=\"noreferrer noopener\">\n        <img src={logoRSS} width=\"100\" height=\"22\" loading=\"lazy\" alt=\"RATP Smart Systems\" />\n      </a>\n    </div>\n  )\n}\n\nconst renderLanguagesWebsites = () => {\n  return (\n    <div className={s.block}>\n      <div className={s.title}>\n        <T id={'footer.sites.title'} />\n      </div>\n      <ul>\n        <li>\n          <a href=\"https://fr.mappy.com/\">\n            <span className={classNames(s.flag, s.France)} />\n            France\n          </a>\n        </li>\n        <li>\n          <a href=\"https://fr-be.mappy.com/\">\n            <span className={classNames(s.flag, s.Belgium)} />\n            Belgique (Français)\n          </a>\n        </li>\n        <li>\n          <a href=\"https://nl-be.mappy.com/\">\n            <span className={classNames(s.flag, s.Belgium)} />\n            België (Nederlands)\n          </a>\n        </li>\n        <li>\n          <a href=\"https://en.mappy.com/\">\n            <span className={classNames(s.flag, s.UnitedKingdom)} />\n            United Kingdom\n          </a>\n        </li>\n      </ul>\n    </div>\n  )\n}\n\nconst renderSocialNetworks = () => {\n  return (\n    <div className={s.block}>\n      <div className={s.title}>Actualité</div>\n      Retrouvez Mappy sur...\n      <SocialNetworkButtons />\n    </div>\n  )\n}\n\nexport default FooterInfos\n","// extracted by mini-css-extract-plugin\nexport default {\"FooterPrivacy\":\"JxW6E\",\"FooterPrivacyLink\":\"JahP_\"};","import React from 'react'\nimport CMPService from '../../cmp/CMPService'\nimport lock from '../../genericComponents/assets/lock.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './FooterPrivacy.less'\n\nconst FooterPrivacy = () => {\n  const onPrivacyOpen = useEventCallback(() => CMPService.open())\n\n  return (\n    <div id=\"FooterPrivacy\" className={s.FooterPrivacy}>\n      <SVGIcon url={lock} className=\"ssrFooterImg\" />\n      <span className={s.FooterPrivacyLink} onClick={onPrivacyOpen}>\n        <T id={'footer.privacy'} />\n      </span>\n      {' | '}\n      <a className={s.FooterPrivacyLink} href=\"/consentement-audience\">\n        <T id={'footer.privacy.analytics'} />\n      </a>\n      {' | '}\n      <a\n        className={s.FooterPrivacyLink}\n        target=\"_blank\"\n        href=\"https://blog.mappy.com/gerer-utiq\"\n        rel=\"nofollow noopener noreferrer\"\n      >\n        <T id={'footer.privacy.utiq'} />\n      </a>\n    </div>\n  )\n}\n\nexport default FooterPrivacy\n","// extracted by mini-css-extract-plugin\nexport default {\"title\":\"hT3a1\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectTopSearchLinks } from '../../../store/seo/seo.selectors'\nimport TopSearchItem from '../../genericComponents/topSearch/TopSearchItem'\nimport T from '../../i18n/T'\nimport s from './TopSearchLinks.less'\nimport { selectShouldDisplayTopSearchTitle } from './seo-footer.selectors'\n\nconst ID = 'TopSearchLinks'\n\nexport const TopSearchLinks = () => {\n  const topSearchLinks = useSelector(selectTopSearchLinks)\n  const shouldDisplayTitle = useSelector(selectShouldDisplayTopSearchTitle)\n\n  if (__BROWSER__) {\n    const html = document.getElementById(ID)?.innerHTML\n    if (!html) return <></>\n    return <div id={ID} dangerouslySetInnerHTML={{ __html: html }} className={s.root}></div>\n  }\n\n  if (!topSearchLinks || topSearchLinks.length === 0) return <></>\n\n  return (\n    <div id={ID}>\n      {shouldDisplayTitle === true && (\n        <h2 className={s.title}>\n          <T id={'footer.top-search.title'} />\n        </h2>\n      )}\n      {topSearchLinks.map((links, idx) => (\n        <TopSearchItem {...links} key={idx} />\n      ))}\n    </div>\n  )\n}\n\nexport default TopSearchLinks\n","import React from 'react'\nimport { selectShouldDisplayTopSearch } from '../../store/seo/seo.selectors'\nimport Details from '../genericComponents/Details'\nimport magnifyingGlass from '../genericComponents/assets/magnifying-glass.svg'\nimport T from '../i18n/T'\nimport TopSearchLinks from '../seo/footer/TopSearchLinks'\nimport SVGIcon from '../svg/SVGIcon'\nimport { withEverySelectorTruthy } from '../utils/react-redux'\nimport s from './FooterTopSearch.less'\n\nexport const FooterTopSearch = () => (\n  <Details\n    summary={\n      <span>\n        <SVGIcon url={magnifyingGlass} className=\"ssrFooterImg\" />\n        <T id={'footer.top-search'} />\n      </span>\n    }\n    classes={[s.topSearchHover]}\n    toggleClasses={[s.chevron]}\n  >\n    <TopSearchLinks />\n  </Details>\n)\n\nexport default withEverySelectorTruthy(selectShouldDisplayTopSearch)(FooterTopSearch)\n","// extracted by mini-css-extract-plugin\nexport default {\"topSearchHover\":\"F1JNF\",\"chevron\":\"K9qC8\"};","import classNames from 'classnames'\nimport React from 'react'\nimport Breadcrumbs from '../seo/Breadcrumbs'\n\nimport FooterAppAutoPromo from '../autopromo/FooterAppAutoPromoPE'\nimport s from './Footer.less'\nimport FooterCocorico from './FooterCocorico'\nimport FooterInfos from './footerInfos/FooterInfos'\nimport FooterPrivacy from './footerInfos/FooterPrivacy'\nimport FooterTopSearch from './FooterTopSearch'\n\nconst Footer = ({ privacy = true, displayAppAutoPromo = true }) => (\n  <div className={classNames(s.footer)}>\n    {displayAppAutoPromo && <FooterAppAutoPromo />}\n    <div className={classNames(s.borderBottom, s.detailsSpacing)}>\n      <Breadcrumbs />\n      {privacy && <FooterPrivacy />}\n      <FooterTopSearch />\n      <FooterInfos />\n    </div>\n    <FooterCocorico />\n  </div>\n)\n\nexport default Footer\n","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"hl0XH\",\"centered\":\"vWL09\",\"block\":\"efSnt\",\"titleForApps\":\"J_GL0\",\"detailsSpacing\":\"zM9Vd\",\"borderBottom\":\"ugOBB\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"NyDlD\",\"leftPart\":\"CNNGD\",\"qrcodeWrapper\":\"dJn7D\",\"instructions\":\"Woidx\",\"storeButton\":\"qnlJa\",\"androidButton\":\"jvkGE\",\"iosButton\":\"xF2zA\",\"rightPart\":\"rNDPS\",\"title\":\"sEkur\",\"advantagesList\":\"HsgP2\",\"advantagesItem\":\"vTObo\",\"advantagesIcon\":\"kE_cS\",\"closeButton\":\"itsJI\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { APPLE_STORE_URL, PLAY_STORE_URL } from '../../parameters'\nimport { TAG_BLOCK_AUTOPROMO } from '../analytics/analytics.tagids.constants'\nimport { MODAL_IDS } from '../../store/ui/ui.constants'\nimport analyticsConstants from '../analytics/analytics.constants'\nimport Modal from '../genericComponents/Modal'\nimport TagActionLink from '../genericComponents/TagActionLink'\nimport cross from '../genericComponents/assets/cross.svg'\nimport france from '../genericComponents/assets/france.svg'\nimport mappyLogoOutline from '../genericComponents/assets/mappy-logo-outline.svg'\nimport roadRadar from '../genericComponents/assets/road-radar.svg'\nimport SVGIcon from '../svg/SVGIcon'\nimport useModal from '../ui/useModal'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './AutoPromoPopinGE.less'\nimport qrcode from './assets/qrcode-stores.png'\n\nconst StoreButton = ({ url, className, appstore }) => {\n  return (\n    <TagActionLink\n      className={classNames(s.storeButton, className)}\n      href={url}\n      nofollow={true}\n      targetBlank={true}\n      type={TAG_BLOCK_AUTOPROMO}\n      tagInfo={{ appstore, area: analyticsConstants.autopromo.area.popin }}\n    />\n  )\n}\n\nconst AutoPromoPopinGE = () => {\n  const { hideModal } = useModal(MODAL_IDS.AUTO_PROMO_POPIN)\n  const onPopinClose = useEventCallback(hideModal)\n\n  return (\n    <Modal modalId={MODAL_IDS.AUTO_PROMO_POPIN}>\n      <div className={s.closeButton} onClick={onPopinClose}>\n        <SVGIcon url={cross} />\n      </div>\n      <div className={s.root}>\n        <div className={s.leftPart}>\n          <div className={s.qrcodeWrapper}>\n            <img src={qrcode} />\n          </div>\n          <ol className={s.instructions}>\n            <li>\n              <b>Scannez le QR Code</b> avec l&apos;appareil photo de votre téléphone\n            </li>\n            <li>\n              <b>Cliquez</b> sur le lien\n            </li>\n            <li>\n              <b>Téléchargez</b> l&apos;app\n            </li>\n          </ol>\n          <div>\n            <StoreButton\n              url={PLAY_STORE_URL}\n              className={s.androidButton}\n              appstore={analyticsConstants.autopromo.stores.android}\n            />\n            <StoreButton\n              url={APPLE_STORE_URL}\n              className={s.iosButton}\n              appstore={analyticsConstants.autopromo.stores.ios}\n            />\n          </div>\n        </div>\n        <div className={s.rightPart}>\n          <div className={s.title}>Pour une expérience complète, téléchargez l&apos;application Mappy</div>\n          <ul className={s.advantagesList}>\n            <li className={s.advantagesItem}>\n              <div className={s.advantagesIcon}>\n                <SVGIcon url={mappyLogoOutline} />\n              </div>\n              <div>Un GPS efficace et gratuit</div>\n            </li>\n            <li className={s.advantagesItem}>\n              <div className={s.advantagesIcon}>\n                <SVGIcon url={roadRadar} />\n              </div>\n              <div>Trafic en temps réel, zones de contrôle et alertes dépassement de vitesse</div>\n            </li>\n            <li className={s.advantagesItem}>\n              <div className={s.advantagesIcon}>\n                <SVGIcon url={france} />\n              </div>\n              <div>100% made in France qui respecte la vie privée</div>\n            </li>\n          </ul>\n        </div>\n      </div>\n    </Modal>\n  )\n}\n\nexport default AutoPromoPopinGE\n","import React from 'react'\nimport { TAG_BLOCK_AUTOPROMO } from '../analytics/analytics.tagids.constants'\nimport { MODAL_IDS } from '../../store/ui/ui.constants'\nimport analyticsConstants from '../analytics/analytics.constants'\nimport qrcode from '../genericComponents/assets/qrcode.svg'\nimport RectangleActionButton, {\n  COLOR_GREY_EMPTY,\n  SIZE_MEDIUM,\n} from '../genericComponents/buttons/RectangleActionButton'\nimport { withFrenchSite } from '../i18n/i18nSite'\nimport useModal from '../ui/useModal'\nimport useErrorBoundaryCallback from '../utils/useErrorBoundaryCallback'\nimport AutoPromoPopinGE from './AutoPromoPopinGE'\n\nconst AutoPromoOpenButton = ({ size = SIZE_MEDIUM, area }) => {\n  const { displayModal } = useModal(MODAL_IDS.AUTO_PROMO_POPIN)\n\n  const onButtonClick = useErrorBoundaryCallback(displayModal)\n\n  return (\n    <>\n      <RectangleActionButton\n        iconUrl={qrcode}\n        color={COLOR_GREY_EMPTY}\n        label=\"Installer l'App\"\n        size={size}\n        onClick={onButtonClick}\n        tagData={{\n          type: TAG_BLOCK_AUTOPROMO,\n          tagInfo: {\n            appstore: analyticsConstants.autopromo.stores.qrcode,\n            area\n          }\n        }}\n      />\n      <AutoPromoPopinGE />\n    </>\n  )\n}\n\nexport default withFrenchSite(AutoPromoOpenButton)\n","import { useState, useEffect } from 'react'\n\nexport default (value, timeout) => {\n  const [state, setState] = useState(value)\n\n  useEffect(() => {\n    const handler = setTimeout(() => setState(value), timeout)\n\n    return () => clearTimeout(handler)\n  }, [value, timeout])\n\n  return state\n}\n","import React from 'react'\nimport { withOnlyPE } from '../Device'\nimport s from './Anchor.less'\n\nconst Anchor = () => <div className={s.anchor} />\n\nexport default withOnlyPE(Anchor)\n","// extracted by mini-css-extract-plugin\nexport default {\"anchor\":\"t9_nH\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"foxyP\",\"header\":\"IEtW9\",\"title\":\"DKLdx\",\"close\":\"jzokH\",\"itemsWrapper\":\"OFFcm\",\"items\":\"PkQ7E\"};","import React from 'react'\nimport { selectCategoriesItemById, selectSubCategoriesMenu } from '../../store/poiassets/poiassets.selectors'\nimport cross from '../genericComponents/assets/cross.svg'\nimport SVGIcon from '../svg/SVGIcon'\nimport { useSelectorWithProps } from '../utils/react-redux'\nimport CategorySubMenuStyle from './CategorySubMenuStyle'\nimport MenuApplicationItem from './MenuApplicationItem'\nimport s from './MenuSubCategoriesPE.less'\nimport MenuSubCategoryItem from './MenuSubCategoryItem'\nimport usePublisherBarreCategorieTag from './usePublisherBarreCategorieTag'\n\nconst MenuSubCategoriesPE = ({ categoryId, onMouseLeaveMenu }) => {\n  const { subcategories, apps, color } = useSelectorWithProps(selectSubCategoriesMenu, { id: categoryId })\n  const { label } = useSelectorWithProps(selectCategoriesItemById, { id: categoryId })\n\n  usePublisherBarreCategorieTag(categoryId)\n\n  if (!categoryId) return <></>\n\n  return (\n    <div className={s.container}>\n      <div className={s.header}>\n        <div className={s.close} onClick={onMouseLeaveMenu}>\n          <SVGIcon url={cross} />\n        </div>\n        <h2 className={s.title}>{label}</h2>\n      </div>\n      <div className={s.itemsWrapper}>\n        <ul className={s.items}>\n          {subcategories.map(({ id, iconId, label, rubricIds }) => (\n            <MenuSubCategoryItem\n              key={`subcategory-${id}`}\n              id={id}\n              iconId={iconId}\n              label={label}\n              rubricIds={rubricIds}\n              categoryId={categoryId}\n              onClick={onMouseLeaveMenu}\n            />\n          ))}\n        </ul>\n        <ul className={s.items}>\n          {apps.map(({ id, mob_roundImage, name }) => (\n            <MenuApplicationItem\n              key={`app-${id}`}\n              id={id}\n              logo={mob_roundImage}\n              name={name}\n              categoryId={categoryId}\n              onClick={onMouseLeaveMenu}\n            />\n          ))}\n        </ul>\n        <CategorySubMenuStyle color={color} />\n      </div>\n    </div>\n  )\n}\n\nexport default MenuSubCategoriesPE\n","import React, { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsFrenchSite } from '../../store/navigation/navigation.selectors'\nimport { loadPoiAssetsConfiguration } from '../../store/poiassets/poiassets.actions'\nimport { selectCategoriesMenu } from '../../store/poiassets/poiassets.selectors'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { isPE } from '../Device'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport useUIDisplay from '../ui/useUIDisplay'\nimport { useAction } from '../utils/react-redux'\nimport s from './MenuCategoriesPE.less'\nimport MenuCategoryItem from './MenuCategoryItem'\nimport MenuSubCategoriesPE from './MenuSubCategoriesPE'\n\nconst MenuCategoriesPE = () => {\n  const [categoryId, setCategoryId] = useState()\n  const execLoadPoiAssetsConfiguration = useAction(loadPoiAssetsConfiguration)\n  useEffect(() => {\n    execLoadPoiAssetsConfiguration()\n  }, [execLoadPoiAssetsConfiguration])\n  const categories = useSelector(selectCategoriesMenu)\n  const { showUI, hideUI } = useUIDisplay(UI_ELEMENTS.MENU_PE)\n\n  const onTap = id => e => {\n    const shouldHide = categoryId === id\n    setCategoryId(shouldHide ? null : id)\n    shouldHide ? hideUI() : showUI()\n  }\n\n  if (!categories || !categories.length) return <></>\n\n  return (\n    <div className={s.container}>\n      <ul className={s.categories}>\n        {categories.map(({ id, shortLabel, iconId, color }) => (\n          <MenuCategoryItem\n            key={`category-${id}`}\n            id={id}\n            shortLabel={shortLabel}\n            color={color}\n            iconId={iconId}\n            selected={categoryId === id}\n            active={!categoryId}\n            onCategoryClick={onTap(id)}\n          />\n        ))}\n      </ul>\n      {categoryId && <MenuSubCategoriesPE categoryId={categoryId} onMouseLeaveMenu={onTap(categoryId)} />}\n    </div>\n  )\n}\n\nexport const isMenuCategoriesPEAvailable = getState => isPE() && selectIsFrenchSite(getState())\n\nexport default withEmptyFallbackErrorBoundary(MenuCategoriesPE)\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"V0HtR\",\"categories\":\"igsQL\"};","import React from 'react'\nimport s from './StatusMessage.less'\nimport classnames from 'classnames'\n\nconst StatusMessage = ({ message, visible = false, className }) => {\n  return (\n    <div className={classnames(s.status, visible && s.statusVisible, className)}>\n      <span className={s.statusText}>{message}</span>\n    </div>\n  )\n}\n\nexport default StatusMessage\n","// extracted by mini-css-extract-plugin\nexport default {\"status\":\"IHXKv\",\"statusVisible\":\"t9Dhq\",\"statusText\":\"l6dSx\"};","import React from 'react'\nimport { navigateBack } from '../../../store/history/history.actions'\nimport cross from '../../genericComponents/assets/cross.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { useAction } from '../../utils/react-redux'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './CloseUserAreaButton.less'\n\nconst CloseUserAreaButton = () => {\n  const execNavigateBack = useAction(navigateBack)\n  const onClose = useEventCallback(execNavigateBack)\n\n  return (\n    <div className={s.closeBtn} onClick={onClose}>\n      <SVGIcon url={cross} />\n    </div>\n  )\n}\n\nexport default CloseUserAreaButton\n","// extracted by mini-css-extract-plugin\nexport default {\"closeBtn\":\"gYb_D\"};","import React from 'react'\nimport LogoMappy from './logo-mappy.svg'\nimport s from './LogoMappyImg.less'\n\nconst LogoMappyImg = () => <img className={s.logo} width=\"87\" height=\"19\" src={LogoMappy} alt=\"Mappy\" loading=\"lazy\" />\n\nexport default LogoMappyImg\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"opzFO\"};","import React from 'react'\nimport CloseUserAreaButton from '../shared/CloseUserAreaButton'\nimport s from './UserAreaAnonymous.less'\nimport welcomeUserAccount from './welcome-user-account.svg'\nimport UserLoginButton from '../UserLoginButton'\nimport { withUserNotConnected } from '../shared/withKeycloak'\nimport LogoMappyImg from '../../genericComponents/LogoMappyImg'\n\nconst UserAreaAnonymous = () => (\n  <div className={s.root}>\n    <CloseUserAreaButton />\n    <div className={s.content}>\n      <div className={s.defaultScreen}>\n        <img src={welcomeUserAccount} width=\"164\" height=\"152\" loading=\"lazy\" />\n        <p className={s.title1}>\n          Le compte <LogoMappyImg />\n        </p>\n        <p className={s.title2}>c’est gratuit !</p>\n        <ul className={s.list}>\n          <li>Des itinéraires personnalisés</li>\n          <li>Des infos durée et coût plus précises</li>\n          <li>Mes adresses favorites sur le site et l’appli</li>\n        </ul>\n        <UserLoginButton />\n      </div>\n    </div>\n  </div>\n)\n\nexport default withUserNotConnected(UserAreaAnonymous)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"FPmb1\",\"content\":\"vJti8\",\"defaultScreen\":\"XyQLh\",\"title1\":\"qq91z\",\"title2\":\"nBhmk\",\"list\":\"WHWRs\",\"loginButton\":\"ZBlxr\"};","import classNames from 'classnames'\nimport React from 'react'\nimport s from './UserScreenContent.less'\n\nconst UserScreenContent = ({ children }) => <div className={classNames(s.root)}>{children}</div>\n\nexport default UserScreenContent\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"isc2_\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { USER_SCREENS } from '../../../store/ui/ui.constants'\nimport { selectIsUserScreenDefault } from '../../../store/ui/ui.selectors'\nimport { setUiUserScreen } from '../../../store/ui/uiSlice'\nimport arrowLeft from '../../genericComponents/assets/arrow-left.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './UserScreenHeader.less'\n\nconst UserScreenHeader = ({ children, rightChildren, noBar = false }) => {\n  const dispatch = useDispatch()\n  const isDefaultScreen = useSelector(selectIsUserScreenDefault)\n\n  const onBack = useEventCallback(() => dispatch(setUiUserScreen({ name: USER_SCREENS.default })))\n\n  return (\n    <div className={classNames(s.root, noBar && s.noBar)}>\n      <div className={s.left}>\n        {!isDefaultScreen && (\n          <div className={s.back} onClick={onBack}>\n            <SVGIcon url={arrowLeft} />\n          </div>\n        )}\n      </div>\n      <div className={`${s.title}`}>{children}</div>\n      <div className={s.right}>{rightChildren}</div>\n    </div>\n  )\n}\n\nexport default UserScreenHeader\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"r_ECQ\",\"noBar\":\"K91Zn\",\"left\":\"QIrjP\",\"right\":\"u8YOO\",\"title\":\"RQjDM\",\"back\":\"c8v2N\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"X_Yxe\",\"favIcon\":\"J2fa4\",\"favori\":\"lxcKr\",\"actions\":\"wOAgJ\",\"actionButton\":\"NWSRB\",\"content\":\"YRmUN\",\"clickableContent\":\"PwNsM\",\"label\":\"dQmMn\",\"address\":\"q2wwJ\",\"updating\":\"LRqKn\"};","import classnames from 'classnames'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { ROUTE_ADDRESS, ROUTE_SEO_GEOENTITY } from '../../../../routes'\nimport { resetGeoentityList } from '../../../../store/geoentity/geoentitySlice'\nimport { navigateTo } from '../../../../store/history/history.actions'\nimport { setSearchTerms } from '../../../../store/search/searchSlice'\nimport ActionButton from '../../../genericComponents/buttons/ActionButton'\nimport TagActionButton from '../../../genericComponents/TagActionButton'\nimport Throbber from '../../../loading/Throbber'\nimport SVGIcon from '../../../svg/SVGIcon'\nimport { useAction } from '../../../utils/react-redux'\nimport useEventCallback from '../../../utils/useEventCallback'\nimport s from './UserFavoriteItem.less'\n\nconst FavoriteContent = ({ label, address, tagData }) => {\n  return (\n    <TagActionButton className={s.content} {...tagData}>\n      {label ? (\n        <>\n          <div className={s.label}>{label}</div>\n          <div className={s.address}>{address}</div>\n        </>\n      ) : (\n        <div className={s.label}>{address}</div>\n      )}\n    </TagActionButton>\n  )\n}\n\nexport const UserFavoriteItem = ({\n  poiId,\n  uuid,\n  label,\n  address,\n  favIcon,\n  action,\n  actionIcon,\n  allowEmpty = false,\n  editTagData,\n  gotoTagData\n}) => {\n  const dispatch = useDispatch()\n  const updating = !allowEmpty && !uuid\n  const execNavigateTo = useAction(navigateTo)\n\n  const onItemClick = useEventCallback(() => {\n    if (!uuid) {\n      action()\n    } else {\n      dispatch(resetGeoentityList())\n      if (poiId) {\n        execNavigateTo({ route: ROUTE_SEO_GEOENTITY, routeOptions: { geoentityId: poiId } })\n      } else {\n        dispatch(setSearchTerms(address))\n        execNavigateTo({ route: ROUTE_ADDRESS, routeOptions: { location: address } })\n      }\n    }\n  }, [uuid, label, address, poiId])\n\n  const onButtonClick = useEventCallback(() => {\n    action(uuid)\n  })\n\n  return (\n    <div className={classnames(s.root, s.clickableContent, updating && s.updating)} onClick={onItemClick}>\n      <div className={classnames(s.favIcon, s[favIcon])}>\n        <SVGIcon icon={favIcon} />\n      </div>\n      <FavoriteContent label={label} address={address} tagData={gotoTagData} />\n      <div className={s.actions}>\n        {updating ? (\n          <Throbber />\n        ) : (\n          uuid && (\n            <ActionButton className={s.actionButton} tagData={editTagData} onClick={onButtonClick}>\n              <SVGIcon icon={actionIcon} />\n            </ActionButton>\n          )\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default UserFavoriteItem\n","import React, { useCallback, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { USER_SCREENS } from '../../../../store/ui/ui.constants'\nimport { deleteUserFavorite } from '../../../../store/userAccount/userAccount.actions'\nimport {\n  selectUserFavorites,\n  selectUserFavoritesLimitNotReached\n} from '../../../../store/userAccount/userAccount.selectors'\nimport RectangleActionButton, {\n  COLOR_GREEN_EMPTY,\n  SIZE_MEDIUM\n} from '../../../genericComponents/buttons/RectangleActionButton'\nimport { useT } from '../../../i18n/T'\nimport { useAction } from '../../../utils/react-redux'\nimport UserScreenContent from '../../shared/UserScreenContent'\nimport UserScreenHeader from '../../shared/UserScreenHeader'\nimport { FAVORITE_TYPES, HOME_ICON, WORK_ICON } from '../../UserAccount.constants'\nimport UserFavoriteItem from './UserFavoriteItem'\n\nimport { TAG_CLICK_USER_FAVORITES_LIST } from '../../../analytics/analytics.tagids.constants'\nimport { setUiUserScreen } from '../../../../store/ui/uiSlice'\nimport analyticsConstants from '../../../analytics/analytics.constants'\nimport { ACTION, TYPE } from '../../../analytics/ClickTagsService'\nimport { useTemporaryVisible } from '../../../genericComponents/useTemporaryVisible'\nimport UserFavoriteError from './UserFavoriteError'\nimport s from './UserManageFavorite.less'\n\nconst buildTagData = (type, action) => ({\n  type: TAG_CLICK_USER_FAVORITES_LIST,\n  tagInfo: { [ACTION]: action, [TYPE]: type }\n})\n\nconst UserFavorites = () => {\n  const dispatch = useDispatch()\n  const { home, work, others } = useSelector(selectUserFavorites) || {}\n  const execDeleteUserFavorite = useAction(deleteUserFavorite)\n  const [visible, setVisible] = useTemporaryVisible()\n  const [favoriteError, setFavoriteError] = useState()\n\n  const manageFavorite = type => dispatch(setUiUserScreen({ name: USER_SCREENS.manageFavorite, params: { type } }))\n  const deleteFavorite = useCallback(async uuid => {\n    const deleteFavoriteResult = await execDeleteUserFavorite({ uuid })\n\n    if (deleteFavoriteResult?.error) {\n      setVisible(true)\n      setFavoriteError(deleteFavoriteResult.error)\n    }\n  }, [])\n\n  const canStillAddFavorite = useSelector(selectUserFavoritesLimitNotReached)\n\n  const renderAddBtn = useCallback(() => {\n    if (canStillAddFavorite) {\n      return (\n        <RectangleActionButton\n          label=\"Ajouter\"\n          color={COLOR_GREEN_EMPTY}\n          size={SIZE_MEDIUM}\n          onClick={() => manageFavorite(FAVORITE_TYPES.OTHER)}\n          tagData={buildTagData(\n            analyticsConstants.user.favorites.type.other,\n            analyticsConstants.user.favorites.action.listAdd\n          )}\n        />\n      )\n    }\n  }, [manageFavorite])\n\n  return (\n    <>\n      {visible && <div className={s.errorMessage}>{favoriteError}</div>}\n      <UserScreenHeader rightChildren={renderAddBtn()}>{'Mes lieux favoris'}</UserScreenHeader>\n      <UserFavoriteError marginTop={-10} />\n      <UserScreenContent>\n        <UserFavoriteItem\n          key={home?.uuid}\n          address={useT('useraccount.favorite.type-your-address')} // that prop will be overrided by `...home` if favorite is set\n          favIcon={HOME_ICON} // that prop will be overrided but it’s usefull when no favorite exist\n          {...home}\n          action={() => manageFavorite(FAVORITE_TYPES.HOME)}\n          label={useT('useraccount.favorite.home')}\n          actionIcon={'crayon-v6'}\n          allowEmpty\n          editTagData={buildTagData(\n            analyticsConstants.user.favorites.type.home,\n            analyticsConstants.user.favorites.action.listEdit\n          )}\n          gotoTagData={buildTagData(\n            analyticsConstants.user.favorites.type.home,\n            analyticsConstants.user.favorites.action.listView\n          )}\n        />\n        <UserFavoriteItem\n          key={work?.uuid}\n          address={useT('useraccount.favorite.type-your-address')} // that prop will be overrided by `...work` if favorite is set\n          favIcon={WORK_ICON} // that prop will be overrided but it’s usefull when no favorite exist\n          {...work}\n          action={() => manageFavorite(FAVORITE_TYPES.WORK)}\n          label={useT('useraccount.favorite.work')}\n          actionIcon={'crayon-v6'}\n          allowEmpty\n          editTagData={buildTagData(\n            analyticsConstants.user.favorites.type.work,\n            analyticsConstants.user.favorites.action.listEdit\n          )}\n          gotoTagData={buildTagData(\n            analyticsConstants.user.favorites.type.work,\n            analyticsConstants.user.favorites.action.listView\n          )}\n        />\n        {(others || []).map((other, idx) => (\n          <UserFavoriteItem\n            key={other.uuid || idx}\n            {...other}\n            action={deleteFavorite}\n            actionIcon={'poubelle'}\n            editTagData={buildTagData(\n              analyticsConstants.user.favorites.type.other,\n              analyticsConstants.user.favorites.action.listDelete\n            )}\n            gotoTagData={buildTagData(\n              analyticsConstants.user.favorites.type.other,\n              analyticsConstants.user.favorites.action.listView\n            )}\n          />\n        ))}\n      </UserScreenContent>\n    </>\n  )\n}\n\nexport default UserFavorites\n","import classNames from 'classnames'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport { suggest } from '../../../../store/suggest/suggest.actions'\nimport { suggestServiceCtx } from '../../../../store/suggest/suggest.service.constants'\nimport { setSuggestInputValue } from '../../../../store/suggest/suggestSlice'\nimport s from './FavoriteInput.less'\n\nimport { useDispatch } from 'react-redux'\nimport { useAction } from '../../../utils/react-redux'\nimport useDebounce from '../../../utils/useDebounce'\n\nconst FavoriteInput = forwardRef((props, ref) => {\n  const { value, onChange, className, placeholder } = props\n\n  const dispatch = useDispatch()\n  const suggestFilterType = suggestServiceCtx.filter.places\n  const execSuggest = useAction(suggest)\n  const [cancelSuggest, setCancelSuggest] = useState(false)\n  const inputRef = useRef()\n  const debouncedValue = useDebounce(value, 250)\n  const hasDebouncedValueChangeOnce = useRef(false) // to ignore suggest on first render\n\n  const onSubmit = useCallback(() => {\n    dispatch(setSuggestInputValue(value))\n    setCancelSuggest(true)\n    return Promise.resolve().then(() => blur())\n  }, [value])\n\n  useImperativeHandle(ref, () => {\n    return { onSubmit }\n  })\n\n  const doSuggest = val => {\n    if (cancelSuggest) {\n      setCancelSuggest(false)\n      return Promise.resolve()\n    }\n    dispatch(setSuggestInputValue(val))\n    return execSuggest({ terms: val, suggestFilterType })\n  }\n\n  useEffect(() => {\n    if (hasDebouncedValueChangeOnce.current) {\n      doSuggest(debouncedValue)\n    }\n    hasDebouncedValueChangeOnce.current = true\n  }, [debouncedValue])\n\n  const handleChange = event => {\n    onChange?.({ value: event.target.value })\n  }\n\n  const handleFocus = e => {\n    e.target.select()\n    doSuggest(value)\n  }\n\n  const blur = () => inputRef?.current.blur()\n\n  return (\n    <div className={classNames(s.container, className)}>\n      <input\n        ref={inputRef}\n        type=\"text\"\n        id=\"favoriteInput\"\n        value={value}\n        className={s.field}\n        placeholder={placeholder}\n        onFocus={handleFocus}\n        onChange={handleChange}\n        autoComplete=\"off\"\n        autoFocus\n      />\n    </div>\n  )\n})\n\nFavoriteInput.displayName = 'FavoriteInput'\nexport default FavoriteInput\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"mCyYc\",\"field\":\"AP75X\"};","import React, { useCallback, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { USER_SCREENS } from '../../../../store/ui/ui.constants'\nimport { selectFavoritePlaceholder, selectUserUIScreenParams } from '../../../../store/ui/ui.selectors'\nimport { setUiUserScreen } from '../../../../store/ui/uiSlice'\nimport {\n  addOrEditHomeOrWorkUserFavorite,\n  addUserOtherFavorite\n} from '../../../../store/userAccount/userAccount.actions'\nimport { selectUserFavorites } from '../../../../store/userAccount/userAccount.selectors'\nimport { pick } from '../../../../utils/object'\nimport { equalsIgnoreCase, removeHtmlEmSpanAndITags } from '../../../../utils/string'\nimport arrowLeft from '../../../genericComponents/assets/arrow-left.svg'\nimport { useTemporaryVisible } from '../../../genericComponents/useTemporaryVisible'\nimport SuggestContent from '../../../suggest/SuggestContent'\nimport SVGIcon from '../../../svg/SVGIcon'\nimport { useAction } from '../../../utils/react-redux'\nimport { FAVORITE_TYPES } from '../../UserAccount.constants'\nimport FavoriteInput from './FavoriteInput'\nimport s from './UserManageFavorite.less'\n\nconst UserManageFavorite = () => {\n  const dispatch = useDispatch()\n  const navigateBack = () => dispatch(setUiUserScreen({ name: USER_SCREENS.favorites }))\n  const { type } = useSelector(selectUserUIScreenParams)\n  const favorites = useSelector(selectUserFavorites)\n  const execSaveUserOtherFavorite = useAction(addUserOtherFavorite)\n  const execAddOrEditHorOrWorkUserFavorite = useAction(addOrEditHomeOrWorkUserFavorite)\n  const initialValue = favorites?.[type]?.address ?? ''\n  const [value, setValue] = useState(initialValue)\n  const [visible, setVisible] = useTemporaryVisible()\n  const [favoriteError, setFavoriteError] = useState()\n\n  const placeholder = useSelector(selectFavoritePlaceholder)\n\n  const onSuggestClicked = useCallback(\n    async suggestion => {\n      const isPoi = suggestion.type === 'poi'\n      const address = removeHtmlEmSpanAndITags(isPoi ? suggestion.labels[1] : suggestion.labels.join(' '))\n\n      if (equalsIgnoreCase(type, FAVORITE_TYPES.OTHER)) {\n        const favorite = {\n          ...(isPoi ? { label: removeHtmlEmSpanAndITags(suggestion.labels[0]) } : {}),\n          address,\n          type\n        }\n\n        const saveOtherResult = await execSaveUserOtherFavorite(favorite)\n\n        if (saveOtherResult?.error) {\n          setVisible(true)\n          setFavoriteError(saveOtherResult.error)\n\n          return\n        }\n      } else {\n        const favorite = {\n          ...pick(favorites?.[type] ?? {}, ['uuid', 'showHome']),\n          address,\n          type\n        }\n\n        const saveHomeOrWorkResult = await execAddOrEditHorOrWorkUserFavorite(favorite)\n\n        if (saveHomeOrWorkResult?.error) {\n          setVisible(true)\n          setFavoriteError(saveHomeOrWorkResult.error)\n\n          return\n        }\n      }\n      navigateBack()\n    },\n    [setVisible, setFavoriteError, execAddOrEditHorOrWorkUserFavorite]\n  )\n\n  const onChange = ({ value: val }) => {\n    setValue(val)\n  }\n\n  return (\n    <div className={s.root}>\n      {visible && <div className={s.errorMessage}>{favoriteError}</div>}\n      <div className={s.search}>\n        <div className={s.back} onClick={navigateBack}>\n          <SVGIcon url={arrowLeft} />\n        </div>\n        <form className={s.form} onSubmit={e => e.preventDefault()}>\n          <FavoriteInput placeholder={placeholder} value={value} onChange={onChange} />\n        </form>\n      </div>\n      <div className={s.suggest}>\n        <SuggestContent onClick={onSuggestClicked} withoutFavorites />\n      </div>\n    </div>\n  )\n}\n\nexport default UserManageFavorite\n","import React, { useEffect } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { fetchItineraryOptionsConfig } from '../../../../store/itineraryOptions/itineraryOptions.actions'\nimport { USER_SCREENS } from '../../../../store/ui/ui.constants'\nimport { setUiUserScreen } from '../../../../store/ui/uiSlice'\nimport { withEmptyFallbackErrorBoundary } from '../../../error/EmptyFallbackErrorBoundary'\nimport RectangleActionButton, { COLOR_GREEN, SIZE_BIG } from '../../../genericComponents/buttons/RectangleActionButton'\nimport ItineraryOptions from '../../../itineraryOptions/ItineraryOptions'\nimport { useAction } from '../../../utils/react-redux'\nimport useEventCallback from '../../../utils/useEventCallback'\nimport UserScreenContent from '../../shared/UserScreenContent'\nimport UserScreenHeader from '../../shared/UserScreenHeader'\nimport s from './UserItineraryOptions.less'\n\nconst UserItineraryOptions = () => {\n  const dispatch = useDispatch()\n  const execFetchItineraryOptionsConfig = useAction(fetchItineraryOptionsConfig)\n\n  useEffect(() => {\n    execFetchItineraryOptionsConfig()\n  }, [])\n\n  const onValidate = useEventCallback(() => dispatch(setUiUserScreen({ name: USER_SCREENS.default })))\n\n  return (\n    <>\n      <UserScreenHeader>{'Mes options de déplacement'}</UserScreenHeader>\n      <UserScreenContent>\n        <div className={s.optionsWrapper}>\n          <ItineraryOptions />\n          <div className={s.ValidateArea}>\n            <RectangleActionButton\n              onClick={onValidate}\n              size={SIZE_BIG}\n              color={COLOR_GREEN}\n              className={s.ValidateButton}\n              label=\"itinerary.options.validate\"\n            />\n          </div>\n        </div>\n      </UserScreenContent>\n    </>\n  )\n}\n\nexport default withEmptyFallbackErrorBoundary(UserItineraryOptions)\n","// extracted by mini-css-extract-plugin\nexport default {\"optionsWrapper\":\"z4kb2\",\"ValidateArea\":\"SF1t2\",\"ValidateButton\":\"ZICQY\"};","import React from 'react'\nimport useEventCallback from '../../../utils/useEventCallback'\nimport TagActionButton from '../../../genericComponents/TagActionButton'\nimport { TAG_CLICK_USER_LOGOUT_BUTTON } from '../../../analytics/analytics.tagids.constants'\nimport { useSelector } from 'react-redux'\nimport { selectPrevFullRouteNonPageLess } from '../../../../store/history/history.selectors'\nimport useKeycloak from '../../useKeycloak'\n\nconst UserLogout = ({ children }) => {\n  const { loaded, keycloak } = useKeycloak()\n  const lastFullRoute = useSelector(selectPrevFullRouteNonPageLess)\n\n  const onLogout = useEventCallback(() => {\n    keycloak?.logout({ redirectUri: `${location.origin}${lastFullRoute}` })\n  }, [loaded, keycloak, lastFullRoute])\n\n  if (!loaded) return <></>\n\n  return (\n    <TagActionButton type={TAG_CLICK_USER_LOGOUT_BUTTON} onClick={onLogout} deferClick>\n      {children}\n    </TagActionButton>\n  )\n}\n\nexport default UserLogout\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"jz8gY\",\"content\":\"zqsGk\",\"avatar\":\"SSjWo\",\"username\":\"PPXlE\",\"logout\":\"Lp1YC\",\"userMenu\":\"uVTXf\",\"userMenuFooter\":\"JU6ZV\",\"userMenuItem\":\"M2Vc3\",\"userMenuItemAccount\":\"jntOS\",\"userMenuItemIcon\":\"DShSd\",\"userMenuItemLabel\":\"CZ9sE\",\"userMenuItemArrow\":\"UcCdo\",\"userMenuLogoutIcon\":\"sjI3b\"};","import React, { useCallback, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { getService } from '../../../../parameters'\nimport SERVICES from '../../../../services.constants'\nimport { TAG_CLICK_USER_ACCOUNT_BUTTON } from '../../../analytics/analytics.tagids.constants'\nimport { USER_SCREENS } from '../../../../store/ui/ui.constants'\nimport { setUiUserScreen } from '../../../../store/ui/uiSlice'\nimport { loadUserFavorites, loadUserItineraryOptions } from '../../../../store/userAccount/userAccount.actions'\nimport { selectUserName } from '../../../../store/userAccount/userAccount.selectors'\nimport { noop } from '../../../../utils/function'\nimport TagActionLink from '../../../genericComponents/TagActionLink'\nimport arrowRight from '../../../genericComponents/assets/arrow-right.svg'\nimport powerOff from '../../../genericComponents/assets/power-off.svg'\nimport { useTemporaryVisible } from '../../../genericComponents/useTemporaryVisible'\nimport SVGIcon from '../../../svg/SVGIcon'\nimport { useAction } from '../../../utils/react-redux'\nimport UserPicture from '../../UserPicture'\nimport CloseUserAreaButton from '../../shared/CloseUserAreaButton'\nimport UserScreenContent from '../../shared/UserScreenContent'\nimport useKeycloak from '../../useKeycloak'\nimport sUserManageFavorite from '../userFavorites/UserManageFavorite.less'\nimport UserLogout from './UserLogout'\nimport s from './UserMenu.less'\n\nconst UserMenuItem = ({ action = noop, icon, label }) => (\n  <li onClick={action} className={s.userMenuItem}>\n    <SVGIcon icon={icon} className={s.userMenuItemIcon} />\n    <div className={s.userMenuItemLabel}>{label}</div>\n    <SVGIcon url={arrowRight} className={s.userMenuItemArrow} />\n  </li>\n)\n\nconst UserMenuAccount = ({ url, label, tagType }) => (\n  <TagActionLink type={tagType} href={url} className={s.userMenuItemAccount}>\n    {label}\n  </TagActionLink>\n)\n\nconst UserMenu = () => {\n  const dispatch = useDispatch()\n  const userName = useSelector(selectUserName)\n  const execLoadUserFavorites = useAction(loadUserFavorites)\n  const execLoadUserItineraryOptions = useAction(loadUserItineraryOptions)\n  const { loaded, keycloak } = useKeycloak()\n  const [visible, setVisible] = useTemporaryVisible()\n  const [userMenuError, setUserMenuError] = useState()\n\n  const accountUrl = getService(\n    SERVICES.KEYCLOAK,\n    `realms/mappy/mappy_account-redirection-service?token=${\n      keycloak?.token\n    }&referrer=web-login&logout_redirect_uri=${encodeURIComponent(\n      window.location.href\n    )}&delete_redirect_uri=${encodeURIComponent(window.location.origin)}`\n  ).url\n\n  const gotoItineraryOptionsScreen = useCallback(async () => {\n    const loadItineraryOptionsResult = await execLoadUserItineraryOptions()\n\n    if (loadItineraryOptionsResult?.error) {\n      setVisible(true)\n      setUserMenuError(loadItineraryOptionsResult.error)\n    }\n\n    dispatch(setUiUserScreen({ name: USER_SCREENS.itineraryOptions }))\n  }, [])\n\n  const gotoFavoritesScreen = useCallback(async () => {\n    const loadFavoritesResult = await execLoadUserFavorites()\n\n    if (loadFavoritesResult?.error) {\n      setVisible(true)\n      setUserMenuError(loadFavoritesResult.error)\n    }\n\n    dispatch(setUiUserScreen({ name: USER_SCREENS.favorites }))\n  }, [])\n\n  if (!loaded) return <></>\n\n  return (\n    <div className={s.root}>\n      {visible && <div className={sUserManageFavorite.errorMessage}>{userMenuError}</div>}\n      <CloseUserAreaButton />\n      <UserScreenContent>\n        <div className={s.content}>\n          <div className={s.avatar}>\n            <UserPicture />\n          </div>\n          <div className={s.username}>{userName}</div>\n          <ul className={s.userMenu}>\n            <UserMenuItem label={'Mes lieux favoris'} icon={'coeur'} action={gotoFavoritesScreen} />\n            <UserMenuItem label={'Mes options de déplacement'} icon={'rouage'} action={gotoItineraryOptionsScreen} />\n          </ul>\n          <div className={s.userMenuFooter}>\n            <UserMenuAccount label={'Gérer mon compte'} url={accountUrl} tagType={TAG_CLICK_USER_ACCOUNT_BUTTON} />\n            <UserLogout>\n              <div className={s.logout}>\n                <span className={s.userMenuLogoutIcon}>\n                  <SVGIcon url={powerOff} className={s.userMenuItemIcon} />\n                </span>\n                Se déconnecter\n              </div>\n            </UserLogout>\n          </div>\n        </div>\n      </UserScreenContent>\n    </div>\n  )\n}\n\nexport default UserMenu\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { USER_SCREENS } from '../../../store/ui/ui.constants'\nimport { selectUserUIScreen } from '../../../store/ui/ui.selectors'\nimport { withUserConnected } from '../shared/withKeycloak'\nimport UserFavorites from './userFavorites/UserFavorites'\nimport UserManageFavorite from './userFavorites/UserManageFavorite'\nimport UserItineraryOptions from './userItineraryOptions/UserItineraryOptions'\nimport UserMenu from './userMenu/UserMenu'\n\nconst UserAreaConnected = () => {\n  const screen = useSelector(selectUserUIScreen)\n\n  switch (screen) {\n    case USER_SCREENS.favorites:\n      return <UserFavorites />\n    case USER_SCREENS.manageFavorite:\n      return <UserManageFavorite />\n    case USER_SCREENS.itineraryOptions:\n      return <UserItineraryOptions />\n    case USER_SCREENS.default:\n    default:\n      return <UserMenu />\n  }\n}\n\nexport default withUserConnected(UserAreaConnected)\n","import React from 'react'\nimport ContentLoader from 'react-content-loader'\nimport { withUserUnknown } from './shared/withKeycloak'\nimport CloseUserAreaButton from './shared/CloseUserAreaButton'\n\nconst UserAreaPlaceHolder = () => {\n  return (\n    <div>\n      <CloseUserAreaButton />\n      <ContentLoader\n        speed={2}\n        width={400}\n        height={600}\n        viewBox=\"0 0 400 600\"\n        backgroundColor=\"#e6e6e6\"\n        foregroundColor=\"#cdcdcd\"\n      >\n        <rect x=\"163\" y=\"144\" rx=\"5\" ry=\"5\" width=\"88\" height=\"15\" />\n        <rect x=\"72\" y=\"198\" rx=\"5\" ry=\"5\" width=\"137\" height=\"13\" />\n        <rect x=\"36\" y=\"179\" rx=\"5\" ry=\"5\" width=\"343\" height=\"1\" />\n        <circle cx=\"207\" cy=\"82\" r=\"44\" />\n        <rect x=\"36\" y=\"236\" rx=\"5\" ry=\"5\" width=\"343\" height=\"1\" />\n        <rect x=\"36\" y=\"293\" rx=\"5\" ry=\"5\" width=\"343\" height=\"1\" />\n        <circle cx=\"47\" cy=\"264\" r=\"9\" />\n        <rect x=\"38\" y=\"198\" rx=\"5\" ry=\"5\" width=\"19\" height=\"19\" />\n        <rect x=\"36\" y=\"349\" rx=\"5\" ry=\"5\" width=\"343\" height=\"1\" />\n        <rect x=\"72\" y=\"255\" rx=\"5\" ry=\"5\" width=\"106\" height=\"13\" />\n        <circle cx=\"47\" cy=\"321\" r=\"9\" />\n        <rect x=\"72\" y=\"312\" rx=\"5\" ry=\"5\" width=\"191\" height=\"13\" />\n      </ContentLoader>\n    </div>\n  )\n}\n\nexport default withUserUnknown(UserAreaPlaceHolder)\n","import classNames from 'classnames'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { selectIsUserAccountEnabled } from '../../store/userAccount/userAccount.selectors'\nimport useUIDisplay from '../ui/useUIDisplay'\nimport { withEverySelectorTruthy } from '../utils/react-redux'\nimport UserAreaAnonymous from './anonymous/UserAreaAnonymous'\nimport UserAreaConnected from './connected/UserAreaConnected'\nimport { useKeycloakEngine } from './useKeycloak'\nimport s from './UserArea.less'\nimport UserAreaPlaceHolder from './UserAreaPlaceHolder'\n\n// webpack:BrowserOnly\nconst UserArea = () => {\n  const { isUIDisplayed } = useUIDisplay(UI_ELEMENTS.USER)\n  useKeycloakEngine()\n\n  return (\n    <>\n      <Helmet>\n        <body className={classNames(isUIDisplayed && 'unscrollable')} />\n      </Helmet>\n      <div className={classNames(s.root, isUIDisplayed && s.displayed)}>\n        <UserAreaPlaceHolder />\n        <UserAreaAnonymous />\n        <UserAreaConnected />\n      </div>\n    </>\n  )\n}\n\nexport default withEverySelectorTruthy(selectIsUserAccountEnabled)(UserArea)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"rbPGM\",\"displayed\":\"nRb7m\",\"frame\":\"Lo3bS\"};","// extracted by mini-css-extract-plugin\nexport default {\"carrouselSection\":\"vQKHy\",\"carrouselTextSection\":\"ny_lL\",\"sectionTitle\":\"eejTS\",\"popinList\":\"Sat9v\",\"popinItem\":\"JuNzp\",\"icon\":\"dzcIB\",\"bullet\":\"ynt7H\",\"highlightedBullet\":\"XxGga\",\"carrouselBullets\":\"OFaFy\",\"arrowContainer\":\"ycsWM\",\"navArrow\":\"nCvma\",\"imageCarrousel\":\"Beuf0\",\"galleryWrapper\":\"zvi1K\"};","import React, { useRef, useState } from 'react'\nimport { withOnlyGE } from '../../Device'\nimport ImageGallery from '../../genericComponents/ImageGallery'\nimport arrowLeft from '../../genericComponents/assets/arrow-left.svg'\nimport arrowRight from '../../genericComponents/assets/arrow-right.svg'\nimport point from '../../genericComponents/assets/point.svg'\nimport star from '../../genericComponents/assets/star.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport s from './UserAccountIncentiveCarrousel.less'\nimport favoriteAddressesImg from './favorite_addresses.png'\nimport favoriteAddressesImgWebp from './favorite_addresses.webp'\nimport myAlertsImg from './my_alerts.png'\nimport myAlertsWebp from './my_alerts.webp'\nimport myOptionsImg from './my_options.png'\nimport myOptionsWebp from './my_options.webp'\nimport tripPriceImg from './trip_price.png'\nimport tripPriceWebp from './trip_price.webp'\n\nconst imageList = [\n  {\n    alt: 'Coût des mes trajets',\n    original: tripPriceImg,\n    srcSet: [tripPriceWebp]\n  },\n  {\n    alt: 'Mes adresses favorites',\n    original: favoriteAddressesImg,\n    srcSet: [favoriteAddressesImgWebp]\n  },\n  {\n    alt: 'Mes options de déplacement',\n    original: myOptionsImg,\n    srcSet: [myOptionsWebp]\n  },\n  {\n    alt: 'Mes alertes',\n    original: myAlertsImg,\n    srcSet: [myAlertsWebp]\n  }\n]\n\nexport const UserAccountIncentiveCarrousel = withOnlyGE(() => {\n  const [textIndex, setTextIndex] = useState(0)\n  const galleryRef = useRef()\n\n  const onBeforeSlide = nextIndex => {\n    setTextIndex(nextIndex)\n  }\n\n  /*\n    Calling `pause` before `slideToIndex` allows to reset the `slideInterval`\n    So the `autoplay` won't use the remaining time but will reset it before sliding\n   */\n  const goToPreviousSlide = () => {\n    galleryRef.current.pause()\n    galleryRef.current.slideToIndex(galleryRef.current.getCurrentIndex() - 1)\n    galleryRef.current.play()\n  }\n\n  const goToNextSlide = () => {\n    galleryRef.current.pause()\n    galleryRef.current.slideToIndex(galleryRef.current.getCurrentIndex() + 1)\n    galleryRef.current.play()\n  }\n\n  const isBulletHighlighted = bulletIndex => (textIndex === bulletIndex ? s.highlightedBullet : s.bullet)\n\n  return (\n    <div className={s.carrouselSection}>\n      <div className={s.imageCarrousel}>\n        <div className={s.arrowContainer} onClick={goToPreviousSlide}>\n          <SVGIcon url={arrowLeft} className={s.navArrow} />\n        </div>\n        <div className={s.galleryWrapper}>\n          <ImageGallery\n            ref={galleryRef}\n            items={imageList}\n            onBeforeSlide={onBeforeSlide}\n            autoPlay\n            slideInterval={5000}\n          />\n        </div>\n        <div className={s.arrowContainer} onClick={goToNextSlide}>\n          <SVGIcon url={arrowRight} className={s.navArrow} />\n        </div>\n      </div>\n      {textIndex === 0 && (\n        <div className={s.carrouselTextSection}>\n          <h2 className={s.sectionTitle}>Je calcule le coût exact de mes trajets</h2>\n          <ul className={s.popinList}>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Prix du péage selon le véhicule\n            </li>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Consommation en carburant\n            </li>\n          </ul>\n        </div>\n      )}\n      {textIndex === 1 && (\n        <div className={s.carrouselTextSection}>\n          <h2 className={s.sectionTitle}>Je trouve en un clic mes adresses favorites</h2>\n          <ul className={s.popinList}>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Maison\n            </li>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Travail\n            </li>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Resto préféré...\n            </li>\n          </ul>\n        </div>\n      )}\n      {textIndex === 2 && (\n        <div className={s.carrouselTextSection}>\n          <h2 className={s.sectionTitle}>Je retrouve mes options sur le site et l’appli mobile</h2>\n          <ul className={s.popinList}>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Type de véhicule\n            </li>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Prix du carburant\n            </li>\n            <li className={s.popinItem}>\n              <SVGIcon url={star} className={s.icon} />\n              Vitesse de marche ou à vélo\n            </li>\n          </ul>\n        </div>\n      )}\n      {textIndex === 3 && (\n        <div className={s.carrouselTextSection}>\n          <h2 className={s.sectionTitle}>Je suis alerté des perturbations trafic</h2>\n          <ul className={s.popinList}>\n            <li className={s.popinItem}>Aujourd’hui sur l’appli et demain sur le site web</li>\n          </ul>\n        </div>\n      )}\n      <div className={s.carrouselBullets}>\n        <SVGIcon url={point} className={isBulletHighlighted(0)} />\n        <SVGIcon url={point} className={isBulletHighlighted(1)} />\n        <SVGIcon url={point} className={isBulletHighlighted(2)} />\n        <SVGIcon url={point} className={isBulletHighlighted(3)} />\n      </div>\n    </div>\n  )\n})\n","// extracted by mini-css-extract-plugin\nexport default {\"popin\":\"En97Z\",\"connectionSection\":\"MrY0e\",\"title1\":\"QGGz5\",\"title2\":\"KTMCC\",\"onCloseButton\":\"quH5P\",\"list\":\"PMlkc\",\"incentiveIllustration\":\"h5JvH\"};","import React, { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { TAG_MULTIPATH_CTA } from '../../analytics/analytics.tagids.constants'\nimport { MODAL_IDS } from '../../../store/ui/ui.constants'\nimport { selectShouldDisplayUserAccountIncentivePopin } from '../../../store/userAccount/userAccount.selectors'\nimport useConfigureAndSendTag from '../../analytics/useConfigureAndSendTag'\nimport { isPE, withOnlyPE } from '../../Device'\nimport { PUB_TAG } from '../../analytics/PublisherTagsService'\nimport LogoMappyImg from '../../genericComponents/LogoMappyImg'\nimport Modal from '../../genericComponents/Modal'\nimport cross from '../../genericComponents/assets/cross.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport useModal from '../../ui/useModal'\nimport useEventCallback from '../../utils/useEventCallback'\nimport UserLoginButton from '../UserLoginButton'\nimport incentiveIllustration from '../anonymous/welcome-user-account.svg'\nimport { withUserNotConnected } from '../shared/withKeycloak'\nimport { UserAccountIncentiveCarrousel } from './UserAccountIncentiveCarrousel'\nimport s from './UserAccountIncentivePopin.less'\nimport { INCENTIVE_NAME } from './incentive.constants'\n\n// webpack:BrowserOnly\nconst UserAccountIncentivePopin = () => {\n  const shouldDisplayPopin = useSelector(selectShouldDisplayUserAccountIncentivePopin)\n  const { displayModal, hideModal, isModalDisplayed } = useModal(MODAL_IDS.USER_ACCOUNT_INCENTIVE_POPIN)\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  const onPopinClose = useEventCallback(hideModal)\n\n  useEffect(() => {\n    if (shouldDisplayPopin) {\n      displayModal()\n    }\n  }, [shouldDisplayPopin])\n\n  useEffect(() => {\n    if (!isModalDisplayed) return\n\n    configureAndSendTag({\n      type: TAG_MULTIPATH_CTA,\n      tagInfo: { tag: PUB_TAG.PUB_COMPTE_PERSO_INCITATION, Incitation: INCENTIVE_NAME.incitationPrincipale },\n      isImpression: true\n    })\n  }, [isModalDisplayed])\n\n  return (\n    <Modal modalId={MODAL_IDS.USER_ACCOUNT_INCENTIVE_POPIN}>\n      <div className={s.popin}>\n        <div className={s.connectionSection}>\n          {isPE() && <img className={s.incentiveIllustration} src={incentiveIllustration} />}\n          <p className={s.title1}>\n            Le compte <LogoMappyImg />\n          </p>\n          <p className={s.title2}>c’est gratuit !</p>\n          <SmallScreenText />\n          <UserLoginButton />\n        </div>\n        <div className={s.onCloseButton} onClick={onPopinClose}>\n          <SVGIcon url={cross} />\n        </div>\n        <UserAccountIncentiveCarrousel />\n      </div>\n    </Modal>\n  )\n}\n\nconst SmallScreenText = withOnlyPE(() => {\n  return (\n    <ul className={s.list}>\n      <li>Des itinéraires personnalisés</li>\n      <li>Des infos durée et coût plus précises</li>\n      <li>Mes adresses favorites sur le site et l’appli</li>\n    </ul>\n  )\n})\n\nexport default withUserNotConnected(UserAccountIncentivePopin)\n","import React from 'react'\nimport { isProduction } from '../../parameters'\nimport { CustomPurposes, CustomVendors } from '../cmp/cmp.constants'\n\nconst getDomainforUtiq = () => (isProduction() ? 'mappy' : 'mappyrecette')\n\nconst UtiqLoader = () => {\n  const domainForUtiq = getDomainforUtiq()\n  return (\n    <>\n      <script\n        type=\"text/javascript\"\n        dangerouslySetInnerHTML={{\n          __html: `window.Utiq = window.Utiq || {}\nwindow.Utiq.config = {\n  CMP: \"Didomi\",\n  customUtiqHost: \"https://utiq.${domainForUtiq}.com\",\n  didomiUtiqPurposeId: \"${CustomPurposes.Utiq}\",\n  didomiUtiqVendorId: \"${CustomVendors.Utiq}\"\n};\n`\n        }}\n      ></script>\n      <script type=\"text/javascript\" src={`https://utiq.${domainForUtiq}.com/utiqLoader.js`} defer></script>\n    </>\n  )\n}\n\nexport default UtiqLoader\n","import { DidomiSDK } from '@didomi/react'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { registerConsent } from '../../store/cmp/cmpSlice.js'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport CMPService from './CMPService'\nimport { DIDOMI_API_KEY, DIDOMI_NOTICE_ID } from './cmp.constants.js'\n\n// webpack:BrowserOnly\nexport default withEmptyFallbackErrorBoundary(function CMPPlaceholder() {\n  const dispatch = useDispatch()\n\n  return (\n    <DidomiSDK\n      iabVersion={2}\n      apiKey={DIDOMI_API_KEY}\n      noticeId={DIDOMI_NOTICE_ID}\n      sdkPath=\"//privacy.mappy.com/\"\n      onReady={didomiSDK => {\n        CMPService.setSDK(didomiSDK)\n        dispatch(registerConsent(CMPService.getConsents()))\n        CMPService.onCmpReady()\n      }}\n      onConsentChanged={() => {\n        dispatch(registerConsent(CMPService.getConsents()))\n        CMPService.onConsentChanged()\n      }}\n    />\n  )\n})\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"sKd9h\",\"textContainer\":\"cMlgA\",\"textContent\":\"SaUk3\",\"onCloseButton\":\"ZUzZ0\"};","import React, { useCallback, useEffect, useState } from 'react'\nimport s from './AlertBanner.less'\nimport SVGIcon from '../svg/SVGIcon'\nimport cross from '../genericComponents/assets/cross.svg'\nimport { requestAlertBanner } from './cms.client.requests'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectIsAlertBannerDisplayed } from '../../store/ui/ui.selectors'\nimport { hideAlertBanner } from '../../store/ui/uiSlice'\n\nconst AlertBanner = () => {\n  const dispatch = useDispatch()\n  const [bannerContent, setBannerContent] = useState(null)\n  const shouldBannerBeDisplayed = useSelector(selectIsAlertBannerDisplayed)\n\n  useEffect(() => {\n    const fetchBannerContent = async () => {\n      const alertBannerContent = await requestAlertBanner()\n\n      if (alertBannerContent !== bannerContent) setBannerContent(alertBannerContent)\n    }\n\n    fetchBannerContent()\n  }, [setBannerContent])\n\n  const onCloseButton = useCallback(() => {\n    dispatch(hideAlertBanner())\n  }, [])\n\n  if (!bannerContent || !shouldBannerBeDisplayed) return <></>\n\n  const { description, redirection, backgroundColor } = bannerContent\n\n  return (\n    <div className={s.root} style={{ backgroundColor }}>\n      {redirection ? (\n        <a className={s.textContainer} href={redirection} target=\"_blank\" rel=\"noreferrer\">\n          <span className={s.textContent}>{description}</span>\n        </a>\n      ) : (\n        <div className={s.textContainer}>\n          <span className={s.textContent}>{description}</span>\n        </div>\n      )}\n      <div className={s.onCloseButton} onClick={onCloseButton}>\n        <SVGIcon url={cross} />\n      </div>\n    </div>\n  )\n}\n\nexport default AlertBanner\n","import { getService } from '../../parameters'\nimport SERVICES from '../../services.constants'\nimport request from '../utils/request'\n\nexport const requestAlertBanner = () => {\n  return request\n    .get(getService(SERVICES.ALERT_BANNER))\n    .then(({ data }) => data.data)\n    .catch(e => {\n      console.warn('failed to fetch alert banner', e)\n      return null\n    })\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"tUwQh\",\"borderless\":\"dMfiA\",\"categories\":\"e8FTY\",\"autoPromoButton\":\"FwtHk\"};","import classnames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectAdDataByAdId, selectPageIdForAdConfig } from '../../store/ad/ad.selectors'\nimport { selectCategorySegmentByCategoryId } from '../../store/poiassets/poiassets.selectors'\nimport { isEmptyObj } from '../../utils/object'\nimport DelayComponent from '../utils/DelayComponent'\nimport { useSelectorWithProps } from '../utils/react-redux'\nimport { getAdIdByAdName } from './AdConfigService'\nimport AdLoader from './AdLoader'\nimport s from './AdMenu.less'\n\nconst adName = 'menuthema'\n\nconst AdMenu = ({ categoryId }) => {\n  const segment = useSelectorWithProps(selectCategorySegmentByCategoryId, { id: categoryId })\n  const pageId = useSelector(selectPageIdForAdConfig)\n  const adId = getAdIdByAdName(adName, pageId)\n  const adData = useSelectorWithProps(selectAdDataByAdId, { adId })\n  const { Menuthema } = adData || {}\n  const { title, text, linkLabel, imgUrl, linkUrl } = Menuthema || {}\n\n  return (\n    <DelayComponent key={`delay-adloader-${categoryId}`} delay={200}>\n      <AdLoader key={`adloader-${categoryId}`} adName={adName} askData keywords={{ segment }}>\n        <div className={classnames(s.container, isEmptyObj(adData) && s.hidden)}>\n          {!isEmptyObj(adData) && (\n            <a className={s.linkWrapper} href={linkUrl} target=\"_blank\" rel=\"nofollow noopener noreferrer\">\n              <img className={s.logo} src={imgUrl} />\n\n              <div className={s.message}>\n                <div className={s.title}>{title}</div>\n                {text} <span className={s.label}>{linkLabel}</span>\n              </div>\n            </a>\n          )}\n        </div>\n      </AdLoader>\n    </DelayComponent>\n  )\n}\n\nexport default AdMenu\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"UAPRB\",\"linkWrapper\":\"jPfz6\",\"logo\":\"R8onm\",\"title\":\"uToUc\",\"message\":\"u1HvF\",\"label\":\"caeoa\",\"hidden\":\"cfUNZ\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { selectSubCategoriesMenu } from '../../store/poiassets/poiassets.selectors'\nimport AdMenu from '../advertising/AdMenu'\nimport { useSelectorWithProps } from '../utils/react-redux'\nimport useTimeout from '../utils/useTimeout'\nimport CategorySubMenuStyle from './CategorySubMenuStyle'\nimport MenuApplicationItem from './MenuApplicationItem'\nimport s from './MenuSubCategoriesGE.less'\nimport MenuSubCategoryItem from './MenuSubCategoryItem'\nimport usePublisherBarreCategorieTag from './usePublisherBarreCategorieTag'\n\nconst MenuSubCategoriesGE = ({ categoryId, onMouseLeaveMenu }) => {\n  const { subcategories, apps, color } = useSelectorWithProps(selectSubCategoriesMenu, { id: categoryId })\n  const [setMouseOverTimeout, clearMouveOverTimeout] = useTimeout(150)\n\n  usePublisherBarreCategorieTag(categoryId)\n\n  if (!categoryId) return <></>\n\n  const onMouseOver = () => clearMouveOverTimeout()\n\n  const onMouseOut = () => setMouseOverTimeout(() => onMouseLeaveMenu())\n\n  const columnCount = 2 + Number(subcategories.length > 5) + Number(apps.length > 5)\n\n  return (\n    <div className={s.container} onMouseOver={onMouseOver} onMouseOut={onMouseOut}>\n      <div className={classNames(s.itemsWrapper, `cols-${columnCount}`)}>\n        <ul className={s.items}>\n          {subcategories.map(({ id, iconId, label, rubricIds }) => (\n            <MenuSubCategoryItem\n              key={`subcategory-${id}`}\n              id={id}\n              iconId={iconId}\n              label={label}\n              rubricIds={rubricIds}\n              categoryId={categoryId}\n              onClick={onMouseOut}\n            />\n          ))}\n          <li className={s.columnBreak} />\n          {apps.map(({ id, name, mob_roundImage }) => (\n            <MenuApplicationItem\n              key={`app-${id}`}\n              id={id}\n              logo={mob_roundImage}\n              name={name}\n              categoryId={categoryId}\n              onClick={onMouseOut}\n            />\n          ))}\n        </ul>\n        <CategorySubMenuStyle color={color} />\n      </div>\n      <AdMenu categoryId={categoryId} />\n    </div>\n  )\n}\n\nexport default MenuSubCategoriesGE\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"d8pmR\",\"itemsWrapper\":\"M8_Gd\",\"items\":\"dUxyB\",\"columnBreak\":\"JqkZ_\"};","import React, { useEffect, useState } from 'react'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport s from './MenuCategoriesGE.less'\nimport { useSelector } from 'react-redux'\nimport { loadPoiAssetsConfiguration } from '../../store/poiassets/poiassets.actions'\nimport { selectCategoriesMenu } from '../../store/poiassets/poiassets.selectors'\nimport MenuSubCategoriesGE from './MenuSubCategoriesGE'\nimport MenuCategoryItem from './MenuCategoryItem'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport { withFrenchSite } from '../i18n/i18nSite'\nimport { withOnlyGE } from '../Device'\nimport { useAction } from '../utils/react-redux'\nimport { TAG_CLICK_CATEGORY_BAR } from '../analytics/analytics.tagids.constants'\nimport { APP_OR_SUBCAT_ID, CAT_ID } from '../analytics/ClickTagsService'\nimport { navigateToSearchByCategory, navigateToPoisOnRouteByCategory } from '../../store/history/history.actions'\nimport useTimeout from '../utils/useTimeout'\n\nimport classNames from 'classnames'\nimport AutoPromoOpenButton from '../autopromo/AutoPromoOpenButton'\nimport analyticsConstants from '../analytics/analytics.constants'\nimport { selectIsPageElligibleForPoisOnRoute } from '../../store/history/history.selectors'\n\nexport const MenuCategoriesGE = () => {\n  const [categoryId, setCategoryId] = useState()\n  const execLoadPoiAssetsConfiguration = useAction(loadPoiAssetsConfiguration)\n  const execNavigateToSmrByCategory = useAction(navigateToPoisOnRouteByCategory)\n\n  useEffect(() => {\n    execLoadPoiAssetsConfiguration()\n  }, [execLoadPoiAssetsConfiguration])\n\n  const categories = useSelector(selectCategoriesMenu)\n  const isPageElligibleForPoisOnRoute = useSelector(selectIsPageElligibleForPoisOnRoute)\n  const [setMouseOverTimeout, clearMouseOverTimeout] = useTimeout(100)\n\n  const onMouseOver = categoryId => () => setCategoryId(categoryId)\n\n  const onMouseOut = () => setMouseOverTimeout(unselectCategory)\n\n  const unselectCategory = () => setCategoryId(null)\n\n  const onMenuMouseOver = () => clearMouseOverTimeout()\n\n  const onMenuMouseOut = () => setMouseOverTimeout(unselectCategory)\n\n  const configureAndSendTag = useConfigureAndSendTag()\n  const execNavigateToSearchByCategory = useAction(navigateToSearchByCategory)\n\n  const onCategoryClick = catId => e => {\n    configureAndSendTag({\n      type: TAG_CLICK_CATEGORY_BAR,\n      tagInfo: {\n        [CAT_ID]: catId,\n        [APP_OR_SUBCAT_ID]: 'all'\n      }\n    })\n\n    if (isPageElligibleForPoisOnRoute) {\n      execNavigateToSmrByCategory(catId)\n    } else {\n      execNavigateToSearchByCategory(catId)\n    }\n    unselectCategory()\n  }\n  return categories?.length ? (\n    <div\n      className={categoryId ? classNames(s.container, s.borderless) : s.container}\n      onMouseOver={onMenuMouseOver}\n      onMouseOut={onMenuMouseOut}\n    >\n      <ul className={s.categories}>\n        {categories.map(({ id, shortLabel, iconId, color }) => (\n          <MenuCategoryItem\n            key={`category-${id}`}\n            id={id}\n            shortLabel={shortLabel}\n            iconId={iconId}\n            color={color}\n            selected={categoryId === id}\n            active={!categoryId}\n            onMouseOver={onMouseOver(id)}\n            onCategoryClick={onCategoryClick(id)}\n          />\n        ))}\n      </ul>\n      {categoryId && <MenuSubCategoriesGE categoryId={categoryId} onMouseLeaveMenu={onMouseOut} />}\n      <div className={s.autoPromoButton}>\n        <AutoPromoOpenButton area={analyticsConstants.autopromo.area.header} />\n      </div>\n    </div>\n  ) : null\n}\n\nexport default withEmptyFallbackErrorBoundary(withFrenchSite(withOnlyGE(MenuCategoriesGE)))\n","import classNames from 'classnames'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport '../../../node_modules/web-api-360/dist/MappyOutdoorView.css'\nimport { getApiKey, getDomain } from '../../parameters'\nimport { navigateBack } from '../../store/history/history.actions'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport {\n  selectIsOutdoorDisplayed,\n  selectOutdoorPanoramicId,\n  selectOutdoorTargetCoordinates\n} from '../../store/ui/ui.outdoor.selectors'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport cross from '../genericComponents/assets/cross.svg'\nimport { getLocaleUnderscored } from '../i18n'\nimport SVGIcon from '../svg/SVGIcon'\nimport { useAction } from '../utils/react-redux'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './Outdoor.less'\n\nconst Outdoor = () => {\n  const wrapper = useRef()\n  const view = useRef()\n  const [loaded, setLoaded] = useState(false)\n\n  const isOutdoorDisplayed = useSelector(selectIsOutdoorDisplayed)\n  const outdoorPanoramicId = useSelector(selectOutdoorPanoramicId)\n  const outdoorTargetCoordinates = useSelector(selectOutdoorTargetCoordinates)\n  const locale = useSelector(selectLocale)\n  const execNavigateBack = useAction(navigateBack)\n\n  const loadScript = () => import('web-api-360/dist/MappyOutdoorView')\n\n  /* Don’t use useEventCallback, nor useErrorBoundaryCallback, see NES-3215 */\n  const debugKeyHandler = useEventCallback(event => {\n    if (event.key === 'd') {\n      view.current?.toggleDebug()\n    }\n  }, [])\n\n  const listenKeyForDebug = () => document.body.addEventListener('keydown', debugKeyHandler)\n\n  const stopListeningKeyForDebug = () => document.body.removeEventListener('keydown', debugKeyHandler)\n\n  const hide = () => {\n    execNavigateBack()\n    setLoaded(false)\n  }\n\n  useEffect(() => {\n    if (!loaded) return\n    listenKeyForDebug()\n    return stopListeningKeyForDebug\n  }, [loaded])\n\n  const createOutdoorView = () => {\n    const { lat, lng } = outdoorTargetCoordinates\n    view.current = new window.MappyOutdoor.View(wrapper.current, outdoorPanoramicId, {\n      apikey: getApiKey(),\n      domain: `${getDomain()}.net`,\n      imgPath: `/assets/${window.__APP_VERSION__}/outdoor`,\n      locale: getLocaleUnderscored(locale)\n    })\n    view.current.lookAt({ lat, lon: lng })\n  }\n\n  useEffect(() => {\n    if (isOutdoorDisplayed) {\n      loadScript()\n        .then(createOutdoorView)\n        .then(() => setLoaded(true))\n    }\n  }, [isOutdoorDisplayed])\n\n  useEffect(() => {\n    return () => hide\n  }, [])\n\n  if (!isOutdoorDisplayed) return <></>\n\n  return (\n    <>\n      <div ref={wrapper} className={classNames(s.root, isOutdoorDisplayed && s.active)} />\n      <div className={s.closeBtn} onClick={hide}>\n        <SVGIcon url={cross} />\n      </div>\n    </>\n  )\n}\n\n// webpack:BrowserOnly\nexport default withEmptyFallbackErrorBoundary(Outdoor)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"AVnKY\",\"active\":\"O3NAK\",\"closeBtn\":\"AtUdC\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { PAGE_CLASSES } from '../../routes/pageClasses.constants'\nimport { selectFocusedPoiId } from '../../store/geoentity/geoentity.selectors'\nimport { selectIsMapFullScreen } from '../../store/map/map.selectors'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { isUIElementDisplayed } from '../../store/ui/ui.selectors'\nimport UserArea from '../UserAccount/UserArea'\nimport UserAccountIncentivePopin from '../UserAccount/connectionIncentive/UserAccountIncentivePopin'\nimport UtiqLoader from '../advertising/UtiqLoader'\nimport CMPPlaceholder from '../cmp/CMPPlaceholder'\nimport AlertBanner from '../cms/AlertBanner'\nimport MenuCategoriesGE from '../menu/MenuCategoriesGE'\nimport Outdoor from '../outdoor/Outdoor'\nimport { createCustomSelector } from '../utils/react-reselect'\n\nconst selectCommonClasses = createCustomSelector(\n  selectIsMapFullScreen,\n  isUIElementDisplayed(UI_ELEMENTS.POPIN),\n  isUIElementDisplayed(UI_ELEMENTS.SUGGEST),\n  isUIElementDisplayed(UI_ELEMENTS.MENU_PE),\n  isUIElementDisplayed(UI_ELEMENTS.MAP_TOOLS_PE),\n  selectFocusedPoiId,\n  (isMapFullScreen, isPopinDisplayed, isSuggestDisplayed, isMenuPEDisplayed, isMapToolsPEDisplayed, hasFocusedPoi) => [\n    isMapFullScreen && PAGE_CLASSES.withFullscreenMap,\n    isPopinDisplayed && PAGE_CLASSES.withDetail,\n    isSuggestDisplayed && PAGE_CLASSES.withSuggest,\n    isMenuPEDisplayed && PAGE_CLASSES.withMenuPEDisplayed,\n    isMapToolsPEDisplayed && PAGE_CLASSES.withMapToolsPEDisplayed,\n    hasFocusedPoi && PAGE_CLASSES.withPoiPopinDisplayed\n  ]\n)\n\nconst defaultPageClassManagerResult = [] // That constant is important to serve same array reference between calls ; it avoid reselect warnings\nconst defaultPageClassManager = () => defaultPageClassManagerResult\n\nconst Page = ({ cssClasses = [], children, ...props }) => {\n  const commonClasses = useSelector(selectCommonClasses)\n  const pageClassManager = props?.pageClassManager ?? defaultPageClassManager\n  const pageSpecificClasses = useSelector(pageClassManager)\n  const className = classNames(...cssClasses, ...commonClasses, ...pageSpecificClasses)\n\n  return (\n    <div className={className}>\n      <CMPPlaceholder key=\"CMPPlaceholder\" />\n      <UtiqLoader key=\"UtiqLoader\" />\n      <Outdoor />\n      <MenuCategoriesGE />\n      <UserArea />\n      <UserAccountIncentivePopin />\n      <AlertBanner />\n      {children}\n    </div>\n  )\n}\n\nexport default Page\n","import { useDispatch, useSelector } from 'react-redux'\nimport { getIsModalDisplayedSelector } from '../../store/ui/ui.selectors'\nimport { displayUiModal, hideUiModal } from '../../store/ui/uiSlice'\nimport useErrorBoundaryCallback from '../utils/useErrorBoundaryCallback'\n\nexport const useModal = modalId => {\n  const dispatch = useDispatch()\n  const isModalDisplayed = useSelector(getIsModalDisplayedSelector(modalId))\n  const displayModal = useErrorBoundaryCallback(() => dispatch(displayUiModal({ modalId })), [modalId])\n  const hideModal = useErrorBoundaryCallback(() => dispatch(hideUiModal({ modalId })), [modalId])\n  return {\n    isModalDisplayed,\n    displayModal,\n    hideModal\n  }\n}\n\nexport default useModal\n","import { useEffect } from 'react'\nimport { TAG_MULTIPATH_CTA } from '../analytics/analytics.tagids.constants'\nimport { PUB_TAG } from '../analytics/PublisherTagsService'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport useTimeout from '../utils/useTimeout'\n\nexport default function usePublisherBarreCategorieTag(categoryId) {\n  const configureAndSendTag = useConfigureAndSendTag()\n  const [setPublisherTagTimeout, clearPublisherTagTimeout] = useTimeout(1000)\n\n  useEffect(() => {\n    setPublisherTagTimeout(() =>\n      configureAndSendTag({\n        type: TAG_MULTIPATH_CTA,\n        tagInfo: { tag: PUB_TAG.PUB_AFFICHAGE_BARRECATEGORIE, catId: categoryId },\n        isImpression: true\n      })\n    )\n    return clearPublisherTagTimeout\n  }, [categoryId])\n}\n","import classnames from 'classnames'\nimport React, { useCallback } from 'react'\nimport { TAG_BACK } from '../analytics/analytics.tagids.constants'\nimport { navigateBack } from '../../store/history/history.actions'\nimport { withOnlyGE } from '../Device'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport SVGIcon from '../svg/SVGIcon'\nimport { useAction } from '../utils/react-redux'\nimport s from './ClosePopinButton.less'\nimport TagActionButton from './TagActionButton'\nimport cross from './assets/cross.svg'\n\nconst ClosePopinButton = ({ className, hasTag }) => {\n  const execNavigateBack = useAction(navigateBack)\n  const useNavigateBack = useCallback(() => execNavigateBack(), [])\n\n  if (!hasTag)\n    return (\n      <div onClick={useNavigateBack}>\n        <ClosePopinIcon className={className} />\n      </div>\n    )\n\n  return (\n    <TagActionButton type={TAG_BACK} deferClick onClick={useNavigateBack}>\n      <ClosePopinIcon className={className} />\n    </TagActionButton>\n  )\n}\n\nconst ClosePopinIcon = ({ className }) => (\n  <div className={classnames(s.closeButton, className)}>\n    <SVGIcon url={cross} />\n  </div>\n)\n\nexport const ClosePopinButtonGE = withOnlyGE(withEmptyFallbackErrorBoundary(ClosePopinButton))\n\nexport default withEmptyFallbackErrorBoundary(ClosePopinButton)\n","// extracted by mini-css-extract-plugin\nexport default {\"closeButton\":\"cEk0y\"};","// extracted by mini-css-extract-plugin\nexport default {\"SuggestItem_link\":\"d9mYb\",\"SuggestItem_text\":\"ogaru\",\"oneLabel\":\"WUr7r\",\"SuggestItem_mainLabel\":\"AYOe7\",\"SuggestItem_eventLabel\":\"rtpGq\",\"SuggestItem_icon\":\"BHZZ9\",\"SuggestItem_secondaryLabel\":\"tnwHk\",\"brandLogo\":\"MtOrN\",\"icon\":\"htRus\",\"favori\":\"gxHMN\",\"maison\":\"XJita\",\"sacoche\":\"CpBCI\"};","import classNames from 'classnames'\nimport React from 'react'\n\nimport s from './SuggestItem.less'\n\nimport { suggestServiceCtx } from '../../store/suggest/suggest.service.constants'\nimport SVGIcon from '../svg/SVGIcon'\n\nimport { SUGGEST_CLICK } from '../analytics/analytics.tagids.constants'\nimport { POI_POSITION, POI_TYPE } from '../analytics/ClickTagsService'\nimport TagActionButton from '../genericComponents/TagActionButton'\n\nconst BrandItemContent = props => {\n  const { suggest = {} } = props\n  const { labels, brandIconUrl } = suggest\n  const [firstLabel] = labels\n  return (\n    <>\n      {brandIconUrl && (\n        <div className={s.brandLogo}>\n          <img src={brandIconUrl} />\n        </div>\n      )}\n      <div className={classNames(s.SuggestItem_text, s.oneLabel)}>\n        <span className={s.SuggestItem_mainLabel} dangerouslySetInnerHTML={{ __html: firstLabel }} />\n      </div>\n    </>\n  )\n}\n\nconst GenericContent = props => {\n  const { suggest } = props\n  const [firstLabel, ...otherLabels] = suggest.labels\n  const icon = suggest?.subtype?.id\n  const iconUrls = suggest?.iconUrls ?? false\n\n  return (\n    <>\n      <div className={classNames(s.icon, 'icon', s[icon])}>\n        <SVGIcon icon={icon} ssrWhite />\n      </div>\n      <div className={classNames(s.SuggestItem_text, otherLabels.length === 0 && s.oneLabel)}>\n        <span className={s.SuggestItem_mainLabel} dangerouslySetInnerHTML={{ __html: firstLabel }} />\n        {iconUrls && (\n          <span>\n            {iconUrls.map((iconUrl, idx) => {\n              return <img className={s.SuggestItem_icon} key={`${firstLabel}-${idx}`} src={iconUrl} />\n            })}\n          </span>\n        )}\n        {!iconUrls && (\n          <span className={s.SuggestItem_secondaryLabel}>\n            {otherLabels.map((label, id) => (\n              <span key={id} dangerouslySetInnerHTML={{ __html: `${label} ` }} />\n            ))}\n          </span>\n        )}\n      </div>\n    </>\n  )\n}\n\nconst EventContent = props => {\n  const { suggest } = props\n  const icon = suggest?.subtype?.id\n  const { address_components } = suggest\n  const postcode = address_components?.postcodes?.[0]\n  const town = address_components?.town?.label\n  const address = postcode && town ? `${postcode}, ${town}` : undefined\n  const otherName = address_components?.other_name\n\n  return (\n    <>\n      <div className={classNames(s.icon, 'icon', s[icon])}>\n        <SVGIcon icon={icon} ssrWhite />\n      </div>\n      <div className={classNames(s.SuggestItem_text)}>\n        <span\n          className={classNames(s.SuggestItem_mainLabel, s.SuggestItem_eventLabel)}\n          dangerouslySetInnerHTML={{ __html: suggest.labels[0] }}\n        />\n        {otherName && (\n          <span className={classNames(s.SuggestItem_mainLabel, s.SuggestItem_eventLabel)}>{otherName}</span>\n        )}\n        {address && (\n          <span className={classNames(s.SuggestItem_secondaryLabel, s.SuggestItem_eventLabel)}>\n            <span>{address}</span>\n          </span>\n        )}\n      </div>\n    </>\n  )\n}\n\nconst SuggestItemContent = ({ type, suggest, isEventSuggest }) => {\n  if (type === suggestServiceCtx.type.store_chain) {\n    return <BrandItemContent suggest={suggest} />\n  } else if (isEventSuggest) {\n    return <EventContent suggest={suggest} />\n  } else {\n    return <GenericContent suggest={suggest} />\n  }\n}\n\nconst SuggestItem = props => {\n  const { suggest, idx } = props\n\n  const type = suggest?.type\n\n  const onClick = e => {\n    e.preventDefault()\n    e.stopPropagation()\n    const { onClick, suggest } = props\n    onClick && onClick(suggest)\n  }\n\n  const onMouseEnter = () => {\n    const { idx, updateSelectedId } = props\n    updateSelectedId(idx)\n  }\n\n  const onFocus = () => {\n    const { idx, updateSelectedId } = props\n    updateSelectedId(idx)\n  }\n\n  return (\n    <TagActionButton\n      type={SUGGEST_CLICK}\n      tagInfo={{\n        [POI_TYPE]: suggest?.subtype?.id,\n        [POI_POSITION]: idx + 1\n      }}\n      className={s.SuggestItem_link}\n      {...{\n        onClick,\n        onMouseEnter,\n        onFocus\n      }}\n    >\n      <SuggestItemContent type={type} suggest={suggest} />\n    </TagActionButton>\n  )\n}\n\nexport default SuggestItem\n","import React from 'react'\nimport SuggestItem from './SuggestItem'\nimport s from './SuggestContentList.less'\n\nconst SuggestContentList = ({\n  suggestions = [],\n  idxStartAt = 0,\n  onClick,\n  selectedId = -1,\n  updateSelectedId = () => {}\n}) => (\n  <div className={s.SuggestList}>\n    <ul>\n      {suggestions.map((suggest, index) => {\n        const idx = idxStartAt + index\n        return (\n          <li key={idx} className={selectedId === idx ? s.selected : ''}>\n            <SuggestItem {...{ idx, suggest, onClick, updateSelectedId }} />\n          </li>\n        )\n      })}\n    </ul>\n  </div>\n)\n\nexport default SuggestContentList\n","// extracted by mini-css-extract-plugin\nexport default {\"SuggestList\":\"DJuod\",\"selected\":\"CKN0m\"};","import React from 'react'\nimport { getSvgIconUrl } from '../../parameters'\nimport { buildStyleAttributes, hexToCssFilter, hexToRgb } from '../utils/css'\nimport s from './MenuCategoryItem.less'\n\nconst MenuCategoryItem = ({ id, shortLabel, iconId, color, selected, active, onMouseOver, onCategoryClick }) => {\n  const labelStyle = {}\n  const iconStyle = {}\n\n  if (selected) {\n    iconStyle.borderColor = color\n    iconStyle.backgroundColor = color\n    labelStyle.color = color\n  } else if (active) {\n    iconStyle.borderColor = hexToRgb(color, 0.5)\n    iconStyle.fill = color\n  }\n  const filter = selected ? 'invert(1)' : hexToCssFilter(color)\n\n  return (\n    <li key={id} className={s.category} onClick={onCategoryClick}>\n      <div className={s.categoryItem}>\n        <span className={s.categoryIcon} onMouseOver={onMouseOver} style={buildStyleAttributes(iconStyle)}>\n          <img\n            src={getSvgIconUrl(global.__SVG_TIMESTAMP__, iconId)}\n            style={{ filter }}\n            alt={iconId}\n            width={20}\n            height={20}\n          />\n        </span>\n        <span className={s.categoryLabel} style={buildStyleAttributes(labelStyle)}>\n          {shortLabel}\n        </span>\n      </div>\n    </li>\n  )\n}\n\nexport default MenuCategoryItem\n","// extracted by mini-css-extract-plugin\nexport default {\"category\":\"yS3Nd\",\"categoryItem\":\"pR5H5\",\"categoryLabel\":\"XeZhr\",\"categoryIcon\":\"Dc0cl\"};","import React from 'react'\nimport classNames from 'classnames'\nimport s from './ModeItem.less'\nimport SVGIcon from '../svg/SVGIcon'\n\nconst ModeItem = ({ label = '', selected = false, icon, description, onClick, displayHighlightBar = true }) => {\n  return (\n    <div\n      className={classNames(s.root, selected && s.selected, displayHighlightBar ? s.content : s.contentFavourite)}\n      onClick={onClick}\n      title={label}\n    >\n      <span className={classNames('icon', s.icon)}>\n        <SVGIcon icon={icon} />\n      </span>\n      <span className={s.label}>{description}</span>\n      {displayHighlightBar && <div className={classNames(s.bar, selected && s.highlightedBar)}></div>}\n    </div>\n  )\n}\n\nexport default ModeItem\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"FA3H8\",\"selected\":\"HWpJA\",\"icon\":\"_6dHC\",\"label\":\"mgjEa\",\"content\":\"E3G_Q\",\"contentFavourite\":\"gLgE1\",\"bar\":\"Mx64R\",\"highlightedBar\":\"fzEmI\"};","import classNames from 'classnames'\nimport React, { useCallback, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectHeaderHeight, selectMainPEPositionAtStart } from '../../store/ui/ui.selectors'\nimport { isGE } from '../Device'\nimport ResponsiveScrollableWrapper from '../genericComponents/ResponsiveScrollableWrapper/ResponsiveScrollableWrapper'\nimport { HEADER_SUBHEADER_HEIGHT, PREHEADER_HEIGHT } from '../header/header-constants'\nimport { MINI_MAP_HEIGHT, PE_MAIN_START_POS, PE_MAIN_VALUES } from './main.constants'\nimport s from './Main.less'\nimport Anchor from '../genericComponents/Anchor'\nimport { isSearchRoute, selectCurrentHistoryRoute } from '../../store/history/history.selectors'\nimport {\n  selectSearchAppParameter,\n  selectSearchSubCategoryParameter,\n  selectSearchTerms\n} from '../../store/search/search.selectors'\nimport { capitalize, replaceDashesBySpaces } from '../../utils/string'\nimport useMainScroll from '../ui/useMainScroll'\nimport useUIDisplay from '../ui/useUIDisplay'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { selectIsMapFullScreen } from '../../store/map/map.selectors'\nimport { resetUiDrawerClientTop } from '../../store/ui/uiSlice'\n\nconst getTopPosition = (positionAtStart, headerWithSubHeaderHeight) => {\n  const windowHeight = global?.window?.innerHeight ?? 0\n  const minTop = headerWithSubHeaderHeight + MINI_MAP_HEIGHT\n  const { high, low_scrolled_high, low } = PE_MAIN_START_POS\n\n  if (positionAtStart === high) return minTop\n\n  const mainTopValue = positionAtStart === low_scrolled_high ? low : positionAtStart\n\n  return Math.max(minTop, windowHeight - PE_MAIN_VALUES[mainTopValue])\n}\n\nconst Main = ({ children, className, withoutSubHeader, hidden, preContent, preContentHeight = 0 }) => {\n  const { mainRef, triggerInitialScroll } = useMainScroll()\n  const headerHeight = useSelector(selectHeaderHeight)\n  const positionAtStart = useSelector(selectMainPEPositionAtStart)\n  const { isUIDisplayed: hasPopin } = useUIDisplay(UI_ELEMENTS.POPIN)\n  const hasFullscreenMap = useSelector(selectIsMapFullScreen)\n  const mainIsVisible = !hasPopin && !hasFullscreenMap\n  const dispatch = useDispatch()\n\n  useEffect(() => {\n    if (mainIsVisible && positionAtStart === PE_MAIN_START_POS.low_scrolled_high) {\n      setTimeout(() => triggerInitialScroll(), 0)\n    }\n  }, [positionAtStart, mainIsVisible])\n\n  useEffect(() => {\n    if (hasFullscreenMap) dispatch(resetUiDrawerClientTop())\n  }, [hasFullscreenMap])\n\n  const getStyle = useCallback(() => {\n    if (__SERVER__) return {}\n\n    const headerWithSubHeaderHeight = headerHeight + (withoutSubHeader ? 0 : HEADER_SUBHEADER_HEIGHT)\n\n    if (isGE()) {\n      const top = PREHEADER_HEIGHT + headerWithSubHeaderHeight\n      const height = `calc(100vh - ${top + preContentHeight}px)`\n      return { top, height }\n    }\n\n    return {\n      top: getTopPosition(positionAtStart, headerWithSubHeaderHeight),\n      height: null\n    }\n  }, [headerHeight, positionAtStart, withoutSubHeader, preContentHeight])\n\n  return (\n    <main\n      className={classNames(s.Main, s.Main_displayed, className, hidden && s.Main_hidden)}\n      ref={mainRef}\n      style={getStyle()}\n    >\n      <Anchor />\n      <div className={s.mainPrecontentWrapper}>\n        <MainCategoryName />\n        {preContent}\n      </div>\n      <ResponsiveScrollableWrapper>{children}</ResponsiveScrollableWrapper>\n    </main>\n  )\n}\n\nconst MainCategoryName = () => {\n  const currentRoute = useSelector(selectCurrentHistoryRoute)\n  const appParameter = useSelector(selectSearchAppParameter)\n  const subCategoryParameter = useSelector(selectSearchSubCategoryParameter)\n  const searchTerms = useSelector(selectSearchTerms)\n\n  if (__SERVER__ || isGE() || !isSearchRoute(currentRoute)) return <></>\n\n  const getCategoryName = () => {\n    if (appParameter || subCategoryParameter) return searchTerms\n    if (searchTerms) return replaceDashesBySpaces(capitalize(searchTerms))\n    return 'Résultats'\n  }\n\n  return (\n    <div className={s.mainCategoryNameWrapper}>\n      <span className={s.mainCategoryName}>{getCategoryName()}</span>\n    </div>\n  )\n}\n\nexport default Main\n","// extracted by mini-css-extract-plugin\nexport default {\"Main\":\"YAz35\",\"Main_hidden\":\"FO4Cd\",\"Main_displayed\":\"RTSI4\",\"mainPrecontentWrapper\":\"Phk2T\",\"mainCategoryNameWrapper\":\"dd3kf\",\"mainCategoryName\":\"lnIe9\"};","import { useCallback, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { setUiDrawerClientTop } from '../../store/ui/uiSlice'\nimport { MINI_MAP_HEIGHT, PE_MAIN_START_POS, PE_MAIN_VALUES } from '../main/main.constants'\nimport { PREHEADER_HEIGHT } from '../header/header-constants'\nimport { isPE } from '../Device'\nimport { throttle } from '../../utils/function'\n\nconst useMainScroll = () => {\n  const dispatch = useDispatch()\n  const mainRef = useRef(null)\n\n  const getDrawerTopPosition = () => mainRef.current?.getBoundingClientRect().top\n  const triggerInitialScroll = useCallback(() => {\n    if (__BROWSER__) {\n      document.documentElement.scrollTo({\n        top: global.window.innerHeight - MINI_MAP_HEIGHT - PREHEADER_HEIGHT - PE_MAIN_VALUES[PE_MAIN_START_POS.low],\n        behavior: 'smooth'\n      })\n    }\n  }, [])\n\n  const updateMainTop = useCallback(() => {\n    if (!mainRef.current || getComputedStyle(mainRef.current).display === 'none') return\n    dispatch(setUiDrawerClientTop(getDrawerTopPosition()))\n  }, [])\n\n  const handleScroll = useCallback(() => {\n    updateMainTop()\n  }, [])\n\n  const handleResize = useCallback(() => {\n    setTimeout(() => {\n      // the resize is fired before the navigator move the top after the address bar is hide\n      updateMainTop()\n    }, 200)\n  }, [])\n\n  useEffect(() => {\n    if (__BROWSER__ && isPE()) {\n      const throttledHandler = throttle(handleScroll, 50)\n      window.addEventListener('scroll', throttledHandler)\n      window.addEventListener('resize', handleResize)\n      throttledHandler()\n\n      return () => {\n        window.removeEventListener('scroll', throttledHandler)\n        window.removeEventListener('resize', handleResize)\n      }\n    }\n  }, [])\n\n  return { mainRef, triggerInitialScroll }\n}\n\nexport default useMainScroll\n","export default class SuggestError extends Error {\n  constructor() {\n    super('Pas de suggestion correspondant à cette recherche.')\n    this.name = 'SuggestError'\n  }\n}\n","import { getImageUrl } from '../../domain/utils/image'\n\nexport default function (response) {\n  return {\n    suggests: response.suggests.map((suggest = {}) => {\n      const { type, lat, lng, subtype, labels, brand_icon_url, icon_urls } = suggest\n\n      const iconUrls = icon_urls\n        ? {\n            iconUrls: icon_urls.map(iconUrl => getImageUrl(iconUrl))\n          }\n        : {}\n\n      const brandIconUrl = brand_icon_url ? { brandIconUrl: getImageUrl(brand_icon_url) } : {}\n\n      return Object.assign({}, { type, lat, lng, labels }, subtype ? { subtype } : {}, iconUrls, brandIconUrl)\n    })\n  }\n}\n","import { requestSuggest } from '../../dataSource/suggest/suggest.requests'\nimport SuggestError from '../../domain/suggest/SuggestError'\nimport { selectMapBbox } from '../map/map.selectors'\nimport { selectLocale } from '../navigation/navigation.selectors'\nimport parse from './suggest.dataParser'\nimport { loadSuggestError, loadSuggestResponse, resetSuggestData, setSuggestInputValue } from './suggestSlice'\n\nconst isResponseFromLastRequest = (suggest, requestTime) => {\n  return suggest.lastRequestTime < requestTime\n}\n\nexport const suggest =\n  ({ terms, suggestFilterType = 'all' }) =>\n  (dispatch, getState) => {\n    if (!terms) {\n      dispatch(resetSuggestData())\n      return Promise.resolve()\n    }\n\n    dispatch(setSuggestInputValue(terms))\n\n    const requestTime = Date.now()\n    const locale = selectLocale(getState())\n    const bbox = selectMapBbox(getState())\n    return requestSuggest(bbox, locale, { terms, suggestFilterType })\n      .then(response => {\n        const { data } = response\n\n        if (!data?.suggests) {\n          throw new SuggestError()\n        }\n\n        const { suggest } = getState()\n\n        if (isResponseFromLastRequest(suggest, requestTime)) {\n          dispatch(loadSuggestResponse({ data: parse(data), requestTime }))\n        }\n      })\n      .catch(error => {\n        const { suggest } = getState()\n        if (isResponseFromLastRequest(suggest, requestTime)) {\n          dispatch(loadSuggestError({ error, requestTime }))\n        }\n      })\n  }\n","import { convertBboxToWestSouthEastNorthBbox } from '../../domain/utils/map'\nimport { getBIParams } from '../../domain/analytics/BiTagger'\nimport { bboxToSearchParameter } from '../../domain/map/conversion'\nimport request from '../../domain/utils/request'\nimport { getService, getServiceParameters } from '../../parameters'\nimport SERVICES from '../../services.constants'\n\nexport const requestSuggest = (bbox, locale, { terms, suggestFilterType = 'all' }) => {\n  const service = getService(SERVICES.SUGGEST)\n  const params = {\n    q: terms,\n    filter: suggestFilterType,\n    limit: 5,\n    focus_bbox: bboxToSearchParameter(convertBboxToWestSouthEastNorthBbox(bbox)),\n    ...getServiceParameters(SERVICES.SUGGEST, locale),\n    ...getBIParams()\n  }\n\n  return request.get(service, { locale, params }).then(response => response)\n}\n","import classnames from 'classnames'\nimport React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectIsCorrespondingPageAdConfigLoaded, selectPageIdForAdConfig } from '../../store/ad/ad.selectors'\nimport { removeAdData, setAdData } from '../../store/ad/adSlice'\nimport { noop } from '../../utils/function'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport { ONE_SECOND_MS } from '../utils/date'\nimport useTimeout from '../utils/useTimeout'\nimport { getAdIdByAdName } from './AdConfigService'\nimport s from './AdLoader.less'\nimport { AdService } from './AdService'\n\nexport const AD_STATUS_NONE = 'AD_STATUS_NONE'\nexport const AD_STATUS_LOADING = 'AD_STATUS_LOADING'\nexport const AD_STATUS_LOADED = 'AD_STATUS_LOADED'\n\nexport const useAdLoader = ({ adId, keywords, keywordsSelector = noop, askData = false }) => {\n  const [adStatus, setAdStatus] = useState(AD_STATUS_NONE)\n  const dispatch = useDispatch()\n  const dynamicKeywords = useSelector(keywordsSelector)\n  const adsKeywords = dynamicKeywords ?? keywords\n\n  useEffect(() => {\n    // keywords selectors must return null if there is no keywords available yet\n    if (dynamicKeywords === null || keywords === null || !adId) return\n\n    switch (adStatus) {\n      case AD_STATUS_NONE: {\n        setAdStatus(AD_STATUS_LOADING)\n\n        AdService.createAd(adId)\n          .then(() => AdService.setAdKeywords(adId, adsKeywords))\n          .then(() => AdService.loadAd(adId))\n          .then(() => askData && AdService.getAdData(adId).then(data => dispatch(setAdData({ adId, data }))))\n          .then(() => setAdStatus(AD_STATUS_LOADED))\n          .catch(error => console.error('AdLoader loading error', error))\n        break\n      }\n\n      case AD_STATUS_LOADED: {\n        setAdStatus(AD_STATUS_LOADING)\n        dispatch(removeAdData(adId))\n\n        AdService.setAdKeywords(adId, adsKeywords)\n          .then(() => AdService.reloadAd(adId))\n          .then(() => askData && AdService.getAdData(adId).then(data => dispatch(setAdData({ adId, data }))))\n          .then(() => setAdStatus(AD_STATUS_LOADED))\n          .catch(error => console.error('AdLoader reload', error))\n\n        break\n      }\n    }\n  }, [JSON.stringify(adsKeywords)])\n\n  useEffect(() => {\n    // sometimes, the ad api does resolve or reject the promise, so we do not keep loading status more than 5s, because it blocks refresh\n    let timeoutId\n    if (adStatus === AD_STATUS_LOADING) {\n      timeoutId = setTimeout(() => setAdStatus(AD_STATUS_LOADED), 5 * ONE_SECOND_MS)\n    }\n    return () => clearTimeout(timeoutId)\n  }, [adStatus])\n\n  useEffect(\n    () => () => {\n      if (adId) {\n        AdService.deleteAd(adId).catch(error => console.error('AdLoader remove error', error))\n        dispatch(removeAdData(adId))\n      }\n    },\n    []\n  )\n\n  return adStatus === AD_STATUS_LOADED\n}\n\nexport const BaseAdLoader = ({\n  adName,\n  className,\n  keywords,\n  keywordsSelector,\n  children,\n  askData,\n  placeHolderHeight\n}) => {\n  const pageId = useSelector(selectPageIdForAdConfig)\n  const adId = getAdIdByAdName(adName, pageId)\n  const [visible, setVisible] = useState(AdService.isAdLibraryAvailable())\n\n  useAdLoader({ adId, keywords, keywordsSelector, askData })\n\n  const [pendingLoadTimeout, setPendingLoadTimeout] = useState(true)\n  const [setTimeout] = useTimeout(2500) // delay to let the ad load\n  useEffect(() => {\n    setTimeout(() => {\n      setPendingLoadTimeout(false)\n      setVisible(AdService.isAdLibraryAvailable())\n    })\n  }, [setPendingLoadTimeout])\n\n  if (!visible) return <></> // if adblocker\n\n  return (\n    // placeholder until ad is loaded\n    <div style={pendingLoadTimeout ? { minHeight: placeHolderHeight } : {}}>\n      {children}\n      <div id={adId} className={classnames(className, askData && s.hidden)} />\n    </div>\n  )\n}\n\nexport default withEmptyFallbackErrorBoundary(function AdLoader({ adName, placeHolderHeight = 0, ...restProps }) {\n  const isConfigLoaded = useSelector(state => selectIsCorrespondingPageAdConfigLoaded(state, adName))\n\n  if (!isConfigLoaded) return <div style={{ minHeight: placeHolderHeight }}></div> // placeholder until page configuration is loaded\n\n  return <BaseAdLoader key={adName} adName={adName} placeHolderHeight={placeHolderHeight} {...restProps} />\n})\n","// extracted by mini-css-extract-plugin\nexport default {\"hidden\":\"nL4Ol\"};","import React, { useEffect, useState } from 'react'\nimport { parsePositiveNumber } from '../../utils/number'\n\nconst POSITIVE_FLOAT_MAX_3_RADIX = /^[0-9]*(\\.|,)?[0-9]{0,3}$/\n\nexport const NumericInput = props => {\n  const { value, onChange, onBlur } = props\n\n  const [inputValue, setInputValue] = useState(value)\n\n  useEffect(() => {\n    setInputValue(value)\n  }, [value])\n\n  const handleChange = event => {\n    const {\n      target: { value: targetValue }\n    } = event\n\n    if (!targetValue || POSITIVE_FLOAT_MAX_3_RADIX.test(targetValue)) {\n      setInputValue(targetValue)\n    }\n    onChange?.(event)\n  }\n\n  const handleClick = event => event.target.focus()\n\n  const handleBlur = () => {\n    const event = {\n      target: {\n        value: parsePositiveNumber(inputValue, 3)\n      }\n    }\n    onBlur?.(event)\n  }\n\n  return (\n    <input\n      {...props}\n      value={inputValue}\n      type=\"number\"\n      onClick={handleClick}\n      onChange={handleChange}\n      onBlur={handleBlur}\n    />\n  )\n}\n\nexport default NumericInput\n","// extracted by mini-css-extract-plugin\nexport default {\"backButton\":\"EXGrh\",\"transparent\":\"jty19\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { navigateBack } from '../../store/history/history.actions'\nimport { TAG_BACK } from '../analytics/analytics.tagids.constants'\nimport TagActionButton from '../genericComponents/TagActionButton'\nimport arrowLeft from '../genericComponents/assets/arrow-left.svg'\nimport { useAction } from '../utils/react-redux'\nimport s from './BackButton.less'\n\nconst BackButton = ({ hasTag, transparent }) => {\n  const execNavigateBack = useAction(navigateBack)\n\n  return hasTag ? (\n    <TagActionButton\n      type={TAG_BACK}\n      className={classNames(s.backButton, transparent && s.transparent)}\n      onClick={() => execNavigateBack()}\n    >\n      <img src={arrowLeft} className=\"ssrImageGrey\" alt=\"\" width={24} height={24} />\n    </TagActionButton>\n  ) : (\n    <div className={classNames(s.backButton, transparent && s.transparent)} onClick={() => execNavigateBack()}>\n      <img src={arrowLeft} className=\"ssrImageGrey\" alt=\"\" width={24} height={24} />\n    </div>\n  )\n}\n\nexport default BackButton\n","import React from 'react'\nimport RImageGallery from 'react-image-gallery'\nimport './ImageGalleryOriginal.less'\nimport './ImageGallery.less'\n\nconst ImageGallery = React.forwardRef((props, ref) => {\n  return (\n    <RImageGallery\n      ref={ref}\n      lazyLoad\n      showNav={false}\n      showThumbnails={false}\n      showFullscreenButton={false}\n      showPlayButton={false}\n      {...props}\n    />\n  )\n})\n\nImageGallery.displayName = 'ImageGallery'\n\nexport default ImageGallery\n","import { createCustomSelector } from '../../../domain/utils/react-reselect'\nimport { selectSearchState } from '../search.selectors'\nimport { lastTenHistoryEntries } from './searchHistory.utils'\n\nexport const selectSearchHistory = createCustomSelector(selectSearchState, search => search?.searchHistory ?? [])\n\nexport const selectLastTenHistoryEntries = createCustomSelector(selectSearchHistory, searchHistory =>\n  lastTenHistoryEntries(searchHistory)\n)\n","import { SUGGEST_FROM_VALUES } from '../../domain/suggest/suggest.constants'\nimport { createCustomSelector } from '../../domain/utils/react-reselect'\nimport { selectLastTenHistoryEntries, selectSearchHistory } from '../search/searchHistory/searchHistory.selectors'\nimport { lastSearchHistoryEntries } from '../search/searchHistory/searchHistory.utils'\nimport {\n  selectFakeFavorites,\n  selectIsUserAccountEnabled,\n  selectUserFavorites\n} from '../userAccount/userAccount.selectors'\nimport { isLabelMatchingInputValueKeyword, normalizeInputValueKeyword, normalizeLabel } from './suggest.selectors.utils'\n\nconst addFromProperty = from => item => ({ ...item, from })\n\nconst selectSuggestState = store => store?.suggest ?? {}\n\nexport const selectSuggestInputValue = createCustomSelector(selectSuggestState, suggest => suggest?.inputValue ?? '')\n\nexport const selectIsSuggestInputValueEmpty = createCustomSelector(\n  selectSuggestInputValue,\n  inputValue => inputValue === ''\n)\n\nexport const selectSuggestError = createCustomSelector(selectSuggestState, suggest => suggest?.error ?? null)\n\nexport const selectServiceSuggestions = createCustomSelector(selectSuggestState, suggest =>\n  (suggest?.serviceSuggestions ?? []).map(addFromProperty(SUGGEST_FROM_VALUES.service))\n)\n\nexport const selectSearchHistorySuggestions = createCustomSelector(\n  selectSuggestInputValue,\n  selectSearchHistory,\n  selectLastTenHistoryEntries,\n  (inputValue, searchHistory, lastTenHistoryEntries) => {\n    if (inputValue === '') return lastTenHistoryEntries.map(addFromProperty(SUGGEST_FROM_VALUES.history))\n\n    const normalizedInputValue = normalizeInputValueKeyword(inputValue)\n\n    return lastSearchHistoryEntries(normalizedInputValue, inputValue, searchHistory).map(\n      addFromProperty(SUGGEST_FROM_VALUES.history)\n    )\n  }\n)\n\nconst formatFavoriteForSuggest = ({ uuid, label, address, favIcon, type, incentive, labels }) => {\n  return {\n    uuid,\n    labels: address ? [label, address] : labels,\n    subtype: { id: favIcon },\n    type,\n    from: SUGGEST_FROM_VALUES.favorites,\n    incentive: Boolean(incentive)\n  }\n}\n\nconst formatHomeOrWorkFavoriteForSuggest = suggestion => {\n  return {\n    ...formatFavoriteForSuggest(suggestion),\n    address: suggestion.address\n  }\n}\n\nexport const selectSuggestFakeFavorites = createCustomSelector(selectFakeFavorites, fakeFavorites => {\n  const { home, work } = fakeFavorites\n  return {\n    home: {\n      from: SUGGEST_FROM_VALUES.favorites,\n      ...home\n    },\n    work: {\n      from: SUGGEST_FROM_VALUES.favorites,\n      ...work\n    }\n  }\n})\n\nexport const selectFavoritesFormattedForSuggest = createCustomSelector(\n  selectIsUserAccountEnabled,\n  selectUserFavorites,\n  selectSuggestFakeFavorites,\n  (isUserAccountAvailable, favorites, fakeFavorites) => {\n    if (!isUserAccountAvailable) return []\n\n    const { others, home, work } = favorites\n    const suggestsHomeWork = [\n      home.label ? favorites.home : fakeFavorites.home,\n      work.label ? favorites.work : fakeFavorites.work\n    ]\n\n    return [\n      ...suggestsHomeWork.map(formatHomeOrWorkFavoriteForSuggest),\n      ...others.map(other => formatFavoriteForSuggest(other))\n    ]\n  }\n)\n\nexport const selectFavoritesSuggestions = createCustomSelector(\n  selectFavoritesFormattedForSuggest,\n  selectSuggestInputValue,\n  (favorites, inputValue) => {\n    if (inputValue === '') return favorites.slice(0, 5)\n    // TODO: vérifier avec le service que les favoris sont bien triés du plus récent au plus ancien\n\n    return favorites.filter(favorite => {\n      const inputValueKeyword = normalizeInputValueKeyword(inputValue)\n      return isLabelMatchingInputValueKeyword(inputValueKeyword, favorite.labels.join(' '))\n    })\n  }\n)\n\nexport const removeDuplicateSuggestions = (suggestionsToProcess, suggestionsToCompare) => {\n  const labelsToCompare = suggestionsToCompare.map(suggestion => normalizeLabel((suggestion?.labels ?? []).join(' ')))\n  return suggestionsToProcess.filter(suggestion => {\n    const label = normalizeLabel(suggestion.labels.join(' '))\n    return !labelsToCompare.find(item => item === label)\n  })\n}\n\nexport const selectAllSuggestions = (withoutFavorites = false) =>\n  createCustomSelector(\n    selectSuggestError,\n    withoutFavorites ? () => [] : selectFavoritesSuggestions,\n    selectSearchHistorySuggestions,\n    selectServiceSuggestions,\n    (error, favoritesSuggestions, searchHistorySuggestions, serviceSuggestions) => {\n      const favoritesSuggestionsWithUuid = favoritesSuggestions.filter(({ uuid }) => Boolean(uuid))\n      const searchHistory = removeDuplicateSuggestions(searchHistorySuggestions, favoritesSuggestionsWithUuid)\n      const service = removeDuplicateSuggestions(serviceSuggestions, [\n        ...favoritesSuggestionsWithUuid,\n        ...searchHistory\n      ])\n\n      return {\n        error,\n        suggestions: {\n          favorites: favoritesSuggestionsWithUuid,\n          searchHistory,\n          service\n        }\n      }\n    }\n  )\n\nexport const selectHomeWorkOrFakeFavorites = createCustomSelector(\n  selectIsUserAccountEnabled,\n  selectUserFavorites,\n  selectSuggestFakeFavorites,\n  (isUserAccountAvailable, favorites, fakeFavorites) => {\n    if (!isUserAccountAvailable) return []\n    const { home, work } = favorites\n    return [\n      home?.label ? formatHomeOrWorkFavoriteForSuggest(favorites.home) : fakeFavorites.home,\n      work?.label ? formatHomeOrWorkFavoriteForSuggest(favorites.work) : fakeFavorites.work\n    ]\n  }\n)\n","import React from 'react'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport s from './MenuSubCategoryItem.less'\nimport SVGIcon from '../svg/SVGIcon'\nimport { navigateToSearchBySubcategory, navigateToPoisOnRouteBySubcategory } from '../../store/history/history.actions'\nimport { TAG_CLICK_CATEGORY_BAR } from '../analytics/analytics.tagids.constants'\nimport { APP_OR_SUBCAT_ID, CAT_ID } from '../analytics/ClickTagsService'\nimport { useAction } from '../utils/react-redux'\nimport classnames from 'classnames'\nimport { iconClassName, itemClassName } from './CategorySubMenuStyle'\nimport { useSelector } from 'react-redux'\nimport { selectIsPageElligibleForPoisOnRoute } from '../../store/history/history.selectors'\n\nconst MenuSubCategoryItem = ({ id, categoryId, iconId, label, onClick }) => {\n  const execNavigateToSmrBySubCategory = useAction(navigateToPoisOnRouteBySubcategory)\n  const configureAndSendTag = useConfigureAndSendTag()\n  const execNavigateToSearchBySubcategory = useAction(navigateToSearchBySubcategory)\n\n  const isPageElligibleForPoisOnRoute = useSelector(selectIsPageElligibleForPoisOnRoute)\n\n  const onSubCategoryClick = () => e => {\n    configureAndSendTag({\n      type: TAG_CLICK_CATEGORY_BAR,\n      tagInfo: {\n        [CAT_ID]: categoryId,\n        [APP_OR_SUBCAT_ID]: id\n      }\n    })\n\n    if (isPageElligibleForPoisOnRoute) {\n      execNavigateToSmrBySubCategory(id)\n    } else {\n      execNavigateToSearchBySubcategory(id)\n    }\n    onClick()\n  }\n\n  return (\n    <li className={classnames(s.root, itemClassName)} onClick={onSubCategoryClick()}>\n      <span className={classnames(s.subcategoryIcon, iconClassName)}>\n        <SVGIcon icon={iconId} />\n      </span>\n      <span className={s.label}>{label}</span>\n    </li>\n  )\n}\n\nexport default MenuSubCategoryItem\n","export const suggestServiceCtx = {\n  filter: {\n    addresses: 'addresses',\n    places: 'places',\n    all: 'all'\n  },\n  type: {\n    address: 'address',\n    poi: 'poi',\n    store_chain: 'store_chain',\n    rubric: 'rubric'\n  }\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { localeCountryIsUK, localeCountryIsFrance, localeLanguageIsFrench } from '.'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\n\n/* eslint-disable react/display-name */\nexport const withFrenchSite = Component => props => {\n  const locale = useSelector(selectLocale)\n\n  return localeCountryIsFrance(locale) ? <Component {...props} /> : <></>\n}\n\nexport const withFrenchLanguage = Component => props => {\n  const locale = useSelector(selectLocale)\n\n  return localeLanguageIsFrench(locale) ? <Component {...props} /> : <></>\n}\n\nexport const withoutEnglishSite = Component => props => {\n  const locale = useSelector(selectLocale)\n\n  return !localeCountryIsUK(locale) ? <Component {...props} /> : <></>\n}\n","import {\n  ROUTE_ADDRESS_HOME,\n  ROUTE_BICYCLE_CITY,\n  ROUTE_BICYCLE_DEPARTMENT,\n  ROUTE_BICYCLE_HOME,\n  ROUTE_BICYCLE_REGION,\n  ROUTE_DEPARTMENT_HOME,\n  ROUTE_HOME,\n  ROUTE_ITINERARY_COMPUTING,\n  ROUTE_ITINERARY_COMPUTING_BY_MODE,\n  ROUTE_ITINERARY_EXPENSE_REPORT,\n  ROUTE_ITINERARY_HOME,\n  ROUTE_ITINERARY_HP_BY_MODE,\n  ROUTE_ITINERARY_RESULTS_BY_PROVIDER,\n  ROUTE_ITINERARY_RESULTS_BY_ROUTE,\n  ROUTE_ITINERARY_ROADBOOK,\n  ROUTE_ITINERARY_TO,\n  ROUTE_REGION_HOME,\n  ROUTE_RESTRICTION_CITY,\n  ROUTE_RESTRICTION_DEPARTMENT,\n  ROUTE_RESTRICTION_HOME,\n  ROUTE_RESTRICTION_REGION,\n  ROUTE_SEO_ADDRESS,\n  ROUTE_SEO_CITY_ACTIVITY,\n  ROUTE_SEO_CITY_APP,\n  ROUTE_SEO_COUNTRY,\n  ROUTE_SEO_DEPARTMENT,\n  ROUTE_SEO_DIRECTORY_CITY,\n  ROUTE_SEO_DIRECTORY_CITY_ACTIVITY,\n  ROUTE_SEO_DIRECTORY_CITY_OVM_POIS,\n  ROUTE_SEO_DIRECTORY_CITY_OVM_POIS_ACTIVITY,\n  ROUTE_SEO_DIRECTORY_CITY_POIS,\n  ROUTE_SEO_DIRECTORY_ITINERARY,\n  ROUTE_SEO_DIRECTORY_ITINERARY_BY_MODE,\n  ROUTE_SEO_GEOENTITY,\n  ROUTE_SEO_ITINERARY,\n  ROUTE_SEO_ITINERARY_MODE,\n  ROUTE_SEO_SEARCH_BY_APP,\n  ROUTE_SEO_SEARCH_BY_RUBRIC,\n  ROUTE_TOOLS_COMPUTE_RADIUS,\n  ROUTE_TRAFFIC_CITY,\n  ROUTE_TRAFFIC_DEPARTMENT,\n  ROUTE_TRAFFIC_HOME,\n  ROUTE_TRAFFIC_REGION,\n  ROUTE_ZFE_CITY,\n  ROUTE_ZFE_DEPARTMENT,\n  ROUTE_ZFE_HOME,\n  ROUTE_ZFE_REGION\n} from '../../../routes'\nimport { selectFirstAddress } from '../../../store/address/address.selectors'\nimport { selectCurrentGeoentity } from '../../../store/geoentity/geoentity.selectors'\nimport { selectCurrentHistoryRoute } from '../../../store/history/history.selectors'\nimport { projectDistrictZipcodeToWholeCityZipcode } from '../../utils/location'\nimport { createCustomSelector } from '../../utils/react-reselect'\n\nexport const selectShouldDisplayTopSearchTitle = createCustomSelector(\n  selectCurrentHistoryRoute,\n  route => route !== ROUTE_SEO_ITINERARY && route !== ROUTE_SEO_ITINERARY_MODE\n)\n\nexport const selectSeoItineraryLinkLabelPrefix = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_HOME:\n    case ROUTE_SEO_GEOENTITY:\n      return ''\n    case ROUTE_SEO_CITY_ACTIVITY:\n      return 'Trajet'\n    case ROUTE_ADDRESS_HOME:\n    case ROUTE_SEO_ADDRESS:\n    case ROUTE_TRAFFIC_CITY:\n    case ROUTE_BICYCLE_CITY:\n    case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n    case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS:\n    case ROUTE_ZFE_CITY:\n    case ROUTE_RESTRICTION_CITY:\n      return 'Distance'\n    case ROUTE_ITINERARY_HP_BY_MODE:\n    case ROUTE_SEO_ITINERARY_MODE:\n      return 'Itinéraire {mode}'\n    case ROUTE_TRAFFIC_HOME:\n      return 'Itinéraire voiture'\n    case ROUTE_BICYCLE_HOME:\n      return 'Itinéraire à vélo'\n    case ROUTE_ITINERARY_HOME:\n    case ROUTE_SEO_ITINERARY:\n    default:\n      return 'Itinéraire'\n  }\n})\n\nexport const selectSeoCityLinkLabelPrefixKey = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_TRAFFIC_HOME:\n    case ROUTE_BICYCLE_HOME:\n    case ROUTE_ZFE_HOME:\n    case ROUTE_RESTRICTION_HOME:\n    case ROUTE_SEO_COUNTRY:\n    case ROUTE_SEO_DEPARTMENT:\n      return 'footer.cityLink.label.map'\n    default:\n      return 'footer.cityLink.label.default'\n  }\n})\n\nexport const selectSeoInfoTrafficOptions = createCustomSelector(\n  selectCurrentHistoryRoute,\n  selectFirstAddress,\n  selectCurrentGeoentity,\n  (route, firstAddress, geoentity) => {\n    switch (route) {\n      case ROUTE_ADDRESS_HOME:\n        return { max: 10, hpLinkLabel: 'Info trafic en temps réel' }\n\n      case ROUTE_SEO_ADDRESS:\n      case ROUTE_SEO_CITY_ACTIVITY:\n      case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n      case ROUTE_SEO_DIRECTORY_CITY_POIS:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS_ACTIVITY:\n        return { zip: projectDistrictZipcodeToWholeCityZipcode(firstAddress?.postcode) }\n\n      case ROUTE_SEO_GEOENTITY:\n        return { zip: projectDistrictZipcodeToWholeCityZipcode(geoentity?.postcode) }\n\n      case ROUTE_TRAFFIC_HOME:\n        return { min: 20, max: 200 }\n\n      case ROUTE_TRAFFIC_CITY:\n        return { max: 20 }\n\n      case ROUTE_HOME:\n      case ROUTE_BICYCLE_CITY:\n      case ROUTE_ZFE_CITY:\n      default:\n        return { max: 10 }\n    }\n  }\n)\n\nexport const selectSeoBicycleOptions = createCustomSelector(\n  selectCurrentHistoryRoute,\n  selectFirstAddress,\n  selectCurrentGeoentity,\n  (route, firstAddress, geoentity) => {\n    switch (route) {\n      case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS_ACTIVITY:\n      case ROUTE_SEO_ADDRESS:\n        return {\n          linksLabel: 'Carte Pistes cyclables',\n          zip: projectDistrictZipcodeToWholeCityZipcode(firstAddress?.postcode)\n        }\n\n      case ROUTE_SEO_CITY_ACTIVITY:\n      case ROUTE_SEO_DIRECTORY_CITY_POIS:\n        return {\n          hpLinkLabel: 'Pistes Cyclables',\n          zip: projectDistrictZipcodeToWholeCityZipcode(firstAddress?.postcode)\n        }\n\n      case ROUTE_SEO_GEOENTITY:\n        return {\n          hpLinkLabel: 'Pistes Cyclables',\n          zip: projectDistrictZipcodeToWholeCityZipcode(geoentity?.postcode)\n        }\n\n      case ROUTE_BICYCLE_DEPARTMENT:\n      case ROUTE_BICYCLE_REGION:\n        return {\n          hpLinkLabel: 'Pistes Cyclables'\n        }\n\n      case ROUTE_BICYCLE_HOME:\n        return { min: 20, max: 200 }\n\n      case ROUTE_BICYCLE_CITY:\n        return { max: 20 }\n\n      case ROUTE_HOME:\n      case ROUTE_ADDRESS_HOME:\n      case ROUTE_TRAFFIC_CITY:\n      case ROUTE_ZFE_CITY:\n      default:\n        return { max: 10 }\n    }\n  }\n)\n\nexport const selectSeoZfeOptions = createCustomSelector(\n  selectCurrentHistoryRoute,\n  selectFirstAddress,\n  selectCurrentGeoentity,\n  (route, firstAddress, geoentity) => {\n    switch (route) {\n      case ROUTE_HOME:\n        return {\n          hpLinkLabel: \"Zone des restrictions Crit'Air\",\n          max: 10,\n          title: 'Zones à Faibles émissions (ZFE) en France'\n        }\n      case ROUTE_ADDRESS_HOME:\n        return {\n          hpLinkLabel: \"Restrictions Crit'Air\",\n          linksLabel: \"Crit'Air\",\n          max: 10\n        }\n      case ROUTE_SEO_GEOENTITY:\n        return {\n          hpLinkLabel: \"Zones Crit'Air\",\n          zip: projectDistrictZipcodeToWholeCityZipcode(geoentity?.postcode)\n        }\n      case ROUTE_SEO_ADDRESS:\n      case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n      case ROUTE_SEO_DIRECTORY_CITY_POIS:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS:\n      case ROUTE_SEO_DIRECTORY_CITY_OVM_POIS_ACTIVITY:\n        return {\n          hpLinkLabel: \"Zones Crit'Air\",\n          zip: projectDistrictZipcodeToWholeCityZipcode(firstAddress?.postcode),\n          linksLabel: \"Crit'Air\"\n        }\n      case ROUTE_SEO_CITY_ACTIVITY:\n        return {\n          hpLinkLabel: 'Carte des ZFE',\n          zip: projectDistrictZipcodeToWholeCityZipcode(firstAddress?.postcode),\n          linksLabel: \"Restrictions Crit'Air\"\n        }\n      case ROUTE_ZFE_HOME:\n        return { hpLinkLabel: 'Carte des ZFE en France', min: 20, max: 200 }\n      case ROUTE_TRAFFIC_CITY:\n      case ROUTE_RESTRICTION_CITY:\n        return { hpLinkLabel: 'Plan des ZFE', max: 10 }\n      case ROUTE_BICYCLE_CITY:\n        return { hpLinkLabel: 'Zone des restrictions Crit’Air', max: 10 }\n      case ROUTE_ZFE_CITY:\n        return {\n          hpLinkLabel: 'Zone des restrictions Crit’Air',\n          max: 20,\n          title: 'Zones à Faibles émissions (ZFE) en France'\n        }\n      default:\n        return { max: 10 }\n    }\n  }\n)\n\nexport const selectSeoRestrictionOptions = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_RESTRICTION_HOME:\n      return {\n        hpLinkLabel: 'Carte des restrictions de circulation en France',\n        min: 20,\n        max: 200,\n        linksLabel: 'Restrictions de circulation'\n      }\n    default:\n      return {\n        hpLinkLabel: 'Restrictions de circulation'\n      }\n  }\n})\n\nexport const selectSeoHpLayersTitle = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_DEPARTMENT_HOME:\n    case ROUTE_REGION_HOME:\n    case ROUTE_SEO_DIRECTORY_CITY:\n    case ROUTE_SEO_DIRECTORY_ITINERARY:\n    case ROUTE_SEO_DIRECTORY_ITINERARY_BY_MODE:\n    case ROUTE_SEO_SEARCH_BY_APP:\n    case ROUTE_TOOLS_COMPUTE_RADIUS:\n    case ROUTE_SEO_CITY_APP:\n      return 'Options de Carte'\n    case ROUTE_TRAFFIC_DEPARTMENT:\n    case ROUTE_TRAFFIC_REGION:\n    case ROUTE_RESTRICTION_DEPARTMENT:\n    case ROUTE_RESTRICTION_REGION:\n      return 'Autres affichages de cartes'\n    default:\n      return 'Affichage des cartes'\n  }\n})\n\nexport const selectSeoHpLayersTraffic = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_TRAFFIC_HOME:\n    case ROUTE_TRAFFIC_DEPARTMENT:\n    case ROUTE_TRAFFIC_REGION:\n      return { visible: false }\n    case ROUTE_BICYCLE_HOME:\n    case ROUTE_ZFE_HOME:\n    case ROUTE_RESTRICTION_HOME:\n    case ROUTE_SEO_SEARCH_BY_RUBRIC:\n      return { visible: true, min: 0, max: 0, hpLinkLabel: 'Info trafic en temps réel' }\n    case ROUTE_DEPARTMENT_HOME:\n    case ROUTE_REGION_HOME:\n    case ROUTE_BICYCLE_DEPARTMENT:\n    case ROUTE_BICYCLE_REGION:\n    case ROUTE_ZFE_DEPARTMENT:\n    case ROUTE_ZFE_REGION:\n      return { visible: true, hpLinkLabel: \"Carte de l'Info-trafic\" }\n    default:\n      return { visible: true, min: 0, max: 0 }\n  }\n})\n\nexport const selectSeoHpLayersBicycle = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_BICYCLE_HOME:\n    case ROUTE_BICYCLE_DEPARTMENT:\n    case ROUTE_BICYCLE_REGION:\n      return { visible: false }\n    case ROUTE_TRAFFIC_HOME:\n    case ROUTE_RESTRICTION_HOME:\n    case ROUTE_ZFE_HOME:\n      return { visible: true }\n    case ROUTE_DEPARTMENT_HOME:\n    case ROUTE_REGION_HOME:\n      return { visible: true, hpLinkLabel: 'Plan des Pistes Cyclables' }\n    case ROUTE_SEO_SEARCH_BY_RUBRIC:\n    case ROUTE_TRAFFIC_DEPARTMENT:\n    case ROUTE_TRAFFIC_REGION:\n    case ROUTE_ZFE_DEPARTMENT:\n    case ROUTE_ZFE_REGION:\n    case ROUTE_RESTRICTION_DEPARTMENT:\n    case ROUTE_RESTRICTION_REGION:\n      return { visible: true, hpLinkLabel: 'Carte des pistes cyclables' }\n    default:\n      return { visible: true, hpLinkLabel: 'Pistes Cyclables' }\n  }\n})\n\nexport const selectSeoHpLayersZfe = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_ITINERARY_HOME:\n    case ROUTE_ITINERARY_HP_BY_MODE:\n    case ROUTE_ITINERARY_TO:\n    case ROUTE_ITINERARY_COMPUTING:\n    case ROUTE_ITINERARY_COMPUTING_BY_MODE:\n    case ROUTE_ITINERARY_RESULTS_BY_PROVIDER:\n    case ROUTE_ITINERARY_RESULTS_BY_ROUTE:\n    case ROUTE_ITINERARY_EXPENSE_REPORT:\n    case ROUTE_ITINERARY_ROADBOOK:\n    case ROUTE_SEO_ITINERARY:\n    case ROUTE_SEO_ITINERARY_MODE:\n    case ROUTE_SEO_SEARCH_BY_RUBRIC:\n      return { visible: true, hpLinkLabel: \"Restrictions Crit'Air\" }\n    case ROUTE_SEO_DIRECTORY_ITINERARY_BY_MODE:\n    case ROUTE_SEO_DIRECTORY_ITINERARY:\n      return { visible: true, hpLinkLabel: 'Carte ZFE' }\n    case ROUTE_BICYCLE_HOME:\n    case ROUTE_RESTRICTION_HOME:\n      return { visible: true, hpLinkLabel: 'Carte des ZFE en France' }\n    case ROUTE_SEO_DIRECTORY_CITY:\n    case ROUTE_TRAFFIC_HOME:\n    case ROUTE_SEO_SEARCH_BY_APP:\n    case ROUTE_TOOLS_COMPUTE_RADIUS:\n    case ROUTE_SEO_CITY_APP:\n      return { visible: true, hpLinkLabel: 'Carte des ZFE' }\n    case ROUTE_REGION_HOME:\n    case ROUTE_DEPARTMENT_HOME:\n      return { visible: true, hpLinkLabel: 'Plan des ZFE en France' }\n    case ROUTE_TRAFFIC_DEPARTMENT:\n    case ROUTE_TRAFFIC_REGION:\n    case ROUTE_BICYCLE_DEPARTMENT:\n    case ROUTE_BICYCLE_REGION:\n    case ROUTE_RESTRICTION_DEPARTMENT:\n    case ROUTE_RESTRICTION_REGION:\n      return { visible: true, hpLinkLabel: 'Plan des ZFE' }\n    default:\n      return { visible: false }\n  }\n})\n\nexport const selectSeoHpLayersRestriction = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_TRAFFIC_HOME:\n    case ROUTE_SEO_SEARCH_BY_RUBRIC:\n    case ROUTE_SEO_DIRECTORY_ITINERARY_BY_MODE:\n    case ROUTE_SEO_DIRECTORY_ITINERARY:\n    case ROUTE_SEO_DIRECTORY_CITY:\n    case ROUTE_TOOLS_COMPUTE_RADIUS:\n      return { visible: true, hpLinkLabel: 'Restrictions de circulation en temps réel' }\n    case ROUTE_BICYCLE_HOME:\n    case ROUTE_ITINERARY_HP_BY_MODE:\n    case ROUTE_ITINERARY_HOME:\n    case ROUTE_SEO_ITINERARY_MODE:\n    case ROUTE_SEO_ITINERARY:\n    case ROUTE_SEO_CITY_APP:\n      return { visible: true, hpLinkLabel: 'Restrictions de circulation' }\n    case ROUTE_ZFE_HOME:\n    case ROUTE_ZFE_REGION:\n    case ROUTE_ZFE_DEPARTMENT:\n    case ROUTE_TRAFFIC_REGION:\n    case ROUTE_TRAFFIC_DEPARTMENT:\n    case ROUTE_BICYCLE_REGION:\n    case ROUTE_BICYCLE_DEPARTMENT:\n    case ROUTE_DEPARTMENT_HOME:\n    case ROUTE_REGION_HOME:\n    case ROUTE_SEO_SEARCH_BY_APP:\n      return { visible: true, hpLinkLabel: 'Carte des restrictions de circulation' }\n    default:\n      return { visible: false }\n  }\n})\n\nexport const selectSeoPoiDirectoryLabelPrefix = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n      return 'Tous les commerces et services de'\n    default:\n      return 'Commercants de'\n  }\n})\n\nexport const selectSeoPoiOvmDirectoryLabelPrefix = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_SEO_DIRECTORY_CITY_POIS:\n    case ROUTE_SEO_DIRECTORY_CITY_ACTIVITY:\n      return 'Tous les Lieux et commerçants populaires à'\n    default:\n      return 'Plus de lieux populaires à'\n  }\n})\n\nexport const selectSeoActivitiesTitle = createCustomSelector(selectCurrentHistoryRoute, route => {\n  switch (route) {\n    case ROUTE_SEO_SEARCH_BY_APP:\n    case ROUTE_SEO_SEARCH_BY_RUBRIC:\n      return 'Les villes les plus recherchées pour la catégorie Hôtel'\n    default:\n      return 'Activités à découvrir en France'\n  }\n})\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"TYSMm\",\"search\":\"gEZJf\",\"suggest\":\"UKfJ2\",\"back\":\"WMONS\",\"form\":\"bY23q\",\"errorMessage\":\"raxn_\"};","import React from 'react'\nimport RectangleActionButton, { SIZE_BIG } from '../genericComponents/buttons/RectangleActionButton'\nimport { TAG_CLICK_USER_LOGIN_BUTTON } from '../analytics/analytics.tagids.constants'\nimport { withUserKnown } from './shared/withKeycloak'\nimport { useSelector } from 'react-redux'\nimport { selectPrevFullRouteNonPageLess } from '../../store/history/history.selectors'\nimport useKeycloak from './useKeycloak'\n\nconst UserLoginButton = ({ size = SIZE_BIG }) => {\n  const { loaded, keycloak } = useKeycloak()\n  const lastFullRoute = useSelector(selectPrevFullRouteNonPageLess)\n\n  if (!loaded) return <></>\n\n  const loginUrl = keycloak.createLoginUrl({ redirectUri: `${location.origin}${lastFullRoute}` })\n\n  return (\n    <RectangleActionButton\n      tagData={{ type: TAG_CLICK_USER_LOGIN_BUTTON }}\n      nofollow\n      size={size}\n      label=\"Connexion / Inscription\"\n      href={loginUrl}\n    />\n  )\n}\n\nexport default withUserKnown(UserLoginButton)\n","import { requestInventory } from '../../dataSource/itinerary/itinerary.requests'\nimport { PARAM_ARRIVAL_DATE_TIME, PARAM_DEPARTURE_DATE_TIME } from '../../domain/router/queryParameters.constants'\nimport { getCurrentDateISO } from '../../domain/utils/date'\nimport { selectLocale } from '../navigation/navigation.selectors'\nimport {\n  extractDefaultFuelPrices,\n  extractDefaultVehiculeOptions,\n  extractTransportModes\n} from './itineraryOptions.dataParsers'\nimport {\n  setDefaultFuelPrices,\n  setDefaultVehicleOptions,\n  setItineraryArrivalLater,\n  setItineraryDate,\n  setItineraryDepartureLater,\n  setItineraryTime,\n  setPreferredOptionsForMode\n} from './itineraryOptionsSlice'\n\nconst fetchVehiclesOptions = () => (dispatch, getState) => {\n  const locale = selectLocale(getState())\n\n  return requestInventory(locale).then(data => {\n    const vehiclesOptions = extractDefaultVehiculeOptions(data)\n    const transportModes = extractTransportModes(data)\n\n    dispatch(\n      setDefaultVehicleOptions({\n        vehiclesOptions,\n        transportModes\n      })\n    )\n\n    const fuelPrices = extractDefaultFuelPrices(data)\n\n    dispatch(\n      setDefaultFuelPrices({\n        fuelPrices\n      })\n    )\n  })\n}\n\nlet mustFetchItineraryOptions = true\n\nexport const fetchItineraryOptionsConfig = () => (dispatch, getState) => {\n  if (mustFetchItineraryOptions) {\n    mustFetchItineraryOptions = false\n    return fetchVehiclesOptions()(dispatch, getState)\n  }\n\n  return Promise.resolve()\n}\n\nexport const reinitializeFetchItineraryOptionConfig = () => (mustFetchItineraryOptions = true)\n\nexport const changePreferredOptions =\n  ({ modeId, ...newPreferredOptionsForMode }) =>\n  (dispatch, getState) => {\n    dispatch(\n      setPreferredOptionsForMode({\n        modeId,\n        ...newPreferredOptionsForMode\n      })\n    )\n  }\n\nconst REGEX_DATETIME = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/\n\nconst checkDateTimeQueryParams = dateTimeQueryParam => {\n  if (REGEX_DATETIME.test(dateTimeQueryParam)) {\n    const { date } = splitDateTimeFromQueryParams(dateTimeQueryParam)\n    const inputDate = new Date(date)\n    const now = new Date(getCurrentDateISO())\n    return inputDate >= now\n  }\n  return false\n}\n\nconst splitDateTimeFromQueryParams = dateTimeQueryParam => {\n  const [date, time] = dateTimeQueryParam.split('T')\n  return { date, time }\n}\n\nconst setDateTimeFromQueryParams = dateTimeQueryParam => dispatch => {\n  const { date, time } = splitDateTimeFromQueryParams(dateTimeQueryParam)\n  dispatch(setItineraryDate({ date }))\n  dispatch(setItineraryTime({ time }))\n}\n\nexport const setItineraryTimeOptionsFromQueryParams = query => (dispatch, getState) => {\n  if (query.has(PARAM_ARRIVAL_DATE_TIME)) {\n    const datetimeParam = query.get(PARAM_ARRIVAL_DATE_TIME)\n    if (checkDateTimeQueryParams(datetimeParam)) {\n      dispatch(setItineraryArrivalLater())\n      setDateTimeFromQueryParams(datetimeParam)(dispatch)\n    }\n  } else if (query.has(PARAM_DEPARTURE_DATE_TIME)) {\n    const datetimeParam = query.get(PARAM_DEPARTURE_DATE_TIME)\n    if (checkDateTimeQueryParams(datetimeParam)) {\n      dispatch(setItineraryDepartureLater())\n      setDateTimeFromQueryParams(datetimeParam)(dispatch)\n    }\n  }\n}\n","import { parsePositiveNumber } from '../../utils/number'\n\nexport const extractDefaultVehiculeOptions = data => {\n  return data?.vehicles.providers\n}\n\nexport const extractTransportModes = data => {\n  return data?.transport_modes\n}\n\nexport const extractDefaultFuelPrices = data => {\n  const fuelPrices = data?.fuel_prices ?? {}\n  return Object.entries(fuelPrices).reduce((acc, entry) => {\n    const [key, price] = entry\n    acc[key] = parsePositiveNumber(price, 3)\n    return acc\n  }, {})\n}\n","import React from 'react'\nimport RModal from 'react-modal'\nimport s from './Modal.less'\nimport ClosePopinButton from './ClosePopinButton'\nimport { useAction } from '../utils/react-redux'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport { isGE } from '../Device'\nimport { navigateBack } from '../../store/history/history.actions'\nimport { appId } from '../../App'\nimport useModal from '../ui/useModal'\nimport useEventCallback from '../utils/useEventCallback'\n\nconst customStyle = {\n  overlay: {\n    zIndex: 180,\n    backgroundColor: 'rgba(128, 128, 128, 0.55)'\n  },\n  content: {\n    top: '50%',\n    left: '50%',\n    marginRight: '-50%',\n    transform: 'translate(-50%, -50%)',\n    right: 'auto',\n    bottom: 'auto',\n    padding: 0,\n    overflow: 'none',\n    backgroundColor: 'white',\n    borderRadius: '12px',\n    border: '1px solid rgb(204, 204, 204)'\n  }\n}\n\nconst Modal = ({\n  modalId,\n  children,\n  overlayStyle = {},\n  style = {},\n  withCloseButton,\n  hasTag = true,\n  shouldNavigateBackOnClose = false,\n  shouldCloseOnOverlayClick = isGE(),\n  onClose,\n  ...rModalProps\n}) => {\n  const { hideModal, isModalDisplayed } = useModal(modalId)\n  const execNavBack = useAction(navigateBack)\n  RModal.setAppElement(`#${appId}`)\n\n  const stopPropagationHandler = useEventCallback(() => {})\n\n  const onRequestClose = useEventCallback(() => {\n    if (onClose) {\n      onClose()\n    } else if (shouldNavigateBackOnClose) {\n      execNavBack()\n    } else {\n      hideModal()\n    }\n  }, [shouldNavigateBackOnClose, hideModal])\n\n  return (\n    <span className={s.modalContainer} onClick={stopPropagationHandler}>\n      <RModal\n        style={{\n          overlay: {\n            ...customStyle.overlay,\n            ...overlayStyle\n          },\n          content: {\n            ...customStyle.content,\n            ...style\n          }\n        }}\n        shouldCloseOnOverlayClick={shouldCloseOnOverlayClick}\n        onRequestClose={onRequestClose}\n        isOpen={isModalDisplayed}\n        {...rModalProps}\n      >\n        {withCloseButton && <ClosePopinButton className={s.closeButton} hasTag={hasTag} />}\n        {children}\n      </RModal>\n    </span>\n  )\n}\n\n// webpack:BrowserOnly\nexport default withEmptyFallbackErrorBoundary(Modal)\n","// extracted by mini-css-extract-plugin\nexport default {\"modalContainer\":\"BrYsJ\",\"closeButton\":\"pkyux\"};","// extracted by mini-css-extract-plugin\nexport default {\"Throbber\":\"s8ceO\",\"spin\":\"juN8d\"};","import React from 'react'\nimport s from './Throbber.less'\nimport img from './throbber.png'\n\nexport default function Throbber() {\n  return (\n    <div className={s.Throbber}>\n      <img src={img} />\n    </div>\n  )\n}\n","import React from 'react'\nimport { buildForceColorFullString } from '../utils/css'\n\nexport const itemClassName = 'categorySubItem'\nexport const iconClassName = 'categorySubItemIcon'\n\nconst CategorySubMenuStyle = ({ color }) => {\n  const catColorString = buildForceColorFullString(color)\n  const whiteColorString = buildForceColorFullString('white')\n\n  return (\n    <style>\n      {`.${itemClassName}:hover{${catColorString}}`}\n      {`.${iconClassName}{${catColorString}}`}\n      {`.${itemClassName}:hover .${iconClassName}{${whiteColorString}background-color:${color};}`}\n    </style>\n  )\n}\n\nexport default CategorySubMenuStyle\n","import { useCallback, useEffect, useRef } from 'react'\n\nconst useTimeout = (defaultDelay = 0) => {\n  const toRef = useRef()\n  const launch = useCallback(\n    (fn, delay = defaultDelay) => {\n      clearTimeout(toRef.current)\n      toRef.current = setTimeout(() => {\n        fn()\n        toRef.current = undefined\n      }, delay)\n    },\n    [defaultDelay]\n  )\n\n  const stop = useCallback(() => {\n    clearTimeout(toRef.current)\n    toRef.current = undefined\n  }, [])\n\n  const isPending = () => Boolean(toRef.current)\n\n  useEffect(() => {\n    return () => {\n      stop()\n    }\n  }, [])\n\n  return [launch, stop, isPending]\n}\n\nexport default useTimeout\n","import React, { useRef, useCallback, useEffect, useContext } from 'react'\nimport s from './ResponsiveScrollableWrapper.less'\nimport { isGE } from '../../Device'\n\nexport const ScrollContext = React.createContext()\n\nexport const useScrollContext = () => useContext(ScrollContext)\n\nconst TOP = 0\n\nconst ResponsiveScrollableWrapper = ({ children }) => {\n  const scrollableElementRef = useRef()\n\n  const getScrollValue = useCallback(() => {\n    return isGE() ? (scrollableElementRef?.current?.scrollTop ?? TOP) : document.querySelector('html').scrollTop\n  }, [])\n\n  const setScrollValue = useCallback(value => {\n    if (isGE()) {\n      if (scrollableElementRef?.current) {\n        scrollableElementRef.current.scrollTop = value\n      }\n    } else {\n      document.querySelector('html').scrollTop = value\n      document.querySelector('body').scrollTop = value\n      document.documentElement.scrollTo({\n        top: value,\n        behavior: 'smooth'\n      })\n    }\n  }, [])\n\n  const scrollTo = useCallback((scrollGoal, animate = false) => {\n    if (!animate) return setScrollValue(scrollGoal)\n\n    let now0 = null\n    const scroll0 = getScrollValue()\n    const scrollDelta = scrollGoal - scroll0\n    const duration = 500\n    const step = now => {\n      if (now0 === null) now0 = now\n      const t = now - now0\n      const scrollPos = scroll0 + scrollDelta * Math.sin(((Math.PI / 2) * t) / duration)\n      if (t < duration) {\n        setScrollValue(scrollPos)\n        requestAnimationFrame(step)\n      } else {\n        setScrollValue(scrollGoal)\n      }\n    }\n    requestAnimationFrame(step)\n  }, [])\n\n  const scrollTop = useCallback(\n    animate => {\n      scrollTo(TOP, animate)\n    },\n    [scrollTo]\n  )\n\n  useEffect(() => {\n    scrollTop()\n    return () => scrollTop()\n  }, [])\n\n  const addScrollListener = useCallback(fn => {\n    const el = isGE() ? scrollableElementRef?.current : document\n    if (el) el.addEventListener('scroll', fn)\n  }, [])\n\n  const removeScrollListener = useCallback(fn => {\n    const el = isGE() ? scrollableElementRef?.current : document\n    if (el) el.removeEventListener('scroll', fn)\n  }, [])\n\n  const checkIfTargetIsVisible = useCallback((parent, child) => {\n    if (!parent || !child) return false\n\n    const targetTop = child.offsetTop\n    const totalScrollHeight = isGE() ? parent.offsetParent.clientHeight : window.innerHeight\n    const scrollValue = getScrollValue()\n\n    const alreadyVisible = targetTop < totalScrollHeight\n    const scrolledUntilTarget = scrollValue > targetTop - totalScrollHeight\n    return alreadyVisible || scrolledUntilTarget\n  }, [])\n\n  const providerValue = {\n    scrollTop,\n    scrollTo,\n    getScrollValue,\n    addScrollListener,\n    removeScrollListener,\n    checkIfTargetIsVisible\n  }\n\n  return (\n    <div ref={scrollableElementRef} className={s.responsiveScrollableWrapper}>\n      <ScrollContext.Provider value={providerValue}>{children}</ScrollContext.Provider>\n    </div>\n  )\n}\n\nexport default ResponsiveScrollableWrapper\n","// extracted by mini-css-extract-plugin\nexport default {\"responsiveScrollableWrapper\":\"_6M6JB\"};","import React from 'react'\nimport { ROUTE_USER_ACCOUNT } from '../../routes'\nimport { TAG_CLICK_USER_BURGER } from '../analytics/analytics.tagids.constants'\nimport { navigateTo } from '../../store/history/history.actions'\nimport TagActionButton from '../genericComponents/TagActionButton'\nimport hamburger from '../genericComponents/assets/hamburger.svg?raw'\nimport { useAction } from '../utils/react-redux'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './UserButton.less'\nimport UserPicture from './UserPicture'\n\nconst UserButton = () => {\n  const execNavigateTo = useAction(navigateTo)\n  const onClick = useEventCallback(() => {\n    execNavigateTo({\n      route: ROUTE_USER_ACCOUNT\n    })\n  })\n\n  return (\n    <TagActionButton type={TAG_CLICK_USER_BURGER} className={s.root} onClick={onClick} deferClick>\n      <div className={s.avatar}>\n        <UserPicture />\n      </div>\n      <div className={s.menu} dangerouslySetInnerHTML={{ __html: hamburger }}></div>\n    </TagActionButton>\n  )\n}\n\nexport default UserButton\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"Routz\",\"menu\":\"TAKMb\",\"avatar\":\"JuWxx\"};","import React, { useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { ROUTE_ITINERARY_HOME } from '../../routes'\nimport { navigateTo } from '../../store/history/history.actions'\nimport { selectItineraryOptions } from '../../store/history/history.navigate.selectors'\nimport itineraryIcon from '../genericComponents/assets/itinerary.svg?raw'\nimport T from '../i18n/T'\nimport { generateFullRoute } from '../router/routeUtils'\nimport { useAction } from '../utils/react-redux'\nimport s from './ItineraryUniverseButton.less'\n\nconst ItineraryUniverseButton = () => {\n  const { route, routeOptions } = useSelector(selectItineraryOptions)\n\n  const execNavigateTo = useAction(navigateTo)\n\n  const onButtonClick = useCallback(\n    e => {\n      e.preventDefault()\n      execNavigateTo({ route, routeOptions })\n    },\n    [execNavigateTo, route, routeOptions]\n  )\n\n  return (\n    <a href={generateFullRoute(ROUTE_ITINERARY_HOME)} className={s.root} onClick={route && onButtonClick}>\n      <div className={s.button} dangerouslySetInnerHTML={{ __html: itineraryIcon }}></div>\n      <div className={s.text}>\n        <T id=\"universes.itineraries\" />\n      </div>\n    </a>\n  )\n}\n\nexport default ItineraryUniverseButton\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"GNXC0\",\"button\":\"cMzyx\",\"text\":\"Lp0vv\"};","import React, { useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { navigateToHomepage } from '../../store/history/history.actions'\nimport { selectIsMapFullScreen } from '../../store/map/map.selectors'\nimport { selectIsUserAccountEnabled } from '../../store/userAccount/userAccount.selectors'\nimport UserButton from '../UserAccount/UserButton'\nimport { useAction } from '../utils/react-redux'\nimport s from './DesktopPreHeader.less'\nimport ItineraryUniverseButton from './ItineraryUniverseButton'\n\nconst DesktopPreHeader = () => {\n  const isMapFullScreen = useSelector(selectIsMapFullScreen)\n\n  const execNavigateToHomepage = useAction(navigateToHomepage)\n  const onClickToHomepage = useCallback(\n    e => {\n      e.preventDefault()\n      execNavigateToHomepage()\n    },\n    [execNavigateToHomepage]\n  )\n\n  const shouldDisplayUserAccount = useSelector(selectIsUserAccountEnabled)\n\n  return (\n    <div className={s.root}>\n      {shouldDisplayUserAccount && !isMapFullScreen && <UserButton />}\n      <a href=\"/\" className={s.logo} title=\"Mappy\" onClick={onClickToHomepage}>\n        Mappy\n      </a>\n      {!isMapFullScreen && (\n        <div className={s.universeButtons}>\n          <ItineraryUniverseButton />\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport default DesktopPreHeader\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"ujdtY\",\"logo\":\"PBvRE\",\"universeButtons\":\"yq0fl\"};","import classnames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport s from './SubHeader.less'\nimport { selectGeoentityActiveFilter } from '../../store/geoentity/filter.selectors'\n\nconst SubHeader = ({ children }) => {\n  const selectedActiveFilter = useSelector(selectGeoentityActiveFilter)\n\n  return <div className={classnames(s.subHeader, selectedActiveFilter && s.borderless)}>{children}</div>\n}\n\nexport default SubHeader\n","// extracted by mini-css-extract-plugin\nexport default {\"subHeader\":\"_ZRNs\",\"borderless\":\"alqn9\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { PAGE_CLASSES } from '../../routes/pageClasses.constants'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { selectHeaderHeight, selectIsBackButtonDisplayed } from '../../store/ui/ui.selectors'\nimport { selectIsUserAccountEnabled } from '../../store/userAccount/userAccount.selectors'\nimport { isPE } from '../Device'\nimport UserButton from '../UserAccount/UserButton'\nimport MenuCategoriesPE from '../menu/MenuCategoriesPE'\nimport useComputedHeaderHeight from '../ui/useHeaderHeight'\nimport useUIDisplay from '../ui/useUIDisplay'\nimport DesktopPreHeader from './DesktopPreHeader'\nimport s from './Header.less'\nimport SubHeader from './SubHeader'\n\nexport const Header = ({ subHeader, headerButton, children, menuCategoriesPE , transparent }) => {\n  const { isUIDisplayed: suggestDisplayed } = useUIDisplay(UI_ELEMENTS.SUGGEST)\n  const { isUIDisplayed: searchDialogDisplayed } = useUIDisplay(UI_ELEMENTS.SEARCH_DIALOG)\n  const backButtonDisplayed = useSelector(selectIsBackButtonDisplayed)\n  const headerHeight = useSelector(selectHeaderHeight)\n\n  const userAccountEnabled = useSelector(selectIsUserAccountEnabled)\n  const shouldDisplayUserAccount = isPE() && userAccountEnabled && !backButtonDisplayed\n\n  const shouldDisplayMenuCategoriesPE = menuCategoriesPE && !suggestDisplayed && !searchDialogDisplayed\n\n  const computedHeaderHeight = useComputedHeaderHeight(menuCategoriesPE, subHeader)\n\n  return (\n    <header className={s.root} style={{ height: computedHeaderHeight }}>\n      <div\n        className={classNames(\n          s.container,\n          backButtonDisplayed && PAGE_CLASSES.withBackButton,\n          !suggestDisplayed && headerButton && PAGE_CLASSES.withHeaderButton,\n          shouldDisplayUserAccount && PAGE_CLASSES.withUserAccountButton,\n          transparent && s.transparent\n        )}\n        style={{\n          height: headerHeight\n        }}\n      >\n        {shouldDisplayUserAccount && (\n          <div className={s.userAccountPE}>\n            <UserButton />\n          </div>\n        )}\n        {children}\n        {!suggestDisplayed && headerButton}\n      </div>\n      {subHeader && <SubHeader key=\"SubHeader\">{subHeader}</SubHeader>}\n      <DesktopPreHeader key={'desktop-pre-header'} />\n      {shouldDisplayMenuCategoriesPE && (\n        <div className={s.menuCategoriesPE}>\n          <MenuCategoriesPE />\n        </div>\n      )}\n    </header>\n  )\n}\n\nexport default Header\n","// extracted by mini-css-extract-plugin\nexport default {\"Chevron\":\"foapW\",\"Content\":\"Kbb01\",\"Details\":\"PTcWj\",\"Summary\":\"H0Zjx\"};","import classNames from 'classnames'\nimport React from 'react'\nimport SVGIcon from '../svg/SVGIcon'\nimport useToggle from '../utils/useToggle'\nimport s from './Details.less'\nimport down from './assets/down.svg'\n\nexport default function Details({ summary, classes = [], toggleClasses = [], children }) {\n  const [open, onClick] = useToggle()\n\n  return (\n    <details open={open} className={classNames(s.Details, ...classes)}>\n      <summary className={s.Summary} onClick={onClick}>\n        {summary}\n        <span className={classNames(s.Chevron, ...toggleClasses)}>\n          <SVGIcon url={down} />\n        </span>\n      </summary>\n      <div className={s.Content}>{children}</div>\n    </details>\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"t0jbF\",\"subcategoryIcon\":\"ni2Gv\",\"label\":\"O2AiI\",\"logoWrapper\":\"m9Zbf\",\"logo\":\"r4vte\"};","import React from 'react'\nimport { navigateToSearchByApp, navigateToPoisOnRouteByApp } from '../../store/history/history.actions'\nimport { TAG_CLICK_CATEGORY_BAR } from '../analytics/analytics.tagids.constants'\nimport { APP_OR_SUBCAT_ID, CAT_ID } from '../analytics/ClickTagsService'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport { useAction } from '../utils/react-redux'\nimport s from './MenuSubCategoryItem.less'\nimport { itemClassName } from './CategorySubMenuStyle'\nimport classnames from 'classnames'\nimport { selectIsPageElligibleForPoisOnRoute } from '../../store/history/history.selectors'\nimport { useSelector } from 'react-redux'\n\nconst MenuApplicationItem = ({ id, logo, name, categoryId, onClick }) => {\n  const execNavigateToSmrByApp = useAction(navigateToPoisOnRouteByApp)\n  const configureAndSendTag = useConfigureAndSendTag()\n  const execNavigateToSearchByApp = useAction(navigateToSearchByApp)\n\n  const isPageElligibleForPoisOnRoute = useSelector(selectIsPageElligibleForPoisOnRoute)\n\n  const onApplicationClick = (categoryId, appId) => e => {\n    configureAndSendTag({\n      type: TAG_CLICK_CATEGORY_BAR,\n      tagInfo: {\n        [CAT_ID]: categoryId,\n        [APP_OR_SUBCAT_ID]: appId\n      }\n    })\n\n    if (isPageElligibleForPoisOnRoute) {\n      execNavigateToSmrByApp(id)\n    } else {\n      execNavigateToSearchByApp(appId)\n    }\n    onClick()\n  }\n\n  return (\n    <li className={classnames(s.root, itemClassName)} onClick={onApplicationClick(categoryId, id)}>\n      <span className={s.logoWrapper}>\n        <img src={logo} className={s.logo} />\n      </span>\n      <span className={s.label}>{name}</span>\n    </li>\n  )\n}\n\nexport default MenuApplicationItem\n","import React from 'react'\nimport s from './ImageWithFallback.less'\nimport classnames from 'classnames'\n\nconst ImageWithFallback = ({ image, fallbackImage, height, width, alt, lazyLoading = true, className }) => (\n  <picture className={s.root}>\n    {image && (\n      <source className={className} srcSet={typeof image === 'string' ? image : image?.src} type=\"image/webp\" />\n    )}\n    <img\n      className={classnames(s.image, className)}\n      src={fallbackImage}\n      width={width}\n      height={height}\n      alt={alt}\n      loading={lazyLoading ? 'lazy' : 'eager'}\n    />\n  </picture>\n)\n\nexport default ImageWithFallback\n","// extracted by mini-css-extract-plugin\nexport default {\"linkc\":\"Eg5YX\",\"linkcu\":\"aqNhC\",\"roundInput\":\"mCSeu\",\"invertColor\":\"xrMkt\",\"button-style\":\"cHVhb\",\"round-button-style\":\"xzibo\",\"green-full-button-hover-style\":\"B7EuD\",\"green-empty-button-style\":\"fNn5N\",\"grey-empty-button-style\":\"PUbSY\",\"blue-full-button-style\":\"YfhTP\",\"blue-full-button-hover-style\":\"bOadP\",\"big-button-style\":\"qn3WV\",\"root\":\"PUg8n\",\"image\":\"IGwYG\"};","import React from 'react'\n\nconst ImageMarker = ({ src, height, width }) => {\n  if (!src || !height || !width) return <></>\n\n  const imgStyle = {\n    backgroundSize: 'cover',\n    width: width + 'px',\n    height: height + 'px'\n  }\n\n  return <img style={imgStyle} src={src} />\n}\n\nexport default ImageMarker\n","import classnames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsUserConnected, selectUserPicture } from '../../store/userAccount/userAccount.selectors'\nimport s from './UserPicture.less'\nimport compteUser from './assets/compte-user.svg?raw'\n\nconst UserPicture = ({ wrapperClassName, defaultIconClassName, userPicClassName }) => {\n  const connected = useSelector(selectIsUserConnected)\n  const picture = useSelector(selectUserPicture)\n  const shouldDisplayPicture = connected && picture\n\n  return (\n    <div className={classnames(s.root, wrapperClassName)}>\n      <div className={classnames(s.circle, connected && s.connected)}>\n        <span\n          dangerouslySetInnerHTML={{ __html: compteUser }}\n          className={classnames(s.defaultIcon, defaultIconClassName)}\n        />\n        {shouldDisplayPicture && (\n          <div className={classnames(s.userPic, userPicClassName)} style={{ backgroundImage: `url('${picture}')` }} />\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default UserPicture\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"Qd68O\",\"circle\":\"SmO1O\",\"defaultIcon\":\"wKABM\",\"connected\":\"yoNmq\",\"userPic\":\"gmxBL\"};","import { selectCurrentHistoryRoute, selectIsCurrentHistoryRoutePageless } from '../store/history/history.selectors'\nimport { requestPageAdConfig } from '../store/ad/ad.actions'\nimport { avoidReloadOnBackNav, processOnRouteLeave } from '../domain/router/routeUtils'\nimport RouteHandlingState from './RouteHandlingState'\nimport { noop } from '../utils/function'\nimport { noticeNavigationDone } from '../store/history/history.actions'\n\n/**\n * Each route has to implement 2 functions:\n * - onRouteEnter -> return a promise after executions of redux actions\n * - renderPage -> return JSX representation of the page\n * And can implement a third one:\n * - onRouteLeave -> execute actions when the page is left\n * */\n\nexport const handleRouteLoading =\n  ({ onRouteEnter, renderPage, onRouteLeave }) =>\n  ({ routeContext, params } = {}) => {\n    if (__SERVER__ && !renderPage) throw Error('renderPage should always be defined on server')\n    if (!onRouteEnter) console.warn('Be careful the function onRouteEnter has not been passed')\n\n    const routeHandlingState = RouteHandlingState.getInstance()\n\n    const { action, state, store, prevRoute } = routeContext // FIXME NES-1803\n    const avoidFetchData =\n      (state && state.avoidDispatchingAnyPageAction && action !== 'POP') ||\n      (action === 'POP' && avoidReloadOnBackNav(prevRoute?.route))\n    const avoidPageTag = state && state.avoidPageTag\n\n    processOnRouteLeave({ routeContext, params, currentOnRouteLeave: onRouteLeave })\n\n    const avoidRefetchingPageData = state && state.avoidRefetchingPageData\n    const currentRouteIsNotPageless = !selectIsCurrentHistoryRoutePageless(store.getState())\n\n    routeHandlingState.renderPage = renderPage\n\n    let actionsToDispatch = Promise.resolve()\n\n    if (__BROWSER__) {\n      if (currentRouteIsNotPageless)\n        requestPageAdConfig(selectCurrentHistoryRoute(store.getState()))(store.dispatch, store.getState)\n\n      if (avoidFetchData) {\n        if (!avoidPageTag) deferSendingPageTag(routeContext)()\n      } else {\n        onRouteEnter({ routeContext, store, params, state, avoidRefetchingPageData }).then(\n          !avoidPageTag ? deferSendingPageTag(routeContext) : noop\n        )\n      }\n    } else {\n      actionsToDispatch = onRouteEnter({ routeContext, store, params, state, avoidRefetchingPageData })\n    }\n\n    return actionsToDispatch.then(() => ({\n      component: routeHandlingState.renderPage({ routeContext, params, state })\n    }))\n  }\n\nexport const deferSendingPageTag = routeContext => {\n  const { store } = routeContext\n  const previousRoute = selectCurrentHistoryRoute(store.getState())\n  return () => {\n    const currentRoute = selectCurrentHistoryRoute(store.getState())\n\n    if (previousRoute === currentRoute && __BROWSER__) {\n      noticeNavigationDone(routeContext)(store.dispatch, store.getState)\n    }\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"XdwHk\",\"list\":\"Gw2WM\",\"listItem\":\"g7POR\",\"listItemFavorites\":\"jTuRJ\",\"arrow\":\"jqhSM\",\"arrowRight\":\"ZBeNf\",\"arrowLeft\":\"HxR2B\"};","import React, { useState } from 'react'\nimport useEventCallback from './useEventCallback'\nimport s from './SwitchInput.less'\nimport classNames from 'classnames'\nimport useEffectExceptMount from './useEffectExceptMount'\n\nconst SwitchInput = ({ onChange, defaultValue = false }) => {\n  const [value, setValue] = useState(defaultValue)\n\n  useEffectExceptMount(() => {\n    onChange(value)\n  }, [value])\n\n  const onClick = useEventCallback(() => {\n    setValue(!value)\n  }, [value])\n\n  return (\n    <div onClick={onClick} className={classNames(s.root, value && s.active)}>\n      <div className={s.button} />\n    </div>\n  )\n}\n\nexport default SwitchInput\n","import { useEffect, useRef } from 'react'\n\nconst useEffectExceptMount = (fn, deps) => {\n  const initialMount = useRef(true)\n  useEffect(() => {\n    if (initialMount.current) {\n      initialMount.current = false\n    } else {\n      return fn()\n    }\n  }, deps)\n}\n\nexport default useEffectExceptMount\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"I9KMH\",\"active\":\"CINep\",\"button\":\"RKMkG\"};","import { useDispatch, useSelector } from 'react-redux'\nimport { ROUTE_USER_ACCOUNT } from '../../routes'\nimport { navigateTo } from '../../store/history/history.actions'\nimport { MODAL_IDS, USER_SCREENS } from '../../store/ui/ui.constants'\nimport { setUiUserScreen } from '../../store/ui/uiSlice'\nimport { selectIsUserConnected } from '../../store/userAccount/userAccount.selectors'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport useModal from '../ui/useModal'\nimport { useAction } from '../utils/react-redux'\n\nconst useIncentiveClick = ({ onClick, incentiveTagClickBuilder }) => {\n  const dispatch = useDispatch()\n  const isConnected = useSelector(selectIsUserConnected)\n  const { displayModal } = useModal(MODAL_IDS.USER_ACCOUNT_INCENTIVE_POPIN)\n  const configureAndSendTag = useConfigureAndSendTag()\n  const execNavigateTo = useAction(navigateTo)\n  const manageFavorite = type => dispatch(setUiUserScreen({ name: USER_SCREENS.manageFavorite, params: { type } }))\n\n  const onIncentiveClick = suggest => {\n    const { incentive, type } = suggest\n    if (!incentive) {\n      onClick(suggest)\n    } else if (isConnected) {\n      configureAndSendTag(incentiveTagClickBuilder(suggest))\n      manageFavorite(type)\n      execNavigateTo({ route: ROUTE_USER_ACCOUNT })\n    } else {\n      displayModal()\n      configureAndSendTag(incentiveTagClickBuilder(suggest))\n    }\n  }\n\n  return { onIncentiveClick }\n}\n\nexport default useIncentiveClick\n","import { useEffect, useState } from 'react'\nimport useTimeout from '../utils/useTimeout'\n\nexport function useTemporaryVisible(timeout = 3000) {\n  const [visible, setVisible] = useState()\n\n  const [setAction, clear] = useTimeout(timeout)\n\n  useEffect(() => {\n    if (visible) {\n      clear()\n      setAction(() => {\n        setVisible(false)\n      })\n    }\n  }, [visible])\n\n  return [visible, setVisible]\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport {\n  selectIsUserConnected,\n  selectIsUserKnown,\n  selectIsUserNotConnected\n} from '../../../store/userAccount/userAccount.selectors'\n\n/* eslint-disable react/display-name */\nexport const withUserConnected = Component => props => {\n  if (__SERVER__) return <></>\n\n  const isConnected = useSelector(selectIsUserConnected)\n\n  return isConnected ? <Component {...props} /> : null\n}\n\n/* eslint-disable react/display-name */\nexport const withUserNotConnected = Component => props => {\n  if (__SERVER__) return <></>\n\n  const isNotConnected = useSelector(selectIsUserNotConnected)\n\n  return isNotConnected ? <Component {...props} /> : null\n}\n\nexport const withUserKnown = Component => props => {\n  if (__SERVER__) return <></>\n\n  const isKnown = useSelector(selectIsUserKnown)\n\n  return isKnown ? <Component {...props} /> : null\n}\n\nexport const withUserUnknown = Component => props => {\n  if (__SERVER__) return <></>\n\n  const isKnown = useSelector(selectIsUserKnown)\n\n  return !isKnown ? <Component {...props} /> : null\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"VYaek\",\"menuCategoriesPE\":\"Ke0YP\",\"container\":\"Oj56O\",\"transparent\":\"uQiPw\",\"mainButton\":\"uzKXE\",\"mainButtonIcon\":\"mfQZu\",\"mainButtonLabel\":\"IDx1g\",\"userAccountPE\":\"aWLQI\"};","import { useEffect } from 'react'\nimport useConfigureAndSendTag from './useConfigureAndSendTag'\n\nconst useImpressionTag = (condition, { type, tagInfo }) => {\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  useEffect(() => {\n    if (condition) {\n      configureAndSendTag({\n        type,\n        tagInfo,\n        isImpression: true\n      })\n    }\n  }, [condition])\n}\n\nexport default useImpressionTag\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\n\nimport { TAG_PUBLISHER } from '../analytics/analytics.tagids.constants'\nimport { selectMapEventPopin, selectShouldDisplayMapEventPopin } from '../../store/map/map.selectors'\nimport { resetMapEventsPopin } from '../../store/map/mapSlice'\nimport { PUB_TAG } from '../analytics/PublisherTagsService'\nimport useImpressionTag from '../analytics/useImpressionTag'\nimport cross from '../genericComponents/assets/cross.svg'\nimport { withMapInitialized } from '../map/map.utils'\nimport SVGIcon from '../svg/SVGIcon'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './MapEventPopin.less'\n\nconst MapEventPopin = () => {\n  const dispatch = useDispatch()\n  const mapEventPopinInfo = useSelector(selectMapEventPopin)\n  const shouldDisplayMapEvenPopin = useSelector(selectShouldDisplayMapEventPopin)\n\n  useImpressionTag(mapEventPopinInfo?.title, {\n    type: TAG_PUBLISHER,\n    tagInfo: { tag: PUB_TAG.PUB_MAP_LEGENDE_LAYER_CARTE, title_popin: mapEventPopinInfo?.title },\n    isImpression: true\n  })\n\n  const onClick = useEventCallback(() => dispatch(resetMapEventsPopin()))\n\n  if (!mapEventPopinInfo || !shouldDisplayMapEvenPopin) return <></>\n\n  const { title, description, asset_zone, asset_event } = mapEventPopinInfo\n\n  return (\n    <div className={s.container}>\n      <SVGIcon url={asset_zone} className={s.asset} />\n      <div className={s.textContainer}>\n        <SVGIcon url={asset_event} className={s.logo} />\n        <span className={s.title}>{title}</span>\n        <span className={s.description}>{description}</span>\n      </div>\n      <div className={s.closeButton} onClick={onClick}>\n        <SVGIcon url={cross} />\n      </div>\n    </div>\n  )\n}\n\nexport default withMapInitialized(MapEventPopin)\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"fYOJm\",\"textContainer\":\"GYDxc\",\"title\":\"Cjljx\",\"description\":\"drC_n\",\"closeButton\":\"ONgij\",\"asset\":\"sbnMM\",\"logo\":\"cyzMD\"};","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ROUTE_360_VIEW_FULLSCREEN } from '../../routes'\nimport { navigateTo } from '../../store/history/history.actions'\nimport { selectIsMapFullScreen } from '../../store/map/map.selectors'\nimport { displayMapPopup, hideMapPopup } from '../../store/map/mapSlice'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { displayOutdoor } from '../../store/ui/ui.actions'\nimport { selectIsOutdoorPrompted } from '../../store/ui/ui.outdoor.selectors'\nimport person from '../genericComponents/assets/person.svg'\nimport { useMapContext } from '../map/MapContext'\nimport { withMapInitialized } from '../map/map.utils'\nimport { POPUP_TYPE_PANO } from '../map/popup/popup.selectors'\nimport SVGIcon from '../svg/SVGIcon'\nimport { useAction } from '../utils/react-redux'\nimport useTimeout from '../utils/useTimeout'\nimport s from './UPI.less'\nimport { OUTDOOR_STATUS_PROMPT, fetchPano } from './Utils'\n\nconst UPI_SIZE = 30\nconst PREVIEW_DELAY = 500\nconst MAP_OFFSET_X = 415\nconst MAP_OFFSET_Y = 70\n\nconst useOutdoorPreviewPopup = () => {\n  const dispatch = useDispatch()\n  const execDisplayOutdoor = useAction(displayOutdoor)\n  const locale = useSelector(selectLocale)\n\n  const displayPreview = useCallback(\n    coords => {\n      fetchPano(coords, locale)\n        .catch(() => console.debug('Pas de pano', coords))\n        .then(panoData => {\n          execDisplayOutdoor({ ...panoData, ...coords, status: OUTDOOR_STATUS_PROMPT })\n          dispatch(displayMapPopup(POPUP_TYPE_PANO))\n        })\n    },\n    [locale]\n  )\n\n  const closePreview = useCallback(() => {\n    dispatch(hideMapPopup())\n    execDisplayOutdoor({ status: OUTDOOR_STATUS_PROMPT })\n  }, [])\n\n  return {\n    displayPreview,\n    closePreview\n  }\n}\n\nconst UPI = () => {\n  const { map } = useMapContext()\n  const isDisplayed = useSelector(selectIsOutdoorPrompted)\n  const isMapFullScreen = useSelector(selectIsMapFullScreen)\n  const execNavigateTo = useAction(navigateTo)\n  const offsetX = isMapFullScreen ? 0 : MAP_OFFSET_X\n  const locale = useSelector(selectLocale)\n\n  const elementRef = useRef()\n  const [coords, setCoords] = useState()\n  const [setPreviewTimeout, clearPreviewTimeout] = useTimeout(PREVIEW_DELAY)\n  const { displayPreview, closePreview } = useOutdoorPreviewPopup()\n\n  useEffect(() => {\n    if (isDisplayed) {\n      follow()\n    } else {\n      unfollow()\n    }\n  }, [isDisplayed])\n\n  useEffect(() => {\n    if (coords) {\n      closePreview()\n      clearPreviewTimeout()\n      setPreviewTimeout(() => displayPreview(coords))\n    }\n  }, [coords])\n\n  const follow = () => {\n    map.on('click', mapClicked)\n    map.on('mousemove', mapMouseMove)\n    map.getCanvas().style.cursor = 'pointer'\n    document.querySelector('body').addEventListener('mousemove', bodyMouseMove)\n  }\n\n  const unfollow = () => {\n    map.off('click', mapClicked)\n    map.off('mousemove', mapMouseMove)\n    map.getCanvas().style.cursor = ''\n    document.querySelector('body').removeEventListener('mousemove', bodyMouseMove)\n    clearPreviewTimeout()\n  }\n\n  const launchOutdoor = coords => {\n    closePreview()\n    unfollow()\n    fetchPano(coords, locale)\n      .then(panoData => {\n        if (panoData?.panoramicId) {\n          execNavigateTo({\n            route: ROUTE_360_VIEW_FULLSCREEN,\n            routeOptions: { panoramicId: panoData.panoramicId }\n          })\n        }\n      })\n      .catch(() => {\n        follow()\n        displayPreview(coords)\n      })\n  }\n\n  const onClicked = () => {\n    launchOutdoor(coords)\n  }\n\n  const mapClicked = event => {\n    launchOutdoor(event.lngLat)\n  }\n\n  const mapMouseMove = useCallback(\n    event => {\n      setCoords(event.lngLat)\n    },\n    [setCoords]\n  )\n\n  const onMouseMove = useCallback(\n    ({ x, y }) => {\n      if (!elementRef.current) return\n      elementRef.current.style.top = `${y - UPI_SIZE - 7}px`\n      elementRef.current.style.left = `${x - UPI_SIZE / 2}px`\n    },\n    [elementRef.current]\n  )\n\n  const bodyMouseMove = useCallback(\n    event => {\n      const { clientX, clientY } = event\n      onMouseMove({ x: clientX - offsetX, y: clientY - MAP_OFFSET_Y })\n    },\n    [onMouseMove, offsetX]\n  )\n\n  if (!isDisplayed) return <></>\n\n  return (\n    <div ref={elementRef} className={s.root} onClick={onClicked}>\n      <SVGIcon url={person} />\n    </div>\n  )\n}\n\nexport default withMapInitialized(UPI)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"J1XZZ\"};","import { useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectGeolocationStatus } from '../../store/geolocation/geolocation.selectors'\nimport { setGeolocationStatus } from '../../store/geolocation/geolocationSlice'\nimport {\n  GEOLOC_STATUS_ACTIVE,\n  GEOLOC_STATUS_FOLLOW,\n  MAPLIBRE_EVENT_MOVE,\n  MAPLIBRE_EVENT_ZOOM\n} from '../../store/map/map.constants'\nimport { debounce } from '../../utils/function'\nimport { MAP_STORE_UPDATE_DELAY } from './map.constants'\nimport { withMapInitialized } from './map.utils'\nimport { useEffectWithMapContext } from './MapContext'\n\nfunction Geolocation() {\n  const status = useSelector(selectGeolocationStatus)\n  const dispatch = useDispatch()\n\n  const onMapMove = useCallback(\n    event => {\n      const statusIsFollow = status === GEOLOC_STATUS_FOLLOW\n      const moveFromUser = !event.fromAppAction && event.type === MAPLIBRE_EVENT_MOVE\n      if (statusIsFollow && moveFromUser) {\n        dispatch(setGeolocationStatus(GEOLOC_STATUS_ACTIVE))\n      }\n    },\n    [status, setGeolocationStatus]\n  )\n\n  const onMapMoveDelayed = debounce(onMapMove, MAP_STORE_UPDATE_DELAY)\n\n  useEffectWithMapContext(map => {\n    map.on(MAPLIBRE_EVENT_MOVE, onMapMoveDelayed)\n    map.on(MAPLIBRE_EVENT_ZOOM, onMapMoveDelayed)\n    return () => {\n      map.off(MAPLIBRE_EVENT_MOVE, onMapMoveDelayed)\n      map.off(MAPLIBRE_EVENT_ZOOM, onMapMoveDelayed)\n    }\n  }, [])\n\n  return null\n}\n\nexport default withMapInitialized(Geolocation)\n","export default class MapLoadingError extends Error {\n  constructor(e) {\n    super(e)\n    this.originalError = e\n    this.name = 'MapLoadingError'\n  }\n}\n","import { isGE } from '../Device'\nimport { DELAY_TO_TRIGGER_CONTEXTMENU_ON_MOBILE, MIN_INTERVAL_TO_DISTINGUISH_SGLE_FROM_DBL_TAP } from './map.constants'\n\nlet lastTimeout\nlet nbClick = 0\n/*\n * On double click, maplibre triggers 2 single `click` events then a `dlbclick` event...\n * Since we’re enabling fullscreen on mobile on a single click, that causes a problem.\n * The fix below handles that situation by calling default handler on single click and zooming on 2 clicks\n */\nexport const handleMobileTap = (e, mapInstance, handler, { maxZoom }, interact) => {\n  nbClick++\n  if (!lastTimeout) {\n    const currentZoom = mapInstance.getZoom()\n    lastTimeout = setTimeout(() => {\n      if (nbClick === 1) {\n        handler(e)\n      } else if (nbClick === 2 && currentZoom < maxZoom) {\n        const where = {\n          center: e.lngLat,\n          zoom: currentZoom + 1,\n          curve: 1\n        }\n        interact(where)\n      }\n      clearInterval(lastTimeout)\n      lastTimeout = undefined\n      nbClick = 0\n    }, MIN_INTERVAL_TO_DISTINGUISH_SGLE_FROM_DBL_TAP)\n  }\n}\n\n/*\n * https://github.com/maplibre/maplibre-gl-js/issues/373\n */\nexport const handleMobileLongTouchAsContextMenu = mapInstance => {\n  if (isGE()) return\n\n  let lastTimeout\n\n  mapInstance.on('touchstart', e => {\n    if (e.originalEvent?.touches?.length > 1) {\n      clearTimeout(lastTimeout)\n      return\n    }\n    lastTimeout = setTimeout(\n      () => mapInstance.fire({ ...e, type: 'contextmenu' }),\n      DELAY_TO_TRIGGER_CONTEXTMENU_ON_MOBILE\n    )\n  })\n  mapInstance.on('touchmove', () => clearTimeout(lastTimeout))\n  mapInstance.on('touchend', () => clearTimeout(lastTimeout))\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport { omit } from '../../../utils/object'\nimport SentryService from '../../error/SentryService'\n\nexport const mergeOptions = (prevOptions, newOptions) => {\n  const toOmit = []\n  if (newOptions.bounds) toOmit.push('center', 'zoom')\n  if (newOptions.center) toOmit.push('bounds')\n  return omit(\n    {\n      ...(prevOptions || {}),\n      ...newOptions,\n      ...(prevOptions?.animate !== undefined || newOptions?.animate !== undefined\n        ? { animate: Boolean(prevOptions?.animate || newOptions?.animate) }\n        : {})\n    },\n    toOmit\n  )\n}\n\nconst mergeEventData = (prevEventData, newEventData) => ({ ...prevEventData, ...newEventData })\n\nconst setPaddingWithoutVisibleMove = (map, padding) => {\n  if (!map) return\n  map.stop()\n  const currentPadding = map.getPadding()\n  const xyCenter = map.project(map.getCenter())\n  const deltaX = (currentPadding.left - padding.left - (currentPadding.right - padding.right)) / 2\n  const deltaY = (currentPadding.top - padding.top - (currentPadding.bottom - padding.bottom)) / 2\n  const center = map.unproject({\n    x: xyCenter.x - deltaX,\n    y: xyCenter.y - deltaY\n  })\n  map.flyTo({ center, padding, animate: false })\n}\n\nconst executeInteraction = (map, options, eventData) => {\n  if (!options) {\n    SentryService.captureException(new Error('options undefined in useMapBoundsInteraction.executeInteraction'))\n    return\n  }\n  if (options.bounds) {\n    if (options.padding) setPaddingWithoutVisibleMove(map, options.padding)\n    map.fitBounds(options.bounds, omit(options, ['bounds', 'padding']), eventData)\n  } else {\n    map.flyTo(options, eventData)\n  }\n}\n\nconst useMapBoundsInteraction = map => {\n  const waitingOptionsRef = useRef({})\n  const wantedPadding = useRef(null)\n  const moveEndRef = useRef()\n\n  useEffect(() => {\n    if (!map) return\n    moveEndRef.current = () => {\n      waitingOptionsRef.current = {}\n    }\n  }, [map])\n\n  return useCallback(\n    (options, eventData = {}) => {\n      if (!map || !options) return\n\n      if (moveEndRef.current) map.off('moveend', moveEndRef.current)\n\n      waitingOptionsRef.current = {\n        options: mergeOptions(waitingOptionsRef.current?.options, options),\n        eventData: mergeEventData(waitingOptionsRef.current?.eventData, eventData)\n      }\n      if (waitingOptionsRef.current?.options.padding) {\n        wantedPadding.padding = waitingOptionsRef.current?.options.padding\n      } else if (wantedPadding.padding) {\n        waitingOptionsRef.current.options.padding = wantedPadding.padding\n      }\n\n      executeInteraction(map, waitingOptionsRef.current.options, waitingOptionsRef.current.eventData)\n      map.once('moveend', moveEndRef.current)\n    },\n    [map]\n  )\n}\n\nexport default useMapBoundsInteraction\n","import debug from 'debug'\nimport { Map as MapLibreMap } from 'maplibre-gl'\nimport 'maplibre-gl/src/css/maplibre-gl.css'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport {\n  MAPLIBRE_EVENT_MOVE,\n  MAPLIBRE_EVENT_ZOOM,\n  MAP_STATUS_INIT,\n  MAP_STATUS_RELOADING,\n  MAP_STATUS_STYLED\n} from '../../store/map/map.constants'\nimport {\n  selectCouldMapFullScreen,\n  selectIsMapFullScreen,\n  selectMapBbox,\n  selectMapMaxZoom,\n  selectMapService,\n  selectMapStatus,\n  selectMapTargetData\n} from '../../store/map/map.selectors'\nimport { acknowledgeMapMove, mapDestroyed, mapUpdated, setMapStatus, toggleFullscreen } from '../../store/map/mapSlice'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { debounce, throttle } from '../../utils/function'\nimport { isGE } from '../Device'\nimport { getMapSessionId } from '../analytics/BiTagger'\nimport MapLoadingError from '../error/MapLoadingError'\nimport SentryService from '../error/SentryService'\nimport RectangleActionButton, { SIZE_MEDIUM } from '../genericComponents/buttons/RectangleActionButton'\nimport { isPolylineAroundPointer } from '../utils/map'\nimport { useLiveSelector, useRefFromSelector } from '../utils/selector'\nimport { addParamsToUrl } from '../utils/url'\nimport useErrorBoundaryCallback from '../utils/useErrorBoundaryCallback'\nimport s from './DynamicMap.less'\nimport { MapContext } from './MapContext'\nimport { MAP_STORE_UPDATE_DELAY, MAP_ZOOM_MIN } from './map.constants'\nimport {\n  MAP_FROM_APP_ACTION_MOVE,\n  MAP_FROM_APP_ACTION_PADDING,\n  computeMapActiveBbox,\n  computePixelsDeltaBetweenBboxes,\n  computeSearchBbox,\n  isWebglSupported\n} from './map.utils'\nimport { handleMobileLongTouchAsContextMenu, handleMobileTap } from './maplibre.fixes'\nimport useMapBoundsInteraction from './tools/useMapBoundsInteraction'\n\nconst d = debug('map')\n\n// webpack:BrowserOnly\nconst MapProvider = ({ children }) => {\n  const dispatch = useDispatch()\n  // state\n  const mapInstanceRef = useRef(null)\n  const mapContainerRef = useRef()\n  const [mapStyleName, setMapStyleName] = useState('')\n  const [error, setError] = useState(null)\n\n  // selectors\n  const storeBboxRef = useRefFromSelector(selectMapBbox)\n  const getTargetData = useLiveSelector(selectMapTargetData)\n  const couldFullScreen = useSelector(selectCouldMapFullScreen)\n  const isMapFullScreen = useSelector(selectIsMapFullScreen)\n  const mapService = useSelector(selectMapService)\n  const maxZoom = useSelector(selectMapMaxZoom)\n  const mapStatus = useSelector(selectMapStatus)\n  const locale = useSelector(selectLocale)\n\n  const displayWebGlError = error => {\n    const mapLoadingError = new MapLoadingError(error)\n    SentryService.captureException(mapLoadingError)\n    setError(mapLoadingError)\n  }\n\n  const getMapStartLocation = useCallback(() => {\n    if (global.GEOIP) {\n      const { lat, lng } = global.GEOIP\n      delete global.GEOIP // Only at first page load\n      const startLocation = {\n        center: [lng, lat],\n        zoom: 11\n      }\n      if (d.enabled) d('getMapStartLocation - GEOIP:', JSON.stringify(startLocation))\n      return startLocation\n    }\n    const { targetBbox, targetCenter, targetZoom, targetOptions } = getTargetData()\n    const defaultBbox = storeBboxRef.current\n    const zoom = targetZoom ?? targetOptions?.zoom\n\n    if (targetCenter && zoom) {\n      const startLocation = { center: targetCenter, zoom }\n      if (d.enabled) d('getMapStartLocation - center+zoom:', JSON.stringify(startLocation))\n      return startLocation\n    }\n    const startLocation = {\n      bounds: targetBbox || defaultBbox\n    }\n    if (d.enabled) d('getMapStartLocation:', JSON.stringify(startLocation))\n    return startLocation\n  }, [])\n\n  const getMapLibreglState = useCallback(\n    () => ({\n      bbox: mapInstanceRef.current.getBounds().toArray(),\n      zoom: mapInstanceRef.current.getZoom()\n    }),\n    []\n  )\n\n  const onUpdate = useCallback((event = {}) => {\n    const { fromAppAction } = event\n    const { bbox, zoom } = getMapLibreglState()\n    const activeBbox = computeMapActiveBbox(mapInstanceRef.current)\n    const searchBbox = computeSearchBbox(mapInstanceRef.current)\n    const distanceFromPreviousChange = !storeBboxRef.current\n      ? 0\n      : computePixelsDeltaBetweenBboxes(mapInstanceRef.current, bbox, storeBboxRef.current)\n\n    if (d.enabled) {\n      d('onUpdate, distanceFromPreviousChange:', distanceFromPreviousChange, 'bbox:', bbox)\n    }\n\n    dispatch(\n      mapUpdated({\n        bbox,\n        zoom,\n        activeBbox,\n        searchBbox,\n        fromAppAction,\n        distanceFromPreviousChange\n      })\n    )\n  }, [])\n\n  const getUpdateHandler = () => {\n    const delayedUpdate = debounce(onUpdate, MAP_STORE_UPDATE_DELAY)\n    return (event = {}) => {\n      const { fromAppAction } = event\n      if (fromAppAction === MAP_FROM_APP_ACTION_PADDING) {\n        onUpdate(event)\n      } else {\n        delayedUpdate(event)\n      }\n    }\n  }\n\n  /*\n  This useEffect must be executed before the following one,\n   and has no dependency with mapInstanceRef to not be re-executed when map is initialized\n   */\n  useEffect(() => {\n    if (!mapInstanceRef.current) return\n\n    dispatch(setMapStatus(MAP_STATUS_RELOADING))\n    mapInstanceRef.current.setStyle(mapService.url)\n  }, [mapService.url])\n\n  const updateMapStatusOnRender = useCallback(() => {\n    if (mapStatus === MAP_STATUS_STYLED) return\n    if (mapInstanceRef.current.isStyleLoaded()) {\n      const { name } = mapInstanceRef.current.getStyle()\n      if (mapStyleName !== name) {\n        setMapStyleName(name)\n        dispatch(setMapStatus(MAP_STATUS_STYLED))\n      }\n    }\n  }, [mapStatus, mapStyleName])\n\n  useEffect(() => {\n    if (mapStatus === MAP_STATUS_INIT) {\n      setMapStyleName('')\n    }\n  }, [mapStatus])\n\n  useEffect(() => {\n    if (!mapInstanceRef.current) return\n    mapInstanceRef.current.resize()\n  }, [isMapFullScreen])\n\n  useEffect(() => {\n    if (!isWebglSupported()) {\n      displayWebGlError('no-webgl-support')\n      return\n    }\n    const { url: style, apikey } = mapService\n    const sessionId = getMapSessionId()\n\n    try {\n      mapInstanceRef.current = new MapLibreMap({\n        container: mapContainerRef.current,\n        style,\n        pitchWithRotate: false,\n        dragRotate: false,\n        maxZoom,\n        minZoom: MAP_ZOOM_MIN,\n        doubleClickZoom: isGE(), // NES-1427: Differentiate single and double click « manually » on PE, see handleMobileTap method\n        keyboard: true,\n        attributionControl: false,\n        ...getMapStartLocation(),\n        transformRequest: url => {\n          const params = { sessionId }\n          if (apikey) params.apikey = apikey\n          return { url: addParamsToUrl(url, params), headers: { 'accept-language': locale } }\n        }\n      })\n      handleMobileLongTouchAsContextMenu(mapInstanceRef.current)\n      mapInstanceRef.current.touchZoomRotate.disableRotation()\n      dispatch(setMapStatus(MAP_STATUS_INIT))\n      const updateHandler = getUpdateHandler()\n      mapInstanceRef.current.on(MAPLIBRE_EVENT_MOVE, updateHandler)\n      mapInstanceRef.current.on(MAPLIBRE_EVENT_ZOOM, updateHandler)\n\n      mapInstanceRef.current.once('render', () => {\n        const { bbox, zoom } = getMapLibreglState()\n        const activeBbox = computeMapActiveBbox(mapInstanceRef.current)\n        const searchBbox = computeSearchBbox(mapInstanceRef.current)\n\n        if (d.enabled) {\n          d('update on first render', bbox)\n        }\n\n        dispatch(\n          mapUpdated({\n            bbox,\n            zoom,\n            activeBbox,\n            searchBbox,\n            fromAppAction: MAP_FROM_APP_ACTION_MOVE\n          })\n        ) // on first render, we want to update bbox in store (which may be France if geoip was used)\n      })\n\n      dispatch(acknowledgeMapMove())\n\n      return () => {\n        mapInstanceRef.current.off('render', updateMapStatusOnRender)\n        mapInstanceRef.current.remove()\n        dispatch(mapDestroyed())\n      }\n    } catch (e) {\n      displayWebGlError(e)\n    }\n  }, [])\n\n  useEffect(() => {\n    const throttledUpdateMapStyle = throttle(updateMapStatusOnRender, 100)\n    if (mapInstanceRef.current) {\n      mapInstanceRef.current.on('render', throttledUpdateMapStyle)\n      return () => {\n        mapInstanceRef.current.off('render', throttledUpdateMapStyle)\n      }\n    }\n  }, [updateMapStatusOnRender])\n\n  const onMapTouchEvent = useErrorBoundaryCallback(\n    e => {\n      if (!e.handled && couldFullScreen && !isPolylineAroundPointer(mapInstanceRef.current, e)) {\n        e.handled = true\n        dispatch(toggleFullscreen())\n      }\n    },\n    [couldFullScreen, isPolylineAroundPointer]\n  )\n\n  const interact = useMapBoundsInteraction(mapInstanceRef.current)\n\n  const mobileTapHandler = useErrorBoundaryCallback(\n    e => {\n      handleMobileTap(e, mapInstanceRef.current, onMapTouchEvent, { maxZoom }, interact)\n    },\n    [interact, onMapTouchEvent]\n  )\n\n  useEffect(() => {\n    if (!mapInstanceRef.current || isGE()) return\n\n    mapInstanceRef.current.on('click', mobileTapHandler)\n    return () => {\n      mapInstanceRef.current.off('click', mobileTapHandler)\n    }\n  }, [mobileTapHandler, mapInstanceRef.current])\n\n  return (\n    <MapContext.Provider value={{ map: mapInstanceRef.current, interact }}>\n      <div className={s.DynamicMap} ref={mapContainerRef}>\n        {error && (\n          <div className={s.error}>\n            <h1>Erreur support WebGL</h1>\n            <p>\n              Le site Mappy requiert WebGL pour fonctionner correctement. Si vous n’arrivez pas à utiliser Mappy avec un\n              navigateur à jour, nous vous invitons à vérifier que WebGL est activé sur votre navigateur en consultant\n              cette page : <a href=\"https://get.webgl.org/\">https://get.webgl.org/</a>.\n            </p>\n            <RectangleActionButton href=\"/\" label=\"Réessayer\" size={SIZE_MEDIUM} />\n          </div>\n        )}\n        {!error && children}\n      </div>\n    </MapContext.Provider>\n  )\n}\n\nexport default MapProvider\n","// extracted by mini-css-extract-plugin\nexport default {\"DynamicMap\":\"iCSnM\",\"patchDesktopMapBorders\":\"VIvf7\",\"error\":\"V11xK\"};","import React, { useCallback } from 'react'\nimport { TAG_CLICK_CONTEXT_MENU } from '../../analytics/analytics.tagids.constants'\nimport { ACTION } from '../../analytics/ClickTagsService'\nimport s from './ContextMenu.less'\nimport TagActionButton from '../../genericComponents/TagActionButton'\nimport { useContextMenu } from './ContextMenu'\n\nconst ContextMenuItem = ({ tagAction, label, clickAction }) => {\n  const { point } = useContextMenu()\n\n  const clickHandler = useCallback(() => {\n    // do not stop propagation, so the menu can close\n    clickAction(point)\n  }, [point])\n\n  return (\n    <TagActionButton\n      type={TAG_CLICK_CONTEXT_MENU}\n      tagInfo={{\n        [ACTION]: tagAction\n      }}\n      className={s.item}\n      onClick={clickHandler}\n    >\n      {label}\n    </TagActionButton>\n  )\n}\n\nexport default ContextMenuItem\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"zIyn6\",\"item\":\"cZRvE\"};","import { findAddressforGeolocation } from '../../../dataSource/address/address.request'\n\nexport const findAddressFromPoint = payload =>\n  findAddressforGeolocation(payload).then(({ addresses }) => {\n    if (addresses.length < 1) return Promise.reject(new Error('No address found at this point !'))\n    return addresses[0]\n  })\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectIsAnItineraryResultPage } from '../../../store/history/history.selectors'\nimport { setStepFromAddress } from '../../../store/itinerary/itinerary.actions'\nimport { addStep, setStepIdx } from '../../../store/itinerary/itinerarySlice'\nimport { selectLocale } from '../../../store/navigation/navigation.selectors'\nimport { useT } from '../../i18n/T'\nimport { selectStepsLength } from '../../itinerary/steps/steps.selectors'\nimport { useAction, withEverySelectorTruthy } from '../../utils/react-redux'\nimport ContextMenuItem from './ContextMenuItem'\nimport { AJOUTER_ETAPE } from './contextmenu.constants'\nimport { findAddressFromPoint } from './contextmenu.utils'\n\nconst ContextMenuItemItineraryAddStep = () => {\n  const label = useT('map.context-menu.add-step-itinerary')\n  const dispatch = useDispatch()\n  const execSetStepFromAddress = useAction(setStepFromAddress)\n  const stepsLength = useSelector(selectStepsLength)\n  const locale = useSelector(selectLocale)\n\n  const onAddStep = point => {\n    findAddressFromPoint({ ...point, locale })\n      .then(address => {\n        dispatch(addStep())\n        dispatch(setStepIdx(stepsLength - 1))\n        execSetStepFromAddress(address)\n      })\n      .catch(e => console.error(e))\n  }\n\n  return <ContextMenuItem tagAction={AJOUTER_ETAPE} label={label} clickAction={onAddStep} />\n}\n\nexport default withEverySelectorTruthy(selectIsAnItineraryResultPage)(ContextMenuItemItineraryAddStep)\n","export const CLIC_DROIT = 'Clic_droit'\nexport const AFFICHER_ADRESSE = 'Afficher_l_adresse'\nexport const AFFICHER_VILLE = 'Afficher_la_ville'\nexport const AFFICHER_DEPARTEMENT = 'Afficher_le_departement'\nexport const AFFICHER_REGION = 'Afficher_la_region'\nexport const ITINERAIRE_DEPUIS = 'Itinéraire_depuis_ce_lieu'\nexport const ITINERAIRE_VERS = 'Itinéraire_vers_ce_lieu'\nexport const AJOUTER_ETAPE = 'Ajouter_une_etape_ici'\n","import React from 'react'\nimport ContextMenuItem from './ContextMenuItem'\nimport { ITINERAIRE_DEPUIS } from './contextmenu.constants'\nimport { useT } from '../../i18n/T'\nimport { useAction, withEverySelectorTruthy } from '../../utils/react-redux'\nimport { setDepartureFromPoint } from '../../../store/itinerary/itinerary.actions'\nimport { selectIsItineraryUniverse } from '../../../store/history/history.selectors'\n\nconst ContextMenuItemItineraryFrom = () => {\n  const label = useT('map.context-menu.go-from-itinerary')\n  const execSetDepartureFromPoint = useAction(setDepartureFromPoint)\n\n  const onItineraryFrom = point => {\n    execSetDepartureFromPoint(point).catch(e => console.error(e))\n  }\n\n  return <ContextMenuItem tagAction={ITINERAIRE_DEPUIS} label={label} clickAction={onItineraryFrom} />\n}\n\nexport default withEverySelectorTruthy(selectIsItineraryUniverse)(ContextMenuItemItineraryFrom)\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { ROUTE_ITINERARY_TO } from '../../../routes'\nimport { navigateTo } from '../../../store/history/history.actions'\nimport { selectIsItineraryUniverse } from '../../../store/history/history.selectors'\nimport { setArrivalFromPoint } from '../../../store/itinerary/itinerary.actions'\nimport { selectLocale } from '../../../store/navigation/navigation.selectors'\nimport { useT } from '../../i18n/T'\nimport { useAction } from '../../utils/react-redux'\nimport ContextMenuItem from './ContextMenuItem'\nimport { ITINERAIRE_VERS } from './contextmenu.constants'\nimport { findAddressFromPoint } from './contextmenu.utils'\n\nconst ContextMenuItemItineraryTo = () => {\n  const label = useT('map.context-menu.go-to-itinerary')\n  const execSetArrivalFromPoint = useAction(setArrivalFromPoint)\n  const itineraryUniverse = useSelector(selectIsItineraryUniverse)\n  const navigateToAction = useAction(navigateTo)\n  const locale = useSelector(selectLocale)\n\n  const navigateToItineraryTo = address => {\n    navigateToAction({\n      route: ROUTE_ITINERARY_TO,\n      routeOptions: {\n        to: address.label,\n        toAddress: address,\n        avoidReset: true\n      }\n    })\n  }\n\n  const onItineraryTo = point => {\n    if (itineraryUniverse) {\n      execSetArrivalFromPoint(point).catch(e => console.error(e))\n    } else {\n      findAddressFromPoint({ ...point, locale })\n        .then(address => navigateToItineraryTo(address))\n        .catch(e => console.error(e))\n    }\n  }\n\n  return <ContextMenuItem tagAction={ITINERAIRE_VERS} label={label} clickAction={onItineraryTo} />\n}\n\nexport default ContextMenuItemItineraryTo\n","import React from 'react'\nimport ContextMenuItem from './ContextMenuItem'\nimport { AFFICHER_ADRESSE } from './contextmenu.constants'\nimport { useT } from '../../i18n/T'\nimport { useAction } from '../../utils/react-redux'\nimport { searchAddressFromPoint } from '../../../store/address/address.actions'\n\nconst ContextMenuItemShowAddress = () => {\n  const label = useT('map.context-menu.show-address')\n  const searchAddressFromPointAction = useAction(searchAddressFromPoint)\n\n  return <ContextMenuItem tagAction={AFFICHER_ADRESSE} label={label} clickAction={searchAddressFromPointAction} />\n}\n\nexport default ContextMenuItemShowAddress\n","import React from 'react'\nimport ContextMenuItem from './ContextMenuItem'\nimport { AFFICHER_VILLE } from './contextmenu.constants'\nimport { useT } from '../../i18n/T'\nimport { useAction, withEverySelectorTruthy } from '../../utils/react-redux'\nimport { searchCityFromPoint } from '../../../store/address/address.actions'\nimport { selectIsPlacesUniverse } from '../../../store/history/history.selectors'\n\nconst ContextMenuItemShowCity = () => {\n  const label = useT('map.context-menu.show-city')\n  const execSearchLocation = useAction(searchCityFromPoint)\n\n  return <ContextMenuItem tagAction={AFFICHER_VILLE} label={label} clickAction={execSearchLocation} />\n}\n\nexport default withEverySelectorTruthy(selectIsPlacesUniverse)(ContextMenuItemShowCity)\n","import React from 'react'\nimport ContextMenuItem from './ContextMenuItem'\nimport { AFFICHER_DEPARTEMENT } from './contextmenu.constants'\nimport { useT } from '../../i18n/T'\nimport { useAction, withEverySelectorTruthy } from '../../utils/react-redux'\nimport { searchDepartmentFromPoint } from '../../../store/address/address.actions'\nimport { selectIsPlacesUniverse } from '../../../store/history/history.selectors'\n\nconst ContextMenuItemShowCity = () => {\n  const label = useT('map.context-menu.show-department')\n  const execSearchLocation = useAction(searchDepartmentFromPoint)\n\n  return <ContextMenuItem tagAction={AFFICHER_DEPARTEMENT} label={label} clickAction={execSearchLocation} />\n}\n\nexport default withEverySelectorTruthy(selectIsPlacesUniverse)(ContextMenuItemShowCity)\n","import React from 'react'\nimport ContextMenuItem from './ContextMenuItem'\nimport { AFFICHER_REGION } from './contextmenu.constants'\nimport { useT } from '../../i18n/T'\nimport { useAction, withEverySelectorTruthy } from '../../utils/react-redux'\nimport { searchRegionFromPoint } from '../../../store/address/address.actions'\nimport { selectIsPlacesUniverse } from '../../../store/history/history.selectors'\n\nconst ContextMenuItemShowCity = () => {\n  const label = useT('map.context-menu.show-region')\n  const execSearchLocation = useAction(searchRegionFromPoint)\n\n  return <ContextMenuItem tagAction={AFFICHER_REGION} label={label} clickAction={execSearchLocation} />\n}\n\nexport default withEverySelectorTruthy(selectIsPlacesUniverse)(ContextMenuItemShowCity)\n","import React, { useCallback, useContext, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { TAG_CLICK_CONTEXT_MENU } from '../../analytics/analytics.tagids.constants'\nimport { selectCurrentHistoryRoute } from '../../../store/history/history.selectors'\nimport { selectMapBbox } from '../../../store/map/map.selectors'\nimport { selectShouldDisplayContextMenu } from '../../../store/ui/ui.selectors'\nimport { ACTION } from '../../analytics/ClickTagsService'\nimport useImpressionTag from '../../analytics/useImpressionTag'\nimport useEventCallback from '../../utils/useEventCallback'\nimport { withMapInitialized } from '../map.utils'\nimport { useEffectWithMapContext, useMapContext } from '../MapContext'\nimport { CLIC_DROIT } from './contextmenu.constants'\nimport s from './ContextMenu.less'\nimport ContextMenuItemItineraryAddStep from './ContextMenuItemItineraryAddStep'\nimport ContextMenuItemItineraryFrom from './ContextMenuItemItineraryFrom'\nimport ContextMenuItemItineraryTo from './ContextMenuItemItineraryTo'\nimport ContextMenuItemShowAddress from './ContextMenuItemShowAddress'\nimport ContextMenuItemShowCity from './ContextMenuItemShowCity'\nimport ContextMenuItemShowDepartment from './ContextMenuItemShowDepartment'\nimport ContextMenuItemShowRegion from './ContextMenuItemShowRegion'\n\nconst LocalContext = React.createContext({ point: null })\n\nexport const useContextMenu = () => useContext(LocalContext)\n\nexport function getStyle(event, canvas) {\n  const { clientWidth: canvasWidth, clientHeight: canvasHeight } = canvas\n\n  const width = 160\n  const height = 60\n  const top = event.point.y\n  const left = event.point.x\n  return {\n    top: top + height > canvasHeight ? top - height : top,\n    left: left + width > canvasWidth ? left - width : left,\n    width\n  }\n}\n\nexport function ContextMenu() {\n  const { map } = useMapContext()\n  const currentRoute = useSelector(selectCurrentHistoryRoute)\n  const bbox = useSelector(selectMapBbox)\n  const [event, setEvent] = useState()\n  const shouldDisplay = useSelector(selectShouldDisplayContextMenu)\n\n  const closeContextMenu = useCallback(() => {\n    setEvent(null)\n  }, [])\n\n  const onContextMenu = useCallback(\n    event => {\n      setEvent(event)\n      map.once('click', closeContextMenu)\n    },\n    [setEvent, closeContextMenu]\n  )\n\n  useEffectWithMapContext(\n    map => {\n      map.on('contextmenu', onContextMenu)\n\n      return () => {\n        map.off('contextmenu', onContextMenu)\n      }\n    },\n    [onContextMenu]\n  )\n\n  useEffect(() => closeContextMenu, [currentRoute, bbox, closeContextMenu])\n  useImpressionTag(event, { type: TAG_CLICK_CONTEXT_MENU, tagInfo: { [ACTION]: CLIC_DROIT } })\n\n  const menuClickHandler = useEventCallback(closeContextMenu, [closeContextMenu])\n\n  if (!event || !shouldDisplay) return <></>\n\n  return (\n    <div className={s.root} style={getStyle(event, map.getCanvas())} onClick={menuClickHandler}>\n      <LocalContext.Provider value={{ point: event?.lngLat }}>\n        <ContextMenuItemShowAddress />\n        <ContextMenuItemShowCity />\n        <ContextMenuItemShowDepartment />\n        <ContextMenuItemShowRegion />\n        <ContextMenuItemItineraryFrom />\n        <ContextMenuItemItineraryTo />\n        <ContextMenuItemItineraryAddStep />\n      </LocalContext.Provider>\n    </div>\n  )\n}\n\nexport default withMapInitialized(ContextMenu)\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport s from './FPS.less'\n\nconst now = () => (performance || Date)['now']()\n\nconst FPS = () => {\n  const [fps, setFps] = useState('')\n\n  const stop = useRef(false)\n  const t0 = useRef(now())\n  const counter = useRef(0)\n  const interval = useRef(null)\n\n  const updateFpsCount = useCallback(() => {\n    const deltaTime = now() - t0.current\n    const fps = counter.current / (deltaTime * 0.001)\n\n    setFps(fps.toFixed(1))\n\n    t0.current = now()\n    counter.current = 0\n  }, [])\n\n  const compute = useCallback(() => {\n    counter.current = 0\n    t0.current = now()\n\n    const count = () => {\n      if (stop.current) return\n      counter.current++\n      requestAnimationFrame(count)\n    }\n    requestAnimationFrame(count)\n  }, [])\n\n  useEffect(() => {\n    interval.current = setInterval(updateFpsCount, 600)\n    return () => {\n      clearInterval(interval.current)\n    }\n  }, [updateFpsCount])\n\n  useEffect(() => {\n    compute()\n    return () => {\n      stop.current = true\n    }\n  }, [compute])\n\n  return <div className={s.main}>{fps} fps</div>\n}\n\nexport default FPS\n","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"DSU7Z\"};","import React, { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectViewport } from '../../../store/address/address.selectors'\nimport { selectCurrentPolylineBbox } from '../../../store/itinerary/polylines.selectors'\nimport {\n  selectIsMapInitialized,\n  selectMapActiveBbox,\n  selectMapBbox,\n  selectMapSearchBbox\n} from '../../../store/map/map.selectors'\nimport { isEmpty } from '../../../utils/lang'\nimport { selectStepsCoordinates } from '../../itinerary/steps/steps.selectors'\nimport { getBboxFromLngLatPoints } from '../../utils/map'\nimport { useMapContext } from '../MapContext'\nimport { bboxArrayToBboxArrays } from '../conversion'\n\nconst BboxDebugger = ({ bbox, id, fillColor = '#088' }) => {\n  const { map } = useMapContext()\n  const isMapInitialized = useSelector(selectIsMapInitialized)\n\n  useEffect(() => {\n    if (!map || !isMapInitialized || !bbox || !id) return\n\n    const debugId = `${id}_debug_id`\n\n    const [[x1, y1], [x2, y2]] = bbox\n    const p1 = [Math.min(x1, x2), Math.min(y1, y2)]\n    const p2 = [Math.max(x1, x2), Math.min(y1, y2)]\n    const p3 = [Math.max(x1, x2), Math.max(y1, y2)]\n    const p4 = [Math.min(x1, x2), Math.max(y1, y2)]\n\n    const data = {\n      type: 'Feature',\n      geometry: {\n        type: 'Polygon',\n        coordinates: [[p1, p2, p3, p4, p1]]\n      }\n    }\n    try {\n      if (!isEmpty(map.getLayer(debugId))) {\n        map.getSource(debugId).setData(data)\n      } else {\n        map.addLayer({\n          id: debugId,\n          type: 'fill',\n          source: {\n            type: 'geojson',\n            data\n          },\n          paint: {\n            'fill-color': fillColor,\n            'fill-opacity': 0.3\n          }\n        })\n      }\n    } catch (error) {\n      console.error('failed to getLayer', error)\n    }\n\n    return () => {\n      try {\n        if (map.getLayer(debugId)) {\n          map.removeLayer(debugId)\n          map.removeSource(debugId)\n        }\n      } catch (error) {\n        console.error('failed to getLayer', error)\n      }\n    }\n  }, [map, bbox?.toString(), id, isMapInitialized])\n\n  return <></>\n}\n\nexport const ViewportDebugger = () => {\n  const bbox = bboxArrayToBboxArrays(useSelector(selectViewport))\n  return <BboxDebugger bbox={bbox} id={'viewport'} fillColor={'#083'} />\n}\n\nexport const MapBboxDebugger = () => {\n  const bbox = useSelector(selectMapBbox)\n  return <BboxDebugger bbox={bbox} id={'mapbbox'} fillColor={'#909'} />\n}\n\nexport const ActiveBboxDebugger = () => {\n  const bbox = useSelector(selectMapActiveBbox)\n  return <BboxDebugger bbox={bbox} id={'mapactivebbox'} fillColor={'#d80'} />\n}\n\nexport const SearchBboxDebugger = () => {\n  const bbox = useSelector(selectMapSearchBbox)\n  return <BboxDebugger bbox={bbox} id={'mapsearchbbox'} fillColor={'#07d'} />\n}\n\nexport const StepsDebugger = () => {\n  const { departure, arrival } = useSelector(selectStepsCoordinates)\n  const bbox = departure && arrival ? getBboxFromLngLatPoints([departure, arrival]) : null\n  return <BboxDebugger bbox={bbox} id={'steps'} fillColor={'#086'} />\n}\n\nexport const PolylineDebugger = () => {\n  const bbox = useSelector(selectCurrentPolylineBbox)\n  return <BboxDebugger bbox={bbox} id={'polyline'} fillColor={'#e42525'} />\n}\n","import React from 'react'\nimport { useMapContext } from '../MapContext'\nimport s from '../tools/ZoomButtons.less'\n\nexport default function ZoomDebugger() {\n  const mapContext = useMapContext()\n  const rawZoom = mapContext.map?.getZoom?.() || 0\n  const zoom = Math.floor(rawZoom * 1000) / 1000\n\n  return <div className={s.ZoomDebugger}>Zoom: {zoom}</div>\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"jiQFc\",\"ZoomButtons\":\"crKZR\",\"ZoomButton\":\"u75NN\",\"ZoomInButton\":\"kWCY5\",\"ZoomOutButton\":\"r24Pa\",\"tooltip\":\"ZSPrw\",\"ZoomDebugger\":\"O4_7L\"};","import React, { useEffect } from 'react'\nimport {\n  getFromLocalStorage,\n  loadJSONFromLocalStorage,\n  saveJSONInLocalStorage\n} from '../../../utils/browserStorageService'\nimport FPS from './FPS'\nimport {\n  ActiveBboxDebugger,\n  MapBboxDebugger,\n  PolylineDebugger,\n  SearchBboxDebugger,\n  StepsDebugger,\n  ViewportDebugger\n} from './BboxDebugger'\nimport ZoomDebugger from './ZoomDebugger'\nimport { useEffectWithMapContext, useMapContext } from '../MapContext'\n\nconst mapDebuggerAPI = {\n  map: null,\n  ui: {\n    zoom: true,\n    viewport: false,\n    bbox: false,\n    steps: false,\n    polyline: false,\n    activebbox: false,\n    searchbbox: false,\n    fps: true\n  }\n}\n\nconst PREFERENCES_KEY = 'map_debug_parameters'\n\nconst MapDebuggerComponent = () => {\n  const { interact } = useMapContext()\n\n  useEffect(() => {\n    window.mapDebugger = mapDebuggerAPI\n    mapDebuggerAPI.setUIItem = (prop, show) => {\n      mapDebuggerAPI.ui[prop] = show\n      saveJSONInLocalStorage(PREFERENCES_KEY, { ui: mapDebuggerAPI.ui })\n    }\n    mapDebuggerAPI.show = prop => mapDebuggerAPI.setUIItem(prop, true)\n    mapDebuggerAPI.hide = prop => mapDebuggerAPI.setUIItem(prop, false)\n    const preferences = loadJSONFromLocalStorage(PREFERENCES_KEY)\n    if (preferences && preferences.ui) mapDebuggerAPI.ui = preferences.ui\n    return () => {\n      delete window.mapDebugger\n    }\n  }, [])\n\n  useEffectWithMapContext(map => {\n    mapDebuggerAPI.map = map\n  }, [])\n\n  useEffect(() => {\n    mapDebuggerAPI.interact = interact\n  }, [interact])\n\n  const { ui } = mapDebuggerAPI\n\n  return (\n    <>\n      {ui.zoom && <ZoomDebugger />}\n      {ui.viewport && <ViewportDebugger />}\n      {ui.bbox && <MapBboxDebugger />}\n      {ui.activebbox && <ActiveBboxDebugger />}\n      {ui.searchbbox && <SearchBboxDebugger />}\n      {ui.steps && <StepsDebugger />}\n      {ui.polyline && <PolylineDebugger />}\n      {ui.fps && <FPS />}\n    </>\n  )\n}\n\nexport default function MapDebugger() {\n  return getFromLocalStorage('debugMap') ? <MapDebuggerComponent /> : null\n}\n","import React from 'react'\nimport { withMapInitialized } from '../map.utils'\nimport s from './AddressMarker.less'\nimport ImageMarker from './ImageMarker'\nimport Marker from './Marker'\nimport greyMarker from './marker-grey.png'\nimport { ADDRESS_BIG_MARKER_HEIGHT, ADDRESS_BIG_MARKER_WIDTH } from './Marker.constants'\n\nconst AddressMarker = ({ coordinates, onClick }) => (\n  <Marker coordinates={coordinates} onClick={onClick} cssClasses={s.addressMarker}>\n    <ImageMarker src={greyMarker} width={ADDRESS_BIG_MARKER_WIDTH} height={ADDRESS_BIG_MARKER_HEIGHT} />\n  </Marker>\n)\n\nexport default withMapInitialized(AddressMarker)\n","// extracted by mini-css-extract-plugin\nexport default {\"addressMarker\":\"nVXti\"};","import React from 'react'\nimport { ROUTE_TOOLS_COMPUTE_RADIUS } from '../../../routes'\nimport { selectCurrentHistoryRoute } from '../../../store/history/history.selectors'\nimport { hideMapPopup, displayMapPopup } from '../../../store/map/mapSlice'\nimport { selectAddresses, selectAddressContour } from '../../../store/address/address.selectors'\nimport { createCustomSelector } from '../../utils/react-reselect'\nimport { POPUP_TYPE_ADDRESS } from '../popup/popup.selectors'\nimport AddressMarker from './AddressMarker'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectPopupType } from '../../../store/map/map.selectors'\nimport { useAction } from '../../utils/react-redux'\nimport { setAmbiguityAddress } from '../../../store/location/location.actions'\n\nexport const selectShouldDisplayMarkers = createCustomSelector(\n  selectAddresses,\n  selectAddressContour,\n  selectCurrentHistoryRoute,\n  (addresses, contour, historyRoute) =>\n    Boolean(addresses?.length && !contour && historyRoute !== ROUTE_TOOLS_COMPUTE_RADIUS)\n)\n\nconst AddressMarkersContainer = () => {\n  const dispatch = useDispatch()\n  const addresses = useSelector(selectAddresses)\n  const popupType = useSelector(selectPopupType)\n  const execSetAmbiguityAddress = useAction(setAmbiguityAddress)\n\n  const handleClickMarker = address => () => {\n    if (addresses.length > 1) {\n      execSetAmbiguityAddress(address)\n    } else {\n      popupType === POPUP_TYPE_ADDRESS ? dispatch(hideMapPopup()) : dispatch(displayMapPopup(POPUP_TYPE_ADDRESS))\n    }\n  }\n\n  const shouldDisplayMarkers = useSelector(selectShouldDisplayMarkers)\n  if (!shouldDisplayMarkers) return <></>\n\n  return (\n    <div>\n      {addresses.map(address => {\n        const {\n          coordinates: { lat, lng }\n        } = address\n        return <AddressMarker key={`${lng}-${lat}`} coordinates={{ lat, lng }} onClick={handleClickMarker(address)} />\n      })}\n    </div>\n  )\n}\n\nexport default AddressMarkersContainer\n","import { Marker as MapLibreMarker } from 'maplibre-gl'\nimport React, { useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectGeolocationPosition, selectIsGeoLocationOn } from '../../../store/geolocation/geolocation.selectors'\nimport { isEqual } from '../../../utils/lang'\nimport { withEmptyFallbackErrorBoundary } from '../../error/EmptyFallbackErrorBoundary'\nimport { useCompass } from '../../utils/useCompass'\nimport { withMapInitialized } from '../map.utils'\nimport { useMapContext } from '../MapContext'\nimport img from './geolocation_marker_x2.png'\nimport s from './GeolocMarker.less'\n\nfunction GeolocMarker() {\n  const { map } = useMapContext()\n\n  const position = useSelector(selectGeolocationPosition)\n  const geolocationOn = useSelector(selectIsGeoLocationOn)\n\n  const [coords, setCoords] = useState(null)\n  const [marker, setMarker] = useState(null)\n\n  const rotation = useCompass(geolocationOn)\n\n  const refDiv = useRef()\n\n  useEffect(() => {\n    if (geolocationOn && position && marker && !isEqual(coords, position)) {\n      marker.setLngLat(position)\n      setCoords(position)\n    }\n  }, [geolocationOn, position])\n\n  useEffect(() => {\n    if (geolocationOn && !marker && position) {\n      const m = new MapLibreMarker({\n        element: refDiv.current,\n        anchor: 'center'\n      })\n        .setLngLat(position)\n        .addTo(map)\n\n      setMarker(m)\n    }\n  }, [geolocationOn, position])\n\n  useEffect(\n    () => () => {\n      if (marker) marker.remove()\n    },\n    [marker]\n  )\n\n  if (!geolocationOn || !position) return <></>\n\n  return (\n    <div>\n      {/* That previous div before refDiv is very important to avoid a crash on umount, see NES-2421 */}\n      <div ref={refDiv}>\n        <img className={s.imgMarker} src={img} style={{ transform: `rotateZ(${rotation}deg)` }} />\n      </div>\n    </div>\n  )\n}\n\nexport default withEmptyFallbackErrorBoundary(withMapInitialized(GeolocMarker))\n","import { useCallback, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsMapInitialized } from '../../store/map/map.selectors'\n\n/*\n * useCompass gets phone orientation angle relative to north.\n * This allows to turn the the geolocation marker according the current user direction.\n *\n * Current code work on Android with Chrome & Firefox.\n *\n * It could work on iOS but we should ask permission via DeviceOrientationEvent.requestPermission on iOS 13+\n *\n * Useful links :\n *  - https://dev.to/orkhanjafarovr/real-compass-on-mobile-browsers-with-javascript-3emi\n *  - https://caniuse.com/?search=deviceorientationabsolute\n *  - https://dev.to/li/how-to-requestpermission-for-devicemotion-and-deviceorientation-events-in-ios-13-46g2\n */\nexport function useCompass(activated) {\n  const mapInitialized = useSelector(selectIsMapInitialized)\n  const [rotation, setRotation] = useState(0)\n\n  const compassHandler = useCallback(e => {\n    if (!e.absolute) return\n    setRotation(-(e.alpha || 0).toFixed(0))\n  }, [])\n\n  useEffect(() => {\n    if (mapInitialized && activated) {\n      const eventName = 'deviceorientationabsolute'\n      window.addEventListener(eventName, compassHandler, true)\n      return () => {\n        window.removeEventListener(eventName, compassHandler)\n      }\n    }\n  }, [mapInitialized, activated, compassHandler])\n  return rotation\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"imgMarker\":\"djFro\"};","import { Popup as MapLibrePopup } from 'maplibre-gl'\nimport React, { useEffect, useState } from 'react'\nimport ReactDOM from 'react-dom'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { hideMapPopup } from '../../../store/map/mapSlice'\nimport { isPE } from '../../Device'\nimport { withEmptyFallbackErrorBoundary } from '../../error/EmptyFallbackErrorBoundary'\nimport { withMapInitialized } from '../map.utils'\nimport { useMapContext } from '../MapContext'\nimport s from './Popup.less'\nimport {\n  POPUP_TYPE_ADDRESS,\n  POPUP_TYPE_PANO,\n  POPUP_TYPE_POI,\n  selectPopupData,\n  selectShouldDisplayPopup\n} from './popup.selectors'\nimport PopupAddress from './PopupAddress'\nimport PopupPano from './PopupPano'\nimport PopupPoi from './PopupPoi'\n\n// webpack:BrowserOnly\n\nconst popupDataAreComplete = ({ offset, coords, type }) => type && offset && coords && coords.lat && coords.lng\n\nconst getChild = type => {\n  switch (type) {\n    case POPUP_TYPE_PANO:\n      return <PopupPano />\n    case POPUP_TYPE_POI:\n      return <PopupPoi />\n    case POPUP_TYPE_ADDRESS:\n      return <PopupAddress />\n    default:\n      return null // 'null' is important to have a falsy return\n  }\n}\n\nconst POPUP_ID = 'mapPopupWrapper'\n\nconst useMapLibrePopup = () => {\n  const dispatch = useDispatch()\n  const popupData = useSelector(selectPopupData)\n  const shouldHavePopup = popupDataAreComplete(popupData)\n  const [hasPopup, setHasPopup] = useState(0)\n  const { type, coords, offset, anchor, maxWidth, withIllustration } = popupData\n  const { map } = useMapContext()\n\n  useEffect(() => {\n    if (!shouldHavePopup) return\n\n    const popupTypeClass = ` popup-${type}`\n    const withIllustrationClass = withIllustration ? ' with-illustration' : ''\n\n    const mapLibrePopup = new MapLibrePopup({\n      offset,\n      closeButton: false,\n      className: `${s.popup}${popupTypeClass}${withIllustrationClass}`,\n      anchor,\n      maxWidth\n    })\n\n    mapLibrePopup.setLngLat(coords).setHTML(`<div id=\"${POPUP_ID}\"></div>`).addTo(map)\n\n    setHasPopup(Date.now())\n\n    return () => {\n      mapLibrePopup.remove()\n      setHasPopup(0)\n    }\n  }, [shouldHavePopup])\n\n  useEffect(() => {\n    const clickHandler = () => {\n      dispatch(hideMapPopup())\n    }\n    map.on('click', clickHandler)\n\n    return () => {\n      map.off('click', clickHandler)\n    }\n  }, [hideMapPopup])\n\n  return hasPopup && POPUP_ID\n}\n\nconst PortalPopup = ({ children }) => {\n  const popupId = useMapLibrePopup()\n\n  if (!popupId) return <></>\n\n  const domNode = document.querySelector(`#${popupId}`)\n  if (!domNode) return <></>\n  return ReactDOM.createPortal(children, domNode)\n}\n\nconst Popup = () => {\n  const { type } = useSelector(selectPopupData)\n  const child = getChild(type)\n  const shouldDisplayPopup = useSelector(selectShouldDisplayPopup)\n\n  if (!shouldDisplayPopup || !child) return <></>\n  if (isPE() && type === POPUP_TYPE_ADDRESS) return <></>\n\n  return isPE() ? <div className={s.popupPE}>{child}</div> : <PortalPopup>{child}</PortalPopup>\n}\n\nexport default withEmptyFallbackErrorBoundary(withMapInitialized(Popup))\n","// extracted by mini-css-extract-plugin\nexport default {\"popup\":\"Ws2e0\",\"popupPE\":\"o0wVq\"};","import { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { MAP_MODES, MAP_STATUS_STYLED, MAP_THEMES } from '../../../store/map/map.constants'\nimport { selectMapMode, selectMapStatus, selectMapTheme } from '../../../store/map/map.selectors'\nimport { isGE, isRetina } from '../../Device'\nimport { useMapContext } from '../MapContext'\n\nconst getRasterLayerAccordingDevice = id => new RegExp(`^${id}${isGE() ? '' : '_hd'}$`)\n\nconst useLayersManager = () => {\n  const { map } = useMapContext()\n  const [layersDefaultVisibility, setLayersDefaultVisibility] = useState([])\n  const status = useSelector(selectMapStatus)\n  const mapMode = useSelector(selectMapMode).mode\n  const mapTheme = useSelector(selectMapTheme)\n\n  useEffect(() => {\n    if (!map || status !== MAP_STATUS_STYLED) return\n\n    map.setLayoutProperty('simple-tiles-desktop', 'visibility', !isRetina() ? 'visible' : 'none')\n    map.setLayoutProperty('simple-tiles-mobile', 'visibility', isRetina() ? 'visible' : 'none')\n\n    const visibilities = map\n      .getStyle()\n      .layers.filter(layer => layer.layout && layer.layout.visibility)\n      .map(({ id, layout }) => ({ id, visibility: layout.visibility }))\n\n    setLayersDefaultVisibility(visibilities)\n  }, [map, status])\n\n  useEffect(() => {\n    if (!map || layersDefaultVisibility.length === 0) return\n    layersDefaultVisibility.forEach(layer => {\n      let visibility = layer.visibility\n      if (mapTheme === MAP_THEMES.satellite && layer.id.match(/_photo$/)) {\n        visibility = 'visible'\n      } else if (mapMode === MAP_MODES.tc && layer.id.match(/public_transport/)) {\n        visibility = 'visible'\n      } else if (mapMode === MAP_MODES.traffic && layer.id.match(/_traffic_vecto$/)) {\n        visibility = 'visible'\n      } else if (mapMode === MAP_MODES.bicycle && layer.id.match(getRasterLayerAccordingDevice('bicycle'))) {\n        visibility = 'visible'\n      } else if (mapTheme === MAP_THEMES.satellite) {\n        visibility = 'none'\n      }\n      map.setLayoutProperty(layer.id, 'visibility', visibility)\n    })\n  }, [map, layersDefaultVisibility, mapMode, mapTheme])\n}\n\nexport default useLayersManager\n","import { requestZoom } from '../../../store/map/map.actions'\nimport { noop } from '../../../utils/function'\nimport { isGE } from '../../Device'\nimport { useAction } from '../../utils/react-redux'\nimport useTimeout from '../../utils/useTimeout'\nimport { useCallbackWithMapContext, useEffectWithMapContext } from '../MapContext'\nimport { MAP_RASTER_ZOOM_MAX, MAP_ZOOM_MIN, MAP_ZOOM_STEP } from '../map.constants'\nimport { getMapActiveDimensions } from '../map.utils'\n\nconst zoomThreshold = isGE() ? 0.9 : 0.8\nconst stripDecimal = val => (val - Math.floor(val) > zoomThreshold ? Math.round(val) : Math.floor(val))\n\nexport const fixZoomMethods = map => {\n  const methodsToOverride = ['flyTo', 'zoomTo', 'easeTo', 'jumpTo', 'setZoom']\n  methodsToOverride.forEach(methodName => {\n    const originalMethod = map[methodName]\n    map[`original${methodName}`] = originalMethod\n    map[methodName] = (...args) => {\n      const zoomAsFirstArg = typeof args[0] === 'number'\n      if (zoomAsFirstArg) {\n        args[0] = stripDecimal(args[0])\n      } else if (args[0].zoom && typeof args[0].zoom === 'number') {\n        args[0].zoom = stripDecimal(args[0].zoom)\n      }\n      return originalMethod.apply(map, args)\n    }\n  })\n}\n\nexport default function useIntegerZoom() {\n  const execRequestZoom = useAction(requestZoom)\n  const [setTouchTimeout, clearTouchTimeout, isTouchTimeoutPending] = useTimeout(300)\n\n  const zoomTo = useCallbackWithMapContext((map, z, options = {}) => {\n    if (!options.duration) options.duration = 400\n    const increase = z > map.getZoom()\n    if (increase) {\n      z = Math.ceil(z)\n      if (z > MAP_RASTER_ZOOM_MAX) z = MAP_RASTER_ZOOM_MAX\n    } else {\n      z = Math.floor(z)\n      if (z < MAP_ZOOM_MIN) z = MAP_ZOOM_MIN\n    }\n    map.zoomTo(z, options)\n  })\n\n  const getZoomOffset = useCallbackWithMapContext((map, event) => {\n    const padding = map.getPadding()\n    const { width, height } = getMapActiveDimensions(map)\n    const centerX = width / 2 + padding.left\n    const centerY = height / 2 + padding.top\n    const x = event?.originalEvent?.layerX ?? centerX\n    const y = event?.originalEvent?.layerY ?? centerY\n    return [x - centerX, y - centerY]\n  }, [])\n\n  const handleInitialZoom = useCallbackWithMapContext(map => {\n    const zoom = stripDecimal(map.getZoom())\n    execRequestZoom({ zoom })\n  })\n\n  const handleWheel = useCallbackWithMapContext(\n    (map, event) => {\n      let delta = MAP_ZOOM_STEP\n      if (event.originalEvent.deltaY > 0) delta *= -1\n      const z = map.getZoom() + delta\n      zoomTo(z, { offset: getZoomOffset(event) })\n    },\n    [getZoomOffset]\n  )\n\n  const handleDblClick = useCallbackWithMapContext((map, event) => {\n    let delta = MAP_ZOOM_STEP\n    if (event.originalEvent.shiftKey) delta *= -1\n    zoomTo(map.getZoom() + delta, { around: event.lngLat })\n  })\n\n  const handleTouch = useCallbackWithMapContext(\n    (map, event) => {\n      if (!isTouchTimeoutPending()) {\n        setTouchTimeout(noop)\n        return\n      }\n      clearTouchTimeout()\n      handleDblClick(event)\n    },\n    [isTouchTimeoutPending]\n  )\n\n  useEffectWithMapContext(map => {\n    fixZoomMethods(map)\n    map.once('styledata', handleInitialZoom)\n    map.on('wheel', event => handleWheel(event))\n    map.on('touch', event => handleTouch(event))\n    map.scrollZoom.disable()\n    map.doubleClickZoom.disable()\n    if (isGE()) map.on('dblclick', event => handleDblClick(event))\n  }, [])\n\n  return null\n}\n","import { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectMapTargetData } from '../../store/map/map.selectors'\nimport { useMapContext } from './MapContext'\nimport { acknowledgeMapZoom } from '../../store/map/mapSlice'\n\nexport default function useMapZoomHandler() {\n  const { targetZoom } = useSelector(selectMapTargetData)\n  const { map, interact } = useMapContext()\n  const dispatch = useDispatch()\n\n  useEffect(() => {\n    if (!map || !targetZoom) return\n\n    dispatch(acknowledgeMapZoom())\n\n    interact({ zoom: targetZoom })\n  }, [map, targetZoom])\n}\n","import { setMeasurement, setTag, startInactiveSpan } from '@sentry/react'\nimport debug from 'debug'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectIsVectorMap } from '../../store/map/map.selectors'\nimport { sendMapLoadingTime } from '../../store/map/mapSlice'\nimport { useEffectWithMapContext } from './MapContext'\nimport { isWebglSupported } from './map.utils'\n\nconst d = debug('map')\n\nconst useMapPerfMetrics = () => {\n  const dispatch = useDispatch()\n  const vectorMap = useSelector(selectIsVectorMap)\n\n  useEffectWithMapContext(map => {\n    const mapHasGoodSupport = isWebglSupported()\n    if (d.enabled) d('goodSupport', mapHasGoodSupport)\n\n    setTag('mapType', vectorMap ? 'vector' : 'raster')\n    setTag('mapGoodSupport', String(mapHasGoodSupport))\n\n    const startTimestamp = Date.now()\n    map.once('load', () => {\n      const endTimestamp = Date.now()\n      const loadTime = endTimestamp - startTimestamp\n      if (d.enabled) d('loadTime:', loadTime)\n      setMeasurement('map.load', loadTime, 'second')\n      dispatch(sendMapLoadingTime({ loadTime, mapHasGoodSupport }))\n    })\n\n    const spanMap = startInactiveSpan({\n      name: 'map',\n      forceTransaction: true\n    })\n    const spanMapStyle = startInactiveSpan({ name: 'style', parentSpan: spanMap })\n    const spanMapLoad = startInactiveSpan({ name: 'load', parentSpan: spanMap })\n\n    map.once('styledata', () => {\n      spanMapStyle.end()\n    })\n    map.once('load', () => {\n      spanMapLoad.end()\n      spanMap.end()\n    })\n  }, [])\n}\n\nexport default useMapPerfMetrics\n","import debug from 'debug'\nimport { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { GEOLOC_MOVE_FROM_INITIAL } from '../../store/map/map.constants'\nimport { selectIsMapInitialized, selectMapTargetData } from '../../store/map/map.selectors'\nimport { acknowledgeMapMove } from '../../store/map/mapSlice'\nimport SentryService from '../error/SentryService'\nimport { useMapContext } from './MapContext'\nimport { bboxIsValid, MAP_FROM_APP_ACTION_MOVE } from './map.utils'\n\nconst d = debug('map')\n\nconst useMapMoveHandler = () => {\n  const { targetBbox, targetCenter, targetOptions = {} } = useSelector(selectMapTargetData)\n  const { map, interact } = useMapContext()\n  const dispatch = useDispatch()\n  const mapInitialized = useSelector(selectIsMapInitialized)\n\n  useEffect(() => {\n    if (!map || (!targetBbox && !targetCenter)) return\n\n    dispatch(acknowledgeMapMove())\n\n    let move\n    const options = {\n      ...targetOptions,\n      animate: !targetOptions.avoidAnimation,\n      ...(targetOptions.withFastAnimation\n        ? {\n            easing: t => 1 - Math.pow(1 - t, 13)\n          }\n        : {})\n    }\n\n    const eventData = targetOptions.from === GEOLOC_MOVE_FROM_INITIAL ? {} : { fromAppAction: MAP_FROM_APP_ACTION_MOVE }\n\n    if (d.enabled) {\n      if (targetBbox) d('targetBbox', targetBbox, 'bboxIsValid', bboxIsValid(targetBbox))\n      if (targetCenter) d('targetCenter', targetCenter)\n    }\n\n    if (targetBbox && bboxIsValid(targetBbox)) {\n      move = () => {\n        try {\n          interact({ ...options, bounds: targetBbox }, eventData)\n        } catch (e) {\n          SentryService.addBreadcrumb('map', `targetBbox is ${JSON.stringify(targetBbox)}`)\n          SentryService.captureException(e)\n        }\n      }\n    } else if (targetCenter) {\n      move = () => {\n        try {\n          interact({ ...options, center: targetCenter }, eventData)\n        } catch (e) {\n          SentryService.addBreadcrumb('map', `targetCenter is ${JSON.stringify(targetCenter)}`)\n          SentryService.captureException(e)\n        }\n      }\n    }\n    mapInitialized ? setTimeout(move, 0) : map.once('load', move)\n  }, [map, targetBbox, targetCenter, mapInitialized])\n}\n\nexport default useMapMoveHandler\n","import { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsOnboardingContext } from '../../store/navigation/navigation.selectors'\nimport { isEqual } from '../../utils/lang'\nimport useComputePaddingGetter from './map.padding.utils'\nimport { MAP_FROM_APP_ACTION_PADDING } from './map.utils'\nimport { useCallbackWithMapContext, useMapContext } from './MapContext'\n\nconst useMapPaddingHandler = () => {\n  const { interact } = useMapContext()\n  const getPadding = useComputePaddingGetter()\n\n  const isOnboardingContext = useSelector(selectIsOnboardingContext)\n\n  const setPadding = useCallbackWithMapContext(\n    map => {\n      const padding = getPadding()\n      if (!isEqual(map.getPadding(), padding)) {\n        const animate = !isOnboardingContext\n        interact({ padding, animate }, { fromAppAction: MAP_FROM_APP_ACTION_PADDING })\n      }\n    },\n    [getPadding, interact, isOnboardingContext]\n  )\n\n  useEffect(() => {\n    setPadding()\n  }, [setPadding])\n}\n\nexport default useMapPaddingHandler\n","import { useState } from 'react'\nimport { isGE } from '../../Device'\nimport useEventCallback from '../../utils/useEventCallback'\n\nconst useTooltip = (options = {}) => {\n  const [tooltip, setTooltip] = useState(false)\n\n  const showTooltip = useEventCallback(() => setTooltip(true), [setTooltip])\n  const hideTooltip = useEventCallback(() => setTooltip(false), [setTooltip])\n\n  const shouldRegisterMouseListener = isGE() ? options?.ge : options?.pe\n\n  const mouseListeners = shouldRegisterMouseListener\n    ? {\n        onMouseOver: showTooltip,\n        onMouseOut: hideTooltip\n      }\n    : {}\n\n  return { tooltip, setTooltip, mouseListeners }\n}\n\nexport default useTooltip\n","import React from 'react'\nimport cross from '../../genericComponents/assets/cross.svg'\nimport T, { useT } from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport s from './HdTooltip.less'\n\nconst HdTooltip = ({ onClick }) => (\n  <div className={s.root} onClick={onClick}>\n    <div className={s.closeButton}>\n      <SVGIcon url={cross} />\n    </div>\n    <p className={s.title}>\n      <T id={'map.tools.layers.highdef.benefits.title'} />\n    </p>\n    <p\n      className={s.content}\n      dangerouslySetInnerHTML={{\n        __html: useT('map.tools.layers.highdef.benefits.list')\n      }}\n    />\n  </div>\n)\n\nexport default HdTooltip\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"n4KB4\",\"title\":\"lsqv2\",\"content\":\"Gafo6\",\"closeButton\":\"aZV0Y\"};","// extracted by mini-css-extract-plugin\nexport default {\"layerButton\":\"KQUNE\",\"greyedIcon\":\"GB7Zr\",\"label\":\"X2Dhq\",\"modeButton\":\"LSmSY\",\"disabledLayerButton\":\"bad5b\",\"disabledLabel\":\"kcmFW\",\"activeButton\":\"pQh_d\"};","import classNames from 'classnames'\nimport React, { useCallback } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { setMapMode, setMapTheme } from '../../../store/map/mapSlice'\nimport { MAP_MODES, MAP_THEMES } from '../../../store/map/map.constants'\nimport { selectMapMode, selectMapTheme } from '../../../store/map/map.selectors'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './LayerButtons.less'\nimport { TAG_CLICK_EVENT_MODE } from '../../analytics/analytics.tagids.constants'\nimport TagActionButton from '../../genericComponents/TagActionButton'\n\nexport const ModeMapEventLayerButton = ({\n  id,\n  disabled,\n  active,\n  icon,\n  label,\n  ariaLabel,\n  tooltipLabel,\n  clickAction\n}) => {\n  const onClick = useEventCallback(() => {\n    clickAction()\n  }, [clickAction])\n\n  return (\n    <TagActionButton\n      onClick={onClick}\n      className={classNames(s.layerButton, s.modeButton, active && s.activeButton, disabled && s.disabledLayerButton)}\n      type={TAG_CLICK_EVENT_MODE}\n    >\n      <div className=\"icon\">\n        <SVGIcon url={icon} className={classNames(disabled && s.greyedIcon)} />\n      </div>\n      <span className={classNames(s.label, disabled && s.disabledLabel)} aria-label={ariaLabel} title={tooltipLabel}>\n        {label}\n      </span>\n    </TagActionButton>\n  )\n}\n\nexport const ModeLayerButton = ({\n  icon,\n  activeIcon,\n  hoverIcon,\n  id,\n  disabled,\n  isEventMode,\n  label,\n  ariaLabel,\n  tooltipLabel\n}) => {\n  const dispatch = useDispatch()\n  const active = id === useSelector(selectMapMode).mode\n\n  if (active && disabled) dispatch(setMapMode(MAP_MODES.neutral))\n\n  const clickAction = useCallback(() => dispatch(setMapMode(active ? MAP_MODES.neutral : id)), [active, id])\n\n  const onClick = useEventCallback(() => clickAction(), [clickAction])\n\n  if (isEventMode)\n    return (\n      <ModeMapEventLayerButton\n        id={id}\n        disabled={disabled}\n        active={active}\n        icon={icon}\n        label={label}\n        ariaLabel={ariaLabel}\n        tooltipLabel={tooltipLabel}\n        clickAction={clickAction}\n      />\n    )\n\n  return (\n    <div\n      onClick={onClick}\n      className={classNames(s.layerButton, s.modeButton, active && s.activeButton, disabled && s.disabledLayerButton)}\n    >\n      <div className=\"icon\">\n        <SVGIcon icon={icon} className={classNames(disabled && s.greyedIcon)} />\n      </div>\n      <span className={classNames(s.label, disabled && s.disabledLabel)}>\n        <T id={`map.tools.layers.${id}`} />\n      </span>\n    </div>\n  )\n}\n\nexport const ThemeLayerButton = ({ icon, id, disabled }) => {\n  const dispatch = useDispatch()\n  const active = id === useSelector(selectMapTheme)\n\n  if (active && disabled) dispatch(setMapTheme(MAP_THEMES.normal))\n\n  const onClick = useEventCallback(() => dispatch(setMapTheme(active ? MAP_THEMES.normal : id)), [active, id])\n\n  return (\n    <div\n      onClick={onClick}\n      className={classNames(s.layerButton, active && s.activeButton, disabled && s.disabledLayerButton)}\n    >\n      <div className=\"icon\">\n        <img src={icon} className={classNames(disabled && s.greyedIcon)} />\n      </div>\n      <span className={classNames(s.label, disabled && s.disabledLabel)}>\n        <T id={`map.tools.layers.${id}`} />\n      </span>\n    </div>\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"fzgqB\",\"mainTitle\":\"rH40k\",\"button\":\"ljDKu\",\"openButton\":\"c4T7V\",\"opened\":\"fVYwR\",\"closing\":\"URVxD\",\"closeButton\":\"Lz6io\",\"buttonsSection\":\"eR8Ss\",\"buttonsList\":\"aovGG\",\"buttons\":\"lDjTQ\",\"title\":\"zr0K_\",\"tooltip\":\"CwsAJ\",\"highdef\":\"K7s6r\",\"highDefButton\":\"lCJDE\",\"highdefLabel\":\"Pn360\",\"informationIcon\":\"piuLg\"};","import { useSelector } from 'react-redux'\nimport { MAP_BUTTON_MODE, MAP_BUTTON_THEME, MAP_MODES, MAP_THEMES } from '../../../store/map/map.constants'\nimport { selectActiveMapEvents } from '../../../store/map/map.selectors'\nimport ThemeDark from './theme-dark.svg'\nimport ThemeNature from './theme-nature.svg'\nimport ThemeSatellite from './theme-satellite.png'\nimport ThemeSimple from './theme-simple.svg'\nimport ThemeStandard from './theme-standard.svg'\nimport { useEffect, useState } from 'react'\n\nconst themeButtons = [\n  {\n    key: MAP_THEMES.normal,\n    icon: ThemeStandard,\n    type: MAP_BUTTON_THEME,\n    availableInRaster: true\n  },\n  {\n    key: MAP_THEMES.simple,\n    icon: ThemeSimple,\n    type: MAP_BUTTON_THEME,\n    availableInRaster: false\n  },\n  {\n    key: MAP_THEMES.nature,\n    icon: ThemeNature,\n    type: MAP_BUTTON_THEME,\n    availableInRaster: false\n  },\n  {\n    key: MAP_THEMES.satellite,\n    icon: ThemeSatellite,\n    type: MAP_BUTTON_THEME,\n    availableInRaster: true\n  },\n  {\n    key: MAP_THEMES.dark,\n    icon: ThemeDark,\n    type: MAP_BUTTON_THEME,\n    availableInRaster: false\n  }\n]\nconst modeButtons = [\n  {\n    key: MAP_MODES.neutral,\n    icon: 'neutral',\n    type: MAP_BUTTON_MODE,\n    availableInRaster: true\n  },\n  {\n    key: MAP_MODES.traffic,\n    icon: 'traffic-outline',\n    type: MAP_BUTTON_MODE,\n    availableInRaster: true\n  },\n  {\n    key: MAP_MODES.zfe,\n    icon: 'critair-outline',\n    type: MAP_BUTTON_MODE,\n    availableInRaster: false\n  },\n  {\n    key: MAP_MODES.bicycle,\n    icon: 'bike-outline',\n    type: MAP_BUTTON_MODE,\n    availableInRaster: true\n  },\n  {\n    key: MAP_MODES.tc,\n    icon: 'subway-outline',\n    type: MAP_BUTTON_MODE,\n    availableInRaster: true\n  }\n]\n\nexport const useMapThemeButtons = () => themeButtons\n\nexport const useMapModeButtons = () => {\n  const activeMapEvents = useSelector(selectActiveMapEvents)\n\n  const [buttons, setButtons] = useState(modeButtons)\n  useEffect(() => {\n    const buttons = [...modeButtons]\n    buttons.splice(1, 0, ...activeMapEvents)\n    setButtons(buttons)\n  }, [activeMapEvents])\n\n  return buttons\n}\n","import { useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectUiDrawerClientTop } from '../../../store/ui/ui.selectors'\nimport { isGE } from '../../Device'\nimport { MINI_MAP_HEIGHT } from '../../main/main.constants'\nimport { PREHEADER_HEIGHT } from '../../header/header-constants'\n\n// all of the following value are in px\nconst GEOLOC_BUTTON_HEIGHT = 40\nconst LAYER_BUTTON_HEIGHT = 48\nconst BOTTOM_MARGIN = 24\nconst DRAWER_TOP_POSITION = MINI_MAP_HEIGHT + PREHEADER_HEIGHT\nconst MAX_GEOLOC_BUTTON_TOP_POSITION =\n  DRAWER_TOP_POSITION - LAYER_BUTTON_HEIGHT - GEOLOC_BUTTON_HEIGHT - BOTTOM_MARGIN * 2\nconst MAX_LAYER_BUTTON_TOP_POSITION = DRAWER_TOP_POSITION - LAYER_BUTTON_HEIGHT - BOTTOM_MARGIN\n\nexport const GEOLOC_BUTTON_TYPE = 'geoloc'\nexport const LAYERS_BUTTON_TYPE = 'layers'\n\nconst useDynamicButtons = ({ buttonType }) => {\n  const currentDrawerTopPosition = useSelector(selectUiDrawerClientTop)\n\n  const getButtonStyle = useCallback(() => {\n    if (isGE() || currentDrawerTopPosition === undefined) return undefined\n\n    const commonStyle = {\n      bottom: 'unset',\n      transition: 'top 0.25s ease'\n    }\n\n    if (buttonType === GEOLOC_BUTTON_TYPE) {\n      const calc = currentDrawerTopPosition - LAYER_BUTTON_HEIGHT - GEOLOC_BUTTON_HEIGHT - BOTTOM_MARGIN * 2\n      return { ...commonStyle, top: calc > MAX_GEOLOC_BUTTON_TOP_POSITION ? calc : MAX_GEOLOC_BUTTON_TOP_POSITION }\n    }\n\n    if (buttonType === LAYERS_BUTTON_TYPE) {\n      const calc = currentDrawerTopPosition - LAYER_BUTTON_HEIGHT - BOTTOM_MARGIN\n      return { ...commonStyle, top: calc > MAX_LAYER_BUTTON_TOP_POSITION ? calc : MAX_LAYER_BUTTON_TOP_POSITION }\n    }\n\n    return undefined\n  }, [currentDrawerTopPosition])\n\n  return {\n    getButtonStyle\n  }\n}\n\nexport default useDynamicButtons\n","import classNames from 'classnames'\nimport React, { useCallback, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { TAG_CLICK_TOGGLE_HD_MAP } from '../../analytics/analytics.tagids.constants'\nimport { selectIsMapFullScreen, selectIsVectorMap } from '../../../store/map/map.selectors'\nimport { switchMapType } from '../../../store/map/mapSlice'\nimport { UI_ELEMENTS } from '../../../store/ui/ui.constants'\nimport { selectShouldDisplayMapTools } from '../../../store/ui/ui.selectors'\nimport useConfigureAndSendTag from '../../analytics/useConfigureAndSendTag'\nimport { isGE } from '../../Device'\nimport { ACTION, CLICK_TAG } from '../../analytics/ClickTagsService'\nimport Modal from '../../genericComponents/Modal'\nimport cross from '../../genericComponents/assets/cross.svg'\nimport layers from '../../genericComponents/assets/layers.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport useUIDisplay from '../../ui/useUIDisplay'\nimport SwitchInput from '../../utils/SwitchInput'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport useEventCallback from '../../utils/useEventCallback'\nimport useTooltip from '../tools/useTooltip'\nimport HdTooltip from '../vector/HdTooltip'\nimport { ModeLayerButton, ThemeLayerButton } from './LayerButton'\nimport s from './LayersButtons.less'\nimport informationImg from './information.png'\n\nimport { hideUiMapTooSlowTooltip } from '../../../store/ui/uiSlice'\nimport { useMapModeButtons, useMapThemeButtons } from './LayersButtonsConfig'\nimport useDynamicButtons, { LAYERS_BUTTON_TYPE } from './useDynamicButtons'\n\nconst Buttons = ({ isOpened, isClosing, closeModes }) => {\n  const isVecto = useSelector(selectIsVectorMap)\n\n  const { tooltip: hdTooltipDisplayed, setTooltip: setHdTooltip } = useTooltip({ ge: true })\n  const dispatch = useDispatch()\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  const switchHdTooltip = useEventCallback(() => setHdTooltip(!hdTooltipDisplayed), [setHdTooltip, hdTooltipDisplayed])\n\n  const switchHighDefMap = useCallback(() => {\n    dispatch(switchMapType())\n    configureAndSendTag({\n      type: TAG_CLICK_TOGGLE_HD_MAP,\n      tagInfo: { tag: CLICK_TAG.XTC_CARTE_HD_OFF, [ACTION]: isVecto ? 'HD_off' : 'HD_on' }\n    })\n  }, [switchMapType])\n\n  const themeButtons = useMapThemeButtons()\n  const modeButtons = useMapModeButtons()\n\n  return (\n    <div className={classNames(s.buttons, isOpened && s.opened, isClosing && s.closing)}>\n      <div className={s.mainTitle}>\n        <T id={'map.tools.layers.tooltip'} />\n      </div>\n      <div className={classNames(s.closeButton)} onClick={() => closeModes()}>\n        <div className=\"icon\">\n          <SVGIcon url={cross} />\n        </div>\n      </div>\n      {isGE() && (\n        <div className={s.buttonsSection}>\n          <div className={s.highdef}>\n            <div className={s.highDefButton}>\n              <SwitchInput defaultValue={isVecto} onChange={switchHighDefMap} />\n              <p className={s.highdefLabel}>\n                <T id={'map.tools.layers.highdef.label'} />\n              </p>\n            </div>\n            <img src={informationImg} className={s.informationIcon} onClick={switchHdTooltip} />\n            {hdTooltipDisplayed && <HdTooltip onClick={switchHdTooltip} />}\n          </div>\n        </div>\n      )}\n      <div className={s.buttonsSection}>\n        <div className={s.title}>\n          <T id={'map.tools.layers.theme'} />\n        </div>\n        <div className={s.buttonsList}>\n          {themeButtons.map(({ type, key, icon, availableInRaster }) => (\n            <ThemeLayerButton key={key} id={key} icon={icon} disabled={!isVecto && !availableInRaster} />\n          ))}\n        </div>\n      </div>\n      <div className={s.buttonsSection}>\n        <div className={s.title}>\n          <T id={'map.tools.layers.mode'} />\n        </div>\n        <div className={s.buttonsList}>\n          {modeButtons.map(({ key, icon, isEventMode, availableInRaster, label, ariaLabel, tooltipLabel }) => (\n            <ModeLayerButton\n              key={key}\n              id={key}\n              icon={icon}\n              label={label}\n              ariaLabel={ariaLabel}\n              tooltipLabel={tooltipLabel}\n              disabled={!isVecto && !availableInRaster}\n              isEventMode={isEventMode}\n            />\n          ))}\n        </div>\n      </div>\n    </div>\n  )\n}\n\nconst LayersButtons = () => {\n  const dispatch = useDispatch()\n  const { getButtonStyle } = useDynamicButtons({ buttonType: LAYERS_BUTTON_TYPE })\n  const [display, setDisplay] = useState('close')\n  const isMapFullscreen = useSelector(selectIsMapFullScreen)\n  const { tooltip, setTooltip, mouseListeners } = useTooltip({ ge: true })\n  const isOpened = display === 'opened'\n  const isClosing = display === 'closing'\n  const { showUI, hideUI } = useUIDisplay(UI_ELEMENTS.MAP_TOOLS_PE)\n\n  const closeModes = useCallback(() => {\n    setDisplay('closing')\n    setDisplay('closed')\n    hideUI()\n  }, [setDisplay, hideUI])\n\n  const onOpenClick = useCallback(() => {\n    setDisplay('opened')\n    setTooltip(false)\n    showUI()\n    dispatch(hideUiMapTooSlowTooltip())\n  }, [setDisplay, setTooltip, showUI, dispatch])\n\n  return (\n    <div\n      className={classNames(s.root, isOpened && s.opened, isClosing && s.closing)}\n      style={isMapFullscreen ? undefined : getButtonStyle()}\n    >\n      {isGE() ? (\n        <Buttons closeModes={closeModes} isClosing={isClosing} isOpened={isOpened} />\n      ) : (\n        <Modal\n          modalId={UI_ELEMENTS.MAP_TOOLS_PE}\n          isOpen={isOpened}\n          style={{\n            bottom: '0',\n            top: 'auto',\n            width: '100%',\n            transform: 'translate(-50%, 0%)',\n            borderBottomRightRadius: '0',\n            borderBottomLeftRadius: '0'\n          }}\n          overlayStyle={{\n            zIndex: 180,\n            backgroundColor: 'rgba(0,0,0, 0.5)'\n          }}\n          onRequestClose={closeModes}\n          shouldCloseOnOverlayClick\n        >\n          <Buttons closeModes={closeModes} isClosing={isClosing} isOpened={isOpened} />\n        </Modal>\n      )}\n      <div className={classNames(s.button, s.openButton)} onClick={onOpenClick} {...mouseListeners}>\n        {isGE() && <T id={'map.tools.layers.maps'} />}\n        <div className=\"icon\">\n          <SVGIcon url={layers} />\n        </div>\n      </div>\n      <span className={classNames(s.tooltip, tooltip && 'active')}>\n        <T id={'map.tools.layers.tooltip'} />\n      </span>\n    </div>\n  )\n}\n\nexport default withEverySelectorTruthy(selectShouldDisplayMapTools)(LayersButtons)\n","import React from 'react'\nimport useLayersManager from './useLayersManager'\nimport useIntegerZoom from './useIntegerZoom'\nimport useMapZoomHandler from '../useMapZoomHandler'\nimport useMapPerfMetrics from '../useMapPerfMetrics'\nimport useMapMoveHandler from '../useMapMoveHandler'\nimport useMapPaddingHandler from '../useMapPaddingHandler'\nimport LayersButtons from '../common/LayersButtons'\n\nconst RasterMap = () => {\n  useLayersManager()\n  useIntegerZoom()\n  useMapMoveHandler()\n  useMapZoomHandler()\n  useMapPaddingHandler()\n  useMapPerfMetrics()\n\n  return (\n    <>\n      <LayersButtons />\n    </>\n  )\n}\n\nexport default RasterMap\n","import React, { useEffect, useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectAddressContour } from '../../../store/address/address.selectors'\nimport { selectIsMapReady } from '../../../store/map/map.selectors'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport { useMapContext } from '../MapContext'\nimport { reverseShape } from './map.polygon.utils'\n\nconst SOURCE_ID_AREA = 'city-shape-area-src'\nconst SOURCE_ID_LIMIT = 'city-shape-limit-src'\nconst LAYER_AREA_ID = 'city-shape-area'\nconst LAYER_LIMIT_ID = 'city-shape-limit'\nconst CONTOUR_COLOR = '#1A1A1A'\n\nconst getPolygonLayer = () => ({\n  id: LAYER_AREA_ID,\n  type: 'fill',\n  source: SOURCE_ID_AREA,\n  paint: {\n    'fill-opacity': 0.18,\n    'fill-color': CONTOUR_COLOR\n  }\n})\n\nconst getLineLayer = () => ({\n  id: LAYER_LIMIT_ID,\n  type: 'line',\n  source: SOURCE_ID_LIMIT,\n  paint: {\n    'line-opacity': 0.7,\n    'line-width': 2,\n    'line-color': CONTOUR_COLOR,\n    'line-dasharray': [1, 2]\n  }\n})\n\nconst createGeoJSON = geometry => ({\n  type: 'geojson',\n  data: {\n    type: 'FeatureCollection',\n    features: [\n      {\n        type: 'Feature',\n        properties: {},\n        geometry\n      }\n    ]\n  }\n})\n\nconst MapAddressContour = ({ reverse = true }) => {\n  const { map } = useMapContext()\n  const contour = useSelector(selectAddressContour)\n  const shape = useMemo(() => (contour && reverse ? reverseShape(contour) : contour), [reverse, contour])\n  const isMapReady = useSelector(selectIsMapReady)\n\n  const cleanShape = () => {\n    try {\n      if (!map.getLayer(LAYER_AREA_ID)) return\n      map.removeLayer(LAYER_AREA_ID)\n      map.removeLayer(LAYER_LIMIT_ID)\n      map.removeSource(SOURCE_ID_AREA)\n      map.removeSource(SOURCE_ID_LIMIT)\n    } catch (error) {\n      console.error('failed to cleanShape', error)\n    }\n  }\n\n  const drawShape = () => {\n    if (!shape) return\n\n    try {\n      map.addSource(SOURCE_ID_AREA, createGeoJSON(shape))\n      map.addSource(SOURCE_ID_LIMIT, createGeoJSON(contour))\n      map.addLayer(getPolygonLayer())\n      map.addLayer(getLineLayer())\n    } catch (e) {\n      console.error(e)\n    }\n  }\n\n  useEffect(() => {\n    if (!isMapReady || !shape) return\n    drawShape()\n  }, [shape, isMapReady])\n\n  useEffect(\n    () => () => {\n      cleanShape()\n    },\n    []\n  )\n\n  return <></>\n}\n\nexport default withEverySelectorTruthy(selectAddressContour)(MapAddressContour)\n","// extracted by mini-css-extract-plugin\nexport default {\"Copyrights\":\"jNtA0\",\"left\":\"xsdTm\"};","import React, { useEffect, useState, useRef } from 'react'\nimport classnames from 'classnames'\nimport { useMapContext } from '../MapContext'\nimport s from './Copyrights.less'\nimport { isGE } from '../../Device'\nimport { uniq } from '../../../utils/array'\nimport { throttle } from '../../../utils/function'\n\nconst DEFAULT_COPYRIGHT = '© Mappy'\n\nconst Copyrights = () => {\n  const { map } = useMapContext()\n  const [copyrights, setCopyrights] = useState(DEFAULT_COPYRIGHT)\n\n  const mapEventAttached = useRef(false)\n\n  useEffect(() => {\n    if (!mapEventAttached.current && map) {\n      map.on(\n        'render',\n        throttle(() => setCopyrights(getCopyright()), 300)\n      )\n\n      mapEventAttached.current = true\n    }\n  }, [mapEventAttached, map])\n\n  const getCopyrightsFeatures = () =>\n    map\n      .queryRenderedFeatures()\n      .filter(feature => (feature.layer.id || '').includes('copyrights_') && feature.properties.copyrights)\n\n  const getCopyrights = () =>\n    uniq(getCopyrightsFeatures().flatMap(feature => JSON.parse(feature.properties.copyrights)))\n\n  const getCopyright = () => {\n    let copyrights = []\n\n    try {\n      copyrights = getCopyrights()\n    } catch (err) {\n      console.error(err)\n    }\n\n    return [DEFAULT_COPYRIGHT, ...copyrights].join(' - ')\n  }\n\n  return <div className={classnames(s.Copyrights, !isGE() && s.left)}>{copyrights}</div>\n}\n\nexport default Copyrights\n","// extracted by mini-css-extract-plugin\nexport default {\"geoloc\":\"JUSVw\",\"button\":\"r6XR1\",\"icon\":\"jIVJ2\",\"follow\":\"ITaCJ\",\"active\":\"aNCdW\",\"fetch\":\"fVizQ\",\"geolocationSearching\":\"s83Ge\",\"errorMessage\":\"IIFXF\",\"tooltip\":\"G5NBH\",\"error\":\"otMZE\"};","import classNames from 'classnames'\nimport React, { useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { selectGeolocationStatus } from '../../../store/geolocation/geolocation.selectors'\nimport { setGeolocationStatus } from '../../../store/geolocation/geolocationSlice'\nimport {\n  GEOLOC_STATUS_BLOCKED,\n  GEOLOC_STATUS_BUTTON_WORKFLOW,\n  GEOLOC_STATUS_DISABLED,\n  GEOLOC_STATUS_FETCH_ACTIVE,\n  GEOLOC_STATUS_FETCH_FOLLOW,\n  GEOLOC_STATUS_FOLLOW\n} from '../../../store/map/map.constants'\nimport { selectShouldDisplayMapTools } from '../../../store/ui/ui.selectors'\nimport mappyLogoFilled from '../../genericComponents/assets/mappy-logo-filled.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport s from './GeolocButton.less'\nimport useTooltip from './useTooltip'\nimport useDynamicButtons, { GEOLOC_BUTTON_TYPE } from '../common/useDynamicButtons'\nimport { selectIsMapFullScreen } from '../../../store/map/map.selectors'\n\nconst GeolocButton = () => {\n  const dispatch = useDispatch()\n  const isMapFullscreen = useSelector(selectIsMapFullScreen)\n  const { getButtonStyle } = useDynamicButtons({ buttonType: GEOLOC_BUTTON_TYPE })\n  const status = useSelector(selectGeolocationStatus)\n  const [statusFromButton, setStatusFromButton] = useState(null)\n  const isFollowStatus = status === GEOLOC_STATUS_FOLLOW\n  const isBlockStatus = status === GEOLOC_STATUS_BLOCKED\n  const isFetchStatus = status === GEOLOC_STATUS_FETCH_ACTIVE || status === GEOLOC_STATUS_FETCH_FOLLOW\n\n  const { tooltip, mouseListeners } = useTooltip({ ge: true, pe: true })\n\n  useEffect(() => {\n    if (statusFromButton && status !== statusFromButton) {\n      setStatusFromButton(null)\n    }\n  }, [status, statusFromButton])\n\n  const onClick = () => {\n    const newStatus = GEOLOC_STATUS_BUTTON_WORKFLOW[status]\n    if (newStatus !== GEOLOC_STATUS_DISABLED) {\n      setStatusFromButton(newStatus)\n      dispatch(setGeolocationStatus(newStatus, { mapMove: true }))\n    } else {\n      dispatch(setGeolocationStatus(newStatus))\n    }\n  }\n\n  return (\n    <span\n      className={s.geoloc}\n      onClick={onClick}\n      {...mouseListeners}\n      style={isMapFullscreen ? undefined : getButtonStyle()}\n    >\n      <div className={classNames(s.button, isFollowStatus ? s.follow : s.active)}>\n        <div className={classNames('icon', s.icon)}>\n          <div className={classNames(s.icon, isFetchStatus && s.fetch)}>\n            <SVGIcon url={mappyLogoFilled} />\n          </div>\n        </div>\n      </div>\n      <span className={classNames(s.tooltip, tooltip && 'active', isBlockStatus && s.error)}>\n        {isBlockStatus ? <T id={'geolocation.error'} /> : <T id={'map.tools.geoloc.tooltip'} />}\n      </span>\n    </span>\n  )\n}\n\nexport default withEverySelectorTruthy(selectShouldDisplayMapTools)(GeolocButton)\n","import classnames from 'classnames'\nimport React from 'react'\nimport { selectShouldDisplayMapTools } from '../../../store/ui/ui.selectors'\nimport { isGE } from '../../Device'\nimport logoMappy from '../../genericComponents/logo-mappy-bordered.svg'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport s from './Logo.less'\n\nconst Logo = () => (\n  <div className={classnames(s.Logo, isGE() ? s.centeredBottomLogo : 'maplibregl-ctrl-bottom-left')}>\n    <img src={logoMappy} width=\"60\" height=\"16\" />\n  </div>\n)\n\nexport default withEverySelectorTruthy(selectShouldDisplayMapTools)(Logo)\n","// extracted by mini-css-extract-plugin\nexport default {\"Logo\":\"QoSBm\",\"centeredBottomLogo\":\"dL6k1\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { TAG_UPI_IMMERSIVE } from '../../analytics/analytics.tagids.constants'\nimport { displayOutdoor, hideOutdoor } from '../../../store/ui/ui.actions'\nimport { selectIsOutdoorPrompted } from '../../../store/ui/ui.outdoor.selectors'\nimport TagActionButton from '../../genericComponents/TagActionButton'\nimport personArrowSurrounded from '../../genericComponents/assets/person-arrow-surrounded.svg'\nimport personFallingArrowSurrounded from '../../genericComponents/assets/person-falling-arrow-surrounded.svg'\nimport T from '../../i18n/T'\nimport { OUTDOOR_STATUS_PROMPT } from '../../outdoor/Utils'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { useAction } from '../../utils/react-redux'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './OutdoorButton.less'\nimport useTooltip from './useTooltip'\n\nconst OutdoorButton = () => {\n  const statusIsPrompt = useSelector(selectIsOutdoorPrompted)\n  const execDisplayOutdoor = useAction(displayOutdoor)\n  const execHideOutdoor = useAction(hideOutdoor)\n  const { tooltip, setTooltip, mouseListeners } = useTooltip({ ge: true })\n\n  const onButtonClick = useEventCallback(() => {\n    setTooltip(false)\n    if (statusIsPrompt) {\n      execHideOutdoor()\n    } else {\n      execDisplayOutdoor({ status: OUTDOOR_STATUS_PROMPT })\n    }\n  }, [statusIsPrompt, execHideOutdoor, execDisplayOutdoor])\n\n  return (\n    <div className={s.root}>\n      <TagActionButton\n        type={TAG_UPI_IMMERSIVE}\n        className={classNames(s.button, statusIsPrompt && 'active')}\n        onClick={onButtonClick}\n        {...mouseListeners}\n      >\n        <SVGIcon url={personArrowSurrounded} />\n        <SVGIcon url={personFallingArrowSurrounded} />\n      </TagActionButton>\n      <span className={classNames(s.buttonTooltip, tooltip && 'active')}>\n        <T id={'map.tools.upi.tooltip'} />\n      </span>\n    </div>\n  )\n}\n\nexport default OutdoorButton\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"kwYj7\",\"button\":\"jplnA\",\"buttonTooltip\":\"_Y_i0\"};","import { useEffect, useRef } from 'react'\nimport { selectShouldDisplayMapTools } from '../../../store/ui/ui.selectors'\nimport { isGE } from '../../Device'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport { ScaleControl as MapLibreScaleControl } from 'maplibre-gl'\nimport './Scale.less'\nimport { useCallbackWithMapContext } from '../MapContext'\n\nconst Scale = () => {\n  const scaleRef = useRef()\n\n  const addControl = useCallbackWithMapContext(map => {\n    if (scaleRef.current) return\n\n    scaleRef.current = new MapLibreScaleControl({\n      maxWidth: 120,\n      unit: 'metric'\n    })\n    const position = isGE() ? 'bottom-right' : 'bottom-left'\n    map.addControl(scaleRef.current, position)\n  })\n\n  const removeControl = useCallbackWithMapContext(map => {\n    try {\n      if (scaleRef.current) map.removeControl(scaleRef.current)\n    } catch (e) {}\n    scaleRef.current = undefined\n  })\n\n  useEffect(() => {\n    addControl()\n    return () => {\n      if (scaleRef.current) removeControl()\n    }\n  }, [addControl, removeControl])\n\n  return null\n}\n\nexport default withEverySelectorTruthy(selectShouldDisplayMapTools)(Scale)\n","import React from 'react'\nimport classnames from 'classnames'\nimport s from './ToggleFullScreenGeButton.less'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport { toggleFullscreen } from '../../../store/map/mapSlice'\nimport useEventCallback from '../../utils/useEventCallback'\nimport { withOnlyGE } from '../../Device'\nimport ReduireDesktop from './reduire-desktop.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { selectIsMapFullScreen, selectShouldDisplayToggleFullScreenGeButton } from '../../../store/map/map.selectors'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ACTION } from '../../analytics/ClickTagsService'\nimport TagActionButton from '../../genericComponents/TagActionButton'\nimport { TAG_CLICK_TOGGLE_FULLSCREEN } from '../../analytics/analytics.tagids.constants'\n\nconst ToggleFullScreenGeButton = () => {\n  const dispatch = useDispatch()\n  const isMapFullScreen = useSelector(selectIsMapFullScreen)\n\n  const onClick = useEventCallback(() => {\n    dispatch(toggleFullscreen())\n  }, [toggleFullscreen])\n\n  return (\n    <TagActionButton\n      className={s.container}\n      type={TAG_CLICK_TOGGLE_FULLSCREEN}\n      tagInfo={{ [ACTION]: isMapFullScreen ? 'Ouvrir' : 'Fermer' }}\n      onClick={onClick}\n    >\n      <SVGIcon url={ReduireDesktop} className={classnames(s.icon, isMapFullScreen ? s.invert : undefined)} />\n    </TagActionButton>\n  )\n}\n\nexport default withOnlyGE(\n  withEverySelectorTruthy(selectShouldDisplayToggleFullScreenGeButton)(ToggleFullScreenGeButton)\n)\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"oUaQF\",\"icon\":\"wWRWG\",\"invert\":\"PjaGG\"};","import classNames from 'classnames'\nimport React from 'react'\nimport { toggleFullscreen } from '../../../store/map/mapSlice'\nimport { selectIsMapFullScreen } from '../../../store/map/map.selectors'\nimport { withOnlyPE } from '../../Device'\nimport innerArrows from '../../genericComponents/assets/inner-arrows.svg'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './ToggleFullscreenPeButton.less'\nimport { useDispatch } from 'react-redux'\n\nconst ToggleFullscreenPeButton = () => {\n  const dispatch = useDispatch()\n  const onClick = useEventCallback(() => dispatch(toggleFullscreen()), [toggleFullscreen])\n\n  return (\n    <div className={classNames('icon', s.ToggleFullscreenButton)} onClick={onClick}>\n      <SVGIcon url={innerArrows} />\n    </div>\n  )\n}\n\nexport default withOnlyPE(withEverySelectorTruthy(selectIsMapFullScreen)(ToggleFullscreenPeButton))\n","// extracted by mini-css-extract-plugin\nexport default {\"ToggleFullscreenButton\":\"yKKSL\",\"buttonPositioning\":\"r7hNP\",\"buttonAspect\":\"ulBMU\"};","import React, { useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { MAP_MODES } from '../../../store/map/map.constants'\nimport { selectMapMode } from '../../../store/map/map.selectors'\nimport { withOnlyGE } from '../../Device'\nimport T from '../../i18n/T'\nimport { ONE_MINUTE_MS, pad } from '../../utils/date'\nimport s from './TrafficLegend.less'\n\nexport const formatHourFromDate = date => {\n  const mins = date.getMinutes()\n  const hours = date.getHours()\n  return pad(hours) + ':' + pad(mins)\n}\n\nconst TrafficLegend = withOnlyGE(() => {\n  const mapMode = useSelector(selectMapMode).mode\n  const intervalRef = useRef()\n  const [lastUpdate, setLastUpdate] = useState(new Date())\n\n  useEffect(() => {\n    if (mapMode === MAP_MODES.traffic) {\n      intervalRef.current = setInterval(() => {\n        setLastUpdate(new Date())\n      }, 2 * ONE_MINUTE_MS)\n    } else {\n      clearInterval(intervalRef.current)\n    }\n    return () => {\n      clearInterval(intervalRef.current)\n    }\n  }, [mapMode])\n\n  if (mapMode !== MAP_MODES.traffic) return <></>\n\n  return (\n    <div className={s.trafficLegend}>\n      <p className={s.title}>\n        <T id={'map.tools.layers.traffic.legend'} />\n        &nbsp;\n        {formatHourFromDate(lastUpdate)}\n      </p>\n      <ul>\n        <li className={s.yellow} />\n        <li className={s.orange} />\n        <li className={s.red} />\n        <li className={s.darkred} />\n        <li className={s.black} />\n      </ul>\n      <p>\n        <span className={s.left}>\n          <T id={'map.tools.layers.traffic.slow'} />\n        </span>\n        <span className={s.right}>\n          <T id={'map.tools.layers.traffic.congested'} />\n        </span>\n      </p>\n    </div>\n  )\n})\n\nexport default TrafficLegend\n","// extracted by mini-css-extract-plugin\nexport default {\"trafficLegend\":\"qJJUg\",\"title\":\"tnGAn\",\"yellow\":\"fTULR\",\"orange\":\"ChtuL\",\"red\":\"Kvb4V\",\"darkred\":\"QYMeT\",\"black\":\"QxDi8\",\"left\":\"D4aSG\",\"right\":\"bm9rv\"};","import classNames from 'classnames'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { requestZoom } from '../../../store/map/map.actions'\nimport { selectMapMaxZoom, selectMapZoom } from '../../../store/map/map.selectors'\nimport { withOnlyGE } from '../../Device'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { useAction } from '../../utils/react-redux'\nimport { MAP_ZOOM_MIN, MAP_ZOOM_STEP } from '../map.constants'\nimport useTooltip from './useTooltip'\nimport s from './ZoomButtons.less'\n\nconst ZoomButton = ({ onClick, icon, className, label, ...otherProps }) => {\n  const { tooltip, mouseListeners } = useTooltip({ ge: true })\n\n  return (\n    <div className={s.root}>\n      <button\n        {...otherProps}\n        className={classNames(s.ZoomButton, className)}\n        type=\"button\"\n        onClick={onClick}\n        {...mouseListeners}\n      >\n        <SVGIcon icon={icon} />\n      </button>\n      <span className={classNames(s.tooltip, tooltip && 'active')}>\n        <T id={`map.tools.zoom-${label}.tooltip`} />\n      </span>\n    </div>\n  )\n}\n\nconst ZoomInButton = props => (\n  <ZoomButton {...props} icon={'plus'} aria-label=\"Zoom in\" label={'in'} className={s.ZoomInButton} />\n)\n\nconst ZoomOutButton = props => (\n  <ZoomButton {...props} icon={'minus'} aria-label=\"Zoom out\" label={'out'} className={s.ZoomOutButton} />\n)\n\nexport const ZoomButtons = () => {\n  const execRequestZoom = useAction(requestZoom)\n  const zoomFromStore = useSelector(selectMapZoom)\n  const maxZoom = useSelector(selectMapMaxZoom)\n  // The state zoom exists because the store value is updated when animation finished\n  // With the state zoom user can click several times during the animation\n  const [zoom, setZoom] = useState()\n\n  useEffect(() => {\n    setZoom(zoomFromStore)\n  }, [zoomFromStore])\n\n  const updateZoom = useCallback(\n    delta => {\n      let targetZoom = zoom + delta\n      if (targetZoom > maxZoom) targetZoom = maxZoom\n      if (targetZoom < MAP_ZOOM_MIN) targetZoom = MAP_ZOOM_MIN\n\n      execRequestZoom({ zoom: targetZoom })\n      setZoom(targetZoom)\n    },\n    [zoom, maxZoom]\n  )\n\n  return (\n    <div className={s.ZoomButtons}>\n      <ZoomInButton onClick={() => updateZoom(MAP_ZOOM_STEP)} />\n      <ZoomOutButton onClick={() => updateZoom(-MAP_ZOOM_STEP)} />\n    </div>\n  )\n}\n\nexport default withOnlyGE(ZoomButtons)\n","import classNames from 'classnames'\nimport React, { useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { TAG_MULTIPATH_CTA } from '../../analytics/analytics.tagids.constants'\nimport { selectMapTooSlowTooltip } from '../../../store/ui/ui.selectors'\nimport { hideUiMapTooSlowTooltip } from '../../../store/ui/uiSlice'\nimport useConfigureAndSendTag from '../../analytics/useConfigureAndSendTag'\nimport { withOnlyGE } from '../../Device'\nimport { PUB_TAG } from '../../analytics/PublisherTagsService'\nimport cross from '../../genericComponents/assets/cross.svg'\nimport T from '../../i18n/T'\nimport SVGIcon from '../../svg/SVGIcon'\nimport { withEverySelectorTruthy } from '../../utils/react-redux'\nimport useEventCallback from '../../utils/useEventCallback'\nimport s from './MapTooSlowTooltip.less'\n\nconst MapTooSlowTooltip = () => {\n  const dispatch = useDispatch()\n  const [visible, setVisible] = useState(true)\n\n  const closeTooltip = useEventCallback(() => {\n    dispatch(hideUiMapTooSlowTooltip())\n  }, [])\n\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  useEffect(() => {\n    configureAndSendTag({\n      type: TAG_MULTIPATH_CTA,\n      tagInfo: { tag: PUB_TAG.PUB_MAP_POP_IN_MAP_TOO_SLOW },\n      isImpression: true\n    })\n    setTimeout(() => setVisible(false), 5000)\n  }, [])\n\n  return (\n    <div className={classNames(s.root, !visible ? s.hide : '')} onClick={closeTooltip}>\n      <div className={s.content}>\n        <p>\n          <T id={'map.tools.tooSlowToolip.title'} />\n        </p>\n        <p>\n          <T id={'map.tools.tooSlowToolip.text'} />\n        </p>\n      </div>\n      <div className={s.closeButton}>\n        <SVGIcon url={cross} />\n      </div>\n    </div>\n  )\n}\nexport default withOnlyGE(withEverySelectorTruthy(selectMapTooSlowTooltip)(MapTooSlowTooltip))\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"EQaTH\",\"hide\":\"WwNZv\",\"content\":\"OTy9E\",\"closeButton\":\"AdKRe\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectShouldDisplayMapLayersButton } from '../../../store/map/map.selectors'\nimport LayersButtons from '../common/LayersButtons'\nimport useMapMoveHandler from '../useMapMoveHandler'\nimport useMapPaddingHandler from '../useMapPaddingHandler'\nimport useMapPerfMetrics from '../useMapPerfMetrics'\nimport useMapPointerHandler from '../useMapPointerHandler'\nimport useMapZoomHandler from '../useMapZoomHandler'\nimport MapTooSlowTooltip from './MapTooSlowTooltip'\nimport useClickMapEventsHandler from './useClickMapEventsHandler'\nimport useClickMyMapLayers from './useClickMyMapLayers'\n\nconst VectorMap = () => {\n  useClickMyMapLayers()\n  useMapPointerHandler()\n  useClickMapEventsHandler()\n  useMapMoveHandler()\n  useMapZoomHandler()\n  useMapPaddingHandler()\n  useMapPerfMetrics()\n\n  const shouldDisplayMapLayersButton = useSelector(selectShouldDisplayMapLayersButton)\n\n  return shouldDisplayMapLayersButton ? null : (\n    <>\n      <MapTooSlowTooltip />\n      <LayersButtons />\n    </>\n  )\n}\n\nexport default VectorMap\n","import { useDispatch, useSelector } from 'react-redux'\nimport { ROUTE_SEO_GEOENTITY } from '../../../routes'\nimport { TAG_CLICK_MY_MAP } from '../../analytics/analytics.tagids.constants'\nimport { resetGeoentityList } from '../../../store/geoentity/geoentitySlice'\nimport { navigateTo } from '../../../store/history/history.actions'\nimport { LAYER_ID_CMM, MAP_STATUS_STYLED } from '../../../store/map/map.constants'\nimport { selectMapStatus } from '../../../store/map/map.selectors'\nimport { selectIsFrenchSite } from '../../../store/navigation/navigation.selectors'\nimport useConfigureAndSendTag from '../../analytics/useConfigureAndSendTag'\nimport { useAction } from '../../utils/react-redux'\nimport { useEffectWithMapContext } from '../MapContext'\n\nconst useClickMyMapLayers = () => {\n  const status = useSelector(selectMapStatus)\n  const execNavigateTo = useAction(navigateTo)\n  const configureAndSendTag = useConfigureAndSendTag()\n  const dispatch = useDispatch()\n  const isFrenchSite = useSelector(selectIsFrenchSite)\n\n  const navigateToPoi = ({ id, rubricId }) => {\n    configureAndSendTag({\n      type: TAG_CLICK_MY_MAP,\n      tagInfo: {\n        catId: rubricId\n      }\n    })\n\n    dispatch(resetGeoentityList())\n    execNavigateTo({\n      route: ROUTE_SEO_GEOENTITY,\n      routeOptions: { geoentityId: id }\n    })\n  }\n\n  const handleClick = e => {\n    if (e.handled) return\n    e.handled = true\n    const id = e.features[0].properties.mappy_poi_id\n    const rubricId = e.features[0].properties.mappy_context_rubric\n\n    navigateToPoi({ id, rubricId })\n  }\n\n  useEffectWithMapContext(\n    map => {\n      if (!map.getStyle() || status !== MAP_STATUS_STYLED) return\n\n      map\n        .getStyle()\n        .layers.filter(layer => layer.layout?.visibility)\n        .forEach(({ id }) => {\n          if (id.match(LAYER_ID_CMM)) {\n            map.setLayoutProperty(id, 'visibility', 'visible')\n            if (isFrenchSite) {\n              map.on('click', id, handleClick)\n            }\n          }\n        })\n\n      return () => {\n        if (map?.getStyle()) {\n          map\n            .getStyle()\n            .layers.filter(layer => layer.layout?.visibility)\n            .forEach(({ id }) => {\n              if (isFrenchSite) {\n                map.off('click', id, handleClick)\n              }\n            })\n        }\n      }\n    },\n    [status, isFrenchSite]\n  )\n}\n\nexport default useClickMyMapLayers\n","import { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { LAYER_ID_CMM, LAYER_ID_POLYLINE } from '../../store/map/map.constants'\nimport { selectActiveMapEvents, selectIsMapInitialized } from '../../store/map/map.selectors'\nimport { selectIsFrenchSite } from '../../store/navigation/navigation.selectors'\nimport { selectQuizGuessInProgress } from '../../store/quiz/quiz.selectors'\nimport { isGE } from '../Device'\nimport { getBBoxAroundPointer } from '../utils/map'\nimport useErrorBoundaryCallback from '../utils/useErrorBoundaryCallback'\nimport { useMapContext } from './MapContext'\n\nconst useMapPointerHandler = () => {\n  const { map } = useMapContext()\n  const mapInitialized = useSelector(selectIsMapInitialized)\n  const isFrenchSite = useSelector(selectIsFrenchSite)\n  const quizGuessInProgress = useSelector(selectQuizGuessInProgress)\n  const activeMapEvents = useSelector(selectActiveMapEvents)\n  const mapEventsKeys = activeMapEvents.map(({ key }) => key)\n\n  const getPolylinesOrClickableLayersAroundPointer = useErrorBoundaryCallback(\n    event =>\n      map.queryRenderedFeatures(getBBoxAroundPointer(event)).find(feature => {\n        const layerId = feature.layer?.id ?? ''\n        const polyline = LAYER_ID_POLYLINE.test(layerId)\n        const cmm = isFrenchSite ? LAYER_ID_CMM.test(layerId) : false\n        const isMapEvent = mapEventsKeys.find(key => layerId.includes(key))\n        return polyline || cmm || isMapEvent\n      }),\n    [map, isFrenchSite, mapEventsKeys]\n  )\n\n  const handleMouseOver = useErrorBoundaryCallback(\n    e => {\n      const shouldDisplayPointer = getPolylinesOrClickableLayersAroundPointer(e)\n      if (shouldDisplayPointer) {\n        map.getCanvas().style.cursor = 'pointer'\n      } else if (quizGuessInProgress) {\n        map.getCanvas().style.cursor = 'crosshair'\n      } else {\n        map.getCanvas().style.cursor = ''\n      }\n    },\n    [map, getPolylinesOrClickableLayersAroundPointer, quizGuessInProgress]\n  )\n\n  useEffect(() => {\n    if (isGE()) {\n      if (map && mapInitialized) map.on('mousemove', handleMouseOver)\n      return () => {\n        if (map) map.off('mousemove', handleMouseOver)\n      }\n    }\n  }, [map, mapInitialized, handleMouseOver])\n}\n\nexport default useMapPointerHandler\n","import { useSelector } from 'react-redux'\nimport { setMapEventPopin } from '../../../store/map/map.actions'\nimport { MAP_STATUS_STYLED } from '../../../store/map/map.constants'\nimport {\n  selectActiveMapEvents,\n  selectMapStatus,\n  selectShouldDisplayMapEventPopin\n} from '../../../store/map/map.selectors'\nimport { useAction } from '../../utils/react-redux'\nimport useErrorBoundaryCallback from '../../utils/useErrorBoundaryCallback'\nimport { useEffectWithMapContext } from '../MapContext'\n\nconst useClickMapEventsHandler = () => {\n  const status = useSelector(selectMapStatus)\n  const exectSetPopin = useAction(setMapEventPopin)\n  const activeMapEvents = useSelector(selectActiveMapEvents)\n  const shouldDisplayMapEventPopin = useSelector(selectShouldDisplayMapEventPopin)\n\n  const handleClick = useErrorBoundaryCallback(e => {\n    if (e.handled) return\n    e.handled = true\n    const feature = e?.features?.[0]\n    if (feature) {\n      exectSetPopin(feature.properties)\n    }\n  })\n\n  useEffectWithMapContext(\n    map => {\n      if (!map.getStyle() || status !== MAP_STATUS_STYLED || !shouldDisplayMapEventPopin) return\n\n      map\n        .getStyle()\n        .layers.filter(layer => layer.layout)\n        .forEach(({ id }) => {\n          activeMapEvents.forEach(mapEvent => {\n            if (id.includes(mapEvent.key)) {\n              map.on('click', id, handleClick)\n            }\n          })\n        })\n\n      return () => {\n        if (map.getStyle()) {\n          map\n            .getStyle()\n            .layers.filter(layer => layer.layout)\n            .forEach(({ id }) => {\n              map.off('click', id, handleClick)\n            })\n        }\n      }\n    },\n    [status, shouldDisplayMapEventPopin]\n  )\n}\n\nexport default useClickMapEventsHandler\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsQuizPage } from '../../store/history/history.selectors'\nimport { selectIsVectorMap } from '../../store/map/map.selectors'\nimport MapEventPopin from '../genericComponents/MapEventPopin'\nimport UPI from '../outdoor/UPI'\nimport Geolocation from './Geolocation'\nimport MapProvider from './MapProvider'\nimport ContextMenu from './contextmenu/ContextMenu'\nimport MapDebugger from './debug/MapDebugger'\nimport AddressMarkersContainer from './markers/AddressMarkersContainer'\nimport GeolocMarker from './markers/GeolocMarker'\nimport Popup from './popup/Popup'\nimport RasterMap from './raster/RasterMap'\nimport MapAddressContour from './shape/MapAddressContour'\nimport Copyrights from './tools/Copyrights'\nimport GeolocButton from './tools/GeolocButton'\nimport Logo from './tools/Logo'\nimport OutdoorButton from './tools/OutdoorButton'\nimport Scale from './tools/Scale'\nimport ToggleFullScreenGeButton from './tools/ToggleFullScreenGeButton'\nimport ToggleFullscreenPeButton from './tools/ToggleFullscreenPeButton'\nimport TrafficLegend from './tools/TrafficLegend'\nimport ZoomButtons from './tools/ZoomButtons'\nimport VectorMap from './vector/VectorMap'\n\n// webpack:BrowserOnly\nconst DynamicMap = ({ children }) => {\n  const pageIsQuiz = useSelector(selectIsQuizPage)\n  const vectorMap = useSelector(selectIsVectorMap)\n\n  return (\n    <MapProvider>\n      {/*  Order matters : at least for GeolocMarker and GeolocButton */}\n      <GeolocMarker />\n      <GeolocButton />\n      <Geolocation />\n      <Scale />\n      <Logo />\n      <Copyrights />\n      <ZoomButtons />\n      {!pageIsQuiz && <OutdoorButton />}\n      <TrafficLegend />\n      <ToggleFullScreenGeButton />\n      <ToggleFullscreenPeButton />\n      <UPI />\n      <Popup />\n      <MapEventPopin />\n      <ContextMenu />\n      <MapAddressContour />\n      <AddressMarkersContainer />\n      <MapDebugger />\n      {vectorMap ? <VectorMap /> : <RasterMap />}\n      {children}\n    </MapProvider>\n  )\n}\n\nexport default DynamicMap\n","\n  export default function () {\n    return null\n  }\n  ","import debug from 'debug'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { getService } from '../../parameters'\nimport SERVICES from '../../services.constants'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { selectHeaderHeight } from '../../store/ui/ui.selectors'\nimport { isPE, withOnlyBrowser } from '../Device'\nimport { HEADER_SUBHEADER_HEIGHT } from '../header/header-constants'\nimport { translate } from '../i18n/T'\nimport { ONE_SECOND_MS, ONE_WEEK_MS } from '../utils/date'\nimport request from '../utils/request'\nimport useEventCallback from '../utils/useEventCallback'\nimport s from './AskForUpdate.less'\n\nconst d = debug('update')\n\nconst TEST_MODE = location.hash === '#test-update'\n\nconst DELAY_BETWEEN_CHECKS = 2 * (TEST_MODE ? ONE_SECOND_MS : ONE_WEEK_MS) // ONE_MONTH_MS cause setInterval to be called in loop\n\nif (d.enabled) {\n  d('delay between checks', DELAY_BETWEEN_CHECKS)\n}\n\nexport const fetchVersion = () => {\n  const serviceUrl = getService(SERVICES.WEB_VERSION)\n  return request\n    .get(serviceUrl, { silent: true })\n    .then(({ data }) => data)\n    .catch(e => console.warn('error while fetching version', e))\n}\n\n// webpack:BrowserOnly\nconst AskForUpdate = () => {\n  const [version, setVersion] = useState(global.__APP_VERSION__)\n  const isSameVersion = global.__APP_VERSION__ === version\n  const locale = useSelector(selectLocale)\n  const t = translate(locale)\n\n  if (d.enabled) {\n    d('version:', version, 'isSameVersion:', isSameVersion)\n  }\n\n  const headerHeight = useSelector(selectHeaderHeight)\n  const height = isPE() ? headerHeight + HEADER_SUBHEADER_HEIGHT + 30 : 80\n\n  const loadVersion = useCallback(async () => {\n    const newVersion = await fetchVersion()\n    if (d.enabled) {\n      d('loadVersion, got:', newVersion, 'vs:', version)\n    }\n    if (newVersion) {\n      setVersion(TEST_MODE ? 'v+' : newVersion)\n    }\n  }, [setVersion])\n\n  useEffect(() => {\n    if (!isSameVersion) return\n    const intervalId = setInterval(() => {\n      loadVersion()\n    }, DELAY_BETWEEN_CHECKS)\n    return () => clearInterval(intervalId)\n  }, [isSameVersion, loadVersion])\n\n  const reload = useEventCallback(() => location.reload(), [])\n\n  if (isSameVersion) return <></>\n\n  return (\n    <div className={s.root} style={{ top: `${height}px` }}>\n      {t('update.msg')}\n      <a href=\"/\" className={s.refresh} onClick={reload}>\n        {t('update.refresh')}\n      </a>\n    </div>\n  )\n}\n\nexport default withOnlyBrowser(AskForUpdate)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"pjDqI\",\"refresh\":\"idODq\"};","import React from 'react'\nimport DynamicMap from './DynamicMap'\nimport StaticMap from './StaticMap'\nimport AskForUpdate from '../genericComponents/AskForUpdate'\nimport './StaticMap.less'\n\nconst Map = (props) => (\n  <>\n    <StaticMap>{props.staticMap}</StaticMap>\n    <DynamicMap {...props} />\n    <AskForUpdate />\n  </>\n)\n\nexport default Map\n","// extracted by mini-css-extract-plugin\nexport default {\"VehicleSettingsBox\":\"S6FYe\",\"VehicleSettingsBoxContent\":\"H1Nyr\",\"critAirLine\":\"xKdAP\"};","import React, { useCallback } from 'react'\nimport s from './CritairChoice.less'\nimport T from '../i18n/T'\nimport classnames from 'classnames'\n\nconst CritairChoice = ({ critAirStickers, onSelect, value }) => {\n  const onChooseForId = useCallback(\n    id => evt => {\n      evt.preventDefault()\n      onSelect(id)\n    },\n    []\n  )\n  return (\n    <div className={s.root}>\n      <div className={s.title}>\n        <T id={'itinerary.options.critair.label'} />\n      </div>\n      <ul>\n        {critAirStickers.map(sticker => {\n          const { icon, label, id, description } = sticker\n          return (\n            <li\n              onClick={onChooseForId(id)}\n              key={`sticker-${id}`}\n              className={classnames(s.sticker, value === id && s.selected)}\n            >\n              <div className={s.iconWrapper}>\n                <img src={icon} className={s.icon} />\n              </div>\n\n              <div className={s.content}>\n                <div className={s.label}>{label}</div>\n                <div>{description}</div>\n              </div>\n            </li>\n          )\n        })}\n      </ul>\n    </div>\n  )\n}\n\nexport default CritairChoice\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"bCkpO\",\"title\":\"R4dOl\",\"sticker\":\"uCPxZ\",\"selected\":\"ZISbs\",\"iconWrapper\":\"K5PJf\",\"icon\":\"XxIiz\",\"content\":\"lrbgf\",\"label\":\"ofz21\",\"value\":\"D9ASX\"};","import React, { useEffect } from 'react'\nimport { MODAL_IDS } from '../../store/ui/ui.constants'\nimport Modal from '../genericComponents/Modal'\nimport useModal from '../ui/useModal'\nimport CritairChoice from './CritairChoice'\nimport s from './CritairChoice.less'\nimport { CRITAIR_DEFAULT_ID } from './ItineraryOptions.constants'\n\nconst CritairSelect = ({ critAirStickers = [], value = CRITAIR_DEFAULT_ID, modeId, onChange }) => {\n  const critAirSticker = critAirStickers.find(({ id }) => id === value)\n  const modalId = `${MODAL_IDS.CRITAIR}-${modeId}`\n  const { displayModal, hideModal } = useModal(modalId)\n\n  useEffect(() => hideModal, [])\n\n  const onSelect = value => {\n    onChange({ target: { value } })\n    hideModal()\n  }\n\n  return (\n    <>\n      <div className={s.value} onClick={() => displayModal()}>\n        {critAirSticker && <img src={critAirSticker.icon} />}\n      </div>\n      <Modal modalId={modalId} style={{ maxWidth: 360 }}>\n        <CritairChoice critAirStickers={critAirStickers} onSelect={onSelect} value={value} />\n      </Modal>\n    </>\n  )\n}\n\nexport default CritairSelect\n","import React from 'react'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport s from './VehicleSettingsBox.less'\n\nimport classNames from 'classnames'\nimport { useSelector } from 'react-redux'\nimport {\n  TAG_CLICK_TRAVEL_OPTIONS_CAR_VEHICLE,\n  TAG_CLICK_TRAVEL_OPTIONS_MOTORBIKE_VEHICLE\n} from '../analytics/analytics.tagids.constants'\nimport { changePreferredOptions } from '../../store/itineraryOptions/itineraryOptions.actions'\nimport {\n  selectCritAirId,\n  selectFuelList,\n  selectModeMetadata,\n  selectPreferredFuel,\n  selectPreferredVehicle,\n  selectVehicleList,\n  selectVehicleOwn\n} from '../../store/itineraryOptions/itineraryOptions.selectors'\nimport { SELECTION } from '../analytics/ClickTagsService'\nimport NumericInput from '../genericComponents/NumericInput'\nimport T from '../i18n/T'\nimport { useAction } from '../utils/react-redux'\nimport CritairSelect from './CritairSelect'\nimport {\n  CRITAIR_ID,\n  PREFERRED_FUEL_CONSUMPTION,\n  PREFERRED_FUEL_ID,\n  PREFERRED_FUEL_PRICE,\n  PREFERRED_VEHICLE_ID,\n  VEHICLE_OWN\n} from './ItineraryOptions.constants'\nimport VehicleOwnedSwitcher from './VehicleOwnedSwitcher'\n\nconst tagConfig = {\n  car: {\n    [PREFERRED_VEHICLE_ID]: TAG_CLICK_TRAVEL_OPTIONS_CAR_VEHICLE\n  },\n  motorbike: {\n    [PREFERRED_VEHICLE_ID]: TAG_CLICK_TRAVEL_OPTIONS_MOTORBIKE_VEHICLE\n  }\n}\n\nexport default function VehicleSettingsBox({ modeId, hasOwnSwitcher }) {\n  const modeMetadata = useSelector(selectModeMetadata(modeId))\n  const preferredVehicle = useSelector(selectPreferredVehicle(modeId))\n  const preferredFuel = useSelector(selectPreferredFuel(modeId))\n  const fuelList = useSelector(selectFuelList(modeId))\n  const vehicleList = useSelector(selectVehicleList(modeId))\n  const vehicleOwn = useSelector(selectVehicleOwn(modeId))\n  const critAirStickers = modeMetadata?.transportMode?.critair\n  const critAirId = useSelector(selectCritAirId(modeId))\n  const execChangePreferredOptions = useAction(changePreferredOptions)\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  const onPreferredOptionsChange = optionsToUpdate => event => {\n    const value = event.target.value\n    const tag = tagConfig?.[modeMetadata.id]?.[optionsToUpdate]\n    if (tag) {\n      configureAndSendTag({\n        type: tag,\n        tagInfo: {\n          [SELECTION]: value\n        }\n      })\n    }\n    execChangePreferredOptions({\n      modeId: modeMetadata.id,\n      [optionsToUpdate]: value\n    })\n  }\n\n  return (\n    <div className={classNames(s.VehicleSettingsBox)}>\n      <div className={s.VehicleSettingsBoxContent}>\n        {hasOwnSwitcher && (\n          <div>\n            <VehicleOwnedSwitcher\n              labelKey={`itinerary.options.own.${modeId}`}\n              onChange={value => {\n                onPreferredOptionsChange(VEHICLE_OWN)({ target: { value } })\n              }}\n              defaultValue={vehicleOwn}\n            />\n          </div>\n        )}\n        <div>\n          <label>\n            <T id={'itinerary.options.vehicle.type'} />\n          </label>\n          <span>\n            <select value={preferredVehicle.id} onChange={onPreferredOptionsChange(PREFERRED_VEHICLE_ID)}>\n              {(vehicleList || []).map(vehicle => (\n                <option key={vehicle.id} value={vehicle.id}>\n                  {vehicle.label}\n                </option>\n              ))}\n            </select>\n          </span>\n        </div>\n        <div>\n          <label>\n            <T id={'itinerary.options.vehicle.fuel'} />\n          </label>\n          <span>\n            <select value={preferredFuel.id} onChange={onPreferredOptionsChange(PREFERRED_FUEL_ID)}>\n              {(fuelList || []).map(fuel => (\n                <option key={fuel.id} value={fuel.id}>\n                  {fuel.label}\n                </option>\n              ))}\n            </select>\n            <NumericInput\n              value={preferredFuel.price}\n              step=\"0.1\"\n              onBlur={onPreferredOptionsChange(PREFERRED_FUEL_PRICE)}\n            />\n            <span>{preferredFuel.price_unit}</span>\n          </span>\n        </div>\n        <div>\n          <label>\n            <T id={'itinerary.options.vehicle.consumption'} />\n          </label>\n          <span>\n            <NumericInput\n              value={preferredFuel.consumption}\n              step=\"1\"\n              onBlur={onPreferredOptionsChange(PREFERRED_FUEL_CONSUMPTION)}\n            />\n            <span>{preferredFuel.consumption_unit}</span>\n          </span>\n        </div>\n        {critAirStickers && (\n          <div className={s.critAirLine}>\n            <div>\n              <T id={'itinerary.options.critair.label'} />\n            </div>\n            <CritairSelect\n              critAirStickers={critAirStickers}\n              value={critAirId}\n              modeId={modeId}\n              onChange={onPreferredOptionsChange(CRITAIR_ID)}\n            />\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n","import React, { useEffect, useRef } from 'react'\nimport { useMapContext } from '../MapContext'\nimport { hasTouchSupport } from '../../Device'\nimport s from './Marker.less'\nimport classNames from 'classnames'\n\nimport { Marker as MapLibreMarker } from 'maplibre-gl'\nimport useErrorBoundaryCallback from '../../utils/useErrorBoundaryCallback'\n\n// webpack:BrowserOnly\nconst Marker = props => {\n  const {\n    isCurrent,\n    coordinates: { lng, lat },\n    anchorPosition = 'bottom',\n    dragOptions,\n    children,\n    zIndex\n  } = props\n  const { map } = useMapContext()\n  const markerElementRef = useRef()\n  const mapLibreMarkerRef = useRef()\n  const isDraggable = dragOptions && dragOptions.onDragEnd\n\n  const onClick = e => {\n    e.preventDefault()\n    e.stopPropagation()\n    props.onClick?.(e)\n  }\n\n  const onSelect = e => {\n    e.preventDefault()\n    e.stopPropagation()\n    props.onSelect?.(e)\n  }\n\n  const onUnselect = e => {\n    e.preventDefault()\n    e.stopPropagation()\n    props.onUnselect?.(e)\n  }\n\n  const handleEvents = useErrorBoundaryCallback(\n    method => {\n      if (mapLibreMarkerRef?.current?.getElement) {\n        const mapMarker = mapLibreMarkerRef.current.getElement()\n        if (hasTouchSupport()) {\n          mapMarker[method]('click', onClick)\n        } else {\n          mapMarker[method]('mouseenter', onSelect)\n          mapMarker[method]('mouseleave', onUnselect)\n          if (props.onClick) mapMarker[method]('click', onClick)\n        }\n      }\n    },\n    [onClick, onSelect, onUnselect]\n  )\n\n  const attachEvents = useErrorBoundaryCallback(() => {\n    handleEvents('addEventListener')\n    if (isDraggable && mapLibreMarkerRef.current) {\n      mapLibreMarkerRef.current.on('dragend', dragOptions.onDragEnd)\n    }\n  }, [handleEvents])\n\n  const unattachEvents = useErrorBoundaryCallback(() => {\n    handleEvents('removeEventListener')\n    if (isDraggable && mapLibreMarkerRef.current) {\n      mapLibreMarkerRef.current.off('dragend', dragOptions.onDragEnd)\n    }\n  }, [handleEvents])\n\n  const buildMarker = () => {\n    const {\n      current: { firstChild }\n    } = markerElementRef\n    if (!map || !lng || !lat) return\n\n    mapLibreMarkerRef.current = new MapLibreMarker({\n      element: firstChild,\n      anchor: anchorPosition,\n      draggable: Boolean(dragOptions)\n    })\n      .setLngLat([lng, lat])\n      .addTo(map)\n  }\n\n  useEffect(() => {\n    if (!mapLibreMarkerRef.current) {\n      buildMarker()\n    }\n\n    return () => {\n      if (mapLibreMarkerRef.current) {\n        mapLibreMarkerRef.current.remove()\n        mapLibreMarkerRef.current = null\n      }\n    }\n  }, [])\n\n  useEffect(() => {\n    attachEvents()\n    return () => {\n      unattachEvents()\n    }\n  }, [attachEvents, unattachEvents])\n\n  return (\n    <div ref={markerElementRef}>\n      <div className={classNames(isCurrent ? s.activeMarker : s.marker, isCurrent && 'activeMarker')} style={{ zIndex }}>{children}</div>\n    </div>\n  )\n}\n\nexport default Marker\n","// extracted by mini-css-extract-plugin\nexport default {\"marker\":\"jtp3D\",\"activeMarker\":\"ciwvM\",\"pinWrapper\":\"ebbmK\",\"activeMarkerWrapper\":\"ulr57\",\"activeMarkerWrapperImage\":\"PkaFp\"};","import React, { useCallback, useContext, useEffect } from 'react'\n\nexport const MapContext = React.createContext(undefined)\n\nexport const useMapContext = () => useContext(MapContext)\n\nexport const useEffectWithMapContext = (fn, deps = []) => {\n  const { map } = useMapContext()\n\n  useEffect(() => (map ? fn(map) : undefined), [map, ...deps])\n}\n\nexport const useCallbackWithMapContext = (fn, deps = []) => {\n  const { map } = useMapContext()\n  return useCallback(\n    (...args) => {\n      if (!map) return\n      return fn(map, ...args)\n    },\n    [map, ...deps]\n  )\n}\n","import React, { useEffect, useState } from 'react'\nimport { useTemporaryVisible } from '../../../genericComponents/useTemporaryVisible'\nimport { useT } from '../../../i18n/T'\nimport StatusMessage from '../../../genericComponents/StatusMessage'\n\n// webpack:BrowserOnly\nconst UserFavoriteError = ({ marginTop = 10, error }) => {\n  const [text, setText] = useState()\n  const [visible, setVisible] = useTemporaryVisible()\n\n  useEffect(() => {\n    if (error) {\n      setText(error?.name ?? 'Error')\n      setVisible(true)\n    }\n  }, [error])\n\n  return <StatusMessage message={useT(text)} visible={visible} />\n}\n\nexport default UserFavoriteError\n","export const INCENTIVE_NAME = {\n  incitationPrincipale: 'incitationPrincipale',\n  incitationOptionDeplacement: 'incitationOptionDeplacement',\n  incitationOptionReponse: 'incitationOptionReponse',\n  incitationPOI: 'incitationPOI'\n}\n","import { useState, useCallback, useEffect } from 'react'\n\nconst useToggle = (defaultOpen = true) => {\n  const [isOpen, setState] = useState(defaultOpen)\n\n  useEffect(() => {\n    setState(false)\n  }, [])\n\n  const toggle = useCallback(() => setState(!isOpen), [isOpen])\n\n  const onClick = useCallback(\n    evt => {\n      if (evt) evt.preventDefault()\n\n      toggle()\n    },\n    [toggle]\n  )\n\n  return [isOpen, onClick]\n}\n\nexport default useToggle\n","import debug from 'debug'\nimport KeycloakJs from 'keycloak-js'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { getService } from '../../parameters'\nimport SERVICES from '../../services.constants'\nimport { USER_SCREENS } from '../../store/ui/ui.constants'\nimport { setUiUserScreen } from '../../store/ui/uiSlice'\nimport {\n  setUserAccountConnected,\n  setUserAccountNotConnected,\n  setUserAccountToken\n} from '../../store/userAccount/userAccountSlice'\nimport { pick } from '../../utils/object'\nimport { USER_ID_LEGACY, USER_ID_SUB } from './UserAccount.constants'\n\nconst d = debug('keycloak')\n\n// webpack:BrowserOnly\n\nexport const EXPIRATION_SECONDS = 60\n\nlet keycloak\n\nexport const setKeycloakForTestOnly = kc => {\n  keycloak = kc\n}\n\nconst useKeycloak = () => {\n  const [loaded, setLoaded] = useState(Boolean(keycloak))\n\n  useEffect(() => {\n    if (keycloak) {\n      setLoaded(true)\n    } else {\n      keycloak = new KeycloakJs({\n        url: getService(SERVICES.KEYCLOAK).url,\n        realm: 'mappy',\n        clientId: 'web-login'\n      })\n      keycloak\n        .init({\n          onLoad: 'check-sso',\n          responseMode: 'query',\n          silentCheckSsoFallback: false,\n          silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html'\n        })\n        .then(authenticated => {\n          setLoaded(true)\n          d(`User is ${authenticated ? 'authenticated' : 'not authenticated'}`)\n        })\n        .catch(error => {\n          console.error('Failed to initialize adapter:', error)\n        })\n    }\n  }, [])\n\n  return { loaded, keycloak }\n}\n\nexport const useKeycloakEngine = () => {\n  const { loaded, keycloak } = useKeycloak()\n  const dispatch = useDispatch()\n  const timeoutRef = useRef()\n\n  useEffect(() => {\n    if (loaded) {\n      if (keycloak?.authenticated === true) {\n        const token = keycloak.token\n        d('keycloak.idTokenParsed', keycloak.idTokenParsed)\n        const identity = pick(keycloak.idTokenParsed, ['name', 'picture', 'email', USER_ID_LEGACY, USER_ID_SUB])\n        d('connected, token', token, 'idTokenParsed', keycloak.idTokenParsed)\n        dispatch(setUserAccountConnected({ token, identity }))\n      } else if (keycloak.authenticated === false) {\n        d('not connected')\n        dispatch(setUserAccountNotConnected())\n      }\n      setUiUserScreen({ name: USER_SCREENS.default })\n    }\n  }, [loaded, keycloak?.authenticated])\n\n  const updateAndSaveToken = useCallback(\n    () =>\n      loaded &&\n      keycloak\n        .updateToken(EXPIRATION_SECONDS)\n        .then(hasTokenBeenRefreshed => {\n          d('updateToken - hasTokenBeenRefreshed', hasTokenBeenRefreshed, 'new token', keycloak.token)\n          if (keycloak.token) {\n            dispatch(setUserAccountToken(keycloak.token))\n          }\n        })\n        .catch(e => {\n          d('updateToken failed - disconnect user', e)\n          dispatch(setUserAccountNotConnected())\n        }),\n    [loaded, keycloak]\n  )\n\n  useEffect(() => {\n    const checkIfTokenWillExpire = () => {\n      if (loaded && keycloak?.authenticated) {\n        d('checkIfTokenWillExpire')\n        if (keycloak.isTokenExpired(EXPIRATION_SECONDS)) {\n          d('isTokenExpired:true')\n          updateAndSaveToken()\n        }\n        timeoutRef.current = setTimeout(checkIfTokenWillExpire, EXPIRATION_SECONDS * 1000)\n      }\n    }\n    if (loaded && keycloak?.authenticated) {\n      timeoutRef.current = setTimeout(checkIfTokenWillExpire, EXPIRATION_SECONDS * 1000)\n    }\n    return () => {\n      clearTimeout(timeoutRef)\n    }\n  }, [loaded, keycloak?.authenticated, timeoutRef])\n\n  useEffect(() => {\n    if (loaded && keycloak) {\n      keycloak.onTokenExpired = () => {\n        d('token expired')\n        updateAndSaveToken()\n      }\n    }\n  }, [loaded, keycloak])\n}\n\nexport default useKeycloak\n","// from https://github.com/angel-rs/css-color-filter-generator?tab=MIT-1-ov-file - MIT License\n\nexport const extractRGB = hex => hex.match(/\\w\\w/g).map(x => parseInt(x, 16))\n\nconst componentToHex = c => {\n  const hex = c.toString(16)\n  return hex.length === 1 ? '0' + hex : hex\n}\n\nconst rgbToHex = (r, g, b) => '#' + componentToHex(r) + componentToHex(g) + componentToHex(b)\n\nexport class Color {\n  constructor(r, g, b) {\n    this.set(r, g, b)\n  }\n\n  toRgb() {\n    return `rgb(${Math.round(this.r)}, ${Math.round(this.g)}, ${Math.round(this.b)})`\n  }\n\n  toHex() {\n    return rgbToHex(Math.round(this.r), Math.round(this.g), Math.round(this.b))\n  }\n\n  set(r, g, b) {\n    this.r = this.clamp(r)\n    this.g = this.clamp(g)\n    this.b = this.clamp(b)\n  }\n\n  hueRotate(angle = 0) {\n    angle = (angle / 180) * Math.PI\n    const sin = Math.sin(angle)\n    const cos = Math.cos(angle)\n\n    this.multiply([\n      0.213 + cos * 0.787 - sin * 0.213,\n      0.715 - cos * 0.715 - sin * 0.715,\n      0.072 - cos * 0.072 + sin * 0.928,\n      0.213 - cos * 0.213 + sin * 0.143,\n      0.715 + cos * 0.285 + sin * 0.14,\n      0.072 - cos * 0.072 - sin * 0.283,\n      0.213 - cos * 0.213 - sin * 0.787,\n      0.715 - cos * 0.715 + sin * 0.715,\n      0.072 + cos * 0.928 + sin * 0.072\n    ])\n  }\n\n  grayscale(value = 1) {\n    this.multiply([\n      0.2126 + 0.7874 * (1 - value),\n      0.7152 - 0.7152 * (1 - value),\n      0.0722 - 0.0722 * (1 - value),\n      0.2126 - 0.2126 * (1 - value),\n      0.7152 + 0.2848 * (1 - value),\n      0.0722 - 0.0722 * (1 - value),\n      0.2126 - 0.2126 * (1 - value),\n      0.7152 - 0.7152 * (1 - value),\n      0.0722 + 0.9278 * (1 - value)\n    ])\n  }\n\n  sepia(value = 1) {\n    this.multiply([\n      0.393 + 0.607 * (1 - value),\n      0.769 - 0.769 * (1 - value),\n      0.189 - 0.189 * (1 - value),\n      0.349 - 0.349 * (1 - value),\n      0.686 + 0.314 * (1 - value),\n      0.168 - 0.168 * (1 - value),\n      0.272 - 0.272 * (1 - value),\n      0.534 - 0.534 * (1 - value),\n      0.131 + 0.869 * (1 - value)\n    ])\n  }\n\n  saturate(value = 1) {\n    this.multiply([\n      0.213 + 0.787 * value,\n      0.715 - 0.715 * value,\n      0.072 - 0.072 * value,\n      0.213 - 0.213 * value,\n      0.715 + 0.285 * value,\n      0.072 - 0.072 * value,\n      0.213 - 0.213 * value,\n      0.715 - 0.715 * value,\n      0.072 + 0.928 * value\n    ])\n  }\n\n  multiply(matrix) {\n    const newR = this.clamp(this.r * matrix[0] + this.g * matrix[1] + this.b * matrix[2])\n    const newG = this.clamp(this.r * matrix[3] + this.g * matrix[4] + this.b * matrix[5])\n    const newB = this.clamp(this.r * matrix[6] + this.g * matrix[7] + this.b * matrix[8])\n    this.r = newR\n    this.g = newG\n    this.b = newB\n  }\n\n  brightness(value = 1) {\n    this.linear(value)\n  }\n  contrast(value = 1) {\n    this.linear(value, -(0.5 * value) + 0.5)\n  }\n\n  linear(slope = 1, intercept = 0) {\n    this.r = this.clamp(this.r * slope + intercept * 255)\n    this.g = this.clamp(this.g * slope + intercept * 255)\n    this.b = this.clamp(this.b * slope + intercept * 255)\n  }\n\n  invert(value = 1) {\n    this.r = this.clamp((value + (this.r / 255) * (1 - 2 * value)) * 255)\n    this.g = this.clamp((value + (this.g / 255) * (1 - 2 * value)) * 255)\n    this.b = this.clamp((value + (this.b / 255) * (1 - 2 * value)) * 255)\n  }\n\n  hsl() {\n    // Code taken from https://stackoverflow.com/a/9493060/2688027, licensed under CC BY-SA.\n    const r = this.r / 255\n    const g = this.g / 255\n    const b = this.b / 255\n    const max = Math.max(r, g, b)\n    const min = Math.min(r, g, b)\n    const l = (max + min) / 2\n    let h\n    let s\n\n    if (max === min) {\n      h = s = 0\n    } else {\n      const d = max - min\n      s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n      switch (max) {\n        case r:\n          h = (g - b) / d + (g < b ? 6 : 0)\n          break\n\n        case g:\n          h = (b - r) / d + 2\n          break\n\n        case b:\n          h = (r - g) / d + 4\n          break\n      }\n      h /= 6\n    }\n\n    return {\n      h: h * 100,\n      s: s * 100,\n      l: l * 100\n    }\n  }\n\n  clamp(value) {\n    if (value > 255) {\n      value = 255\n    } else if (value < 0) {\n      value = 0\n    }\n    return value\n  }\n}\n\nexport class Solver {\n  constructor(target) {\n    this.target = target\n    this.targetHSL = target.hsl()\n    this.reusedColor = new Color(0, 0, 0)\n  }\n\n  solve() {\n    const result = this.solveNarrow(this.solveWide())\n    return {\n      values: result.values,\n      loss: result.loss,\n      filter: this.raw(result.values)\n    }\n  }\n\n  solveWide() {\n    const A = 5\n    const c = 15\n    const a = [60, 180, 18000, 600, 1.2, 1.2]\n\n    let best = { loss: Infinity }\n    for (let i = 0; best.loss > 25 && i < 3; i++) {\n      const initial = [50, 20, 3750, 50, 100, 100]\n      const result = this.spsa(A, a, c, initial, 1000)\n      if (result.loss < best.loss) {\n        best = result\n      }\n    }\n    return best\n  }\n\n  solveNarrow(wide) {\n    const A = wide.loss\n    const c = 2\n    const A1 = A + 1\n    const a = [0.25 * A1, 0.25 * A1, A1, 0.25 * A1, 0.2 * A1, 0.2 * A1]\n    return this.spsa(A, a, c, wide.values, 500)\n  }\n\n  spsa(A, a, c, values, iters) {\n    const alpha = 1\n    const gamma = 0.16666666666666666\n\n    let best = null\n    let bestLoss = Infinity\n    const deltas = new Array(6)\n    const highArgs = new Array(6)\n    const lowArgs = new Array(6)\n\n    for (let k = 0; k < iters; k++) {\n      const ck = c / Math.pow(k + 1, gamma)\n      for (let i = 0; i < 6; i++) {\n        deltas[i] = Math.random() > 0.5 ? 1 : -1\n        highArgs[i] = values[i] + ck * deltas[i]\n        lowArgs[i] = values[i] - ck * deltas[i]\n      }\n\n      const lossDiff = this.loss(highArgs) - this.loss(lowArgs)\n      for (let i = 0; i < 6; i++) {\n        const g = (lossDiff / (2 * ck)) * deltas[i]\n        const ak = a[i] / Math.pow(A + k + 1, alpha)\n        values[i] = fix(values[i] - ak * g, i)\n      }\n\n      const loss = this.loss(values)\n      if (loss < bestLoss) {\n        best = values.slice(0)\n        bestLoss = loss\n      }\n    }\n    return { values: best, loss: bestLoss }\n\n    function fix(value, idx) {\n      let max = 100\n      if (idx === 2 /* saturate */) {\n        max = 7500\n      } else if (idx === 4 /* brightness */ || idx === 5 /* contrast */) {\n        max = 200\n      }\n\n      if (idx === 3 /* hue-rotate */) {\n        if (value > max) {\n          value %= max\n        } else if (value < 0) {\n          value = max + (value % max)\n        }\n      } else if (value < 0) {\n        value = 0\n      } else if (value > max) {\n        value = max\n      }\n      return value\n    }\n  }\n\n  loss(filters) {\n    // Argument is array of percentages.\n    const color = this.reusedColor\n    color.set(0, 0, 0)\n\n    color.invert(filters[0] / 100)\n    color.sepia(filters[1] / 100)\n    color.saturate(filters[2] / 100)\n    color.hueRotate(filters[3] * 3.6)\n    color.brightness(filters[4] / 100)\n    color.contrast(filters[5] / 100)\n\n    const colorHSL = color.hsl()\n    return (\n      Math.abs(color.r - this.target.r) +\n      Math.abs(color.g - this.target.g) +\n      Math.abs(color.b - this.target.b) +\n      Math.abs(colorHSL.h - this.targetHSL.h) +\n      Math.abs(colorHSL.s - this.targetHSL.s) +\n      Math.abs(colorHSL.l - this.targetHSL.l)\n    )\n  }\n\n  raw(filters) {\n    const fmt = (idx, multiplier = 1) => Math.round(filters[idx] * multiplier)\n\n    return `brightness(0) saturate(100%) invert(${fmt(0)}%) sepia(${fmt(1)}%) saturate(${fmt(2)}%) hue-rotate(${fmt(3, 3.6)}deg) brightness(${fmt(4)}%) contrast(${fmt(5)}%)`\n  }\n}\n","import debug from 'debug'\nimport { Color, extractRGB, Solver } from './color'\n\nconst d = debug('css')\n\nexport const buildStyleAttributes = (attr = {}) => {\n  const extra = attr.color ? { WebkitTextFillColor: attr.color } : {}\n\n  return { ...attr, ...extra }\n}\n\n/* Returns an invisible RGB if no hex is provided */\nexport const hexToRgb = (hex, alpha = 1) => {\n  if (!hex) return `rgba(0,0,0,0)`\n\n  const [r, g, b] = extractRGB(hex)\n\n  return `rgba(${r},${g},${b},${alpha})`\n}\n\nexport const buildForceColorFullString = color => `color:${color};fill:${color};-webkit-text-fill-color:${color};`\n\nconst hexToCssFilterCache = {}\n\nexport const hexToCssFilter = hex => {\n  if (!hex) return ''\n\n  const cleanHex = hex.toLowerCase()\n\n  if (hexToCssFilterCache[cleanHex]) {\n    if (d.enabled) {\n      d('hexToCssFilter: found value in cache for', cleanHex)\n    }\n    return hexToCssFilterCache[cleanHex]\n  }\n\n  const t = d.enabled ? Date.now() : undefined\n\n  const [r, g, b] = extractRGB(cleanHex)\n\n  const color = new Color(r, g, b)\n  const solver = new Solver(color)\n  const result = solver.solve()\n  const res = {\n    color,\n    solver,\n    result\n  }\n  if (d.enabled) {\n    d(\n      'hexToCssFilter: found filter for %s - color to filter loss: %d (~1 is perfect, 5 is ok, 15 is bad) - generation time: %d ms',\n      cleanHex,\n      res.result.loss,\n      Date.now() - t\n    )\n  }\n\n  hexToCssFilterCache[cleanHex] = res.result.filter\n  return res.result.filter\n}\n","import React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { TAG_CLICK_TRAVEL_OPTIONS_MODEFAVORI } from '../analytics/analytics.tagids.constants'\nimport { selectFavouriteModes, selectPreferredMode } from '../../store/itineraryOptions/itineraryOptions.selectors'\nimport { setPreferredMode } from '../../store/itineraryOptions/itineraryOptionsSlice'\nimport { SELECTION } from '../analytics/ClickTagsService'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport ModeItem from '../itinerary/ModeItem'\nimport sModeSelector from '../itinerary/ModeSelector.less'\n\nconst FavouriteModeBox = () => {\n  const favouriteModes = useSelector(selectFavouriteModes)\n  const preferredMode = useSelector(selectPreferredMode)\n  const dispatch = useDispatch()\n  const configureAndSendTag = useConfigureAndSendTag()\n\n  const onClickForId = id => () => {\n    configureAndSendTag({\n      type: TAG_CLICK_TRAVEL_OPTIONS_MODEFAVORI,\n      tagInfo: {\n        [SELECTION]: id\n      }\n    })\n    dispatch(setPreferredMode({ modeId: id }))\n  }\n\n  return (\n    <ul>\n      {favouriteModes.map(({ id, label, icon }) => {\n        return (\n          <li className={sModeSelector.listItemFavorites} key={id}>\n            <ModeItem\n              selected={preferredMode === id}\n              icon={icon}\n              description={label}\n              onClick={onClickForId(id)}\n              displayHighlightBar={false}\n            />\n          </li>\n        )\n      })}\n    </ul>\n  )\n}\n\nexport default FavouriteModeBox\n","// extracted by mini-css-extract-plugin\nexport default {\"boxWrapper\":\"pV1Dn\",\"boxContent\":\"pUTpF\"};","import React, { useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { changePreferredOptions } from '../../store/itineraryOptions/itineraryOptions.actions'\nimport { selectPreferredSpeed, selectVehicleOwn } from '../../store/itineraryOptions/itineraryOptions.selectors'\nimport T, { useTranslateAsObject } from '../i18n/T'\nimport { useAction } from '../utils/react-redux'\nimport { PREFERRED_SPEED, TRAVEL_SPEED_VALUES_BY_MODE, TRAVEL_SPEEDS, VEHICLE_OWN } from './ItineraryOptions.constants'\nimport s from './ModeSpeedSettingsBox.less'\nimport VehicleOwnedSwitcher from './VehicleOwnedSwitcher'\n\nconst speedTKey = item => `itinerary.options.speed.${item}`\n\nexport default function ModeSpeedSettingsBox({ modeId, hasOwnSwitcher }) {\n  const preferredSpeed = useSelector(selectPreferredSpeed(modeId))\n  const vehicleOwn = useSelector(selectVehicleOwn(modeId))\n  const execChangePreferredOptions = useAction(changePreferredOptions)\n  const translations = useTranslateAsObject(TRAVEL_SPEEDS.map(speedTKey))\n\n  const onPreferredOptionsChange = useCallback(event => {\n    const value = event.target.value\n    execChangePreferredOptions({\n      modeId,\n      [PREFERRED_SPEED]: value\n    })\n  }, [])\n\n  return (\n    <div>\n      {hasOwnSwitcher && (\n        <div>\n          <VehicleOwnedSwitcher\n            labelKey={`itinerary.options.own.${modeId}`}\n            onChange={value =>\n              execChangePreferredOptions({\n                modeId,\n                [VEHICLE_OWN]: value\n              })\n            }\n            defaultValue={vehicleOwn}\n          />\n        </div>\n      )}\n      <div className={s.speedWrapper}>\n        <T id={speedTKey('generic')} />\n        <select onChange={onPreferredOptionsChange} value={preferredSpeed}>\n          {TRAVEL_SPEEDS.map(value => (\n            <option key={`${modeId}_${value}`} value={value}>\n              {translations[speedTKey(value)]} ({TRAVEL_SPEED_VALUES_BY_MODE[modeId][value]} km/h)\n            </option>\n          ))}\n        </select>\n      </div>\n    </div>\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"speedWrapper\":\"ceLK1\"};","import React, { useEffect, useState } from 'react'\nimport { saveUserItineraryOptions } from '../../store/userAccount/userAccount.actions'\nimport { useTemporaryVisible } from '../genericComponents/useTemporaryVisible'\nimport T from '../i18n/T'\nimport sUserManageFavorites from '../UserAccount/connected/userFavorites/UserManageFavorite.less'\nimport { useAction } from '../utils/react-redux'\nimport FavouriteModeBox from './FavouriteModeBox'\nimport s from './ItineraryOptions.less'\nimport ModeSpeedSettingsBox from './ModeSpeedSettingsBox'\nimport VehicleSettingsBox from './VehicleSettingsBox'\n\nconst ItineraryOptions = () => {\n  const execSaveUserItineraryOptions = useAction(saveUserItineraryOptions)\n  const [visible, setVisible] = useTemporaryVisible()\n  const [itineraryOptionsError, setItineraryOptionsError] = useState()\n\n  useEffect(() => {\n    return async () => {\n      const saveItineraryOptionsResult = await execSaveUserItineraryOptions()\n\n      if (saveItineraryOptionsResult?.error) {\n        setVisible(true)\n        setItineraryOptionsError(saveItineraryOptionsResult.error)\n      }\n    }\n  }, [])\n\n  return (\n    <>\n      {visible && <div className={sUserManageFavorites.errorMessage}>{itineraryOptionsError}</div>}\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.preferred-mode'} />\n        </h2>\n        <div className={s.boxContent}>\n          <FavouriteModeBox />\n        </div>\n      </div>\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.car'} />\n        </h2>\n        <div className={s.boxContent}>\n          <VehicleSettingsBox modeId=\"car\" />\n        </div>\n      </div>\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.motorbike'} />\n        </h2>\n        <div className={s.boxContent}>\n          <VehicleSettingsBox modeId=\"motorbike\" hasOwnSwitcher />\n        </div>\n      </div>\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.walk'} />\n        </h2>\n        <div className={s.boxContent}>\n          <ModeSpeedSettingsBox modeId=\"walk\" />\n        </div>\n      </div>\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.bike'} />\n        </h2>\n        <div className={s.boxContent}>\n          <ModeSpeedSettingsBox modeId=\"bike\" hasOwnSwitcher />\n        </div>\n      </div>\n      <div className={s.boxWrapper}>\n        <h2>\n          <T id={'itinerary.options.title.trottinette'} />\n        </h2>\n        <div className={s.boxContent}>\n          <ModeSpeedSettingsBox modeId=\"trottinette\" hasOwnSwitcher />\n        </div>\n      </div>\n    </>\n  )\n}\n\nexport default ItineraryOptions\n","import React from 'react'\nimport s from './VehicleOwnedSwitcher.less'\nimport SwitchInput from '../utils/SwitchInput'\nimport T from '../i18n/T'\n\nconst VehicleOwnedSwitcher = ({ labelKey, onChange, defaultValue }) => {\n  return (\n    <div className={s.root}>\n      <div>\n        <T id={labelKey} />\n      </div>\n      <SwitchInput onChange={onChange} defaultValue={defaultValue} />\n    </div>\n  )\n}\n\nexport default VehicleOwnedSwitcher\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"mKaO4\"};","import { useSelector } from 'react-redux'\nimport { HEADER_DEFAULT_HEIGHT_PE, HEADER_SUBHEADER_HEIGHT } from '../header/header-constants'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { isUIElementDisplayed, selectHeaderHeight } from '../../store/ui/ui.selectors'\n\nconst useComputedHeaderHeight = (menuCategoriesPE, subHeaderComponent) => {\n  const headerHeight = useSelector(selectHeaderHeight)\n  const suggestDisplayed = useSelector(isUIElementDisplayed(UI_ELEMENTS.SUGGEST))\n  const searchDialogDisplayed = useSelector(isUIElementDisplayed(UI_ELEMENTS.SEARCH_DIALOG))\n\n  const subHeaderHeigth =\n    !suggestDisplayed && !searchDialogDisplayed && subHeaderComponent ? HEADER_SUBHEADER_HEIGHT : 0\n\n  const shouldDisplayMenuCategoriesPE = menuCategoriesPE && !suggestDisplayed && !searchDialogDisplayed\n\n  const menuHeigth = shouldDisplayMenuCategoriesPE ? HEADER_DEFAULT_HEIGHT_PE : 0\n\n  return headerHeight + subHeaderHeigth + menuHeigth\n}\n\nexport default useComputedHeaderHeight\n"],"names":["KEYS","_ref","suggestionsFavorites","idxStartAt","selectedId","updateSelectedId","onClick","isInputValueEmpty","useSelector","selectIsSuggestInputValueEmpty","isConnected","selectIsUserConnected","isUserAccountAvailable","selectIsUserAccountEnabled","hasFavoriteSuggests","isEmpty","React","className","s","T","id","SuggestContentList","suggestions","suggestionsSearchHistory","hasSearchHistorySuggests","suggestionsService","dispatch","useDispatch","onSuggestCleanHistory","useEventCallback","resetSearchHistory","hasSuggests","error","name","positionComponent","withoutFavorites","selectAllSuggestions","setSelectedId","useState","timestamp","setTimestamp","favorites","searchHistory","hasServiceSuggests","service","stateRef","useRef","suggestsRef","errorRef","selectedIdRef","timestampRef","incentiveTagClickBuilder","useCallback","type","TAG_SUGGEST","onIncentiveClick","useIncentiveClick","useEffect","document","addEventListener","handleKeyboardEvent","removeEventListener","current","idx","now","Date","e","currentSelectedId","currentTimestamp","newSelectedId","newTimestamp","suggestsSize","length","isKeyDown","key","shiftKey","isKeyUp","isKeyEnter","hasSpeedScrollLimitReached","preventDefault","stopPropagation","suggest","SuggestFavoritesContent","SuggestSearchHistoryContent","SuggestServiceContent","SuggestClearHistory","SuggestContentError","DEFAULT_DELAY_BEFORE_LAUNCH","STATUS_READY","children","delay","status","setStatus","timeout","setTimeout","clearTimeout","setAmbiguityAddress","address","getState","selectIsItineraryUniverse","setStepFromAddress","setAddressFromAmbiguity","props","labelKey","labelArgs","url","itemProp","itemScope","itemType","href","args","content","Breadcrumbs","breadcrumbs","selectBreadcrumbs","map","BreadcrumbItem","withFrenchSite","classnames","wrapper","infos","ImageWithFallback","device","image","prefooterDeviceWebp","fallbackImage","prefooterDevicePng","width","height","textContainer","title","text","TagActionLink","APPS_ADJUST_URL","nofollow","targetBlank","TAG_BLOCK_AUTOPROMO","tagInfo","area","analyticsConstants","autopromo","main","RectangleActionButton","label","color","COLOR_GREEN","size","SIZE_MEDIUM","FooterCocorico","src","frenchFlag","alt","FooterContact","TAG_CLICK_HELP_BUTTON","target","rel","SVGIcon","question","SocialNetworkButtons","FacebookButton","TwitterButton","BlogButton","classNames","TAG_FOOTER_SOCIAL_NETWORKS_LINKS","facebook","ssrWhite","twitter","disableNoreferrer","rss","FooterInfos","isFR","selectIsFrenchSite","Details","summary","tooltipRight","classes","toggleClasses","logoBonjour","loading","logoMappy","logoRatpFr","logoRatpEn","logoRSS","renderGroupLogos","FooterPrivacy","onPrivacyOpen","CMPService","open","lock","ID","TopSearchLinks","selectTopSearchLinks","selectShouldDisplayTopSearchTitle","_document$getElementB","html","getElementById","innerHTML","dangerouslySetInnerHTML","__html","root","withEverySelectorTruthy","selectShouldDisplayTopSearch","FooterTopSearch","magnifyingGlass","privacy","displayAppAutoPromo","FooterAppAutoPromo","StoreButton","appstore","popin","AutoPromoPopinGE","hideModal","useModal","MODAL_IDS","AUTO_PROMO_POPIN","onPopinClose","Modal","modalId","cross","qrcode","PLAY_STORE_URL","stores","android","APPLE_STORE_URL","ios","mappyLogoOutline","roadRadar","france","displayModal","onButtonClick","useErrorBoundaryCallback","iconUrl","COLOR_GREY_EMPTY","tagData","value","state","setState","handler","withOnlyPE","Anchor","categoryId","onMouseLeaveMenu","subcategories","apps","useSelectorWithProps","selectSubCategoriesMenu","selectCategoriesItemById","usePublisherBarreCategorieTag","_ref2","iconId","rubricIds","MenuSubCategoryItem","_ref3","mob_roundImage","MenuApplicationItem","logo","CategorySubMenuStyle","isMenuCategoriesPEAvailable","isPE","withEmptyFallbackErrorBoundary","MenuCategoriesPE","setCategoryId","execLoadPoiAssetsConfiguration","useAction","loadPoiAssetsConfiguration","categories","selectCategoriesMenu","showUI","hideUI","useUIDisplay","UI_ELEMENTS","MENU_PE","onTap","shouldHide","shortLabel","MenuCategoryItem","selected","active","onCategoryClick","MenuSubCategoriesPE","message","visible","CloseUserAreaButton","execNavigateBack","navigateBack","onClose","LogoMappyImg","LogoMappy","withUserNotConnected","UserAreaAnonymous","welcomeUserAccount","UserLoginButton","rightChildren","noBar","isDefaultScreen","selectIsUserScreenDefault","onBack","setUiUserScreen","USER_SCREENS","default","arrowLeft","FavoriteContent","TagActionButton","_extends","poiId","uuid","favIcon","action","actionIcon","allowEmpty","editTagData","gotoTagData","updating","execNavigateTo","navigateTo","onItemClick","resetGeoentityList","route","ROUTE_SEO_GEOENTITY","routeOptions","geoentityId","setSearchTerms","ROUTE_ADDRESS","location","clickableContent","icon","actions","Throbber","ActionButton","actionButton","buildTagData","TAG_CLICK_USER_FAVORITES_LIST","ACTION","TYPE","UserFavorites","home","work","others","selectUserFavorites","execDeleteUserFavorite","deleteUserFavorite","setVisible","useTemporaryVisible","favoriteError","setFavoriteError","manageFavorite","params","deleteFavorite","async","deleteFavoriteResult","canStillAddFavorite","selectUserFavoritesLimitNotReached","renderAddBtn","COLOR_GREEN_EMPTY","FAVORITE_TYPES","OTHER","user","other","listAdd","errorMessage","UserScreenHeader","UserFavoriteError","marginTop","UserScreenContent","UserFavoriteItem","useT","HOME_ICON","HOME","listEdit","listView","WORK_ICON","WORK","listDelete","FavoriteInput","forwardRef","ref","onChange","placeholder","suggestFilterType","suggestServiceCtx","filter","places","execSuggest","cancelSuggest","setCancelSuggest","inputRef","debouncedValue","useDebounce","hasDebouncedValueChangeOnce","onSubmit","setSuggestInputValue","Promise","resolve","then","blur","useImperativeHandle","doSuggest","val","terms","onFocus","select","event","autoComplete","autoFocus","displayName","UserManageFavorite","_favorites$type","selectUserUIScreenParams","execSaveUserOtherFavorite","addUserOtherFavorite","execAddOrEditHorOrWorkUserFavorite","addOrEditHomeOrWorkUserFavorite","initialValue","setValue","selectFavoritePlaceholder","onSuggestClicked","isPoi","suggestion","removeHtmlEmSpanAndITags","labels","join","equalsIgnoreCase","favorite","saveOtherResult","pick","saveHomeOrWorkResult","search","back","form","SuggestContent","UserItineraryOptions","execFetchItineraryOptionsConfig","fetchItineraryOptionsConfig","onValidate","ItineraryOptions","SIZE_BIG","loaded","keycloak","useKeycloak","lastFullRoute","selectPrevFullRouteNonPageLess","onLogout","logout","redirectUri","origin","TAG_CLICK_USER_LOGOUT_BUTTON","deferClick","UserMenuItem","noop","arrowRight","UserMenuAccount","tagType","UserMenu","userName","selectUserName","execLoadUserFavorites","loadUserFavorites","execLoadUserItineraryOptions","loadUserItineraryOptions","userMenuError","setUserMenuError","accountUrl","getService","SERVICES","KEYCLOAK","token","encodeURIComponent","window","gotoItineraryOptionsScreen","loadItineraryOptionsResult","itineraryOptions","gotoFavoritesScreen","loadFavoritesResult","sUserManageFavorite","UserPicture","TAG_CLICK_USER_ACCOUNT_BUTTON","UserLogout","powerOff","withUserConnected","UserAreaConnected","selectUserUIScreen","withUserUnknown","UserAreaPlaceHolder","ContentLoader","speed","viewBox","backgroundColor","foregroundColor","x","y","rx","ry","cx","cy","r","UserArea","isUIDisplayed","USER","useKeycloakEngine","Helmet","imageList","original","srcSet","favoriteAddressesImg","favoriteAddressesImgWebp","myOptionsImg","myOptionsWebp","myAlertsImg","myAlertsWebp","UserAccountIncentiveCarrousel","withOnlyGE","textIndex","setTextIndex","galleryRef","isBulletHighlighted","bulletIndex","goToPreviousSlide","pause","slideToIndex","getCurrentIndex","play","ImageGallery","items","onBeforeSlide","nextIndex","autoPlay","slideInterval","goToNextSlide","star","point","SmallScreenText","UserAccountIncentivePopin","shouldDisplayPopin","selectShouldDisplayUserAccountIncentivePopin","isModalDisplayed","USER_ACCOUNT_INCENTIVE_POPIN","configureAndSendTag","useConfigureAndSendTag","TAG_MULTIPATH_CTA","tag","PUB_TAG","PUB_COMPTE_PERSO_INCITATION","Incitation","INCENTIVE_NAME","incitationPrincipale","isImpression","incentiveIllustration","UtiqLoader","domainForUtiq","isProduction","CustomPurposes","Utiq","CustomVendors","defer","DidomiSDK","iabVersion","apiKey","DIDOMI_API_KEY","noticeId","DIDOMI_NOTICE_ID","sdkPath","onReady","didomiSDK","setSDK","registerConsent","getConsents","onCmpReady","onConsentChanged","AlertBanner","bannerContent","setBannerContent","shouldBannerBeDisplayed","selectIsAlertBannerDisplayed","alertBannerContent","request","get","ALERT_BANNER","data","catch","console","warn","fetchBannerContent","onCloseButton","hideAlertBanner","description","redirection","style","adName","segment","selectCategorySegmentByCategoryId","pageId","selectPageIdForAdConfig","adId","getAdIdByAdName","adData","selectAdDataByAdId","Menuthema","linkLabel","imgUrl","linkUrl","DelayComponent","AdLoader","askData","keywords","isEmptyObj","setMouseOverTimeout","clearMouveOverTimeout","useTimeout","onMouseOut","columnCount","Number","onMouseOver","AdMenu","MenuCategoriesGE","execNavigateToSmrByCategory","navigateToPoisOnRouteByCategory","isPageElligibleForPoisOnRoute","selectIsPageElligibleForPoisOnRoute","clearMouseOverTimeout","unselectCategory","execNavigateToSearchByCategory","navigateToSearchByCategory","onMenuMouseOver","onMenuMouseOut","catId","TAG_CLICK_CATEGORY_BAR","CAT_ID","APP_OR_SUBCAT_ID","MenuSubCategoriesGE","AutoPromoOpenButton","header","Outdoor","view","setLoaded","isOutdoorDisplayed","selectIsOutdoorDisplayed","outdoorPanoramicId","selectOutdoorPanoramicId","outdoorTargetCoordinates","selectOutdoorTargetCoordinates","locale","selectLocale","debugKeyHandler","_view$current","toggleDebug","stopListeningKeyForDebug","body","hide","createOutdoorView","lat","lng","MappyOutdoor","View","apikey","getApiKey","domain","getDomain","imgPath","__APP_VERSION__","getLocaleUnderscored","lookAt","lon","selectCommonClasses","createCustomSelector","selectIsMapFullScreen","isUIElementDisplayed","POPIN","SUGGEST","MAP_TOOLS_PE","selectFocusedPoiId","isMapFullScreen","isPopinDisplayed","isSuggestDisplayed","isMenuPEDisplayed","isMapToolsPEDisplayed","hasFocusedPoi","PAGE_CLASSES","withFullscreenMap","withDetail","withSuggest","withMenuPEDisplayed","withMapToolsPEDisplayed","withPoiPopinDisplayed","defaultPageClassManagerResult","defaultPageClassManager","cssClasses","commonClasses","pageClassManager","pageSpecificClasses","CMPPlaceholder","getIsModalDisplayedSelector","displayUiModal","hideUiModal","setPublisherTagTimeout","clearPublisherTagTimeout","PUB_AFFICHAGE_BARRECATEGORIE","ClosePopinButton","hasTag","useNavigateBack","TAG_BACK","ClosePopinIcon","ClosePopinButtonGE","BrandItemContent","brandIconUrl","firstLabel","brandLogo","SuggestItem_text","oneLabel","SuggestItem_mainLabel","GenericContent","_suggest$subtype","otherLabels","subtype","iconUrls","SuggestItem_icon","SuggestItem_secondaryLabel","EventContent","_suggest$subtype2","_address_components$p","_address_components$t","address_components","postcode","postcodes","town","undefined","otherName","other_name","SuggestItem_eventLabel","SuggestItemContent","isEventSuggest","store_chain","_suggest$subtype3","SUGGEST_CLICK","POI_TYPE","POI_POSITION","SuggestItem_link","onMouseEnter","index","SuggestItem","labelStyle","iconStyle","borderColor","hexToRgb","fill","hexToCssFilter","buildStyleAttributes","getSvgIconUrl","global","__SVG_TIMESTAMP__","displayHighlightBar","getTopPosition","positionAtStart","headerWithSubHeaderHeight","_global","windowHeight","innerHeight","minTop","MINI_MAP_HEIGHT","high","low_scrolled_high","low","PE_MAIN_START_POS","mainTopValue","Math","max","PE_MAIN_VALUES","MainCategoryName","currentRoute","selectCurrentHistoryRoute","appParameter","selectSearchAppParameter","subCategoryParameter","selectSearchSubCategoryParameter","searchTerms","selectSearchTerms","isGE","isSearchRoute","replaceDashesBySpaces","capitalize","withoutSubHeader","hidden","preContent","preContentHeight","mainRef","triggerInitialScroll","useMainScroll","documentElement","scrollTo","top","PREHEADER_HEIGHT","behavior","updateMainTop","getDrawerTopPosition","_mainRef$current","getComputedStyle","display","setUiDrawerClientTop","getBoundingClientRect","handleScroll","handleResize","throttledHandler","throttle","headerHeight","selectHeaderHeight","selectMainPEPositionAtStart","hasPopin","hasFullscreenMap","mainIsVisible","resetUiDrawerClientTop","getStyle","HEADER_SUBHEADER_HEIGHT","ResponsiveScrollableWrapper","SuggestError","Error","constructor","super","this","response","suggests","arguments","brand_icon_url","icon_urls","getImageUrl","Object","assign","isResponseFromLastRequest","requestTime","lastRequestTime","resetSuggestData","requestSuggest","bbox","q","limit","focus_bbox","bboxToSearchParameter","convertBboxToWestSouthEastNorthBbox","getServiceParameters","getBIParams","selectMapBbox","loadSuggestResponse","parse","loadSuggestError","AD_STATUS_NONE","AD_STATUS_LOADING","AD_STATUS_LOADED","useAdLoader","keywordsSelector","adStatus","setAdStatus","dynamicKeywords","adsKeywords","AdService","createAd","setAdKeywords","loadAd","getAdData","setAdData","removeAdData","reloadAd","JSON","stringify","timeoutId","ONE_SECOND_MS","deleteAd","BaseAdLoader","placeHolderHeight","isAdLibraryAvailable","pendingLoadTimeout","setPendingLoadTimeout","minHeight","restProps","selectIsCorrespondingPageAdConfigLoaded","POSITIVE_FLOAT_MAX_3_RADIX","onBlur","inputValue","setInputValue","focus","targetValue","test","handleBlur","parsePositiveNumber","transparent","RImageGallery","lazyLoad","showNav","showThumbnails","showFullscreenButton","showPlayButton","selectSearchHistory","selectSearchState","selectLastTenHistoryEntries","lastTenHistoryEntries","addFromProperty","from","item","selectSuggestState","store","selectSuggestInputValue","selectSuggestError","selectServiceSuggestions","serviceSuggestions","SUGGEST_FROM_VALUES","selectSearchHistorySuggestions","history","normalizedInputValue","normalizeInputValueKeyword","lastSearchHistoryEntries","formatFavoriteForSuggest","incentive","Boolean","formatHomeOrWorkFavoriteForSuggest","selectSuggestFakeFavorites","selectFakeFavorites","fakeFavorites","selectFavoritesFormattedForSuggest","selectFavoritesSuggestions","slice","inputValueKeyword","isLabelMatchingInputValueKeyword","removeDuplicateSuggestions","suggestionsToProcess","suggestionsToCompare","labelsToCompare","normalizeLabel","find","favoritesSuggestions","searchHistorySuggestions","favoritesSuggestionsWithUuid","selectHomeWorkOrFakeFavorites","execNavigateToSmrBySubCategory","navigateToPoisOnRouteBySubcategory","execNavigateToSearchBySubcategory","navigateToSearchBySubcategory","itemClassName","subcategoryIcon","iconClassName","addresses","all","poi","rubric","Component","localeCountryIsFrance","withFrenchLanguage","localeLanguageIsFrench","withoutEnglishSite","localeCountryIsUK","ROUTE_SEO_ITINERARY","ROUTE_SEO_ITINERARY_MODE","ROUTE_HOME","ROUTE_SEO_CITY_ACTIVITY","ROUTE_ADDRESS_HOME","ROUTE_SEO_ADDRESS","ROUTE_TRAFFIC_CITY","ROUTE_BICYCLE_CITY","ROUTE_SEO_DIRECTORY_CITY_ACTIVITY","ROUTE_SEO_DIRECTORY_CITY_OVM_POIS","ROUTE_ZFE_CITY","ROUTE_RESTRICTION_CITY","ROUTE_ITINERARY_HP_BY_MODE","ROUTE_TRAFFIC_HOME","ROUTE_BICYCLE_HOME","ROUTE_ITINERARY_HOME","ROUTE_ZFE_HOME","ROUTE_RESTRICTION_HOME","ROUTE_SEO_COUNTRY","ROUTE_SEO_DEPARTMENT","selectFirstAddress","selectCurrentGeoentity","firstAddress","geoentity","hpLinkLabel","ROUTE_SEO_DIRECTORY_CITY_POIS","ROUTE_SEO_DIRECTORY_CITY_OVM_POIS_ACTIVITY","zip","projectDistrictZipcodeToWholeCityZipcode","min","linksLabel","ROUTE_BICYCLE_DEPARTMENT","ROUTE_BICYCLE_REGION","ROUTE_DEPARTMENT_HOME","ROUTE_REGION_HOME","ROUTE_SEO_DIRECTORY_CITY","ROUTE_SEO_DIRECTORY_ITINERARY","ROUTE_SEO_DIRECTORY_ITINERARY_BY_MODE","ROUTE_SEO_SEARCH_BY_APP","ROUTE_TOOLS_COMPUTE_RADIUS","ROUTE_SEO_CITY_APP","ROUTE_TRAFFIC_DEPARTMENT","ROUTE_TRAFFIC_REGION","ROUTE_RESTRICTION_DEPARTMENT","ROUTE_RESTRICTION_REGION","ROUTE_SEO_SEARCH_BY_RUBRIC","ROUTE_ZFE_DEPARTMENT","ROUTE_ZFE_REGION","ROUTE_ITINERARY_TO","ROUTE_ITINERARY_COMPUTING","ROUTE_ITINERARY_COMPUTING_BY_MODE","ROUTE_ITINERARY_RESULTS_BY_PROVIDER","ROUTE_ITINERARY_RESULTS_BY_ROUTE","ROUTE_ITINERARY_EXPENSE_REPORT","ROUTE_ITINERARY_ROADBOOK","withUserKnown","loginUrl","createLoginUrl","TAG_CLICK_USER_LOGIN_BUTTON","mustFetchItineraryOptions","requestInventory","vehiclesOptions","vehicles","providers","extractDefaultVehiculeOptions","transportModes","transport_modes","extractTransportModes","setDefaultVehicleOptions","fuelPrices","fuel_prices","entries","reduce","acc","entry","price","extractDefaultFuelPrices","setDefaultFuelPrices","fetchVehiclesOptions","changePreferredOptions","modeId","newPreferredOptionsForMode","setPreferredOptionsForMode","REGEX_DATETIME","checkDateTimeQueryParams","dateTimeQueryParam","date","splitDateTimeFromQueryParams","getCurrentDateISO","time","split","setDateTimeFromQueryParams","setItineraryDate","setItineraryTime","setItineraryTimeOptionsFromQueryParams","query","has","PARAM_ARRIVAL_DATE_TIME","datetimeParam","setItineraryArrivalLater","PARAM_DEPARTURE_DATE_TIME","setItineraryDepartureLater","customStyle","zIndex","left","marginRight","transform","right","bottom","padding","overflow","borderRadius","border","overlayStyle","withCloseButton","shouldNavigateBackOnClose","shouldCloseOnOverlayClick","rModalProps","execNavBack","RModal","appId","stopPropagationHandler","onRequestClose","overlay","isOpen","img","catColorString","buildForceColorFullString","whiteColorString","defaultDelay","toRef","launch","fn","stop","isPending","ScrollContext","useScrollContext","useContext","scrollableElementRef","getScrollValue","_scrollableElementRef","scrollTop","querySelector","setScrollValue","scrollGoal","now0","scroll0","scrollDelta","step","t","scrollPos","sin","PI","requestAnimationFrame","animate","addScrollListener","el","removeScrollListener","checkIfTargetIsVisible","parent","child","targetTop","offsetTop","totalScrollHeight","offsetParent","clientHeight","scrollValue","providerValue","Provider","UserButton","ROUTE_USER_ACCOUNT","TAG_CLICK_USER_BURGER","ItineraryUniverseButton","selectItineraryOptions","generateFullRoute","itineraryIcon","DesktopPreHeader","execNavigateToHomepage","navigateToHomepage","onClickToHomepage","shouldDisplayUserAccount","selectedActiveFilter","selectGeoentityActiveFilter","subHeader","headerButton","menuCategoriesPE","suggestDisplayed","searchDialogDisplayed","SEARCH_DIALOG","backButtonDisplayed","selectIsBackButtonDisplayed","userAccountEnabled","shouldDisplayMenuCategoriesPE","computedHeaderHeight","useComputedHeaderHeight","container","withBackButton","withHeaderButton","withUserAccountButton","userAccountPE","SubHeader","useToggle","Summary","Chevron","down","Content","execNavigateToSmrByApp","navigateToPoisOnRouteByApp","execNavigateToSearchByApp","navigateToSearchByApp","onApplicationClick","logoWrapper","lazyLoading","imgStyle","backgroundSize","wrapperClassName","defaultIconClassName","userPicClassName","connected","picture","selectUserPicture","shouldDisplayPicture","backgroundImage","handleRouteLoading","onRouteEnter","renderPage","onRouteLeave","routeContext","routeHandlingState","RouteHandlingState","getInstance","prevRoute","avoidFetchData","avoidDispatchingAnyPageAction","avoidReloadOnBackNav","avoidPageTag","processOnRouteLeave","currentOnRouteLeave","avoidRefetchingPageData","currentRouteIsNotPageless","selectIsCurrentHistoryRoutePageless","actionsToDispatch","requestPageAdConfig","deferSendingPageTag","component","previousRoute","noticeNavigationDone","defaultValue","useEffectExceptMount","deps","initialMount","setAction","clear","selectIsUserNotConnected","selectIsUserKnown","useImpressionTag","condition","withMapInitialized","MapEventPopin","mapEventPopinInfo","selectMapEventPopin","shouldDisplayMapEvenPopin","selectShouldDisplayMapEventPopin","TAG_PUBLISHER","PUB_MAP_LEGENDE_LAYER_CARTE","title_popin","resetMapEventsPopin","asset_zone","asset_event","UPI","useMapContext","isDisplayed","selectIsOutdoorPrompted","offsetX","elementRef","coords","setCoords","setPreviewTimeout","clearPreviewTimeout","displayPreview","closePreview","useOutdoorPreviewPopup","execDisplayOutdoor","displayOutdoor","fetchPano","debug","panoData","OUTDOOR_STATUS_PROMPT","displayMapPopup","POPUP_TYPE_PANO","hideMapPopup","follow","unfollow","on","mapClicked","mapMouseMove","getCanvas","cursor","bodyMouseMove","off","launchOutdoor","panoramicId","ROUTE_360_VIEW_FULLSCREEN","lngLat","onMouseMove","UPI_SIZE","clientX","clientY","onClicked","person","selectGeolocationStatus","onMapMove","statusIsFollow","GEOLOC_STATUS_FOLLOW","moveFromUser","fromAppAction","MAPLIBRE_EVENT_MOVE","setGeolocationStatus","GEOLOC_STATUS_ACTIVE","onMapMoveDelayed","debounce","MAP_STORE_UPDATE_DELAY","useEffectWithMapContext","MAPLIBRE_EVENT_ZOOM","MapLoadingError","originalError","lastTimeout","nbClick","mergeOptions","prevOptions","newOptions","toOmit","bounds","push","center","omit","d","mapInstanceRef","mapContainerRef","mapStyleName","setMapStyleName","setError","storeBboxRef","useRefFromSelector","getTargetData","useLiveSelector","selectMapTargetData","couldFullScreen","selectCouldMapFullScreen","mapService","selectMapService","maxZoom","selectMapMaxZoom","mapStatus","selectMapStatus","displayWebGlError","mapLoadingError","SentryService","captureException","getMapStartLocation","GEOIP","startLocation","zoom","enabled","targetBbox","targetCenter","targetZoom","targetOptions","defaultBbox","getMapLibreglState","getBounds","toArray","getZoom","onUpdate","activeBbox","computeMapActiveBbox","searchBbox","computeSearchBbox","distanceFromPreviousChange","computePixelsDeltaBetweenBboxes","mapUpdated","setMapStatus","MAP_STATUS_RELOADING","setStyle","updateMapStatusOnRender","MAP_STATUS_STYLED","isStyleLoaded","MAP_STATUS_INIT","resize","isWebglSupported","sessionId","getMapSessionId","MapLibreMap","pitchWithRotate","dragRotate","minZoom","MAP_ZOOM_MIN","doubleClickZoom","keyboard","attributionControl","transformRequest","addParamsToUrl","headers","mapInstance","_e$originalEvent","originalEvent","touches","fire","DELAY_TO_TRIGGER_CONTEXTMENU_ON_MOBILE","handleMobileLongTouchAsContextMenu","touchZoomRotate","disableRotation","updateHandler","getUpdateHandler","delayedUpdate","MAP_FROM_APP_ACTION_PADDING","once","MAP_FROM_APP_ACTION_MOVE","acknowledgeMapMove","remove","mapDestroyed","throttledUpdateMapStyle","onMapTouchEvent","handled","isPolylineAroundPointer","toggleFullscreen","interact","waitingOptionsRef","wantedPadding","moveEndRef","options","_waitingOptionsRef$cu","_waitingOptionsRef$cu2","_waitingOptionsRef$cu3","eventData","mergeEventData","prevEventData","newEventData","_waitingOptionsRef$cu4","executeInteraction","setPaddingWithoutVisibleMove","currentPadding","getPadding","xyCenter","project","getCenter","deltaX","deltaY","unproject","flyTo","fitBounds","useMapBoundsInteraction","mobileTapHandler","handleMobileTap","currentZoom","where","curve","clearInterval","MIN_INTERVAL_TO_DISTINGUISH_SGLE_FROM_DBL_TAP","MapContext","tagAction","clickAction","useContextMenu","clickHandler","TAG_CLICK_CONTEXT_MENU","findAddressFromPoint","payload","findAddressforGeolocation","reject","selectIsAnItineraryResultPage","ContextMenuItemItineraryAddStep","execSetStepFromAddress","stepsLength","selectStepsLength","ContextMenuItem","addStep","setStepIdx","ContextMenuItemItineraryFrom","execSetDepartureFromPoint","setDepartureFromPoint","ContextMenuItemItineraryTo","execSetArrivalFromPoint","setArrivalFromPoint","itineraryUniverse","navigateToAction","to","toAddress","avoidReset","navigateToItineraryTo","ContextMenuItemShowAddress","searchAddressFromPointAction","searchAddressFromPoint","selectIsPlacesUniverse","ContextMenuItemShowCity","execSearchLocation","searchCityFromPoint","searchDepartmentFromPoint","searchRegionFromPoint","LocalContext","canvas","clientWidth","canvasWidth","canvasHeight","setEvent","shouldDisplay","selectShouldDisplayContextMenu","closeContextMenu","onContextMenu","menuClickHandler","ContextMenuItemShowDepartment","ContextMenuItemShowRegion","performance","FPS","fps","setFps","t0","counter","interval","updateFpsCount","deltaTime","toFixed","compute","count","setInterval","BboxDebugger","fillColor","isMapInitialized","selectIsMapInitialized","debugId","x1","y1","x2","y2","p1","geometry","coordinates","getLayer","addLayer","source","paint","getSource","setData","removeLayer","removeSource","toString","ViewportDebugger","bboxArrayToBboxArrays","selectViewport","MapBboxDebugger","ActiveBboxDebugger","selectMapActiveBbox","SearchBboxDebugger","selectMapSearchBbox","StepsDebugger","departure","arrival","selectStepsCoordinates","getBboxFromLngLatPoints","PolylineDebugger","selectCurrentPolylineBbox","ZoomDebugger","_mapContext$map","_mapContext$map$getZo","rawZoom","call","floor","mapDebuggerAPI","ui","viewport","steps","polyline","activebbox","searchbbox","PREFERENCES_KEY","MapDebuggerComponent","mapDebugger","setUIItem","prop","show","saveJSONInLocalStorage","preferences","loadJSONFromLocalStorage","MapDebugger","getFromLocalStorage","Marker","ImageMarker","greyMarker","ADDRESS_BIG_MARKER_WIDTH","ADDRESS_BIG_MARKER_HEIGHT","selectShouldDisplayMarkers","selectAddresses","selectAddressContour","contour","historyRoute","AddressMarkersContainer","popupType","selectPopupType","execSetAmbiguityAddress","handleClickMarker","POPUP_TYPE_ADDRESS","AddressMarker","position","selectGeolocationPosition","geolocationOn","selectIsGeoLocationOn","marker","setMarker","rotation","activated","mapInitialized","setRotation","compassHandler","absolute","alpha","eventName","useCompass","refDiv","isEqual","setLngLat","m","MapLibreMarker","element","anchor","addTo","POPUP_ID","PortalPopup","popupId","useMapLibrePopup","popupData","selectPopupData","shouldHavePopup","offset","popupDataAreComplete","hasPopup","setHasPopup","maxWidth","withIllustration","popupTypeClass","withIllustrationClass","mapLibrePopup","MapLibrePopup","closeButton","setHTML","domNode","ReactDOM","Popup","PopupPano","POPUP_TYPE_POI","PopupPoi","PopupAddress","getChild","selectShouldDisplayPopup","zoomThreshold","stripDecimal","round","useMapZoomHandler","acknowledgeMapZoom","useMapPerfMetrics","vectorMap","selectIsVectorMap","mapHasGoodSupport","setTag","String","startTimestamp","loadTime","setMeasurement","sendMapLoadingTime","spanMap","startInactiveSpan","forceTransaction","spanMapStyle","parentSpan","spanMapLoad","end","useMapMoveHandler","move","avoidAnimation","withFastAnimation","easing","pow","GEOLOC_MOVE_FROM_INITIAL","bboxIsValid","addBreadcrumb","useMapPaddingHandler","useComputePaddingGetter","isOnboardingContext","selectIsOnboardingContext","setPadding","useCallbackWithMapContext","tooltip","setTooltip","showTooltip","hideTooltip","shouldRegisterMouseListener","ge","pe","mouseListeners","ModeMapEventLayerButton","disabled","ariaLabel","tooltipLabel","TAG_CLICK_EVENT_MODE","ModeLayerButton","activeIcon","hoverIcon","isEventMode","selectMapMode","mode","setMapMode","MAP_MODES","neutral","ThemeLayerButton","selectMapTheme","setMapTheme","MAP_THEMES","normal","themeButtons","ThemeStandard","MAP_BUTTON_THEME","availableInRaster","simple","ThemeSimple","nature","ThemeNature","satellite","ThemeSatellite","dark","ThemeDark","modeButtons","MAP_BUTTON_MODE","traffic","zfe","bicycle","tc","useMapThemeButtons","useMapModeButtons","activeMapEvents","selectActiveMapEvents","buttons","setButtons","splice","DRAWER_TOP_POSITION","MAX_GEOLOC_BUTTON_TOP_POSITION","BOTTOM_MARGIN","MAX_LAYER_BUTTON_TOP_POSITION","GEOLOC_BUTTON_TYPE","LAYERS_BUTTON_TYPE","buttonType","currentDrawerTopPosition","selectUiDrawerClientTop","getButtonStyle","commonStyle","transition","calc","Buttons","isOpened","isClosing","closeModes","isVecto","hdTooltipDisplayed","setHdTooltip","useTooltip","switchHdTooltip","switchHighDefMap","switchMapType","TAG_CLICK_TOGGLE_HD_MAP","CLICK_TAG","XTC_CARTE_HD_OFF","SwitchInput","informationImg","HdTooltip","selectShouldDisplayMapTools","LayersButtons","useDynamicButtons","setDisplay","isMapFullscreen","onOpenClick","hideUiMapTooSlowTooltip","borderBottomRightRadius","borderBottomLeftRadius","layers","RasterMap","useLayersManager","layersDefaultVisibility","setLayersDefaultVisibility","mapMode","mapTheme","setLayoutProperty","isRetina","visibilities","layer","layout","visibility","forEach","match","RegExp","execRequestZoom","requestZoom","setTouchTimeout","clearTouchTimeout","isTouchTimeoutPending","zoomTo","z","duration","ceil","MAP_RASTER_ZOOM_MAX","getZoomOffset","_event$originalEvent","_event$originalEvent2","getMapActiveDimensions","centerX","centerY","layerX","layerY","handleInitialZoom","handleWheel","delta","MAP_ZOOM_STEP","handleDblClick","around","handleTouch","methodName","originalMethod","_len","Array","_key","apply","fixZoomMethods","scrollZoom","disable","useIntegerZoom","SOURCE_ID_AREA","SOURCE_ID_LIMIT","LAYER_AREA_ID","LAYER_LIMIT_ID","CONTOUR_COLOR","createGeoJSON","features","properties","reverse","shape","useMemo","reverseShape","isMapReady","selectIsMapReady","drawShape","addSource","cleanShape","DEFAULT_COPYRIGHT","Copyrights","copyrights","setCopyrights","mapEventAttached","getCopyright","uniq","queryRenderedFeatures","feature","includes","flatMap","err","GeolocButton","statusFromButton","setStatusFromButton","isFollowStatus","isBlockStatus","GEOLOC_STATUS_BLOCKED","isFetchStatus","GEOLOC_STATUS_FETCH_ACTIVE","GEOLOC_STATUS_FETCH_FOLLOW","newStatus","GEOLOC_STATUS_BUTTON_WORKFLOW","GEOLOC_STATUS_DISABLED","mapMove","mappyLogoFilled","Logo","OutdoorButton","statusIsPrompt","execHideOutdoor","hideOutdoor","TAG_UPI_IMMERSIVE","personArrowSurrounded","personFallingArrowSurrounded","Scale","scaleRef","addControl","MapLibreScaleControl","unit","removeControl","selectShouldDisplayToggleFullScreenGeButton","ToggleFullScreenGeButton","TAG_CLICK_TOGGLE_FULLSCREEN","ReduireDesktop","ToggleFullscreenPeButton","innerArrows","intervalRef","lastUpdate","setLastUpdate","ONE_MINUTE_MS","mins","getMinutes","hours","getHours","pad","formatHourFromDate","ZoomButton","otherProps","ZoomInButton","ZoomOutButton","ZoomButtons","zoomFromStore","selectMapZoom","setZoom","updateZoom","selectMapTooSlowTooltip","MapTooSlowTooltip","closeTooltip","PUB_MAP_POP_IN_MAP_TOO_SLOW","VectorMap","useClickMyMapLayers","isFrenchSite","handleClick","rubricId","TAG_CLICK_MY_MAP","navigateToPoi","mappy_poi_id","mappy_context_rubric","_layer$layout","LAYER_ID_CMM","_layer$layout2","useMapPointerHandler","quizGuessInProgress","selectQuizGuessInProgress","mapEventsKeys","getPolylinesOrClickableLayersAroundPointer","getBBoxAroundPointer","_feature$layer","layerId","LAYER_ID_POLYLINE","cmm","isMapEvent","handleMouseOver","shouldDisplayPointer","useClickMapEventsHandler","exectSetPopin","setMapEventPopin","shouldDisplayMapEventPopin","_e$features","mapEvent","selectShouldDisplayMapLayersButton","pageIsQuiz","selectIsQuizPage","MapProvider","GeolocMarker","Geolocation","TrafficLegend","ContextMenu","MapAddressContour","TEST_MODE","hash","DELAY_BETWEEN_CHECKS","ONE_WEEK_MS","withOnlyBrowser","AskForUpdate","version","setVersion","isSameVersion","translate","loadVersion","newVersion","fetchVersion","serviceUrl","WEB_VERSION","silent","intervalId","reload","StaticMap","staticMap","DynamicMap","critAirStickers","onSelect","onChooseForId","evt","sticker","CRITAIR_DEFAULT_ID","critAirSticker","CRITAIR","CritairChoice","tagConfig","car","PREFERRED_VEHICLE_ID","TAG_CLICK_TRAVEL_OPTIONS_CAR_VEHICLE","motorbike","TAG_CLICK_TRAVEL_OPTIONS_MOTORBIKE_VEHICLE","VehicleSettingsBox","_modeMetadata$transpo","hasOwnSwitcher","modeMetadata","selectModeMetadata","preferredVehicle","selectPreferredVehicle","preferredFuel","selectPreferredFuel","fuelList","selectFuelList","vehicleList","selectVehicleList","vehicleOwn","selectVehicleOwn","transportMode","critair","critAirId","selectCritAirId","execChangePreferredOptions","onPreferredOptionsChange","optionsToUpdate","_tagConfig$modeMetada","SELECTION","VehicleSettingsBoxContent","VehicleOwnedSwitcher","VEHICLE_OWN","vehicle","PREFERRED_FUEL_ID","fuel","NumericInput","PREFERRED_FUEL_PRICE","price_unit","consumption","PREFERRED_FUEL_CONSUMPTION","consumption_unit","critAirLine","CritairSelect","CRITAIR_ID","isCurrent","anchorPosition","dragOptions","markerElementRef","mapLibreMarkerRef","isDraggable","onDragEnd","_props$onClick","_props$onSelect","onUnselect","_props$onUnselect","handleEvents","method","_mapLibreMarkerRef$cu","getElement","mapMarker","hasTouchSupport","attachEvents","unattachEvents","buildMarker","firstChild","draggable","setText","StatusMessage","incitationOptionDeplacement","incitationOptionReponse","incitationPOI","defaultOpen","toggle","KeycloakJs","realm","clientId","init","onLoad","responseMode","silentCheckSsoFallback","silentCheckSsoRedirectUri","authenticated","timeoutRef","idTokenParsed","identity","USER_ID_LEGACY","USER_ID_SUB","setUserAccountConnected","setUserAccountNotConnected","updateAndSaveToken","updateToken","hasTokenBeenRefreshed","setUserAccountToken","checkIfTokenWillExpire","isTokenExpired","EXPIRATION_SECONDS","onTokenExpired","extractRGB","hex","parseInt","componentToHex","c","Color","g","b","set","toRgb","toHex","rgbToHex","clamp","hueRotate","angle","cos","multiply","grayscale","sepia","saturate","matrix","newR","newG","newB","brightness","linear","contrast","slope","intercept","invert","hsl","l","h","Solver","targetHSL","reusedColor","solve","result","solveNarrow","solveWide","values","loss","raw","a","best","Infinity","i","initial","spsa","wide","A","A1","iters","bestLoss","deltas","highArgs","lowArgs","k","ck","random","lossDiff","ak","fix","filters","colorHSL","abs","fmt","multiplier","attr","extra","WebkitTextFillColor","hexToCssFilterCache","cleanHex","toLowerCase","solver","res","FavouriteModeBox","favouriteModes","selectFavouriteModes","preferredMode","selectPreferredMode","onClickForId","TAG_CLICK_TRAVEL_OPTIONS_MODEFAVORI","setPreferredMode","sModeSelector","listItemFavorites","ModeItem","speedTKey","ModeSpeedSettingsBox","preferredSpeed","selectPreferredSpeed","translations","useTranslateAsObject","TRAVEL_SPEEDS","PREFERRED_SPEED","TRAVEL_SPEED_VALUES_BY_MODE","execSaveUserItineraryOptions","saveUserItineraryOptions","itineraryOptionsError","setItineraryOptionsError","saveItineraryOptionsResult","sUserManageFavorites","subHeaderComponent","HEADER_DEFAULT_HEIGHT_PE"],"sourceRoot":""}