@sanity/google-maps-input 5.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,319 +1,268 @@
1
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
- import { EditIcon, TrashIcon } from "@sanity/icons";
4
- import { Card, Box, Text, Code, TextInput, Stack, Button, Grid, Dialog, Label } from "@sanity/ui";
5
- import { useState, useEffect, PureComponent, createRef, useId, useRef } from "react";
6
- import { ChangeIndicator, setIfMissing, set, unset, useUserColor, getAnnotationAtPath, DiffTooltip, definePlugin } from "sanity";
3
+ import { DiffFromTo, setIfMissing, set, unset, ChangeIndicator, definePlugin } from "sanity";
4
+ import { ImageIcon, WarningOutlineIcon, ErrorOutlineIcon, EditIcon, TrashIcon } from "@sanity/icons";
5
+ import { Flex, Text, Card, Box, Stack, Code, Spinner, Button, Grid, Dialog, Label, TextInput } from "@sanity/ui";
6
+ import { createContext, useState, use, useId, useRef, useEffect } from "react";
7
+ import { createStaticMapsUrl, useApiLoadingStatus, APILoadingStatus, useMapsLibrary, useMap, Map, MapControl, ControlPosition, AdvancedMarker, StaticMap, APIProvider, Circle } from "@vis.gl/react-google-maps";
7
8
  import { styled } from "styled-components";
8
- let config;
9
- function getGeoConfig() {
10
- return config;
9
+ const DEFAULT_WIDTH = 640, DEFAULT_HEIGHT = 300, METERS_PER_DEGREE = 111e3, MIN_LATITUDE_COSINE = 0.01, CIRCLE_OUTLINE = "0x4285F4", CIRCLE_FILL = "0x4285F480";
10
+ function lngMetersPerDegree(lat) {
11
+ return METERS_PER_DEGREE * Math.max(Math.cos(lat * Math.PI / 180), MIN_LATITUDE_COSINE);
12
+ }
13
+ function getGeopointStaticMapUrl(value, apiKey, {
14
+ width = DEFAULT_WIDTH,
15
+ height = DEFAULT_HEIGHT
16
+ } = {}) {
17
+ const center = {
18
+ lat: value.lat,
19
+ lng: value.lng
20
+ };
21
+ return createStaticMapsUrl({
22
+ apiKey,
23
+ width,
24
+ height,
25
+ scale: 2,
26
+ zoom: 13,
27
+ center,
28
+ markers: [{
29
+ location: center
30
+ }]
31
+ });
11
32
  }
12
- function setGeoConfig(newConfig) {
13
- config = newConfig;
33
+ function generateCirclePoints(lat, lng, radius) {
34
+ const points = [], latRatio = radius / METERS_PER_DEGREE, lngRatio = radius / lngMetersPerDegree(lat);
35
+ for (let i = 0; i <= 64; i++) {
36
+ const angle = i / 64 * 2 * Math.PI;
37
+ points.push({
38
+ lat: lat + latRatio * Math.cos(angle),
39
+ lng: lng + lngRatio * Math.sin(angle)
40
+ });
41
+ }
42
+ return points;
14
43
  }
15
- function LoadError(props) {
16
- const $ = c(3);
17
- let t0;
18
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = /* @__PURE__ */ jsx(Box, { as: "header", paddingX: 4, paddingTop: 4, paddingBottom: 1, children: /* @__PURE__ */ jsx(Text, { as: "h2", weight: "bold", children: "Google Maps failed to load" }) }), $[0] = t0) : t0 = $[0];
44
+ const BOUNDS_PADDING = 1.15;
45
+ function getCircleBounds(lat, lng, radius) {
46
+ const padded = radius * BOUNDS_PADDING, latDelta = padded / METERS_PER_DEGREE, lngDelta = padded / lngMetersPerDegree(lat);
47
+ return [{
48
+ lat: lat + latDelta,
49
+ lng
50
+ }, {
51
+ lat: lat - latDelta,
52
+ lng
53
+ }, {
54
+ lat,
55
+ lng: lng + lngDelta
56
+ }, {
57
+ lat,
58
+ lng: lng - lngDelta
59
+ }];
60
+ }
61
+ function getGeopointRadiusStaticMapUrl(value, apiKey, {
62
+ width = DEFAULT_WIDTH,
63
+ height = DEFAULT_HEIGHT
64
+ } = {}) {
65
+ return value.radius ? createStaticMapsUrl({
66
+ apiKey,
67
+ width,
68
+ height,
69
+ scale: 2,
70
+ markers: [{
71
+ location: {
72
+ lat: value.lat,
73
+ lng: value.lng
74
+ }
75
+ }],
76
+ paths: [{
77
+ coordinates: generateCirclePoints(value.lat, value.lng, value.radius),
78
+ color: CIRCLE_OUTLINE,
79
+ weight: 2,
80
+ fillcolor: CIRCLE_FILL
81
+ }],
82
+ visible: getCircleBounds(value.lat, value.lng, value.radius)
83
+ }) : getGeopointStaticMapUrl(value, apiKey, {
84
+ width,
85
+ height
86
+ });
87
+ }
88
+ const GoogleMapsInputContext = createContext(null);
89
+ GoogleMapsInputContext.displayName = "GoogleMapsInputContext";
90
+ const MapDiffImage = styled.div.withConfig({
91
+ displayName: "MapDiffImage",
92
+ componentId: "sc-1uvj7r6-0"
93
+ })`& img{display:block;width:100%;height:auto;object-fit:contain;vertical-align:top;}`, MapDiffPlaceholder = styled.div.withConfig({
94
+ displayName: "MapDiffPlaceholder",
95
+ componentId: "sc-1uvj7r6-1"
96
+ })`width:100%;min-height:80px;display:flex;align-items:center;justify-content:center;`;
97
+ function hasRadius(value) {
98
+ return typeof value.radius == "number";
99
+ }
100
+ function StaticMapDiffPreview(t0) {
101
+ const $ = c(7), {
102
+ value
103
+ } = t0, [failed, setFailed] = useState(!1), apiKey = use(GoogleMapsInputContext)?.apiKey;
104
+ if (!value || typeof value.lat != "number" || typeof value.lng != "number" || !apiKey)
105
+ return null;
106
+ if (failed) {
107
+ let t12;
108
+ return $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(MapDiffPlaceholder, { children: /* @__PURE__ */ jsxs(Flex, { align: "center", gap: 2, justify: "center", padding: 3, children: [
109
+ /* @__PURE__ */ jsx(Text, { muted: !0, size: 1, children: /* @__PURE__ */ jsx(ImageIcon, {}) }),
110
+ /* @__PURE__ */ jsx(Text, { muted: !0, size: 1, children: "Map preview unavailable" })
111
+ ] }) }), $[0] = t12) : t12 = $[0], t12;
112
+ }
19
113
  let t1;
20
- return $[1] !== props ? (t1 = /* @__PURE__ */ jsxs(Card, { tone: "critical", radius: 1, children: [
21
- t0,
22
- /* @__PURE__ */ jsx(Box, { paddingX: 4, paddingTop: 4, paddingBottom: 1, children: props.isAuthError ? /* @__PURE__ */ jsx(AuthError$1, {}) : /* @__PURE__ */ jsxs(Fragment, { children: [
23
- /* @__PURE__ */ jsx(Text, { as: "h3", children: "Error details:" }),
24
- /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx(Code, { size: 1, children: "error" in props && props.error?.message }) })
25
- ] }) })
26
- ] }), $[1] = props, $[2] = t1) : t1 = $[2], t1;
114
+ $[1] !== apiKey || $[2] !== value ? (t1 = hasRadius(value) ? getGeopointRadiusStaticMapUrl(value, apiKey, {
115
+ width: 500,
116
+ height: 280
117
+ }) : getGeopointStaticMapUrl(value, apiKey, {
118
+ width: 500,
119
+ height: 280
120
+ }), $[1] = apiKey, $[2] = value, $[3] = t1) : t1 = $[3];
121
+ const url = t1;
122
+ let t2;
123
+ $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t2 = () => setFailed(!0), $[4] = t2) : t2 = $[4];
124
+ let t3;
125
+ return $[5] !== url ? (t3 = /* @__PURE__ */ jsx(MapDiffImage, { children: /* @__PURE__ */ jsx("img", { alt: "", src: url, onError: t2, height: 280, width: 500 }) }), $[5] = url, $[6] = t3) : t3 = $[6], t3;
27
126
  }
28
- function AuthError$1() {
127
+ function GeopointDiff(t0) {
128
+ const $ = c(3), {
129
+ diff,
130
+ schemaType
131
+ } = t0;
132
+ let t1;
133
+ return $[0] !== diff || $[1] !== schemaType ? (t1 = /* @__PURE__ */ jsx(DiffFromTo, { diff, schemaType, previewComponent: StaticMapDiffPreview, layout: "grid" }), $[0] = diff, $[1] = schemaType, $[2] = t1) : t1 = $[2], t1;
134
+ }
135
+ const GET_API_KEY_URL = "https://developers.google.com/maps/documentation/javascript/get-api-key", DEMO_KEY_URL = "https://developers.google.com/maps/documentation/javascript/demo-key", REQUIRED_APIS = ["Google Maps JavaScript API", "Google Static Maps API", "Google Places API (New)"];
136
+ function RequiredApis() {
29
137
  const $ = c(1);
30
138
  let t0;
31
- return $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = /* @__PURE__ */ jsxs(Text, { children: [
32
- /* @__PURE__ */ jsx("p", { children: "The error appears to be related to authentication" }),
33
- /* @__PURE__ */ jsx("p", { children: "Common causes include:" }),
34
- /* @__PURE__ */ jsxs("ul", { children: [
35
- /* @__PURE__ */ jsx("li", { children: "Incorrect API key" }),
36
- /* @__PURE__ */ jsx("li", { children: "Referer not allowed" }),
37
- /* @__PURE__ */ jsx("li", { children: "Missing authentication scope" })
38
- ] }),
39
- /* @__PURE__ */ jsx("p", { children: "Check the browser developer tools for more information." })
40
- ] }), $[0] = t0) : t0 = $[0], t0;
139
+ return $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = /* @__PURE__ */ jsx(Box, { paddingLeft: 3, children: /* @__PURE__ */ jsx(Stack, { as: "ul", gap: 2, children: REQUIRED_APIS.map(_temp$2) }) }), $[0] = t0) : t0 = $[0], t0;
41
140
  }
