@maptiler/geocoding-control 3.0.0-rc.8 → 3.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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +10 -10
- package/dist/index.umd.js.map +1 -1
- package/dist/{leaflet.public.js → leaflet.js} +2 -2
- package/dist/leaflet.js.map +1 -0
- package/dist/{leaflet.public.umd.js → leaflet.umd.js} +7 -7
- package/dist/leaflet.umd.js.map +1 -0
- package/dist/maplibregl.js +2 -2
- package/dist/maplibregl.js.map +1 -1
- package/dist/maplibregl.umd.js +6 -6
- package/dist/maplibregl.umd.js.map +1 -1
- package/dist/maptilersdk.js +38 -38
- package/dist/maptilersdk.js.map +1 -1
- package/dist/maptilersdk.umd.js +2 -2
- package/dist/maptilersdk.umd.js.map +1 -1
- package/dist/{openlayers.public.js → openlayers.js} +3 -3
- package/dist/openlayers.js.map +1 -0
- package/dist/{openlayers.public.umd.js → openlayers.umd.js} +7 -7
- package/dist/openlayers.umd.js.map +1 -0
- package/package.json +10 -9
- package/check-version.js +0 -69
- package/dist/check-version.d.ts +0 -1
- package/dist/leaflet.public.js.map +0 -1
- package/dist/leaflet.public.umd.js.map +0 -1
- package/dist/openlayers.public.js.map +0 -1
- package/dist/openlayers.public.umd.js.map +0 -1
- /package/dist/src/{maplibregl.d.ts → maplibregl.public.d.ts} +0 -0
- /package/dist/src/{maptilersdk.d.ts → maptilersdk.public.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maptiler/geocoding-control",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "The Javascript & TypeScript Map Control component for MapTiler Geocoding service. Easy to be integrated into any JavaScript mapping application.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": {
|
|
@@ -61,24 +61,24 @@
|
|
|
61
61
|
"require": "./dist/index.umd.js"
|
|
62
62
|
},
|
|
63
63
|
"./maplibregl": {
|
|
64
|
-
"types": "./dist/src/maplibregl.d.ts",
|
|
64
|
+
"types": "./dist/src/maplibregl.public.d.ts",
|
|
65
65
|
"import": "./dist/maplibregl.js",
|
|
66
66
|
"require": "./dist/maplibregl.umd.js"
|
|
67
67
|
},
|
|
68
68
|
"./maptilersdk": {
|
|
69
|
-
"types": "./dist/src/maptilersdk.d.ts",
|
|
69
|
+
"types": "./dist/src/maptilersdk.public.d.ts",
|
|
70
70
|
"import": "./dist/maptilersdk.js",
|
|
71
71
|
"require": "./dist/maptilersdk.umd.js"
|
|
72
72
|
},
|
|
73
73
|
"./leaflet": {
|
|
74
74
|
"types": "./dist/src/leaflet.public.d.ts",
|
|
75
|
-
"import": "./dist/leaflet.
|
|
76
|
-
"require": "./dist/leaflet.
|
|
75
|
+
"import": "./dist/leaflet.js",
|
|
76
|
+
"require": "./dist/leaflet.umd.js"
|
|
77
77
|
},
|
|
78
78
|
"./openlayers": {
|
|
79
79
|
"types": "./dist/src/openlayers.public.d.ts",
|
|
80
|
-
"import": "./dist/openlayers.
|
|
81
|
-
"require": "./dist/openlayers.
|
|
80
|
+
"import": "./dist/openlayers.js",
|
|
81
|
+
"require": "./dist/openlayers.umd.js"
|
|
82
82
|
}
|
|
83
83
|
},
|
|
84
84
|
"dependencies": {
|
|
@@ -94,10 +94,11 @@
|
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
96
|
"@canvas/image-data": "^1.1.0",
|
|
97
|
-
"@maptiler/sdk": "^
|
|
97
|
+
"@maptiler/sdk": "^4.0.0",
|
|
98
98
|
"@maptiler/sdk--v3.0": "npm:@maptiler/sdk@3.0",
|
|
99
99
|
"@maptiler/sdk--v3.11": "npm:@maptiler/sdk@3.11",
|
|
100
100
|
"@maptiler/sdk--v3.5": "npm:@maptiler/sdk@3.5",
|
|
101
|
+
"@maptiler/sdk--v4.0": "npm:@maptiler/sdk@4.0",
|
|
101
102
|
"@types/leaflet": "^1.9.21",
|
|
102
103
|
"@types/leaflet--v1.5": "npm:@types/leaflet@1.5",
|
|
103
104
|
"@types/leaflet--v1.7": "npm:@types/leaflet@1.7",
|
|
@@ -113,7 +114,7 @@
|
|
|
113
114
|
"happy-dom": "^20.0.10",
|
|
114
115
|
"husky": "^9.1.7",
|
|
115
116
|
"leaflet": "^1.9.4",
|
|
116
|
-
"maplibre-gl": "~5.
|
|
117
|
+
"maplibre-gl": "~5.21.1",
|
|
117
118
|
"maplibre-gl--v5.0": "npm:maplibre-gl@5.0",
|
|
118
119
|
"maplibre-gl--v5.10": "npm:maplibre-gl@5.10",
|
|
119
120
|
"maplibre-gl--v5.15": "npm:maplibre-gl@5.15",
|
package/check-version.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
|
-
import { rmSync, writeFileSync } from "node:fs";
|
|
3
|
-
|
|
4
|
-
const TSCONFIG = "./tsconfig.check-version.json";
|
|
5
|
-
|
|
6
|
-
const checks = [
|
|
7
|
-
{ entrypoint: "src/maptilersdk.ts" },
|
|
8
|
-
{
|
|
9
|
-
entrypoint: "src/maptilersdk.ts",
|
|
10
|
-
paths: {
|
|
11
|
-
"@maptiler/sdk": ["../node_modules/@maptiler/sdk--v3.0/dist/maptiler-sdk.d.ts"],
|
|
12
|
-
"maplibre-gl": ["../node_modules/@maptiler/sdk--v3.0/node_modules/maplibre-gl/dist/maplibre-gl.d.ts", "../node_modules/maplibre-gl/dist/maplibre-gl.d.ts"],
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
entrypoint: "src/maptilersdk.ts",
|
|
17
|
-
paths: {
|
|
18
|
-
"@maptiler/sdk": ["../node_modules/@maptiler/sdk--v3.5/dist/maptiler-sdk.d.ts"],
|
|
19
|
-
"maplibre-gl": ["../node_modules/@maptiler/sdk--v3.5/node_modules/maplibre-gl/dist/maplibre-gl.d.ts", "../node_modules/maplibre-gl/dist/maplibre-gl.d.ts"],
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
entrypoint: "src/maptilersdk.ts",
|
|
24
|
-
paths: {
|
|
25
|
-
"@maptiler/sdk": ["../node_modules/@maptiler/sdk--v3.11/dist/maptiler-sdk.d.ts"],
|
|
26
|
-
"maplibre-gl": ["../node_modules/@maptiler/sdk--v3.11/node_modules/maplibre-gl/dist/maplibre-gl.d.ts", "../node_modules/maplibre-gl/dist/maplibre-gl.d.ts"],
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
{ entrypoint: "src/maplibregl.ts" },
|
|
30
|
-
{ entrypoint: "src/maplibregl.ts", paths: { "maplibre-gl": ["../node_modules/maplibre-gl--v5.0/dist/maplibre-gl.d.ts"] } },
|
|
31
|
-
{ entrypoint: "src/maplibregl.ts", paths: { "maplibre-gl": ["../node_modules/maplibre-gl--v5.5/dist/maplibre-gl.d.ts"] } },
|
|
32
|
-
{ entrypoint: "src/maplibregl.ts", paths: { "maplibre-gl": ["../node_modules/maplibre-gl--v5.10/dist/maplibre-gl.d.ts"] } },
|
|
33
|
-
{ entrypoint: "src/maplibregl.ts", paths: { "maplibre-gl": ["../node_modules/maplibre-gl--v5.15/dist/maplibre-gl.d.ts"] } },
|
|
34
|
-
{ entrypoint: "src/maplibregl.ts", paths: { "maplibre-gl": ["../node_modules/maplibre-gl--v5.20/dist/maplibre-gl.d.ts"] } },
|
|
35
|
-
{ entrypoint: "src/leaflet.public.ts" },
|
|
36
|
-
{ entrypoint: "src/leaflet.public.ts", paths: { leaflet: ["../node_modules/@types/leaflet--v1.5/index.d.ts"] } },
|
|
37
|
-
{ entrypoint: "src/leaflet.public.ts", paths: { leaflet: ["../node_modules/@types/leaflet--v1.7/index.d.ts"] } },
|
|
38
|
-
{ entrypoint: "src/leaflet.public.ts", paths: { leaflet: ["../node_modules/@types/leaflet--v1.9/index.d.ts"] } },
|
|
39
|
-
{ entrypoint: "src/leaflet.public.ts", paths: { leaflet: ["../tmp/@types/leaflet-v2/index.d.ts"] } },
|
|
40
|
-
{ entrypoint: "src/openlayers.public.ts" },
|
|
41
|
-
{ entrypoint: "src/openlayers.public.ts", paths: { ol: ["../node_modules/ol--v9.0/index.d.ts"], "ol/*": ["../node_modules/ol--v9.0/*.d.ts"] } },
|
|
42
|
-
{ entrypoint: "src/openlayers.public.ts", paths: { ol: ["../node_modules/ol--v9.2/index.d.ts"], "ol/*": ["../node_modules/ol--v9.2/*.d.ts"] } },
|
|
43
|
-
{ entrypoint: "src/openlayers.public.ts", paths: { ol: ["../node_modules/ol--v10.0/index.d.ts"], "ol/*": ["../node_modules/ol--v10.0/*.d.ts"] } },
|
|
44
|
-
{ entrypoint: "src/openlayers.public.ts", paths: { ol: ["../node_modules/ol--v10.3/index.d.ts"], "ol/*": ["../node_modules/ol--v10.3/*.d.ts"] } },
|
|
45
|
-
{ entrypoint: "src/openlayers.public.ts", paths: { ol: ["../node_modules/ol--v10.6/index.d.ts"], "ol/*": ["../node_modules/ol--v10.6/*.d.ts"] } },
|
|
46
|
-
];
|
|
47
|
-
|
|
48
|
-
for (const { entrypoint, paths = {} } of checks) {
|
|
49
|
-
writeFileSync(
|
|
50
|
-
TSCONFIG,
|
|
51
|
-
JSON.stringify(
|
|
52
|
-
{
|
|
53
|
-
extends: "./tsconfig.json",
|
|
54
|
-
compilerOptions: {
|
|
55
|
-
types: [],
|
|
56
|
-
paths,
|
|
57
|
-
},
|
|
58
|
-
include: [entrypoint, "src/*.d.ts"],
|
|
59
|
-
},
|
|
60
|
-
null,
|
|
61
|
-
2,
|
|
62
|
-
),
|
|
63
|
-
{ encoding: "utf-8" },
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
execSync(`npx tsc -p ${TSCONFIG}`, { encoding: "utf-8" });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
rmSync(TSCONFIG);
|
package/dist/check-version.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"leaflet.public.js","sources":["../src/components/clear-icon.ts","../src/components/fail-icon.ts","../src/components/loading-icon.ts","../src/components/reverse-geocoding-icon.ts","../src/components/search-icon.ts","../src/utils/geo-utils.ts","../src/utils/proximity.ts","../src/geocoder/geocoder-feature-item.ts","../src/geocoder/geocoder.ts","../src/components/marker.ts","../src/utils/mask.ts","../src/controls/leaflet-options.ts","../src/controls/leaflet-control.ts"],"sourcesContent":["import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-clear-icon\")\nexport class MaptilerGeocodeClearIconElement extends LitElement {\n /** @internal */\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 14 14\" width=\"13\" height=\"13\">\n <path\n d=\"M13.12.706a.982.982 0 0 0-1.391 0L6.907 5.517 2.087.696a.982.982 0 1 0-1.391 1.39l4.821 4.821L.696 11.73a.982.982 0 1 0 1.39 1.39l4.821-4.821 4.822 4.821a.982.982 0 1 0 1.39-1.39L8.298 6.908l4.821-4.822a.988.988 0 0 0 0-1.38Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-clear-icon\": MaptilerGeocodeClearIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-fail-icon\")\nexport class MaptilerGeocodeFailIconElement extends LitElement {\n /** @internal */\n static styles = css`\n svg {\n display: block;\n fill: #e15042;\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 0C6.705 0 0 6.705 0 15C0 23.295 6.705 30 15 30C23.295 30 30 23.295 30 15C30 6.705 23.295 0 15 0ZM22.5 20.385L20.385 22.5L15 17.115L9.615 22.5L7.5 20.385L12.885 15L7.5 9.615L9.615 7.5L15 12.885L20.385 7.5L22.5 9.615L17.115 15L22.5 20.385Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-fail-icon\": MaptilerGeocodeFailIconElement;\n }\n}\n","import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-loading-icon\")\nexport class MaptilerGeocodeLoadingIconElement extends LitElement {\n /** @internal */\n static styles = css`\n div {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n\n display: flex;\n align-items: center;\n }\n\n .loading-icon {\n animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95);\n }\n\n @keyframes rotate {\n from {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n `;\n\n render() {\n return html`\n <div>\n <svg viewBox=\"0 0 18 18\" width=\"24\" height=\"24\" class=\"loading-icon\">\n <path fill=\"#333\" d=\"M4.4 4.4l.8.8c2.1-2.1 5.5-2.1 7.6 0l.8-.8c-2.5-2.5-6.7-2.5-9.2 0z\" />\n <path opacity=\".1\" d=\"M12.8 12.9c-2.1 2.1-5.5 2.1-7.6 0-2.1-2.1-2.1-5.5 0-7.7l-.8-.8c-2.5 2.5-2.5 6.7 0 9.2s6.6 2.5 9.2 0 2.5-6.6 0-9.2l-.8.8c2.2 2.1 2.2 5.6 0 7.7z\" />\n </svg>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-loading-icon\": MaptilerGeocodeLoadingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-reverse-geocoding-icon\")\nexport class MaptilerGeocodeReverseGeocodingIconElement extends LitElement {\n /** @internal */\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 60.006 21.412\" width=\"14\" height=\"20\">\n <path\n d=\"M30.003-26.765C13.46-26.765 0-14.158 0 1.337c0 23.286 24.535 42.952 28.39 46.04.24.192.402.316.471.376.323.282.732.424 1.142.424.41 0 .82-.142 1.142-.424.068-.06.231-.183.471-.376 3.856-3.09 28.39-22.754 28.39-46.04 0-15.495-13.46-28.102-30.003-28.102Zm1.757 12.469c4.38 0 7.858 1.052 10.431 3.158 2.595 2.105 3.89 4.913 3.89 8.422 0 2.34-.53 4.362-1.593 6.063-1.063 1.702-3.086 3.616-6.063 5.742-2.042 1.51-3.337 2.659-3.89 3.446-.532.787-.8 1.82-.8 3.096v1.914h-8.449V15.18c0-2.041.434-3.815 1.306-5.325.872-1.51 2.467-3.118 4.785-4.82 2.233-1.594 3.7-2.89 4.402-3.889a5.582 5.582 0 0 0 1.087-3.35c0-1.382-.51-2.435-1.531-3.158-1.02-.723-2.45-1.087-4.28-1.087-3.19 0-6.826 1.047-10.91 3.131l-3.472-6.986c4.742-2.659 9.77-3.992 15.087-3.992Zm-1.88 37.324c1.765 0 3.124.472 4.08 1.408.98.936 1.47 2.276 1.47 4.02 0 1.68-.49 3.007-1.47 3.985-.977.957-2.336 1.435-4.08 1.435-1.787 0-3.171-.465-4.15-1.4-.978-.958-1.47-2.298-1.47-4.02 0-1.787.48-3.14 1.436-4.054.957-.915 2.355-1.374 4.184-1.374Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-reverse-geocoding-icon\": MaptilerGeocodeReverseGeocodingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-search-icon\")\nexport class MaptilerGeocodeSearchIconElement extends LitElement {\n /** @internal */\n static styles = css`\n circle {\n stroke-width: 1.875;\n fill: none;\n }\n\n path {\n stroke-width: 1.875;\n stroke-linecap: round;\n }\n\n svg {\n display: block;\n stroke: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 13 13\"\n >\n <circle cx=\"4.789\" cy=\"4.787\" r=\"3.85\" />\n <path d=\"M12.063 12.063 7.635 7.635\" />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-search-icon\": MaptilerGeocodeSearchIconElement;\n }\n}\n","import clone from \"@turf/clone\";\nimport type { FeatureCollection, MultiPolygon, Polygon, Position } from \"geojson\";\n\nimport type { BBox } from \"../types\";\n\n// taken from Leaflet\nexport function wrapNum(x: number, range: [number, number], includeMax: boolean) {\n const max = range[1],\n min = range[0],\n d = max - min;\n\n return x === max && includeMax ? x : ((((x - min) % d) + d) % d) + min;\n}\n\nexport function unwrapBbox(bbox0: BBox): BBox {\n const bbox = [...bbox0] satisfies BBox;\n\n if (bbox[2] < bbox[0]) {\n if (Math.abs((bbox[0] + bbox[2] + 360) / 2) > Math.abs((bbox[0] - 360 + bbox[2]) / 2)) {\n bbox[0] -= 360;\n } else {\n bbox[2] += 360;\n }\n }\n\n return bbox;\n}\n\nexport function shiftPolyCollection(featureCollection: FeatureCollection<Polygon | MultiPolygon>, distance: number): FeatureCollection<Polygon | MultiPolygon> {\n const cloned = clone(featureCollection);\n\n for (const feature of cloned.features) {\n if (feature.geometry.type == \"MultiPolygon\") {\n for (const poly of feature.geometry.coordinates) {\n shiftPolyCoords(poly, distance);\n }\n } else {\n shiftPolyCoords(feature.geometry.coordinates, distance);\n }\n }\n\n return cloned;\n}\n\nexport function shiftPolyCoords(coordinates: Position[][], distance: number) {\n for (const ring of coordinates) {\n for (const position of ring) {\n position[0] += distance;\n }\n }\n}\n","import type { ProximityRule } from \"../types\";\n\nlet cachedLocation: { time: number; coords: undefined | string } | undefined;\n\nexport async function getProximity(centerAndZoom: [zoom: number, lon: number, lat: number] | undefined, proximity: ProximityRule[] | null | undefined, ac: AbortController) {\n for (const rule of proximity ?? []) {\n if (centerAndZoom && ((rule.minZoom != undefined && rule.minZoom > centerAndZoom[0]) || (rule.maxZoom != undefined && rule.maxZoom < centerAndZoom[0]))) {\n continue;\n }\n\n if (rule.type === \"fixed\") {\n return rule.coordinates.join(\",\");\n }\n\n if (rule.type === \"client-geolocation\") {\n if (cachedLocation && rule.cachedLocationExpiry && cachedLocation.time + rule.cachedLocationExpiry > Date.now()) {\n if (cachedLocation.coords) {\n return cachedLocation.coords;\n }\n } else {\n let coords: string | undefined;\n\n try {\n coords = await new Promise<string>((resolve, reject) => {\n ac.signal.addEventListener(\"abort\", () => {\n reject(Error(\"aborted\"));\n });\n\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n resolve([pos.coords.longitude, pos.coords.latitude].map((c) => c.toFixed(6)).join(\",\"));\n },\n (err) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(err);\n },\n rule,\n );\n });\n\n return coords;\n } catch {\n // ignore\n } finally {\n if (rule.cachedLocationExpiry) {\n cachedLocation = {\n time: Date.now(),\n coords,\n };\n }\n }\n\n if (ac.signal.aborted) {\n return;\n }\n }\n }\n\n if (rule.type === \"server-geolocation\") {\n return \"ip\";\n }\n\n if (centerAndZoom && rule.type === \"map-center\") {\n return centerAndZoom[1].toFixed(6) + \",\" + centerAndZoom[2].toFixed(6);\n }\n }\n}\n","/* eslint-disable\n@typescript-eslint/no-unnecessary-condition,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-call,\n @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/restrict-template-expressions,\n @typescript-eslint/unbound-method,\n*/\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nimport type { Feature, ShowPlaceType } from \"../types\";\nimport styles from \"./geocoder-feature-item.css?inline\";\n\ntype SpriteIcon = { width: number; height: number; x: number; y: number };\n\nconst hidpi = typeof devicePixelRatio === \"undefined\" || devicePixelRatio > 1.25;\n\nconst scaleUrl = hidpi ? \"@2x\" : \"\";\n\nconst scaleFactor = hidpi ? 2 : 1;\n\nlet sprites: undefined | null | { width: number; height: number; icons: Record<string, SpriteIcon> };\n\nlet spritePromise: Promise<void> | undefined;\n\n@customElement(\"maptiler-geocoder-feature-item\")\nexport class MaptilerGeocoderFeatureItemElement extends LitElement {\n /** @internal */\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ type: Object }) feature?: Feature;\n @property({ type: String }) itemStyle: \"selected\" | \"picked\" | \"default\" = \"default\";\n @property({ type: String }) showPlaceType: ShowPlaceType = \"if-needed\";\n @property({ attribute: false }) missingIconsCache: Set<string> = new Set<string>();\n @property({ type: String }) iconsBaseUrl: string = \"\";\n\n get #categories() {\n return this.feature?.properties?.categories;\n }\n get #isReverse() {\n return this.feature?.place_type[0] === \"reverse\";\n }\n get #placeType() {\n return this.feature?.properties?.categories?.join(\", \") ?? this.feature?.place_type_name?.[0] ?? this.feature?.place_type[0];\n }\n\n @state() private category: string | undefined;\n @state() private imageUrl: string | undefined;\n @state() private spriteIcon: SpriteIcon | undefined;\n @state() private index: number = 0;\n\n #loadSprites() {\n spritePromise ??= fetch(`${this.iconsBaseUrl}sprite${scaleUrl}.json`)\n .then((response) => response.json())\n .then((data) => {\n sprites = data;\n })\n .catch(() => {\n sprites = null;\n });\n }\n\n #handleImgError() {\n if (this.imageUrl) {\n this.missingIconsCache.add(this.imageUrl);\n }\n\n this.#loadIcon();\n }\n\n #loadIcon() {\n if (sprites !== undefined) {\n this.#loadIcon2();\n } else {\n this.#loadSprites();\n\n void spritePromise?.then(() => {\n this.#loadIcon2();\n });\n }\n }\n\n #loadIcon2() {\n do {\n this.index--;\n\n this.category = this.#categories?.[this.index];\n\n this.spriteIcon = this.category ? sprites?.icons[this.category] : undefined;\n\n if (this.spriteIcon) {\n break;\n }\n\n this.imageUrl = this.category ? this.iconsBaseUrl + this.category.replace(/ /g, \"_\") + \".svg\" : undefined;\n } while (this.index > -1 && (!this.imageUrl || this.missingIconsCache.has(this.imageUrl)));\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"feature\") && this.#categories) {\n this.index = this.#categories.length;\n this.#loadIcon();\n }\n }\n\n render() {\n return html`\n <li\n tabindex=\"-1\"\n role=\"option\"\n aria-selected=${this.itemStyle === \"selected\"}\n aria-checked=${this.itemStyle === \"picked\"}\n class=${this.itemStyle}\n @click=${() => this.dispatchEvent(new CustomEvent(\"select\"))}\n >\n ${sprites && this.spriteIcon\n ? html`\n <div\n class=\"sprite-icon\"\n style=${styleMap({\n width: `${this.spriteIcon.width / scaleFactor}px`,\n height: `${this.spriteIcon.height / scaleFactor}px`,\n backgroundImage: `url(${this.iconsBaseUrl}sprite${scaleUrl}.png)`,\n backgroundPosition: `-${this.spriteIcon.x / scaleFactor}px -${this.spriteIcon.y / scaleFactor}px`,\n backgroundSize: `${sprites.width / scaleFactor}px ${sprites.height / scaleFactor}px`,\n })}\n title=${this.#placeType}\n />\n `\n : this.imageUrl\n ? html` <img src=${this.imageUrl} alt=${this.category} title=${this.#placeType} @error=${this.#handleImgError} />`\n : this.feature?.address\n ? html` <img src=${this.iconsBaseUrl + \"housenumber.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"road.\")\n ? html` <img src=${this.iconsBaseUrl + \"road.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"address.\")\n ? html` <img src=${this.iconsBaseUrl + \"street.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"postal_code.\")\n ? html` <img src=${this.iconsBaseUrl + \"postal_code.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"poi.\")\n ? html` <img src=${this.iconsBaseUrl + \"poi.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.#isReverse\n ? html` <img src=${this.iconsBaseUrl + \"reverse.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : html` <img src=${this.iconsBaseUrl + \"area.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `}\n\n <span class=\"texts\">\n <span>\n <span class=\"primary\"> ${this.#isReverse ? this.feature?.place_name : this.feature?.place_name.replace(/,.*/, \"\")} </span>\n\n ${this.showPlaceType === \"always\" ||\n (this.showPlaceType !== \"never\" &&\n !this.feature?.address &&\n !this.feature?.id.startsWith(\"road.\") &&\n !this.feature?.id.startsWith(\"address.\") &&\n !this.feature?.id.startsWith(\"postal_code.\") &&\n (!this.feature?.id.startsWith(\"poi.\") || !this.imageUrl) &&\n !this.#isReverse)\n ? html` <span class=\"secondary\"> ${this.#placeType} </span> `\n : nothing}\n </span>\n\n <span class=\"line2\"> ${this.#isReverse ? this.feature?.text : this.feature?.place_name.replace(/[^,]*,?s*/, \"\")} </span>\n </span>\n </li>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder-feature-item\": MaptilerGeocoderFeatureItemElement;\n }\n}\n","import { convert } from \"geo-coordinates-parser\";\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\n\nimport type { BBox, EnableReverse, Feature, FeatureCollection, ProximityRule, ShowPlaceType, TypeRule, Worldview } from \"../types\";\nimport { wrapNum } from \"../utils/geo-utils\";\nimport { getProximity } from \"../utils/proximity\";\n\nimport \"../components/clear-icon\";\nimport \"../components/fail-icon\";\nimport \"../components/loading-icon\";\nimport \"../components/reverse-geocoding-icon\";\nimport \"../components/search-icon\";\nimport \"./geocoder-feature-item\";\n\nimport type { MaptilerGeocoderEventName, MaptilerGeocoderEventNameMap } from \"./geocoder-events\";\nimport type { MaptilerGeocoderOptions } from \"./geocoder-options\";\nimport styles from \"./geocoder.css?inline\";\n\n@customElement(\"maptiler-geocoder\")\nexport class MaptilerGeocoderElement extends LitElement implements MaptilerGeocoderOptions {\n /** @internal */\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ attribute: false }) adjustUrl?: (url: URL) => void;\n @property({ type: String }) apiKey?: string;\n @property({ type: String }) apiUrl?: string;\n @property({ type: Array }) bbox?: BBox;\n @property({ type: String }) clearButtonTitle?: string;\n @property({ type: Boolean }) clearListOnPick: boolean = false;\n @property({ type: Boolean }) clearOnBlur: boolean = false;\n @property({ type: Boolean }) collapsed: boolean = false;\n @property({ attribute: false }) country?: string | string[];\n @property({ type: Number }) debounceSearch?: number;\n @property({ type: String }) enableReverse?: EnableReverse;\n @property({ type: String }) errorMessage?: string;\n @property({ type: Boolean }) excludeTypes: boolean = false;\n @property({ type: Boolean }) exhaustiveReverseGeocoding: boolean = false;\n @property({ type: Boolean }) fetchFullGeometryOnPick: boolean = false;\n @property({ type: Object }) fetchParameters?: RequestInit;\n @property({ attribute: false }) filter?: (feature: Feature) => boolean;\n @property({ type: Object }) fuzzyMatch?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) iconsBaseUrl?: string;\n @property({ type: Boolean }) keepListOpen: boolean = false;\n @property({ attribute: false }) language?: string | string[] | null;\n @property({ type: Number }) limit?: number;\n @property({ type: Number }) minLength?: number;\n @property({ type: String }) noResultsMessage?: string;\n @property({ type: Boolean }) openListOnTop: boolean = false;\n @property({ type: String }) placeholder?: string;\n @property({ type: Array }) proximity?: ProximityRule[] | null;\n @property({ type: Boolean }) reverseActive: boolean = false;\n @property({ type: String }) reverseButtonTitle?: string;\n @property({ type: Object }) reverseGeocodingExcludeTypes?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Number }) reverseGeocodingLimit?: number;\n @property({ type: Array }) reverseGeocodingTypes?: TypeRule[];\n @property({ type: Object }) selectFirst?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) showPlaceType?: ShowPlaceType;\n @property({ type: Object }) showResultsWhileTyping?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Array }) types?: TypeRule[];\n @property({ type: String }) worldview?: Worldview;\n\n /** Reference to the input element the user can type a query into */\n @query(\"input\") private input!: HTMLInputElement;\n\n /** Value to search via geocoding */\n @state() private searchValue: string = \"\";\n /** Features found via geocoding */\n @state() private listFeatures?: Feature[];\n /** Index of item currently selected from the list of found features */\n @state() private selectedItemIndex: number = -1;\n /** Feature that has been picked by the user */\n @state() private picked?: Feature;\n /** Cached found features to be used to restore the features when loading more data for picked feature */\n @state() private cachedFeatures: Feature[] = [];\n /** Effectively a cache key for cached features */\n @state() private lastSearchUrl: string = \"\";\n /** Last error that happened in geocoding, to be shown to user */\n @state() private error: unknown;\n /** AbortController instance used to potentially cancel the current geocoding request*/\n @state() private abortController?: AbortController;\n /** Focus state of input element */\n @state() private focused: boolean = false;\n /** Visibility state of feature list */\n @state() private isFeatureListVisible = false;\n /** Feature list is currently interacted with using pointer device so it should not be closed even though input lost focus */\n @state() private isFeatureListInteractedWith = false;\n\n /** Helps to trigger logic only after this instance gets fully initialized */\n #isInitialized = false;\n /** Timeout ref for debouncing logic */\n #searchTimeoutRef?: number;\n /** Cache for URLs of icons that couldn't be loaded for any reason, as to not try them again unnecessarily */\n #missingIconsCache = new Set<string>();\n /** Center and zoom of a map potentially connected to this instance */\n #centerAndZoom: [zoom: number, lon: number, lat: number] | undefined;\n\n get #selected(): Feature | undefined {\n return this.listFeatures?.[this.selectedItemIndex];\n }\n get #isLoading(): boolean {\n return this.abortController !== undefined;\n }\n get #isSearchValueTooShort(): boolean {\n return this.searchValue.length < (this.minLength ?? 2);\n }\n\n protected firstUpdated() {\n this.#isInitialized = true;\n }\n\n /**\n * Set the options of this instance.\n *\n * @param options options to set\n */\n setOptions(options: Partial<MaptilerGeocoderOptions>) {\n const elementOptions = { ...options };\n for (const prop of Object.keys(elementOptions) as Array<keyof MaptilerGeocoderOptions>) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n if (!propertyNames.includes(prop)) delete elementOptions[prop];\n }\n Object.assign(this, elementOptions);\n }\n\n /**\n * Set the content of search input box.\n *\n * @param value text to set\n */\n setQuery(value: string) {\n this.#changeSearchValue(value, { external: true });\n this.#focusInputAndSelectText();\n }\n\n /**\n * Set the content of search input box and immediately submit it.\n *\n * @param value text to set and submit\n */\n submitQuery(value: string) {\n this.#submitSearchValue(value, { external: true });\n }\n\n /**\n * Clear search result list.\n */\n clearList() {\n this.#clearFeatures();\n this.picked = undefined;\n this.selectedItemIndex = -1;\n }\n\n /**\n * Focus the search input box.\n *\n * @param options [FocusOptions](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#options)\n */\n override focus(options?: FocusOptions) {\n this.input.focus(options);\n }\n\n /**\n * Blur the search input box.\n */\n override blur() {\n this.input.blur();\n }\n\n override addEventListener<E extends MaptilerGeocoderEventName>(\n type: E,\n listener: (this: HTMLElement, e: MaptilerGeocoderEventNameMap[E]) => unknown,\n options?: boolean | AddEventListenerOptions,\n ): void;\n override addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void {\n super.addEventListener(type, listener, options);\n }\n\n override removeEventListener<E extends MaptilerGeocoderEventName>(\n type: E,\n listener: (this: HTMLElement, e: MaptilerGeocoderEventNameMap[E]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n override removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void {\n super.removeEventListener(type, listener, options);\n }\n\n /** @internal */\n handleMapChange(centerAndZoom: [zoom: number, lon: number, lat: number] | undefined): void {\n this.#centerAndZoom = centerAndZoom;\n }\n\n /** @internal */\n handleMapClick(coordinates: [lng: number, lat: number]) {\n if (this.reverseActive) {\n this.#handleReverse(coordinates);\n }\n }\n\n #dispatch<T extends keyof MaptilerGeocoderEventNameMap>(\n type: T,\n ...[detail]: undefined extends MaptilerGeocoderEventNameMap[T][\"detail\"] ? [] : [detail: MaptilerGeocoderEventNameMap[T][\"detail\"]]\n ): void {\n if (!this.#isInitialized) return;\n\n this.dispatchEvent(\n new CustomEvent(type, {\n bubbles: true,\n composed: true,\n detail,\n }),\n );\n }\n\n #handleSubmit(event?: Event, { external = false }: { external?: boolean } = {}) {\n event?.preventDefault();\n\n this.focused = false;\n\n clearTimeout(this.#searchTimeoutRef);\n\n if (this.selectedItemIndex > -1 && this.listFeatures) {\n this.picked = this.listFeatures[this.selectedItemIndex];\n\n this.searchValue = this.picked.place_type[0] === \"reverse\" ? this.picked.place_name : this.picked.place_name.replace(/,.*/, \"\");\n\n this.error = undefined;\n\n this.selectedItemIndex = -1;\n } else if (this.searchValue) {\n this.#search(this.searchValue, { exact: true, external })\n .then(() => {\n this.picked = undefined;\n })\n .catch((err: unknown) => (this.error = err));\n }\n }\n\n #isQueryReverse(searchValue: string) {\n try {\n return convert(searchValue, 6);\n } catch {\n return false;\n }\n }\n\n #focusInputAndSelectText() {\n setTimeout(() => {\n this.input.focus();\n this.focused = true;\n this.input.select();\n });\n }\n\n #changeSearchValue(searchValue: string, { external = false }: { external?: boolean } = {}) {\n this.searchValue = searchValue;\n this.#dispatch(\"querychange\", { query: this.searchValue, reverseCoords: this.#isQueryReverse(searchValue) });\n\n this.error = undefined;\n this.picked = undefined;\n\n if (this.showResultsWhileTyping !== false) {\n clearTimeout(this.#searchTimeoutRef);\n\n if (this.#isSearchValueTooShort) {\n return;\n }\n\n const sv = this.searchValue;\n\n this.#searchTimeoutRef = window.setTimeout(() => {\n this.#search(sv, { external }).catch((err: unknown) => (this.error = err));\n }, this.debounceSearch ?? 200);\n } else {\n this.#clearFeatures();\n }\n }\n\n #clearFeatures() {\n if (this.listFeatures !== undefined) {\n this.listFeatures = undefined;\n this.#dispatch(\"featuresclear\");\n }\n }\n\n #submitSearchValue(searchValue: string, { external = false }: { external?: boolean } = {}) {\n this.searchValue = searchValue;\n this.#dispatch(\"querychange\", { query: this.searchValue, reverseCoords: this.#isQueryReverse(searchValue) });\n\n this.selectedItemIndex = -1;\n this.#handleSubmit(undefined, { external });\n }\n\n async #search(searchValue: string, { byId = false, exact = false, external = false }: undefined | { byId?: boolean; exact?: boolean; external?: boolean } = {}) {\n this.error = undefined;\n\n this.abortController?.abort();\n const ac = new AbortController();\n this.abortController = ac;\n\n try {\n const apiUrl = this.apiUrl ?? import.meta.env.VITE_API_URL;\n const isReverse = this.#isQueryReverse(searchValue);\n\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n const urlObj = new URL(apiUrl + \"/\" + encodeURIComponent(isReverse ? `${isReverse.decimalLongitude},${isReverse.decimalLatitude}` : searchValue) + \".json\");\n\n const sp = urlObj.searchParams;\n\n if (this.language !== undefined) {\n sp.set(\"language\", Array.isArray(this.language) ? this.language.join(\",\") : (this.language ?? \"\"));\n }\n\n const [zoom] = this.#centerAndZoom ?? [undefined];\n\n let effTypes = (!isReverse || this.reverseGeocodingTypes === undefined ? this.types : this.reverseGeocodingTypes)\n ?.map((typeRule) =>\n typeof typeRule === \"string\" ? typeRule : zoom === undefined || ((typeRule[0] ?? 0) <= zoom && zoom < (typeRule[1] ?? Infinity)) ? typeRule[2] : undefined,\n )\n .filter((type) => type !== undefined);\n\n if (effTypes) {\n effTypes = [...new Set(effTypes)];\n\n sp.set(\"types\", effTypes.join(\",\"));\n }\n\n const effExcludeTypes = !isReverse || this.reverseGeocodingExcludeTypes === undefined ? this.excludeTypes : this.reverseGeocodingExcludeTypes;\n\n if (effExcludeTypes) {\n sp.set(\"excludeTypes\", String(effExcludeTypes));\n }\n\n if (this.bbox) {\n sp.set(\"bbox\", this.bbox.map((c) => c.toFixed(6)).join(\",\"));\n }\n\n if (this.country) {\n sp.set(\"country\", Array.isArray(this.country) ? this.country.join(\",\") : this.country);\n }\n\n if (this.worldview) {\n sp.set(\"worldview\", this.worldview);\n }\n\n if (!byId && !isReverse) {\n const proximity = this.proximity ?? [{ type: \"server-geolocation\" }];\n const coords = await getProximity(this.#centerAndZoom, proximity, ac);\n\n if (coords) {\n sp.set(\"proximity\", coords);\n }\n\n if (exact || this.showResultsWhileTyping === false) {\n sp.set(\"autocomplete\", \"false\");\n }\n\n sp.set(\"fuzzyMatch\", String(this.fuzzyMatch !== false));\n }\n\n const limit = this.limit ?? 5;\n const effReverseGeocodingLimit = this.reverseGeocodingLimit ?? limit;\n\n if (effReverseGeocodingLimit > 1 && effTypes?.length !== 1) {\n console.warn(\"[MapTilerGeocodingControl] Warning: For reverse geocoding when limit > 1 then types must contain single value.\");\n }\n\n if (isReverse) {\n if (effReverseGeocodingLimit === 1 || this.exhaustiveReverseGeocoding || effTypes?.length === 1) {\n sp.set(\"limit\", String(effReverseGeocodingLimit));\n }\n } else {\n sp.set(\"limit\", String(limit));\n }\n\n if (this.apiKey) {\n sp.set(\"key\", this.apiKey);\n }\n\n this.adjustUrl?.(urlObj);\n\n const noTypes = urlObj.searchParams.get(\"types\") === \"\" && urlObj.searchParams.get(\"excludeTypes\") !== \"true\";\n\n const url = urlObj.toString();\n\n if (url === this.lastSearchUrl) {\n if (byId) {\n if (this.clearListOnPick) {\n this.#clearFeatures();\n }\n\n this.picked = this.cachedFeatures[0];\n } else {\n this.listFeatures = this.cachedFeatures;\n this.#dispatch(\"featureslisted\", { features: this.listFeatures, external });\n\n if (this.listFeatures[this.selectedItemIndex]?.id !== this.#selected?.id) {\n this.selectedItemIndex = -1;\n }\n }\n\n return;\n }\n\n this.#dispatch(\"request\", { urlObj });\n\n this.lastSearchUrl = url;\n\n let featureCollection: FeatureCollection;\n\n if (noTypes) {\n featureCollection = { type: \"FeatureCollection\", features: [] };\n } else {\n const res = await fetch(url, {\n signal: ac.signal,\n ...this.fetchParameters,\n });\n\n if (!res.ok) {\n throw new Error(await res.text());\n }\n\n featureCollection = (await res.json()) as FeatureCollection;\n }\n\n this.#dispatch(\"response\", { url, featureCollection });\n\n if (byId) {\n if (this.clearListOnPick) {\n this.#clearFeatures();\n }\n\n this.picked = featureCollection.features[0];\n\n this.cachedFeatures = [this.picked];\n } else {\n this.listFeatures = featureCollection.features.filter(this.filter ?? (() => true));\n\n if (isReverse) {\n this.listFeatures.unshift({\n type: \"Feature\",\n properties: {},\n /* eslint-disable @typescript-eslint/restrict-template-expressions */\n id: `reverse_${isReverse.decimalLongitude}_${isReverse.decimalLatitude}`,\n place_name: `${isReverse.decimalLatitude}, ${isReverse.decimalLongitude}`,\n text: isReverse.toCoordinateFormat(\"DMS\"),\n /* eslint-enable @typescript-eslint/restrict-template-expressions */\n place_type: [\"reverse\"],\n place_type_name: [\"reverse\"],\n center: [isReverse.decimalLongitude, isReverse.decimalLatitude],\n bbox: [isReverse.decimalLongitude, isReverse.decimalLatitude, isReverse.decimalLongitude, isReverse.decimalLatitude],\n geometry: {\n type: \"Point\",\n coordinates: [isReverse.decimalLongitude, isReverse.decimalLatitude],\n },\n });\n }\n\n this.#dispatch(\"featureslisted\", { features: this.listFeatures, external });\n\n this.cachedFeatures = this.listFeatures;\n\n if (this.listFeatures[this.selectedItemIndex]?.id !== this.#selected?.id) {\n this.selectedItemIndex = -1;\n }\n\n if (isReverse) {\n this.input.focus();\n }\n }\n } catch (e: unknown) {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") {\n return;\n }\n\n throw e;\n } finally {\n if (ac === this.abortController) {\n this.abortController = undefined;\n }\n }\n }\n\n #handleReverse(coordinates: [lng: number, lat: number]) {\n this.reverseActive = this.enableReverse === \"always\";\n\n this.#clearFeatures();\n this.picked = undefined;\n\n this.#submitSearchValue(`${coordinates[1].toFixed(6)}, ${wrapNum(coordinates[0], [-180, 180], true).toFixed(6)}`);\n this.#focusInputAndSelectText();\n }\n\n #handleKeyDown(e: KeyboardEvent) {\n if (!this.listFeatures) {\n return;\n }\n\n const dir = e.key === \"ArrowDown\" ? 1 : e.key === \"ArrowUp\" ? -1 : 0;\n\n if (!dir) {\n return;\n }\n\n this.input.focus();\n\n this.focused = true;\n\n e.preventDefault();\n\n if (this.picked && this.selectedItemIndex === -1) {\n this.selectedItemIndex = this.listFeatures.findIndex((listFeature) => listFeature.id === this.picked?.id);\n }\n\n if (this.selectedItemIndex === (this.picked || this.selectFirst !== false ? 0 : -1) && dir === -1) {\n this.selectedItemIndex = this.listFeatures.length;\n }\n\n this.selectedItemIndex += dir;\n\n if (this.selectedItemIndex >= this.listFeatures.length) {\n this.selectedItemIndex = -1;\n }\n\n if (this.selectedItemIndex < 0 && (this.picked || this.selectFirst !== false)) {\n this.selectedItemIndex = 0;\n }\n }\n\n #handleInput(event: InputEvent & { target: HTMLInputElement }) {\n this.#changeSearchValue(event.target.value);\n }\n\n #pick(feature: Feature) {\n if (!this.picked || this.picked.id !== feature.id) {\n this.picked = feature;\n this.searchValue = feature.place_name;\n }\n }\n\n #handlePointerEnter(index: number) {\n this.selectedItemIndex = index;\n }\n\n #handlePointerLeave() {\n if (!this.selectFirst !== false || this.picked) {\n this.selectedItemIndex = -1;\n }\n if (this.isFeatureListInteractedWith) {\n this.isFeatureListInteractedWith = false;\n }\n }\n\n #handlePointerDown() {\n this.isFeatureListInteractedWith = true;\n }\n\n #handlePointerUp() {\n setTimeout(() => {\n this.isFeatureListInteractedWith = false;\n });\n }\n\n #handleClear() {\n this.searchValue = \"\";\n this.#dispatch(\"queryclear\");\n\n this.picked = undefined;\n this.input.focus();\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"error\") && this.error) {\n console.error(\"[MapTilerGeocodingControl] Error:\", this.error);\n }\n\n if (changedProperties.has(\"enableReverse\")) {\n this.reverseActive = this.enableReverse === \"always\";\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked) {\n if (this.clearListOnPick) {\n this.#clearFeatures();\n }\n\n this.selectedItemIndex = -1;\n }\n }\n\n if ([\"searchValue\", \"minLength\"].some((prop) => changedProperties.has(prop)) && this.#isSearchValueTooShort) {\n this.#clearFeatures();\n this.error = undefined;\n }\n\n if ([\"focused\", \"listIsInteractedWith\"].some((prop) => changedProperties.has(prop))) {\n if (this.clearOnBlur && !this.focused && !this.isFeatureListInteractedWith) {\n this.searchValue = \"\";\n }\n }\n\n if (\n [\"selectFirst\", \"listFeatures\", \"selectedItemIndex\", \"picked\"].some((prop) => changedProperties.has(prop)) &&\n this.selectFirst !== false &&\n this.listFeatures?.length &&\n this.selectedItemIndex == -1 &&\n !this.picked\n ) {\n this.selectedItemIndex = 0;\n }\n\n if ([\"listFeatures\", \"selectedItemIndex\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"select\", { feature: this.#selected });\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked && this.picked.id !== (changedProperties.get(\"picked\") as Feature | undefined)?.id) {\n (this.fetchFullGeometryOnPick && !this.picked.address && this.picked.geometry.type === \"Point\" && this.picked.place_type[0] !== \"reverse\"\n ? this.#search(this.picked.id, { byId: true })\n : Promise.resolve()\n ).then(\n () => {\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n (e: unknown) => {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") return;\n this.error = e;\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n );\n }\n }\n\n if ([\"listFeatures\", \"focused\", \"isFeatureListInteractedWith\", \"keepListOpen\"].some((prop) => changedProperties.has(prop))) {\n this.isFeatureListVisible = !!this.listFeatures?.length && (this.focused || this.isFeatureListInteractedWith || this.keepListOpen);\n }\n\n if ([\"isFeatureListVisible\"].some((prop) => changedProperties.has(prop))) {\n if (this.isFeatureListVisible) {\n this.#dispatch(\"featuresshow\");\n } else {\n this.#dispatch(\"featureshide\");\n }\n }\n\n if ([\"reverseActive\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"reversetoggle\", { reverse: this.reverseActive });\n }\n }\n\n render() {\n /* eslint-disable @typescript-eslint/unbound-method */\n return html`\n <form @submit=${this.#handleSubmit} class=${classMap({ \"can-collapse\": this.collapsed && this.searchValue === \"\" })}>\n <div class=\"input-group\">\n <button\n class=\"search-button\"\n type=\"button\"\n @click=${() => {\n this.input.focus();\n }}\n >\n <maptiler-geocode-search-icon></maptiler-geocode-search-icon>\n </button>\n\n <input\n .value=${this.searchValue}\n @focus=${() => (this.focused = true)}\n @blur=${() => (this.focused = false)}\n @click=${() => (this.focused = true)}\n @keydown=${this.#handleKeyDown}\n @input=${this.#handleInput}\n @change=${() => (this.picked = undefined)}\n placeholder=${this.placeholder ?? \"Search\"}\n aria-label=${this.placeholder ?? \"Search\"}\n />\n\n <div class=\"clear-button-container ${classMap({ displayable: this.searchValue !== \"\" })}\">\n ${!this.#isLoading\n ? html`\n <button type=\"button\" @click=${this.#handleClear} title=${this.clearButtonTitle ?? \"clear\"}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n `\n : html`<maptiler-geocode-loading-icon></maptiler-geocode-loading-icon>`}\n </div>\n\n ${this.enableReverse === \"button\"\n ? html`\n <button\n type=\"button\"\n class=${classMap({ active: this.reverseActive })}\n title=${this.reverseButtonTitle ?? \"toggle reverse geocoding\"}\n @click=${() => (this.reverseActive = !this.reverseActive)}\n >\n <maptiler-geocode-reverse-geocoding-icon></maptiler-geocode-reverse-geocoding-icon>\n </button>\n `\n : nothing}\n\n <!-- <slot /> -->\n </div>\n\n ${this.error\n ? html`\n <div class=\"error\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>${this.errorMessage ?? \"Something went wrong…\"}</div>\n\n <button @click=${() => (this.error = undefined)}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n </div>\n `\n : (!this.focused && !this.isFeatureListInteractedWith && !this.keepListOpen) || this.listFeatures === undefined\n ? nothing\n : this.listFeatures.length === 0\n ? html`\n <div class=\"no-results\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>\n ${this.noResultsMessage ??\n \"Oops! Looks like you're trying to predict something that's not quite right. We can't seem to find what you're looking for. Maybe try double-checking your spelling or try a different search term. Keep on typing - we'll do our best to get you where you need to go!\"}\n </div>\n </div>\n `\n : html`\n <ul\n class=\"options ${classMap({ \"open-on-top\": this.openListOnTop })}\"\n @pointerleave=${this.#handlePointerLeave}\n @pointerdown=${this.#handlePointerDown}\n @pointerup=${this.#handlePointerUp}\n @keydown=${this.#handleKeyDown}\n role=\"listbox\"\n >\n ${repeat(\n this.listFeatures,\n (feature) => feature.id + (feature.address ? \",\" + feature.address : \"\"),\n (feature, i) => html`\n <maptiler-geocoder-feature-item\n .feature=${feature}\n .showPlaceType=${this.showPlaceType ?? \"if-needed\"}\n itemStyle=${this.selectedItemIndex === i ? \"selected\" : this.picked?.id === feature.id ? \"picked\" : \"default\"}\n @pointerenter=${() => {\n this.#handlePointerEnter(i);\n }}\n @select=${() => {\n this.#pick(feature);\n }}\n .missingIconsCache=${this.#missingIconsCache}\n .iconsBaseUrl=${this.iconsBaseUrl ?? `https://cdn.maptiler.com/maptiler-geocoding-control/v${import.meta.env.VITE_LIB_VERSION}/icons/`}\n />\n `,\n )}\n </ul>\n `}\n </form>\n `;\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder\": MaptilerGeocoderElement;\n }\n}\n\nconst propertyNames = [\n \"adjustUrl\",\n \"apiKey\",\n \"apiUrl\",\n \"bbox\",\n \"clearButtonTitle\",\n \"clearListOnPick\",\n \"clearOnBlur\",\n \"collapsed\",\n \"country\",\n \"debounceSearch\",\n \"enableReverse\",\n \"errorMessage\",\n \"excludeTypes\",\n \"reverseGeocodingExcludeTypes\",\n \"exhaustiveReverseGeocoding\",\n \"fetchParameters\",\n \"fetchFullGeometryOnPick\",\n \"filter\",\n \"fuzzyMatch\",\n \"iconsBaseUrl\",\n \"keepListOpen\",\n \"language\",\n \"limit\",\n \"reverseGeocodingLimit\",\n \"minLength\",\n \"noResultsMessage\",\n \"openListOnTop\",\n \"placeholder\",\n \"proximity\",\n \"reverseActive\",\n \"reverseButtonTitle\",\n \"selectFirst\",\n \"showPlaceType\",\n \"showResultsWhileTyping\",\n \"types\",\n \"reverseGeocodingTypes\",\n \"worldview\",\n] as const satisfies readonly (keyof MaptilerGeocoderOptions)[];\n","import { LitElement, css, svg, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\nimport styles from \"./marker.css?inline\";\n\n@customElement(\"maptiler-geocode-marker\")\nexport class MaptilerGeocodeMarkerElement extends LitElement {\n /** @internal */\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n render() {\n return svg`\n <svg\n viewBox=\"0 0 70 85\"\n fill=\"none\"\n class:in-map={displayIn !== \"list\"}\n >\n <path\n stroke-width=\"4\"\n d=\"M 5,33.103579 C 5,17.607779 18.457,5 35,5 C 51.543,5 65,17.607779 65,33.103579 C 65,56.388679 40.4668,76.048179 36.6112,79.137779 C 36.3714,79.329879 36.2116,79.457979 36.1427,79.518879 C 35.8203,79.800879 35.4102,79.942779 35,79.942779 C 34.5899,79.942779 34.1797,79.800879 33.8575,79.518879 C 33.7886,79.457979 33.6289,79.330079 33.3893,79.138079 C 29.5346,76.049279 5,56.389379 5,33.103579 Z M 35.0001,49.386379 C 43.1917,49.386379 49.8323,42.646079 49.8323,34.331379 C 49.8323,26.016779 43.1917,19.276479 35.0001,19.276479 C 26.8085,19.276479 20.1679,26.016779 20.1679,34.331379 C 20.1679,42.646079 26.8085,49.386379 35.0001,49.386379 Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-marker\": MaptilerGeocodeMarkerElement;\n }\n}\n","import bbox from \"@turf/bbox\";\nimport difference from \"@turf/difference\";\nimport flatten from \"@turf/flatten\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { Feature, FeatureCollection, MultiPolygon, Polygon } from \"geojson\";\nimport type { BBox } from \"../types\";\nimport { unwrapBbox } from \"./geo-utils\";\n\nexport function getMask(picked: Feature<Polygon | MultiPolygon>): FeatureCollection<Polygon | MultiPolygon> | undefined {\n const diff = difference(\n featureCollection([\n polygon([\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ]),\n picked,\n ]),\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: true };\n\n const bb = unwrapBbox(bbox(picked) as BBox);\n\n // bigger features (continents, oceans) have bigger tolerance\n // because of the used source data simplification\n const tolerance = (bb[2] - bb[0]) / 360 / 1_000;\n\n const leaksLeft = bb[0] < -180;\n const leaksRight = bb[2] > 180;\n\n const flattened = flatten(picked);\n\n if (flattened.features.length > 1 && (leaksLeft || leaksRight)) {\n for (const poly of flattened.features) {\n const bb = unwrapBbox(bbox(poly) as BBox);\n\n if (leaksRight && bb[0] < -180 + tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] += 360 - tolerance;\n }\n }\n }\n\n if (leaksLeft && bb[2] > 180 - tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] -= 360 - tolerance;\n }\n }\n }\n }\n }\n\n return featureCollection([flattened.features.length < 2 ? picked : (union(flattened) ?? picked), diff]);\n}\n","import type { ControlOptions, Map as LMap, Marker, MarkerOptions, PathOptions, StyleFunction, ZoomPanOptions } from \"leaflet\";\n\nimport type { MaptilerGeocoderOptions } from \"../geocoder/geocoder-options\";\nimport type { Feature, FlyToFeatures, PickedResultStyle } from \"../types\";\n\nexport type LeafletGeocodingControlOptions = Omit<MaptilerGeocoderOptions, \"fetchFullGeometryOnPick\"> & {\n /**\n * Marker to be added to the map at the location of the user-selected result using a default set of Marker options.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://leafletjs.com/reference.html#marker-option) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://leafletjs.com/reference.html#marker).\n * Function can accept `Feature` as a parameter which is `undefined` for the reverse location marker.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n marker?: null | boolean | MarkerOptions | ((map: LMap, feature?: Feature) => undefined | null | Marker);\n\n /**\n * Displays a marker on the selected feature from the result list. `marker` must be enabled in any way for this to display.\n *\n * Default: `true`.\n */\n markerOnSelected?: boolean;\n\n /**\n * Marker be added to the map at the location the geocoding results.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://leafletjs.com/reference.html#marker-option) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://leafletjs.com/reference.html#marker).\n * In this case the default pop-up won't be added to the marker.\n * Function can accept `Feature` as a parameter.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n showResultMarkers?: null | boolean | MarkerOptions | ((map: LMap, feature: Feature) => undefined | null | Marker);\n\n /**\n * Animation to picked feature on the map.\n *\n * - If `false` or `null` then animating the map to a selected result is disabled.\n * - If `true` or `undefined` then animating the map will use the default animation parameters.\n * - If the value is [ZoomPanOptions](https://leafletjs.com/reference.html#zoom/pan-options)\n * then it will be passed as options to the map [flyTo](https://leafletjs.com/reference.html#map-flyto)\n * or [fitBounds](https://leafletjs.com/reference.html#map-fitbounds) method providing control over the animation of the transition.\n *\n * Default value is `true`.\n */\n flyTo?: null | boolean | ZoomPanOptions;\n\n /**\n * Specifies if found features (shown in result list) should be also animated to on the map. `flyTo` muset be enabled in any way for this to have any effect.\n *\n * - If `false` or `\"never\"` then animating the map to found features is disabled.\n * - If `true` or `\"always\"` then animating the map to found features is enabled.\n * - If `\"external\"` then animating the map to found features is enabled only when explicitly calling `setQuery` or `submitQuery` methods.\n *\n * Default: `\"external\"`.\n */\n flyToFeatures?: boolean | FlyToFeatures;\n\n /**\n * Specifies if selected (not picked) feature should be also animated to on the map.\n *\n * Default: `false`.\n */\n flyToSelected?: boolean;\n\n /**\n * Style for full feature geometry GeoJSON.\n *\n * - If `false` or `null` then no full geometry is drawn.\n * - If `true` or `undefined` then default-styled full geometry is drawn.\n * - If an T then it must represent the style and will be used to style the full geometry.\n *\n * Default is the default style.\n */\n fullGeometryStyle?: null | boolean | PathOptions | StyleFunction;\n\n /**\n * Style of the picked result on the map:\n * - `\"marker-only\"`: Show only a marker at the center of the feature.\n * - `\"full-geometry\"`: Display the full feature geometry.\n * - `\"full-geometry-including-polygon-center-marker\"`: Display full geometry with a marker at the polygon center.\n *\n * Default: `\"full-geometry\"`.\n */\n pickedResultStyle?: PickedResultStyle;\n\n /**\n * Specifies the zoom level to animate the map to for a geocoded result when no bounding box is present or when the result is a point.\n * If a bounding box is present and not a point, the map will fit to the bounding box.\n *\n * Values are key-value pairs where the key is a `<type>` or `<type>.<category>` and the value is the zoom level.\n *\n * Default: `ZOOM_DEFAULTS`.\n */\n zoom?: Record<string, number>;\n} & ControlOptions;\n\nexport const ZOOM_DEFAULTS: Record<string, number> = {\n continental_marine: 4,\n country: 4,\n major_landform: 8,\n region: 5,\n subregion: 6,\n county: 7,\n joint_municipality: 8,\n joint_submunicipality: 9,\n municipality: 10,\n municipal_district: 11,\n locality: 12,\n neighbourhood: 13,\n place: 14,\n postal_code: 14,\n road: 16,\n poi: 17,\n address: 18,\n \"poi.peak\": 15,\n \"poi.shop\": 18,\n \"poi.cafe\": 18,\n \"poi.restaurant\": 18,\n \"poi.aerodrome\": 13,\n // TODO add many more\n};\n\nexport const DEFAULT_GEOMETRY_STYLE: StyleFunction = (feature) => {\n const type = feature?.geometry.type;\n const isMask = (feature?.properties as { isMask?: boolean } | undefined)?.isMask;\n const weight = isMask ? 0 : type === \"LineString\" || type === \"MultiLineString\" ? 3 : 2;\n\n return {\n color: \"#3170fe\",\n fillColor: \"#000\",\n fillOpacity: isMask ? 0.1 : 0,\n weight,\n dashArray: [weight, weight],\n lineCap: \"butt\",\n };\n};\n","import bbox from \"@turf/bbox\";\nimport { feature, featureCollection } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { GeometryCollection, LineString, MultiLineString, MultiPolygon, Polygon } from \"geojson\";\nimport {\n Control,\n type ControlOptions,\n DivIcon,\n DomEvent,\n Evented,\n GeoJSON,\n type LatLng,\n type LatLngLiteral,\n type LeafletEvent,\n type LeafletMouseEvent,\n type Map as LMap,\n Marker,\n type MarkerOptions,\n Popup,\n type PopupOptions,\n} from \"leaflet\";\n\nimport type { BBox, Feature } from \"../types\";\nimport { shiftPolyCollection, unwrapBbox } from \"../utils/geo-utils\";\nimport { getMask } from \"../utils/mask\";\n\nimport \"../geocoder/geocoder\";\nimport type { MaptilerGeocoderElement } from \"../geocoder/geocoder\";\nimport type { MaptilerGeocoderEvent, MaptilerGeocoderEventName, MaptilerGeocoderEventNameMap } from \"../geocoder/geocoder-events\";\nimport type { GeocodingControlBase } from \"./base-control\";\n\nimport \"../components/marker\";\n\nimport type { LeafletGeocodingControlEventName, LeafletGeocodingControlEventNameMap } from \"./leaflet-events\";\nimport { DEFAULT_GEOMETRY_STYLE, type LeafletGeocodingControlOptions, ZOOM_DEFAULTS } from \"./leaflet-options\";\n\n/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\n/** Base class for Control needs to extend both Control and Evented */\nabstract class EventedControl<Options extends ControlOptions> extends Control {\n override options!: Options;\n}\nObject.assign(EventedControl.prototype, Evented.prototype);\ninterface EventedControl<Options extends ControlOptions> extends Control, Evented {\n options: Options;\n}\n/* eslint-enable @typescript-eslint/no-unsafe-declaration-merging */\n\nexport class LeafletGeocodingControl extends EventedControl<LeafletGeocodingControlOptions> implements GeocodingControlBase<LeafletGeocodingControlOptions> {\n #map?: LMap;\n #element?: MaptilerGeocoderElement;\n\n constructor(options: LeafletGeocodingControlOptions = {}) {\n super(options);\n }\n\n /** @internal Not to be called directly */\n onAdd(map: LMap): HTMLElement {\n this.#map = map;\n this.#element = map.getContainer().ownerDocument.createElement(\"maptiler-geocoder\");\n this.#element.classList.add(\"leaflet-geocoder\");\n\n this.#setElementOptions();\n this.#addEventListeners();\n this.#addResultLayer();\n\n const div = map.getContainer().ownerDocument.createElement(\"div\");\n div.classList.add(\"leaflet-ctrl-geocoder\", \"leaflet-bar\");\n div.style.zIndex = \"850\"; // Position the geocoder dropdown list above the default Leaflet control z-index of 800\n div.appendChild(this.#element as Node);\n\n DomEvent.disableClickPropagation(div);\n DomEvent.disableScrollPropagation(div);\n\n return div;\n }\n\n /** @internal Not to be called directly */\n onRemove(): void {\n this.#removeEventListeners();\n this.#removeResultLayer();\n this.#map = undefined;\n this.#element = undefined;\n }\n\n getOptions(): LeafletGeocodingControlOptions {\n return { ...this.options };\n }\n\n setOptions(options: LeafletGeocodingControlOptions) {\n Object.assign(this.options, options);\n this.#setElementOptions();\n }\n\n setQuery(value: string) {\n this.#element?.setQuery(value);\n }\n\n submitQuery(value: string) {\n this.#element?.submitQuery(value);\n }\n\n clearMap() {\n this.#markedFeatures = [];\n this.#setFeatures(undefined, undefined);\n }\n\n clearList() {\n this.#element?.clearList();\n }\n\n setReverseMode(reverseActive: boolean) {\n this.setOptions({ reverseActive });\n }\n\n focus(options?: FocusOptions) {\n this.#element?.focus(options);\n }\n\n blur() {\n this.#element?.blur();\n }\n\n /** Markers currently displayed on the map */\n #markers = new Map<Feature, Marker>();\n /** Marker representing the selected feature */\n #selectedMarker: Marker | undefined;\n /** Marker representing the picked feature */\n #reverseMarker: Marker | undefined;\n /** Features currently marked on the map */\n #markedFeatures?: Feature[];\n /** Remember last feature that the map flew to as to not do it again */\n #prevIdToFly?: string;\n /** Layer used for showing geometry results */\n #resultLayer?: GeoJSON;\n\n #elementEventListeners: { [EventName in MaptilerGeocoderEventName]: (e: MaptilerGeocoderEventNameMap[EventName]) => void } = {\n reversetoggle: (event: MaptilerGeocoderEvent.ReverseToggleEvent) => {\n const container = this.#map?.getContainer();\n if (container) {\n container.style.cursor = event.detail.reverse ? \"crosshair\" : \"\";\n }\n this.#dispatch(\"reversetoggle\", event.detail);\n },\n querychange: (event: MaptilerGeocoderEvent.QueryChangeEvent) => {\n const coords = event.detail.reverseCoords;\n\n this.#setReverseMarker(coords ? { lng: coords.decimalLongitude, lat: coords.decimalLatitude } : undefined);\n this.#dispatch(\"querychange\", event.detail);\n },\n queryclear: () => {\n this.#setReverseMarker(undefined);\n this.#dispatch(\"queryclear\");\n },\n request: (event: MaptilerGeocoderEvent.RequestEvent) => {\n this.#dispatch(\"request\", event.detail);\n },\n response: (event: MaptilerGeocoderEvent.ResponseEvent) => {\n this.#dispatch(\"response\", event.detail);\n },\n select: (event: MaptilerGeocoderEvent.SelectEvent) => {\n const selected = event.detail.feature;\n if (selected && this.#flyToEnabled && this.options.flyToSelected) {\n this.#flyTo({ lng: selected.center[0], lat: selected.center[1] }, this.#computeZoom(selected));\n }\n if (this.#markedFeatures && selected) {\n this.#setSelectedMarker(selected);\n }\n this.#dispatch(\"select\", event.detail);\n },\n pick: (event: MaptilerGeocoderEvent.PickEvent) => {\n const picked = event.detail.feature;\n if (picked && picked.id !== this.#prevIdToFly && this.#flyToEnabled) {\n this.#goToPicked(picked);\n this.#setFeatures(this.#markedFeatures, picked);\n }\n\n this.#prevIdToFly = picked?.id;\n\n this.#dispatch(\"pick\", event.detail);\n },\n featuresshow: () => {\n this.#dispatch(\"featuresshow\");\n },\n featureshide: () => {\n this.#dispatch(\"featureshide\");\n },\n featureslisted: (event: MaptilerGeocoderEvent.FeaturesListedEvent) => {\n const features = event.detail.features;\n this.#markedFeatures = features;\n this.#setFeatures(this.#markedFeatures, undefined);\n this.#zoomToResults(event);\n this.#dispatch(\"featureslisted\", event.detail);\n },\n featuresclear: () => {\n this.#markedFeatures = undefined;\n this.#setFeatures(undefined, undefined);\n this.#dispatch(\"featuresclear\");\n },\n focusin: () => {\n this.#dispatch(\"focusin\");\n },\n focusout: () => {\n this.#dispatch(\"focusout\");\n },\n };\n #mapEventListeners = {\n render: () => {\n const zoom = this.#map?.getZoom();\n const center = this.#map?.getCenter();\n this.#element?.handleMapChange(zoom && center ? [zoom, center.lng, center.lat] : undefined);\n },\n click: (e: LeafletMouseEvent) => {\n this.#element?.handleMapClick([e.latlng.lng, e.latlng.lat]);\n },\n };\n\n #setElementOptions() {\n if (!this.#element) return;\n\n this.#element.setOptions(this.options);\n this.#element.fetchFullGeometryOnPick = this.options.pickedResultStyle !== \"marker-only\";\n this.#element.openListOnTop = this.options.position === \"bottomleft\" || this.options.position === \"bottomright\";\n }\n\n #addEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.addEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n this.#map.on(this.#mapEventListeners);\n }\n\n #removeEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.removeEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n this.#map.off(this.#mapEventListeners);\n }\n\n #dispatch<E extends LeafletGeocodingControlEventName>(type: E, detail?: Omit<LeafletGeocodingControlEventNameMap[E], keyof LeafletEvent>): this {\n return super.fire(type, detail);\n }\n\n #goToPicked(picked: Feature) {\n if (picked.bbox[0] === picked.bbox[2] && picked.bbox[1] === picked.bbox[3]) {\n this.#flyTo({ lng: picked.center[0], lat: picked.center[1] }, this.#computeZoom(picked));\n } else {\n this.#fitBounds(unwrapBbox(picked.bbox), 50, this.#computeZoom(picked));\n }\n }\n\n #zoomToResults({ detail: { features, external } }: MaptilerGeocoderEvent.FeaturesListedEvent) {\n if (\n !features ||\n features.length === 0 ||\n !this.#flyToEnabled ||\n this.options.flyToFeatures === false ||\n this.options.flyToFeatures === \"never\" ||\n (!external && (this.options.flyToFeatures === undefined || this.options.flyToFeatures === \"external\"))\n )\n return;\n\n const fuzzyOnly = features.every((feature) => feature.matching_text);\n const bbox = features.reduce<BBox>(\n (bbox, feature) =>\n fuzzyOnly || !feature.matching_text\n ? [Math.min(bbox[0], feature.bbox[0]), Math.min(bbox[1], feature.bbox[1]), Math.max(bbox[2], feature.bbox[2]), Math.max(bbox[3], feature.bbox[3])]\n : bbox,\n [180, 90, -180, -90],\n );\n\n const allZoom = features\n .map((feature) => this.#computeZoom(feature))\n .filter((zoom) => zoom !== undefined)\n .reduce<number | undefined>((allZoom, featZoom) => (allZoom === undefined ? featZoom : Math.max(allZoom, featZoom)), undefined);\n\n this.#fitBounds(unwrapBbox(bbox), 50, allZoom);\n }\n\n #computeZoom(feature: Feature): number | undefined {\n if (feature.bbox[0] !== feature.bbox[2] || feature.bbox[1] !== feature.bbox[3]) {\n return undefined;\n }\n\n const index = feature.id.replace(/\\..*/, \"\");\n const zoomMap = this.options.zoom ?? ZOOM_DEFAULTS;\n\n return (\n (Array.isArray(feature.properties?.categories)\n ? (feature.properties.categories as string[]).reduce<number | undefined>((a, category) => {\n const b = zoomMap[index + \".\" + category] as number | undefined;\n\n return a === undefined ? b : b === undefined ? a : Math.max(a, b);\n }, undefined)\n : undefined) ?? zoomMap[index]\n );\n }\n\n get #flyToEnabled() {\n return Boolean(this.options.flyTo) || this.options.flyTo === undefined;\n }\n get #flyToOptions() {\n return typeof this.options.flyTo === \"boolean\" ? {} : this.options.flyTo;\n }\n get #fitBoundsOptions() {\n return typeof this.options.flyTo === \"boolean\" ? {} : this.options.flyTo;\n }\n\n #flyTo(center: LatLng | LatLngLiteral, zoom?: number): void {\n this.#map?.flyTo(center, zoom, this.#flyToOptions ?? undefined);\n }\n\n #fitBounds(bbox: BBox, padding: number, maxZoom?: number): void {\n this.#map?.fitBounds(\n [\n [bbox[1], bbox[0]],\n [bbox[3], bbox[2]],\n ],\n { padding: [padding, padding], ...(maxZoom ? { maxZoom } : {}), ...this.#fitBoundsOptions },\n );\n }\n\n #setReverseMarker(coordinates?: LatLng | LatLngLiteral) {\n if (this.options.marker === false || this.options.marker === null || !this.#map) {\n return;\n }\n\n if (!coordinates) {\n this.#reverseMarker?.remove();\n this.#reverseMarker = undefined;\n return;\n }\n\n if (!this.#reverseMarker) {\n if (this.options.marker instanceof Function) {\n this.#reverseMarker = this.options.marker(this.#map) ?? undefined;\n } else {\n this.#reverseMarker = this.#createMarker(coordinates, this.options.marker).addTo(this.#map);\n this.#reverseMarker.getElement()?.classList.add(\"marker-reverse\");\n }\n }\n\n this.#reverseMarker?.setLatLng(coordinates);\n }\n\n #setFeatures(markedFeatures: Feature[] | undefined, picked: Feature | undefined): void {\n if (!this.#map) {\n return;\n }\n\n for (const marker of this.#markers.values()) {\n marker.remove();\n }\n\n this.#markers = new Map();\n\n this.#resultLayer?.clearLayers();\n\n const addMarker = () => {\n if (!picked || !this.#map || this.options.marker === false || this.options.marker === null) return;\n\n const marker =\n this.options.marker instanceof Function\n ? this.options.marker(this.#map, picked)\n : this.#createMarker({ lng: picked.center[0], lat: picked.center[1] }, this.options.marker).addTo(this.#map);\n if (marker) {\n this.#markers.set(picked, marker);\n }\n };\n\n if (picked?.geometry.type === \"GeometryCollection\") {\n const polygonGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is Polygon | MultiPolygon => geometry.type === \"Polygon\" || geometry.type === \"MultiPolygon\",\n );\n\n if (polygonGeometries.length > 0) {\n const unioned = union(featureCollection(polygonGeometries.map((geom) => feature(geom))));\n\n if (unioned) {\n const mask = getMask({ ...picked, geometry: unioned.geometry });\n if (mask) {\n // leaflet doesn't repeat features every 360 degrees along longitude so we clone it manually to the direction(s) which could be displayed when auto-zoomed on the feature\n const features = [...mask.features];\n const bb = unwrapBbox(bbox(picked) as BBox);\n const span = bb[2] - bb[0];\n\n if (bb[0] - span / 4 < -180) {\n features.push(...shiftPolyCollection(mask, -360).features);\n }\n\n if (bb[2] + span / 4 > 180) {\n features.push(...shiftPolyCollection(mask, 360).features);\n }\n\n this.#resultLayer?.addData(featureCollection(features));\n }\n }\n } else {\n const lineGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is LineString | MultiLineString => geometry.type === \"LineString\" || geometry.type === \"MultiLineString\",\n );\n\n if (lineGeometries.length > 0) {\n this.#resultLayer?.addData({\n ...picked,\n geometry: { type: \"GeometryCollection\", geometries: lineGeometries },\n } as Feature<GeometryCollection>);\n }\n }\n } else if (picked?.geometry.type.endsWith(\"Polygon\")) {\n const mask = getMask(picked as Feature<Polygon | MultiPolygon>);\n if (mask) {\n this.#resultLayer?.addData(mask);\n }\n if (this.options.pickedResultStyle === \"full-geometry-including-polygon-center-marker\") {\n addMarker();\n }\n } else if (picked?.geometry.type.endsWith(\"LineString\")) {\n this.#resultLayer?.addData(picked);\n } else if (picked?.geometry.type.endsWith(\"Point\")) {\n addMarker();\n }\n\n if (this.options.showResultMarkers !== false && this.options.showResultMarkers !== null) {\n for (const feature of markedFeatures ?? []) {\n if (feature.id === picked?.id || feature.place_type.includes(\"reverse\")) {\n continue;\n }\n\n let marker;\n\n if (this.options.showResultMarkers instanceof Function) {\n marker = this.options.showResultMarkers(this.#map, feature);\n\n if (!marker) {\n continue;\n }\n } else {\n marker = this.#createMarker({ lng: feature.center[0], lat: feature.center[1] }, this.options.showResultMarkers)\n .bindPopup(\n new Popup({\n offset: [0.3, -21],\n closeButton: false,\n closeOnMove: true,\n className: \"maptiler-gc-popup\",\n } as PopupOptions).setContent(feature.place_type[0] === \"reverse\" ? feature.place_name : feature.place_name.replace(/,.*/, \"\")),\n )\n .addTo(this.#map);\n\n marker.getElement()?.classList.add(\"marker-interactive\");\n }\n\n const element = marker.getElement();\n\n element?.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n this.#dispatch(\"markerclick\", { feature, marker });\n });\n\n element?.addEventListener(\"mouseenter\", () => {\n this.#dispatch(\"markermouseenter\", { feature, marker });\n marker.togglePopup();\n });\n\n element?.addEventListener(\"mouseleave\", () => {\n this.#dispatch(\"markermouseleave\", { feature, marker });\n marker.togglePopup();\n });\n\n element?.classList.toggle(\"marker-fuzzy\", !!feature.matching_text);\n\n this.#markers.set(feature, marker);\n }\n }\n }\n\n #setSelectedMarker(feature: Feature): void {\n this.#selectedMarker?.getElement()?.classList.toggle(\"marker-selected\", false);\n this.#selectedMarker = undefined;\n\n if (this.options.markerOnSelected !== false) {\n this.#selectedMarker = this.#markers.get(feature);\n this.#selectedMarker?.getElement()?.classList.toggle(\"marker-selected\", true);\n }\n }\n\n #addResultLayer() {\n if (!this.#map) {\n return;\n }\n\n this.#resultLayer = new GeoJSON(undefined, {\n style: this.#getFullGeometryStyle(),\n interactive: false,\n }).addTo(this.#map);\n }\n\n #removeResultLayer() {\n if (!this.#map) {\n return;\n }\n\n this.#resultLayer?.removeFrom(this.#map);\n this.#resultLayer = undefined;\n }\n\n #createMarker(center: LatLng | LatLngLiteral, options: MarkerOptions | true | undefined) {\n if (typeof options !== \"object\") {\n options = { icon: new DivIcon({ html: this.#map?.getContainer().ownerDocument.createElement(\"maptiler-geocode-marker\"), iconAnchor: [12.3, 30], className: \"\" }) };\n }\n return new Marker(center, options);\n }\n\n #getFullGeometryStyle() {\n const { fullGeometryStyle } = this.options;\n if (fullGeometryStyle === true || fullGeometryStyle === undefined) return DEFAULT_GEOMETRY_STYLE;\n if (fullGeometryStyle === false || fullGeometryStyle === null) return undefined;\n return fullGeometryStyle;\n }\n}\n"],"names":["MaptilerGeocodeClearIconElement","LitElement","svg","css","__decorateClass","customElement","MaptilerGeocodeFailIconElement","MaptilerGeocodeLoadingIconElement","html","MaptilerGeocodeReverseGeocodingIconElement","MaptilerGeocodeSearchIconElement","wrapNum","x","range","includeMax","max","min","d","unwrapBbox","bbox0","bbox","shiftPolyCollection","featureCollection","distance","cloned","clone","feature","poly","shiftPolyCoords","coordinates","ring","position","cachedLocation","getProximity","centerAndZoom","proximity","ac","rule","coords","resolve","reject","pos","c","err","_MaptilerGeocoderFeatureItemElement_instances","categories_get","isReverse_get","placeType_get","loadSprites_fn","handleImgError_fn","loadIcon_fn","loadIcon2_fn","hidpi","scaleUrl","scaleFactor","sprites","spritePromise","MaptilerGeocoderFeatureItemElement","__privateAdd","changedProperties","__privateGet","__privateMethod","styleMap","nothing","response","data","unsafeCSS","styles","property","state","_isInitialized","_searchTimeoutRef","_missingIconsCache","_centerAndZoom","_MaptilerGeocoderElement_instances","selected_get","isLoading_get","isSearchValueTooShort_get","dispatch_fn","handleSubmit_fn","isQueryReverse_fn","focusInputAndSelectText_fn","changeSearchValue_fn","clearFeatures_fn","submitSearchValue_fn","search_fn","handleReverse_fn","handleKeyDown_fn","handleInput_fn","pick_fn","handlePointerEnter_fn","handlePointerLeave_fn","handlePointerDown_fn","handlePointerUp_fn","handleClear_fn","MaptilerGeocoderElement","__privateSet","options","elementOptions","prop","propertyNames","value","type","listener","classMap","repeat","i","detail","event","external","searchValue","convert","sv","byId","exact","apiUrl","isReverse","urlObj","sp","zoom","effTypes","typeRule","effExcludeTypes","limit","effReverseGeocodingLimit","noTypes","url","res","e","dir","listFeature","index","query","MaptilerGeocodeMarkerElement","getMask","picked","diff","difference","polygon","bb","tolerance","leaksLeft","leaksRight","flattened","flatten","union","ZOOM_DEFAULTS","DEFAULT_GEOMETRY_STYLE","isMask","weight","EventedControl","Control","Evented","LeafletGeocodingControl","#map","#element","map","#setElementOptions","#addEventListeners","#addResultLayer","div","DomEvent","#removeEventListeners","#removeResultLayer","#markedFeatures","#setFeatures","reverseActive","#markers","#selectedMarker","#reverseMarker","#prevIdToFly","#resultLayer","#elementEventListeners","container","#dispatch","#setReverseMarker","selected","#flyToEnabled","#flyTo","#computeZoom","#setSelectedMarker","#goToPicked","features","#zoomToResults","#mapEventListeners","center","#fitBounds","fuzzyOnly","allZoom","featZoom","zoomMap","a","category","b","#flyToOptions","#fitBoundsOptions","padding","maxZoom","#createMarker","markedFeatures","marker","addMarker","polygonGeometries","geometry","unioned","geom","mask","span","lineGeometries","Popup","element","GeoJSON","#getFullGeometryStyle","DivIcon","Marker","fullGeometryStyle"],"mappings":"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"}
|