@maptiler/geocoding-control 3.0.0-rc.4 → 3.0.0-rc.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"maptilersdk.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/maplibregl-options.ts","../src/controls/maplibregl-control.ts","../src/controls/maptilersdk-control.ts"],"sourcesContent":["import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-clear-icon\")\nexport class MaptilerGeocodeClearIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 14 14\" width=\"13\" height=\"13\">\n <path\n d=\"M13.12.706a.982.982 0 0 0-1.391 0L6.907 5.517 2.087.696a.982.982 0 1 0-1.391 1.39l4.821 4.821L.696 11.73a.982.982 0 1 0 1.39 1.39l4.821-4.821 4.822 4.821a.982.982 0 1 0 1.39-1.39L8.298 6.908l4.821-4.822a.988.988 0 0 0 0-1.38Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-clear-icon\": MaptilerGeocodeClearIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-fail-icon\")\nexport class MaptilerGeocodeFailIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: #e15042;\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 0C6.705 0 0 6.705 0 15C0 23.295 6.705 30 15 30C23.295 30 30 23.295 30 15C30 6.705 23.295 0 15 0ZM22.5 20.385L20.385 22.5L15 17.115L9.615 22.5L7.5 20.385L12.885 15L7.5 9.615L9.615 7.5L15 12.885L20.385 7.5L22.5 9.615L17.115 15L22.5 20.385Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-fail-icon\": MaptilerGeocodeFailIconElement;\n }\n}\n","import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-loading-icon\")\nexport class MaptilerGeocodeLoadingIconElement extends LitElement {\n static styles = css`\n div {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n\n display: flex;\n align-items: center;\n }\n\n .loading-icon {\n animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95);\n }\n\n @keyframes rotate {\n from {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n `;\n\n render() {\n return html`\n <div>\n <svg viewBox=\"0 0 18 18\" width=\"24\" height=\"24\" class=\"loading-icon\">\n <path fill=\"#333\" d=\"M4.4 4.4l.8.8c2.1-2.1 5.5-2.1 7.6 0l.8-.8c-2.5-2.5-6.7-2.5-9.2 0z\" />\n <path opacity=\".1\" d=\"M12.8 12.9c-2.1 2.1-5.5 2.1-7.6 0-2.1-2.1-2.1-5.5 0-7.7l-.8-.8c-2.5 2.5-2.5 6.7 0 9.2s6.6 2.5 9.2 0 2.5-6.6 0-9.2l-.8.8c2.2 2.1 2.2 5.6 0 7.7z\" />\n </svg>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-loading-icon\": MaptilerGeocodeLoadingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-reverse-geocoding-icon\")\nexport class MaptilerGeocodeReverseGeocodingIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 60.006 21.412\" width=\"14\" height=\"20\">\n <path\n d=\"M30.003-26.765C13.46-26.765 0-14.158 0 1.337c0 23.286 24.535 42.952 28.39 46.04.24.192.402.316.471.376.323.282.732.424 1.142.424.41 0 .82-.142 1.142-.424.068-.06.231-.183.471-.376 3.856-3.09 28.39-22.754 28.39-46.04 0-15.495-13.46-28.102-30.003-28.102Zm1.757 12.469c4.38 0 7.858 1.052 10.431 3.158 2.595 2.105 3.89 4.913 3.89 8.422 0 2.34-.53 4.362-1.593 6.063-1.063 1.702-3.086 3.616-6.063 5.742-2.042 1.51-3.337 2.659-3.89 3.446-.532.787-.8 1.82-.8 3.096v1.914h-8.449V15.18c0-2.041.434-3.815 1.306-5.325.872-1.51 2.467-3.118 4.785-4.82 2.233-1.594 3.7-2.89 4.402-3.889a5.582 5.582 0 0 0 1.087-3.35c0-1.382-.51-2.435-1.531-3.158-1.02-.723-2.45-1.087-4.28-1.087-3.19 0-6.826 1.047-10.91 3.131l-3.472-6.986c4.742-2.659 9.77-3.992 15.087-3.992Zm-1.88 37.324c1.765 0 3.124.472 4.08 1.408.98.936 1.47 2.276 1.47 4.02 0 1.68-.49 3.007-1.47 3.985-.977.957-2.336 1.435-4.08 1.435-1.787 0-3.171-.465-4.15-1.4-.978-.958-1.47-2.298-1.47-4.02 0-1.787.48-3.14 1.436-4.054.957-.915 2.355-1.374 4.184-1.374Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-reverse-geocoding-icon\": MaptilerGeocodeReverseGeocodingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-search-icon\")\nexport class MaptilerGeocodeSearchIconElement extends LitElement {\n static styles = css`\n circle {\n stroke-width: 1.875;\n fill: none;\n }\n\n path {\n stroke-width: 1.875;\n stroke-linecap: round;\n }\n\n svg {\n display: block;\n stroke: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 13 13\"\n >\n <circle cx=\"4.789\" cy=\"4.787\" r=\"3.85\" />\n <path d=\"M12.063 12.063 7.635 7.635\" />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-search-icon\": MaptilerGeocodeSearchIconElement;\n }\n}\n","import clone from \"@turf/clone\";\nimport type { FeatureCollection, MultiPolygon, Polygon, Position } from \"geojson\";\n\nimport type { BBox } from \"../types\";\n\n// taken from Leaflet\nexport function wrapNum(x: number, range: [number, number], includeMax: boolean) {\n const max = range[1],\n min = range[0],\n d = max - min;\n\n return x === max && includeMax ? x : ((((x - min) % d) + d) % d) + min;\n}\n\nexport function unwrapBbox(bbox0: BBox): BBox {\n const bbox = [...bbox0] satisfies BBox;\n\n if (bbox[2] < bbox[0]) {\n if (Math.abs((bbox[0] + bbox[2] + 360) / 2) > Math.abs((bbox[0] - 360 + bbox[2]) / 2)) {\n bbox[0] -= 360;\n } else {\n bbox[2] += 360;\n }\n }\n\n return bbox;\n}\n\nexport function shiftPolyCollection(featureCollection: FeatureCollection<Polygon | MultiPolygon>, distance: number): FeatureCollection<Polygon | MultiPolygon> {\n const cloned = clone(featureCollection);\n\n for (const feature of cloned.features) {\n if (feature.geometry.type == \"MultiPolygon\") {\n for (const poly of feature.geometry.coordinates) {\n shiftPolyCoords(poly, distance);\n }\n } else {\n shiftPolyCoords(feature.geometry.coordinates, distance);\n }\n }\n\n return cloned;\n}\n\nexport function shiftPolyCoords(coordinates: Position[][], distance: number) {\n for (const ring of coordinates) {\n for (const position of ring) {\n position[0] += distance;\n }\n }\n}\n","import type { ProximityRule } from \"../types\";\n\nlet cachedLocation: { time: number; coords: undefined | string } | undefined;\n\nexport async function getProximity(centerAndZoom: [zoom: number, lon: number, lat: number] | undefined, proximity: ProximityRule[] | null | undefined, ac: AbortController) {\n for (const rule of proximity ?? []) {\n if (centerAndZoom && ((rule.minZoom != undefined && rule.minZoom > centerAndZoom[0]) || (rule.maxZoom != undefined && rule.maxZoom < centerAndZoom[0]))) {\n continue;\n }\n\n if (rule.type === \"fixed\") {\n return rule.coordinates.join(\",\");\n }\n\n if (rule.type === \"client-geolocation\") {\n if (cachedLocation && rule.cachedLocationExpiry && cachedLocation.time + rule.cachedLocationExpiry > Date.now()) {\n if (cachedLocation.coords) {\n return cachedLocation.coords;\n }\n } else {\n let coords: string | undefined;\n\n try {\n coords = await new Promise<string>((resolve, reject) => {\n ac.signal.addEventListener(\"abort\", () => {\n reject(Error(\"aborted\"));\n });\n\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n resolve([pos.coords.longitude, pos.coords.latitude].map((c) => c.toFixed(6)).join(\",\"));\n },\n (err) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(err);\n },\n rule,\n );\n });\n\n return coords;\n } catch {\n // ignore\n } finally {\n if (rule.cachedLocationExpiry) {\n cachedLocation = {\n time: Date.now(),\n coords,\n };\n }\n }\n\n if (ac.signal.aborted) {\n return;\n }\n }\n }\n\n if (rule.type === \"server-geolocation\") {\n return \"ip\";\n }\n\n if (centerAndZoom && rule.type === \"map-center\") {\n return centerAndZoom[1].toFixed(6) + \",\" + centerAndZoom[2].toFixed(6);\n }\n }\n}\n","/* eslint-disable\n@typescript-eslint/no-unnecessary-condition,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-call,\n @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/restrict-template-expressions,\n @typescript-eslint/unbound-method,\n*/\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nimport type { Feature, ShowPlaceType } from \"../types\";\nimport styles from \"./geocoder-feature-item.css?inline\";\n\ntype SpriteIcon = { width: number; height: number; x: number; y: number };\n\nconst hidpi = typeof devicePixelRatio === \"undefined\" || devicePixelRatio > 1.25;\n\nconst scaleUrl = hidpi ? \"@2x\" : \"\";\n\nconst scaleFactor = hidpi ? 2 : 1;\n\nlet sprites: undefined | null | { width: number; height: number; icons: Record<string, SpriteIcon> };\n\nlet spritePromise: Promise<void> | undefined;\n\n@customElement(\"maptiler-geocoder-feature-item\")\nexport class MaptilerGeocoderFeatureItemElement extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ type: Object }) feature?: Feature;\n @property({ type: String }) itemStyle: \"selected\" | \"picked\" | \"default\" = \"default\";\n @property({ type: String }) showPlaceType: ShowPlaceType = \"if-needed\";\n @property({ attribute: false }) missingIconsCache: Set<string> = new Set<string>();\n @property({ type: String }) iconsBaseUrl: string = \"\";\n\n get #categories() {\n return this.feature?.properties?.categories;\n }\n get #isReverse() {\n return this.feature?.place_type[0] === \"reverse\";\n }\n get #placeType() {\n return this.feature?.properties?.categories?.join(\", \") ?? this.feature?.place_type_name?.[0] ?? this.feature?.place_type[0];\n }\n\n @state() private category: string | undefined;\n @state() private imageUrl: string | undefined;\n @state() private spriteIcon: SpriteIcon | undefined;\n @state() private index: number = 0;\n\n #loadSprites() {\n spritePromise ??= fetch(`${this.iconsBaseUrl}sprite${scaleUrl}.json`)\n .then((response) => response.json())\n .then((data) => {\n sprites = data;\n })\n .catch(() => {\n sprites = null;\n });\n }\n\n #handleImgError() {\n if (this.imageUrl) {\n this.missingIconsCache.add(this.imageUrl);\n }\n\n this.#loadIcon();\n }\n\n #loadIcon() {\n if (sprites !== undefined) {\n this.#loadIcon2();\n } else {\n this.#loadSprites();\n\n void spritePromise?.then(() => {\n this.#loadIcon2();\n });\n }\n }\n\n #loadIcon2() {\n do {\n this.index--;\n\n this.category = this.#categories?.[this.index];\n\n this.spriteIcon = this.category ? sprites?.icons[this.category] : undefined;\n\n if (this.spriteIcon) {\n break;\n }\n\n this.imageUrl = this.category ? this.iconsBaseUrl + this.category.replace(/ /g, \"_\") + \".svg\" : undefined;\n } while (this.index > -1 && (!this.imageUrl || this.missingIconsCache.has(this.imageUrl)));\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"feature\") && this.#categories) {\n this.index = this.#categories.length;\n this.#loadIcon();\n }\n }\n\n render() {\n return html`\n <li\n tabindex=\"-1\"\n role=\"option\"\n aria-selected=${this.itemStyle === \"selected\"}\n aria-checked=${this.itemStyle === \"picked\"}\n class=${this.itemStyle}\n @click=${() => this.dispatchEvent(new CustomEvent(\"select\"))}\n >\n ${sprites && this.spriteIcon\n ? html`\n <div\n class=\"sprite-icon\"\n style=${styleMap({\n width: `${this.spriteIcon.width / scaleFactor}px`,\n height: `${this.spriteIcon.height / scaleFactor}px`,\n backgroundImage: `url(${this.iconsBaseUrl}sprite${scaleUrl}.png)`,\n backgroundPosition: `-${this.spriteIcon.x / scaleFactor}px -${this.spriteIcon.y / scaleFactor}px`,\n backgroundSize: `${sprites.width / scaleFactor}px ${sprites.height / scaleFactor}px`,\n })}\n title=${this.#placeType}\n />\n `\n : this.imageUrl\n ? html` <img src=${this.imageUrl} alt=${this.category} title=${this.#placeType} @error=${this.#handleImgError} />`\n : this.feature?.address\n ? html` <img src=${this.iconsBaseUrl + \"housenumber.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"road.\")\n ? html` <img src=${this.iconsBaseUrl + \"road.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"address.\")\n ? html` <img src=${this.iconsBaseUrl + \"street.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"postal_code.\")\n ? html` <img src=${this.iconsBaseUrl + \"postal_code.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"poi.\")\n ? html` <img src=${this.iconsBaseUrl + \"poi.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.#isReverse\n ? html` <img src=${this.iconsBaseUrl + \"reverse.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : html` <img src=${this.iconsBaseUrl + \"area.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `}\n\n <span class=\"texts\">\n <span>\n <span class=\"primary\"> ${this.#isReverse ? this.feature?.place_name : this.feature?.place_name.replace(/,.*/, \"\")} </span>\n\n ${this.showPlaceType === \"always\" ||\n (this.showPlaceType !== \"never\" &&\n !this.feature?.address &&\n !this.feature?.id.startsWith(\"road.\") &&\n !this.feature?.id.startsWith(\"address.\") &&\n !this.feature?.id.startsWith(\"postal_code.\") &&\n (!this.feature?.id.startsWith(\"poi.\") || !this.imageUrl) &&\n !this.#isReverse)\n ? html` <span class=\"secondary\"> ${this.#placeType} </span> `\n : nothing}\n </span>\n\n <span class=\"line2\"> ${this.#isReverse ? this.feature?.text : this.feature?.place_name.replace(/[^,]*,?s*/, \"\")} </span>\n </span>\n </li>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder-feature-item\": MaptilerGeocoderFeatureItemElement;\n }\n}\n","import { convert } from \"geo-coordinates-parser\";\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\n\nimport type { BBox, EnableReverse, Feature, FeatureCollection, ProximityRule, ShowPlaceType, TypeRule, Worldview } from \"../types\";\nimport { wrapNum } from \"../utils/geo-utils\";\nimport { getProximity } from \"../utils/proximity\";\n\nimport \"../components/clear-icon\";\nimport \"../components/fail-icon\";\nimport \"../components/loading-icon\";\nimport \"../components/reverse-geocoding-icon\";\nimport \"../components/search-icon\";\nimport \"./geocoder-feature-item\";\n\nimport type { MaptilerGeocoderEventName, MaptilerGeocoderEventNameMap } from \"./geocoder-events\";\nimport type { MaptilerGeocoderOptions } from \"./geocoder-options\";\nimport styles from \"./geocoder.css?inline\";\n\n@customElement(\"maptiler-geocoder\")\nexport class MaptilerGeocoderElement extends LitElement implements MaptilerGeocoderOptions {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ attribute: false }) adjustUrl?: (url: URL) => void;\n @property({ type: String }) apiKey?: string;\n @property({ type: String }) apiUrl?: string;\n @property({ type: Array }) bbox?: BBox;\n @property({ type: String }) clearButtonTitle?: string;\n @property({ type: Boolean }) clearListOnPick: boolean = false;\n @property({ type: Boolean }) clearOnBlur: boolean = false;\n @property({ type: Boolean }) collapsed: boolean = false;\n @property({ attribute: false }) country?: string | string[];\n @property({ type: Number }) debounceSearch?: number;\n @property({ type: String }) enableReverse?: EnableReverse;\n @property({ type: String }) errorMessage?: string;\n @property({ type: Boolean }) excludeTypes: boolean = false;\n @property({ type: Boolean }) exhaustiveReverseGeocoding: boolean = false;\n @property({ type: Boolean }) fetchFullGeometryOnPick: boolean = false;\n @property({ type: Object }) fetchParameters?: RequestInit;\n @property({ attribute: false }) filter?: (feature: Feature) => boolean;\n @property({ type: Object }) fuzzyMatch?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) iconsBaseUrl?: string;\n @property({ type: Boolean }) keepListOpen: boolean = false;\n @property({ attribute: false }) language?: string | string[] | null;\n @property({ type: Number }) limit?: number;\n @property({ type: Number }) minLength?: number;\n @property({ type: String }) noResultsMessage?: string;\n @property({ type: Boolean }) openListOnTop: boolean = false;\n @property({ type: String }) placeholder?: string;\n @property({ type: Array }) proximity?: ProximityRule[] | null;\n @property({ type: Boolean }) reverseActive: boolean = false;\n @property({ type: String }) reverseButtonTitle?: string;\n @property({ type: Object }) reverseGeocodingExcludeTypes?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Number }) reverseGeocodingLimit?: number;\n @property({ type: Array }) reverseGeocodingTypes?: TypeRule[];\n @property({ type: Object }) selectFirst?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) showPlaceType?: ShowPlaceType;\n @property({ type: Object }) showResultsWhileTyping?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Array }) types?: TypeRule[];\n @property({ type: String }) worldview?: Worldview;\n\n /** Reference to the input element the user can type a query into */\n @query(\"input\") private input!: HTMLInputElement;\n\n /** Value to search via geocoding */\n @state() private searchValue: string = \"\";\n /** Features found via geocoding */\n @state() private listFeatures?: Feature[];\n /** Index of item currently selected from the list of found features */\n @state() private selectedItemIndex: number = -1;\n /** Feature that has been picked by the user */\n @state() private picked?: Feature;\n /** Cached found features to be used to restore the features when loading more data for picked feature */\n @state() private cachedFeatures: Feature[] = [];\n /** Effectively a cache key for cached features */\n @state() private lastSearchUrl: string = \"\";\n /** Last error that happened in geocoding, to be shown to user */\n @state() private error: unknown;\n /** AbortController instance used to potentially cancel the current geocoding request*/\n @state() private abortController?: AbortController;\n /** Focus state of input element */\n @state() private focused: boolean = false;\n /** Focus state of input element, delayed for a moment to not close feature list immediately after losing focus */\n @state() private focusedDelayed: boolean = false;\n\n /** Helps to trigger logic only after this instance gets fully initialized */\n #isInitialized = false;\n /** Helps to trigger logic running when feature list hides only after it gets opened for the first time */\n #wasFeatureListVisible = false;\n /** Timeout ref for debouncing logic */\n #searchTimeoutRef?: number;\n /** Cache for URLs of icons that couldn't be loaded for any reason, as to not try them again unnecessarily */\n #missingIconsCache = new Set<string>();\n /** Center and zoom of a map potentially connected to this instance */\n #centerAndZoom: [zoom: number, lon: number, lat: number] | undefined;\n\n get #selected(): Feature | undefined {\n return this.listFeatures?.[this.selectedItemIndex];\n }\n get #isFeatureListVisible(): boolean {\n return !!this.listFeatures?.length && (this.focusedDelayed || this.keepListOpen);\n }\n get #isLoading(): boolean {\n return this.abortController !== undefined;\n }\n get #isSearchValueTooShort(): boolean {\n return this.searchValue.length < (this.minLength ?? 2);\n }\n\n protected firstUpdated() {\n this.#isInitialized = true;\n }\n\n /**\n * Set the options of this instance.\n *\n * @param options options to set\n */\n setOptions(options: Partial<MaptilerGeocoderOptions>) {\n const elementOptions = { ...options };\n for (const prop of Object.keys(elementOptions) as Array<keyof MaptilerGeocoderOptions>) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n if (!propertyNames.includes(prop)) delete elementOptions[prop];\n }\n Object.assign(this, elementOptions);\n }\n\n /**\n * Set the content of search input box.\n *\n * @param value text to set\n */\n setQuery(value: string) {\n this.#changeSearchValue(value);\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 })\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) {\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).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 }: undefined | { byId?: boolean; exact?: 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 });\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 });\n\n this.cachedFeatures = this.listFeatures;\n\n if (this.listFeatures[this.selectedItemIndex]?.id !== this.#selected?.id) {\n this.selectedItemIndex = -1;\n }\n\n if (isReverse) {\n this.input.focus();\n }\n }\n } catch (e: unknown) {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") {\n return;\n }\n\n throw e;\n } finally {\n if (ac === this.abortController) {\n this.abortController = undefined;\n }\n }\n }\n\n #handleReverse(coordinates: [lng: number, lat: number]) {\n this.reverseActive = this.enableReverse === \"always\";\n\n this.#clearFeatures();\n this.picked = undefined;\n\n this.#submitSearchValue(`${coordinates[1].toFixed(6)}, ${wrapNum(coordinates[0], [-180, 180], true).toFixed(6)}`);\n this.#focusInputAndSelectText();\n }\n\n #handleKeyDown(e: KeyboardEvent) {\n if (!this.listFeatures) {\n return;\n }\n\n const dir = e.key === \"ArrowDown\" ? 1 : e.key === \"ArrowUp\" ? -1 : 0;\n\n if (!dir) {\n return;\n }\n\n this.input.focus();\n\n this.focused = true;\n\n e.preventDefault();\n\n if (this.picked && this.selectedItemIndex === -1) {\n this.selectedItemIndex = this.listFeatures.findIndex((listFeature) => listFeature.id === this.picked?.id);\n }\n\n if (this.selectedItemIndex === (this.picked || this.selectFirst !== false ? 0 : -1) && dir === -1) {\n this.selectedItemIndex = this.listFeatures.length;\n }\n\n this.selectedItemIndex += dir;\n\n if (this.selectedItemIndex >= this.listFeatures.length) {\n this.selectedItemIndex = -1;\n }\n\n if (this.selectedItemIndex < 0 && (this.picked || this.selectFirst !== false)) {\n this.selectedItemIndex = 0;\n }\n }\n\n #handleInput(event: InputEvent & { target: HTMLInputElement }) {\n this.#changeSearchValue(event.target.value);\n }\n\n #pick(feature: Feature) {\n if (!this.picked || this.picked.id !== feature.id) {\n this.picked = feature;\n this.searchValue = feature.place_name;\n }\n }\n\n #handleMouseEnter(index: number) {\n this.selectedItemIndex = index;\n }\n\n #handleMouseLeave() {\n if (!this.selectFirst !== false || this.picked) {\n this.selectedItemIndex = -1;\n }\n }\n\n #handleClear() {\n this.searchValue = \"\";\n this.#dispatch(\"queryclear\");\n\n this.picked = undefined;\n this.input.focus();\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"error\") && this.error) {\n console.error(\"[MapTilerGeocodingControl] Error:\", this.error);\n }\n\n if (changedProperties.has(\"enableReverse\")) {\n this.reverseActive = this.enableReverse === \"always\";\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked) {\n if (this.clearListOnPick) {\n this.#clearFeatures();\n }\n\n this.selectedItemIndex = -1;\n }\n }\n\n if ([\"searchValue\", \"minLength\"].some((prop) => changedProperties.has(prop)) && this.#isSearchValueTooShort) {\n this.#clearFeatures();\n this.error = undefined;\n }\n\n if ([\"focused\"].some((prop) => changedProperties.has(prop))) {\n setTimeout(() => {\n this.focusedDelayed = this.focused;\n\n // close dropdown in the next cycle so that the selected item event has the chance to fire\n if (this.clearOnBlur && !this.focused) {\n this.searchValue = \"\";\n }\n }, 100);\n }\n\n if (\n [\"selectFirst\", \"listFeatures\", \"selectedItemIndex\", \"picked\"].some((prop) => changedProperties.has(prop)) &&\n this.selectFirst !== false &&\n this.listFeatures?.length &&\n this.selectedItemIndex == -1 &&\n !this.picked\n ) {\n this.selectedItemIndex = 0;\n }\n\n if ([\"listFeatures\", \"selectedItemIndex\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"select\", { feature: this.#selected });\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked && this.picked.id !== (changedProperties.get(\"picked\") as Feature | undefined)?.id) {\n (this.fetchFullGeometryOnPick && !this.picked.address && this.picked.geometry.type === \"Point\" && this.picked.place_type[0] !== \"reverse\"\n ? this.#search(this.picked.id, { byId: true })\n : Promise.resolve()\n ).then(\n () => {\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n (e: unknown) => {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") return;\n this.error = e;\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n );\n }\n }\n\n if ([\"listFeatures\", \"focusedDelayed\"].some((prop) => changedProperties.has(prop))) {\n if (this.#isFeatureListVisible) {\n this.#dispatch(\"featuresshow\");\n this.#wasFeatureListVisible = true;\n } else if (this.#wasFeatureListVisible) {\n this.#dispatch(\"featureshide\");\n }\n }\n\n if ([\"reverseActive\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"reversetoggle\", { reverse: this.reverseActive });\n }\n }\n\n render() {\n /* eslint-disable @typescript-eslint/unbound-method */\n return html`\n <form @submit=${this.#handleSubmit} class=${classMap({ \"can-collapse\": this.collapsed && this.searchValue === \"\" })}>\n <div class=\"input-group\">\n <button\n class=\"search-button\"\n type=\"button\"\n @click=${() => {\n this.input.focus();\n }}\n >\n <maptiler-geocode-search-icon></maptiler-geocode-search-icon>\n </button>\n\n <input\n .value=${this.searchValue}\n @focus=${() => (this.focused = true)}\n @blur=${() => (this.focused = false)}\n @click=${() => (this.focused = true)}\n @keydown=${this.#handleKeyDown}\n @input=${this.#handleInput}\n @change=${() => (this.picked = undefined)}\n placeholder=${this.placeholder ?? \"Search\"}\n aria-label=${this.placeholder ?? \"Search\"}\n />\n\n <div class=\"clear-button-container ${classMap({ displayable: this.searchValue !== \"\" })}\">\n ${!this.#isLoading\n ? html`\n <button type=\"button\" @click=${this.#handleClear} title=${this.clearButtonTitle ?? \"clear\"}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n `\n : html`<maptiler-geocode-loading-icon></maptiler-geocode-loading-icon>`}\n </div>\n\n ${this.enableReverse === \"button\"\n ? html`\n <button\n type=\"button\"\n class=${classMap({ active: this.reverseActive })}\n title=${this.reverseButtonTitle ?? \"toggle reverse geocoding\"}\n @click=${() => (this.reverseActive = !this.reverseActive)}\n >\n <maptiler-geocode-reverse-geocoding-icon></maptiler-geocode-reverse-geocoding-icon>\n </button>\n `\n : nothing}\n\n <!-- <slot /> -->\n </div>\n\n ${this.error\n ? html`\n <div class=\"error\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>${this.errorMessage ?? \"Something went wrong…\"}</div>\n\n <button @click=${() => (this.error = undefined)}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n </div>\n `\n : (!this.focusedDelayed && !this.keepListOpen) || this.listFeatures === undefined\n ? nothing\n : this.listFeatures.length === 0\n ? html`\n <div class=\"no-results\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>\n ${this.noResultsMessage ??\n \"Oops! Looks like you're trying to predict something that's not quite right. We can't seem to find what you're looking for. Maybe try double-checking your spelling or try a different search term. Keep on typing - we'll do our best to get you where you need to go!\"}\n </div>\n </div>\n `\n : html`\n <ul class=\"options ${classMap({ \"open-on-top\": this.openListOnTop })}\" @mouseleave=${this.#handleMouseLeave} @keydown=${this.#handleKeyDown} role=\"listbox\">\n ${repeat(\n this.listFeatures,\n (feature) => feature.id + (feature.address ? \",\" + feature.address : \"\"),\n (feature, i) => html`\n <maptiler-geocoder-feature-item\n .feature=${feature}\n .showPlaceType=${this.showPlaceType ?? \"if-needed\"}\n itemStyle=${this.selectedItemIndex === i ? \"selected\" : this.picked?.id === feature.id ? \"picked\" : \"default\"}\n @mouseenter=${() => {\n this.#handleMouseEnter(i);\n }}\n @select=${() => {\n this.#pick(feature);\n }}\n .missingIconsCache=${this.#missingIconsCache}\n .iconsBaseUrl=${this.iconsBaseUrl ?? `https://cdn.maptiler.com/maptiler-geocoding-control/v${import.meta.env.VITE_LIB_VERSION}/icons/`}\n >\n ${feature.place_name}\n </maptiler-geocoder-feature-item>\n `,\n )}\n </ul>\n `}\n </form>\n `;\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder\": MaptilerGeocoderElement;\n }\n}\n\nconst propertyNames = [\n \"adjustUrl\",\n \"apiKey\",\n \"apiUrl\",\n \"bbox\",\n \"clearButtonTitle\",\n \"clearListOnPick\",\n \"clearOnBlur\",\n \"collapsed\",\n \"country\",\n \"debounceSearch\",\n \"enableReverse\",\n \"errorMessage\",\n \"excludeTypes\",\n \"reverseGeocodingExcludeTypes\",\n \"exhaustiveReverseGeocoding\",\n \"fetchParameters\",\n \"fetchFullGeometryOnPick\",\n \"filter\",\n \"fuzzyMatch\",\n \"iconsBaseUrl\",\n \"keepListOpen\",\n \"language\",\n \"limit\",\n \"reverseGeocodingLimit\",\n \"minLength\",\n \"noResultsMessage\",\n \"openListOnTop\",\n \"placeholder\",\n \"proximity\",\n \"reverseActive\",\n \"reverseButtonTitle\",\n \"selectFirst\",\n \"showPlaceType\",\n \"showResultsWhileTyping\",\n \"types\",\n \"reverseGeocodingTypes\",\n \"worldview\",\n] as const satisfies readonly (keyof MaptilerGeocoderOptions)[];\n","import { LitElement, css, svg, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\nimport styles from \"./marker.css?inline\";\n\n@customElement(\"maptiler-geocode-marker\")\nexport class MaptilerGeocodeMarkerElement extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n render() {\n return svg`\n <svg\n viewBox=\"0 0 70 85\"\n fill=\"none\"\n class:in-map={displayIn !== \"list\"}\n >\n <path\n stroke-width=\"4\"\n d=\"M 5,33.103579 C 5,17.607779 18.457,5 35,5 C 51.543,5 65,17.607779 65,33.103579 C 65,56.388679 40.4668,76.048179 36.6112,79.137779 C 36.3714,79.329879 36.2116,79.457979 36.1427,79.518879 C 35.8203,79.800879 35.4102,79.942779 35,79.942779 C 34.5899,79.942779 34.1797,79.800879 33.8575,79.518879 C 33.7886,79.457979 33.6289,79.330079 33.3893,79.138079 C 29.5346,76.049279 5,56.389379 5,33.103579 Z M 35.0001,49.386379 C 43.1917,49.386379 49.8323,42.646079 49.8323,34.331379 C 49.8323,26.016779 43.1917,19.276479 35.0001,19.276479 C 26.8085,19.276479 20.1679,26.016779 20.1679,34.331379 C 20.1679,42.646079 26.8085,49.386379 35.0001,49.386379 Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-marker\": MaptilerGeocodeMarkerElement;\n }\n}\n","import bbox from \"@turf/bbox\";\nimport difference from \"@turf/difference\";\nimport flatten from \"@turf/flatten\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { Feature, FeatureCollection, MultiPolygon, Polygon } from \"geojson\";\nimport type { BBox } from \"../types\";\nimport { unwrapBbox } from \"./geo-utils\";\n\nexport function getMask(picked: Feature<Polygon | MultiPolygon>): FeatureCollection<Polygon | MultiPolygon> | undefined {\n const diff = difference(\n featureCollection([\n polygon([\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ]),\n picked,\n ]),\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: true };\n\n const bb = unwrapBbox(bbox(picked) as BBox);\n\n // bigger features (continents, oceans) have bigger tolerance\n // because of the used source data simplification\n const tolerance = (bb[2] - bb[0]) / 360 / 1_000;\n\n const leaksLeft = bb[0] < -180;\n const leaksRight = bb[2] > 180;\n\n const flattened = flatten(picked);\n\n if (flattened.features.length > 1 && (leaksLeft || leaksRight)) {\n for (const poly of flattened.features) {\n const bb = unwrapBbox(bbox(poly) as BBox);\n\n if (leaksRight && bb[0] < -180 + tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] += 360 - tolerance;\n }\n }\n }\n\n if (leaksLeft && bb[2] > 180 - tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] -= 360 - tolerance;\n }\n }\n }\n }\n }\n\n return featureCollection([flattened.features.length < 2 ? picked : (union(flattened) ?? picked), diff]);\n}\n","import maplibregl from \"maplibre-gl\";\n\ntype FillLayerSpecification = maplibregl.FillLayerSpecification;\ntype FitBoundsOptions = maplibregl.FitBoundsOptions;\ntype FlyToOptions = maplibregl.FlyToOptions;\ntype LineLayerSpecification = maplibregl.LineLayerSpecification;\ntype Marker = maplibregl.Marker;\ntype MarkerOptions = maplibregl.MarkerOptions;\ntype MLMap = maplibregl.Map;\n\nimport type { MaptilerGeocoderOptions } from \"../geocoder/geocoder-options\";\nimport type { Feature, PickedResultStyle } from \"../types\";\n\nexport type MaplibreglGeocodingControlOptions = Omit<MaptilerGeocoderOptions, \"apiKey\" | \"fetchFullGeometryOnPick\"> & {\n /**\n * Maptiler API key. Optional if used with MapTiler SDK - if not specified, the control will use the same API key as the map uses.\n */\n apiKey?: string;\n\n /**\n * Marker to be added to the map at the location of the user-selected result using a default set of Marker options.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MarkerOptions/) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/).\n * Function can accept `Feature` as a parameter which is `undefined` for the reverse location marker.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n marker?: null | boolean | MarkerOptions | ((map: MLMap, feature?: Feature) => undefined | null | Marker);\n\n /**\n * Displays a marker on the selected feature from the result list. `marker` must be enabled in any way for this to display.\n *\n * Default: `true`.\n */\n markerOnSelected?: boolean;\n\n /**\n * Marker be added to the map at the location the geocoding results.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MarkerOptions/) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/).\n * In this case the default pop-up won't be added to the marker.\n * Function can accept `Feature` as a parameter.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n showResultMarkers?: null | boolean | MarkerOptions | ((map: MLMap, feature: Feature) => undefined | null | Marker);\n\n /**\n * Animation to picked feature on the map.\n *\n * - If `false` or `null` then animating the map to a selected result is disabled.\n * - If `true` or `undefined` then animating the map will use the default animation parameters.\n * - If an [FlyToOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/FlyToOptions/)\n * ` & `[FitBoundsOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/FitBoundsOptions/)\n * then it will be passed as options to the map [flyTo](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#flyto)\n * or [fitBounds](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#fitbounds) method providing control over the animation of the transition.\n *\n * Default value is `true`.\n */\n flyTo?: null | boolean | (FlyToOptions & FitBoundsOptions);\n\n /**\n * Specifies if selected (not picked) feature should be also animated to on the map.\n *\n * Default: `false`.\n */\n flyToSelected?: boolean;\n\n /**\n * Style for full feature geometry GeoJSON.\n *\n * - If `false` or `null` then no full geometry is drawn.\n * - If `true` or `undefined` then default-styled full geometry is drawn.\n * - If an T then it must represent the style and will be used to style the full geometry.\n *\n * Default is the default style.\n */\n fullGeometryStyle?: null | boolean | Partial<FullGeometryStyle>;\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};\n\nexport type FullGeometryStyle = {\n fill: Pick<FillLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n line: Pick<LineLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n};\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: FullGeometryStyle = {\n fill: {\n paint: {\n \"fill-color\": \"#000\",\n \"fill-opacity\": 0.1,\n },\n filter: [\"all\", [\"==\", [\"geometry-type\"], \"Polygon\"], [\"has\", \"isMask\"]],\n },\n line: {\n layout: {\n \"line-cap\": \"square\",\n },\n paint: {\n \"line-width\": [\"case\", [\"==\", [\"geometry-type\"], \"Polygon\"], 2, 3],\n \"line-dasharray\": [1, 1],\n \"line-color\": \"#3170fe\",\n },\n filter: [\"!\", [\"has\", \"isMask\"]],\n },\n};\n\nexport const RESULT_SOURCE = \"mtlr-gc-full-geom\";\nexport const RESULT_LAYER_FILL = \"mtlr-gc-full-geom-fill\";\nexport const RESULT_LAYER_LINE = \"mtlr-gc-full-geom-line\";\n","import { feature, featureCollection } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { GeoJSON, LineString, MultiLineString, MultiPolygon, Polygon } from \"geojson\";\nimport maplibregl from \"maplibre-gl\";\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 {\n FeaturesListedEvent,\n MaptilerGeocoderEventName,\n MaptilerGeocoderEventNameMap,\n PickEvent,\n QueryChangeEvent,\n RequestEvent,\n ResponseEvent,\n ReverseToggleEvent,\n SelectEvent,\n} from \"../geocoder/geocoder-events\";\nimport type { GeocodingControlBase } from \"./base-control\";\n\nimport \"../components/marker\";\n\nimport type { MaplibreglGeocodingControlEventName, MaplibreglGeocodingControlEventNameMap } from \"./maplibregl-events\";\nimport { DEFAULT_GEOMETRY_STYLE, type MaplibreglGeocodingControlOptions, RESULT_LAYER_FILL, RESULT_LAYER_LINE, RESULT_SOURCE, ZOOM_DEFAULTS } from \"./maplibregl-options\";\n\nconst Evented = maplibregl.Evented;\nconst Marker = maplibregl.Marker;\nconst Popup = maplibregl.Popup;\ntype Evented = maplibregl.Evented;\ntype GeoJSONSource = maplibregl.GeoJSONSource;\ntype IControl = maplibregl.IControl;\ntype MapMouseEvent = maplibregl.MapMouseEvent;\ntype Marker = maplibregl.Marker;\ntype MarkerOptions = maplibregl.MarkerOptions;\ntype MLMap = maplibregl.Map;\ntype MLEvent = Extract<Parameters<Evented[\"fire\"]>[0], object>;\ntype Subscription = maplibregl.Subscription;\n\ntype EventHandlingMethod<Return> = <Type extends MaplibreglGeocodingControlEventName>(\n type: Type,\n listener: (event: MaplibreglGeocodingControlEventNameMap[Type]) => void,\n) => Return;\ninterface EventOnceHandlingMethod<Return> {\n <Type extends MaplibreglGeocodingControlEventName>(type: Type, listener: (event: MaplibreglGeocodingControlEventNameMap[Type]) => void): Return;\n <Type extends MaplibreglGeocodingControlEventName>(type: Type, listener?: undefined): Promise<MaplibreglGeocodingControlEventNameMap[Type]>;\n}\n\nexport class MaplibreglGeocodingControl extends Evented implements IControl, GeocodingControlBase<MaplibreglGeocodingControlOptions> {\n #options: MaplibreglGeocodingControlOptions = {};\n #map?: MLMap;\n #element?: MaptilerGeocoderElement;\n\n constructor(options: MaplibreglGeocodingControlOptions = {}) {\n super();\n this.setOptions(options);\n }\n\n /** @internal Not to be called directly */\n onAdd(map: MLMap): HTMLElement {\n this.#map = map;\n this.#element = map._container.ownerDocument.createElement(\"maptiler-geocoder\");\n this.#element.classList.add(\"maplibregl-geocoder\");\n\n this.#setElementOptions();\n this.#addEventListeners();\n\n const div = map._container.ownerDocument.createElement(\"div\");\n div.classList.add(\"maplibregl-ctrl-geocoder\", \"maplibregl-ctrl\", \"maplibregl-ctrl-group\");\n div.style.position = \"relative\";\n div.style.zIndex = \"3\";\n div.appendChild(this.#element as Node);\n setTimeout(() => this.#element?.setOptions({ openListOnTop: div.matches(\".maplibregl-ctrl-bottom-left *, .maplibregl-ctrl-bottom-right *\") }));\n return div;\n }\n\n /** @internal Not to be called directly */\n onRemove(): void {\n this.#removeEventListeners();\n this.#map = undefined;\n this.#element = undefined;\n }\n\n getOptions(): MaplibreglGeocodingControlOptions {\n return { ...this.#options };\n }\n\n setOptions(options: MaplibreglGeocodingControlOptions) {\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<Subscription>;\n declare off: EventHandlingMethod<this>;\n declare once: EventOnceHandlingMethod<this>;\n\n /** Markers currently displayed on the map */\n #markers = new Map<Feature, Marker>();\n /** Marker representing the selected feature */\n #selectedMarker: Marker | undefined;\n /** Marker representing the picked feature */\n #reverseMarker: Marker | undefined;\n /** Features currently marked on the map */\n #markedFeatures?: Feature[];\n /** Used to restore features on style switch */\n #savedData: GeoJSON | undefined;\n /** Remember last feature that the map flew to as to not do it again */\n #prevIdToFly?: string;\n\n #elementEventListeners: { [EventName in MaptilerGeocoderEventName]: (e: MaptilerGeocoderEventNameMap[EventName]) => void } = {\n reversetoggle: (event: ReverseToggleEvent) => {\n const canvasContainer = this.#map?.getCanvasContainer();\n if (canvasContainer) {\n canvasContainer.style.cursor = event.detail.reverse ? \"crosshair\" : \"\";\n }\n this.#dispatch(\"reversetoggle\", event.detail);\n },\n querychange: (event: 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: RequestEvent) => {\n this.#dispatch(\"request\", event.detail);\n },\n response: (event: ResponseEvent) => {\n this.#dispatch(\"response\", event.detail);\n },\n select: (event: 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: 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: FeaturesListedEvent) => {\n const features = event.detail.features;\n this.#markedFeatures = features;\n this.#setFeatures(this.#markedFeatures, undefined);\n this.#zoomToResults(features);\n this.#dispatch(\"featureslisted\", event.detail);\n },\n featuresclear: () => {\n this.#markedFeatures = undefined;\n this.#setFeatures(undefined, undefined);\n this.#dispatch(\"featuresclear\");\n },\n focusin: () => {\n this.#dispatch(\"focusin\");\n },\n focusout: () => {\n this.#dispatch(\"focusout\");\n },\n };\n #mapEventListeners = {\n render: () => {\n const zoom = this.#map?.getZoom();\n const center = this.#map?.getCenter();\n this.#element?.handleMapChange(zoom && center ? [zoom, center.lng, center.lat] : undefined);\n },\n click: (e: MapMouseEvent) => {\n this.#element?.handleMapClick([e.lngLat.lng, e.lngLat.lat]);\n },\n styledata: () => {\n setTimeout(() => {\n if (this.#savedData) {\n this.#syncFullGeometryLayer();\n }\n });\n },\n };\n\n #setElementOptions() {\n if (!this.#element) return;\n\n this.#element.setOptions(this.#options);\n this.#element.fetchFullGeometryOnPick = this.#options.pickedResultStyle !== \"marker-only\";\n }\n\n #addEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.addEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.on(type, listener);\n }\n }\n\n #removeEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.removeEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.off(type, listener);\n }\n }\n\n #dispatch<E extends MaplibreglGeocodingControlEventName>(type: E, detail?: MaplibreglGeocodingControlEventNameMap[E]): this {\n return super.fire({ type, ...(detail ?? {}) } as MLEvent);\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(features: Feature[] | undefined) {\n if (!features || features.length === 0 || !this.#flyToEnabled) 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?.flyTo({ center, ...(zoom ? { zoom } : {}), ...this.#flyToOptions });\n }\n\n #fitBounds(bbox: BBox, padding: number, maxZoom?: number): void {\n this.#map?.fitBounds(\n [\n [bbox[0], bbox[1]],\n [bbox[2], bbox[3]],\n ],\n { padding, ...(maxZoom ? { maxZoom } : {}), ...this.#fitBoundsOptions },\n );\n }\n\n #setReverseMarker(coordinates?: Position) {\n if (this.#options.marker === false || this.#options.marker === null || !this.#map) {\n return;\n }\n\n if (!coordinates) {\n this.#reverseMarker?.remove();\n this.#reverseMarker = undefined;\n return;\n }\n\n if (!this.#reverseMarker) {\n if (this.#options.marker instanceof Function) {\n this.#reverseMarker = this.#options.marker(this.#map) ?? undefined;\n } else {\n this.#reverseMarker = this.#createMarker(this.#options.marker).setLngLat(coordinates).addTo(this.#map);\n this.#reverseMarker.getElement().classList.add(\"marker-reverse\");\n }\n }\n\n this.#reverseMarker?.setLngLat(coordinates);\n }\n\n #setFeatures(markedFeatures: Feature[] | undefined, picked: Feature | undefined): void {\n if (!this.#map) {\n return;\n }\n\n for (const marker of this.#markers.values()) {\n marker.remove();\n }\n\n this.#markers = new Map();\n\n this.#setAndSaveData(undefined);\n\n const addMarker = () => {\n if (!picked || !this.#map || this.#options.marker === false || this.#options.marker === null) return;\n\n const marker =\n this.#options.marker instanceof Function ? this.#options.marker(this.#map, picked) : this.#createMarker(this.#options.marker).setLngLat(picked.center).addTo(this.#map);\n if (marker) {\n this.#markers.set(picked, marker);\n }\n };\n\n if (picked?.geometry.type === \"GeometryCollection\") {\n const polygonGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is Polygon | MultiPolygon => geometry.type === \"Polygon\" || geometry.type === \"MultiPolygon\",\n );\n\n if (polygonGeometries.length > 0) {\n const unioned = union(featureCollection(polygonGeometries.map((geom) => feature(geom))));\n\n if (unioned) {\n const mask = getMask({ ...picked, geometry: unioned.geometry });\n if (mask) {\n this.#setAndSaveData(mask);\n }\n }\n } else {\n const lineGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is LineString | MultiLineString => geometry.type === \"LineString\" || geometry.type === \"MultiLineString\",\n );\n\n if (lineGeometries.length > 0) {\n this.#setAndSaveData({\n ...picked,\n geometry: { type: \"GeometryCollection\", geometries: lineGeometries },\n });\n }\n }\n } else if (picked?.geometry.type.endsWith(\"Polygon\")) {\n const mask = getMask(picked as Feature<Polygon | MultiPolygon>);\n if (mask) {\n this.#setAndSaveData(mask);\n }\n if (this.#options.pickedResultStyle === \"full-geometry-including-polygon-center-marker\") {\n addMarker();\n }\n } else if (picked?.geometry.type.endsWith(\"LineString\")) {\n this.#setAndSaveData(picked);\n } else if (picked?.geometry.type.endsWith(\"Point\")) {\n addMarker();\n }\n\n if (this.#options.showResultMarkers !== false && this.#options.showResultMarkers !== null) {\n for (const feature of markedFeatures ?? []) {\n if (feature.id === picked?.id || feature.place_type.includes(\"reverse\")) {\n continue;\n }\n\n let marker;\n\n if (this.#options.showResultMarkers instanceof Function) {\n marker = this.#options.showResultMarkers(this.#map, feature);\n\n if (!marker) {\n continue;\n }\n } else {\n marker = this.#createMarker(this.#options.showResultMarkers)\n .setLngLat(feature.center)\n .setPopup(\n new Popup({\n offset: [1, -27],\n closeButton: false,\n closeOnMove: true,\n className: \"maptiler-gc-popup\",\n }).setText(feature.place_type[0] === \"reverse\" ? feature.place_name : feature.place_name.replace(/,.*/, \"\")),\n )\n .addTo(this.#map);\n\n marker.getElement().classList.add(\"marker-interactive\");\n }\n\n const element = marker.getElement();\n\n element.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n this.#dispatch(\"markerclick\", { feature, marker });\n });\n\n element.addEventListener(\"mouseenter\", () => {\n this.#dispatch(\"markermouseenter\", { feature, marker });\n marker.togglePopup();\n });\n\n element.addEventListener(\"mouseleave\", () => {\n this.#dispatch(\"markermouseleave\", { feature, marker });\n marker.togglePopup();\n });\n\n element.classList.toggle(\"marker-fuzzy\", !!feature.matching_text);\n\n this.#markers.set(feature, marker);\n }\n }\n }\n\n #setSelectedMarker(feature: Feature): void {\n this.#selectedMarker?.getElement().classList.toggle(\"marker-selected\", false);\n this.#selectedMarker = undefined;\n\n if (this.#options.markerOnSelected !== false) {\n this.#selectedMarker = this.#markers.get(feature);\n this.#selectedMarker?.getElement().classList.toggle(\"marker-selected\", true);\n }\n }\n\n #syncFullGeometryLayer() {\n if (!this.#map?.loaded) {\n void this.#map?.once(\"load\", () => {\n this.#syncFullGeometryLayer();\n });\n return;\n }\n\n const effFullGeometryStyle = this.#getFullGeometryStyle();\n const source = this.#map.getSource<GeoJSONSource>(RESULT_SOURCE);\n\n if ((!effFullGeometryStyle?.fill && !effFullGeometryStyle?.line) || (!source && !this.#savedData)) {\n return;\n }\n\n if (source) {\n source.setData(this.#savedData ?? featureCollection([]));\n } else if (this.#savedData) {\n this.#map.addSource(RESULT_SOURCE, {\n type: \"geojson\",\n data: this.#savedData,\n });\n }\n\n if (!this.#map.getLayer(RESULT_LAYER_FILL) && effFullGeometryStyle.fill) {\n this.#map.addLayer({\n ...effFullGeometryStyle.fill,\n id: RESULT_LAYER_FILL,\n type: \"fill\",\n source: RESULT_SOURCE,\n });\n }\n\n if (!this.#map.getLayer(RESULT_LAYER_LINE) && effFullGeometryStyle.line) {\n this.#map.addLayer({\n ...effFullGeometryStyle.line,\n id: RESULT_LAYER_LINE,\n type: \"line\",\n source: RESULT_SOURCE,\n });\n }\n }\n\n #setAndSaveData(data?: GeoJSON) {\n this.#savedData = data;\n\n this.#syncFullGeometryLayer();\n }\n\n #createMarker(options: MarkerOptions | true | undefined) {\n if (typeof options !== \"object\") {\n options = { element: this.#map?._container.ownerDocument.createElement(\"maptiler-geocode-marker\"), offset: [1, -13] };\n }\n return new Marker(options);\n }\n\n #getFullGeometryStyle() {\n const { fullGeometryStyle } = this.#options;\n if (fullGeometryStyle === true || fullGeometryStyle === undefined) return DEFAULT_GEOMETRY_STYLE;\n if (fullGeometryStyle === false || fullGeometryStyle === null) return undefined;\n return fullGeometryStyle;\n }\n}\n","import { type Map as SDKMap, config } from \"@maptiler/sdk\";\nimport { name, version } from \"../../package.json\";\nimport type { GeocodingControlBase } from \"./base-control\";\nimport { MaplibreglGeocodingControl } from \"./maplibregl-control\";\nimport type { MaptilerGeocodingControlOptions } from \"./maptilersdk-options\";\n\nexport class MaptilerGeocodingControl extends MaplibreglGeocodingControl implements GeocodingControlBase<MaptilerGeocodingControlOptions> {\n #map?: SDKMap;\n\n constructor(options: MaptilerGeocodingControlOptions = {}) {\n super(options);\n }\n\n /** @internal Not to be called directly */\n override onAdd(map: SDKMap): HTMLElement {\n this.#map = map;\n\n map.telemetry.registerModule(name, version);\n\n const options = this.getOptions();\n const { primaryLanguage, apiKey } = map.getSdkConfig();\n\n if (options.apiKey === undefined) {\n this.setOptions({ apiKey });\n }\n\n if (options.language === undefined) {\n const match = primaryLanguage.code?.match(/^([a-z]{2,3})($|_|-)/);\n if (match) {\n this.setOptions({ language: match[1] });\n }\n }\n\n const div = super.onAdd(map);\n div.classList.add(\"maptiler-ctrl-geocoder\");\n div.querySelector(\"maptiler-geocoder\")?.classList.add(\"maptiler-geocoder\");\n return div;\n }\n\n /** @internal Not to be called directly */\n override onRemove(): void {\n super.onRemove();\n this.#map = undefined;\n }\n\n declare getOptions: () => MaptilerGeocodingControlOptions;\n\n override setOptions(options: MaptilerGeocodingControlOptions) {\n const originalAdjustUrl = options.adjustUrl;\n super.setOptions({\n ...options,\n adjustUrl: (url: URL) => {\n originalAdjustUrl?.(url);\n const opts = this.getOptions();\n if (\n (config.session ? options.session !== false : options.session === true) &&\n this.#map &&\n (!opts.apiUrl || new URL(opts.apiUrl).host === new URL(import.meta.env.VITE_API_URL).host)\n ) {\n url.searchParams.append(\"mtsid\", this.#map.getMaptilerSessionId());\n }\n },\n });\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","_wasFeatureListVisible","_searchTimeoutRef","_missingIconsCache","_centerAndZoom","_MaptilerGeocoderElement_instances","selected_get","isFeatureListVisible_get","isLoading_get","isSearchValueTooShort_get","dispatch_fn","handleSubmit_fn","isQueryReverse_fn","focusInputAndSelectText_fn","changeSearchValue_fn","clearFeatures_fn","submitSearchValue_fn","search_fn","handleReverse_fn","handleKeyDown_fn","handleInput_fn","pick_fn","handleMouseEnter_fn","handleMouseLeave_fn","handleClear_fn","MaptilerGeocoderElement","__privateSet","options","elementOptions","prop","propertyNames","value","type","listener","coordinates","classMap","repeat","feature","i","detail","event","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","RESULT_SOURCE","RESULT_LAYER_FILL","RESULT_LAYER_LINE","Evented","maplibregl","Marker","Popup","MaplibreglGeocodingControl","#options","#map","#element","map","#setElementOptions","#addEventListeners","div","#removeEventListeners","#markedFeatures","#setFeatures","reverseActive","#markers","#selectedMarker","#reverseMarker","#savedData","#prevIdToFly","#elementEventListeners","canvasContainer","#dispatch","#setReverseMarker","selected","#flyToEnabled","#flyTo","#computeZoom","#setSelectedMarker","#goToPicked","features","#zoomToResults","#mapEventListeners","center","#syncFullGeometryLayer","#fitBounds","fuzzyOnly","allZoom","featZoom","zoomMap","a","category","b","#flyToOptions","#fitBoundsOptions","padding","maxZoom","#createMarker","markedFeatures","marker","#setAndSaveData","addMarker","polygonGeometries","geometry","unioned","geom","mask","lineGeometries","element","effFullGeometryStyle","#getFullGeometryStyle","source","fullGeometryStyle","MaptilerGeocodingControl","name","version","primaryLanguage","apiKey","match","originalAdjustUrl","opts","config"],"mappings":"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"}
1
+ {"version":3,"file":"maptilersdk.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/maplibregl-options.ts","../src/controls/maplibregl-control.ts","../src/controls/maptilersdk-control.ts"],"sourcesContent":["import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-clear-icon\")\nexport class MaptilerGeocodeClearIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 14 14\" width=\"13\" height=\"13\">\n <path\n d=\"M13.12.706a.982.982 0 0 0-1.391 0L6.907 5.517 2.087.696a.982.982 0 1 0-1.391 1.39l4.821 4.821L.696 11.73a.982.982 0 1 0 1.39 1.39l4.821-4.821 4.822 4.821a.982.982 0 1 0 1.39-1.39L8.298 6.908l4.821-4.822a.988.988 0 0 0 0-1.38Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-clear-icon\": MaptilerGeocodeClearIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-fail-icon\")\nexport class MaptilerGeocodeFailIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: #e15042;\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 0C6.705 0 0 6.705 0 15C0 23.295 6.705 30 15 30C23.295 30 30 23.295 30 15C30 6.705 23.295 0 15 0ZM22.5 20.385L20.385 22.5L15 17.115L9.615 22.5L7.5 20.385L12.885 15L7.5 9.615L9.615 7.5L15 12.885L20.385 7.5L22.5 9.615L17.115 15L22.5 20.385Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-fail-icon\": MaptilerGeocodeFailIconElement;\n }\n}\n","import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-loading-icon\")\nexport class MaptilerGeocodeLoadingIconElement extends LitElement {\n static styles = css`\n div {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n\n display: flex;\n align-items: center;\n }\n\n .loading-icon {\n animation: rotate 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95);\n }\n\n @keyframes rotate {\n from {\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n }\n `;\n\n render() {\n return html`\n <div>\n <svg viewBox=\"0 0 18 18\" width=\"24\" height=\"24\" class=\"loading-icon\">\n <path fill=\"#333\" d=\"M4.4 4.4l.8.8c2.1-2.1 5.5-2.1 7.6 0l.8-.8c-2.5-2.5-6.7-2.5-9.2 0z\" />\n <path opacity=\".1\" d=\"M12.8 12.9c-2.1 2.1-5.5 2.1-7.6 0-2.1-2.1-2.1-5.5 0-7.7l-.8-.8c-2.5 2.5-2.5 6.7 0 9.2s6.6 2.5 9.2 0 2.5-6.6 0-9.2l-.8.8c2.2 2.1 2.2 5.6 0 7.7z\" />\n </svg>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-loading-icon\": MaptilerGeocodeLoadingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-reverse-geocoding-icon\")\nexport class MaptilerGeocodeReverseGeocodingIconElement extends LitElement {\n static styles = css`\n svg {\n display: block;\n fill: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg viewBox=\"0 0 60.006 21.412\" width=\"14\" height=\"20\">\n <path\n d=\"M30.003-26.765C13.46-26.765 0-14.158 0 1.337c0 23.286 24.535 42.952 28.39 46.04.24.192.402.316.471.376.323.282.732.424 1.142.424.41 0 .82-.142 1.142-.424.068-.06.231-.183.471-.376 3.856-3.09 28.39-22.754 28.39-46.04 0-15.495-13.46-28.102-30.003-28.102Zm1.757 12.469c4.38 0 7.858 1.052 10.431 3.158 2.595 2.105 3.89 4.913 3.89 8.422 0 2.34-.53 4.362-1.593 6.063-1.063 1.702-3.086 3.616-6.063 5.742-2.042 1.51-3.337 2.659-3.89 3.446-.532.787-.8 1.82-.8 3.096v1.914h-8.449V15.18c0-2.041.434-3.815 1.306-5.325.872-1.51 2.467-3.118 4.785-4.82 2.233-1.594 3.7-2.89 4.402-3.889a5.582 5.582 0 0 0 1.087-3.35c0-1.382-.51-2.435-1.531-3.158-1.02-.723-2.45-1.087-4.28-1.087-3.19 0-6.826 1.047-10.91 3.131l-3.472-6.986c4.742-2.659 9.77-3.992 15.087-3.992Zm-1.88 37.324c1.765 0 3.124.472 4.08 1.408.98.936 1.47 2.276 1.47 4.02 0 1.68-.49 3.007-1.47 3.985-.977.957-2.336 1.435-4.08 1.435-1.787 0-3.171-.465-4.15-1.4-.978-.958-1.47-2.298-1.47-4.02 0-1.787.48-3.14 1.436-4.054.957-.915 2.355-1.374 4.184-1.374Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-reverse-geocoding-icon\": MaptilerGeocodeReverseGeocodingIconElement;\n }\n}\n","import { LitElement, css, svg } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"maptiler-geocode-search-icon\")\nexport class MaptilerGeocodeSearchIconElement extends LitElement {\n static styles = css`\n circle {\n stroke-width: 1.875;\n fill: none;\n }\n\n path {\n stroke-width: 1.875;\n stroke-linecap: round;\n }\n\n svg {\n display: block;\n stroke: var(--color-icon-button);\n }\n `;\n\n render() {\n return svg`\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 13 13\"\n >\n <circle cx=\"4.789\" cy=\"4.787\" r=\"3.85\" />\n <path d=\"M12.063 12.063 7.635 7.635\" />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-search-icon\": MaptilerGeocodeSearchIconElement;\n }\n}\n","import clone from \"@turf/clone\";\nimport type { FeatureCollection, MultiPolygon, Polygon, Position } from \"geojson\";\n\nimport type { BBox } from \"../types\";\n\n// taken from Leaflet\nexport function wrapNum(x: number, range: [number, number], includeMax: boolean) {\n const max = range[1],\n min = range[0],\n d = max - min;\n\n return x === max && includeMax ? x : ((((x - min) % d) + d) % d) + min;\n}\n\nexport function unwrapBbox(bbox0: BBox): BBox {\n const bbox = [...bbox0] satisfies BBox;\n\n if (bbox[2] < bbox[0]) {\n if (Math.abs((bbox[0] + bbox[2] + 360) / 2) > Math.abs((bbox[0] - 360 + bbox[2]) / 2)) {\n bbox[0] -= 360;\n } else {\n bbox[2] += 360;\n }\n }\n\n return bbox;\n}\n\nexport function shiftPolyCollection(featureCollection: FeatureCollection<Polygon | MultiPolygon>, distance: number): FeatureCollection<Polygon | MultiPolygon> {\n const cloned = clone(featureCollection);\n\n for (const feature of cloned.features) {\n if (feature.geometry.type == \"MultiPolygon\") {\n for (const poly of feature.geometry.coordinates) {\n shiftPolyCoords(poly, distance);\n }\n } else {\n shiftPolyCoords(feature.geometry.coordinates, distance);\n }\n }\n\n return cloned;\n}\n\nexport function shiftPolyCoords(coordinates: Position[][], distance: number) {\n for (const ring of coordinates) {\n for (const position of ring) {\n position[0] += distance;\n }\n }\n}\n","import type { ProximityRule } from \"../types\";\n\nlet cachedLocation: { time: number; coords: undefined | string } | undefined;\n\nexport async function getProximity(centerAndZoom: [zoom: number, lon: number, lat: number] | undefined, proximity: ProximityRule[] | null | undefined, ac: AbortController) {\n for (const rule of proximity ?? []) {\n if (centerAndZoom && ((rule.minZoom != undefined && rule.minZoom > centerAndZoom[0]) || (rule.maxZoom != undefined && rule.maxZoom < centerAndZoom[0]))) {\n continue;\n }\n\n if (rule.type === \"fixed\") {\n return rule.coordinates.join(\",\");\n }\n\n if (rule.type === \"client-geolocation\") {\n if (cachedLocation && rule.cachedLocationExpiry && cachedLocation.time + rule.cachedLocationExpiry > Date.now()) {\n if (cachedLocation.coords) {\n return cachedLocation.coords;\n }\n } else {\n let coords: string | undefined;\n\n try {\n coords = await new Promise<string>((resolve, reject) => {\n ac.signal.addEventListener(\"abort\", () => {\n reject(Error(\"aborted\"));\n });\n\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n resolve([pos.coords.longitude, pos.coords.latitude].map((c) => c.toFixed(6)).join(\",\"));\n },\n (err) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(err);\n },\n rule,\n );\n });\n\n return coords;\n } catch {\n // ignore\n } finally {\n if (rule.cachedLocationExpiry) {\n cachedLocation = {\n time: Date.now(),\n coords,\n };\n }\n }\n\n if (ac.signal.aborted) {\n return;\n }\n }\n }\n\n if (rule.type === \"server-geolocation\") {\n return \"ip\";\n }\n\n if (centerAndZoom && rule.type === \"map-center\") {\n return centerAndZoom[1].toFixed(6) + \",\" + centerAndZoom[2].toFixed(6);\n }\n }\n}\n","/* eslint-disable\n@typescript-eslint/no-unnecessary-condition,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-call,\n @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-return,\n @typescript-eslint/restrict-template-expressions,\n @typescript-eslint/unbound-method,\n*/\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nimport type { Feature, ShowPlaceType } from \"../types\";\nimport styles from \"./geocoder-feature-item.css?inline\";\n\ntype SpriteIcon = { width: number; height: number; x: number; y: number };\n\nconst hidpi = typeof devicePixelRatio === \"undefined\" || devicePixelRatio > 1.25;\n\nconst scaleUrl = hidpi ? \"@2x\" : \"\";\n\nconst scaleFactor = hidpi ? 2 : 1;\n\nlet sprites: undefined | null | { width: number; height: number; icons: Record<string, SpriteIcon> };\n\nlet spritePromise: Promise<void> | undefined;\n\n@customElement(\"maptiler-geocoder-feature-item\")\nexport class MaptilerGeocoderFeatureItemElement extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ type: Object }) feature?: Feature;\n @property({ type: String }) itemStyle: \"selected\" | \"picked\" | \"default\" = \"default\";\n @property({ type: String }) showPlaceType: ShowPlaceType = \"if-needed\";\n @property({ attribute: false }) missingIconsCache: Set<string> = new Set<string>();\n @property({ type: String }) iconsBaseUrl: string = \"\";\n\n get #categories() {\n return this.feature?.properties?.categories;\n }\n get #isReverse() {\n return this.feature?.place_type[0] === \"reverse\";\n }\n get #placeType() {\n return this.feature?.properties?.categories?.join(\", \") ?? this.feature?.place_type_name?.[0] ?? this.feature?.place_type[0];\n }\n\n @state() private category: string | undefined;\n @state() private imageUrl: string | undefined;\n @state() private spriteIcon: SpriteIcon | undefined;\n @state() private index: number = 0;\n\n #loadSprites() {\n spritePromise ??= fetch(`${this.iconsBaseUrl}sprite${scaleUrl}.json`)\n .then((response) => response.json())\n .then((data) => {\n sprites = data;\n })\n .catch(() => {\n sprites = null;\n });\n }\n\n #handleImgError() {\n if (this.imageUrl) {\n this.missingIconsCache.add(this.imageUrl);\n }\n\n this.#loadIcon();\n }\n\n #loadIcon() {\n if (sprites !== undefined) {\n this.#loadIcon2();\n } else {\n this.#loadSprites();\n\n void spritePromise?.then(() => {\n this.#loadIcon2();\n });\n }\n }\n\n #loadIcon2() {\n do {\n this.index--;\n\n this.category = this.#categories?.[this.index];\n\n this.spriteIcon = this.category ? sprites?.icons[this.category] : undefined;\n\n if (this.spriteIcon) {\n break;\n }\n\n this.imageUrl = this.category ? this.iconsBaseUrl + this.category.replace(/ /g, \"_\") + \".svg\" : undefined;\n } while (this.index > -1 && (!this.imageUrl || this.missingIconsCache.has(this.imageUrl)));\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"feature\") && this.#categories) {\n this.index = this.#categories.length;\n this.#loadIcon();\n }\n }\n\n render() {\n return html`\n <li\n tabindex=\"-1\"\n role=\"option\"\n aria-selected=${this.itemStyle === \"selected\"}\n aria-checked=${this.itemStyle === \"picked\"}\n class=${this.itemStyle}\n @click=${() => this.dispatchEvent(new CustomEvent(\"select\"))}\n >\n ${sprites && this.spriteIcon\n ? html`\n <div\n class=\"sprite-icon\"\n style=${styleMap({\n width: `${this.spriteIcon.width / scaleFactor}px`,\n height: `${this.spriteIcon.height / scaleFactor}px`,\n backgroundImage: `url(${this.iconsBaseUrl}sprite${scaleUrl}.png)`,\n backgroundPosition: `-${this.spriteIcon.x / scaleFactor}px -${this.spriteIcon.y / scaleFactor}px`,\n backgroundSize: `${sprites.width / scaleFactor}px ${sprites.height / scaleFactor}px`,\n })}\n title=${this.#placeType}\n />\n `\n : this.imageUrl\n ? html` <img src=${this.imageUrl} alt=${this.category} title=${this.#placeType} @error=${this.#handleImgError} />`\n : this.feature?.address\n ? html` <img src=${this.iconsBaseUrl + \"housenumber.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"road.\")\n ? html` <img src=${this.iconsBaseUrl + \"road.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"address.\")\n ? html` <img src=${this.iconsBaseUrl + \"street.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"postal_code.\")\n ? html` <img src=${this.iconsBaseUrl + \"postal_code.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.feature?.id.startsWith(\"poi.\")\n ? html` <img src=${this.iconsBaseUrl + \"poi.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : this.#isReverse\n ? html` <img src=${this.iconsBaseUrl + \"reverse.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `\n : html` <img src=${this.iconsBaseUrl + \"area.svg\"} alt=${this.#placeType} title=${this.#placeType} /> `}\n\n <span class=\"texts\">\n <span>\n <span class=\"primary\"> ${this.#isReverse ? this.feature?.place_name : this.feature?.place_name.replace(/,.*/, \"\")} </span>\n\n ${this.showPlaceType === \"always\" ||\n (this.showPlaceType !== \"never\" &&\n !this.feature?.address &&\n !this.feature?.id.startsWith(\"road.\") &&\n !this.feature?.id.startsWith(\"address.\") &&\n !this.feature?.id.startsWith(\"postal_code.\") &&\n (!this.feature?.id.startsWith(\"poi.\") || !this.imageUrl) &&\n !this.#isReverse)\n ? html` <span class=\"secondary\"> ${this.#placeType} </span> `\n : nothing}\n </span>\n\n <span class=\"line2\"> ${this.#isReverse ? this.feature?.text : this.feature?.place_name.replace(/[^,]*,?s*/, \"\")} </span>\n </span>\n </li>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder-feature-item\": MaptilerGeocoderFeatureItemElement;\n }\n}\n","import { convert } from \"geo-coordinates-parser\";\nimport { LitElement, css, html, nothing, unsafeCSS } from \"lit\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\n\nimport type { BBox, EnableReverse, Feature, FeatureCollection, ProximityRule, ShowPlaceType, TypeRule, Worldview } from \"../types\";\nimport { wrapNum } from \"../utils/geo-utils\";\nimport { getProximity } from \"../utils/proximity\";\n\nimport \"../components/clear-icon\";\nimport \"../components/fail-icon\";\nimport \"../components/loading-icon\";\nimport \"../components/reverse-geocoding-icon\";\nimport \"../components/search-icon\";\nimport \"./geocoder-feature-item\";\n\nimport type { MaptilerGeocoderEventName, MaptilerGeocoderEventNameMap } from \"./geocoder-events\";\nimport type { MaptilerGeocoderOptions } from \"./geocoder-options\";\nimport styles from \"./geocoder.css?inline\";\n\n@customElement(\"maptiler-geocoder\")\nexport class MaptilerGeocoderElement extends LitElement implements MaptilerGeocoderOptions {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n @property({ attribute: false }) adjustUrl?: (url: URL) => void;\n @property({ type: String }) apiKey?: string;\n @property({ type: String }) apiUrl?: string;\n @property({ type: Array }) bbox?: BBox;\n @property({ type: String }) clearButtonTitle?: string;\n @property({ type: Boolean }) clearListOnPick: boolean = false;\n @property({ type: Boolean }) clearOnBlur: boolean = false;\n @property({ type: Boolean }) collapsed: boolean = false;\n @property({ attribute: false }) country?: string | string[];\n @property({ type: Number }) debounceSearch?: number;\n @property({ type: String }) enableReverse?: EnableReverse;\n @property({ type: String }) errorMessage?: string;\n @property({ type: Boolean }) excludeTypes: boolean = false;\n @property({ type: Boolean }) exhaustiveReverseGeocoding: boolean = false;\n @property({ type: Boolean }) fetchFullGeometryOnPick: boolean = false;\n @property({ type: Object }) fetchParameters?: RequestInit;\n @property({ attribute: false }) filter?: (feature: Feature) => boolean;\n @property({ type: Object }) fuzzyMatch?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) iconsBaseUrl?: string;\n @property({ type: Boolean }) keepListOpen: boolean = false;\n @property({ attribute: false }) language?: string | string[] | null;\n @property({ type: Number }) limit?: number;\n @property({ type: Number }) minLength?: number;\n @property({ type: String }) noResultsMessage?: string;\n @property({ type: Boolean }) openListOnTop: boolean = false;\n @property({ type: String }) placeholder?: string;\n @property({ type: Array }) proximity?: ProximityRule[] | null;\n @property({ type: Boolean }) reverseActive: boolean = false;\n @property({ type: String }) reverseButtonTitle?: string;\n @property({ type: Object }) reverseGeocodingExcludeTypes?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Number }) reverseGeocodingLimit?: number;\n @property({ type: Array }) reverseGeocodingTypes?: TypeRule[];\n @property({ type: Object }) selectFirst?: boolean | undefined; // type object because undefined is valid value\n @property({ type: String }) showPlaceType?: ShowPlaceType;\n @property({ type: Object }) showResultsWhileTyping?: boolean | undefined; // type object because undefined is valid value\n @property({ type: Array }) types?: TypeRule[];\n @property({ type: String }) worldview?: Worldview;\n\n /** Reference to the input element the user can type a query into */\n @query(\"input\") private input!: HTMLInputElement;\n\n /** Value to search via geocoding */\n @state() private searchValue: string = \"\";\n /** Features found via geocoding */\n @state() private listFeatures?: Feature[];\n /** Index of item currently selected from the list of found features */\n @state() private selectedItemIndex: number = -1;\n /** Feature that has been picked by the user */\n @state() private picked?: Feature;\n /** Cached found features to be used to restore the features when loading more data for picked feature */\n @state() private cachedFeatures: Feature[] = [];\n /** Effectively a cache key for cached features */\n @state() private lastSearchUrl: string = \"\";\n /** Last error that happened in geocoding, to be shown to user */\n @state() private error: unknown;\n /** AbortController instance used to potentially cancel the current geocoding request*/\n @state() private abortController?: AbortController;\n /** Focus state of input element */\n @state() private focused: boolean = false;\n /** Focus state of input element, delayed for a moment to not close feature list immediately after losing focus */\n @state() private focusedDelayed: boolean = false;\n\n /** Helps to trigger logic only after this instance gets fully initialized */\n #isInitialized = false;\n /** Helps to trigger logic running when feature list hides only after it gets opened for the first time */\n #wasFeatureListVisible = false;\n /** Timeout ref for debouncing logic */\n #searchTimeoutRef?: number;\n /** Cache for URLs of icons that couldn't be loaded for any reason, as to not try them again unnecessarily */\n #missingIconsCache = new Set<string>();\n /** Center and zoom of a map potentially connected to this instance */\n #centerAndZoom: [zoom: number, lon: number, lat: number] | undefined;\n\n get #selected(): Feature | undefined {\n return this.listFeatures?.[this.selectedItemIndex];\n }\n get #isFeatureListVisible(): boolean {\n return !!this.listFeatures?.length && (this.focusedDelayed || this.keepListOpen);\n }\n get #isLoading(): boolean {\n return this.abortController !== undefined;\n }\n get #isSearchValueTooShort(): boolean {\n return this.searchValue.length < (this.minLength ?? 2);\n }\n\n protected firstUpdated() {\n this.#isInitialized = true;\n }\n\n /**\n * Set the options of this instance.\n *\n * @param options options to set\n */\n setOptions(options: Partial<MaptilerGeocoderOptions>) {\n const elementOptions = { ...options };\n for (const prop of Object.keys(elementOptions) as Array<keyof MaptilerGeocoderOptions>) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n if (!propertyNames.includes(prop)) delete elementOptions[prop];\n }\n Object.assign(this, elementOptions);\n }\n\n /**\n * Set the content of search input box.\n *\n * @param value text to set\n */\n setQuery(value: string) {\n this.#changeSearchValue(value);\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 })\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) {\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).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 }: undefined | { byId?: boolean; exact?: 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 });\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 });\n\n this.cachedFeatures = this.listFeatures;\n\n if (this.listFeatures[this.selectedItemIndex]?.id !== this.#selected?.id) {\n this.selectedItemIndex = -1;\n }\n\n if (isReverse) {\n this.input.focus();\n }\n }\n } catch (e: unknown) {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") {\n return;\n }\n\n throw e;\n } finally {\n if (ac === this.abortController) {\n this.abortController = undefined;\n }\n }\n }\n\n #handleReverse(coordinates: [lng: number, lat: number]) {\n this.reverseActive = this.enableReverse === \"always\";\n\n this.#clearFeatures();\n this.picked = undefined;\n\n this.#submitSearchValue(`${coordinates[1].toFixed(6)}, ${wrapNum(coordinates[0], [-180, 180], true).toFixed(6)}`);\n this.#focusInputAndSelectText();\n }\n\n #handleKeyDown(e: KeyboardEvent) {\n if (!this.listFeatures) {\n return;\n }\n\n const dir = e.key === \"ArrowDown\" ? 1 : e.key === \"ArrowUp\" ? -1 : 0;\n\n if (!dir) {\n return;\n }\n\n this.input.focus();\n\n this.focused = true;\n\n e.preventDefault();\n\n if (this.picked && this.selectedItemIndex === -1) {\n this.selectedItemIndex = this.listFeatures.findIndex((listFeature) => listFeature.id === this.picked?.id);\n }\n\n if (this.selectedItemIndex === (this.picked || this.selectFirst !== false ? 0 : -1) && dir === -1) {\n this.selectedItemIndex = this.listFeatures.length;\n }\n\n this.selectedItemIndex += dir;\n\n if (this.selectedItemIndex >= this.listFeatures.length) {\n this.selectedItemIndex = -1;\n }\n\n if (this.selectedItemIndex < 0 && (this.picked || this.selectFirst !== false)) {\n this.selectedItemIndex = 0;\n }\n }\n\n #handleInput(event: InputEvent & { target: HTMLInputElement }) {\n this.#changeSearchValue(event.target.value);\n }\n\n #pick(feature: Feature) {\n if (!this.picked || this.picked.id !== feature.id) {\n this.picked = feature;\n this.searchValue = feature.place_name;\n }\n }\n\n #handleMouseEnter(index: number) {\n this.selectedItemIndex = index;\n }\n\n #handleMouseLeave() {\n if (!this.selectFirst !== false || this.picked) {\n this.selectedItemIndex = -1;\n }\n }\n\n #handleClear() {\n this.searchValue = \"\";\n this.#dispatch(\"queryclear\");\n\n this.picked = undefined;\n this.input.focus();\n }\n\n willUpdate(changedProperties: Map<string, unknown>) {\n if (changedProperties.has(\"error\") && this.error) {\n console.error(\"[MapTilerGeocodingControl] Error:\", this.error);\n }\n\n if (changedProperties.has(\"enableReverse\")) {\n this.reverseActive = this.enableReverse === \"always\";\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked) {\n if (this.clearListOnPick) {\n this.#clearFeatures();\n }\n\n this.selectedItemIndex = -1;\n }\n }\n\n if ([\"searchValue\", \"minLength\"].some((prop) => changedProperties.has(prop)) && this.#isSearchValueTooShort) {\n this.#clearFeatures();\n this.error = undefined;\n }\n\n if ([\"focused\"].some((prop) => changedProperties.has(prop))) {\n setTimeout(() => {\n this.focusedDelayed = this.focused;\n\n // close dropdown in the next cycle so that the selected item event has the chance to fire\n if (this.clearOnBlur && !this.focused) {\n this.searchValue = \"\";\n }\n }, 100);\n }\n\n if (\n [\"selectFirst\", \"listFeatures\", \"selectedItemIndex\", \"picked\"].some((prop) => changedProperties.has(prop)) &&\n this.selectFirst !== false &&\n this.listFeatures?.length &&\n this.selectedItemIndex == -1 &&\n !this.picked\n ) {\n this.selectedItemIndex = 0;\n }\n\n if ([\"listFeatures\", \"selectedItemIndex\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"select\", { feature: this.#selected });\n }\n\n if ([\"picked\"].some((prop) => changedProperties.has(prop))) {\n if (this.picked && this.picked.id !== (changedProperties.get(\"picked\") as Feature | undefined)?.id) {\n (this.fetchFullGeometryOnPick && !this.picked.address && this.picked.geometry.type === \"Point\" && this.picked.place_type[0] !== \"reverse\"\n ? this.#search(this.picked.id, { byId: true })\n : Promise.resolve()\n ).then(\n () => {\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n (e: unknown) => {\n if (e && typeof e === \"object\" && \"name\" in e && e.name === \"AbortError\") return;\n this.error = e;\n this.#dispatch(\"pick\", { feature: this.picked });\n },\n );\n }\n }\n\n if ([\"listFeatures\", \"focusedDelayed\"].some((prop) => changedProperties.has(prop))) {\n if (this.#isFeatureListVisible) {\n this.#dispatch(\"featuresshow\");\n this.#wasFeatureListVisible = true;\n } else if (this.#wasFeatureListVisible) {\n this.#dispatch(\"featureshide\");\n }\n }\n\n if ([\"reverseActive\"].some((prop) => changedProperties.has(prop))) {\n this.#dispatch(\"reversetoggle\", { reverse: this.reverseActive });\n }\n }\n\n render() {\n /* eslint-disable @typescript-eslint/unbound-method */\n return html`\n <form @submit=${this.#handleSubmit} class=${classMap({ \"can-collapse\": this.collapsed && this.searchValue === \"\" })}>\n <div class=\"input-group\">\n <button\n class=\"search-button\"\n type=\"button\"\n @click=${() => {\n this.input.focus();\n }}\n >\n <maptiler-geocode-search-icon></maptiler-geocode-search-icon>\n </button>\n\n <input\n .value=${this.searchValue}\n @focus=${() => (this.focused = true)}\n @blur=${() => (this.focused = false)}\n @click=${() => (this.focused = true)}\n @keydown=${this.#handleKeyDown}\n @input=${this.#handleInput}\n @change=${() => (this.picked = undefined)}\n placeholder=${this.placeholder ?? \"Search\"}\n aria-label=${this.placeholder ?? \"Search\"}\n />\n\n <div class=\"clear-button-container ${classMap({ displayable: this.searchValue !== \"\" })}\">\n ${!this.#isLoading\n ? html`\n <button type=\"button\" @click=${this.#handleClear} title=${this.clearButtonTitle ?? \"clear\"}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n `\n : html`<maptiler-geocode-loading-icon></maptiler-geocode-loading-icon>`}\n </div>\n\n ${this.enableReverse === \"button\"\n ? html`\n <button\n type=\"button\"\n class=${classMap({ active: this.reverseActive })}\n title=${this.reverseButtonTitle ?? \"toggle reverse geocoding\"}\n @click=${() => (this.reverseActive = !this.reverseActive)}\n >\n <maptiler-geocode-reverse-geocoding-icon></maptiler-geocode-reverse-geocoding-icon>\n </button>\n `\n : nothing}\n\n <!-- <slot /> -->\n </div>\n\n ${this.error\n ? html`\n <div class=\"error\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>${this.errorMessage ?? \"Something went wrong…\"}</div>\n\n <button @click=${() => (this.error = undefined)}>\n <maptiler-geocode-clear-icon></maptiler-geocode-clear-icon>\n </button>\n </div>\n `\n : (!this.focusedDelayed && !this.keepListOpen) || this.listFeatures === undefined\n ? nothing\n : this.listFeatures.length === 0\n ? html`\n <div class=\"no-results\">\n <maptiler-geocode-fail-icon></maptiler-geocode-fail-icon>\n\n <div>\n ${this.noResultsMessage ??\n \"Oops! Looks like you're trying to predict something that's not quite right. We can't seem to find what you're looking for. Maybe try double-checking your spelling or try a different search term. Keep on typing - we'll do our best to get you where you need to go!\"}\n </div>\n </div>\n `\n : html`\n <ul class=\"options ${classMap({ \"open-on-top\": this.openListOnTop })}\" @mouseleave=${this.#handleMouseLeave} @keydown=${this.#handleKeyDown} role=\"listbox\">\n ${repeat(\n this.listFeatures,\n (feature) => feature.id + (feature.address ? \",\" + feature.address : \"\"),\n (feature, i) => html`\n <maptiler-geocoder-feature-item\n .feature=${feature}\n .showPlaceType=${this.showPlaceType ?? \"if-needed\"}\n itemStyle=${this.selectedItemIndex === i ? \"selected\" : this.picked?.id === feature.id ? \"picked\" : \"default\"}\n @mouseenter=${() => {\n this.#handleMouseEnter(i);\n }}\n @select=${() => {\n this.#pick(feature);\n }}\n .missingIconsCache=${this.#missingIconsCache}\n .iconsBaseUrl=${this.iconsBaseUrl ?? `https://cdn.maptiler.com/maptiler-geocoding-control/v${import.meta.env.VITE_LIB_VERSION}/icons/`}\n >\n ${feature.place_name}\n </maptiler-geocoder-feature-item>\n `,\n )}\n </ul>\n `}\n </form>\n `;\n /* eslint-enable @typescript-eslint/unbound-method */\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocoder\": MaptilerGeocoderElement;\n }\n}\n\nconst propertyNames = [\n \"adjustUrl\",\n \"apiKey\",\n \"apiUrl\",\n \"bbox\",\n \"clearButtonTitle\",\n \"clearListOnPick\",\n \"clearOnBlur\",\n \"collapsed\",\n \"country\",\n \"debounceSearch\",\n \"enableReverse\",\n \"errorMessage\",\n \"excludeTypes\",\n \"reverseGeocodingExcludeTypes\",\n \"exhaustiveReverseGeocoding\",\n \"fetchParameters\",\n \"fetchFullGeometryOnPick\",\n \"filter\",\n \"fuzzyMatch\",\n \"iconsBaseUrl\",\n \"keepListOpen\",\n \"language\",\n \"limit\",\n \"reverseGeocodingLimit\",\n \"minLength\",\n \"noResultsMessage\",\n \"openListOnTop\",\n \"placeholder\",\n \"proximity\",\n \"reverseActive\",\n \"reverseButtonTitle\",\n \"selectFirst\",\n \"showPlaceType\",\n \"showResultsWhileTyping\",\n \"types\",\n \"reverseGeocodingTypes\",\n \"worldview\",\n] as const satisfies readonly (keyof MaptilerGeocoderOptions)[];\n","import { LitElement, css, svg, unsafeCSS } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\nimport styles from \"./marker.css?inline\";\n\n@customElement(\"maptiler-geocode-marker\")\nexport class MaptilerGeocodeMarkerElement extends LitElement {\n static styles = css`\n ${unsafeCSS(styles)}\n `;\n\n render() {\n return svg`\n <svg\n viewBox=\"0 0 70 85\"\n fill=\"none\"\n class:in-map={displayIn !== \"list\"}\n >\n <path\n stroke-width=\"4\"\n d=\"M 5,33.103579 C 5,17.607779 18.457,5 35,5 C 51.543,5 65,17.607779 65,33.103579 C 65,56.388679 40.4668,76.048179 36.6112,79.137779 C 36.3714,79.329879 36.2116,79.457979 36.1427,79.518879 C 35.8203,79.800879 35.4102,79.942779 35,79.942779 C 34.5899,79.942779 34.1797,79.800879 33.8575,79.518879 C 33.7886,79.457979 33.6289,79.330079 33.3893,79.138079 C 29.5346,76.049279 5,56.389379 5,33.103579 Z M 35.0001,49.386379 C 43.1917,49.386379 49.8323,42.646079 49.8323,34.331379 C 49.8323,26.016779 43.1917,19.276479 35.0001,19.276479 C 26.8085,19.276479 20.1679,26.016779 20.1679,34.331379 C 20.1679,42.646079 26.8085,49.386379 35.0001,49.386379 Z\"\n />\n </svg>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"maptiler-geocode-marker\": MaptilerGeocodeMarkerElement;\n }\n}\n","import bbox from \"@turf/bbox\";\nimport difference from \"@turf/difference\";\nimport flatten from \"@turf/flatten\";\nimport { featureCollection, polygon } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { Feature, FeatureCollection, MultiPolygon, Polygon } from \"geojson\";\nimport type { BBox } from \"../types\";\nimport { unwrapBbox } from \"./geo-utils\";\n\nexport function getMask(picked: Feature<Polygon | MultiPolygon>): FeatureCollection<Polygon | MultiPolygon> | undefined {\n const diff = difference(\n featureCollection([\n polygon([\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ]),\n picked,\n ]),\n );\n\n if (!diff) {\n return;\n }\n\n diff.properties = { isMask: true };\n\n const bb = unwrapBbox(bbox(picked) as BBox);\n\n // bigger features (continents, oceans) have bigger tolerance\n // because of the used source data simplification\n const tolerance = (bb[2] - bb[0]) / 360 / 1_000;\n\n const leaksLeft = bb[0] < -180;\n const leaksRight = bb[2] > 180;\n\n const flattened = flatten(picked);\n\n if (flattened.features.length > 1 && (leaksLeft || leaksRight)) {\n for (const poly of flattened.features) {\n const bb = unwrapBbox(bbox(poly) as BBox);\n\n if (leaksRight && bb[0] < -180 + tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] += 360 - tolerance;\n }\n }\n }\n\n if (leaksLeft && bb[2] > 180 - tolerance) {\n for (const ring of poly.geometry.coordinates) {\n for (const position of ring) {\n position[0] -= 360 - tolerance;\n }\n }\n }\n }\n }\n\n return featureCollection([flattened.features.length < 2 ? picked : (union(flattened) ?? picked), diff]);\n}\n","import maplibregl from \"maplibre-gl\";\n\ntype FillLayerSpecification = maplibregl.FillLayerSpecification;\ntype FitBoundsOptions = maplibregl.FitBoundsOptions;\ntype FlyToOptions = maplibregl.FlyToOptions;\ntype LineLayerSpecification = maplibregl.LineLayerSpecification;\ntype Marker = maplibregl.Marker;\ntype MarkerOptions = maplibregl.MarkerOptions;\ntype MLMap = maplibregl.Map;\n\nimport type { MaptilerGeocoderOptions } from \"../geocoder/geocoder-options\";\nimport type { Feature, PickedResultStyle } from \"../types\";\n\nexport type MaplibreglGeocodingControlOptions = Omit<MaptilerGeocoderOptions, \"apiKey\" | \"fetchFullGeometryOnPick\"> & {\n /**\n * Maptiler API key. Optional if used with MapTiler SDK - if not specified, the control will use the same API key as the map uses.\n */\n apiKey?: string;\n\n /**\n * Marker to be added to the map at the location of the user-selected result using a default set of Marker options.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MarkerOptions/) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/).\n * Function can accept `Feature` as a parameter which is `undefined` for the reverse location marker.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n marker?: null | boolean | MarkerOptions | ((map: MLMap, feature?: Feature) => undefined | null | Marker);\n\n /**\n * Displays a marker on the selected feature from the result list. `marker` must be enabled in any way for this to display.\n *\n * Default: `true`.\n */\n markerOnSelected?: boolean;\n\n /**\n * Marker be added to the map at the location the geocoding results.\n *\n * - If `true` or `undefined` then a default marker will be used.\n * - If the value is a [MarkerOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/MarkerOptions/) then the marker will be constructed using these options.\n * - If the value is a function then it can return instance of the [Marker](https://maplibre.org/maplibre-gl-js/docs/API/classes/Marker/).\n * In this case the default pop-up won't be added to the marker.\n * Function can accept `Feature` as a parameter.\n * - If `false` or `null` then no marker will be added to the map.\n *\n * Default value is `true`.\n */\n showResultMarkers?: null | boolean | MarkerOptions | ((map: MLMap, feature: Feature) => undefined | null | Marker);\n\n /**\n * Animation to picked feature on the map.\n *\n * - If `false` or `null` then animating the map to a selected result is disabled.\n * - If `true` or `undefined` then animating the map will use the default animation parameters.\n * - If an [FlyToOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/FlyToOptions/)\n * ` & `[FitBoundsOptions](https://maplibre.org/maplibre-gl-js/docs/API/type-aliases/FitBoundsOptions/)\n * then it will be passed as options to the map [flyTo](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#flyto)\n * or [fitBounds](https://maplibre.org/maplibre-gl-js/docs/API/classes/Map/#fitbounds) method providing control over the animation of the transition.\n *\n * Default value is `true`.\n */\n flyTo?: null | boolean | (FlyToOptions & FitBoundsOptions);\n\n /**\n * Specifies if selected (not picked) feature should be also animated to on the map.\n *\n * Default: `false`.\n */\n flyToSelected?: boolean;\n\n /**\n * Style for full feature geometry GeoJSON.\n *\n * - If `false` or `null` then no full geometry is drawn.\n * - If `true` or `undefined` then default-styled full geometry is drawn.\n * - If an T then it must represent the style and will be used to style the full geometry.\n *\n * Default is the default style.\n */\n fullGeometryStyle?: null | boolean | Partial<FullGeometryStyle>;\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};\n\nexport type FullGeometryStyle = {\n fill: Pick<FillLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n line: Pick<LineLayerSpecification, \"layout\" | \"paint\" | \"filter\">;\n};\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: FullGeometryStyle = {\n fill: {\n paint: {\n \"fill-color\": \"#000\",\n \"fill-opacity\": 0.1,\n },\n filter: [\"all\", [\"==\", [\"geometry-type\"], \"Polygon\"], [\"has\", \"isMask\"]],\n },\n line: {\n layout: {\n \"line-cap\": \"square\",\n },\n paint: {\n \"line-width\": [\"case\", [\"==\", [\"geometry-type\"], \"Polygon\"], 2, 3],\n \"line-dasharray\": [1, 1],\n \"line-color\": \"#3170fe\",\n },\n filter: [\"!\", [\"has\", \"isMask\"]],\n },\n};\n\nexport const RESULT_SOURCE = \"mtlr-gc-full-geom\";\nexport const RESULT_LAYER_FILL = \"mtlr-gc-full-geom-fill\";\nexport const RESULT_LAYER_LINE = \"mtlr-gc-full-geom-line\";\n","import { feature, featureCollection } from \"@turf/helpers\";\nimport union from \"@turf/union\";\nimport type { GeoJSON, LineString, MultiLineString, MultiPolygon, Polygon } from \"geojson\";\nimport maplibregl from \"maplibre-gl\";\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 { MaplibreglGeocodingControlEventName, MaplibreglGeocodingControlEventNameMap } from \"./maplibregl-events\";\nimport { DEFAULT_GEOMETRY_STYLE, type MaplibreglGeocodingControlOptions, RESULT_LAYER_FILL, RESULT_LAYER_LINE, RESULT_SOURCE, ZOOM_DEFAULTS } from \"./maplibregl-options\";\n\nconst Evented = maplibregl.Evented;\nconst Marker = maplibregl.Marker;\nconst Popup = maplibregl.Popup;\ntype Evented = maplibregl.Evented;\ntype GeoJSONSource = maplibregl.GeoJSONSource;\ntype IControl = maplibregl.IControl;\ntype MapMouseEvent = maplibregl.MapMouseEvent;\ntype Marker = maplibregl.Marker;\ntype MarkerOptions = maplibregl.MarkerOptions;\ntype MLMap = maplibregl.Map;\ntype MLEvent = Extract<Parameters<Evented[\"fire\"]>[0], object>;\ntype Subscription = maplibregl.Subscription;\n\ntype EventHandlingMethod<Return> = <Type extends MaplibreglGeocodingControlEventName>(\n type: Type,\n listener: (event: MaplibreglGeocodingControlEventNameMap[Type]) => void,\n) => Return;\ninterface EventOnceHandlingMethod<Return> {\n <Type extends MaplibreglGeocodingControlEventName>(type: Type, listener: (event: MaplibreglGeocodingControlEventNameMap[Type]) => void): Return;\n <Type extends MaplibreglGeocodingControlEventName>(type: Type, listener?: undefined): Promise<MaplibreglGeocodingControlEventNameMap[Type]>;\n}\n\nexport class MaplibreglGeocodingControl extends Evented implements IControl, GeocodingControlBase<MaplibreglGeocodingControlOptions> {\n #options: MaplibreglGeocodingControlOptions = {};\n #map?: MLMap;\n #element?: MaptilerGeocoderElement;\n\n constructor(options: MaplibreglGeocodingControlOptions = {}) {\n super();\n this.setOptions(options);\n }\n\n /** @internal Not to be called directly */\n onAdd(map: MLMap): HTMLElement {\n this.#map = map;\n this.#element = map._container.ownerDocument.createElement(\"maptiler-geocoder\");\n this.#element.classList.add(\"maplibregl-geocoder\");\n\n this.#setElementOptions();\n this.#addEventListeners();\n\n const div = map._container.ownerDocument.createElement(\"div\");\n div.classList.add(\"maplibregl-ctrl-geocoder\", \"maplibregl-ctrl\", \"maplibregl-ctrl-group\");\n div.style.position = \"relative\";\n div.style.zIndex = \"3\";\n div.appendChild(this.#element as Node);\n setTimeout(() => this.#element?.setOptions({ openListOnTop: div.matches(\".maplibregl-ctrl-bottom-left *, .maplibregl-ctrl-bottom-right *\") }));\n return div;\n }\n\n /** @internal Not to be called directly */\n onRemove(): void {\n this.#removeEventListeners();\n this.#map = undefined;\n this.#element = undefined;\n }\n\n getOptions(): MaplibreglGeocodingControlOptions {\n return { ...this.#options };\n }\n\n setOptions(options: MaplibreglGeocodingControlOptions) {\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<Subscription>;\n declare off: EventHandlingMethod<this>;\n declare once: EventOnceHandlingMethod<this>;\n\n /** Markers currently displayed on the map */\n #markers = new Map<Feature, Marker>();\n /** Marker representing the selected feature */\n #selectedMarker: Marker | undefined;\n /** Marker representing the picked feature */\n #reverseMarker: Marker | undefined;\n /** Features currently marked on the map */\n #markedFeatures?: Feature[];\n /** Used to restore features on style switch */\n #savedData: GeoJSON | undefined;\n /** Remember last feature that the map flew to as to not do it again */\n #prevIdToFly?: string;\n\n #elementEventListeners: { [EventName in MaptilerGeocoderEventName]: (e: MaptilerGeocoderEventNameMap[EventName]) => void } = {\n reversetoggle: (event: MaptilerGeocoderEvent.ReverseToggleEvent) => {\n const canvasContainer = this.#map?.getCanvasContainer();\n if (canvasContainer) {\n canvasContainer.style.cursor = event.detail.reverse ? \"crosshair\" : \"\";\n }\n this.#dispatch(\"reversetoggle\", event.detail);\n },\n querychange: (event: MaptilerGeocoderEvent.QueryChangeEvent) => {\n const coords = event.detail.reverseCoords;\n\n this.#setReverseMarker(coords ? [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(features);\n this.#dispatch(\"featureslisted\", event.detail);\n },\n featuresclear: () => {\n this.#markedFeatures = undefined;\n this.#setFeatures(undefined, undefined);\n this.#dispatch(\"featuresclear\");\n },\n focusin: () => {\n this.#dispatch(\"focusin\");\n },\n focusout: () => {\n this.#dispatch(\"focusout\");\n },\n };\n #mapEventListeners = {\n render: () => {\n const zoom = this.#map?.getZoom();\n const center = this.#map?.getCenter();\n this.#element?.handleMapChange(zoom && center ? [zoom, center.lng, center.lat] : undefined);\n },\n click: (e: MapMouseEvent) => {\n this.#element?.handleMapClick([e.lngLat.lng, e.lngLat.lat]);\n },\n styledata: () => {\n setTimeout(() => {\n if (this.#savedData) {\n this.#syncFullGeometryLayer();\n }\n });\n },\n };\n\n #setElementOptions() {\n if (!this.#element) return;\n\n this.#element.setOptions(this.#options);\n this.#element.fetchFullGeometryOnPick = this.#options.pickedResultStyle !== \"marker-only\";\n }\n\n #addEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.addEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.on(type, listener);\n }\n }\n\n #removeEventListeners() {\n if (!this.#element || !this.#map) return;\n\n for (const [type, listener] of Object.entries(this.#elementEventListeners)) {\n this.#element.removeEventListener(type as MaptilerGeocoderEventName, listener as EventListener);\n }\n\n for (const [type, listener] of Object.entries(this.#mapEventListeners)) {\n this.#map.off(type, listener);\n }\n }\n\n #dispatch<E extends MaplibreglGeocodingControlEventName>(type: E, detail?: Omit<MaplibreglGeocodingControlEventNameMap[E], \"type\" | \"target\">): this {\n return super.fire({ type, ...(detail ?? {}) } as MLEvent);\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(features: Feature[] | undefined) {\n if (!features || features.length === 0 || !this.#flyToEnabled) 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?.flyTo({ center, ...(zoom ? { zoom } : {}), ...this.#flyToOptions });\n }\n\n #fitBounds(bbox: BBox, padding: number, maxZoom?: number): void {\n this.#map?.fitBounds(\n [\n [bbox[0], bbox[1]],\n [bbox[2], bbox[3]],\n ],\n { padding, ...(maxZoom ? { maxZoom } : {}), ...this.#fitBoundsOptions },\n );\n }\n\n #setReverseMarker(coordinates?: Position) {\n if (this.#options.marker === false || this.#options.marker === null || !this.#map) {\n return;\n }\n\n if (!coordinates) {\n this.#reverseMarker?.remove();\n this.#reverseMarker = undefined;\n return;\n }\n\n if (!this.#reverseMarker) {\n if (this.#options.marker instanceof Function) {\n this.#reverseMarker = this.#options.marker(this.#map) ?? undefined;\n } else {\n this.#reverseMarker = this.#createMarker(this.#options.marker).setLngLat(coordinates).addTo(this.#map);\n this.#reverseMarker.getElement().classList.add(\"marker-reverse\");\n }\n }\n\n this.#reverseMarker?.setLngLat(coordinates);\n }\n\n #setFeatures(markedFeatures: Feature[] | undefined, picked: Feature | undefined): void {\n if (!this.#map) {\n return;\n }\n\n for (const marker of this.#markers.values()) {\n marker.remove();\n }\n\n this.#markers = new Map();\n\n this.#setAndSaveData(undefined);\n\n const addMarker = () => {\n if (!picked || !this.#map || this.#options.marker === false || this.#options.marker === null) return;\n\n const marker =\n this.#options.marker instanceof Function ? this.#options.marker(this.#map, picked) : this.#createMarker(this.#options.marker).setLngLat(picked.center).addTo(this.#map);\n if (marker) {\n this.#markers.set(picked, marker);\n }\n };\n\n if (picked?.geometry.type === \"GeometryCollection\") {\n const polygonGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is Polygon | MultiPolygon => geometry.type === \"Polygon\" || geometry.type === \"MultiPolygon\",\n );\n\n if (polygonGeometries.length > 0) {\n const unioned = union(featureCollection(polygonGeometries.map((geom) => feature(geom))));\n\n if (unioned) {\n const mask = getMask({ ...picked, geometry: unioned.geometry });\n if (mask) {\n this.#setAndSaveData(mask);\n }\n }\n } else {\n const lineGeometries = picked.geometry.geometries.filter(\n (geometry): geometry is LineString | MultiLineString => geometry.type === \"LineString\" || geometry.type === \"MultiLineString\",\n );\n\n if (lineGeometries.length > 0) {\n this.#setAndSaveData({\n ...picked,\n geometry: { type: \"GeometryCollection\", geometries: lineGeometries },\n });\n }\n }\n } else if (picked?.geometry.type.endsWith(\"Polygon\")) {\n const mask = getMask(picked as Feature<Polygon | MultiPolygon>);\n if (mask) {\n this.#setAndSaveData(mask);\n }\n if (this.#options.pickedResultStyle === \"full-geometry-including-polygon-center-marker\") {\n addMarker();\n }\n } else if (picked?.geometry.type.endsWith(\"LineString\")) {\n this.#setAndSaveData(picked);\n } else if (picked?.geometry.type.endsWith(\"Point\")) {\n addMarker();\n }\n\n if (this.#options.showResultMarkers !== false && this.#options.showResultMarkers !== null) {\n for (const feature of markedFeatures ?? []) {\n if (feature.id === picked?.id || feature.place_type.includes(\"reverse\")) {\n continue;\n }\n\n let marker;\n\n if (this.#options.showResultMarkers instanceof Function) {\n marker = this.#options.showResultMarkers(this.#map, feature);\n\n if (!marker) {\n continue;\n }\n } else {\n marker = this.#createMarker(this.#options.showResultMarkers)\n .setLngLat(feature.center)\n .setPopup(\n new Popup({\n offset: [1, -27],\n closeButton: false,\n closeOnMove: true,\n className: \"maptiler-gc-popup\",\n }).setText(feature.place_type[0] === \"reverse\" ? feature.place_name : feature.place_name.replace(/,.*/, \"\")),\n )\n .addTo(this.#map);\n\n marker.getElement().classList.add(\"marker-interactive\");\n }\n\n const element = marker.getElement();\n\n element.addEventListener(\"click\", (e) => {\n e.stopPropagation();\n this.#dispatch(\"markerclick\", { feature, marker });\n });\n\n element.addEventListener(\"mouseenter\", () => {\n this.#dispatch(\"markermouseenter\", { feature, marker });\n marker.togglePopup();\n });\n\n element.addEventListener(\"mouseleave\", () => {\n this.#dispatch(\"markermouseleave\", { feature, marker });\n marker.togglePopup();\n });\n\n element.classList.toggle(\"marker-fuzzy\", !!feature.matching_text);\n\n this.#markers.set(feature, marker);\n }\n }\n }\n\n #setSelectedMarker(feature: Feature): void {\n this.#selectedMarker?.getElement().classList.toggle(\"marker-selected\", false);\n this.#selectedMarker = undefined;\n\n if (this.#options.markerOnSelected !== false) {\n this.#selectedMarker = this.#markers.get(feature);\n this.#selectedMarker?.getElement().classList.toggle(\"marker-selected\", true);\n }\n }\n\n #syncFullGeometryLayer() {\n if (!this.#map?.loaded) {\n void this.#map?.once(\"load\", () => {\n this.#syncFullGeometryLayer();\n });\n return;\n }\n\n const effFullGeometryStyle = this.#getFullGeometryStyle();\n const source = this.#map.getSource<GeoJSONSource>(RESULT_SOURCE);\n\n if ((!effFullGeometryStyle?.fill && !effFullGeometryStyle?.line) || (!source && !this.#savedData)) {\n return;\n }\n\n if (source) {\n source.setData(this.#savedData ?? featureCollection([]));\n } else if (this.#savedData) {\n this.#map.addSource(RESULT_SOURCE, {\n type: \"geojson\",\n data: this.#savedData,\n });\n }\n\n if (!this.#map.getLayer(RESULT_LAYER_FILL) && effFullGeometryStyle.fill) {\n this.#map.addLayer({\n ...effFullGeometryStyle.fill,\n id: RESULT_LAYER_FILL,\n type: \"fill\",\n source: RESULT_SOURCE,\n });\n }\n\n if (!this.#map.getLayer(RESULT_LAYER_LINE) && effFullGeometryStyle.line) {\n this.#map.addLayer({\n ...effFullGeometryStyle.line,\n id: RESULT_LAYER_LINE,\n type: \"line\",\n source: RESULT_SOURCE,\n });\n }\n }\n\n #setAndSaveData(data?: GeoJSON) {\n this.#savedData = data;\n\n this.#syncFullGeometryLayer();\n }\n\n #createMarker(options: MarkerOptions | true | undefined) {\n if (typeof options !== \"object\") {\n options = { element: this.#map?._container.ownerDocument.createElement(\"maptiler-geocode-marker\"), offset: [1, -13] };\n }\n return new Marker(options);\n }\n\n #getFullGeometryStyle() {\n const { fullGeometryStyle } = this.#options;\n if (fullGeometryStyle === true || fullGeometryStyle === undefined) return DEFAULT_GEOMETRY_STYLE;\n if (fullGeometryStyle === false || fullGeometryStyle === null) return undefined;\n return fullGeometryStyle;\n }\n}\n","import { config, type Map as SDKMap, type Subscription } from \"@maptiler/sdk\";\nimport { name, version } from \"../../package.json\";\nimport type { GeocodingControlBase } from \"./base-control\";\nimport { MaplibreglGeocodingControl } from \"./maplibregl-control\";\nimport type { MaptilerGeocodingControlEventName, MaptilerGeocodingControlEventNameMap } from \"./maptilersdk-events\";\nimport type { MaptilerGeocodingControlOptions } from \"./maptilersdk-options\";\n\ntype EventHandlingMethod<Return> = <Type extends MaptilerGeocodingControlEventName>(type: Type, listener: (event: MaptilerGeocodingControlEventNameMap[Type]) => void) => Return;\ninterface EventOnceHandlingMethod<Return> {\n <Type extends MaptilerGeocodingControlEventName>(type: Type, listener: (event: MaptilerGeocodingControlEventNameMap[Type]) => void): Return;\n <Type extends MaptilerGeocodingControlEventName>(type: Type, listener?: undefined): Promise<MaptilerGeocodingControlEventNameMap[Type]>;\n}\n\nexport class MaptilerGeocodingControl extends MaplibreglGeocodingControl implements GeocodingControlBase<MaptilerGeocodingControlOptions> {\n #map?: SDKMap;\n\n constructor(options: MaptilerGeocodingControlOptions = {}) {\n super(options);\n }\n\n /** @internal Not to be called directly */\n override onAdd(map: SDKMap): HTMLElement {\n this.#map = map;\n\n map.telemetry.registerModule(name, version);\n\n const options = this.getOptions();\n const { primaryLanguage, apiKey } = map.getSdkConfig();\n\n if (options.apiKey === undefined) {\n this.setOptions({ apiKey });\n }\n\n if (options.language === undefined) {\n const match = primaryLanguage.code?.match(/^([a-z]{2,3})($|_|-)/);\n if (match) {\n this.setOptions({ language: match[1] });\n }\n }\n\n const div = super.onAdd(map);\n div.classList.add(\"maptiler-ctrl-geocoder\");\n div.querySelector(\"maptiler-geocoder\")?.classList.add(\"maptiler-geocoder\");\n return div;\n }\n\n /** @internal Not to be called directly */\n override onRemove(): void {\n super.onRemove();\n this.#map = undefined;\n }\n\n declare getOptions: () => MaptilerGeocodingControlOptions;\n\n override setOptions(options: MaptilerGeocodingControlOptions) {\n const originalAdjustUrl = options.adjustUrl;\n super.setOptions({\n ...options,\n adjustUrl: (url: URL) => {\n originalAdjustUrl?.(url);\n const opts = this.getOptions();\n if (\n (config.session ? options.session !== false : options.session === true) &&\n this.#map &&\n (!opts.apiUrl || new URL(opts.apiUrl).host === new URL(import.meta.env.VITE_API_URL).host)\n ) {\n url.searchParams.append(\"mtsid\", this.#map.getMaptilerSessionId());\n }\n },\n });\n }\n\n declare on: EventHandlingMethod<Subscription>;\n declare off: EventHandlingMethod<this>;\n declare once: EventOnceHandlingMethod<this>;\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","_wasFeatureListVisible","_searchTimeoutRef","_missingIconsCache","_centerAndZoom","_MaptilerGeocoderElement_instances","selected_get","isFeatureListVisible_get","isLoading_get","isSearchValueTooShort_get","dispatch_fn","handleSubmit_fn","isQueryReverse_fn","focusInputAndSelectText_fn","changeSearchValue_fn","clearFeatures_fn","submitSearchValue_fn","search_fn","handleReverse_fn","handleKeyDown_fn","handleInput_fn","pick_fn","handleMouseEnter_fn","handleMouseLeave_fn","handleClear_fn","MaptilerGeocoderElement","__privateSet","options","elementOptions","prop","propertyNames","value","type","listener","coordinates","classMap","repeat","feature","i","detail","event","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","RESULT_SOURCE","RESULT_LAYER_FILL","RESULT_LAYER_LINE","Evented","maplibregl","Marker","Popup","MaplibreglGeocodingControl","#options","#map","#element","map","#setElementOptions","#addEventListeners","div","#removeEventListeners","#markedFeatures","#setFeatures","reverseActive","#markers","#selectedMarker","#reverseMarker","#savedData","#prevIdToFly","#elementEventListeners","canvasContainer","#dispatch","#setReverseMarker","selected","#flyToEnabled","#flyTo","#computeZoom","#setSelectedMarker","#goToPicked","features","#zoomToResults","#mapEventListeners","center","#syncFullGeometryLayer","#fitBounds","fuzzyOnly","allZoom","featZoom","zoomMap","a","category","b","#flyToOptions","#fitBoundsOptions","padding","maxZoom","#createMarker","markedFeatures","marker","#setAndSaveData","addMarker","polygonGeometries","geometry","unioned","geom","mask","lineGeometries","element","effFullGeometryStyle","#getFullGeometryStyle","source","fullGeometryStyle","MaptilerGeocodingControl","name","version","primaryLanguage","apiKey","match","originalAdjustUrl","opts","config"],"mappings":"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"}