42
- const callbackName = "___sanity_googleMapsApiCallback", authFailureCallbackName = "gm_authFailure";
43
- class AuthError extends Error {
141
+ function _temp$2(api) {
142
+ return /* @__PURE__ */ jsx(Text, { as: "li", size: 1, muted: !0, children: api }, api);
44
143
  }
45
- function _loadGoogleMapsApi(config2) {
46
- return new Promise((resolve, reject) => {
47
- window[authFailureCallbackName] = () => {
48
- reject(new AuthError("Authentication error when loading Google Maps API."));
49
- }, window[callbackName] = () => {
50
- resolve(window.google.maps);
51
- };
52
- const script = document.createElement("script");
53
- script.addEventListener("error", (event) => reject(new Error(coeerceError(event)))), script.src = `https://maps.googleapis.com/maps/api/js?key=${config2.apiKey}&libraries=places&callback=${callbackName}&language=${config2.locale}`, document.head.appendChild(script);
54
- }).finally(() => {
55
- delete window[callbackName], delete window[authFailureCallbackName];
56
- });
57
- }
58
- let memo = null;
59
- function loadGoogleMapsApi(config2) {
60
- return memo || (memo = _loadGoogleMapsApi(config2), memo.catch(() => {
61
- memo = null;
62
- }), memo);
63
- }
64
- function coeerceError(event, error) {
65
- return typeof event == "string" ? event : isErrorEvent(event) ? event.message : "Failed to load Google Maps API";
144
+ function MessageCard(t0) {
145
+ const $ = c(13), {
146
+ tone,
147
+ icon,
148
+ title,
149
+ children
150
+ } = t0;
151
+ let t1;
152
+ $[0] !== icon ? (t1 = /* @__PURE__ */ jsx(Box, { flex: "none", children: /* @__PURE__ */ jsx(Text, { size: 3, children: icon }) }), $[0] = icon, $[1] = t1) : t1 = $[1];
153
+ let t2;
154
+ $[2] !== title ? (t2 = /* @__PURE__ */ jsx(Text, { size: 1, weight: "semibold", children: title }), $[2] = title, $[3] = t2) : t2 = $[3];
155
+ let t3;
156
+ $[4] !== children || $[5] !== t2 ? (t3 = /* @__PURE__ */ jsxs(Stack, { flex: 1, gap: 4, children: [
157
+ t2,
158
+ children
159
+ ] }), $[4] = children, $[5] = t2, $[6] = t3) : t3 = $[6];
160
+ let t4;
161
+ $[7] !== t1 || $[8] !== t3 ? (t4 = /* @__PURE__ */ jsxs(Flex, { gap: 3, children: [
162
+ t1,
163
+ t3
164
+ ] }), $[7] = t1, $[8] = t3, $[9] = t4) : t4 = $[9];
165
+ let t5;
166
+ return $[10] !== t4 || $[11] !== tone ? (t5 = /* @__PURE__ */ jsx(Card, { padding: 4, radius: 2, tone, border: !0, children: t4 }), $[10] = t4, $[11] = tone, $[12] = t5) : t5 = $[12], t5;
66
167
  }
67
- function isErrorEvent(event) {
68
- return typeof event != "object" || event === null || !("message" in event) ? !1 : typeof event.message == "string";
168
+ function MissingApiKeyCard(t0) {
169
+ const $ = c(10), {
170
+ typeTitle
171
+ } = t0;
172
+ let t1;
173
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = /* @__PURE__ */ jsx(WarningOutlineIcon, {}), $[0] = t1) : t1 = $[0];
174
+ let t2;
175
+ $[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t2 = /* @__PURE__ */ jsx("code", { children: "googleMapsInput" }), $[1] = t2) : t2 = $[1];
176
+ let t3;
177
+ $[2] !== typeTitle ? (t3 = /* @__PURE__ */ jsxs(Text, { size: 1, muted: !0, children: [
178
+ "The ",
179
+ typeTitle,
180
+ " field uses Google Maps and needs an API key. Add one to the",
181
+ " ",
182
+ t2,
183
+ " plugin configuration:"
184
+ ] }), $[2] = typeTitle, $[3] = t3) : t3 = $[3];
185
+ let t4;
186
+ $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t4 = /* @__PURE__ */ jsx(Card, { padding: 3, radius: 2, tone: "transparent", border: !0, overflow: "auto", children: /* @__PURE__ */ jsx(Code, { size: 1, children: "googleMapsInput({apiKey: 'your-api-key'})" }) }), $[4] = t4) : t4 = $[4];
187
+ let t5;
188
+ $[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t5 = /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
189
+ /* @__PURE__ */ jsx(Text, { size: 1, muted: !0, children: "The key needs these APIs enabled:" }),
190
+ /* @__PURE__ */ jsx(RequiredApis, {})
191
+ ] }), $[5] = t5) : t5 = $[5];
192
+ let t6;
193
+ $[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t6 = /* @__PURE__ */ jsx("a", { href: GET_API_KEY_URL, target: "_blank", rel: "noopener noreferrer", children: "Get an API key" }), $[6] = t6) : t6 = $[6];
194
+ let t7;
195
+ $[7] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t7 = /* @__PURE__ */ jsxs(Text, { size: 1, muted: !0, children: [
196
+ t6,
197
+ " \xB7 ",
198
+ /* @__PURE__ */ jsx("a", { href: DEMO_KEY_URL, target: "_blank", rel: "noopener noreferrer", children: "use a demo key to test" })
199
+ ] }), $[7] = t7) : t7 = $[7];
200
+ let t8;
201
+ return $[8] !== t3 ? (t8 = /* @__PURE__ */ jsxs(MessageCard, { tone: "caution", icon: t1, title: "Google Maps API key required", children: [
202
+ t3,
203
+ t4,
204
+ t5,
205
+ t7
206
+ ] }), $[8] = t3, $[9] = t8) : t8 = $[9], t8;
69
207
  }
70
- const browserLocale = typeof window < "u" && window.navigator.language || "en";
71
- function useLoadGoogleMapsApi(config2) {
72
- const $ = c(5), locale = config2.defaultLocale || browserLocale;
208
+ function InvalidApiKeyCard() {
209
+ const $ = c(2);
73
210
  let t0;
74
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = {
75
- type: "loading"
76
- }, $[0] = t0) : t0 = $[0];
77
- const [state, setState] = useState(t0);
78
- let t1, t2;
79
- return $[1] !== config2.apiKey || $[2] !== locale ? (t1 = () => {
80
- typeof window > "u" || loadGoogleMapsApi({
81
- locale,
82
- apiKey: config2.apiKey
83
- }).then((api) => setState({
84
- type: "loaded",
85
- api
86
- }), (err) => setState({
87
- type: "error",
88
- error: {
89
- type: err instanceof AuthError ? "authError" : "loadError",
90
- message: err.message
91
- }
92
- }));
93
- }, t2 = [locale, config2.apiKey], $[1] = config2.apiKey, $[2] = locale, $[3] = t1, $[4] = t2) : (t1 = $[3], t2 = $[4]), useEffect(t1, t2), state;
211
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = /* @__PURE__ */ jsx(ErrorOutlineIcon, {}), $[0] = t0) : t0 = $[0];
212
+ let t1;
213
+ return $[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = /* @__PURE__ */ jsxs(MessageCard, { tone: "critical", icon: t0, title: "Map preview couldn\u2019t load", children: [
214
+ /* @__PURE__ */ jsx(Text, { size: 1, muted: !0, children: "The Google Maps API key was rejected. Check that it is a valid key \u2014 not a demo or placeholder key \u2014 that it is not restricted in a way that blocks this Studio\u2019s URL, and that it has these APIs enabled:" }),
215
+ /* @__PURE__ */ jsx(RequiredApis, {})
216
+ ] }), $[1] = t1) : t1 = $[1], t1;
94
217
  }
