{"version":3,"file":"assets/js/chunks/1504.4b60d1ada5cbd20e1f06.js","mappings":"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","sources":["webpack://web-pwa/./src/domain/address/CityDescription.less?7988","webpack://web-pwa/./src/domain/address/AddressCoordinates.jsx","webpack://web-pwa/./src/domain/address/AddressCoordinates.less?4415","webpack://web-pwa/./src/domain/address/AddressPanoPreview.jsx","webpack://web-pwa/./src/domain/address/AddressPanoPreview.less?b5e1","webpack://web-pwa/./src/domain/address/AddressContent.jsx","webpack://web-pwa/./src/domain/genericComponents/ETA.less?b163","webpack://web-pwa/./src/domain/genericComponents/ETA.jsx","webpack://web-pwa/./src/domain/address/EtaAndItineraryButton.jsx","webpack://web-pwa/./src/domain/address/EtaAndItineraryButton.less?9143","webpack://web-pwa/./src/domain/address/GeoentitiesAtAddress.jsx","webpack://web-pwa/./src/domain/address/GeoentitiesAtAddress.less?6ccd","webpack://web-pwa/./src/domain/address/AddressMainContent.jsx","webpack://web-pwa/./src/domain/error/PermanentRedirectError.js","webpack://web-pwa/./src/domain/search/SearchInputIcon.less?d80b","webpack://web-pwa/./src/domain/search/SearchInputIcon.jsx","webpack://web-pwa/./src/domain/header/QuickSearchInput.jsx","webpack://web-pwa/./src/domain/header/QuickSearchInput.less?9e32","webpack://web-pwa/./src/domain/header/SearchInput.less?f742","webpack://web-pwa/./src/domain/header/SearchInput.jsx","webpack://web-pwa/./src/domain/utils/usePrevious.js","webpack://web-pwa/./src/domain/abtest/useAbTest.js","webpack://web-pwa/./src/domain/animation/SlideInOut.jsx","webpack://web-pwa/./src/domain/animation/SlideInOut.less?741e","webpack://web-pwa/./src/domain/map/markers/VdeMarkers.jsx","webpack://web-pwa/./src/routes/routeErrors.utils.js","webpack://web-pwa/./src/domain/address/AddressFullscreenMapHandler.jsx","webpack://web-pwa/./src/routes/address/AddressPageClassManager.js","webpack://web-pwa/./src/domain/address/AddressShareButton.jsx","webpack://web-pwa/./src/domain/weather/weather.constants.js","webpack://web-pwa/./src/domain/weather/Weather.less?f5c7","webpack://web-pwa/./src/domain/weather/Weather.jsx","webpack://web-pwa/./src/dataSource/weather/weather.request.js","webpack://web-pwa/./src/domain/address/AddressMapImage.jsx","webpack://web-pwa/./src/routes/address/address.route.js","webpack://web-pwa/./src/domain/address/address.page.jsx","webpack://web-pwa/./src/domain/suggest/AddressSuggestContent.jsx","webpack://web-pwa/./src/domain/seo/MetaTags.jsx","webpack://web-pwa/./src/domain/address/AddressVdeBanner.jsx","webpack://web-pwa/./src/domain/genericComponents/TextError.jsx","webpack://web-pwa/./src/domain/genericComponents/TextError.less?a829","webpack://web-pwa/./src/domain/address/seo/AddressMetaManager.jsx","webpack://web-pwa/./src/domain/genericComponents/TextShortener.jsx","webpack://web-pwa/./src/domain/genericComponents/TextShortener.less?828c","webpack://web-pwa/./src/domain/address/AddressList.less?3c08","webpack://web-pwa/./src/domain/address/AddressItem.jsx","webpack://web-pwa/./src/domain/address/AddressItem.less?9a5a","webpack://web-pwa/./src/domain/address/AddressList.jsx","webpack://web-pwa/./src/routes/address/AddressSearchDialogContent.jsx","webpack://web-pwa/./src/domain/address/CityDescription.jsx","webpack://web-pwa/./src/domain/search/SearchDialog.jsx","webpack://web-pwa/./src/domain/search/SearchDialog.less?1f12","webpack://web-pwa/./src/domain/address/AddressContent.less?46b3","webpack://web-pwa/./src/domain/error/PageNotFoundError.js","webpack://web-pwa/./src/domain/address/seo/AddressImage.utils.js","webpack://web-pwa/./src/domain/advertising/VdeBanner.jsx","webpack://web-pwa/./src/domain/advertising/VdeBanner.less?eca9","webpack://web-pwa/./src/domain/address/AddressMainContent.less?df95"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"description\":\"oqui8\"};","import React, { useCallback } from 'react'\nimport { searchServiceCtx } from '../../store/search/search.service.constants'\nimport emptyMarker from '../genericComponents/assets/empty-marker.svg'\nimport StatusMessage from '../genericComponents/StatusMessage'\nimport { useTemporaryVisible } from '../genericComponents/useTemporaryVisible'\nimport { useT } from '../i18n/T'\nimport SVGIcon from '../svg/SVGIcon'\n\nimport { isNumber } from '../../utils/number'\nimport copyTextToClipboard from '../utils/Clipboard'\nimport s from './AddressCoordinates.less'\n\nconst isEligibleForXY = address => {\n return [\n searchServiceCtx.geocodeLevel.addressPoint,\n searchServiceCtx.geocodeLevel.addressRange,\n searchServiceCtx.geocodeLevel.namedPlace,\n searchServiceCtx.geocodeLevel.landmark,\n searchServiceCtx.geocodeLevel.way,\n searchServiceCtx.geocodeLevel.unnamed_road\n ].includes(address.geocode_level)\n}\n\nconst AddressCoordinates = ({ address }) => {\n const { coordinates = {} } = address\n const { lat, lng } = coordinates\n const areLatLngValid = isNumber(lat) && isNumber(lng)\n const [visible, setVisible] = useTemporaryVisible()\n const copiedText = useT('share.coordinates.ok')\n\n const onClick = useCallback(() => {\n copyTextToClipboard(`${lat.toFixed(5)},${lng.toFixed(5)}`)\n .then(() => {\n setVisible(true)\n })\n .catch(err => {\n console.error('error', err)\n })\n }, [lat, lng])\n\n if (!areLatLngValid || !isEligibleForXY(address)) return <></>\n\n return (\n <>\n <div className={s.coordinates} onClick={onClick}>\n <SVGIcon url={emptyMarker} className={s.coordinatesIcon} />\n {`${lat.toFixed(5)}, ${lng.toFixed(5)}`}\n </div>\n <StatusMessage message={copiedText} visible={visible} className={s.shareMessage} />\n </>\n )\n}\n\nexport default AddressCoordinates\n","// extracted by mini-css-extract-plugin\nexport default {\"coordinates\":\"hMMJq\",\"coordinatesIcon\":\"m02Me\",\"shareMessage\":\"WXWT4\"};","import React from 'react'\nimport { selectFirstAddress, selectIsEligibleFor360 } from '../../store/address/address.selectors'\nimport { usePano } from '../outdoor/Utils'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport { useSelector } from 'react-redux'\nimport { TAG_ADDRESS_IMMERSIVE } from '../analytics/analytics.tagids.constants'\nimport PanoPreview from '../outdoor/PanoPreview'\nimport s from './AddressPanoPreview.less'\n\nconst useAddressPano = () => {\n const address = useSelector(selectFirstAddress)\n const enabled = useSelector(selectIsEligibleFor360)\n const { lat, lng } = address.coordinates ?? {}\n\n return usePano({\n lat,\n lng,\n enabled,\n preview: false\n })\n}\n\nfunction AddressPanoPreview() {\n const panoData = useAddressPano()\n\n if (!panoData.url) return <></>\n\n return (\n <div className={s.root}>\n <PanoPreview panoData={panoData} tagId={TAG_ADDRESS_IMMERSIVE} />\n </div>\n )\n}\n\nexport default withEmptyFallbackErrorBoundary(AddressPanoPreview)\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"nhGvE\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectIsUserAccountEnabled } from '../../store/userAccount/userAccount.selectors'\nimport { isGE } from '../Device'\nimport { AddressFavoriteButton } from '../UserAccount/connected/userFavorites/FavoriteButton'\nimport s from './AddressContent.less'\nimport AddressCoordinates from './AddressCoordinates'\nimport AddressPanoPreview from './AddressPanoPreview'\nimport AddressShareButton from './AddressShareButton'\nimport CityDescription from './CityDescription'\n\nconst AddressContent = ({ address }) => {\n const { split_label } = address\n const shouldDisplayFavoriteButton = useSelector(selectIsUserAccountEnabled)\n\n return (\n <>\n {isGE() && <AddressPanoPreview />}\n <div className={s.addressContent}>\n <div className={s.mainHeader}>\n <div className={s.addressInfo}>\n <h1 className={s.addressTitle}>\n <span className={s.locationMainAddress}>{split_label?.[0]}</span>\n <span className={s.locationSubAddress}>{split_label?.[1]}</span>\n </h1>\n <AddressCoordinates address={address} />\n </div>\n <div className={s.actions}>\n <div className={s.actionBtnWrapper}>\n <AddressShareButton />\n </div>\n {shouldDisplayFavoriteButton && (\n <div className={s.actionBtnWrapper}>\n <AddressFavoriteButton />\n </div>\n )}\n </div>\n </div>\n <CityDescription />\n </div>\n {!isGE() && <AddressPanoPreview />}\n </>\n )\n}\n\nexport default AddressContent\n","// extracted by mini-css-extract-plugin\nexport default {\"ETA\":\"EUMKH\",\"icon\":\"VkF7S\",\"bigNumber\":\"qW4_8\",\"rest\":\"qPTIk\",\"length\":\"xKDox\",\"time\":\"wAqqe\",\"waves\":\"yxzpn\"};","import React, { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectGeolocationPosition, selectIsGeoLocationOn } from '../../store/geolocation/geolocation.selectors'\nimport { computeETAFromGeoloc } from '../../store/itinerary/itinerary.actions'\nimport { getRouteLengthLabel, getRouteTimeLabel } from '../../store/itinerary/routes.selectors'\nimport { withOnlyPE } from '../Device'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport StepUpNumber from '../genericComponents/StepUpNumber'\nimport SVGIcon from '../svg/SVGIcon'\nimport { locationHasCoords } from '../utils/location'\nimport { useAction } from '../utils/react-redux'\nimport s from './ETA.less'\nimport waves from './assets/waves.svg'\n\nconst useResetRouteOnCoordinatesChanged = (setRoute, locationCoords) => {\n useEffect(() => {\n setRoute(undefined)\n }, [locationCoords])\n}\n\nconst useETARoute = coordinates => {\n const [route, setRoute] = useState(null)\n\n const execComputeETAFromGeoloc = useAction(computeETAFromGeoloc)\n\n const isGeoLocationEnabled = useSelector(selectIsGeoLocationOn)\n const geolocationPosition = useSelector(selectGeolocationPosition)\n\n useResetRouteOnCoordinatesChanged(setRoute, locationHasCoords)\n\n useEffect(() => {\n if (coordinates && isGeoLocationEnabled && geolocationPosition) {\n execComputeETAFromGeoloc(coordinates).then(route => setRoute(route))\n }\n }, [isGeoLocationEnabled, geolocationPosition, coordinates])\n\n return route\n}\n\nexport const ETA = ({ coordinates }) => {\n const route = useETARoute(coordinates)\n\n if (!route) return <></>\n\n return (\n <div className={s.ETA}>\n {route && (\n <span className={s.icon}>\n <SVGIcon icon={route?.icon} />\n </span>\n )}\n <span className={s.length}>\n <StepUpNumber label={getRouteLengthLabel(route)} mainClassName={s.bigNumber} restClassName={s.rest} />\n </span>\n <span className={s.time}>\n <StepUpNumber label={getRouteTimeLabel(route)} mainClassName={s.bigNumber} restClassName={s.rest} />\n <span className={s.waves}>\n <SVGIcon url={waves} />\n </span>\n </span>\n </div>\n )\n}\n\nexport default withOnlyPE(withEmptyFallbackErrorBoundary(ETA))\n","import classNames from 'classnames'\nimport React from 'react'\nimport { PAGE_ADDRESS_NAME } from '../analytics/PageTagsService'\nimport { ETA } from '../genericComponents/ETA'\nimport GoToItineraryButton from '../genericComponents/GoToItineraryButton'\nimport s from './EtaAndItineraryButton.less'\n\nconst EtaAndItineraryButton = ({ location }) => {\n if (!location) return <></>\n\n return (\n <div className={classNames(s.subHeader, s.address)}>\n <div>\n <ETA coordinates={location.coordinates} />\n </div>\n <div>\n <GoToItineraryButton\n location={location}\n tagProps={{\n tagInfo: {\n ancrage: PAGE_ADDRESS_NAME\n }\n }}\n />\n </div>\n </div>\n )\n}\n\nexport default EtaAndItineraryButton\n","// extracted by mini-css-extract-plugin\nexport default {\"subHeader\":\"aF7yS\",\"address\":\"s7rbf\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectGeoentities, selectIsWaitingForRequestedGeoentities } from '../../store/geoentity/geoentity.selectors'\nimport GeoentityList from '../geoentity/GeoentityList'\nimport { withFrenchSite } from '../i18n/i18nSite'\nimport s from './GeoentitiesAtAddress.less'\n\nfunction GeoentitiesAtAddress() {\n const isWaitingForGeoentities = useSelector(selectIsWaitingForRequestedGeoentities)\n const pois = useSelector(selectGeoentities)\n\n if (!isWaitingForGeoentities && pois.length === 0) return <></>\n\n return (\n <div className={s.bloc}>\n <div className={s.title}>A cette adresse</div>\n <GeoentityList />\n </div>\n )\n}\n\nexport default withFrenchSite(GeoentitiesAtAddress)\n","// extracted by mini-css-extract-plugin\nexport default {\"bloc\":\"S9laP\",\"title\":\"ULBBg\"};","import React, { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectFirstAddress } from '../../store/address/address.selectors'\nimport { AdDesktopAddressHP } from '../advertising/InlineDesktopAdBanner'\nimport { AdMobileBannerAddress } from '../advertising/InlineMobileAdBanner'\nimport Footer from '../footer/Footer'\nimport { useScrollContext } from '../genericComponents/ResponsiveScrollableWrapper/ResponsiveScrollableWrapper'\nimport { withEverySelectorTruthy } from '../utils/react-redux'\nimport AddressContent from './AddressContent'\nimport s from './AddressMainContent.less'\nimport { AddressVdeBanner } from './AddressVdeBanner'\nimport EtaAndItineraryButton from './EtaAndItineraryButton'\nimport FakeHotelCalendar from './FakeHotelCalendar'\nimport GeoentitiesAtAddress from './GeoentitiesAtAddress'\nimport GeoentitiesAtAddressPicker from './GeoentitiesAtAddressPicker'\n\nconst AddressMainContent = () => {\n const address = useSelector(selectFirstAddress)\n const { label } = address\n const { scrollTop } = useScrollContext()\n\n useEffect(() => {\n if (label) scrollTop()\n }, [label])\n\n return (\n <>\n <div className={s.addressMainContent}>\n <EtaAndItineraryButton location={address} />\n <AddressContent address={address} />\n <AdDesktopAddressHP />\n <AddressVdeBanner />\n <GeoentitiesAtAddress />\n <GeoentitiesAtAddressPicker />\n <AdMobileBannerAddress />\n <FakeHotelCalendar />\n </div>\n <Footer />\n </>\n )\n}\n\nexport default withEverySelectorTruthy(selectFirstAddress)(AddressMainContent)\n","export const PermanentRedirectErrorCode = 301\n\nexport default class PermanentRedirectError extends Error {\n constructor(url = '/', host, e = 'Redirection permanente') {\n super(e)\n this.name = 'Moved Permamently'\n this.type = PermanentRedirectErrorCode\n this.url = url\n this.host = host\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"common\":\"XwtJj\",\"icon\":\"ngGSR\"};","import classnames from 'classnames'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectGeoentityIconFromRouteOptions } from '../../store/poiassets/poiassets.selectors'\nimport SVGIcon from '../svg/SVGIcon'\nimport s from './SearchInputIcon.less'\n\nfunction SearchInputIcon() {\n const { iconId, mob_roundImage } = useSelector(selectGeoentityIconFromRouteOptions)\n if (iconId) return <SVGIcon icon={iconId} className={classnames(s.common, s.icon)} />\n if (mob_roundImage) return <img src={mob_roundImage} className={classnames(s.common)} />\n return <></>\n}\n\nexport default SearchInputIcon\n","import React, { useCallback, useRef } from 'react'\nimport s from './QuickSearchInput.less'\n\nconst QuickSearchInput = ({ searchInputRef, onChange }) => {\n const quickInputRef = useRef()\n\n const handleChange = useCallback(\n event => {\n searchInputRef.current.focus()\n onChange({ value: event.target.value })\n quickInputRef.current.value = ''\n },\n [searchInputRef, onChange, quickInputRef]\n )\n return <input ref={quickInputRef} className={s.root} autoFocus={true} onChange={handleChange} />\n}\n\nexport default QuickSearchInput\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"ofhDU\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"ptu98\",\"transparent\":\"pzs6I\",\"homePageContainer\":\"i7nEr\",\"prefix\":\"PeGRg\",\"field\":\"SLh43\",\"greenPlaceholder\":\"o0B0M\",\"whitePlaceholder\":\"xoOtT\",\"throbber\":\"HB2G0\",\"withIcon\":\"SY57p\",\"btnOk\":\"CN2Sb\"};","import classNames from 'classnames'\nimport React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { ROUTE_SUGGEST } from '../../routes'\nimport { navigateTo } from '../../store/history/history.actions'\nimport { selectCurrentHistoryRoute, selectIsHomePage } from '../../store/history/history.selectors'\nimport { selectHasSearchIconFromRouteOptions } from '../../store/poiassets/poiassets.selectors'\nimport { setSearchTerms } from '../../store/search/searchSlice'\nimport { suggest } from '../../store/suggest/suggest.actions'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { isGE } from '../Device'\nimport Throbber from '../loading/Throbber'\nimport { isPagelessRoute } from '../router/routeUtils'\nimport SearchInputIcon from '../search/SearchInputIcon'\nimport useUIDisplay from '../ui/useUIDisplay'\nimport { useAction } from '../utils/react-redux'\nimport useDebounce from '../utils/useDebounce'\nimport { usePrevious } from '../utils/usePrevious'\nimport QuickSearchInput from './QuickSearchInput'\nimport s from './SearchInput.less'\n\nconst SearchInput = forwardRef((props, ref) => {\n const {\n value,\n loading,\n onChange,\n onFocus,\n suggestFilterType,\n className,\n placeholder,\n idx = 0,\n prefix,\n hasGreenPlaceholder = false,\n navigateToSuggestOnFocus = true,\n isFirstStepToFill = true,\n transparent\n } = props\n\n const dispatch = useDispatch()\n const [hasFocus, setFocus] = useState(false)\n const route = useSelector(selectCurrentHistoryRoute)\n const hasIcon = useSelector(selectHasSearchIconFromRouteOptions)\n const prevRoute = usePrevious(route)\n const execSuggest = useAction(suggest)\n const execNavigateTo = useAction(navigateTo)\n const [isReady, setIsReady] = useState(false)\n const inputRef = useRef()\n const debouncedValue = useDebounce(value, 250)\n const hasDebouncedValueChangeOnce = useRef(false) // to ignore suggest on first render\n const isBtnOkDisplayed = isGE() && route === ROUTE_SUGGEST && !loading\n const isQuickSearch = isGE() && !hasFocus && (!value || value === '') && isFirstStepToFill\n const inputId = `SearchInput${idx}`\n const { showUI } = useUIDisplay(UI_ELEMENTS.SUGGEST)\n const isHomePage = useSelector(selectIsHomePage)\n\n const onSubmit = useCallback(() => {\n dispatch(setSearchTerms(value))\n return Promise.resolve().then(() => blur())\n }, [value])\n\n useImperativeHandle(ref, () => {\n return { onSubmit }\n })\n\n useEffect(() => {\n if (__BROWSER__) setIsReady(true)\n }, [__BROWSER__])\n\n useEffect(() => {\n if (route !== prevRoute && isPagelessRoute(prevRoute) && !isPagelessRoute(route)) {\n blur()\n }\n }, [route])\n\n const doSuggest = val => {\n dispatch(setSearchTerms(val))\n return execSuggest({ terms: val, suggestFilterType })\n }\n\n useEffect(() => {\n if (hasDebouncedValueChangeOnce.current && hasFocus) {\n doSuggest(debouncedValue)\n }\n hasDebouncedValueChangeOnce.current = true\n }, [hasFocus, debouncedValue])\n\n const handleChange = event => {\n onChange?.({ value: event.target.value })\n }\n\n const handleFocus = useCallback(\n e => {\n setTimeout(() => {\n if (value.length !== 0) e.target.select()\n }, 0)\n if (navigateToSuggestOnFocus) execNavigateTo({ route: ROUTE_SUGGEST })\n showUI()\n onFocus?.()\n setFocus(true)\n },\n [execNavigateTo, showUI, doSuggest, onFocus, setFocus]\n )\n\n const blur = useCallback(() => {\n inputRef?.current?.blur()\n setFocus(false)\n }, [inputRef, setFocus])\n\n return (\n <div\n className={classNames(\n isHomePage ? s.homePageContainer : s.container,\n s.container,\n hasIcon && s.withIcon,\n className,\n transparent && s.transparent\n )}\n >\n {prefix && (\n <label className={classNames(s.prefix)} htmlFor={inputId}>\n {prefix}\n </label>\n )}\n {hasIcon && <SearchInputIcon />}\n <input\n ref={inputRef}\n type=\"text\"\n id={inputId}\n value={value}\n className={classNames(s.field, isHomePage && hasGreenPlaceholder ? s.greenPlaceholder : s.whitePlaceholder)}\n placeholder={placeholder}\n onFocus={handleFocus}\n onChange={handleChange}\n disabled={!isReady}\n autoComplete=\"off\"\n />\n {loading && (\n <span className={s.throbber}>\n <Throbber />\n </span>\n )}\n {isBtnOkDisplayed && <button className={s.btnOk}>OK</button>}\n {isQuickSearch && <QuickSearchInput onChange={onChange} searchInputRef={inputRef} />}\n </div>\n )\n})\n\nSearchInput.displayName = 'SearchInput'\nexport default SearchInput\n","import { useEffect, useRef } from 'react'\n\nexport const usePrevious = value => {\n const ref = useRef()\n useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n","import { selectVariantForAbTestId } from '../../store/abtest/abtest.selectors'\nimport { useSelectorWithProps } from '../utils/react-redux'\n\nexport const useAbTestVariant = id => useSelectorWithProps(selectVariantForAbTestId, { id })\n","import React from 'react'\nimport { CSSTransition } from 'react-transition-group'\nimport s from './SlideInOut.less'\nimport * as Device from '../Device'\n\nconst SlideInOut = props => {\n const { display, children } = props\n\n return __BROWSER__ && !Device.isGE() ? (\n <CSSTransition\n in={display}\n timeout={300}\n classNames={{\n enter: s.slideInEnter,\n enterActive: s.slideInEnterActive,\n exit: s.slideInExit,\n exitActive: s.slideInExitActive\n }}\n unmountOnExit\n >\n {animationState => children(animationState)}\n </CSSTransition>\n ) : (\n <div className={display ? s.show : s.hide}>{children()}</div>\n )\n}\n\nexport default SlideInOut\n","// extracted by mini-css-extract-plugin\nexport default {\"slideInEnter\":\"k6sbO\",\"slideInEnterActive\":\"BfkgQ\",\"slideInExit\":\"mvBm5\",\"slideInExitActive\":\"RAjNi\",\"show\":\"de9l7\",\"hide\":\"VN9rJ\"};","import React from 'react'\nimport PoisMarkers from './PoisMarkers'\n\nconst VdeMarkers = () => <PoisMarkers vde />\n\nexport default VdeMarkers\n","import AddressNotFoundError from '../domain/error/AddressNotFoundError'\nimport PageNotFoundError from '../domain/error/PageNotFoundError'\nimport PermanentRedirectError from '../domain/error/PermanentRedirectError'\nimport ServerError from '../domain/error/ServerError'\n\nexport const getTechnicalError = err => {\n if (__BROWSER__) return err\n if (err instanceof AddressNotFoundError) return new PageNotFoundError(err)\n if (err instanceof PermanentRedirectError) return err\n if (err instanceof ServerError) return err\n return new ServerError(err)\n}\n\nexport const technicalErrorCatcher = err => Promise.reject(getTechnicalError(err))\n","import React, { useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useAction } from '../utils/react-redux'\nimport { fitAddresses } from '../../store/map/map.actions'\nimport { isGE } from '../Device'\nimport { selectAddresses } from '../../store/address/address.selectors'\nimport { selectIsMapFullScreen } from '../../store/map/map.selectors'\n\nexport const AddressFullscreenMapHandler = () => {\n const isMapFullscreen = useSelector(selectIsMapFullScreen)\n const addresses = useSelector(selectAddresses)\n const execFitAddresses = useAction(fitAddresses)\n\n useEffect(() => {\n if (isGE()) return\n execFitAddresses(addresses)\n }, [isMapFullscreen])\n\n return <></>\n}\n\nexport default AddressFullscreenMapHandler\n","import { createCustomSelector } from '../../domain/utils/react-reselect'\nimport { selectIsPE } from '../../store/navigation/navigation.selectors'\nimport { PAGE_CLASSES } from '../pageClasses.constants'\n\nexport default createCustomSelector(selectIsPE, pe => [pe && PAGE_CLASSES.withSubHeader])\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectFirstAddress } from '../../store/address/address.selectors'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\nimport ShareUrlButton from '../genericComponents/ShareUrlButton'\n\n// webpack:BrowserOnly\nexport default withEmptyFallbackErrorBoundary(function AddressShareButton() {\n const { label } = useSelector(selectFirstAddress)\n\n return <ShareUrlButton title={label} description={label} url={location.href} />\n})\n","export const WEATHER_PRECISION = 2 // https://gis.stackexchange.com/questions/8650/measuring-accuracy-of-latitude-and-longitude\n\n// https://openweathermap.org/api/air-pollution\nexport const WEATHER_POLLUTION_AQI = {\n 1: '#76af53', // Good\n 2: '#abb241', // Fair\n 3: '#efb944', // Moderate\n 4: '#ed5e24', // Poor\n 5: '#ec3a1e' // Very poor\n}\n\nexport const WEATHER_SIMPLIFED_TYPES = {\n Clear: 'Clear',\n Clouds: 'Clouds',\n Rain: 'Rain',\n Drizzle: 'Drizzle',\n Thunderstorm: 'Thunderstorm',\n Snow: 'Snow',\n Atmosphere: 'Atmosphere'\n}\n\n// https://openweathermap.org/weather-conditions\nexport const WEATHER_TYPES = {\n Clear: WEATHER_SIMPLIFED_TYPES.Clear,\n Clouds: WEATHER_SIMPLIFED_TYPES.Clouds,\n Rain: WEATHER_SIMPLIFED_TYPES.Rain,\n Drizzle: WEATHER_SIMPLIFED_TYPES.Drizzle,\n Thunderstorm: WEATHER_SIMPLIFED_TYPES.Thunderstorm,\n Snow: WEATHER_SIMPLIFED_TYPES.Snow,\n Mist: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Smoke: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Haze: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Dust: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Fog: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Sand: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Ash: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Squall: WEATHER_SIMPLIFED_TYPES.Atmosphere,\n Tornado: WEATHER_SIMPLIFED_TYPES.Atmosphere\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"ng1U6\",\"row\":\"nHMkL\",\"icon\":\"FkjFe\",\"temp\":\"MzDzZ\",\"pollutionTitle\":\"RryAT\",\"pollutionQuality\":\"V3jYd\"};","import React, { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { requestWeather } from '../../dataSource/weather/weather.request'\nimport { isDistrict, isTown } from '../../store/address/address.helpers'\nimport {\n selectFirstAddress,\n selectFirstAddressCoordinates,\n selectHasOnlyOneAddress\n} from '../../store/address/address.selectors'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { useAbTestVariant } from '../abtest/useAbTest'\nimport { translate } from '../i18n/T'\nimport s from './Weather.less'\nimport atmosphereIcon from './icons/atmosphere.svg'\nimport clearIcon from './icons/clear.svg'\nimport cloudsIcon from './icons/clouds.svg'\nimport drizzleIcon from './icons/drizzle.svg'\nimport rainIcon from './icons/rain.svg'\nimport snowIcon from './icons/snow.svg'\nimport thunderstormIcon from './icons/thunderstorm.svg'\nimport { WEATHER_POLLUTION_AQI, WEATHER_SIMPLIFED_TYPES } from './weather.constants'\n\nconst getWeatherIconUrl = weatherType => {\n // icons from https://www.iconfinder.com/iconsets/weather-color-2\n switch (weatherType) {\n case WEATHER_SIMPLIFED_TYPES.Clear:\n return clearIcon\n case WEATHER_SIMPLIFED_TYPES.Clouds:\n return cloudsIcon\n case WEATHER_SIMPLIFED_TYPES.Rain:\n return rainIcon\n case WEATHER_SIMPLIFED_TYPES.Drizzle:\n return drizzleIcon\n case WEATHER_SIMPLIFED_TYPES.Thunderstorm:\n return thunderstormIcon\n case WEATHER_SIMPLIFED_TYPES.Snow:\n return snowIcon\n case WEATHER_SIMPLIFED_TYPES.Atmosphere:\n return atmosphereIcon\n }\n}\n\n// webpack:BrowserOnly\nconst Weather = () => {\n const abTest = useAbTestVariant('weather')\n const [weatherData, setWeatherData] = useState(null)\n const locale = useSelector(selectLocale)\n const t = translate(locale)\n const hasOnlyOneAddress = useSelector(selectHasOnlyOneAddress)\n const address = useSelector(selectFirstAddress)\n const firstAddressCoordinates = useSelector(selectFirstAddressCoordinates)\n\n const isAddressATownOrADistrict = isTown(address) || isDistrict(address)\n\n const candidate = abTest?.id === 'on' && hasOnlyOneAddress && isAddressATownOrADistrict\n\n useEffect(() => {\n setWeatherData(null)\n const fetchWeather = async (coords, locale) => {\n setWeatherData(await requestWeather(coords, locale))\n }\n if (candidate) fetchWeather(firstAddressCoordinates, locale)\n }, [candidate, firstAddressCoordinates, setWeatherData, locale])\n\n if (!weatherData) return <></>\n\n const { weatherType, description, temp, pollution_aqi } = weatherData ?? {}\n const weatherIconUrl = getWeatherIconUrl(weatherType)\n const pollutionColor = WEATHER_POLLUTION_AQI[pollution_aqi]\n\n return (\n <div className={s.root}>\n <div className={s.row}>\n {weatherIconUrl && <img src={weatherIconUrl} className={s.icon} alt={weatherType} title={description} />}\n <span className={s.temp}>{temp}°</span>\n </div>\n <div className={s.details}>\n {pollution_aqi && (\n <div className={s.row}>\n <span className={s.pollutionTitle}>{t('weather.pollution.title')}</span>\n <span\n className={s.pollutionQuality}\n style={{ backgroundColor: pollutionColor }}\n title={t(`weather.pollution.${pollution_aqi}`)}\n ></span>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport default Weather\n","import request from '../../domain/utils/request'\nimport { WEATHER_PRECISION } from '../../domain/weather/weather.constants'\nimport { getService } from '../../parameters'\nimport SERVICES from '../../services.constants'\n\nexport const requestWeather = ({ lat, lng }, locale) => {\n const params = {\n lat: (lat ?? 0).toFixed(WEATHER_PRECISION),\n lng: (lng ?? 0).toFixed(WEATHER_PRECISION)\n }\n return request\n .get(getService(SERVICES.WEATHER), { params, locale })\n .then(({ data }) => data)\n .catch(e => {\n console.warn('failed to fetch weather', e)\n return null\n })\n}\n","\n export default function () {\n return null\n }\n ","import debug from 'debug'\nimport PageNotFoundError from '../../domain/error/PageNotFoundError'\nimport { POPUP_TYPE_ADDRESS } from '../../domain/map/popup/popup.selectors'\nimport { searchAddress, searchAddressRaw, searchCityDescription } from '../../store/address/address.actions'\nimport {\n selectFirstAddress,\n selectIsAddressWithStreetNumber,\n selectIsAdressInFrance\n} from '../../store/address/address.selectors'\nimport { displayMapPopup, hideMapPopup, mapUpdated } from '../../store/map/mapSlice'\nimport { geocodeForwardCtx, landmarkSubtypes } from '../../store/search/search.service.constants'\nimport { setSearchTerms } from '../../store/search/searchSlice'\nimport { handleRouteLoading } from '../routeService'\n\nimport { renderPage } from '../../domain/address/address.page'\nimport AddressNotFoundError from '../../domain/error/AddressNotFoundError'\nimport { bboxArrayToBboxArrays } from '../../domain/map/conversion'\nimport { extractQueryStringParamsFromUrl } from '../../domain/router/routeUtils'\nimport { hasHtmlExtension } from '../../domain/seo/seo'\nimport { extractZipCity, isZipDashCity } from '../../domain/utils/location'\nimport { isLandmark, isNamedPlace } from '../../store/address/address.helpers'\nimport { resetAddress } from '../../store/address/addressSlice'\nimport { searchGeoentitiesAtAddress } from '../../store/geoentity/geoentity.actions'\nimport { resetGeoentityList } from '../../store/geoentity/geoentitySlice'\nimport {\n selectIsAddressPage,\n selectIsAGeoentityPage,\n selectIsASearchPage,\n selectIsGeoentityAtAddressPage,\n selectIsPlacesUniverse,\n selectReqUrl\n} from '../../store/history/history.selectors'\nimport { selectIsFrenchSite, selectIsOnboardingContext } from '../../store/navigation/navigation.selectors'\nimport {\n loadCompleteGeoentitiesAtAddressConfiguration,\n loadPoiAssetsConfiguration\n} from '../../store/poiassets/poiassets.actions'\nimport { searchSeoCitiesForFooter, searchSeoCityData } from '../../store/seo/seo-address.actions'\nimport {\n redirectCityRouteIfDifferentPostcode,\n redirectCityRouteIfTownUpperCased,\n redirectIfAmp,\n redirectIfStartsWithDash,\n redirectToLandmark,\n redirectToNamedPlace\n} from '../../store/seo/seo-city.actions'\nimport { loadSeoActivitiesForCity, loadSeoPoisForCity, loadTopAppsForTown } from '../../store/seo/seo-poi.actions'\nimport { setBlockCanonical } from '../../store/seo/seoSlice'\nimport { ROUTE_SEO_ADDRESS, ROUTE_SEO_LANDMARK, ROUTE_SEO_NAMED_PLACE } from '../index'\nimport { technicalErrorCatcher } from '../routeErrors.utils'\n\nconst d = debug('addressRoute')\n\nconst UNKNOWN_ROUTE = 'unknown'\n\nconst geographicTypeByRouteName = {\n [ROUTE_SEO_NAMED_PLACE]: geocodeForwardCtx.filter.hamlet,\n [ROUTE_SEO_LANDMARK]: geocodeForwardCtx.filter.landmark,\n [ROUTE_SEO_ADDRESS]: undefined\n}\nconst geographicSubTypesByRouteName = {\n [ROUTE_SEO_NAMED_PLACE]: undefined,\n [ROUTE_SEO_LANDMARK]: landmarkSubtypes,\n [ROUTE_SEO_ADDRESS]: undefined\n}\n\nconst getRouteNameByContext = routeContext => {\n const parts = routeContext.path.split('/')\n if (parts.length === 4) {\n if (parts[2] === 'lieu-dit') return ROUTE_SEO_NAMED_PLACE\n if (parts[2] === 'lieu') return ROUTE_SEO_LANDMARK\n return UNKNOWN_ROUTE\n }\n return ROUTE_SEO_ADDRESS\n}\n\nexport function onRouteEnter({ params, store: { dispatch, getState }, avoidRefetchingPageData, routeContext }) {\n d('onRouteEnter')\n const { location } = params\n const routeName = getRouteNameByContext(routeContext)\n\n const landMarkOrNamedPlaceAndNotFrenchSite = routeName !== ROUTE_SEO_ADDRESS && !selectIsFrenchSite(getState())\n if (routeName === UNKNOWN_ROUTE || landMarkOrNamedPlaceAndNotFrenchSite) {\n throw new PageNotFoundError()\n }\n const reqUrl = selectReqUrl(getState())\n const queryStringParams = extractQueryStringParamsFromUrl(reqUrl)\n\n if (__SERVER__) {\n if (hasHtmlExtension(location)) throw new PageNotFoundError()\n redirectIfAmp(location, queryStringParams)\n redirectIfStartsWithDash(location, queryStringParams)\n redirectCityRouteIfTownUpperCased(location, routeName, queryStringParams)\n }\n\n if (selectIsOnboardingContext(getState()) || routeContext?.action === 'POP') {\n dispatch(setSearchTerms(location))\n }\n\n return Promise.resolve()\n .then(() => {\n if (avoidRefetchingPageData) return Promise.resolve()\n return searchAddress({\n terms: location,\n options: {\n avoidRedirect: true,\n geographicType: geographicTypeByRouteName[routeName],\n subtypes: geographicSubTypesByRouteName[routeName]\n }\n })(dispatch, getState)\n })\n .then(() => {\n if (__SERVER__) {\n redirectCityRouteIfDifferentPostcode(location, routeName, queryStringParams)(dispatch, getState)\n redirectToNamedPlace(location, routeName, queryStringParams)(dispatch, getState)\n if (!selectIsAdressInFrance(getState())) {\n const address = selectFirstAddress(getState())\n dispatch(setBlockCanonical(!isZipDashCity(location) || isLandmark(address) || isNamedPlace(address)))\n }\n\n if (isLandmark(selectFirstAddress(getState()))) {\n return searchAddressRaw({\n terms: location,\n options: {\n avoidRedirect: true,\n geographicType: geographicTypeByRouteName[ROUTE_SEO_LANDMARK],\n subtypes: geographicSubTypesByRouteName[ROUTE_SEO_LANDMARK]\n }\n })(dispatch, getState)\n .then(({ addresses } = {}) => {\n if (addresses.length) {\n // landmark found, redirect if needed\n redirectToLandmark(location, routeName, queryStringParams, addresses[0])(dispatch, getState)\n }\n })\n .catch(e => {\n if (d.enabled) d('landmark second search error', e)\n if (e instanceof AddressNotFoundError) {\n // no landmark found, so do NOT redirect\n dispatch(setBlockCanonical(true))\n return\n }\n throw e\n })\n }\n }\n })\n .then(() => {\n if (__BROWSER__) {\n return searchCityDescription()(dispatch, getState)\n } else {\n const firstAddress = selectFirstAddress(getState())\n dispatch(mapUpdated({ bbox: bboxArrayToBboxArrays(firstAddress?.bbox) }))\n const { postcode } = extractZipCity(location)\n\n return Promise.all([\n selectIsAddressWithStreetNumber(getState()) && searchGeoentitiesAtAddress(location)(dispatch, getState),\n selectIsFrenchSite(getState()) &&\n Promise.all([\n loadPoiAssetsConfiguration()(dispatch, getState),\n loadCompleteGeoentitiesAtAddressConfiguration()(dispatch, getState)\n ]),\n postcode && searchCityDescription()(dispatch, getState),\n postcode &&\n searchSeoCityData()(dispatch, getState).then(() =>\n Promise.all([\n loadTopAppsForTown(postcode, firstAddress.towncode, 31)(dispatch, getState),\n searchSeoCitiesForFooter()(dispatch, getState),\n loadSeoActivitiesForCity()(dispatch, getState),\n loadSeoPoisForCity()(dispatch, getState)\n ])\n )\n ])\n }\n })\n .then(() => {\n dispatch(displayMapPopup(POPUP_TYPE_ADDRESS))\n })\n .catch(technicalErrorCatcher)\n}\n\nexport function onRouteLeave({ routeContext }) {\n const {\n store: { dispatch, getState }\n } = routeContext\n\n if (!selectIsPlacesUniverse(getState())) {\n dispatch(resetAddress())\n }\n if (\n !selectIsGeoentityAtAddressPage(getState()) &&\n !selectIsASearchPage(getState()) &&\n !selectIsAGeoentityPage(getState()) &&\n !selectIsAddressPage(getState())\n ) {\n dispatch(resetGeoentityList())\n }\n dispatch(hideMapPopup())\n}\n\nexport default handleRouteLoading({ onRouteEnter, renderPage, onRouteLeave })\n","import React from 'react'\nimport AddressPageClassManager from '../../routes/address/AddressPageClassManager'\nimport AddressSearchDialogContent from '../../routes/address/AddressSearchDialogContent'\nimport { PAGE_CLASSES } from '../../routes/pageClasses.constants'\nimport Page from '../genericComponents/Page'\nimport Header from '../header/Header'\nimport Main from '../main/Main'\nimport Map from '../map/Map'\nimport VdeMarkers from '../map/markers/VdeMarkers'\nimport SearchDialog from '../search/SearchDialog'\nimport AddressSuggestContent from '../suggest/AddressSuggestContent'\nimport Weather from '../weather/Weather'\nimport AddressFullscreenMapHandler from './AddressFullscreenMapHandler'\nimport AddressHeaderForm from './AddressHeaderForm'\nimport AddressMainContent from './AddressMainContent'\nimport AddressMapImage from './AddressMapImage'\nimport { AddressVdeOnMapBanner } from './AddressVdeBanner'\nimport AddressMetaManager from './seo/AddressMetaManager'\n\nexport const renderPage = () => {\n const { AddressPage, withToaster } = PAGE_CLASSES\n\n return (\n <Page key=\"Page\" cssClasses={[AddressPage, withToaster]} pageClassManager={AddressPageClassManager}>\n <AddressMetaManager />\n <Map key=\"Map\" staticMap={<AddressMapImage />}>\n <VdeMarkers />\n <AddressFullscreenMapHandler />\n <AddressVdeOnMapBanner />\n <Weather />\n </Map>\n <Header key=\"Header\" transparent>\n <AddressHeaderForm key=\"AddressHeaderForm\" transparent />\n </Header>\n <SearchDialog key=\"SearchDialog\" suggestContent={<AddressSuggestContent />}>\n <AddressSearchDialogContent />\n </SearchDialog>\n <Main key=\"Main\" withoutSubHeader>\n <AddressMainContent />\n </Main>\n </Page>\n )\n}\n","import React from 'react'\nimport { searchAddress } from '../../store/address/address.actions'\nimport { TAG_SUGGEST } from '../analytics/analytics.tagids.constants'\nimport { setSearchTerms } from '../../store/search/searchSlice'\nimport { removeHtmlEmTags } from '../../utils/string'\nimport useConfigureAndSendTag from '../analytics/useConfigureAndSendTag'\nimport { useAction } from '../utils/react-redux'\nimport SuggestContent from './SuggestContent'\nimport { SUGGEST_FROM_VALUES } from './suggest.constants'\nimport { useDispatch } from 'react-redux'\n\nconst AddressSuggestContent = () => {\n const dispatch = useDispatch()\n const execSearchAddress = useAction(searchAddress)\n const configureAndSendTag = useConfigureAndSendTag()\n\n const onClick = suggest => {\n const { labels, address, type, subtype, from } = suggest\n const label = removeHtmlEmTags(address || labels.join(' '))\n dispatch(setSearchTerms(label))\n\n if (from === SUGGEST_FROM_VALUES.favorites) {\n configureAndSendTag({\n type: TAG_SUGGEST,\n tagInfo: { type, subtype, from }\n })\n }\n\n execSearchAddress({ terms: label })\n }\n\n return <SuggestContent onClick={onClick} />\n}\n\nexport default AddressSuggestContent\n","import React, { useCallback } from 'react'\nimport { Helmet } from 'react-helmet'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport logo from '../branding/Mappy-310.png'\nimport translations from './MetaTags.json'\n\nimport { useSelector } from 'react-redux'\nimport { selectCurrentHistoryFullRoute } from '../../store/history/history.selectors'\nimport { getHrefLangBySubdomain, SUBDOMAIN_EN, SUBDOMAINS } from '../i18n'\nimport { isAbsoluteUrl } from '../utils/url'\nimport { generateAbsoluteBaseUrl } from './seo'\n\nconst getImageUrl = ({ image, locale, logo }) => {\n const img = image || logo\n if (!isAbsoluteUrl(img)) return `${generateAbsoluteBaseUrl(locale)}${img}`\n if (img.startsWith('//')) return `https:${img}`\n return img\n}\n\nconst getAlternateLinks = ({ alternateLinkPath, shouldIgnoreEn }) =>\n SUBDOMAINS.map((subdomain, idx) => {\n // not returning an empty React fragment here `<></>` so returning array\n // is not filling alternate links with irrelevant and undefined components\n if (subdomain === SUBDOMAIN_EN && shouldIgnoreEn) return undefined\n\n return (\n <link\n key={idx}\n rel=\"alternate\"\n href={`https://${subdomain}.mappy.com${alternateLinkPath}`}\n // eslint-disable-next-line react/no-unknown-property\n hreflang={getHrefLangBySubdomain(subdomain)}\n />\n )\n })\n\nconst MetaTags = ({\n title: givenTitle,\n description: givenDescription,\n image,\n url,\n alternateLinkPath,\n canonical,\n type,\n shouldIgnoreEn\n}) => {\n const locale = useSelector(selectLocale)\n const currentFullRoute = useSelector(selectCurrentHistoryFullRoute)\n\n const { title: defaultTitle, description: defaultDescription } = translations?.[locale] ?? {}\n const title = givenTitle || defaultTitle\n const description = givenDescription || defaultDescription\n const img = getImageUrl({ locale, image, logo })\n const typ = type || 'website'\n\n const buildCanonicalRoute = useCallback(() => {\n const canonicalUrl = !canonical ? currentFullRoute : canonical\n\n return canonicalUrl.split('#')[0]\n }, [currentFullRoute])\n\n return (\n <Helmet>\n <title>{title}</title>\n <meta name=\"description\" content={description} />\n <meta property=\"og:title\" content={title} />\n <meta property=\"og:description\" content={description} />\n <meta property=\"og:locale\" content={locale.toLowerCase()} />\n {url && <meta property=\"og:url\" content={url} />}\n <meta property=\"og:type\" content={typ} />\n <meta property=\"og:image\" content={img} />\n {alternateLinkPath && getAlternateLinks({ alternateLinkPath, shouldIgnoreEn })}\n <link rel=\"canonical\" href={`${generateAbsoluteBaseUrl(locale)}${buildCanonicalRoute()}`} />\n </Helmet>\n )\n}\n\nexport default MetaTags\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport { selectFirstAddress } from '../../store/address/address.selectors'\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { searchServiceCtx } from '../../store/search/search.service.constants'\nimport { withOnlyGE, withOnlyPE } from '../Device'\nimport { VdeBanner } from '../advertising/VdeBanner'\nimport { LOCALES } from '../i18n'\n\nconst allowedGeocodeLevels = [\n searchServiceCtx.geocodeLevel.town,\n searchServiceCtx.geocodeLevel.district,\n searchServiceCtx.geocodeLevel.way,\n searchServiceCtx.geocodeLevel.landmark,\n searchServiceCtx.geocodeLevel.namedPlace,\n searchServiceCtx.geocodeLevel.addressRange,\n searchServiceCtx.geocodeLevel.addressPoint\n]\n\nexport const shouldDisplayVde = ({ locale, address = {} }) =>\n locale === LOCALES.fr_FR && allowedGeocodeLevels.includes(address.geocode_level)\n\nexport const AddressVdeOnMapBanner = withOnlyGE(() => {\n const locale = useSelector(selectLocale)\n const address = useSelector(selectFirstAddress)\n if (shouldDisplayVde({ locale, address })) {\n const { lng, lat } = address.coordinates\n return <VdeBanner key={`ge-${lng}-${lat}`} />\n }\n return <></>\n})\n\nexport const AddressVdeBanner = withOnlyPE(() => {\n const locale = useSelector(selectLocale)\n const address = useSelector(selectFirstAddress)\n if (shouldDisplayVde({ locale, address })) {\n const { lng, lat } = address.coordinates\n return <VdeBanner key={`pe-${lng}-${lat}`} />\n }\n return <></>\n})\n","import React from 'react'\nimport s from './TextError.less'\n\nimport { selectLocale } from '../../store/navigation/navigation.selectors'\nimport { translate } from '../i18n/T'\nimport { useSelector } from 'react-redux'\nimport { isString } from '../../utils/string'\n\nexport const defaultErrorMessage = 'Erreur'\n\nconst getMessage = ({ error, locale }) => {\n if (isString(error)) return error\n const errorName = error?.name\n if (errorName) {\n const translatedMessage = translate(locale)(errorName)\n if (translatedMessage !== errorName) return translatedMessage\n }\n return error?.message ?? defaultErrorMessage\n}\n\nexport const TextError = ({ error }) => {\n const locale = useSelector(selectLocale)\n\n if (!error) return <></>\n\n return (\n <div className={s.TextError}>\n <span className={s.TextErrorMessage}>{getMessage({ error, locale })}</span>\n </div>\n )\n}\n\nexport default TextError\n","// extracted by mini-css-extract-plugin\nexport default {\"TextError\":\"FKp6_\",\"TextErrorMessage\":\"B8teB\"};","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport {\n ROUTE_SEO_ADDRESS,\n ROUTE_SEO_COUNTRY,\n ROUTE_SEO_DEPARTMENT,\n ROUTE_SEO_LANDMARK,\n ROUTE_SEO_NAMED_PLACE,\n ROUTE_SEO_REGION\n} from '../../../routes'\nimport {\n isCountry,\n isDepartment,\n isDistrict,\n isLandmark,\n isNamedPlace,\n isRegion,\n isTown,\n isWay\n} from '../../../store/address/address.helpers'\nimport { selectFirstAddress } from '../../../store/address/address.selectors'\nimport { selectLocale } from '../../../store/navigation/navigation.selectors'\nimport { selectBlockCanonical } from '../../../store/seo/seo.selectors'\nimport { compact } from '../../../utils/array'\nimport { isEmpty } from '../../../utils/lang'\nimport { slugify } from '../../../utils/string'\nimport { insertTranslationArgs } from '../../i18n/T'\nimport { generateFullRoute } from '../../router/routeUtils'\nimport MetaTags from '../../seo/MetaTags'\nimport { getSeoCityPostcode } from '../../seo/seo'\nimport { getImagePath } from './AddressImage.utils'\nimport mapping from './AddressMetaManager.json'\n\nconst buildMeta = ({ titleArgs, descriptionArgs, locale, canonical, image }) => {\n const translations = mapping[locale] ?? {}\n\n const title = !isEmpty(compact(titleArgs)) ? insertTranslationArgs(translations.title, titleArgs) : undefined\n\n const description = !isEmpty(compact(descriptionArgs))\n ? insertTranslationArgs(translations.description, descriptionArgs)\n : undefined\n\n return {\n title,\n description,\n canonical,\n image\n }\n}\n\nconst generateCanonical = (route, postcode, label) =>\n postcode\n ? generateFullRoute(route, {\n location: postcode ? `${slugify(postcode, false)}-${slugify(label)}` : slugify(label)\n })\n : undefined\n\nexport const getMeta = (locale, address, blockCanonical = false) => {\n if (isEmpty(address)) return\n\n if (isCountry(address)) {\n const { countryCode, countryLabel } = address\n\n return {\n canonical: generateFullRoute(ROUTE_SEO_COUNTRY, {\n countryCode,\n country: slugify(countryLabel)\n })\n }\n } else if (isRegion(address)) {\n const { regionCode, regionLabel } = address\n\n return {\n canonical: generateFullRoute(ROUTE_SEO_REGION, { regionCode, region: slugify(regionLabel) })\n }\n } else if (isDepartment(address)) {\n const { departmentCode, departmentLabel } = address\n\n return {\n canonical: generateFullRoute(ROUTE_SEO_DEPARTMENT, {\n departmentCode,\n department: slugify(departmentLabel)\n })\n }\n } else if (isLandmark(address)) {\n const { name, postcode, label } = address\n\n return buildMeta({\n locale,\n titleArgs: [name, label],\n descriptionArgs: [name, label, name],\n image: getImagePath(address),\n canonical: !blockCanonical ? generateCanonical(ROUTE_SEO_LANDMARK, postcode, name) : undefined\n })\n } else if (isNamedPlace(address)) {\n const { named_place, postcode, label } = address\n\n return buildMeta({\n locale,\n titleArgs: [named_place, label],\n descriptionArgs: [named_place, label, named_place],\n image: getImagePath(address),\n canonical: !blockCanonical ? generateCanonical(ROUTE_SEO_NAMED_PLACE, postcode, named_place) : undefined\n })\n } else if (isDistrict(address)) {\n const { town, postcode } = address\n const townWithPostcode = `${town} (${postcode})`\n\n return buildMeta({\n locale,\n titleArgs: [town, townWithPostcode],\n descriptionArgs: [town, town, town],\n image: getImagePath(address),\n canonical: undefined\n })\n } else if (isTown(address)) {\n const { town, postcode: initialPostcode } = address\n const postcode = getSeoCityPostcode(initialPostcode)\n const townWithPostcode = postcode ? `${town} (${postcode})` : town\n\n return buildMeta({\n locale,\n titleArgs: [town, townWithPostcode],\n descriptionArgs: [town, town, town],\n image: getImagePath(address),\n canonical: !blockCanonical ? generateCanonical(ROUTE_SEO_ADDRESS, postcode, town) : undefined\n })\n } else if (isWay(address)) {\n const { named_place, name, town, label } = address\n const l = named_place ?? name ?? town\n\n return buildMeta({\n locale,\n titleArgs: [l, label],\n descriptionArgs: [l, label, l],\n image: undefined,\n canonical: undefined\n })\n } else {\n const { town, postcode, split_label } = address\n const townWithPostcode = postcode ? `${town} (${postcode})` : town\n\n return buildMeta({\n locale,\n titleArgs: [town, townWithPostcode],\n descriptionArgs: [town, town, town],\n canonical: !blockCanonical\n ? generateFullRoute(ROUTE_SEO_ADDRESS, {\n location: slugify(split_label?.join('-'))\n })\n : undefined\n })\n }\n}\n\nexport const AddressMetaManager = () => {\n const address = useSelector(selectFirstAddress)\n const locale = useSelector(selectLocale)\n const blockCanonical = useSelector(selectBlockCanonical)\n\n return <MetaTags {...getMeta(locale, address, blockCanonical)} />\n}\n\nexport default AddressMetaManager\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { useSelector } from 'react-redux'\nimport s from './TextShortener.less'\nimport { truncate } from '../../utils/string'\nimport { selectCurrentHistoryFullRoute } from '../../store/history/history.selectors'\n\nconst DEFAULT_MAX_CHAR = 150\nconst DEFAULT_EXPAND_BUTTON_LABEL = 'En savoir plus'\n\nconst TextShortener = ({ text, expandButtonLabel = DEFAULT_EXPAND_BUTTON_LABEL, maxChar = DEFAULT_MAX_CHAR }) => {\n const [short, setShort] = useState(__BROWSER__)\n\n useShortenOnRouteChange(setShort)\n\n if (!text) return <></>\n\n const needShortening = text.length > maxChar\n\n return (\n <div onClick={() => needShortening && setShort(false)}>\n <span>{short ? truncate(maxChar)(text) : text}</span>\n {short && needShortening && <span className={s.more}>{expandButtonLabel}</span>}\n </div>\n )\n}\n\nconst useShortenOnRouteChange = setShort => {\n const fullRoute = useSelector(selectCurrentHistoryFullRoute)\n\n useEffect(() => setShort(true), [fullRoute, setShort])\n}\n\nTextShortener.propTypes = {\n text: PropTypes.string,\n expandButtonLabel: PropTypes.string,\n maxChar: PropTypes.number\n}\n\nexport default TextShortener\n","// extracted by mini-css-extract-plugin\nexport default {\"more\":\"cqwF5\"};","// extracted by mini-css-extract-plugin\nexport default {\"AddressList\":\"Xxl1Q\"};","import React from 'react'\nimport { useAction } from '../utils/react-redux'\nimport { setAmbiguityAddress } from '../../store/location/location.actions'\nimport s from './AddressItem.less'\nimport useEventCallback from '../utils/useEventCallback'\n\nconst AddressItem = ({ address }) => {\n const execSetAddress = useAction(setAmbiguityAddress)\n const [firstLabel, ...otherLabels] = address.split_label\n\n const onClick = useEventCallback(() => {\n execSetAddress(address)\n }, [execSetAddress])\n\n return (\n <div onClick={onClick}>\n <h1 className={s.AddressItem_link}>\n <a href={`/plan/${address.label}`}>\n <span className={s.AddressItem_mainLabel}>{firstLabel}</span>\n <span className={s.AddressItem_secondaryLabel}>\n {otherLabels.map((label, id) => (\n <span key={id}>{label}</span>\n ))}\n </span>\n </a>\n </h1>\n </div>\n )\n}\n\nexport default AddressItem\n","// extracted by mini-css-extract-plugin\nexport default {\"AddressItem_link\":\"srFvv\",\"AddressItem_mainLabel\":\"Qh228\",\"AddressItem_secondaryLabel\":\"WBFZf\"};","import React from 'react'\nimport s from './AddressList.less'\nimport { useSelector } from 'react-redux'\nimport { selectAddresses } from '../../store/address/address.selectors'\nimport AddressItem from './AddressItem'\n\nexport default function AddressList() {\n const addresses = useSelector(selectAddresses)\n\n if (addresses.length <= 1) return <></>\n\n return (\n <div className={s.AddressList}>\n <ul>\n {addresses.map((address, idx) => (\n <li key={idx}>\n <AddressItem address={address} />\n </li>\n ))}\n </ul>\n </div>\n )\n}\n","import React from 'react'\nimport { useSelector } from 'react-redux'\nimport AddressList from '../../domain/address/AddressList'\nimport TextError from '../../domain/genericComponents/TextError'\nimport { selectAddressError } from '../../store/address/address.selectors'\n\nconst AddressSearchDialogContent = () => {\n const addressError = useSelector(selectAddressError)\n\n if (addressError) {\n return <TextError error={addressError} />\n }\n\n return <AddressList />\n}\n\nexport default AddressSearchDialogContent\n","import React from 'react'\nimport s from './CityDescription.less'\nimport { selectDescription } from '../../store/address/address.selectors'\nimport { withEmptyFallbackErrorBoundary } from '../error/EmptyFallbackErrorBoundary'\n\nimport TextShortener from '../genericComponents/TextShortener'\nimport { useSelector } from 'react-redux'\nimport { withFrenchLanguage } from '../i18n/i18nSite'\n\nconst CityDescription = () => {\n const description = useSelector(selectDescription)\n\n if (!description) return <></>\n\n return (\n <div className={s.description}>\n <TextShortener text={description} />\n </div>\n )\n}\n\nexport default withEmptyFallbackErrorBoundary(withFrenchLanguage(CityDescription))\n","import React from 'react'\nimport classNames from 'classnames'\nimport s from './SearchDialog.less'\nimport SlideInOut from '../animation/SlideInOut'\nimport { isUIElementDisplayed } from '../../store/ui/ui.selectors'\nimport { UI_ELEMENTS } from '../../store/ui/ui.constants'\nimport { useSelector } from 'react-redux'\n\nconst SearchDialog = ({ children, suggestContent }) => {\n const searchDialogIsDisplayed = useSelector(isUIElementDisplayed(UI_ELEMENTS.SEARCH_DIALOG))\n const suggestIsDisplayed = useSelector(isUIElementDisplayed(UI_ELEMENTS.SUGGEST))\n\n return (\n <SlideInOut display={searchDialogIsDisplayed}>\n {animationState => (\n <dialog className={classNames(s.SearchDialog, searchDialogIsDisplayed && s.SearchDialog_displayed)}>\n <div className={s.SearchDialog_scrollableContent}>\n {(animationState === 'exiting' || suggestIsDisplayed) && suggestContent}\n {!suggestIsDisplayed && children}\n </div>\n </dialog>\n )}\n </SlideInOut>\n )\n}\n\nexport default SearchDialog\n","// extracted by mini-css-extract-plugin\nexport default {\"SearchDialog\":\"Imy2_\",\"SearchDialog_displayed\":\"zIaNN\",\"SearchDialog_scrollableContent\":\"VCemQ\"};","// extracted by mini-css-extract-plugin\nexport default {\"addressContent\":\"Daq54\",\"mainHeader\":\"y58Vp\",\"addressInfo\":\"F3zHp\",\"addressTitle\":\"EII_l\",\"locationMainAddress\":\"hfgs2\",\"locationSubAddress\":\"JjfIr\",\"actions\":\"hy9Qw\",\"actionBtnWrapper\":\"FlpQz\"};","export const PageNotFoundErrorCode = 404\n\nexport default class PageNotFoundError extends Error {\n constructor(e = 'Page non trouvée') {\n super(e)\n this.originalError = e\n this.name = 'PageNotFoundError'\n this.type = PageNotFoundErrorCode\n }\n}\n","import {\n isCountry,\n isDepartment,\n isDistrict,\n isLandmark,\n isNamedPlace,\n isRegion,\n isTown\n} from '../../../store/address/address.helpers'\nimport { geocodeForwardCtx } from '../../../store/search/search.service.constants'\nimport { slugify } from '../../../utils/string'\nimport { getSeoCityPostcode } from '../../seo/seo'\n\nexport const getImagePath = address => {\n const path = '/front-services/map/'\n\n const {\n name,\n postcode,\n town,\n named_place,\n countryLabel,\n countryCode,\n regionLabel,\n regionCode,\n departmentLabel,\n departmentCode\n } = address\n\n if (isCountry(address)) {\n const slug = `${countryCode}-${slugify(countryLabel)}`\n return `${path}country/${slug}`\n } else if (isRegion(address)) {\n const slug = `${regionCode}-${slugify(regionLabel)}`\n return `${path}region/${slug}`\n } else if (isDepartment(address)) {\n const slug = `${departmentCode}-${slugify(departmentLabel)}`\n return `${path}departement/${slug}`\n } else if (postcode) {\n if (isTown(address)) {\n const slug = `${slugify(getSeoCityPostcode(postcode), false)}-${slugify(town)}`\n return `${path}${slug}`\n } else if (isDistrict(address)) {\n const slug = `${slugify(postcode, false)}-${slugify(town)}`\n return `${path}${slug}`\n } else if (isNamedPlace(address)) {\n const slug = `${slugify(postcode, false)}-${slugify(named_place)}`\n return `${path}${slug}?filter=${geocodeForwardCtx.filter.hamlet}`\n } else if (isLandmark(address)) {\n const slug = `${slugify(postcode, false)}-${slugify(name)}`\n return `${path}${slug}?filter=${geocodeForwardCtx.filter.landmark}`\n }\n }\n}\n","import classNames from 'classnames'\nimport React, { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { requestGeoentityVde } from '../../dataSource/geoentity/geoentity.requests'\nimport { closeVde } from '../../store/ad/ad.actions'\nimport { selectBboxForVde, selectPageIdForAdConfig, selectVdeName } from '../../store/ad/ad.selectors'\nimport { selectHasUserConsentedForNativeAdvertising } from '../../store/cmp/cmp.selectors'\nimport { selectIsMapInitialized } from '../../store/map/map.selectors'\nimport { selectIsFrenchSite, selectLocale } from '../../store/navigation/navigation.selectors'\nimport { isGE } from '../Device'\nimport { SPD_PUSH_DISPLAY } from '../analytics/BiTagger'\nimport { TAG_VDE_CLOSE, TAG_VDE_CTA } from '../analytics/analytics.tagids.constants'\nimport TagActionButton from '../genericComponents/TagActionButton'\nimport cross from '../genericComponents/assets/cross.svg'\nimport RectangleActionButton, {\n COLOR_GREEN_EMPTY,\n SIZE_SMALL\n} from '../genericComponents/buttons/RectangleActionButton'\nimport SVGIcon from '../svg/SVGIcon'\nimport { convertBboxToWestSouthEastNorthBbox } from '../utils/map'\nimport { useAction, withEverySelectorTruthy } from '../utils/react-redux'\nimport useEventCallback from '../utils/useEventCallback'\nimport { getAdIdByAdName } from './AdConfigService'\nimport AdLoader from './AdLoader'\nimport s from './VdeBanner.less'\nimport { useAdData } from './ad.utils'\nimport { useClickVde, useSendVdeBucTag, useShouldDisplayVde, useVdeLinkAndTags } from './ad.vde.utils'\n\nexport const VdeBannerContent = ({ adName }) => {\n const pageId = useSelector(selectPageIdForAdConfig)\n const adId = getAdIdByAdName(adName, pageId)\n const data = useAdData(adId)\n const { tagVdeType, app, subcategory, rubric } = useVdeLinkAndTags(adId)\n const [isDisplayTagSent, setDisplayTagSent] = useState(false)\n const onClick = useClickVde(adId)\n const shouldDisplayVde = useShouldDisplayVde(adId)\n const sendVdeBucTag = useSendVdeBucTag(adId)\n const execCloseVde = useAction(closeVde)\n\n useEffect(() => () => execCloseVde(), [])\n\n const closeVDE = useEventCallback(execCloseVde, [execCloseVde])\n\n if (!shouldDisplayVde) return <></>\n\n const {\n vde: { title, description, buttonLabel, imgUrl }\n } = data\n\n const isOnMap = isGE()\n const tagInfo = {\n tagVdeType,\n appId: app,\n catId: subcategory || rubric\n }\n\n if (!isDisplayTagSent) {\n setDisplayTagSent(true)\n sendVdeBucTag(SPD_PUSH_DISPLAY)\n }\n\n return (\n <div className={classNames(s.root, isOnMap ? s.onMap : '')}>\n <TagActionButton type={TAG_VDE_CTA} tagInfo={tagInfo} className={s.linkWrapper} deferClick onClick={onClick}>\n <div className={s.content}>\n <div className={s.title}>{title}</div>\n <div className={s.description}> {description}</div>\n <div className={s.center}>\n <RectangleActionButton\n className={s.button}\n color={COLOR_GREEN_EMPTY}\n size={SIZE_SMALL}\n label={buttonLabel}\n />\n </div>\n </div>\n {imgUrl && (\n <div className={s.imageContainer}>\n <img className={s.img} src={imgUrl} />\n </div>\n )}\n </TagActionButton>\n {isOnMap && (\n <TagActionButton\n type={TAG_VDE_CLOSE}\n tagInfo={tagInfo}\n className={s.onMapCloseButton}\n deferClick\n onClick={closeVDE}\n >\n <SVGIcon url={cross} />\n </TagActionButton>\n )}\n </div>\n )\n}\n\nexport const VdeBanner = withEverySelectorTruthy(\n selectIsFrenchSite,\n selectIsMapInitialized,\n selectBboxForVde\n)(() => {\n const adName = useSelector(selectVdeName)\n const hasUserConsent = useSelector(selectHasUserConsentedForNativeAdvertising)\n const bbox = useSelector(selectBboxForVde)\n const [keywords, setKeywords] = useState(null)\n const locale = useSelector(selectLocale)\n\n useEffect(() => {\n const formattedBbox = convertBboxToWestSouthEastNorthBbox(bbox)\n requestGeoentityVde(formattedBbox, locale).then(({ appIds }) => {\n setKeywords({ vde: appIds.join(',') })\n })\n }, [])\n\n if (!adName || !hasUserConsent || !keywords) return <></>\n\n return (\n <div id={adName}>\n <AdLoader adName={adName} keywords={keywords} askData={true}>\n <VdeBannerContent adName={adName} />\n </AdLoader>\n </div>\n )\n})\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"BcXVL\",\"onMap\":\"uOc3_\",\"linkWrapper\":\"SzLKs\",\"content\":\"jNQOH\",\"title\":\"GX_o8\",\"description\":\"rxcnr\",\"center\":\"Akl4S\",\"button\":\"cOh4p\",\"imageContainer\":\"k1mUa\",\"img\":\"qRWnG\",\"onMapCloseButton\":\"kdDi4\"};","// extracted by mini-css-extract-plugin\nexport default {\"addressMainContent\":\"B9naG\"};"],"names":["_ref","address","coordinates","lat","lng","areLatLngValid","isNumber","visible","setVisible","useTemporaryVisible","copiedText","useT","onClick","useCallback","copyTextToClipboard","toFixed","then","catch","err","console","error","searchServiceCtx","geocodeLevel","addressPoint","addressRange","namedPlace","landmark","way","unnamed_road","includes","geocode_level","isEligibleForXY","React","className","SVGIcon","url","emptyMarker","StatusMessage","message","withEmptyFallbackErrorBoundary","panoData","useAddressPano","useSelector","selectFirstAddress","enabled","selectIsEligibleFor360","usePano","preview","PanoPreview","tagId","TAG_ADDRESS_IMMERSIVE","split_label","shouldDisplayFavoriteButton","selectIsUserAccountEnabled","isGE","AddressPanoPreview","s","addressContent","mainHeader","addressInfo","addressTitle","locationMainAddress","locationSubAddress","AddressCoordinates","actions","actionBtnWrapper","AddressShareButton","AddressFavoriteButton","CityDescription","ETA","route","setRoute","useState","execComputeETAFromGeoloc","useAction","computeETAFromGeoloc","isGeoLocationEnabled","selectIsGeoLocationOn","geolocationPosition","selectGeolocationPosition","useResetRouteOnCoordinatesChanged","locationCoords","useEffect","undefined","locationHasCoords","useETARoute","icon","StepUpNumber","label","getRouteLengthLabel","mainClassName","restClassName","getRouteTimeLabel","waves","withOnlyPE","location","classNames","GoToItineraryButton","tagProps","tagInfo","ancrage","PAGE_ADDRESS_NAME","withFrenchSite","isWaitingForGeoentities","selectIsWaitingForRequestedGeoentities","pois","selectGeoentities","length","GeoentityList","withEverySelectorTruthy","AddressMainContent","scrollTop","useScrollContext","addressMainContent","EtaAndItineraryButton","AddressContent","AdDesktopAddressHP","AddressVdeBanner","GeoentitiesAtAddress","GeoentitiesAtAddressPicker","AdMobileBannerAddress","FakeHotelCalendar","Footer","PermanentRedirectError","Error","constructor","arguments","host","super","this","name","type","iconId","mob_roundImage","selectGeoentityIconFromRouteOptions","classnames","src","searchInputRef","onChange","quickInputRef","useRef","handleChange","event","current","focus","value","target","ref","autoFocus","SearchInput","forwardRef","props","loading","onFocus","suggestFilterType","placeholder","idx","prefix","hasGreenPlaceholder","navigateToSuggestOnFocus","isFirstStepToFill","transparent","dispatch","useDispatch","hasFocus","setFocus","selectCurrentHistoryRoute","hasIcon","selectHasSearchIconFromRouteOptions","prevRoute","usePrevious","execSuggest","suggest","execNavigateTo","navigateTo","isReady","setIsReady","inputRef","debouncedValue","useDebounce","hasDebouncedValueChangeOnce","isBtnOkDisplayed","ROUTE_SUGGEST","isQuickSearch","inputId","showUI","useUIDisplay","UI_ELEMENTS","SUGGEST","isHomePage","selectIsHomePage","onSubmit","setSearchTerms","Promise","resolve","blur","useImperativeHandle","__BROWSER__","isPagelessRoute","doSuggest","val","terms","handleFocus","e","setTimeout","select","_inputRef$current","htmlFor","SearchInputIcon","id","disabled","autoComplete","Throbber","QuickSearchInput","displayName","useAbTestVariant","useSelectorWithProps","selectVariantForAbTestId","display","children","Device","CSSTransition","in","timeout","enter","enterActive","exit","exitActive","unmountOnExit","animationState","VdeMarkers","PoisMarkers","vde","technicalErrorCatcher","reject","AddressFullscreenMapHandler","isMapFullscreen","selectIsMapFullScreen","addresses","selectAddresses","execFitAddresses","fitAddresses","createCustomSelector","selectIsPE","pe","PAGE_CLASSES","withSubHeader","ShareUrlButton","title","description","href","WEATHER_POLLUTION_AQI","Weather","abTest","weatherData","setWeatherData","locale","selectLocale","t","translate","hasOnlyOneAddress","selectHasOnlyOneAddress","firstAddressCoordinates","selectFirstAddressCoordinates","isAddressATownOrADistrict","isTown","isDistrict","candidate","async","coords","requestWeather","params","request","get","getService","SERVICES","WEATHER","_ref2","data","warn","fetchWeather","weatherType","temp","pollution_aqi","weatherIconUrl","clearIcon","cloudsIcon","rainIcon","drizzleIcon","thunderstormIcon","snowIcon","atmosphereIcon","getWeatherIconUrl","pollutionColor","root","row","alt","details","pollutionTitle","pollutionQuality","style","backgroundColor","d","debug","UNKNOWN_ROUTE","geographicTypeByRouteName","ROUTE_SEO_NAMED_PLACE","geocodeForwardCtx","filter","hamlet","ROUTE_SEO_LANDMARK","ROUTE_SEO_ADDRESS","geographicSubTypesByRouteName","landmarkSubtypes","getRouteNameByContext","routeContext","parts","path","split","onRouteEnter","store","getState","avoidRefetchingPageData","routeName","landMarkOrNamedPlaceAndNotFrenchSite","selectIsFrenchSite","PageNotFoundError","reqUrl","selectReqUrl","extractQueryStringParamsFromUrl","selectIsOnboardingContext","action","searchAddress","options","avoidRedirect","geographicType","subtypes","searchCityDescription","displayMapPopup","POPUP_TYPE_ADDRESS","onRouteLeave","selectIsPlacesUniverse","resetAddress","selectIsGeoentityAtAddressPage","selectIsASearchPage","selectIsAGeoentityPage","selectIsAddressPage","resetGeoentityList","hideMapPopup","handleRouteLoading","renderPage","AddressPage","withToaster","Page","key","cssClasses","pageClassManager","AddressPageClassManager","AddressMetaManager","Map","staticMap","AddressMapImage","AddressVdeOnMapBanner","Header","AddressHeaderForm","SearchDialog","suggestContent","AddressSuggestContent","AddressSearchDialogContent","Main","withoutSubHeader","execSearchAddress","configureAndSendTag","useConfigureAndSendTag","SuggestContent","labels","subtype","from","removeHtmlEmTags","join","SUGGEST_FROM_VALUES","favorites","TAG_SUGGEST","getImageUrl","image","logo","img","isAbsoluteUrl","startsWith","generateAbsoluteBaseUrl","_ref3","givenTitle","givenDescription","alternateLinkPath","canonical","shouldIgnoreEn","currentFullRoute","selectCurrentHistoryFullRoute","defaultTitle","defaultDescription","translations","typ","buildCanonicalRoute","Helmet","content","property","toLowerCase","SUBDOMAINS","map","subdomain","SUBDOMAIN_EN","rel","hreflang","getHrefLangBySubdomain","getAlternateLinks","allowedGeocodeLevels","town","district","shouldDisplayVde","LOCALES","fr_FR","withOnlyGE","VdeBanner","TextError","isString","errorName","translatedMessage","getMessage","buildMeta","titleArgs","descriptionArgs","mapping","isEmpty","compact","insertTranslationArgs","generateCanonical","postcode","generateFullRoute","slugify","blockCanonical","selectBlockCanonical","MetaTags","isCountry","countryCode","countryLabel","ROUTE_SEO_COUNTRY","country","isRegion","regionCode","regionLabel","ROUTE_SEO_REGION","region","isDepartment","departmentCode","departmentLabel","ROUTE_SEO_DEPARTMENT","department","isLandmark","getImagePath","isNamedPlace","named_place","initialPostcode","getSeoCityPostcode","isWay","l","getMeta","DEFAULT_MAX_CHAR","DEFAULT_EXPAND_BUTTON_LABEL","TextShortener","text","expandButtonLabel","maxChar","short","setShort","useShortenOnRouteChange","needShortening","truncate","fullRoute","propTypes","PropTypes","execSetAddress","setAmbiguityAddress","firstLabel","otherLabels","useEventCallback","AddressList","AddressItem","addressError","selectAddressError","withFrenchLanguage","selectDescription","searchDialogIsDisplayed","isUIElementDisplayed","SEARCH_DIALOG","suggestIsDisplayed","SlideInOut","originalError","VdeBannerContent","adName","pageId","selectPageIdForAdConfig","adId","getAdIdByAdName","useAdData","tagVdeType","app","subcategory","rubric","useVdeLinkAndTags","isDisplayTagSent","setDisplayTagSent","useClickVde","useShouldDisplayVde","sendVdeBucTag","useSendVdeBucTag","execCloseVde","closeVde","closeVDE","buttonLabel","imgUrl","isOnMap","appId","catId","SPD_PUSH_DISPLAY","TagActionButton","TAG_VDE_CTA","deferClick","RectangleActionButton","color","COLOR_GREEN_EMPTY","size","SIZE_SMALL","TAG_VDE_CLOSE","cross","selectIsMapInitialized","selectBboxForVde","selectVdeName","hasUserConsent","selectHasUserConsentedForNativeAdvertising","bbox","keywords","setKeywords","formattedBbox","convertBboxToWestSouthEastNorthBbox","requestGeoentityVde","appIds","AdLoader","askData"],"sourceRoot":""}