{"version":3,"sources":["webpack:///./src/common/dept.jsx","webpack:///./src/common/geojson.js","webpack:///./node_modules/topojson-client/src/identity.js","webpack:///./node_modules/topojson-client/src/transform.js","webpack:///./node_modules/topojson-client/src/feature.js","webpack:///./node_modules/topojson-client/src/reverse.js","webpack:///./src/components/GoogleMap/googleMapContext.jsx","webpack:///./src/components/InfoPanel/FileDownload.jsx","webpack:///./src/components/InfoPanel/Spinner.jsx","webpack:///./src/components/InfoPanel/UploadIcon.jsx","webpack:///./src/components/InfoPanel/upload-helpers.js","webpack:///./src/components/InfoPanel/FileUpload.jsx","webpack:///./src/common/id-helpers.js","webpack:///./src/components/Forms/TextInput.jsx","webpack:///./src/components/Forms/SelectInput.jsx","webpack:///./node_modules/react-google-recaptcha/lib/esm/recaptcha.js","webpack:///./node_modules/react-async-script/lib/esm/async-script-loader.js","webpack:///./node_modules/react-google-recaptcha/lib/esm/recaptcha-wrapper.js","webpack:///./node_modules/react-google-recaptcha/lib/esm/index.js","webpack:///./src/common/azureFunctions.js","webpack:///./src/components/InfoPanel/InfoForm.jsx","webpack:///./src/components/InfoPanel/DeptInfo.jsx","webpack:///./src/components/GoogleMap/legendState.js","webpack:///./src/components/GoogleMap/createDotsOverlay.js","webpack:///./node_modules/d3-array/src/fsum.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/stream.js","webpack:///./node_modules/d3-geo/src/centroid.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./src/components/GoogleMap/theme.js","webpack:///./node_modules/@react-google-maps/marker-clusterer/dist/markerclusterer.esm.js","webpack:///./node_modules/@react-google-maps/api/node_modules/@googlemaps/js-api-loader/dist/index.esm.js","webpack:///./node_modules/@react-google-maps/infobox/dist/infobox.esm.js","webpack:///./node_modules/@react-google-maps/api/dist/reactgooglemapsapi.esm.js","webpack:///./src/components/GoogleMap/MapOverlay.jsx","webpack:///./src/components/GoogleMap/SelectedDeptOverlay.jsx","webpack:///./src/components/GoogleMap/GoogleMap.jsx","webpack:///./src/common/usePrevious.js","webpack:///./src/components/MapPanel/MapPanel.jsx","webpack:///./src/components/ProgressChart/ProgressChart.jsx","webpack:///./src/components/MapPage/ProgressSection.jsx","webpack:///./src/components/InfoPanel/GettingStarted.jsx","webpack:///./src/common/useContentfulLocationInfo.js","webpack:///./src/components/InfoPanel/StateInfo.jsx","webpack:///./src/components/InfoPanel/USInfo.jsx","webpack:///./src/components/MapPage/MapPage.jsx","webpack:///./src/pages/map.jsx","webpack:///./src/img/has-data-icon-plain.png","webpack:///./src/img/no-data-icon-border.png","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack:///./azure-functions/contentful-upload-dept-file/uploadStatus.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./src/common/useBoundingClientRect.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/react-is/index.js","webpack:///./azure-functions/contentful-upload-dept-file/recaptcha-client.js","webpack:///./node_modules/d3-shape/src/arc.js","webpack:///./src/img/has-data-icon-border.png","webpack:///./src/img/no-data-icon-plain.png","webpack:///./node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js"],"names":["infoTooltipShape","shape","label","string","tooltipContent","node","dataFileShape","ori","isRequired","file","name","description","uploading","infoTooltip","deptShape","dataFiles","arrayOf","foiaRejections","latitude","number","longitude","stateAbbreviation","stateName","icons","hasData","plain","hasDataIconPlainSrc","border","hasDataIconBorderSrc","noData","noDataIconPlainSrc","noDataIconBorderSrc","getDataIconSrc","status","zoom","getDataIconImg","src","alt","getDeptStatus","dept","R","length","foiaRejection","getFeatureBoundingBox","feature","geometry","getCoordinatesBoundingBox","coordinates","bbox","coordinate","west","south","east","north","Infinity","x","transform","identity","x0","y0","kx","scale","ky","dx","translate","dy","input","i","j","n","output","Array","topology","o","id","properties","type","transformPoint","arcs","arc","points","pop","a","k","push","t","array","reverse","point","p","line","ring","polygon","map","geometries","statesGeoJson","statesTopoJson","objects","states","features","googleMapContext","React","createContext","GoogleMapProvider","props","setMap","useState","panToState","useCallback","stateBounds","fitBounds","context","useMemo","Provider","value","useGoogleMapContext","useContext","propTypes","uploaded","FileDownload","className","formatDate","InfoTooltip","trianglePlacement","ContentfulLink","to","Spinner","xmlns","width","height","viewBox","preserveAspectRatio","y","rx","ry","fill","attributeName","values","keyTimes","dur","begin","repeatCount","UploadIcon","otherProps","stroke","strokeWidth","strokeLinecap","strokeLinejoin","cx","d","x1","y1","x2","y2","validExtensions","deptName","uploadState","setUploadState","func","dragState","handleFileChosen","hasError","bool","selectedFile","object","setSelectedFile","validExtensionsString","extension","FileUpload","forwardRef","ref","containerRef","useRef","fileInputRef","contentfulData","useStaticQuery","query","uploadSuccess","uploadFailure","extractRichText","handleChooseFileClick","e","current","click","console","error","UPLOAD_FILE_SUCCESS","htmlFor","aria-required","style","display","aria-hidden","onInput","accept","required","onClick","aria-describedby","role","UPLOAD_RECAPTCHA_FAILED","UPLOAD_FILE_DENIED","UPLOAD_FILE_ERROR","Modal","isOpen","onClose","createInputId","replace","toLowerCase","Math","round","random","createErrorId","placeholder","errorMsg","handleBlur","TextInput","onBlur","options","handleOnChange","SelectInput","onChange","option","_extends","Object","assign","target","arguments","source","key","prototype","hasOwnProperty","call","apply","this","_assertThisInitialized","self","ReferenceError","_React$Component","subClass","superClass","ReCAPTCHA","_this","handleExpired","bind","handleErrored","handleChange","handleRecaptchaRef","create","constructor","__proto__","_proto","getValue","grecaptcha","undefined","_widgetId","getResponse","getWidgetId","execute","_executeRequested","executeAsync","_this2","Promise","resolve","reject","executionResolve","executionReject","reset","onExpired","onErrored","token","explicitRender","render","wrapper","document","createElement","sitekey","callback","theme","tabindex","size","stoken","hl","badge","captcha","appendChild","componentDidMount","componentDidUpdate","componentWillUnmount","delayOfCaptchaIframeRemoving","temporaryNode","body","firstChild","setTimeout","removeChild","elem","_this$props","childProps","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","Component","displayName","defaultProps","SCRIPT_MAP","idCount","getScriptURL","window","recaptchaOptions","useRecaptchaNet","callbackName","globalName","WrappedComponent","wrappedComponentName","AsyncScriptLoader","_Component","state","__scriptURL","asyncScriptLoaderGetScriptLoaderID","__scriptLoaderID","setupScriptURL","asyncScriptLoaderHandleLoad","setState","asyncScriptOnLoad","asyncScriptLoaderTriggerOnScriptLoaded","mapEntry","loaded","Error","obsKey","observers","_this3","scriptURL","_options","scriptId","entry","errored","script","attribute","async","attributes","setAttribute","callObserverFuncAndRemoveObserver","observersMap","onload","observer","onerror","removeOnUnmount","allScripts","getElementsByTagName","parentNode","forwardedRef","ForwardedComponent","safeParse","JSON","parse","InfoForm","buttonDisabled","setButtonDisabled","setToken","formRef","firstNameRef","lastNameRef","emailRef","cellPhoneRef","selectRef","dropZoneRef","errorData","setErrorData","useReducer","prevState","updatedProperty","firstNameError","lastNameError","emailError","cellPhoneError","selectedFileError","selectSourceError","setDragState","uploadedDate","Date","now","timeStamp","format","getExtension","fileName","useEffect","allErrors","requiredInputArray","filter","uploadFileToApi","recaptchaToken","recaptchaClientKey","formData","filename","url","FormData","append","fetch","method","then","response","ok","json","parsed","uploadFileForDepartment","result","uploadStatus","submitData","catch","initiateFileUpload","ready","RECAPTCHA_CLIENT_KEY_V3","action","scrollToCenter","preventDefault","files","dropZone","preventDefaults","stopPropagation","handleDrag","handleLeave","handleDrop","dataTransfer","addEventListener","removeEventListener","checkHasError","fieldRef","errorProperty","getAttribute","match","trim","setErrorProperty","requestOptions","headers","Headers","redirect","getLoginUrlResponse","firstName","lastName","email","phone","bodyParams","URLSearchParams","warn","log","legalText","contentfulMapPage","formLegalText","dataSourceOptions","uploadDataSourceOptions","unshift","onSubmit","fileHasError","errorArray","disabled","RECAPTCHA_CLIENT_KEY_V2","href","rel","deptData","DeptInfo","data","uploadHelpNoData","uploadHelpFoiaRejection","uploadHelpHasData","content","deptStatus","uploadHelpText","getMapEntityUrl","dataFile","initialState","isActive","legendStateType","oneOf","isStatusActive","legendState","derrivedStatus","createDotsOverlay","args","DotsOverlay","onAddCallback","bounds","getBounds","google","maps","OverlayView","onAdd","div","borderStyle","borderWidth","position","img","canvas","getPanes","overlayLayer","drawDots","allDepartments","dotRadius","onDrawFinished","positions","getPositions","left","top","getContext","clearRect","deptsInBounds","contains","lat","lng","forEach","coordinatesToPoint","cy","r","icon","getIconImg","imageSmoothingEnabled","globalAlpha","drawImage","drawIcon","toDataURL","draw","overlayProjection","getProjection","sw","fromLatLngToDivPixel","getSouthWest","ne","getNorthEast","onRemove","div_","projection","fromLatLngToContainerPixel","LatLng","Image","Adder","_partials","Float64Array","_n","hi","lo","abs","pi","PI","halfPi","degrees","radians","atan2","atan","cos","hypot","ceil","exp","floor","sin","pow","sqrt","sign","tan","asin","streamGeometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","lineStart","lineEnd","polygonStart","polygonEnd","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","lambda00","phi00","z0","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","lambda","phi","cosPhi","centroidPointCartesian","z","centroidLinePointFirst","centroidLinePoint","w","centroidRingPointFirst","centroidRingPoint","cz","m","v","add","NaN","featureType","elementType","stylers","saturation","visibility","gamma","lightness","weight","color","ClusterIcon","Loader","_a","apiKey","channel","_b","_c","libraries","language","region","version","mapIds","nonce","_d","CALLBACK","callbacks","done","loading","createUrl","join","load","loadPromise","loadCallback","err","fn","setScript","getElementById","loadErrorCallback","defer","head","onerrorEvent","setCallback","__googleMapsCallback","cb","cluster","styles","getClusterer","extend","getClusterClass","center","sums","visible","boundsChangedListener","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","getMap","cMouseDownInCluster","cDraggingMapByCluster","show","overlayMouseTarget","event","addListener","addDomListener","markerClusterer","trigger","getZoomOnClick","maxZoom","getMaxZoom","getZoom","setZoom","cancelBubble","hide","removeListener","clearInstanceListeners","_this$getPosFromLatLn","getPosFromLatLng","divTitle","bp","split","spriteH","parseInt","spriteV","pos","title","getTitle","cssText","createCss","enableRetinaIcons","innerHTML","text","useStyle","min","max","index","setCenter","latlng","Cluster","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","clusterIcon","getStyles","getSize","getMarkers","getCenter","LatLngBounds","getPosition","remove","addMarker","marker","isMarkerAlreadyAdded","_position","calculateBounds","isAdded","mCount","isMarkerInClusterBounds","getExtendedBounds","updateIcon","getCalculator","includes","CALCULATOR","numStyles","count","toString","dv","IMAGE_SIZES","Clusterer","optMarkers","optOptions","clusters","listeners","activeMap","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","_i","_i2","fitMapToMarkers","setGridSize","setMinimumClusterSize","setMaxZoom","setStyles","setTitle","setZoomOnClick","setAverageCenter","getIgnoreHidden","setIgnoreHidden","getEnableRetinaIcons","setEnableRetinaIcons","getImageExtension","setImageExtension","getImagePath","setImagePath","getImageSizes","setImageSizes","setCalculator","getBatchSizeIE","setBatchSizeIE","setClusterClass","getTotalMarkers","getClusters","getTotalClusters","optNoDraw","pushMarkerTo","getDraggable","removeMarker_","splice","removeMarker","removed","removeMarkers","clearMarkers","oldClusters","slice","trPix","blPix","fromDivPixelToLatLng","createClusters","optHide","_i3","distanceBetweenPoints","p1","p2","dLat","dLon","isMarkerInBounds","addToClosestCluster","distance","clusterToAddTo","iFirst","clearTimeout","mapBounds","iLast","getVisible","_i4","obj1","obj2","property","InfoBox","disableAutoPan","maxWidth","pixelOffset","Size","zIndex","boxClass","boxStyle","closeBoxMargin","closeBoxURL","infoBoxClearance","isHidden","alignBottom","pane","enableEventPropagation","closeListener","moveListener","mapListener","contextListener","eventListeners","fixedWidthSet","createInfoBoxDiv","cancelHandler","setBoxStyle","getCloseBoxImg","addClickHandler","offsetWidth","bw","getBoxWidths","right","panBox","events","cursor","returnValue","closeBox","getCloseClickHandler","close","disablePan","Map","xOffset","yOffset","mapDiv","getDiv","mapWidth","mapHeight","offsetHeight","iwOffsetX","iwOffsetY","iwWidth","iwHeight","padX","padY","pixPosition","panBy","webkitTransform","opacity","parseFloat","msFilter","overflow","bottom","defaultView","getComputedStyle","ownerDocument","computedStyle","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","documentElement","currentStyle","setOptions","setContent","setPosition","setZIndex","latLng","setVisible","isVisible","getContent","getZIndex","open","anchor","asyncGeneratorStep","gen","_next","_throw","arg","info","_asyncToGenerator","MapContext","applyUpdaterToNextProps","updaterMap","prevProps","nextProps","instance","obj","nextValue","registerEvents","eventMap","acc","reduce","newAcc","googleEventName","onEventName","unregisterEvent","registered","unregisterEvents","applyUpdatersToPropsAndRegisterEvents","_ref","registeredEvents","onDblClick","onDragEnd","onDragStart","onMapTypeIdChanged","onMouseMove","onMouseOut","onMouseOver","onMouseDown","onMouseUp","onRightClick","onTilesLoaded","onBoundsChanged","onCenterChanged","onDrag","onHeadingChanged","onIdle","onProjectionChanged","onResize","onTiltChanged","onZoomChanged","extraMapTypes","extra","it","mapTypes","set","String","_center","clickableIcons","clickable","setClickableIcons","heading","_heading","setHeading","mapTypeId","_mapTypeId","setMapTypeId","streetView","_streetView","setStreetView","tilt","_tilt","setTilt","_zoom","_React$PureComponent","GoogleMap","mapRef","getInstance","panTo","setMapCallback","onLoad","getRef","onUnmount","mapContainerStyle","mapContainerClassName","children","runtime_1","module","exports","createCommonjsModule","runtime","Op","hasOwn","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","undefined$1","TypeError","resultName","next","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isNaN","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","awrap","iter","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","isBrowser","injectScript","existingScript","windowWithGoogleMap","dataStateAttribute","originalInitMap","initMap","originalErrorCallback","isRobotoStyle","element","tagName","styleSheet","preventGoogleFonts","trueInsertBefore","insertBefore","newElement","referenceElement","Reflect","trueAppend","textNode","makeLoadScriptUrl","googleMapsApiKey","googleMapsClientId","_ref$version","params","sort","cleaningUp","DefaultLoadingElement","previouslyLoadedUrl","defaultLoadScriptProps","useLoadScript","_ref$id","preventGoogleFontsLoading","isMounted","_React$useState","isLoaded","setLoaded","_React$useState2","loadError","setLoadError","setLoadedIfMounted","prevLibraries","LoadScript","check","cleanupCallback","isCleaningUp","_callee","promiseCallback","_context","timer","setInterval","clearInterval","cleanup","link","innerText","injectScriptOptions","onError","loadingElement","eventMap$1","updaterMap$1","_PureComponent","TrafficLayer","trafficLayer","setTrafficLayerCallback","contextType","BicyclingLayer","bicyclingLayer","setBicyclingLayerCallback","TransitLayer","transitLayer","setTransitLayerCallback","eventMap$2","onCircleComplete","onMarkerComplete","onOverlayComplete","onPolygonComplete","onPolylineComplete","onRectangleComplete","updaterMap$2","drawingMode","_drawingMode","setDrawingMode","DrawingManager","drawingManager","setDrawingManagerCallback","drawing","eventMap$3","onAnimationChanged","onClickableChanged","onCursorChanged","onDraggableChanged","onFlatChanged","onIconChanged","onPositionChanged","onShapeChanged","onTitleChanged","onVisibleChanged","onZindexChanged","updaterMap$3","animation","_animation","setAnimation","_clickable","setClickable","_cursor","setCursor","draggable","_draggable","setDraggable","_icon","setIcon","_label","setLabel","_map","_opacity","setOpacity","_shape","setShape","_title","_visible","_zIndex","Marker","setMarkerCallback","markerOptions","clusterer","noClustererRedraw","child","elementChild","eventMap$4","onClusteringBegin","onClusteringEnd","updaterMap$4","_averageCenter","_batchSizeIE","_calculator","_clusterClass","_enableRetinaIcons","_gridSize","_ignoreHidden","_imageExtension","_imagePath","_imageSizes","_maxZoom","_minimumClusterSize","_styles","_zoomOnClick","ClustererComponent","setClustererCallback","eventMap$5","onCloseClick","onContentChanged","onDomReady","updaterMap$5","InfoBoxComponent","containerElement","infoBox","setInfoBoxCallback","positionLatLng","infoBoxOptions","only","eventMap$6","updaterMap$6","InfoWindow","infoWindow","setInfoWindowCallback","eventMap$7","updaterMap$7","editable","_editable","setEditable","path","_path","setPath","Polyline","polyline","setPolylineCallback","eventMap$8","updaterMap$8","paths","_paths","setPaths","setPolygonCallback","eventMap$9","updaterMap$9","_bounds","setBounds","Rectangle","rectangle","setRectangleCallback","eventMap$a","onRadiusChanged","updaterMap$a","radius","_radius","setRadius","Circle","circle","setCircleCallback","eventMap$b","onAddFeature","onRemoveFeature","onRemoveProperty","onSetGeometry","onSetProperty","updaterMap$b","addgeojson","geojson","addGeoJson","foreach","loadgeojson","loadGeoJson","overridestyle","overrideStyle","revertstyle","revertStyle","controlposition","controlPosition","setControlPosition","controls","_controls","setControls","drawingmode","mode","_style","setStyle","togeojson","toGeoJson","Data","setDataCallback","eventMap$c","onDefaultViewportChanged","onStatusChanged","updaterMap$c","_url","setUrl","KmlLayer","kmlLayer","setKmlLayerCallback","createLatLng","inst","Type","createLatLngBounds","ensureOfType","factory","convertToLatLngString","latLngLike","convertToLatLngBoundsString","latLngBoundsLike","paneEl","containerStyle","updatePane","mapPaneName","mapPanes","overlayView","onPositionElement","getPixelPositionOffset","currentPosition","previousPosition","layoutStyles","mapCanvasProjection","offset","getLayoutStylesByBounds","getLayoutStylesByPosition","getLayoutStyles","_this$state$container","prevPositionString","positionString","prevBoundsString","boundsString","FLOAT_PANE","MAP_PANE","MARKER_LAYER","OVERLAY_LAYER","OVERLAY_MOUSE_TARGET","eventMap$d","updaterMap$d","GroundOverlay","groundOverlay","setGroundOverlayCallback","eventMap$e","updaterMap$e","_data","setData","HeatmapLayer","heatmapLayer","setHeatmapLayerCallback","visualization","eventMap$f","onPanoChanged","onPovChanged","updaterMap$f","register","provider","registerPanoProvider","links","_links","setLinks","motionTracking","_motionTracking","setMotionTracking","pano","_pano","setPano","pov","_pov","setPov","StreetViewPanorama","streetViewPanorama","setStreetViewPanoramaCallback","getStreetView","StreetViewService","streetViewService","setStreetViewServiceCallback","eventMap$g","onDirectionsChanged","updaterMap$g","directions","_directions","setDirections","panel","_panel","setPanel","routeIndex","_routeIndex","setRouteIndex","DirectionsRenderer","directionsRenderer","setDirectionsRendererCallback","eventMap$h","onPlacesChanged","updaterMap$h","StandaloneSearchBox","searchBox","setSearchBoxCallback","places","querySelector","SearchBox","eventMap$i","onPlaceChanged","updaterMap$i","restrictions","_restrictions","setComponentRestrictions","fields","_fields","setFields","types","_types","setTypes","Autocomplete","autocomplete","setAutocompleteCallback","legends","onLegendChange","MapOverlay","legend","navigateToMapEntity","hawaii","alaska","MAX_ZOOM","aria-label","plus","MIN_ZOOM","minus","selectedDeptData","SelectedDeptOverlay","getBoundingClientRect","padding","panToBounds","CONUS_CENTER","CONUS_BOUNDS","useContentfulDepartments","statesOverlay","setStatesOverlay","dotsOverlay","setDotsOverlay","deptQuadtree","setDeptQuadtree","hoveredStateName","setHoveredStateName","toggleLegendItem","setLegendState","useLegendState","mapUrlId","useMapUrlId","mapUrlType","getMapIdType","prevMapUrlId","usePrevious","scrollToInfoPanel","useMapScroll","MAP_DEPARTMENT","usSelected","MAP_US","selectedStateName","MAP_STATE","lookupStateName","selectedDeptStateName","featureStateName","getProperty","setProperty","centroid","geoCentroid","hoveredDeptOri","setHoveredDeptOri","hoveredDept","rLookup","dotInterationDisabled","setDotInteractionDisabled","handleClick","pixel","find","handleMouseMove","hoveredDeptPosition","activeDepts","newDeptQuadtree","quadtree","addAll","container","handleKeyDown","newMapEntity","overlay","mapZoom","fullscreenControl","mapTypeControl","minZoom","rotateControl","scaleControl","streetViewControl","zoomControl","abbreviation","lookupStateAbbreviation","deptInStateSelected","stateSelected","isHovered","fillColor","fillOpacity","strokeColor","strokeOpacity","strokeWeight","deptOrStateSelected","onMouseEnter","onMouseLeave","Popup","flipToContain","MapPanel","mapHolderRef","mapPanelRef","mapHolderWidth","useBoundingClientRect","sideBySide","windowWidth","windowHeight","useWindowSize","isLargeScreen","useResponsiveMap","Search","collected","percentage","ProgressChart","arcGenerator","backgroundCircle","innerRadius","outerRadius","startAngle","endAngle","percentageArc","fontSize","formatPercentageNice","Progress","total","progressSectionTitle","progressText","Container5050","swapStack","formatNumber","GettingStarted","useContentfulLocationInfo","locationName","StateInfo","formatPercentage","USInfo","MapPage","panelInfo","topHeroBanner","extractBanner","bottomBanner","Page","ProgressSection","Banner","GatsbyMapPage","reactIs","REACT_STATICS","childContextTypes","contextTypes","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","Memo","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","concat","targetStatics","sourceStatics","descriptor","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","l","acos","t01","t21","a0","a1","ccw","cw","da","rect","h","refProp","dimensions","setDimensions","fallbackRef","measure","timeoutId","measureDebounce","debounce","cancel","epsilon","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cornerRadius","padRadius","buffer","r0","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","oc","ax","ay","bx","by","kc","lc","b","for","c","f","g","q","u","$$typeof","A","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","tree","parent","xm","ym","xp","yp","_root","leaf","_x","_y","defaultX","defaultY","nodes","Quadtree","leaf_copy","copy","treeProto","cover","xz","yz","visit","extent","quads","retainer","previous","removeAll","root","visitAfter"],"mappings":"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","file":"component---src-pages-map-jsx-9733070b2d8771b26a02.js","sourcesContent":["import * as R from \"ramda\";\r\nimport { arrayOf, node, number, shape, string } from \"prop-types\";\r\n\r\nconst infoTooltipShape = shape({\r\n label: string,\r\n tooltipContent: node,\r\n});\r\n\r\nconst dataFileShape = shape({\r\n ori: string.isRequired,\r\n file: string.isRequired, // url\r\n name: string,\r\n description: node,\r\n uploading: string, // ISO date string\r\n infoTooltip: infoTooltipShape,\r\n});\r\n\r\nexport const deptShape = shape({\r\n dataFiles: arrayOf(dataFileShape).isRequired, // can be empty, defaults to [] in contentfulDepartments\r\n foiaRejections: arrayOf(dataFileShape).isRequired, // can be empty, defaults to [] in contentfulDepartments\r\n latitude: number, // lat/lon not required\r\n longitude: number,\r\n name: string.isRequired,\r\n ori: string.isRequired,\r\n stateAbbreviation: string.isRequired,\r\n stateName: string.isRequired,\r\n});\r\n\r\n// department status\r\nexport const HAS_DATA = \"has-data\";\r\nexport const HAS_FOIA_REJECTION = \"foia-rejection\";\r\nexport const NO_DATA = \"no-data\";\r\n\r\nimport hasDataIconPlainSrc from \"../img/has-data-icon-plain.png\";\r\nimport noDataIconPlainSrc from \"../img/no-data-icon-plain.png\";\r\nimport hasDataIconBorderSrc from \"../img/has-data-icon-border.png\";\r\nimport noDataIconBorderSrc from \"../img/no-data-icon-border.png\";\r\n\r\n// the plain image is for the zoomed out map when the icons are small. The fancy\r\n// border at this icon size was showing aliasing artifacts.\r\nconst icons = {\r\n hasData: {\r\n plain: hasDataIconPlainSrc,\r\n border: hasDataIconBorderSrc,\r\n },\r\n noData: {\r\n plain: noDataIconPlainSrc,\r\n border: noDataIconBorderSrc,\r\n },\r\n};\r\n\r\n// used by getDataIconImg below, and in createDotsOverlay to draw on the canvas\r\n// default to large zoom, which is the more fancy image (eg. for static images\r\n// in legend, etc)\r\nexport const getDataIconSrc = (status, zoom = 13) => {\r\n const iconKey = status === HAS_DATA ? \"hasData\" : \"noData\";\r\n const iconFancyFactor = zoom <= 10 ? \"plain\" : \"border\";\r\n return icons[iconKey][iconFancyFactor];\r\n};\r\n\r\nexport const getDataIconImg = (status) => {\r\n return \"\";\r\n};\r\n\r\nexport const getDeptStatus = (dept) => {\r\n const dataFiles = R.propOr([], \"dataFiles\", dept);\r\n\r\n // if we have at least 1 public data file (even if there is a FOIA rejection)\r\n if (dataFiles.length > 0) {\r\n return HAS_DATA;\r\n }\r\n // this dept has a foia rejection file\r\n else if (!R.isNil(dept.foiaRejection)) {\r\n return HAS_FOIA_REJECTION;\r\n }\r\n // otherwise\r\n else {\r\n return NO_DATA;\r\n }\r\n};\r\n\r\nexport const getDeptColor = (status) => {\r\n switch (status) {\r\n case HAS_DATA:\r\n return \"#7ca554\"; // green\r\n case HAS_FOIA_REJECTION:\r\n case NO_DATA:\r\n return \"#e5ba24\"; // yellow\r\n default:\r\n return \"grey\";\r\n }\r\n};\r\n","import * as R from \"ramda\";\r\n\r\n/**\r\n * getFeatureBoundingBox\r\n * @param {Object} feature geojson feature object https://tools.ietf.org/html/rfc7946#section-3.2\r\n * {\r\n * type: \"Feature\",\r\n * geometry: {\r\n * type: // Polygon or MultiPolygon\r\n * coordinates: // Polygon or MultiPolygon coordinates\r\n * },\r\n * properties: { ... }\r\n * }\r\n *\r\n * Polygon coordinates (linear ring): [ [longitude, latitude], ...]\r\n * https://tools.ietf.org/html/rfc7946#section-3.1.6\r\n *\r\n * MultiPolygon coordinates: [ Polygon coordinates, ... ]\r\n *\r\n * @return {Array} a bbox value, array of [west, south, east, north] https://tools.ietf.org/html/rfc7946#section-5.1\r\n * where west/east are longitude values, and north/south are latitude values\r\n *\r\n * another implementation: https://gist.github.com/JamesChevalier/b03b7423bf330f959076\r\n */\r\nexport function getFeatureBoundingBox(feature = {}) {\r\n const { geometry = {} } = feature;\r\n\r\n const bounds = R.cond([\r\n [\r\n R.propEq(\"type\", \"Polygon\"),\r\n R.compose(getCoordinatesBoundingBox, R.path([\"coordinates\", 0])),\r\n ],\r\n [\r\n R.propEq(\"type\", \"MultiPolygon\"),\r\n R.compose(\r\n getCoordinatesBoundingBox,\r\n R.unnest,\r\n R.unnest,\r\n R.prop(\"coordinates\"),\r\n ),\r\n ],\r\n ])(geometry);\r\n\r\n return bounds;\r\n}\r\n\r\n/**\r\n * getCoordinatesBoundingBox\r\n * @param {Array} coordinates\r\n * Polygon coordinates (linear ring): [ [longitude, latitude], ...]\r\n * https://tools.ietf.org/html/rfc7946#section-3.1.6\r\n * @return {Array} a bbox value, array of [west, south, east, north] https://tools.ietf.org/html/rfc7946#section-5.1\r\n * where west/east are longitude values, and north/south are latitude values\r\n */\r\nfunction getCoordinatesBoundingBox(coordinates) {\r\n return R.compose(\r\n R.values,\r\n R.reduce(\r\n (bbox, coordinate) => {\r\n const [longitude, latitude] = coordinate;\r\n\r\n return R.evolve(\r\n {\r\n west: R.min(longitude),\r\n south: R.max(latitude),\r\n east: R.max(longitude),\r\n north: R.min(latitude),\r\n },\r\n bbox,\r\n );\r\n },\r\n { west: Infinity, south: -Infinity, east: -Infinity, north: Infinity },\r\n ),\r\n )(coordinates);\r\n}\r\n","export default function (x) {\n return x;\n}","import identity from \"./identity.js\";\nexport default function (transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function (input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2,\n n = input.length,\n output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n\n while (j < n) output[j] = input[j], ++j;\n\n return output;\n };\n}","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\nexport default function (topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\" ? {\n type: \"FeatureCollection\",\n features: o.geometries.map(function (o) {\n return feature(topology, o);\n })\n } : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {\n type: \"Feature\",\n properties: properties,\n geometry: geometry\n } : bbox == null ? {\n type: \"Feature\",\n id: id,\n properties: properties,\n geometry: geometry\n } : {\n type: \"Feature\",\n id: id,\n bbox: bbox,\n properties: properties,\n geometry: geometry\n };\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n\n\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type,\n coordinates;\n\n switch (type) {\n case \"GeometryCollection\":\n return {\n type: type,\n geometries: o.geometries.map(geometry)\n };\n\n case \"Point\":\n coordinates = point(o.coordinates);\n break;\n\n case \"MultiPoint\":\n coordinates = o.coordinates.map(point);\n break;\n\n case \"LineString\":\n coordinates = line(o.arcs);\n break;\n\n case \"MultiLineString\":\n coordinates = o.arcs.map(line);\n break;\n\n case \"Polygon\":\n coordinates = polygon(o.arcs);\n break;\n\n case \"MultiPolygon\":\n coordinates = o.arcs.map(polygon);\n break;\n\n default:\n return null;\n }\n\n return {\n type: type,\n coordinates: coordinates\n };\n }\n\n return geometry(o);\n}","export default function (array, n) {\n var t,\n j = array.length,\n i = j - n;\n\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}","import React, { useCallback, useContext, useMemo, useState } from \"react\";\r\nimport * as R from \"ramda\";\r\n\r\nimport { getFeatureBoundingBox } from \"../../common/geojson.js\";\r\n\r\nimport statesTopoJson from \"./states-10m.json\";\r\nimport { feature } from \"topojson-client\";\r\n\r\nexport const statesGeoJson = feature(\r\n statesTopoJson,\r\n statesTopoJson.objects.states,\r\n);\r\n\r\nconst googleMapContext = React.createContext();\r\n\r\n// we need the `map` in context so we can call `panToState` from different places\r\n// in the app. eg. GoogleMap.jx, DeptInfo.jsx, StateInfo.jsx\r\nexport const GoogleMapProvider = (props) => {\r\n const [map, setMap] = useState();\r\n\r\n const panToState = useCallback(\r\n (stateName) => {\r\n const stateBounds = R.compose(\r\n R.unless(R.isNil, R.zipObj([\"west\", \"south\", \"east\", \"north\"])),\r\n getFeatureBoundingBox,\r\n R.find(R.pathEq([\"properties\", \"name\"], stateName)),\r\n )(statesGeoJson.features);\r\n\r\n if (map && stateBounds) {\r\n map.fitBounds(stateBounds);\r\n }\r\n },\r\n [map],\r\n );\r\n\r\n const context = useMemo(() => {\r\n return { map, setMap, panToState };\r\n }, [map, panToState]);\r\n\r\n return ;\r\n};\r\n\r\nexport function useGoogleMapContext() {\r\n return useContext(googleMapContext);\r\n}\r\n","import { node, shape, string } from \"prop-types\";\r\nimport { formatDate } from \"../../common/format.js\";\r\n\r\nimport ContentfulLink from \"../ContentfulLink/ContentfulLink.jsx\";\r\nimport InfoTooltip from \"../InfoTooltip/InfoTooltip.jsx\";\r\n\r\nimport \"./file-download.scss\";\r\n\r\nconst propTypes = {\r\n name: string,\r\n description: node,\r\n file: string,\r\n infoTooltip: shape({\r\n label: string,\r\n tooltipContent: node,\r\n }),\r\n uploaded: string,\r\n};\r\n\r\nconst FileDownload = (props) => {\r\n const { name, description, file, infoTooltip, uploaded } = props;\r\n\r\n return (\r\n
\r\n {name &&
{name}
}\r\n {description && (\r\n
{description}
\r\n )}\r\n
\r\n Uploaded on {formatDate(uploaded)}\r\n
\r\n\r\n {infoTooltip && (\r\n
\r\n
\r\n {infoTooltip.label}\r\n
{\" \"}\r\n \r\n {infoTooltip.tooltipContent}\r\n \r\n
\r\n )}\r\n\r\n \r\n Download\r\n \r\n
\r\n );\r\n};\r\n\r\nFileDownload.propTypes = propTypes;\r\nexport default FileDownload;\r\n","import {} from \"prop-types\";\r\n\r\nconst propTypes = {};\r\n\r\nconst Spinner = (props) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n );\r\n};\r\n\r\nSpinner.propTypes = propTypes;\r\nexport default Spinner;\r\n","import cx from \"classnames\";\r\nimport { string } from \"prop-types\";\r\n\r\nconst propTypes = {\r\n className: string,\r\n};\r\n\r\nconst UploadIcon = (props) => {\r\n const { className, ...otherProps } = props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nUploadIcon.propTypes = propTypes;\r\nexport default UploadIcon;\r\n","export const DRAG_IDLE = \"drag-idle\";\r\nexport const DRAG_HOVERED = \"drag-hovered\";\r\nexport const UPLOAD_INPROGRESS = \"in-progress\";\r\nexport const UPLOAD_IDLE = \"upload-idle\";\r\nexport const UPLOAD_UPLOADING = \"upload-uploading\";\r\nexport const UPLOAD_BAD_EXTENSION = \"upload-bad-extension\";\r\nexport const validExtensions = [\"csv\", \"xls\", \"xlsx\", \"pdf\", \"doc\"];\r\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport cx from \"classnames\";\r\nimport { bool, object, string, func } from \"prop-types\";\r\nimport { graphql, useStaticQuery } from \"gatsby\";\r\nimport { extractRichText } from \"../../common/contentful-extract.jsx\";\r\n\r\nimport Modal from \"../Modal/Modal.jsx\";\r\nimport Spinner from \"./Spinner.jsx\";\r\nimport UploadIcon from \"./UploadIcon.jsx\";\r\n\r\nconst propTypes = {\r\n deptName: string.isRequired,\r\n ori: string.isRequired,\r\n uploadState: string,\r\n setUploadState: func,\r\n dragState: string,\r\n handleFileChosen: func,\r\n hasError: bool,\r\n selectedFile: object,\r\n setSelectedFile: func,\r\n};\r\n\r\nimport {\r\n UPLOAD_RECAPTCHA_FAILED,\r\n UPLOAD_FILE_DENIED,\r\n UPLOAD_FILE_SUCCESS,\r\n UPLOAD_FILE_ERROR,\r\n} from \"../../../azure-functions/contentful-upload-dept-file/uploadStatus.js\";\r\n\r\n// in addition to the backend file upload status from uploadStatus.js, there are a few frontend\r\n// specific states\r\nimport {\r\n DRAG_IDLE,\r\n UPLOAD_INPROGRESS,\r\n DRAG_HOVERED,\r\n UPLOAD_IDLE,\r\n UPLOAD_UPLOADING,\r\n UPLOAD_BAD_EXTENSION,\r\n validExtensions,\r\n} from \"./upload-helpers.js\";\r\n\r\n// used for accept attribute and error message\r\n// \".xlsx, .xls, .csv, .pdf\"\r\nconst validExtensionsString = R.compose(\r\n R.join(\", \"),\r\n R.map((extension) => `.${extension}`),\r\n)(validExtensions);\r\n\r\nconst FileUpload = React.forwardRef((props, ref) => {\r\n const {\r\n deptName,\r\n uploadState,\r\n setUploadState,\r\n dragState,\r\n handleFileChosen,\r\n hasError,\r\n selectedFile,\r\n setSelectedFile,\r\n } = props;\r\n\r\n const containerRef = useRef();\r\n const fileInputRef = useRef();\r\n\r\n const contentfulData = useStaticQuery(query);\r\n const { uploadSuccess, uploadFailure } = R.compose(\r\n R.evolve({\r\n uploadSuccess: extractRichText,\r\n uploadFailure: extractRichText,\r\n }),\r\n R.defaultTo({}),\r\n R.prop(\"contentfulMapPage\"),\r\n )(contentfulData);\r\n\r\n const handleChooseFileClick = useCallback((e) => {\r\n if (fileInputRef.current) {\r\n fileInputRef.current.click();\r\n }\r\n // this shouldn't happen, right??\r\n else {\r\n console.error(\"can't find file input!\");\r\n }\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n {\" \"}\r\n {uploadState !== UPLOAD_FILE_SUCCESS && (\r\n \r\n File*\r\n \r\n )}\r\n {uploadState === UPLOAD_IDLE || uploadState === UPLOAD_BAD_EXTENSION ? (\r\n <>\r\n
\r\n {\" \"}\r\n \r\n

\r\n Drag a file here\r\n
({validExtensionsString})\r\n

\r\n \r\n or select a file from your device\r\n \r\n
\r\n \r\n ) : uploadState === UPLOAD_INPROGRESS ? (\r\n
\r\n

\r\n {/* TODO: get updated copy */}\r\n Your file {selectedFile && selectedFile.name} is ready! To submit,\r\n please click the Upload Data below.\r\n

\r\n {\r\n setUploadState(UPLOAD_IDLE);\r\n setSelectedFile(null);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n clear\r\n \r\n
\r\n ) : uploadState === UPLOAD_UPLOADING ||\r\n uploadState === UPLOAD_RECAPTCHA_FAILED ? (\r\n
\r\n

\r\n \r\n Uploading...\r\n

\r\n
\r\n ) : uploadState === UPLOAD_FILE_SUCCESS ? (\r\n
{uploadSuccess}
\r\n ) : uploadState === UPLOAD_FILE_DENIED ? (\r\n
\r\n
Oh no!
\r\n

ReCAPTCHA thinks you're a robot!

\r\n setUploadState(UPLOAD_IDLE)}\r\n >\r\n Try again\r\n \r\n
\r\n ) : uploadState === UPLOAD_FILE_ERROR ? (\r\n
\r\n
{uploadFailure}
\r\n setUploadState(UPLOAD_IDLE)}\r\n >\r\n Try again\r\n \r\n
\r\n ) : null}\r\n
\r\n {hasError &&\r\n \" Please include a file. Only files of type .csv, .xls, .xlsx, .pdf, .doc are accepted.\"}\r\n
\r\n \r\n
\r\n \r\n Drop file to upload data for {deptName}\r\n
\r\n
\r\n setUploadState(UPLOAD_IDLE)}\r\n >\r\n
\r\n
Oh no!
\r\n

