@sanity/google-maps-input

6.1.96.1.10
dist/index.js.map
~dist/index.js.mapModified
+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["createStaticMapsUrl","StaticMapsLocation","Geopoint","GeopointRadius","DEFAULT_WIDTH","DEFAULT_HEIGHT","METERS_PER_DEGREE","MIN_LATITUDE_COSINE","CIRCLE_OUTLINE","CIRCLE_FILL","lngMetersPerDegree","lat","Math","max","cos","PI","StaticMapSize","width","height","DEFAULT_ZOOM","GeopointStaticMapOptions","zoom","getGeopointStaticMapUrl","value","Pick","apiKey","center","lng","scale","markers","location","generateCirclePoints","radius","points","steps","latRatio","lngRatio","i","angle","push","sin","BOUNDS_PADDING","getCircleBounds","padded","latDelta","lngDelta","getGeopointRadiusStaticMapUrl","paths","coordinates","color","weight","fillcolor","visible","createContext","GoogleMapsInputConfig","GoogleMapsInputContext","displayName","ImageIcon","Flex","Text","use","useState","getGeopointRadiusStaticMapUrl","getGeopointStaticMapUrl","Geopoint","GeopointRadius","GoogleMapsInputContext","mapDiffImage","mapDiffPlaceholder","MapValue","hasRadius","value","radius","StaticMapDiffPreview","t0","$","_c","failed","setFailed","apiKey","lat","lng","t1","Symbol","for","width","height","url","t2","t3","DiffFromTo","DiffProps","ObjectDiff","StaticMapDiffPreview","GeopointDiff","t0","$","_c","diff","schemaType","t1","ErrorOutlineIcon","WarningOutlineIcon","Box","Card","Code","Flex","Stack","Text","ReactNode","GET_API_KEY_URL","DEMO_KEY_URL","REQUIRED_APIS","const","RequiredApis","$","_c","t0","Symbol","for","map","_temp","api","MessageCard","tone","icon","title","children","t1","t2","t3","t4","t5","MissingApiKeyCard","typeTitle","t6","t7","t8","InvalidApiKeyCard","Flex","Spinner","APILoadingStatus","useApiLoadingStatus","ReactNode","InvalidApiKeyCard","MapApiGate","t0","$","_c","children","status","AUTH_FAILURE","FAILED","t1","Symbol","for","LOADED","LatLng","getValidLatLng","value","lat","lng","Number","isFinite","MAP_ID","useMap","useMapsLibrary","LatLng","searchInput","Props","onSelect","location","SearchInput","t0","$","_c","places","map","t1","t2","placePrediction","place","toPlace","fetchFields","fields","latLng","lat","lng","panTo","AdvancedMarker","ControlPosition","Map","MapCameraChangedEvent","MapMouseEvent","MapControl","useCallback","useRef","MAP_ID","SearchInput","Geopoint","LatLng","getValidLatLng","fallbackLatLng","lat","lng","defaultMapLocation","SelectProps","value","onChange","latLng","onZoomChange","zoom","defaultLocation","defaultZoom","GeopointSelect","t0","$","_c","t1","t2","undefined","t3","position","t4","center","t5","Math","round","lastZoomRef","t6","event","detail","handleMapClick","t7","event_0","handleMarkerDragEnd","t8","location","handleSelect","t9","event_1","current","handleZoomChanged","t10","t11","Symbol","for","width","height","t12","TOP_RIGHT","t13","Boolean","t14","StaticMap","useState","InvalidApiKeyCard","staticMapContainer","staticMapImage","StaticMapPreviewProps","url","onClick","onDoubleClick","StaticMapPreview","t0","$","_c","failed","setFailed","t1","Symbol","for","t2","t3","EditIcon","TrashIcon","Box","Button","Dialog","Grid","Stack","APIProvider","useCallback","useEffect","useId","useRef","useState","ObjectInputProps","set","setIfMissing","unset","ChangeIndicator","Path","MapApiGate","getGeopointStaticMapUrl","Geopoint","GoogleMapsInputConfig","LatLng","getValidLatLng","MissingApiKeyCard","GeopointSelect","StaticMapPreview","dialogInnerContainer","EMPTY_PATH","GeopointInputProps","geoConfig","GeopointInput","props","$","_c","changed","elementProps","focused","config","onChange","onPathFocus","path","readOnly","schemaType","value","id","ref","inputRef","onBlur","handleBlur","onFocus","handleFocus","ariaDescribedBy","schemaTypeName","name","dialogId","dialogRef","t0","current","focus","handleFocusButton","modalOpen","setModalOpen","t1","blur","handleCloseModal","t2","Symbol","for","_temp","handleToggleModal","t3","latLng","_type","lat","lng","handleChange","t4","zoom","handleZoomChange","t5","handleClear","t6","t7","apiKey","t8","position","staticImageUrl","t9","t10","t11","undefined","t12","t13","t14","t15","t16","saveZoom","defaultLocation","defaultZoom","t17","currentState","AdvancedMarker","Circle","ControlPosition","Map","MapMouseEvent","MapControl","useCallback","MAP_ID","SearchInput","GeopointRadius","LatLng","getValidLatLng","fallbackLatLng","lat","lng","defaultMapLocation","SelectProps","value","onChange","latLng","radius","defaultLocation","defaultRadiusZoom","defaultRadius","GeopointRadiusSelect","t0","$","_c","t1","t2","t3","undefined","t4","position","t5","center","currentRadius","t6","Math","round","setValue","t7","event","detail","handleMapClick","t8","event_0","handleMarkerDragEnd","t9","location","handleSelect","t10","radius_0","handleCircleRadiusChanged","t11","event_1","handleCircleDragEnd","t12","Symbol","for","width","height","t13","TOP_RIGHT","t14","Boolean","t15","EditIcon","TrashIcon","Box","Button","Dialog","Grid","Stack","TextInput","Label","APIProvider","useCallback","useEffect","useId","useRef","useState","ObjectInputProps","set","setIfMissing","unset","ChangeIndicator","Path","MapApiGate","getGeopointRadiusStaticMapUrl","GeopointRadius","GoogleMapsInputConfig","LatLng","getValidLatLng","MissingApiKeyCard","GeopointRadiusSelect","StaticMapPreview","dialogInnerContainer","EMPTY_PATH","GeopointRadiusInputProps","geoConfig","GeopointRadiusInput","props","$","_c","changed","elementProps","focused","config","onChange","onPathFocus","path","readOnly","schemaType","value","id","ref","inputRef","onBlur","handleBlur","onFocus","handleFocus","ariaDescribedBy","schemaTypeName","name","dialogId","dialogRef","t0","current","focus","handleFocusButton","modalOpen","setModalOpen","t1","blur","handleCloseModal","t2","Symbol","for","_temp","handleToggleModal","t3","defaultRadius","radius","latLng","currentRadius","_type","lat","lng","handleChange","t4","event","Math","round","Number","currentTarget","handleRadiusChange","t5","handleClear","t6","t7","apiKey","t8","position","radius_0","t9","staticImageUrl","t10","t11","t12","undefined","t13","t14","t15","t16","t17","defaultLocation","defaultRadiusZoom","t18","currentState","definePlugin","SchemaType","GoogleMapsInputContext","GeopointDiff","GeopointInput","GeopointInputProps","GeopointRadiusInput","GeopointRadiusInputProps","GeopointSchemaType","GeopointRadiusSchemaType","GoogleMapsInputConfig","googleMapsInput","config","name","studio","components","activeToolLayout","GoogleMapsInputContextProvider","props","renderDefault","schema","types","title","type","apiKey","diff","undefined","fields","validation","Rule","required","min","max","preview","select","lat","lng","radius","prepare","toFixed","subtitle","form","input","isGeopoint","schemaType","castedProps","Omit","isGeopointRadius","isType"],"sources":["../src/map/staticMapUrl.ts","../src/diff/GeoConfigContext.tsx","../src/diff/StaticMapDiffPreview.css.ts","../src/diff/StaticMapDiffPreview.tsx","../src/diff/GeopointDiff.tsx","../src/input/ApiKeyMessages.tsx","../src/map/MapApiGate.tsx","../src/utils.ts","../src/map/constants.ts","../src/map/SearchInput.css.ts","../src/map/SearchInput.tsx","../src/input/GeopointSelect.tsx","../src/input/StaticMapPreview.css.ts","../src/input/StaticMapPreview.tsx","../src/input/GeopointInput.css.ts","../src/input/GeopointInput.tsx","../src/input/GeopointRadiusSelect.tsx","../src/input/GeopointRadiusInput.tsx","../src/plugin.tsx"],"sourcesContent":["import {createStaticMapsUrl, type StaticMapsLocation} from '@vis.gl/react-google-maps'\n\nimport type {Geopoint, GeopointRadius} from '../types'\n\nconst DEFAULT_WIDTH = 640\nconst DEFAULT_HEIGHT = 300\n// Rough meters-per-degree of latitude, used to translate a radius in meters to a\n// lat/lng delta. Good enough for previewing modest radii.\nconst METERS_PER_DEGREE = 111_000\n// Clamp the latitude cosine away from zero so the radius→longitude conversion\n// can't divide by ~0 near the poles and produce Infinity/NaN coordinates.\nconst MIN_LATITUDE_COSINE = 0.01\nconst CIRCLE_OUTLINE = '0x4285F4'\nconst CIRCLE_FILL = '0x4285F480'\n\n// Meters per degree of longitude at a given latitude (shrinks toward the poles).\nfunction lngMetersPerDegree(lat: number): number {\n  return METERS_PER_DEGREE * Math.max(Math.cos((lat * Math.PI) / 180), MIN_LATITUDE_COSINE)\n}\n\nexport interface StaticMapSize {\n  width?: number\n  height?: number\n}\n\nconst DEFAULT_ZOOM = 13\n\ninterface GeopointStaticMapOptions extends StaticMapSize {\n  /** Zoom level for the preview. Defaults to {@link DEFAULT_ZOOM}. */\n  zoom?: number\n}\n\n/**\n * Static map preview for a plain geopoint: a single marker centered in view.\n */\nexport function getGeopointStaticMapUrl(\n  value: Pick<Geopoint, 'lat' | 'lng'>,\n  apiKey: string,\n  {\n    width = DEFAULT_WIDTH,\n    height = DEFAULT_HEIGHT,\n    zoom = DEFAULT_ZOOM,\n  }: GeopointStaticMapOptions = {},\n): string {\n  const center = {lat: value.lat, lng: value.lng}\n  return createStaticMapsUrl({\n    apiKey,\n    width,\n    height,\n    scale: 2,\n    zoom,\n    center,\n    markers: [{location: center}],\n  })\n}\n\nfunction generateCirclePoints(lat: number, lng: number, radius: number): StaticMapsLocation[] {\n  const points: StaticMapsLocation[] = []\n  const steps = 64\n  const latRatio = radius / METERS_PER_DEGREE\n  const lngRatio = radius / lngMetersPerDegree(lat)\n\n  for (let i = 0; i <= steps; i++) {\n    const angle = (i / steps) * 2 * Math.PI\n    points.push({\n      lat: lat + latRatio * Math.cos(angle),\n      lng: lng + lngRatio * Math.sin(angle),\n    })\n  }\n\n  return points\n}\n\n// Extra room around the circle so it never sits flush against the image edge.\n// The Static Maps API only offers discrete zoom levels, so without padding a\n// circle can end up tangent to the border at certain radii.\nconst BOUNDS_PADDING = 1.15\n\n/**\n * The four cardinal extremes of the (padded) circle. Passing these as `visible`\n * lets the Static Maps API auto-fit the viewport around the whole circle —\n * with margin — instead of clipping it.\n */\nfunction getCircleBounds(lat: number, lng: number, radius: number): StaticMapsLocation[] {\n  const padded = radius * BOUNDS_PADDING\n  const latDelta = padded / METERS_PER_DEGREE\n  const lngDelta = padded / lngMetersPerDegree(lat)\n  return [\n    {lat: lat + latDelta, lng},\n    {lat: lat - latDelta, lng},\n    {lat, lng: lng + lngDelta},\n    {lat, lng: lng - lngDelta},\n  ]\n}\n\n/**\n * Static map preview for a geopoint with a radius: a marker plus a filled circle.\n * The viewport is derived from the circle bounds (no fixed zoom) so the entire\n * radius stays within the image.\n */\nexport function getGeopointRadiusStaticMapUrl(\n  value: Pick<GeopointRadius, 'lat' | 'lng' | 'radius'>,\n  apiKey: string,\n  {width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT}: StaticMapSize = {},\n): string {\n  if (!value.radius) {\n    return getGeopointStaticMapUrl(value, apiKey, {width, height})\n  }\n\n  return createStaticMapsUrl({\n    apiKey,\n    width,\n    height,\n    scale: 2,\n    markers: [{location: {lat: value.lat, lng: value.lng}}],\n    paths: [\n      {\n        coordinates: generateCirclePoints(value.lat, value.lng, value.radius),\n        color: CIRCLE_OUTLINE,\n        weight: 2,\n        fillcolor: CIRCLE_FILL,\n      },\n    ],\n    visible: getCircleBounds(value.lat, value.lng, value.radius),\n  })\n}\n","import {createContext} from 'react'\n\nimport type {GoogleMapsInputConfig} from '../types'\n\n/**\n * Diff components are resolved by the Studio outside of the form, so they can't\n * receive the plugin config as a prop the way the inputs do. The plugin installs\n * this provider at the Studio layout level so diff previews can read the API key.\n */\nexport const GoogleMapsInputContext = createContext<GoogleMapsInputConfig | null>(null)\nGoogleMapsInputContext.displayName = 'GoogleMapsInputContext'\n","import {style} from '@vanilla-extract/css'\n\nexport const mapDiffImage = style({\n  display: 'block',\n  width: '100%',\n  height: 'auto',\n  objectFit: 'contain',\n  verticalAlign: 'top',\n})\n\nexport const mapDiffPlaceholder = style({\n  width: '100%',\n  minHeight: '80px',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n})\n","import {ImageIcon} from '@sanity/icons/Image'\nimport {Flex, Text} from '@sanity/ui'\nimport {use, useState} from 'react'\n\nimport {getGeopointRadiusStaticMapUrl, getGeopointStaticMapUrl} from '../map/staticMapUrl'\nimport type {Geopoint, GeopointRadius} from '../types'\nimport {GoogleMapsInputContext} from './GeoConfigContext'\n\nimport {mapDiffImage, mapDiffPlaceholder} from './StaticMapDiffPreview.css'\n\ntype MapValue = Geopoint | GeopointRadius\n\nfunction hasRadius(value: MapValue): value is GeopointRadius {\n  return typeof (value as GeopointRadius).radius === 'number'\n}\n\n/**\n * Renders the static map image for a single side of a geopoint/geopointRadius\n * diff. Used as the `previewComponent` for `DiffFromTo`, mirroring how the\n * built-in image diff shows a before/after thumbnail.\n */\nexport function StaticMapDiffPreview({value}: {value?: MapValue}) {\n  const [failed, setFailed] = useState(false)\n  const apiKey = use(GoogleMapsInputContext)?.apiKey\n\n  if (!value || typeof value.lat !== 'number' || typeof value.lng !== 'number' || !apiKey) {\n    return null\n  }\n\n  if (failed) {\n    return (\n      <div className={mapDiffPlaceholder}>\n        <Flex align=\"center\" gap={2} justify=\"center\" padding={3}>\n          <Text muted size={1}>\n            <ImageIcon />\n          </Text>\n          <Text muted size={1}>\n            Map preview unavailable\n          </Text>\n        </Flex>\n      </div>\n    )\n  }\n\n  const url = hasRadius(value)\n    ? getGeopointRadiusStaticMapUrl(value, apiKey, {width: 500, height: 280})\n    : getGeopointStaticMapUrl(value, apiKey, {width: 500, height: 280})\n\n  return (\n    <img\n      className={mapDiffImage}\n      alt=\"\"\n      src={url}\n      onError={() => setFailed(true)}\n      height={280}\n      width={500}\n    />\n  )\n}\n","import {DiffFromTo, type DiffProps, type ObjectDiff} from 'sanity'\n\nimport {StaticMapDiffPreview} from './StaticMapDiffPreview'\n\n/**\n * Diff component for `geopoint` and `geopointRadius` values. Renders a\n * before/after static map preview using `DiffFromTo`, matching the look of the\n * built-in image diff. Handles both types: the preview detects a `radius` field\n * and draws the radius circle when present.\n */\nexport function GeopointDiff({diff, schemaType}: DiffProps<ObjectDiff>) {\n  return (\n    <DiffFromTo\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={StaticMapDiffPreview}\n      layout=\"grid\"\n    />\n  )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Card, Code, Flex, Stack, Text} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\nconst GET_API_KEY_URL = 'https://developers.google.com/maps/documentation/javascript/get-api-key'\nconst DEMO_KEY_URL = 'https://developers.google.com/maps/documentation/javascript/demo-key'\n\n// The APIs the key needs access to for the input to work end to end.\nconst REQUIRED_APIS = [\n  'Google Maps JavaScript API',\n  'Google Static Maps API',\n  'Google Places API (New)',\n] as const\n\nfunction RequiredApis() {\n  return (\n    <Box paddingLeft={3}>\n      <Stack as=\"ul\" gap={2}>\n        {REQUIRED_APIS.map((api) => (\n          <Text key={api} as=\"li\" size={1} muted>\n            {api}\n          </Text>\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n\nfunction MessageCard({\n  tone,\n  icon,\n  title,\n  children,\n}: {\n  tone: 'caution' | 'critical'\n  icon: ReactNode\n  title: string\n  children: ReactNode\n}) {\n  return (\n    <Card padding={4} radius={2} tone={tone} border>\n      <Flex gap={3}>\n        <Box flex=\"none\">\n          <Text size={3}>{icon}</Text>\n        </Box>\n        <Stack flex={1} gap={4}>\n          <Text size={1} weight=\"semibold\">\n            {title}\n          </Text>\n          {children}\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n\n/**\n * Shown when the plugin has not been given an API key. Explains how to provide\n * one in the plugin config and which Google APIs it needs.\n */\nexport function MissingApiKeyCard({typeTitle}: {typeTitle: string}) {\n  return (\n    <MessageCard tone=\"caution\" icon={<WarningOutlineIcon />} title=\"Google Maps API key required\">\n      <Text size={1} muted>\n        The {typeTitle} field uses Google Maps and needs an API key. Add one to the{' '}\n        <code>googleMapsInput</code> plugin configuration:\n      </Text>\n      <Card padding={3} radius={2} tone=\"transparent\" border overflow=\"auto\">\n        <Code size={1}>{`googleMapsInput({apiKey: 'your-api-key'})`}</Code>\n      </Card>\n      <Stack gap={3}>\n        <Text size={1} muted>\n          The key needs these APIs enabled:\n        </Text>\n        <RequiredApis />\n      </Stack>\n      <Text size={1} muted>\n        <a href={GET_API_KEY_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n          Get an API key\n        </a>\n        {' · '}\n        <a href={DEMO_KEY_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n          use a demo key to test\n        </a>\n      </Text>\n    </MessageCard>\n  )\n}\n\n/**\n * Shown when a key is configured but Google rejects the request (e.g. an\n * invalid/demo key, a restricted key, or one missing the required APIs).\n */\nexport function InvalidApiKeyCard() {\n  return (\n    <MessageCard tone=\"critical\" icon={<ErrorOutlineIcon />} title=\"Map preview couldn’t load\">\n      <Text size={1} muted>\n        The Google Maps API key was rejected. Check that it is a valid key — not a demo or\n        placeholder key — that it is not restricted in a way that blocks this Studio’s URL, and that\n        it has these APIs enabled:\n      </Text>\n      <RequiredApis />\n    </MessageCard>\n  )\n}\n","import {Flex, Spinner} from '@sanity/ui'\nimport {APILoadingStatus, useApiLoadingStatus} from '@vis.gl/react-google-maps'\nimport type {ReactNode} from 'react'\n\nimport {InvalidApiKeyCard} from '../input/ApiKeyMessages'\n\n/**\n * Renders the interactive map only once the Maps JavaScript API has loaded.\n * While loading it shows a spinner, and if the key is rejected it surfaces the\n * same \"invalid key\" guidance used by the static preview. Must be rendered\n * inside an `<APIProvider>`.\n */\nexport function MapApiGate({children}: {children: ReactNode}) {\n  const status = useApiLoadingStatus()\n\n  if (status === APILoadingStatus.AUTH_FAILURE || status === APILoadingStatus.FAILED) {\n    return <InvalidApiKeyCard />\n  }\n\n  if (status !== APILoadingStatus.LOADED) {\n    return (\n      <Flex align=\"center\" justify=\"center\" height=\"fill\" padding={4}>\n        <Spinner muted />\n      </Flex>\n    )\n  }\n\n  return <>{children}</>\n}\n","import type {LatLng} from './types'\n\n/**\n * Geopoint values can exist in a partial/empty state — a freshly added array\n * item is just `{_type, _key}` with no coordinates yet. Passing such a value's\n * `lat`/`lng` (which are `undefined`, or could be `NaN`/`Infinity`) to Google\n * Maps markers, circles or the map center throws an `InvalidValueError`. Use\n * this to extract a usable `LatLng` only when both coordinates are finite\n * numbers, and `null` otherwise.\n */\nexport function getValidLatLng(value: {lat?: number; lng?: number} | undefined): LatLng | null {\n  const lat = value?.lat\n  const lng = value?.lng\n  if (\n    typeof lat === 'number' &&\n    Number.isFinite(lat) &&\n    typeof lng === 'number' &&\n    Number.isFinite(lng)\n  ) {\n    return {lat, lng}\n  }\n  return null\n}\n","/**\n * Advanced markers require a vector map, which in turn requires a map id.\n * `DEMO_MAP_ID` is Google's reserved id for trying advanced markers without\n * creating a cloud-based map style; it renders the default (red) marker.\n */\nexport const MAP_ID = 'DEMO_MAP_ID'\n","import {style} from '@vanilla-extract/css'\n\nexport const searchInput = style({\n  margin: '10px',\n})\n","import {useMap, useMapsLibrary} from '@vis.gl/react-google-maps'\n\nimport type {LatLng} from '../types'\n\nimport {searchInput} from './SearchInput.css'\n\ninterface Props {\n  onSelect: (location: LatLng) => void\n}\n\n/**\n * Place search using the `<gmp-place-autocomplete>` web component (Places API\n * New). The element is provided by the `places` library, so we wait for it to\n * load before rendering, then listen for the `gmp-select` event.\n */\nexport function SearchInput({onSelect}: Props) {\n  const places = useMapsLibrary('places')\n  const map = useMap()\n\n  if (!places) {\n    return null\n  }\n\n  return (\n    <gmp-place-autocomplete\n      className={searchInput}\n      ongmp-select={async ({placePrediction}: google.maps.places.PlacePredictionSelectEvent) => {\n        const place = placePrediction.toPlace()\n        await place.fetchFields({fields: ['location']})\n\n        const location = place.location\n        if (!location) {\n          return\n        }\n\n        const latLng = {lat: location.lat(), lng: location.lng()}\n        onSelect(latLng)\n        map?.panTo(latLng)\n      }}\n    />\n  )\n}\n","import {\n  AdvancedMarker,\n  ControlPosition,\n  Map,\n  type MapCameraChangedEvent,\n  type MapMouseEvent,\n  MapControl,\n} from '@vis.gl/react-google-maps'\nimport {useCallback, useRef} from 'react'\n\nimport {MAP_ID} from '../map/constants'\nimport {SearchInput} from '../map/SearchInput'\nimport type {Geopoint, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\n\nconst fallbackLatLng: LatLng = {lat: 40.7058254, lng: -74.1180863}\nconst defaultMapLocation: LatLng = {lng: 10.74609, lat: 59.91273}\n\ninterface SelectProps {\n  value?: Geopoint\n  onChange?: (latLng: LatLng) => void\n  onZoomChange?: (zoom: number) => void\n  defaultLocation?: LatLng\n  defaultZoom?: number\n}\n\nexport function GeopointSelect({\n  value,\n  onChange,\n  onZoomChange,\n  defaultLocation = defaultMapLocation,\n  defaultZoom = 8,\n}: SelectProps) {\n  const position = getValidLatLng(value)\n  const center: LatLng = {\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }\n\n  // Seed with the zoom the map opens at so the initial `zoom_changed` the Maps\n  // API emits on load doesn't write a value before the user interacts. Only\n  // genuine, distinct integer zoom levels get persisted.\n  const lastZoomRef = useRef(Math.round(defaultZoom))\n\n  const handleMapClick = useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng && onChange) {\n        onChange(event.detail.latLng)\n      }\n    },\n    [onChange],\n  )\n\n  const handleMarkerDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng && onChange) {\n        onChange({lat: event.latLng.lat(), lng: event.latLng.lng()})\n      }\n    },\n    [onChange],\n  )\n\n  const handleSelect = useCallback(\n    (location: LatLng) => {\n      onChange?.(location)\n    },\n    [onChange],\n  )\n\n  const handleZoomChanged = useCallback(\n    (event: MapCameraChangedEvent) => {\n      if (!onZoomChange) return\n      const zoom = Math.round(event.detail.zoom)\n      if (zoom !== lastZoomRef.current) {\n        lastZoomRef.current = zoom\n        onZoomChange(zoom)\n      }\n    },\n    [onZoomChange],\n  )\n\n  return (\n    <Map\n      mapId={MAP_ID}\n      defaultCenter={center}\n      defaultZoom={defaultZoom}\n      onClick={handleMapClick}\n      onZoomChanged={onZoomChange ? handleZoomChanged : undefined}\n      gestureHandling=\"greedy\"\n      streetViewControl={false}\n      mapTypeControl={false}\n      style={{width: '100%', height: '100%'}}\n    >\n      <MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>\n      {position && (\n        <AdvancedMarker\n          position={position}\n          draggable={Boolean(onChange)}\n          onDragEnd={handleMarkerDragEnd}\n        />\n      )}\n    </Map>\n  )\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const staticMapContainer = style({\n  cursor: 'pointer',\n})\nexport const staticMapImage = style({\n  width: '100%',\n  height: 'auto',\n  display: 'block',\n  verticalAlign: 'top',\n})\n","import {StaticMap} from '@vis.gl/react-google-maps'\nimport {useState} from 'react'\n\nimport {InvalidApiKeyCard} from './ApiKeyMessages'\n\nimport {staticMapContainer, staticMapImage} from './StaticMapPreview.css'\n\ninterface StaticMapPreviewProps {\n  url: string\n  onClick?: () => void\n  onDoubleClick?: () => void\n}\n\n/**\n * Renders the Google Static Maps preview (via the library's `StaticMap`). If\n * the image is rejected (invalid/demo key, restricted, or missing Static Maps\n * API access) the broken image is replaced with a helpful error card.\n */\nexport function StaticMapPreview({url, onClick, onDoubleClick}: StaticMapPreviewProps) {\n  const [failed, setFailed] = useState(false)\n\n  if (failed) {\n    return <InvalidApiKeyCard />\n  }\n\n  return (\n    // oxlint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n    <div\n      className={staticMapContainer}\n      onClick={onClick}\n      onDoubleClick={onDoubleClick}\n      onErrorCapture={() => setFailed(true)}\n    >\n      <StaticMap className={staticMapImage} url={url} />\n    </div>\n  )\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const dialogInnerContainer = style({\n  height: '40rem',\n})\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Dialog, Grid, Stack} from '@sanity/ui'\nimport {APIProvider} from '@vis.gl/react-google-maps'\nimport {useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset, ChangeIndicator, type Path} from 'sanity'\n\nimport {MapApiGate} from '../map/MapApiGate'\nimport {getGeopointStaticMapUrl} from '../map/staticMapUrl'\nimport type {Geopoint, GoogleMapsInputConfig, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\nimport {MissingApiKeyCard} from './ApiKeyMessages'\nimport {GeopointSelect} from './GeopointSelect'\nimport {StaticMapPreview} from './StaticMapPreview'\n\nimport {dialogInnerContainer} from './GeopointInput.css'\n\nconst EMPTY_PATH: Path = []\n\nexport type GeopointInputProps = ObjectInputProps<Geopoint> & {\n  geoConfig: GoogleMapsInputConfig\n}\n\nexport function GeopointInput(props: GeopointInputProps) {\n  const {\n    changed,\n    elementProps,\n    focused,\n    geoConfig: config,\n    onChange,\n    onPathFocus,\n    path,\n    readOnly,\n    schemaType,\n    value,\n  } = props\n\n  const {\n    id,\n    ref: inputRef,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    'aria-describedby': ariaDescribedBy,\n  } = elementProps\n\n  const schemaTypeName = schemaType.name\n  const dialogId = useId()\n  const dialogRef = useRef<HTMLDivElement | null>(null)\n  const handleFocusButton = useCallback(() => inputRef?.current?.focus(), [inputRef])\n  const [modalOpen, setModalOpen] = useState(false)\n\n  const handleCloseModal = useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])\n\n  const handleToggleModal = useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\n  )\n\n  const handleChange = useCallback(\n    (latLng: LatLng) => {\n      onChange([\n        setIfMissing({_type: schemaTypeName}),\n        set(latLng.lat, ['lat']),\n        set(latLng.lng, ['lng']),\n      ])\n    },\n    [schemaTypeName, onChange],\n  )\n\n  const handleZoomChange = useCallback(\n    (zoom: number) => {\n      onChange([setIfMissing({_type: schemaTypeName}), set(zoom, ['zoom'])])\n    },\n    [schemaTypeName, onChange],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  useEffect(() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }, [modalOpen, onPathFocus])\n\n  if (!config || !config.apiKey) {\n    return <MissingApiKeyCard typeTitle=\"Geopoint\" />\n  }\n\n  // A geopoint is only renderable on a map once it has finite coordinates. A\n  // freshly added array item is `{_type, _key}` with no lat/lng yet, so gate the\n  // map preview and \"edit\" affordances on having a real location.\n  const position = getValidLatLng(value)\n  const staticImageUrl = position\n    ? getGeopointStaticMapUrl(position, config.apiKey, {zoom: value?.zoom})\n    : null\n\n  return (\n    <Stack gap={3}>\n      {staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\n      )}\n\n      <Box>\n        <Grid gridTemplateColumns={position ? 2 : 1} gap={3}>\n          <Button\n            aria-describedby={ariaDescribedBy}\n            disabled={readOnly}\n            icon={position ? EditIcon : undefined}\n            id={id}\n            mode=\"ghost\"\n            onClick={handleToggleModal}\n            onFocus={handleFocus}\n            padding={3}\n            ref={inputRef}\n            text={position ? 'Edit' : 'Set location'}\n          />\n\n          {position && (\n            <Button\n              disabled={readOnly}\n              icon={TrashIcon}\n              mode=\"ghost\"\n              onClick={handleClear}\n              padding={3}\n              text=\"Remove\"\n              tone=\"critical\"\n            />\n          )}\n        </Grid>\n      </Box>\n\n      {modalOpen && (\n        <Dialog\n          header=\"Place the marker on the map\"\n          id={`${dialogId}_dialog`}\n          onBlur={handleBlur}\n          onClose={handleCloseModal}\n          ref={dialogRef}\n          width={1}\n        >\n          <div className={dialogInnerContainer}>\n            <APIProvider apiKey={config.apiKey}>\n              <MapApiGate>\n                <GeopointSelect\n                  value={value || undefined}\n                  onChange={readOnly ? undefined : handleChange}\n                  onZoomChange={readOnly || !config.saveZoom ? undefined : handleZoomChange}\n                  defaultLocation={config.defaultLocation}\n                  defaultZoom={value?.zoom || config.defaultZoom}\n                />\n              </MapApiGate>\n            </APIProvider>\n          </div>\n        </Dialog>\n      )}\n    </Stack>\n  )\n}\n","import {\n  AdvancedMarker,\n  Circle,\n  ControlPosition,\n  Map,\n  type MapMouseEvent,\n  MapControl,\n} from '@vis.gl/react-google-maps'\nimport {useCallback} from 'react'\n\nimport {MAP_ID} from '../map/constants'\nimport {SearchInput} from '../map/SearchInput'\nimport type {GeopointRadius, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\n\nconst fallbackLatLng: LatLng = {lat: 40.7058254, lng: -74.1180863}\nconst defaultMapLocation: LatLng = {lng: 10.74609, lat: 59.91273}\n\ninterface SelectProps {\n  value?: GeopointRadius\n  onChange?: (latLng: LatLng, radius?: number) => void\n  defaultLocation?: LatLng\n  defaultRadiusZoom?: number\n  defaultRadius?: number\n}\n\nexport function GeopointRadiusSelect({\n  value,\n  onChange,\n  defaultLocation = defaultMapLocation,\n  defaultRadiusZoom = 12,\n  defaultRadius = 1000,\n}: SelectProps) {\n  const position = getValidLatLng(value)\n  const center: LatLng = {\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }\n  const currentRadius = value?.radius ?? defaultRadius\n\n  const setValue = useCallback(\n    (latLng: LatLng, radius?: number) => {\n      onChange?.(latLng, radius == null ? undefined : Math.round(radius))\n    },\n    [onChange],\n  )\n\n  const handleMapClick = useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng) {\n        setValue(event.detail.latLng, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  const handleMarkerDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng) {\n        setValue({lat: event.latLng.lat(), lng: event.latLng.lng()}, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  const handleSelect = useCallback(\n    (location: LatLng) => setValue(location, currentRadius),\n    [setValue, currentRadius],\n  )\n\n  const handleCircleRadiusChanged = useCallback(\n    (radius: number) => {\n      if (value) {\n        setValue({lat: value.lat, lng: value.lng}, radius)\n      }\n    },\n    [setValue, value],\n  )\n\n  const handleCircleDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng) {\n        setValue({lat: event.latLng.lat(), lng: event.latLng.lng()}, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  return (\n    <Map\n      mapId={MAP_ID}\n      defaultCenter={center}\n      defaultZoom={defaultRadiusZoom}\n      onClick={handleMapClick}\n      gestureHandling=\"greedy\"\n      streetViewControl={false}\n      mapTypeControl={false}\n      style={{width: '100%', height: '100%'}}\n    >\n      <MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>\n      {position && (\n        <>\n          <AdvancedMarker\n            position={position}\n            draggable={Boolean(onChange)}\n            onDragEnd={handleMarkerDragEnd}\n          />\n          <Circle\n            center={position}\n            radius={currentRadius}\n            editable={Boolean(onChange)}\n            draggable={Boolean(onChange)}\n            fillColor=\"#4285F4\"\n            fillOpacity={0.2}\n            strokeColor=\"#4285F4\"\n            strokeOpacity={0.8}\n            strokeWeight={2}\n            onRadiusChanged={handleCircleRadiusChanged}\n            onDragEnd={handleCircleDragEnd}\n          />\n        </>\n      )}\n    </Map>\n  )\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Dialog, Grid, Stack, TextInput, Label} from '@sanity/ui'\nimport {APIProvider} from '@vis.gl/react-google-maps'\nimport {useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset, ChangeIndicator, type Path} from 'sanity'\n\nimport {MapApiGate} from '../map/MapApiGate'\nimport {getGeopointRadiusStaticMapUrl} from '../map/staticMapUrl'\nimport type {GeopointRadius, GoogleMapsInputConfig, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\nimport {MissingApiKeyCard} from './ApiKeyMessages'\nimport {GeopointRadiusSelect} from './GeopointRadiusSelect'\nimport {StaticMapPreview} from './StaticMapPreview'\n\nimport {dialogInnerContainer} from './GeopointInput.css'\n\nconst EMPTY_PATH: Path = []\n\nexport type GeopointRadiusInputProps = ObjectInputProps<GeopointRadius> & {\n  geoConfig: GoogleMapsInputConfig\n}\n\nexport function GeopointRadiusInput(props: GeopointRadiusInputProps) {\n  const {\n    changed,\n    elementProps,\n    focused,\n    geoConfig: config,\n    onChange,\n    onPathFocus,\n    path,\n    readOnly,\n    schemaType,\n    value,\n  } = props\n\n  const {\n    id,\n    ref: inputRef,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    'aria-describedby': ariaDescribedBy,\n  } = elementProps\n\n  const schemaTypeName = schemaType.name\n  const dialogId = useId()\n  const dialogRef = useRef<HTMLDivElement | null>(null)\n  const handleFocusButton = useCallback(() => inputRef?.current?.focus(), [inputRef])\n  const [modalOpen, setModalOpen] = useState(false)\n\n  const handleCloseModal = useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])\n\n  const handleToggleModal = useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\n  )\n\n  const handleChange = useCallback(\n    (latLng: LatLng, radius?: number) => {\n      const currentRadius = radius ?? value?.radius ?? config.defaultRadius ?? 1000\n      onChange([\n        setIfMissing({_type: schemaTypeName}),\n        set(latLng.lat, ['lat']),\n        set(latLng.lng, ['lng']),\n        set(currentRadius, ['radius']),\n      ])\n    },\n    [schemaTypeName, onChange, value?.radius, config.defaultRadius],\n  )\n\n  const handleRadiusChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      if (value) {\n        onChange([set(Math.round(Number(event.currentTarget.value)), ['radius'])])\n      }\n    },\n    [onChange, value],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  useEffect(() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }, [modalOpen, onPathFocus])\n\n  if (!config || !config.apiKey) {\n    return <MissingApiKeyCard typeTitle=\"Geopoint Radius\" />\n  }\n\n  // A geopoint is only renderable on a map once it has finite coordinates. A\n  // freshly added array item is `{_type, _key}` with no lat/lng yet, so gate the\n  // map preview, radius control and \"edit\" affordances on having a real location.\n  const position = getValidLatLng(value)\n  const radius = Math.round(value?.radius || config.defaultRadius || 1000)\n  const staticImageUrl = position\n    ? getGeopointRadiusStaticMapUrl(\n        {lat: position.lat, lng: position.lng, radius: value?.radius ?? 0},\n        config.apiKey,\n      )\n    : null\n\n  return (\n    <Stack gap={3}>\n      {staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\n      )}\n\n      {position && (\n        <Stack gap={2}>\n          <Label>Radius (meters)</Label>\n          <TextInput\n            type=\"number\"\n            value={radius}\n            onChange={handleRadiusChange}\n            disabled={readOnly}\n            min={1}\n            max={50000}\n            step={1}\n          />\n        </Stack>\n      )}\n\n      <Box>\n        <Grid gridTemplateColumns={position ? 2 : 1} gap={3}>\n          <Button\n            aria-describedby={ariaDescribedBy}\n            disabled={readOnly}\n            icon={position ? EditIcon : undefined}\n            id={id}\n            mode=\"ghost\"\n            onClick={handleToggleModal}\n            onFocus={handleFocus}\n            padding={3}\n            ref={inputRef}\n            text={position ? 'Edit' : 'Set location and radius'}\n          />\n\n          {position && (\n            <Button\n              disabled={readOnly}\n              icon={TrashIcon}\n              mode=\"ghost\"\n              onClick={handleClear}\n              padding={3}\n              text=\"Remove\"\n              tone=\"critical\"\n            />\n          )}\n        </Grid>\n      </Box>\n\n      {modalOpen && (\n        <Dialog\n          header=\"Place the marker and set radius on the map\"\n          id={`${dialogId}_dialog`}\n          onBlur={handleBlur}\n          onClose={handleCloseModal}\n          ref={dialogRef}\n          width={1}\n        >\n          <div className={dialogInnerContainer}>\n            <APIProvider apiKey={config.apiKey}>\n              <MapApiGate>\n                <GeopointRadiusSelect\n                  value={value || undefined}\n                  onChange={readOnly ? undefined : handleChange}\n                  defaultLocation={config.defaultLocation}\n                  defaultRadiusZoom={config.defaultRadiusZoom}\n                  defaultRadius={config.defaultRadius}\n                />\n              </MapApiGate>\n            </APIProvider>\n          </div>\n        </Dialog>\n      )}\n    </Stack>\n  )\n}\n","import {definePlugin, type SchemaType} from 'sanity'\n\nimport {GoogleMapsInputContext} from './diff/GeoConfigContext'\nimport {GeopointDiff} from './diff/GeopointDiff'\nimport {GeopointInput, type GeopointInputProps} from './input/GeopointInput'\nimport {GeopointRadiusInput, type GeopointRadiusInputProps} from './input/GeopointRadiusInput'\nimport type {GeopointSchemaType, GeopointRadiusSchemaType, GoogleMapsInputConfig} from './types'\n\nexport const googleMapsInput = definePlugin<GoogleMapsInputConfig>((config) => {\n  return {\n    name: 'google-maps-input',\n    studio: {\n      components: {\n        // Make the config (API key) available to diff components, which are\n        // resolved outside of the form and so can't receive it as a prop.\n        activeToolLayout: function GoogleMapsInputContextProvider(props) {\n          return (\n            <GoogleMapsInputContext value={config}>\n              {props.renderDefault(props)}\n            </GoogleMapsInputContext>\n          )\n        },\n      },\n    },\n    schema: {\n      types: [\n        {\n          name: 'geopointRadius',\n          title: 'Geopoint with Radius',\n          type: 'object',\n          // Only attach the map diff when there's a key to render it with;\n          // otherwise fall back to the default per-field (lat/lng/radius) diff.\n          components: config.apiKey ? {diff: GeopointDiff} : undefined,\n          fields: [\n            {\n              name: 'lat',\n              title: 'Latitude',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(-90).max(90),\n            },\n            {\n              name: 'lng',\n              title: 'Longitude',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(-180).max(180),\n            },\n            {\n              name: 'alt',\n              title: 'Altitude',\n              type: 'number',\n            },\n            {\n              name: 'radius',\n              title: 'Radius (meters)',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(1).max(50000),\n            },\n          ],\n          preview: {\n            select: {\n              lat: 'lat',\n              lng: 'lng',\n              radius: 'radius',\n            },\n            prepare({lat, lng, radius}: {lat?: number; lng?: number; radius?: number}) {\n              return {\n                title:\n                  typeof lat === 'number' && typeof lng === 'number'\n                    ? `${lat.toFixed(6)}, ${lng.toFixed(6)}`\n                    : 'No location set',\n                subtitle: radius ? `Radius: ${radius}m` : 'No radius set',\n              }\n            },\n          },\n        },\n      ],\n    },\n    form: {\n      components: {\n        input(props) {\n          if (isGeopoint(props.schemaType)) {\n            const castedProps = props as unknown as Omit<GeopointInputProps, 'geoConfig'>\n            return <GeopointInput {...castedProps} geoConfig={config} />\n          }\n          if (isGeopointRadius(props.schemaType)) {\n            const castedProps = props as unknown as Omit<GeopointRadiusInputProps, 'geoConfig'>\n            return <GeopointRadiusInput {...castedProps} geoConfig={config} />\n          }\n          return props.renderDefault(props)\n        },\n      },\n    },\n  }\n})\n\nfunction isGeopoint(schemaType: SchemaType): schemaType is GeopointSchemaType {\n  return isType('geopoint', schemaType)\n}\n\nfunction isGeopointRadius(schemaType: SchemaType): schemaType is GeopointRadiusSchemaType {\n  return isType('geopointRadius', schemaType)\n}\n\nfunction isType(name: string, schema?: SchemaType): boolean {\n  if (schema?.name === name) {\n    return true\n  } else if (!schema?.name) {\n    return false\n  }\n  return isType(name, schema?.type)\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["createStaticMapsUrl","StaticMapsLocation","Geopoint","GeopointRadius","DEFAULT_WIDTH","DEFAULT_HEIGHT","METERS_PER_DEGREE","MIN_LATITUDE_COSINE","CIRCLE_OUTLINE","CIRCLE_FILL","lngMetersPerDegree","lat","Math","max","cos","PI","StaticMapSize","width","height","DEFAULT_ZOOM","GeopointStaticMapOptions","zoom","getGeopointStaticMapUrl","value","Pick","apiKey","center","lng","scale","markers","location","generateCirclePoints","radius","points","steps","latRatio","lngRatio","i","angle","push","sin","BOUNDS_PADDING","getCircleBounds","padded","latDelta","lngDelta","getGeopointRadiusStaticMapUrl","paths","coordinates","color","weight","fillcolor","visible","createContext","GoogleMapsInputConfig","GoogleMapsInputContext","displayName","ImageIcon","Flex","Text","use","useState","getGeopointRadiusStaticMapUrl","getGeopointStaticMapUrl","Geopoint","GeopointRadius","GoogleMapsInputContext","mapDiffImage","mapDiffPlaceholder","MapValue","hasRadius","value","radius","StaticMapDiffPreview","t0","$","_c","failed","setFailed","apiKey","lat","lng","t1","Symbol","for","width","height","url","t2","t3","DiffFromTo","DiffProps","ObjectDiff","StaticMapDiffPreview","GeopointDiff","t0","$","_c","diff","schemaType","t1","ErrorOutlineIcon","WarningOutlineIcon","Box","Card","Flex","Stack","Text","Code","ReactNode","GET_API_KEY_URL","DEMO_KEY_URL","REQUIRED_APIS","const","RequiredApis","$","_c","t0","Symbol","for","map","_temp","api","MessageCard","tone","icon","title","children","t1","t2","t3","t4","t5","MissingApiKeyCard","typeTitle","t6","t7","t8","InvalidApiKeyCard","Flex","Spinner","APILoadingStatus","useApiLoadingStatus","ReactNode","InvalidApiKeyCard","MapApiGate","t0","$","_c","children","status","AUTH_FAILURE","FAILED","t1","Symbol","for","LOADED","LatLng","getValidLatLng","value","lat","lng","Number","isFinite","MAP_ID","useMap","useMapsLibrary","LatLng","searchInput","Props","onSelect","location","SearchInput","t0","$","_c","places","map","t1","t2","placePrediction","place","toPlace","fetchFields","fields","latLng","lat","lng","panTo","AdvancedMarker","ControlPosition","Map","MapCameraChangedEvent","MapMouseEvent","MapControl","useCallback","useRef","MAP_ID","SearchInput","Geopoint","LatLng","getValidLatLng","fallbackLatLng","lat","lng","defaultMapLocation","SelectProps","value","onChange","latLng","onZoomChange","zoom","defaultLocation","defaultZoom","GeopointSelect","t0","$","_c","t1","t2","undefined","t3","position","t4","center","t5","Math","round","lastZoomRef","t6","event","detail","handleMapClick","t7","event_0","handleMarkerDragEnd","t8","location","handleSelect","t9","event_1","current","handleZoomChanged","t10","t11","Symbol","for","width","height","t12","TOP_RIGHT","t13","Boolean","t14","StaticMap","useState","InvalidApiKeyCard","staticMapContainer","staticMapImage","StaticMapPreviewProps","url","onClick","onDoubleClick","StaticMapPreview","t0","$","_c","failed","setFailed","t1","Symbol","for","t2","t3","EditIcon","TrashIcon","Box","Button","Dialog","Grid","Stack","APIProvider","useCallback","useEffect","useId","useRef","useState","ObjectInputProps","set","setIfMissing","unset","ChangeIndicator","Path","MapApiGate","getGeopointStaticMapUrl","Geopoint","GoogleMapsInputConfig","LatLng","getValidLatLng","MissingApiKeyCard","GeopointSelect","StaticMapPreview","dialogInnerContainer","EMPTY_PATH","GeopointInputProps","geoConfig","GeopointInput","props","$","_c","changed","elementProps","focused","config","onChange","onPathFocus","path","readOnly","schemaType","value","id","ref","inputRef","onBlur","handleBlur","onFocus","handleFocus","ariaDescribedBy","schemaTypeName","name","dialogId","dialogRef","t0","current","focus","handleFocusButton","modalOpen","setModalOpen","t1","blur","handleCloseModal","t2","Symbol","for","_temp","handleToggleModal","t3","latLng","_type","lat","lng","handleChange","t4","zoom","handleZoomChange","t5","handleClear","t6","t7","apiKey","t8","position","staticImageUrl","t9","t10","t11","undefined","t12","t13","t14","t15","t16","saveZoom","defaultLocation","defaultZoom","t17","currentState","AdvancedMarker","Circle","ControlPosition","Map","MapMouseEvent","MapControl","useCallback","MAP_ID","SearchInput","GeopointRadius","LatLng","getValidLatLng","fallbackLatLng","lat","lng","defaultMapLocation","SelectProps","value","onChange","latLng","radius","defaultLocation","defaultRadiusZoom","defaultRadius","GeopointRadiusSelect","t0","$","_c","t1","t2","t3","undefined","t4","position","t5","center","currentRadius","t6","Math","round","setValue","t7","event","detail","handleMapClick","t8","event_0","handleMarkerDragEnd","t9","location","handleSelect","t10","radius_0","handleCircleRadiusChanged","t11","event_1","handleCircleDragEnd","t12","Symbol","for","width","height","t13","TOP_RIGHT","t14","Boolean","t15","EditIcon","TrashIcon","Box","Button","Dialog","Grid","Stack","TextInput","Label","APIProvider","useCallback","useEffect","useId","useRef","useState","ObjectInputProps","set","setIfMissing","unset","ChangeIndicator","Path","MapApiGate","getGeopointRadiusStaticMapUrl","GeopointRadius","GoogleMapsInputConfig","LatLng","getValidLatLng","MissingApiKeyCard","GeopointRadiusSelect","StaticMapPreview","dialogInnerContainer","EMPTY_PATH","GeopointRadiusInputProps","geoConfig","GeopointRadiusInput","props","$","_c","changed","elementProps","focused","config","onChange","onPathFocus","path","readOnly","schemaType","value","id","ref","inputRef","onBlur","handleBlur","onFocus","handleFocus","ariaDescribedBy","schemaTypeName","name","dialogId","dialogRef","t0","current","focus","handleFocusButton","modalOpen","setModalOpen","t1","blur","handleCloseModal","t2","Symbol","for","_temp","handleToggleModal","t3","defaultRadius","radius","latLng","currentRadius","_type","lat","lng","handleChange","t4","event","Math","round","Number","currentTarget","handleRadiusChange","t5","handleClear","t6","t7","apiKey","t8","position","radius_0","t9","staticImageUrl","t10","t11","t12","undefined","t13","t14","t15","t16","t17","defaultLocation","defaultRadiusZoom","t18","currentState","definePlugin","SchemaType","GoogleMapsInputContext","GeopointDiff","GeopointInput","GeopointInputProps","GeopointRadiusInput","GeopointRadiusInputProps","GeopointSchemaType","GeopointRadiusSchemaType","GoogleMapsInputConfig","googleMapsInput","config","name","studio","components","activeToolLayout","GoogleMapsInputContextProvider","props","renderDefault","schema","types","title","type","apiKey","diff","undefined","fields","validation","Rule","required","min","max","preview","select","lat","lng","radius","prepare","toFixed","subtitle","form","input","isGeopoint","schemaType","castedProps","Omit","isGeopointRadius","isType"],"sources":["../src/map/staticMapUrl.ts","../src/diff/GeoConfigContext.tsx","../src/diff/StaticMapDiffPreview.css.ts","../src/diff/StaticMapDiffPreview.tsx","../src/diff/GeopointDiff.tsx","../src/input/ApiKeyMessages.tsx","../src/map/MapApiGate.tsx","../src/utils.ts","../src/map/constants.ts","../src/map/SearchInput.css.ts","../src/map/SearchInput.tsx","../src/input/GeopointSelect.tsx","../src/input/StaticMapPreview.css.ts","../src/input/StaticMapPreview.tsx","../src/input/GeopointInput.css.ts","../src/input/GeopointInput.tsx","../src/input/GeopointRadiusSelect.tsx","../src/input/GeopointRadiusInput.tsx","../src/plugin.tsx"],"sourcesContent":["import {createStaticMapsUrl, type StaticMapsLocation} from '@vis.gl/react-google-maps'\n\nimport type {Geopoint, GeopointRadius} from '../types'\n\nconst DEFAULT_WIDTH = 640\nconst DEFAULT_HEIGHT = 300\n// Rough meters-per-degree of latitude, used to translate a radius in meters to a\n// lat/lng delta. Good enough for previewing modest radii.\nconst METERS_PER_DEGREE = 111_000\n// Clamp the latitude cosine away from zero so the radius→longitude conversion\n// can't divide by ~0 near the poles and produce Infinity/NaN coordinates.\nconst MIN_LATITUDE_COSINE = 0.01\nconst CIRCLE_OUTLINE = '0x4285F4'\nconst CIRCLE_FILL = '0x4285F480'\n\n// Meters per degree of longitude at a given latitude (shrinks toward the poles).\nfunction lngMetersPerDegree(lat: number): number {\n  return METERS_PER_DEGREE * Math.max(Math.cos((lat * Math.PI) / 180), MIN_LATITUDE_COSINE)\n}\n\nexport interface StaticMapSize {\n  width?: number\n  height?: number\n}\n\nconst DEFAULT_ZOOM = 13\n\ninterface GeopointStaticMapOptions extends StaticMapSize {\n  /** Zoom level for the preview. Defaults to {@link DEFAULT_ZOOM}. */\n  zoom?: number\n}\n\n/**\n * Static map preview for a plain geopoint: a single marker centered in view.\n */\nexport function getGeopointStaticMapUrl(\n  value: Pick<Geopoint, 'lat' | 'lng'>,\n  apiKey: string,\n  {\n    width = DEFAULT_WIDTH,\n    height = DEFAULT_HEIGHT,\n    zoom = DEFAULT_ZOOM,\n  }: GeopointStaticMapOptions = {},\n): string {\n  const center = {lat: value.lat, lng: value.lng}\n  return createStaticMapsUrl({\n    apiKey,\n    width,\n    height,\n    scale: 2,\n    zoom,\n    center,\n    markers: [{location: center}],\n  })\n}\n\nfunction generateCirclePoints(lat: number, lng: number, radius: number): StaticMapsLocation[] {\n  const points: StaticMapsLocation[] = []\n  const steps = 64\n  const latRatio = radius / METERS_PER_DEGREE\n  const lngRatio = radius / lngMetersPerDegree(lat)\n\n  for (let i = 0; i <= steps; i++) {\n    const angle = (i / steps) * 2 * Math.PI\n    points.push({\n      lat: lat + latRatio * Math.cos(angle),\n      lng: lng + lngRatio * Math.sin(angle),\n    })\n  }\n\n  return points\n}\n\n// Extra room around the circle so it never sits flush against the image edge.\n// The Static Maps API only offers discrete zoom levels, so without padding a\n// circle can end up tangent to the border at certain radii.\nconst BOUNDS_PADDING = 1.15\n\n/**\n * The four cardinal extremes of the (padded) circle. Passing these as `visible`\n * lets the Static Maps API auto-fit the viewport around the whole circle —\n * with margin — instead of clipping it.\n */\nfunction getCircleBounds(lat: number, lng: number, radius: number): StaticMapsLocation[] {\n  const padded = radius * BOUNDS_PADDING\n  const latDelta = padded / METERS_PER_DEGREE\n  const lngDelta = padded / lngMetersPerDegree(lat)\n  return [\n    {lat: lat + latDelta, lng},\n    {lat: lat - latDelta, lng},\n    {lat, lng: lng + lngDelta},\n    {lat, lng: lng - lngDelta},\n  ]\n}\n\n/**\n * Static map preview for a geopoint with a radius: a marker plus a filled circle.\n * The viewport is derived from the circle bounds (no fixed zoom) so the entire\n * radius stays within the image.\n */\nexport function getGeopointRadiusStaticMapUrl(\n  value: Pick<GeopointRadius, 'lat' | 'lng' | 'radius'>,\n  apiKey: string,\n  {width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT}: StaticMapSize = {},\n): string {\n  if (!value.radius) {\n    return getGeopointStaticMapUrl(value, apiKey, {width, height})\n  }\n\n  return createStaticMapsUrl({\n    apiKey,\n    width,\n    height,\n    scale: 2,\n    markers: [{location: {lat: value.lat, lng: value.lng}}],\n    paths: [\n      {\n        coordinates: generateCirclePoints(value.lat, value.lng, value.radius),\n        color: CIRCLE_OUTLINE,\n        weight: 2,\n        fillcolor: CIRCLE_FILL,\n      },\n    ],\n    visible: getCircleBounds(value.lat, value.lng, value.radius),\n  })\n}\n","import {createContext} from 'react'\n\nimport type {GoogleMapsInputConfig} from '../types'\n\n/**\n * Diff components are resolved by the Studio outside of the form, so they can't\n * receive the plugin config as a prop the way the inputs do. The plugin installs\n * this provider at the Studio layout level so diff previews can read the API key.\n */\nexport const GoogleMapsInputContext = createContext<GoogleMapsInputConfig | null>(null)\nGoogleMapsInputContext.displayName = 'GoogleMapsInputContext'\n","import {style} from '@vanilla-extract/css'\n\nexport const mapDiffImage = style({\n  display: 'block',\n  width: '100%',\n  height: 'auto',\n  objectFit: 'contain',\n  verticalAlign: 'top',\n})\n\nexport const mapDiffPlaceholder = style({\n  width: '100%',\n  minHeight: '80px',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n})\n","import {ImageIcon} from '@sanity/icons/Image'\nimport {Flex, Text} from '@sanity/ui'\nimport {use, useState} from 'react'\n\nimport {getGeopointRadiusStaticMapUrl, getGeopointStaticMapUrl} from '../map/staticMapUrl'\nimport type {Geopoint, GeopointRadius} from '../types'\nimport {GoogleMapsInputContext} from './GeoConfigContext'\n\nimport {mapDiffImage, mapDiffPlaceholder} from './StaticMapDiffPreview.css'\n\ntype MapValue = Geopoint | GeopointRadius\n\nfunction hasRadius(value: MapValue): value is GeopointRadius {\n  return typeof (value as GeopointRadius).radius === 'number'\n}\n\n/**\n * Renders the static map image for a single side of a geopoint/geopointRadius\n * diff. Used as the `previewComponent` for `DiffFromTo`, mirroring how the\n * built-in image diff shows a before/after thumbnail.\n */\nexport function StaticMapDiffPreview({value}: {value?: MapValue}) {\n  const [failed, setFailed] = useState(false)\n  const apiKey = use(GoogleMapsInputContext)?.apiKey\n\n  if (!value || typeof value.lat !== 'number' || typeof value.lng !== 'number' || !apiKey) {\n    return null\n  }\n\n  if (failed) {\n    return (\n      <div className={mapDiffPlaceholder}>\n        <Flex align=\"center\" gap={2} justify=\"center\" padding={3}>\n          <Text muted size={1}>\n            <ImageIcon />\n          </Text>\n          <Text muted size={1}>\n            Map preview unavailable\n          </Text>\n        </Flex>\n      </div>\n    )\n  }\n\n  const url = hasRadius(value)\n    ? getGeopointRadiusStaticMapUrl(value, apiKey, {width: 500, height: 280})\n    : getGeopointStaticMapUrl(value, apiKey, {width: 500, height: 280})\n\n  return (\n    <img\n      className={mapDiffImage}\n      alt=\"\"\n      src={url}\n      onError={() => setFailed(true)}\n      height={280}\n      width={500}\n    />\n  )\n}\n","import {DiffFromTo, type DiffProps, type ObjectDiff} from 'sanity'\n\nimport {StaticMapDiffPreview} from './StaticMapDiffPreview'\n\n/**\n * Diff component for `geopoint` and `geopointRadius` values. Renders a\n * before/after static map preview using `DiffFromTo`, matching the look of the\n * built-in image diff. Handles both types: the preview detects a `radius` field\n * and draws the radius circle when present.\n */\nexport function GeopointDiff({diff, schemaType}: DiffProps<ObjectDiff>) {\n  return (\n    <DiffFromTo\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={StaticMapDiffPreview}\n      layout=\"grid\"\n    />\n  )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {WarningOutlineIcon} from '@sanity/icons/WarningOutline'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {Code} from '@sanity/ui/code'\nimport type {ReactNode} from 'react'\n\nconst GET_API_KEY_URL = 'https://developers.google.com/maps/documentation/javascript/get-api-key'\nconst DEMO_KEY_URL = 'https://developers.google.com/maps/documentation/javascript/demo-key'\n\n// The APIs the key needs access to for the input to work end to end.\nconst REQUIRED_APIS = [\n  'Google Maps JavaScript API',\n  'Google Static Maps API',\n  'Google Places API (New)',\n] as const\n\nfunction RequiredApis() {\n  return (\n    <Box paddingLeft={3}>\n      <Stack as=\"ul\" gap={2}>\n        {REQUIRED_APIS.map((api) => (\n          <Text key={api} as=\"li\" size={1} muted>\n            {api}\n          </Text>\n        ))}\n      </Stack>\n    </Box>\n  )\n}\n\nfunction MessageCard({\n  tone,\n  icon,\n  title,\n  children,\n}: {\n  tone: 'caution' | 'critical'\n  icon: ReactNode\n  title: string\n  children: ReactNode\n}) {\n  return (\n    <Card padding={4} radius={2} tone={tone} border>\n      <Flex gap={3}>\n        <Box flex=\"none\">\n          <Text size={3}>{icon}</Text>\n        </Box>\n        <Stack flex={1} gap={4}>\n          <Text size={1} weight=\"semibold\">\n            {title}\n          </Text>\n          {children}\n        </Stack>\n      </Flex>\n    </Card>\n  )\n}\n\n/**\n * Shown when the plugin has not been given an API key. Explains how to provide\n * one in the plugin config and which Google APIs it needs.\n */\nexport function MissingApiKeyCard({typeTitle}: {typeTitle: string}) {\n  return (\n    <MessageCard tone=\"caution\" icon={<WarningOutlineIcon />} title=\"Google Maps API key required\">\n      <Text size={1} muted>\n        The {typeTitle} field uses Google Maps and needs an API key. Add one to the{' '}\n        <code>googleMapsInput</code> plugin configuration:\n      </Text>\n      <Card padding={3} radius={2} tone=\"transparent\" border overflow=\"auto\">\n        <Code size={1}>{`googleMapsInput({apiKey: 'your-api-key'})`}</Code>\n      </Card>\n      <Stack gap={3}>\n        <Text size={1} muted>\n          The key needs these APIs enabled:\n        </Text>\n        <RequiredApis />\n      </Stack>\n      <Text size={1} muted>\n        <a href={GET_API_KEY_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n          Get an API key\n        </a>\n        {' · '}\n        <a href={DEMO_KEY_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n          use a demo key to test\n        </a>\n      </Text>\n    </MessageCard>\n  )\n}\n\n/**\n * Shown when a key is configured but Google rejects the request (e.g. an\n * invalid/demo key, a restricted key, or one missing the required APIs).\n */\nexport function InvalidApiKeyCard() {\n  return (\n    <MessageCard tone=\"critical\" icon={<ErrorOutlineIcon />} title=\"Map preview couldn’t load\">\n      <Text size={1} muted>\n        The Google Maps API key was rejected. Check that it is a valid key — not a demo or\n        placeholder key — that it is not restricted in a way that blocks this Studio’s URL, and that\n        it has these APIs enabled:\n      </Text>\n      <RequiredApis />\n    </MessageCard>\n  )\n}\n","import {Flex, Spinner} from '@sanity/ui'\nimport {APILoadingStatus, useApiLoadingStatus} from '@vis.gl/react-google-maps'\nimport type {ReactNode} from 'react'\n\nimport {InvalidApiKeyCard} from '../input/ApiKeyMessages'\n\n/**\n * Renders the interactive map only once the Maps JavaScript API has loaded.\n * While loading it shows a spinner, and if the key is rejected it surfaces the\n * same \"invalid key\" guidance used by the static preview. Must be rendered\n * inside an `<APIProvider>`.\n */\nexport function MapApiGate({children}: {children: ReactNode}) {\n  const status = useApiLoadingStatus()\n\n  if (status === APILoadingStatus.AUTH_FAILURE || status === APILoadingStatus.FAILED) {\n    return <InvalidApiKeyCard />\n  }\n\n  if (status !== APILoadingStatus.LOADED) {\n    return (\n      <Flex align=\"center\" justify=\"center\" height=\"fill\" padding={4}>\n        <Spinner muted />\n      </Flex>\n    )\n  }\n\n  return <>{children}</>\n}\n","import type {LatLng} from './types'\n\n/**\n * Geopoint values can exist in a partial/empty state — a freshly added array\n * item is just `{_type, _key}` with no coordinates yet. Passing such a value's\n * `lat`/`lng` (which are `undefined`, or could be `NaN`/`Infinity`) to Google\n * Maps markers, circles or the map center throws an `InvalidValueError`. Use\n * this to extract a usable `LatLng` only when both coordinates are finite\n * numbers, and `null` otherwise.\n */\nexport function getValidLatLng(value: {lat?: number; lng?: number} | undefined): LatLng | null {\n  const lat = value?.lat\n  const lng = value?.lng\n  if (\n    typeof lat === 'number' &&\n    Number.isFinite(lat) &&\n    typeof lng === 'number' &&\n    Number.isFinite(lng)\n  ) {\n    return {lat, lng}\n  }\n  return null\n}\n","/**\n * Advanced markers require a vector map, which in turn requires a map id.\n * `DEMO_MAP_ID` is Google's reserved id for trying advanced markers without\n * creating a cloud-based map style; it renders the default (red) marker.\n */\nexport const MAP_ID = 'DEMO_MAP_ID'\n","import {style} from '@vanilla-extract/css'\n\nexport const searchInput = style({\n  margin: '10px',\n})\n","import {useMap, useMapsLibrary} from '@vis.gl/react-google-maps'\n\nimport type {LatLng} from '../types'\n\nimport {searchInput} from './SearchInput.css'\n\ninterface Props {\n  onSelect: (location: LatLng) => void\n}\n\n/**\n * Place search using the `<gmp-place-autocomplete>` web component (Places API\n * New). The element is provided by the `places` library, so we wait for it to\n * load before rendering, then listen for the `gmp-select` event.\n */\nexport function SearchInput({onSelect}: Props) {\n  const places = useMapsLibrary('places')\n  const map = useMap()\n\n  if (!places) {\n    return null\n  }\n\n  return (\n    <gmp-place-autocomplete\n      className={searchInput}\n      ongmp-select={async ({placePrediction}: google.maps.places.PlacePredictionSelectEvent) => {\n        const place = placePrediction.toPlace()\n        await place.fetchFields({fields: ['location']})\n\n        const location = place.location\n        if (!location) {\n          return\n        }\n\n        const latLng = {lat: location.lat(), lng: location.lng()}\n        onSelect(latLng)\n        map?.panTo(latLng)\n      }}\n    />\n  )\n}\n","import {\n  AdvancedMarker,\n  ControlPosition,\n  Map,\n  type MapCameraChangedEvent,\n  type MapMouseEvent,\n  MapControl,\n} from '@vis.gl/react-google-maps'\nimport {useCallback, useRef} from 'react'\n\nimport {MAP_ID} from '../map/constants'\nimport {SearchInput} from '../map/SearchInput'\nimport type {Geopoint, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\n\nconst fallbackLatLng: LatLng = {lat: 40.7058254, lng: -74.1180863}\nconst defaultMapLocation: LatLng = {lng: 10.74609, lat: 59.91273}\n\ninterface SelectProps {\n  value?: Geopoint\n  onChange?: (latLng: LatLng) => void\n  onZoomChange?: (zoom: number) => void\n  defaultLocation?: LatLng\n  defaultZoom?: number\n}\n\nexport function GeopointSelect({\n  value,\n  onChange,\n  onZoomChange,\n  defaultLocation = defaultMapLocation,\n  defaultZoom = 8,\n}: SelectProps) {\n  const position = getValidLatLng(value)\n  const center: LatLng = {\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }\n\n  // Seed with the zoom the map opens at so the initial `zoom_changed` the Maps\n  // API emits on load doesn't write a value before the user interacts. Only\n  // genuine, distinct integer zoom levels get persisted.\n  const lastZoomRef = useRef(Math.round(defaultZoom))\n\n  const handleMapClick = useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng && onChange) {\n        onChange(event.detail.latLng)\n      }\n    },\n    [onChange],\n  )\n\n  const handleMarkerDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng && onChange) {\n        onChange({lat: event.latLng.lat(), lng: event.latLng.lng()})\n      }\n    },\n    [onChange],\n  )\n\n  const handleSelect = useCallback(\n    (location: LatLng) => {\n      onChange?.(location)\n    },\n    [onChange],\n  )\n\n  const handleZoomChanged = useCallback(\n    (event: MapCameraChangedEvent) => {\n      if (!onZoomChange) return\n      const zoom = Math.round(event.detail.zoom)\n      if (zoom !== lastZoomRef.current) {\n        lastZoomRef.current = zoom\n        onZoomChange(zoom)\n      }\n    },\n    [onZoomChange],\n  )\n\n  return (\n    <Map\n      mapId={MAP_ID}\n      defaultCenter={center}\n      defaultZoom={defaultZoom}\n      onClick={handleMapClick}\n      onZoomChanged={onZoomChange ? handleZoomChanged : undefined}\n      gestureHandling=\"greedy\"\n      streetViewControl={false}\n      mapTypeControl={false}\n      style={{width: '100%', height: '100%'}}\n    >\n      <MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>\n      {position && (\n        <AdvancedMarker\n          position={position}\n          draggable={Boolean(onChange)}\n          onDragEnd={handleMarkerDragEnd}\n        />\n      )}\n    </Map>\n  )\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const staticMapContainer = style({\n  cursor: 'pointer',\n})\nexport const staticMapImage = style({\n  width: '100%',\n  height: 'auto',\n  display: 'block',\n  verticalAlign: 'top',\n})\n","import {StaticMap} from '@vis.gl/react-google-maps'\nimport {useState} from 'react'\n\nimport {InvalidApiKeyCard} from './ApiKeyMessages'\n\nimport {staticMapContainer, staticMapImage} from './StaticMapPreview.css'\n\ninterface StaticMapPreviewProps {\n  url: string\n  onClick?: () => void\n  onDoubleClick?: () => void\n}\n\n/**\n * Renders the Google Static Maps preview (via the library's `StaticMap`). If\n * the image is rejected (invalid/demo key, restricted, or missing Static Maps\n * API access) the broken image is replaced with a helpful error card.\n */\nexport function StaticMapPreview({url, onClick, onDoubleClick}: StaticMapPreviewProps) {\n  const [failed, setFailed] = useState(false)\n\n  if (failed) {\n    return <InvalidApiKeyCard />\n  }\n\n  return (\n    // oxlint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions\n    <div\n      className={staticMapContainer}\n      onClick={onClick}\n      onDoubleClick={onDoubleClick}\n      onErrorCapture={() => setFailed(true)}\n    >\n      <StaticMap className={staticMapImage} url={url} />\n    </div>\n  )\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const dialogInnerContainer = style({\n  height: '40rem',\n})\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Dialog, Grid, Stack} from '@sanity/ui'\nimport {APIProvider} from '@vis.gl/react-google-maps'\nimport {useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset, ChangeIndicator, type Path} from 'sanity'\n\nimport {MapApiGate} from '../map/MapApiGate'\nimport {getGeopointStaticMapUrl} from '../map/staticMapUrl'\nimport type {Geopoint, GoogleMapsInputConfig, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\nimport {MissingApiKeyCard} from './ApiKeyMessages'\nimport {GeopointSelect} from './GeopointSelect'\nimport {StaticMapPreview} from './StaticMapPreview'\n\nimport {dialogInnerContainer} from './GeopointInput.css'\n\nconst EMPTY_PATH: Path = []\n\nexport type GeopointInputProps = ObjectInputProps<Geopoint> & {\n  geoConfig: GoogleMapsInputConfig\n}\n\nexport function GeopointInput(props: GeopointInputProps) {\n  const {\n    changed,\n    elementProps,\n    focused,\n    geoConfig: config,\n    onChange,\n    onPathFocus,\n    path,\n    readOnly,\n    schemaType,\n    value,\n  } = props\n\n  const {\n    id,\n    ref: inputRef,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    'aria-describedby': ariaDescribedBy,\n  } = elementProps\n\n  const schemaTypeName = schemaType.name\n  const dialogId = useId()\n  const dialogRef = useRef<HTMLDivElement | null>(null)\n  const handleFocusButton = useCallback(() => inputRef?.current?.focus(), [inputRef])\n  const [modalOpen, setModalOpen] = useState(false)\n\n  const handleCloseModal = useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])\n\n  const handleToggleModal = useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\n  )\n\n  const handleChange = useCallback(\n    (latLng: LatLng) => {\n      onChange([\n        setIfMissing({_type: schemaTypeName}),\n        set(latLng.lat, ['lat']),\n        set(latLng.lng, ['lng']),\n      ])\n    },\n    [schemaTypeName, onChange],\n  )\n\n  const handleZoomChange = useCallback(\n    (zoom: number) => {\n      onChange([setIfMissing({_type: schemaTypeName}), set(zoom, ['zoom'])])\n    },\n    [schemaTypeName, onChange],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  useEffect(() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }, [modalOpen, onPathFocus])\n\n  if (!config || !config.apiKey) {\n    return <MissingApiKeyCard typeTitle=\"Geopoint\" />\n  }\n\n  // A geopoint is only renderable on a map once it has finite coordinates. A\n  // freshly added array item is `{_type, _key}` with no lat/lng yet, so gate the\n  // map preview and \"edit\" affordances on having a real location.\n  const position = getValidLatLng(value)\n  const staticImageUrl = position\n    ? getGeopointStaticMapUrl(position, config.apiKey, {zoom: value?.zoom})\n    : null\n\n  return (\n    <Stack gap={3}>\n      {staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\n      )}\n\n      <Box>\n        <Grid gridTemplateColumns={position ? 2 : 1} gap={3}>\n          <Button\n            aria-describedby={ariaDescribedBy}\n            disabled={readOnly}\n            icon={position ? EditIcon : undefined}\n            id={id}\n            mode=\"ghost\"\n            onClick={handleToggleModal}\n            onFocus={handleFocus}\n            padding={3}\n            ref={inputRef}\n            text={position ? 'Edit' : 'Set location'}\n          />\n\n          {position && (\n            <Button\n              disabled={readOnly}\n              icon={TrashIcon}\n              mode=\"ghost\"\n              onClick={handleClear}\n              padding={3}\n              text=\"Remove\"\n              tone=\"critical\"\n            />\n          )}\n        </Grid>\n      </Box>\n\n      {modalOpen && (\n        <Dialog\n          header=\"Place the marker on the map\"\n          id={`${dialogId}_dialog`}\n          onBlur={handleBlur}\n          onClose={handleCloseModal}\n          ref={dialogRef}\n          width={1}\n        >\n          <div className={dialogInnerContainer}>\n            <APIProvider apiKey={config.apiKey}>\n              <MapApiGate>\n                <GeopointSelect\n                  value={value || undefined}\n                  onChange={readOnly ? undefined : handleChange}\n                  onZoomChange={readOnly || !config.saveZoom ? undefined : handleZoomChange}\n                  defaultLocation={config.defaultLocation}\n                  defaultZoom={value?.zoom || config.defaultZoom}\n                />\n              </MapApiGate>\n            </APIProvider>\n          </div>\n        </Dialog>\n      )}\n    </Stack>\n  )\n}\n","import {\n  AdvancedMarker,\n  Circle,\n  ControlPosition,\n  Map,\n  type MapMouseEvent,\n  MapControl,\n} from '@vis.gl/react-google-maps'\nimport {useCallback} from 'react'\n\nimport {MAP_ID} from '../map/constants'\nimport {SearchInput} from '../map/SearchInput'\nimport type {GeopointRadius, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\n\nconst fallbackLatLng: LatLng = {lat: 40.7058254, lng: -74.1180863}\nconst defaultMapLocation: LatLng = {lng: 10.74609, lat: 59.91273}\n\ninterface SelectProps {\n  value?: GeopointRadius\n  onChange?: (latLng: LatLng, radius?: number) => void\n  defaultLocation?: LatLng\n  defaultRadiusZoom?: number\n  defaultRadius?: number\n}\n\nexport function GeopointRadiusSelect({\n  value,\n  onChange,\n  defaultLocation = defaultMapLocation,\n  defaultRadiusZoom = 12,\n  defaultRadius = 1000,\n}: SelectProps) {\n  const position = getValidLatLng(value)\n  const center: LatLng = {\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }\n  const currentRadius = value?.radius ?? defaultRadius\n\n  const setValue = useCallback(\n    (latLng: LatLng, radius?: number) => {\n      onChange?.(latLng, radius == null ? undefined : Math.round(radius))\n    },\n    [onChange],\n  )\n\n  const handleMapClick = useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng) {\n        setValue(event.detail.latLng, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  const handleMarkerDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng) {\n        setValue({lat: event.latLng.lat(), lng: event.latLng.lng()}, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  const handleSelect = useCallback(\n    (location: LatLng) => setValue(location, currentRadius),\n    [setValue, currentRadius],\n  )\n\n  const handleCircleRadiusChanged = useCallback(\n    (radius: number) => {\n      if (value) {\n        setValue({lat: value.lat, lng: value.lng}, radius)\n      }\n    },\n    [setValue, value],\n  )\n\n  const handleCircleDragEnd = useCallback(\n    (event: google.maps.MapMouseEvent) => {\n      if (event.latLng) {\n        setValue({lat: event.latLng.lat(), lng: event.latLng.lng()}, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )\n\n  return (\n    <Map\n      mapId={MAP_ID}\n      defaultCenter={center}\n      defaultZoom={defaultRadiusZoom}\n      onClick={handleMapClick}\n      gestureHandling=\"greedy\"\n      streetViewControl={false}\n      mapTypeControl={false}\n      style={{width: '100%', height: '100%'}}\n    >\n      <MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>\n      {position && (\n        <>\n          <AdvancedMarker\n            position={position}\n            draggable={Boolean(onChange)}\n            onDragEnd={handleMarkerDragEnd}\n          />\n          <Circle\n            center={position}\n            radius={currentRadius}\n            editable={Boolean(onChange)}\n            draggable={Boolean(onChange)}\n            fillColor=\"#4285F4\"\n            fillOpacity={0.2}\n            strokeColor=\"#4285F4\"\n            strokeOpacity={0.8}\n            strokeWeight={2}\n            onRadiusChanged={handleCircleRadiusChanged}\n            onDragEnd={handleCircleDragEnd}\n          />\n        </>\n      )}\n    </Map>\n  )\n}\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Dialog, Grid, Stack, TextInput, Label} from '@sanity/ui'\nimport {APIProvider} from '@vis.gl/react-google-maps'\nimport {useCallback, useEffect, useId, useRef, useState} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset, ChangeIndicator, type Path} from 'sanity'\n\nimport {MapApiGate} from '../map/MapApiGate'\nimport {getGeopointRadiusStaticMapUrl} from '../map/staticMapUrl'\nimport type {GeopointRadius, GoogleMapsInputConfig, LatLng} from '../types'\nimport {getValidLatLng} from '../utils'\nimport {MissingApiKeyCard} from './ApiKeyMessages'\nimport {GeopointRadiusSelect} from './GeopointRadiusSelect'\nimport {StaticMapPreview} from './StaticMapPreview'\n\nimport {dialogInnerContainer} from './GeopointInput.css'\n\nconst EMPTY_PATH: Path = []\n\nexport type GeopointRadiusInputProps = ObjectInputProps<GeopointRadius> & {\n  geoConfig: GoogleMapsInputConfig\n}\n\nexport function GeopointRadiusInput(props: GeopointRadiusInputProps) {\n  const {\n    changed,\n    elementProps,\n    focused,\n    geoConfig: config,\n    onChange,\n    onPathFocus,\n    path,\n    readOnly,\n    schemaType,\n    value,\n  } = props\n\n  const {\n    id,\n    ref: inputRef,\n    onBlur: handleBlur,\n    onFocus: handleFocus,\n    'aria-describedby': ariaDescribedBy,\n  } = elementProps\n\n  const schemaTypeName = schemaType.name\n  const dialogId = useId()\n  const dialogRef = useRef<HTMLDivElement | null>(null)\n  const handleFocusButton = useCallback(() => inputRef?.current?.focus(), [inputRef])\n  const [modalOpen, setModalOpen] = useState(false)\n\n  const handleCloseModal = useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])\n\n  const handleToggleModal = useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\n  )\n\n  const handleChange = useCallback(\n    (latLng: LatLng, radius?: number) => {\n      const currentRadius = radius ?? value?.radius ?? config.defaultRadius ?? 1000\n      onChange([\n        setIfMissing({_type: schemaTypeName}),\n        set(latLng.lat, ['lat']),\n        set(latLng.lng, ['lng']),\n        set(currentRadius, ['radius']),\n      ])\n    },\n    [schemaTypeName, onChange, value?.radius, config.defaultRadius],\n  )\n\n  const handleRadiusChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      if (value) {\n        onChange([set(Math.round(Number(event.currentTarget.value)), ['radius'])])\n      }\n    },\n    [onChange, value],\n  )\n\n  const handleClear = useCallback(() => {\n    onChange(unset())\n  }, [onChange])\n\n  useEffect(() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }, [modalOpen, onPathFocus])\n\n  if (!config || !config.apiKey) {\n    return <MissingApiKeyCard typeTitle=\"Geopoint Radius\" />\n  }\n\n  // A geopoint is only renderable on a map once it has finite coordinates. A\n  // freshly added array item is `{_type, _key}` with no lat/lng yet, so gate the\n  // map preview, radius control and \"edit\" affordances on having a real location.\n  const position = getValidLatLng(value)\n  const radius = Math.round(value?.radius || config.defaultRadius || 1000)\n  const staticImageUrl = position\n    ? getGeopointRadiusStaticMapUrl(\n        {lat: position.lat, lng: position.lng, radius: value?.radius ?? 0},\n        config.apiKey,\n      )\n    : null\n\n  return (\n    <Stack gap={3}>\n      {staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\n      )}\n\n      {position && (\n        <Stack gap={2}>\n          <Label>Radius (meters)</Label>\n          <TextInput\n            type=\"number\"\n            value={radius}\n            onChange={handleRadiusChange}\n            disabled={readOnly}\n            min={1}\n            max={50000}\n            step={1}\n          />\n        </Stack>\n      )}\n\n      <Box>\n        <Grid gridTemplateColumns={position ? 2 : 1} gap={3}>\n          <Button\n            aria-describedby={ariaDescribedBy}\n            disabled={readOnly}\n            icon={position ? EditIcon : undefined}\n            id={id}\n            mode=\"ghost\"\n            onClick={handleToggleModal}\n            onFocus={handleFocus}\n            padding={3}\n            ref={inputRef}\n            text={position ? 'Edit' : 'Set location and radius'}\n          />\n\n          {position && (\n            <Button\n              disabled={readOnly}\n              icon={TrashIcon}\n              mode=\"ghost\"\n              onClick={handleClear}\n              padding={3}\n              text=\"Remove\"\n              tone=\"critical\"\n            />\n          )}\n        </Grid>\n      </Box>\n\n      {modalOpen && (\n        <Dialog\n          header=\"Place the marker and set radius on the map\"\n          id={`${dialogId}_dialog`}\n          onBlur={handleBlur}\n          onClose={handleCloseModal}\n          ref={dialogRef}\n          width={1}\n        >\n          <div className={dialogInnerContainer}>\n            <APIProvider apiKey={config.apiKey}>\n              <MapApiGate>\n                <GeopointRadiusSelect\n                  value={value || undefined}\n                  onChange={readOnly ? undefined : handleChange}\n                  defaultLocation={config.defaultLocation}\n                  defaultRadiusZoom={config.defaultRadiusZoom}\n                  defaultRadius={config.defaultRadius}\n                />\n              </MapApiGate>\n            </APIProvider>\n          </div>\n        </Dialog>\n      )}\n    </Stack>\n  )\n}\n","import {definePlugin, type SchemaType} from 'sanity'\n\nimport {GoogleMapsInputContext} from './diff/GeoConfigContext'\nimport {GeopointDiff} from './diff/GeopointDiff'\nimport {GeopointInput, type GeopointInputProps} from './input/GeopointInput'\nimport {GeopointRadiusInput, type GeopointRadiusInputProps} from './input/GeopointRadiusInput'\nimport type {GeopointSchemaType, GeopointRadiusSchemaType, GoogleMapsInputConfig} from './types'\n\nexport const googleMapsInput = definePlugin<GoogleMapsInputConfig>((config) => {\n  return {\n    name: 'google-maps-input',\n    studio: {\n      components: {\n        // Make the config (API key) available to diff components, which are\n        // resolved outside of the form and so can't receive it as a prop.\n        activeToolLayout: function GoogleMapsInputContextProvider(props) {\n          return (\n            <GoogleMapsInputContext value={config}>\n              {props.renderDefault(props)}\n            </GoogleMapsInputContext>\n          )\n        },\n      },\n    },\n    schema: {\n      types: [\n        {\n          name: 'geopointRadius',\n          title: 'Geopoint with Radius',\n          type: 'object',\n          // Only attach the map diff when there's a key to render it with;\n          // otherwise fall back to the default per-field (lat/lng/radius) diff.\n          components: config.apiKey ? {diff: GeopointDiff} : undefined,\n          fields: [\n            {\n              name: 'lat',\n              title: 'Latitude',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(-90).max(90),\n            },\n            {\n              name: 'lng',\n              title: 'Longitude',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(-180).max(180),\n            },\n            {\n              name: 'alt',\n              title: 'Altitude',\n              type: 'number',\n            },\n            {\n              name: 'radius',\n              title: 'Radius (meters)',\n              type: 'number',\n              validation: (Rule) => Rule.required().min(1).max(50000),\n            },\n          ],\n          preview: {\n            select: {\n              lat: 'lat',\n              lng: 'lng',\n              radius: 'radius',\n            },\n            prepare({lat, lng, radius}: {lat?: number; lng?: number; radius?: number}) {\n              return {\n                title:\n                  typeof lat === 'number' && typeof lng === 'number'\n                    ? `${lat.toFixed(6)}, ${lng.toFixed(6)}`\n                    : 'No location set',\n                subtitle: radius ? `Radius: ${radius}m` : 'No radius set',\n              }\n            },\n          },\n        },\n      ],\n    },\n    form: {\n      components: {\n        input(props) {\n          if (isGeopoint(props.schemaType)) {\n            const castedProps = props as unknown as Omit<GeopointInputProps, 'geoConfig'>\n            return <GeopointInput {...castedProps} geoConfig={config} />\n          }\n          if (isGeopointRadius(props.schemaType)) {\n            const castedProps = props as unknown as Omit<GeopointRadiusInputProps, 'geoConfig'>\n            return <GeopointRadiusInput {...castedProps} geoConfig={config} />\n          }\n          return props.renderDefault(props)\n        },\n      },\n    },\n  }\n})\n\nfunction isGeopoint(schemaType: SchemaType): schemaType is GeopointSchemaType {\n  return isType('geopoint', schemaType)\n}\n\nfunction isGeopointRadius(schemaType: SchemaType): schemaType is GeopointRadiusSchemaType {\n  return isType('geopointRadius', schemaType)\n}\n\nfunction isType(name: string, schema?: SchemaType): boolean {\n  if (schema?.name === name) {\n    return true\n  } else if (!schema?.name) {\n    return false\n  }\n  return isType(name, schema?.type)\n}\n"],"mappings":"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"}
\ No newline at end of file