@sanity/google-maps-input

6.1.126.1.13
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","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
+{"version":3,"file":"index.js","names":["{value}: {value?: MapValue}","<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>","hasRadius(value)\n    ? getGeopointRadiusStaticMapUrl(value, apiKey, {width: 500, height: 280})\n    : getGeopointStaticMapUrl(value, apiKey, {width: 500, height: 280})","() => setFailed(true)","<img\n      className={mapDiffImage}\n      alt=\"\"\n      src={url}\n      onError={() => setFailed(true)}\n      height={280}\n      width={500}\n    />","{diff, schemaType}: DiffProps<ObjectDiff>","<DiffFromTo\n      diff={diff}\n      schemaType={schemaType}\n      previewComponent={StaticMapDiffPreview}\n      layout=\"grid\"\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>","(api) => (\n          <Text key={api} as=\"li\" size={1} muted>\n            {api}\n          </Text>\n        )","{\n  tone,\n  icon,\n  title,\n  children,\n}: {\n  tone: 'caution' | 'critical'\n  icon: ReactNode\n  title: string\n  children: ReactNode\n}","<Box flex=\"none\">\n          <Text size={3}>{icon}</Text>\n        </Box>","<Text size={1} weight=\"semibold\">\n            {title}\n          </Text>","<Stack flex={1} gap={4}>\n          <Text size={1} weight=\"semibold\">\n            {title}\n          </Text>\n          {children}\n        </Stack>","<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>","<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>","{typeTitle}: {typeTitle: string}","<WarningOutlineIcon />","<code>googleMapsInput</code>","<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>","<Card padding={3} radius={2} tone=\"transparent\" border overflow=\"auto\">\n        <Code size={1}>{`googleMapsInput({apiKey: 'your-api-key'})`}</Code>\n      </Card>","<Stack gap={3}>\n        <Text size={1} muted>\n          The key needs these APIs enabled:\n        </Text>\n        <RequiredApis />\n      </Stack>","<a href={GET_API_KEY_URL} target=\"_blank\" rel=\"noopener noreferrer\">\n          Get an API key\n        </a>","<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>","<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>","<ErrorOutlineIcon />","<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>","{children}: {children: ReactNode}","<InvalidApiKeyCard />","<Flex align=\"center\" justify=\"center\" height=\"fill\" padding={4}>\n        <Spinner muted />\n      </Flex>","<>{children}</>","{onSelect}: Props","<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    />","map?.panTo","{placePrediction}: google.maps.places.PlacePredictionSelectEvent","{\n  value,\n  onChange,\n  onZoomChange,\n  defaultLocation = defaultMapLocation,\n  defaultZoom = 8,\n}: SelectProps","defaultLocation = defaultMapLocation","defaultZoom = 8","getValidLatLng(value)","{\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }","Math.round(defaultZoom)","(event: MapMouseEvent) => {\n      if (event.detail.latLng && onChange) {\n        onChange(event.detail.latLng)\n      }\n    }","useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng && onChange) {\n        onChange(event.detail.latLng)\n      }\n    },\n    [onChange],\n  )","(event: google.maps.MapMouseEvent) => {\n      if (event.latLng && onChange) {\n        onChange({lat: event.latLng.lat(), lng: event.latLng.lng()})\n      }\n    }","event","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  )","(location: LatLng) => {\n      onChange?.(location)\n    }","useCallback(\n    (location: LatLng) => {\n      onChange?.(location)\n    },\n    [onChange],\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    }","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  )","{width: '100%', height: '100%'}","<MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>","position && (\n        <AdvancedMarker\n          position={position}\n          draggable={Boolean(onChange)}\n          onDragEnd={handleMarkerDragEnd}\n        />\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>","onZoomChange ? handleZoomChanged : undefined","{url, onClick, onDoubleClick}: StaticMapPreviewProps","<InvalidApiKeyCard />","() => setFailed(true)","<StaticMap className={staticMapImage} url={url} />","<div\n      className={staticMapContainer}\n      onClick={onClick}\n      onDoubleClick={onDoubleClick}\n      onErrorCapture={() => setFailed(true)}\n    >\n      <StaticMap className={staticMapImage} url={url} />\n    </div>","() => inputRef?.current?.focus()","inputRef?.current?.focus","useCallback(() => inputRef?.current?.focus(), [inputRef])","() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }","useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])","() => setModalOpen((currentState) => !currentState)","(currentState) => !currentState","useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\n  )","(latLng: LatLng) => {\n      onChange([\n        setIfMissing({_type: schemaTypeName}),\n        set(latLng.lat, ['lat']),\n        set(latLng.lng, ['lng']),\n      ])\n    }","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  )","(zoom: number) => {\n      onChange([setIfMissing({_type: schemaTypeName}), set(zoom, ['zoom'])])\n    }","useCallback(\n    (zoom: number) => {\n      onChange([setIfMissing({_type: schemaTypeName}), set(zoom, ['zoom'])])\n    },\n    [schemaTypeName, onChange],\n  )","() => {\n    onChange(unset())\n  }","useCallback(() => {\n    onChange(unset())\n  }, [onChange])","() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }","[modalOpen, onPathFocus]","<MissingApiKeyCard typeTitle=\"Geopoint\" />","position\n    ? getGeopointStaticMapUrl(position, config.apiKey, {zoom: value?.zoom})\n    : null","config.apiKey","staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\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          />","position ? EditIcon : undefined","position ? 'Edit' : 'Set location'","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          )","<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>","position ? 2 : 1","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      )","config.saveZoom","<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  value,\n  onChange,\n  defaultLocation = defaultMapLocation,\n  defaultRadiusZoom = 12,\n  defaultRadius = 1000,\n}: SelectProps","defaultLocation = defaultMapLocation","defaultRadiusZoom = 12","defaultRadius = 1000","getValidLatLng(value)","{\n    ...fallbackLatLng,\n    ...defaultLocation,\n    ...position,\n  }","(latLng: LatLng, radius?: number) => {\n      onChange?.(latLng, radius == null ? undefined : Math.round(radius))\n    }","useCallback(\n    (latLng: LatLng, radius?: number) => {\n      onChange?.(latLng, radius == null ? undefined : Math.round(radius))\n    },\n    [onChange],\n  )","(event: MapMouseEvent) => {\n      if (event.detail.latLng) {\n        setValue(event.detail.latLng, currentRadius)\n      }\n    }","useCallback(\n    (event: MapMouseEvent) => {\n      if (event.detail.latLng) {\n        setValue(event.detail.latLng, currentRadius)\n      }\n    },\n    [setValue, currentRadius],\n  )","(event: google.maps.MapMouseEvent) => {\n      if (event.latLng) {\n        setValue({lat: event.latLng.lat(), lng: event.latLng.lng()}, currentRadius)\n      }\n    }","event","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  )","(location: LatLng) => setValue(location, currentRadius)","useCallback(\n    (location: LatLng) => setValue(location, currentRadius),\n    [setValue, currentRadius],\n  )","(radius: number) => {\n      if (value) {\n        setValue({lat: value.lat, lng: value.lng}, radius)\n      }\n    }","radius","useCallback(\n    (radius: number) => {\n      if (value) {\n        setValue({lat: value.lat, lng: value.lng}, radius)\n      }\n    },\n    [setValue, value],\n  )","{width: '100%', height: '100%'}","<MapControl position={ControlPosition.TOP_RIGHT}>\n        <SearchInput onSelect={handleSelect} />\n      </MapControl>","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      )","<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>","() => inputRef?.current?.focus()","inputRef?.current?.focus","useCallback(() => inputRef?.current?.focus(), [inputRef])","() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }","useCallback(() => {\n    if (dialogRef.current) dialogRef.current.blur()\n    setModalOpen(false)\n    handleFocusButton()\n  }, [setModalOpen, handleFocusButton])","() => setModalOpen((currentState) => !currentState)","(currentState) => !currentState","useCallback(\n    () => setModalOpen((currentState) => !currentState),\n    [setModalOpen],\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    }","defaultRadius","radius","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  )","(event: React.ChangeEvent<HTMLInputElement>) => {\n      if (value) {\n        onChange([set(Math.round(Number(event.currentTarget.value)), ['radius'])])\n      }\n    }","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    onChange(unset())\n  }","useCallback(() => {\n    onChange(unset())\n  }, [onChange])","() => {\n    if (modalOpen) {\n      onPathFocus(EMPTY_PATH)\n    }\n  }","[modalOpen, onPathFocus]","<MissingApiKeyCard typeTitle=\"Geopoint Radius\" />","position\n    ? getGeopointRadiusStaticMapUrl(\n        {lat: position.lat, lng: position.lng, radius: value?.radius ?? 0},\n        config.apiKey,\n      )\n    : null","apiKey","Math.round(value?.radius || config.defaultRadius || 1000)","staticImageUrl && (\n        <ChangeIndicator path={path} isChanged={changed} hasFocus={!!focused}>\n          <StaticMapPreview\n            url={staticImageUrl}\n            onClick={handleFocusButton}\n            onDoubleClick={handleToggleModal}\n          />\n        </ChangeIndicator>\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      )","<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          />","position ? EditIcon : undefined","position ? 'Edit' : 'Set location and radius'","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          )","<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>","position ? 2 : 1","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      )","defaultLocation","defaultRadiusZoom","<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>"],"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