{"mappings":"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","sources":["src/Components/Map/MapComponentWrapper.tsx","src/Components/Map/MapComponent.tsx","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/google_map_map.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/marker_dispatcher.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/omit.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/shallowEqual.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/google_map_markers.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/google_map_markers_prerender.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/loaders/google_map_loader.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/lib/geo/wrap.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/lib/geo/lat_lng.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/lib/geo/transform.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/lib/geo/index.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/raf.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/log2.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/pick.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/isEmpty.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/isNumber.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/detect.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/isPlainObject.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/passiveEvents.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/detectElementResize.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/google_map.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/google_heatmap.js","node_modules/.pnpm/google-map-react@2.2.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/google-map-react/src/utils/isArraysEqualEps.js","node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js","node_modules/.pnpm/@googlemaps+js-api-loader@1.16.2/node_modules/@googlemaps/js-api-loader/node_modules/tslib/tslib.es6.js","node_modules/.pnpm/@googlemaps+js-api-loader@1.16.2/node_modules/@googlemaps/js-api-loader/node_modules/fast-deep-equal/index.js","node_modules/.pnpm/@googlemaps+js-api-loader@1.16.2/node_modules/@googlemaps/js-api-loader/src/index.ts","node_modules/.pnpm/@mapbox+point-geometry@0.1.0/node_modules/@mapbox/point-geometry/index.js","src/Components/Map/PoiMarker.tsx","src/Components/Map/MapMarker.tsx","src/Components/Map/FillMapIcon.tsx"],"sourcesContent":["import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ILumoOneAppState } from '../../boot/configureStore';\nimport { CoordinatesAM } from './PoiApiClient';\nimport MapComponent, { MapActivatedProps, MapComponentPassedThroughProps } from './MapComponent';\nimport { pointsOfInterestActions } from './pointsOfInterestActions';\nimport { Language } from '../../Common/interfaces/language';\nimport { BoundingBoxAM } from '../../Apartments/Api/apartmentApiClient';\n\nexport interface MapComponentWrapperStateProps {\n\tlanguage: Language;\n\tgoogleMapsApiKey: string | undefined;\n}\n\ninterface PoiMapProps {\n\tbusinessEntityId?: string;\n}\n\ntype MapComponentWrapperParams = {\n\tdefaultCenter: CoordinatesAM;\n\tdefaultZoom?: number;\n\tonMapActivated?: (activatedProps: MapActivatedProps) => void;\n\tchildren?: React.ReactNode;\n\tonMapChanged?: (bounds: BoundingBoxAM, center: CoordinatesAM, zoomLevel: number) => void;\n} & MapComponentPassedThroughProps &\n\tPoiMapProps;\n\ntype MapComponentWrapperProps = MapComponentWrapperParams &\n\tMapComponentWrapperStateProps &\n\tMapComponentWrapperDispatchProps;\n\nclass MapComponentWrapper extends React.Component<MapComponentWrapperProps> {\n\trender() {\n\t\tif (!this.props.googleMapsApiKey) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst conditionalProps: Omit<MapComponentPassedThroughProps, 'visibleCategories'> = this.props.poiCategoryFilter\n\t\t\t? {\n\t\t\t\t\tpoiCategoryFilter: this.props.poiCategoryFilter,\n\t\t\t\t\tprimaryPoiId: this.props.businessEntityId,\n\t\t\t\t}\n\t\t\t: { primaryPoiId: this.props.businessEntityId };\n\t\treturn (\n\t\t\t<MapComponent\n\t\t\t\tdefaultCenter={this.props.defaultCenter}\n\t\t\t\tdefaultZoom={this.props.defaultZoom}\n\t\t\t\tonMapChange={this.onMapChange}\n\t\t\t\tlanguage={this.props.language}\n\t\t\t\tgoogleMapsApiKey={this.props.googleMapsApiKey}\n\t\t\t\tonMapActivated={this.props.onMapActivated}\n\t\t\t\tvisibleCategories={this.props.visibleCategories}\n\t\t\t\t{...conditionalProps}\n\t\t\t>\n\t\t\t\t{this.props.children}\n\t\t\t</MapComponent>\n\t\t);\n\t}\n\n\tprivate onMapChange = (bounds: BoundingBoxAM, focalPoint: CoordinatesAM, zoomLevel: number) => {\n\t\tthis.props.getPoiData({\n\t\t\tbounds: {\n\t\t\t\tnorthWest: { lat: bounds.topLeft.lat, lon: bounds.topLeft.lon },\n\t\t\t\tnorthEast: { lat: bounds.topLeft.lat, lon: bounds.bottomRight.lon },\n\t\t\t\tsouthWest: { lat: bounds.bottomRight.lat, lon: bounds.topLeft.lon },\n\t\t\t\tsouthEast: { lat: bounds.bottomRight.lat, lon: bounds.bottomRight.lon },\n\t\t\t},\n\t\t\tfocalPoint,\n\t\t});\n\t\tthis.props.onMapChanged?.(bounds, focalPoint, zoomLevel);\n\t};\n}\n\nexport interface MapComponentWrapperDispatchProps {\n\tgetPoiData: typeof pointsOfInterestActions.getServicesInArea.request;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport default connect<MapComponentWrapperStateProps, MapComponentWrapperDispatchProps, {}, ILumoOneAppState>(\n\t({ language, settings }) => ({\n\t\tlanguage: language.currentLanguage,\n\t\tgoogleMapsApiKey: settings.settings && settings.settings.googleMapsApiKey,\n\t}),\n\t{\n\t\tgetPoiData: pointsOfInterestActions.getServicesInArea.request,\n\t},\n)(MapComponentWrapper);\n","import React, { PropsWithChildren, ReactNode } from 'react';\r\nimport GoogleMapReact, { MapOptions, ChangeEventValue, Coords } from 'google-map-react';\r\nimport { CoordinatesAM, BoundingArea } from './PoiApiClient';\r\nimport { IUseResourceTexts, withResourceTextSupport } from '../ResourceText';\r\nimport { PoiMarker, PoiMarkerProps, PrimaryLocationMarker } from './PoiMarker';\r\n\r\nimport { Language } from '../../Common/interfaces/language';\r\nimport { BoundingBoxAM } from '../../Apartments/Api/apartmentApiClient';\r\nimport { MapMarkerData } from './MapMarker';\r\nimport { MapPlaceableChildProps } from './MapPlaceableChildProps';\r\nimport { PoiMapAndFilterSharedProps } from './PoiMapAndFilterSharedProps';\r\nimport { PointsOfInterestState } from './pointsOfInterestState';\r\nimport { connect } from 'react-redux';\r\nimport { ILumoOneAppState } from '../../boot/configureStore';\r\n\r\nexport interface MapActivatedProps {\r\n\treCenter: () => void;\r\n\tmap: google.maps.Map;\r\n\t/**\r\n\t * Fit map to bounds on load.\r\n\t * Parameter type corresponds to LatLngBoundsLiteral in google maps\r\n\t * https://developers.google.com/maps/documentation/javascript/reference/coordinates#LatLngBoundsLiteral\r\n\t */\r\n\tfitBounds: (bounds: BoundingBoxAM) => void;\r\n}\r\n\r\nexport interface MapComponentPassedThroughProps extends Omit<PoiMapAndFilterSharedProps, 'poiData'> {\r\n\tprimaryPoiId?: string;\r\n\tpoiCategoryFilter?: ReactNode;\r\n}\r\n\r\nexport type MapComponentOwnProps = {\r\n\tdefaultCenter: CoordinatesAM;\r\n\tdefaultZoom?: number;\r\n\tonMapChange: (bounds: BoundingBoxAM, focalPoint: CoordinatesAM, zoomLevel: number) => void;\r\n\tlanguage: Language;\r\n\tgoogleMapsApiKey: string;\r\n\tonMapActivated?: (activatedProps: MapActivatedProps) => void;\r\n} & MapComponentPassedThroughProps &\r\n\tPropsWithChildren;\r\n\r\nclass MapComponentState {\r\n\tbounds: BoundingArea | undefined;\r\n\tmap: google.maps.Map | undefined;\r\n\tisFullScreen: boolean;\r\n\tshownDetailsWindowPoiId: string | undefined;\r\n\tshowPoiFilterComponent: boolean;\r\n}\r\n\r\nexport function getPrimaryPoiIcon() {\r\n\treturn '/images/map-marker.png';\r\n}\r\n\r\nexport function getPoiMarkerIcon(poi: MapMarkerData) {\r\n\tconst iconNormal = `/images/map-marker-normal.png`;\r\n\tconst iconInactive = `/images/map-marker-inactive.png`;\r\n\treturn poi.category === 'businessentity'\r\n\t\t? poi.hasAvailableApartments === true\r\n\t\t\t? iconNormal\r\n\t\t\t: iconInactive\r\n\t\t: poi.category === 'marketingbusinessentity'\r\n\t\t\t? iconInactive\r\n\t\t\t: '';\r\n}\r\n\r\n// Convenience component to not have react complain about lat and lng props on normal DOM elements. (map library reads them automatically)\r\nfunction TemporaryMapMarker(props: MapPlaceableChildProps & { children: React.ReactElement }) {\r\n\treturn props.children;\r\n}\r\ntype MapComponentStateProps = PointsOfInterestState;\r\ntype MapComponentProps = MapComponentOwnProps & MapComponentStateProps & IUseResourceTexts;\r\n\r\nconst DEFAULT_ZOOM_LEVEL = 15;\r\nexport const MAX_ZOOM_LEVEL = 19;\r\nclass MapComponent extends React.Component<MapComponentProps, MapComponentState> {\r\n\tprivate readonly categoryFilterRef = React.createRef<HTMLDivElement>();\r\n\r\n\t// private boundsChangedTimeout: number;\r\n\tconstructor(props: MapComponentProps) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tbounds: undefined,\r\n\t\t\tmap: undefined,\r\n\t\t\tisFullScreen: false,\r\n\t\t\tshownDetailsWindowPoiId: undefined,\r\n\t\t\tshowPoiFilterComponent: false,\r\n\t\t};\r\n\t}\r\n\r\n\treCenter = () => {\r\n\t\tif (this.state.map) {\r\n\t\t\tthis.state.map.setCenter(this.transformCoordinateForMap(this.props.defaultCenter));\r\n\t\t\tthis.state.map.setZoom(DEFAULT_ZOOM_LEVEL);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onGoogleMapApiLoaded = ({ map }: { map: google.maps.Map; maps: any; ref: Element | null }) => {\r\n\t\tif (this.categoryFilterRef.current) {\r\n\t\t\tmap.controls[google.maps.ControlPosition.BOTTOM_CENTER].push(this.categoryFilterRef.current);\r\n\t\t}\r\n\t\tthis.setState({ map: map });\r\n\t\tif (this.props.onMapActivated) {\r\n\t\t\tthis.props.onMapActivated({\r\n\t\t\t\treCenter: this.reCenter,\r\n\t\t\t\tfitBounds: (b) => map.fitBounds(boundingBoxToGoogleMapsCoords(b)),\r\n\t\t\t\tmap: map,\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst defaultCenter = this.getLocationForMap();\r\n\t\tconst options = this.getMapOptions();\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"mod-map__mapBox\">\r\n\t\t\t\t<div className=\"map\">\r\n\t\t\t\t\t<GoogleMapReact\r\n\t\t\t\t\t\tbootstrapURLKeys={{ key: this.props.googleMapsApiKey }}\r\n\t\t\t\t\t\tdefaultCenter={this.transformCoordinateForMap(defaultCenter)}\r\n\t\t\t\t\t\tdefaultZoom={this.props.defaultZoom || DEFAULT_ZOOM_LEVEL}\r\n\t\t\t\t\t\toptions={options}\r\n\t\t\t\t\t\tyesIWantToUseGoogleMapApiInternals\r\n\t\t\t\t\t\tonChange={(ev: GoogleMapReact.ChangeEventValue) => this.onMapChange(ev)}\r\n\t\t\t\t\t\tonGoogleApiLoaded={this.onGoogleMapApiLoaded}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{this.renderPOIs()}\r\n\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t</GoogleMapReact>\r\n\t\t\t\t\t{this.state.showPoiFilterComponent && this.props.poiCategoryFilter}\r\n\t\t\t\t</div>\r\n\t\t\t\t<button className=\"mod-map__fullscreen\" onClick={this.handleFullScreenClick}></button>\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n\r\n\thandleFullScreenClick = () => {\r\n\t\tconst html = document.getElementsByTagName('html')[0];\r\n\t\tif (!html.classList.contains('fullscreen')) {\r\n\t\t\thtml.classList.add('fullscreen');\r\n\t\t\tif (this.state.map) {\r\n\t\t\t\tthis.state.map.setOptions({ scrollwheel: true });\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\thtml.classList.remove('fullscreen');\r\n\t\t\tif (this.state.map) {\r\n\t\t\t\tthis.state.map.setOptions({ scrollwheel: undefined });\r\n\t\t\t\tdocument.getElementById('map')!.scrollIntoView();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tonDetailsWindowVisibilityChange = (shownWindowPoiId: string | undefined) => {\r\n\t\tthis.setState({ shownDetailsWindowPoiId: shownWindowPoiId });\r\n\t};\r\n\r\n\tprivate renderPOIs() {\r\n\t\tif (!this.props.poiData?.poi) {\r\n\t\t\t// show placeholder for center while loading others\r\n\t\t\treturn (\r\n\t\t\t\t<TemporaryMapMarker lat={this.props.defaultCenter.lat} lng={this.props.defaultCenter.lon}>\r\n\t\t\t\t\t<div className=\"map-marker -primary -above\">\r\n\t\t\t\t\t\t<img className=\"poi-icon -primary\" src={getPrimaryPoiIcon()} />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</TemporaryMapMarker>\r\n\t\t\t);\r\n\t\t}\r\n\t\tconst visibleCategories = this.props.visibleCategories;\r\n\r\n\t\treturn this.props.poiData?.poi\r\n\t\t\t.filter((p) => p.id == this.props.primaryPoiId || visibleCategories.some((c) => c === p.category))\r\n\t\t\t.map((p) => {\r\n\t\t\t\tconst commonProps: PoiMarkerProps & { key: string } = {\r\n\t\t\t\t\tkey: p.id,\r\n\t\t\t\t\tpoi: { ...p },\r\n\t\t\t\t\tlat: p.latitude,\r\n\t\t\t\t\tlng: p.longitude,\r\n\t\t\t\t\tmap: this.state.map,\r\n\t\t\t\t\tisSelected: this.state.shownDetailsWindowPoiId == p.id,\r\n\t\t\t\t\tonSelectedChange: this.onDetailsWindowVisibilityChange,\r\n\t\t\t\t\tlanguage: this.props.language,\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn p.id == this.props.primaryPoiId ? (\r\n\t\t\t\t\t<PrimaryLocationMarker {...commonProps} />\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<PoiMarker {...commonProps} />\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate onMapChange = (ev: ChangeEventValue) => {\r\n\t\tconst transformed = {\r\n\t\t\tnorthEast: this.transformCoordinateFromMap(ev.bounds.ne),\r\n\t\t\tnorthWest: this.transformCoordinateFromMap(ev.bounds.nw),\r\n\t\t\tsouthEast: this.transformCoordinateFromMap(ev.bounds.se),\r\n\t\t\tsouthWest: this.transformCoordinateFromMap(ev.bounds.sw),\r\n\t\t};\r\n\t\tif (\r\n\t\t\tthis.state.bounds == undefined ||\r\n\t\t\tthis.state.bounds.northEast != transformed.northEast ||\r\n\t\t\tthis.state.bounds.northWest != transformed.northWest ||\r\n\t\t\tthis.state.bounds.southEast != transformed.southEast ||\r\n\t\t\tthis.state.bounds.southWest != transformed.southWest\r\n\t\t) {\r\n\t\t\tthis.setState({ bounds: transformed });\r\n\r\n\t\t\tthis.props.onMapChange(\r\n\t\t\t\t{\r\n\t\t\t\t\ttopLeft: { lat: ev.bounds.nw.lat, lon: ev.bounds.nw.lng },\r\n\t\t\t\t\tbottomRight: { lat: ev.bounds.se.lat, lon: ev.bounds.se.lng },\r\n\t\t\t\t},\r\n\t\t\t\t{ lat: ev.center.lat, lon: ev.center.lng },\r\n\t\t\t\tev.zoom,\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({ showPoiFilterComponent: ev.zoom >= 10 });\r\n\t};\r\n\r\n\tprivate getLocationForMap() {\r\n\t\treturn { lat: this.props.defaultCenter.lat || 60, lon: this.props.defaultCenter.lon || 25 };\r\n\t}\r\n\r\n\tprivate transformCoordinateForMap(coord: CoordinatesAM): Coords {\r\n\t\treturn { lat: coord.lat, lng: coord.lon };\r\n\t}\r\n\r\n\tprivate transformCoordinateFromMap(coord: Coords): CoordinatesAM {\r\n\t\treturn { lat: coord.lat, lon: coord.lng };\r\n\t}\r\n\r\n\tprivate getMapOptions(): MapOptions {\r\n\t\treturn {\r\n\t\t\tmapTypeControl: false,\r\n\t\t\trotateControl: false,\r\n\t\t\tpanControl: false,\r\n\t\t\tfullscreenControl: false,\r\n\t\t\tscaleControl: false,\r\n\t\t\tdraggable: true,\r\n\t\t\tmaxZoom: MAX_ZOOM_LEVEL,\r\n\t\t\tclickableIcons: false,\r\n\t\t\tstyles: [\r\n\t\t\t\t{ featureType: 'administrative.land_parcel', elementType: 'all', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{ featureType: 'landscape.man_made', elementType: 'all', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{ featureType: 'poi', elementType: 'labels', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road',\r\n\t\t\t\t\telementType: 'labels',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{ visibility: 'simplified' },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlightness: 20,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{ featureType: 'road.highway', elementType: 'geometry', stylers: [{ hue: '#f49935' }] },\r\n\t\t\t\t{ featureType: 'road.highway', elementType: 'labels', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{ featureType: 'road.arterial', elementType: 'geometry', stylers: [{ hue: '#fad959' }] },\r\n\t\t\t\t{ featureType: 'road.arterial', elementType: 'labels', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{ featureType: 'road.local', elementType: 'geometry', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{ featureType: 'road.local', elementType: 'labels', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{ featureType: 'transit.line', elementType: 'geometry', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{ featureType: 'transit.line', elementType: 'labels', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{ featureType: 'transit.station.airport', elementType: 'all', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{ featureType: 'transit.station.bus', elementType: 'all', stylers: [{ visibility: 'off' }] },\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'transit.station.rail',\r\n\t\t\t\t\telementType: 'geometry',\r\n\t\t\t\t\tstylers: [{ visibility: 'simplified' }],\r\n\t\t\t\t},\r\n\t\t\t\t{ featureType: 'transit.station.rail', elementType: 'labels', stylers: [{ visibility: 'simplified' }] },\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'water',\r\n\t\t\t\t\telementType: 'all',\r\n\t\t\t\t\tstylers: [{ hue: '#a1cdfc' }, { saturation: 30 }, { lightness: 49 }],\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t}\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\r\nconst ConnectedComponent = connect<MapComponentStateProps, {}, MapComponentOwnProps, ILumoOneAppState>(\r\n\t({ pointsOfInterest }) => pointsOfInterest,\r\n\t{},\r\n)(MapComponent);\r\nexport default withResourceTextSupport(ConnectedComponent);\r\n\r\nexport function boundingBoxToGoogleMapsCoords(b: BoundingBoxAM): google.maps.LatLngBoundsLiteral {\r\n\treturn {\r\n\t\teast: b.bottomRight.lon,\r\n\t\tnorth: b.topLeft.lat,\r\n\t\tsouth: b.bottomRight.lat,\r\n\t\twest: b.topLeft.lon,\r\n\t};\r\n}\r\n","import React, { Component } from 'react';\n\nconst style = {\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n margin: 0,\n padding: 0,\n position: 'absolute',\n};\n\nexport default class GoogleMapMap extends Component {\n shouldComponentUpdate() {\n return false; // disable react on this div\n }\n\n render() {\n const { registerChild } = this.props;\n return <div ref={registerChild} style={style} />;\n }\n}\n","import EventEmitter from 'eventemitter3';\n\nexport default class MarkerDispatcher extends EventEmitter {\n constructor(gmapInstance) {\n super();\n this.gmapInstance = gmapInstance;\n }\n\n getChildren() {\n return this.gmapInstance.props.children;\n }\n\n getMousePosition() {\n return this.gmapInstance.mouse_;\n }\n\n getUpdateCounter() {\n return this.gmapInstance.updateCounter_;\n }\n\n dispose() {\n this.gmapInstance = null;\n this.removeAllListeners();\n }\n}\n","// https://github.com/acdlite/recompose/blob/master/src/packages/recompose/utils/omit.js\nconst omit = (obj, keys) => {\n const { ...rest } = obj;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key in rest) {\n delete rest[key];\n }\n }\n return rest;\n};\n\nexport default omit;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @providesModule shallowEqual\n * @typechecks\n * @flow\n */\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n }\n // Step 6.a: NaN == NaN\n // eslint-disable-next-line no-self-compare\n return x !== x && y !== y;\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false;\n }\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (let i = 0; i < keysA.length; i++) {\n if (\n !hasOwnProperty.call(objB, keysA[i]) ||\n !is(objA[keysA[i]], objB[keysA[i]])\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nexport default shallowEqual;\n/* src: https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/shallowEqual.js */\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\n// utils\nimport omit from './utils/omit';\nimport shallowEqual from './utils/shallowEqual';\n\nconst mainStyle = {\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n margin: 0,\n padding: 0,\n position: 'absolute',\n};\n\nconst style = {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n backgroundColor: 'transparent',\n position: 'absolute',\n};\n\nexport default class GoogleMapMarkers extends Component {\n /* eslint-disable react/forbid-prop-types */\n static propTypes = {\n geoService: PropTypes.any,\n style: PropTypes.any,\n distanceToMouse: PropTypes.func,\n dispatcher: PropTypes.any,\n onChildClick: PropTypes.func,\n onChildMouseDown: PropTypes.func,\n onChildMouseLeave: PropTypes.func,\n onChildMouseEnter: PropTypes.func,\n getHoverDistance: PropTypes.func,\n insideMapPanes: PropTypes.bool,\n prerender: PropTypes.bool,\n };\n /* eslint-enable react/forbid-prop-types */\n\n static defaultProps = {\n insideMapPanes: false,\n prerender: false,\n };\n\n constructor(props) {\n super(props);\n\n this.dimensionsCache_ = {};\n this.hoverKey_ = null;\n this.hoverChildProps_ = null;\n this.allowMouse_ = true;\n\n this.state = { ...this._getState(), hoverKey: null };\n }\n\n componentDidMount() {\n this.props.dispatcher.on('kON_CHANGE', this._onChangeHandler);\n this.props.dispatcher.on(\n 'kON_MOUSE_POSITION_CHANGE',\n this._onMouseChangeHandler\n );\n this.props.dispatcher.on('kON_CLICK', this._onChildClick);\n this.props.dispatcher.on('kON_MDOWN', this._onChildMouseDown);\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n if (this.props.experimental === true) {\n return (\n !shallowEqual(this.props, nextProps) ||\n !shallowEqual(\n omit(this.state, ['hoverKey']),\n omit(nextState, ['hoverKey'])\n )\n );\n }\n\n return (\n !shallowEqual(this.props, nextProps) ||\n !shallowEqual(this.state, nextState)\n );\n }\n\n componentWillUnmount() {\n this.props.dispatcher.removeListener('kON_CHANGE', this._onChangeHandler);\n this.props.dispatcher.removeListener(\n 'kON_MOUSE_POSITION_CHANGE',\n this._onMouseChangeHandler\n );\n this.props.dispatcher.removeListener('kON_CLICK', this._onChildClick);\n this.props.dispatcher.removeListener('kON_MDOWN', this._onChildMouseDown);\n\n this.dimensionsCache_ = null;\n }\n\n _getState = () => ({\n children: this.props.dispatcher.getChildren(),\n updateCounter: this.props.dispatcher.getUpdateCounter(),\n });\n\n _onChangeHandler = () => {\n if (!this.dimensionsCache_) {\n return;\n }\n\n const prevChildCount = (this.state.children || []).length;\n const state = this._getState();\n\n this.setState(\n state,\n () =>\n (state.children || []).length !== prevChildCount &&\n this._onMouseChangeHandler()\n );\n };\n\n _onChildClick = () => {\n if (this.props.onChildClick) {\n if (this.hoverChildProps_) {\n const hoverKey = this.hoverKey_;\n const childProps = this.hoverChildProps_;\n // click works only on hovered item\n this.props.onChildClick(hoverKey, childProps);\n }\n }\n };\n\n _onChildMouseDown = () => {\n if (this.props.onChildMouseDown) {\n if (this.hoverChildProps_) {\n const hoverKey = this.hoverKey_;\n const childProps = this.hoverChildProps_;\n // works only on hovered item\n this.props.onChildMouseDown(hoverKey, childProps);\n }\n }\n };\n\n _onChildMouseEnter = (hoverKey, childProps) => {\n if (!this.dimensionsCache_) {\n return;\n }\n\n if (this.props.onChildMouseEnter) {\n this.props.onChildMouseEnter(hoverKey, childProps);\n }\n\n this.hoverChildProps_ = childProps;\n this.hoverKey_ = hoverKey;\n this.setState({ hoverKey });\n };\n\n _onChildMouseLeave = () => {\n if (!this.dimensionsCache_) {\n return;\n }\n\n const hoverKey = this.hoverKey_;\n const childProps = this.hoverChildProps_;\n\n if (hoverKey !== undefined && hoverKey !== null) {\n if (this.props.onChildMouseLeave) {\n this.props.onChildMouseLeave(hoverKey, childProps);\n }\n\n this.hoverKey_ = null;\n this.hoverChildProps_ = null;\n this.setState({ hoverKey: null });\n }\n };\n\n _onMouseAllow = (value) => {\n if (!value) {\n this._onChildMouseLeave();\n }\n\n this.allowMouse_ = value;\n };\n\n _onMouseChangeHandler = () => {\n if (this.allowMouse_) {\n this._onMouseChangeHandlerRaf();\n }\n };\n\n _onMouseChangeHandlerRaf = () => {\n if (!this.dimensionsCache_) {\n return;\n }\n\n const mp = this.props.dispatcher.getMousePosition();\n\n if (mp) {\n const distances = [];\n const hoverDistance = this.props.getHoverDistance();\n\n React.Children.forEach(this.state.children, (child, childIndex) => {\n if (!child) return;\n // layers\n if (\n child.props.latLng === undefined &&\n child.props.lat === undefined &&\n child.props.lng === undefined\n ) {\n return;\n }\n\n const childKey =\n child.key !== undefined && child.key !== null\n ? child.key\n : childIndex;\n const dist = this.props.distanceToMouse(\n this.dimensionsCache_[childKey],\n mp,\n child.props\n );\n if (dist < hoverDistance) {\n distances.push({\n key: childKey,\n dist,\n props: child.props,\n });\n }\n });\n\n if (distances.length) {\n distances.sort((a, b) => a.dist - b.dist);\n const hoverKey = distances[0].key;\n const childProps = distances[0].props;\n\n if (this.hoverKey_ !== hoverKey) {\n this._onChildMouseLeave();\n\n this._onChildMouseEnter(hoverKey, childProps);\n }\n } else {\n this._onChildMouseLeave();\n }\n } else {\n this._onChildMouseLeave();\n }\n };\n\n _getDimensions = (key) => {\n const childKey = key;\n return this.dimensionsCache_[childKey];\n };\n\n render() {\n const mainElementStyle = this.props.style || mainStyle;\n this.dimensionsCache_ = {};\n\n const markers = React.Children.map(\n this.state.children,\n (child, childIndex) => {\n if (!child) return undefined;\n if (\n child.props.latLng === undefined &&\n child.props.lat === undefined &&\n child.props.lng === undefined\n ) {\n return React.cloneElement(child, {\n $geoService: this.props.geoService,\n $onMouseAllow: this._onMouseAllow,\n $prerender: this.props.prerender,\n });\n }\n\n const latLng =\n child.props.latLng !== undefined\n ? child.props.latLng\n : { lat: child.props.lat, lng: child.props.lng };\n\n const pt = this.props.insideMapPanes\n ? this.props.geoService.fromLatLngToDivPixel(latLng)\n : this.props.geoService.fromLatLngToCenterPixel(latLng);\n\n const stylePtPos = {\n left: pt.x,\n top: pt.y,\n };\n\n // If the component has a southeast corner defined (either as a LatLng, or a separate\n // lat and lng pair), set the width and height based on the distance between the northwest\n // and the southeast corner to lock the overlay to the correct geographic bounds.\n if (\n child.props.seLatLng !== undefined ||\n (child.props.seLat !== undefined && child.props.seLng !== undefined)\n ) {\n const seLatLng =\n child.props.seLatLng !== undefined\n ? child.props.seLatLng\n : { lat: child.props.seLat, lng: child.props.seLng };\n\n const sePt = this.props.insideMapPanes\n ? this.props.geoService.fromLatLngToDivPixel(seLatLng)\n : this.props.geoService.fromLatLngToCenterPixel(seLatLng);\n\n stylePtPos.width = sePt.x - pt.x;\n stylePtPos.height = sePt.y - pt.y;\n }\n\n const containerPt = this.props.geoService.fromLatLngToContainerPixel(\n latLng\n );\n\n // to prevent rerender on child element i need to pass\n // const params $getDimensions and $dimensionKey instead of dimension object\n const childKey =\n child.key !== undefined && child.key !== null\n ? child.key\n : childIndex;\n\n this.dimensionsCache_[childKey] = {\n x: containerPt.x,\n y: containerPt.y,\n ...latLng,\n };\n\n return (\n <div\n key={childKey}\n style={{ ...style, ...stylePtPos }}\n className={child.props.$markerHolderClassName}\n >\n {React.cloneElement(child, {\n $hover: childKey === this.state.hoverKey,\n $getDimensions: this._getDimensions,\n $dimensionKey: childKey,\n $geoService: this.props.geoService,\n $onMouseAllow: this._onMouseAllow,\n $prerender: this.props.prerender,\n })}\n </div>\n );\n }\n );\n\n return <div style={mainElementStyle}>{markers}</div>;\n }\n}\n","import React from 'react';\nimport GoogleMapMarkers from './google_map_markers';\n\nconst style = {\n width: '50%',\n height: '50%',\n left: '50%',\n top: '50%',\n // backgroundColor: 'red',\n margin: 0,\n padding: 0,\n position: 'absolute',\n // opacity: 0.3\n};\n\nexport default function (props) {\n return (\n <div style={style}>\n <GoogleMapMarkers {...props} prerender />\n </div>\n );\n}\n","import { Loader } from '@googlemaps/js-api-loader';\n\nlet loader_;\nlet loadPromise_;\nlet resolveCustomPromise_;\n\nconst _customPromise = new Promise((resolve) => {\n resolveCustomPromise_ = resolve;\n});\n\n// TODO add libraries language and other map options\nexport default (bootstrapURLKeys, heatmapLibrary) => {\n // call from outside google-map-react\n // will be as soon as loadPromise resolved\n if (!bootstrapURLKeys) {\n return _customPromise;\n }\n\n // avoid api to be loaded multiple times\n if (loadPromise_) {\n return loadPromise_;\n }\n\n if (!bootstrapURLKeys.libraries) {\n bootstrapURLKeys.libraries = [];\n }\n\n const libraries = [...bootstrapURLKeys.libraries];\n\n // note: heatmapLibrary will be deprecated on next major\n if (heatmapLibrary) {\n // if heatmapLibrary is present\n // check if we need to add visualization library\n if (libraries.length === 0 || !libraries.includes('visualization')) {\n // if the array isEmpty or visualization is\n // not present, push the visualization library\n libraries.push('visualization');\n }\n console.warn(\n \"heatmapLibrary will be deprecated in the future. Please use { libraries: ['visualization'] } in bootstrapURLKeys property instead\"\n );\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(bootstrapURLKeys).indexOf('callback') > -1) {\n const message = `\"callback\" key in bootstrapURLKeys is not allowed,\n use onGoogleApiLoaded property instead`;\n // eslint-disable-next-line no-console\n console.error(message);\n throw new Error(message);\n }\n }\n\n if (typeof window === 'undefined') {\n throw new Error('google map cannot be loaded outside browser env');\n }\n\n const { key, ...restKeys } = bootstrapURLKeys;\n\n // use single instance of Loader to avoid multiple api loads\n if (!loader_) {\n loader_ = new Loader({\n // need to keep key as a prop for backwards compatibility\n apiKey: key || '',\n ...restKeys,\n libraries,\n });\n }\n\n loadPromise_ = loader_.load().then(() => {\n resolveCustomPromise_(window.google.maps);\n return window.google.maps;\n });\n\n resolveCustomPromise_(loadPromise_);\n\n return loadPromise_;\n};\n","/* eslint-disable import/prefer-default-export */\n\nexport function wrap(n, min, max) {\n const d = max - min;\n return n === max ? n : ((((n - min) % d) + d) % d) + min;\n}\n","import { wrap } from './wrap';\n\nexport default class LatLng {\n static convert = (a) => {\n if (a instanceof LatLng) {\n return a;\n }\n\n if (Array.isArray(a)) {\n return new LatLng(a[0], a[1]);\n }\n\n if ('lng' in a && 'lat' in a) {\n return new LatLng(a.lat, a.lng);\n }\n\n return a;\n };\n\n constructor(lat, lng) {\n if (isNaN(lat) || isNaN(lng)) {\n throw new Error(`Invalid LatLng object: (${lat}, ${lng})`);\n }\n this.lat = +lat;\n this.lng = +lng;\n }\n\n wrap() {\n return new LatLng(this.lat, wrap(this.lng, -180, 180));\n }\n}\n","/* eslint-disable class-methods-use-this */\nimport Point from '@mapbox/point-geometry';\nimport LatLng from './lat_lng';\nimport { wrap } from './wrap';\n\n// A single transform, generally used for a single tile to be scaled, rotated, and zoomed.\nexport default class Transform {\n constructor(tileSize, minZoom, maxZoom) {\n this.tileSize = tileSize || 512; // constant\n\n this._minZoom = minZoom || 0;\n this._maxZoom = maxZoom || 52;\n\n this.latRange = [-85.05113, 85.05113];\n\n this.width = 0;\n this.height = 0;\n this.zoom = 0;\n this.center = new LatLng(0, 0);\n this.angle = 0;\n }\n\n get minZoom() {\n return this._minZoom;\n }\n\n set minZoom(zoom) {\n this._minZoom = zoom;\n this.zoom = Math.max(this.zoom, zoom);\n }\n\n get maxZoom() {\n return this._maxZoom;\n }\n\n set maxZoom(zoom) {\n this._maxZoom = zoom;\n this.zoom = Math.min(this.zoom, zoom);\n }\n\n get worldSize() {\n return this.tileSize * this.scale;\n }\n\n get centerPoint() {\n return new Point(0, 0); // this.size._div(2);\n }\n\n get size() {\n return new Point(this.width, this.height);\n }\n\n get bearing() {\n return (-this.angle / Math.PI) * 180;\n }\n\n set bearing(bearing) {\n this.angle = (-wrap(bearing, -180, 180) * Math.PI) / 180;\n }\n\n get zoom() {\n return this._zoom;\n }\n\n set zoom(zoom) {\n const zoomV = Math.min(Math.max(zoom, this.minZoom), this.maxZoom);\n this._zoom = zoomV;\n this.scale = this.zoomScale(zoomV);\n this.tileZoom = Math.floor(zoomV);\n this.zoomFraction = zoomV - this.tileZoom;\n }\n\n zoomScale(zoom) {\n return Math.pow(2, zoom);\n }\n\n scaleZoom(scale) {\n return Math.log(scale) / Math.LN2;\n }\n\n project(latlng, worldSize) {\n return new Point(\n this.lngX(latlng.lng, worldSize),\n this.latY(latlng.lat, worldSize)\n );\n }\n\n unproject(point, worldSize) {\n return new LatLng(\n this.yLat(point.y, worldSize),\n this.xLng(point.x, worldSize)\n );\n }\n\n get x() {\n return this.lngX(this.center.lng);\n }\n\n get y() {\n return this.latY(this.center.lat);\n }\n\n get point() {\n return new Point(this.x, this.y);\n }\n\n // lat/lon <-> absolute pixel coords convertion\n lngX(lon, worldSize) {\n return ((180 + lon) * (worldSize || this.worldSize)) / 360;\n }\n\n // latitude to absolute y coord\n latY(lat, worldSize) {\n const y =\n (180 / Math.PI) * Math.log(Math.tan(Math.PI / 4 + (lat * Math.PI) / 360));\n return ((180 - y) * (worldSize || this.worldSize)) / 360;\n }\n\n xLng(x, worldSize) {\n return (x * 360) / (worldSize || this.worldSize) - 180;\n }\n\n yLat(y, worldSize) {\n const y2 = 180 - (y * 360) / (worldSize || this.worldSize);\n return (360 / Math.PI) * Math.atan(Math.exp((y2 * Math.PI) / 180)) - 90;\n }\n\n locationPoint(latlng) {\n const p = this.project(latlng);\n return this.centerPoint._sub(this.point._sub(p)._rotate(this.angle));\n }\n\n pointLocation(p) {\n const p2 = this.centerPoint._sub(p)._rotate(-this.angle);\n return this.unproject(this.point.sub(p2));\n }\n}\n","import Point from '@mapbox/point-geometry';\n\nimport LatLng from './lat_lng';\nimport Transform from './transform';\n\nexport default class Geo {\n constructor(tileSize) {\n // left_top view пользует гугл\n // super();\n this.hasSize_ = false;\n this.hasView_ = false;\n this.transform_ = new Transform(tileSize || 512);\n }\n\n setView(center, zoom, bearing) {\n this.transform_.center = LatLng.convert(center);\n this.transform_.zoom = +zoom;\n this.transform_.bearing = +bearing;\n this.hasView_ = true;\n }\n\n setViewSize(width, height) {\n this.transform_.width = width;\n this.transform_.height = height;\n this.hasSize_ = true;\n }\n\n setMapCanvasProjection(maps, mapCanvasProjection) {\n this.maps_ = maps;\n this.mapCanvasProjection_ = mapCanvasProjection;\n }\n\n canProject() {\n return this.hasSize_ && this.hasView_;\n }\n\n hasSize() {\n return this.hasSize_;\n }\n\n /** Returns the pixel position relative to the map center. */\n fromLatLngToCenterPixel(ptLatLng) {\n return this.transform_.locationPoint(LatLng.convert(ptLatLng));\n }\n\n /**\n * Returns the pixel position relative to the map panes,\n * or relative to the map center if there are no panes.\n */\n fromLatLngToDivPixel(ptLatLng) {\n if (this.mapCanvasProjection_) {\n const latLng = new this.maps_.LatLng(ptLatLng.lat, ptLatLng.lng);\n return this.mapCanvasProjection_.fromLatLngToDivPixel(latLng);\n }\n return this.fromLatLngToCenterPixel(ptLatLng);\n }\n\n /** Returns the pixel position relative to the map top-left. */\n fromLatLngToContainerPixel(ptLatLng) {\n if (this.mapCanvasProjection_) {\n const latLng = new this.maps_.LatLng(ptLatLng.lat, ptLatLng.lng);\n return this.mapCanvasProjection_.fromLatLngToContainerPixel(latLng);\n }\n\n const pt = this.fromLatLngToCenterPixel(ptLatLng);\n pt.x -=\n this.transform_.worldSize * Math.round(pt.x / this.transform_.worldSize);\n\n pt.x += this.transform_.width / 2;\n pt.y += this.transform_.height / 2;\n\n return pt;\n }\n\n /** Returns the LatLng for the given offset from the map top-left. */\n fromContainerPixelToLatLng(ptXY) {\n if (this.mapCanvasProjection_) {\n const latLng = this.mapCanvasProjection_.fromContainerPixelToLatLng(ptXY);\n return { lat: latLng.lat(), lng: latLng.lng() };\n }\n\n const ptxy = { ...ptXY };\n ptxy.x -= this.transform_.width / 2;\n ptxy.y -= this.transform_.height / 2;\n const ptRes = this.transform_.pointLocation(Point.convert(ptxy));\n\n ptRes.lng -= 360 * Math.round(ptRes.lng / 360); // convert 2 google format\n return ptRes;\n }\n\n getWidth() {\n return this.transform_.width;\n }\n\n getHeight() {\n return this.transform_.height;\n }\n\n getZoom() {\n return this.transform_.zoom;\n }\n\n getCenter() {\n const ptRes = this.transform_.pointLocation({ x: 0, y: 0 });\n\n return ptRes;\n }\n\n getBounds(margins, roundFactor) {\n const bndT = (margins && margins[0]) || 0;\n const bndR = (margins && margins[1]) || 0;\n const bndB = (margins && margins[2]) || 0;\n const bndL = (margins && margins[3]) || 0;\n\n if (\n this.getWidth() - bndR - bndL > 0 &&\n this.getHeight() - bndT - bndB > 0\n ) {\n const topLeftCorner = this.transform_.pointLocation(\n Point.convert({\n x: bndL - this.getWidth() / 2,\n y: bndT - this.getHeight() / 2,\n })\n );\n const bottomRightCorner = this.transform_.pointLocation(\n Point.convert({\n x: this.getWidth() / 2 - bndR,\n y: this.getHeight() / 2 - bndB,\n })\n );\n\n let res = [\n topLeftCorner.lat,\n topLeftCorner.lng, // NW\n bottomRightCorner.lat,\n bottomRightCorner.lng, // SE\n bottomRightCorner.lat,\n topLeftCorner.lng, // SW\n topLeftCorner.lat,\n bottomRightCorner.lng, // NE\n ];\n\n if (roundFactor) {\n res = res.map((r) => Math.round(r * roundFactor) / roundFactor);\n }\n return res;\n }\n\n return [0, 0, 0, 0];\n }\n}\n","export default function raf(callback) {\n if (window.requestAnimationFrame) {\n return window.requestAnimationFrame(callback);\n }\n\n const nativeRaf =\n window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n\n return nativeRaf\n ? nativeRaf(callback)\n : window.setTimeout(callback, 1e3 / 60);\n}\n","const log2 = Math.log2 ? Math.log2 : (x) => Math.log(x) / Math.LN2;\n\nexport default log2;\n","// source taken from https://github.com/rackt/redux/blob/master/src/utils/pick.js\n\nexport default function pick(obj, fn) {\n return Object.keys(obj).reduce((result, key) => {\n if (fn(obj[key])) {\n result[key] = obj[key]; // eslint-disable-line\n }\n return result;\n }, {});\n}\n","const isEmpty = (val) => {\n // check for empty object {}, array []\n if (val !== null && typeof val === 'object') {\n if (Object.keys(val).length === 0) {\n return true;\n }\n } else if (val === null || val === undefined || val === '') {\n // check for undefined, null and \"\"\n return true;\n }\n return false;\n};\n\nexport default isEmpty;\n","function isObjectLike(value) {\n return !!value && typeof value === 'object';\n}\n\nconst objectToString = Object.prototype.toString;\n\nexport default function isNumber(value) {\n const numberTag = '[object Number]';\n return (\n typeof value === 'number' ||\n (isObjectLike(value) && objectToString.call(value) === numberTag)\n );\n}\n","// http://stackoverflow.com/questions/5899783/detect-safari-chrome-ie-firefox-opera-with-user-agent\nlet detectBrowserResult_ = null;\n\nexport default function detectBrowser() {\n if (detectBrowserResult_) {\n return detectBrowserResult_;\n }\n\n if (typeof navigator !== 'undefined') {\n const isExplorer = navigator.userAgent.indexOf('MSIE') > -1;\n const isFirefox = navigator.userAgent.indexOf('Firefox') > -1;\n const isOpera = navigator.userAgent.toLowerCase().indexOf('op') > -1;\n\n let isChrome = navigator.userAgent.indexOf('Chrome') > -1;\n let isSafari = navigator.userAgent.indexOf('Safari') > -1;\n\n if (isChrome && isSafari) {\n isSafari = false;\n }\n\n if (isChrome && isOpera) {\n isChrome = false;\n }\n\n detectBrowserResult_ = {\n isExplorer,\n isFirefox,\n isOpera,\n isChrome,\n isSafari,\n };\n return detectBrowserResult_;\n }\n\n detectBrowserResult_ = {\n isChrome: true,\n isExplorer: false,\n isFirefox: false,\n isOpera: false,\n isSafari: false,\n };\n\n return detectBrowserResult_;\n}\n","// source taken from https://github.com/rackt/redux/blob/master/src/utils/isPlainObject.js\nconst fnToString = (fn) => Function.prototype.toString.call(fn);\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n const proto =\n typeof obj.constructor === 'function'\n ? Object.getPrototypeOf(obj)\n : Object.prototype;\n\n if (proto === null) {\n return true;\n }\n\n const constructor = proto.constructor;\n\n return (\n typeof constructor === 'function' &&\n constructor instanceof constructor &&\n fnToString(constructor) === fnToString(Object)\n );\n}\n","// feature detection for passive support\n// see: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\nfunction hasPassiveSupport() {\n let passiveSupported = false;\n\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n passiveSupported = true;\n },\n });\n\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n } catch (err) {\n passiveSupported = false;\n }\n\n return passiveSupported;\n}\n\nexport default function addPassiveEventListener(\n element,\n eventName,\n func,\n capture\n) {\n element.addEventListener(\n eventName,\n func,\n hasPassiveSupport()\n ? {\n capture,\n passive: true,\n }\n : capture\n );\n}\n","/* eslint-disable */\n/**\n* Detect Element Resize.\n* Forked in order to guard against unsafe 'window' and 'document' references.\n*\n* https://github.com/sdecima/javascript-detect-element-resize\n* Sebastian Decima\n*\n* version: 0.5.3\n**/\n\nimport addPassiveEventListener from './passiveEvents';\n\n// Reliable `window` and `document` detection\nvar canUseDOM = !!(typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement);\n\n// Check `document` and `window` in case of server-side rendering\nvar _window;\nif (canUseDOM) {\n _window = window;\n} else if (typeof self !== 'undefined') {\n _window = self;\n} else {\n _window = this;\n}\n\nvar attachEvent = typeof document !== 'undefined' && document.attachEvent;\nvar stylesCreated = false;\n\nif (canUseDOM && !attachEvent) {\n var requestFrame = (function () {\n var raf = _window.requestAnimationFrame ||\n _window.mozRequestAnimationFrame ||\n _window.webkitRequestAnimationFrame ||\n function (fn) {\n return _window.setTimeout(fn, 20);\n };\n return function (fn) {\n return raf(fn);\n };\n })();\n\n var cancelFrame = (function () {\n var cancel = _window.cancelAnimationFrame ||\n _window.mozCancelAnimationFrame ||\n _window.webkitCancelAnimationFrame ||\n _window.clearTimeout;\n return function (id) {\n return cancel(id);\n };\n })();\n\n var resetTriggers = function (element) {\n var triggers = element.__resizeTriggers__,\n expand = triggers.firstElementChild,\n contract = triggers.lastElementChild,\n expandChild = expand.firstElementChild;\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + 'px';\n expandChild.style.height = expand.offsetHeight + 1 + 'px';\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n };\n\n var checkTriggers = function (element) {\n return element.offsetWidth != element.__resizeLast__.width ||\n element.offsetHeight != element.__resizeLast__.height;\n };\n\n var scrollListener = function (e) {\n var element = this;\n resetTriggers(this);\n if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\n this.__resizeRAF__ = requestFrame(function () {\n if (checkTriggers(element)) {\n element.__resizeLast__.width = element.offsetWidth;\n element.__resizeLast__.height = element.offsetHeight;\n element.__resizeListeners__.forEach(function (fn) {\n fn.call(element, e);\n });\n }\n });\n };\n\n /* Detect CSS Animations support to detect element display/re-attach */\n var animation = false,\n animationstring = 'animation',\n keyframeprefix = '',\n animationstartevent = 'animationstart',\n domPrefixes = 'Webkit Moz O ms'.split(' '),\n startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(\n ' '\n ),\n pfx = '';\n\n if (canUseDOM) {\n var elm = document.createElement('fakeelement');\n if (elm.style.animationName !== undefined) {\n animation = true;\n }\n\n if (animation === false) {\n for (var i = 0; i < domPrefixes.length; i++) {\n if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n pfx = domPrefixes[i];\n animationstring = pfx + 'Animation';\n keyframeprefix = '-' + pfx.toLowerCase() + '-';\n animationstartevent = startEvents[i];\n animation = true;\n break;\n }\n }\n }\n }\n\n var animationName = 'resizeanim';\n var animationKeyframes = '@' +\n keyframeprefix +\n 'keyframes ' +\n animationName +\n ' { from { opacity: 0; } to { opacity: 0; } } ';\n var animationStyle = keyframeprefix +\n 'animation: 1ms ' +\n animationName +\n '; ';\n}\n\nvar createStyles = function () {\n if (!stylesCreated) {\n //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n var css = (animationKeyframes ? animationKeyframes : '') +\n '.resize-triggers { ' +\n (animationStyle ? animationStyle : '') +\n 'visibility: hidden; opacity: 0; } ' +\n '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n head = document.head || document.getElementsByTagName('head')[0],\n style = document.createElement('style');\n\n style.type = 'text/css';\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n\n head.appendChild(style);\n stylesCreated = true;\n }\n};\n\nvar addResizeListener = function (element, fn) {\n if (element.parentNode === undefined) {\n var tempParentDiv = document.createElement('div');\n element.parentNode = tempParentDiv;\n }\n element = element.parentNode;\n if (attachEvent)\n element.attachEvent('onresize', fn);\n else {\n if (!element.__resizeTriggers__) {\n if (getComputedStyle(element).position == 'static')\n element.style.position = 'relative';\n createStyles();\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n (element.__resizeTriggers__ = document.createElement(\n 'div'\n )).className = 'resize-triggers';\n element.__resizeTriggers__.innerHTML = '<div class=\"expand-trigger\"><div></div></div>' +\n '<div class=\"contract-trigger\"></div>';\n element.appendChild(element.__resizeTriggers__);\n resetTriggers(element);\n\n addPassiveEventListener(element, 'scroll', scrollListener, true);\n\n /* Listen for a css animation to detect element display/re-attach */\n animationstartevent &&\n element.__resizeTriggers__.addEventListener(\n animationstartevent,\n function (e) {\n if (e.animationName == animationName) resetTriggers(element);\n }\n );\n }\n element.__resizeListeners__.push(fn);\n }\n};\n\nvar removeResizeListener = function (element, fn) {\n element = element.parentNode;\n if (attachEvent)\n element.detachEvent('onresize', fn);\n else {\n element.__resizeListeners__.splice(\n element.__resizeListeners__.indexOf(fn),\n 1\n );\n if (!element.__resizeListeners__.length) {\n element.removeEventListener('scroll', scrollListener);\n element.__resizeTriggers__ = !element.removeChild(\n element.__resizeTriggers__\n );\n }\n }\n};\n\nexport {\n addResizeListener,\n removeResizeListener,\n};\n","/* eslint-disable import/no-extraneous-dependencies, react/forbid-prop-types, react/no-find-dom-node, no-console, no-undef */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\n\n// helpers\nimport GoogleMapMap from './google_map_map';\nimport MarkerDispatcher from './marker_dispatcher';\nimport GoogleMapMarkers from './google_map_markers';\nimport GoogleMapMarkersPrerender from './google_map_markers_prerender';\nimport { generateHeatmap, optionsHeatmap } from './google_heatmap';\n\n// loaders\nimport googleMapLoader from './loaders/google_map_loader';\n\n// lib\nimport Geo from './lib/geo';\n\n// tools\nimport raf from './utils/raf';\nimport log2 from './utils/log2';\nimport omit from './utils/omit';\nimport pick from './utils/pick';\nimport isEmpty from './utils/isEmpty';\nimport isNumber from './utils/isNumber';\nimport detectBrowser from './utils/detect';\nimport shallowEqual from './utils/shallowEqual';\nimport isPlainObject from './utils/isPlainObject';\nimport isArraysEqualEps from './utils/isArraysEqualEps';\nimport {\n addResizeListener,\n removeResizeListener,\n} from './utils/detectElementResize';\nimport addPassiveEventListener from './utils/passiveEvents';\n\n// consts\nconst kEPS = 0.00001;\nconst K_GOOGLE_TILE_SIZE = 256;\n// real minZoom calculated here _getMinZoom\nconst K_IDLE_TIMEOUT = 100;\nconst K_IDLE_CLICK_TIMEOUT = 300;\nconst DEFAULT_MIN_ZOOM = 3;\n// Starting with version 3.32, the maps API calls `draw()` each frame during\n// a zoom animation.\nconst DRAW_CALLED_DURING_ANIMATION_VERSION = 32;\nconst IS_REACT_16 = ReactDOM.createPortal !== undefined;\n\nconst createPortal = IS_REACT_16\n ? ReactDOM.createPortal\n : ReactDOM.unstable_renderSubtreeIntoContainer;\n\nfunction defaultOptions_(/* maps */) {\n return {\n overviewMapControl: false,\n streetViewControl: false,\n rotateControl: true,\n mapTypeControl: false,\n // disable poi\n styles: [\n {\n featureType: 'poi',\n elementType: 'labels',\n stylers: [{ visibility: 'off' }],\n },\n ],\n minZoom: DEFAULT_MIN_ZOOM, // dynamically recalculted if possible during init\n };\n}\n\nconst latLng2Obj = (latLng) =>\n isPlainObject(latLng) ? latLng : { lat: latLng[0], lng: latLng[1] };\n\nconst _checkMinZoom = (zoom, minZoom) => {\n if (process.env.NODE_ENV !== 'production') {\n if (zoom < minZoom) {\n console.warn(\n 'GoogleMap: ' + // eslint-disable-line\n 'minZoom option is less than recommended ' +\n 'minZoom option for your map sizes.\\n' +\n 'overrided to value ' +\n minZoom\n );\n }\n }\n\n if (minZoom < zoom) {\n return zoom;\n }\n return minZoom;\n};\n\nconst isFullScreen = () =>\n document.fullscreen ||\n document.webkitIsFullScreen ||\n document.mozFullScreen ||\n document.msFullscreenElement;\n\nclass GoogleMap extends Component {\n static propTypes = {\n apiKey: PropTypes.string,\n bootstrapURLKeys: PropTypes.any,\n\n defaultCenter: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.shape({\n lat: PropTypes.number,\n lng: PropTypes.number,\n }),\n ]),\n center: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.shape({\n lat: PropTypes.number,\n lng: PropTypes.number,\n }),\n ]),\n defaultZoom: PropTypes.number,\n zoom: PropTypes.number,\n onBoundsChange: PropTypes.func,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n onChildClick: PropTypes.func,\n onChildMouseDown: PropTypes.func,\n onChildMouseUp: PropTypes.func,\n onChildMouseMove: PropTypes.func,\n onChildMouseEnter: PropTypes.func,\n onChildMouseLeave: PropTypes.func,\n onZoomAnimationStart: PropTypes.func,\n onZoomAnimationEnd: PropTypes.func,\n onDrag: PropTypes.func,\n onDragEnd: PropTypes.func,\n onMapTypeIdChange: PropTypes.func,\n onTilesLoaded: PropTypes.func,\n options: PropTypes.any,\n distanceToMouse: PropTypes.func,\n hoverDistance: PropTypes.number,\n debounced: PropTypes.bool,\n margin: PropTypes.array,\n googleMapLoader: PropTypes.any,\n onGoogleApiLoaded: PropTypes.func,\n yesIWantToUseGoogleMapApiInternals: PropTypes.bool,\n draggable: PropTypes.bool,\n style: PropTypes.any,\n resetBoundsOnResize: PropTypes.bool,\n layerTypes: PropTypes.arrayOf(PropTypes.string), // ['TransitLayer', 'TrafficLayer']\n shouldUnregisterMapOnUnmount: PropTypes.bool,\n };\n\n static defaultProps = {\n distanceToMouse(pt, mousePos /* , markerProps */) {\n return Math.sqrt(\n (pt.x - mousePos.x) * (pt.x - mousePos.x) +\n (pt.y - mousePos.y) * (pt.y - mousePos.y)\n );\n },\n hoverDistance: 30,\n debounced: true,\n options: defaultOptions_,\n googleMapLoader,\n yesIWantToUseGoogleMapApiInternals: false,\n style: {\n width: '100%',\n height: '100%',\n margin: 0,\n padding: 0,\n position: 'relative',\n },\n layerTypes: [],\n heatmap: {},\n heatmapLibrary: false,\n shouldUnregisterMapOnUnmount: true,\n };\n\n static googleMapLoader = googleMapLoader; // eslint-disable-line\n\n constructor(props) {\n super(props);\n this.mounted_ = false;\n this.initialized_ = false;\n this.googleApiLoadedCalled_ = false;\n\n this.map_ = null;\n this.maps_ = null;\n this.prevBounds_ = null;\n this.heatmap = null;\n\n this.layers_ = {};\n\n this.mouse_ = null;\n this.mouseMoveTime_ = 0;\n this.boundingRect_ = null;\n this.mouseInMap_ = true;\n\n this.dragTime_ = 0;\n this.fireMouseEventOnIdle_ = false;\n this.updateCounter_ = 0;\n\n this.markersDispatcher_ = new MarkerDispatcher(this);\n this.geoService_ = new Geo(K_GOOGLE_TILE_SIZE);\n this.centerIsObject_ = isPlainObject(this.props.center);\n\n this.minZoom_ = DEFAULT_MIN_ZOOM;\n this.defaultDraggableOption_ = true;\n\n this.zoomControlClickTime_ = 0;\n\n this.childMouseDownArgs_ = null;\n this.childMouseUpTime_ = 0;\n\n this.googleMapDom_ = null;\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.props.apiKey) {\n console.warn(\n 'GoogleMap: ' + // eslint-disable-line no-console\n 'apiKey is deprecated, use ' +\n 'bootstrapURLKeys={{key: YOUR_API_KEY}} instead.'\n );\n }\n\n if (this.props.onBoundsChange) {\n console.warn(\n 'GoogleMap: ' + // eslint-disable-line no-console\n 'onBoundsChange is deprecated, use ' +\n 'onChange({center, zoom, bounds, ...other}) instead.'\n );\n }\n\n if (isEmpty(this.props.center) && isEmpty(this.props.defaultCenter)) {\n console.warn(\n 'GoogleMap: center or defaultCenter property must be defined' // eslint-disable-line no-console\n );\n }\n\n if (isEmpty(this.props.zoom) && isEmpty(this.props.defaultZoom)) {\n console.warn(\n 'GoogleMap: zoom or defaultZoom property must be defined' // eslint-disable-line no-console\n );\n }\n }\n\n if (this._isCenterDefined(this.props.center || this.props.defaultCenter)) {\n const propsCenter = latLng2Obj(\n this.props.center || this.props.defaultCenter\n );\n this.geoService_.setView(\n propsCenter,\n this.props.zoom || this.props.defaultZoom,\n 0\n );\n }\n\n this.zoomAnimationInProgress_ = false;\n\n this.state = {\n overlay: null,\n };\n }\n\n componentDidMount() {\n this.mounted_ = true;\n this.markersDispatcher_ = new MarkerDispatcher(this);\n addPassiveEventListener(window, 'resize', this._onWindowResize, false);\n addPassiveEventListener(window, 'keydown', this._onKeyDownCapture, true);\n const mapDom = ReactDOM.findDOMNode(this.googleMapDom_);\n // gmap can't prevent map drag if mousedown event already occured\n // the only workaround I find is prevent mousedown native browser event\n\n if (mapDom) {\n addPassiveEventListener(\n mapDom,\n 'mousedown',\n this._onMapMouseDownNative,\n true\n );\n }\n\n addPassiveEventListener(window, 'mouseup', this._onChildMouseUp, false);\n const bootstrapURLKeys = {\n ...(this.props.apiKey && { key: this.props.apiKey }),\n ...this.props.bootstrapURLKeys,\n };\n\n this.props.googleMapLoader(bootstrapURLKeys, this.props.heatmapLibrary); // we can start load immediatly\n\n setTimeout(\n () => {\n // to detect size\n this._setViewSize();\n if (\n this._isCenterDefined(this.props.center || this.props.defaultCenter)\n ) {\n this._initMap();\n }\n },\n 0,\n this\n );\n if (this.props.resetBoundsOnResize) {\n const that = this;\n addResizeListener(mapDom, that._mapDomResizeCallback);\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // draggable does not affect inner components\n return (\n !shallowEqual(\n omit(this.props, ['draggable']),\n omit(nextProps, ['draggable'])\n ) || !shallowEqual(this.state, nextState)\n );\n }\n\n componentDidUpdate(prevProps) {\n if (process.env.NODE_ENV !== 'production') {\n if (!shallowEqual(prevProps.defaultCenter, this.props.defaultCenter)) {\n console.warn(\n \"GoogleMap: defaultCenter prop changed. You can't change default props.\"\n );\n }\n\n if (!shallowEqual(prevProps.defaultZoom, this.props.defaultZoom)) {\n console.warn(\n \"GoogleMap: defaultZoom prop changed. You can't change default props.\"\n );\n }\n }\n\n if (\n !this._isCenterDefined(prevProps.center) &&\n this._isCenterDefined(this.props.center)\n ) {\n setTimeout(() => this._initMap(), 0);\n }\n\n if (this.map_) {\n const centerLatLng = this.geoService_.getCenter();\n if (this._isCenterDefined(this.props.center)) {\n const currentCenter = latLng2Obj(this.props.center);\n const prevCenter = this._isCenterDefined(prevProps.center)\n ? latLng2Obj(prevProps.center)\n : null;\n\n if (\n !prevCenter ||\n Math.abs(currentCenter.lat - prevCenter.lat) +\n Math.abs(currentCenter.lng - prevCenter.lng) >\n kEPS\n ) {\n if (\n Math.abs(currentCenter.lat - centerLatLng.lat) +\n Math.abs(currentCenter.lng - centerLatLng.lng) >\n kEPS\n ) {\n this.map_.panTo({\n lat: currentCenter.lat,\n lng: currentCenter.lng,\n });\n }\n }\n }\n\n if (!isEmpty(this.props.zoom)) {\n // if zoom chaged by user\n if (Math.abs(this.props.zoom - prevProps.zoom) > 0) {\n this.map_.setZoom(this.props.zoom);\n }\n }\n\n if (!isEmpty(prevProps.draggable) && isEmpty(this.props.draggable)) {\n // reset to default\n this.map_.setOptions({ draggable: this.defaultDraggableOption_ });\n } else if (!shallowEqual(prevProps.draggable, this.props.draggable)) {\n // also prevent this on window 'mousedown' event to prevent map move\n this.map_.setOptions({ draggable: this.props.draggable });\n }\n\n // use shallowEqual to try avoid calling map._setOptions if only the ref changes\n if (\n !isEmpty(this.props.options) &&\n !shallowEqual(prevProps.options, this.props.options)\n ) {\n const mapPlainObjects = pick(this.maps_, isPlainObject);\n let options =\n typeof this.props.options === 'function'\n ? this.props.options(mapPlainObjects)\n : this.props.options;\n // remove zoom, center and draggable options as these are managed by google-maps-react\n options = omit(options, ['zoom', 'center', 'draggable']);\n\n if ('minZoom' in options) {\n const minZoom = this._computeMinZoom(options.minZoom);\n options.minZoom = _checkMinZoom(options.minZoom, minZoom);\n }\n\n this.map_.setOptions(options);\n }\n\n if (!shallowEqual(this.props.layerTypes, prevProps.layerTypes)) {\n Object.keys(this.layers_).forEach((layerKey) => {\n this.layers_[layerKey].setMap(null);\n delete this.layers_[layerKey];\n });\n this._setLayers(this.props.layerTypes);\n }\n\n if (\n this.heatmap &&\n !shallowEqual(this.props.heatmap.positions, prevProps.heatmap.positions)\n ) {\n this.heatmap.setData(\n this.props.heatmap.positions.map((p) => ({\n location: new this.maps_.LatLng(p.lat, p.lng),\n weight: p.weight,\n }))\n );\n }\n if (\n this.heatmap &&\n !shallowEqual(this.props.heatmap.options, prevProps.heatmap.options)\n ) {\n Object.keys(this.props.heatmap.options).forEach((option) => {\n this.heatmap.set(option, this.props.heatmap.options[option]);\n });\n }\n }\n // emit actions\n this.markersDispatcher_.emit('kON_CHANGE');\n\n if (!shallowEqual(this.props.hoverDistance, prevProps.hoverDistance)) {\n this.markersDispatcher_.emit('kON_MOUSE_POSITION_CHANGE');\n }\n }\n\n componentWillUnmount() {\n this.mounted_ = false;\n const mapDom = ReactDOM.findDOMNode(this.googleMapDom_);\n if (mapDom) {\n mapDom.removeEventListener('mousedown', this._onMapMouseDownNative, true);\n }\n window.removeEventListener('resize', this._onWindowResize);\n window.removeEventListener('keydown', this._onKeyDownCapture);\n window.removeEventListener('mouseup', this._onChildMouseUp, false);\n if (this.props.resetBoundsOnResize) {\n removeResizeListener(mapDom, this._mapDomResizeCallback);\n }\n\n if (this.overlay_) {\n // this triggers overlay_.onRemove(), which will unmount the <GoogleMapMarkers/>\n this.overlay_.setMap(null);\n }\n\n if (this.maps_ && this.map_ && this.props.shouldUnregisterMapOnUnmount) {\n // fix google, as otherwise listeners works even without map\n this.map_.setOptions({ scrollwheel: false });\n this.maps_.event.clearInstanceListeners(this.map_);\n }\n\n if (this.props.shouldUnregisterMapOnUnmount) {\n this.map_ = null;\n this.maps_ = null;\n }\n this.markersDispatcher_.dispose();\n\n this.resetSizeOnIdle_ = false;\n\n if (this.props.shouldUnregisterMapOnUnmount) {\n delete this.map_;\n delete this.markersDispatcher_;\n }\n }\n\n // calc minZoom if map size available\n // it's better to not set minZoom less than this calculation gives\n // otherwise there is no homeomorphism between screen coordinates and map\n // (one map coordinate can have different screen coordinates)\n _getMinZoom = () => {\n if (this.geoService_.getWidth() > 0 || this.geoService_.getHeight() > 0) {\n const tilesPerWidth =\n Math.ceil(this.geoService_.getWidth() / K_GOOGLE_TILE_SIZE) + 2;\n const tilesPerHeight =\n Math.ceil(this.geoService_.getHeight() / K_GOOGLE_TILE_SIZE) + 2;\n const maxTilesPerDim = Math.max(tilesPerWidth, tilesPerHeight);\n return Math.ceil(log2(maxTilesPerDim));\n }\n return DEFAULT_MIN_ZOOM;\n };\n\n _computeMinZoom = (minZoom) => {\n if (!isEmpty(minZoom)) {\n return minZoom;\n }\n return this._getMinZoom();\n };\n\n _mapDomResizeCallback = () => {\n this.resetSizeOnIdle_ = true;\n if (this.maps_) {\n const originalCenter = this.props.center || this.props.defaultCenter;\n const currentCenter = this.map_.getCenter();\n this.maps_.event.trigger(this.map_, 'resize');\n this.map_.setCenter(\n this.props.resetBoundsOnResize ? originalCenter : currentCenter\n );\n }\n };\n\n _setLayers = (layerTypes) => {\n layerTypes.forEach((layerType) => {\n this.layers_[layerType] = new this.maps_[layerType]();\n this.layers_[layerType].setMap(this.map_);\n });\n };\n\n _renderPortal = () => (\n <GoogleMapMarkers\n experimental={this.props.experimental}\n onChildClick={this._onChildClick}\n onChildMouseDown={this._onChildMouseDown}\n onChildMouseEnter={this._onChildMouseEnter}\n onChildMouseLeave={this._onChildMouseLeave}\n geoService={this.geoService_}\n insideMapPanes\n distanceToMouse={this.props.distanceToMouse}\n getHoverDistance={this._getHoverDistance}\n dispatcher={this.markersDispatcher_}\n />\n );\n\n _initMap = () => {\n // only initialize the map once\n if (this.initialized_) {\n return;\n }\n this.initialized_ = true;\n\n const propsCenter = latLng2Obj(\n this.props.center || this.props.defaultCenter\n );\n this.geoService_.setView(\n propsCenter,\n this.props.zoom || this.props.defaultZoom,\n 0\n );\n\n this._onBoundsChanged(); // now we can calculate map bounds center etc...\n\n const bootstrapURLKeys = {\n ...(this.props.apiKey && { key: this.props.apiKey }),\n ...this.props.bootstrapURLKeys,\n };\n\n this.props\n .googleMapLoader(bootstrapURLKeys, this.props.heatmapLibrary)\n .then((maps) => {\n if (!this.mounted_) {\n return;\n }\n\n const centerLatLng = this.geoService_.getCenter();\n\n const propsOptions = {\n zoom: this.props.zoom || this.props.defaultZoom,\n center: new maps.LatLng(centerLatLng.lat, centerLatLng.lng),\n };\n\n // Start Heatmap\n if (this.props.heatmap.positions) {\n Object.assign(this, {\n heatmap: generateHeatmap(maps, this.props.heatmap),\n });\n optionsHeatmap(this.heatmap, this.props.heatmap);\n }\n // End Heatmap\n\n // prevent to exapose full api\n // next props must be exposed (console.log(Object.keys(pick(maps, isPlainObject))))\n // \"Animation\", \"ControlPosition\", \"MapTypeControlStyle\", \"MapTypeId\",\n // \"NavigationControlStyle\", \"ScaleControlStyle\", \"StrokePosition\",\n // \"SymbolPath\", \"ZoomControlStyle\",\n // \"event\", \"DirectionsStatus\", \"DirectionsTravelMode\", \"DirectionsUnitSystem\",\n // \"DistanceMatrixStatus\",\n // \"DistanceMatrixElementStatus\", \"ElevationStatus\", \"GeocoderLocationType\",\n // \"GeocoderStatus\", \"KmlLayerStatus\",\n // \"MaxZoomStatus\", \"StreetViewStatus\", \"TransitMode\", \"TransitRoutePreference\",\n // \"TravelMode\", \"UnitSystem\"\n const mapPlainObjects = pick(maps, isPlainObject);\n const options =\n typeof this.props.options === 'function'\n ? this.props.options(mapPlainObjects)\n : this.props.options;\n const defaultOptions = defaultOptions_(mapPlainObjects);\n\n const draggableOptions = !isEmpty(this.props.draggable) && {\n draggable: this.props.draggable,\n };\n\n const minZoom = this._computeMinZoom(options.minZoom);\n this.minZoom_ = minZoom;\n\n const preMapOptions = {\n ...defaultOptions,\n minZoom,\n ...options,\n ...propsOptions,\n };\n\n this.defaultDraggableOption_ = !isEmpty(preMapOptions.draggable)\n ? preMapOptions.draggable\n : this.defaultDraggableOption_;\n\n const mapOptions = {\n ...preMapOptions,\n ...draggableOptions,\n };\n\n mapOptions.minZoom = _checkMinZoom(mapOptions.minZoom, minZoom);\n\n const map = new maps.Map(\n ReactDOM.findDOMNode(this.googleMapDom_),\n mapOptions\n );\n\n this.map_ = map;\n this.maps_ = maps;\n\n this._setLayers(this.props.layerTypes);\n\n // Parse `google.maps.version` to capture the major version number.\n const versionMatch = maps.version.match(/^3\\.(\\d+)\\./);\n // The major version is the first (and only) captured group.\n const mapsVersion = versionMatch && Number(versionMatch[1]);\n\n // render in overlay\n const this_ = this;\n const overlay = Object.assign(new maps.OverlayView(), {\n onAdd() {\n const K_MAX_WIDTH =\n typeof screen !== 'undefined' ? `${screen.width}px` : '2000px';\n const K_MAX_HEIGHT =\n typeof screen !== 'undefined' ? `${screen.height}px` : '2000px';\n\n const div = document.createElement('div');\n div.style.backgroundColor = 'transparent';\n div.style.position = 'absolute';\n div.style.left = '0px';\n div.style.top = '0px';\n div.style.width = K_MAX_WIDTH; // prevents some chrome draw defects\n div.style.height = K_MAX_HEIGHT;\n\n if (this_.props.overlayViewDivStyle) {\n const { overlayViewDivStyle } = this_.props;\n if (typeof overlayViewDivStyle === 'object') {\n Object.keys(overlayViewDivStyle).forEach((property) => {\n div.style[property] = overlayViewDivStyle[property];\n });\n }\n }\n\n const panes = this.getPanes();\n panes.overlayMouseTarget.appendChild(div);\n this_.geoService_.setMapCanvasProjection(\n maps,\n overlay.getProjection()\n );\n\n if (!IS_REACT_16) {\n createPortal(\n this_,\n this_._renderPortal(),\n div,\n // remove prerendered markers\n () => this_.setState({ overlay: div })\n );\n } else {\n this_.setState({ overlay: div });\n }\n },\n\n onRemove() {\n const renderedOverlay = this_.state.overlay;\n if (renderedOverlay && !IS_REACT_16) {\n ReactDOM.unmountComponentAtNode(renderedOverlay);\n }\n this_.setState({ overlay: null });\n },\n\n draw() {\n this_.updateCounter_++;\n this_._onBoundsChanged(map, maps, !this_.props.debounced);\n\n if (!this_.googleApiLoadedCalled_) {\n this_._onGoogleApiLoaded({ map, maps, ref: this_.googleMapDom_ });\n this_.googleApiLoadedCalled_ = true;\n }\n\n if (this_.mouse_) {\n const latLng = this_.geoService_.fromContainerPixelToLatLng(\n this_.mouse_\n );\n this_.mouse_.lat = latLng.lat;\n this_.mouse_.lng = latLng.lng;\n }\n\n this_._onChildMouseMove();\n\n if (this_.markersDispatcher_) {\n this_.markersDispatcher_.emit('kON_CHANGE');\n if (this_.fireMouseEventOnIdle_) {\n this_.markersDispatcher_.emit('kON_MOUSE_POSITION_CHANGE');\n }\n }\n },\n });\n\n this.overlay_ = overlay;\n\n overlay.setMap(map);\n if (this.props.heatmap.positions) {\n this.heatmap.setMap(map);\n }\n\n if (this.props.onTilesLoaded) {\n maps.event.addListener(map, 'tilesloaded', () => {\n this_._onTilesLoaded();\n });\n }\n\n maps.event.addListener(map, 'zoom_changed', () => {\n // recalc position at zoom start\n if (this_.geoService_.getZoom() !== map.getZoom()) {\n if (!this_.zoomAnimationInProgress_) {\n this_.zoomAnimationInProgress_ = true;\n this_._onZoomAnimationStart(map.zoom);\n }\n\n // If draw() is not called each frame during a zoom animation,\n // simulate it.\n if (mapsVersion < DRAW_CALLED_DURING_ANIMATION_VERSION) {\n const TIMEOUT_ZOOM = 300;\n\n if (\n new Date().getTime() - this.zoomControlClickTime_ <\n TIMEOUT_ZOOM\n ) {\n // there is strange Google Map Api behavior in chrome when zoom animation of map\n // is started only on second raf call, if was click on zoom control\n // or +- keys pressed, so i wait for two rafs before change state\n\n // this does not fully prevent animation jump\n // but reduce it's occurence probability\n raf(() =>\n raf(() => {\n this_.updateCounter_++;\n this_._onBoundsChanged(map, maps);\n })\n );\n } else {\n this_.updateCounter_++;\n this_._onBoundsChanged(map, maps);\n }\n }\n }\n });\n\n maps.event.addListener(map, 'idle', () => {\n if (this.resetSizeOnIdle_) {\n this._setViewSize();\n const currMinZoom = this._computeMinZoom(options.minZoom);\n\n if (currMinZoom !== this.minZoom_) {\n this.minZoom_ = currMinZoom;\n map.setOptions({ minZoom: currMinZoom });\n }\n\n this.resetSizeOnIdle_ = false;\n }\n\n if (this_.zoomAnimationInProgress_) {\n this_.zoomAnimationInProgress_ = false;\n this_._onZoomAnimationEnd(map.zoom);\n }\n\n this_.updateCounter_++;\n this_._onBoundsChanged(map, maps);\n\n this_.dragTime_ = 0;\n\n if (this_.markersDispatcher_) {\n this_.markersDispatcher_.emit('kON_CHANGE');\n }\n });\n\n maps.event.addListener(map, 'mouseover', () => {\n // has advantage over div MouseLeave\n this_.mouseInMap_ = true;\n });\n\n // an alternative way to know the mouse is back within the map\n // This would not fire when clicking/interacting with google maps\n // own on-map countrols+markers. This handles an edge case for touch devices\n // + 'draggable:false' custom option. See #332 for more details.\n maps.event.addListener(map, 'click', () => {\n this_.mouseInMap_ = true;\n });\n\n maps.event.addListener(map, 'mouseout', () => {\n // has advantage over div MouseLeave\n this_.mouseInMap_ = false;\n this_.mouse_ = null;\n this_.markersDispatcher_.emit('kON_MOUSE_POSITION_CHANGE');\n });\n\n maps.event.addListener(map, 'drag', () => {\n this_.dragTime_ = new Date().getTime();\n this_._onDrag(map);\n });\n\n maps.event.addListener(map, 'dragend', () => {\n // 'dragend' fires on mouse release.\n // 'idle' listener waits until drag inertia ends before firing `onDragEnd`\n const idleListener = maps.event.addListener(map, 'idle', () => {\n maps.event.removeListener(idleListener);\n this_._onDragEnd(map);\n });\n });\n // user choosing satellite vs roads, etc\n maps.event.addListener(map, 'maptypeid_changed', () => {\n this_._onMapTypeIdChange(map.getMapTypeId());\n });\n })\n .catch((e) => {\n // notify callback of load failure\n this._onGoogleApiLoaded({\n map: null,\n maps: null,\n ref: this.googleMapDom_,\n });\n console.error(e); // eslint-disable-line no-console\n throw e;\n });\n };\n\n _onGoogleApiLoaded = (...args) => {\n if (this.props.onGoogleApiLoaded) {\n if (\n process.env.NODE_ENV !== 'production' &&\n this.props.yesIWantToUseGoogleMapApiInternals !== true\n ) {\n console.warn(\n 'GoogleMap: ' + // eslint-disable-line\n 'Usage of internal api objects is dangerous ' +\n 'and can cause a lot of issues.\\n' +\n 'To hide this warning add yesIWantToUseGoogleMapApiInternals={true} ' +\n 'to <GoogleMap instance'\n );\n }\n\n this.props.onGoogleApiLoaded(...args);\n }\n };\n\n _getHoverDistance = () => this.props.hoverDistance;\n\n _onDrag = (...args) => this.props.onDrag && this.props.onDrag(...args);\n\n _onDragEnd = (...args) =>\n this.props.onDragEnd && this.props.onDragEnd(...args);\n\n _onMapTypeIdChange = (...args) =>\n this.props.onMapTypeIdChange && this.props.onMapTypeIdChange(...args);\n\n _onZoomAnimationStart = (...args) =>\n this.props.onZoomAnimationStart && this.props.onZoomAnimationStart(...args);\n\n _onZoomAnimationEnd = (...args) =>\n this.props.onZoomAnimationEnd && this.props.onZoomAnimationEnd(...args);\n\n _onTilesLoaded = () => this.props.onTilesLoaded && this.props.onTilesLoaded();\n\n _onChildClick = (...args) => {\n if (this.props.onChildClick) {\n return this.props.onChildClick(...args);\n }\n return undefined;\n };\n\n _onChildMouseDown = (hoverKey, childProps) => {\n this.childMouseDownArgs_ = [hoverKey, childProps];\n if (this.props.onChildMouseDown) {\n this.props.onChildMouseDown(hoverKey, childProps, { ...this.mouse_ });\n }\n };\n\n // this method works only if this.props.onChildMouseDown was called\n _onChildMouseUp = () => {\n if (this.childMouseDownArgs_) {\n if (this.props.onChildMouseUp) {\n this.props.onChildMouseUp(...this.childMouseDownArgs_, {\n ...this.mouse_,\n });\n }\n this.childMouseDownArgs_ = null;\n this.childMouseUpTime_ = new Date().getTime();\n }\n };\n\n // this method works only if this.props.onChildMouseDown was called\n _onChildMouseMove = () => {\n if (this.childMouseDownArgs_) {\n if (this.props.onChildMouseMove) {\n this.props.onChildMouseMove(...this.childMouseDownArgs_, {\n ...this.mouse_,\n });\n }\n }\n };\n\n _onChildMouseEnter = (...args) => {\n if (this.props.onChildMouseEnter) {\n return this.props.onChildMouseEnter(...args);\n }\n return undefined;\n };\n\n _onChildMouseLeave = (...args) => {\n if (this.props.onChildMouseLeave) {\n return this.props.onChildMouseLeave(...args);\n }\n return undefined;\n };\n\n _setViewSize = () => {\n if (!this.mounted_) return;\n if (isFullScreen()) {\n this.geoService_.setViewSize(window.innerWidth, window.innerHeight);\n } else {\n const mapDom = ReactDOM.findDOMNode(this.googleMapDom_);\n this.geoService_.setViewSize(mapDom.clientWidth, mapDom.clientHeight);\n }\n this._onBoundsChanged();\n };\n\n _onWindowResize = () => {\n this.resetSizeOnIdle_ = true;\n };\n\n _onMapMouseMove = (e) => {\n if (!this.mouseInMap_) return;\n\n const currTime = new Date().getTime();\n const K_RECALC_CLIENT_RECT_MS = 50;\n\n if (currTime - this.mouseMoveTime_ > K_RECALC_CLIENT_RECT_MS) {\n this.boundingRect_ = e.currentTarget.getBoundingClientRect();\n }\n this.mouseMoveTime_ = currTime;\n\n const mousePosX = e.clientX - this.boundingRect_.left;\n const mousePosY = e.clientY - this.boundingRect_.top;\n\n if (!this.mouse_) {\n this.mouse_ = { x: 0, y: 0, lat: 0, lng: 0 };\n }\n\n this.mouse_.x = mousePosX;\n this.mouse_.y = mousePosY;\n\n const latLng = this.geoService_.fromContainerPixelToLatLng(this.mouse_);\n this.mouse_.lat = latLng.lat;\n this.mouse_.lng = latLng.lng;\n\n this._onChildMouseMove();\n\n if (currTime - this.dragTime_ < K_IDLE_TIMEOUT) {\n this.fireMouseEventOnIdle_ = true;\n } else {\n this.markersDispatcher_.emit('kON_MOUSE_POSITION_CHANGE');\n this.fireMouseEventOnIdle_ = false;\n }\n };\n\n // K_IDLE_CLICK_TIMEOUT - looks like 300 is enough\n _onClick = (...args) =>\n this.props.onClick &&\n !this.childMouseDownArgs_ &&\n new Date().getTime() - this.childMouseUpTime_ > K_IDLE_CLICK_TIMEOUT &&\n this.dragTime_ === 0 &&\n this.props.onClick(...args);\n\n _onMapClick = (event) => {\n if (this.markersDispatcher_) {\n // support touch events and recalculate mouse position on click\n this._onMapMouseMove(event);\n const currTime = new Date().getTime();\n if (currTime - this.dragTime_ > K_IDLE_TIMEOUT) {\n if (this.mouse_) {\n this._onClick({\n ...this.mouse_,\n event,\n });\n }\n\n this.markersDispatcher_.emit('kON_CLICK', event);\n }\n }\n };\n\n // gmap can't prevent map drag if mousedown event already occured\n // the only workaround I find is prevent mousedown native browser event\n _onMapMouseDownNative = (event) => {\n if (!this.mouseInMap_) return;\n\n this._onMapMouseDown(event);\n };\n\n _onMapMouseDown = (event) => {\n if (this.markersDispatcher_) {\n const currTime = new Date().getTime();\n if (currTime - this.dragTime_ > K_IDLE_TIMEOUT) {\n // Hovered marker detected at mouse move could be deleted at mouse down time\n // so it will be good to force hovered marker recalculation\n this._onMapMouseMove(event);\n this.markersDispatcher_.emit('kON_MDOWN', event);\n }\n }\n };\n\n _onMapMouseDownCapture = () => {\n if (detectBrowser().isChrome) {\n // to fix strange zoom in chrome\n this.zoomControlClickTime_ = new Date().getTime();\n }\n };\n\n _onKeyDownCapture = () => {\n if (detectBrowser().isChrome) {\n this.zoomControlClickTime_ = new Date().getTime();\n }\n };\n\n _isCenterDefined = (center) =>\n center &&\n ((isPlainObject(center) && isNumber(center.lat) && isNumber(center.lng)) ||\n (center.length === 2 && isNumber(center[0]) && isNumber(center[1])));\n\n _onBoundsChanged = (map, maps, callExtBoundsChange) => {\n if (map) {\n const gmC = map.getCenter();\n this.geoService_.setView([gmC.lat(), gmC.lng()], map.getZoom(), 0);\n }\n\n if (\n (this.props.onChange || this.props.onBoundsChange) &&\n this.geoService_.canProject()\n ) {\n const zoom = this.geoService_.getZoom();\n const bounds = this.geoService_.getBounds();\n const centerLatLng = this.geoService_.getCenter();\n\n if (!isArraysEqualEps(bounds, this.prevBounds_, kEPS)) {\n if (callExtBoundsChange !== false) {\n const marginBounds = this.geoService_.getBounds(this.props.margin);\n if (this.props.onBoundsChange) {\n this.props.onBoundsChange(\n this.centerIsObject_\n ? { ...centerLatLng }\n : [centerLatLng.lat, centerLatLng.lng],\n zoom,\n bounds,\n marginBounds\n );\n }\n\n if (this.props.onChange) {\n this.props.onChange({\n center: { ...centerLatLng },\n zoom,\n bounds: {\n nw: {\n lat: bounds[0],\n lng: bounds[1],\n },\n se: {\n lat: bounds[2],\n lng: bounds[3],\n },\n sw: {\n lat: bounds[4],\n lng: bounds[5],\n },\n ne: {\n lat: bounds[6],\n lng: bounds[7],\n },\n },\n marginBounds: {\n nw: {\n lat: marginBounds[0],\n lng: marginBounds[1],\n },\n se: {\n lat: marginBounds[2],\n lng: marginBounds[3],\n },\n sw: {\n lat: marginBounds[4],\n lng: marginBounds[5],\n },\n ne: {\n lat: marginBounds[6],\n lng: marginBounds[7],\n },\n },\n\n size: this.geoService_.hasSize()\n ? {\n width: this.geoService_.getWidth(),\n height: this.geoService_.getHeight(),\n }\n : {\n width: 0,\n height: 0,\n },\n });\n }\n\n this.prevBounds_ = bounds;\n }\n }\n }\n };\n\n _registerChild = (ref) => {\n this.googleMapDom_ = ref;\n };\n\n render() {\n const overlay = this.state.overlay;\n const mapMarkerPrerender = !overlay ? (\n <GoogleMapMarkersPrerender\n experimental={this.props.experimental}\n onChildClick={this._onChildClick}\n onChildMouseDown={this._onChildMouseDown}\n onChildMouseEnter={this._onChildMouseEnter}\n onChildMouseLeave={this._onChildMouseLeave}\n geoService={this.geoService_}\n insideMapPanes={false}\n distanceToMouse={this.props.distanceToMouse}\n getHoverDistance={this._getHoverDistance}\n dispatcher={this.markersDispatcher_}\n />\n ) : null;\n\n return (\n <div\n style={this.props.style}\n onMouseMove={this._onMapMouseMove}\n onMouseDownCapture={this._onMapMouseDownCapture}\n onClick={this._onMapClick}\n >\n <GoogleMapMap registerChild={this._registerChild} />\n {IS_REACT_16 && overlay && createPortal(this._renderPortal(), overlay)}\n\n {/* render markers before map load done */}\n {mapMarkerPrerender}\n </div>\n );\n }\n}\n\nexport default GoogleMap;\n","export const generateHeatmap = (instance, { positions }) =>\n new instance.visualization.HeatmapLayer({\n data: positions.reduce((acc, { lat, lng, weight = 1 }) => {\n acc.push({\n location: new instance.LatLng(lat, lng),\n weight,\n });\n return acc;\n }, []),\n });\n\nexport const optionsHeatmap = (instance, { options = {} }) =>\n Object.keys(options).map((option) => instance.set(option, options[option]));\n","export default function isArraysEqualEps(arrayA, arrayB, eps) {\n if (arrayA && arrayB) {\n for (let i = 0; i !== arrayA.length; ++i) {\n if (Math.abs(arrayA[i] - arrayB[i]) > eps) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n * Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport isEqual from \"fast-deep-equal\";\n\nexport const DEFAULT_ID = \"__googleMapsScriptId\";\n\n// https://developers.google.com/maps/documentation/javascript/libraries#libraries-for-dynamic-library-import\nexport type Library =\n | \"core\"\n | \"maps\"\n | \"places\"\n | \"geocoding\"\n | \"routes\"\n | \"marker\"\n | \"geometry\"\n | \"elevation\"\n | \"streetView\"\n | \"journeySharing\"\n | \"drawing\"\n | \"visualization\";\n\nexport type Libraries = Library[];\n\n/**\n * The Google Maps JavaScript API\n * [documentation](https://developers.google.com/maps/documentation/javascript/tutorial)\n * is the authoritative source for [[LoaderOptions]].\n/**\n * Loader options\n */\nexport interface LoaderOptions {\n /**\n * See https://developers.google.com/maps/documentation/javascript/get-api-key.\n */\n apiKey: string;\n /**\n * @deprecated See https://developers.google.com/maps/premium/overview.\n */\n channel?: string;\n /**\n * @deprecated See https://developers.google.com/maps/premium/overview, use `apiKey` instead.\n */\n client?: string;\n /**\n * In your application you can specify release channels or version numbers:\n *\n * The weekly version is specified with `version=weekly`. This version is\n * updated once per week, and is the most current.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly'});\n * ```\n *\n * The quarterly version is specified with `version=quarterly`. This version\n * is updated once per quarter, and is the most predictable.\n *\n * ```\n * const loader = Loader({apiKey, version: 'quarterly'});\n * ```\n *\n * The version number is specified with `version=n.nn`. You can choose\n * `version=3.40`, `version=3.39`, or `version=3.38`. Version numbers are\n * updated once per quarter.\n *\n * ```\n * const loader = Loader({apiKey, version: '3.40'});\n * ```\n *\n * If you do not explicitly specify a version, you will receive the\n * weekly version by default.\n */\n version?: string;\n /**\n * The id of the script tag. Before adding a new script, the Loader will check for an existing one.\n */\n id?: string;\n /**\n * When loading the Maps JavaScript API via the URL you may optionally load\n * additional libraries through use of the libraries URL parameter. Libraries\n * are modules of code that provide additional functionality to the main Maps\n * JavaScript API but are not loaded unless you specifically request them.\n *\n * ```\n * const loader = Loader({\n * apiKey,\n * libraries: ['drawing', 'geometry', 'places', 'visualization'],\n * });\n * ```\n *\n * Set the [list of libraries](https://developers.google.com/maps/documentation/javascript/libraries) for more options.\n */\n libraries?: Libraries;\n /**\n * By default, the Maps JavaScript API uses the user's preferred language\n * setting as specified in the browser, when displaying textual information\n * such as the names for controls, copyright notices, driving directions and\n * labels on maps. In most cases, it's preferable to respect the browser\n * setting. However, if you want the Maps JavaScript API to ignore the\n * browser's language setting, you can force it to display information in a\n * particular language when loading the Maps JavaScript API code.\n *\n * For example, the following example localizes the language to Japan:\n *\n * ```\n * const loader = Loader({apiKey, language: 'ja', region: 'JP'});\n * ```\n *\n * See the [list of supported\n * languages](https://developers.google.com/maps/faq#languagesupport). Note\n * that new languages are added often, so this list may not be exhaustive.\n *\n */\n language?: string;\n /**\n * When you load the Maps JavaScript API from maps.googleapis.com it applies a\n * default bias for application behavior towards the United States. If you\n * want to alter your application to serve different map tiles or bias the\n * application (such as biasing geocoding results towards the region), you can\n * override this default behavior by adding a region parameter when loading\n * the Maps JavaScript API code.\n *\n * The region parameter accepts Unicode region subtag identifiers which\n * (generally) have a one-to-one mapping to country code Top-Level Domains\n * (ccTLDs). Most Unicode region identifiers are identical to ISO 3166-1\n * codes, with some notable exceptions. For example, Great Britain's ccTLD is\n * \"uk\" (corresponding to the domain .co.uk) while its region identifier is\n * \"GB.\"\n *\n * For example, the following example localizes the map to the United Kingdom:\n *\n * ```\n * const loader = Loader({apiKey, region: 'GB'});\n * ```\n */\n region?: string;\n /**\n * @deprecated Passing `mapIds` is no longer required in the script tag.\n */\n mapIds?: string[];\n /**\n * Use a custom url and path to load the Google Maps API script.\n */\n url?: string;\n /**\n * Use a cryptographic nonce attribute.\n */\n nonce?: string;\n /**\n * The number of script load retries.\n */\n retries?: number;\n /**\n * Maps JS customers can configure HTTP Referrer Restrictions in the Cloud\n * Console to limit which URLs are allowed to use a particular API Key. By\n * default, these restrictions can be configured to allow only certain paths\n * to use an API Key. If any URL on the same domain or origin may use the API\n * Key, you can set `auth_referrer_policy=origin` to limit the amount of data\n * sent when authorizing requests from the Maps JavaScript API. This is\n * available starting in version 3.46. When this parameter is specified and\n * HTTP Referrer Restrictions are enabled on Cloud Console, Maps JavaScript\n * API will only be able to load if there is an HTTP Referrer Restriction that\n * matches the current website's domain without a path specified.\n */\n authReferrerPolicy?: \"origin\";\n}\n\n/**\n * The status of the [[Loader]].\n */\nexport enum LoaderStatus {\n INITIALIZED,\n LOADING,\n SUCCESS,\n FAILURE,\n}\n\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n * apiKey: \"\",\n * version: \"weekly\",\n * libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n * const map = new google.maps.Map(...)\n * })\n * ```\n */\nexport class Loader {\n private static instance: Loader;\n /**\n * See [[LoaderOptions.version]]\n */\n public readonly version: string;\n /**\n * See [[LoaderOptions.apiKey]]\n */\n public readonly apiKey: string;\n /**\n * See [[LoaderOptions.channel]]\n */\n public readonly channel: string;\n /**\n * See [[LoaderOptions.client]]\n */\n public readonly client: string;\n /**\n * See [[LoaderOptions.id]]\n */\n public readonly id: string;\n /**\n * See [[LoaderOptions.libraries]]\n */\n public readonly libraries: Libraries;\n /**\n * See [[LoaderOptions.language]]\n */\n public readonly language: string;\n\n /**\n * See [[LoaderOptions.region]]\n */\n public readonly region: string;\n\n /**\n * See [[LoaderOptions.mapIds]]\n */\n public readonly mapIds: string[];\n\n /**\n * See [[LoaderOptions.nonce]]\n */\n public readonly nonce: string | null;\n\n /**\n * See [[LoaderOptions.retries]]\n */\n public readonly retries: number;\n\n /**\n * See [[LoaderOptions.url]]\n */\n public readonly url: string;\n /**\n * See [[LoaderOptions.authReferrerPolicy]]\n */\n public readonly authReferrerPolicy: \"origin\";\n\n private callbacks: ((e: ErrorEvent) => void)[] = [];\n private done = false;\n private loading = false;\n private onerrorEvent: ErrorEvent;\n private errors: ErrorEvent[] = [];\n\n /**\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n * using this library, instead the defaults are set by the Google Maps\n * JavaScript API server.\n *\n * ```\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n * ```\n */\n constructor({\n apiKey,\n authReferrerPolicy,\n channel,\n client,\n id = DEFAULT_ID,\n language,\n libraries = [],\n mapIds,\n nonce,\n region,\n retries = 3,\n url = \"https://maps.googleapis.com/maps/api/js\",\n version,\n }: LoaderOptions) {\n this.apiKey = apiKey;\n this.authReferrerPolicy = authReferrerPolicy;\n this.channel = channel;\n this.client = client;\n this.id = id || DEFAULT_ID; // Do not allow empty string\n this.language = language;\n this.libraries = libraries;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.region = region;\n this.retries = retries;\n this.url = url;\n this.version = version;\n\n if (Loader.instance) {\n if (!isEqual(this.options, Loader.instance.options)) {\n throw new Error(\n `Loader must not be called again with different options. ${JSON.stringify(\n this.options\n )} !== ${JSON.stringify(Loader.instance.options)}`\n );\n }\n\n return Loader.instance;\n }\n\n Loader.instance = this;\n }\n\n public get options(): LoaderOptions {\n return {\n version: this.version,\n apiKey: this.apiKey,\n channel: this.channel,\n client: this.client,\n id: this.id,\n libraries: this.libraries,\n language: this.language,\n region: this.region,\n mapIds: this.mapIds,\n nonce: this.nonce,\n url: this.url,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n }\n\n public get status(): LoaderStatus {\n if (this.errors.length) {\n return LoaderStatus.FAILURE;\n }\n if (this.done) {\n return LoaderStatus.SUCCESS;\n }\n if (this.loading) {\n return LoaderStatus.LOADING;\n }\n return LoaderStatus.INITIALIZED;\n }\n\n private get failed(): boolean {\n return this.done && !this.loading && this.errors.length >= this.retries + 1;\n }\n\n /**\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n *\n * @ignore\n * @deprecated\n */\n public createUrl(): string {\n let url = this.url;\n\n url += `?callback=__googleMapsCallback`;\n\n if (this.apiKey) {\n url += `&key=${this.apiKey}`;\n }\n\n if (this.channel) {\n url += `&channel=${this.channel}`;\n }\n\n if (this.client) {\n url += `&client=${this.client}`;\n }\n\n if (this.libraries.length > 0) {\n url += `&libraries=${this.libraries.join(\",\")}`;\n }\n\n if (this.language) {\n url += `&language=${this.language}`;\n }\n\n if (this.region) {\n url += `®ion=${this.region}`;\n }\n\n if (this.version) {\n url += `&v=${this.version}`;\n }\n\n if (this.mapIds) {\n url += `&map_ids=${this.mapIds.join(\",\")}`;\n }\n\n if (this.authReferrerPolicy) {\n url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n }\n\n return url;\n }\n\n public deleteScript(): void {\n const script = document.getElementById(this.id);\n if (script) {\n script.remove();\n }\n }\n\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n * @deprecated, use importLibrary() instead.\n */\n public load(): Promise<typeof google> {\n return this.loadPromise();\n }\n\n /**\n * Load the Google Maps JavaScript API script and return a Promise.\n *\n * @ignore\n * @deprecated, use importLibrary() instead.\n */\n public loadPromise(): Promise<typeof google> {\n return new Promise((resolve, reject) => {\n this.loadCallback((err: ErrorEvent) => {\n if (!err) {\n resolve(window.google);\n } else {\n reject(err.error);\n }\n });\n });\n }\n\n /**\n * See https://developers.google.com/maps/documentation/javascript/reference/top-level#google.maps.importLibrary\n */\n public importLibrary(name: \"core\"): Promise<google.maps.CoreLibrary>;\n public importLibrary(name: \"maps\"): Promise<google.maps.MapsLibrary>;\n public importLibrary(name: \"places\"): Promise<google.maps.PlacesLibrary>;\n public importLibrary(\n name: \"geocoding\"\n ): Promise<google.maps.GeocodingLibrary>;\n public importLibrary(name: \"routes\"): Promise<google.maps.RoutesLibrary>;\n public importLibrary(name: \"marker\"): Promise<google.maps.MarkerLibrary>;\n public importLibrary(name: \"geometry\"): Promise<google.maps.GeometryLibrary>;\n public importLibrary(\n name: \"elevation\"\n ): Promise<google.maps.ElevationLibrary>;\n public importLibrary(\n name: \"streetView\"\n ): Promise<google.maps.StreetViewLibrary>;\n public importLibrary(\n name: \"journeySharing\"\n ): Promise<google.maps.JourneySharingLibrary>;\n public importLibrary(name: \"drawing\"): Promise<google.maps.DrawingLibrary>;\n public importLibrary(\n name: \"visualization\"\n ): Promise<google.maps.VisualizationLibrary>;\n public importLibrary(name: Library): Promise<unknown>;\n public importLibrary(name: Library): Promise<unknown> {\n this.execute();\n return google.maps.importLibrary(name);\n }\n\n /**\n * Load the Google Maps JavaScript API script with a callback.\n * @deprecated, use importLibrary() instead.\n */\n public loadCallback(fn: (e: ErrorEvent) => void): void {\n this.callbacks.push(fn);\n this.execute();\n }\n\n /**\n * Set the script on document.\n */\n private setScript(): void {\n if (document.getElementById(this.id)) {\n // TODO wrap onerror callback for cases where the script was loaded elsewhere\n this.callback();\n return;\n }\n\n const params = {\n key: this.apiKey,\n channel: this.channel,\n client: this.client,\n libraries: this.libraries.length && this.libraries,\n v: this.version,\n mapIds: this.mapIds,\n language: this.language,\n region: this.region,\n authReferrerPolicy: this.authReferrerPolicy,\n };\n // keep the URL minimal:\n Object.keys(params).forEach(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (key) => !(params as any)[key] && delete (params as any)[key]\n );\n\n if (!window?.google?.maps?.importLibrary) {\n // tweaked copy of https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n // which also sets the base url, the id, and the nonce\n /* eslint-disable */\n ((g) => {\n // @ts-ignore\n let h,\n a,\n k,\n p = \"The Google Maps JavaScript API\",\n c = \"google\",\n l = \"importLibrary\",\n q = \"__ib__\",\n m = document,\n b = window;\n // @ts-ignore\n b = b[c] || (b[c] = {});\n // @ts-ignore\n const d = b.maps || (b.maps = {}),\n r = new Set(),\n e = new URLSearchParams(),\n u = () =>\n // @ts-ignore\n h || (h = new Promise(async (f, n) => {\n await (a = m.createElement(\"script\"));\n a.id = this.id;\n e.set(\"libraries\", [...r] + \"\");\n // @ts-ignore\n for (k in g) e.set(k.replace(/[A-Z]/g, (t) => \"_\" + t[0].toLowerCase()), g[k]);\n e.set(\"callback\", c + \".maps.\" + q);\n a.src = this.url + `?` + e;\n d[q] = f;\n a.onerror = () => (h = n(Error(p + \" could not load.\")));\n // @ts-ignore\n a.nonce = this.nonce || m.querySelector(\"script[nonce]\")?.nonce || \"\";\n m.head.append(a);\n }));\n // @ts-ignore\n d[l] ? console.warn(p + \" only loads once. Ignoring:\", g) : (d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)));\n })(params);\n /* eslint-enable */\n }\n\n // While most libraries populate the global namespace when loaded via bootstrap params,\n // this is not the case for \"marker\" when used with the inline bootstrap loader\n // (and maybe others in the future). So ensure there is an importLibrary for each:\n const libraryPromises = this.libraries.map((library) =>\n this.importLibrary(library)\n );\n // ensure at least one library, to kick off loading...\n if (!libraryPromises.length) {\n libraryPromises.push(this.importLibrary(\"core\"));\n }\n Promise.all(libraryPromises).then(\n () => this.callback(),\n (error) => {\n const event = new ErrorEvent(\"error\", { error }); // for backwards compat\n this.loadErrorCallback(event);\n }\n );\n }\n\n /**\n * Reset the loader state.\n */\n private reset(): void {\n this.deleteScript();\n this.done = false;\n this.loading = false;\n this.errors = [];\n this.onerrorEvent = null;\n }\n\n private resetIfRetryingFailed(): void {\n if (this.failed) {\n this.reset();\n }\n }\n\n private loadErrorCallback(e: ErrorEvent): void {\n this.errors.push(e);\n\n if (this.errors.length <= this.retries) {\n const delay = this.errors.length * 2 ** this.errors.length;\n\n console.error(\n `Failed to load Google Maps script, retrying in ${delay} ms.`\n );\n\n setTimeout(() => {\n this.deleteScript();\n this.setScript();\n }, delay);\n } else {\n this.onerrorEvent = e;\n this.callback();\n }\n }\n\n private callback(): void {\n this.done = true;\n this.loading = false;\n\n this.callbacks.forEach((cb) => {\n cb(this.onerrorEvent);\n });\n\n this.callbacks = [];\n }\n\n private execute(): void {\n this.resetIfRetryingFailed();\n\n if (this.done) {\n this.callback();\n } else {\n // short circuit and warn if google.maps is already loaded\n if (window.google && window.google.maps && window.google.maps.version) {\n console.warn(\n \"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n \"This may result in undesirable behavior as options and script parameters may not match.\"\n );\n this.callback();\n return;\n }\n\n if (this.loading) {\n // do nothing but wait\n } else {\n this.loading = true;\n\n this.setScript();\n }\n }\n }\n}\n","'use strict';\n\nmodule.exports = Point;\n\n/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class Point\n * @param {Number} x the x-coordinate. this could be longitude or screen\n * pixels, or any other sort of unit.\n * @param {Number} y the y-coordinate. this could be latitude or screen\n * pixels, or any other sort of unit.\n * @example\n * var point = new Point(-77, 38);\n */\nfunction Point(x, y) {\n this.x = x;\n this.y = y;\n}\n\nPoint.prototype = {\n\n /**\n * Clone this point, returning a new point that can be modified\n * without affecting the old one.\n * @return {Point} the clone\n */\n clone: function() { return new Point(this.x, this.y); },\n\n /**\n * Add this point's x & y coordinates to another point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n add: function(p) { return this.clone()._add(p); },\n\n /**\n * Subtract this point's x & y coordinates to from point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n sub: function(p) { return this.clone()._sub(p); },\n\n /**\n * Multiply this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n multByPoint: function(p) { return this.clone()._multByPoint(p); },\n\n /**\n * Divide this point's x & y coordinates by point,\n * yielding a new point.\n * @param {Point} p the other point\n * @return {Point} output point\n */\n divByPoint: function(p) { return this.clone()._divByPoint(p); },\n\n /**\n * Multiply this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n mult: function(k) { return this.clone()._mult(k); },\n\n /**\n * Divide this point's x & y coordinates by a factor,\n * yielding a new point.\n * @param {Point} k factor\n * @return {Point} output point\n */\n div: function(k) { return this.clone()._div(k); },\n\n /**\n * Rotate this point around the 0, 0 origin by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @return {Point} output point\n */\n rotate: function(a) { return this.clone()._rotate(a); },\n\n /**\n * Rotate this point around p point by an angle a,\n * given in radians\n * @param {Number} a angle to rotate around, in radians\n * @param {Point} p Point to rotate around\n * @return {Point} output point\n */\n rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); },\n\n /**\n * Multiply this point by a 4x1 transformation matrix\n * @param {Array<Number>} m transformation matrix\n * @return {Point} output point\n */\n matMult: function(m) { return this.clone()._matMult(m); },\n\n /**\n * Calculate this point but as a unit vector from 0, 0, meaning\n * that the distance from the resulting point to the 0, 0\n * coordinate will be equal to 1 and the angle from the resulting\n * point to the 0, 0 coordinate will be the same as before.\n * @return {Point} unit vector point\n */\n unit: function() { return this.clone()._unit(); },\n\n /**\n * Compute a perpendicular point, where the new y coordinate\n * is the old x coordinate and the new x coordinate is the old y\n * coordinate multiplied by -1\n * @return {Point} perpendicular point\n */\n perp: function() { return this.clone()._perp(); },\n\n /**\n * Return a version of this point with the x & y coordinates\n * rounded to integers.\n * @return {Point} rounded point\n */\n round: function() { return this.clone()._round(); },\n\n /**\n * Return the magitude of this point: this is the Euclidean\n * distance from the 0, 0 coordinate to this point's x and y\n * coordinates.\n * @return {Number} magnitude\n */\n mag: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n\n /**\n * Judge whether this point is equal to another point, returning\n * true or false.\n * @param {Point} other the other point\n * @return {boolean} whether the points are equal\n */\n equals: function(other) {\n return this.x === other.x &&\n this.y === other.y;\n },\n\n /**\n * Calculate the distance from this point to another point\n * @param {Point} p the other point\n * @return {Number} distance\n */\n dist: function(p) {\n return Math.sqrt(this.distSqr(p));\n },\n\n /**\n * Calculate the distance from this point to another point,\n * without the square root step. Useful if you're comparing\n * relative distances.\n * @param {Point} p the other point\n * @return {Number} distance\n */\n distSqr: function(p) {\n var dx = p.x - this.x,\n dy = p.y - this.y;\n return dx * dx + dy * dy;\n },\n\n /**\n * Get the angle from the 0, 0 coordinate to this point, in radians\n * coordinates.\n * @return {Number} angle\n */\n angle: function() {\n return Math.atan2(this.y, this.x);\n },\n\n /**\n * Get the angle from this point to another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleTo: function(b) {\n return Math.atan2(this.y - b.y, this.x - b.x);\n },\n\n /**\n * Get the angle between this point and another point, in radians\n * @param {Point} b the other point\n * @return {Number} angle\n */\n angleWith: function(b) {\n return this.angleWithSep(b.x, b.y);\n },\n\n /*\n * Find the angle of the two vectors, solving the formula for\n * the cross product a x b = |a||b|sin(θ) for θ.\n * @param {Number} x the x-coordinate\n * @param {Number} y the y-coordinate\n * @return {Number} the angle in radians\n */\n angleWithSep: function(x, y) {\n return Math.atan2(\n this.x * y - this.y * x,\n this.x * x + this.y * y);\n },\n\n _matMult: function(m) {\n var x = m[0] * this.x + m[1] * this.y,\n y = m[2] * this.x + m[3] * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n _add: function(p) {\n this.x += p.x;\n this.y += p.y;\n return this;\n },\n\n _sub: function(p) {\n this.x -= p.x;\n this.y -= p.y;\n return this;\n },\n\n _mult: function(k) {\n this.x *= k;\n this.y *= k;\n return this;\n },\n\n _div: function(k) {\n this.x /= k;\n this.y /= k;\n return this;\n },\n\n _multByPoint: function(p) {\n this.x *= p.x;\n this.y *= p.y;\n return this;\n },\n\n _divByPoint: function(p) {\n this.x /= p.x;\n this.y /= p.y;\n return this;\n },\n\n _unit: function() {\n this._div(this.mag());\n return this;\n },\n\n _perp: function() {\n var y = this.y;\n this.y = this.x;\n this.x = -y;\n return this;\n },\n\n _rotate: function(angle) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = cos * this.x - sin * this.y,\n y = sin * this.x + cos * this.y;\n this.x = x;\n this.y = y;\n return this;\n },\n\n _rotateAround: function(angle, p) {\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n this.x = x;\n this.y = y;\n return this;\n },\n\n _round: function() {\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n return this;\n }\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<Number>|Point|*} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (a) {\n if (a instanceof Point) {\n return a;\n }\n if (Array.isArray(a)) {\n return new Point(a[0], a[1]);\n }\n return a;\n};\n","import * as React from 'react';\nimport { GetUrlForBusinessEntityResults } from '../../Apartments/Browser/apartmentSearchUrlHandling';\nimport { ResourceText, useResource } from '../ResourceText';\nimport { formatDistance } from '../numberUtils';\nimport { MapMarker, MapMarkerData, MapMarkerProps } from './MapMarker';\nimport { MapPlaceableChildProps } from './MapPlaceableChildProps';\nimport { areDeepEqual } from '../objectUtils';\nimport SmartLink from '../SmartLink';\nimport { useLocationData } from '../../hooks/useLocationData';\nimport { FillMapIcon } from './FillMapIcon';\n\nexport interface PoiMarkerData extends MapMarkerData {\n\ttype?: string;\n\tbeelineDistance?: number;\n\tstreet?: string;\n\tzipCode?: string;\n\tpostOffice?: string;\n\thasAvailableApartments?: boolean; // Valid for business entities only\n\tuseSvgIcon?: boolean;\n}\n\nexport type PoiMarkerProps = Omit<MapMarkerProps<PoiMarkerData>, 'renderDetails' | 'children'> & MapPlaceableChildProps;\n\nfunction PoiMarkerInternal(props: PoiMarkerProps) {\n\treturn (\n\t\t<MapMarker {...props}>\n\t\t\t<NearbyServicesPoiDetails language={props.language} poi={props.poi} key={props.poi.id} />\n\t\t</MapMarker>\n\t);\n}\n\nfunction getCompareProps({\n\tlanguage,\n\tlat,\n\tlng,\n\tisSelected,\n\tpoi,\n\tisPrimary,\n\tnoDetailsWindow,\n}: PoiMarkerProps): Omit<MapMarkerProps<PoiMarkerData>, 'renderDetails' | 'onSelectedChange' | 'map' | 'children'> {\n\t/* The map component passes all kinds of props to markers and we're not interested in changes of those */\n\treturn {\n\t\tlanguage,\n\t\tlat,\n\t\tlng,\n\t\tisPrimary,\n\t\tpoi,\n\t\tisSelected,\n\t\tnoDetailsWindow,\n\t};\n}\n\nexport const PoiMarker = React.memo(PoiMarkerInternal, (prevProps, currentProps) =>\n\tareDeepEqual(getCompareProps(prevProps), getCompareProps(currentProps)),\n);\n\nexport function PrimaryLocationMarker(props: PoiMarkerProps) {\n\treturn <PoiMarker {...props} isPrimary={true} key={props.poi.id} />;\n}\n\nfunction NearbyServicesPoiDetails({ poi, language }: Pick<PoiMarkerProps, 'poi' | 'language'>) {\n\tconst locationData = useLocationData()!;\n\tconst getBusinessEntityUrl = (poi: PoiMarkerData) => {\n\t\tif (poi.category != 'businessentity' || poi.hasAvailableApartments !== true) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst be = locationData.businessEntities.find((be) => be.id == poi.id)!;\n\t\tconst municipality = locationData.municipalities.find((m) => m.id == be.municipalityId)!;\n\t\tconst subArea = be.municipalitySubAreaId\n\t\t\t? locationData?.municipalitySubAreas.find((m) => m.id == be.municipalitySubAreaId)\n\t\t\t: null;\n\t\treturn GetUrlForBusinessEntityResults(language, municipality.slug, be.slug, subArea ? subArea.slug : undefined);\n\t};\n\tconst { getResourceText } = useResource();\n\tconst businessEntityResultsUrl = getBusinessEntityUrl(poi);\n\n\treturn (\n\t\t<div className=\"poi-details-content-container l-padding-4\">\n\t\t\t<div className=\"poi-details-bg\">\n\t\t\t\t<div className=\"poi-details-icon-container\">\n\t\t\t\t\t<FillMapIcon category={poi.category} />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"poi-details-content\">\n\t\t\t\t\t{poi.name && <h1>{poi.name}</h1>}\n\t\t\t\t\t<div className=\"content\">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t{getResourceText(`POI_Category_${poi.category}`, poi.category)}\n\t\t\t\t\t\t\t{poi.beelineDistance && poi.beelineDistance > 0\n\t\t\t\t\t\t\t\t? ' ' + formatDistance(poi.beelineDistance)\n\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{poi.street && (poi.zipCode || poi.postOffice) && (\n\t\t\t\t\t\t\t<p className=\"additional-info\">\n\t\t\t\t\t\t\t\t{poi.street}, {poi.zipCode} {poi.postOffice}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{businessEntityResultsUrl && (\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<SmartLink to={businessEntityResultsUrl} clearApartmentSearchState>\n\t\t\t\t\t\t\t\t\t<ResourceText\n\t\t\t\t\t\t\t\t\t\tresourceKey=\"NearbyCategoryMap_BusinessEntityApartmentsLinkText\"\n\t\t\t\t\t\t\t\t\t\tdefaultText=\"Katso vapaat asunnot\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</SmartLink>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import * as React from 'react';\nimport { Language } from '../../Common/interfaces/language';\nimport { getPoiMarkerIcon, getPrimaryPoiIcon } from './MapComponent';\nimport { MapPlaceableChildProps } from './MapPlaceableChildProps';\nimport { PoiCategory } from './PoiApiClient';\nimport { FillMapIcon } from './FillMapIcon';\n\nexport type MapMarkerProps<TData extends MapMarkerData> = MapPlaceableChildProps & {\n\tisSelected: boolean;\n\tonSelectedChange: (selectedPoiId: string | undefined) => void;\n\t/** Opt-out possibility of showing details in marker itself */\n\tnoDetailsWindow?: true;\n\tpoi: TData;\n\tmap: google.maps.Map | undefined;\n\tisPrimary?: boolean;\n\tlanguage: Language;\n\tchildren?: React.ReactNode;\n\n\t/**\n\t * Optional click handler. Provide this and return false to override default behavior that shows details on click (triggers `onDetailsWindowChange(id)`)\n\t */\n\tonClick?: () => boolean;\n\t/**\n\t * Icon to use. Takes precedence over using icon based on POI category\n\t */\n\ticon?: React.ReactNode;\n};\n\nexport interface MapMarkerData {\n\tid: string;\n\tname?: string;\n\tlatitude: number;\n\tlongitude: number;\n\tcategory: PoiCategory;\n\thasAvailableApartments?: boolean; // Valid for business entities only\n\tuseSvgIcon?: boolean;\n}\n\nexport type Props<T extends MapMarkerData> = MapMarkerProps<T>;\nexport interface State {\n\tinfoWindow?: any | undefined;\n}\nexport class MapMarker<T extends MapMarkerData> extends React.Component<Props<T>, State> {\n\tconstructor(props: Props<T>) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t}\n\n\tcomponentDidUpdate(prevProps: Readonly<Props<T>>) {\n\t\tif (prevProps.isSelected == this.props.isSelected) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\ttoggleVisiblity = () => {\n\t\tconst targetState = !this.props.isSelected;\n\t\t/* NOTE: trying to use native react components for info details box creates problems in\n\t\thow the library & google maps deals with z-index values, and it's not possible to set custom info-component\n\t\tto show on top of all markers without disturbing overall click handling\n\t\t*/\n\t\tif (targetState) {\n\t\t\tthis.props.onSelectedChange(this.props.poi.id);\n\t\t}\n\t};\n\n\tonClick = () => {\n\t\tif (this.props.onClick && !this.props.onClick()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.props.isSelected && this.props.map) {\n\t\t\tthis.props.map.setCenter({ lat: this.props.poi.latitude, lng: this.props.poi.longitude });\n\t\t}\n\n\t\tthis.toggleVisiblity();\n\t};\n\n\tonClose = () => {\n\t\t// this.setState({ infoWindow: null });\n\t\tthis.props.onSelectedChange(undefined);\n\t};\n\n\trender() {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<div\n\t\t\t\t\ttitle={this.props.poi.name}\n\t\t\t\t\tclassName={\n\t\t\t\t\t\t'map-marker ' +\n\t\t\t\t\t\t(this.props.isPrimary ? '-primary ' : '-poi') +\n\t\t\t\t\t\t(this.props.poi.category == 'businessentity' ? ' -above' : ' -center') +\n\t\t\t\t\t\t(this.props.isSelected ? ' -open' : '') +\n\t\t\t\t\t\t` category-${this.props.poi.category}`\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{this.props.icon ? (\n\t\t\t\t\t\t<div className={'poi-icon -apartment'} onClick={this.onClick}>\n\t\t\t\t\t\t\t{this.props.icon}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tclassName={'poi-icon' + (this.props.isPrimary ? ' -primary' : '')}\n\t\t\t\t\t\t\t\tsrc={this.props.isPrimary ? getPrimaryPoiIcon() : getPoiMarkerIcon(this.props.poi)}\n\t\t\t\t\t\t\t\tonClick={this.onClick}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div className=\"poi-icon\" onClick={this.onClick}>\n\t\t\t\t\t\t\t\t<FillMapIcon category={this.props.poi.category} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{this.props.isSelected && this.props.noDetailsWindow !== true ? (\n\t\t\t\t\t<div className=\"poi-details\" id={'marker-' + this.props.poi.id}>\n\t\t\t\t\t\t<button className=\"close-button poi-details-close\" onClick={this.onClose} />\n\t\t\t\t\t\t{this.props.children}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</>\n\t\t);\n\t}\n}\n","import { PoiCategory } from './PoiApiClient';\nimport {\n\tIconMapCultureFill,\n\tIconMapDaycareFill,\n\tIconMapGroceriesFill,\n\tIconMapHealthServicesFill,\n\tIconMapPublicTransportFill,\n\tIconMapRestaurantFill,\n\tIconMapSchoolFill,\n\tIconMapSportsFill,\n} from '@kojamo/lumo-dls';\nimport * as React from 'react';\n\nexport function FillMapIcon({ category }: { category: PoiCategory }) {\n\tswitch (category) {\n\t\tcase 'schools':\n\t\t\treturn <IconMapSchoolFill />;\n\t\tcase 'grocery':\n\t\t\treturn <IconMapGroceriesFill />;\n\t\tcase 'daycare':\n\t\t\treturn <IconMapDaycareFill />;\n\t\tcase 'restaurants':\n\t\t\treturn <IconMapRestaurantFill />;\n\t\tcase 'health':\n\t\t\treturn <IconMapHealthServicesFill />;\n\t\tcase 'culture':\n\t\t\treturn <IconMapCultureFill />;\n\t\tcase 'sports':\n\t\t\treturn <IconMapSportsFill />;\n\t\tcase 'publictransport':\n\t\t\treturn <IconMapPublicTransportFill />;\n\t\tdefault:\n\t\t\treturn <></>;\n\t}\n}\n"],"names":["$ed3kz","parcelRequire","MapComponentWrapper","React","render","this","props","googleMapsApiKey","conditionalProps","poiCategoryFilter","primaryPoiId","businessEntityId","jsx","$kMvdG","default","defaultCenter","defaultZoom","onMapChange","language","onMapActivated","visibleCategories","children","bounds","focalPoint","zoomLevel","getPoiData","northWest","lat","topLeft","lon","northEast","bottomRight","southWest","southEast","onMapChanged","$60ca677aec262a82$export$2e2bcd8739ae039","connect","settings","currentLanguage","pointsOfInterestActions","getServicesInArea","request","getPrimaryPoiIcon","getPoiMarkerIcon","poi","iconInactive","category","hasAvailableApartments","TemporaryMapMarker","MAX_ZOOM_LEVEL","MapComponent","Component","categoryFilterRef","createRef","constructor","super","state","undefined","map","isFullScreen","shownDetailsWindowPoiId","showPoiFilterComponent","reCenter","setCenter","transformCoordinateForMap","setZoom","onGoogleMapApiLoaded","current","controls","google","maps","ControlPosition","BOTTOM_CENTER","push","setState","fitBounds","b","boundingBoxToGoogleMapsCoords","getLocationForMap","options","getMapOptions","jsxs","className","$3WVsR","bootstrapURLKeys","key","yesIWantToUseGoogleMapApiInternals","onChange","ev","onGoogleApiLoaded","renderPOIs","onClick","handleFullScreenClick","html","document","getElementsByTagName","classList","contains","remove","setOptions","scrollwheel","getElementById","scrollIntoView","add","onDetailsWindowVisibilityChange","shownWindowPoiId","poiData","$ff226059154237cc$var$TemporaryMapMarker","lng","src","filter","p","id","some","c","commonProps","latitude","longitude","isSelected","onSelectedChange","$g9gIf","PrimaryLocationMarker","PoiMarker","transformed","transformCoordinateFromMap","ne","nw","se","sw","center","zoom","coord","mapTypeControl","rotateControl","panControl","fullscreenControl","scaleControl","draggable","maxZoom","clickableIcons","styles","featureType","elementType","stylers","visibility","lightness","hue","saturation","ConnectedComponent","pointsOfInterest","$ff226059154237cc$export$2e2bcd8739ae039","withResourceTextSupport","east","north","south","west","$iU6fI","$2e035d2595254c5d$var$a","Object","assign","bind","e1","t1","arguments","length","o1","n1","prototype","hasOwnProperty","call","apply","$2e035d2595254c5d$var$p","e2","t2","o2","n2","create","setPrototypeOf","e3","t3","__proto__","$2e035d2595254c5d$var$l","e4","ReferenceError","style","width","height","left","top","margin","padding","position","GoogleMapMap","_Component","_inheritsLoose","_proto","shouldComponentUpdate","createElement","ref","registerChild","MarkerDispatcher","_EventEmitter","gmapInstance","_this","getChildren","getMousePosition","mouse_","getUpdateCounter","updateCounter_","dispose","removeAllListeners","EventEmitter","omit","obj","keys","rest","_extends","i","is","x","y","shallowEqual","objA","objB","keysA","keysB","mainStyle","backgroundColor","GoogleMapMarkers","_getState","dispatcher","updateCounter","_onChangeHandler","dimensionsCache_","prevChildCount","_onMouseChangeHandler","_onChildClick","onChildClick","hoverChildProps_","hoverKey_","_onChildMouseDown","onChildMouseDown","_onChildMouseEnter","hoverKey","childProps","onChildMouseEnter","_onChildMouseLeave","onChildMouseLeave","_onMouseAllow","value","allowMouse_","_onMouseChangeHandlerRaf","mp","distances","hoverDistance","getHoverDistance","Children","forEach","child","childIndex","latLng","childKey","dist","distanceToMouse","sort","a","_getDimensions","componentDidMount","on","nextProps","nextState","experimental","componentWillUnmount","removeListener","_this2","mainElementStyle","markers","cloneElement","$geoService","geoService","$onMouseAllow","$prerender","prerender","pt","insideMapPanes","fromLatLngToDivPixel","fromLatLngToCenterPixel","stylePtPos","seLatLng","seLat","seLng","sePt","containerPt","fromLatLngToContainerPixel","$markerHolderClassName","$hover","$getDimensions","$dimensionKey","propTypes","PropTypes","any","func","bool","defaultProps","$2e035d2595254c5d$var$C","loader_","loadPromise_","resolveCustomPromise_","_customPromise","Promise","resolve","heatmapLibrary","libraries","concat","includes","console","warn","window","Error","restKeys","_excluded","Loader","apiKey","load","then","wrap","n","min","max","d","LatLng","isNaN","convert","Array","isArray","Transform","tileSize","minZoom","_minZoom","_maxZoom","latRange","angle","t22","o16","zoomScale","Math","pow","scaleZoom","scale","log","LN2","project","latlng","worldSize","Point","lngX","latY","unproject","point","yLat","xLng","PI","tan","atan","exp","locationPoint","centerPoint","_sub","_rotate","pointLocation","p2","sub","get","set","bearing","_zoom","zoomV","tileZoom","floor","zoomFraction","Geo","hasSize_","hasView_","transform_","setView","setViewSize","setMapCanvasProjection","mapCanvasProjection","maps_","mapCanvasProjection_","canProject","hasSize","ptLatLng","round","fromContainerPixelToLatLng","ptXY","ptxy","ptRes","getWidth","getHeight","getZoom","getCenter","getBounds","margins","roundFactor","bndT","bndR","bndB","bndL","topLeftCorner","bottomRightCorner","res","r","raf","callback","requestAnimationFrame","nativeRaf","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","log2","pick","fn","reduce","result","isEmpty","val","objectToString","toString","isNumber","detectBrowserResult_","detectBrowser","navigator","isExplorer","userAgent","indexOf","isFirefox","isOpera","toLowerCase","isChrome","isSafari","fnToString","Function","isPlainObject","proto","getPrototypeOf","addPassiveEventListener","element","eventName","capture","addEventListener","passiveSupported","defineProperty","removeEventListener","err","passive","_window","canUseDOM","self","cancel","attachEvent","stylesCreated","requestFrame","cancelFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","clearTimeout","resetTriggers","triggers","__resizeTriggers__","expand","firstElementChild","contract","lastElementChild","expandChild","scrollLeft","scrollWidth","scrollTop","scrollHeight","offsetWidth","offsetHeight","scrollListener","e","__resizeRAF__","__resizeLast__","__resizeListeners__","animation","keyframeprefix","animationstartevent","domPrefixes","split","startEvents","elm","animationName","animationstring","animationKeyframes","animationStyle","IS_REACT_16","ReactDOM","createPortal","unstable_renderSubtreeIntoContainer","latLng2Obj","_checkMinZoom","GoogleMap","_getMinZoom","geoService_","tilesPerWidth","ceil","tilesPerHeight","maxTilesPerDim","_computeMinZoom","_mapDomResizeCallback","resetSizeOnIdle_","originalCenter","currentCenter","map_","event","trigger","resetBoundsOnResize","_setLayers","layerTypes","layerType","layers_","setMap","_renderPortal","_getHoverDistance","markersDispatcher_","_initMap","initialized_","propsCenter","_onBoundsChanged","googleMapLoader","mounted_","instance","_ref","centerLatLng","propsOptions","heatmap","positions","_assertThisInitialized","visualization","HeatmapLayer","data","acc","_ref2","_ref2$weight","weight","location","_ref3","_ref3$options","option","mapPlainObjects","draggableOptions","minZoom_","preMapOptions","overviewMapControl","streetViewControl","defaultDraggableOption_","mapOptions","Map","findDOMNode","googleMapDom_","versionMatch","version","match","mapsVersion","Number","this_","overlay","OverlayView","onAdd","K_MAX_WIDTH","screen","K_MAX_HEIGHT","div","overlayViewDivStyle","property","getPanes","overlayMouseTarget","appendChild","getProjection","onRemove","renderedOverlay","unmountComponentAtNode","draw","debounced","googleApiLoadedCalled_","_onGoogleApiLoaded","_onChildMouseMove","emit","fireMouseEventOnIdle_","overlay_","onTilesLoaded","addListener","_onTilesLoaded","zoomAnimationInProgress_","_onZoomAnimationStart","Date","getTime","zoomControlClickTime_","_setViewSize","currMinZoom","_onZoomAnimationEnd","dragTime_","mouseInMap_","_onDrag","idleListener","_onDragEnd","_onMapTypeIdChange","getMapTypeId","error","_this$props","_this$props2","onDrag","_this$props3","onDragEnd","_this$props4","onMapTypeIdChange","_this$props5","onZoomAnimationStart","_this$props6","onZoomAnimationEnd","_this$props7","childMouseDownArgs_","_onChildMouseUp","_this$props8","onChildMouseUp","childMouseUpTime_","_this$props9","onChildMouseMove","_this$props10","_this$props11","fullscreen","webkitIsFullScreen","mozFullScreen","msFullscreenElement","innerWidth","innerHeight","mapDom","clientWidth","clientHeight","_onWindowResize","_onMapMouseMove","currTime","mouseMoveTime_","boundingRect_","currentTarget","getBoundingClientRect","mousePosX","clientX","mousePosY","clientY","_onClick","_this$props12","_onMapClick","_onMapMouseDownNative","_onMapMouseDown","_onMapMouseDownCapture","_onKeyDownCapture","_isCenterDefined","callExtBoundsChange","gmC","onBoundsChange","arrayA","arrayB","eps","abs","prevBounds_","marginBounds","centerIsObject_","size","_registerChild","parentNode","tempParentDiv","getComputedStyle","css","head","type","styleSheet","cssText","createTextNode","innerHTML","componentDidUpdate","prevProps","_this3","prevCenter","panTo","layerKey","setData","detachEvent","splice","removeChild","shouldUnregisterMapOnUnmount","clearInstanceListeners","mapMarkerPrerender","GoogleMapMarkersPrerender","onMouseMove","onMouseDownCapture","string","oneOfType","array","shape","number","arrayOf","mousePos","sqrt","$2e035d2595254c5d$export$2e2bcd8739ae039","$2e035d2595254c5d$var$ce","$46b80bf9184a59ab$var$has","$46b80bf9184a59ab$var$prefix","$46b80bf9184a59ab$var$Events","$46b80bf9184a59ab$var$EE","context","once","$46b80bf9184a59ab$var$addListener","emitter","TypeError","listener","evt","_events","_eventsCount","$46b80bf9184a59ab$var$clearEvent","$46b80bf9184a59ab$var$EventEmitter","eventNames","events","name","names","slice","getOwnPropertySymbols","listeners","handlers","l","ee","listenerCount","a1","a2","a3","a4","a5","args","len","j","off","prefixed","module","exports","$9e147bff680d369e$var$__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","next","rejected","done","equal","RegExp","source","flags","valueOf","$9e147bff680d369e$export$3b0d6d7590275603","authReferrerPolicy","channel","client","$9e147bff680d369e$export$19fc78b4b5aa5d0d","mapIds","nonce","region","retries","url","callbacks","loading","errors","isEqual","$9e147bff680d369e$var$fastDeepEqual","JSON","stringify","$9e147bff680d369e$export$406cfe323c8bb8e4","FAILURE","SUCCESS","LOADING","INITIALIZED","failed","createUrl","join","script","loadPromise","loadCallback","importLibrary","execute","_a1","_b","params","v","g","q","m","Set","URLSearchParams","u","_a","onerror","h","querySelector","append","f","libraryPromises","library","all","ErrorEvent","loadErrorCallback","deleteScript","onerrorEvent","reset","delay","setScript","cb","resetIfRetryingFailed","$2ada3220b114143a$var$Point","clone","_add","multByPoint","_multByPoint","divByPoint","_divByPoint","mult","k","_mult","_div","rotate","rotateAround","_rotateAround","matMult","_matMult","unit","_unit","perp","_perp","_round","mag","equals","other","distSqr","dx","dy","atan2","angleTo","angleWith","angleWithSep","cos","sin","PoiMarkerInternal","$gqGvd","MapMarker","$6a247af817128246$var$NearbyServicesPoiDetails","getCompareProps","isPrimary","noDetailsWindow","currentProps","areDeepEqual","$6a247af817128246$export$90d2fdeefe912c5d","NearbyServicesPoiDetails","locationData","useLocationData","getResourceText","useResource","businessEntityResultsUrl","getBusinessEntityUrl","be","businessEntities","find","municipality","municipalities","municipalityId","subArea","municipalitySubAreaId","municipalitySubAreas","GetUrlForBusinessEntityResults","slug","$1EZqf","FillMapIcon","beelineDistance","formatDistance","street","zipCode","postOffice","$e3EsW","to","clearApartmentSearchState","$jjuiK","ResourceText","resourceKey","defaultText","toggleVisiblity","onClose","Fragment","title","icon","$icxVu","IconMapSchoolFill","IconMapGroceriesFill","IconMapDaycareFill","IconMapRestaurantFill","IconMapHealthServicesFill","IconMapCultureFill","IconMapSportsFill","IconMapPublicTransportFill"],"version":3,"file":"MapComponentWrapper.7a40a7fd.js.map"}