95
- function GoogleMapsLoadProxy(props) {
96
- const $ = c(7), loadState = useLoadGoogleMapsApi(props.config);
97
- switch (loadState.type) {
98
- case "error": {
99
- const t0 = loadState.error.type === "authError";
100
- let t1;
101
- return $[0] !== loadState.error || $[1] !== t0 ? (t1 = /* @__PURE__ */ jsx(LoadError, { error: loadState.error, isAuthError: t0 }), $[0] = loadState.error, $[1] = t0, $[2] = t1) : t1 = $[2], t1;
102
- }
103
- case "loading": {
104
- let t0;
105
- return $[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = /* @__PURE__ */ jsx("div", { children: "Loading Google Maps API" }), $[3] = t0) : t0 = $[3], t0;
106
- }
107
- case "loaded": {
108
- let t0;
109
- return $[4] !== loadState.api || $[5] !== props.children ? (t0 = props.children(loadState.api), $[4] = loadState.api, $[5] = props.children, $[6] = t0) : t0 = $[6], t0;
110
- }
111
- default:
112
- return null;
218
+ function MapApiGate(t0) {
219
+ const $ = c(4), {
220
+ children
221
+ } = t0, status = useApiLoadingStatus();
222
+ if (status === APILoadingStatus.AUTH_FAILURE || status === APILoadingStatus.FAILED) {
223
+ let t12;
224
+ return $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(InvalidApiKeyCard, {}), $[0] = t12) : t12 = $[0], t12;
225
+ }
226
+ if (status !== APILoadingStatus.LOADED) {
227
+ let t12;
228
+ return $[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(Flex, { align: "center", justify: "center", height: "fill", padding: 4, children: /* @__PURE__ */ jsx(Spinner, { muted: !0 }) }), $[1] = t12) : t12 = $[1], t12;
113
229
  }
230
+ let t1;
231
+ return $[2] !== children ? (t1 = /* @__PURE__ */ jsx(Fragment, { children }), $[2] = children, $[3] = t1) : t1 = $[3], t1;
114
232
  }
115
- const PreviewImage = styled.img.withConfig({
116
- displayName: "PreviewImage",
233
+ const StaticMapContainer = styled.div.withConfig({
234
+ displayName: "StaticMapContainer",
117
235
  componentId: "sc-10h92ni-0"
118
- })`width:100%;height:auto;vertical-align:top;`, DialogInnerContainer = styled.div.withConfig({
236
+ })`cursor:pointer;& img{width:100%;height:auto;display:block;vertical-align:top;}`, DialogInnerContainer = styled.div.withConfig({
119
237
  displayName: "DialogInnerContainer",
120
238
  componentId: "sc-10h92ni-1"
121
- })`height:40rem;`, MapContainer = styled.div.withConfig({
122
- displayName: "MapContainer",
123
- componentId: "sc-gcrwqq-0"
124
- })`position:absolute;top:0;left:0;height:100%;width:100%;box-sizing:border-box;`;
125
- function latLngAreEqual(latLng1, latLng2) {
126
- const lat1 = typeof latLng1.lat == "function" ? latLng1.lat() : latLng1.lat, lng1 = typeof latLng1.lng == "function" ? latLng1.lng() : latLng1.lng, lat2 = typeof latLng2.lat == "function" ? latLng2.lat() : latLng2.lat, lng2 = typeof latLng2.lng == "function" ? latLng2.lng() : latLng2.lng;
127
- return lat1 === lat2 && lng1 === lng2;
128
- }
129
- class GoogleMap extends PureComponent {
130
- static defaultProps = {
131
- defaultZoom: 8,
132
- scrollWheel: !0
133
- };
134
- state = {
135
- map: void 0
136
- };
137
- mapRef = createRef();
138
- mapEl = null;
139
- componentDidMount() {
140
- this.attachClickHandler();
141
- }
142
- attachClickHandler = () => {
143
- const map = this.state.map;
144
- if (!map)
145
- return;
146
- const {
147
- api,
148
- onClick
149
- } = this.props, {
150
- event
151
- } = api;
152
- this.clickHandler && this.clickHandler.remove(), onClick && (this.clickHandler = event.addListener(map, "click", onClick));
153
- };
154
- componentDidUpdate(prevProps) {
155
- const map = this.state.map;
156
- if (!map)
157
- return;
158
- const {
159
- onClick,
160
- location,
161
- bounds
162
- } = this.props;
163
- prevProps.onClick !== onClick && this.attachClickHandler(), latLngAreEqual(prevProps.location, location) || map.panTo(this.getCenter()), bounds && (!prevProps.bounds || !bounds.equals(prevProps.bounds)) && map.fitBounds(bounds);
164
- }
165
- componentWillUnmount() {
166
- this.clickHandler && this.clickHandler.remove();
167
- }
168
- getCenter() {
169
- const {
170
- location,
171
- api
172
- } = this.props;
173
- return new api.LatLng(location.lat, location.lng);
174
- }
175
- constructMap(el) {
239
+ })`height:40rem;`, MAP_ID = "DEMO_MAP_ID", SearchInputContainer = styled.div.withConfig({
240
+ displayName: "SearchInputContainer",
241
+ componentId: "sc-n3m9ut-0"
242
+ })`margin:10px;width:240px;& gmp-place-autocomplete{width:100%;}`;
243
+ function SearchInput(t0) {
244
+ const $ = c(3), {
245
+ onSelect
246
+ } = t0, places = useMapsLibrary("places"), map = useMap();
247
+ if (!places)
248
+ return null;
249
+ let t1;
250
+ return $[0] !== map || $[1] !== onSelect ? (t1 = /* @__PURE__ */ jsx(SearchInputContainer, { children: /* @__PURE__ */ jsx("gmp-place-autocomplete", { "ongmp-select": async (t2) => {
176
251
  const {
177
- defaultZoom,
178
- api,
179
- mapTypeControl,
180
- controlSize,
181
- bounds,
182
- scrollWheel
183
- } = this.props, map = new api.Map(el, {
184
- zoom: defaultZoom,
185
- center: this.getCenter(),
186
- scrollwheel: scrollWheel,
187
- streetViewControl: !1,
188
- mapTypeControl,
189
- controlSize
252
+ placePrediction
253
+ } = t2, place = placePrediction.toPlace();
254
+ await place.fetchFields({
255
+ fields: ["location"]
190
256
  });
191
- return bounds && map.fitBounds(bounds), map;
192
- }
193
- setMapElement = (element) => {
194
- if (element && element !== this.mapEl) {
195
- const map = this.constructMap(element);
196
- this.setState({
197
- map
198
- }, this.attachClickHandler);
199
- }
200
- this.mapEl = element;
201
- };
202
- render() {
203
- const {
204
- children
205
- } = this.props, {
206
- map
207
- } = this.state;
208
- return /* @__PURE__ */ jsxs(Fragment, { children: [
209
- /* @__PURE__ */ jsx(MapContainer, { ref: this.setMapElement }),
210
- children && map ? children(map) : null
211
- ] });
212
- }
213
- }
214
- const markerPath = "M 3.052 3.7 C 1.56 5.293 0.626 7.612 0.663 9.793 C 0.738 14.352 2.793 16.077 6.078 22.351 C 7.263 25.111 8.497 28.032 9.672 32.871 C 9.835 33.584 9.994 34.246 10.069 34.305 C 10.143 34.362 10.301 33.697 10.465 32.983 C 11.639 28.145 12.875 25.226 14.059 22.466 C 17.344 16.192 19.398 14.466 19.474 9.908 C 19.511 7.727 18.574 5.405 17.083 3.814 C 15.379 1.994 12.809 0.649 10.069 0.593 C 7.328 0.536 4.756 1.882 3.052 3.7 Z";
215
- class Marker extends PureComponent {
216
- eventHandlers = {};
217
- componentDidMount() {
218
- const {
219
- position,
220
- api,
221
- map,
222
- onMove,
223
- zIndex,
224
- opacity,
225
- label,
226
- markerRef,
227
- color
228
- } = this.props, {
229
- Marker: GMarker
230
- } = api;
231
- let icon;
232
- color && (icon = {
233
- path: markerPath,
234
- fillOpacity: 1,
235
- fillColor: color.background,
236
- strokeColor: color.border,
237
- strokeWeight: 2,
238
- anchor: new api.Point(10, 35),
239
- labelOrigin: new api.Point(10, 11)
240
- }), this.marker = new GMarker({
241
- draggable: !!onMove,
242
- position,
243
- map,
244
- zIndex,
245
- opacity,
246
- label,
247
- icon
248
- }), markerRef && (markerRef.current = this.marker), this.attachMoveHandler(), this.attachClickHandler();
249
- }
250
- componentDidUpdate(prevProps) {
251
- if (!this.marker)
252
- return;
253
- const {
254
- position,
255
- onMove,
256
- label,
257
- zIndex,
258
- opacity,
259
- map
260
- } = this.props;
261
- prevProps.onMove !== onMove && this.attachMoveHandler(), latLngAreEqual(prevProps.position, position) || this.marker.setPosition(position), prevProps.label !== label && this.marker.setLabel(label || null), prevProps.zIndex !== zIndex && this.marker.setZIndex(zIndex || null), prevProps.opacity !== opacity && this.marker.setOpacity(opacity || null), prevProps.map !== map && this.marker.setMap(map);
262
- }
263
- componentWillUnmount() {
264
- this.eventHandlers.move && this.eventHandlers.move.remove(), this.marker && this.marker.setMap(null);
265
- }
266
- attachMoveHandler() {
267
- const {
268
- api,
269
- onMove
270
- } = this.props;
271
- this.eventHandlers.move && this.eventHandlers.move.remove(), this.marker && onMove && (this.eventHandlers.move = api.event.addListener(this.marker, "dragend", onMove));
272
- }
273
- attachClickHandler() {
274
- const {
275
- api,
276
- onClick
277
- } = this.props;
278
- this.eventHandlers.click && this.eventHandlers.click.remove(), this.marker && onClick && (this.eventHandlers.click = api.event.addListener(this.marker, "click", onClick));
279
- }
280
- render() {
281
- return null;
282
- }
283
- }
284
- const WrapperContainer = styled.div.withConfig({
285
- displayName: "WrapperContainer",
286
- componentId: "sc-n3m9ut-0"
287
- })`position:absolute;right:10px;top:10px;width:220px;`;
288
- class SearchInput extends PureComponent {
289
- searchInputRef = createRef();
290
- handleChange = () => {
291
- this.autoComplete && (this.props.onChange(this.autoComplete.getPlace()), this.searchInputRef.current && (this.searchInputRef.current.value = ""));
292
- };
293
- componentDidMount() {
294
- const input = this.searchInputRef.current;
295
- if (!input)
257
+ const location = place.location;
258
+ if (!location)
296
259
  return;
297
- const {
298
- api,
299
- map
300
- } = this.props, {
301
- Circle,
302
- places,
303
- event
304
- } = api, searchBounds = new Circle({
305
- center: map.getCenter(),
306
- radius: 100
307
- }).getBounds();
308
- this.autoComplete = new places.Autocomplete(input, {
309
- bounds: searchBounds,
310
- types: []
311
- // return all kinds of places
312
- }), event.addListener(this.autoComplete, "place_changed", this.handleChange);
313
- }
314
- render() {
315
- return /* @__PURE__ */ jsx(WrapperContainer, { children: /* @__PURE__ */ jsx(TextInput, { name: "place", ref: this.searchInputRef, placeholder: "Search for place or address", padding: 4 }) });
316
- }
260
+ const latLng = {
261
+ lat: location.lat(),
262
+ lng: location.lng()
263
+ };
264
+ onSelect(latLng), map?.panTo(latLng);
265
+ } }) }), $[0] = map, $[1] = onSelect, $[2] = t1) : t1 = $[2], t1;
317
266
  }
318
267
  const fallbackLatLng$1 = {
319
268
  lat: 40.7058254,
@@ -321,67 +270,86 @@ const fallbackLatLng$1 = {
321
270
  }, defaultMapLocation$1 = {
322
271
  lng: 10.74609,
323
272
  lat: 59.91273
324
- }, GeopointSelect = (t0) => {
325
- const $ = c(25), {
326
- api,
273
+ };
274
+ function GeopointSelect(t0) {
275
+ const $ = c(24), {
327
276
  value,
328
277
  onChange,
329
278
  defaultLocation: t1,
330
279
  defaultZoom: t2
331
280
  } = t0, defaultLocation = t1 === void 0 ? defaultMapLocation$1 : t1, defaultZoom = t2 === void 0 ? 8 : t2;
332
281
  let t3;
333
- $[0] !== defaultLocation || $[1] !== value ? (t3 = () => ({
282
+ $[0] !== value ? (t3 = value ? {
283
+ lat: value.lat,
284
+ lng: value.lng
285
+ } : {}, $[0] = value, $[1] = t3) : t3 = $[1];
286
+ let t4;
287
+ $[2] !== defaultLocation || $[3] !== t3 ? (t4 = {
334
288
  ...fallbackLatLng$1,
335
289
  ...defaultLocation,
336
- ...value
337
- }), $[0] = defaultLocation, $[1] = value, $[2] = t3) : t3 = $[2];
338
- const getCenter2 = t3;
339
- let t4;
340
- $[3] !== onChange ? (t4 = (geoPoint) => {
341
- onChange && onChange(geoPoint);
342
- }, $[3] = onChange, $[4] = t4) : t4 = $[4];
343
- const setValue = t4;
290
+ ...t3
291
+ }, $[2] = defaultLocation, $[3] = t3, $[4] = t4) : t4 = $[4];
292
+ const center = t4;
344
293
  let t5;
345
- $[5] !== setValue ? (t5 = (place) => {
346
- place.geometry?.location && setValue(place.geometry.location);
347
- }, $[5] = setValue, $[6] = t5) : t5 = $[6];
348
- const handlePlaceChanged = t5;
294
+ $[5] !== onChange ? (t5 = (event) => {
295
+ event.detail.latLng && onChange && onChange(event.detail.latLng);
296
+ }, $[5] = onChange, $[6] = t5) : t5 = $[6];
297
+ const handleMapClick = t5;
349
298
  let t6;
350
- $[7] !== setValue ? (t6 = (event) => {
351
- event.latLng && setValue(event.latLng);
352
- }, $[7] = setValue, $[8] = t6) : t6 = $[8];
299
+ $[7] !== onChange ? (t6 = (event_0) => {
300
+ event_0.latLng && onChange && onChange({
301
+ lat: event_0.latLng.lat(),
302
+ lng: event_0.latLng.lng()
303
+ });
304
+ }, $[7] = onChange, $[8] = t6) : t6 = $[8];
353
305
  const handleMarkerDragEnd = t6;
354
306
  let t7;
355
- $[9] !== setValue ? (t7 = (event_0) => {
356
- event_0.latLng && setValue(event_0.latLng);
357
- }, $[9] = setValue, $[10] = t7) : t7 = $[10];
358
- const handleMapClick = t7;
307
+ $[9] !== onChange ? (t7 = (location) => {
308
+ onChange?.(location);
309
+ }, $[9] = onChange, $[10] = t7) : t7 = $[10];
310
+ const handleSelect = t7;
359
311
  let t8;
360
- $[11] !== getCenter2 ? (t8 = getCenter2(), $[11] = getCenter2, $[12] = t8) : t8 = $[12];
312
+ $[11] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t8 = {
313
+ width: "100%",
314
+ height: "100%"
315
+ }, $[11] = t8) : t8 = $[11];
361
316
  let t9;
362
- $[13] !== api || $[14] !== handleMarkerDragEnd || $[15] !== handlePlaceChanged || $[16] !== onChange || $[17] !== value ? (t9 = (map) => /* @__PURE__ */ jsxs(Fragment, { children: [
363
- /* @__PURE__ */ jsx(SearchInput, { api, map, onChange: handlePlaceChanged }),
364
- value && /* @__PURE__ */ jsx(Marker, { api, map, position: value, onMove: onChange ? handleMarkerDragEnd : void 0 })
365
- ] }), $[13] = api, $[14] = handleMarkerDragEnd, $[15] = handlePlaceChanged, $[16] = onChange, $[17] = value, $[18] = t9) : t9 = $[18];
317
+ $[12] !== handleSelect ? (t9 = /* @__PURE__ */ jsx(MapControl, { position: ControlPosition.TOP_RIGHT, children: /* @__PURE__ */ jsx(SearchInput, { onSelect: handleSelect }) }), $[12] = handleSelect, $[13] = t9) : t9 = $[13];
366
318
  let t10;
367
- return $[19] !== api || $[20] !== defaultZoom || $[21] !== handleMapClick || $[22] !== t8 || $[23] !== t9 ? (t10 = /* @__PURE__ */ jsx(GoogleMap, { api, location: t8, onClick: handleMapClick, defaultZoom, children: t9 }), $[19] = api, $[20] = defaultZoom, $[21] = handleMapClick, $[22] = t8, $[23] = t9, $[24] = t10) : t10 = $[24], t10;
368
- }, EMPTY_PATH$1 = [], getStaticImageUrl$1 = (value, apiKey) => {
369
- const loc = `${value.lat},${value.lng}`;
370
- return `https://maps.googleapis.com/maps/api/staticmap?${new URLSearchParams({
371
- key: apiKey,
372
- center: loc,
373
- markers: loc,
374
- zoom: "13",
375
- scale: "2",
376
- size: "640x300"
377
- }).toString()}`;
378
- };
319
+ $[14] !== handleMarkerDragEnd || $[15] !== onChange || $[16] !== value ? (t10 = value && /* @__PURE__ */ jsx(AdvancedMarker, { position: {
320
+ lat: value.lat,
321
+ lng: value.lng
322
+ }, draggable: !!onChange, onDragEnd: handleMarkerDragEnd }), $[14] = handleMarkerDragEnd, $[15] = onChange, $[16] = value, $[17] = t10) : t10 = $[17];
323
+ let t11;
324
+ return $[18] !== center || $[19] !== defaultZoom || $[20] !== handleMapClick || $[21] !== t10 || $[22] !== t9 ? (t11 = /* @__PURE__ */ jsxs(Map, { mapId: MAP_ID, defaultCenter: center, defaultZoom, onClick: handleMapClick, gestureHandling: "greedy", streetViewControl: !1, mapTypeControl: !1, style: t8, children: [
325
+ t9,
326
+ t10
327
+ ] }), $[18] = center, $[19] = defaultZoom, $[20] = handleMapClick, $[21] = t10, $[22] = t9, $[23] = t11) : t11 = $[23], t11;
328
+ }
329
+ function StaticMapPreview(t0) {
330
+ const $ = c(8), {
331
+ url,
332
+ onClick,
333
+ onDoubleClick
334
+ } = t0, [failed, setFailed] = useState(!1);
335
+ if (failed) {
336
+ let t12;
337
+ return $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = /* @__PURE__ */ jsx(InvalidApiKeyCard, {}), $[0] = t12) : t12 = $[0], t12;
338
+ }
339
+ let t1;
340
+ $[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = () => setFailed(!0), $[1] = t1) : t1 = $[1];
341
+ let t2;
342
+ $[2] !== url ? (t2 = /* @__PURE__ */ jsx(StaticMap, { url }), $[2] = url, $[3] = t2) : t2 = $[3];
343
+ let t3;
344
+ return $[4] !== onClick || $[5] !== onDoubleClick || $[6] !== t2 ? (t3 = /* @__PURE__ */ jsx(StaticMapContainer, { onClick, onDoubleClick, onErrorCapture: t1, children: t2 }), $[4] = onClick, $[5] = onDoubleClick, $[6] = t2, $[7] = t3) : t3 = $[7], t3;
345
+ }
346
+ const EMPTY_PATH$1 = [];
379
347
  function GeopointInput(props) {
380
- const $ = c(51), {
348
+ const $ = c(54), {
381
349
  changed,
382
350
  elementProps,
383
351
  focused,
384
- geoConfig: config2,
352
+ geoConfig: config,
385
353
  onChange,
386
354
  onPathFocus,
387
355
  path,
@@ -410,7 +378,7 @@ function GeopointInput(props) {
410
378
  $[5] !== onChange || $[6] !== schemaTypeName ? (t3 = (latLng) => {
411
379
  onChange([setIfMissing({
412
380
  _type: schemaTypeName
413
- }), set(latLng.lat(), ["lat"]), set(latLng.lng(), ["lng"])]);
381
+ }), set(latLng.lat, ["lat"]), set(latLng.lng, ["lng"])]);
414
382
  }, $[5] = onChange, $[6] = schemaTypeName, $[7] = t3) : t3 = $[7];
415
383
  const handleChange = t3;
416
384
  let t4;
@@ -421,42 +389,33 @@ function GeopointInput(props) {
421
389
  let t5, t6;
422
390
  if ($[10] !== modalOpen || $[11] !== onPathFocus ? (t5 = () => {
423
391
  modalOpen && onPathFocus(EMPTY_PATH$1);
424
- }, t6 = [modalOpen, onPathFocus], $[10] = modalOpen, $[11] = onPathFocus, $[12] = t5, $[13] = t6) : (t5 = $[12], t6 = $[13]), useEffect(t5, t6), !config2 || !config2.apiKey) {
392
+ }, t6 = [modalOpen, onPathFocus], $[10] = modalOpen, $[11] = onPathFocus, $[12] = t5, $[13] = t6) : (t5 = $[12], t6 = $[13]), useEffect(t5, t6), !config || !config.apiKey) {
425
393
  let t72;
426
- return $[14] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t72 = /* @__PURE__ */ jsxs("div", { children: [
427
- /* @__PURE__ */ jsxs("p", { children: [
428
- "The ",
429
- /* @__PURE__ */ jsx("a", { href: "https://sanity.io/docs/schema-types/geopoint-type", children: "Geopoint type" }),
430
- " needs a Google Maps API key with access to:"
431
- ] }),
432
- /* @__PURE__ */ jsxs("ul", { children: [
433
- /* @__PURE__ */ jsx("li", { children: "Google Maps JavaScript API" }),
434
- /* @__PURE__ */ jsx("li", { children: "Google Places API Web Service" }),
435
- /* @__PURE__ */ jsx("li", { children: "Google Static Maps API" })
436
- ] }),
437
- /* @__PURE__ */ jsx("p", { children: "Please enter the API key with access to these services in your googleMapsInput plugin config." })
438
- ] }), $[14] = t72) : t72 = $[14], t72;
394
+ return $[14] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t72 = /* @__PURE__ */ jsx(MissingApiKeyCard, { typeTitle: "Geopoint" }), $[14] = t72) : t72 = $[14], t72;
439
395
  }
