@panneau/fields 5.0.0-alpha.6 → 5.0.0-alpha.7

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.
Files changed (67) hide show
  1. package/dist/boolean/BooleanField.js +78 -17
  2. package/dist/boolean/BooleanField.js.map +1 -1
  3. package/dist/color/ColorField.js.map +1 -1
  4. package/dist/date/DateField.js.map +1 -1
  5. package/dist/datetime/DateTimeField.js +107 -20
  6. package/dist/datetime/DateTimeField.js.map +1 -1
  7. package/dist/duration/DurationField.js +126 -41
  8. package/dist/duration/DurationField.js.map +1 -1
  9. package/dist/email/EmailField.js.map +1 -1
  10. package/dist/embed/EmbedField.js +185 -69
  11. package/dist/embed/EmbedField.js.map +1 -1
  12. package/dist/file/FileField.d.ts.map +1 -1
  13. package/dist/file/FileField.js +167 -77
  14. package/dist/file/FileField.js.map +1 -1
  15. package/dist/group/GroupField.js.map +1 -1
  16. package/dist/json/JsonField.js +104 -22
  17. package/dist/json/JsonField.js.map +1 -1
  18. package/dist/locales/index.js.map +1 -1
  19. package/dist/localized/LocalizedField.js.map +1 -1
  20. package/dist/location/LocationField.d.ts.map +1 -1
  21. package/dist/location/LocationField.js +351 -138
  22. package/dist/location/LocationField.js.map +1 -1
  23. package/dist/location/LocationMap.d.ts.map +1 -1
  24. package/dist/location/LocationMap.js +155 -65
  25. package/dist/location/LocationMap.js.map +1 -1
  26. package/dist/location/leafletCss.js.map +1 -1
  27. package/dist/location/nominatim.js.map +1 -1
  28. package/dist/missing/MissingField.d.ts +3 -2
  29. package/dist/missing/MissingField.d.ts.map +1 -1
  30. package/dist/missing/MissingField.js +3 -2
  31. package/dist/missing/MissingField.js.map +1 -1
  32. package/dist/number/NumberField.js.map +1 -1
  33. package/dist/range/RangeField.js +82 -11
  34. package/dist/range/RangeField.js.map +1 -1
  35. package/dist/relation/RelationField.js +485 -145
  36. package/dist/relation/RelationField.js.map +1 -1
  37. package/dist/repeater/RepeaterField.js +118 -34
  38. package/dist/repeater/RepeaterField.js.map +1 -1
  39. package/dist/select/SelectField.js.map +1 -1
  40. package/dist/shared/DefinitionField.js.map +1 -1
  41. package/dist/shared/builtIn.js.map +1 -1
  42. package/dist/shared/check.js.map +1 -1
  43. package/dist/shared/context.js.map +1 -1
  44. package/dist/shared/cx.js.map +1 -1
  45. package/dist/shared/dates.js.map +1 -1
  46. package/dist/shared/embed.js.map +1 -1
  47. package/dist/shared/entry.js.map +1 -1
  48. package/dist/shared/relation.js.map +1 -1
  49. package/dist/slug/SlugField.d.ts.map +1 -1
  50. package/dist/slug/SlugField.js +184 -36
  51. package/dist/slug/SlugField.js.map +1 -1
  52. package/dist/tags/TagsField.js.map +1 -1
  53. package/dist/tel/TelField.js.map +1 -1
  54. package/dist/text/TextField.js.map +1 -1
  55. package/dist/textarea/TextAreaField.js.map +1 -1
  56. package/dist/time/TimeField.js +64 -10
  57. package/dist/time/TimeField.js.map +1 -1
  58. package/dist/upload/FilePicker.js +107 -24
  59. package/dist/upload/FilePicker.js.map +1 -1
  60. package/dist/upload/UploadList.js.map +1 -1
  61. package/dist/upload/files.js.map +1 -1
  62. package/dist/upload/useRejectionMessage.js.map +1 -1
  63. package/dist/upload/useUploads.js.map +1 -1
  64. package/dist/uppy/uploader.js.map +1 -1
  65. package/dist/url/UrlField.js +69 -14
  66. package/dist/url/UrlField.js.map +1 -1
  67. package/package.json +4 -4
@@ -17,6 +17,10 @@ var OPEN_STREET_MAP_TILES = {
17
17
  };
18
18
  var SEARCH_DELAY = 400;
19
19
  var SEARCH_MIN_LENGTH = 3;
20
+ var DEFAULT_CENTER = {
21
+ lat: 20,
22
+ lng: 0
23
+ };
20
24
  /** Whether a value is a point. */
21
25
  function isLocation(value) {
22
26
  return value !== null && typeof value === "object" && isNumber(value.lat) && isNumber(value.lng);
@@ -101,10 +105,11 @@ function _temp(current) {
101
105
  loading: true
102
106
  };
103
107
  }
