{"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'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'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'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 \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":""}