440
396
  let t7;
441
- $[15] !== changed || $[16] !== config2 || $[17] !== focused || $[18] !== handleFocusButton || $[19] !== path || $[20] !== value ? (t7 = value && /* @__PURE__ */ jsx(ChangeIndicator, { path, isChanged: changed, hasFocus: !!focused, children: /* @__PURE__ */ jsx(PreviewImage, { src: getStaticImageUrl$1(value, config2.apiKey), alt: "Map location", onClick: handleFocusButton, onDoubleClick: handleToggleModal }) }), $[15] = changed, $[16] = config2, $[17] = focused, $[18] = handleFocusButton, $[19] = path, $[20] = value, $[21] = t7) : t7 = $[21];
442
- const t8 = value ? 2 : 1, t9 = value && EditIcon, t10 = value ? "Edit" : "Set location";
443
- let t11;
444
- $[22] !== ariaDescribedBy || $[23] !== handleFocus || $[24] !== id || $[25] !== inputRef || $[26] !== readOnly || $[27] !== t10 || $[28] !== t9 ? (t11 = /* @__PURE__ */ jsx(Button, { "aria-describedby": ariaDescribedBy, disabled: readOnly, icon: t9, id, mode: "ghost", onClick: handleToggleModal, onFocus: handleFocus, padding: 3, ref: inputRef, text: t10 }), $[22] = ariaDescribedBy, $[23] = handleFocus, $[24] = id, $[25] = inputRef, $[26] = readOnly, $[27] = t10, $[28] = t9, $[29] = t11) : t11 = $[29];
397
+ $[15] !== config || $[16] !== value ? (t7 = value ? getGeopointStaticMapUrl(value, config.apiKey) : null, $[15] = config, $[16] = value, $[17] = t7) : t7 = $[17];
398
+ const staticImageUrl = t7;
399
+ let t8;
400
+ $[18] !== changed || $[19] !== focused || $[20] !== handleFocusButton || $[21] !== path || $[22] !== staticImageUrl || $[23] !== value ? (t8 = value && staticImageUrl && /* @__PURE__ */ jsx(ChangeIndicator, { path, isChanged: changed, hasFocus: !!focused, children: /* @__PURE__ */ jsx(StaticMapPreview, { url: staticImageUrl, onClick: handleFocusButton, onDoubleClick: handleToggleModal }) }), $[18] = changed, $[19] = focused, $[20] = handleFocusButton, $[21] = path, $[22] = staticImageUrl, $[23] = value, $[24] = t8) : t8 = $[24];
401
+ const t9 = value ? 2 : 1, t10 = value && EditIcon, t11 = value ? "Edit" : "Set location";
445
402
  let t12;
446
- $[30] !== handleClear || $[31] !== readOnly || $[32] !== value ? (t12 = value && /* @__PURE__ */ jsx(Button, { disabled: readOnly, icon: TrashIcon, mode: "ghost", onClick: handleClear, padding: 3, text: "Remove", tone: "critical" }), $[30] = handleClear, $[31] = readOnly, $[32] = value, $[33] = t12) : t12 = $[33];
403
+ $[25] !== ariaDescribedBy || $[26] !== handleFocus || $[27] !== id || $[28] !== inputRef || $[29] !== readOnly || $[30] !== t10 || $[31] !== t11 ? (t12 = /* @__PURE__ */ jsx(Button, { "aria-describedby": ariaDescribedBy, disabled: readOnly, icon: t10, id, mode: "ghost", onClick: handleToggleModal, onFocus: handleFocus, padding: 3, ref: inputRef, text: t11 }), $[25] = ariaDescribedBy, $[26] = handleFocus, $[27] = id, $[28] = inputRef, $[29] = readOnly, $[30] = t10, $[31] = t11, $[32] = t12) : t12 = $[32];
447
404
  let t13;
448
- $[34] !== t11 || $[35] !== t12 || $[36] !== t8 ? (t13 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Grid, { columns: t8, gap: 3, children: [
449
- t11,
450
- t12
451
- ] }) }), $[34] = t11, $[35] = t12, $[36] = t8, $[37] = t13) : t13 = $[37];
405
+ $[33] !== handleClear || $[34] !== readOnly || $[35] !== value ? (t13 = value && /* @__PURE__ */ jsx(Button, { disabled: readOnly, icon: TrashIcon, mode: "ghost", onClick: handleClear, padding: 3, text: "Remove", tone: "critical" }), $[33] = handleClear, $[34] = readOnly, $[35] = value, $[36] = t13) : t13 = $[36];
452
406
  let t14;
453
- $[38] !== config2 || $[39] !== dialogId || $[40] !== handleBlur || $[41] !== handleChange || $[42] !== handleCloseModal || $[43] !== modalOpen || $[44] !== readOnly || $[45] !== value ? (t14 = modalOpen && /* @__PURE__ */ jsx(Dialog, { header: "Place the marker on the map", id: `${dialogId}_dialog`, onBlur: handleBlur, onClose: handleCloseModal, ref: dialogRef, width: 1, children: /* @__PURE__ */ jsx(DialogInnerContainer, { children: /* @__PURE__ */ jsx(GoogleMapsLoadProxy, { config: getGeoConfig(), children: (api) => /* @__PURE__ */ jsx(GeopointSelect, { api, value: value || void 0, onChange: readOnly ? void 0 : handleChange, defaultLocation: config2.defaultLocation, defaultZoom: config2.defaultZoom }) }) }) }), $[38] = config2, $[39] = dialogId, $[40] = handleBlur, $[41] = handleChange, $[42] = handleCloseModal, $[43] = modalOpen, $[44] = readOnly, $[45] = value, $[46] = t14) : t14 = $[46];
407
+ $[37] !== t12 || $[38] !== t13 || $[39] !== t9 ? (t14 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Grid, { gridTemplateColumns: t9, gap: 3, children: [
408
+ t12,
409
+ t13
410
+ ] }) }), $[37] = t12, $[38] = t13, $[39] = t9, $[40] = t14) : t14 = $[40];
454
411
  let t15;
455
- return $[47] !== t13 || $[48] !== t14 || $[49] !== t7 ? (t15 = /* @__PURE__ */ jsxs(Stack, { space: 3, children: [
456
- t7,
457
- t13,
458
- t14
459
- ] }), $[47] = t13, $[48] = t14, $[49] = t7, $[50] = t15) : t15 = $[50], t15;
412
+ $[41] !== config || $[42] !== dialogId || $[43] !== handleBlur || $[44] !== handleChange || $[45] !== handleCloseModal || $[46] !== modalOpen || $[47] !== readOnly || $[48] !== value ? (t15 = modalOpen && /* @__PURE__ */ jsx(Dialog, { header: "Place the marker on the map", id: `${dialogId}_dialog`, onBlur: handleBlur, onClose: handleCloseModal, ref: dialogRef, width: 1, children: /* @__PURE__ */ jsx(DialogInnerContainer, { children: /* @__PURE__ */ jsx(APIProvider, { apiKey: config.apiKey, children: /* @__PURE__ */ jsx(MapApiGate, { children: /* @__PURE__ */ jsx(GeopointSelect, { value: value || void 0, onChange: readOnly ? void 0 : handleChange, defaultLocation: config.defaultLocation, defaultZoom: config.defaultZoom }) }) }) }) }), $[41] = config, $[42] = dialogId, $[43] = handleBlur, $[44] = handleChange, $[45] = handleCloseModal, $[46] = modalOpen, $[47] = readOnly, $[48] = value, $[49] = t15) : t15 = $[49];
413
+ let t16;
414
+ return $[50] !== t14 || $[51] !== t15 || $[52] !== t8 ? (t16 = /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
415
+ t8,
416
+ t14,
417
+ t15
418
+ ] }), $[50] = t14, $[51] = t15, $[52] = t8, $[53] = t16) : t16 = $[53], t16;
460
419
  }