104
- function LocationField({ value, onChange, onBlur, geocoding: geocodingProp, tiles: tilesProp, center = {
105
- lat: 20,
106
- lng: 0
107
- }, zoom = 15, label, description, errors, disabled, readOnly, required, className }) {
108
+ function LocationField(t0) {
109
+ const $ = c(100);
110
+ const { value, onChange, onBlur, geocoding: geocodingProp, tiles: tilesProp, center: t1, zoom: t2, label, description, errors, disabled, readOnly, required, className } = t0;
111
+ const center = t1 === void 0 ? DEFAULT_CENTER : t1;
112
+ const zoom = t2 === void 0 ? 15 : t2;
108
113
  const intl = usePanneauIntl();
109
114
  const { maps } = useFieldsContext();
110
115
  const geocoding = geocodingProp === void 0 ? maps?.geocoding ?? null : geocodingProp;
@@ -113,151 +118,359 @@ function LocationField({ value, onChange, onBlur, geocoding: geocodingProp, tile
113
118
  const [query, setQuery] = useState("");
114
119
  const [chosen, setChosen] = useState(null);
115
120
  const search = useAddressSearch(editable && query !== chosen?.label ? geocoding : null, query, intl.locale);
116
- const places = chosen !== null && query === chosen.label ? [chosen] : search.results;
121
+ let t3;
122
+ if ($[0] !== chosen || $[1] !== query || $[2] !== search) {
123
+ t3 = chosen !== null && query === chosen.label ? [chosen] : search.results;
124
+ $[0] = chosen;
125
+ $[1] = query;
126
+ $[2] = search;
127
+ $[3] = t3;
128
+ } else t3 = $[3];
129
+ const places = t3;
117
130
  const addressRef = useRef(null);
118
- const focusAddress = () => window.requestAnimationFrame(() => addressRef.current?.querySelector("input")?.focus());
119
- const [draft, setDraft] = useState({
120
- source: value,
121
- lat: value?.lat ?? null,
122
- lng: value?.lng ?? null
123
- });
131
+ let t4;
132
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
133
+ t4 = () => window.requestAnimationFrame(() => addressRef.current?.querySelector("input")?.focus());
134
+ $[4] = t4;
135
+ } else t4 = $[4];
136
+ const focusAddress = t4;
137
+ const t5 = value?.lat ?? null;
138
+ const t6 = value?.lng ?? null;
139
+ let t7;
140
+ if ($[5] !== t5 || $[6] !== t6 || $[7] !== value) {
141
+ t7 = {
142
+ source: value,
143
+ lat: t5,
144
+ lng: t6
145
+ };
146
+ $[5] = t5;
147
+ $[6] = t6;
148
+ $[7] = value;
149
+ $[8] = t7;
150
+ } else t7 = $[8];
151
+ const [draft, setDraft] = useState(t7);
124
152
  if (draft.source !== value) setDraft({
125
153
  source: value,
126
154
  lat: value?.lat ?? null,
127
155
  lng: value?.lng ?? null
128
156
  });
129
- const setPoint = (point, address = value?.address) => {
130
- const next = {
131
- lat: Number(point.lat.toFixed(6)),
132
- lng: Number(point.lng.toFixed(6)),
133
- ...address !== void 0 && address !== "" ? { address } : {}
157
+ let t8;
158
+ if ($[9] !== geocoding || $[10] !== intl.locale || $[11] !== onChange || $[12] !== value?.address) {
159
+ t8 = (point, newAddress) => {
160
+ const address = newAddress ?? value?.address;
161
+ const next = {
162
+ lat: Number(point.lat.toFixed(6)),
163
+ lng: Number(point.lng.toFixed(6)),
164
+ ...address !== void 0 && address !== "" ? { address } : {}
165
+ };
166
+ onChange?.(next);
167
+ if ((address === void 0 || address === "") && geocoding?.reverse !== void 0) {
168
+ const controller = new AbortController();
169
+ geocoding.reverse(point, {
170
+ signal: controller.signal,
171
+ locale: intl.locale
172
+ }).then((place) => {
173
+ if (place !== null) onChange?.({
174
+ ...next,
175
+ address: place.label
176
+ });
177
+ }).catch(_temp2);
178
+ }
134
179
  };
135
- onChange?.(next);
136
- if ((address === void 0 || address === "") && geocoding?.reverse !== void 0) {
137
- const controller = new AbortController();
138
- geocoding.reverse(point, {
139
- signal: controller.signal,
140
- locale: intl.locale
141
- }).then((place) => {
142
- if (place !== null) onChange?.({
143
- ...next,
144
- address: place.label
145
- });
146
- }).catch(() => void 0);
147
- }
148
- };
149
- const setCoordinate = (key, number) => {
150
- const next_0 = {
151
- ...draft,
152
- [key]: number
180
+ $[9] = geocoding;
181
+ $[10] = intl.locale;
182
+ $[11] = onChange;
183
+ $[12] = value?.address;
184
+ $[13] = t8;
185
+ } else t8 = $[13];
186
+ const setPoint = t8;
187
+ let t9;
188
+ if ($[14] !== draft || $[15] !== onChange || $[16] !== setPoint) {
189
+ t9 = (key, number) => {
190
+ const next_0 = {
191
+ ...draft,
192
+ [key]: number
193
+ };
194
+ setDraft(next_0);
195
+ if (next_0.lat !== null && next_0.lng !== null) setPoint({
196
+ lat: next_0.lat,
197
+ lng: next_0.lng
198
+ });
199
+ else if (next_0.lat === null && next_0.lng === null) onChange?.(null);
153
200
  };
154
- setDraft(next_0);
155
- if (next_0.lat !== null && next_0.lng !== null) setPoint({
156
- lat: next_0.lat,
157
- lng: next_0.lng
201
+ $[14] = draft;
202
+ $[15] = onChange;
203
+ $[16] = setPoint;
204
+ $[17] = t9;
205
+ } else t9 = $[17];
206
+ const setCoordinate = t9;
207
+ let t10;
208
+ if ($[18] !== value) {
209
+ t10 = isLocation(value) ? {
210
+ lat: value.lat,
211
+ lng: value.lng
212
+ } : null;
213
+ $[18] = value;
214
+ $[19] = t10;
215
+ } else t10 = $[19];
216
+ const point_0 = t10;
217
+ let t11;
218
+ if ($[20] !== chosen || $[21] !== editable || $[22] !== geocoding || $[23] !== intl || $[24] !== places || $[25] !== query || $[26] !== search || $[27] !== setPoint) {
219
+ t11 = editable && geocoding !== null ? /* @__PURE__ */ jsx(ComboBox, {
220
+ "aria-label": intl.formatMessage(messages.searchAddress),
221
+ placeholder: intl.formatMessage(messages.searchAddress),
222
+ onInputChange: setQuery,
223
+ items: places.map(_temp3),
224
+ isLoading: search.loading,
225
+ menuTrigger: "input",
226
+ emptyMessage: query.trim().length < SEARCH_MIN_LENGTH ? intl.formatMessage(messages.searchAddressHint, { count: SEARCH_MIN_LENGTH }) : intl.formatMessage(messages.noPlaces),
227
+ value: chosen !== null && query === chosen.label ? "0" : null,
228
+ onChange: (id) => {
229
+ const result_0 = id !== null ? places[Number(id)] : void 0;
230
+ if (result_0 !== void 0) {
231
+ setChosen(result_0);
232
+ setPoint(result_0, result_0.label);
233
+ focusAddress();
234
+ }
235
+ }
236
+ }) : null;
237
+ $[20] = chosen;
238
+ $[21] = editable;
239
+ $[22] = geocoding;
240
+ $[23] = intl;
241
+ $[24] = places;
242
+ $[25] = query;
243
+ $[26] = search;
244
+ $[27] = setPoint;
245
+ $[28] = t11;
246
+ } else t11 = $[28];
247
+ let t12;
248
+ if ($[29] !== setPoint) {
249
+ t12 = (next_1) => setPoint(next_1);
250
+ $[29] = setPoint;
251
+ $[30] = t12;
252
+ } else t12 = $[30];
253
+ const t13 = !editable;
254
+ let t14;
255
+ if ($[31] !== intl || $[32] !== label) {
256
+ t14 = intl.formatMessage(messages.map, { label: typeof label === "string" ? label : "" });
257
+ $[31] = intl;
258
+ $[32] = label;
259
+ $[33] = t14;
260
+ } else t14 = $[33];
261
+ let t15;
262
+ if ($[34] !== center || $[35] !== point_0 || $[36] !== t12 || $[37] !== t13 || $[38] !== t14 || $[39] !== tiles || $[40] !== zoom) {
263
+ t15 = /* @__PURE__ */ jsx(LocationMap, {
264
+ point: point_0,
265
+ onChange: t12,
266
+ tiles,
267
+ center,
268
+ zoom,
269
+ readOnly: t13,
270
+ label: t14
158
271
  });
159
- else if (next_0.lat === null && next_0.lng === null) onChange?.(null);
160
- };
161
- const point_0 = isLocation(value) ? {
162
- lat: value.lat,
163
- lng: value.lng
164
- } : null;
165
- return /* @__PURE__ */ jsx(Fieldset, {
166
- legend: label,
167
- description,
168
- errors,
169
- isRequired: required,
170
- isDisabled: disabled,
171
- className,
172
- children: /* @__PURE__ */ jsxs("div", {
173
- className: LocationField_module_default.location,
272
+ $[34] = center;
273
+ $[35] = point_0;
274
+ $[36] = t12;
275
+ $[37] = t13;
276
+ $[38] = t14;
277
+ $[39] = tiles;
278
+ $[40] = zoom;
279
+ $[41] = t15;
280
+ } else t15 = $[41];
281
+ let t16;
282
+ if ($[42] !== intl) {
283
+ t16 = intl.formatMessage(messages.latitude);
284
+ $[42] = intl;
285
+ $[43] = t16;
286
+ } else t16 = $[43];
287
+ let t17;
288
+ if ($[44] !== setCoordinate) {
289
+ t17 = (next_2) => setCoordinate("lat", next_2);
290
+ $[44] = setCoordinate;
291
+ $[45] = t17;
292
+ } else t17 = $[45];
293
+ let t18;
294
+ if ($[46] !== onBlur) {
295
+ t18 = () => onBlur?.();
296
+ $[46] = onBlur;
297
+ $[47] = t18;
298
+ } else t18 = $[47];
299
+ let t19;
300
+ if ($[48] === Symbol.for("react.memo_cache_sentinel")) {
301
+ t19 = { maximumFractionDigits: 6 };
302
+ $[48] = t19;
303
+ } else t19 = $[48];
304
+ let t20;
305
+ if ($[49] !== disabled || $[50] !== draft.lat || $[51] !== readOnly || $[52] !== t16 || $[53] !== t17 || $[54] !== t18) {
306
+ t20 = /* @__PURE__ */ jsx(NumberInput, {
307
+ label: t16,
308
+ value: draft.lat,
309
+ onChange: t17,
310
+ onBlur: t18,
311
+ minValue: -90,
312
+ maxValue: 90,
313
+ step: 1e-6,
314
+ formatOptions: t19,
315
+ isDisabled: disabled,
316
+ isReadOnly: readOnly,
317
+ className: LocationField_module_default.coordinate
318
+ });
319
+ $[49] = disabled;
320
+ $[50] = draft.lat;
321
+ $[51] = readOnly;
322
+ $[52] = t16;
323
+ $[53] = t17;
324
+ $[54] = t18;
325
+ $[55] = t20;
326
+ } else t20 = $[55];
327
+ let t21;
328
+ if ($[56] !== intl) {
329
+ t21 = intl.formatMessage(messages.longitude);
330
+ $[56] = intl;
331
+ $[57] = t21;
332
+ } else t21 = $[57];
333
+ let t22;
334
+ if ($[58] !== setCoordinate) {
335
+ t22 = (next_3) => setCoordinate("lng", next_3);
336
+ $[58] = setCoordinate;
337
+ $[59] = t22;
338
+ } else t22 = $[59];
339
+ let t23;
340
+ if ($[60] !== onBlur) {
341
+ t23 = () => onBlur?.();
342
+ $[60] = onBlur;
343
+ $[61] = t23;
344
+ } else t23 = $[61];
345
+ let t24;
346
+ if ($[62] === Symbol.for("react.memo_cache_sentinel")) {
347
+ t24 = { maximumFractionDigits: 6 };
348
+ $[62] = t24;
349
+ } else t24 = $[62];
350
+ let t25;
351
+ if ($[63] !== disabled || $[64] !== draft.lng || $[65] !== readOnly || $[66] !== t21 || $[67] !== t22 || $[68] !== t23) {
352
+ t25 = /* @__PURE__ */ jsx(NumberInput, {
353
+ label: t21,
354
+ value: draft.lng,
355
+ onChange: t22,
356
+ onBlur: t23,
357
+ minValue: -180,
358
+ maxValue: 180,
359
+ step: 1e-6,
360
+ formatOptions: t24,
361
+ isDisabled: disabled,
362
+ isReadOnly: readOnly,
363
+ className: LocationField_module_default.coordinate
364
+ });
365
+ $[63] = disabled;
366
+ $[64] = draft.lng;
367
+ $[65] = readOnly;
368
+ $[66] = t21;
369
+ $[67] = t22;
370
+ $[68] = t23;
371
+ $[69] = t25;
372
+ } else t25 = $[69];
373
+ let t26;
374
+ if ($[70] !== editable || $[71] !== intl || $[72] !== onChange || $[73] !== point_0) {
375
+ t26 = editable && point_0 !== null ? /* @__PURE__ */ jsx(IconButton, {
376
+ icon: X,
377
+ label: intl.formatMessage(messages.removePoint),
378
+ className: LocationField_module_default.remove,
379
+ onPress: () => onChange?.(null)
380
+ }) : null;
381
+ $[70] = editable;
382
+ $[71] = intl;
383
+ $[72] = onChange;
384
+ $[73] = point_0;
385
+ $[74] = t26;
386
+ } else t26 = $[74];
387
+ let t27;
388
+ if ($[75] !== t20 || $[76] !== t25 || $[77] !== t26) {
389
+ t27 = /* @__PURE__ */ jsxs("div", {
390
+ className: LocationField_module_default.coordinates,
174
391
  children: [
175
- editable && geocoding !== null ? /* @__PURE__ */ jsx(ComboBox, {
176
- "aria-label": intl.formatMessage(messages.searchAddress),
177
- placeholder: intl.formatMessage(messages.searchAddress),
178
- onInputChange: setQuery,
179
- items: places.map((result, index) => ({
180
- id: String(index),
181
- label: result.label
182
- })),
183
- isLoading: search.loading,
184
- menuTrigger: "input",
185
- emptyMessage: query.trim().length < SEARCH_MIN_LENGTH ? intl.formatMessage(messages.searchAddressHint, { count: SEARCH_MIN_LENGTH }) : intl.formatMessage(messages.noPlaces),
186
- value: chosen !== null && query === chosen.label ? "0" : null,
187
- onChange: (id) => {
188
- const result_0 = id !== null ? places[Number(id)] : void 0;
189
- if (result_0 !== void 0) {
190
- setChosen(result_0);
191
- setPoint(result_0, result_0.label);
192
- focusAddress();
193
- }
194
- }
195
- }) : null,
196
- /* @__PURE__ */ jsx(LocationMap, {
197
- point: point_0,
198
- onChange: (next_1) => setPoint(next_1),
199
- tiles,
200
- center,
201
- zoom,
202
- readOnly: !editable,
203
- label: intl.formatMessage(messages.map, { label: typeof label === "string" ? label : "" })
204
- }),
205
- /* @__PURE__ */ jsxs("div", {
206
- className: LocationField_module_default.coordinates,
207
- children: [
208
- /* @__PURE__ */ jsx(NumberInput, {
209
- label: intl.formatMessage(messages.latitude),
210
- value: draft.lat,
211
- onChange: (next_2) => setCoordinate("lat", next_2),
212
- onBlur: () => onBlur?.(),
213
- minValue: -90,
214
- maxValue: 90,
215
- step: 1e-6,
216
- formatOptions: { maximumFractionDigits: 6 },
217
- isDisabled: disabled,
218
- isReadOnly: readOnly,
219
- className: LocationField_module_default.coordinate
220
- }),
221
- /* @__PURE__ */ jsx(NumberInput, {
222
- label: intl.formatMessage(messages.longitude),
223
- value: draft.lng,
224
- onChange: (next_3) => setCoordinate("lng", next_3),
225
- onBlur: () => onBlur?.(),
226
- minValue: -180,
227
- maxValue: 180,
228
- step: 1e-6,
229
- formatOptions: { maximumFractionDigits: 6 },
230
- isDisabled: disabled,
231
- isReadOnly: readOnly,
232
- className: LocationField_module_default.coordinate
233
- }),
234
- editable && point_0 !== null ? /* @__PURE__ */ jsx(IconButton, {
235
- icon: X,
236
- label: intl.formatMessage(messages.removePoint),
237
- className: LocationField_module_default.remove,
238
- onPress: () => onChange?.(null)
239
- }) : null
240
- ]
392
+ t20,
393
+ t25,
394
+ t26
395
+ ]
396
+ });
397
+ $[75] = t20;
398
+ $[76] = t25;
399
+ $[77] = t26;
400
+ $[78] = t27;
401
+ } else t27 = $[78];
402
+ let t28;
403
+ if ($[79] !== disabled || $[80] !== intl || $[81] !== onBlur || $[82] !== onChange || $[83] !== point_0 || $[84] !== readOnly || $[85] !== value?.address) {
404
+ t28 = point_0 !== null ? /* @__PURE__ */ jsx("div", {
405
+ ref: addressRef,
406
+ children: /* @__PURE__ */ jsx(TextInput, {
407
+ label: intl.formatMessage(messages.address),
408
+ value: value?.address ?? "",
409
+ onChange: (address_0) => onChange?.({
410
+ lat: point_0.lat,
411
+ lng: point_0.lng,
412
+ ...address_0 !== "" ? { address: address_0 } : {}
241
413
  }),
242
- point_0 !== null ? /* @__PURE__ */ jsx("div", {
243
- ref: addressRef,
244
- children: /* @__PURE__ */ jsx(TextInput, {
245
- label: intl.formatMessage(messages.address),
246
- value: value?.address ?? "",
247
- onChange: (address_0) => onChange?.({
248
- lat: point_0.lat,
249
- lng: point_0.lng,
250
- ...address_0 !== "" ? { address: address_0 } : {}
251
- }),
252
- onBlur: () => onBlur?.(),
253
- isDisabled: disabled,
254
- isReadOnly: readOnly
255
- })
256
- }) : null
414
+ onBlur: () => onBlur?.(),
415
+ isDisabled: disabled,
416
+ isReadOnly: readOnly
417
+ })
418
+ }) : null;
419
+ $[79] = disabled;
420
+ $[80] = intl;
421
+ $[81] = onBlur;
422
+ $[82] = onChange;
423
+ $[83] = point_0;
424
+ $[84] = readOnly;
425
+ $[85] = value?.address;
426
+ $[86] = t28;
427
+ } else t28 = $[86];
428
+ let t29;
429
+ if ($[87] !== t11 || $[88] !== t15 || $[89] !== t27 || $[90] !== t28) {
430
+ t29 = /* @__PURE__ */ jsxs("div", {
431
+ className: LocationField_module_default.location,
432
+ children: [
433
+ t11,
434
+ t15,
435
+ t27,
436
+ t28
257
437
  ]
258
- })
259
- });
438
+ });
439
+ $[87] = t11;
440
+ $[88] = t15;
441
+ $[89] = t27;
442
+ $[90] = t28;
443
+ $[91] = t29;
444
+ } else t29 = $[91];
445
+ let t30;
446
+ if ($[92] !== className || $[93] !== description || $[94] !== disabled || $[95] !== errors || $[96] !== label || $[97] !== required || $[98] !== t29) {
447
+ t30 = /* @__PURE__ */ jsx(Fieldset, {
448
+ legend: label,
449
+ description,
450
+ errors,
451
+ isRequired: required,
452
+ isDisabled: disabled,
453
+ className,
454
+ children: t29
455
+ });
456
+ $[92] = className;
457
+ $[93] = description;
458
+ $[94] = disabled;
459
+ $[95] = errors;
460
+ $[96] = label;
461
+ $[97] = required;
462
+ $[98] = t29;
463
+ $[99] = t30;
464
+ } else t30 = $[99];
465
+ return t30;
466
+ }
467
+ function _temp3(result, index) {
468
+ return {
469
+ id: String(index),
470
+ label: result.label
471
+ };
260
472
  }
473
+ function _temp2() {}
261
474
  function isPoint(value) {
262
475
  return isLocation(value);
263
476
  }
@@ -284,7 +497,7 @@ function LocationFieldEntry(props) {
284
497
  const center = t1;
285
498
  let t2;
286
499
  if ($[4] !== field) {
287
- t2 = getSetting(field, "tiles", _temp2);
500
+ t2 = getSetting(field, "tiles", _temp4);
288
501
  $[4] = field;
289
502
  $[5] = t2;
290
503
  } else t2 = $[5];
@@ -341,7 +554,7 @@ function LocationFieldEntry(props) {
341
554
  } else t8 = $[22];
342
555
  return t8;
343
556
  }
344
- function _temp2(value) {
557
+ function _temp4(value) {
345
558
  return value !== null && typeof value === "object" && isString(value.url) && isString(value.attribution);
346
559
  }
347
560
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"LocationField.js","names":["next","point","result","address","_c","styles"],"sources":["../../src/location/LocationField.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { LocationValue } from '@panneau/protocol';\nimport {\n ComboBox,\n Fieldset,\n IconButton,\n NumberInput,\n TextInput,\n usePanneauIntl,\n} from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport { getFieldProps, getSetting, isNumber, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './LocationField.module.css';\nimport { LocationMap, type Point } from './LocationMap';\nimport type { GeocodingResult, GeocodingSource, MapTiles } from './types';\n\nexport type { LocationValue };\n\n/** OpenStreetMap's standard tiles: fine for an admin panel, with their credit. */\nexport const OPEN_STREET_MAP_TILES: MapTiles = {\n url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution:\n '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n maxZoom: 19,\n};\n\nconst SEARCH_DELAY = 400;\nconst SEARCH_MIN_LENGTH = 3;\n\nexport interface LocationFieldProps extends FieldProps<LocationValue> {\n /** The address search. Defaults to that of the `FieldsProvider`; without one, there is none. */\n geocoding?: GeocodingSource | null;\n /** The tiles of the map. Defaults to those of the `FieldsProvider`, or OpenStreetMap's. */\n tiles?: MapTiles;\n /** Where the map opens without a point. Defaults to the whole world. */\n center?: Point;\n /** Zoom of the map on a point. Defaults to 15. */\n zoom?: number;\n}\n\n/** Whether a value is a point. */\nexport function isLocation(value: unknown): value is LocationValue {\n return (\n value !== null &&\n typeof value === 'object' &&\n isNumber((value as Record<string, unknown>).lat) &&\n isNumber((value as Record<string, unknown>).lng)\n );\n}\n\n/** The search of addresses: results of the text typed, after a pause. */\nfunction useAddressSearch(geocoding: GeocodingSource | null, query: string, locale: string) {\n const [state, setState] = useState<{\n query: string;\n results: GeocodingResult[];\n loading: boolean;\n }>({ query: '', results: [], loading: false });\n useEffect(() => {\n const text = query.trim();\n if (geocoding === null || text.length < SEARCH_MIN_LENGTH) {\n return undefined;\n }\n const controller = new AbortController();\n const timeout = window.setTimeout(() => {\n setState((current) => ({ ...current, loading: true }));\n geocoding\n .search(text, { signal: controller.signal, locale })\n .then((results) => setState({ query: text, results, loading: false }))\n .catch(() => {\n if (!controller.signal.aborted) {\n setState({ query: text, results: [], loading: false });\n }\n });\n }, SEARCH_DELAY);\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n }, [geocoding, query, locale]);\n return query.trim().length >= SEARCH_MIN_LENGTH ? state : { ...state, results: [] };\n}\n\n/**\n * A point on a map, and its address. Clicking the map or dragging the marker places the point,\n * and its latitude and longitude can be typed. With an address search, a place found sets the\n * point and the address; with a reverse search, placing a point fills an empty address.\n */\nexport function LocationField({\n value,\n onChange,\n onBlur,\n geocoding: geocodingProp,\n tiles: tilesProp,\n center = { lat: 20, lng: 0 },\n zoom = 15,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n className,\n}: LocationFieldProps) {\n const intl = usePanneauIntl();\n const { maps } = useFieldsContext();\n const geocoding = geocodingProp === undefined ? (maps?.geocoding ?? null) : geocodingProp;\n const tiles = tilesProp ?? maps?.tiles ?? OPEN_STREET_MAP_TILES;\n const editable = disabled !== true && readOnly !== true;\n const [query, setQuery] = useState('');\n // The place chosen: the search shows its label until something else is typed\n const [chosen, setChosen] = useState<GeocodingResult | null>(null);\n const search = useAddressSearch(\n editable && query !== chosen?.label ? geocoding : null,\n query,\n intl.locale,\n );\n const places = chosen !== null && query === chosen.label ? [chosen] : search.results;\n // A place chosen moves focus to its address, which closes the results\n const addressRef = useRef<HTMLDivElement>(null);\n const focusAddress = () =>\n window.requestAnimationFrame(() =>\n addressRef.current?.querySelector<HTMLInputElement>('input')?.focus(),\n );\n\n // The coordinates as typed: a value needs both\n const [draft, setDraft] = useState<{ source: unknown; lat: number | null; lng: number | null }>(\n { source: value, lat: value?.lat ?? null, lng: value?.lng ?? null },\n );\n if (draft.source !== value) {\n setDraft({ source: value, lat: value?.lat ?? null, lng: value?.lng ?? null });\n }\n\n const setPoint = (point: Point, address = value?.address) => {\n const next: LocationValue = {\n lat: Number(point.lat.toFixed(6)),\n lng: Number(point.lng.toFixed(6)),\n ...(address !== undefined && address !== '' ? { address } : {}),\n };\n onChange?.(next);\n // Fills an empty address from the point\n if ((address === undefined || address === '') && geocoding?.reverse !== undefined) {\n const controller = new AbortController();\n void geocoding\n .reverse(point, { signal: controller.signal, locale: intl.locale })\n .then((place) => {\n if (place !== null) {\n onChange?.({ ...next, address: place.label });\n }\n })\n .catch(() => undefined);\n }\n };\n\n const setCoordinate = (key: 'lat' | 'lng', number: number | null) => {\n const next = { ...draft, [key]: number };\n setDraft(next);\n if (next.lat !== null && next.lng !== null) {\n setPoint({ lat: next.lat, lng: next.lng });\n } else if (next.lat === null && next.lng === null) {\n onChange?.(null);\n }\n };\n\n const point = isLocation(value) ? { lat: value.lat, lng: value.lng } : null;\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n isDisabled={disabled}\n className={className}\n >\n <div className={styles.location}>\n {editable && geocoding !== null ? (\n <ComboBox\n aria-label={intl.formatMessage(messages.searchAddress)}\n placeholder={intl.formatMessage(messages.searchAddress)}\n onInputChange={setQuery}\n items={places.map((result, index) => ({\n id: String(index),\n label: result.label,\n }))}\n isLoading={search.loading}\n menuTrigger=\"input\"\n emptyMessage={\n query.trim().length < SEARCH_MIN_LENGTH\n ? intl.formatMessage(messages.searchAddressHint, {\n count: SEARCH_MIN_LENGTH,\n })\n : intl.formatMessage(messages.noPlaces)\n }\n value={chosen !== null && query === chosen.label ? '0' : null}\n onChange={(id) => {\n const result = id !== null ? places[Number(id)] : undefined;\n if (result !== undefined) {\n setChosen(result);\n setPoint(result, result.label);\n focusAddress();\n }\n }}\n />\n ) : null}\n <LocationMap\n point={point}\n onChange={(next) => setPoint(next)}\n tiles={tiles}\n center={center}\n zoom={zoom}\n readOnly={!editable}\n label={intl.formatMessage(messages.map, {\n label: typeof label === 'string' ? label : '',\n })}\n />\n <div className={styles.coordinates}>\n <NumberInput\n label={intl.formatMessage(messages.latitude)}\n value={draft.lat}\n onChange={(next) => setCoordinate('lat', next)}\n onBlur={() => onBlur?.()}\n minValue={-90}\n maxValue={90}\n step={0.000001}\n formatOptions={{ maximumFractionDigits: 6 }}\n isDisabled={disabled}\n isReadOnly={readOnly}\n className={styles.coordinate}\n />\n <NumberInput\n label={intl.formatMessage(messages.longitude)}\n value={draft.lng}\n onChange={(next) => setCoordinate('lng', next)}\n onBlur={() => onBlur?.()}\n minValue={-180}\n maxValue={180}\n step={0.000001}\n formatOptions={{ maximumFractionDigits: 6 }}\n isDisabled={disabled}\n isReadOnly={readOnly}\n className={styles.coordinate}\n />\n {editable && point !== null ? (\n <IconButton\n icon={X}\n label={intl.formatMessage(messages.removePoint)}\n className={styles.remove}\n onPress={() => onChange?.(null)}\n />\n ) : null}\n </div>\n {point !== null ? (\n <div ref={addressRef}>\n <TextInput\n label={intl.formatMessage(messages.address)}\n value={value?.address ?? ''}\n onChange={(address) =>\n onChange?.({\n lat: point.lat,\n lng: point.lng,\n ...(address !== '' ? { address } : {}),\n })\n }\n onBlur={() => onBlur?.()}\n isDisabled={disabled}\n isReadOnly={readOnly}\n />\n </div>\n ) : null}\n </div>\n </Fieldset>\n );\n}\n\nfunction isPoint(value: unknown): value is Point {\n return isLocation(value);\n}\n\n/**\n * The `location` type: settings `zoom`, `center` (`{ \"lat\", \"lng\" }`, where the map opens without\n * a point) and `tiles` (`{ \"url\", \"attribution\" }`), over the maps of the `FieldsProvider`.\n */\nexport function LocationFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const zoom = getSetting(field, 'zoom', isNumber);\n const center = getSetting(field, 'center', isPoint);\n const tiles = getSetting(\n field,\n 'tiles',\n (value): value is MapTiles =>\n value !== null &&\n typeof value === 'object' &&\n isString((value as Record<string, unknown>).url) &&\n isString((value as Record<string, unknown>).attribution),\n );\n const { placeholder: _placeholder, ...fieldProps } = getFieldProps(props);\n return (\n <LocationField\n {...fieldProps}\n value={isLocation(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(zoom !== undefined ? { zoom } : {})}\n {...(center !== undefined ? { center } : {})}\n {...(tiles !== undefined ? { tiles } : {})}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"LocationField.js","names":["X","useEffect","useRef","useState","LocationValue","ComboBox","Fieldset","IconButton","NumberInput","TextInput","usePanneauIntl","useFieldsContext","getFieldProps","getSetting","isNumber","isString","messages","FieldEntryProps","FieldProps","styles","LocationMap","Point","GeocodingResult","GeocodingSource","MapTiles","OPEN_STREET_MAP_TILES","url","attribution","maxZoom","SEARCH_DELAY","SEARCH_MIN_LENGTH","DEFAULT_CENTER","lat","lng","LocationFieldProps","geocoding","tiles","center","zoom","isLocation","value","Record","useAddressSearch","query","locale","$","_c","t0","Symbol","for","results","loading","state","setState","t1","t2","text","trim","length","controller","AbortController","timeout","window","setTimeout","_temp","search","signal","then","catch","aborted","clearTimeout","abort","t3","current","LocationField","onChange","onBlur","geocodingProp","tilesProp","label","description","errors","disabled","readOnly","required","className","undefined","intl","maps","editable","setQuery","chosen","setChosen","places","addressRef","t4","requestAnimationFrame","querySelector","focus","focusAddress","t5","t6","t7","source","draft","setDraft","t8","address","point","newAddress","next","Number","toFixed","reverse","place","_temp2","setPoint","t9","key","number","next_0","setCoordinate","t10","point_0","t11","formatMessage","searchAddress","map","_temp3","searchAddressHint","count","noPlaces","id","result_0","result","t12","next_1","t13","t14","t15","t16","latitude","t17","next_2","t18","t19","maximumFractionDigits","t20","coordinate","t21","longitude","t22","next_3","t23","t24","t25","t26","removePoint","remove","t27","coordinates","t28","address_0","t29","location","t30","index","String","isPoint","LocationFieldEntry","props","field","_temp4","fieldProps","placeholder","_placeholder","_c","styles"],"sources":["../../src/location/LocationField.tsx"],"sourcesContent":["import { X } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { LocationValue } from '@panneau/protocol';\nimport {\n ComboBox,\n Fieldset,\n IconButton,\n NumberInput,\n TextInput,\n usePanneauIntl,\n} from '@panneau/ui';\n\nimport { useFieldsContext } from '../shared/context';\nimport { getFieldProps, getSetting, isNumber, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\nimport styles from './LocationField.module.css';\nimport { LocationMap, type Point } from './LocationMap';\nimport type { GeocodingResult, GeocodingSource, MapTiles } from './types';\n\nexport type { LocationValue };\n\n/** OpenStreetMap's standard tiles: fine for an admin panel, with their credit. */\nexport const OPEN_STREET_MAP_TILES: MapTiles = {\n url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',\n attribution:\n '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n maxZoom: 19,\n};\n\nconst SEARCH_DELAY = 400;\nconst SEARCH_MIN_LENGTH = 3;\nconst DEFAULT_CENTER: Point = { lat: 20, lng: 0 };\n\nexport interface LocationFieldProps extends FieldProps<LocationValue> {\n /** The address search. Defaults to that of the `FieldsProvider`; without one, there is none. */\n geocoding?: GeocodingSource | null;\n /** The tiles of the map. Defaults to those of the `FieldsProvider`, or OpenStreetMap's. */\n tiles?: MapTiles;\n /** Where the map opens without a point. Defaults to the whole world. */\n center?: Point;\n /** Zoom of the map on a point. Defaults to 15. */\n zoom?: number;\n}\n\n/** Whether a value is a point. */\nexport function isLocation(value: unknown): value is LocationValue {\n return (\n value !== null &&\n typeof value === 'object' &&\n isNumber((value as Record<string, unknown>).lat) &&\n isNumber((value as Record<string, unknown>).lng)\n );\n}\n\n/** The search of addresses: results of the text typed, after a pause. */\nfunction useAddressSearch(geocoding: GeocodingSource | null, query: string, locale: string) {\n const [state, setState] = useState<{\n query: string;\n results: GeocodingResult[];\n loading: boolean;\n }>({ query: '', results: [], loading: false });\n useEffect(() => {\n const text = query.trim();\n if (geocoding === null || text.length < SEARCH_MIN_LENGTH) {\n return undefined;\n }\n const controller = new AbortController();\n const timeout = window.setTimeout(() => {\n setState((current) => ({ ...current, loading: true }));\n geocoding\n .search(text, { signal: controller.signal, locale })\n .then((results) => setState({ query: text, results, loading: false }))\n .catch(() => {\n if (!controller.signal.aborted) {\n setState({ query: text, results: [], loading: false });\n }\n });\n }, SEARCH_DELAY);\n return () => {\n window.clearTimeout(timeout);\n controller.abort();\n };\n }, [geocoding, query, locale]);\n return query.trim().length >= SEARCH_MIN_LENGTH ? state : { ...state, results: [] };\n}\n\n/**\n * A point on a map, and its address. Clicking the map or dragging the marker places the point,\n * and its latitude and longitude can be typed. With an address search, a place found sets the\n * point and the address; with a reverse search, placing a point fills an empty address.\n */\nexport function LocationField({\n value,\n onChange,\n onBlur,\n geocoding: geocodingProp,\n tiles: tilesProp,\n center = DEFAULT_CENTER,\n zoom = 15,\n label,\n description,\n errors,\n disabled,\n readOnly,\n required,\n className,\n}: LocationFieldProps) {\n const intl = usePanneauIntl();\n const { maps } = useFieldsContext();\n const geocoding = geocodingProp === undefined ? (maps?.geocoding ?? null) : geocodingProp;\n const tiles = tilesProp ?? maps?.tiles ?? OPEN_STREET_MAP_TILES;\n const editable = disabled !== true && readOnly !== true;\n const [query, setQuery] = useState('');\n // The place chosen: the search shows its label until something else is typed\n const [chosen, setChosen] = useState<GeocodingResult | null>(null);\n const search = useAddressSearch(\n editable && query !== chosen?.label ? geocoding : null,\n query,\n intl.locale,\n );\n const places = chosen !== null && query === chosen.label ? [chosen] : search.results;\n // A place chosen moves focus to its address, which closes the results\n const addressRef = useRef<HTMLDivElement>(null);\n const focusAddress = () =>\n window.requestAnimationFrame(() =>\n addressRef.current?.querySelector<HTMLInputElement>('input')?.focus(),\n );\n\n // The coordinates as typed: a value needs both\n const [draft, setDraft] = useState<{ source: unknown; lat: number | null; lng: number | null }>(\n { source: value, lat: value?.lat ?? null, lng: value?.lng ?? null },\n );\n if (draft.source !== value) {\n setDraft({ source: value, lat: value?.lat ?? null, lng: value?.lng ?? null });\n }\n\n const setPoint = (point: Point, newAddress?: string) => {\n const address = newAddress ?? value?.address;\n const next: LocationValue = {\n lat: Number(point.lat.toFixed(6)),\n lng: Number(point.lng.toFixed(6)),\n ...(address !== undefined && address !== '' ? { address } : {}),\n };\n onChange?.(next);\n // Fills an empty address from the point\n if ((address === undefined || address === '') && geocoding?.reverse !== undefined) {\n const controller = new AbortController();\n void geocoding\n .reverse(point, { signal: controller.signal, locale: intl.locale })\n .then((place) => {\n if (place !== null) {\n onChange?.({ ...next, address: place.label });\n }\n })\n .catch(() => undefined);\n }\n };\n\n const setCoordinate = (key: 'lat' | 'lng', number: number | null) => {\n const next = { ...draft, [key]: number };\n setDraft(next);\n if (next.lat !== null && next.lng !== null) {\n setPoint({ lat: next.lat, lng: next.lng });\n } else if (next.lat === null && next.lng === null) {\n onChange?.(null);\n }\n };\n\n const point = isLocation(value) ? { lat: value.lat, lng: value.lng } : null;\n return (\n <Fieldset\n legend={label}\n description={description}\n errors={errors}\n isRequired={required}\n isDisabled={disabled}\n className={className}\n >\n <div className={styles.location}>\n {editable && geocoding !== null ? (\n <ComboBox\n aria-label={intl.formatMessage(messages.searchAddress)}\n placeholder={intl.formatMessage(messages.searchAddress)}\n onInputChange={setQuery}\n items={places.map((result, index) => ({\n id: String(index),\n label: result.label,\n }))}\n isLoading={search.loading}\n menuTrigger=\"input\"\n emptyMessage={\n query.trim().length < SEARCH_MIN_LENGTH\n ? intl.formatMessage(messages.searchAddressHint, {\n count: SEARCH_MIN_LENGTH,\n })\n : intl.formatMessage(messages.noPlaces)\n }\n value={chosen !== null && query === chosen.label ? '0' : null}\n onChange={(id) => {\n const result = id !== null ? places[Number(id)] : undefined;\n if (result !== undefined) {\n setChosen(result);\n setPoint(result, result.label);\n focusAddress();\n }\n }}\n />\n ) : null}\n <LocationMap\n point={point}\n onChange={(next) => setPoint(next)}\n tiles={tiles}\n center={center}\n zoom={zoom}\n readOnly={!editable}\n label={intl.formatMessage(messages.map, {\n label: typeof label === 'string' ? label : '',\n })}\n />\n <div className={styles.coordinates}>\n <NumberInput\n label={intl.formatMessage(messages.latitude)}\n value={draft.lat}\n onChange={(next) => setCoordinate('lat', next)}\n onBlur={() => onBlur?.()}\n minValue={-90}\n maxValue={90}\n step={0.000001}\n formatOptions={{ maximumFractionDigits: 6 }}\n isDisabled={disabled}\n isReadOnly={readOnly}\n className={styles.coordinate}\n />\n <NumberInput\n label={intl.formatMessage(messages.longitude)}\n value={draft.lng}\n onChange={(next) => setCoordinate('lng', next)}\n onBlur={() => onBlur?.()}\n minValue={-180}\n maxValue={180}\n step={0.000001}\n formatOptions={{ maximumFractionDigits: 6 }}\n isDisabled={disabled}\n isReadOnly={readOnly}\n className={styles.coordinate}\n />\n {editable && point !== null ? (\n <IconButton\n icon={X}\n label={intl.formatMessage(messages.removePoint)}\n className={styles.remove}\n onPress={() => onChange?.(null)}\n />\n ) : null}\n </div>\n {point !== null ? (\n <div ref={addressRef}>\n <TextInput\n label={intl.formatMessage(messages.address)}\n value={value?.address ?? ''}\n onChange={(address) =>\n onChange?.({\n lat: point.lat,\n lng: point.lng,\n ...(address !== '' ? { address } : {}),\n })\n }\n onBlur={() => onBlur?.()}\n isDisabled={disabled}\n isReadOnly={readOnly}\n />\n </div>\n ) : null}\n </div>\n </Fieldset>\n );\n}\n\nfunction isPoint(value: unknown): value is Point {\n return isLocation(value);\n}\n\n/**\n * The `location` type: settings `zoom`, `center` (`{ \"lat\", \"lng\" }`, where the map opens without\n * a point) and `tiles` (`{ \"url\", \"attribution\" }`), over the maps of the `FieldsProvider`.\n */\nexport function LocationFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const zoom = getSetting(field, 'zoom', isNumber);\n const center = getSetting(field, 'center', isPoint);\n const tiles = getSetting(\n field,\n 'tiles',\n (value): value is MapTiles =>\n value !== null &&\n typeof value === 'object' &&\n isString((value as Record<string, unknown>).url) &&\n isString((value as Record<string, unknown>).attribution),\n );\n const { placeholder: _placeholder, ...fieldProps } = getFieldProps(props);\n return (\n <LocationField\n {...fieldProps}\n value={isLocation(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(zoom !== undefined ? { zoom } : {})}\n {...(center !== undefined ? { center } : {})}\n {...(tiles !== undefined ? { tiles } : {})}\n />\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocationMap.d.ts","sourceRoot":"","sources":["../../src/location/LocationMap.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkBxC,MAAM,WAAW,KAAK;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,QAAQ,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,KAAK,CAAC;IACd,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAgB,EAChB,KAAK,EACL,SAAS,GACZ,EAAE,gBAAgB,+BAsGlB"}
1
+ {"version":3,"file":"LocationMap.d.ts","sourceRoot":"","sources":["../../src/location/LocationMap.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAwBxC,MAAM,WAAW,KAAK;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,QAAQ,CAAC;IAChB,2CAA2C;IAC3C,MAAM,EAAE,KAAK,CAAC;IACd,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAgB,EAChB,KAAK,EACL,SAAS,GACZ,EAAE,gBAAgB,+BAuGlB"}