@maptiler/geocoding-control 3.0.0-rc.7 → 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.
- package/check-version.js +69 -0
- package/dist/check-version.d.ts +1 -0
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/dist/leaflet.public.js +9 -9
- package/dist/leaflet.public.js.map +1 -1
- package/dist/leaflet.public.umd.js +3 -3
- package/dist/leaflet.public.umd.js.map +1 -1
- package/dist/maplibregl.js +67 -67
- package/dist/maplibregl.js.map +1 -1
- package/dist/maplibregl.umd.js +4 -4
- package/dist/maplibregl.umd.js.map +1 -1
- package/dist/maptilersdk.js +102 -102
- package/dist/maptilersdk.js.map +1 -1
- package/dist/maptilersdk.umd.js +4 -4
- package/dist/maptilersdk.umd.js.map +1 -1
- package/dist/openlayers.public.js +11 -10
- package/dist/openlayers.public.js.map +1 -1
- package/dist/openlayers.public.umd.js +4 -4
- package/dist/openlayers.public.umd.js.map +1 -1
- package/dist/src/components/clear-icon.d.ts +1 -0
- package/dist/src/components/fail-icon.d.ts +1 -0
- package/dist/src/components/loading-icon.d.ts +1 -0
- package/dist/src/components/marker.d.ts +1 -0
- package/dist/src/components/reverse-geocoding-icon.d.ts +1 -0
- package/dist/src/components/search-icon.d.ts +1 -0
- package/dist/src/controls/maplibregl-control.d.ts +2 -7
- package/dist/src/controls/maplibregl-events.d.ts +2 -3
- package/dist/src/controls/maplibregl-options.d.ts +1 -9
- package/dist/src/geocoder/geocoder-feature-item.d.ts +1 -0
- package/dist/src/geocoder/geocoder.d.ts +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/leaflet.public.d.ts +1 -0
- package/dist/src/maplibregl.d.ts +1 -0
- package/dist/src/maptilersdk.d.ts +1 -0
- package/dist/src/openlayers.public.d.ts +1 -0
- package/package.json +20 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openlayers.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/openlayers-options.ts","../src/controls/openlayers-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 /** 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);\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 #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 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","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport type { AnimationOptions, FitOptions } from \"ol/View\";\nimport type { Options } from \"ol/control/Control\";\nimport Fill from \"ol/style/Fill\";\nimport Icon from \"ol/style/Icon\";\nimport Stroke from \"ol/style/Stroke\";\nimport Style, { type StyleFunction, type StyleLike } from \"ol/style/Style\";\nimport Text from \"ol/style/Text\";\nimport type { FlatStyleLike } from \"ol/style/flat\";\n\nimport type { MaptilerGeocoderOptions } from \"../geocoder/geocoder-options\";\nimport type { FlyToFeatures, PickedResultStyle } from \"../types\";\n\nexport type OpenLayersGeocodingControlOptions = Omit<MaptilerGeocoderOptions, \"fetchFullGeometryOnPick\"> & {\n /**\n * Marker to be added to the map at the location of the user-selected result.\n *\n * Default value is `true`.\n */\n marker?: boolean;\n\n /**\n * Displays a marker on the selected feature from the result list. `marker` must be also enabled 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 * Default value is `true`.\n */\n showResultMarkers?: boolean;\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 [AnimationOptions](https://openlayers.org/en/latest/apidoc/module-ol_View.html#~AnimationOptions)\n * and [FitOptions](https://openlayers.org/en/latest/apidoc/module-ol_View.html#~FitOptions)\n * then it will be passed as options to the map's view [animate](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#animate)\n * or [fit](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#fit) method providing control over the animation of the transition.\n *\n * Default value is `true`.\n */\n flyTo?: null | boolean | (AnimationOptions & FitOptions);\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 the value is [StyleLike](https://openlayers.org/en/latest/apidoc/module-ol_style_Style.html#~StyleLike)\n * or [FlatStyleLike](https://openlayers.org/en/latest/apidoc/module-ol_style_flat.html#~FlatStyleLike)\n * 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 | StyleLike | FlatStyleLike;\n\n /**\n * Opens the Geocoder result list above the query input instead of below. Used when positioned near the bottom of a map.\n *\n * Default: `false`.\n */\n openListOnTop?: boolean;\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} & Omit<Options, \"element\">;\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 =\n (options: OpenLayersGeocodingControlOptions): StyleFunction =>\n (feature) => {\n const iconsBaseUrl = options.iconsBaseUrl ?? `https://cdn.maptiler.com/maptiler-geocoding-control/v${import.meta.env.VITE_LIB_VERSION}/icons/`;\n const properties = feature.getProperties();\n const type = feature.getGeometry()?.getType();\n const weight = properties.isMask ? 0 : type === \"LineString\" || type === \"MultiLineString\" ? 3 : 2;\n\n return new Style({\n stroke: properties.isMask\n ? undefined\n : new Stroke({\n color: \"#3170fe\",\n lineDash: [weight, weight],\n width: weight,\n lineCap: \"butt\",\n }),\n fill: properties.isMask\n ? new Fill({\n color: \"#00000020\",\n })\n : undefined,\n image: new Icon({\n src: `${iconsBaseUrl}marker_${properties.isReverse ? \"reverse\" : properties.isSelected ? \"selected\" : \"unselected\"}.svg`,\n anchor: [0.5, 1],\n }),\n zIndex: properties.isSelected ? 2 : properties.isReverse ? 0 : 1,\n text:\n (properties.isSelected || properties.isMouseOver) && properties.tooltip\n ? new Text({\n backgroundFill: new Fill({ color: \"white\" }),\n text: properties.tooltip,\n offsetY: -40,\n backgroundStroke: new Stroke({\n color: \"white\",\n lineJoin: \"round\",\n width: 3,\n }),\n padding: [2, 0, 0, 2],\n })\n : undefined,\n });\n };\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport type { MultiPolygon, Polygon } from \"geojson\";\nimport type { Map as OLMap } from \"ol\";\nimport { Feature as OlFeature, type MapBrowserEvent } from \"ol\";\nimport type { Types as ObjectEventTypes } from \"ol/ObjectEventType\";\nimport type { EventTypes } from \"ol/Observable\";\nimport { Control } from \"ol/control\";\nimport type { Coordinate } from \"ol/coordinate\";\nimport type { EventsKey, ListenerFunction } from \"ol/events\";\nimport OLEvent from \"ol/events/Event\";\nimport {\n GeometryCollection as OlGeometryCollection,\n LineString as OlLineString,\n MultiLineString as OlMultiLineString,\n MultiPolygon as OlMultiPolygon,\n Point as OlPoint,\n Polygon as OlPolygon,\n} from \"ol/geom\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport { fromLonLat, getUserProjection, toLonLat, transformExtent, type Projection } from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\n\nimport type { BBox, Feature, Position } from \"../types\";\nimport { 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 { OpenLayersGeocodingControlEventName, OpenLayersGeocodingControlEventNameMap } from \"./openlayers-events\";\nimport { DEFAULT_GEOMETRY_STYLE, ZOOM_DEFAULTS, type OpenLayersGeocodingControlOptions } from \"./openlayers-options\";\n\ntype TypedBaseEvent<Type extends OpenLayersGeocodingControlEventName> = OLEvent & { type: Type } & OpenLayersGeocodingControlEventNameMap[Type];\n\ninterface EventHandlingMethod {\n (type: EventTypes | ObjectEventTypes, listener: (event: OLEvent) => unknown): EventsKey;\n <Type extends OpenLayersGeocodingControlEventName>(type: Type, listener: (event: TypedBaseEvent<Type>) => unknown): EventsKey;\n (type: Array<EventTypes | ObjectEventTypes | OpenLayersGeocodingControlEventName>, listener: (event: OLEvent) => unknown): EventsKey[];\n}\n\nconst EPSG_SYSTEM = \"EPSG:4326\";\n\nexport class OpenLayersGeocodingControl extends Control implements GeocodingControlBase<OpenLayersGeocodingControlOptions> {\n #options: OpenLayersGeocodingControlOptions;\n #map?: OLMap;\n #element: MaptilerGeocoderElement;\n\n constructor(options: OpenLayersGeocodingControlOptions = {}) {\n const div = document.createElement(\"div\");\n\n super({\n element: div,\n ...options,\n });\n\n this.#options = options;\n\n this.#element = document.createElement(\"maptiler-geocoder\");\n this.#element.classList.add(\"openlayers-geocoder\");\n\n this.#setElementOptions();\n\n div.classList.add(\"openlayers-ctrl-geocoder\");\n div.style.zIndex = \"3\";\n div.appendChild(this.#element as Node);\n }\n\n /** @internal Not to be called directly */\n override setMap(map: OLMap | null) {\n super.setMap(map);\n\n if (this.#map && this.#map !== map) {\n this.#removeEventListeners();\n this.#removeResultLayer();\n this.#map = undefined;\n }\n\n if (map) {\n this.#map = map;\n this.#addEventListeners();\n this.#addResultLayer();\n }\n }\n\n getOptions(): OpenLayersGeocodingControlOptions {\n return { ...this.#options };\n }\n\n setOptions(options: OpenLayersGeocodingControlOptions) {\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 declare on: EventHandlingMethod;\n declare once: EventHandlingMethod;\n declare un: EventHandlingMethod;\n\n /** Markers currently displayed on the map */\n #markers = new Map<Feature, OlFeature<OlPoint>>();\n /** Marker representing the selected feature */\n #selectedMarker: OlFeature<OlPoint> | undefined;\n /** Marker representing the picked feature */\n #reverseMarker: OlFeature<OlPoint> | 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 results */\n #resultLayer?: VectorLayer;\n /** Source connected to layer used for showing results */\n #resultSource?: VectorSource;\n /** Last marker the mouse was over, used to detech mouseover and mouseleave events on markers */\n #prevHoveredId?: string;\n /** Flag whether to show reverse geocoding cursor */\n #indicatingReverse = false;\n\n #elementEventListeners: { [EventName in MaptilerGeocoderEventName]: (e: MaptilerGeocoderEventNameMap[EventName]) => void } = {\n reversetoggle: (event: MaptilerGeocoderEvent.ReverseToggleEvent) => {\n this.#indicatingReverse = event.detail.reverse;\n this.#dispatch(\"reversetoggle\", event.detail);\n },\n querychange: (event: MaptilerGeocoderEvent.QueryChangeEvent) => {\n const coords = event.detail.reverseCoords;\n\n this.#setReverseMarker(coords ? [coords.decimalLongitude, 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(selected.center, 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 postrender: () => {\n const zoom = this.#map?.getView().getZoom();\n const center = this.#map?.getView().getCenter();\n this.#element.handleMapChange(zoom && center ? [zoom, ...this.#transformCoordinateToPosition(center!)] : undefined);\n },\n click: (e: MapBrowserEvent<PointerEvent>) => {\n this.#element.handleMapClick(this.#transformCoordinateToPosition(e.coordinate));\n this.#map?.forEachFeatureAtPixel(e.pixel, (olFeature) => {\n const id = olFeature.getId() as string;\n const feature = this.#markedFeatures?.find((f) => f.id === id);\n if (!id || !feature) return;\n\n e.stopPropagation();\n this.#dispatch(\"markerclick\", { feature, marker: olFeature as OlFeature<OlPoint> });\n return true;\n });\n },\n pointermove: (e: MapBrowserEvent<PointerEvent>) => {\n if (!this.#map) return;\n\n const enteredOlFeature = this.#map.forEachFeatureAtPixel(e.pixel, (olFeature) => {\n return olFeature.getId() ? (olFeature as OlFeature<OlPoint>) : undefined;\n });\n\n this.#map.getTargetElement().style.cursor = enteredOlFeature ? \"pointer\" : this.#indicatingReverse ? \"crosshair\" : \"\";\n\n const id = enteredOlFeature?.getId() as string | undefined;\n if (this.#prevHoveredId === id) return;\n\n if (this.#prevHoveredId) {\n const leftFeature = this.#markedFeatures?.find((f) => f.id === this.#prevHoveredId);\n const leftOlFeature = this.#markers.get(leftFeature!);\n leftOlFeature?.set(\"isMouseOver\", false);\n\n if (leftFeature && leftOlFeature) {\n this.#dispatch(\"markermouseleave\", { feature: leftFeature, marker: leftOlFeature });\n }\n }\n\n if (enteredOlFeature) {\n const enteredFeature = this.#markedFeatures?.find((f) => f.id === id);\n\n this.#dispatch(\"markermouseenter\", { feature: enteredFeature!, marker: enteredOlFeature });\n enteredOlFeature.set(\"isMouseOver\", true);\n }\n\n this.#prevHoveredId = id;\n },\n };\n\n #setElementOptions() {\n this.#element.setOptions(this.#options);\n this.#element.fetchFullGeometryOnPick = this.#options.pickedResultStyle !== \"marker-only\";\n }\n\n #addEventListeners() {\n if (!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 for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.on([type as EventTypes], listener as ListenerFunction);\n }\n }\n\n #removeEventListeners() {\n if (!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 for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.un([type as EventTypes], listener as ListenerFunction);\n }\n }\n\n #dispatch<E extends OpenLayersGeocodingControlEventName>(type: E, detail?: Omit<OpenLayersGeocodingControlEventNameMap[E], keyof OLEvent>): void {\n this.dispatchEvent(Object.assign(new OLEvent(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(picked.center, 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: Position, zoom?: number): void {\n this.#map?.getView().animate({\n center: this.#transformPositionToCoordinate(center),\n ...(zoom ? { zoom } : {}),\n duration: 2000,\n ...this.#flyToOptions,\n });\n }\n\n #fitBounds(bbox: BBox, padding: number, maxZoom?: number): void {\n this.#map?.getView().fit(transformExtent(bbox, EPSG_SYSTEM, this.#getProjection()), {\n padding: [padding, padding, padding, padding],\n ...(maxZoom ? { maxZoom } : {}),\n duration: 2000,\n ...this.#fitBoundsOptions,\n });\n }\n\n #setReverseMarker(position?: Position) {\n if (this.#options.marker === false || !this.#map || !this.#resultSource) {\n return;\n }\n\n if (!position) {\n if (this.#reverseMarker) {\n this.#resultSource.removeFeature(this.#reverseMarker);\n this.#reverseMarker.dispose();\n this.#reverseMarker = undefined;\n }\n return;\n }\n\n const coordinates = this.#transformPositionToCoordinate(position);\n\n if (!this.#reverseMarker) {\n this.#reverseMarker = new OlFeature(new OlPoint(coordinates));\n this.#reverseMarker.set(\"isReverse\", true);\n // this.#styleMarker(this.#reverseMarker);\n this.#resultSource.addFeature(this.#reverseMarker);\n return;\n }\n\n this.#reverseMarker.getGeometry()!.setCoordinates(coordinates);\n }\n\n #setFeatures(markedFeatures: Feature[] | undefined, picked: Feature | undefined): void {\n if (!this.#map || !this.#resultSource) {\n return;\n }\n\n this.#resultSource.removeFeatures([...this.#markers.values()]);\n this.#markers = new Map();\n\n const addMarker = () => {\n if (!picked || !this.#map || this.#options.marker === false) return;\n\n const marker = new OlFeature(new OlPoint(this.#transformPositionToCoordinate(picked.center)));\n marker.setId(picked.id);\n this.#markers.set(picked, marker);\n this.#resultSource?.addFeature(marker);\n };\n\n if (picked?.geometry.type === \"GeometryCollection\") {\n const polygonGeometries = picked.geometry.geometries\n .map((geometry) => (geometry.type === \"Polygon\" ? new OlPolygon(geometry.coordinates) : geometry.type === \"MultiPolygon\" ? new OlMultiPolygon(geometry.coordinates) : null))\n .filter((geometry): geometry is OlPolygon | OlMultiPolygon => Boolean(geometry));\n\n if (polygonGeometries.length > 0) {\n this.#resultSource.addFeature(new OlFeature(new OlGeometryCollection(polygonGeometries).transform(EPSG_SYSTEM, this.#getProjection())));\n } else {\n for (const geometry of picked.geometry.geometries) {\n if (geometry.type === \"LineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlLineString(geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (geometry.type === \"MultiLineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlMultiLineString(geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n }\n }\n }\n } else if (picked?.geometry.type.endsWith(\"Polygon\")) {\n const mask = getMask(picked as Feature<Polygon | MultiPolygon>);\n if (mask) {\n for (const f of mask.features) {\n const geom = f.geometry.type === \"Polygon\" ? new OlPolygon(f.geometry.coordinates) : new OlMultiPolygon(f.geometry.coordinates);\n\n this.#resultSource.addFeature(\n new OlFeature({\n isMask: !!f.properties?.isMask,\n geometry: geom.transform(EPSG_SYSTEM, this.#getProjection()),\n }),\n );\n }\n }\n if (this.#options.pickedResultStyle === \"full-geometry-including-polygon-center-marker\") {\n addMarker();\n }\n } else if (picked?.geometry.type === \"LineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlLineString(picked.geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (picked?.geometry.type === \"MultiLineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlMultiLineString(picked.geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (picked?.geometry.type.endsWith(\"Point\")) {\n addMarker();\n }\n\n if (this.#options.showResultMarkers !== false) {\n for (const feature of markedFeatures ?? []) {\n if (feature.id === picked?.id || feature.place_type.includes(\"reverse\")) {\n continue;\n }\n\n const marker = new OlFeature(new OlPoint(this.#transformPositionToCoordinate(feature.center)));\n marker.setId(feature.id);\n marker.setProperties({\n fuzzy: !!feature.matching_text,\n tooltip: feature.place_type[0] === \"reverse\" ? feature.place_name : feature.place_name.replace(/,.*/, \"\"),\n });\n this.#resultSource.addFeature(marker);\n\n this.#markers.set(feature, marker);\n }\n }\n }\n\n #setSelectedMarker(feature: Feature): void {\n this.#selectedMarker?.set(\"isSelected\", false);\n this.#selectedMarker = undefined;\n\n if (this.#options.markerOnSelected !== false) {\n this.#selectedMarker = this.#markers.get(feature);\n this.#selectedMarker?.setProperties({ isSelected: true });\n }\n }\n\n #addResultLayer() {\n if (!this.#map) {\n return;\n }\n\n this.#resultSource = new VectorSource({});\n this.#resultLayer = new VectorLayer({\n updateWhileAnimating: true,\n });\n this.#resultLayer.setSource(this.#resultSource);\n this.#resultLayer.setStyle(this.#getFullGeometryStyle());\n\n this.#map.addLayer(this.#resultLayer);\n }\n\n #removeResultLayer() {\n if (!this.#map || !this.#resultLayer) {\n return;\n }\n\n this.#map.removeLayer(this.#resultLayer);\n this.#resultLayer = undefined;\n }\n\n #getProjection(): Projection | undefined {\n return getUserProjection() ?? this.#map?.getView().getProjection();\n }\n\n #transformPositionToCoordinate(position: Position): Coordinate {\n return fromLonLat(position, this.#getProjection());\n }\n\n #transformCoordinateToPosition(coordinate: Coordinate): Position {\n return toLonLat(coordinate, this.#getProjection()) as Position;\n }\n\n #getFullGeometryStyle() {\n const { fullGeometryStyle } = this.#options;\n if (fullGeometryStyle === true || fullGeometryStyle === undefined) return DEFAULT_GEOMETRY_STYLE(this.#options);\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","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","coordinates","classMap","repeat","feature","i","detail","event","searchValue","convert","external","sv","byId","exact","apiUrl","isReverse","urlObj","sp","zoom","effTypes","typeRule","effExcludeTypes","limit","effReverseGeocodingLimit","noTypes","url","featureCollection","res","e","dir","listFeature","index","query","MaptilerGeocodeMarkerElement","getMask","picked","diff","difference","polygon","bb","tolerance","leaksLeft","leaksRight","flattened","flatten","poly","ring","position","union","ZOOM_DEFAULTS","DEFAULT_GEOMETRY_STYLE","iconsBaseUrl","properties","weight","Style","Stroke","Fill","Icon","Text","EPSG_SYSTEM","OpenLayersGeocodingControl","Control","#options","#map","#element","div","#setElementOptions","map","#removeEventListeners","#removeResultLayer","#addEventListeners","#addResultLayer","#markedFeatures","#setFeatures","reverseActive","#markers","#selectedMarker","#reverseMarker","#prevIdToFly","#resultLayer","#resultSource","#prevHoveredId","#indicatingReverse","#elementEventListeners","#dispatch","#setReverseMarker","selected","#flyToEnabled","#flyTo","#computeZoom","#setSelectedMarker","#goToPicked","features","#zoomToResults","#mapEventListeners","center","#transformCoordinateToPosition","olFeature","id","f","enteredOlFeature","leftFeature","leftOlFeature","enteredFeature","OLEvent","#fitBounds","fuzzyOnly","allZoom","featZoom","zoomMap","a","category","b","#flyToOptions","#fitBoundsOptions","#transformPositionToCoordinate","padding","maxZoom","transformExtent","#getProjection","OlFeature","OlPoint","markedFeatures","addMarker","marker","polygonGeometries","geometry","OlPolygon","OlMultiPolygon","OlGeometryCollection","OlLineString","OlMultiLineString","mask","geom","VectorSource","VectorLayer","#getFullGeometryStyle","getUserProjection","fromLonLat","coordinate","toLonLat","fullGeometryStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openlayers.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/openlayers-options.ts","../src/controls/openlayers-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","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport type { AnimationOptions, FitOptions } from \"ol/View\";\nimport type { Options } from \"ol/control/Control\";\nimport Fill from \"ol/style/Fill\";\nimport Icon from \"ol/style/Icon\";\nimport Stroke from \"ol/style/Stroke\";\nimport Style, { type StyleFunction, type StyleLike } from \"ol/style/Style\";\nimport Text from \"ol/style/Text\";\nimport type { FlatStyleLike } from \"ol/style/flat\";\n\nimport type { MaptilerGeocoderOptions } from \"../geocoder/geocoder-options\";\nimport type { FlyToFeatures, PickedResultStyle } from \"../types\";\n\nexport type OpenLayersGeocodingControlOptions = Omit<MaptilerGeocoderOptions, \"fetchFullGeometryOnPick\"> & {\n /**\n * Marker to be added to the map at the location of the user-selected result.\n *\n * Default value is `true`.\n */\n marker?: boolean;\n\n /**\n * Displays a marker on the selected feature from the result list. `marker` must be also enabled 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 * Default value is `true`.\n */\n showResultMarkers?: boolean;\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 [AnimationOptions](https://openlayers.org/en/latest/apidoc/module-ol_View.html#~AnimationOptions)\n * and [FitOptions](https://openlayers.org/en/latest/apidoc/module-ol_View.html#~FitOptions)\n * then it will be passed as options to the map's view [animate](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#animate)\n * or [fit](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#fit) method providing control over the animation of the transition.\n *\n * Default value is `true`.\n */\n flyTo?: null | boolean | (AnimationOptions & FitOptions);\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 the value is [StyleLike](https://openlayers.org/en/latest/apidoc/module-ol_style_Style.html#~StyleLike)\n * or [FlatStyleLike](https://openlayers.org/en/latest/apidoc/module-ol_style_flat.html#~FlatStyleLike)\n * 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 | StyleLike | FlatStyleLike;\n\n /**\n * Opens the Geocoder result list above the query input instead of below. Used when positioned near the bottom of a map.\n *\n * Default: `false`.\n */\n openListOnTop?: boolean;\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} & Omit<Options, \"element\">;\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 =\n (options: OpenLayersGeocodingControlOptions): StyleFunction =>\n (feature) => {\n const iconsBaseUrl = options.iconsBaseUrl ?? `https://cdn.maptiler.com/maptiler-geocoding-control/v${import.meta.env.VITE_LIB_VERSION}/icons/`;\n const properties = feature.getProperties();\n const type = feature.getGeometry()?.getType();\n const weight = properties.isMask ? 0 : type === \"LineString\" || type === \"MultiLineString\" ? 3 : 2;\n\n return new Style({\n stroke: properties.isMask\n ? undefined\n : new Stroke({\n color: \"#3170fe\",\n lineDash: [weight, weight],\n width: weight,\n lineCap: \"butt\",\n }),\n fill: properties.isMask\n ? new Fill({\n color: \"#00000020\",\n })\n : undefined,\n image: new Icon({\n src: `${iconsBaseUrl}marker_${properties.isReverse ? \"reverse\" : properties.isSelected ? \"selected\" : \"unselected\"}.svg`,\n anchor: [0.5, 1],\n }),\n zIndex: properties.isSelected ? 2 : properties.isReverse ? 0 : 1,\n text:\n (properties.isSelected || properties.isMouseOver) && properties.tooltip\n ? new Text({\n backgroundFill: new Fill({ color: \"white\" }),\n text: properties.tooltip,\n offsetY: -40,\n backgroundStroke: new Stroke({\n color: \"white\",\n lineJoin: \"round\",\n width: 3,\n }),\n padding: [2, 0, 0, 2],\n })\n : undefined,\n });\n };\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport type { MultiPolygon, Polygon } from \"geojson\";\nimport { Feature as OlFeature, type MapBrowserEvent, type Map as OLMap } from \"ol\";\nimport type { Types as ObjectEventTypes } from \"ol/ObjectEventType\";\nimport type { EventTypes } from \"ol/Observable\";\nimport { Control } from \"ol/control\";\nimport type { Coordinate } from \"ol/coordinate\";\nimport type { EventsKey, ListenerFunction } from \"ol/events\";\nimport OLEvent from \"ol/events/Event\";\nimport {\n GeometryCollection as OlGeometryCollection,\n LineString as OlLineString,\n MultiLineString as OlMultiLineString,\n MultiPolygon as OlMultiPolygon,\n Point as OlPoint,\n Polygon as OlPolygon,\n} from \"ol/geom\";\nimport VectorLayer from \"ol/layer/Vector\";\nimport { fromLonLat, getUserProjection, toLonLat, transformExtent, type Projection } from \"ol/proj\";\nimport VectorSource from \"ol/source/Vector\";\n\nimport type { BBox, Feature, Position } from \"../types\";\nimport { 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 { OpenLayersGeocodingControlEventName, OpenLayersGeocodingControlEventNameMap } from \"./openlayers-events\";\nimport { DEFAULT_GEOMETRY_STYLE, ZOOM_DEFAULTS, type OpenLayersGeocodingControlOptions } from \"./openlayers-options\";\n\ntype TypedBaseEvent<Type extends OpenLayersGeocodingControlEventName> = OLEvent & { type: Type } & OpenLayersGeocodingControlEventNameMap[Type];\n\ninterface EventHandlingMethod {\n (type: EventTypes | ObjectEventTypes, listener: (event: OLEvent) => unknown): EventsKey;\n <Type extends OpenLayersGeocodingControlEventName>(type: Type, listener: (event: TypedBaseEvent<Type>) => unknown): EventsKey;\n (type: Array<EventTypes | ObjectEventTypes | OpenLayersGeocodingControlEventName>, listener: (event: OLEvent) => unknown): EventsKey[];\n}\n\nconst EPSG_SYSTEM = \"EPSG:4326\";\n\nexport class OpenLayersGeocodingControl extends Control implements GeocodingControlBase<OpenLayersGeocodingControlOptions> {\n #options: OpenLayersGeocodingControlOptions;\n #map?: OLMap;\n #element: MaptilerGeocoderElement;\n\n constructor(options: OpenLayersGeocodingControlOptions = {}) {\n const div = document.createElement(\"div\");\n\n super({\n element: div,\n ...options,\n });\n\n this.#options = options;\n\n this.#element = document.createElement(\"maptiler-geocoder\");\n this.#element.classList.add(\"openlayers-geocoder\");\n\n this.#setElementOptions();\n\n div.classList.add(\"openlayers-ctrl-geocoder\");\n div.style.zIndex = \"3\";\n div.appendChild(this.#element as Node);\n }\n\n /** @internal Not to be called directly */\n override setMap(map: OLMap | null) {\n super.setMap(map);\n\n if (this.#map && this.#map !== map) {\n this.#removeEventListeners();\n this.#removeResultLayer();\n this.#map = undefined;\n }\n\n if (map) {\n this.#map = map;\n this.#addEventListeners();\n this.#addResultLayer();\n }\n }\n\n getOptions(): OpenLayersGeocodingControlOptions {\n return { ...this.#options };\n }\n\n setOptions(options: OpenLayersGeocodingControlOptions) {\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 declare on: EventHandlingMethod;\n declare once: EventHandlingMethod;\n declare un: EventHandlingMethod;\n\n /** Markers currently displayed on the map */\n #markers = new Map<Feature, OlFeature<OlPoint>>();\n /** Marker representing the selected feature */\n #selectedMarker: OlFeature<OlPoint> | undefined;\n /** Marker representing the picked feature */\n #reverseMarker: OlFeature<OlPoint> | 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 results */\n #resultLayer?: VectorLayer<any>; // eslint-disable-line @typescript-eslint/no-explicit-any\n /** Source connected to layer used for showing results */\n #resultSource?: VectorSource;\n /** Last marker the mouse was over, used to detech mouseover and mouseleave events on markers */\n #prevHoveredId?: string;\n /** Flag whether to show reverse geocoding cursor */\n #indicatingReverse = false;\n\n #elementEventListeners: { [EventName in MaptilerGeocoderEventName]: (e: MaptilerGeocoderEventNameMap[EventName]) => void } = {\n reversetoggle: (event: MaptilerGeocoderEvent.ReverseToggleEvent) => {\n this.#indicatingReverse = event.detail.reverse;\n this.#dispatch(\"reversetoggle\", event.detail);\n },\n querychange: (event: MaptilerGeocoderEvent.QueryChangeEvent) => {\n const coords = event.detail.reverseCoords;\n\n this.#setReverseMarker(coords ? [coords.decimalLongitude, 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(selected.center, 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 postrender: () => {\n const zoom = this.#map?.getView().getZoom();\n const center = this.#map?.getView().getCenter();\n this.#element.handleMapChange(zoom && center ? [zoom, ...this.#transformCoordinateToPosition(center!)] : undefined);\n },\n click: (e: MapBrowserEvent<PointerEvent>) => {\n this.#element.handleMapClick(this.#transformCoordinateToPosition(e.coordinate));\n this.#map?.forEachFeatureAtPixel(e.pixel, (olFeature) => {\n const id = olFeature.getId() as string;\n const feature = this.#markedFeatures?.find((f) => f.id === id);\n if (!id || !feature) return;\n\n e.stopPropagation();\n this.#dispatch(\"markerclick\", { feature, marker: olFeature as OlFeature<OlPoint> });\n return true;\n });\n },\n pointermove: (e: MapBrowserEvent<PointerEvent>) => {\n if (!this.#map) return;\n\n const enteredOlFeature = this.#map.forEachFeatureAtPixel(e.pixel, (olFeature) => {\n return olFeature.getId() ? (olFeature as OlFeature<OlPoint>) : undefined;\n });\n\n this.#map.getTargetElement().style.cursor = enteredOlFeature ? \"pointer\" : this.#indicatingReverse ? \"crosshair\" : \"\";\n\n const id = enteredOlFeature?.getId() as string | undefined;\n if (this.#prevHoveredId === id) return;\n\n if (this.#prevHoveredId) {\n const leftFeature = this.#markedFeatures?.find((f) => f.id === this.#prevHoveredId);\n const leftOlFeature = this.#markers.get(leftFeature!);\n leftOlFeature?.set(\"isMouseOver\", false);\n\n if (leftFeature && leftOlFeature) {\n this.#dispatch(\"markermouseleave\", { feature: leftFeature, marker: leftOlFeature });\n }\n }\n\n if (enteredOlFeature) {\n const enteredFeature = this.#markedFeatures?.find((f) => f.id === id);\n\n this.#dispatch(\"markermouseenter\", { feature: enteredFeature!, marker: enteredOlFeature });\n enteredOlFeature.set(\"isMouseOver\", true);\n }\n\n this.#prevHoveredId = id;\n },\n };\n\n #setElementOptions() {\n this.#element.setOptions(this.#options);\n this.#element.fetchFullGeometryOnPick = this.#options.pickedResultStyle !== \"marker-only\";\n }\n\n #addEventListeners() {\n if (!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 for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.on([type as EventTypes], listener as ListenerFunction);\n }\n }\n\n #removeEventListeners() {\n if (!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 for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.un([type as EventTypes], listener as ListenerFunction);\n }\n }\n\n #dispatch<E extends OpenLayersGeocodingControlEventName>(type: E, detail?: Omit<OpenLayersGeocodingControlEventNameMap[E], keyof OLEvent>): void {\n this.dispatchEvent(Object.assign(new OLEvent(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(picked.center, 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: Position, zoom?: number): void {\n this.#map?.getView().animate({\n center: this.#transformPositionToCoordinate(center),\n ...(zoom ? { zoom } : {}),\n duration: 2000,\n ...this.#flyToOptions,\n });\n }\n\n #fitBounds(bbox: BBox, padding: number, maxZoom?: number): void {\n this.#map?.getView().fit(transformExtent(bbox, EPSG_SYSTEM, this.#getProjection()), {\n padding: [padding, padding, padding, padding],\n ...(maxZoom ? { maxZoom } : {}),\n duration: 2000,\n ...this.#fitBoundsOptions,\n });\n }\n\n #setReverseMarker(position?: Position) {\n if (this.#options.marker === false || !this.#map || !this.#resultSource) {\n return;\n }\n\n if (!position) {\n if (this.#reverseMarker) {\n this.#resultSource.removeFeature(this.#reverseMarker);\n this.#reverseMarker.dispose();\n this.#reverseMarker = undefined;\n }\n return;\n }\n\n const coordinates = this.#transformPositionToCoordinate(position);\n\n if (!this.#reverseMarker) {\n this.#reverseMarker = new OlFeature(new OlPoint(coordinates));\n this.#reverseMarker.set(\"isReverse\", true);\n // this.#styleMarker(this.#reverseMarker);\n this.#resultSource.addFeature(this.#reverseMarker);\n return;\n }\n\n this.#reverseMarker.getGeometry()!.setCoordinates(coordinates);\n }\n\n #setFeatures(markedFeatures: Feature[] | undefined, picked: Feature | undefined): void {\n if (!this.#map || !this.#resultSource) {\n return;\n }\n\n this.#resultSource.removeFeatures([...this.#markers.values()]);\n this.#markers = new Map();\n\n const addMarker = () => {\n if (!picked || !this.#map || this.#options.marker === false) return;\n\n const marker = new OlFeature(new OlPoint(this.#transformPositionToCoordinate(picked.center)));\n marker.setId(picked.id);\n this.#markers.set(picked, marker);\n this.#resultSource?.addFeature(marker);\n };\n\n if (picked?.geometry.type === \"GeometryCollection\") {\n const polygonGeometries = picked.geometry.geometries\n .map((geometry) => (geometry.type === \"Polygon\" ? new OlPolygon(geometry.coordinates) : geometry.type === \"MultiPolygon\" ? new OlMultiPolygon(geometry.coordinates) : null))\n .filter((geometry): geometry is OlPolygon | OlMultiPolygon => Boolean(geometry));\n\n if (polygonGeometries.length > 0) {\n this.#resultSource.addFeature(new OlFeature(new OlGeometryCollection(polygonGeometries).transform(EPSG_SYSTEM, this.#getProjection())));\n } else {\n for (const geometry of picked.geometry.geometries) {\n if (geometry.type === \"LineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlLineString(geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (geometry.type === \"MultiLineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlMultiLineString(geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n }\n }\n }\n } else if (picked?.geometry.type.endsWith(\"Polygon\")) {\n const mask = getMask(picked as Feature<Polygon | MultiPolygon>);\n if (mask) {\n for (const f of mask.features) {\n const geom = f.geometry.type === \"Polygon\" ? new OlPolygon(f.geometry.coordinates) : new OlMultiPolygon(f.geometry.coordinates);\n\n this.#resultSource.addFeature(\n new OlFeature({\n isMask: !!f.properties?.isMask,\n geometry: geom.transform(EPSG_SYSTEM, this.#getProjection()),\n }),\n );\n }\n }\n if (this.#options.pickedResultStyle === \"full-geometry-including-polygon-center-marker\") {\n addMarker();\n }\n } else if (picked?.geometry.type === \"LineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlLineString(picked.geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (picked?.geometry.type === \"MultiLineString\") {\n this.#resultSource.addFeature(new OlFeature(new OlMultiLineString(picked.geometry.coordinates).transform(EPSG_SYSTEM, this.#getProjection())));\n } else if (picked?.geometry.type.endsWith(\"Point\")) {\n addMarker();\n }\n\n if (this.#options.showResultMarkers !== false) {\n for (const feature of markedFeatures ?? []) {\n if (feature.id === picked?.id || feature.place_type.includes(\"reverse\")) {\n continue;\n }\n\n const marker = new OlFeature(new OlPoint(this.#transformPositionToCoordinate(feature.center)));\n marker.setId(feature.id);\n marker.setProperties({\n fuzzy: !!feature.matching_text,\n tooltip: feature.place_type[0] === \"reverse\" ? feature.place_name : feature.place_name.replace(/,.*/, \"\"),\n });\n this.#resultSource.addFeature(marker);\n\n this.#markers.set(feature, marker);\n }\n }\n }\n\n #setSelectedMarker(feature: Feature): void {\n this.#selectedMarker?.set(\"isSelected\", false);\n this.#selectedMarker = undefined;\n\n if (this.#options.markerOnSelected !== false) {\n this.#selectedMarker = this.#markers.get(feature);\n this.#selectedMarker?.setProperties({ isSelected: true });\n }\n }\n\n #addResultLayer() {\n if (!this.#map) {\n return;\n }\n\n this.#resultSource = new VectorSource({});\n this.#resultLayer = new VectorLayer({\n updateWhileAnimating: true,\n });\n this.#resultLayer.setSource(this.#resultSource);\n this.#resultLayer.setStyle(this.#getFullGeometryStyle());\n\n this.#map.addLayer(this.#resultLayer);\n }\n\n #removeResultLayer() {\n if (!this.#map || !this.#resultLayer) {\n return;\n }\n\n this.#map.removeLayer(this.#resultLayer);\n this.#resultLayer = undefined;\n }\n\n #getProjection(): Projection | undefined {\n return getUserProjection() ?? this.#map?.getView().getProjection();\n }\n\n #transformPositionToCoordinate(position: Position): Coordinate {\n return fromLonLat(position, this.#getProjection());\n }\n\n #transformCoordinateToPosition(coordinate: Coordinate): Position {\n return toLonLat(coordinate, this.#getProjection()) as Position;\n }\n\n #getFullGeometryStyle() {\n const { fullGeometryStyle } = this.#options;\n if (fullGeometryStyle === true || fullGeometryStyle === undefined) return DEFAULT_GEOMETRY_STYLE(this.#options);\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","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","coordinates","classMap","repeat","feature","i","detail","event","external","searchValue","convert","sv","byId","exact","apiUrl","isReverse","urlObj","sp","zoom","effTypes","typeRule","effExcludeTypes","limit","effReverseGeocodingLimit","noTypes","url","featureCollection","res","e","dir","listFeature","index","query","MaptilerGeocodeMarkerElement","getMask","picked","diff","difference","polygon","bb","tolerance","leaksLeft","leaksRight","flattened","flatten","poly","ring","position","union","ZOOM_DEFAULTS","DEFAULT_GEOMETRY_STYLE","iconsBaseUrl","properties","weight","Style","Stroke","Fill","Icon","Text","EPSG_SYSTEM","OpenLayersGeocodingControl","Control","#options","#map","#element","div","#setElementOptions","map","#removeEventListeners","#removeResultLayer","#addEventListeners","#addResultLayer","#markedFeatures","#setFeatures","reverseActive","#markers","#selectedMarker","#reverseMarker","#prevIdToFly","#resultLayer","#resultSource","#prevHoveredId","#indicatingReverse","#elementEventListeners","#dispatch","#setReverseMarker","selected","#flyToEnabled","#flyTo","#computeZoom","#setSelectedMarker","#goToPicked","features","#zoomToResults","#mapEventListeners","center","#transformCoordinateToPosition","olFeature","id","f","enteredOlFeature","leftFeature","leftOlFeature","enteredFeature","OLEvent","#fitBounds","fuzzyOnly","allZoom","featZoom","zoomMap","a","category","b","#flyToOptions","#fitBoundsOptions","#transformPositionToCoordinate","padding","maxZoom","transformExtent","#getProjection","OlFeature","OlPoint","markedFeatures","addMarker","marker","polygonGeometries","geometry","OlPolygon","OlMultiPolygon","OlGeometryCollection","OlLineString","OlMultiLineString","mask","geom","VectorSource","VectorLayer","#getFullGeometryStyle","getUserProjection","fromLonLat","coordinate","toLonLat","fullGeometryStyle"],"mappings":"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"}
|