461
420
  function _temp$1(currentState) {
462
421
  return !currentState;
@@ -467,147 +426,95 @@ const fallbackLatLng = {
467
426
  }, defaultMapLocation = {
468
427
  lng: 10.74609,
469
428
  lat: 59.91273
470
- }, MarkerDragSync = (t0) => {
471
- const $ = c(9), {
472
- api,
473
- marker,
474
- circleRef,
475
- isMarkerDragging
476
- } = t0;
477
- let t1;
478
- $[0] !== api.event || $[1] !== isMarkerDragging || $[2] !== marker ? (t1 = () => {
479
- const handleDrag = () => {
480
- isMarkerDragging.current = !0;
481
- }, handleDragEnd = () => {
482
- isMarkerDragging.current = !1;
483
- }, dragListener = api.event.addListener(marker, "drag", handleDrag), dragEndListener = api.event.addListener(marker, "dragend", handleDragEnd);
484
- return () => {
485
- api.event.removeListener(dragListener), api.event.removeListener(dragEndListener);
486
- };
487
- }, $[0] = api.event, $[1] = isMarkerDragging, $[2] = marker, $[3] = t1) : t1 = $[3];
488
- let t2;
489
- return $[4] !== api || $[5] !== circleRef || $[6] !== isMarkerDragging || $[7] !== marker ? (t2 = [api, marker, circleRef, isMarkerDragging], $[4] = api, $[5] = circleRef, $[6] = isMarkerDragging, $[7] = marker, $[8] = t2) : t2 = $[8], useEffect(t1, t2), null;
490
- }, GeopointRadiusSelect = (t0) => {
491
- const $ = c(35), {
492
- api,
429
+ };
430
+ function GeopointRadiusSelect(t0) {
431
+ const $ = c(37), {
493
432
  value,
494
433
  onChange,
495
434
  defaultLocation: t1,
496
435
  defaultRadiusZoom: t2,
497
436
  defaultRadius: t3
498
- } = t0, defaultLocation = t1 === void 0 ? defaultMapLocation : t1, defaultRadiusZoom = t2 === void 0 ? 12 : t2, defaultRadius = t3 === void 0 ? 1e3 : t3, circleRef = useRef(null), markerRef = useRef(void 0), isMarkerDragging = useRef(!1);
437
+ } = t0, defaultLocation = t1 === void 0 ? defaultMapLocation : t1, defaultRadiusZoom = t2 === void 0 ? 12 : t2, defaultRadius = t3 === void 0 ? 1e3 : t3;
499
438
  let t4;
500
- $[0] !== defaultLocation || $[1] !== value ? (t4 = () => ({
439
+ $[0] !== value ? (t4 = value ? {
440
+ lat: value.lat,
441
+ lng: value.lng
442
+ } : {}, $[0] = value, $[1] = t4) : t4 = $[1];
443
+ let t5;
444
+ $[2] !== defaultLocation || $[3] !== t4 ? (t5 = {
501
445
  ...fallbackLatLng,
502
446
  ...defaultLocation,
503
- ...value
504
- }), $[0] = defaultLocation, $[1] = value, $[2] = t4) : t4 = $[2];
505
- const getCenter2 = t4;
506
- let t5;
507
- $[3] !== onChange ? (t5 = (geoPoint, radius) => {
508
- if (onChange) {
509
- const roundedRadius = radius ? Math.round(radius) : void 0;
510
- onChange(geoPoint, roundedRadius);
511
- }
512
- }, $[3] = onChange, $[4] = t5) : t5 = $[4];
513
- const setValue = t5;
447
+ ...t4
448
+ }, $[2] = defaultLocation, $[3] = t4, $[4] = t5) : t5 = $[4];
449
+ const center = t5, currentRadius = value?.radius ?? defaultRadius;
514
450
  let t6;
515
- $[5] !== defaultRadius || $[6] !== setValue || $[7] !== value?.radius ? (t6 = (place) => {
516
- place.geometry?.location && setValue(place.geometry.location, value?.radius || defaultRadius);
517
- }, $[5] = defaultRadius, $[6] = setValue, $[7] = value?.radius, $[8] = t6) : t6 = $[8];
518
- const handlePlaceChanged = t6;
451
+ $[5] !== onChange ? (t6 = (latLng, radius) => {
452
+ onChange?.(latLng, radius == null ? void 0 : Math.round(radius));
453
+ }, $[5] = onChange, $[6] = t6) : t6 = $[6];
454
+ const setValue = t6;
519
455
  let t7;
520
- $[9] !== defaultRadius || $[10] !== setValue || $[11] !== value?.radius ? (t7 = (event) => {
521
- event.latLng && (circleRef.current && circleRef.current.setCenter(event.latLng), setValue(event.latLng, value?.radius || defaultRadius));
522
- }, $[9] = defaultRadius, $[10] = setValue, $[11] = value?.radius, $[12] = t7) : t7 = $[12];
523
- const handleMarkerDragEnd = t7;
456
+ $[7] !== currentRadius || $[8] !== setValue ? (t7 = (event) => {
457
+ event.detail.latLng && setValue(event.detail.latLng, currentRadius);
458
+ }, $[7] = currentRadius, $[8] = setValue, $[9] = t7) : t7 = $[9];
459
+ const handleMapClick = t7;
524
460
  let t8;
525
- $[13] !== defaultRadius || $[14] !== setValue || $[15] !== value?.radius ? (t8 = (event_0) => {
526
- event_0.latLng && setValue(event_0.latLng, value?.radius || defaultRadius);
527
- }, $[13] = defaultRadius, $[14] = setValue, $[15] = value?.radius, $[16] = t8) : t8 = $[16];
528
- const handleMapClick = t8;
529
- let t10, t9;
530
- $[17] !== value ? (t9 = () => {
531
- value && circleRef.current && (circleRef.current.setCenter({
461
+ $[10] !== currentRadius || $[11] !== setValue ? (t8 = (event_0) => {
462
+ event_0.latLng && setValue({
463
+ lat: event_0.latLng.lat(),
464
+ lng: event_0.latLng.lng()
465
+ }, currentRadius);
466
+ }, $[10] = currentRadius, $[11] = setValue, $[12] = t8) : t8 = $[12];
467
+ const handleMarkerDragEnd = t8;
468
+ let t9;
469
+ $[13] !== currentRadius || $[14] !== setValue ? (t9 = (location) => setValue(location, currentRadius), $[13] = currentRadius, $[14] = setValue, $[15] = t9) : t9 = $[15];
470
+ const handleSelect = t9;
471
+ let t10;
472
+ $[16] !== setValue || $[17] !== value ? (t10 = (radius_0) => {
473
+ value && setValue({
532
474
  lat: value.lat,
533
475
  lng: value.lng
534
- }), circleRef.current.setRadius(value.radius));
535
- }, t10 = [value], $[17] = value, $[18] = t10, $[19] = t9) : (t10 = $[18], t9 = $[19]), useEffect(t9, t10);
476
+ }, radius_0);
477
+ }, $[16] = setValue, $[17] = value, $[18] = t10) : t10 = $[18];
478
+ const handleCircleRadiusChanged = t10;
536
479
  let t11;
537
- $[20] !== getCenter2 ? (t11 = getCenter2(), $[20] = getCenter2, $[21] = t11) : t11 = $[21];
480
+ $[19] !== currentRadius || $[20] !== setValue ? (t11 = (event_1) => {
481
+ event_1.latLng && setValue({
482
+ lat: event_1.latLng.lat(),
483
+ lng: event_1.latLng.lng()
484
+ }, currentRadius);
485
+ }, $[19] = currentRadius, $[20] = setValue, $[21] = t11) : t11 = $[21];
486
+ const handleCircleDragEnd = t11;
538
487
  let t12;
539
- $[22] !== api || $[23] !== handleMarkerDragEnd || $[24] !== handlePlaceChanged || $[25] !== onChange || $[26] !== setValue || $[27] !== value ? (t12 = (map) => (value && !circleRef.current && (circleRef.current = new api.Circle({
540
- map,
541
- center: {
488
+ $[22] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t12 = {
489
+ width: "100%",
490
+ height: "100%"
491
+ }, $[22] = t12) : t12 = $[22];
492
+ let t13;
493
+ $[23] !== handleSelect ? (t13 = /* @__PURE__ */ jsx(MapControl, { position: ControlPosition.TOP_RIGHT, children: /* @__PURE__ */ jsx(SearchInput, { onSelect: handleSelect }) }), $[23] = handleSelect, $[24] = t13) : t13 = $[24];
494
+ let t14;
495
+ $[25] !== handleCircleDragEnd || $[26] !== handleCircleRadiusChanged || $[27] !== handleMarkerDragEnd || $[28] !== onChange || $[29] !== value ? (t14 = value && /* @__PURE__ */ jsxs(Fragment, { children: [
496
+ /* @__PURE__ */ jsx(AdvancedMarker, { position: {
542
497
  lat: value.lat,
543
498
  lng: value.lng
544
- },
545
- radius: value.radius,
546
- fillColor: "#4285F4",
547
- fillOpacity: 0.2,
548
- strokeColor: "#4285F4",
549
- strokeOpacity: 0.8,
550
- strokeWeight: 2,
551
- editable: !0
552
- }), circleRef.current.addListener("center_changed", () => {
553
- if (circleRef.current && markerRef.current && !isMarkerDragging.current) {
554
- const circleCenter = circleRef.current.getCenter();
555
- circleCenter && markerRef.current.setPosition(circleCenter);
556
- }
557
- }), circleRef.current.addListener("radius_changed", () => {
558
- if (circleRef.current) {
559
- const center = circleRef.current.getCenter(), radius_0 = circleRef.current.getRadius();
560
- center && setValue(center, Math.round(radius_0));
561
- }
562
- }), circleRef.current.addListener("dragend", () => {
563
- if (circleRef.current) {
564
- const center_0 = circleRef.current.getCenter(), radius_1 = circleRef.current.getRadius();
565
- center_0 && setValue(center_0, Math.round(radius_1));
566
- }
567
- })), /* @__PURE__ */ jsxs(Fragment, { children: [
568
- /* @__PURE__ */ jsx(SearchInput, { api, map, onChange: handlePlaceChanged }),
569
- value && /* @__PURE__ */ jsx(Marker, { api, map, position: value, onMove: onChange ? handleMarkerDragEnd : void 0, markerRef }),
570
- value && markerRef.current && /* @__PURE__ */ jsx(MarkerDragSync, { api, marker: markerRef.current, circleRef, isMarkerDragging })
571
- ] })), $[22] = api, $[23] = handleMarkerDragEnd, $[24] = handlePlaceChanged, $[25] = onChange, $[26] = setValue, $[27] = value, $[28] = t12) : t12 = $[28];
572
- let t13;
573
- return $[29] !== api || $[30] !== defaultRadiusZoom || $[31] !== handleMapClick || $[32] !== t11 || $[33] !== t12 ? (t13 = /* @__PURE__ */ jsx(GoogleMap, { api, location: t11, onClick: handleMapClick, defaultZoom: defaultRadiusZoom, children: t12 }), $[29] = api, $[30] = defaultRadiusZoom, $[31] = handleMapClick, $[32] = t11, $[33] = t12, $[34] = t13) : t13 = $[34], t13;
574
- }, EMPTY_PATH = [], generateCirclePoints = (lat, lng, radius) => {
575
- const points = [];
576
- for (let i = 0; i <= 32; i++) {
577
- const angle = i / 32 * 2 * Math.PI, latOffset = radius / 111e3 * Math.cos(angle), lngOffset = radius / (111e3 * Math.cos(lat * Math.PI / 180)) * Math.sin(angle);
578
- points.push({
579
- lat: lat + latOffset,
580
- lng: lng + lngOffset
581
- });
582
- }
583
- return points;
584
- }, getStaticImageUrl = (value, apiKey) => {
585
- const loc = `${value.lat},${value.lng}`;
586
- let zoom = 13;
587
- if (value.radius) {
588
- const scale = (value.radius + value.radius / 2) / 500, calculatedZoom = 16 - Math.log(scale) / Math.log(2);
589
- zoom = Math.max(8, Math.min(16, Math.round(calculatedZoom - 0.4)));
590
- }
591
- const qs = new URLSearchParams({
592
- key: apiKey,
593
- center: loc,
594
- markers: loc,
595
- zoom: zoom.toString(),
596
- scale: "2",
597
- size: "640x300"
598
- });
599
- if (value.radius) {
600
- const path = generateCirclePoints(value.lat, value.lng, value.radius).map((p) => `${p.lat},${p.lng}`).join("|");
601
- qs.append("path", `fillcolor:0x4285F480|color:0x4285F4|weight:2|${path}`);
602
- }
603
- return `https://maps.googleapis.com/maps/api/staticmap?${qs.toString()}`;
604
- };
499
+ }, draggable: !!onChange, onDragEnd: handleMarkerDragEnd }),
500
+ /* @__PURE__ */ jsx(Circle, { center: {
501
+ lat: value.lat,
502
+ lng: value.lng
503
+ }, radius: value.radius, editable: !!onChange, draggable: !!onChange, fillColor: "#4285F4", fillOpacity: 0.2, strokeColor: "#4285F4", strokeOpacity: 0.8, strokeWeight: 2, onRadiusChanged: handleCircleRadiusChanged, onDragEnd: handleCircleDragEnd })
504
+ ] }), $[25] = handleCircleDragEnd, $[26] = handleCircleRadiusChanged, $[27] = handleMarkerDragEnd, $[28] = onChange, $[29] = value, $[30] = t14) : t14 = $[30];
505
+ let t15;
506
+ return $[31] !== center || $[32] !== defaultRadiusZoom || $[33] !== handleMapClick || $[34] !== t13 || $[35] !== t14 ? (t15 = /* @__PURE__ */ jsxs(Map, { mapId: MAP_ID, defaultCenter: center, defaultZoom: defaultRadiusZoom, onClick: handleMapClick, gestureHandling: "greedy", streetViewControl: !1, mapTypeControl: !1, style: t12, children: [
507
+ t13,
508
+ t14
509
+ ] }), $[31] = center, $[32] = defaultRadiusZoom, $[33] = handleMapClick, $[34] = t13, $[35] = t14, $[36] = t15) : t15 = $[36], t15;
510
+ }
511
+ const EMPTY_PATH = [];
605
512
  function GeopointRadiusInput(props) {
606
- const $ = c(64), {
513
+ const $ = c(68), {
607
514
  changed,
608
515
  elementProps,
609
516
  focused,
610
- geoConfig: config2,
517
+ geoConfig: config,
611
518
  onChange,
612
519
  onPathFocus,
613
520
  path,
@@ -633,12 +540,12 @@ function GeopointRadiusInput(props) {
633
540
  $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t2 = () => setModalOpen(_temp), $[4] = t2) : t2 = $[4];
634
541
  const handleToggleModal = t2;
635
542
  let t3;
636
- $[5] !== config2.defaultRadius || $[6] !== onChange || $[7] !== schemaTypeName || $[8] !== value?.radius ? (t3 = (latLng, radius) => {
637
- const currentRadius = radius ?? value?.radius ?? config2.defaultRadius ?? 1e3;
543
+ $[5] !== config.defaultRadius || $[6] !== onChange || $[7] !== schemaTypeName || $[8] !== value?.radius ? (t3 = (latLng, radius) => {
544
+ const currentRadius = radius ?? value?.radius ?? config.defaultRadius ?? 1e3;
638
545
  onChange([setIfMissing({
639
546
  _type: schemaTypeName
640
- }), set(latLng.lat(), ["lat"]), set(latLng.lng(), ["lng"]), set(currentRadius, ["radius"])]);
641
- }, $[5] = config2.defaultRadius, $[6] = onChange, $[7] = schemaTypeName, $[8] = value?.radius, $[9] = t3) : t3 = $[9];
547
+ }), set(latLng.lat, ["lat"]), set(latLng.lng, ["lng"]), set(currentRadius, ["radius"])]);
548
+ }, $[5] = config.defaultRadius, $[6] = onChange, $[7] = schemaTypeName, $[8] = value?.radius, $[9] = t3) : t3 = $[9];
642
549
  const handleChange = t3;