\r\n Please upload one of these file formats:\r\n
\r\n {validExtensionsString}\r\n

\r\n setUploadState(UPLOAD_IDLE)}\r\n >\r\n Try again\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n});\r\n\r\nFileUpload.propTypes = propTypes;\r\nexport default FileUpload;\r\n\r\nconst query = graphql`\r\n {\r\n contentfulMapPage {\r\n uploadSuccess {\r\n raw\r\n }\r\n uploadFailure {\r\n raw\r\n }\r\n }\r\n }\r\n`;\r\n","export const createInputId = (label) => {\r\n return label\r\n ? label.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~() ]/g, \"\").toLowerCase()\r\n : `id${Math.round(Math.random() * 10)}`;\r\n};\r\n\r\nexport const createErrorId = (label) => {\r\n const inputId = createInputId(label);\r\n return `${inputId}Error`;\r\n};\r\n\r\nexport const createDescriptionId = (label) => {\r\n const inputId = createInputId(label);\r\n return `${inputId}Description`;\r\n};\r\n","import React from \"react\";\r\nimport { string, bool, func } from \"prop-types\";\r\nimport { createInputId, createErrorId } from \"../../common/id-helpers.js\";\r\n\r\nconst propTypes = {\r\n hasError: bool,\r\n required: bool,\r\n label: string,\r\n placeholder: string,\r\n errorMsg: string,\r\n type: string,\r\n handleBlur: func,\r\n};\r\n\r\nconst TextInput = React.forwardRef((props, ref) => {\r\n const { handleBlur, hasError, required, label, placeholder, errorMsg, type } =\r\n props;\r\n\r\n return (\r\n
\r\n \r\n {label}\r\n \r\n \r\n
\r\n {hasError && errorMsg}\r\n
\r\n
\r\n );\r\n});\r\n\r\nTextInput.propTypes = propTypes;\r\nexport default TextInput;\r\n","import React from \"react\";\r\nimport { string, array, bool, func } from \"prop-types\";\r\nimport { createInputId, createErrorId } from \"../../common/id-helpers.js\";\r\n\r\nconst propTypes = {\r\n hasError: bool,\r\n required: bool,\r\n label: string,\r\n errorMsg: string,\r\n options: array,\r\n handleOnChange: func,\r\n};\r\n\r\nconst SelectInput = React.forwardRef((props, ref) => {\r\n const { hasError, required, label, errorMsg, options, handleOnChange } =\r\n props;\r\n\r\n return (\r\n
\r\n \r\n {label}\r\n \r\n \r\n {options &&\r\n options.map((option, i) => (\r\n \r\n ))}\r\n \r\n
\r\n {hasError && errorMsg}\r\n
\r\n
\r\n );\r\n});\r\n\r\nSelectInput.propTypes = propTypes;\r\nexport default SelectInput;\r\n","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nimport React from \"react\";\n\nvar ReCAPTCHA = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ReCAPTCHA, _React$Component);\n\n function ReCAPTCHA() {\n var _this;\n\n _this = _React$Component.call(this) || this;\n _this.handleExpired = _this.handleExpired.bind(_assertThisInitialized(_this));\n _this.handleErrored = _this.handleErrored.bind(_assertThisInitialized(_this));\n _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));\n _this.handleRecaptchaRef = _this.handleRecaptchaRef.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = ReCAPTCHA.prototype;\n\n _proto.getValue = function getValue() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this.props.grecaptcha.getResponse(this._widgetId);\n }\n\n return null;\n };\n\n _proto.getWidgetId = function getWidgetId() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n return this._widgetId;\n }\n\n return null;\n };\n\n _proto.execute = function execute() {\n var grecaptcha = this.props.grecaptcha;\n\n if (grecaptcha && this._widgetId !== undefined) {\n return grecaptcha.execute(this._widgetId);\n } else {\n this._executeRequested = true;\n }\n };\n\n _proto.executeAsync = function executeAsync() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n _this2.executionResolve = resolve;\n _this2.executionReject = reject;\n\n _this2.execute();\n });\n };\n\n _proto.reset = function reset() {\n if (this.props.grecaptcha && this._widgetId !== undefined) {\n this.props.grecaptcha.reset(this._widgetId);\n }\n };\n\n _proto.handleExpired = function handleExpired() {\n if (this.props.onExpired) {\n this.props.onExpired();\n } else {\n this.handleChange(null);\n }\n };\n\n _proto.handleErrored = function handleErrored() {\n if (this.props.onErrored) {\n this.props.onErrored();\n }\n\n if (this.executionReject) {\n this.executionReject();\n delete this.executionResolve;\n delete this.executionReject;\n }\n };\n\n _proto.handleChange = function handleChange(token) {\n if (this.props.onChange) {\n this.props.onChange(token);\n }\n\n if (this.executionResolve) {\n this.executionResolve(token);\n delete this.executionReject;\n delete this.executionResolve;\n }\n };\n\n _proto.explicitRender = function explicitRender() {\n if (this.props.grecaptcha && this.props.grecaptcha.render && this._widgetId === undefined) {\n var wrapper = document.createElement(\"div\");\n this._widgetId = this.props.grecaptcha.render(wrapper, {\n sitekey: this.props.sitekey,\n callback: this.handleChange,\n theme: this.props.theme,\n type: this.props.type,\n tabindex: this.props.tabindex,\n \"expired-callback\": this.handleExpired,\n \"error-callback\": this.handleErrored,\n size: this.props.size,\n stoken: this.props.stoken,\n hl: this.props.hl,\n badge: this.props.badge\n });\n this.captcha.appendChild(wrapper);\n }\n\n if (this._executeRequested && this.props.grecaptcha && this._widgetId !== undefined) {\n this._executeRequested = false;\n this.execute();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.explicitRender();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.explicitRender();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._widgetId !== undefined) {\n this.delayOfCaptchaIframeRemoving();\n this.reset();\n }\n };\n\n _proto.delayOfCaptchaIframeRemoving = function delayOfCaptchaIframeRemoving() {\n var temporaryNode = document.createElement(\"div\");\n document.body.appendChild(temporaryNode);\n temporaryNode.style.display = \"none\"; // move of the recaptcha to a temporary node\n\n while (this.captcha.firstChild) {\n temporaryNode.appendChild(this.captcha.firstChild);\n } // delete the temporary node after reset will be done\n\n\n setTimeout(function () {\n document.body.removeChild(temporaryNode);\n }, 5000);\n };\n\n _proto.handleRecaptchaRef = function handleRecaptchaRef(elem) {\n this.captcha = elem;\n };\n\n _proto.render = function render() {\n // consume properties owned by the reCATPCHA, pass the rest to the div so the user can style it.\n\n /* eslint-disable no-unused-vars */\n var _this$props = this.props,\n sitekey = _this$props.sitekey,\n onChange = _this$props.onChange,\n theme = _this$props.theme,\n type = _this$props.type,\n tabindex = _this$props.tabindex,\n onExpired = _this$props.onExpired,\n onErrored = _this$props.onErrored,\n size = _this$props.size,\n stoken = _this$props.stoken,\n grecaptcha = _this$props.grecaptcha,\n badge = _this$props.badge,\n hl = _this$props.hl,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"sitekey\", \"onChange\", \"theme\", \"type\", \"tabindex\", \"onExpired\", \"onErrored\", \"size\", \"stoken\", \"grecaptcha\", \"badge\", \"hl\"]);\n /* eslint-enable no-unused-vars */\n\n\n return React.createElement(\"div\", _extends({}, childProps, {\n ref: this.handleRecaptchaRef\n }));\n };\n\n return ReCAPTCHA;\n}(React.Component);\n\nexport { ReCAPTCHA as default };\nReCAPTCHA.displayName = \"ReCAPTCHA\";\nReCAPTCHA.defaultProps = {\n onChange: function onChange() {},\n theme: \"light\",\n type: \"image\",\n tabindex: 0,\n size: \"normal\",\n badge: \"bottomright\"\n};","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nimport { Component, createElement, forwardRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nvar SCRIPT_MAP = {}; // A counter used to generate a unique id for each component that uses the function\n\nvar idCount = 0;\nexport default function makeAsyncScript(getScriptURL, options) {\n options = options || {};\n return function wrapWithAsyncScript(WrappedComponent) {\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || \"Component\";\n\n var AsyncScriptLoader = /*#__PURE__*/function (_Component) {\n _inheritsLoose(AsyncScriptLoader, _Component);\n\n function AsyncScriptLoader(props, context) {\n var _this;\n\n _this = _Component.call(this, props, context) || this;\n _this.state = {};\n _this.__scriptURL = \"\";\n return _this;\n }\n\n var _proto = AsyncScriptLoader.prototype;\n\n _proto.asyncScriptLoaderGetScriptLoaderID = function asyncScriptLoaderGetScriptLoaderID() {\n if (!this.__scriptLoaderID) {\n this.__scriptLoaderID = \"async-script-loader-\" + idCount++;\n }\n\n return this.__scriptLoaderID;\n };\n\n _proto.setupScriptURL = function setupScriptURL() {\n this.__scriptURL = typeof getScriptURL === \"function\" ? getScriptURL() : getScriptURL;\n return this.__scriptURL;\n };\n\n _proto.asyncScriptLoaderHandleLoad = function asyncScriptLoaderHandleLoad(state) {\n var _this2 = this; // use reacts setState callback to fire props.asyncScriptOnLoad with new state/entry\n\n\n this.setState(state, function () {\n return _this2.props.asyncScriptOnLoad && _this2.props.asyncScriptOnLoad(_this2.state);\n });\n };\n\n _proto.asyncScriptLoaderTriggerOnScriptLoaded = function asyncScriptLoaderTriggerOnScriptLoaded() {\n var mapEntry = SCRIPT_MAP[this.__scriptURL];\n\n if (!mapEntry || !mapEntry.loaded) {\n throw new Error(\"Script is not loaded.\");\n }\n\n for (var obsKey in mapEntry.observers) {\n mapEntry.observers[obsKey](mapEntry);\n }\n\n delete window[options.callbackName];\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this3 = this;\n\n var scriptURL = this.setupScriptURL();\n var key = this.asyncScriptLoaderGetScriptLoaderID();\n var _options = options,\n globalName = _options.globalName,\n callbackName = _options.callbackName,\n scriptId = _options.scriptId; // check if global object already attached to window\n\n if (globalName && typeof window[globalName] !== \"undefined\") {\n SCRIPT_MAP[scriptURL] = {\n loaded: true,\n observers: {}\n };\n } // check if script loading already\n\n\n if (SCRIPT_MAP[scriptURL]) {\n var entry = SCRIPT_MAP[scriptURL]; // if loaded or errored then \"finish\"\n\n if (entry && (entry.loaded || entry.errored)) {\n this.asyncScriptLoaderHandleLoad(entry);\n return;\n } // if still loading then callback to observer queue\n\n\n entry.observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n return;\n }\n /*\n * hasn't started loading\n * start the \"magic\"\n * setup script to load and observers\n */\n\n\n var observers = {};\n\n observers[key] = function (entry) {\n return _this3.asyncScriptLoaderHandleLoad(entry);\n };\n\n SCRIPT_MAP[scriptURL] = {\n loaded: false,\n observers: observers\n };\n var script = document.createElement(\"script\");\n script.src = scriptURL;\n script.async = true;\n\n for (var attribute in options.attributes) {\n script.setAttribute(attribute, options.attributes[attribute]);\n }\n\n if (scriptId) {\n script.id = scriptId;\n }\n\n var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(func) {\n if (SCRIPT_MAP[scriptURL]) {\n var mapEntry = SCRIPT_MAP[scriptURL];\n var observersMap = mapEntry.observers;\n\n for (var obsKey in observersMap) {\n if (func(observersMap[obsKey])) {\n delete observersMap[obsKey];\n }\n }\n }\n };\n\n if (callbackName && typeof window !== \"undefined\") {\n window[callbackName] = function () {\n return _this3.asyncScriptLoaderTriggerOnScriptLoaded();\n };\n }\n\n script.onload = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.loaded = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n if (callbackName) {\n return false;\n }\n\n observer(mapEntry);\n return true;\n });\n }\n };\n\n script.onerror = function () {\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n mapEntry.errored = true;\n callObserverFuncAndRemoveObserver(function (observer) {\n observer(mapEntry);\n return true;\n });\n }\n };\n\n document.body.appendChild(script);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // Remove tag script\n var scriptURL = this.__scriptURL;\n\n if (options.removeOnUnmount === true) {\n var allScripts = document.getElementsByTagName(\"script\");\n\n for (var i = 0; i < allScripts.length; i += 1) {\n if (allScripts[i].src.indexOf(scriptURL) > -1) {\n if (allScripts[i].parentNode) {\n allScripts[i].parentNode.removeChild(allScripts[i]);\n }\n }\n }\n } // Clean the observer entry\n\n\n var mapEntry = SCRIPT_MAP[scriptURL];\n\n if (mapEntry) {\n delete mapEntry.observers[this.asyncScriptLoaderGetScriptLoaderID()];\n\n if (options.removeOnUnmount === true) {\n delete SCRIPT_MAP[scriptURL];\n }\n }\n };\n\n _proto.render = function render() {\n var globalName = options.globalName; // remove asyncScriptOnLoad from childProps\n\n var _this$props = this.props,\n asyncScriptOnLoad = _this$props.asyncScriptOnLoad,\n forwardedRef = _this$props.forwardedRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"asyncScriptOnLoad\", \"forwardedRef\"]); // eslint-disable-line no-unused-vars\n\n\n if (globalName && typeof window !== \"undefined\") {\n childProps[globalName] = typeof window[globalName] !== \"undefined\" ? window[globalName] : undefined;\n }\n\n childProps.ref = forwardedRef;\n return createElement(WrappedComponent, childProps);\n };\n\n return AsyncScriptLoader;\n }(Component); // Note the second param \"ref\" provided by React.forwardRef.\n // We can pass it along to AsyncScriptLoader as a regular prop, e.g. \"forwardedRef\"\n // And it can then be attached to the Component.\n\n\n var ForwardedComponent = forwardRef(function (props, ref) {\n return createElement(AsyncScriptLoader, _extends({}, props, {\n forwardedRef: ref\n }));\n });\n ForwardedComponent.displayName = \"AsyncScriptLoader(\" + wrappedComponentName + \")\";\n ForwardedComponent.propTypes = {\n asyncScriptOnLoad: PropTypes.func\n };\n return hoistStatics(ForwardedComponent, WrappedComponent);\n };\n}","import ReCAPTCHA from \"./recaptcha\";\nimport makeAsyncScriptLoader from \"react-async-script\";\nvar callbackName = \"onloadcallback\";\nvar globalName = \"grecaptcha\";\n\nfunction getOptions() {\n return typeof window !== \"undefined\" && window.recaptchaOptions || {};\n}\n\nfunction getURL() {\n var dynamicOptions = getOptions();\n var hostname = dynamicOptions.useRecaptchaNet ? \"recaptcha.net\" : \"www.google.com\";\n return \"https://\" + hostname + \"/recaptcha/api.js?onload=\" + callbackName + \"&render=explicit\";\n}\n\nexport default makeAsyncScriptLoader(getURL, {\n callbackName: callbackName,\n globalName: globalName\n})(ReCAPTCHA);","import RecaptchaWrapper from \"./recaptcha-wrapper\";\nimport ReCAPTCHA from \"./recaptcha\";\nexport default RecaptchaWrapper;\nexport { ReCAPTCHA };","import * as R from \"ramda\";\r\n\r\n/**\r\n * uploadFileForDepartment\r\n * will upload the file and link it to the department\r\n * value for this department in contentful\r\n * @param {File} file https://developer.mozilla.org/en-US/docs/Web/API/File\r\n * @param {String} filename the new filename (not the filename the user uploaded it as)\r\n * @param {String} ori Department ORI id\r\n * @param {String} recaptchaToken token from recaptcha to test on server\r\n * @return {Promise}\r\n */\r\nexport const uploadFileForDepartment = (props) => {\r\n const { file, ori, recaptchaToken, recaptchaClientKey, filename } = props;\r\n\r\n // const url =\r\n // \"https://use-of-force-fa.azurewebsites.net/api/contentful-upload-dept-file?code=pKEm4C7iE7fO1UK/qs0f3ocAavHd0GQaoBL445pLb4wWrjP5lVsCYg==\";\r\n\r\n const url =\r\n \"https://accountable-now.azurewebsites.net/api/contentful-upload-dept-file?code=exVC/hMKu5x54w7CnHwomCHSy82r5YnIzZ9anLuC0dfblsMGQlHOaw==\";\r\n\r\n // for testing locally with vscode https://docs.microsoft.com/en-us/azure/developer/javascript/tutorial/tutorial-vscode-serverless-node-test-local\r\n // const url = \"http://localhost:7071/api/contentful-upload-dept-file\";\r\n // const url = \"http://192.168.1.161:7071/api/contentful-upload-dept-file\";\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n formData.append(\"ori\", ori);\r\n formData.append(\"recaptchaToken\", recaptchaToken);\r\n formData.append(\"recaptchaClientKey\", recaptchaClientKey);\r\n formData.append(\"filename\", filename);\r\n // do not include headers! https://muffinman.io/uploading-files-using-fetch-multipart-form-data/\r\n return fetch(url, {\r\n method: \"POST\",\r\n body: formData,\r\n }).then((response) => {\r\n if (!response.ok) {\r\n response.json().then((json) => {\r\n // parse the message if there is one so it shows up nicely in the browser console\r\n const parsed = R.over(\r\n R.lensPath([\"error\", \"message\"]),\r\n safeParse,\r\n json,\r\n );\r\n console.error(`Error posting to ${url}`, parsed);\r\n });\r\n throw new Error(`Error posting to ${url}`);\r\n }\r\n\r\n return response.json();\r\n });\r\n};\r\n\r\nconst safeParse = (string) => {\r\n try {\r\n return JSON.parse(string);\r\n } catch (e) {\r\n return string;\r\n }\r\n};\r\n","import React, {\r\n useCallback,\r\n useState,\r\n useEffect,\r\n useRef,\r\n useReducer,\r\n} from \"react\";\r\nimport { string } from \"prop-types\";\r\nimport FileUpload from \"./FileUpload\";\r\nimport \"./form.scss\";\r\nimport TextInput from \"../Forms/TextInput\";\r\nimport SelectInput from \"../Forms/SelectInput\";\r\nimport Modal from \"../Modal/Modal.jsx\";\r\nimport { scrollToCenter } from \"../../common/scrollHelpers.js\";\r\nimport * as R from \"ramda\";\r\nimport { graphql, useStaticQuery } from \"gatsby\";\r\nimport { format } from \"date-fns\";\r\n\r\nimport {\r\n DRAG_IDLE,\r\n DRAG_HOVERED,\r\n UPLOAD_INPROGRESS,\r\n UPLOAD_IDLE,\r\n UPLOAD_UPLOADING,\r\n UPLOAD_BAD_EXTENSION,\r\n validExtensions,\r\n} from \"./upload-helpers.js\";\r\n\r\nimport {\r\n UPLOAD_RECAPTCHA_FAILED,\r\n UPLOAD_FILE_DENIED,\r\n UPLOAD_FILE_SUCCESS,\r\n UPLOAD_FILE_ERROR,\r\n} from \"../../../azure-functions/contentful-upload-dept-file/uploadStatus.js\";\r\n\r\nimport {\r\n RECAPTCHA_CLIENT_KEY_V3,\r\n RECAPTCHA_CLIENT_KEY_V2,\r\n} from \"../../../azure-functions/contentful-upload-dept-file/recaptcha-client.js\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { uploadFileForDepartment } from \"../../common/azureFunctions.js\";\r\nimport { extractRichText } from \"../../common/contentful-extract.jsx\";\r\n\r\nconst propTypes = {\r\n ori: string,\r\n deptName: string,\r\n};\r\n\r\nconst InfoForm = (props) => {\r\n const { ori, deptName } = props;\r\n\r\n const reducer = (prevState, updatedProperty) => ({\r\n ...prevState,\r\n ...updatedProperty,\r\n });\r\n\r\n const [buttonDisabled, setButtonDisabled] = useState(true);\r\n const [token, setToken] = useState(null);\r\n\r\n const formRef = useRef();\r\n const firstNameRef = useRef();\r\n const lastNameRef = useRef();\r\n const emailRef = useRef();\r\n const cellPhoneRef = useRef();\r\n const selectRef = useRef();\r\n const dropZoneRef = useRef();\r\n\r\n const initialErrorState = {\r\n firstNameError: false,\r\n lastNameError: false,\r\n emailError: false,\r\n cellPhoneError: false,\r\n selectedFileError: false,\r\n selectSourceError: false,\r\n };\r\n const [errorData, setErrorData] = useReducer(reducer, initialErrorState);\r\n\r\n // file states\r\n const [uploadState, setUploadState] = useState(UPLOAD_IDLE);\r\n const [dragState, setDragState] = useState(DRAG_IDLE);\r\n const [selectedFile, setSelectedFile] = useState(null); // we're storing the file here for both drag and select\r\n const uploadedDate = Date.now();\r\n const timeStamp = format(uploadedDate, \"yyyy-MM-dd--HH-mm-ss\");\r\n const getExtension = (fileName) => R.compose(R.last, R.split(\".\"))(fileName);\r\n\r\n // useEffect(() => {\r\n // const requestOptions = {\r\n // method: \"GET\",\r\n // headers: new Headers(),\r\n // redirect: \"follow\",\r\n // };\r\n // fetch(\r\n // \"https://connect.civilrights.org/site/CRConsAPI?method=getLoginUrl&v=1.0&response_format=json&api_key=lcchr\",\r\n // requestOptions,\r\n // )\r\n // .then((response) => response.json())\r\n // .then((result) => {\r\n // setToken(result.getLoginUrlResponse);\r\n // })\r\n // .catch((error) => console.log(\"error\", error));\r\n // }, []);\r\n\r\n useEffect(() => {\r\n if (errorData && selectedFile) {\r\n const allErrors = R.values(R.map((x) => x, errorData));\r\n const requiredInputArray = [\r\n firstNameRef.current.value,\r\n lastNameRef.current.value,\r\n emailRef.current.value,\r\n selectRef.current.value,\r\n ];\r\n\r\n const evaluateValues = R.filter(\r\n (x) => x.length === 0,\r\n requiredInputArray,\r\n );\r\n\r\n //we don't want to keep flagging errors when people tab through fields, so checking if value is populated and if errors exist before enabling/disabling\r\n evaluateValues.length > 0 ||\r\n selectedFile === null ||\r\n allErrors.filter((x) => x === true).length > 0\r\n ? setButtonDisabled(true)\r\n : setButtonDisabled(false);\r\n }\r\n }, [errorData, selectedFile]);\r\n\r\n useEffect(() => {\r\n if (uploadState === UPLOAD_IDLE && buttonDisabled === false) {\r\n setButtonDisabled(true);\r\n }\r\n }, [uploadState, buttonDisabled]);\r\n\r\n const uploadFileToApi = useCallback(\r\n (recaptchaToken, recaptchaClientKey, formData) => {\r\n const { file } = formData;\r\n\r\n // this shouldn't happen, but it can!\r\n if (!file) {\r\n setUploadState(UPLOAD_IDLE);\r\n return;\r\n }\r\n\r\n setUploadState(UPLOAD_UPLOADING);\r\n const filename = formData.filename;\r\n return uploadFileForDepartment({\r\n file,\r\n ori,\r\n recaptchaToken,\r\n recaptchaClientKey,\r\n filename,\r\n })\r\n .then((result) => {\r\n // default to error if uploadstatus not defined in result\r\n const { uploadStatus = UPLOAD_FILE_ERROR } = result;\r\n setUploadState(uploadStatus);\r\n submitData(formData);\r\n })\r\n .catch((error) => {\r\n console.error(\"Error uploading file\", error);\r\n setUploadState(UPLOAD_FILE_ERROR);\r\n });\r\n },\r\n [ori],\r\n );\r\n\r\n const initiateFileUpload = useCallback(\r\n (formData) => {\r\n if (!window.grecaptcha) {\r\n console.error(\"window.grecaptcha not found!\");\r\n setUploadState(UPLOAD_FILE_ERROR);\r\n return;\r\n }\r\n\r\n window.grecaptcha.ready(() => {\r\n window.grecaptcha\r\n .execute(RECAPTCHA_CLIENT_KEY_V3, {\r\n action: \"uploadFileForDepartment\",\r\n })\r\n .then((recaptchaToken) => {\r\n return uploadFileToApi(\r\n recaptchaToken,\r\n RECAPTCHA_CLIENT_KEY_V3,\r\n formData,\r\n );\r\n })\r\n .catch((error) => {\r\n console.error(\r\n \"Error executing recaptcha, is this domain in the allow list in the recaptcha admin?\",\r\n error,\r\n );\r\n setUploadState(UPLOAD_FILE_ERROR);\r\n });\r\n });\r\n },\r\n [uploadFileToApi],\r\n );\r\n\r\n useEffect(() => {\r\n // scroll to the form\r\n if (\r\n formRef.current &&\r\n (uploadState === UPLOAD_UPLOADING ||\r\n uploadState === UPLOAD_FILE_SUCCESS ||\r\n uploadState === UPLOAD_FILE_ERROR ||\r\n uploadState === UPLOAD_FILE_DENIED)\r\n ) {\r\n scrollToCenter(formRef.current);\r\n }\r\n }, [uploadState]);\r\n\r\n const handleFileChosen = useCallback(\r\n (e) => {\r\n e.preventDefault();\r\n const file = e.target.files[0];\r\n\r\n if (!file) {\r\n console.error(\"error uploading file\");\r\n return;\r\n }\r\n const extension = getExtension(file.name);\r\n\r\n // show an error if there is a bad extension\r\n if (!R.includes(extension, validExtensions)) {\r\n setUploadState(UPLOAD_BAD_EXTENSION);\r\n setErrorData({ selectedFileError: true });\r\n\r\n return;\r\n } else {\r\n setUploadState(UPLOAD_INPROGRESS);\r\n setErrorData({ selectedFileError: false });\r\n setSelectedFile(file);\r\n }\r\n },\r\n [setSelectedFile],\r\n );\r\n\r\n useEffect(() => {\r\n /**\r\n * https://codepen.io/nekobog/pen/JjoZvBm?editors=0010\r\n *\r\n * https://stackoverflow.com/questions/19841859/full-page-drag-and-drop-files-website/33917000#33917000\r\n * The basic idea is this:\r\n * * Keep the drop zone hidden by default.\r\n * * Attach a handler to the html element that will show the zone when something is being dragged over the page.\r\n * * When the zone is visible, tap into its events to handle drag and drop.\r\n * * When the mouse leaves the zone, hide it.\r\n * * Here is the code that worked for me: https://jsfiddle.net/oL2akhtz/.\r\n *\r\n * This part of HTML5 spec is a little bit strange. The most important things to keep in mind are these:\r\n *\r\n * * There are four interesting events: dragenter fires when we drag something and enter the bounds of an element; dragover fires every few ms while we are dragging something over the element; dragleave is the opposite of dragenter; drop fires when something is actually dropped.\r\n * * You must listen to both dragenter and dragover on any element that is a valid drop target. That is, the element is turned into a valid drop target by listening to those events and cancelling their default actions. In our case this applies to the drop-zone overlay.\r\n *\r\n * Now I’ll try to explain my code.\r\n *\r\n * 1. First we add a listener that handles dragenter for the whole page. It just shows the overlay (and there is no need to prevent the default action as we actually do not intend to drop anything on the page, we will be dropping only on the overlay).\r\n * 2. Setup handlers for dragenter and dragover for the overlay. They prevent the default actions (which are to disallow dropping there) and also set dropEffect to give the user some nice feedback (although this seems to do nothing right now in modern browsers). This is a good place to test whether the item being dragged is valid.\r\n * 3. If the mouse leaves the drop zone (which is the same as the whole window, since the div covers everything) we hide it.\r\n * 4. Setup the actual drop handler.\r\n *\r\n * That’s it, pretty straightforward. Here is what happens when someone drops a file:\r\n *\r\n * 1. dragenter for the html element fires. It shows the dropzone.\r\n * 2. Since the mouse is now over the dropzone, dragleave for the html element fires, but we ignore it.\r\n * 3. dragenter for the dropzone fires and then dragover keeps firing. We just jeep saying that, yes, this is a valid drop target.\r\n * 4. Either drop fires, in which case we hide the dropzone and process the file, or dragleave for the dropzone fires in which case we just hide it.\r\n */\r\n if (dropZoneRef.current) {\r\n const dropZone = dropZoneRef.current;\r\n\r\n const preventDefaults = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDrag = (e) => {\r\n preventDefaults(e);\r\n setDragState(DRAG_HOVERED);\r\n };\r\n\r\n const handleLeave = (e) => {\r\n preventDefaults(e);\r\n setDragState(DRAG_IDLE);\r\n };\r\n\r\n const handleDrop = (e) => {\r\n preventDefaults(e);\r\n setDragState(DRAG_IDLE);\r\n\r\n const file = e.dataTransfer.files[0];\r\n const extension = getExtension(file.name);\r\n\r\n // show an error if there is a bad extension\r\n if (!R.includes(extension, validExtensions)) {\r\n setUploadState(UPLOAD_BAD_EXTENSION);\r\n setErrorData({ selectedFileError: true });\r\n return;\r\n } else {\r\n setUploadState(UPLOAD_INPROGRESS);\r\n setErrorData({ selectedFileError: false });\r\n setSelectedFile(file);\r\n }\r\n };\r\n\r\n document.addEventListener(\"dragenter\", handleDrag);\r\n\r\n // allow the drop to happen (the default is to disallow dropping)\r\n dropZone.addEventListener(\"dragenter\", preventDefaults);\r\n dropZone.addEventListener(\"dragover\", preventDefaults);\r\n\r\n dropZone.addEventListener(\"dragleave\", handleLeave);\r\n dropZone.addEventListener(\"drop\", handleDrop);\r\n\r\n return () => {\r\n document.removeEventListener(\"dragenter\", handleDrag);\r\n\r\n dropZone.removeEventListener(\"dragenter\", preventDefaults);\r\n dropZone.removeEventListener(\"dragover\", preventDefaults);\r\n\r\n dropZone.removeEventListener(\"dragleave\", handleLeave);\r\n dropZone.removeEventListener(\"drop\", handleDrop);\r\n };\r\n }\r\n }, [initiateFileUpload]);\r\n // });\r\n\r\n const checkHasError = (fieldRef, errorProperty) => {\r\n const value = fieldRef.value;\r\n const type = fieldRef.getAttribute(\"type\");\r\n const required = fieldRef.getAttribute(\"required\");\r\n let hasError = false;\r\n switch (type) {\r\n case \"email\":\r\n hasError = !value.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]+/i);\r\n break;\r\n case \"tel\":\r\n hasError =\r\n !value.match(/^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$/) &&\r\n value.trim() !== \"\";\r\n break;\r\n case \"checkbox\":\r\n case \"select\":\r\n case \"text\":\r\n default:\r\n if (\r\n required !== null &&\r\n (value.trim().length === 0 || !value.match(/^[a-zA-Z\\s-'\"]*$/g))\r\n ) {\r\n hasError = true;\r\n }\r\n\r\n break;\r\n }\r\n setErrorData({ [errorProperty]: hasError });\r\n return hasError;\r\n };\r\n\r\n const handleBlur = (fieldRef, setErrorProperty) => {\r\n const value = fieldRef.value;\r\n if (value.length > 0) {\r\n checkHasError(fieldRef, setErrorProperty)\r\n ? setButtonDisabled(true)\r\n : null;\r\n } else if (fieldRef.getAttribute(\"required\") === null) {\r\n checkHasError(fieldRef, setErrorProperty)\r\n ? setButtonDisabled(true)\r\n : null;\r\n }\r\n };\r\n\r\n const onFormSubmit = (e) => {\r\n e.preventDefault();\r\n\r\n //shouldn't but let's double check just in case\r\n const extension = getExtension(selectedFile.name);\r\n const fileHasError =\r\n selectedFile &&\r\n !R.includes(extension, validExtensions) &&\r\n uploadState !== UPLOAD_INPROGRESS;\r\n const errorArray = R.values(errorData);\r\n const filename = `${ori}--${timeStamp}.${extension}`;\r\n setButtonDisabled(true);\r\n\r\n if (errorArray.filter((x) => x === true).length === 0) {\r\n const formData = {\r\n firstName: firstNameRef.current.value,\r\n lastName: lastNameRef.current.value,\r\n email: emailRef.current.value,\r\n phone: cellPhoneRef.current.value,\r\n source: selectRef.current.value,\r\n filename: filename,\r\n file: selectedFile,\r\n token: token,\r\n };\r\n\r\n initiateFileUpload(formData);\r\n } else {\r\n fileHasError && setErrorData({ selectedFileError: true });\r\n return;\r\n }\r\n };\r\n\r\n const submitData = (formData) => {\r\n const requestOptions = {\r\n method: \"GET\",\r\n headers: new Headers(),\r\n redirect: \"follow\",\r\n };\r\n fetch(\r\n \"https://connect.civilrights.org/site/CRConsAPI?method=getLoginUrl&v=1.0&response_format=json&api_key=lcchr\",\r\n requestOptions,\r\n )\r\n .then((response) => response.json())\r\n .then((result) => {\r\n setToken(result.getLoginUrlResponse);\r\n const { firstName, lastName, email, phone, source, filename } =\r\n formData;\r\n const token = result.getLoginUrlResponse;\r\n const bodyParams = new URLSearchParams();\r\n bodyParams.append(\"method\", \"submitSurvey\");\r\n bodyParams.append(\"v\", \"1.0\");\r\n bodyParams.append(\"response_format\", \"json\");\r\n bodyParams.append(\"api_key\", \"lcchr\");\r\n bodyParams.append(\"auth\", token.token);\r\n bodyParams.append(\"survey_id\", \"1461\");\r\n bodyParams.append(\"question_1382\", firstName);\r\n bodyParams.append(\"question_1383\", lastName);\r\n bodyParams.append(\"question_1385\", email);\r\n bodyParams.append(\"question_1384\", phone);\r\n bodyParams.append(\"question_1381\", source);\r\n bodyParams.append(\"question_1386\", filename);\r\n fetch(token.url.replace(\"CRConsAPI\", \"CRSurveyAPI\"), {\r\n method: \"POST\",\r\n headers: new Headers().append(\"Content-Type\", \"application/json\"),\r\n redirect: \"follow\",\r\n body: bodyParams,\r\n })\r\n .then((response) => response.json())\r\n .catch((e) => console.warn(e));\r\n })\r\n .catch((error) => console.log(\"error\", error));\r\n };\r\n\r\n const backupOptions = [\"FOIA request\", \"Online\", \"Other\"];\r\n\r\n const contentfulData = useStaticQuery(query);\r\n\r\n const legalText =\r\n contentfulData.contentfulMapPage.formLegalText &&\r\n extractRichText(contentfulData.contentfulMapPage.formLegalText);\r\n\r\n const options = contentfulData\r\n ? contentfulData.contentfulMapPage.uploadDataSourceOptions\r\n : backupOptions;\r\n\r\n const dataSourceOptions = options.map((x) => x);\r\n dataSourceOptions.unshift(\"\");\r\n return (\r\n
\r\n {uploadState !== UPLOAD_FILE_SUCCESS && (\r\n <>\r\n
\r\n Upload a file to submit new data to the progress map.\r\n
\r\n
\r\n *denotes required field\r\n
\r\n
\r\n \r\n handleBlur(firstNameRef.current, \"firstNameError\")\r\n }\r\n />\r\n \r\n handleBlur(lastNameRef.current, \"lastNameError\")\r\n }\r\n errorMsg=\"Please enter last name\"\r\n />\r\n
\r\n
\r\n handleBlur(emailRef.current, \"emailError\")}\r\n errorMsg=\"Please enter a valid email address\"\r\n />\r\n
\r\n
\r\n \r\n handleBlur(cellPhoneRef.current, \"cellPhoneError\")\r\n }\r\n errorMsg=\"invalid phone number\"\r\n />\r\n
\r\n
\r\n \r\n checkHasError(selectRef.current, \"selectSourceError\")\r\n }\r\n />\r\n
\r\n \r\n )}\r\n
\r\n \r\n
\r\n {uploadState !== UPLOAD_FILE_SUCCESS && (\r\n <>\r\n
\r\n \r\n Upload Data\r\n \r\n
\r\n setUploadState(UPLOAD_IDLE)}\r\n >\r\n
\r\n
On no!
\r\n

\r\n You might be a robot! Please check the box below to show us that\r\n you're human!\r\n

\r\n {\r\n uploadFileToApi(recaptchaToken, RECAPTCHA_CLIENT_KEY_V2, {\r\n firstName: firstNameRef.current.value,\r\n lastName: lastNameRef.current.value,\r\n email: emailRef.current.value,\r\n phone: cellPhoneRef.current.value,\r\n source: selectRef.current.value,\r\n filename: `${ori}--${timeStamp}.${getExtension(\r\n selectedFile.name,\r\n )}`,\r\n file: selectedFile,\r\n token: token,\r\n });\r\n }}\r\n />\r\n
\r\n \r\n \r\n )}{\" \"}\r\n
\r\n {\" \"}\r\n {legalText ? (\r\n legalText\r\n ) : (\r\n <>\r\n This site is protected by reCAPTCHA and the Google{\" \"}\r\n \r\n Privacy Policy\r\n {\" \"}\r\n and{\" \"}\r\n \r\n Terms of Service\r\n {\" \"}\r\n apply.\r\n \r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nInfoForm.propTypes = propTypes;\r\nexport default InfoForm;\r\n\r\nconst query = graphql`\r\n {\r\n contentfulMapPage {\r\n uploadDataSourceOptions\r\n formLegalText {\r\n raw\r\n }\r\n }\r\n }\r\n`;\r\n","import * as R from \"ramda\";\r\nimport { useStaticQuery, graphql } from \"gatsby\";\r\n\r\nimport \"./info-panel.scss\";\r\nimport \"./file-upload.scss\";\r\n\r\nimport { extractRichText } from \"../../common/contentful-extract.jsx\";\r\n\r\nimport {\r\n deptShape,\r\n getDeptStatus,\r\n getDataIconImg,\r\n HAS_DATA,\r\n HAS_FOIA_REJECTION,\r\n NO_DATA,\r\n} from \"../../common/dept.jsx\";\r\nimport { getMapEntityUrl } from \"../../common/mapUrl.js\";\r\nimport { useGoogleMapContext } from \"../GoogleMap/googleMapContext.jsx\";\r\n\r\nimport FileDownload from \"./FileDownload.jsx\";\r\nimport FileUpload from \"./FileUpload.jsx\";\r\nimport { Link } from \"@reach/router\";\r\nimport InfoForm from \"./InfoForm.jsx\";\r\n\r\nconst propTypes = {\r\n deptData: deptShape.isRequired,\r\n};\r\n\r\nconst DeptInfo = (props) => {\r\n const { deptData } = props;\r\n\r\n const contentfulData = useStaticQuery(graphql`\r\n {\r\n contentfulMapPage {\r\n uploadHelpNoData {\r\n raw\r\n references {\r\n ...Link\r\n }\r\n }\r\n uploadHelpFoiaRejection {\r\n raw\r\n references {\r\n ...Link\r\n }\r\n }\r\n uploadHelpHasData {\r\n raw\r\n references {\r\n ...Link\r\n }\r\n }\r\n }\r\n }\r\n `);\r\n\r\n const data = R.compose(\r\n R.evolve({\r\n uploadHelpNoData: extractRichText,\r\n uploadHelpFoiaRejection: extractRichText,\r\n uploadHelpHasData: extractRichText,\r\n }),\r\n R.defaultTo({}),\r\n R.prop(\"contentfulMapPage\"),\r\n )(contentfulData);\r\n\r\n const { panToState } = useGoogleMapContext();\r\n\r\n const {\r\n content,\r\n dataFiles,\r\n foiaRejections,\r\n name,\r\n ori,\r\n stateAbbreviation,\r\n stateName,\r\n phone,\r\n email,\r\n } = deptData;\r\n\r\n const deptStatus = getDeptStatus(deptData);\r\n\r\n const { uploadHelpNoData, uploadHelpFoiaRejection, uploadHelpHasData } = data;\r\n\r\n const uploadHelpText = R.cond([\r\n [R.equals(HAS_DATA), () => uploadHelpHasData],\r\n [R.equals(HAS_FOIA_REJECTION), () => uploadHelpFoiaRejection],\r\n [R.equals(NO_DATA), () => uploadHelpNoData],\r\n ])(deptStatus);\r\n\r\n return deptData ? (\r\n
\r\n
\r\n United States /{\" \"}\r\n {\r\n // always pan to the state if this link is clicked\r\n // (logic in GoogleMaps.jsx) won't always\r\n panToState(stateName);\r\n }}\r\n >\r\n {stateName}\r\n {\" \"}\r\n / {name}\r\n
\r\n

{name}

\r\n
\r\n
{getDataIconImg(deptStatus)}
{\" \"}\r\n {R.cond([\r\n [R.equals(HAS_DATA), () => \"Data Available\"],\r\n [R.equals(HAS_FOIA_REJECTION), () => \"No Data Available\"],\r\n [R.equals(NO_DATA), () => \"No Data Available\"],\r\n ])(deptStatus)}\r\n
\r\n\r\n {content &&
{content}
}\r\n\r\n {(dataFiles.length > 0 || foiaRejections.length > 0) && (\r\n
\r\n {dataFiles.map((dataFile) => {\r\n return ;\r\n })}\r\n\r\n {foiaRejections.map((foiaRejection) => {\r\n return ;\r\n })}\r\n
\r\n )}\r\n\r\n {uploadHelpText && (\r\n
{uploadHelpText}
\r\n )}\r\n\r\n
\r\n
Upload Data
\r\n {/* unique key so it resets when the user changes depts */}\r\n {name && }\r\n
\r\n\r\n {(!R.isNil(phone) || !R.isNil(email)) && (\r\n
\r\n
Contact the Agency
\r\n\r\n {phone && (\r\n
\r\n Phone: {phone}\r\n
\r\n )}\r\n {email && (\r\n
\r\n Email: {email}\r\n
\r\n )}\r\n
\r\n )}\r\n
\r\n ) : null;\r\n};\r\n\r\nDeptInfo.propTypes = propTypes;\r\nexport default DeptInfo;\r\n","import { useState } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport { arrayOf, bool, oneOf, shape, string } from \"prop-types\";\r\n\r\nimport { HAS_DATA, HAS_FOIA_REJECTION, NO_DATA } from \"../../common/dept.jsx\";\r\n\r\nconst initialState = [\r\n {\r\n id: NO_DATA,\r\n label: \"No Data Available\",\r\n isActive: true,\r\n },\r\n {\r\n id: HAS_DATA,\r\n label: \"Data Available\",\r\n isActive: true,\r\n },\r\n];\r\n\r\nexport const legendStateType = arrayOf(\r\n shape({\r\n id: oneOf(R.pluck(\"id\", initialState)).isRequired,\r\n label: string.isRequired,\r\n isActive: bool.isRequired,\r\n }),\r\n);\r\n\r\nexport function isStatusActive(status, legendState) {\r\n if (!legendState) {\r\n return true;\r\n }\r\n\r\n // group NO_DATA and HAS_FOIA_REJECTION\r\n const derrivedStatus = status === HAS_FOIA_REJECTION ? NO_DATA : status;\r\n\r\n return R.compose(\r\n R.propOr(false, \"isActive\"),\r\n R.defaultTo({}),\r\n R.find(R.propEq(\"id\", derrivedStatus)),\r\n )(legendState);\r\n}\r\n\r\nexport function useLegendState() {\r\n const [legendState, setLegendState] = useState(initialState);\r\n\r\n const toggleLegendItem = (id) => {\r\n setLegendState((prevState) => {\r\n return R.map(\r\n R.when(\r\n R.propEq(\"id\", id),\r\n R.over(R.lensProp(\"isActive\"), (v) => !v),\r\n ),\r\n )(prevState);\r\n });\r\n };\r\n\r\n return [legendState, toggleLegendItem];\r\n}\r\n","// This class was based on the example:\r\n// https://developers.google.com/maps/documentation/javascript/examples/overlay-simple\r\n\r\nimport * as R from \"ramda\";\r\n\r\nimport { HAS_DATA, getDataIconSrc, getDeptStatus } from \"../../common/dept.jsx\";\r\nimport { isStatusActive } from \"./legendState.js\";\r\n\r\nconst DEBUG = false;\r\n\r\nexport default function createDotsOverlay(...args) {\r\n /** @constructor */\r\n function DotsOverlay({ map, onAddCallback }) {\r\n // Initialize all properties.\r\n this.map = map;\r\n this.onAddCallback = onAddCallback;\r\n\r\n // this will update on every drawDots\r\n this.bounds = this.map.getBounds();\r\n\r\n // Explicitly call setMap on this overlay.\r\n this.setMap(map);\r\n }\r\n\r\n DotsOverlay.prototype = new window.google.maps.OverlayView();\r\n\r\n /**\r\n * onAdd is called when the map's panes are ready and the overlay has been\r\n * added to the map.\r\n */\r\n DotsOverlay.prototype.onAdd = function () {\r\n const div = document.createElement(\"div\");\r\n div.style.borderStyle = \"none\";\r\n div.style.borderWidth = \"0px\";\r\n div.style.position = \"absolute\";\r\n div.className = \"dots-overlay__container\";\r\n this.div = div;\r\n\r\n // Create the img element and attach it to the div.\r\n const img = document.createElement(\"img\");\r\n img.style.width = \"100%\";\r\n img.style.height = \"100%\";\r\n img.style.position = \"absolute\";\r\n img.className = \"dots-overlay__canvas\";\r\n img.alt = \"\"; // for a11y\r\n this.img = img;\r\n div.appendChild(img);\r\n\r\n this.canvas = document.createElement(\"canvas\");\r\n\r\n // Add the element to the \"overlayLayer\" pane.\r\n // https://developers.google.com/maps/documentation/javascript/customoverlays#initialize\r\n const panes = this.getPanes();\r\n panes.overlayLayer.appendChild(div);\r\n\r\n // fire consumer's callback and pass `this` so they can do stuff with it\r\n // (eg, call DotsOverlay.drawDots)\r\n this.onAddCallback && this.onAddCallback(this);\r\n };\r\n\r\n DotsOverlay.prototype.drawDots = function (props) {\r\n /* eslint-disable-next-line no-console */\r\n DEBUG && console.time(\"drawDots\");\r\n\r\n const { allDepartments, dotRadius, onDrawFinished, legendState, zoom } =\r\n props;\r\n\r\n this.bounds = this.map.getBounds();\r\n\r\n const positions = this.getPositions(this.bounds);\r\n\r\n if (!positions) {\r\n DEBUG && console.warn(\"DotsOverlay.drawDots: no positions\");\r\n return;\r\n }\r\n\r\n const { left, top, width, height } = positions;\r\n\r\n // Resize the image's div to fit the indicated dimensions.\r\n const div = this.div;\r\n div.style.left = left + \"px\";\r\n div.style.top = top + \"px\";\r\n div.style.width = width + \"px\";\r\n div.style.height = height + \"px\";\r\n\r\n const canvas = this.canvas;\r\n const context = canvas.getContext(\"2d\");\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // only draw the dots that are visible (for performance)\r\n // also, some depts won't have lat/lon\r\n const deptsInBounds = allDepartments.filter((dept) => {\r\n return (\r\n !R.isNil(dept.latitude) &&\r\n !R.isNil(dept.longitude) &&\r\n this.bounds.contains({ lat: dept.latitude, lng: dept.longitude })\r\n );\r\n });\r\n\r\n deptsInBounds.forEach((dept) => {\r\n const [x, y] = this.coordinatesToPoint([dept.longitude, dept.latitude]);\r\n\r\n const deptStatus = getDeptStatus(dept);\r\n\r\n drawIcon(context, {\r\n deptStatus,\r\n cx: x,\r\n cy: y,\r\n // make triangles a bit bigger (because the teal is hard to see...)\r\n r: deptStatus === HAS_DATA ? dotRadius * 1.5 : dotRadius,\r\n isActive: isStatusActive(deptStatus, legendState),\r\n zoom,\r\n });\r\n });\r\n\r\n this.img.src = canvas.toDataURL();\r\n\r\n // alert the consumer that we're done (so they can calc quadtree, eg)\r\n // and pass along the dots that we drew\r\n onDrawFinished(deptsInBounds);\r\n\r\n /* eslint-disable-next-line no-console */\r\n DEBUG && console.timeEnd(\"drawDots\");\r\n };\r\n\r\n DotsOverlay.prototype.draw = function () {\r\n if (!this.bounds) {\r\n DEBUG && console.warn(\"DotsOverlay.draw: no bounds\");\r\n return;\r\n }\r\n\r\n // Resize the image's div to fit the indicated dimensions.\r\n const div = this.div;\r\n\r\n const { left, top, width, height } = this.getPositions(this.bounds);\r\n\r\n div.style.left = left + \"px\";\r\n div.style.top = top + \"px\";\r\n div.style.width = width + \"px\";\r\n div.style.height = height + \"px\";\r\n };\r\n\r\n DotsOverlay.prototype.getPositions = function (bounds) {\r\n // We use the south-west and north-east\r\n // coordinates of the overlay to peg it to the correct position and size.\r\n // To do this, we need to retrieve the projection from the overlay.\r\n const overlayProjection = this.getProjection();\r\n\r\n if (!overlayProjection) {\r\n console.warn(\"DotsOverlay.getPositions: no overlayProjection\");\r\n return;\r\n }\r\n\r\n // Retrieve the south-west and north-east coordinates of this overlay\r\n // in LatLngs and convert them to pixel coordinates.\r\n // We'll use these coordinates to resize the div.\r\n const sw = overlayProjection.fromLatLngToDivPixel(bounds.getSouthWest());\r\n const ne = overlayProjection.fromLatLngToDivPixel(bounds.getNorthEast());\r\n\r\n return {\r\n left: sw.x,\r\n top: ne.y,\r\n width: ne.x - sw.x,\r\n height: sw.y - ne.y,\r\n };\r\n };\r\n\r\n /** The onRemove() method will be called automatically from the API if\r\n * we ever set the overlay's map property to 'null'.\r\n */\r\n DotsOverlay.prototype.onRemove = function () {\r\n this.div_.parentNode.removeChild(this.div_);\r\n this.div_ = null;\r\n };\r\n\r\n // this api matches d3-geo projection\r\n // this method is used in GoogleMap.jsx\r\n DotsOverlay.prototype.coordinatesToPoint = function (coordinates) {\r\n const projection = this.getProjection();\r\n\r\n if (!projection) {\r\n return [0, 0];\r\n }\r\n\r\n const [longitude, latitude] = coordinates;\r\n\r\n const point = projection.fromLatLngToContainerPixel(\r\n new window.google.maps.LatLng(latitude, longitude),\r\n );\r\n\r\n return [point.x, point.y];\r\n };\r\n\r\n return new DotsOverlay(...args);\r\n}\r\n\r\n// memoize this so it only has to create these Image's once per icon\r\n// (instead of 18k times for each icon)\r\nconst getIconImg = R.memoizeWith(\r\n (status, zoom) => `${status}${zoom}`,\r\n (status, zoom) => {\r\n const icon = new Image();\r\n icon.src = getDataIconSrc(status, zoom);\r\n return icon;\r\n },\r\n);\r\n\r\nfunction drawIcon(context, props) {\r\n const { deptStatus, cx, cy, r, isActive = true, zoom } = props;\r\n\r\n const icon = getIconImg(deptStatus, zoom);\r\n\r\n const width = r * 2;\r\n const height = (icon.height / icon.width) * width;\r\n const x = cx - width / 2;\r\n const y = cy - height / 2;\r\n\r\n context.imageSmoothingEnabled = true; // apply anti-aliasing for scaled down images\r\n context.globalAlpha = isActive ? 1 : 0;\r\n context.drawImage(icon, x, y, width, height);\r\n}\r\n","import \"core-js/modules/es.typed-array.sort.js\";\n// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n\n add(x) {\n const p = this._partials;\n let i = 0;\n\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n\n valueOf() {\n const p = this._partials;\n let n = this._n,\n x,\n y,\n lo,\n hi = 0;\n\n if (n > 0) {\n hi = p[--n];\n\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n\n if (n > 0 && (lo < 0 && p[n - 1] < 0 || lo > 0 && p[n - 1] > 0)) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n\n return hi;\n }\n\n}\nexport function fsum(values, valueof) {\n const adder = new Adder();\n\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n\n return +adder;\n}\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined ? v => adder.add(+v || 0) : v => adder.add(+valueof(v, ++index, values) || 0));\n}","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function (x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n};\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function (object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function (object, stream) {\n var features = object.features,\n i = -1,\n n = features.length;\n\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\nvar streamGeometryType = {\n Sphere: function (object, stream) {\n stream.sphere();\n },\n Point: function (object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function (object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function (object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function (object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function (object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function (object, stream) {\n var coordinates = object.coordinates,\n i = -1,\n n = coordinates.length;\n\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function (object, stream) {\n var geometries = object.geometries,\n i = -1,\n n = geometries.length;\n\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1,\n n = coordinates.length - closed,\n coordinate;\n stream.lineStart();\n\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1,\n n = coordinates.length;\n stream.polygonStart();\n\n while (++i < n) streamLine(coordinates[i], stream, 1);\n\n stream.polygonEnd();\n}\n\nexport default function (object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}","import { Adder } from \"d3-array\";\nimport { asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt } from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\nvar W0, W1, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, lambda00, phi00, // first point\nx0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function () {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function () {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n}; // Arithmetic mean of Cartesian vectors.\n\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n} // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\n\n\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m),\n // line weight = angle\n v = m && -w / m; // area weight multiplier\n\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function (object) {\n W0 = W1 = X0 = Y0 = Z0 = X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z); // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1; // If the feature has zero length, fall back to arithmetic mean of point vectors.\n\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z); // If the feature still has an undefined ccentroid, then return.\n\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}","export default function noop() {}","/* this code came from Nate's snazzy map https://snazzymaps.com/ */\r\n\r\nexport const labelColor = \"#b5d4e3\";\r\n\r\nexport default [\r\n {\r\n featureType: \"all\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"all\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"all\",\r\n elementType: \"geometry.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"all\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n gamma: 0.01,\r\n },\r\n {\r\n lightness: 20,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"all\",\r\n elementType: \"labels.text.stroke\",\r\n stylers: [\r\n {\r\n saturation: -31,\r\n },\r\n {\r\n lightness: -33,\r\n },\r\n {\r\n weight: 2,\r\n },\r\n {\r\n gamma: 0.8,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"all\",\r\n elementType: \"labels.icon\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: \"#09304B\",\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"labels.text\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: labelColor,\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"labels.text.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.country\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: labelColor,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.province\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: labelColor,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.province\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.province\",\r\n elementType: \"labels.text.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"geometry.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"labels.text\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: labelColor,\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"labels.text.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.locality\",\r\n elementType: \"labels.icon\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.neighborhood\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.land_parcel\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"landscape\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n lightness: 30,\r\n },\r\n {\r\n saturation: 30,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"landscape.man_made\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: \"#09304B\",\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"landscape.natural\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: \"#09304B\",\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n saturation: 20,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi.park\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi.park\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n lightness: 20,\r\n },\r\n {\r\n saturation: \"-20\",\r\n },\r\n {\r\n color: \"#09304B\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi.park\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n lightness: 10,\r\n },\r\n {\r\n saturation: -30,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"geometry.stroke\",\r\n stylers: [\r\n {\r\n saturation: 25,\r\n },\r\n {\r\n lightness: 25,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n lightness: -20,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: \"#021019\",\r\n },\r\n {\r\n saturation: \"0\",\r\n },\r\n ],\r\n },\r\n];\r\n","var ClusterIcon = /*#__PURE__*/function () {\n function ClusterIcon(cluster, styles) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView);\n this.cluster = cluster;\n this.className = this.cluster.getClusterer().getClusterClass();\n this.styles = styles;\n this.center = undefined;\n this.div = null;\n this.sums = null;\n this.visible = false;\n this.boundsChangedListener = null;\n this.url = '';\n this.height = 0;\n this.width = 0;\n this.anchorText = [0, 0];\n this.anchorIcon = [0, 0];\n this.textColor = 'black';\n this.textSize = 11;\n this.textDecoration = 'none';\n this.fontWeight = 'bold';\n this.fontStyle = 'normal';\n this.fontFamily = 'Arial,sans-serif';\n this.backgroundPosition = '0 0'; // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.setMap(cluster.getMap()); // Note: this causes onAdd to be called\n }\n\n var _proto = ClusterIcon.prototype;\n\n _proto.onAdd = function onAdd() {\n var _this = this;\n\n var cMouseDownInCluster;\n var cDraggingMapByCluster;\n this.div = document.createElement('div');\n this.div.className = this.className;\n\n if (this.visible) {\n this.show();\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.getPanes().overlayMouseTarget.appendChild(this.div); // Fix for Issue 157\n\n this.boundsChangedListener = google.maps.event.addListener( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'boundschanged', function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster;\n });\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true;\n cDraggingMapByCluster = false;\n }); // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n\n google.maps.event.addDomListener(this.div, 'click', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function (event) {\n cMouseDownInCluster = false;\n\n if (!cDraggingMapByCluster) {\n var markerClusterer = _this.cluster.getClusterer();\n /**\r\n * This event is fired when a cluster marker is clicked.\r\n * @name MarkerClusterer#click\r\n * @param {Cluster} c The cluster that was clicked.\r\n * @event\r\n */\n\n\n google.maps.event.trigger(markerClusterer, 'click', _this.cluster);\n google.maps.event.trigger(markerClusterer, 'clusterclick', _this.cluster); // deprecated name\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n\n if (markerClusterer.getZoomOnClick()) {\n // Zoom into the cluster.\n var maxZoom = markerClusterer.getMaxZoom();\n\n var bounds = _this.cluster.getBounds(); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n markerClusterer.getMap().fitBounds(bounds); // There is a fix for Issue 170 here:\n\n setTimeout(function timeout() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds); // Don't zoom beyond the max zoom level\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().setZoom(maxZoom + 1);\n }\n }, 100);\n } // Prevent event propagation to the map:\n\n\n event.cancelBubble = true;\n\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n });\n google.maps.event.addDomListener(this.div, 'mouseover', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n /**\r\n * This event is fired when the mouse moves over a cluster marker.\r\n * @name MarkerClusterer#mouseover\r\n * @param {Cluster} c The cluster that the mouse moved over.\r\n * @event\r\n */\n google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseover', _this.cluster);\n }); // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n\n google.maps.event.addDomListener(this.div, 'mouseout', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n /**\r\n * This event is fired when the mouse moves out of a cluster marker.\r\n * @name MarkerClusterer#mouseout\r\n * @param {Cluster} c The cluster that the mouse moved out of.\r\n * @event\r\n */\n google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseout', _this.cluster);\n });\n };\n\n _proto.onRemove = function onRemove() {\n if (this.div && this.div.parentNode) {\n this.hide();\n\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener);\n }\n\n google.maps.event.clearInstanceListeners(this.div);\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n\n _proto.draw = function draw() {\n if (this.visible && this.div !== null && this.center) {\n var _this$getPosFromLatLn = this.getPosFromLatLng(this.center),\n x = _this$getPosFromLatLn.x,\n y = _this$getPosFromLatLn.y;\n\n this.div.style.top = y + 'px';\n this.div.style.left = x + 'px';\n }\n };\n\n _proto.hide = function hide() {\n if (this.div) {\n this.div.style.display = 'none';\n }\n\n this.visible = false;\n };\n\n _proto.show = function show() {\n if (this.div && this.center) {\n var img = '',\n divTitle = ''; // NOTE: values must be specified in px units\n\n var bp = this.backgroundPosition.split(' ');\n var spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10);\n var spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10);\n var pos = this.getPosFromLatLng(this.center);\n\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle();\n } else {\n divTitle = this.sums.title;\n }\n\n this.div.style.cssText = this.createCss(pos);\n img = \"\" + divTitle + \"\";\n this.div.innerHTML = img + \"
\" + // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.sums.text + '
';\n this.div.title = divTitle;\n this.div.style.display = '';\n }\n\n this.visible = true;\n };\n\n _proto.useStyle = function useStyle(sums) {\n this.sums = sums;\n var style = this.styles[Math.min(this.styles.length - 1, Math.max(0, sums.index - 1))];\n this.url = style.url;\n this.height = style.height;\n this.width = style.width;\n this.anchorText = style.anchorText || [0, 0];\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];\n this.textColor = style.textColor || 'black';\n this.textSize = style.textSize || 11;\n this.textDecoration = style.textDecoration || 'none';\n this.fontWeight = style.fontWeight || 'bold';\n this.fontStyle = style.fontStyle || 'normal';\n this.fontFamily = style.fontFamily || 'Arial,sans-serif';\n this.backgroundPosition = style.backgroundPosition || '0 0';\n };\n\n _proto.setCenter = function setCenter(center) {\n this.center = center;\n };\n\n _proto.createCss = function createCss(pos) {\n var style = [];\n style.push('cursor: pointer;');\n style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;');\n style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;');\n return style.join('');\n };\n\n _proto.getPosFromLatLng = function getPosFromLatLng(latlng) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= this.anchorIcon[1];\n pos.y -= this.anchorIcon[0]; // pos.x = pos.x\n // pos.y = pos.y\n\n return pos;\n };\n\n return ClusterIcon;\n}();\n\nvar Cluster = /*#__PURE__*/function () {\n function Cluster(markerClusterer) {\n this.markerClusterer = markerClusterer; // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.map = this.markerClusterer.getMap();\n this.gridSize = this.markerClusterer.getGridSize();\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize();\n this.averageCenter = this.markerClusterer.getAverageCenter();\n this.markers = [];\n this.center = undefined;\n this.bounds = null;\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles());\n }\n\n var _proto = Cluster.prototype;\n\n _proto.getSize = function getSize() {\n return this.markers.length;\n };\n\n _proto.getMarkers = function getMarkers() {\n return this.markers;\n };\n\n _proto.getCenter = function getCenter() {\n return this.center;\n };\n\n _proto.getMap = function getMap() {\n return this.map;\n };\n\n _proto.getClusterer = function getClusterer() {\n return this.markerClusterer;\n };\n\n _proto.getBounds = function getBounds() {\n var bounds = new google.maps.LatLngBounds(this.center, this.center);\n var markers = this.getMarkers();\n\n for (var i = 0; i < markers.length; i++) {\n var position = markers[i].getPosition();\n\n if (position) {\n bounds.extend(position);\n }\n }\n\n return bounds;\n };\n\n _proto.remove = function remove() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.clusterIcon.setMap(null);\n this.markers = [];\n delete this.markers;\n };\n\n _proto.addMarker = function addMarker(marker) {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false;\n }\n\n if (!this.center) {\n var position = marker.getPosition();\n\n if (position) {\n this.center = position;\n this.calculateBounds();\n }\n } else {\n if (this.averageCenter) {\n var _position = marker.getPosition();\n\n if (_position) {\n var length = this.markers.length + 1;\n this.center = new google.maps.LatLng((this.center.lat() * (length - 1) + _position.lat()) / length, (this.center.lng() * (length - 1) + _position.lng()) / length);\n this.calculateBounds();\n }\n }\n }\n\n marker.isAdded = true;\n this.markers.push(marker);\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n\n if (maxZoom !== null && this.map.getZoom() > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n } else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map);\n }\n } else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (var i = 0; i < mCount; i++) {\n this.markers[i].setMap(null);\n }\n } else {\n marker.setMap(null);\n }\n\n return true;\n };\n\n _proto.isMarkerInClusterBounds = function isMarkerInClusterBounds(marker) {\n if (this.bounds !== null) {\n var position = marker.getPosition();\n\n if (position) {\n return this.bounds.contains(position);\n }\n }\n\n return false;\n };\n\n _proto.calculateBounds = function calculateBounds() {\n this.bounds = this.markerClusterer.getExtendedBounds(new google.maps.LatLngBounds(this.center, this.center));\n };\n\n _proto.updateIcon = function updateIcon() {\n var mCount = this.markers.length;\n var maxZoom = this.markerClusterer.getMaxZoom();\n\n if (maxZoom !== null && this.map.getZoom() > maxZoom) {\n this.clusterIcon.hide();\n return;\n }\n\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide();\n return;\n }\n\n if (this.center) {\n this.clusterIcon.setCenter(this.center);\n }\n\n this.clusterIcon.useStyle(this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length));\n this.clusterIcon.show();\n };\n\n _proto.isMarkerAlreadyAdded = function isMarkerAlreadyAdded(marker) {\n if (this.markers.includes) {\n return this.markers.includes(marker);\n } else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n return Cluster;\n}();\n/* global google */\n\n\nvar CALCULATOR = function CALCULATOR(markers, numStyles) {\n var index = 0;\n var title = '';\n var count = markers.length.toString();\n var dv = count;\n\n while (dv !== 0) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n dv = parseInt(dv, 10) / 10;\n index++;\n }\n\n index = Math.min(index, numStyles);\n return {\n text: count,\n index: index,\n title: title\n };\n};\n\nvar BATCH_SIZE = 2000;\nvar BATCH_SIZE_IE = 500;\nvar IMAGE_PATH = 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m';\nvar IMAGE_EXTENSION = 'png';\nvar IMAGE_SIZES = [53, 56, 66, 78, 90];\nvar CLUSTERER_CLASS = 'cluster';\n\nvar Clusterer = /*#__PURE__*/function () {\n function Clusterer(map, optMarkers, optOptions) {\n if (optMarkers === void 0) {\n optMarkers = [];\n }\n\n if (optOptions === void 0) {\n optOptions = {};\n }\n\n this.extend(Clusterer, google.maps.OverlayView);\n this.markers = [];\n this.clusters = [];\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n this.gridSize = optOptions.gridSize || 60;\n this.minClusterSize = optOptions.minimumClusterSize || 2;\n this.maxZoom = optOptions.maxZoom || null;\n this.styles = optOptions.styles || [];\n this.title = optOptions.title || '';\n this.zoomOnClick = true;\n\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick;\n }\n\n this.averageCenter = false;\n\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter;\n }\n\n this.ignoreHidden = false;\n\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden;\n }\n\n this.enableRetinaIcons = false;\n\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons;\n }\n\n this.imagePath = optOptions.imagePath || IMAGE_PATH;\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION;\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES;\n this.calculator = optOptions.calculator || CALCULATOR;\n this.batchSize = optOptions.batchSize || BATCH_SIZE;\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE;\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS;\n\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE;\n }\n\n this.timerRefStatic = null;\n this.setupStyles();\n this.addMarkers(optMarkers, true); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.setMap(map); // Note: this causes onAdd to be called\n }\n\n var _proto = Clusterer.prototype;\n\n _proto.onAdd = function onAdd() {\n var _this = this; // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.activeMap = this.getMap();\n this.ready = true;\n this.repaint(); // Add the map event listeners\n\n this.listeners = [google.maps.event.addListener( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'zoom_changed', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this.resetViewport(false); // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n\n\n if ( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.getMap().getZoom() === (_this.get('minZoom') || 0) || // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.getMap().getZoom() === _this.get('maxZoom')) {\n google.maps.event.trigger(_this, 'idle');\n }\n }), google.maps.event.addListener( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(), 'idle', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this.redraw();\n })];\n } // eslint-disable-next-line @getify/proper-arrows/this\n ;\n\n _proto.onRemove = function onRemove() {\n // Put all the managed markers back on the map:\n for (var i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap);\n }\n } // Remove all clusters:\n\n\n for (var _i = 0; _i < this.clusters.length; _i++) {\n this.clusters[_i].remove();\n }\n\n this.clusters = []; // Remove map event listeners:\n\n for (var _i2 = 0; _i2 < this.listeners.length; _i2++) {\n google.maps.event.removeListener(this.listeners[_i2]);\n }\n\n this.listeners = [];\n this.activeMap = null;\n this.ready = false;\n } // eslint-disable-next-line @typescript-eslint/no-empty-function\n ;\n\n _proto.draw = function draw() {};\n\n _proto.setupStyles = function setupStyles() {\n if (this.styles.length > 0) {\n return;\n }\n\n for (var i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i]\n });\n }\n };\n\n _proto.fitMapToMarkers = function fitMapToMarkers() {\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n\n for (var i = 0; i < markers.length; i++) {\n var position = markers[i].getPosition();\n\n if (position) {\n bounds.extend(position);\n }\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.getMap().fitBounds(bounds);\n };\n\n _proto.getGridSize = function getGridSize() {\n return this.gridSize;\n };\n\n _proto.setGridSize = function setGridSize(gridSize) {\n this.gridSize = gridSize;\n };\n\n _proto.getMinimumClusterSize = function getMinimumClusterSize() {\n return this.minClusterSize;\n };\n\n _proto.setMinimumClusterSize = function setMinimumClusterSize(minimumClusterSize) {\n this.minClusterSize = minimumClusterSize;\n };\n\n _proto.getMaxZoom = function getMaxZoom() {\n return this.maxZoom;\n };\n\n _proto.setMaxZoom = function setMaxZoom(maxZoom) {\n this.maxZoom = maxZoom;\n };\n\n _proto.getStyles = function getStyles() {\n return this.styles;\n };\n\n _proto.setStyles = function setStyles(styles) {\n this.styles = styles;\n };\n\n _proto.getTitle = function getTitle() {\n return this.title;\n };\n\n _proto.setTitle = function setTitle(title) {\n this.title = title;\n };\n\n _proto.getZoomOnClick = function getZoomOnClick() {\n return this.zoomOnClick;\n };\n\n _proto.setZoomOnClick = function setZoomOnClick(zoomOnClick) {\n this.zoomOnClick = zoomOnClick;\n };\n\n _proto.getAverageCenter = function getAverageCenter() {\n return this.averageCenter;\n };\n\n _proto.setAverageCenter = function setAverageCenter(averageCenter) {\n this.averageCenter = averageCenter;\n };\n\n _proto.getIgnoreHidden = function getIgnoreHidden() {\n return this.ignoreHidden;\n };\n\n _proto.setIgnoreHidden = function setIgnoreHidden(ignoreHidden) {\n this.ignoreHidden = ignoreHidden;\n };\n\n _proto.getEnableRetinaIcons = function getEnableRetinaIcons() {\n return this.enableRetinaIcons;\n };\n\n _proto.setEnableRetinaIcons = function setEnableRetinaIcons(enableRetinaIcons) {\n this.enableRetinaIcons = enableRetinaIcons;\n };\n\n _proto.getImageExtension = function getImageExtension() {\n return this.imageExtension;\n };\n\n _proto.setImageExtension = function setImageExtension(imageExtension) {\n this.imageExtension = imageExtension;\n };\n\n _proto.getImagePath = function getImagePath() {\n return this.imagePath;\n };\n\n _proto.setImagePath = function setImagePath(imagePath) {\n this.imagePath = imagePath;\n };\n\n _proto.getImageSizes = function getImageSizes() {\n return this.imageSizes;\n };\n\n _proto.setImageSizes = function setImageSizes(imageSizes) {\n this.imageSizes = imageSizes;\n };\n\n _proto.getCalculator = function getCalculator() {\n return this.calculator;\n };\n\n _proto.setCalculator = function setCalculator(calculator) {\n this.calculator = calculator;\n };\n\n _proto.getBatchSizeIE = function getBatchSizeIE() {\n return this.batchSizeIE;\n };\n\n _proto.setBatchSizeIE = function setBatchSizeIE(batchSizeIE) {\n this.batchSizeIE = batchSizeIE;\n };\n\n _proto.getClusterClass = function getClusterClass() {\n return this.clusterClass;\n };\n\n _proto.setClusterClass = function setClusterClass(clusterClass) {\n this.clusterClass = clusterClass;\n };\n\n _proto.getMarkers = function getMarkers() {\n return this.markers;\n };\n\n _proto.getTotalMarkers = function getTotalMarkers() {\n return this.markers.length;\n };\n\n _proto.getClusters = function getClusters() {\n return this.clusters;\n };\n\n _proto.getTotalClusters = function getTotalClusters() {\n return this.clusters.length;\n };\n\n _proto.addMarker = function addMarker(marker, optNoDraw) {\n this.pushMarkerTo(marker);\n\n if (!optNoDraw) {\n this.redraw();\n }\n };\n\n _proto.addMarkers = function addMarkers(markers, optNoDraw) {\n for (var key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo(markers[key]);\n }\n }\n\n if (!optNoDraw) {\n this.redraw();\n }\n };\n\n _proto.pushMarkerTo = function pushMarkerTo(marker) {\n var _this2 = this; // If the marker is draggable add a listener so we can update the clusters on the dragend:\n\n\n if (marker.getDraggable()) {\n // eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this\n google.maps.event.addListener(marker, 'dragend', function () {\n if (_this2.ready) {\n marker.isAdded = false;\n\n _this2.repaint();\n }\n });\n }\n\n marker.isAdded = false;\n this.markers.push(marker);\n };\n\n _proto.removeMarker_ = function removeMarker_(marker) {\n var index = -1;\n\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker);\n } else {\n for (var i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i;\n break;\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n\n marker.setMap(null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n\n return true;\n };\n\n _proto.removeMarker = function removeMarker(marker, optNoDraw) {\n var removed = this.removeMarker_(marker);\n\n if (!optNoDraw && removed) {\n this.repaint();\n }\n\n return removed;\n };\n\n _proto.removeMarkers = function removeMarkers(markers, optNoDraw) {\n var removed = false;\n\n for (var i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i]);\n }\n\n if (!optNoDraw && removed) {\n this.repaint();\n }\n\n return removed;\n };\n\n _proto.clearMarkers = function clearMarkers() {\n this.resetViewport(true);\n this.markers = [];\n };\n\n _proto.repaint = function repaint() {\n var oldClusters = this.clusters.slice();\n this.clusters = [];\n this.resetViewport(false);\n this.redraw(); // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n\n setTimeout(function timeout() {\n for (var i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove();\n }\n }, 0);\n };\n\n _proto.getExtendedBounds = function getExtendedBounds(bounds) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var projection = this.getProjection(); // Convert the points to pixels and the extend out by the grid size.\n\n var trPix = projection.fromLatLngToDivPixel( // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng()));\n trPix.x += this.gridSize;\n trPix.y -= this.gridSize;\n var blPix = projection.fromLatLngToDivPixel( // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()));\n blPix.x -= this.gridSize;\n blPix.y += this.gridSize; // Extend the bounds to contain the new bounds.\n\n bounds.extend( // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix));\n bounds.extend( // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix));\n return bounds;\n };\n\n _proto.redraw = function redraw() {\n // Redraws all the clusters.\n this.createClusters(0);\n };\n\n _proto.resetViewport = function resetViewport(optHide) {\n // Remove all the clusters\n for (var i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove();\n }\n\n this.clusters = []; // Reset the markers to not be added and to be removed from the map.\n\n for (var _i3 = 0; _i3 < this.markers.length; _i3++) {\n var marker = this.markers[_i3];\n marker.isAdded = false;\n\n if (optHide) {\n marker.setMap(null);\n }\n }\n };\n\n _proto.distanceBetweenPoints = function distanceBetweenPoints(p1, p2) {\n var R = 6371; // Radius of the Earth in km\n\n var dLat = (p2.lat() - p1.lat()) * Math.PI / 180;\n var dLon = (p2.lng() - p1.lng()) * Math.PI / 180;\n var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)));\n };\n\n _proto.isMarkerInBounds = function isMarkerInBounds(marker, bounds) {\n var position = marker.getPosition();\n\n if (position) {\n return bounds.contains(position);\n }\n\n return false;\n };\n\n _proto.addToClosestCluster = function addToClosestCluster(marker) {\n var cluster;\n var distance = 40000; // Some large number\n\n var clusterToAddTo = null;\n\n for (var i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i];\n var center = cluster.getCenter();\n var position = marker.getPosition();\n\n if (center && position) {\n var d = this.distanceBetweenPoints(center, position);\n\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n } else {\n cluster = new Cluster(this);\n cluster.addMarker(marker);\n this.clusters.push(cluster);\n }\n };\n\n _proto.createClusters = function createClusters(iFirst) {\n var _this3 = this;\n\n if (!this.ready) {\n return;\n } // Cancel previous batch processing if we're working on the first batch:\n\n\n if (iFirst === 0) {\n /**\r\n * This event is fired when the Clusterer begins\r\n * clustering markers.\r\n * @name Clusterer#clusteringbegin\r\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\r\n * @event\r\n */\n google.maps.event.trigger(this, 'clusteringbegin', this);\n\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic);\n delete this.timerRefStatic;\n }\n } // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n\n\n var mapBounds = // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() > 3 ? new google.maps.LatLngBounds( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getBounds().getSouthWest(), // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getBounds().getNorthEast()) : new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));\n var bounds = this.getExtendedBounds(mapBounds);\n var iLast = Math.min(iFirst + this.batchSize, this.markers.length);\n\n for (var i = iFirst; i < iLast; i++) {\n var marker = this.markers[i];\n\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || this.ignoreHidden && marker.getVisible()) {\n this.addToClosestCluster(marker);\n }\n }\n }\n\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout( // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n _this3.createClusters(iLast);\n }, 0);\n } else {\n this.timerRefStatic = null;\n /**\r\n * This event is fired when the Clusterer stops\r\n * clustering markers.\r\n * @name Clusterer#clusteringend\r\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\r\n * @event\r\n */\n\n google.maps.event.trigger(this, 'clusteringend', this);\n\n for (var _i4 = 0; _i4 < this.clusters.length; _i4++) {\n this.clusters[_i4].updateIcon();\n }\n }\n };\n\n _proto.extend = function extend(obj1, obj2) {\n return function applyExtend(object) {\n // eslint-disable-next-line guard-for-in\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n return this;\n }.apply(obj1, [obj2]);\n };\n\n return Clusterer;\n}();\n\nexport { Cluster, ClusterIcon, Clusterer };","/**\r\n * Copyright 2019 Google LLC. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at.\r\n *\r\n * Http://www.apache.org/licenses/LICENSE-2.0.\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\n/**\r\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\r\n * dynamically using\r\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\r\n * It works by dynamically creating and appending a script node to the the\r\n * document head and wrapping the callback function so as to return a promise.\r\n *\r\n * ```\r\n * const loader = new Loader({\r\n * apiKey: \"\",\r\n * version: \"weekly\",\r\n * libraries: [\"places\"]\r\n * });\r\n *\r\n * loader.load().then(() => {\r\n * const map = new google.maps.Map(...)\r\n * })\r\n * ```\r\n */\nvar Loader =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\r\n * using this library, instead the defaults are set by the Google Maps\r\n * JavaScript API server.\r\n *\r\n * ```\r\n * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\r\n * ```\r\n */\n function Loader(_a) {\n var apiKey = _a.apiKey,\n channel = _a.channel,\n _b = _a.id,\n id = _b === void 0 ? \"__googleMapsScriptId\" : _b,\n _c = _a.libraries,\n libraries = _c === void 0 ? [] : _c,\n language = _a.language,\n region = _a.region,\n version = _a.version,\n mapIds = _a.mapIds,\n nonce = _a.nonce,\n _d = _a.url,\n url = _d === void 0 ? \"https://maps.googleapis.com/maps/api/js\" : _d;\n this.CALLBACK = \"__googleMapsCallback\";\n this.callbacks = [];\n this.done = false;\n this.loading = false;\n this.version = version;\n this.apiKey = apiKey;\n this.channel = channel;\n this.id = id;\n this.libraries = libraries;\n this.language = language;\n this.region = region;\n this.mapIds = mapIds;\n this.nonce = nonce;\n this.url = url;\n }\n /**\r\n * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\r\n *\r\n * @ignore\r\n */\n\n\n Loader.prototype.createUrl = function () {\n var url = this.url;\n url += \"?callback=\" + this.CALLBACK;\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.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 return url;\n };\n /**\r\n * Load the Google Maps JavaScript API script and return a Promise.\r\n */\n\n\n Loader.prototype.load = function () {\n return this.loadPromise();\n };\n /**\r\n * Load the Google Maps JavaScript API script and return a Promise.\r\n *\r\n * @ignore\r\n */\n\n\n Loader.prototype.loadPromise = function () {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n _this.loadCallback(function (err) {\n if (!err) {\n resolve();\n } else {\n reject(err);\n }\n });\n });\n };\n /**\r\n * Load the Google Maps JavaScript API script with a callback.\r\n */\n\n\n Loader.prototype.loadCallback = function (fn) {\n this.callbacks.push(fn);\n this.execute();\n };\n /**\r\n * Set the script on document.\r\n */\n\n\n Loader.prototype.setScript = function () {\n if (this.id && document.getElementById(this.id)) {\n this.callback();\n return;\n }\n\n var url = this.createUrl();\n var script = document.createElement(\"script\");\n script.id = this.id;\n script.type = \"text/javascript\";\n script.src = url;\n script.onerror = this.loadErrorCallback.bind(this);\n script.defer = true;\n script.async = true;\n\n if (this.nonce) {\n script.nonce = this.nonce;\n }\n\n document.head.appendChild(script);\n };\n\n Loader.prototype.loadErrorCallback = function (e) {\n this.onerrorEvent = e;\n this.callback();\n };\n\n Loader.prototype.setCallback = function () {\n window.__googleMapsCallback = this.callback.bind(this);\n };\n\n Loader.prototype.callback = function () {\n var _this = this;\n\n this.done = true;\n this.loading = false;\n this.callbacks.forEach(function (cb) {\n cb(_this.onerrorEvent);\n });\n this.callbacks = [];\n };\n\n Loader.prototype.execute = function () {\n if (this.done) {\n this.callback();\n } else {\n if (this.loading) ;else {\n this.loading = true;\n this.setCallback();\n this.setScript();\n }\n }\n };\n\n return Loader;\n}();\n\nexport { Loader };","var InfoBox = /*#__PURE__*/function () {\n function InfoBox(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.extend(InfoBox, google.maps.OverlayView); // Standard options (in common with google.maps.InfoWindow):\n\n this.content = options.content || '';\n this.disableAutoPan = options.disableAutoPan || false;\n this.maxWidth = options.maxWidth || 0;\n this.pixelOffset = options.pixelOffset || new google.maps.Size(0, 0);\n this.position = options.position || new google.maps.LatLng(0, 0);\n this.zIndex = options.zIndex || null; // Additional options (unique to InfoBox):\n\n this.boxClass = options.boxClass || 'infoBox';\n this.boxStyle = options.boxStyle || {};\n this.closeBoxMargin = options.closeBoxMargin || '2px';\n this.closeBoxURL = options.closeBoxURL || 'http://www.google.com/intl/en_us/mapfiles/close.gif';\n\n if (options.closeBoxURL === '') {\n this.closeBoxURL = '';\n }\n\n this.infoBoxClearance = options.infoBoxClearance || new google.maps.Size(1, 1);\n\n if (typeof options.visible === 'undefined') {\n if (typeof options.isHidden === 'undefined') {\n options.visible = true;\n } else {\n options.visible = !options.isHidden;\n }\n }\n\n this.isHidden = !options.visible;\n this.alignBottom = options.alignBottom || false;\n this.pane = options.pane || 'floatPane';\n this.enableEventPropagation = options.enableEventPropagation || false;\n this.div = null;\n this.closeListener = null;\n this.moveListener = null;\n this.mapListener = null;\n this.contextListener = null;\n this.eventListeners = null;\n this.fixedWidthSet = null;\n }\n\n var _proto = InfoBox.prototype;\n\n _proto.createInfoBoxDiv = function createInfoBoxDiv() {\n var _this = this; // This handler prevents an event in the InfoBox from being passed on to the map.\n\n\n function cancelHandler(event) {\n event.cancelBubble = true;\n\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n } // This handler ignores the current event in the InfoBox and conditionally prevents\n // the event from being passed on to the map. It is used for the contextmenu event.\n // eslint-disable-next-line @getify/proper-arrows/this\n\n\n var ignoreHandler = function ignoreHandler(event) {\n event.returnValue = false;\n\n if (event.preventDefault) {\n event.preventDefault();\n }\n\n if (!_this.enableEventPropagation) {\n cancelHandler(event);\n }\n };\n\n if (!this.div) {\n this.div = document.createElement('div');\n this.setBoxStyle();\n\n if (typeof this.content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + this.content;\n } else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(this.content);\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n var panes = this.getPanes();\n panes[this.pane].appendChild(this.div); // Add the InfoBox div to the DOM\n\n this.addClickHandler();\n\n if (this.div.style.width) {\n this.fixedWidthSet = true;\n } else {\n if (this.maxWidth !== 0 && this.div.offsetWidth > this.maxWidth) {\n this.div.style.width = this.maxWidth + 'px';\n this.fixedWidthSet = true;\n } else {\n // The following code is needed to overcome problems with MSIE\n var bw = this.getBoxWidths();\n this.div.style.width = this.div.offsetWidth - bw.left - bw.right + 'px';\n this.fixedWidthSet = false;\n }\n }\n\n this.panBox(this.disableAutoPan);\n\n if (!this.enableEventPropagation) {\n this.eventListeners = []; // Cancel event propagation.\n // Note: mousemove not included (to resolve Issue 152)\n\n var events = ['mousedown', 'mouseover', 'mouseout', 'mouseup', 'click', 'dblclick', 'touchstart', 'touchend', 'touchmove'];\n\n for (var i = 0; i < events.length; i++) {\n this.eventListeners.push(google.maps.event.addDomListener(this.div, events[i], cancelHandler));\n } // Workaround for Google bug that causes the cursor to change to a pointer\n // when the mouse moves over a marker underneath InfoBox.\n\n\n this.eventListeners.push(google.maps.event.addDomListener(this.div, 'mouseover', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n if (_this.div) {\n _this.div.style.cursor = 'default';\n }\n }));\n }\n\n this.contextListener = google.maps.event.addDomListener(this.div, 'contextmenu', ignoreHandler);\n /**\r\n * This event is fired when the DIV containing the InfoBox's content is attached to the DOM.\r\n * @name InfoBox#domready\r\n * @event\r\n */\n\n google.maps.event.trigger(this, 'domready');\n }\n };\n\n _proto.getCloseBoxImg = function getCloseBoxImg() {\n var img = '';\n\n if (this.closeBoxURL !== '') {\n img = '\"\"';\n\";\n }\n\n return img;\n };\n\n _proto.addClickHandler = function addClickHandler() {\n if (this.div && this.div.firstChild && this.closeBoxURL !== '') {\n var closeBox = this.div.firstChild;\n this.closeListener = google.maps.event.addDomListener(closeBox, 'click', this.getCloseClickHandler());\n } else {\n this.closeListener = null;\n }\n };\n\n _proto.getCloseClickHandler = function getCloseClickHandler() {\n var _this2 = this; // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n\n\n return function (event) {\n // 1.0.3 fix: Always prevent propagation of a close box click to the map:\n event.cancelBubble = true;\n\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n /**\r\n * This event is fired when the InfoBox's close box is clicked.\r\n * @name InfoBox#closeclick\r\n * @event\r\n */\n\n\n google.maps.event.trigger(_this2, 'closeclick');\n\n _this2.close();\n };\n };\n\n _proto.panBox = function panBox(disablePan) {\n if (this.div && !disablePan) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var map = this.getMap(); // Only pan if attached to map, not panorama\n\n if (map instanceof google.maps.Map) {\n var xOffset = 0;\n var yOffset = 0;\n var bounds = map.getBounds();\n\n if (bounds && !bounds.contains(this.position)) {\n // Marker not in visible area of map, so set center\n // of map to the marker position first.\n map.setCenter(this.position);\n }\n\n var mapDiv = map.getDiv(); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n var mapWidth = mapDiv.offsetWidth; // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n var mapHeight = mapDiv.offsetHeight;\n var iwOffsetX = this.pixelOffset.width;\n var iwOffsetY = this.pixelOffset.height;\n var iwWidth = this.div.offsetWidth;\n var iwHeight = this.div.offsetHeight;\n var padX = this.infoBoxClearance.width;\n var padY = this.infoBoxClearance.height; // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToContainerPixel(this.position);\n\n if (pixPosition.x < -iwOffsetX + padX) {\n xOffset = pixPosition.x + iwOffsetX - padX;\n } else if (pixPosition.x + iwWidth + iwOffsetX + padX > mapWidth) {\n xOffset = pixPosition.x + iwWidth + iwOffsetX + padX - mapWidth;\n }\n\n if (this.alignBottom) {\n if (pixPosition.y < -iwOffsetY + padY + iwHeight) {\n yOffset = pixPosition.y + iwOffsetY - padY - iwHeight;\n } else if (pixPosition.y + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwOffsetY + padY - mapHeight;\n }\n } else {\n if (pixPosition.y < -iwOffsetY + padY) {\n yOffset = pixPosition.y + iwOffsetY - padY;\n } else if (pixPosition.y + iwHeight + iwOffsetY + padY > mapHeight) {\n yOffset = pixPosition.y + iwHeight + iwOffsetY + padY - mapHeight;\n }\n }\n\n if (!(xOffset === 0 && yOffset === 0)) {\n // Move the map to the shifted center.\n map.panBy(xOffset, yOffset);\n }\n }\n }\n };\n\n _proto.setBoxStyle = function setBoxStyle() {\n if (this.div) {\n // Apply style values from the style sheet defined in the boxClass parameter:\n this.div.className = this.boxClass; // Clear existing inline style values:\n\n this.div.style.cssText = ''; // Apply style values defined in the boxStyle parameter:\n\n var boxStyle = this.boxStyle;\n\n for (var i in boxStyle) {\n if (boxStyle.hasOwnProperty(i)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.div.style[i] = boxStyle[i];\n }\n } // Fix for iOS disappearing InfoBox problem\n // See http://stackoverflow.com/questions/9229535/google-maps-markers-disappear-at-certain-zoom-level-only-on-iphone-ipad\n\n\n this.div.style.webkitTransform = 'translateZ(0)'; // Fix up opacity style for benefit of MSIE\n\n if (typeof this.div.style.opacity !== 'undefined' && this.div.style.opacity !== '') {\n // See http://www.quirksmode.org/css/opacity.html\n var opacity = parseFloat(this.div.style.opacity || ''); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.div.style.msFilter = '\"progid:DXImageTransform.Microsoft.Alpha(Opacity=' + opacity * 100 + ')\"';\n this.div.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n } // Apply required styles\n\n\n this.div.style.position = 'absolute';\n this.div.style.visibility = 'hidden';\n\n if (this.zIndex !== null) {\n this.div.style.zIndex = this.zIndex + '';\n }\n\n if (!this.div.style.overflow) {\n this.div.style.overflow = 'auto';\n }\n }\n };\n\n _proto.getBoxWidths = function getBoxWidths() {\n var bw = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n };\n\n if (!this.div) {\n return bw;\n }\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n var ownerDocument = this.div.ownerDocument;\n var computedStyle = ownerDocument && ownerDocument.defaultView ? ownerDocument.defaultView.getComputedStyle(this.div, '') : null;\n\n if (computedStyle) {\n // The computed styles are always in pixel units (good!)\n bw.top = parseInt(computedStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(computedStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(computedStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(computedStyle.borderRightWidth || '', 10) || 0;\n }\n } else if ( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n document.documentElement.currentStyle // MSIE\n ) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var currentStyle = this.div.currentStyle;\n\n if (currentStyle) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // The current styles may not be in pixel units, but assume they are (bad!)\n bw.top = parseInt(currentStyle.borderTopWidth || '', 10) || 0;\n bw.bottom = parseInt(currentStyle.borderBottomWidth || '', 10) || 0;\n bw.left = parseInt(currentStyle.borderLeftWidth || '', 10) || 0;\n bw.right = parseInt(currentStyle.borderRightWidth || '', 10) || 0;\n }\n }\n\n return bw;\n };\n\n _proto.onRemove = function onRemove() {\n if (this.div && this.div.parentNode) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n\n _proto.draw = function draw() {\n this.createInfoBoxDiv();\n\n if (this.div) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var projection = this.getProjection();\n var pixPosition = projection.fromLatLngToDivPixel(this.position);\n this.div.style.left = pixPosition.x + this.pixelOffset.width + 'px';\n\n if (this.alignBottom) {\n this.div.style.bottom = -(pixPosition.y + this.pixelOffset.height) + 'px';\n } else {\n this.div.style.top = pixPosition.y + this.pixelOffset.height + 'px';\n }\n\n if (this.isHidden) {\n this.div.style.visibility = 'hidden';\n } else {\n this.div.style.visibility = 'visible';\n }\n }\n };\n\n _proto.setOptions = function setOptions(options) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof options.boxClass !== 'undefined') {\n // Must be first\n this.boxClass = options.boxClass;\n this.setBoxStyle();\n }\n\n if (typeof options.boxStyle !== 'undefined') {\n // Must be second\n this.boxStyle = options.boxStyle;\n this.setBoxStyle();\n }\n\n if (typeof options.content !== 'undefined') {\n this.setContent(options.content);\n }\n\n if (typeof options.disableAutoPan !== 'undefined') {\n this.disableAutoPan = options.disableAutoPan;\n }\n\n if (typeof options.maxWidth !== 'undefined') {\n this.maxWidth = options.maxWidth;\n }\n\n if (typeof options.pixelOffset !== 'undefined') {\n this.pixelOffset = options.pixelOffset;\n }\n\n if (typeof options.alignBottom !== 'undefined') {\n this.alignBottom = options.alignBottom;\n }\n\n if (typeof options.position !== 'undefined') {\n this.setPosition(options.position);\n }\n\n if (typeof options.zIndex !== 'undefined') {\n this.setZIndex(options.zIndex);\n }\n\n if (typeof options.closeBoxMargin !== 'undefined') {\n this.closeBoxMargin = options.closeBoxMargin;\n }\n\n if (typeof options.closeBoxURL !== 'undefined') {\n this.closeBoxURL = options.closeBoxURL;\n }\n\n if (typeof options.infoBoxClearance !== 'undefined') {\n this.infoBoxClearance = options.infoBoxClearance;\n }\n\n if (typeof options.isHidden !== 'undefined') {\n this.isHidden = options.isHidden;\n }\n\n if (typeof options.visible !== 'undefined') {\n this.isHidden = !options.visible;\n }\n\n if (typeof options.enableEventPropagation !== 'undefined') {\n this.enableEventPropagation = options.enableEventPropagation;\n }\n\n if (this.div) {\n this.draw();\n }\n };\n\n _proto.setContent = function setContent(content) {\n this.content = content;\n\n if (this.div) {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n } // Odd code required to make things work with MSIE.\n\n\n if (!this.fixedWidthSet) {\n this.div.style.width = '';\n }\n\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n } else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n } // Perverse code required to make things work with MSIE.\n // (Ensures the close box does, in fact, float to the right.)\n\n\n if (!this.fixedWidthSet) {\n this.div.style.width = this.div.offsetWidth + 'px';\n\n if (typeof content === 'string') {\n this.div.innerHTML = this.getCloseBoxImg() + content;\n } else {\n this.div.innerHTML = this.getCloseBoxImg();\n this.div.appendChild(content);\n }\n }\n\n this.addClickHandler();\n }\n /**\r\n * This event is fired when the content of the InfoBox changes.\r\n * @name InfoBox#content_changed\r\n * @event\r\n */\n\n\n google.maps.event.trigger(this, 'content_changed');\n };\n\n _proto.setPosition = function setPosition(latLng) {\n this.position = latLng;\n\n if (this.div) {\n this.draw();\n }\n /**\r\n * This event is fired when the position of the InfoBox changes.\r\n * @name InfoBox#position_changed\r\n * @event\r\n */\n\n\n google.maps.event.trigger(this, 'position_changed');\n };\n\n _proto.setVisible = function setVisible(isVisible) {\n this.isHidden = !isVisible;\n\n if (this.div) {\n this.div.style.visibility = this.isHidden ? 'hidden' : 'visible';\n }\n };\n\n _proto.setZIndex = function setZIndex(index) {\n this.zIndex = index;\n\n if (this.div) {\n this.div.style.zIndex = index + '';\n }\n /**\r\n * This event is fired when the zIndex of the InfoBox changes.\r\n * @name InfoBox#zindex_changed\r\n * @event\r\n */\n\n\n google.maps.event.trigger(this, 'zindex_changed');\n };\n\n _proto.getContent = function getContent() {\n return this.content;\n };\n\n _proto.getPosition = function getPosition() {\n return this.position;\n };\n\n _proto.getZIndex = function getZIndex() {\n return this.zIndex;\n };\n\n _proto.getVisible = function getVisible() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var map = this.getMap();\n var isVisible;\n\n if (typeof map === 'undefined' || map === null) {\n isVisible = false;\n } else {\n isVisible = !this.isHidden;\n }\n\n return isVisible;\n };\n\n _proto.show = function show() {\n this.isHidden = false;\n\n if (this.div) {\n this.div.style.visibility = 'visible';\n }\n };\n\n _proto.hide = function hide() {\n this.isHidden = true;\n\n if (this.div) {\n this.div.style.visibility = 'hidden';\n }\n };\n\n _proto.open = function open(map, anchor) {\n var _this3 = this;\n\n if (anchor) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.position = anchor.getPosition();\n this.moveListener = google.maps.event.addListener(anchor, 'position_changed', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n var position = anchor.getPosition();\n\n _this3.setPosition(position);\n });\n this.mapListener = google.maps.event.addListener(anchor, 'map_changed', // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n function () {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this3.setMap(anchor.map);\n });\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.setMap(map);\n\n if (this.div) {\n this.panBox();\n }\n };\n\n _proto.close = function close() {\n if (this.closeListener) {\n google.maps.event.removeListener(this.closeListener);\n this.closeListener = null;\n }\n\n if (this.eventListeners) {\n for (var i = 0; i < this.eventListeners.length; i++) {\n google.maps.event.removeListener(this.eventListeners[i]);\n }\n\n this.eventListeners = null;\n }\n\n if (this.moveListener) {\n google.maps.event.removeListener(this.moveListener);\n this.moveListener = null;\n }\n\n if (this.mapListener) {\n google.maps.event.removeListener(this.mapListener);\n this.mapListener = null;\n }\n\n if (this.contextListener) {\n google.maps.event.removeListener(this.contextListener);\n this.contextListener = null;\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.setMap(null);\n };\n\n _proto.extend = function extend(obj1, obj2) {\n return function applyExtend(object) {\n // eslint-disable-next-line guard-for-in\n for (var property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n if (!this.prototype.hasOwnProperty(property)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property];\n }\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n return this;\n }.apply(obj1, [obj2]);\n };\n\n return InfoBox;\n}();\n\nexport { InfoBox };","import { createContext, useContext, createElement, Fragment, PureComponent, createRef, useRef, useState, useEffect, memo, useMemo, Children, isValidElement, cloneElement } from 'react';\nimport invariant from 'invariant';\nimport { Loader } from '@googlemaps/js-api-loader';\nimport { Clusterer } from '@react-google-maps/marker-clusterer';\nimport { createPortal } from 'react-dom';\nimport { InfoBox } from '@react-google-maps/infobox';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nvar MapContext = /*#__PURE__*/createContext(null);\n\nfunction useGoogleMap() {\n !!!useContext ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'useGoogleMap is React hook and requires React version 16.8+') : invariant(false) : void 0;\n var map = useContext(MapContext);\n !!!map ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'useGoogleMap needs a GoogleMap available up in the tree') : invariant(false) : void 0;\n return map;\n} // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nvar reduce = function reduce(obj, fn, acc) {\n return Object.keys(obj).reduce(function reducer(newAcc, key) {\n return fn(newAcc, obj[key], key);\n }, acc);\n}; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nfunction forEach(obj, fn) {\n Object.keys(obj).forEach(function iterator(key) {\n return fn(obj[key], key);\n });\n}\n/* global google */\n\n\nvar applyUpdaterToNextProps = function applyUpdaterToNextProps( // eslint-disable-next-line @typescript-eslint/no-explicit-any\nupdaterMap, // eslint-disable-next-line @typescript-eslint/no-explicit-any\nprevProps, // eslint-disable-next-line @typescript-eslint/no-explicit-any\nnextProps, // eslint-disable-next-line @typescript-eslint/no-explicit-any\ninstance // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var map = {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n var iter = function iter(fn, key) {\n var nextValue = nextProps[key];\n\n if (nextValue !== prevProps[key]) {\n map[key] = nextValue;\n fn(instance, nextValue);\n }\n };\n\n forEach(updaterMap, iter);\n return map;\n};\n\nfunction registerEvents( // eslint-disable-next-line @typescript-eslint/no-explicit-any\nprops, // eslint-disable-next-line @typescript-eslint/no-explicit-any\ninstance, eventMap) {\n var registeredList = reduce(eventMap, function reducer(acc, googleEventName, // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onEventName) {\n if (typeof props[onEventName] === 'function') {\n acc.push(google.maps.event.addListener(instance, googleEventName, props[onEventName]));\n }\n\n return acc;\n }, []);\n return registeredList;\n}\n\nfunction unregisterEvent(registered) {\n google.maps.event.removeListener(registered);\n}\n\nfunction unregisterEvents(events) {\n if (events === void 0) {\n events = [];\n }\n\n events.forEach(unregisterEvent);\n}\n\nfunction applyUpdatersToPropsAndRegisterEvents(_ref) {\n var updaterMap = _ref.updaterMap,\n eventMap = _ref.eventMap,\n prevProps = _ref.prevProps,\n nextProps = _ref.nextProps,\n instance = _ref.instance;\n var registeredEvents = registerEvents(nextProps, instance, eventMap);\n applyUpdaterToNextProps(updaterMap, prevProps, nextProps, instance);\n return registeredEvents;\n}\n\nvar eventMap = {\n onDblClick: 'dblclick',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMapTypeIdChanged: 'maptypeid_changed',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseDown: 'mousedown',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick',\n onTilesLoaded: 'tilesloaded',\n onBoundsChanged: 'bounds_changed',\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDrag: 'drag',\n onHeadingChanged: 'heading_changed',\n onIdle: 'idle',\n onProjectionChanged: 'projection_changed',\n onResize: 'resize',\n onTiltChanged: 'tilt_changed',\n onZoomChanged: 'zoom_changed'\n};\nvar updaterMap = {\n extraMapTypes: function extraMapTypes(map, extra) {\n extra.forEach(function forEachExtra(it, i) {\n map.mapTypes.set(String(i), it);\n });\n },\n center: function center(map, _center) {\n map.setCenter(_center);\n },\n clickableIcons: function clickableIcons(map, clickable) {\n map.setClickableIcons(clickable);\n },\n heading: function heading(map, _heading) {\n map.setHeading(_heading);\n },\n mapTypeId: function mapTypeId(map, _mapTypeId) {\n map.setMapTypeId(_mapTypeId);\n },\n options: function options(map, _options) {\n map.setOptions(_options);\n },\n streetView: function streetView(map, _streetView) {\n map.setStreetView(_streetView);\n },\n tilt: function tilt(map, _tilt) {\n map.setTilt(_tilt);\n },\n zoom: function zoom(map, _zoom) {\n map.setZoom(_zoom);\n }\n};\n\nvar GoogleMap = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(GoogleMap, _React$PureComponent);\n\n function GoogleMap() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n map: null\n };\n _this.registeredEvents = [];\n _this.mapRef = null;\n\n _this.getInstance = function () {\n if (_this.mapRef === null) {\n return null;\n }\n\n return new google.maps.Map(_this.mapRef, _this.props.options);\n };\n\n _this.panTo = function (latLng) {\n var map = _this.getInstance();\n\n if (map) {\n map.panTo(latLng);\n }\n };\n\n _this.setMapCallback = function () {\n if (_this.state.map !== null) {\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.map);\n }\n }\n };\n\n _this.getRef = function (ref) {\n _this.mapRef = ref;\n };\n\n return _this;\n }\n\n var _proto = GoogleMap.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var map = this.getInstance();\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap,\n eventMap: eventMap,\n prevProps: {},\n nextProps: this.props,\n instance: map\n });\n this.setState(function setMap() {\n return {\n map: map\n };\n }, this.setMapCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.map !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap,\n eventMap: eventMap,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.map\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.map !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.map);\n }\n\n unregisterEvents(this.registeredEvents);\n }\n };\n\n _proto.render = function render() {\n return createElement(\"div\", {\n id: this.props.id,\n ref: this.getRef,\n style: this.props.mapContainerStyle,\n className: this.props.mapContainerClassName\n }, createElement(MapContext.Provider, {\n value: this.state.map\n }, this.state.map !== null ? this.props.children : createElement(Fragment, null)));\n };\n\n return GoogleMap;\n}(PureComponent);\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n\nvar runtime_1 = createCommonjsModule(function (module) {\n /**\n * Copyright (c) 2014-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 var runtime = function (exports) {\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined$1; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined$1) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined$1;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined$1;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined$1;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined$1,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function (skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined$1;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined$1;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined$1;\n }\n }\n }\n },\n stop: function () {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function (exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined$1;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function (type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function (record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function (finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function (tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function (iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined$1;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n }( // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n module.exports);\n\n try {\n regeneratorRuntime = runtime;\n } catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n});\nvar isBrowser = typeof document !== 'undefined';\n\nvar injectScript = function injectScript(_ref) {\n var url = _ref.url,\n id = _ref.id,\n nonce = _ref.nonce;\n\n if (!isBrowser) {\n return Promise.reject(new Error('document is undefined'));\n }\n\n return new Promise(function injectScriptCallback(resolve, reject) {\n var existingScript = document.getElementById(id);\n var windowWithGoogleMap = window;\n\n if (existingScript) {\n // Same script id/url: keep same script\n var dataStateAttribute = existingScript.getAttribute('data-state');\n\n if (existingScript.src === url && dataStateAttribute !== 'error') {\n if (dataStateAttribute === 'ready') {\n return resolve(id);\n } else {\n var originalInitMap = windowWithGoogleMap.initMap;\n var originalErrorCallback = existingScript.onerror;\n\n windowWithGoogleMap.initMap = function initMap() {\n if (originalInitMap) {\n originalInitMap();\n }\n\n resolve(id);\n };\n\n existingScript.onerror = function (err) {\n if (originalErrorCallback) {\n originalErrorCallback(err);\n }\n\n reject(err);\n };\n\n return;\n }\n } // Same script id, but either\n // 1. requested URL is different\n // 2. script failed to load\n else {\n existingScript.remove();\n }\n }\n\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.id = id;\n script.async = true;\n script.nonce = nonce;\n\n script.onerror = function onerror(err) {\n script.setAttribute('data-state', 'error');\n reject(err);\n };\n\n windowWithGoogleMap.initMap = function onload() {\n script.setAttribute('data-state', 'ready');\n resolve(id);\n };\n\n document.head.appendChild(script);\n })[\"catch\"](function (err) {\n console.error('injectScript error: ', err);\n throw err;\n });\n};\n\nvar isRobotoStyle = function isRobotoStyle(element) {\n // roboto font download\n if (element.href && element.href.indexOf('https://fonts.googleapis.com/css?family=Roboto') === 0) {\n return true;\n } // roboto style elements\n\n\n if (element.tagName.toLowerCase() === 'style' && // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet && // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText && // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText.replace('\\r\\n', '').indexOf('.gm-style') === 0) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n element.styleSheet.cssText = '';\n return true;\n } // roboto style elements for other browsers\n\n\n if (element.tagName.toLowerCase() === 'style' && element.innerHTML && element.innerHTML.replace('\\r\\n', '').indexOf('.gm-style') === 0) {\n element.innerHTML = '';\n return true;\n } // when google tries to add empty style\n\n\n if (element.tagName.toLowerCase() === 'style' && // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n !element.styleSheet && !element.innerHTML) {\n return true;\n }\n\n return false;\n}; // Preventing the Google Maps library from downloading an extra font\n\n\nvar preventGoogleFonts = function preventGoogleFonts() {\n // we override these methods only for one particular head element\n // default methods for other elements are not affected\n var head = document.getElementsByTagName('head')[0];\n var trueInsertBefore = head.insertBefore.bind(head); // TODO: adding return before reflect solves the TS issue\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n head.insertBefore = function insertBefore(newElement, referenceElement) {\n if (!isRobotoStyle(newElement)) {\n Reflect.apply(trueInsertBefore, head, [newElement, referenceElement]);\n }\n };\n\n var trueAppend = head.appendChild.bind(head); // TODO: adding return before reflect solves the TS issue\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n head.appendChild = function appendChild(textNode) {\n if (!isRobotoStyle(textNode)) {\n Reflect.apply(trueAppend, head, [textNode]);\n }\n };\n};\n\nfunction makeLoadScriptUrl(_ref) {\n var googleMapsApiKey = _ref.googleMapsApiKey,\n googleMapsClientId = _ref.googleMapsClientId,\n _ref$version = _ref.version,\n version = _ref$version === void 0 ? 'weekly' : _ref$version,\n language = _ref.language,\n region = _ref.region,\n libraries = _ref.libraries,\n channel = _ref.channel,\n mapIds = _ref.mapIds;\n var params = [];\n !(googleMapsApiKey && googleMapsClientId || !(googleMapsApiKey && googleMapsClientId)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You need to specify either googleMapsApiKey or googleMapsClientId for @react-google-maps/api load script to work. You cannot use both at the same time.') : invariant(false) : void 0;\n\n if (googleMapsApiKey) {\n params.push(\"key=\" + googleMapsApiKey);\n } else if (googleMapsClientId) {\n params.push(\"client=\" + googleMapsClientId);\n }\n\n if (version) {\n params.push(\"v=\" + version);\n }\n\n if (language) {\n params.push(\"language=\" + language);\n }\n\n if (region) {\n params.push(\"region=\" + region);\n }\n\n if (libraries && libraries.length) {\n params.push(\"libraries=\" + libraries.sort().join(','));\n }\n\n if (channel) {\n params.push(\"channel=\" + channel);\n }\n\n if (mapIds && mapIds.length) {\n params.push(\"map_ids=\" + mapIds.join(','));\n }\n\n params.push('callback=initMap');\n return \"https://maps.googleapis.com/maps/api/js?\" + params.join('&');\n}\n\nvar cleaningUp = false;\n\nfunction DefaultLoadingElement() {\n return createElement(\"div\", null, \"Loading...\");\n}\n\nvar defaultLoadScriptProps = {\n id: 'script-loader',\n version: 'weekly'\n};\n\nvar LoadScript = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(LoadScript, _React$PureComponent);\n\n function LoadScript() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.check = createRef();\n _this.state = {\n loaded: false\n };\n\n _this.cleanupCallback = function () {\n // @ts-ignore\n delete window.google.maps;\n\n _this.injectScript();\n };\n\n _this.isCleaningUp = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {\n var promiseCallback;\n return runtime_1.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n promiseCallback = function _ref2(resolve) {\n if (!cleaningUp) {\n resolve();\n } else {\n if (isBrowser) {\n var timer = window.setInterval(function interval() {\n if (!cleaningUp) {\n window.clearInterval(timer);\n resolve();\n }\n }, 1);\n }\n }\n\n return;\n };\n\n return _context.abrupt(\"return\", new Promise(promiseCallback));\n\n case 2:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n _this.cleanup = function () {\n cleaningUp = true;\n var script = document.getElementById(_this.props.id);\n\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n\n Array.prototype.slice.call(document.getElementsByTagName('script')).filter(function filter(script) {\n return typeof script.src === 'string' && script.src.includes('maps.googleapis');\n }).forEach(function forEach(script) {\n if (script.parentNode) {\n script.parentNode.removeChild(script);\n }\n });\n Array.prototype.slice.call(document.getElementsByTagName('link')).filter(function filter(link) {\n return link.href === 'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Google+Sans';\n }).forEach(function forEach(link) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n });\n Array.prototype.slice.call(document.getElementsByTagName('style')).filter(function filter(style) {\n return style.innerText !== undefined && style.innerText.length > 0 && style.innerText.includes('.gm-');\n }).forEach(function forEach(style) {\n if (style.parentNode) {\n style.parentNode.removeChild(style);\n }\n });\n };\n\n _this.injectScript = function () {\n if (_this.props.preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n\n !!!_this.props.id ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'LoadScript requires \"id\" prop to be a string: %s', _this.props.id) : invariant(false) : void 0;\n var injectScriptOptions = {\n id: _this.props.id,\n nonce: _this.props.nonce,\n url: makeLoadScriptUrl(_this.props)\n };\n injectScript(injectScriptOptions).then(function () {\n if (_this.props.onLoad) {\n _this.props.onLoad();\n }\n\n _this.setState(function setLoaded() {\n return {\n loaded: true\n };\n });\n\n return;\n })[\"catch\"](function (err) {\n if (_this.props.onError) {\n _this.props.onError(err);\n }\n\n console.error(\"\\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (\" + (_this.props.googleMapsApiKey || '-') + \") or Client ID (\" + (_this.props.googleMapsClientId || '-') + \") to \\n Otherwise it is a Network issue.\\n \");\n });\n };\n\n return _this;\n }\n\n var _proto = LoadScript.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (isBrowser) {\n if (window.google && window.google.maps && !cleaningUp) {\n console.error('google api is already presented');\n return;\n }\n\n this.isCleaningUp().then(this.injectScript)[\"catch\"](function error(err) {\n console.error('Error at injecting script after cleaning up: ', err);\n });\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.props.libraries !== prevProps.libraries) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n\n if (isBrowser && prevProps.language !== this.props.language) {\n this.cleanup(); // TODO: refactor to use gDSFP maybe... wait for hooks refactoring.\n // eslint-disable-next-line react/no-did-update-set-state\n\n this.setState(function setLoaded() {\n return {\n loaded: false\n };\n }, this.cleanupCallback);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var _this2 = this;\n\n if (isBrowser) {\n this.cleanup();\n\n var timeoutCallback = function timeoutCallback() {\n if (!_this2.check.current) {\n // @ts-ignore\n delete window.google;\n cleaningUp = false;\n }\n };\n\n window.setTimeout(timeoutCallback, 1);\n\n if (this.props.onUnmount) {\n this.props.onUnmount();\n }\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null, createElement(\"div\", {\n ref: this.check\n }), this.state.loaded ? this.props.children : this.props.loadingElement || createElement(DefaultLoadingElement, null));\n };\n\n return LoadScript;\n}(PureComponent);\n\nLoadScript.defaultProps = defaultLoadScriptProps;\n/* eslint-disable filenames/match-regex */\n\nvar previouslyLoadedUrl;\n\nfunction useLoadScript(_ref) {\n var _ref$id = _ref.id,\n id = _ref$id === void 0 ? defaultLoadScriptProps.id : _ref$id,\n _ref$version = _ref.version,\n version = _ref$version === void 0 ? defaultLoadScriptProps.version : _ref$version,\n nonce = _ref.nonce,\n googleMapsApiKey = _ref.googleMapsApiKey,\n googleMapsClientId = _ref.googleMapsClientId,\n language = _ref.language,\n region = _ref.region,\n libraries = _ref.libraries,\n preventGoogleFontsLoading = _ref.preventGoogleFontsLoading,\n channel = _ref.channel,\n mapIds = _ref.mapIds;\n var isMounted = useRef(false);\n\n var _React$useState = useState(false),\n isLoaded = _React$useState[0],\n setLoaded = _React$useState[1];\n\n var _React$useState2 = useState(undefined),\n loadError = _React$useState2[0],\n setLoadError = _React$useState2[1];\n\n useEffect(function trackMountedState() {\n isMounted.current = true;\n return function () {\n isMounted.current = false;\n };\n }, []);\n useEffect(function applyPreventGoogleFonts() {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n }, [preventGoogleFontsLoading]);\n useEffect(function validateLoadedState() {\n if (isLoaded) {\n !!!window.google ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'useLoadScript was marked as loaded, but window.google is not present. Something went wrong.') : invariant(false) : void 0;\n }\n }, [isLoaded]);\n var url = makeLoadScriptUrl({\n version: version,\n googleMapsApiKey: googleMapsApiKey,\n googleMapsClientId: googleMapsClientId,\n language: language,\n region: region,\n libraries: libraries,\n channel: channel,\n mapIds: mapIds\n });\n useEffect(function loadScriptAndModifyLoadedState() {\n if (!isBrowser) {\n return;\n }\n\n function setLoadedIfMounted() {\n if (isMounted.current) {\n setLoaded(true);\n previouslyLoadedUrl = url;\n }\n }\n\n if (window.google && window.google.maps && previouslyLoadedUrl === url) {\n setLoadedIfMounted();\n return;\n }\n\n injectScript({\n id: id,\n url: url,\n nonce: nonce\n }).then(setLoadedIfMounted)[\"catch\"](function handleInjectError(err) {\n if (isMounted.current) {\n setLoadError(err);\n }\n\n console.warn(\"\\n There has been an Error with loading Google Maps API script, please check that you provided correct google API key (\" + (googleMapsApiKey || '-') + \") or Client ID (\" + (googleMapsClientId || '-') + \")\\n Otherwise it is a Network issue.\\n \");\n console.error(err);\n });\n }, [id, url, nonce]);\n var prevLibraries = useRef();\n useEffect(function checkPerformance() {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n\n prevLibraries.current = libraries;\n }, [libraries]);\n return {\n isLoaded: isLoaded,\n loadError: loadError,\n url: url\n };\n}\n\nvar defaultLoadingElement = /*#__PURE__*/createElement(DefaultLoadingElement, null);\n\nfunction LoadScriptNext(_ref) {\n var loadingElement = _ref.loadingElement,\n onLoad = _ref.onLoad,\n onError = _ref.onError,\n onUnmount = _ref.onUnmount,\n children = _ref.children,\n hookOptions = _objectWithoutPropertiesLoose(_ref, [\"loadingElement\", \"onLoad\", \"onError\", \"onUnmount\", \"children\"]);\n\n var _useLoadScript = useLoadScript(hookOptions),\n isLoaded = _useLoadScript.isLoaded,\n loadError = _useLoadScript.loadError;\n\n useEffect(function handleOnLoad() {\n if (isLoaded && typeof onLoad === 'function') {\n onLoad();\n }\n }, [isLoaded, onLoad]);\n useEffect(function handleOnError() {\n if (loadError && typeof onError === 'function') {\n onError(loadError);\n }\n }, [loadError, onError]);\n useEffect(function handleOnUnmount() {\n return function () {\n if (onUnmount) {\n onUnmount();\n }\n };\n }, [onUnmount]);\n return isLoaded ? children : loadingElement || defaultLoadingElement;\n}\n\nvar LoadScriptNext$1 = /*#__PURE__*/memo(LoadScriptNext);\n/* eslint-disable filenames/match-regex */\n\nfunction useJsApiLoader(_ref) {\n var _ref$id = _ref.id,\n id = _ref$id === void 0 ? defaultLoadScriptProps.id : _ref$id,\n _ref$version = _ref.version,\n version = _ref$version === void 0 ? defaultLoadScriptProps.version : _ref$version,\n nonce = _ref.nonce,\n googleMapsApiKey = _ref.googleMapsApiKey,\n language = _ref.language,\n region = _ref.region,\n libraries = _ref.libraries,\n preventGoogleFontsLoading = _ref.preventGoogleFontsLoading,\n mapIds = _ref.mapIds;\n\n var _React$useState = useState(false),\n isLoaded = _React$useState[0],\n setLoaded = _React$useState[1];\n\n var _React$useState2 = useState(undefined),\n loadError = _React$useState2[0],\n setLoadError = _React$useState2[1];\n\n var loader = useMemo(function memo() {\n return new Loader({\n id: id,\n apiKey: googleMapsApiKey,\n version: version,\n libraries: libraries,\n language: language,\n region: region,\n mapIds: mapIds,\n nonce: nonce\n });\n }, [id, googleMapsApiKey, version, libraries, language, region, mapIds, nonce]);\n useEffect(function effect() {\n if (isLoaded) {\n return;\n } else {\n loader.load().then(function then() {\n setLoaded(true);\n })[\"catch\"](function onrejected(error) {\n setLoadError(error);\n });\n }\n }, []);\n useEffect(function applyPreventGoogleFonts() {\n if (isBrowser && preventGoogleFontsLoading) {\n preventGoogleFonts();\n }\n }, [preventGoogleFontsLoading]);\n var prevLibraries = useRef();\n useEffect(function effect() {\n if (prevLibraries.current && libraries !== prevLibraries.current) {\n console.warn('Performance warning! LoadScript has been reloaded unintentionally! You should not pass `libraries` prop as new array. Please keep an array of libraries as static class property for Components and PureComponents, or just a const variable outside of component, or somewhere in config files or ENV variables');\n }\n\n prevLibraries.current = libraries;\n }, [libraries]);\n return {\n isLoaded: isLoaded,\n loadError: loadError\n };\n}\n\nvar eventMap$1 = {};\nvar updaterMap$1 = {\n options: function options(instance, _options) {\n instance.setOptions(_options);\n }\n};\n\nvar TrafficLayer = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(TrafficLayer, _PureComponent);\n\n function TrafficLayer() {\n var _this;\n\n _this = _PureComponent.apply(this, arguments) || this;\n _this.state = {\n trafficLayer: null\n };\n\n _this.setTrafficLayerCallback = function () {\n if (_this.state.trafficLayer !== null) {\n if (_this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.props.onLoad(_this.state.trafficLayer);\n }\n }\n };\n\n _this.registeredEvents = [];\n return _this;\n }\n\n var _proto = TrafficLayer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var trafficLayer = new google.maps.TrafficLayer(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$1,\n eventMap: eventMap$1,\n prevProps: {},\n nextProps: this.props,\n instance: trafficLayer\n });\n this.setState(function setTrafficLayer() {\n return {\n trafficLayer: trafficLayer\n };\n }, this.setTrafficLayerCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.trafficLayer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$1,\n eventMap: eventMap$1,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.trafficLayer\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.trafficLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.trafficLayer);\n }\n\n unregisterEvents(this.registeredEvents); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.state.trafficLayer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return TrafficLayer;\n}(PureComponent);\n\nTrafficLayer.contextType = MapContext;\n\nvar BicyclingLayer = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(BicyclingLayer, _React$PureComponent);\n\n function BicyclingLayer() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n bicyclingLayer: null\n };\n\n _this.setBicyclingLayerCallback = function () {\n if (_this.state.bicyclingLayer !== null) {\n // TODO: how is this possibly null if we're doing a null check\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.state.bicyclingLayer.setMap(_this.context);\n\n if (_this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.props.onLoad(_this.state.bicyclingLayer);\n }\n }\n };\n\n return _this;\n }\n\n var _proto = BicyclingLayer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var bicyclingLayer = new google.maps.BicyclingLayer();\n this.setState(function setBicyclingLayer() {\n return {\n bicyclingLayer: bicyclingLayer\n };\n }, this.setBicyclingLayerCallback);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.bicyclingLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.bicyclingLayer);\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.state.bicyclingLayer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return BicyclingLayer;\n}(PureComponent);\n\nBicyclingLayer.contextType = MapContext;\n\nvar TransitLayer = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(TransitLayer, _React$PureComponent);\n\n function TransitLayer() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n transitLayer: null\n };\n\n _this.setTransitLayerCallback = function () {\n if (_this.state.transitLayer !== null) {\n // TODO: how is this possibly null if we're doing a null check\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.state.transitLayer.setMap(_this.context);\n\n if (_this.props.onLoad) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n _this.props.onLoad(_this.state.transitLayer);\n }\n }\n };\n\n return _this;\n }\n\n var _proto = TransitLayer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var transitLayer = new google.maps.TransitLayer();\n this.setState(function setTransitLayer() {\n return {\n transitLayer: transitLayer\n };\n }, this.setTransitLayerCallback);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.transitLayer !== null) {\n if (this.props.onUnmount) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.props.onUnmount(this.state.transitLayer);\n } // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n\n this.state.transitLayer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return TransitLayer;\n}(PureComponent);\n\nTransitLayer.contextType = MapContext;\nvar eventMap$2 = {\n onCircleComplete: 'circlecomplete',\n onMarkerComplete: 'markercomplete',\n onOverlayComplete: 'overlaycomplete',\n onPolygonComplete: 'polygoncomplete',\n onPolylineComplete: 'polylinecomplete',\n onRectangleComplete: 'rectanglecomplete'\n};\nvar updaterMap$2 = {\n drawingMode: function drawingMode(instance, _drawingMode) {\n instance.setDrawingMode(_drawingMode);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n }\n};\n\nvar DrawingManager = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(DrawingManager, _React$PureComponent);\n\n function DrawingManager(props) {\n var _this;\n\n _this = _React$PureComponent.call(this, props) || this;\n _this.registeredEvents = [];\n _this.state = {\n drawingManager: null\n };\n\n _this.setDrawingManagerCallback = function () {\n if (_this.state.drawingManager !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.drawingManager);\n }\n };\n\n !!!google.maps.drawing ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Did you include prop libraries={['drawing']} in the URL? %s\", google.maps.drawing) : invariant(false) : void 0;\n return _this;\n }\n\n var _proto = DrawingManager.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var drawingManager = new google.maps.drawing.DrawingManager(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$2,\n eventMap: eventMap$2,\n prevProps: {},\n nextProps: this.props,\n instance: drawingManager\n });\n this.setState(function setDrawingManager() {\n return {\n drawingManager: drawingManager\n };\n }, this.setDrawingManagerCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.drawingManager !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$2,\n eventMap: eventMap$2,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.drawingManager\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.drawingManager !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.drawingManager);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.drawingManager.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return DrawingManager;\n}(PureComponent);\n\nDrawingManager.contextType = MapContext;\nvar eventMap$3 = {\n onAnimationChanged: 'animation_changed',\n onClick: 'click',\n onClickableChanged: 'clickable_changed',\n onCursorChanged: 'cursor_changed',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDraggableChanged: 'draggable_changed',\n onDragStart: 'dragstart',\n onFlatChanged: 'flat_changed',\n onIconChanged: 'icon_changed',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onPositionChanged: 'position_changed',\n onRightClick: 'rightclick',\n onShapeChanged: 'shape_changed',\n onTitleChanged: 'title_changed',\n onVisibleChanged: 'visible_changed',\n onZindexChanged: 'zindex_changed'\n};\nvar updaterMap$3 = {\n animation: function animation(instance, _animation) {\n instance.setAnimation(_animation);\n },\n clickable: function clickable(instance, _clickable) {\n instance.setClickable(_clickable);\n },\n cursor: function cursor(instance, _cursor) {\n instance.setCursor(_cursor);\n },\n draggable: function draggable(instance, _draggable) {\n instance.setDraggable(_draggable);\n },\n icon: function icon(instance, _icon) {\n instance.setIcon(_icon);\n },\n label: function label(instance, _label) {\n instance.setLabel(_label);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n opacity: function opacity(instance, _opacity) {\n instance.setOpacity(_opacity);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n position: function position(instance, _position) {\n instance.setPosition(_position);\n },\n shape: function shape(instance, _shape) {\n instance.setShape(_shape);\n },\n title: function title(instance, _title) {\n instance.setTitle(_title);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n },\n zIndex: function zIndex(instance, _zIndex) {\n instance.setZIndex(_zIndex);\n }\n};\n\nvar Marker = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Marker, _React$PureComponent);\n\n function Marker() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n marker: null\n };\n\n _this.setMarkerCallback = function () {\n if (_this.state.marker !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.marker);\n }\n };\n\n return _this;\n }\n\n var _proto = Marker.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var markerOptions = _extends({}, this.props.options || {}, this.props.clusterer ? {} : {\n map: this.context\n }, {\n position: this.props.position\n });\n\n var marker = new google.maps.Marker(markerOptions);\n\n if (this.props.clusterer) {\n this.props.clusterer.addMarker( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n marker, !!this.props.noClustererRedraw);\n } else {\n marker.setMap(this.context);\n }\n\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$3,\n eventMap: eventMap$3,\n prevProps: {},\n nextProps: this.props,\n instance: marker\n });\n this.setState(function setMarker() {\n return {\n marker: marker\n };\n }, this.setMarkerCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.marker !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$3,\n eventMap: eventMap$3,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.marker\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.marker !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.marker);\n }\n\n unregisterEvents(this.registeredEvents);\n\n if (this.props.clusterer) {\n this.props.clusterer.removeMarker( // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.state.marker, !!this.props.noClustererRedraw);\n } else {\n this.state.marker && this.state.marker.setMap(null);\n }\n }\n };\n\n _proto.render = function render() {\n var _this2 = this;\n\n var children = null;\n\n if (this.props.children) {\n children = Children.map(this.props.children, function (child) {\n if (!isValidElement(child)) {\n return child;\n }\n\n var elementChild = child;\n return cloneElement(elementChild, {\n anchor: _this2.state.marker\n });\n });\n }\n\n return children || null;\n };\n\n return Marker;\n}(PureComponent);\n\nMarker.contextType = MapContext;\nvar eventMap$4 = {\n onClick: 'click',\n onClusteringBegin: 'clusteringbegin',\n onClusteringEnd: 'clusteringend',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover'\n};\nvar updaterMap$4 = {\n averageCenter: function averageCenter(instance, _averageCenter) {\n instance.setAverageCenter(_averageCenter);\n },\n batchSizeIE: function batchSizeIE(instance, _batchSizeIE) {\n instance.setBatchSizeIE(_batchSizeIE);\n },\n calculator: function calculator(instance, _calculator) {\n instance.setCalculator(_calculator);\n },\n clusterClass: function clusterClass(instance, _clusterClass) {\n instance.setClusterClass(_clusterClass);\n },\n enableRetinaIcons: function enableRetinaIcons(instance, _enableRetinaIcons) {\n instance.setEnableRetinaIcons(_enableRetinaIcons);\n },\n gridSize: function gridSize(instance, _gridSize) {\n instance.setGridSize(_gridSize);\n },\n ignoreHidden: function ignoreHidden(instance, _ignoreHidden) {\n instance.setIgnoreHidden(_ignoreHidden);\n },\n imageExtension: function imageExtension(instance, _imageExtension) {\n instance.setImageExtension(_imageExtension);\n },\n imagePath: function imagePath(instance, _imagePath) {\n instance.setImagePath(_imagePath);\n },\n imageSizes: function imageSizes(instance, _imageSizes) {\n instance.setImageSizes(_imageSizes);\n },\n maxZoom: function maxZoom(instance, _maxZoom) {\n instance.setMaxZoom(_maxZoom);\n },\n minimumClusterSize: function minimumClusterSize(instance, _minimumClusterSize) {\n instance.setMinimumClusterSize(_minimumClusterSize);\n },\n styles: function styles(instance, _styles) {\n instance.setStyles(_styles);\n },\n title: function title(instance, _title) {\n instance.setTitle(_title);\n },\n zoomOnClick: function zoomOnClick(instance, _zoomOnClick) {\n instance.setZoomOnClick(_zoomOnClick);\n }\n};\n\nvar ClustererComponent = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(ClustererComponent, _React$PureComponent);\n\n function ClustererComponent() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n markerClusterer: null\n };\n\n _this.setClustererCallback = function () {\n if (_this.state.markerClusterer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.markerClusterer);\n }\n };\n\n return _this;\n }\n\n var _proto = ClustererComponent.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.context) {\n var markerClusterer = new Clusterer(this.context, [], this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$4,\n eventMap: eventMap$4,\n prevProps: {},\n nextProps: this.props,\n instance: markerClusterer\n });\n this.setState(function setClusterer() {\n return {\n markerClusterer: markerClusterer\n };\n }, this.setClustererCallback);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.markerClusterer) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$4,\n eventMap: eventMap$4,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.markerClusterer\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.markerClusterer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.markerClusterer);\n }\n\n unregisterEvents(this.registeredEvents); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n this.state.markerClusterer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return this.state.markerClusterer !== null ? this.props.children(this.state.markerClusterer) : null;\n };\n\n return ClustererComponent;\n}(PureComponent);\n\nClustererComponent.contextType = MapContext;\nvar eventMap$5 = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed'\n};\nvar updaterMap$5 = {\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n position: function position(instance, _position) {\n if (_position instanceof google.maps.LatLng) {\n instance.setPosition(_position);\n } else {\n instance.setPosition(new google.maps.LatLng(_position.lat, _position.lng));\n }\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n },\n zIndex: function zIndex(instance, _zIndex) {\n instance.setZIndex(_zIndex);\n }\n};\n\nvar InfoBoxComponent = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(InfoBoxComponent, _React$PureComponent);\n\n function InfoBoxComponent() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = null;\n _this.state = {\n infoBox: null\n };\n\n _this.open = function (infoBox, anchor) {\n if (anchor) {\n infoBox.open(_this.context, anchor);\n } else if (infoBox.getPosition()) {\n infoBox.open(_this.context);\n } else {\n process.env.NODE_ENV !== \"production\" ? invariant(false, 'You must provide either an anchor or a position prop for .') : invariant(false);\n }\n };\n\n _this.setInfoBoxCallback = function () {\n var _this$props = _this.props,\n anchor = _this$props.anchor,\n onLoad = _this$props.onLoad;\n var infoBox = _this.state.infoBox;\n\n if (infoBox !== null && _this.containerElement !== null) {\n infoBox.setContent(_this.containerElement);\n\n _this.open(infoBox, anchor);\n\n if (onLoad) {\n onLoad(infoBox);\n }\n }\n };\n\n return _this;\n }\n\n var _proto = InfoBoxComponent.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var options = this.props.options;\n\n var _ref = options || {},\n position = _ref.position,\n infoBoxOptions = _objectWithoutPropertiesLoose(_ref, [\"position\"]);\n\n var positionLatLng;\n\n if (position && !(position instanceof google.maps.LatLng)) {\n positionLatLng = new google.maps.LatLng(position.lat, position.lng);\n }\n\n var infoBox = new InfoBox(_extends({}, infoBoxOptions, positionLatLng ? {\n position: positionLatLng\n } : {}));\n this.containerElement = document.createElement('div');\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$5,\n eventMap: eventMap$5,\n prevProps: {},\n nextProps: this.props,\n instance: infoBox\n });\n this.setState({\n infoBox: infoBox\n }, this.setInfoBoxCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var infoBox = this.state.infoBox;\n\n if (infoBox !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$5,\n eventMap: eventMap$5,\n prevProps: prevProps,\n nextProps: this.props,\n instance: infoBox\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var onUnmount = this.props.onUnmount;\n var infoBox = this.state.infoBox;\n\n if (infoBox !== null) {\n if (onUnmount) {\n onUnmount(infoBox);\n }\n\n unregisterEvents(this.registeredEvents);\n infoBox.close();\n }\n };\n\n _proto.render = function render() {\n if (!this.containerElement) {\n return null;\n }\n\n return createPortal(Children.only(this.props.children), this.containerElement);\n };\n\n return InfoBoxComponent;\n}(PureComponent);\n\nInfoBoxComponent.contextType = MapContext;\nvar eventMap$6 = {\n onCloseClick: 'closeclick',\n onContentChanged: 'content_changed',\n onDomReady: 'domready',\n onPositionChanged: 'position_changed',\n onZindexChanged: 'zindex_changed'\n};\nvar updaterMap$6 = {\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n position: function position(instance, _position) {\n instance.setPosition(_position);\n },\n zIndex: function zIndex(instance, _zIndex) {\n instance.setZIndex(_zIndex);\n }\n};\n\nvar InfoWindow = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(InfoWindow, _React$PureComponent);\n\n function InfoWindow() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = null;\n _this.state = {\n infoWindow: null\n };\n\n _this.open = function (infoWindow, anchor) {\n if (anchor) {\n infoWindow.open(_this.context, anchor);\n } else if (infoWindow.getPosition()) {\n infoWindow.open(_this.context);\n } else {\n process.env.NODE_ENV !== \"production\" ? invariant(false, \"You must provide either an anchor (typically render it inside a ) or a position props for .\") : invariant(false);\n }\n };\n\n _this.setInfoWindowCallback = function () {\n if (_this.state.infoWindow !== null && _this.containerElement !== null) {\n _this.state.infoWindow.setContent(_this.containerElement);\n\n _this.open(_this.state.infoWindow, _this.props.anchor);\n\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.infoWindow);\n }\n }\n };\n\n return _this;\n }\n\n var _proto = InfoWindow.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var infoWindow = new google.maps.InfoWindow(_extends({}, this.props.options || {}));\n this.containerElement = document.createElement('div');\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$6,\n eventMap: eventMap$6,\n prevProps: {},\n nextProps: this.props,\n instance: infoWindow\n });\n this.setState(function setInfoWindow() {\n return {\n infoWindow: infoWindow\n };\n }, this.setInfoWindowCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$6,\n eventMap: eventMap$6,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.infoWindow\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.infoWindow !== null) {\n unregisterEvents(this.registeredEvents);\n this.state.infoWindow.close();\n }\n };\n\n _proto.render = function render() {\n return this.containerElement ? createPortal(Children.only(this.props.children), this.containerElement) : createElement(Fragment, null);\n };\n\n return InfoWindow;\n}(PureComponent);\n\nInfoWindow.contextType = MapContext;\nvar eventMap$7 = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick'\n};\nvar updaterMap$7 = {\n draggable: function draggable(instance, _draggable) {\n instance.setDraggable(_draggable);\n },\n editable: function editable(instance, _editable) {\n instance.setEditable(_editable);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n path: function path(instance, _path) {\n instance.setPath(_path);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n }\n};\n\nvar Polyline = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Polyline, _React$PureComponent);\n\n function Polyline() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n polyline: null\n };\n\n _this.setPolylineCallback = function () {\n if (_this.state.polyline !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.polyline);\n }\n };\n\n return _this;\n }\n\n var _proto = Polyline.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var polyline = new google.maps.Polyline(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$7,\n eventMap: eventMap$7,\n prevProps: {},\n nextProps: this.props,\n instance: polyline\n });\n this.setState(function setPolyline() {\n return {\n polyline: polyline\n };\n }, this.setPolylineCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.polyline !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$7,\n eventMap: eventMap$7,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.polyline\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.polyline !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polyline);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.polyline.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return Polyline;\n}(PureComponent);\n\nPolyline.contextType = MapContext;\nvar eventMap$8 = {\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick'\n};\nvar updaterMap$8 = {\n draggable: function draggable(instance, _draggable) {\n instance.setDraggable(_draggable);\n },\n editable: function editable(instance, _editable) {\n instance.setEditable(_editable);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n path: function path(instance, _path) {\n instance.setPath(_path);\n },\n paths: function paths(instance, _paths) {\n instance.setPaths(_paths);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n }\n};\n\nvar Polygon = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Polygon, _React$PureComponent);\n\n function Polygon() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n polygon: null\n };\n\n _this.setPolygonCallback = function () {\n if (_this.state.polygon !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.polygon);\n }\n };\n\n return _this;\n }\n\n var _proto = Polygon.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var polygon = new google.maps.Polygon(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$8,\n eventMap: eventMap$8,\n prevProps: {},\n nextProps: this.props,\n instance: polygon\n });\n this.setState(function setPolygon() {\n return {\n polygon: polygon\n };\n }, this.setPolygonCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.polygon !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$8,\n eventMap: eventMap$8,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.polygon\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.polygon !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.polygon);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.polygon && this.state.polygon.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return Polygon;\n}(PureComponent);\n\nPolygon.contextType = MapContext;\nvar eventMap$9 = {\n onBoundsChanged: 'bounds_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRightClick: 'rightclick'\n};\nvar updaterMap$9 = {\n bounds: function bounds(instance, _bounds) {\n instance.setBounds(_bounds);\n },\n draggable: function draggable(instance, _draggable) {\n instance.setDraggable(_draggable);\n },\n editable: function editable(instance, _editable) {\n instance.setEditable(_editable);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n }\n};\n\nvar Rectangle = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Rectangle, _React$PureComponent);\n\n function Rectangle() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n rectangle: null\n };\n\n _this.setRectangleCallback = function () {\n if (_this.state.rectangle !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.rectangle);\n }\n };\n\n return _this;\n }\n\n var _proto = Rectangle.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var rectangle = new google.maps.Rectangle(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$9,\n eventMap: eventMap$9,\n prevProps: {},\n nextProps: this.props,\n instance: rectangle\n });\n this.setState(function setRectangle() {\n return {\n rectangle: rectangle\n };\n }, this.setRectangleCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.rectangle !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$9,\n eventMap: eventMap$9,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.rectangle\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.rectangle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.rectangle);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.rectangle.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return Rectangle;\n}(PureComponent);\n\nRectangle.contextType = MapContext;\nvar eventMap$a = {\n onCenterChanged: 'center_changed',\n onClick: 'click',\n onDblClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragStart: 'dragstart',\n onMouseDown: 'mousedown',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRadiusChanged: 'radius_changed',\n onRightClick: 'rightclick'\n};\nvar updaterMap$a = {\n center: function center(instance, _center) {\n instance.setCenter(_center);\n },\n draggable: function draggable(instance, _draggable) {\n instance.setDraggable(_draggable);\n },\n editable: function editable(instance, _editable) {\n instance.setEditable(_editable);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n radius: function radius(instance, _radius) {\n instance.setRadius(_radius);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n }\n};\n\nvar Circle = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Circle, _React$PureComponent);\n\n function Circle() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n circle: null\n };\n\n _this.setCircleCallback = function () {\n if (_this.state.circle !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.circle);\n }\n };\n\n return _this;\n }\n\n var _proto = Circle.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var circle = new google.maps.Circle(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$a,\n eventMap: eventMap$a,\n prevProps: {},\n nextProps: this.props,\n instance: circle\n });\n this.setState(function setCircle() {\n return {\n circle: circle\n };\n }, this.setCircleCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.circle !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$a,\n eventMap: eventMap$a,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.circle\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.circle !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.circle);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.circle && this.state.circle.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return Circle;\n}(PureComponent);\n\nCircle.contextType = MapContext;\nvar eventMap$b = {\n onAddFeature: 'addfeature',\n onClick: 'click',\n onDblClick: 'dblclick',\n onMouseDown: 'mousedown',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onRemoveFeature: 'removefeature',\n onRemoveProperty: 'removeproperty',\n onRightClick: 'rightclick',\n onSetGeometry: 'setgeometry',\n onSetProperty: 'setproperty'\n};\nvar updaterMap$b = {\n add: function add(instance, features) {\n instance.add(features);\n },\n addgeojson: function addgeojson(instance, geojson, options) {\n instance.addGeoJson(geojson, options);\n },\n contains: function contains(instance, feature) {\n instance.contains(feature);\n },\n foreach: function foreach(instance, callback) {\n instance.forEach(callback);\n },\n loadgeojson: function loadgeojson(instance, url, options, callback) {\n instance.loadGeoJson(url, options, callback);\n },\n overridestyle: function overridestyle(instance, feature, style) {\n instance.overrideStyle(feature, style);\n },\n remove: function remove(instance, feature) {\n instance.remove(feature);\n },\n revertstyle: function revertstyle(instance, feature) {\n instance.revertStyle(feature);\n },\n controlposition: function controlposition(instance, controlPosition) {\n instance.setControlPosition(controlPosition);\n },\n controls: function controls(instance, _controls) {\n instance.setControls(_controls);\n },\n drawingmode: function drawingmode(instance, mode) {\n instance.setDrawingMode(mode);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n style: function style(instance, _style) {\n instance.setStyle(_style);\n },\n togeojson: function togeojson(instance, callback) {\n instance.toGeoJson(callback);\n }\n};\n\nvar Data = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Data, _React$PureComponent);\n\n function Data() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n data: null\n };\n\n _this.setDataCallback = function () {\n if (_this.state.data !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.data);\n }\n };\n\n return _this;\n }\n\n var _proto = Data.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var data = new google.maps.Data(_extends({}, this.props.options || {}, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$b,\n eventMap: eventMap$b,\n prevProps: {},\n nextProps: this.props,\n instance: data\n });\n this.setState(function setData() {\n return {\n data: data\n };\n }, this.setDataCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.data !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$b,\n eventMap: eventMap$b,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.data\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.data !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.data);\n }\n\n unregisterEvents(this.registeredEvents);\n\n if (this.state.data) {\n this.state.data.setMap(null);\n }\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return Data;\n}(PureComponent);\n\nData.contextType = MapContext;\nvar eventMap$c = {\n onClick: 'click',\n onDefaultViewportChanged: 'defaultviewport_changed',\n onStatusChanged: 'status_changed'\n};\nvar updaterMap$c = {\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n url: function url(instance, _url) {\n instance.setUrl(_url);\n },\n zIndex: function zIndex(instance, _zIndex) {\n instance.setZIndex(_zIndex);\n }\n};\n\nvar KmlLayer = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(KmlLayer, _PureComponent);\n\n function KmlLayer() {\n var _this;\n\n _this = _PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n kmlLayer: null\n };\n\n _this.setKmlLayerCallback = function () {\n if (_this.state.kmlLayer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.kmlLayer);\n }\n };\n\n return _this;\n }\n\n var _proto = KmlLayer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var kmlLayer = new google.maps.KmlLayer(_extends({}, this.props.options, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$c,\n eventMap: eventMap$c,\n prevProps: {},\n nextProps: this.props,\n instance: kmlLayer\n });\n this.setState(function setLmlLayer() {\n return {\n kmlLayer: kmlLayer\n };\n }, this.setKmlLayerCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.kmlLayer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$c,\n eventMap: eventMap$c,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.kmlLayer\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.kmlLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.kmlLayer);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.kmlLayer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return KmlLayer;\n}(PureComponent);\n\nKmlLayer.contextType = MapContext;\n/* eslint-disable filenames/match-regex */\n\nfunction getOffsetOverride(containerElement, getPixelPositionOffset) {\n return typeof getPixelPositionOffset === 'function' ? getPixelPositionOffset(containerElement.offsetWidth, containerElement.offsetHeight) : {};\n} // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nvar createLatLng = function createLatLng(inst, Type) {\n return new Type(inst.lat, inst.lng);\n}; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nvar createLatLngBounds = function createLatLngBounds(inst, Type) {\n return new Type(new google.maps.LatLng(inst.ne.lat, inst.ne.lng), new google.maps.LatLng(inst.sw.lat, inst.sw.lng));\n}; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nvar ensureOfType = function ensureOfType(inst, type, factory) {\n return inst instanceof type ? inst : factory(inst, type);\n};\n\nvar getLayoutStylesByBounds = function getLayoutStylesByBounds(mapCanvasProjection, offset, bounds) {\n var ne = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getNorthEast());\n var sw = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(bounds.getSouthWest());\n\n if (ne && sw) {\n return {\n left: sw.x + offset.x + \"px\",\n top: ne.y + offset.y + \"px\",\n width: ne.x - sw.x - offset.x + \"px\",\n height: sw.y - ne.y - offset.y + \"px\"\n };\n }\n\n return {\n left: '-9999px',\n top: '-9999px'\n };\n};\n\nvar getLayoutStylesByPosition = function getLayoutStylesByPosition(mapCanvasProjection, offset, position) {\n var point = mapCanvasProjection && mapCanvasProjection.fromLatLngToDivPixel(position);\n\n if (point) {\n var x = point.x,\n y = point.y;\n return {\n left: x + offset.x + \"px\",\n top: y + offset.y + \"px\"\n };\n }\n\n return {\n left: '-9999px',\n top: '-9999px'\n };\n};\n\nvar getLayoutStyles = function getLayoutStyles(mapCanvasProjection, offset, bounds, position) {\n return bounds !== undefined ? getLayoutStylesByBounds(mapCanvasProjection, offset, ensureOfType(bounds, google.maps.LatLngBounds, createLatLngBounds)) : getLayoutStylesByPosition(mapCanvasProjection, offset, ensureOfType(position, google.maps.LatLng, createLatLng));\n};\n\nvar arePositionsEqual = function arePositionsEqual(currentPosition, previousPosition) {\n return currentPosition.left === previousPosition.left && currentPosition.top === previousPosition.top && currentPosition.width === previousPosition.height && currentPosition.height === previousPosition.height;\n};\n\nfunction convertToLatLngString(latLngLike) {\n if (!latLngLike) {\n return '';\n }\n\n var latLng = latLngLike instanceof google.maps.LatLng ? latLngLike : new google.maps.LatLng(latLngLike.lat, latLngLike.lng);\n return latLng + '';\n}\n\nfunction convertToLatLngBoundsString(latLngBoundsLike) {\n if (!latLngBoundsLike) {\n return '';\n }\n\n var latLngBounds = latLngBoundsLike instanceof google.maps.LatLngBounds ? latLngBoundsLike : new google.maps.LatLngBounds(new google.maps.LatLng(latLngBoundsLike.south, latLngBoundsLike.east), new google.maps.LatLng(latLngBoundsLike.north, latLngBoundsLike.west));\n return latLngBounds + '';\n}\n\nvar OverlayView = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(OverlayView, _React$PureComponent);\n\n function OverlayView(props) {\n var _this;\n\n _this = _React$PureComponent.call(this, props) || this;\n _this.state = {\n paneEl: null,\n containerStyle: {\n // set initial position\n position: 'absolute'\n }\n };\n\n _this.updatePane = function () {\n var mapPaneName = _this.props.mapPaneName; // https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes\n\n var mapPanes = _this.overlayView.getPanes();\n\n !!!mapPaneName ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"OverlayView requires props.mapPaneName but got %s\", mapPaneName) : invariant(false) : void 0;\n\n if (mapPanes) {\n _this.setState({\n paneEl: mapPanes[mapPaneName]\n });\n } else {\n _this.setState({\n paneEl: null\n });\n }\n };\n\n _this.onAdd = function () {\n _this.updatePane();\n\n _this.props.onLoad == null ? void 0 : _this.props.onLoad(_this.overlayView);\n };\n\n _this.onPositionElement = function () {\n var mapCanvasProjection = _this.overlayView.getProjection();\n\n var offset = _extends({\n x: 0,\n y: 0\n }, _this.containerRef.current ? getOffsetOverride(_this.containerRef.current, _this.props.getPixelPositionOffset) : {});\n\n var layoutStyles = getLayoutStyles(mapCanvasProjection, offset, _this.props.bounds, _this.props.position);\n var _this$state$container = _this.state.containerStyle,\n left = _this$state$container.left,\n top = _this$state$container.top,\n width = _this$state$container.width,\n height = _this$state$container.height;\n\n if (!arePositionsEqual(layoutStyles, {\n left: left,\n top: top,\n width: width,\n height: height\n })) {\n _this.setState({\n containerStyle: _extends({}, layoutStyles, {\n position: 'absolute'\n })\n });\n }\n };\n\n _this.draw = function () {\n _this.onPositionElement();\n };\n\n _this.onRemove = function () {\n _this.setState(function () {\n return {\n paneEl: null\n };\n }); // this.mapPaneEl = null\n\n\n _this.props.onUnmount == null ? void 0 : _this.props.onUnmount(_this.overlayView);\n };\n\n _this.containerRef = createRef(); // You must implement three methods: onAdd(), draw(), and onRemove().\n\n var overlayView = new google.maps.OverlayView();\n overlayView.onAdd = _this.onAdd;\n overlayView.draw = _this.draw;\n overlayView.onRemove = _this.onRemove;\n _this.overlayView = overlayView;\n return _this;\n }\n\n var _proto = OverlayView.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n // You must call setMap() with a valid Map object to trigger the call to\n // the onAdd() method and setMap(null) in order to trigger the onRemove() method.\n this.overlayView.setMap(this.context);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var prevPositionString = convertToLatLngString(prevProps.position);\n var positionString = convertToLatLngString(this.props.position);\n var prevBoundsString = convertToLatLngBoundsString(prevProps.bounds);\n var boundsString = convertToLatLngBoundsString(this.props.bounds);\n\n if (prevPositionString !== positionString || prevBoundsString !== boundsString) {\n this.overlayView.draw();\n }\n\n if (prevProps.mapPaneName !== this.props.mapPaneName) {\n this.updatePane();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.overlayView.setMap(null);\n };\n\n _proto.render = function render() {\n var paneEl = this.state.paneEl;\n\n if (paneEl) {\n return createPortal(createElement(\"div\", {\n ref: this.containerRef,\n style: this.state.containerStyle\n }, Children.only(this.props.children)), paneEl);\n } else {\n return null;\n }\n };\n\n return OverlayView;\n}(PureComponent);\n\nOverlayView.FLOAT_PANE = \"floatPane\";\nOverlayView.MAP_PANE = \"mapPane\";\nOverlayView.MARKER_LAYER = \"markerLayer\";\nOverlayView.OVERLAY_LAYER = \"overlayLayer\";\nOverlayView.OVERLAY_MOUSE_TARGET = \"overlayMouseTarget\";\nOverlayView.contextType = MapContext;\n\nfunction noop() {}\n\nvar eventMap$d = {\n onDblClick: 'dblclick',\n onClick: 'click'\n};\nvar updaterMap$d = {\n opacity: function opacity(instance, _opacity) {\n instance.setOpacity(_opacity);\n }\n};\n\nvar GroundOverlay = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(GroundOverlay, _React$PureComponent);\n\n function GroundOverlay() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n groundOverlay: null\n };\n\n _this.setGroundOverlayCallback = function () {\n if (_this.state.groundOverlay !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.groundOverlay);\n }\n };\n\n return _this;\n }\n\n var _proto = GroundOverlay.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !(!!this.props.url || !!this.props.bounds) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"For GroundOverlay, url and bounds are passed in to constructor and are immutable after instantiated. This is the behavior of Google Maps JavaScript API v3 ( See https://developers.google.com/maps/documentation/javascript/reference#GroundOverlay) Hence, use the corresponding two props provided by `react-google-maps-api`, url and bounds. In some cases, you'll need the GroundOverlay component to reflect the changes of url and bounds. You can leverage the React's key property to remount the component. Typically, just `key={url}` would serve your need. See https://github.com/tomchentw/react-google-maps/issues/655\") : invariant(false) : void 0;\n var groundOverlay = new google.maps.GroundOverlay(this.props.url, this.props.bounds, _extends({}, this.props.options, {\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$d,\n eventMap: eventMap$d,\n prevProps: {},\n nextProps: this.props,\n instance: groundOverlay\n });\n this.setState(function setGroundOverlay() {\n return {\n groundOverlay: groundOverlay\n };\n }, this.setGroundOverlayCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.groundOverlay !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$d,\n eventMap: eventMap$d,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.groundOverlay\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.groundOverlay) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.groundOverlay);\n }\n\n this.state.groundOverlay.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return GroundOverlay;\n}(PureComponent);\n\nGroundOverlay.defaultProps = {\n onLoad: noop\n};\nGroundOverlay.contextType = MapContext;\nvar eventMap$e = {};\nvar updaterMap$e = {\n data: function data(instance, _data) {\n instance.setData(_data);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n }\n};\n\nvar HeatmapLayer = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(HeatmapLayer, _React$PureComponent);\n\n function HeatmapLayer() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n heatmapLayer: null\n };\n\n _this.setHeatmapLayerCallback = function () {\n if (_this.state.heatmapLayer !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.heatmapLayer);\n }\n };\n\n return _this;\n }\n\n var _proto = HeatmapLayer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !!!google.maps.visualization ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Did you include prop libraries={[\"visualization\"]} to ? %s', google.maps.visualization) : invariant(false) : void 0;\n !!!this.props.data ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'data property is required in HeatmapLayer %s', this.props.data) : invariant(false) : void 0;\n var heatmapLayer = new google.maps.visualization.HeatmapLayer(_extends({}, this.props.options || {}, {\n data: this.props.data,\n map: this.context\n }));\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$e,\n eventMap: eventMap$e,\n prevProps: {},\n nextProps: this.props,\n instance: heatmapLayer\n });\n this.setState(function setHeatmapLayer() {\n return {\n heatmapLayer: heatmapLayer\n };\n }, this.setHeatmapLayerCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$e,\n eventMap: eventMap$e,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.heatmapLayer\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.heatmapLayer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.heatmapLayer);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.heatmapLayer.setMap(null);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return HeatmapLayer;\n}(PureComponent);\n\nHeatmapLayer.contextType = MapContext;\nvar eventMap$f = {\n onCloseClick: 'closeclick',\n onPanoChanged: 'pano_changed',\n onPositionChanged: 'position_changed',\n onPovChanged: 'pov_changed',\n onResize: 'resize',\n onStatusChanged: 'status_changed',\n onVisibleChanged: 'visible_changed',\n onZoomChanged: 'zoom_changed'\n};\nvar updaterMap$f = {\n register: function register(instance, provider, options) {\n instance.registerPanoProvider(provider, options);\n },\n links: function links(instance, _links) {\n instance.setLinks(_links);\n },\n motionTracking: function motionTracking(instance, _motionTracking) {\n instance.setMotionTracking(_motionTracking);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n pano: function pano(instance, _pano) {\n instance.setPano(_pano);\n },\n position: function position(instance, _position) {\n instance.setPosition(_position);\n },\n pov: function pov(instance, _pov) {\n instance.setPov(_pov);\n },\n visible: function visible(instance, _visible) {\n instance.setVisible(_visible);\n },\n zoom: function zoom(instance, _zoom) {\n instance.setZoom(_zoom);\n }\n};\n\nvar StreetViewPanorama = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(StreetViewPanorama, _React$PureComponent);\n\n function StreetViewPanorama() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n streetViewPanorama: null\n };\n\n _this.setStreetViewPanoramaCallback = function () {\n if (_this.state.streetViewPanorama !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.streetViewPanorama);\n }\n };\n\n return _this;\n }\n\n var _proto = StreetViewPanorama.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var streetViewPanorama = this.context.getStreetView();\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$f,\n eventMap: eventMap$f,\n prevProps: {},\n nextProps: this.props,\n instance: streetViewPanorama\n });\n this.setState(function setStreetViewPanorama() {\n return {\n streetViewPanorama: streetViewPanorama\n };\n }, this.setStreetViewPanoramaCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.streetViewPanorama !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$f,\n eventMap: eventMap$f,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.streetViewPanorama\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.streetViewPanorama !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewPanorama);\n }\n\n unregisterEvents(this.registeredEvents);\n this.state.streetViewPanorama.setVisible(false);\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return StreetViewPanorama;\n}(PureComponent);\n\nStreetViewPanorama.contextType = MapContext;\n\nvar StreetViewService = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(StreetViewService, _React$PureComponent);\n\n function StreetViewService() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n streetViewService: null\n };\n\n _this.setStreetViewServiceCallback = function () {\n if (_this.state.streetViewService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.streetViewService);\n }\n };\n\n return _this;\n }\n\n var _proto = StreetViewService.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var streetViewService = new google.maps.StreetViewService();\n this.setState(function setStreetViewService() {\n return {\n streetViewService: streetViewService\n };\n }, this.setStreetViewServiceCallback);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.streetViewService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.streetViewService);\n }\n }\n };\n\n _proto.render = function render() {\n return null;\n };\n\n return StreetViewService;\n}(PureComponent);\n\nStreetViewService.contextType = MapContext;\n\nvar DirectionsService = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(DirectionsService, _React$PureComponent);\n\n function DirectionsService() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n directionsService: null\n };\n\n _this.setDirectionsServiceCallback = function () {\n if (_this.state.directionsService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.directionsService);\n }\n };\n\n return _this;\n }\n\n var _proto = DirectionsService.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !!!this.props.options ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'DirectionsService expected options object as parameter, but got %s', this.props.options) : invariant(false) : void 0;\n var directionsService = new google.maps.DirectionsService();\n this.setState(function setDirectionsService() {\n return {\n directionsService: directionsService\n };\n }, this.setDirectionsServiceCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n if (this.state.directionsService !== null) {\n this.state.directionsService.route(this.props.options, this.props.callback);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.directionsService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsService);\n }\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return DirectionsService;\n}(PureComponent);\n\nvar eventMap$g = {\n onDirectionsChanged: 'directions_changed'\n};\nvar updaterMap$g = {\n directions: function directions(instance, _directions) {\n instance.setDirections(_directions);\n },\n map: function map(instance, _map) {\n instance.setMap(_map);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n panel: function panel(instance, _panel) {\n instance.setPanel(_panel);\n },\n routeIndex: function routeIndex(instance, _routeIndex) {\n instance.setRouteIndex(_routeIndex);\n }\n};\n\nvar DirectionsRenderer = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(DirectionsRenderer, _React$PureComponent);\n\n function DirectionsRenderer() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.state = {\n directionsRenderer: null\n };\n\n _this.setDirectionsRendererCallback = function () {\n if (_this.state.directionsRenderer !== null) {\n _this.state.directionsRenderer.setMap(_this.context);\n\n if (_this.props.onLoad) {\n _this.props.onLoad(_this.state.directionsRenderer);\n }\n }\n };\n\n return _this;\n }\n\n var _proto = DirectionsRenderer.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var directionsRenderer = new google.maps.DirectionsRenderer(this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$g,\n eventMap: eventMap$g,\n prevProps: {},\n nextProps: this.props,\n instance: directionsRenderer\n });\n this.setState(function setDirectionsRenderer() {\n return {\n directionsRenderer: directionsRenderer\n };\n }, this.setDirectionsRendererCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.directionsRenderer !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$g,\n eventMap: eventMap$g,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.directionsRenderer\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.directionsRenderer !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.directionsRenderer);\n }\n\n unregisterEvents(this.registeredEvents);\n\n if (this.state.directionsRenderer) {\n this.state.directionsRenderer.setMap(null);\n }\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return DirectionsRenderer;\n}(PureComponent);\n\nDirectionsRenderer.contextType = MapContext;\n\nvar DistanceMatrixService = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(DistanceMatrixService, _React$PureComponent);\n\n function DistanceMatrixService() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.state = {\n distanceMatrixService: null\n };\n\n _this.setDistanceMatrixServiceCallback = function () {\n if (_this.state.distanceMatrixService !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.distanceMatrixService);\n }\n };\n\n return _this;\n }\n\n var _proto = DistanceMatrixService.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !!!this.props.options ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'DistanceMatrixService expected options object as parameter, but go %s', this.props.options) : invariant(false) : void 0;\n var distanceMatrixService = new google.maps.DistanceMatrixService();\n this.setState(function setDistanceMatrixService() {\n return {\n distanceMatrixService: distanceMatrixService\n };\n }, this.setDistanceMatrixServiceCallback);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n if (this.state.distanceMatrixService !== null) {\n this.state.distanceMatrixService.getDistanceMatrix(this.props.options, this.props.callback);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.distanceMatrixService !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.distanceMatrixService);\n }\n }\n };\n\n _proto.render = function render() {\n return createElement(Fragment, null);\n };\n\n return DistanceMatrixService;\n}(PureComponent);\n\nvar eventMap$h = {\n onPlacesChanged: 'places_changed'\n};\nvar updaterMap$h = {\n bounds: function bounds(instance, _bounds) {\n instance.setBounds(_bounds);\n }\n};\n\nvar StandaloneSearchBox = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(StandaloneSearchBox, _React$PureComponent);\n\n function StandaloneSearchBox() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = createRef();\n _this.state = {\n searchBox: null\n };\n\n _this.setSearchBoxCallback = function () {\n if (_this.state.searchBox !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.searchBox);\n }\n };\n\n return _this;\n }\n\n var _proto = StandaloneSearchBox.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !!!google.maps.places ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You need to provide libraries={[\"places\"]} prop to component %s', google.maps.places) : invariant(false) : void 0;\n\n if (this.containerElement !== null && this.containerElement.current !== null) {\n var input = this.containerElement.current.querySelector('input');\n\n if (input !== null) {\n var searchBox = new google.maps.places.SearchBox(input, this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$h,\n eventMap: eventMap$h,\n prevProps: {},\n nextProps: this.props,\n instance: searchBox\n });\n this.setState(function setSearchBox() {\n return {\n searchBox: searchBox\n };\n }, this.setSearchBoxCallback);\n }\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (this.state.searchBox !== null) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$h,\n eventMap: eventMap$h,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.searchBox\n });\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.searchBox !== null) {\n if (this.props.onUnmount) {\n this.props.onUnmount(this.state.searchBox);\n }\n\n unregisterEvents(this.registeredEvents);\n }\n };\n\n _proto.render = function render() {\n return createElement(\"div\", {\n ref: this.containerElement\n }, Children.only(this.props.children));\n };\n\n return StandaloneSearchBox;\n}(PureComponent);\n\nStandaloneSearchBox.contextType = MapContext;\nvar eventMap$i = {\n onPlaceChanged: 'place_changed'\n};\nvar updaterMap$i = {\n bounds: function bounds(instance, _bounds) {\n instance.setBounds(_bounds);\n },\n restrictions: function restrictions(instance, _restrictions) {\n instance.setComponentRestrictions(_restrictions);\n },\n fields: function fields(instance, _fields) {\n instance.setFields(_fields);\n },\n options: function options(instance, _options) {\n instance.setOptions(_options);\n },\n types: function types(instance, _types) {\n instance.setTypes(_types);\n }\n};\n\nvar Autocomplete = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(Autocomplete, _React$PureComponent);\n\n function Autocomplete() {\n var _this;\n\n _this = _React$PureComponent.apply(this, arguments) || this;\n _this.registeredEvents = [];\n _this.containerElement = createRef();\n _this.state = {\n autocomplete: null\n };\n\n _this.setAutocompleteCallback = function () {\n if (_this.state.autocomplete !== null && _this.props.onLoad) {\n _this.props.onLoad(_this.state.autocomplete);\n }\n };\n\n return _this;\n }\n\n var _proto = Autocomplete.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n !!!google.maps.places ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'You need to provide libraries={[\"places\"]} prop to component %s', google.maps.places) : invariant(false) : void 0; // TODO: why current could be equal null?\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n\n var input = this.containerElement.current.querySelector('input');\n\n if (input) {\n var autocomplete = new google.maps.places.Autocomplete(input, this.props.options);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$i,\n eventMap: eventMap$i,\n prevProps: {},\n nextProps: this.props,\n instance: autocomplete\n });\n this.setState(function setAutocomplete() {\n return {\n autocomplete: autocomplete\n };\n }, this.setAutocompleteCallback);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n unregisterEvents(this.registeredEvents);\n this.registeredEvents = applyUpdatersToPropsAndRegisterEvents({\n updaterMap: updaterMap$i,\n eventMap: eventMap$i,\n prevProps: prevProps,\n nextProps: this.props,\n instance: this.state.autocomplete\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.state.autocomplete !== null) {\n unregisterEvents(this.registeredEvents);\n }\n };\n\n _proto.render = function render() {\n return createElement(\"div\", {\n ref: this.containerElement,\n className: this.props.className || ''\n }, Children.only(this.props.children));\n };\n\n return Autocomplete;\n}(PureComponent);\n\nAutocomplete.contextType = MapContext;\nexport { Autocomplete, BicyclingLayer, Circle, Data, DirectionsRenderer, DirectionsService, DistanceMatrixService, DrawingManager, GoogleMap, GroundOverlay, HeatmapLayer, InfoBoxComponent as InfoBox, InfoWindow, KmlLayer, LoadScript, LoadScriptNext$1 as LoadScriptNext, MapContext, Marker, ClustererComponent as MarkerClusterer, OverlayView, Polygon, Polyline, Rectangle, StandaloneSearchBox, StreetViewPanorama, StreetViewService, TrafficLayer, TransitLayer, useGoogleMap, useJsApiLoader, useLoadScript };","import * as R from \"ramda\";\r\nimport { func, number } from \"prop-types\";\r\nimport cx from \"classnames\";\r\n\r\nimport { legendStateType } from \"./legendState.js\";\r\nimport { navigateToMapEntity } from \"../../common/mapUrl.js\";\r\nimport { MAX_ZOOM, MIN_ZOOM } from \"./GoogleMap.jsx\";\r\nimport { getDataIconImg } from \"../../common/dept.jsx\";\r\n\r\nimport \"./map-overlay.scss\";\r\n\r\nconst propTypes = {\r\n legends: legendStateType.isRequired,\r\n onLegendChange: func,\r\n setZoom: func,\r\n zoom: number,\r\n};\r\n\r\nconst MapOverlay = (props) => {\r\n const { legends, onLegendChange, setZoom, zoom } = props;\r\n\r\n if (R.anyPass([R.isNil, R.isEmpty])(legends)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {legends.map((legend) => {\r\n const { id, isActive, label } = legend;\r\n\r\n return (\r\n onLegendChange(id)}\r\n >\r\n \r\n {getDataIconImg(id)}\r\n
{\" \"}\r\n {label}\r\n \r\n );\r\n })}\r\n
\r\n\r\n 4,\r\n })}\r\n >\r\n navigateToMapEntity(\"HI\")}\r\n className=\"map-overlay__hawaii\"\r\n >\r\n {hawaii} Hawaii\r\n \r\n navigateToMapEntity(\"AK\")}\r\n className=\"map-overlay__alaska\"\r\n >\r\n {alaska} Alaska\r\n \r\n \r\n\r\n {setZoom && (\r\n
\r\n setZoom((zoom) => zoom + 1)}\r\n disabled={zoom >= MAX_ZOOM}\r\n title=\"Zoom in\"\r\n aria-label=\"Zoom in\"\r\n >\r\n {plus}\r\n \r\n setZoom((zoom) => zoom - 1)}\r\n disabled={zoom <= MIN_ZOOM}\r\n title=\"Zoom out\"\r\n aria-label=\"Zoom out\"\r\n >\r\n {minus}\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nMapOverlay.propTypes = propTypes;\r\nexport default MapOverlay;\r\n\r\nconst plus = (\r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst minus = (\r\n \r\n \r\n \r\n);\r\n\r\nconst alaska = (\r\n \r\n \r\n \r\n);\r\n\r\nconst hawaii = (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import { useCallback } from \"react\";\r\nimport cx from \"classnames\";\r\n\r\nimport { number, object } from \"prop-types\";\r\nimport {\r\n deptShape,\r\n getDeptStatus,\r\n getDataIconImg,\r\n} from \"../../common/dept.jsx\";\r\n\r\nimport { OverlayView } from \"@react-google-maps/api\";\r\nimport { Link } from \"@reach/router\";\r\n\r\nimport { getMapEntityUrl } from \"../../common/mapUrl.js\";\r\n\r\nconst propTypes = {\r\n map: object,\r\n selectedDeptData: deptShape.isRequired,\r\n zoom: number.isRequired,\r\n};\r\n\r\nconst HIDDEN_ZOOM = 8;\r\n\r\nconst SelectedDeptOverlay = (props) => {\r\n const { map, selectedDeptData, zoom, ...otherProps } = props;\r\n\r\n const containerRef = useCallback(\r\n (element) => {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // always do a zoom check\r\n if (map.getZoom() <= 8) {\r\n map.setZoom(12);\r\n }\r\n\r\n const isInBounds = map.getBounds().contains({\r\n lat: selectedDeptData.latitude,\r\n lng: selectedDeptData.longitude,\r\n });\r\n\r\n // nudge it so we can see the label\r\n if (isInBounds) {\r\n const { width } = element.getBoundingClientRect();\r\n\r\n // just a single point\r\n const bounds = {\r\n east: selectedDeptData.longitude,\r\n north: selectedDeptData.latitude,\r\n south: selectedDeptData.latitude,\r\n west: selectedDeptData.longitude,\r\n };\r\n\r\n // don't need right padding because the div has a negative x transform\r\n const padding = {\r\n top: 48,\r\n right: width,\r\n bottom: 48,\r\n left: 48,\r\n };\r\n\r\n // https://developers.google.com/maps/documentation/javascript/reference/map#Map.panToBounds\r\n map.panToBounds(bounds, padding);\r\n }\r\n // center it if it's out of the viewport\r\n else {\r\n map.panTo({\r\n lat: selectedDeptData.latitude,\r\n lng: selectedDeptData.longitude,\r\n });\r\n }\r\n },\r\n [map, selectedDeptData.latitude, selectedDeptData.longitude],\r\n );\r\n\r\n // we can't show the overlay if there is no lat/lon\r\n if (!selectedDeptData.latitude || !selectedDeptData.longitude) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n {getDataIconImg(getDeptStatus(selectedDeptData))}\r\n
\r\n
{selectedDeptData.name}
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSelectedDeptOverlay.propTypes = propTypes;\r\nexport default SelectedDeptOverlay;\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport { number } from \"prop-types\";\r\nimport \"./map.scss\";\r\n\r\nimport createDotsOverlay from \"./createDotsOverlay.js\";\r\nimport { geoCentroid } from \"d3-geo\";\r\n\r\nimport theme, { labelColor } from \"./theme.js\";\r\nimport { quadtree } from \"d3-quadtree\";\r\nimport { getDeptStatus } from \"../../common/dept.jsx\";\r\nimport {\r\n getMapIdType,\r\n navigateToMapEntity,\r\n useMapUrlId,\r\n MAP_STATE,\r\n MAP_US,\r\n MAP_DEPARTMENT,\r\n} from \"../../common/mapUrl.js\";\r\nimport { isStatusActive } from \"./legendState.js\";\r\nimport {\r\n lookupStateAbbreviation,\r\n lookupStateName,\r\n} from \"../../common/states.js\";\r\n\r\nimport {\r\n Data,\r\n GoogleMap as ReactGoogleMap,\r\n useLoadScript,\r\n} from \"@react-google-maps/api\";\r\nimport MapOverlay from \"./MapOverlay.jsx\";\r\nimport SelectedDeptOverlay from \"./SelectedDeptOverlay.jsx\";\r\nimport Popup from \"../Popup/Popup.jsx\";\r\n\r\nimport { useContentfulDepartments } from \"../../common/contentfulDepartments.jsx\";\r\nimport { useGoogleMapContext, statesGeoJson } from \"./googleMapContext.jsx\";\r\nimport { useLegendState } from \"./legendState.js\";\r\nimport { useMapScroll } from \"../MapScroll/mapScrollContext.jsx\";\r\nimport usePrevious from \"../../common/usePrevious.js\";\r\n\r\nconst propTypes = {\r\n width: number.isRequired,\r\n height: number.isRequired,\r\n};\r\n\r\nconst DOT_ZONE_RADIUS = 40;\r\nconst INITAL_ZOOM = 4;\r\nexport const MIN_ZOOM = 3;\r\nexport const MAX_ZOOM = 22; // 22 is google map's default max zoom\r\nconst DEPT_INTERACTION_ZOOM = 6; // the min zoom to have click/hover interactions\r\n\r\n// continental us center\r\nconst CONUS_CENTER = {\r\n lat: 39.8283,\r\n lng: -98.5795,\r\n};\r\n\r\n// https://en.wikipedia.org/wiki/List_of_extreme_points_of_the_United_States\r\n// https://gist.github.com/jsundram/1251783\r\nconst CONUS_BOUNDS = {\r\n east: -66.9513812,\r\n north: 49.3457868,\r\n south: 24.7433195,\r\n west: -124.7844079,\r\n};\r\n\r\nconst GoogleMap = (props) => {\r\n const { width, height } = props;\r\n\r\n const allDepartments = useContentfulDepartments();\r\n\r\n const { isLoaded, loadError } = useLoadScript({\r\n // policing-data@civilrights.org\r\n googleMapsApiKey: \"AIzaSyDQJQlVEHYRQZywPHuSsHL1Lvx0S_YxZ30\",\r\n });\r\n\r\n const { map, setMap, panToState } = useGoogleMapContext();\r\n const [zoom, setZoom] = useState(INITAL_ZOOM);\r\n const [center, setCenter] = useState(CONUS_CENTER);\r\n const [statesOverlay, setStatesOverlay] = useState();\r\n const [dotsOverlay, setDotsOverlay] = useState();\r\n const [deptQuadtree, setDeptQuadtree] = useState();\r\n\r\n const [hoveredStateName, setHoveredStateName] = useState();\r\n const [legendState, toggleLegendItem] = useLegendState();\r\n\r\n const containerRef = useRef();\r\n\r\n // const [undebouncedBounds, setBounds] = useState();\r\n\r\n const mapUrlId = useMapUrlId();\r\n const mapUrlType = getMapIdType(mapUrlId);\r\n // prevMapUrlId, only record if the map is loaded\r\n // using undefined because /map will match matpUrlId to null\r\n const prevMapUrlId = usePrevious(map ? mapUrlId : undefined);\r\n\r\n const { scrollToInfoPanel } = useMapScroll();\r\n\r\n /**\r\n * Selected Department\r\n */\r\n const selectedDeptData = useMemo(() => {\r\n if (mapUrlType === MAP_DEPARTMENT) {\r\n return R.find(R.propEq(\"ori\", mapUrlId), allDepartments);\r\n }\r\n }, [allDepartments, mapUrlId, mapUrlType]);\r\n\r\n /**\r\n * scroll the map in to view when the map id changes\r\n */\r\n useEffect(() => {\r\n if (!R.isNil(prevMapUrlId)) {\r\n scrollToInfoPanel();\r\n }\r\n }, [prevMapUrlId, scrollToInfoPanel]);\r\n\r\n /**\r\n * update the state overlay styles\r\n */\r\n useEffect(() => {\r\n if (!statesOverlay) {\r\n return;\r\n }\r\n\r\n const usSelected = mapUrlType === MAP_US;\r\n\r\n // get the state name from the state abbreviation\r\n const selectedStateName =\r\n mapUrlType === MAP_STATE ? lookupStateName(mapUrlId) : null;\r\n\r\n // look up the dept info and get the stateName\r\n const selectedDeptStateName =\r\n mapUrlType === MAP_DEPARTMENT\r\n ? R.compose(\r\n R.prop(\"stateName\"),\r\n R.defaultTo({}),\r\n R.find(R.propEq(\"ori\", mapUrlId)),\r\n )(allDepartments)\r\n : null;\r\n\r\n statesOverlay.forEach((feature) => {\r\n const featureStateName = feature.getProperty(\"name\");\r\n\r\n feature.setProperty(\"zoom\", zoom);\r\n feature.setProperty(\"usSelected\", usSelected);\r\n feature.setProperty(\r\n \"stateSelected\",\r\n featureStateName === selectedStateName,\r\n );\r\n feature.setProperty(\r\n \"deptInStateSelected\",\r\n featureStateName === selectedDeptStateName,\r\n );\r\n });\r\n }, [allDepartments, mapUrlId, mapUrlType, statesOverlay, zoom]);\r\n\r\n /**\r\n * move/zoom map to selected dept/state/US\r\n */\r\n useEffect(() => {\r\n // only move map when the user selects a new dept/state/US\r\n if (!map || mapUrlId === prevMapUrlId) {\r\n return;\r\n }\r\n\r\n // if the US is selected\r\n if (mapUrlType === MAP_US) {\r\n // reset to center of US\r\n // setCenter(CONUS_CENTER);\r\n // setZoom(INITAL_ZOOM);\r\n map.fitBounds(CONUS_BOUNDS);\r\n }\r\n // special case for AK because google maps can't handle fitting to the bounds\r\n // of AK because it's western edge crosses the international date line\r\n else if (mapUrlType === MAP_STATE && mapUrlId === \"AK\") {\r\n const centroid = R.compose(\r\n R.zipObj([\"lng\", \"lat\"]),\r\n geoCentroid,\r\n R.find(R.pathEq([\"properties\", \"name\"], \"Alaska\")),\r\n )(statesGeoJson.features);\r\n\r\n setCenter(centroid);\r\n setZoom(5);\r\n }\r\n // if a state is selected\r\n else if (mapUrlType === MAP_STATE) {\r\n const selectedStateName = lookupStateName(mapUrlId);\r\n\r\n // don't zoom to the state if the user is x-ing out of a dept in that state\r\n const prevDeptIsInState = R.compose(\r\n R.equals(mapUrlId),\r\n R.prop(\"stateAbbreviation\"),\r\n R.defaultTo({}),\r\n R.find(R.propEq(\"ori\", prevMapUrlId)),\r\n )(allDepartments);\r\n\r\n // pan to state when the state stateBounds changes, but only if the user\r\n // isn't x-ing out of a dept\r\n if (!prevDeptIsInState) {\r\n panToState(selectedStateName);\r\n }\r\n }\r\n // if a Department is selected\r\n else if (mapUrlType === MAP_DEPARTMENT) {\r\n // if this department doesn't have a dot, pan to it's state\r\n // otherwise, map pan/zoom stuff is handled in SelectedDeptOverlay.jsx\r\n if (\r\n R.isNil(selectedDeptData.latitude) ||\r\n R.isNil(selectedDeptData.longitude)\r\n ) {\r\n if (selectedDeptData.stateName) {\r\n panToState(selectedDeptData.stateName);\r\n }\r\n }\r\n }\r\n }, [\r\n allDepartments,\r\n map,\r\n mapUrlId,\r\n mapUrlType,\r\n panToState,\r\n prevMapUrlId,\r\n selectedDeptData,\r\n ]);\r\n\r\n /**\r\n * keep track of the hovered state\r\n */\r\n useEffect(() => {\r\n if (statesOverlay) {\r\n statesOverlay.forEach((feature) => {\r\n const featureStateName = feature.getProperty(\"name\");\r\n\r\n feature.setProperty(\"isHovered\", featureStateName === hoveredStateName);\r\n });\r\n }\r\n }, [hoveredStateName, statesOverlay]);\r\n\r\n /**\r\n * Hovered Department\r\n */\r\n\r\n const [hoveredDeptOri, setHoveredDeptOri] = useState();\r\n const hoveredDept = useMemo(() => {\r\n // don't show the hover popup of a dept that is already selected\r\n if (hoveredDeptOri !== mapUrlId) {\r\n return R.find(R.propEq(\"ori\", hoveredDeptOri), allDepartments);\r\n }\r\n }, [allDepartments, hoveredDeptOri, mapUrlId]);\r\n\r\n useEffect(() => {\r\n // deselect any hover value when the user zooms\r\n setHoveredDeptOri();\r\n }, [zoom]);\r\n\r\n /*\r\n * Dot interactions\r\n */\r\n\r\n const dotRadius = useMemo(() => {\r\n // we want the dots to be bigger when the user zooms in\r\n // zoom levels 3, 4, 5, 6, 7, 8, 9, 10,11, 12, 13\r\n const rLookup = [1, 1, 1, 1, 1, 2, 2, 3, 4, 6, 9, 12, 15, 20];\r\n return rLookup[zoom] || R.last(rLookup);\r\n }, [zoom]);\r\n\r\n // whether or not the user should be able to click/mouseover dots\r\n const [dotInterationDisabled, setDotInteractionDisabled] = useState(false);\r\n\r\n // reset the dotInterationDisabled state if the SelectedDeptOverlay is not there\r\n useEffect(() => {\r\n if (!selectedDeptData) {\r\n setDotInteractionDisabled(false);\r\n }\r\n }, [selectedDeptData]);\r\n\r\n const handleClick = useCallback(\r\n (e) => {\r\n if (!deptQuadtree || dotInterationDisabled) {\r\n return;\r\n }\r\n\r\n const { x, y } = e.pixel;\r\n const dept = deptQuadtree.find(x, y, dotRadius + DOT_ZONE_RADIUS);\r\n\r\n if (dept) {\r\n navigateToMapEntity(dept.ori);\r\n }\r\n },\r\n [deptQuadtree, dotInterationDisabled, dotRadius],\r\n );\r\n\r\n const handleMouseMove = useCallback(\r\n (e) => {\r\n if (!deptQuadtree || dotInterationDisabled) {\r\n setHoveredDeptOri(); // reset\r\n return;\r\n }\r\n\r\n const { x, y } = e.pixel;\r\n const dept = deptQuadtree.find(x, y, dotRadius + DOT_ZONE_RADIUS);\r\n\r\n // deselect if there is no close deptarment\r\n if (!dept) {\r\n setHoveredDeptOri();\r\n }\r\n // only update if it's different\r\n else if (dept && dept.ori !== hoveredDeptOri) {\r\n setHoveredDeptOri(dept.ori);\r\n }\r\n },\r\n [deptQuadtree, dotInterationDisabled, dotRadius, hoveredDeptOri],\r\n );\r\n\r\n const hoveredDeptPosition = useMemo(() => {\r\n if (!dotsOverlay || !hoveredDept) {\r\n return [];\r\n }\r\n\r\n return dotsOverlay.coordinatesToPoint([\r\n hoveredDept.longitude,\r\n hoveredDept.latitude,\r\n ]);\r\n }, [dotsOverlay, hoveredDept]);\r\n\r\n const drawDots = useCallback(\r\n (dotsOverlay) => {\r\n if (!dotsOverlay) {\r\n // console.warn(\"GoogleMap.drawDots: no dotsOverlay\");\r\n return;\r\n }\r\n\r\n // don't let clicks happen until we've redrawn and recaclulated the quadtree\r\n setDeptQuadtree(null);\r\n\r\n dotsOverlay.drawDots({\r\n allDepartments,\r\n dotRadius,\r\n legendState,\r\n zoom,\r\n onDrawFinished: (deptsInBounds) => {\r\n // don't recalculate the quadtree when we don't need to\r\n if (zoom < DEPT_INTERACTION_ZOOM) {\r\n return;\r\n }\r\n\r\n // it's important to do this in onDrawFinished *after* the dotsOverlay\r\n // has drawn this is because the coordinatesToPoint method is statefull,\r\n // so we need to allow that to settle before using it to generate the quadtree\r\n const activeDepts = R.filter((dept) => {\r\n return isStatusActive(getDeptStatus(dept), legendState);\r\n })(deptsInBounds);\r\n\r\n const newDeptQuadtree = quadtree()\r\n .x(\r\n (dept) =>\r\n dotsOverlay.coordinatesToPoint([\r\n dept.longitude,\r\n dept.latitude,\r\n ])[0],\r\n )\r\n .y(\r\n (dept) =>\r\n dotsOverlay.coordinatesToPoint([\r\n dept.longitude,\r\n dept.latitude,\r\n ])[1],\r\n )\r\n .addAll(activeDepts);\r\n\r\n setDeptQuadtree(newDeptQuadtree);\r\n },\r\n });\r\n },\r\n [allDepartments, dotRadius, legendState, zoom],\r\n );\r\n\r\n // redraw the dots when the legendState changes\r\n useEffect(() => {\r\n drawDots(dotsOverlay);\r\n // need to HACK-ily do this because drawDots is imperitive\r\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\r\n }, [legendState]);\r\n\r\n // handle pressing escape when focused on the map\r\n useEffect(() => {\r\n // NOTE we want this event listener on the container, NOT the document\r\n // eg, if the user is focused in the search box and presses Escape, we\r\n // don't want this to fire\r\n const container = containerRef.current;\r\n\r\n if (container) {\r\n const handleKeyDown = (e) => {\r\n if (e.key === \"Escape\") {\r\n // find the parent, either the state, or the US\r\n const newMapEntity =\r\n mapUrlType === MAP_STATE\r\n ? \"US\"\r\n : mapUrlType === MAP_DEPARTMENT\r\n ? R.compose(\r\n R.prop(\"stateAbbreviation\"),\r\n R.defaultTo({}),\r\n R.find(R.propEq(\"ori\", mapUrlId)),\r\n )(allDepartments)\r\n : null;\r\n\r\n if (!R.isNil(newMapEntity)) {\r\n navigateToMapEntity(newMapEntity);\r\n }\r\n }\r\n };\r\n\r\n container.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n return () => {\r\n container.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }\r\n }, [allDepartments, mapUrlId, mapUrlType]);\r\n\r\n return (\r\n \r\n {loadError ? (\r\n
Error loading map
\r\n ) : isLoaded ? (\r\n // eslint disable for onMouseOut\r\n /* eslint-disable-next-line jsx-a11y/mouse-events-have-key-events */\r\n {\r\n setHoveredDeptOri(); // clear the popup when the user drags\r\n }}\r\n onIdle={() => {\r\n // scrollMapInToView() can't do this because it fires on first load\r\n drawDots(dotsOverlay);\r\n }}\r\n onLoad={(map) => {\r\n setMap(map);\r\n\r\n // can't use because I need more control over when the\r\n // bounds update, or maybe I can if I just update the overlay bounds onIdle\r\n const dotsOverlay = createDotsOverlay({\r\n map,\r\n onAddCallback: (overlay) => {\r\n // need to inject overlay to avoid a race condition\r\n drawDots(overlay);\r\n },\r\n });\r\n setDotsOverlay(dotsOverlay);\r\n }}\r\n onMouseMove={zoom >= DEPT_INTERACTION_ZOOM ? handleMouseMove : null}\r\n onMouseOut={() => setHoveredDeptOri()} // clear\r\n onZoomChanged={function () {\r\n // google maps api relies on `this`\r\n const mapZoom = this.getZoom();\r\n if (mapZoom !== zoom) {\r\n setZoom(mapZoom);\r\n }\r\n }}\r\n options={{\r\n fullscreenControl: false,\r\n mapTypeControl: false,\r\n maxZoom: MAX_ZOOM,\r\n minZoom: MIN_ZOOM,\r\n rotateControl: false,\r\n scaleControl: true,\r\n streetViewControl: false,\r\n styles: theme,\r\n zoomControl: false, // lives in MapOverlay.jsx\r\n }}\r\n zoom={zoom}\r\n >\r\n {/* states overlay */}\r\n\r\n {/* eslint-disable-next-line jsx-a11y/mouse-events-have-key-events */}\r\n {\r\n const name = event.feature.getProperty(\"name\");\r\n const abbreviation = lookupStateAbbreviation(name);\r\n\r\n navigateToMapEntity(abbreviation);\r\n }}\r\n onMouseOver={(event) => {\r\n // set the hovered state\r\n const stateName = event.feature.getProperty(\"name\");\r\n setHoveredStateName(stateName);\r\n\r\n // deselect any hovered dept\r\n if (hoveredDeptOri) {\r\n setHoveredDeptOri();\r\n }\r\n }}\r\n onMouseOut={(event) => {\r\n // reset\r\n setHoveredStateName();\r\n setHoveredDeptOri();\r\n }}\r\n onLoad={(statesOverlay) => {\r\n // load states overlay\r\n statesOverlay.addGeoJson(statesGeoJson);\r\n\r\n // https://developers.google.com/maps/documentation/javascript/examples/layer-data-dynamic\r\n // set up style, deptInStateSelected, etc, will be toggled elsewhere\r\n statesOverlay.setStyle((feature) => {\r\n const usSelected = feature.getProperty(\"usSelected\");\r\n const deptInStateSelected = feature.getProperty(\r\n \"deptInStateSelected\",\r\n );\r\n const stateSelected = feature.getProperty(\"stateSelected\");\r\n const isHovered = feature.getProperty(\"isHovered\");\r\n const zoom = feature.getProperty(\"zoom\");\r\n\r\n // if we're zoomed in a bunch, remove the overlay (but keep the selected state stroke)\r\n if (zoom > 7) {\r\n return {\r\n clickable: false,\r\n fillColor: \"transparent\",\r\n fillOpacity: 1,\r\n strokeColor: labelColor,\r\n // highlight the selected state and always show the state lines\r\n strokeOpacity: stateSelected ? 1 : 0.5,\r\n strokeWeight: stateSelected ? 3 : 1,\r\n };\r\n }\r\n\r\n const deptOrStateSelected =\r\n deptInStateSelected || stateSelected;\r\n\r\n // https://developers.google.com/maps/documentation/javascript/reference/data#Data.StyleOptions\r\n return {\r\n clickable: !deptOrStateSelected || usSelected,\r\n // hide the overlay when us/state selected or zoomed way out\r\n fillOpacity: 0,\r\n strokeColor: labelColor,\r\n strokeOpacity: 1,\r\n strokeWeight: isHovered || deptOrStateSelected ? 3 : 0,\r\n };\r\n });\r\n\r\n setStatesOverlay(statesOverlay);\r\n }}\r\n />\r\n\r\n {selectedDeptData && (\r\n setDotInteractionDisabled(true)}\r\n onMouseLeave={() => setDotInteractionDisabled(false)}\r\n />\r\n )}\r\n \r\n ) : (\r\n
Loading...
\r\n )}\r\n\r\n \r\n\r\n \r\n {hoveredDept && (\r\n
{hoveredDept.name}
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nGoogleMap.propTypes = propTypes;\r\nexport default GoogleMap;\r\n","import { useEffect, useRef } from \"react\";\r\n\r\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\r\nexport default function usePrevious(value) {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}\r\n","import { useMemo } from \"react\";\r\nimport cx from \"classnames\";\r\nimport { node } from \"prop-types\";\r\nimport \"./map-panel.scss\";\r\n\r\nimport useBoundingClientRect from \"../../common/useBoundingClientRect.js\";\r\nimport { useMapScroll } from \"../MapScroll/mapScrollContext.jsx\";\r\nimport useWindowSize from \"../../common/useWindowSize.js\";\r\n\r\nimport GoogleMap from \"../GoogleMap/GoogleMap.jsx\";\r\nimport Search from \"../Search/Search.jsx\";\r\n\r\nconst propTypes = {\r\n children: node,\r\n};\r\n\r\nconst MapPanel = (props) => {\r\n const { children } = props;\r\n\r\n const { mapHolderRef, mapPanelRef } = useMapScroll();\r\n\r\n const [{ width: mapHolderWidth }] = useBoundingClientRect(mapHolderRef);\r\n\r\n const { mapHeight, sideBySide } = useResponsiveMap();\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n \r\n {mapHolderWidth && mapHeight && (\r\n \r\n )}\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nMapPanel.propTypes = propTypes;\r\nexport default MapPanel;\r\n\r\nfunction useResponsiveMap() {\r\n const [windowWidth, windowHeight] = useWindowSize();\r\n\r\n // 910 matches $bp-large-min\r\n const isLargeScreen = useMemo(() => windowWidth >= 910, [windowWidth]);\r\n\r\n const mapHeight = useMemo(() => {\r\n return isLargeScreen ? windowHeight : 500;\r\n }, [isLargeScreen, windowHeight]);\r\n\r\n return { mapHeight, sideBySide: isLargeScreen };\r\n}\r\n","import * as R from \"ramda\";\r\nimport { node, number } from \"prop-types\";\r\n\r\nimport \"./progress-chart.scss\";\r\n\r\nimport { arc } from \"d3-shape\";\r\nimport { formatPercentageNice } from \"../../common/format.js\";\r\n\r\nimport useBoundingClientRect from \"../../common/useBoundingClientRect.js\";\r\n\r\nconst propTypes = {\r\n children: node,\r\n collected: number, // show this instead of percentage if provided\r\n percentage: number.isRequired, // 0-1\r\n title: node,\r\n};\r\n\r\nconst ProgressChart = (props) => {\r\n const { children, collected, percentage, title } = props;\r\n\r\n const [{ width = 0 }, containerRef] = useBoundingClientRect();\r\n\r\n // max size\r\n const size = R.min(width, 380);\r\n\r\n const arcGenerator = arc();\r\n\r\n const backgroundCircle = arcGenerator({\r\n innerRadius: size / 2 - 32,\r\n outerRadius: size / 2,\r\n startAngle: 0,\r\n endAngle: Math.PI * 2,\r\n });\r\n\r\n const percentageArc = arcGenerator({\r\n innerRadius: size / 2 - 32,\r\n outerRadius: size / 2,\r\n startAngle: 0,\r\n endAngle: Math.PI * 2 * percentage,\r\n });\r\n\r\n return (\r\n
\r\n 0 ? { width: size, height: size } : {}}\r\n >\r\n {size > 0 && (\r\n
\r\n {title &&
{title}
}\r\n\r\n 350 ? 90 : width > 275 ? 75 : 60 }}\r\n >\r\n {!R.isNil(collected) ? collected : formatPercentageNice(percentage)}\r\n
\r\n\r\n
{children}
\r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nProgressChart.propTypes = propTypes;\r\nexport default ProgressChart;\r\n","import { useMemo } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport { useStaticQuery, graphql } from \"gatsby\";\r\n\r\nimport {} from \"prop-types\";\r\nimport \"./progress-section.scss\";\r\nimport \"../../scss/fancy-bold.scss\";\r\n\r\nimport { formatNumber } from \"../../common/format.js\";\r\nimport { useContentfulDepartments } from \"../../common/contentfulDepartments.jsx\";\r\nimport { getDeptStatus, HAS_DATA } from \"../../common/dept.jsx\";\r\nimport { extractRichText } from \"../../common/contentful-extract.jsx\";\r\nimport { useMapScroll } from \"../MapScroll/mapScrollContext.jsx\";\r\n\r\nimport Container5050 from \"../Container/Container5050.jsx\";\r\nimport ProgressChart from \"../ProgressChart/ProgressChart.jsx\";\r\n\r\nconst propTypes = {};\r\n\r\n// the # of depts to collect data for in 2021\r\nconst GOAL = 1000;\r\n\r\nconst Progress = (props) => {\r\n const allDepartments = useContentfulDepartments();\r\n\r\n const { scrollToInfoPanel } = useMapScroll();\r\n\r\n const { collected } = useMemo(() => {\r\n return R.applySpec({\r\n collected: R.compose(\r\n R.length,\r\n R.filter((dept) => getDeptStatus(dept) === HAS_DATA),\r\n ),\r\n total: R.length,\r\n })(allDepartments);\r\n }, [allDepartments]);\r\n\r\n const percentage = Math.min(1, collected / GOAL);\r\n\r\n const contentfulData = useStaticQuery(query);\r\n\r\n const data = R.compose(\r\n R.evolve({\r\n progressSectionTitle: extractRichText,\r\n progressText: extractRichText,\r\n }),\r\n R.defaultTo({}),\r\n R.prop(\"contentfulMapPage\"),\r\n )(contentfulData);\r\n\r\n const { progressSectionTitle, progressText } = data;\r\n\r\n return (\r\n
\r\n \r\n
\r\n

{progressSectionTitle}

\r\n\r\n {progressText}\r\n\r\n scrollToInfoPanel()}\r\n >\r\n Start Searching Below\r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n right={\r\n
\r\n \r\n
of our goal has been reached for 2021.
\r\n
\r\n\r\n
\r\n Our goal is to collect {formatNumber(GOAL)} data sets in 2021.{\" \"}\r\n \r\n {formatNumber(collected)}/{formatNumber(GOAL)}\r\n {\" \"}\r\n data sets have been collected for use of force data across police\r\n departments in the United States so far.\r\n
\r\n
\r\n }\r\n />\r\n
\r\n );\r\n};\r\n\r\nProgress.propTypes = propTypes;\r\nexport default Progress;\r\n\r\nconst query = graphql`\r\n {\r\n contentfulMapPage {\r\n progressSectionTitle {\r\n raw\r\n }\r\n progressText {\r\n raw\r\n }\r\n }\r\n }\r\n`;\r\n","import * as R from \"ramda\";\r\nimport {} from \"prop-types\";\r\nimport { extractRichText } from \"../../common/contentful-extract.jsx\";\r\n\r\nimport \"./getting-started.scss\";\r\n\r\nconst propTypes = {};\r\n\r\nimport { useStaticQuery, graphql } from \"gatsby\";\r\n\r\nconst GettingStarted = (props) => {\r\n const contentfulData = useStaticQuery(graphql`\r\n {\r\n contentfulMapPage {\r\n instructionText {\r\n raw\r\n references {\r\n ...Link\r\n }\r\n }\r\n }\r\n }\r\n `);\r\n\r\n const content = R.compose(\r\n extractRichText,\r\n R.path([\"contentfulMapPage\", \"instructionText\"]),\r\n )(contentfulData);\r\n\r\n return
{content}
;\r\n};\r\n\r\nGettingStarted.propTypes = propTypes;\r\nexport default GettingStarted;\r\n","import * as R from \"ramda\";\r\nimport { useStaticQuery, graphql } from \"gatsby\";\r\nimport { extractRichText } from \"./contentful-extract.jsx\";\r\n\r\nexport default function useContentfulLocationInfo(locationName) {\r\n // can't use graphql variables in useStaticQuery, so get all the content\r\n // and do the filtering below\r\n // https://www.gatsbyjs.org/docs/use-static-query/\r\n const contentfulData = useStaticQuery(graphql`\r\n {\r\n allContentfulLocation {\r\n edges {\r\n node {\r\n location\r\n content {\r\n raw\r\n references {\r\n ...Link\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n `);\r\n\r\n return R.compose(\r\n R.defaultTo({}),\r\n R.find(R.propEq(\"locationName\", locationName)),\r\n R.map(\r\n R.compose(\r\n R.applySpec({\r\n locationName: R.prop(\"location\"),\r\n content: R.compose(extractRichText, R.prop(\"content\")),\r\n }),\r\n R.prop(\"node\"),\r\n ),\r\n ),\r\n R.path([\"allContentfulLocation\", \"edges\"]),\r\n )(contentfulData);\r\n}\r\n","import { useMemo } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport { string } from \"prop-types\";\r\nimport \"./info-panel.scss\";\r\n\r\nimport { getDeptStatus, HAS_DATA } from \"../../common/dept.jsx\";\r\nimport { formatNumber, formatPercentage } from \"../../common/format.js\";\r\nimport { getMapEntityUrl } from \"../../common/mapUrl.js\";\r\nimport { lookupStateName } from \"../../common/states.js\";\r\n\r\nimport GettingStarted from \"./GettingStarted.jsx\";\r\nimport { Link } from \"@reach/router\";\r\nimport InfoTooltip from \"../InfoTooltip/InfoTooltip.jsx\";\r\nimport ProgressChart from \"../ProgressChart/ProgressChart.jsx\";\r\nimport { useContentfulDepartments } from \"../../common/contentfulDepartments.jsx\";\r\nimport useContentfulLocationInfo from \"../../common/useContentfulLocationInfo.js\";\r\nimport { useGoogleMapContext } from \"../GoogleMap/googleMapContext.jsx\";\r\n\r\nconst propTypes = {\r\n abbreviation: string.isRequired,\r\n};\r\n\r\nconst StateInfo = (props) => {\r\n const { abbreviation } = props;\r\n const stateName = lookupStateName(abbreviation);\r\n\r\n const allDepartments = useContentfulDepartments();\r\n const { content } = useContentfulLocationInfo(stateName);\r\n\r\n const { panToState } = useGoogleMapContext();\r\n\r\n const { collected, total } = useMemo(() => {\r\n return R.compose(\r\n R.applySpec({\r\n collected: R.compose(\r\n R.length,\r\n R.filter((dept) => getDeptStatus(dept) === HAS_DATA),\r\n ),\r\n total: R.length,\r\n }),\r\n R.filter(R.propEq(\"stateAbbreviation\", abbreviation)),\r\n )(allDepartments);\r\n }, [abbreviation, allDepartments]);\r\n\r\n const percentage = collected / total;\r\n\r\n return (\r\n
\r\n
\r\n United States /{\" \"}\r\n {\r\n // always pan to the state if this link is clicked\r\n // (logic in GoogleMaps.jsx) won't always\r\n panToState(stateName);\r\n }}\r\n >\r\n {stateName}\r\n \r\n
\r\n

{stateName}

\r\n \r\n of Police Department Data in {stateName} has been collected\r\n \r\n
\r\n
{stateName} Overview
\r\n

\r\n Accountable Now has collected data for{\" \"}\r\n \r\n {formatNumber(collected)} out of {formatNumber(total)}\r\n \r\n \r\n We referred to{\" \"}\r\n \r\n ICPSR\r\n {\" \"}\r\n as the source for number of departments.\r\n \r\n law enforcement agencies in {stateName}. This accounts for{\" \"}\r\n {formatPercentage(percentage)} of the data for the\r\n state of {stateName}.\r\n

\r\n\r\n {content && (\r\n
{content}
\r\n )}\r\n
\r\n\r\n \r\n
\r\n );\r\n};\r\n\r\nStateInfo.propTypes = propTypes;\r\nexport default StateInfo;\r\n","import { useMemo } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport {} from \"prop-types\";\r\n\r\nimport \"./info-panel.scss\";\r\n\r\nimport { getDeptStatus, HAS_DATA } from \"../../common/dept.jsx\";\r\nimport { formatNumber, formatPercentage } from \"../../common/format.js\";\r\n\r\n// import ProgressChart from \"../ProgressChart/ProgressChart.jsx\";\r\nimport { useContentfulDepartments } from \"../../common/contentfulDepartments.jsx\";\r\nimport useContentfulLocationInfo from \"../../common/useContentfulLocationInfo.js\";\r\n\r\nconst propTypes = {};\r\n\r\nconst USInfo = (props) => {\r\n const allDepartments = useContentfulDepartments();\r\n const { content } = useContentfulLocationInfo(\"United States\");\r\n\r\n const { collected, total } = useMemo(() => {\r\n return R.applySpec({\r\n collected: R.compose(\r\n R.length,\r\n R.filter((dept) => getDeptStatus(dept) === HAS_DATA),\r\n ),\r\n total: R.length,\r\n })(allDepartments);\r\n }, [allDepartments]);\r\n\r\n const percentage = collected / total;\r\n\r\n return (\r\n
\r\n

