@gmaps-kit/react
Version:
React components and hooks for Google Maps with gmaps-kit - useGeocoding, useDirections, usePlaces, useMarkers, useStreetView and more
2 lines • 25.5 kB
JavaScript
import{useState as K,useEffect as Me}from"react";import{loadGoogleMaps as ye,isGoogleMapsLoaded as ve}from"@gmaps-kit/core";function Re(n){let[g,e]=K(!1),[d,u]=K(!1),[f,m]=K(null),l=async()=>{if(!(g||d)){u(!0),m(null);try{await ye({apiKey:n.apiKey,libraries:n.libraries||["places","geometry"]}),e(!0),n.onLoad?.()}catch(a){let s=a instanceof Error?a:new Error("Failed to load Google Maps");m(s),n.onError?.(s)}finally{u(!1)}}};return Me(()=>{ve()&&e(!0)},[]),{isLoaded:g,isLoading:d,error:f,load:l}}import{useState as A,useEffect as he,useCallback as U,useMemo as Pe}from"react";import{createMap as xe,getMapCenter as we,setMapCenter as ke,getMapZoom as be,setMapZoom as Ee,panTo as Se,fitMapToMarkers as Ce}from"@gmaps-kit/core";function _(n,g={}){let[e,d]=A(null),[u,f]=A(!1),[m,l]=A(null),[a,s]=A(null),o=Pe(()=>g,[g.center?.lat,g.center?.lng,g.zoom,g.mapTypeId,g.mapId,g.onMapReady]),r=U(()=>{if(!(!n||e))try{let L={center:o.center||{lat:40.7128,lng:-74.006},zoom:o.zoom||10,mapTypeId:o.mapTypeId,mapId:o.mapId},M=xe(n,L);d(M),f(!0),l(we(M.map)),s(be(M.map)),o.onMapReady?.(M)}catch(L){console.error("Failed to initialize map:",L)}},[n,o,e]);he(()=>{r()},[r]);let t=U(L=>{e&&(ke(e.map,L),l(L))},[e]),c=U(L=>{e&&(Ee(e.map,L),s(L))},[e]),i=U((L,M)=>{e&&(Se(e.map,L,M),l(L),M!==void 0&&s(M))},[e]),p=U(L=>{e&&Ce(e.map,L)},[e]);return{mapInstance:e,isReady:u,center:m,zoom:a,setCenter:t,setZoom:c,panTo:i,fitToMarkers:p}}import{useState as Ie,useCallback as W,useEffect as Te}from"react";import{addMarker as Oe,removeMarker as De,updateMarkerPosition as Ge,updateMarkerContent as Ue,getMarkerPosition as We,setMarkerDraggable as Ne,addMarkerClickListener as He,addMarkerDragListener as qe,addMarkerDragEndListener as Ae}from"@gmaps-kit/core";function $(n){let[g,e]=Ie([]),d=W(a=>{if(!n)throw new Error("Map instance is not available");let s=Oe(n.map,{position:a.position,title:a.title,content:a.content,draggable:a.draggable,clickable:a.clickable,zIndex:a.zIndex});return a.onClick&&He(s,a.onClick),a.onDrag&&qe(s,a.onDrag),a.onDragEnd&&Ae(s,a.onDragEnd),e(o=>[...o,s]),s},[n]),u=W(a=>{De(a),e(s=>s.filter(o=>o!==a))},[]),f=W((a,s)=>{s.position&&Ge(a,s.position),s.content&&Ue(a,s.content),s.draggable!==void 0&&Ne(a,s.draggable)},[]),m=W(()=>{g.forEach(a=>{a.map=null}),e([])},[g]),l=W(a=>We(a),[]);return Te(()=>{n||e([])},[n]),{markers:g,addMarker:d,removeMarker:u,updateMarker:f,clearAllMarkers:m,getMarkerPosition:l}}import{useState as ie,useCallback as b}from"react";import{geocodeAsync as B,reverseGeocodeAsync as Be,geocodeFirst as Ze,reverseGeocodeFirst as ze,geocodeWithComponents as Ve,geocodeWithBounds as Fe,geocodeWithRegion as Ke}from"@gmaps-kit/core";function _e(){let[n,g]=ie(!1),[e,d]=ie(null),u=b(async t=>{g(!0),d(null);try{return await t()}catch(c){let i=c instanceof Error?c:new Error("Geocoding operation failed");throw d(i),i}finally{g(!1)}},[]),f=b(async t=>u(async()=>(await B(t)).map(i=>({address:i.address,location:i.location,placeId:i.placeId}))),[u]),m=b(async t=>u(async()=>{let c=await Ze(t);return c?{address:c.address,location:c.location,placeId:c.placeId}:null}),[u]),l=b(async t=>u(async()=>(await Be(t)).map(i=>({address:i.address,location:i.location,placeId:i.placeId}))),[u]),a=b(async t=>u(async()=>{let c=await ze(t);return c?{address:c.address,location:c.location,placeId:c.placeId}:null}),[u]),s=b(async(t,c)=>u(async()=>(await Ve(t,c,()=>{}),(await B(t)).map(p=>({address:p.address,location:p.location,placeId:p.placeId})))),[u]),o=b(async(t,c)=>u(async()=>(await Fe(t,c,()=>{}),(await B(t)).map(p=>({address:p.address,location:p.location,placeId:p.placeId})))),[u]),r=b(async(t,c)=>u(async()=>(await Ke(t,c,()=>{}),(await B(t)).map(p=>({address:p.address,location:p.location,placeId:p.placeId})))),[u]);return{isLoading:n,error:e,geocode:f,geocodeFirst:m,reverseGeocode:l,reverseGeocodeFirst:a,geocodeWithComponents:s,geocodeWithBounds:o,geocodeWithRegion:r}}import{useCallback as w,useEffect as $e,useMemo as Qe,useRef as le,useState as je}from"react";import{PlacesClient as Je}from"@gmaps-kit/core";function Xe(n){let{apiKey:g,baseUrl:e,fetchImpl:d,language:u,region:f,requestInit:m}=n,l=Qe(()=>new Je({apiKey:g,baseUrl:e,fetchImpl:d,language:u,region:f,requestInit:m}),[g,e,d,u,f,m]),a=le(!0);$e(()=>()=>{a.current=!1},[]);let[s,o]=je({isLoading:!1,lastOperation:null,error:null}),r=le(0),t=w(async(y,x)=>{r.current+=1,a.current&&o(q=>({isLoading:!0,lastOperation:q.lastOperation,error:null}));let se=null;try{return await x()}catch(q){throw se=q,q}finally{r.current=Math.max(0,r.current-1),a.current&&o({isLoading:r.current>0,lastOperation:y,error:se})}},[]),c=w(y=>t("findPlaceFromText",()=>l.findPlaceFromText(y)),[l,t]),i=w(y=>t("textSearch",()=>l.textSearch(y)),[l,t]),p=w(y=>t("nearbySearch",()=>l.nearbySearch(y)),[l,t]),L=w(y=>t("placeDetails",()=>l.placeDetails(y)),[l,t]),M=w(y=>t("autocomplete",()=>l.autocomplete(y)),[l,t]),R=w(y=>t("queryAutocomplete",()=>l.queryAutocomplete(y)),[l,t]),v=w((y,x)=>t("textSearchNextPage",()=>l.textSearchNextPage(y,x)),[l,t]),P=w((y,x)=>t("nearbySearchNextPage",()=>l.nearbySearchNextPage(y,x)),[l,t]),C=w((y,x)=>l.buildPhotoUrl(y,x),[l]);return{client:l,isLoading:s.isLoading,error:s.error,lastOperation:s.lastOperation,findPlaceFromText:c,textSearch:i,nearbySearch:p,placeDetails:L,autocomplete:M,queryAutocomplete:R,textSearchNextPage:v,nearbySearchNextPage:P,buildPhotoUrl:C}}import{useCallback as E,useEffect as Ye,useMemo as et,useRef as ce,useState as tt}from"react";import{PlacesNewClient as ot}from"@gmaps-kit/core";function rt(n){let{apiKey:g,baseUrl:e,fetchImpl:d,languageCode:u,regionCode:f,requestInit:m}=n,l=et(()=>new ot({apiKey:g,baseUrl:e,fetchImpl:d,languageCode:u,regionCode:f,requestInit:m}),[g,e,d,u,f,m]),a=ce(!0);Ye(()=>()=>{a.current=!1},[]);let[s,o]=tt({isLoading:!1,lastOperation:null,error:null}),r=ce(0),t=E(async(v,P)=>{r.current+=1,a.current&&o(y=>({isLoading:!0,lastOperation:y.lastOperation,error:null}));let C=null;try{return await P()}catch(y){throw C=y,y}finally{r.current=Math.max(0,r.current-1),a.current&&o({isLoading:r.current>0,lastOperation:v,error:C})}},[]),c=E(v=>t("textSearch",()=>l.textSearch(v)),[l,t]),i=E(v=>t("nearbySearch",()=>l.nearbySearch(v)),[l,t]),p=E(v=>t("placeDetails",()=>l.placeDetails(v)),[l,t]),L=E(v=>t("autocomplete",()=>l.autocomplete(v)),[l,t]),M=E(v=>t("getPhoto",()=>l.getPhoto(v)),[l,t]),R=E((v,P)=>l.buildPhotoUrl(v,P),[l]);return{client:l,isLoading:s.isLoading,error:s.error,lastOperation:s.lastOperation,textSearch:c,nearbySearch:i,placeDetails:p,autocomplete:L,getPhoto:M,buildPhotoUrl:R}}import{useCallback as Q,useEffect as at,useMemo as nt,useRef as st,useState as it}from"react";import{GeocodingClient as lt}from"@gmaps-kit/core";function ct(n){let{apiKey:g,baseUrl:e,fetchImpl:d,language:u,region:f,channel:m,timeoutMs:l,requestInit:a,retryConfig:s}=n,o=nt(()=>new lt({apiKey:g,baseUrl:e,fetchImpl:d,language:u,region:f,channel:m,timeoutMs:l,requestInit:a,retryConfig:s}),[g,e,d,u,f,m,l,a,s?.retries,s?.delayMs,s?.backoffFactor,s?.retryStatuses&&s.retryStatuses.join(",")]),r=st(!0);at(()=>()=>{r.current=!1},[]);let[t,c]=it({isLoading:!1,lastOperation:null,error:null}),i=Q(async(M,R)=>{r.current&&c({isLoading:!0,lastOperation:M,error:null});try{let v=await R();return r.current&&c({isLoading:!1,lastOperation:M,error:null}),v}catch(v){throw r.current&&c({isLoading:!1,lastOperation:M,error:v}),v}},[]),p=Q(M=>i("geocode",()=>o.geocode(M)),[o,i]),L=Q(M=>i("reverseGeocode",()=>o.reverseGeocode(M)),[o,i]);return{client:o,isLoading:t.isLoading,error:t.error,lastOperation:t.lastOperation,geocode:p,reverseGeocode:L}}import{useCallback as S,useEffect as gt,useMemo as ut,useState as ge}from"react";import{createStreetViewPanorama as pt,setStreetViewPosition as mt,getStreetViewPosition as dt,setStreetViewPov as ft,getStreetViewPov as Lt,setStreetViewVisibility as Mt,isStreetViewVisible as yt}from"@gmaps-kit/core";function vt(n,g={}){let[e,d]=ge(null),[u,f]=ge(!1),m=ut(()=>g.eventHandlers,[g.eventHandlers]),l=S(()=>{if(!(!n||e))try{let i=pt(n,g,m);d(i),f(!0)}catch(i){console.error("Failed to initialize Street View panorama:",i)}},[n,e,g,m]);gt(()=>{l()},[l]);let a=S(i=>{e&&mt(e.panorama,i)},[e]),s=S(()=>e?dt(e.panorama):null,[e]),o=S(i=>{e&&ft(e.panorama,i)},[e]),r=S(()=>e?Lt(e.panorama):null,[e]),t=S(i=>{e&&Mt(e.panorama,i)},[e]),c=S(()=>e?yt(e.panorama):!1,[e]);return{instance:e,isReady:u,setPosition:a,getPosition:s,setPov:o,getPov:r,setVisible:t,isVisible:c}}import{useState as Z,useCallback as I,useEffect as Rt}from"react";function ht(){let[n]=Z(!1),[g]=Z(null),[e,d]=Z(null),[u,f]=Z(!1),m=I(t=>{let c=new google.maps.BicyclingLayer;return t?.map&&(c.setMap(t.map),f(!0)),d(c),c},[]),l=I(()=>{e&&(e.setMap(e.getMap()),f(!0))},[e]),a=I(()=>{e&&(e.setMap(null),f(!1))},[e]),s=I(()=>{u?a():l()},[u,l,a]),o=I(()=>{if(e){let t=e.getMap();t&&(e.setMap(null),setTimeout(()=>{e.setMap(t)},100))}},[e]),r=I(()=>{e&&(e.setMap(null),d(null),f(!1))},[e]);return Rt(()=>()=>{e&&e.setMap(null)},[e]),{isLoading:n,error:g,bicyclingLayer:e,isVisible:u,createBicyclingLayer:m,showBicycling:l,hideBicycling:a,toggleBicycling:s,refreshBicycling:o,removeBicyclingLayer:r}}import{useState as ue,useCallback as k,useEffect as Pt}from"react";function pe(){return typeof google.maps.MarkerClusterer<"u"}function xt(){let[n,g]=ue(null),[e,d]=ue(!1),u=k((c,i,p={})=>{if(!pe())throw new Error("MarkerClusterer library is not loaded. Please include the markerclusterer library from https://github.com/googlemaps/js-markerclusterer.");let L={gridSize:p.gridSize||60,maxZoom:p.maxZoom||15,minimumClusterSize:p.minimumClusterSize||2,averageCenter:p.averageCenter||!1,ignoreHidden:p.ignoreHidden||!1,enableRetinaIcons:p.enableRetinaIcons||!1,styles:p.styles,imagePath:p.imagePath,imageExtension:p.imageExtension||"png",zoomOnClick:p.zoomOnClick!==!1},M=new google.maps.MarkerClusterer(c.map,i,L);return g(M),d(!0),M},[]),f=k(c=>{if(!n)throw new Error("Clusterer is not initialized");n.addMarkers(c)},[n]),m=k(c=>{if(!n)throw new Error("Clusterer is not initialized");n.removeMarkers(c)},[n]),l=k(()=>{if(!n)throw new Error("Clusterer is not initialized");n.clearMarkers()},[n]),a=k(()=>{if(!n)throw new Error("Clusterer is not initialized");n.redraw()},[n]),s=k(()=>n,[n]),o=k(()=>n?n.getTotalMarkers():0,[n]),r=k(()=>n?n.getTotalClusters():0,[n]),t=k(()=>n?n.getMarkers():[],[n]);return Pt(()=>()=>{n&&n.clearMarkers()},[n]),{clusterer:n,isReady:e,createClusterer:u,addMarkersToCluster:f,removeMarkersFromCluster:m,clearCluster:l,redrawCluster:a,getClusterer:s,getTotalMarkers:o,getTotalClusters:r,getMarkers:t}}import{useState as j,useCallback as N}from"react";import{getTotalDistance as wt,getTotalDuration as kt,getDirectionsBounds as bt,fitMapToRoute as Et,createDirectionsRenderer as St}from"@gmaps-kit/core";function Ct(){let[n,g]=j(!1),[e,d]=j(null),[u,f]=j(null),m=N(async r=>{g(!0),d(null);try{return await r()}catch(t){let c=t instanceof Error?t:new Error("Directions operation failed");throw d(c),c}finally{g(!1)}},[]),l=N(async r=>m(async()=>{let t={origin:r.origin,destination:r.destination,travelMode:r.travelMode||google.maps.TravelMode.DRIVING,waypoints:r.waypoints,optimizeWaypoints:r.optimizeWaypoints,avoidHighways:r.avoidHighways,avoidTolls:r.avoidTolls,...r.region&&{region:r.region}},c=new google.maps.DirectionsService,i=await new Promise((P,C)=>{c.route(t,(y,x)=>{x===google.maps.DirectionsStatus.OK&&y?P(y):C(new Error(`Directions request failed: ${x}`))})}),p=wt(i),L=kt(i),M=bt(i),v={directions:i,distance:p,duration:L,bounds:M,renderer:null};return f(v),v}),[m]),a=N(r=>{if(!u?.directions)throw new Error("No directions result available");St(r).setDirections(u.directions)},[u]),s=N(()=>{console.log("Clear directions from map - renderer needs to be passed")},[]),o=N(r=>{if(!u?.directions)throw new Error("No directions result available");Et(r.map,u.directions)},[u]);return{isLoading:n,error:e,result:u,getDirections:l,renderDirections:a,clearDirectionsFromMap:s,fitMapToRoute:o}}import{useState as J,useCallback as X}from"react";import{getDistanceMatrixAsync as It,createDistanceMatrixService as Tt}from"@gmaps-kit/core";function Ot(){let[n,g]=J(!1),[e,d]=J(null),[u,f]=J(null),m=X(async s=>{g(!0),d(null);try{return await s()}catch(o){let r=o instanceof Error?o:new Error("Distance matrix operation failed");throw d(r),r}finally{g(!1)}},[]),l=X(async s=>m(async()=>{let r={results:await It({origins:s.origins,destinations:s.destinations,travelMode:s.travelMode,avoidHighways:s.avoidHighways,avoidTolls:s.avoidTolls,unitSystem:s.unitSystem}),origins:s.origins,destinations:s.destinations,service:null};return f(r),r}),[m]),a=X(s=>Tt(s),[]);return{isLoading:n,error:e,result:u,getDistanceMatrix:l,createService:a}}import{useState as Y,useCallback as z}from"react";function Dt(){let[n,g]=Y(!1),[e,d]=Y(null),[u,f]=Y(null),m=z(async o=>{g(!0),d(null);try{return await o()}catch(r){let t=r instanceof Error?r:new Error("Elevation operation failed");throw d(t),t}finally{g(!1)}},[]),l=z(async o=>m(async()=>{let r=new google.maps.ElevationService,t={locations:o.locations},i=(await new Promise((p,L)=>{r.getElevationForLocations(t,(M,R)=>{R===google.maps.ElevationStatus.OK&&M?p(M):L(new Error(`Elevation request failed: ${R}`))})})).map(p=>({elevation:p.elevation,resolution:p.resolution,location:{lat:p.location?.lat()||0,lng:p.location?.lng()||0}}));return f(i),i}),[m]),a=z(async o=>m(async()=>{if(!o.path)throw new Error("Path is required for elevation along path");let r=new google.maps.ElevationService,t={path:o.path,samples:o.samples||256},i=(await new Promise((p,L)=>{r.getElevationAlongPath(t,(M,R)=>{R===google.maps.ElevationStatus.OK&&M?p(M):L(new Error(`Elevation request failed: ${R}`))})})).map(p=>({elevation:p.elevation,resolution:p.resolution,location:{lat:p.location?.lat()||0,lng:p.location?.lng()||0}}));return f(i),i}),[m]),s=z(()=>new google.maps.ElevationService,[]);return{isLoading:n,error:e,results:u,getElevationForLocations:l,getElevationAlongPath:a,createElevationService:s}}import{useState as ee,useCallback as h}from"react";function Gt(){let[n]=ee(!1),[g]=ee(null),[e]=ee(null),d=h((i,p)=>google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(i.lat,i.lng),new google.maps.LatLng(p.lat,p.lng)),[]),u=h((i,p)=>google.maps.geometry.spherical.computeHeading(new google.maps.LatLng(i.lat,i.lng),new google.maps.LatLng(p.lat,p.lng)),[]),f=h((i,p,L)=>{let M=google.maps.geometry.spherical.computeOffset(new google.maps.LatLng(i.lat,i.lng),p,L);return{lat:M.lat(),lng:M.lng()}},[]),m=h((i,p,L)=>{let M=google.maps.geometry.spherical.computeOffsetOrigin(new google.maps.LatLng(i.lat,i.lng),p,L);if(!M)throw new Error("Could not compute offset origin");return{lat:M.lat(),lng:M.lng()}},[]),l=h(i=>{let p=i.map(L=>new google.maps.LatLng(L.lat,L.lng));return google.maps.geometry.spherical.computeLength(p)},[]),a=h(i=>{let p=i.map(L=>new google.maps.LatLng(L.lat,L.lng));return google.maps.geometry.spherical.computeArea(p)},[]),s=h(i=>{if(i.length===0)return new google.maps.LatLngBounds;let p=new google.maps.LatLngBounds;return i.forEach(L=>{p.extend(new google.maps.LatLng(L.lat,L.lng))}),p},[]),o=h(i=>{if(i.length===0)return{lat:0,lng:0};if(i.length===1)return i[0];let p=i.reduce((M,R)=>M+R.lat,0)/i.length,L=i.reduce((M,R)=>M+R.lng,0)/i.length;return{lat:p,lng:L}},[]),r=h((i,p,L)=>{let M=new google.maps.LatLng(i.lat,i.lng),R=p.map(P=>new google.maps.LatLng(P.lat,P.lng)),v=new google.maps.Polyline({path:R});return google.maps.geometry.poly.isLocationOnEdge(M,v,L)},[]),t=h(i=>{let p=i.map(L=>new google.maps.LatLng(L.lat,L.lng));return google.maps.geometry.encoding.encodePath(p)},[]),c=h(i=>google.maps.geometry.encoding.decodePath(i).map(L=>({lat:L.lat(),lng:L.lng()})),[]);return{isLoading:n,error:g,results:e,computeDistanceBetween:d,computeHeading:u,computeOffset:f,computeOffsetOrigin:m,computeLength:l,computeArea:a,computeBounds:s,computeCenter:o,isLocationOnEdge:r,encodePath:t,decodePath:c,spherical:google.maps.geometry.spherical,encoding:google.maps.geometry.encoding,poly:google.maps.geometry.poly}}import{useState as te,useCallback as T,useEffect as Ut}from"react";function Wt(){let[n]=te(!1),[g]=te(null),[e,d]=te(null),u=T(o=>{try{let t={data:o.data.map(i=>({location:new google.maps.LatLng(i.location.lat,i.location.lng),weight:i.weight||1})),map:o.map,radius:o.radius||20,opacity:o.opacity||.6,maxIntensity:o.maxIntensity||1,gradient:o.gradient,dissipating:o.dissipating!==!1},c=new google.maps.visualization.HeatmapLayer(t);return d(c),c}catch(r){throw r instanceof Error?r:new Error("Heatmap creation failed")}},[]),f=T(o=>{if(e){let r=o.map(t=>({location:new google.maps.LatLng(t.location.lat,t.location.lng),weight:t.weight||1}));e.setData(r)}},[e]),m=T(o=>{e&&(o.radius!==void 0&&e.set("radius",o.radius),o.opacity!==void 0&&e.set("opacity",o.opacity),o.maxIntensity!==void 0&&e.set("maxIntensity",o.maxIntensity),o.gradient!==void 0&&e.set("gradient",o.gradient),o.dissipating!==void 0&&e.set("dissipating",o.dissipating))},[e]),l=T(o=>{if(e)if(o)e.setMap(o);else{let r=e.getMap();r&&e.setMap(r)}},[e]),a=T(()=>{e&&e.setMap(null)},[e]),s=T(()=>{e&&(e.setMap(null),d(null))},[e]);return Ut(()=>()=>{e&&e.setMap(null)},[e]),{isLoading:n,error:g,heatmapLayer:e,createHeatmap:u,updateHeatmapData:f,setHeatmapOptions:m,showHeatmap:l,hideHeatmap:a,removeHeatmap:s}}import{useState as me,useCallback as O,useEffect as Nt}from"react";import{createInfoWindow as Ht,openInfoWindow as qt,closeInfoWindow as H}from"@gmaps-kit/core";function At(){let[n,g]=me([]),[e,d]=me(null),u=O(o=>{let r=typeof o.content=="string"?o.content:o.content.outerHTML,c={infoWindow:Ht({content:r,position:o.position,maxWidth:o.maxWidth,pixelOffset:o.pixelOffset,disableAutoPan:!1}),id:`infowindow-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,isOpen:!1,content:o.content,position:o.position};return g(i=>[...i,c]),c},[]),f=O((o,r,t)=>{if(!t)throw new Error("Map instance is required to open InfoWindow");if(e&&H(e.infoWindow),r)qt(o.infoWindow,r,t.map);else if(o.position)o.infoWindow.setPosition(o.position),o.infoWindow.open(t.map);else throw new Error("Either marker or position must be provided");g(c=>c.map(i=>i.id===o.id?{...i,isOpen:!0}:{...i,isOpen:!1})),d({...o,isOpen:!0})},[e]),m=O(o=>{H(o.infoWindow),g(r=>r.map(t=>t.id===o.id?{...t,isOpen:!1}:t)),e?.id===o.id&&d(null)},[e]),l=O(()=>{n.forEach(o=>{H(o.infoWindow)}),g(o=>o.map(r=>({...r,isOpen:!1}))),d(null)},[n]),a=O((o,r)=>{o.infoWindow.setContent(r),g(t=>t.map(c=>c.id===o.id?{...c,content:r}:c)),e?.id===o.id&&d({...o,content:r})},[e]),s=O(o=>{o.isOpen&&H(o.infoWindow),g(r=>r.filter(t=>t.id!==o.id)),e?.id===o.id&&d(null)},[e]);return Nt(()=>()=>{n.forEach(o=>{o.isOpen&&H(o.infoWindow)})},[n]),{infoWindows:n,activeInfoWindow:e,createInfoWindowInstance:u,openInfoWindowInstance:f,closeInfoWindowInstance:m,closeAllInfoWindows:l,updateInfoWindowContent:a,removeInfoWindow:s}}import{useState as de,useCallback as oe,useEffect as Bt}from"react";function Zt(){let[n,g]=de({isDragging:!1,isZooming:!1,lastClickPosition:null,lastRightClickPosition:null,currentZoom:null,currentCenter:null,currentBounds:null}),[e,d]=de([]),u=oe((l,a)=>{let s=l.map,o=[];if(a.onClick){let r=s.addListener("click",t=>{t.latLng&&g(c=>({...c,lastClickPosition:{lat:t.latLng.lat(),lng:t.latLng.lng()}})),a.onClick?.(t)});o.push(r)}if(a.onRightClick){let r=s.addListener("rightclick",t=>{t.latLng&&g(c=>({...c,lastRightClickPosition:{lat:t.latLng.lat(),lng:t.latLng.lng()}})),a.onRightClick?.(t)});o.push(r)}if(a.onDoubleClick){let r=s.addListener("dblclick",a.onDoubleClick);o.push(r)}if(a.onDrag){let r=s.addListener("drag",()=>{g(t=>({...t,isDragging:!0})),a.onDrag?.()});o.push(r)}if(a.onDragStart){let r=s.addListener("dragstart",()=>{g(t=>({...t,isDragging:!0})),a.onDragStart?.()});o.push(r)}if(a.onDragEnd){let r=s.addListener("dragend",()=>{g(t=>({...t,isDragging:!1})),a.onDragEnd?.()});o.push(r)}if(a.onZoomChanged){let r=s.addListener("zoom_changed",()=>{g(t=>({...t,currentZoom:s.getZoom()||null,isZooming:!0})),a.onZoomChanged?.()});o.push(r)}if(a.onCenterChanged){let r=s.addListener("center_changed",()=>{let t=s.getCenter();g(c=>({...c,currentCenter:t?{lat:t.lat(),lng:t.lng()}:null})),a.onCenterChanged?.()});o.push(r)}if(a.onBoundsChanged){let r=s.addListener("bounds_changed",()=>{g(t=>({...t,currentBounds:s.getBounds()||null})),a.onBoundsChanged?.()});o.push(r)}if(a.onIdle){let r=s.addListener("idle",()=>{g(t=>({...t,isDragging:!1,isZooming:!1})),a.onIdle?.()});o.push(r)}if(a.onTilesLoaded){let r=s.addListener("tilesloaded",a.onTilesLoaded);o.push(r)}if(a.onHeadingChanged){let r=s.addListener("heading_changed",a.onHeadingChanged);o.push(r)}if(a.onTiltChanged){let r=s.addListener("tilt_changed",a.onTiltChanged);o.push(r)}d(r=>[...r,...o])},[]),f=oe(l=>{e.forEach(a=>{google.maps.event.removeListener(a)}),d([])},[e]),m=oe(l=>{let a=l.map,s=a.getCenter(),o=a.getBounds(),r=a.getZoom();return{isDragging:!1,isZooming:!1,lastClickPosition:n.lastClickPosition,lastRightClickPosition:n.lastRightClickPosition,currentZoom:r||null,currentCenter:s?{lat:s.lat(),lng:s.lng()}:null,currentBounds:o||null}},[n.lastClickPosition,n.lastRightClickPosition]);return Bt(()=>()=>{e.forEach(l=>{google.maps.event.removeListener(l)})},[e]),{eventState:n,addEventListeners:u,removeEventListeners:f,getCurrentMapState:m}}import{useState as re,useCallback as ae}from"react";function zt(){let[n,g]=re(!1),[e,d]=re(null),[u,f]=re(null),m=ae(async s=>{g(!0),d(null);try{return await s()}catch(o){let r=o instanceof Error?o:new Error("Max Zoom operation failed");throw d(r),r}finally{g(!1)}},[]),l=ae(async s=>m(async()=>{let o=new google.maps.MaxZoomService,t={maxZoom:(await new Promise((c,i)=>{o.getMaxZoomAtLatLng(s.location,p=>{p&&p.status===google.maps.MaxZoomStatus.OK?c(p):i(new Error(`Max Zoom request failed: ${p?.status||"Unknown error"}`))})})).zoom,location:{lat:s.location.lat,lng:s.location.lng}};return f(t),t}),[m]),a=ae(()=>new google.maps.MaxZoomService,[]);return{isLoading:n,error:e,result:u,getMaxZoom:l,createMaxZoomService:a}}import{useState as V,useCallback as D,useEffect as Vt}from"react";function Ft(){let[n]=V(!1),[g]=V(null),[e,d]=V(null),[u,f]=V(!1),m=D(t=>{try{let c=new google.maps.TrafficLayer;return t?.map&&(c.setMap(t.map),f(!0)),d(c),c}catch(c){throw c instanceof Error?c:new Error("Traffic layer creation failed")}},[]),l=D(()=>{e&&(e.setMap(e.getMap()),f(!0))},[e]),a=D(()=>{e&&(e.setMap(null),f(!1))},[e]),s=D(()=>{u?a():l()},[u,l,a]),o=D(()=>{if(e){let t=e.getMap();t&&(e.setMap(null),setTimeout(()=>{e.setMap(t)},100))}},[e]),r=D(()=>{e&&(e.setMap(null),d(null),f(!1))},[e]);return Vt(()=>()=>{e&&e.setMap(null)},[e]),{isLoading:n,error:g,trafficLayer:e,isVisible:u,createTrafficLayer:m,showTraffic:l,hideTraffic:a,toggleTraffic:s,refreshTraffic:o,removeTrafficLayer:r}}import{useState as F,useCallback as G,useEffect as Kt}from"react";function _t(){let[n]=F(!1),[g]=F(null),[e,d]=F(null),[u,f]=F(!1),m=G(t=>{try{let c=new google.maps.TransitLayer;return t?.map&&(c.setMap(t.map),f(!0)),d(c),c}catch(c){throw c instanceof Error?c:new Error("Transit layer creation failed")}},[]),l=G(()=>{e&&(e.setMap(e.getMap()),f(!0))},[e]),a=G(()=>{e&&(e.setMap(null),f(!1))},[e]),s=G(()=>{u?a():l()},[u,l,a]),o=G(()=>{if(e){let t=e.getMap();t&&(e.setMap(null),setTimeout(()=>{e.setMap(t)},100))}},[e]),r=G(()=>{e&&(e.setMap(null),d(null),f(!1))},[e]);return Kt(()=>()=>{e&&e.setMap(null)},[e]),{isLoading:n,error:g,transitLayer:e,isVisible:u,createTransitLayer:m,showTransit:l,hideTransit:a,toggleTransit:s,refreshTransit:o,removeTransitLayer:r}}import{useEffect as $t,useRef as Qt}from"react";import{jsx as Jt}from"react/jsx-runtime";var jt=({id:n,className:g,style:e,children:d,onMapReady:u,...f})=>{let m=Qt(null);return _(n,{...f,onMapReady:u}),$t(()=>{m.current&&!m.current.id&&(m.current.id=n)},[n]),Jt("div",{ref:m,id:n,className:g,style:e,children:d})};import{useEffect as Xt,useRef as Yt}from"react";var eo=({mapInstance:n,onMarkerCreated:g,...e})=>{let{addMarker:d,removeMarker:u}=$(n),f=Yt(null);return Xt(()=>{if(!n)return;f.current&&u(f.current);let m=d(e);return f.current=m,g?.(m),()=>{f.current&&(u(f.current),f.current=null)}},[n,e.position.lat,e.position.lng,e.title,e.content,e.draggable,e.clickable,e.zIndex,e.onClick,e.onDrag,e.onDragEnd,d,u,g]),null};import{useEffect as ne,useRef as to}from"react";import{createInfoWindow as oo,openInfoWindow as fe,closeInfoWindow as Le}from"@gmaps-kit/core";var ro=({mapInstance:n,marker:g,content:e,position:d,isOpen:u=!1,onClose:f})=>{let m=to(null);return ne(()=>{if(n){if(!m.current){let l=oo({content:typeof e=="string"?e:""});m.current=l,l.addListener("closeclick",()=>{f?.()})}m.current&&m.current.setContent(typeof e=="string"?e:"")}},[e,f]),ne(()=>{if(!(!n||!m.current))if(u){if(g)fe(m.current,g,n.map);else if(d){let l=new google.maps.marker.AdvancedMarkerElement({position:d,map:n.map});fe(m.current,l,n.map),setTimeout(()=>{l.map=null},100)}}else Le(m.current)},[n,g,d,u]),ne(()=>()=>{m.current&&Le(m.current)},[]),null};export*from"@gmaps-kit/core";export{ro as InfoWindow,jt as Map,eo as Marker,pe as isMarkerClustererLoaded,ht as useBicycling,xt as useClustering,Ct as useDirections,Ot as useDistanceMatrix,Dt as useElevation,_e as useGeocoding,ct as useGeocodingService,Gt as useGeometry,Re as useGoogleMaps,Wt as useHeatmap,At as useInfoWindows,_ as useMap,Zt as useMapEvents,$ as useMarkers,zt as useMaxZoom,Xe as usePlaces,rt as usePlacesNew,vt as useStreetView,Ft as useTraffic,_t as useTransit};
//# sourceMappingURL=index.mjs.map