643
550
  let t4;
644
551
  $[10] !== onChange || $[11] !== value ? (t4 = (event) => {
@@ -653,389 +560,64 @@ function GeopointRadiusInput(props) {
653
560
  let t6, t7;
654
561
  if ($[15] !== modalOpen || $[16] !== onPathFocus ? (t6 = () => {
655
562
  modalOpen && onPathFocus(EMPTY_PATH);
656
- }, t7 = [modalOpen, onPathFocus], $[15] = modalOpen, $[16] = onPathFocus, $[17] = t6, $[18] = t7) : (t6 = $[17], t7 = $[18]), useEffect(t6, t7), !config2 || !config2.apiKey) {
563
+ }, t7 = [modalOpen, onPathFocus], $[15] = modalOpen, $[16] = onPathFocus, $[17] = t6, $[18] = t7) : (t6 = $[17], t7 = $[18]), useEffect(t6, t7), !config || !config.apiKey) {
657
564
  let t82;
658
- return $[19] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t82 = /* @__PURE__ */ jsxs("div", { children: [
659
- /* @__PURE__ */ jsxs("p", { children: [
660
- "The ",
661
- /* @__PURE__ */ jsx("a", { href: "https://sanity.io/docs/schema-types/geopoint-type", children: "Geopoint Radius type" }),
662
- " ",
663
- "needs a Google Maps API key with access to:"
664
- ] }),
665
- /* @__PURE__ */ jsxs("ul", { children: [
666
- /* @__PURE__ */ jsx("li", { children: "Google Maps JavaScript API" }),
667
- /* @__PURE__ */ jsx("li", { children: "Google Places API Web Service" }),
668
- /* @__PURE__ */ jsx("li", { children: "Google Static Maps API" })
669
- ] }),
670
- /* @__PURE__ */ jsx("p", { children: "Please enter the API key with access to these services in your googleMapsInput plugin config." })
671
- ] }), $[19] = t82) : t82 = $[19], t82;
565
+ return $[19] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t82 = /* @__PURE__ */ jsx(MissingApiKeyCard, { typeTitle: "Geopoint Radius" }), $[19] = t82) : t82 = $[19], t82;
672
566
  }
673
567
  let t8;
674
- $[20] !== changed || $[21] !== config2.apiKey || $[22] !== focused || $[23] !== handleFocusButton || $[24] !== path || $[25] !== value ? (t8 = value && /* @__PURE__ */ jsx(ChangeIndicator, { path, isChanged: changed, hasFocus: !!focused, children: /* @__PURE__ */ jsx(PreviewImage, { src: getStaticImageUrl(value, config2.apiKey), alt: "Map location with radius", onClick: handleFocusButton, onDoubleClick: handleToggleModal }) }), $[20] = changed, $[21] = config2.apiKey, $[22] = focused, $[23] = handleFocusButton, $[24] = path, $[25] = value, $[26] = t8) : t8 = $[26];
568
+ $[20] !== config.apiKey || $[21] !== value ? (t8 = value ? getGeopointRadiusStaticMapUrl(value, config.apiKey) : null, $[20] = config.apiKey, $[21] = value, $[22] = t8) : t8 = $[22];
569
+ const staticImageUrl = t8;
675
570
  let t9;
676
- $[27] !== config2.defaultRadius || $[28] !== handleRadiusChange || $[29] !== readOnly || $[30] !== value ? (t9 = value && /* @__PURE__ */ jsxs(Stack, { space: 2, children: [
571
+ $[23] !== changed || $[24] !== focused || $[25] !== handleFocusButton || $[26] !== path || $[27] !== staticImageUrl || $[28] !== value ? (t9 = value && staticImageUrl && /* @__PURE__ */ jsx(ChangeIndicator, { path, isChanged: changed, hasFocus: !!focused, children: /* @__PURE__ */ jsx(StaticMapPreview, { url: staticImageUrl, onClick: handleFocusButton, onDoubleClick: handleToggleModal }) }), $[23] = changed, $[24] = focused, $[25] = handleFocusButton, $[26] = path, $[27] = staticImageUrl, $[28] = value, $[29] = t9) : t9 = $[29];
572
+ let t10;
573
+ $[30] !== config.defaultRadius || $[31] !== handleRadiusChange || $[32] !== readOnly || $[33] !== value ? (t10 = value && /* @__PURE__ */ jsxs(Stack, { gap: 2, children: [
677
574
  /* @__PURE__ */ jsx(Label, { children: "Radius (meters)" }),
678
- /* @__PURE__ */ jsx(TextInput, { type: "number", value: Math.round(value.radius || config2.defaultRadius || 1e3), onChange: handleRadiusChange, disabled: readOnly, min: 1, max: 5e4, step: 1 })
679
- ] }), $[27] = config2.defaultRadius, $[28] = handleRadiusChange, $[29] = readOnly, $[30] = value, $[31] = t9) : t9 = $[31];
680
- const t10 = value ? 2 : 1, t11 = value && EditIcon, t12 = value ? "Edit" : "Set location and radius";
681
- let t13;
682
- $[32] !== ariaDescribedBy || $[33] !== handleFocus || $[34] !== id || $[35] !== inputRef || $[36] !== readOnly || $[37] !== t11 || $[38] !== t12 ? (t13 = /* @__PURE__ */ jsx(Button, { "aria-describedby": ariaDescribedBy, disabled: readOnly, icon: t11, id, mode: "ghost", onClick: handleToggleModal, onFocus: handleFocus, padding: 3, ref: inputRef, text: t12 }), $[32] = ariaDescribedBy, $[33] = handleFocus, $[34] = id, $[35] = inputRef, $[36] = readOnly, $[37] = t11, $[38] = t12, $[39] = t13) : t13 = $[39];
575
+ /* @__PURE__ */ jsx(TextInput, { type: "number", value: Math.round(value.radius || config.defaultRadius || 1e3), onChange: handleRadiusChange, disabled: readOnly, min: 1, max: 5e4, step: 1 })
576
+ ] }), $[30] = config.defaultRadius, $[31] = handleRadiusChange, $[32] = readOnly, $[33] = value, $[34] = t10) : t10 = $[34];
577
+ const t11 = value ? 2 : 1, t12 = value && EditIcon, t13 = value ? "Edit" : "Set location and radius";
683
578
  let t14;
684
- $[40] !== handleClear || $[41] !== readOnly || $[42] !== value ? (t14 = value && /* @__PURE__ */ jsx(Button, { disabled: readOnly, icon: TrashIcon, mode: "ghost", onClick: handleClear, padding: 3, text: "Remove", tone: "critical" }), $[40] = handleClear, $[41] = readOnly, $[42] = value, $[43] = t14) : t14 = $[43];
579
+ $[35] !== ariaDescribedBy || $[36] !== handleFocus || $[37] !== id || $[38] !== inputRef || $[39] !== readOnly || $[40] !== t12 || $[41] !== t13 ? (t14 = /* @__PURE__ */ jsx(Button, { "aria-describedby": ariaDescribedBy, disabled: readOnly, icon: t12, id, mode: "ghost", onClick: handleToggleModal, onFocus: handleFocus, padding: 3, ref: inputRef, text: t13 }), $[35] = ariaDescribedBy, $[36] = handleFocus, $[37] = id, $[38] = inputRef, $[39] = readOnly, $[40] = t12, $[41] = t13, $[42] = t14) : t14 = $[42];
685
580
  let t15;
686
- $[44] !== t10 || $[45] !== t13 || $[46] !== t14 ? (t15 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Grid, { columns: t10, gap: 3, children: [
687
- t13,
688
- t14
689
- ] }) }), $[44] = t10, $[45] = t13, $[46] = t14, $[47] = t15) : t15 = $[47];
581
+ $[43] !== handleClear || $[44] !== readOnly || $[45] !== value ? (t15 = value && /* @__PURE__ */ jsx(Button, { disabled: readOnly, icon: TrashIcon, mode: "ghost", onClick: handleClear, padding: 3, text: "Remove", tone: "critical" }), $[43] = handleClear, $[44] = readOnly, $[45] = value, $[46] = t15) : t15 = $[46];
690
582
  let t16;
691
- $[48] !== config2.defaultLocation || $[49] !== config2.defaultRadius || $[50] !== config2.defaultRadiusZoom || $[51] !== dialogId || $[52] !== handleBlur || $[53] !== handleChange || $[54] !== handleCloseModal || $[55] !== modalOpen || $[56] !== readOnly || $[57] !== value ? (t16 = modalOpen && /* @__PURE__ */ jsx(Dialog, { header: "Place the marker and set radius on the map", id: `${dialogId}_dialog`, onBlur: handleBlur, onClose: handleCloseModal, ref: dialogRef, width: 1, children: /* @__PURE__ */ jsx(DialogInnerContainer, { children: /* @__PURE__ */ jsx(GoogleMapsLoadProxy, { config: getGeoConfig(), children: (api) => /* @__PURE__ */ jsx(GeopointRadiusSelect, { api, value: value || void 0, onChange: readOnly ? void 0 : handleChange, defaultLocation: config2.defaultLocation, defaultRadiusZoom: config2.defaultRadiusZoom, defaultRadius: config2.defaultRadius }) }) }) }), $[48] = config2.defaultLocation, $[49] = config2.defaultRadius, $[50] = config2.defaultRadiusZoom, $[51] = dialogId, $[52] = handleBlur, $[53] = handleChange, $[54] = handleCloseModal, $[55] = modalOpen, $[56] = readOnly, $[57] = value, $[58] = t16) : t16 = $[58];
583
+ $[47] !== t11 || $[48] !== t14 || $[49] !== t15 ? (t16 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(Grid, { gridTemplateColumns: t11, gap: 3, children: [
584
+ t14,
585
+ t15
586
+ ] }) }), $[47] = t11, $[48] = t14, $[49] = t15, $[50] = t16) : t16 = $[50];
692
587
  let t17;
