{"version":3,"file":"hslayers-ng-components-trip-planner.mjs","sources":["../../../projects/hslayers/components/trip-planner/ors-profiles.const.ts","../../../projects/hslayers/components/trip-planner/trip-planner.service.ts","../../../projects/hslayers/components/trip-planner/layer-selector.component.ts","../../../projects/hslayers/components/trip-planner/layer-selector.component.html","../../../projects/hslayers/components/trip-planner/route-profile-selector.component.ts","../../../projects/hslayers/components/trip-planner/route-profile-selector.component.html","../../../projects/hslayers/components/trip-planner/trip-planner.component.ts","../../../projects/hslayers/components/trip-planner/trip-planner.component.html","../../../projects/hslayers/components/trip-planner/trip-planner.module.ts","../../../projects/hslayers/components/trip-planner/hslayers-ng-components-trip-planner.ts"],"sourcesContent":["export const profiles = [\n  'driving-car',\n  'driving-hgv',\n  'cycling-regular',\n  'cycling-road',\n  'cycling-mountain',\n  'cycling-electric',\n  'foot-walking',\n  'foot-hiking',\n  'wheelchair',\n] as const;\n\nexport type RouteProfile = (typeof profiles)[number];\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\nimport {catchError, lastValueFrom, of, timeout} from 'rxjs';\n\nimport {Collection, Feature} from 'ol';\nimport {Draw, Modify} from 'ol/interaction';\nimport {Fill, Icon, Stroke, Style, Text} from 'ol/style';\nimport {GeoJSON} from 'ol/format';\nimport {Geometry, Point} from 'ol/geom';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\nimport {transform} from 'ol/proj';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {\n  instOf,\n  HsProxyService,\n  isLayerDrawable,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsShareUrlService} from 'hslayers-ng/services/share';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {RouteProfile, profiles} from './ors-profiles.const';\nimport {\n  getHighlighted,\n  setTitle,\n  getTitle,\n} from 'hslayers-ng/common/extensions';\n\nexport type Waypoint = {\n  name: string;\n  lon: number;\n  lat: number;\n  hash: number;\n  routes: {from: Feature<Geometry>; to: Feature<Geometry>};\n  featureId;\n  editMode?: boolean;\n  loading: boolean;\n};\n\nconst WAYPOINT = 'wp' as const;\n\nexport function setWaypoint(feature: Feature<Geometry>, wp: Waypoint): void {\n  feature.set(WAYPOINT, wp);\n}\n\nexport function getWaypoint(feature: Feature<Geometry>): Waypoint {\n  return feature.get(WAYPOINT);\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsTripPlannerService {\n  hsMapService = inject(HsMapService);\n  private $http = inject(HttpClient);\n  hsShareUrlService = inject(HsShareUrlService);\n  hsEventBusService = inject(HsEventBusService);\n  private hsToastService = inject(HsToastService);\n  hsLanguageService = inject(HsLanguageService);\n  private hsLayoutService = inject(HsLayoutService);\n  private hsConfig = inject(HsConfig);\n  private hsProxyService = inject(HsProxyService);\n\n  waypointRouteStyle;\n  waypoints: Waypoint[] = [];\n  trip: any = {};\n  orsProfiles = profiles;\n  movable_features = new Collection<Feature<Geometry>>();\n  modify: Modify;\n  waypointSource: VectorSource<Feature<Point>>;\n  waypointLayer: VectorLayer<VectorSource<Feature<Point>>>;\n  routeSource: VectorSource;\n  routeLayer: VectorLayer<VectorSource<Feature>>;\n  timer: any;\n  vectorLayers: {layer: VectorLayer<VectorSource<Feature>>; title: string}[];\n  selectedLayerWrapper: {\n    route?: {layer: VectorLayer<VectorSource<Feature>>; title: string};\n    waypoints?: {layer: VectorLayer<VectorSource<Feature>>; title: string};\n  } = {};\n  selectedProfile: RouteProfile = profiles[0];\n\n  constructor() {\n    this.modify = new Modify({\n      features: this.movable_features,\n    });\n\n    this.hsEventBusService.mapClicked.subscribe(({coordinates}) => {\n      if (this.hsLayoutService.mainpanel != 'tripPlanner') {\n        return;\n      }\n      if (!this.waypointLayer) {\n        this.createWaypointLayer();\n      }\n      if (!this.routeLayer) {\n        this.createRouteLayer();\n      }\n      //Don't add waypoints when drawing and measuring\n      if (\n        this.hsMapService\n          .getMap()\n          .getInteractions()\n          .getArray()\n          .find((i) => i.getActive() && instOf(i, Draw))\n      ) {\n        return;\n      }\n      this.addWaypoint({\n        x: coordinates.mapProjCoordinate[0],\n        y: coordinates.mapProjCoordinate[1],\n        lon: coordinates.epsg4326Coordinate[0],\n        lat: coordinates.epsg4326Coordinate[1],\n      });\n    });\n\n    this.hsMapService.loaded().then((map) => {\n      this.waypointRouteStyle = (feature, resolution) => {\n        return [\n          new Style({\n            fill: new Fill({\n              color: 'rgba(255, 255, 255, 0.6)',\n            }),\n            stroke: new Stroke({\n              color: '#337AB7',\n              width: 3,\n            }),\n            image: new Icon({\n              src:\n                this.hsConfig.assetsPath + getHighlighted(feature)\n                  ? 'img/pin_white_red32.png'\n                  : 'img/pin_white_blue32.png',\n              crossOrigin: 'anonymous',\n              anchor: [0.5, 1],\n            }),\n            text: new Text({\n              font: '12px Calibri,sans-serif',\n              overflow: true,\n              fill: new Fill({\n                color: '#000',\n              }),\n              stroke: new Stroke({\n                color: '#fff',\n                width: 3,\n              }),\n              offsetY: -40,\n              text: this.getTextOnFeature(feature),\n            }),\n          }),\n        ];\n      };\n      map.addInteraction(this.modify);\n      this.fillVectorLayers();\n    });\n  }\n\n  async fillVectorLayers(): Promise<void> {\n    this.hsMapService.loaded().then((map) => {\n      this.vectorLayers = [\n        {\n          layer: null,\n          title: 'newLayer',\n        },\n        ...this.hsMapService\n          .getLayersArray()\n          .filter((layer: Layer<Source>) => isLayerDrawable(layer))\n          .map((layer: VectorLayer<VectorSource<Feature>>) => {\n            return {layer, title: getTitle(layer)};\n          }),\n      ];\n      this.fillDefaultLayerWrapper('route');\n      this.fillDefaultLayerWrapper('waypoints');\n    });\n  }\n\n  private fillDefaultLayerWrapper(usage: 'route' | 'waypoints') {\n    if (this.selectedLayerWrapper[usage]) {\n      this.selectedLayerWrapper[usage] = this.vectorLayers.find(\n        (w) => w.layer == this.selectedLayerWrapper[usage].layer,\n      );\n    } else {\n      this.selectedLayerWrapper[usage] = this.vectorLayers[0];\n    }\n  }\n\n  createWaypointLayer(): void {\n    this.waypointSource = new VectorSource();\n    this.waypointLayer = new VectorLayer({\n      source: this.waypointSource,\n      style: this.waypointRouteStyle,\n    });\n    setTitle(\n      this.waypointLayer,\n      this.hsLanguageService.getTranslation(\n        'TRIP_PLANNER.waypoints',\n        undefined,\n      ),\n    );\n    this.hsMapService.getMap().addLayer(this.waypointLayer);\n  }\n\n  createRouteLayer(): void {\n    this.routeSource = new VectorSource();\n    this.routeLayer = new VectorLayer({\n      source: this.routeSource,\n      style: this.waypointRouteStyle,\n    });\n    setTitle(\n      this.routeLayer,\n      this.hsLanguageService.getTranslation(\n        'TRIP_PLANNER.travelRoute',\n        undefined,\n      ),\n    );\n    this.hsMapService.getMap().addLayer(this.routeLayer);\n  }\n\n  /**\n   * Select layer for storing route or waypoint features\n   * @param layer - Wrapper object which contains OL layer and its title\n   * @param usage - route or waypoints\n   */\n  async selectLayer(\n    layer: {layer: VectorLayer<VectorSource<Feature>>; title: string},\n    usage: 'route' | 'waypoints',\n  ): Promise<void> {\n    if (usage == 'route') {\n      this.routeLayer = layer.layer;\n      if (this.routeLayer) {\n        this.routeSource = this.routeLayer.getSource();\n      }\n      this.selectedLayerWrapper.route = layer;\n    }\n    if (usage == 'waypoints') {\n      this.waypointLayer = layer.layer as VectorLayer<\n        VectorSource<Feature<Point>>\n      >;\n      if (this.waypointLayer) {\n        this.waypointSource = this.waypointLayer.getSource();\n      }\n      this.routeSource.clear();\n      this.waypoints.length = 0;\n      this.selectedLayerWrapper.waypoints = layer;\n      for (const feature of this.waypointSource.getFeatures()) {\n        const new_cords = transform(\n          feature.getGeometry().getCoordinates(),\n          this.hsMapService.getCurrentProj().getCode(),\n          'EPSG:4326',\n        );\n        const wp: Waypoint = {\n          lon: new_cords[0],\n          lat: new_cords[1],\n          name: 'Waypoint ' + (this.waypoints.length + 1),\n          hash: this.hashCode(\n            JSON.stringify('Waypoint ' + this.waypoints.length + Math.random()),\n          ),\n          routes: {from: null, to: null},\n          featureId: feature.getId(),\n          loading: false,\n        };\n        this.waypoints.push(wp);\n        if (this.waypointAdded !== undefined) {\n          this.waypointAdded(wp);\n        }\n        await this.calculateRoutes();\n      }\n    }\n  }\n\n  async selectProfile(profile: RouteProfile): Promise<void> {\n    this.selectedProfile = profile;\n    for (const wp of this.waypoints) {\n      this.removeRoutesForWaypoint(wp);\n    }\n    await this.calculateRoutes();\n  }\n\n  getTextOnFeature(feature: Feature<Geometry>): string {\n    let tmp = '';\n    const wp: Waypoint = getWaypoint(feature);\n    if (wp) {\n      tmp = wp.name;\n      if (wp?.routes?.to) {\n        tmp += ` (${this.formatDistance(wp, 'to')})`;\n      }\n    }\n    return tmp;\n  }\n\n  /**\n   * Add waypoint to waypoint list and recalculate route\n   * @param lon - Longitude number (part of Ol.coordinate Array)\n   * @param lat - Latitude number (part of Ol.coordinate Array)\n   */\n  addWaypoint({\n    x,\n    y,\n    lon,\n    lat,\n  }: {\n    x: number;\n    y: number;\n    lon: number;\n    lat: number;\n  }) {\n    const wp: Waypoint = {\n      lon,\n      lat,\n      name: 'Waypoint ' + (this.waypoints.length + 1),\n      hash: this.hashCode(\n        JSON.stringify('Waypoint ' + this.waypoints.length + Math.random()),\n      ),\n      routes: {from: null, to: null},\n      featureId: null,\n      loading: false,\n    };\n    const feature = new Feature({\n      'wp': wp,\n      geometry: new Point([x, y]),\n      id: crypto.randomUUID(),\n    }) as Feature<Point>;\n    feature.setId(feature.get('id'));\n    wp.featureId = feature.getId();\n    this.waypointSource.addFeature(feature);\n    this.waypoints.push(wp);\n    if (this.waypointAdded !== undefined) {\n      this.waypointAdded(wp);\n    }\n    this.calculateRoutes();\n  }\n\n  /**\n   * Handler of adding waypoint in connected service\n   * @param wp - Waypoint object, with lat, lon and routes array\n   */\n  waypointAdded(wp: Waypoint): void {\n    const feature = this.waypointSource.getFeatureById(wp.featureId);\n    this.movable_features.push(feature);\n    feature.getGeometry().on('change', (e) => {\n      this.removeRoutesForWaypoint(wp);\n      const new_cords = transform(\n        feature.getGeometry().getCoordinates(),\n        this.hsMapService.getCurrentProj().getCode(),\n        'EPSG:4326',\n      );\n      wp.lon = new_cords[0];\n      wp.lat = new_cords[1];\n      const prev_index = this.waypoints.indexOf(wp) - 1;\n      if (prev_index > -1) {\n        this.waypoints[prev_index].routes.from = null;\n        this.routeRemoved(this.waypoints[prev_index].routes.from);\n      }\n      if (this.timer !== null) {\n        clearTimeout(this.timer);\n      }\n      this.timer = setTimeout(() => {\n        this.calculateRoutes();\n      }, 500);\n    });\n  }\n\n  /**\n   * Remove selected route from source\n   * @param feature - Route feature to remove\n   */\n  routeRemoved(feature: Feature<Geometry>): void {\n    try {\n      if (feature) {\n        this.routeSource.removeFeature(feature);\n      }\n    } catch (ex) {\n      throw ex;\n    }\n  }\n\n  /**\n   * (PRIVATE) Remove routes from selected waypoint\n   * @param wp - Waypoint to remove routes\n   */\n  removeRoutesForWaypoint(wp: Waypoint): void {\n    this.routeRemoved(wp.routes.from);\n    this.routeRemoved(wp.routes.to);\n    wp.routes = {from: null, to: null};\n  }\n\n  /**\n   * Remove selected waypoint from source\n   * @param wp - Waypoint feature to remove\n   */\n  waypointRemoved(wp: Waypoint): void {\n    try {\n      this.waypointSource.removeFeature(\n        this.waypointSource.getFeatureById(wp.featureId),\n      );\n    } catch (ex) {\n      throw ex;\n    }\n  }\n\n  /**\n   * Remove selected waypoint from trip\n   * @param wp - Waypoint object to remove\n   */\n  removeWaypoint(wp) {\n    const wpIndex = this.waypoints.indexOf(wp);\n    const prev_index = wpIndex - 1;\n    if (prev_index > -1) {\n      this.waypoints[prev_index].routes.from = null;\n    }\n    this.routeRemoved(wp.routes.from);\n    this.routeRemoved(wp.routes.to);\n    const next_index = wpIndex + 1;\n    if (next_index < this.waypoints.length) {\n      this.waypoints[next_index].routes.to = null;\n    }\n    this.waypointRemoved(wp);\n    this.waypoints.splice(this.waypoints.indexOf(wp), 1);\n    this.calculateRoutes();\n  }\n\n  /**\n   * Clear all waypoints from service and layer\n   */\n  clearAll(): void {\n    this.waypoints = [];\n    this.waypointSource.clear();\n    this.routeSource.clear();\n  }\n\n  /**\n   * Handler of adding computed route to layer\n   * @param feature - Route to add\n   */\n  routeAdded(features: Feature<Geometry>[]): void {\n    this.routeSource.addFeatures(features);\n  }\n\n  /**\n   * Calculate routes between stored waypoints\n   */\n  async calculateRoutes(): Promise<void> {\n    for (let i = 0; i < this.waypoints.length - 1; i++) {\n      const wpf = this.waypoints[i];\n      if (wpf.routes.from === null) {\n        const wpt = this.waypoints[i + 1];\n        wpt.loading = true;\n        const url = this.hsProxyService.proxify(\n          `https://api.openrouteservice.org/v2/directions/${this.selectedProfile}/geojson`,\n        );\n        const response = await lastValueFrom(\n          this.$http\n            .post(url, {\n              'coordinates': [\n                [wpf.lon, wpf.lat],\n                [wpt.lon, wpt.lat],\n              ],\n            })\n            .pipe(\n              timeout(10000),\n              catchError((e) => {\n                let title = this.hsLanguageService.getTranslation(\n                  'TRIP_PLANNER.serviceDown',\n                  undefined,\n                );\n                if (e.status == 404) {\n                  if (e.error?.error?.code == 2010) {\n                    title = this.hsLanguageService.getTranslation(\n                      'TRIP_PLANNER.noRoutablePoint',\n                      undefined,\n                    );\n                  } else {\n                    title = this.hsLanguageService.getTranslation(\n                      'TRIP_PLANNER.missingAuth',\n                      undefined,\n                    );\n                  }\n                }\n                this.hsToastService.createToastPopupMessage(\n                  title,\n                  this.hsLanguageService.getTranslationIgnoreNonExisting(\n                    'ERRORMESSAGES',\n                    e.error?.error?.message ?? e.message,\n                    {url},\n                  ),\n                  {\n                    disableLocalization: true,\n                    serviceCalledFrom: 'HsTripPlannerService',\n                  },\n                );\n                return of(null);\n              }),\n            ),\n        );\n        if (!response) {\n          return;\n        }\n        wpt.loading = false;\n        const format = new GeoJSON();\n        const features = format.readFeatures(response);\n        features[0]\n          .getGeometry()\n          .transform('EPSG:4326', this.hsMapService.getCurrentProj());\n        wpf.routes.from = features[0];\n        wpt.routes.to = features[0];\n        if (this.routeAdded !== undefined) {\n          this.routeAdded(features);\n        }\n      }\n    }\n  }\n\n  /**\n   * Format waypoint route distance in a human friendly way\n   * @returns Distance\n   */\n  formatDistance(wp: Waypoint, which?: string): string {\n    which = which !== undefined ? which : 'from';\n    if (wp.routes[which]) {\n      const route = wp.routes[which];\n      const distance = route?.get('summary').distance / 1000.0;\n      if (distance == undefined) {\n        return '';\n      }\n      return distance.toFixed(2) + 'km';\n    }\n  }\n\n  hashCode(s: string): number {\n    let hash = 0;\n    if (s.length == 0) {\n      return hash;\n    }\n    for (let i = 0; i < s.length; i++) {\n      const char = s.charCodeAt(i);\n      hash = (hash << 5) - hash + char;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n    return hash;\n  }\n}\n","import {Component, Input, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\n\nimport {HsTripPlannerService} from './trip-planner.service';\n\n@Component({\n  selector: 'hs-trip-planner-layer-selector',\n  templateUrl: './layer-selector.component.html',\n  standalone: false,\n})\nexport class HsTripPlannerLayerSelectorComponent {\n  hsTripPlannerService = inject(HsTripPlannerService);\n\n  @Input() label: string;\n  @Input() usage: 'route' | 'waypoints';\n  @Input() selectedWrapper: {\n    layer: VectorLayer<VectorSource<Feature>>;\n    title: string;\n  };\n\n  layersExpanded: boolean;\n}\n","<div class=\"flex-row w-100 m-auto justify-content-center align-items-center\" style=\"display: flex\">\n  <p class=\"m-0 p-0 flex-fill text-primary\">{{label}}:</p>\n  <div ngbDropdown placement=\"bottom\" style=\"max-width: 50%\">\n    <button type=\"button\" ngbDropdownToggle class=\"\n        btn btn-sm\n        rounded-0\n        hs-toolbar-button\n        d-flex\n        align-items-center\n        mw-100\n      \" aria-haspopup=\"true\" (click)=\"layersExpanded = !layersExpanded; hsTripPlannerService.fillVectorLayers() \"\n      [attr.aria-expanded]=\"layersExpanded\">\n      @if (selectedWrapper !== undefined) {\n        <div class=\"text-truncate\">\n          {{'LAYERS.' + selectedWrapper.title | translate : {fallbackValue: selectedWrapper.title} }}\n        </div>\n      }\n    </button>\n    <div ngbDropdownMenu [ngClass]=\"{'show': layersExpanded}\" style=\"transform: translateX(25%); width: 15em\">\n      <div class=\"d-flex align-items-center w-100 flex-column\">\n        @for (layer of hsTripPlannerService.vectorLayers; track layer) {\n          <a class=\"dropdown-item text-truncate\"\n            data-toggle=\"tooltip\" [title]=\"'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} \"\n            (click)=\"hsTripPlannerService.selectLayer(layer, usage); layersExpanded = false\">\n            {{'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} }}\n          </a>\n        }\n      </div>\n    </div>\n  </div>\n</div>\n","import {Component, Input, inject} from '@angular/core';\n\nimport {HsTripPlannerService} from './trip-planner.service';\nimport {RouteProfile} from './ors-profiles.const';\n\n@Component({\n  selector: 'hs-trip-planner-profile-selector',\n  templateUrl: './route-profile-selector.component.html',\n  standalone: false,\n})\nexport class HsTripPlannerProfileSelectorComponent {\n  hsTripPlannerService = inject(HsTripPlannerService);\n\n  @Input() selectedProfile: RouteProfile;\n  profilesExpanded: boolean;\n}\n","<div class=\"flex-row w-100 m-auto justify-content-center align-items-center\" style=\"display: flex\">\n  <p class=\"m-0 p-0 flex-fill text-primary\">{{'TRIP_PLANNER.selectProfile' | translate}}:</p>\n  <div ngbDropdown placement=\"bottom\" style=\"max-width: 50%\">\n    <button type=\"button\" ngbDropdownToggle\n      class=\"btn btn-sm rounded-0 hs-toolbar-button d-flex align-items-center mw-100\" aria-haspopup=\"true\"\n      (click)=\"profilesExpanded = !profilesExpanded\" [attr.aria-expanded]=\"profilesExpanded\">\n      @if (selectedProfile !== undefined) {\n        <div class=\"text-truncate\">\n          {{'TRIP_PLANNER.profiles.' + selectedProfile | translate }}\n        </div>\n      }\n    </button>\n    <div ngbDropdownMenu [ngClass]=\"{'show': profilesExpanded}\" style=\"transform: translateX(25%); width: 15em\">\n      <div class=\"d-flex align-items-center w-100 flex-column\">\n        @for (profile of hsTripPlannerService.orsProfiles; track profile) {\n          <a class=\"dropdown-item text-truncate\"\n            data-toggle=\"tooltip\" [title]=\"'TRIP_PLANNER.profiles.' + profile | translate\"\n            (click)=\"hsTripPlannerService.selectProfile(profile); profilesExpanded = false\">\n            {{'TRIP_PLANNER.profiles.' + profile | translate }}\n          </a>\n        }\n      </div>\n    </div>\n  </div>\n</div>\n","import {Component, OnInit, inject} from '@angular/core';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsTripPlannerService, Waypoint} from './trip-planner.service';\nimport {setHighlighted} from 'hslayers-ng/common/extensions';\n\n@Component({\n  selector: 'hs-trip-planner',\n  templateUrl: './trip-planner.component.html',\n  standalone: false,\n})\nexport class HsTripPlannerComponent\n  extends HsPanelBaseComponent\n  implements OnInit\n{\n  hsConfig = inject(HsConfig);\n  hsLanguageService = inject(HsLanguageService);\n  hsMapService = inject(HsMapService);\n  hsTripPlannerService = inject(HsTripPlannerService);\n\n  name = 'tripPlanner';\n\n  async ngOnInit(): Promise<void> {\n    super.ngOnInit();\n    if (this.hsConfig.default_layers === undefined) {\n      this.hsConfig.default_layers = [];\n    } else {\n      this.hsConfig.default_layers.push(this.hsTripPlannerService.routeLayer);\n    }\n  }\n\n  /**\n   * Format waypoint route distance in a human friendly way\n   * @param wp - Waypoint\n   * @returns Distance\n   */\n  formatDistance(wp: Waypoint): string {\n    return this.hsTripPlannerService.formatDistance(wp);\n  }\n\n  /**\n   * Get the total distance for all waypoint routes\n   * @returns Distance\n   */\n  totalDistance(): string {\n    let tmp = 0;\n    this.hsTripPlannerService.waypoints.forEach((wp: Waypoint) => {\n      if (wp.routes.from) {\n        tmp += wp.routes.from.get('summary').distance / 1000.0;\n      }\n    });\n    return tmp.toFixed(2) + 'km';\n  }\n\n  /**\n   * Remove selected waypoint from source\n   */\n  toggleEdit(waypoint: Waypoint): void {\n    waypoint.editMode = !waypoint.editMode;\n    const src = this.hsTripPlannerService.waypointLayer.getSource();\n    setHighlighted(src.getFeatureById(waypoint.featureId), waypoint.editMode);\n  }\n}\n","@if (isVisible$ | async) {\n  <div\n    class=\"card hs-main-panel\"\n    [ngClass]=\"panelWidthClass\"\n    >\n    <hs-panel-header name=\"tripPlanner\" [panelTabs]=\"'TRIP_PLANNER'\">\n    </hs-panel-header>\n    <div class=\"card-body d-flex flex-column px-3\">\n      <hs-trip-planner-layer-selector\n        usage=\"route\"\n        [label]=\"'TRIP_PLANNER.routerLayer' | translate\"\n        [selectedWrapper]=\"hsTripPlannerService.selectedLayerWrapper.route\"\n        >\n      </hs-trip-planner-layer-selector>\n      <hs-trip-planner-layer-selector\n        usage=\"waypoints\"\n        [label]=\"'TRIP_PLANNER.waypointLayer' | translate\"\n        [selectedWrapper]=\"hsTripPlannerService.selectedLayerWrapper.waypoints\"\n        >\n      </hs-trip-planner-layer-selector>\n      <hs-trip-planner-profile-selector\n        [selectedProfile]=\"hsTripPlannerService.selectedProfile\"\n      ></hs-trip-planner-profile-selector>\n      @for (waypoint of hsTripPlannerService.waypoints; track waypoint.hash) {\n        <div class=\"d-flex flex-row align-items-center px-2\">\n          <div class=\"p-1 flex-grow-1\">\n            <a (click)=\"toggleEdit(waypoint)\" [hidden]=\"!!waypoint.editMode\">{{\n              waypoint.name\n            }}</a>\n            <input\n              [(ngModel)]=\"waypoint.name\"\n              class=\"form-control hs-waypoint-name\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              [hidden]=\"!waypoint.editMode\"\n              (blur)=\"toggleEdit(waypoint)\"\n              />\n          </div>\n          <div class=\"p-1\">\n            <span\n              [hidden]=\"!waypoint.loading\"\n              class=\"hs-loader hs-loader-dark\"\n            ></span>\n          </div>\n          <div class=\"p-1\" style=\"margin-top: 1em\">\n            {{ formatDistance(waypoint) }}\n          </div>\n          <div class=\"p-1\">\n            <a\n              class=\"p-1\"\n              (click)=\"hsTripPlannerService.removeWaypoint(waypoint)\"\n              data-toggle=\"tooltip\"\n              [title]=\"'TRIP_PLANNER.removeWaypoint' | translate\"\n              >\n              <i class=\"fa-solid fa-xmark\" style=\"color: rgb(228, 99, 99)\"></i>\n            </a>\n          </div>\n        </div>\n      }\n      @if (hsTripPlannerService.waypoints.length === 0) {\n        <div class=\"alert alert-primary\" role=\"alert\">\n          {{ \"TRIP_PLANNER.waypointDrawingHint\" | translate }}\n        </div>\n      } @else {\n        <a class=\"accordion align-self-end btn btn-danger btn-sm m-2\" (click)=\"hsTripPlannerService.clearAll()\">{{\n          \"TRIP_PLANNER.clearWaypoints\" | translate\n        }}</a>\n      }\n      <br />\n      <div class=\"d-flex flex-row\">\n        <div class=\"p-1 flex-grow-1\">\n          <strong>{{ \"TRIP_PLANNER.totalDistance\" | translate }}:</strong>\n        </div>\n        <div class=\"p-1\">\n          {{ totalDistance()\n          }}<!-- TODO: Remove function call from template -->\n        </div>\n      </div>\n    </div>\n  </div>\n}\n","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsTripPlannerComponent} from './trip-planner.component';\nimport {HsTripPlannerLayerSelectorComponent} from './layer-selector.component';\nimport {HsTripPlannerProfileSelectorComponent} from './route-profile-selector.component';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [\n    HsTripPlannerComponent,\n    HsTripPlannerLayerSelectorComponent,\n    HsTripPlannerProfileSelectorComponent,\n  ],\n  imports: [\n    FormsModule,\n    CommonModule,\n    TranslatePipe,\n    HsPanelHelpersModule,\n    HsPanelHeaderComponent,\n    NgbDropdownModule,\n  ],\n  exports: [\n    HsTripPlannerComponent,\n    HsTripPlannerLayerSelectorComponent,\n    HsTripPlannerProfileSelectorComponent,\n  ],\n})\nexport class HsTripPlannerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorSource","VectorLayer","i1","i2","i3","i4.HsTripPlannerLayerSelectorComponent","i5.HsTripPlannerProfileSelectorComponent","i6"],"mappings":"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"}