United States

\r\n\r\n {/*
\r\n \r\n of National Police Department Data has been collected\r\n \r\n
*/}\r\n\r\n
\r\n
See Our Progress
\r\n

\r\n Accountable Now has collected data for{\" \"}\r\n \r\n {formatNumber(collected)} out of {formatNumber(total)}\r\n {\" \"}\r\n law enforcement agencies in the United States and its territories.\r\n This accounts for {formatPercentage(percentage)} of\r\n the national data across states, counties, and city police\r\n departments.\r\n

\r\n
\r\n\r\n {content &&
{content}
}\r\n
\r\n );\r\n};\r\n\r\nUSInfo.propTypes = propTypes;\r\nexport default USInfo;\r\n","import { useMemo } from \"react\";\r\nimport * as R from \"ramda\";\r\nimport { useStaticQuery, graphql } from \"gatsby\";\r\n\r\nimport \"./map-page.scss\";\r\n\r\nimport {\r\n getMapIdType,\r\n useMapUrlId,\r\n MAP_DEPARTMENT,\r\n MAP_STATE,\r\n MAP_US,\r\n} from \"../../common/mapUrl.js\";\r\n\r\nimport { extractBanner } from \"../../common/contentful-extract.jsx\";\r\nimport { useContentfulDepartments } from \"../../common/contentfulDepartments.jsx\";\r\nimport { navigateToMapEntity } from \"../../common/mapUrl.js\";\r\n\r\nimport DeptInfo from \"../InfoPanel/DeptInfo.jsx\";\r\nimport Banner from \"../Banner/Banner.jsx\";\r\nimport MapPanel from \"../MapPanel/MapPanel.jsx\";\r\nimport Page from \"../Page/Page.jsx\";\r\nimport ProgressSection from \"./ProgressSection.jsx\";\r\nimport StateInfo from \"../InfoPanel/StateInfo.jsx\";\r\nimport USInfo from \"../InfoPanel/USInfo.jsx\";\r\n\r\nconst MapPage = () => {\r\n const mapUrlId = useMapUrlId();\r\n const mapUrlType = getMapIdType(mapUrlId);\r\n\r\n const allDepartments = useContentfulDepartments();\r\n\r\n const panelInfo = useMemo(() => {\r\n // Don't render anything on the server so React doesn't get confused when it\r\n // loads and renders the panel based on the url\r\n // This has happened to me before https://github.com/gatsbyjs/gatsby/issues/14601\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (mapUrlType === MAP_US) {\r\n return ;\r\n }\r\n // if there is a state matching\r\n else if (mapUrlType === MAP_STATE) {\r\n return ;\r\n }\r\n // if there is something else, assume it's a dept ori\r\n else if (mapUrlType === MAP_DEPARTMENT) {\r\n const deptData = R.find(R.propEq(\"ori\", mapUrlId), allDepartments);\r\n\r\n // if we don't have data, navigate to root map page\r\n if (R.isNil(deptData)) {\r\n navigateToMapEntity();\r\n return \"\";\r\n }\r\n // if we have data, render it\r\n else {\r\n return ;\r\n }\r\n }\r\n }, [allDepartments, mapUrlType, mapUrlId]);\r\n\r\n const contentfulData = useStaticQuery(query);\r\n\r\n const data = R.compose(\r\n R.evolve({\r\n topHeroBanner: extractBanner,\r\n bottomBanner: extractBanner,\r\n }),\r\n R.defaultTo({}),\r\n R.prop(\"contentfulMapPage\"),\r\n )(contentfulData);\r\n\r\n const { bottomBanner } = data;\r\n\r\n return (\r\n \r\n \r\n\r\n {panelInfo}\r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MapPage;\r\n\r\nconst query = graphql`\r\n {\r\n contentfulMapPage {\r\n bottomBanner {\r\n backgroundImage {\r\n fluid {\r\n base64\r\n aspectRatio\r\n src\r\n srcSet\r\n srcWebp\r\n srcSetWebp\r\n sizes\r\n }\r\n file {\r\n url\r\n }\r\n }\r\n backgroundSize\r\n textColor\r\n subtitle {\r\n raw\r\n }\r\n title {\r\n raw\r\n }\r\n content {\r\n raw\r\n }\r\n link {\r\n ...Link\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import MapPage from \"../components/MapPage/MapPage.jsx\";\r\nimport { ContentfulDepartmentsProvider } from \"../common/contentfulDepartments.jsx\";\r\nimport { MapScrollProvider } from \"../components/MapScroll/mapScrollContext.jsx\";\r\nimport { GoogleMapProvider } from \"../components/GoogleMap/googleMapContext.jsx\";\r\n\r\nconst GatsbyMapPage = (props) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\nexport default GatsbyMapPage;\r\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAJ72lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDMgNzkuMTY0NTI3LCAyMDIwLzEwLzE1LTE3OjQ4OjMyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTAxLTI2VDEyOjA1OjAzLTA1OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMS0yNlQxMjoyMTozOC0wNTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMS0yNlQxMjoyMTozOC0wNTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjODljYWMxYi04MWIyLTQ3M2EtODRkOC1iZDliNjBiYjMyNzMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplZGQyZDQ0YS0wMWYxLWFmNGEtODRhZC0yZDgzNTIyNmUxNzUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YzE0MmEzOS1mMzgwLTRkZjEtOGRjZi03OGYwMWZlYTMzOTYiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjhjMTQyYTM5LWYzODAtNGRmMS04ZGNmLTc4ZjAxZmVhMzM5NiIgc3RFdnQ6d2hlbj0iMjAyMS0wMS0yNlQxMjowNTowMy0wNTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OTZiODM1ZWItMjMwMi00ZDEzLWJjNTYtODUzYjM2MTI5ODNhIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjEzOjE3LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YzE3ZWQ1MDctYWI0My00ZDk4LWIwMGEtMTI5ZDg3Y2JiMDEwIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjIxOjM4LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yzg5Y2FjMWItODFiMi00NzNhLTg0ZDgtYmQ5YjYwYmIzMjczIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjIxOjM4LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzE3ZWQ1MDctYWI0My00ZDk4LWIwMGEtMTI5ZDg3Y2JiMDEwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjhjMTQyYTM5LWYzODAtNGRmMS04ZGNmLTc4ZjAxZmVhMzM5NiIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjhjMTQyYTM5LWYzODAtNGRmMS04ZGNmLTc4ZjAxZmVhMzM5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmIoXmIAAAIvSURBVGje7drfi4xRHMfx18zuom1DiVa7bVHL+rEhREQkriRCNiE/InIn5UdNeyW7jF1/kD9jIz9KXIlILrRy42KPkrSzZp6fM+dzM8/TnDlz3n2+z/fznHmmUn02o5NU1WGKwBE4AkfgCByBI3BnAVfwJLx2BPAYbuFsJwD3YiIcT4Tztga+jaFwPIg7mV9PGe6WBvHyL1e/YwPet6PD/yrhP0u8rYB3z9OkxrCnnYAreDpPDDV6v3TA57CrwZiduNAOwL14uMCxD9BXduC7GFjg2IEsYirNWBrCi/+8uZjFCN6V0eHJJu6kluBxGUt6L840+dlT2Fcm4GqLMVPBdFpmpDHpeexocY7tuFiGptWHV1idwFwfsB7fiuzwvYRgoT/MV1iH1+B56LRJaRYb8baIDk8mDJtKTCUFvB+nU0qSkzhQJODfMZSmptFVFODL2JYy8FZcKkLTWmruZ5v+DHZ2HzHcaky16vD9jGBhFWp5Orw2xNBi2ekHRvE6D4frGcMK3/coj5I+iBPy0XEcyhK4K8REnmo6ppoBvoItOQOP4moWTWtZaBgr5a9PWIevaTpcKwissI5amg4PYwaLFEc/sTnswRN3uF4wWOgx93A98ZI+jGOKqaM4kiRwN6YUW1NhnYkAXwvXSZG1CdeTaFrL8QYrFF+fQ0x9acXh8ZLACuscb6WkR3BTuXQjrLsp4Hpo+2VST6MG292g3bed4l8PI3AEjsAROAJH4Pz0CxAlT2UyiL3sAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","export default function (x) {\n return function constant() {\n return x;\n };\n}","'use strict';\n\nvar reactIs = require('react-is');\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;","exports.UPLOAD_FILE_SUCCESS = \"upload-file-success\";\r\nexports.UPLOAD_FILE_ERROR = \"upload-file-error\";\r\nexports.UPLOAD_FILE_DENIED = \"upload-file-denied\";\r\nexports.UPLOAD_RECAPTCHA_FAILED = \"upload-recaptcha-failed\";\r\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n\n this._ = \"\";\n}\n\nfunction path() {\n return new Path();\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function (x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function () {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function (x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function (x1, y1, x, y) {\n this._ += \"Q\" + +x1 + \",\" + +y1 + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function (x1, y1, x2, y2, x, y) {\n this._ += \"C\" + +x1 + \",\" + +y1 + \",\" + +x2 + \",\" + +y2 + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function (x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01; // Is the radius negative? Error.\n\n if (r < 0) throw new Error(\"negative radius: \" + r); // Is this path empty? Move to (x1,y1).\n\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n } // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to.\n\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + +(y01 * x20 > x01 * y20) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function (x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0; // Is the radius negative? Error.\n\n if (r < 0) throw new Error(\"negative radius: \" + r); // Is this path empty? Move to (x0,y0).\n\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n } // Is this arc empty? We’re done.\n\n\n if (!r) return; // Does the angle go the wrong way? Flip the direction.\n\n if (da < 0) da = da % tau + tau; // Is this a complete circle? Draw two arcs to complete the circle.\n\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n } // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + +(da >= pi) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function (x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + +w + \"v\" + +h + \"h\" + -w + \"Z\";\n },\n toString: function () {\n return this._;\n }\n};\nexport default path;","import { useEffect, useState, useCallback, useRef } from \"react\";\r\nimport debounce from \"lodash.debounce\";\r\n\r\n/**\r\n * useBoundingClientRect, react hook\r\n * given an element, return the dimensions.\r\n * see https://developer.mozilla.org/en-US/docs/Web/API/DOMRect\r\n * @param {Object} refProp optional, a ref provided by the consumer. If this isn't\r\n * provided, a fallbackRef will be used instead\r\n * @return {Tuple} [dimensions, ref]\r\n * @type dimensions is { width, height, top, right, bottom, left } of the element\r\n */\r\nexport default function useBoundingClientRect(refProp) {\r\n const [dimensions, setDimensions] = useState({});\r\n const fallbackRef = useRef();\r\n const ref = refProp || fallbackRef;\r\n\r\n const measure = useCallback(() => {\r\n if (ref.current) {\r\n // NOTE IE does not support toJSON\r\n // setDimensions(ref.current.getBoundingClientRect().toJSON());\r\n setDimensions(ref.current.getBoundingClientRect());\r\n } else {\r\n setDimensions({});\r\n }\r\n }, [ref]);\r\n\r\n useEffect(() => {\r\n // HACK to let the layout settle first\r\n const timeoutId = setTimeout(measure, 500);\r\n\r\n return () => clearTimeout(timeoutId);\r\n }, [measure]);\r\n\r\n useEffect(() => {\r\n const measureDebounce = debounce(measure, 100);\r\n\r\n // we need to remeasure on scroll too, because top will change\r\n window.addEventListener(\"scroll\", measureDebounce);\r\n window.addEventListener(\"resize\", measureDebounce);\r\n\r\n return () => {\r\n measureDebounce.cancel();\r\n window.removeEventListener(\"scroll\", measureDebounce);\r\n window.removeEventListener(\"resize\", measureDebounce);\r\n };\r\n }, [measure]);\r\n\r\n return [dimensions, ref];\r\n}\r\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}","exports.RECAPTCHA_CLIENT_KEY_V2 = \"6LcDxsUZAAAAAK5S5VojsfCQUQJuAnqMPF0dwr_x\";\r\nexports.RECAPTCHA_CLIENT_KEY_V3 = \"6Lc1EVQaAAAAAOl_13gD2hpqfERCMAJ8bdrjV7dr\";\r\n","import { path } from \"d3-path\";\nimport constant from \"./constant.js\";\nimport { abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau } from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0,\n y10 = y1 - y0,\n x32 = x3 - x2,\n y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n} // Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\n\n\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00; // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function () {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n if (!context) context = buffer = path(); // Ensure that the outer radius is always larger than the inner radius.\n\n if (r1 < r0) r = r1, r1 = r0, r0 = r; // Is it a point?\n\n if (!(r1 > epsilon)) context.moveTo(0, 0); // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n } // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = ap > epsilon && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1; // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= cw ? 1 : -1, a00 += p0, a10 -= p0;else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= cw ? 1 : -1, a01 += p1, a11 -= p1;else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10); // Apply rounded corners?\n\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc; // Restrict the corner radius according to the sector angle.\n\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n } // Is the sector collapsed to a line?\n\n\n if (!(da1 > epsilon)) context.moveTo(x01, y01); // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?\n\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n } // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10); // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged?\n\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n } // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n context.closePath();\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function () {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function (_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function (_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function (_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function (_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function (_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function (_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function (_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, arc) : context;\n };\n\n return arc;\n}","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAJ72lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDMgNzkuMTY0NTI3LCAyMDIwLzEwLzE1LTE3OjQ4OjMyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTAxLTI2VDEyOjA1OjA2LTA1OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wMS0yNlQxMjoyMToyNy0wNTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wMS0yNlQxMjoyMToyNy0wNTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMTM0YzZjZi00MjVkLTQxOWYtYWFhNC00NzNhOTgwNjI1NzEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2ZTQ3NmM2ZC05ZWY0LTM3NDEtYWY1My1iNDQzOTAwOGJiOWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyYmVhNzI5Ni03YjIwLTQ3ODEtOGMyMy1lNGMyMGRhNTE0NWIiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJiZWE3Mjk2LTdiMjAtNDc4MS04YzIzLWU0YzIwZGE1MTQ1YiIgc3RFdnQ6d2hlbj0iMjAyMS0wMS0yNlQxMjowNTowNi0wNTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjEgKE1hY2ludG9zaCkiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZjA0MjdlNzUtZDU1ZS00OWVlLWI2NGQtZmRmOTUxYTAxZGU4IiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjEzOjI1LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjY1NjFhNzYtZTk5Zi00YzEwLWIzMmMtMGZmNGM2MzA1OGUxIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjIxOjI3LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjEzNGM2Y2YtNDI1ZC00MTlmLWFhYTQtNDczYTk4MDYyNTcxIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTI2VDEyOjIxOjI3LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjY1NjFhNzYtZTk5Zi00YzEwLWIzMmMtMGZmNGM2MzA1OGUxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjJiZWE3Mjk2LTdiMjAtNDc4MS04YzIzLWU0YzIwZGE1MTQ1YiIgc3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjJiZWE3Mjk2LTdiMjAtNDc4MS04YzIzLWU0YzIwZGE1MTQ1YiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgdybAQAAAI8SURBVGje7drNi41RGADw35QYUcpn9oOizB1GEwsfEQ0WFPkDWFiwwMoKG3ZjY0HxD7Bgc/MRiQXJx8woiuwlJtFoPlJjcd+pabKYe+e873vu3PNs733fzq/zdp5zzvO0jVS1VLQlcAIncAIncAIn8JwFz8dW7MJGrMVqLM5+H8ZXfMZ7PMVLjDcbuAsncQRL63z2J+7gOvpjB3fiMnrRNst3TeABzmMwNnB7Bj2NeYEn5S+uZfDRGMAd2SdYyXm9GcBRfCkTvAVVrChokR3CAbwqA9yDx1NW3KJiGHsaRTcK7sCLAmd2enzHtkY+70bA7VmurCg3BrIcP5o3uA9nItk49eFcnuBOvMkh9cwmZW3Odmm5gKvYH9n2uIqDeYC78DbADip0TGSz3B8afBPHIz0E3cKJkOAF+IYlkYJ/YRXGQoG341nkR90deB4KfBEXIgdfysYZBHwXhyIH38PhUOAPWB85+CM2hAL/wLLIwUNYHgo8pnY/FXOMZ9kkgdMnnRatlJZab+PRDFvLnTMZ41w5PPzGypCHh5Y7HsKm7AIgxuie6djqveJ5iL2RYR9h30z/XC+4gtfiusTrVkexrdmvaa/ibD0PNAJeqFZ1qJSMHVS7iB/JG0yLlVomowdPsKhg7B/sVnAxbSq6WuBJqtRy6WSswW3FFMSPqTXAKBNMraJ4Bae0QMvD1OjM4L2B3ndfpE0t0yNE29INvAs9sKIb09b5f2PaJ03emBZtJHACJ3ACJ3ACJ3B58Q/o4NyNDsUAfgAAAABJRU5ErkJggg==\"","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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'use strict';\n\nvar b = \"function\" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for(\"react.element\") : 60103,\n d = b ? Symbol.for(\"react.portal\") : 60106,\n e = b ? Symbol.for(\"react.fragment\") : 60107,\n f = b ? Symbol.for(\"react.strict_mode\") : 60108,\n g = b ? Symbol.for(\"react.profiler\") : 60114,\n h = b ? Symbol.for(\"react.provider\") : 60109,\n k = b ? Symbol.for(\"react.context\") : 60110,\n l = b ? Symbol.for(\"react.async_mode\") : 60111,\n m = b ? Symbol.for(\"react.concurrent_mode\") : 60111,\n n = b ? Symbol.for(\"react.forward_ref\") : 60112,\n p = b ? Symbol.for(\"react.suspense\") : 60113,\n q = b ? Symbol.for(\"react.suspense_list\") : 60120,\n r = b ? Symbol.for(\"react.memo\") : 60115,\n t = b ? Symbol.for(\"react.lazy\") : 60116,\n v = b ? Symbol.for(\"react.block\") : 60121,\n w = b ? Symbol.for(\"react.fundamental\") : 60117,\n x = b ? Symbol.for(\"react.responder\") : 60118,\n y = b ? Symbol.for(\"react.scope\") : 60119;\n\nfunction z(a) {\n if (\"object\" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return \"object\" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return \"string\" === typeof a || \"function\" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || \"object\" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;","export default function (d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {\n data: d\n },\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j; // If the tree is empty, initialize the root as a leaf.\n\n if (!node) return tree._root = leaf, tree; // Find the existing leaf for the new point, or add it.\n\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n } // Is the new point is exactly coincident with the existing point?\n\n\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; // Otherwise, split the leaf node until the old and new point are separated.\n\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | xp >= xm));\n\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d,\n i,\n n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity; // Compute the points and their extent.\n\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n } // If there were no (valid) points, abort.\n\n\n if (x0 > x1 || y0 > y1) return this; // Expand the tree to cover the new points.\n\n this.cover(x0, y0).cover(x1, y1); // Add the new points.\n\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}","export default function (x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1; // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n } // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | x < x0;\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n\n switch (i) {\n case 0:\n x1 = x0 + z, y1 = y0 + z;\n break;\n\n case 1:\n x0 = x1 - z, y1 = y0 + z;\n break;\n\n case 2:\n x1 = x0 + z, y0 = y1 - z;\n break;\n\n case 3:\n x0 = x1 - z, y0 = y1 - z;\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}","export default function (node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}","export function defaultX(d) {\n return d[0];\n}\nexport default function (_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}","export function defaultY(d) {\n return d[1];\n}\nexport default function (_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}","import tree_add, { addAll as tree_addAll } from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, { removeAll as tree_removeAll } from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, { defaultX } from \"./x.js\";\nimport tree_y, { defaultY } from \"./y.js\";\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {\n data: leaf.data\n },\n next = copy;\n\n while (leaf = leaf.next) next = next.next = {\n data: leaf.data\n };\n\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function () {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n if (!node) return copy;\n if (!node.length) return copy._root = leaf_copy(node), copy;\n nodes = [{\n source: node,\n target: copy._root = new Array(4)\n }];\n\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({\n source: child,\n target: node.target[i] = new Array(4)\n });else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;","export default function () {\n var data = [];\n this.visit(function (node) {\n if (!node.length) do data.push(node.data); while (node = node.next);\n });\n return data;\n}","export default function (_) {\n return arguments.length ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}","import Quad from \"./quad.js\";\nexport default function (x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node) || (x1 = q.x0) > x3 || (y1 = q.y0) > y3 || (x2 = q.x1) < x0 || (y2 = q.y1) < y0) continue; // Bisect the current quadrant.\n\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n quads.push(new Quad(node[3], xm, ym, x2, y2), new Quad(node[2], x1, ym, xm, y2), new Quad(node[1], xm, y1, x2, ym), new Quad(node[0], x1, y1, xm, ym)); // Visit the closest quadrant first.\n\n if (i = (y >= ym) << 1 | x >= xm) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n } // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}","export default function (d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j; // If the tree is empty, initialize the root as a leaf.\n\n if (!node) return this; // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[i + 1 & 3] || parent[i + 2 & 3] || parent[i + 3 & 3]) retainer = parent, j = i;\n } // Find the point to remove.\n\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n\n if (next = node.next) delete node.next; // If there are multiple coincident points, remove just the point.\n\n if (previous) return next ? previous.next = next : delete previous.next, this; // If this is the root point, remove it.\n\n if (!parent) return this._root = next, this; // Remove this leaf.\n\n next ? parent[i] = next : delete parent[i]; // If the parent now contains exactly one leaf, collapse superfluous parents.\n\n if ((node = parent[0] || parent[1] || parent[2] || parent[3]) && node === (parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) {\n if (retainer) retainer[j] = node;else this._root = node;\n }\n\n return this;\n}\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n\n return this;\n}","export default function () {\n return this._root;\n}","export default function () {\n var size = 0;\n this.visit(function (node) {\n if (!node.length) do ++size; while (node = node.next);\n });\n return size;\n}","import Quad from \"./quad.js\";\nexport default function (callback) {\n var quads = [],\n q,\n node = this._root,\n child,\n x0,\n y0,\n x1,\n y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2,\n ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n\n return this;\n}","import Quad from \"./quad.js\";\nexport default function (callback) {\n var quads = [],\n next = [],\n q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n\n while (q = quads.pop()) {\n var node = q.node;\n\n if (node.length) {\n var child,\n x0 = q.x0,\n y0 = q.y0,\n x1 = q.x1,\n y1 = q.y1,\n xm = (x0 + x1) / 2,\n ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n\n next.push(q);\n }\n\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n\n return this;\n}"],"sourceRoot":""}