693
- return $[59] !== t15 || $[60] !== t16 || $[61] !== t8 || $[62] !== t9 ? (t17 = /* @__PURE__ */ jsxs(Stack, { space: 3, children: [
694
- t8,
588
+ $[51] !== config.apiKey || $[52] !== config.defaultLocation || $[53] !== config.defaultRadius || $[54] !== config.defaultRadiusZoom || $[55] !== dialogId || $[56] !== handleBlur || $[57] !== handleChange || $[58] !== handleCloseModal || $[59] !== modalOpen || $[60] !== readOnly || $[61] !== value ? (t17 = modalOpen && /* @__PURE__ */ jsx(Dialog, { header: "Place the marker and set radius on the map", id: `${dialogId}_dialog`, onBlur: handleBlur, onClose: handleCloseModal, ref: dialogRef, width: 1, children: /* @__PURE__ */ jsx(DialogInnerContainer, { children: /* @__PURE__ */ jsx(APIProvider, { apiKey: config.apiKey, children: /* @__PURE__ */ jsx(MapApiGate, { children: /* @__PURE__ */ jsx(GeopointRadiusSelect, { value: value || void 0, onChange: readOnly ? void 0 : handleChange, defaultLocation: config.defaultLocation, defaultRadiusZoom: config.defaultRadiusZoom, defaultRadius: config.defaultRadius }) }) }) }) }), $[51] = config.apiKey, $[52] = config.defaultLocation, $[53] = config.defaultRadius, $[54] = config.defaultRadiusZoom, $[55] = dialogId, $[56] = handleBlur, $[57] = handleChange, $[58] = handleCloseModal, $[59] = modalOpen, $[60] = readOnly, $[61] = value, $[62] = t17) : t17 = $[62];
589
+ let t18;
590
+ return $[63] !== t10 || $[64] !== t16 || $[65] !== t17 || $[66] !== t9 ? (t18 = /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
695
591
  t9,
696
- t15,
697
- t16
698
- ] }), $[59] = t15, $[60] = t16, $[61] = t8, $[62] = t9, $[63] = t17) : t17 = $[63], t17;
592
+ t10,
593
+ t16,
594
+ t17
595
+ ] }), $[63] = t10, $[64] = t16, $[65] = t17, $[66] = t9, $[67] = t18) : t18 = $[67], t18;
699
596
  }
700
597
  function _temp(currentState) {
701
598
  return !currentState;
702
599
  }
