{"version":3,"sources":["../../components/ui/map/adapters/google.ts"],"names":["GOOGLE_LIGHT_STYLES","GOOGLE_DARK_STYLES","stylesFor","appearance","createGoogleAdapter","container","opts","callbacks","LoaderCtor","mod","err","loader","google","isSat","showZoom","googleCorner","map","b","resolve","markers","coords","zoom","sw","ne","enabled","fopts","list","fbopts","lng","lat","c","id","anchor","element","e","handle","marker","hovered","next"],"mappings":"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","file":"google.mjs","sourcesContent":["import type {\n  AdapterFactory,\n  AdapterInstance,\n  Coords,\n  MarkerHandle,\n} from \"../types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyStyles = any[];\n\nconst GOOGLE_LIGHT_STYLES: AnyStyles = [\n  // Neutral light preset — POIs hidden, transit muted.\n  { featureType: \"poi\", stylers: [{ visibility: \"off\" }] },\n  { featureType: \"transit\", stylers: [{ visibility: \"simplified\" }] },\n];\n\nconst GOOGLE_DARK_STYLES: AnyStyles = [\n  { elementType: \"geometry\", stylers: [{ color: \"#1a1a1a\" }] },\n  { elementType: \"labels.text.stroke\", stylers: [{ color: \"#1a1a1a\" }] },\n  { elementType: \"labels.text.fill\", stylers: [{ color: \"#9ca3af\" }] },\n  { featureType: \"poi\", stylers: [{ visibility: \"off\" }] },\n  {\n    featureType: \"road\",\n    elementType: \"geometry\",\n    stylers: [{ color: \"#262626\" }],\n  },\n  {\n    featureType: \"road\",\n    elementType: \"labels.text.fill\",\n    stylers: [{ color: \"#9ca3af\" }],\n  },\n  {\n    featureType: \"water\",\n    elementType: \"geometry\",\n    stylers: [{ color: \"#0f172a\" }],\n  },\n  {\n    featureType: \"transit\",\n    stylers: [{ visibility: \"simplified\" }, { color: \"#3a3a3a\" }],\n  },\n];\n\nconst stylesFor = (appearance: \"light\" | \"dark\"): AnyStyles =>\n  appearance === \"dark\" ? GOOGLE_DARK_STYLES : GOOGLE_LIGHT_STYLES;\n\nexport const createGoogleAdapter: AdapterFactory = async (\n  container,\n  opts,\n  callbacks\n) => {\n  if (!opts.apiKey) {\n    callbacks.onError({\n      code: \"api-key-missing\",\n      message:\n        '@gradeui/ui Map: provider=\"google\" requires an `apiKey` prop.',\n    });\n    throw new Error(\"google apiKey missing\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let LoaderCtor: any;\n  try {\n    const mod = await import(\"@googlemaps/js-api-loader\");\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    LoaderCtor = (mod as any).Loader ?? (mod as any).default?.Loader;\n  } catch (err) {\n    callbacks.onError({\n      code: \"sdk-missing\",\n      message:\n        '@gradeui/ui Map: `@googlemaps/js-api-loader` is not installed. Run `pnpm add @googlemaps/js-api-loader` to use provider=\"google\".',\n      cause: err,\n    });\n    throw err;\n  }\n\n  const loader = new LoaderCtor({\n    apiKey: opts.apiKey,\n    version: \"weekly\",\n    libraries: [\"maps\", \"marker\"],\n  });\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let google: any;\n  try {\n    google = await loader.load();\n  } catch (err) {\n    callbacks.onError({\n      code: \"provider-init-failed\",\n      message: \"@gradeui/ui Map: Google Maps loader failed.\",\n      cause: err,\n    });\n    throw err;\n  }\n\n  const isSat = opts.appearance === \"satellite\";\n\n  // Tools — shared vocabulary (types.ts). Google's default UI is loud\n  // (map-type switcher, street view, fullscreen), so the Grade contract\n  // disables ALL of it and adds back only the zoom control, docked via\n  // ControlPosition. This also makes Google match the other providers'\n  // quiet chrome instead of its own kitchen sink.\n  const showZoom =\n    opts.tools === \"zoom\" || (opts.tools === \"auto\" && opts.interactive);\n  const googleCorner: Record<string, google.maps.ControlPosition> = {\n    \"top-left\": google.maps.ControlPosition.LEFT_TOP,\n    \"top-right\": google.maps.ControlPosition.RIGHT_TOP,\n    \"bottom-left\": google.maps.ControlPosition.LEFT_BOTTOM,\n    \"bottom-right\": google.maps.ControlPosition.RIGHT_BOTTOM,\n  };\n\n  const map = new google.maps.Map(container, {\n    center: { lat: opts.center[1], lng: opts.center[0] },\n    zoom: opts.zoom,\n    mapTypeId: isSat\n      ? google.maps.MapTypeId.HYBRID\n      : google.maps.MapTypeId.ROADMAP,\n    mapId: opts.mapId,\n    styles: isSat\n      ? undefined\n      : stylesFor(opts.appearance === \"dark\" ? \"dark\" : \"light\"),\n    disableDefaultUI: true,\n    zoomControl: showZoom,\n    zoomControlOptions: {\n      position: googleCorner[opts.toolsPosition],\n    },\n    gestureHandling: opts.interactive ? \"auto\" : \"none\",\n    keyboardShortcuts: opts.interactive,\n  });\n\n  if (opts.bounds) {\n    const b = new google.maps.LatLngBounds(\n      { lat: opts.bounds[0][1], lng: opts.bounds[0][0] },\n      { lat: opts.bounds[1][1], lng: opts.bounds[1][0] }\n    );\n    map.fitBounds(b);\n  }\n\n  await new Promise<void>((resolve) => {\n    google.maps.event.addListenerOnce(map, \"idle\", () => resolve());\n  });\n  callbacks.onLoad();\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const markers = new globalThis.Map<string, { marker: any; handle: MarkerHandle }>();\n\n  const adapter: AdapterInstance = {\n    setCenter: (coords) =>\n      map.setCenter({ lat: coords[1], lng: coords[0] }),\n    setZoom: (zoom) => map.setZoom(zoom),\n    setBounds: (sw, ne) => {\n      const b = new google.maps.LatLngBounds(\n        { lat: sw[1], lng: sw[0] },\n        { lat: ne[1], lng: ne[0] }\n      );\n      map.fitBounds(b);\n    },\n    setAppearance: (appearance) => {\n      if (appearance === \"satellite\") {\n        map.setMapTypeId(google.maps.MapTypeId.HYBRID);\n        map.setOptions({ styles: undefined });\n      } else {\n        map.setMapTypeId(google.maps.MapTypeId.ROADMAP);\n        map.setOptions({ styles: stylesFor(appearance) });\n      }\n    },\n    setInteractive: (enabled) => {\n      // disableDefaultUI stays true permanently (Grade owns the chrome);\n      // only the zoom control follows interactivity under tools=\"auto\".\n      map.setOptions({\n        zoomControl:\n          opts.tools === \"zoom\" || (opts.tools === \"auto\" && enabled),\n        gestureHandling: enabled ? \"auto\" : \"none\",\n        keyboardShortcuts: enabled,\n      });\n    },\n    flyTo: (coords, fopts) => {\n      map.panTo({ lat: coords[1], lng: coords[0] });\n      if (fopts?.zoom != null) map.setZoom(fopts.zoom);\n    },\n    panTo: (coords) => map.panTo({ lat: coords[1], lng: coords[0] }),\n    fitBounds: (list, fbopts) => {\n      if (list.length === 0) return;\n      const b = new google.maps.LatLngBounds();\n      for (const [lng, lat] of list) b.extend({ lat, lng });\n      map.fitBounds(b, fbopts?.paddingPx ?? 40);\n    },\n    getCenter: () => {\n      const c = map.getCenter();\n      return c ? [c.lng(), c.lat()] : [0, 0];\n    },\n    getZoom: () => map.getZoom() ?? 0,\n    getBounds: () => {\n      const b = map.getBounds();\n      if (!b) return [\n        [0, 0],\n        [0, 0],\n      ];\n      const sw = b.getSouthWest();\n      const ne = b.getNorthEast();\n      return [\n        [sw.lng(), sw.lat()],\n        [ne.lng(), ne.lat()],\n      ];\n    },\n    addMarker: (id, coords, anchor) => {\n      const element = document.createElement(\"div\");\n      element.dataset.gdsPart = \"map-marker\";\n      element.dataset.gdsState = \"idle\";\n      element.style.cursor = \"pointer\";\n      // Google AdvancedMarker anchors the *bottom-center* of `content` to\n      // the coord by default. For \"center\" anchor, shift content down so\n      // the visual midpoint lands on the coord.\n      if (anchor === \"center\") {\n        element.style.transform = \"translateY(50%)\";\n      }\n\n      element.addEventListener(\"mouseenter\", () => callbacks.onMarkerHover(id));\n      element.addEventListener(\"mouseleave\", () => callbacks.onMarkerHover(null));\n      element.addEventListener(\"click\", (e) => {\n        callbacks.onMarkerClick(id, handle.coords, e);\n      });\n\n      const marker = new google.maps.marker.AdvancedMarkerElement({\n        map,\n        position: { lat: coords[1], lng: coords[0] },\n        content: element,\n      });\n\n      const handle: MarkerHandle = {\n        element,\n        coords,\n        setHovered: (hovered) => {\n          element.dataset.gdsState = hovered ? \"hovered\" : \"idle\";\n          marker.zIndex = hovered ? 10 : 1;\n        },\n        setPosition: (next) => {\n          handle.coords = next;\n          marker.position = { lat: next[1], lng: next[0] };\n        },\n        remove: () => {\n          marker.map = null;\n          markers.delete(id);\n        },\n      };\n\n      markers.set(id, { marker, handle });\n      return handle;\n    },\n    destroy: () => {\n      markers.forEach(({ marker }) => {\n        marker.map = null;\n      });\n      markers.clear();\n      // Google Map has no explicit destroy(); GC handles it once the\n      // container DOM node is removed.\n    },\n    instance: map,\n  };\n\n  return adapter;\n};\n"]}