{"version":3,"file":"angular-geocoder.mjs","sources":["../../../projects/angular-geocoder/src/lib/angular-geocoder.service.ts","../../../projects/angular-geocoder/src/lib/geocoder-history.service.ts","../../../projects/angular-geocoder/src/lib/angular-geocoder.component.ts","../../../projects/angular-geocoder/src/lib/angular-geocoder.component.html","../../../projects/angular-geocoder/src/lib/angular-geocoder.module.ts","../../../projects/angular-geocoder/src/public-api.ts","../../../projects/angular-geocoder/src/angular-geocoder.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, switchMap } from 'rxjs/operators';\r\nimport {\r\n  SuggestResponse,\r\n  ReverseOptions,\r\n  ReverseGeometry,\r\n  ReverseResponse,\r\n  SuggestOptions,\r\n  LookupOptions,\r\n  LookupResponse,\r\n  SuggestObject,\r\n  SuggestObjectWithHighlight,\r\n  ParsedPlaceObject\r\n} from './locatieserver.model';\r\n\r\nimport { wktToGeoJSON } from \"@terraformer/wkt\"\r\nimport { of } from 'rxjs';\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GeocoderService {\r\n  public geocoderBaseUrl = 'https://api.pdok.nl/bzk/locatieserver/search/v3_1';\r\n  constructor(\r\n    private http: HttpClient,\r\n  ) {\r\n  }\r\n\r\n  public suggest$(query: string, options?: SuggestOptions) {\r\n    let params = {\r\n      q: query,\r\n      fq: '*',  // Also get percelen\r\n      start: 0,\r\n    };\r\n\r\n    if (options) {\r\n      params = Object.assign(params, options);\r\n    }\r\n\r\n    return this.http.get<SuggestResponse>(`${this.geocoderBaseUrl}/suggest?`, { params: params as any })\r\n      .pipe(\r\n        switchMap(suggestResultObject => {\r\n          if (suggestResultObject.spellcheck.collations.length > 0 && suggestResultObject.response.docs.length === 0) {\r\n            return this.http.get<SuggestResponse>(`${this.geocoderBaseUrl}/suggest?`, {\r\n              params:\r\n              {\r\n                ...params,\r\n                q: suggestResultObject.spellcheck.collations[1].collationQuery\r\n              }\r\n            }).pipe(\r\n              map(newSuggestions => {\r\n                const places = this.formatPlaces(newSuggestions);\r\n                return { places };\r\n              })\r\n            )\r\n          }\r\n\r\n          const places = this.formatPlaces(suggestResultObject);\r\n          return of({ places });\r\n        })\r\n      );\r\n  }\r\n\r\n  public lookup$(id: string, options?: LookupOptions) {\r\n    let params = {\r\n      id: id,\r\n      fl: '*'\r\n    };\r\n\r\n    if (options) {\r\n      params = Object.assign(params, options);\r\n    }\r\n\r\n    return this.http.get<LookupResponse>(`${this.geocoderBaseUrl}/lookup?`, { params: params as any }).pipe(\r\n      map(lookupResponse => this.formatLookupResponse(lookupResponse))\r\n    );\r\n  }\r\n\r\n  public free$(searchTerm: string, options?: SuggestOptions) {\r\n    let params = {\r\n      q: searchTerm,\r\n      fl: '*',\r\n      fq: '*',\r\n      rows: 10,\r\n      start: 0,\r\n    };\r\n\r\n    if (options) {\r\n      params = Object.assign(params, options);\r\n    }\r\n\r\n    return this.http.get<ReverseResponse>(`${this.geocoderBaseUrl}/free?`, { params: params as any }).pipe(\r\n      map(freeResponse => this.formatReverseResponse(freeResponse))\r\n    );\r\n  }\r\n\r\n  public reverse$(location: ReverseGeometry, options?: ReverseOptions) {\r\n    let params = {\r\n      fq: '*',\r\n      fl: '*',\r\n      rows: 10,\r\n      distance: 200, // meter,\r\n      lat: location.lat,\r\n      lon: location.lon\r\n    };\r\n\r\n    if (options) {\r\n      params = Object.assign(params, options);\r\n    }\r\n\r\n    const reverseUrl = `${this.geocoderBaseUrl}/reverse?`;\r\n    return this.http.get<ReverseResponse>(reverseUrl, { params: params as any }).pipe(\r\n      map((reverseResponse) => this.formatReverseResponse(reverseResponse))\r\n    );\r\n  }\r\n\r\n  private formatPlaces(suggestResponse: SuggestResponse) {\r\n    const places: SuggestObjectWithHighlight[] = suggestResponse.response.docs.map((place: SuggestObject) => {\r\n      return {\r\n        ...place,\r\n        highlight: suggestResponse.highlighting[place.id].suggest?.[0] || place.weergavenaam\r\n      };\r\n    });\r\n    return places;\r\n  }\r\n\r\n  /**\r\n   * Parse WKT in lookup response.\r\n   */\r\n  private formatLookupResponse(lookupResponse: LookupResponse): ParsedPlaceObject | null {\r\n    const formatted = lookupResponse.response.docs.map((lookupResult) => {\r\n      const formattedLookupResult: ParsedPlaceObject = {\r\n        ...lookupResult,\r\n        ...(lookupResult.centroide_ll && { centroide_ll: wktToGeoJSON(lookupResult.centroide_ll) } as const),\r\n        ...(lookupResult.centroide_rd && { centroide_rd: wktToGeoJSON(lookupResult.centroide_rd) } as const),\r\n        ...(lookupResult.geometrie_rd && { geometrie_rd: wktToGeoJSON(lookupResult.geometrie_rd) } as const),\r\n        ...(lookupResult.geometrie_ll && { geometrie_ll: wktToGeoJSON(lookupResult.geometrie_ll) } as const),\r\n        highlight: lookupResult.weergavenaam,\r\n      };\r\n      return formattedLookupResult;\r\n    });\r\n\r\n    return formatted[0] || null;\r\n  }\r\n\r\n  private formatReverseResponse(lookupResultObject: ReverseResponse) {\r\n    const formatted = lookupResultObject.response.docs.map((reverseResult) => {\r\n      const formattedLookupResult = {\r\n        ...reverseResult,\r\n        ...(reverseResult.centroide_ll && { centroide_ll: wktToGeoJSON(reverseResult.centroide_ll) } as const),\r\n        ...(reverseResult.centroide_rd && { centroide_rd: wktToGeoJSON(reverseResult.centroide_rd) } as const),\r\n        ...(reverseResult.geometrie_rd && { geometrie_rd: wktToGeoJSON(reverseResult.geometrie_rd) } as const),\r\n        ...(reverseResult.geometrie_ll && { geometrie_ll: wktToGeoJSON(reverseResult.geometrie_ll) } as const),\r\n        highlight: reverseResult.weergavenaam,\r\n      };\r\n      return formattedLookupResult;\r\n    });\r\n\r\n    return formatted;\r\n  }\r\n\r\n\r\n}\r\n","import { DestroyRef, Inject, inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ParsedPlaceObject } from './locatieserver.model';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class GeocoderHistoryService {\r\n    public MAX_HISTORY_ENTRIES = 5;\r\n    public HISTORY_LOCALSTORAGE_KEY = 'geocoder_history_v1';\r\n    public history$ = new BehaviorSubject<ParsedPlaceObject[]>(this.retrieveHistory());\r\n    public destroyRef = inject(DestroyRef);\r\n\r\n    public saveToLocalStorage = this.history$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(history => {\r\n        this.saveHistory(history);\r\n    });\r\n\r\n    constructor(\r\n        @Inject(PLATFORM_ID) private platformId\r\n    ) {\r\n    }\r\n\r\n    public getHistory() {\r\n        return this.history$.value;\r\n    }\r\n\r\n    public updateHistory(lookupObject: ParsedPlaceObject) {\r\n        const existingIndex = this.history$.value.findIndex(h => h.id === lookupObject.id);\r\n        if (existingIndex === -1) {\r\n            this.history$.next([...this.history$.value, lookupObject].slice(-this.MAX_HISTORY_ENTRIES));\r\n        }\r\n\r\n        // Don't add a duplicate search result, but instead move it to end of array\r\n        const updatedHistory = [...this.history$.value];\r\n        updatedHistory.splice(existingIndex, 1);\r\n        updatedHistory.push(lookupObject);\r\n        this.history$.next(updatedHistory);\r\n    }\r\n\r\n    public saveHistory(history: ParsedPlaceObject[]) {\r\n        if (!this.isLocalStorageAvailable()) {\r\n            return;\r\n        }\r\n        localStorage.setItem(this.HISTORY_LOCALSTORAGE_KEY, JSON.stringify(history));\r\n    }\r\n\r\n    public retrieveHistory() {\r\n        if (!this.isLocalStorageAvailable()) {\r\n            return [];\r\n        }\r\n        const history = localStorage.getItem(this.HISTORY_LOCALSTORAGE_KEY);\r\n        try {\r\n            return JSON.parse(history) || [];\r\n        } catch (e) {\r\n            console.error('Error parsing history from localStorage', e);\r\n            return [];\r\n        }\r\n    }\r\n\r\n\r\n    private isLocalStorageAvailable(): boolean {\r\n        if (isPlatformBrowser(this.platformId)) {\r\n            return true;\r\n        }\r\n        return false;\r\n\r\n    }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, HostListener, OnChanges, OnInit, SimpleChanges, viewChild, input, output, signal, computed } from '@angular/core';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { BehaviorSubject, combineLatest, firstValueFrom, merge, Subject, tap } from 'rxjs';\r\nimport { filter, debounceTime, switchMap, shareReplay, startWith, map, mergeMap } from 'rxjs/operators';\r\nimport { GeocoderService } from './angular-geocoder.service';\r\nimport { LocatieserverObjectType, ParsedPlaceObject, SuggestObjectWithHighlight, SuggestOptions } from './locatieserver.model';\r\nimport { GeocoderHistoryService } from './geocoder-history.service';\r\n\r\n@Component({\r\n  selector: 'angular-geocoder',\r\n  templateUrl: 'angular-geocoder.component.html',\r\n  styleUrls: ['angular-geocoder.component.scss'],\r\n  host: { 'class': 'geocoder' },\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: false,\r\n})\r\nexport class GeocoderComponent implements OnInit, OnChanges {\r\n  public SEARCH_CHARACTER_THRESHOLD = 2;\r\n\r\n  readonly geocoderRef = viewChild<ElementRef>('geocoder');\r\n  readonly type = input<LocatieserverObjectType>(undefined);\r\n  readonly searchInput = input<string>(undefined);\r\n  readonly placeholder = input<string>(undefined);\r\n  readonly resultCountLimit = input(12);\r\n  readonly province = input<string>(undefined);\r\n  readonly fullscreen = input(false);\r\n  readonly microphone = input(true);\r\n  readonly boxshadow = input(true);\r\n  readonly borderradius = input(true);\r\n  readonly placeFound = output<ParsedPlaceObject | null>();\r\n  readonly clearResults = output<any>();\r\n  readonly query = output<string>();\r\n  readonly freeSearchResults = output<ParsedPlaceObject[]>();\r\n  readonly blur = output<any>();\r\n  @HostBinding('class.geocoder--selected')\r\n  get hostGeocoderClass() {\r\n    return this.hasFocus();\r\n  }\r\n  readonly hasFocus = signal(false);\r\n\r\n  // @ts-ignores\r\n  public speechRecognizer: any | undefined;\r\n  public formattedPlaceholder = computed(() => this.formatPlaceholder(this.placeholder()));\r\n\r\n  // Microphone\r\n  public searchControl = new FormControl<string | null | undefined>(undefined, { validators: [Validators.minLength(this.SEARCH_CHARACTER_THRESHOLD)] });\r\n  public readonly microphoneActive = signal(false);\r\n\r\n  // Reverse geocoding\r\n  public userGpsLocation$ = new Subject<{ lat: number, lon: number }>();\r\n  public suggest$ = this.searchControl.valueChanges.pipe(\r\n    filter(searchInput => searchInput.length > this.SEARCH_CHARACTER_THRESHOLD),\r\n    debounceTime(200),\r\n    tap((input) => this.query.emit(input)),\r\n    switchMap(searchInput => this.suggest(searchInput)),\r\n    shareReplay()\r\n  );\r\n\r\n  public reverseSuggest$ = this.userGpsLocation$.pipe(\r\n    switchMap((params) => this.reverse(params)),\r\n    shareReplay(),\r\n  );\r\n\r\n  public useMyLocationPlace = {\r\n    weergavenaam: 'Gebruik huidige locatie',\r\n    subtitle: 'Zoek met GPS/apparaatlocatie',\r\n    type: 'gps',\r\n    id: 'gps'\r\n  } as any;\r\n\r\n  private historyWithTypeFilter$ = combineLatest([this.geocoderHistoryService.history$, toObservable(this.type)]).pipe(\r\n    map(([history, type]) => {\r\n      if (type === undefined || type === null || type.length === 0) {\r\n        return history;\r\n      }\r\n\r\n      const allTypes = type.split(',');\r\n      return history.filter(h => allTypes.includes(h.type));\r\n    })\r\n  );\r\n\r\n  public tooFewCharacters$ = this.searchControl.valueChanges.pipe(\r\n    startWith(this.searchControl.value),\r\n    filter(searchInput => searchInput?.length <= this.SEARCH_CHARACTER_THRESHOLD || searchInput === null),\r\n    mergeMap(() => this.historyWithTypeFilter$),\r\n    map(history => [...history.slice().reverse(), this.useMyLocationPlace]),\r\n  );\r\n\r\n  public places$ = merge(\r\n    this.suggest$.pipe(\r\n      map((response) => response.places),\r\n    ),\r\n    this.reverseSuggest$,\r\n    this.tooFewCharacters$,\r\n  );\r\n\r\n  public readonly places = toSignal(this.places$);\r\n  public foundPlace$ = new BehaviorSubject(null);\r\n  public selectedIndex = -1;\r\n  public readonly lookupResponseFound = signal(false);\r\n\r\n  @HostListener('document:click', ['$event']) clickout(event) {\r\n    if (this.geocoderRef().nativeElement.contains(event.target)) {\r\n      this.showSuggestions();\r\n    } else {\r\n      this.hideResults();\r\n    }\r\n  }\r\n\r\n\r\n  constructor(private geocoderService: GeocoderService, private geocoderHistoryService: GeocoderHistoryService) { }\r\n  ngOnInit() {\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.searchInput) {\r\n      this.searchControl.setValue(changes.searchInput.currentValue);\r\n    }\r\n  }\r\n\r\n  private suggest(searchTerm: string) {\r\n    const flArray = ['id', 'score', 'type', 'weergavenaam', 'straatnaam', 'huis_nlt', 'woonplaatsnaam', 'kadastrale_gemeentecode', 'kadastrale_sectie', 'perceelnummer', 'kadastrale_gemeentenaam'];\r\n    const params = {\r\n      fq: '*:*',\r\n      fl: flArray.toString(),\r\n      rows: this.resultCountLimit()\r\n    } as SuggestOptions;\r\n    const searchTermWithoutIllegalCharacters = this.removeErrorCausingCharacters(searchTerm);\r\n    const formattedSearchTerm = this.formatSearchTerm(searchTermWithoutIllegalCharacters);\r\n    const type = this.type();\r\n    const provinceValue = this.province();\r\n    if (type) {\r\n      const replace = ',';\r\n      const regex = new RegExp(replace, 'g');\r\n      const query = type.replace(regex, ' OR ');\r\n      params.fq = `type:(${query})`;\r\n      const province = this.province();\r\n      if (province) {\r\n        params.fq += ` AND provincienaam:(${province})`;\r\n      }\r\n    } else if (provinceValue) {\r\n      params.fq = `provincienaam:(${provinceValue})`;\r\n    }\r\n\r\n\r\n    return this.geocoderService.suggest$(formattedSearchTerm, params);\r\n  }\r\n\r\n  private reverse(params: { lat: number, lon: number }) {\r\n    const opts = {\r\n      type: 'adres',\r\n      fq: '*:*',\r\n      rows: this.resultCountLimit()\r\n    };\r\n\r\n    const type = this.type();\r\n    const provinceValue = this.province();\r\n    if (type) {\r\n      // Set type to all and use FQ to determine type, so that we can re-use logic\r\n      opts.type = '*';\r\n      const replace = ',';\r\n      const regex = new RegExp(replace, 'g');\r\n      const query = type.replace(regex, ' OR ');\r\n      opts.fq = `type:(${query})`;\r\n      const province = this.province();\r\n      if (province) {\r\n        opts.fq += ` AND provincienaam:(${province})`;\r\n      }\r\n    } else if (provinceValue) {\r\n      opts.fq = `provincienaam:(${provinceValue})`;\r\n    }\r\n    return this.geocoderService.reverse$(params, opts);\r\n  }\r\n\r\n  public async lookup(id: string) {\r\n    const lookupObj = await this.geocoderService.lookup$(id).toPromise();\r\n    this.foundPlace$.next(lookupObj);\r\n    this.geocoderHistoryService.updateHistory(lookupObj);\r\n    this.fillInput(lookupObj.weergavenaam);\r\n    this.placeFound.emit(lookupObj);\r\n    this.lookupResponseFound.set(true);\r\n    this.clearPlaces();\r\n    this.hideResults();\r\n  }\r\n\r\n  public async reverseGeocode() {\r\n    const gpsLocation = await this.getGpsLocation();\r\n    this.userGpsLocation$.next(gpsLocation);\r\n  }\r\n\r\n  public async free() {\r\n    const params = {\r\n      fq: '*:*',\r\n      rows: this.resultCountLimit()\r\n    } as SuggestOptions;\r\n\r\n    const type = this.type();\r\n    const provinceValue = this.province();\r\n    if (type) {\r\n      const replace = ',';\r\n      const regex = new RegExp(replace, 'g');\r\n      const query = type.replace(regex, ' OR ');\r\n      params.fq = `type:(${query})`;\r\n      const province = this.province();\r\n      if (province) {\r\n        params.fq += ` AND provincienaam:(${province})`;\r\n      }\r\n    } else if (provinceValue) {\r\n      params.fq = `provincienaam:(${provinceValue})`;\r\n    }\r\n\r\n    const searchTerm = this.searchControl.value;\r\n    const free = await firstValueFrom(this.geocoderService.free$(searchTerm, params));\r\n    this.freeSearchResults.emit(free);\r\n  }\r\n\r\n  public clear(event: Event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    this.foundPlace$.next(null);\r\n    this.searchControl.setValue('');\r\n    this.clearPlaces();\r\n    this.lookupResponseFound.set(false);\r\n    this.hideResults();\r\n    this.clearResults.emit(true);\r\n  }\r\n\r\n  public clearPlaces() {\r\n    this.resetIndex();\r\n  }\r\n\r\n  public async handleSuggestClick(id: 'gps' | string) {\r\n    if (id === 'gps') {\r\n      this.reverseGeocode();\r\n    } else {\r\n      this.lookup(id);\r\n    }\r\n  }\r\n\r\n  public handleEnter(places: SuggestObjectWithHighlight[]) {\r\n    if (this.selectedIndex === -1) {\r\n      return;\r\n    }\r\n    const selectedPlace = places[this.selectedIndex];\r\n    this.lookup(selectedPlace.id);\r\n  }\r\n\r\n  public reachedThreshold$ = this.searchControl.valueChanges.pipe(\r\n    startWith(''),\r\n    map(val => (val && val.length) > this.SEARCH_CHARACTER_THRESHOLD)\r\n  );\r\n\r\n  public noPlacesFound$ = this.places$.pipe(\r\n    map(places => places.length === 0),\r\n  );\r\n\r\n  public noResult$ = this.foundPlace$.pipe(\r\n    map(place => place === null)\r\n  );\r\n\r\n  public readonly noResult = toSignal(this.noResult$);\r\n\r\n  public readonly isNoResultsFound = toSignal(combineLatest([this.reachedThreshold$, this.noPlacesFound$, this.noResult$]).pipe(\r\n    map(([reachedThreshold, noSuggestions, noResult]) => reachedThreshold && noSuggestions && noResult)\r\n  ));\r\n\r\n  public fillInput(content: string, emitEvent = false) {\r\n    this.searchControl.setValue(content, {\r\n      emitEvent: emitEvent\r\n    });\r\n  }\r\n\r\n  public isHighlighted(i: number) {\r\n    if (i === this.selectedIndex) {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  public moveUp() {\r\n    if (this.selectedIndex > 0) {\r\n      this.selectedIndex--;\r\n    }\r\n  }\r\n\r\n  public moveDown(places: SuggestObjectWithHighlight[]) {\r\n    if (this.selectedIndex < places.length) {\r\n      this.selectedIndex++;\r\n    }\r\n  }\r\n\r\n  public resetIndex() {\r\n    this.selectedIndex = -1;\r\n  }\r\n\r\n  public canQuery() {\r\n    const searchInput = this.searchControl.value;\r\n    return searchInput && searchInput.length > this.SEARCH_CHARACTER_THRESHOLD;\r\n  }\r\n\r\n  public canClear() {\r\n    const searchInput = this.searchControl.value;\r\n    return searchInput && searchInput.length > 0;\r\n  }\r\n\r\n  public formatPlaceholder(placeholder: string) {\r\n    let placeholderText = 'Zoeken op de kaart...';\r\n\r\n    if (placeholder) {\r\n      placeholderText = placeholder;\r\n    }\r\n    return placeholderText;\r\n  }\r\n\r\n  public showSuggestions() {\r\n    this.hasFocus.set(true);\r\n  }\r\n\r\n  private getSpeechRecognition() {\r\n    if (this.speechRecognizer) {\r\n      return this.speechRecognizer;\r\n    }\r\n\r\n    //@ts-ignore\r\n    const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n    const recognition = new SpeechRecognition();\r\n    recognition.interimResults = false; // Set to true if you want interim results\r\n    recognition.lang = 'nl-NL'; // Set the language here\r\n    this.speechRecognizer = recognition;\r\n\r\n    return this.speechRecognizer;\r\n\r\n  }\r\n\r\n  public speechToText(event: any) {\r\n    const recognition = this.getSpeechRecognition();\r\n\r\n    if (this.microphoneActive() === true) {\r\n      return recognition.stop();\r\n    }\r\n\r\n    recognition.onresult = (event) => {\r\n      this.searchControl.setValue(event.results[0][0]?.transcript);\r\n    }\r\n\r\n    recognition.onend = (event) => {\r\n      this.microphoneActive.set(false);\r\n    }\r\n\r\n    this.microphoneActive.set(true);\r\n    recognition.start();\r\n  }\r\n\r\n  private hideResults() {\r\n    this.hasFocus.set(false);\r\n  }\r\n\r\n  private async getGpsLocation(): Promise<{ lat: number, lon: number } | null> {\r\n    if (!navigator.geolocation) {\r\n      alert('GPS wordt niet ondersteund door uw apparaat');\r\n      return null;\r\n    }\r\n\r\n    return new Promise((resolve, reject) => {\r\n      navigator.geolocation.getCurrentPosition((position) => {\r\n        resolve({\r\n          lat: position.coords.latitude,\r\n          lon: position.coords.longitude\r\n        });\r\n      }, (error) => {\r\n\r\n        const map = {\r\n          1: 'U heeft ons geen toestemming gegeven om uw locatie op te halen',\r\n          2: 'Uw locatie is niet beschikbaar',\r\n          3: 'Het duurt te lang om uw locatie op te halen'\r\n        };\r\n\r\n        alert(map[error.code] || 'Het is niet gelukt om uw locatie op te halen');\r\n\r\n        reject(error);\r\n      });\r\n    });\r\n  }\r\n\r\n\r\n  private formatSearchTerm(searchTerm: string) {\r\n    const isKadastraleAanduidingRegex = /[a-zA-Z]{3}[0-9]{2}[a-zA-Z]{1,2}[0-9]{1,5}/;\r\n    const isBagId = /^\\d{16}$/;\r\n\r\n\r\n    if (isKadastraleAanduidingRegex.test(searchTerm) === true) {\r\n      // Use three capturing groups () () () to split the string by.\r\n      const splitAanduidingRegex = /([a-zA-Z]{3}[0-9]{2})([a-zA-Z]{1,2})([0-9]{1,5})/;\r\n      const formattedTerm = searchTerm.split(splitAanduidingRegex).filter(str => str !== '').join(' ');\r\n      return formattedTerm;\r\n    }\r\n\r\n    if (isBagId.test(searchTerm) === true) {\r\n      return `* AND (adresseerbaarobject_id:${searchTerm} OR nummeraanduiding_id:${searchTerm})`;\r\n    }\r\n\r\n    return searchTerm;\r\n  }\r\n\r\n  private removeErrorCausingCharacters(searchTerm: string): string {\r\n    return searchTerm.replace(';', '')\r\n  }\r\n}\r\n","<div #geocoder (keydown.ArrowUp)=\"moveUp()\" (keydown.ArrowDown)=\"moveDown(places())\"\r\n  (keydown.Enter)=\"handleEnter(places())\" class=\"geocoder-container\"\r\n  [class.geocoder-container--fullscreen]=\"hasFocus() === true && fullscreen() === true\" [class.boxshadow]=\"boxshadow()\"\r\n  [class.borderradius]=\"borderradius()\">\r\n  <!-- Input -->\r\n  <div class=\"geocoder-search\">\r\n    @if (hasFocus() && fullscreen() === true) {\r\n    <button aria-label=\"Terug\" class=\"back\" (click)=\"clear($event)\">\r\n      <svg viewBox=\"0 0 768 768\" height=\"21\" width=\"21\" fill=\"currentColor\">\r\n        <path\r\n          d=\"M406.624 585.376l-169.376-169.376h370.752c17.664 0 32-14.336 32-32s-14.336-32-32-32h-370.752l169.376-169.376c12.512-12.512 12.512-32.768 0-45.248s-32.768-12.512-45.248 0l-224 224c-3.072 3.072-5.376 6.592-6.944 10.368-1.632 3.904-2.432 8.096-2.432 12.256 0 8.192 3.136 16.384 9.376 22.624l224 224c12.512 12.512 32.768 12.512 45.248 0s12.512-32.768 0-45.248z\">\r\n        </path>\r\n      </svg>\r\n    </button>\r\n    }\r\n\r\n    <input (click)=\"showSuggestions()\" [formControl]=\"searchControl\" (blur)=\"blur.emit($event)\"\r\n      class=\"geocoder-search__input\" [placeholder]=\"formattedPlaceholder()\" type=\"text\" maxlength=\"100\">\r\n\r\n    @if (microphone() === true) {\r\n    <button (click)=\"speechToText($event)\" aria-label=\"Zoeken met spraak\" class=\"mic\"\r\n      [class.mic--active]=\"microphoneActive()\">\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n        stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n        <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\r\n        <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\r\n        <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\r\n        <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\r\n      </svg>\r\n    </button>\r\n    }\r\n\r\n\r\n    @if (lookupResponseFound() === true) {\r\n    <button aria-label=\"Sluiten\" class=\"close\" width=\"15\" height=\"15\" (click)=\"clear($event)\">\r\n      <svg viewBox=\"0 0 384 512\">\r\n        <path fill=\"currentColor\"\r\n          d=\"M217.5 256l137.2-137.2c4.7-4.7 4.7-12.3 0-17l-8.5-8.5c-4.7-4.7-12.3-4.7-17 0L192 230.5 54.8 93.4c-4.7-4.7-12.3-4.7-17 0l-8.5 8.5c-4.7 4.7-4.7 12.3 0 17L166.5 256 29.4 393.2c-4.7 4.7-4.7 12.3 0 17l8.5 8.5c4.7 4.7 12.3 4.7 17 0L192 281.5l137.2 137.2c4.7 4.7 12.3 4.7 17 0l8.5-8.5c4.7-4.7 4.7-12.3 0-17L217.5 256z\"\r\n          class=\"\"></path>\r\n      </svg>\r\n    </button>\r\n    } @else {\r\n    <button (click)=\"free()\" aria-label=\"Zoeken met tekst\" class=\"search\">\r\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n        stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n        <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n        <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\r\n      </svg>\r\n    </button>\r\n    }\r\n\r\n  </div>\r\n\r\n\r\n  <!-- Search results-->\r\n  @if (hasFocus() === true) {\r\n  @if (places().length > 0) {\r\n  <div class=\"geocoder-suggestions\">\r\n    <ul class=\"geocoder-suggestions__list\">\r\n      @for (place of places(); track place.id; let i = $index) {\r\n      <li class=\"geocoder-suggestion\" tabindex={{i}} (click)=\"handleSuggestClick(place.id)\"\r\n        [class.geocoder-suggestion--focus]=\"isHighlighted(i)\">\r\n\r\n        @switch (place.type) {\r\n        @case ('gps') {\r\n        <div class=\"geocoder-suggestion__content\">\r\n          <div class=\"geocoder-suggestion__content__title\">\r\n            {{ place.weergavenaam }}\r\n          </div>\r\n          <div class=\"geocoder-suggestion__content__subtitle\"> {{place.subtitle}}</div>\r\n        </div>\r\n        }\r\n\r\n        @case ('adres') {\r\n        <div class=\"geocoder-suggestion__content\">\r\n          <div class=\"geocoder-suggestion__content__title\">\r\n            {{place.straatnaam }} {{place.huis_nlt}}\r\n          </div>\r\n          <div class=\"geocoder-suggestion__content__subtitle\"> {{place.woonplaatsnaam}}</div>\r\n        </div>\r\n        }\r\n\r\n        @case ('perceel') {\r\n        <div class=\"geocoder-suggestion__content\">\r\n          <div class=\"geocoder-suggestion__content__title\">\r\n            Perceel {{place.kadastrale_gemeentecode }} {{place.kadastrale_sectie}} {{place.perceelnummer}}\r\n          </div>\r\n          <div class=\"geocoder-suggestion__content__subtitle\"> {{place.kadastrale_gemeentenaam}}</div>\r\n        </div>\r\n        }\r\n\r\n        @case ('weg') {\r\n        <div class=\"geocoder-suggestion__content\">\r\n          <div class=\"geocoder-suggestion__content__title\">\r\n            {{place.straatnaam }}\r\n          </div>\r\n          <div class=\"geocoder-suggestion__content__subtitle\"> {{place.woonplaatsnaam}}</div>\r\n        </div>\r\n        }\r\n\r\n        @default {\r\n        <div class=\"geocoder-suggestion__content\">\r\n          <div class=\"geocoder-suggestion__content__title\" [innerHTML]=\"place.highlight\">\r\n          </div>\r\n        </div>\r\n        }\r\n\r\n        }\r\n        <div class=\"geocoder-suggestion__type\"> {{place.type}} </div>\r\n\r\n      </li>\r\n      }\r\n\r\n    </ul>\r\n  </div>\r\n  }\r\n\r\n  @if (isNoResultsFound() === true) {\r\n  <div class=\"geocoder-noresults\">\r\n    Geen resultaten voor <strong>\"{{searchControl.value}}\"</strong>\r\n  </div>\r\n  }\r\n\r\n  <!-- Backdrop-->\r\n  @if (fullscreen() === true) {\r\n  <div class=\"geocoder-backdrop\"></div>\r\n  }\r\n  }\r\n</div>","import { provideHttpClient, withFetch } from \"@angular/common/http\";\r\nimport { NgModule, provideZonelessChangeDetection } from \"@angular/core\";\r\nimport { ReactiveFormsModule } from \"@angular/forms\";\r\nimport { GeocoderComponent } from \"./angular-geocoder.component\";\r\n\r\n@NgModule({\r\n  declarations: [GeocoderComponent],\r\n  exports: [GeocoderComponent],\r\n  imports: [ReactiveFormsModule],\r\n  providers: [provideHttpClient(withFetch()), provideZonelessChangeDetection()],\r\n})\r\nexport class GeocoderModule {}\r\n","/*\r\n * Public API Surface of angular-geocoder\r\n */\r\n\r\nexport * from './lib/angular-geocoder.service';\r\nexport * from './lib/angular-geocoder.component';\r\nexport * from './lib/angular-geocoder.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GeocoderService","i2.GeocoderHistoryService"],"mappings":"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"}