{"version":3,"file":"c8y-ngx-components-widgets-implementations-map.mjs","sources":["../../widgets/implementations/map/map-event-info.component.ts","../../widgets/implementations/map/map-event-info.component.html","../../widgets/implementations/map/map-widget-config.component.ts","../../widgets/implementations/map/map-widget-config.component.html","../../widgets/implementations/map/map-widget.component.ts","../../widgets/implementations/map/map-widget.component.html","../../widgets/implementations/map/c8y-ngx-components-widgets-implementations-map.ts"],"sourcesContent":["import { Component, Input, OnChanges } from '@angular/core';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { EventService, IEvent, IManagedObject } from '@c8y/client';\nimport { C8yTranslateDirective, DatePipe, LoadingComponent } from '@c8y/ngx-components';\n\n@Component({\n  selector: 'c8y-map-event-info',\n  templateUrl: './map-event-info.component.html',\n  standalone: true,\n  imports: [NgCommonModule, C8yTranslateDirective, DatePipe, LoadingComponent]\n})\nexport class MapEventInfoComponent implements OnChanges {\n  @Input()\n  asset: IManagedObject;\n\n  loading = true;\n\n  event: IEvent;\n\n  constructor(private eventService: EventService) {}\n\n  async ngOnChanges() {\n    this.loading = true;\n    const { data } = await this.eventService.list({\n      dateFrom: '1970-01-01',\n      dateTo: new Date(Date.now()).toISOString(),\n      fragmentType: 'c8y_Position',\n      pageSize: 1,\n      source: this.asset.id\n    });\n    this.event = data[0];\n    this.loading = false;\n  }\n}\n","<div class=\"text-muted text-10 p-t-4 p-b-4\">\n  <span translate>Last position update:</span>\n  <br />\n  <c8y-loading *ngIf=\"loading\"></c8y-loading>\n  <ng-container *ngIf=\"!loading\">\n    <i *ngIf=\"!event\" translate>No information found</i>\n    <ng-container *ngIf=\"event\">\n      <i>{{ event.time | c8yDate }}</i>\n      <ng-content></ng-content>\n    </ng-container>\n  </ng-container>\n</div>\n","import {\n  Component,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { ControlContainer, NgForm } from '@angular/forms';\nimport {\n  AlertService,\n  AssetLinkPipe,\n  CommonModule,\n  FormsModule,\n  gettext\n} from '@c8y/ngx-components';\nimport type { MapDefaultConfig } from '@c8y/options';\nimport {\n  ClusterMapConfig,\n  MAP_DEFAULT_CONFIG,\n  MapComponent,\n  MapModule,\n  MapService,\n  PositionManagedObject\n} from '@c8y/ngx-components/map';\nimport { TranslateService } from '@ngx-translate/core';\nimport type L from 'leaflet';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MapWidgetConfig, MapRefreshOption } from './map-widget.model';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-map-widget-config',\n  templateUrl: './map-widget-config.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n  standalone: true,\n  imports: [\n    NgCommonModule,\n    NgFormsModule,\n    CommonModule,\n    FormsModule,\n    IconSelectorModule,\n    MapModule,\n    AssetLinkPipe,\n    TooltipModule\n  ]\n})\nexport class MapWidgetConfigComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() config: MapWidgetConfig = {\n    mapConfig: undefined\n  };\n\n  formConfig: ClusterMapConfig;\n\n  canAutoCenter = true;\n  isPositionedDevice = false;\n  assets: PositionManagedObject[];\n  refreshOption: MapRefreshOption = 'none';\n\n  private destroyed$ = new Subject<void>();\n  private leaflet: typeof L;\n  private centerIcon: L.Marker;\n  // JS precision for floating point number is 15 for 64-bit and because of this provided to leaflet are recalculated\n  // to values almost-like provided (e.g. 0 is recalculated to 1.46e-14; for 180 it's 180.00000000000003).\n  // To ensure provided value has no floating point error, number needs to be rounded to fixed point 13.\n  private readonly FIXED_POINT_DIGITS = 13;\n\n  @ViewChild(MapComponent)\n  previewMap: MapComponent;\n\n  constructor(\n    private mapService: MapService,\n    private alertService: AlertService,\n    private translateService: TranslateService,\n    @Inject(MAP_DEFAULT_CONFIG) private defaultMapConfig: Observable<MapDefaultConfig>\n  ) {}\n\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n  }\n\n  ngOnInit() {\n    this.defaultMapConfig.pipe(takeUntil(this.destroyed$)).subscribe(defaultConfig => {\n      this.formConfig = {\n        zoomLevel: defaultConfig.zoomLevel,\n        center: defaultConfig.center\n      };\n      this.initForm();\n    });\n  }\n\n  async initForm() {\n    if (!this.config.mapConfig) {\n      this.config.mapConfig = this.formConfig;\n    }\n    this.formConfig = {\n      ...this.formConfig,\n      ...this.config.mapConfig,\n      disablePan: false\n    };\n    await this.updateAsset();\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (\n      changes.config.currentValue !== changes.config.previousValue &&\n      !changes.config.firstChange\n    ) {\n      await this.updateAsset();\n    }\n  }\n\n  previewMapInit(leaflet: typeof L): void {\n    this.leaflet = leaflet;\n    this.addCenterIcon(this.formConfig.center[0], this.formConfig.center[1]);\n  }\n\n  onBeforeSave() {\n    this.config.mapConfig = this.formConfig;\n    return true;\n  }\n\n  zoomLevelChanged() {\n    this.config.mapConfig = {\n      ...this.config.mapConfig,\n      zoomLevel: this.formConfig.zoomLevel\n    };\n  }\n\n  changeCenter() {\n    if (this.centerIcon) {\n      this.centerIcon.remove();\n    }\n    this.config.mapConfig = { ...this.formConfig, center: [...this.formConfig.center] };\n    this.addCenterIcon(this.formConfig.center[0], this.formConfig.center[1]);\n  }\n\n  changeCenterOnEnterKey(event: KeyboardEvent): void {\n    event.preventDefault();\n    this.changeCenter();\n  }\n\n  onPreviewZoomStart() {\n    this.centerIcon.remove();\n  }\n\n  onPreviewZoomEnd(event: L.LeafletEvent) {\n    this.formConfig.zoomLevel = Math.floor(event.target.getZoom());\n  }\n\n  onPreviewMapMove(event: L.LeafletEvent) {\n    if (this.centerIcon) {\n      this.centerIcon.remove();\n    }\n    const { lat, lng } = event.target.getCenter();\n    const fixedLat = +lat.toFixed(this.FIXED_POINT_DIGITS);\n    const fixedLng = +lng.toFixed(this.FIXED_POINT_DIGITS);\n    this.addCenterIcon(fixedLat, fixedLng);\n    this.formConfig.center = [fixedLat, fixedLng];\n  }\n\n  useOwnPosition() {\n    navigator.geolocation.getCurrentPosition(({ coords }) => {\n      this.formConfig.center = [coords.latitude, coords.longitude];\n      this.changeCenter();\n    });\n  }\n\n  centerToAsset() {\n    this.formConfig.center = [\n      this.config.device.c8y_Position.lat,\n      this.config.device.c8y_Position.lng\n    ];\n    this.changeCenter();\n  }\n\n  updateRefreshOption() {\n    this.formConfig.realtime = this.refreshOption === 'realtime';\n    this.config.widgetInstanceGlobalAutoRefreshContext =\n      this.refreshOption === 'dashboard-auto-refresh-context';\n    this.formConfig.widgetInstanceGlobalAutoRefreshContext =\n      this.refreshOption === 'dashboard-auto-refresh-context';\n    if (this.refreshOption === 'interval') {\n      this.formConfig.refreshInterval ??= 5000;\n    } else {\n      this.formConfig.refreshInterval = null;\n    }\n    if (!this.formConfig.realtime) {\n      this.formConfig.follow = false;\n    }\n    this.config.widgetInstanceGlobalTimeContext =\n      this.refreshOption === 'dashboard-realtime-context';\n    if (this.config.widgetInstanceGlobalTimeContext) {\n      this.formConfig.realtime = null;\n    }\n  }\n\n  selectIcon(icon: string) {\n    this.formConfig.icon = icon;\n    this.config.mapConfig.icon = icon;\n    this.previewMap.refreshMarkers();\n  }\n\n  private async updateAsset() {\n    this.canAutoCenter = this.mapService.hasPosition(this.config.device);\n    this.isPositionedDevice = this.mapService.isPositionedDevice(this.config.device);\n    this.refreshOption = this.getRefreshOption();\n    this.updateRefreshOption();\n\n    const { data, paging } = await this.mapService.getAllPositionMOs(this.config.device);\n    this.assets = data;\n    if (paging.totalPages > 1) {\n      this.alertService.danger(\n        gettext(\n          'It might be possible that assets are not shown in the preview, as the current selection has more than 500 assets and the preview only supports a maximum of 500 assets.'\n        )\n      );\n    }\n  }\n\n  private getRefreshOption(): MapRefreshOption {\n    let option: MapRefreshOption = 'none';\n    if (this.formConfig.realtime) {\n      option = 'realtime';\n    } else if (this.formConfig.refreshInterval) {\n      option = 'interval';\n    } else if (this.config.widgetInstanceGlobalTimeContext) {\n      option = 'dashboard-realtime-context';\n    } else if (\n      this.config.widgetInstanceGlobalAutoRefreshContext ||\n      this.formConfig.widgetInstanceGlobalAutoRefreshContext\n    ) {\n      option = 'dashboard-auto-refresh-context';\n    }\n    const isNotAllowedOption =\n      (!this.isPositionedDevice && option === 'dashboard-realtime-context') ||\n      (!this.isPositionedDevice && option === 'realtime') ||\n      (this.isPositionedDevice && option === 'interval');\n    option = isNotAllowedOption ? 'none' : option;\n    return option;\n  }\n\n  private addCenterIcon(lat: number, lng: number) {\n    const titleText = this.translateService.instant(gettext('Map center'));\n    const icon = this.leaflet.divIcon({\n      html: `<i style=\"pointer-events: none\" class=\"c8y-map-marker-icon text-muted dlt-c8y-icon-target icon-2x\" title=\"${titleText}\" />`\n    });\n    this.centerIcon = this.leaflet.marker([lat, lng], {\n      icon\n    });\n    this.previewMap.addMarkerToMap(this.centerIcon);\n  }\n}\n","<div\n  class=\"row p-t-16\"\n  *ngIf=\"formConfig\"\n>\n  <div class=\"col-xs-2\">\n    <c8y-form-group class=\"m-b-0 text-center form-group-sm\">\n      <label translate>Marker icon</label>\n      <c8y-icon-selector-wrapper\n        [canRemoveIcon]=\"true\"\n        [selectedIcon]=\"formConfig.icon\"\n        (onSelect)=\"selectIcon($event)\"\n      ></c8y-icon-selector-wrapper>\n    </c8y-form-group>\n  </div>\n  <div class=\"col-xs-10\">\n    <div class=\"row tight-grid separator-bottom\">\n      <div class=\"col-xs-4\">\n        <div class=\"form-group form-group-sm\">\n          <label translate>Zoom level</label>\n          <c8y-range\n            class=\"label-bottom\"\n            name=\"zoomLevel\"\n            #range\n            [(ngModel)]=\"formConfig.zoomLevel\"\n            (change)=\"zoomLevelChanged()\"\n          >\n            <input\n              type=\"range\"\n              min=\"2\"\n              max=\"18\"\n              step=\"1\"\n            />\n          </c8y-range>\n        </div>\n      </div>\n      <div class=\"col-xs-8\">\n        <c8y-form-group class=\"form-group-sm m-b-8\">\n          <label translate>Center bound</label>\n          <div class=\"input-group input-group-sm\">\n            <input\n              class=\"form-control\"\n              placeholder=\"{{ 'lat.`latitude`' | translate }}\"\n              name=\"centerLat\"\n              type=\"number\"\n              required\n              [(ngModel)]=\"formConfig.center[0]\"\n              (change)=\"changeCenter()\"\n              (keydown.enter)=\"changeCenterOnEnterKey($event)\"\n              min=\"-90\"\n              max=\"90\"\n              step=\"0.1\"\n            />\n            <input\n              class=\"form-control\"\n              placeholder=\"{{ 'lng.`longitude`' | translate }}\"\n              name=\"centerLng\"\n              type=\"number\"\n              required\n              min=\"-180\"\n              max=\"180\"\n              [(ngModel)]=\"formConfig.center[1]\"\n              (change)=\"changeCenter()\"\n              (keydown.enter)=\"changeCenterOnEnterKey($event)\"\n              min=\"-180\"\n              max=\"180\"\n              step=\"0.1\"\n            />\n            <div class=\"input-group-btn\">\n              <button\n                class=\"btn btn-default\"\n                [attr.aria-label]=\"'Use your location' | translate\"\n                [tooltip]=\"'Use your location' | translate\"\n                placement=\"top\"\n                container=\"body\"\n                (click)=\"useOwnPosition()\"\n              >\n                <i\n                  class=\"icon-14\"\n                  c8yIcon=\"location-arrow\"\n                ></i>\n              </button>\n            </div>\n            <div\n              class=\"input-group-btn\"\n              *ngIf=\"canAutoCenter\"\n            >\n              <button\n                class=\"btn btn-default\"\n                [attr.aria-label]=\"'Use selected asset location' | translate\"\n                [tooltip]=\"'Use selected asset location' | translate\"\n                placement=\"top\"\n                container=\"body\"\n                (click)=\"centerToAsset()\"\n              >\n                <i\n                  class=\"icon-14\"\n                  c8yIcon=\"location\"\n                ></i>\n              </button>\n            </div>\n          </div>\n          <c8y-messages\n            [helpMessage]=\"'Drag the map to the desired position' | translate\"\n          ></c8y-messages>\n        </c8y-form-group>\n      </div>\n    </div>\n\n    <div class=\"row tight-grid p-t-8 d-flex a-i-center\">\n      <div class=\"col-xs-6\">\n        <c8y-form-group class=\"m-b-0 form-group-sm\">\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              title=\"{{ 'Refresh options`options for refreshing a view`' | translate }}\"\n              id=\"selectExample\"\n              name=\"refreshSelection\"\n              [(ngModel)]=\"refreshOption\"\n              (change)=\"updateRefreshOption()\"\n            >\n              <option\n                [title]=\"'Only refreshing on interaction' | translate\"\n                value=\"none\"\n                translate\n              >\n                No automatic refresh\n              </option>\n              <option\n                [title]=\"'Refreshing after the given interval and on interaction' | translate\"\n                value=\"interval\"\n                *ngIf=\"!isPositionedDevice\"\n                translate\n              >\n                Use refresh interval\n              </option>\n              <option\n                [title]=\"\n                  'Refreshing after the given interval and on interaction, synchronized globally'\n                    | translate\n                \"\n                value=\"dashboard-auto-refresh-context\"\n                *ngIf=\"!isPositionedDevice\"\n                translate\n              >\n                Use global refresh interval\n              </option>\n              <option\n                [title]=\"'Live updating on each position change' | translate\"\n                value=\"realtime\"\n                *ngIf=\"isPositionedDevice\"\n                translate\n              >\n                Realtime\n              </option>\n              <option\n                [title]=\"'Bind widget to dashboard realtime context' | translate\"\n                value=\"dashboard-realtime-context\"\n                *ngIf=\"isPositionedDevice\"\n                translate\n              >\n                Dashboard realtime context\n              </option>\n            </select>\n          </div>\n        </c8y-form-group>\n      </div>\n      <div class=\"col-xs-8\">\n        <div class=\"form-group form-group-sm m-b-0\">\n          <c8y-range\n            class=\"label-bottom\"\n            name=\"refreshInterval\"\n            #intervalRange\n            *ngIf=\"refreshOption === 'interval'\"\n            [(ngModel)]=\"formConfig.refreshInterval\"\n          >\n            <ng-template #c8yRangeValue>\n              <div>\n                <span\n                  [translateParams]=\"{ intervalInSeconds: intervalRange.value * 0.001 }\"\n                  translate\n                  ngNonBindable\n                >\n                  {{ intervalInSeconds }} s\n                </span>\n              </div>\n            </ng-template>\n            <input\n              type=\"range\"\n              min=\"5000\"\n              max=\"100000\"\n              step=\"1000\"\n            />\n          </c8y-range>\n        </div>\n        <label\n          class=\"c8y-switch c8y-switch--inline\"\n          *ngIf=\"refreshOption === 'realtime' || refreshOption === 'dashboard-realtime-context'\"\n        >\n          <input\n            name=\"follow\"\n            type=\"checkbox\"\n            [(ngModel)]=\"formConfig.follow\"\n          />\n          <span></span>\n          <span\n            class=\"text-12\"\n            translate\n          >\n            Follow selected\n          </span>\n        </label>\n      </div>\n    </div>\n  </div>\n</div>\n\n<div\n  class=\"p-t-16 p-b-16\"\n  style=\"width: 100%; height: 240px\"\n>\n  <c8y-map\n    *ngIf=\"config.mapConfig\"\n    [assets]=\"assets\"\n    [config]=\"config.mapConfig\"\n    (onMove)=\"onPreviewMapMove($event)\"\n    (onZoomStart)=\"onPreviewZoomStart()\"\n    (onZoomEnd)=\"onPreviewZoomEnd($event)\"\n    (onInit)=\"previewMapInit($event)\"\n  ></c8y-map>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { ClusterMapComponent, ClusterMapConfig, MapModule } from '@c8y/ngx-components/map';\nimport {\n  AssetLinkPipe,\n  CommonModule,\n  DashboardChildComponent,\n  DismissAlertStrategy,\n  DynamicComponent,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator,\n  FormsModule,\n  gettext\n} from '@c8y/ngx-components';\nimport { MapWidgetConfig } from './map-widget.model';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { MapEventInfoComponent } from './map-event-info.component';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n  selector: 'c8y-map-widget',\n  templateUrl: './map-widget.component.html',\n  standalone: true,\n  imports: [\n    MapEventInfoComponent,\n    NgCommonModule,\n    NgFormsModule,\n    CommonModule,\n    FormsModule,\n    IconSelectorModule,\n    MapModule,\n    AssetLinkPipe,\n    TooltipModule,\n    RouterLink\n  ]\n})\nexport class MapWidgetComponent\n  implements OnInit, OnChanges, OnDestroy, AfterViewInit, DynamicComponent\n{\n  mapConfig: ClusterMapConfig = { center: [0, 0] };\n  rootNode: IManagedObject;\n  @Input() config: MapWidgetConfig;\n\n  @ViewChild(ClusterMapComponent)\n  clusterMap: ClusterMapComponent;\n  alerts: DynamicComponentAlertAggregator;\n\n  private TIMEOUT_ERROR_TEXT = gettext(\n    'The request is taking longer than usual. We apologize for the inconvenience.'\n  );\n  private SERVER_ERROR_TEXT = gettext('Server error occurred.');\n  private savedNode: IManagedObject;\n  private destroy$ = new Subject<void>();\n\n  constructor(\n    dashboardChild: DashboardChildComponent,\n    @Optional() private dashboardContextComponent: ContextDashboardComponent,\n    private inventory: InventoryService\n  ) {\n    this.listenToWidgetResizeEvent(dashboardChild);\n  }\n\n  async ngOnInit() {\n    this.alerts.setAlertGroupDismissStrategy(\n      'warning',\n      DismissAlertStrategy.TEMPORARY_OR_PERMANENT\n    );\n    if (this.dashboardContextComponent?.dashboard?.deviceType && !this.config.device) {\n      const context = this.dashboardContextComponent.context;\n      if (context?.id) {\n        const { id } = context;\n        this.config.device = (await this.inventory.detail(id)).data;\n      }\n    }\n    if (this.config.device) {\n      this.rootNode = this.config.device;\n    }\n    this.mapConfig = { ...this.config.mapConfig };\n    if (this.config.widgetInstanceGlobalTimeContext) {\n      this.updateMapConfigRealtime();\n    }\n    this.savedNode = this.rootNode;\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.config?.currentValue?.widgetInstanceGlobalTimeContext) {\n      this.updateMapConfigRealtime();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.subscribeToErrorsOccurred();\n  }\n\n  startFollow(context) {\n    if (context.id !== this.rootNode?.id) {\n      this.rootNode = context;\n    }\n    this.mapConfig = {\n      ...this.config.mapConfig,\n      follow: true,\n      realtime: true\n    };\n  }\n\n  stopFollow() {\n    this.mapConfig = {\n      ...this.config.mapConfig,\n      follow: false\n    };\n    if (this.config.widgetInstanceGlobalTimeContext) {\n      this.updateMapConfigRealtime();\n    }\n    this.rootNode = this.savedNode;\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n  }\n\n  private listenToWidgetResizeEvent(dashboardChild: DashboardChildComponent) {\n    dashboardChild.changeEnd\n      .pipe(\n        filter(child => child.lastChange === 'resize'),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => {\n        this.clusterMap.reset();\n      });\n  }\n\n  private subscribeToErrorsOccurred() {\n    this.clusterMap.errorNotifier\n      .pipe(filter(Boolean), takeUntil(this.destroy$))\n      .subscribe(error => {\n        this.alerts.addAlerts(\n          new DynamicComponentAlert({\n            type: 'warning',\n            text:\n              error?.name === 'TimeoutError'\n                ? this.TIMEOUT_ERROR_TEXT\n                : error?.message ?? this.SERVER_ERROR_TEXT\n          })\n        );\n      });\n  }\n\n  private updateMapConfigRealtime() {\n    this.mapConfig.realtime = this.config.realtime || false;\n  }\n}\n","<c8y-map-status\n  [clusterMap]=\"mapWidget\"\n  [(config)]=\"mapConfig\"\n  (onUnfollow)=\"stopFollow()\"\n  [buttonsConfig]=\"config.widgetInstanceGlobalTimeContext ? { realtime: { show: false } } : null\"\n></c8y-map-status>\n<c8y-cluster-map\n  #mapWidget\n  [rootNode]=\"rootNode\"\n  [config]=\"mapConfig\"\n>\n  <div\n    class=\"map-marker\"\n    *c8yMapPopup=\"let context\"\n  >\n    <a\n      class=\"text-truncate deviceLink text-12\"\n      routerLink=\"{{ context | assetLink }}\"\n    >\n      <strong>{{ context.name }}</strong>\n    </a>\n    <c8y-map-event-info [asset]=\"context\">\n      <button\n        class=\"btn btn-default btn-xs btn-block m-t-8\"\n        [title]=\"'Activate realtime on this asset and follow it if it moves' | translate\"\n        type=\"button\"\n        (click)=\"startFollow(context)\"\n        *ngIf=\"!mapConfig.follow\"\n        translate\n      >\n        Follow\n      </button>\n      <button\n        class=\"btn btn-default btn-xs btn-block m-t-8\"\n        [title]=\"'Stop following this asset.' | translate\"\n        type=\"button\"\n        (click)=\"stopFollow()\"\n        *ngIf=\"mapConfig.follow\"\n        translate\n      >\n        Unfollow\n      </button>\n    </c8y-map-event-info>\n  </div>\n</c8y-cluster-map>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgCommonModule","NgFormsModule","CommonModule","FormsModule","i1","i2","i3","i5"],"mappings":"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"}