@maptiler/geocoding-control 1.4.2-dev.3 → 2.0.0-rc.2

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 (74) hide show
  1. package/MapLibreBasedGeocodingControl.d.ts +2659 -35
  2. package/leaflet-controller.d.ts +1 -1
  3. package/leaflet-controller.js +580 -569
  4. package/leaflet-controller.js.map +1 -1
  5. package/leaflet-controller.umd.js +3 -3
  6. package/leaflet-controller.umd.js.map +1 -1
  7. package/leaflet.d.ts +74 -16
  8. package/leaflet.js +1396 -1369
  9. package/leaflet.js.map +1 -1
  10. package/leaflet.umd.js +3 -3
  11. package/leaflet.umd.js.map +1 -1
  12. package/maplibregl-controller.d.ts +7 -7
  13. package/maplibregl-controller.js +683 -661
  14. package/maplibregl-controller.js.map +1 -1
  15. package/maplibregl-controller.umd.js +3 -3
  16. package/maplibregl-controller.umd.js.map +1 -1
  17. package/maplibregl.d.ts +2614 -5
  18. package/maplibregl.js +1563 -1418
  19. package/maplibregl.js.map +1 -1
  20. package/maplibregl.umd.js +3 -3
  21. package/maplibregl.umd.js.map +1 -1
  22. package/maptilersdk.d.ts +2614 -5
  23. package/maptilersdk.js +1574 -1426
  24. package/maptilersdk.js.map +1 -1
  25. package/maptilersdk.umd.js +3 -3
  26. package/maptilersdk.umd.js.map +1 -1
  27. package/openlayers-controller.d.ts +1 -1
  28. package/openlayers-controller.js +308 -306
  29. package/openlayers-controller.js.map +1 -1
  30. package/openlayers-controller.umd.js +3 -3
  31. package/openlayers-controller.umd.js.map +1 -1
  32. package/openlayers.d.ts +21 -0
  33. package/openlayers.js +1300 -1318
  34. package/openlayers.js.map +1 -1
  35. package/openlayers.umd.js +3 -3
  36. package/openlayers.umd.js.map +1 -1
  37. package/package.json +17 -17
  38. package/react.d.ts +4 -4
  39. package/react.js +811 -798
  40. package/react.js.map +1 -1
  41. package/react.umd.js +1 -1
  42. package/react.umd.js.map +1 -1
  43. package/style.css +1 -1
  44. package/svelte/FeatureItem.svelte +1 -1
  45. package/svelte/FeatureItem.svelte.d.ts +1 -1
  46. package/svelte/GeocodingControl.svelte +68 -46
  47. package/svelte/GeocodingControl.svelte.d.ts +25 -11
  48. package/svelte/MapLibreBasedGeocodingControl.d.ts +2659 -35
  49. package/svelte/MapLibreBasedGeocodingControl.js +165 -58
  50. package/svelte/leaflet-controller.d.ts +1 -1
  51. package/svelte/leaflet-controller.js +50 -24
  52. package/svelte/leaflet.d.ts +74 -16
  53. package/svelte/leaflet.js +26 -15
  54. package/svelte/maplibregl-controller.d.ts +7 -7
  55. package/svelte/maplibregl-controller.js +96 -66
  56. package/svelte/maplibregl.d.ts +2614 -5
  57. package/svelte/maplibregl.js +10 -7
  58. package/svelte/maptilersdk.d.ts +2614 -5
  59. package/svelte/maptilersdk.js +23 -18
  60. package/svelte/openlayers-controller.d.ts +1 -1
  61. package/svelte/openlayers-controller.js +4 -1
  62. package/svelte/openlayers.d.ts +21 -0
  63. package/svelte/openlayers.js +31 -45
  64. package/svelte/react.d.ts +4 -4
  65. package/svelte/react.js +5 -5
  66. package/svelte/types.d.ts +72 -30
  67. package/svelte/vanilla.d.ts +14 -1
  68. package/svelte/vanilla.js +31 -8
  69. package/types.d.ts +72 -30
  70. package/vanilla.d.ts +14 -1
  71. package/vanilla.js +837 -796
  72. package/vanilla.js.map +1 -1
  73. package/vanilla.umd.js +1 -1
  74. package/vanilla.umd.js.map +1 -1
@@ -2,8 +2,7 @@ import { feature, featureCollection } from "@turf/helpers";
2
2
  import union from "@turf/union";
3
3
  import MarkerIcon from "./MarkerIcon.svelte";
4
4
  import { setMask } from "./mask";