703
- const RootContainer = styled.div.withConfig({
704
- displayName: "RootContainer",
705
- componentId: "sc-sa7btb-0"
706
- })`position:relative;min-height:200px;&:empty{background-color:var(--card-skeleton-color-from);display:table;width:100%;}&:empty:after{content:'Missing/invalid data';display:table-cell;vertical-align:middle;text-align:center;position:relative;}`;
707
- class Arrow extends PureComponent {
708
- eventHandlers = {};
709
- componentDidMount() {
710
- const {
711
- from,
712
- to,
713
- api,
714
- map,
715
- zIndex,
716
- onClick,
717
- color,
718
- arrowRef
719
- } = this.props, lineSymbol = {
720
- path: api.SymbolPath.FORWARD_OPEN_ARROW
721
- };
722
- this.line = new api.Polyline({
723
- map,
724
- zIndex,
725
- path: [from, to],
726
- icons: [{
727
- icon: lineSymbol,
728
- offset: "50%"
729
- }],
730
- strokeOpacity: 0.55,
731
- strokeColor: color ? color.text : "black"
732
- }), onClick && (this.eventHandlers.click = api.event.addListener(this.line, "click", onClick)), arrowRef && (arrowRef.current = this.line);
733
- }
734
- componentDidUpdate(prevProps) {
735
- if (!this.line)
736
- return;
737
- const {
738
- from,
739
- to,
740
- map
741
- } = this.props;
742
- (!latLngAreEqual(prevProps.from, from) || !latLngAreEqual(prevProps.to, to)) && this.line.setPath([from, to]), prevProps.map !== map && this.line.setMap(map);
743
- }
744
- componentWillUnmount() {
745
- this.line && this.line.setMap(null), this.eventHandlers.click && this.eventHandlers.click.remove();
746
- }
747
- render() {
748
- return null;
749
- }
750
- }
751
- function GeopointMove(t0) {
752
- const $ = c(21), {
753
- diff,
754
- api,
755
- map,
756
- label
757
- } = t0, {
758
- fromValue: from,
759
- toValue: to
760
- } = diff, annotation = diff.isChanged ? diff.annotation : void 0, userColor = useUserColor(annotation ? annotation.author : null) || void 0, fromRef = useRef(void 0), toRef = useRef(void 0);
761
- let t1;
762
- $[0] !== api || $[1] !== from || $[2] !== map || $[3] !== userColor ? (t1 = from && /* @__PURE__ */ jsx(Marker, { api, map, position: from, zIndex: 0, opacity: 0.55, markerRef: fromRef, color: userColor }), $[0] = api, $[1] = from, $[2] = map, $[3] = userColor, $[4] = t1) : t1 = $[4];
763
- let t2;
764
- $[5] !== api || $[6] !== from || $[7] !== map || $[8] !== to || $[9] !== userColor ? (t2 = from && to && /* @__PURE__ */ jsx(Arrow, { api, map, from, to, zIndex: 1, color: userColor }), $[5] = api, $[6] = from, $[7] = map, $[8] = to, $[9] = userColor, $[10] = t2) : t2 = $[10];
765
- let t3;
766
- $[11] !== api || $[12] !== label || $[13] !== map || $[14] !== to || $[15] !== userColor ? (t3 = to && /* @__PURE__ */ jsx(Marker, { api, map, position: to, zIndex: 2, markerRef: toRef, label, color: userColor }), $[11] = api, $[12] = label, $[13] = map, $[14] = to, $[15] = userColor, $[16] = t3) : t3 = $[16];
767
- let t4;
768
- return $[17] !== t1 || $[18] !== t2 || $[19] !== t3 ? (t4 = /* @__PURE__ */ jsxs(Fragment, { children: [
769
- t1,
770
- t2,
771
- t3
772
- ] }), $[17] = t1, $[18] = t2, $[19] = t3, $[20] = t4) : t4 = $[20], t4;
773
- }
774
- const GeopointArrayDiff = (t0) => {
775
- const $ = c(4), {
776
- diff,
777
- schemaType
778
- } = t0;
779
- let t1;
780
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = getGeoConfig(), $[0] = t1) : t1 = $[0];
781
- let t2;
782
- return $[1] !== diff || $[2] !== schemaType ? (t2 = /* @__PURE__ */ jsx(RootContainer, { children: /* @__PURE__ */ jsx(GoogleMapsLoadProxy, { config: t1, children: (api) => /* @__PURE__ */ jsx(GeopointDiff$1, { api, diff, schemaType }) }) }), $[1] = diff, $[2] = schemaType, $[3] = t2) : t2 = $[3], t2;
783
- };
784
- function GeopointDiff$1(t0) {
785
- const $ = c(17), {
786
- api,
787
- diff
788
- } = t0;
789
- let T0, bounds, t1, t2, t3;
790
- if ($[0] !== api || $[1] !== diff.fromValue || $[2] !== diff.toValue) {
791
- t3 = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
792
- bb0: {
793
- const fromValue = (diff.fromValue || []).filter(hasCoordinates), toValue = (diff.toValue || []).filter(hasCoordinates);
794
- if (fromValue.length === 0 && toValue.length === 0) {
795
- t3 = null;
796
- break bb0;
600
+ const googleMapsInput = definePlugin((config) => ({
601
+ name: "google-maps-input",
602
+ studio: {
603
+ components: {
604
+ // Make the config (API key) available to diff components, which are
605
+ // resolved outside of the form and so can't receive it as a prop.
606
+ activeToolLayout: function(props) {
607
+ return /* @__PURE__ */ jsx(GoogleMapsInputContext, { value: config, children: props.renderDefault(props) });
797
608
  }
798
- bounds = getBounds$2(fromValue, toValue, api), T0 = GoogleMap, t1 = api, t2 = bounds.getCenter().toJSON();
799
609
  }
800
- $[0] = api, $[1] = diff.fromValue, $[2] = diff.toValue, $[3] = T0, $[4] = bounds, $[5] = t1, $[6] = t2, $[7] = t3;
801
- } else
802
- T0 = $[3], bounds = $[4], t1 = $[5], t2 = $[6], t3 = $[7];
803
- if (t3 !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel"))
804
- return t3;
805
- let t4;
806
- $[8] !== api || $[9] !== diff.items ? (t4 = (map) => /* @__PURE__ */ jsx(Fragment, { children: diff.items.map((t52) => {
807
- const {
808
- toIndex,
809
- diff: pointDiff
810
- } = t52;
811
- return isChangeDiff(pointDiff) ? /* @__PURE__ */ jsx(GeopointMove, { api, map, diff: pointDiff, label: `${toIndex}` }, toIndex) : null;
812
- }) }), $[8] = api, $[9] = diff.items, $[10] = t4) : t4 = $[10];
813
- let t5;
814
- return $[11] !== T0 || $[12] !== bounds || $[13] !== t1 || $[14] !== t2 || $[15] !== t4 ? (t5 = /* @__PURE__ */ jsx(T0, { api: t1, location: t2, mapTypeControl: !1, controlSize: 20, bounds, children: t4 }), $[11] = T0, $[12] = bounds, $[13] = t1, $[14] = t2, $[15] = t4, $[16] = t5) : t5 = $[16], t5;
815
- }
816
- function isChangeDiff(diff) {
817
- return diff.action !== "unchanged" && diff.type === "object";
818
- }
819
- function hasCoordinates(point) {
820
- return typeof point.lat == "number" && typeof point.lng == "number";
821
- }
822
- function getBounds$2(fromValue, toValue, api) {
823
- const bounds = new api.LatLngBounds();
824
- return [...fromValue || [], ...toValue || []].forEach((point) => bounds.extend(point)), bounds;
825
- }
826
- const GeopointFieldDiff = (t0) => {
827
- const $ = c(4), {
828
- diff,
829
- schemaType
830
- } = t0;
831
- let t1;
832
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = getGeoConfig(), $[0] = t1) : t1 = $[0];
833
- let t2;
834
- return $[1] !== diff || $[2] !== schemaType ? (t2 = /* @__PURE__ */ jsx(RootContainer, { children: /* @__PURE__ */ jsx(GoogleMapsLoadProxy, { config: t1, children: (api) => /* @__PURE__ */ jsx(GeopointDiff, { api, diff, schemaType }) }) }), $[1] = diff, $[2] = schemaType, $[3] = t2) : t2 = $[3], t2;
835
- };
836
- function GeopointDiff(t0) {
837
- const $ = c(25), {
838
- api,
839
- diff
840
- } = t0, {
841
- fromValue,
842
- toValue
843
- } = diff;
844
- let t1;
845
- $[0] !== diff ? (t1 = getAnnotationAtPath(diff, ["lat"]) || getAnnotationAtPath(diff, ["lng"]) || getAnnotationAtPath(diff, []), $[0] = diff, $[1] = t1) : t1 = $[1];
846
- const annotation = t1;
847
- let t2;
848
- $[2] !== api || $[3] !== diff ? (t2 = getCenter$1(diff, api), $[2] = api, $[3] = diff, $[4] = t2) : t2 = $[4];
849
- const center = t2;
850
- let t3;
851
- $[5] !== api || $[6] !== fromValue || $[7] !== toValue ? (t3 = fromValue && toValue ? getBounds$1(fromValue, toValue, api) : void 0, $[5] = api, $[6] = fromValue, $[7] = toValue, $[8] = t3) : t3 = $[8];
852
- const bounds = t3;
853
- let t4;
854
- $[9] !== annotation ? (t4 = annotation ? [annotation] : [], $[9] = annotation, $[10] = t4) : t4 = $[10];
855
- let t5;
856
- $[11] !== diff ? (t5 = getAction$1(diff), $[11] = diff, $[12] = t5) : t5 = $[12];
857
- let t6;
858
- $[13] !== api || $[14] !== diff ? (t6 = (map) => /* @__PURE__ */ jsx(GeopointMove, { api, map, diff }), $[13] = api, $[14] = diff, $[15] = t6) : t6 = $[15];
859
- let t7;
860
- $[16] !== api || $[17] !== bounds || $[18] !== center || $[19] !== t6 ? (t7 = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(GoogleMap, { api, location: center, mapTypeControl: !1, controlSize: 20, bounds, scrollWheel: !1, children: t6 }) }), $[16] = api, $[17] = bounds, $[18] = center, $[19] = t6, $[20] = t7) : t7 = $[20];
861
- let t8;
862
- return $[21] !== t4 || $[22] !== t5 || $[23] !== t7 ? (t8 = /* @__PURE__ */ jsx(DiffTooltip, { annotations: t4, description: t5, children: t7 }), $[21] = t4, $[22] = t5, $[23] = t7, $[24] = t8) : t8 = $[24], t8;
863
- }
864
- function getBounds$1(fromValue, toValue, api) {
865
- return new api.LatLngBounds().extend(fromValue).extend(toValue);
866
- }
867
- function getCenter$1(diff, api) {
868
- const {
869
- fromValue,
870
- toValue
871
- } = diff;
872
- if (fromValue && toValue)
873
- return getBounds$1(fromValue, toValue, api).getCenter().toJSON();
874
- if (fromValue)
875
- return fromValue;
876
- if (toValue)
877
- return toValue;
878
- throw new Error("Neither a from or a to value present");
879
- }
880
- function getAction$1(diff) {
881
- const {
882
- fromValue,
883
- toValue
884
- } = diff;
885
- return fromValue && toValue ? "Moved" : fromValue ? "Removed" : toValue ? "Added" : "Unchanged";
886
- }
887
- function GeopointRadiusMove(t0) {
888
- const $ = c(33), {
889
- diff,
890
- api,
891
- map,
892
- label
893
- } = t0, {
894
- fromValue: from,
895
- toValue: to
896
- } = diff, annotation = diff.isChanged ? diff.annotation : void 0, userColor = useUserColor(annotation ? annotation.author : null) || void 0, fromRef = useRef(void 0), toRef = useRef(void 0), fromCircleRef = useRef(void 0), toCircleRef = useRef(void 0);
897
- let t1;
898
- $[0] !== api || $[1] !== from || $[2] !== map || $[3] !== to || $[4] !== userColor?.background ? (t1 = () => {
899
- const color = userColor?.background || "#4285F4";
900
- return from && from.radius && (fromCircleRef.current = new api.Circle({
901
- map,
902
- center: {
903
- lat: from.lat,
904
- lng: from.lng
905
- },
906
- radius: from.radius,
907
- fillColor: color,
908
- fillOpacity: 0.1,
909
- strokeColor: color,
910
- strokeOpacity: 0.3,
911
- strokeWeight: 1,
912
- zIndex: 0
913
- })), to && to.radius && (toCircleRef.current = new api.Circle({
914
- map,
915
- center: {
916
- lat: to.lat,
917
- lng: to.lng
918
- },
919
- radius: to.radius,
920
- fillColor: color,
921
- fillOpacity: 0.2,
922
- strokeColor: color,
923
- strokeOpacity: 0.8,
924
- strokeWeight: 2,
925
- zIndex: 2
926
- })), () => {
927
- fromCircleRef.current && fromCircleRef.current.setMap(null), toCircleRef.current && toCircleRef.current.setMap(null);
928
- };
929
- }, $[0] = api, $[1] = from, $[2] = map, $[3] = to, $[4] = userColor?.background, $[5] = t1) : t1 = $[5];
930
- let t2;
931
- $[6] !== api || $[7] !== from || $[8] !== map || $[9] !== to || $[10] !== userColor ? (t2 = [api, map, from, to, userColor], $[6] = api, $[7] = from, $[8] = map, $[9] = to, $[10] = userColor, $[11] = t2) : t2 = $[11], useEffect(t1, t2);
932
- let t3;
933
- $[12] !== api || $[13] !== from || $[14] !== map || $[15] !== userColor ? (t3 = from && /* @__PURE__ */ jsx(Marker, { api, map, position: from, zIndex: 0, opacity: 0.55, markerRef: fromRef, color: userColor }), $[12] = api, $[13] = from, $[14] = map, $[15] = userColor, $[16] = t3) : t3 = $[16];
934
- let t4;
935
- $[17] !== api || $[18] !== from || $[19] !== map || $[20] !== to || $[21] !== userColor ? (t4 = from && to && /* @__PURE__ */ jsx(Arrow, { api, map, from, to, zIndex: 1, color: userColor }), $[17] = api, $[18] = from, $[19] = map, $[20] = to, $[21] = userColor, $[22] = t4) : t4 = $[22];
936
- let t5;
937
- $[23] !== api || $[24] !== label || $[25] !== map || $[26] !== to || $[27] !== userColor ? (t5 = to && /* @__PURE__ */ jsx(Marker, { api, map, position: to, zIndex: 2, markerRef: toRef, label, color: userColor }), $[23] = api, $[24] = label, $[25] = map, $[26] = to, $[27] = userColor, $[28] = t5) : t5 = $[28];
938
- let t6;
939
- return $[29] !== t3 || $[30] !== t4 || $[31] !== t5 ? (t6 = /* @__PURE__ */ jsxs(Fragment, { children: [
940
- t3,
941
- t4,
942
- t5
943
- ] }), $[29] = t3, $[30] = t4, $[31] = t5, $[32] = t6) : t6 = $[32], t6;
944
- }
945
- const GeopointRadiusFieldDiff = (t0) => {
946
- const $ = c(4), {
947
- diff,
948
- schemaType
949
- } = t0;
950
- let t1;
951
- $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = getGeoConfig(), $[0] = t1) : t1 = $[0];
952
- let t2;
953
- return $[1] !== diff || $[2] !== schemaType ? (t2 = /* @__PURE__ */ jsx(RootContainer, { children: /* @__PURE__ */ jsx(GoogleMapsLoadProxy, { config: t1, children: (api) => /* @__PURE__ */ jsx(GeopointRadiusDiff, { api, diff, schemaType }) }) }), $[1] = diff, $[2] = schemaType, $[3] = t2) : t2 = $[3], t2;
954
- };
955
- function GeopointRadiusDiff(t0) {
956
- const $ = c(25), {
957
- api,
958
- diff
959
- } = t0, {
960
- fromValue,
961
- toValue
962
- } = diff;
963
- let t1;
964
- $[0] !== diff ? (t1 = getAnnotationAtPath(diff, ["lat"]) || getAnnotationAtPath(diff, ["lng"]) || getAnnotationAtPath(diff, ["radius"]) || getAnnotationAtPath(diff, []), $[0] = diff, $[1] = t1) : t1 = $[1];
965
- const annotation = t1;
966
- let t2;
967
- $[2] !== api || $[3] !== diff ? (t2 = getCenter(diff, api), $[2] = api, $[3] = diff, $[4] = t2) : t2 = $[4];
968
- const center = t2;
969
- let t3;
970
- $[5] !== api || $[6] !== fromValue || $[7] !== toValue ? (t3 = fromValue && toValue ? getBounds(fromValue, toValue, api) : void 0, $[5] = api, $[6] = fromValue, $[7] = toValue, $[8] = t3) : t3 = $[8];
971
- const bounds = t3;
972
- let t4;
973
- $[9] !== annotation ? (t4 = annotation ? [annotation] : [], $[9] = annotation, $[10] = t4) : t4 = $[10];
974
- let t5;
975
- $[11] !== diff ? (t5 = getAction(diff), $[11] = diff, $[12] = t5) : t5 = $[12];
976
- let t6;
977
- $[13] !== api || $[14] !== diff ? (t6 = (map) => /* @__PURE__ */ jsx(GeopointRadiusMove, { api, map, diff }), $[13] = api, $[14] = diff, $[15] = t6) : t6 = $[15];
978
- let t7;
979
- $[16] !== api || $[17] !== bounds || $[18] !== center || $[19] !== t6 ? (t7 = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(GoogleMap, { api, location: center, mapTypeControl: !1, controlSize: 20, bounds, scrollWheel: !1, children: t6 }) }), $[16] = api, $[17] = bounds, $[18] = center, $[19] = t6, $[20] = t7) : t7 = $[20];
980
- let t8;
981
- return $[21] !== t4 || $[22] !== t5 || $[23] !== t7 ? (t8 = /* @__PURE__ */ jsx(DiffTooltip, { annotations: t4, description: t5, children: t7 }), $[21] = t4, $[22] = t5, $[23] = t7, $[24] = t8) : t8 = $[24], t8;
982
- }
983
- function getBounds(fromValue, toValue, api) {
984
- const bounds = new api.LatLngBounds().extend(fromValue).extend(toValue), fromRadius = fromValue.radius || 0, toRadius = toValue.radius || 0, maxRadius = Math.max(fromRadius, toRadius);
985
- if (maxRadius > 0) {
986
- const radiusInDegrees = maxRadius / 111e3;
987
- bounds.extend({
988
- lat: fromValue.lat + radiusInDegrees,
989
- lng: fromValue.lng + radiusInDegrees
990
- }), bounds.extend({
991
- lat: fromValue.lat - radiusInDegrees,
992
- lng: fromValue.lng - radiusInDegrees
993
- }), bounds.extend({
994
- lat: toValue.lat + radiusInDegrees,
995
- lng: toValue.lng + radiusInDegrees
996
- }), bounds.extend({
997
- lat: toValue.lat - radiusInDegrees,
998
- lng: toValue.lng - radiusInDegrees
999
- });
1000
- }
1001
- return bounds;
1002
- }
1003
- function getCenter(diff, api) {
1004
- const {
1005
- fromValue,
1006
- toValue
1007
- } = diff;
1008
- if (fromValue && toValue)
1009
- return getBounds(fromValue, toValue, api).getCenter().toJSON();
1010
- if (fromValue)
1011
- return fromValue;
1012
- if (toValue)
1013
- return toValue;
1014
- throw new Error("Neither a from or a to value present");
1015
- }
1016
- function getAction(diff) {
1017
- const {
1018
- fromValue,
1019
- toValue
1020
- } = diff;
1021
- if (fromValue && toValue) {
1022
- const latChanged = fromValue.lat !== toValue.lat || fromValue.lng !== toValue.lng, radiusChanged = fromValue.radius !== toValue.radius;
1023
- return latChanged && radiusChanged ? "Moved and radius changed" : latChanged ? "Moved" : radiusChanged ? "Radius changed" : "Unchanged";
1024
- } else {
1025
- if (fromValue)
1026
- return "Removed";
1027
- if (toValue)
1028
- return "Added";
1029
- }
1030
- return "Unchanged";
1031
- }
1032
- const googleMapsInput = definePlugin((config2) => (setGeoConfig(config2), {
1033
- name: "google-maps-input",
610
+ },
1034
611
  schema: {
1035
612
  types: [{
1036
613
  name: "geopointRadius",
1037
614
  title: "Geopoint with Radius",
1038
615
  type: "object",
616
+ // Only attach the map diff when there's a key to render it with;
617
+ // otherwise fall back to the default per-field (lat/lng/radius) diff.
618
+ components: config.apiKey ? {
619
+ diff: GeopointDiff
620
+ } : void 0,
1039
621
  fields: [{
1040
622
  name: "lat",
1041
623
  title: "Latitude",
@@ -1078,7 +660,7 @@ const googleMapsInput = definePlugin((config2) => (setGeoConfig(config2), {
1078
660
  form: {
1079
661
  components: {
1080
662
  input(props) {
1081
- return isGeopoint(props.schemaType) ? /* @__PURE__ */ jsx(GeopointInput, { ...props, geoConfig: config2 }) : isGeopointRadius(props.schemaType) ? /* @__PURE__ */ jsx(GeopointRadiusInput, { ...props, geoConfig: config2 }) : props.renderDefault(props);
663
+ return isGeopoint(props.schemaType) ? /* @__PURE__ */ jsx(GeopointInput, { ...props, geoConfig: config }) : isGeopointRadius(props.schemaType) ? /* @__PURE__ */ jsx(GeopointRadiusInput, { ...props, geoConfig: config }) : props.renderDefault(props);
1082
664
  }
1083
665
  }
1084
666
  }
@@ -1093,10 +675,8 @@ function isType(name, schema) {
1093
675
  return schema?.name === name ? !0 : schema?.name ? isType(name, schema?.type) : !1;
1094
676
  }
1095
677
  export {
1096
- GeopointArrayDiff,
1097
- GeopointFieldDiff,
678
+ GeopointDiff,
1098
679
  GeopointInput,
1099
- GeopointRadiusFieldDiff,
1100
680
  GeopointRadiusInput,
1101
681
  googleMapsInput
1102
682
  };