@maptiler/geocoding-control 3.0.0-rc.6 → 3.0.0-rc.8

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 (39) hide show
  1. package/check-version.js +69 -0
  2. package/dist/check-version.d.ts +1 -0
  3. package/dist/index.js +188 -178
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.umd.js +55 -50
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/leaflet.public.js +313 -303
  8. package/dist/leaflet.public.js.map +1 -1
  9. package/dist/leaflet.public.umd.js +51 -46
  10. package/dist/leaflet.public.umd.js.map +1 -1
  11. package/dist/maplibregl.js +188 -178
  12. package/dist/maplibregl.js.map +1 -1
  13. package/dist/maplibregl.umd.js +50 -45
  14. package/dist/maplibregl.umd.js.map +1 -1
  15. package/dist/maptilersdk.js +243 -233
  16. package/dist/maptilersdk.js.map +1 -1
  17. package/dist/maptilersdk.umd.js +62 -57
  18. package/dist/maptilersdk.umd.js.map +1 -1
  19. package/dist/openlayers.public.js +225 -214
  20. package/dist/openlayers.public.js.map +1 -1
  21. package/dist/openlayers.public.umd.js +51 -46
  22. package/dist/openlayers.public.umd.js.map +1 -1
  23. package/dist/src/components/clear-icon.d.ts +1 -0
  24. package/dist/src/components/fail-icon.d.ts +1 -0
  25. package/dist/src/components/loading-icon.d.ts +1 -0
  26. package/dist/src/components/marker.d.ts +1 -0
  27. package/dist/src/components/reverse-geocoding-icon.d.ts +1 -0
  28. package/dist/src/components/search-icon.d.ts +1 -0
  29. package/dist/src/controls/maplibregl-control.d.ts +2 -7
  30. package/dist/src/controls/maplibregl-events.d.ts +2 -3
  31. package/dist/src/controls/maplibregl-options.d.ts +1 -9
  32. package/dist/src/geocoder/geocoder-feature-item.d.ts +1 -0
  33. package/dist/src/geocoder/geocoder.d.ts +5 -2
  34. package/dist/src/index.d.ts +1 -0
  35. package/dist/src/leaflet.public.d.ts +1 -0
  36. package/dist/src/maplibregl.d.ts +1 -0
  37. package/dist/src/maptilersdk.d.ts +1 -0
  38. package/dist/src/openlayers.public.d.ts +1 -0
  39. package/package.json +20 -10
@@ -1 +1 @@
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 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 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 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 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 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 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 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 /** Focus state of input element, delayed for a moment to not close feature list immediately after losing focus */\n @state() private focusedDelayed: boolean = false;\n\n /** Helps to trigger logic only after this instance gets fully initialized */\n #isInitialized = false;\n /** Helps to trigger logic running when feature list hides only after it gets opened for the first time */\n #wasFeatureListVisible = 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 #isFeatureListVisible(): boolean {\n return !!this.listFeatures?.length && (this.focusedDelayed || this.keepListOpen);\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);\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) {\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: event === undefined })\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) {\n this.searchValue = searchValue;\n this.#dispatch(\"querychange\", { query: this.searchValue, reverseCoords: this.#isQueryReverse(searchValue) });\n\n this.selectedItemIndex = -1;\n this.#handleSubmit();\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 text: `${isReverse.decimalLatitude}, ${isReverse.decimalLongitude}`,\n place_name: 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 #handleMouseEnter(index: number) {\n this.selectedItemIndex = index;\n }\n\n #handleMouseLeave() {\n if (!this.selectFirst !== false || this.picked) {\n this.selectedItemIndex = -1;\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\"].some((prop) => changedProperties.has(prop))) {\n setTimeout(() => {\n this.focusedDelayed = this.focused;\n\n // close dropdown in the next cycle so that the selected item event has the chance to fire\n if (this.clearOnBlur && !this.focused) {\n this.searchValue = \"\";\n }\n }, 100);\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\", \"focusedDelayed\"].some((prop) => changedProperties.has(prop))) {\n if (this.#isFeatureListVisible) {\n this.#dispatch(\"featuresshow\");\n this.#wasFeatureListVisible = true;\n } else if (this.#wasFeatureListVisible) {\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.focusedDelayed && !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 class=\"options ${classMap({ \"open-on-top\": this.openListOnTop })}\" @mouseleave=${this.#handleMouseLeave} @keydown=${this.#handleKeyDown} role=\"listbox\">\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 @mouseenter=${() => {\n this.#handleMouseEnter(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 ${feature.place_name}\n </maptiler-geocoder-feature-item>\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 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","_wasFeatureListVisible","_searchTimeoutRef","_missingIconsCache","_centerAndZoom","_MaptilerGeocoderElement_instances","selected_get","isFeatureListVisible_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","handleMouseEnter_fn","handleMouseLeave_fn","handleClear_fn","MaptilerGeocoderElement","__privateSet","options","elementOptions","prop","propertyNames","value","type","listener","classMap","repeat","i","detail","event","searchValue","convert","external","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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"}
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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"}