5
- const emptyGeojson = featureCollection([]);
6
- export function createMapLibreGlMapController(map, maplibregl, marker = true, showResultMarkers = true, flyToOptions = {}, fitBoundsOptions = {}, fullGeometryStyle = {
5
+ const defaultGeometryStyle = {
7
6
  fill: {
8
7
  paint: {
9
8
  "fill-color": "#000",
@@ -22,50 +21,70 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
22
21
  },
23
22
  filter: ["!", ["has", "isMask"]],
24
23
  },
25
- }) {
24
+ };
25
+ const RESULT_SOURCE = "mtlr-gc-full-geom";
26
+ const RESULT_LAYER_FILL = "mtlr-gc-full-geom-fill";
27
+ const RESULT_LAYER_LINE = "mtlr-gc-full-geom-line";
28
+ export function createMapLibreGlMapController(map, maplibregl, marker = true, showResultMarkers = true, flyToOptions = {}, fitBoundsOptions = {}, fullGeometryStyle = defaultGeometryStyle, showPolyMarker = false) {
26
29
  let eventHandler;
27
30
  const markers = [];
28
31
  let selectedMarker;
29
32
  let reverseMarker;
30
33
  let savedData; // used to restore features on style switch
31
- function addFullGeometryLayer() {
32
- if (!map.getSource("full-geom") &&
33
- (fullGeometryStyle?.fill || fullGeometryStyle?.line)) {
34
- map.addSource("full-geom", {
34
+ function syncFullGeometryLayer() {
35
+ if (!map.loaded) {
36
+ map.once("load", syncFullGeometryLayer);
37
+ return;
38
+ }
39
+ const effFullGeometryStyle = !fullGeometryStyle
40
+ ? undefined
41
+ : fullGeometryStyle === true
42
+ ? defaultGeometryStyle
43
+ : fullGeometryStyle;
44
+ if (!effFullGeometryStyle?.fill && !effFullGeometryStyle?.line) {
45
+ return;
46
+ }
47
+ const source = map.getSource(RESULT_SOURCE);
48
+ if (source) {
49
+ source.setData(savedData ?? featureCollection([]));
50
+ }
51
+ else if (savedData) {
52
+ map.addSource(RESULT_SOURCE, {
35
53
  type: "geojson",
36
- data: emptyGeojson,
54
+ data: savedData,
37
55
  });
38
56
  }
39
- if (!map.getLayer("full-geom-fill") && fullGeometryStyle?.fill) {
57
+ else {
58
+ return;
59
+ }
60
+ if (!map.getLayer(RESULT_LAYER_FILL) && effFullGeometryStyle?.fill) {
40
61
  map.addLayer({
41
- ...fullGeometryStyle?.fill,
42
- id: "full-geom-fill",
62
+ ...effFullGeometryStyle?.fill,
63
+ id: RESULT_LAYER_FILL,
43
64
  type: "fill",
44
- source: "full-geom",
65
+ source: RESULT_SOURCE,
45
66
  });
46
67
  }
47
- if (!map.getLayer("full-geom-line") && fullGeometryStyle?.line) {
68
+ if (!map.getLayer(RESULT_LAYER_LINE) && effFullGeometryStyle?.line) {
48
69
  map.addLayer({
49
- ...fullGeometryStyle?.line,
50
- id: "full-geom-line",
70
+ ...effFullGeometryStyle?.line,
71
+ id: RESULT_LAYER_LINE,
51
72
  type: "line",
52
- source: "full-geom",
73
+ source: RESULT_SOURCE,
53
74
  });
54
75
  }
55
- if (savedData) {
56
- setData(savedData);
57
- }
58
- }
59
- if (map.loaded()) {
60
- addFullGeometryLayer();
61
76
  }
62
- else {
63
- map.once("load", () => {
64
- addFullGeometryLayer();
65
- });
77
+ function setAndSaveData(data) {
78
+ savedData = data;
79
+ syncFullGeometryLayer();
66
80
  }
67
81
  map.on("styledata", () => {
68
- addFullGeometryLayer();
82
+ // timeout prevents collision with svelte-maplibre library
83
+ setTimeout(() => {
84
+ if (savedData) {
85
+ syncFullGeometryLayer();
86
+ }
87
+ });
69
88
  });
70
89
  const handleMapClick = (e) => {
71
90
  eventHandler?.({
@@ -87,13 +106,6 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
87
106
  });
88
107
  return new maplibregl.Marker({ element, offset: [1, -13] });
89
108
  }
90
- function setData(data) {
91
- savedData = data;
92
- if (!data) {
93
- return;
94
- }
95
- map.getSource("full-geom")?.setData(data);
96
- }
97
109
  return {
98
110
  setEventHandler(handler) {
99
111
  if (handler) {
@@ -131,23 +143,25 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
131
143
  }
132
144
  }
133
145
  else if (coordinates) {
134
- reverseMarker = (typeof marker === "object"
135
- ? new maplibregl.Marker(marker)
136
- : createMarker())
137
- .setLngLat(coordinates)
138
- .addTo(map);
139
- reverseMarker.getElement().classList.add("marker-reverse");
146
+ if (marker instanceof Function) {
147
+ reverseMarker = marker(map) ?? undefined;
148
+ }
149
+ else {
150
+ reverseMarker = (typeof marker === "object"
151
+ ? new maplibregl.Marker(marker)
152
+ : createMarker())
153
+ .setLngLat(coordinates)
154
+ .addTo(map);
155
+ reverseMarker.getElement().classList.add("marker-reverse");
156
+ }
140
157
  }
141
158
  },
142
159
  setMarkers(markedFeatures, picked) {
143
- if (!marker) {
144
- return;
145
- }
146
160
  for (const marker of markers) {
147
161
  marker.remove();
148
162
  }
149
163
  markers.length = 0;
150
- setData(emptyGeojson);
164
+ setAndSaveData(undefined);
151
165
  if (!maplibregl) {
152
166
  return;
153
167
  }
@@ -163,14 +177,14 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
163
177
  setMask({
164
178
  ...picked,
165
179
  geometry: unioned.geometry,
166
- }, setData);
180
+ }, setAndSaveData);
167
181
  handled = true;
168
182
  }
169
183
  else {
170
184
  const geometries = picked.geometry.geometries.filter((geometry) => geometry.type === "LineString" ||
171
185
  geometry.type === "MultiLineString");
172
186
  if (geometries.length > 0) {
173
- setData({
187
+ setAndSaveData({
174
188
  ...picked,
175
189
  geometry: { type: "GeometryCollection", geometries },
176
190
  });
@@ -183,19 +197,26 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
183
197
  }
184
198
  else if (picked.geometry.type === "Polygon" ||
185
199
  picked.geometry.type === "MultiPolygon") {
186
- setMask(picked, setData);
200
+ setMask(picked, setAndSaveData);
187
201
  }
188
202
  else if (picked.geometry.type === "LineString" ||
189
203
  picked.geometry.type === "MultiLineString") {
190
- setData(picked);
204
+ setAndSaveData(picked);
191
205
  return; // no pin for (multi)linestrings
192
206
  }
193
- if (marker) {
194
- markers.push((typeof marker === "object"
207
+ if (!showPolyMarker && picked.geometry.type !== "Point") {
208
+ return;
209
+ }
210
+ if (marker instanceof Function) {
211
+ const m = marker(map, picked);
212
+ if (m) {
213
+ markers.push(m);
214
+ }
215
+ }
216
+ else if (marker) {
217
+ markers.push(typeof marker === "object"
195
218
  ? new maplibregl.Marker(marker)
196
- : createMarker())
197
- .setLngLat(picked.center)
198
- .addTo(map));
219
+ : createMarker().setLngLat(picked.center).addTo(map));
199
220
  }
200
221
  }
201
222
  if (showResultMarkers) {
@@ -203,19 +224,28 @@ export function createMapLibreGlMapController(map, maplibregl, marker = true, sh
203
224
  if (feature === picked) {
204
225
  continue;
205
226
  }
206
- const marker = (typeof showResultMarkers === "object"
207
- ? new maplibregl.Marker(showResultMarkers)
208
- : createMarker(true))
209
- .setLngLat(feature.center)
210
- .setPopup(new maplibregl.Popup({
211
- offset: [1, -27],
212
- closeButton: false,
213
- closeOnMove: true,
214
- className: "maptiler-gc-popup",
215
- }).setText(feature.place_type[0] === "reverse"
216
- ? feature.place_name
217
- : feature.place_name.replace(/,.*/, "")))
218
- .addTo(map);
227
+ let marker;
228
+ if (showResultMarkers instanceof Function) {
229
+ marker = showResultMarkers(map, feature);
230
+ if (!marker) {
231
+ continue;
232
+ }
233
+ }
234
+ else {
235
+ marker = (typeof showResultMarkers === "object"
236
+ ? new maplibregl.Marker(showResultMarkers)
237
+ : createMarker(true))
238
+ .setLngLat(feature.center)
239
+ .setPopup(new maplibregl.Popup({
240
+ offset: [1, -27],
241
+ closeButton: false,
242
+ closeOnMove: true,
243
+ className: "maptiler-gc-popup",
244
+ }).setText(feature.place_type[0] === "reverse"
245
+ ? feature.place_name
246
+ : feature.place_name.replace(/,.*/, "")))
247
+ .addTo(map);
248
+ }
219
249
  const element = marker.getElement();
220
250
  element.addEventListener("click", (e) => {
221
251
  e.stopPropagation();