{"version":3,"file":"acorex-components-map.mjs","sources":["../../../../packages/components/map/src/lib/map.config.ts","../../../../packages/components/map/src/lib/poi.provider.ts","../../../../packages/components/map/src/lib/map-layers.ts","../../../../packages/components/map/src/lib/map.service.ts","../../../../packages/components/map/src/lib/map.component.ts","../../../../packages/components/map/src/lib/map.component.html","../../../../packages/components/map/src/lib/map.module.ts","../../../../packages/components/map/src/acorex-components-map.ts"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\n\nexport interface AXMapConfig {\n  layers: string;\n  layers2x: string;\n  markerIcon: string;\n  markerIcon2x: string;\n  markerShadow: string;\n}\n\nexport const AX_MAP_CONFIG = new InjectionToken<AXMapConfig>('AX_MAP_CONFIG', {\n  providedIn: 'root',\n  factory: () => {\n    const global = inject(AX_GLOBAL_CONFIG);\n    set(global, 'layout.map', AX_MAP_CONFIG);\n    return AXMapDefaultConfig;\n  },\n});\n\nexport const baseUrl = '/assets/images/leaflet/';\n\nexport const AXMapDefaultConfig: AXMapConfig = {\n  layers: `${baseUrl}layers.png`,\n  layers2x: `${baseUrl}layers-2x.png`,\n  markerIcon: `${baseUrl}marker-icon.png`,\n  markerIcon2x: `${baseUrl}marker-icon-2x.png`,\n  markerShadow: `${baseUrl}marker-shadow.png`,\n};\n\nexport type PartialMapConfig = Partial<AXMapConfig>;\n\nexport function mapConfig(config: PartialMapConfig = {}): AXMapConfig {\n  const result = {\n    ...AXMapDefaultConfig,\n    ...config,\n  };\n  return result;\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPoiMarker } from './map.type';\n\nexport interface AXPoiProvider {\n  get key(): string;\n  provide(): Promise<AXPoiMarker[]>;\n}\n\nexport const AX_MAP_POI_PROVIDER = new InjectionToken<AXPoiProvider[]>('AX_MAP_POI_PROVIDER');\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPoiProviderService {\n  private providers: AXPoiProvider[] = inject(AX_MAP_POI_PROVIDER, { optional: true }) ?? [];\n  private cache = new Map<string, AXPoiMarker[]>();\n\n  async getList(): Promise<AXPoiMarker[]> {\n    const result: AXPoiMarker[] = [];\n    const providers = Array.isArray(this.providers) ? this.providers : [this.providers];\n    for (const provider of providers) {\n      if (!this.cache.has(provider.key)) {\n        const list = await provider.provide();\n        this.cache.set(provider.key, list);\n      }\n      const items = this.cache.get(provider.key) ?? [];\n      result.push(...items);\n    }\n\n    return result;\n  }\n}\n","import type * as L from 'leaflet';\n\nexport interface AXMapLayerGroups {\n  markerLayer: L.FeatureGroup;\n  polygonLayer: L.FeatureGroup;\n  polylineLayer: L.FeatureGroup;\n  rectangleLayer: L.FeatureGroup;\n  circleLayer: L.FeatureGroup;\n  poiLayer: L.FeatureGroup;\n  boundaryLayer: L.FeatureGroup;\n  editableItems: L.FeatureGroup;\n}\n\n/**\n * Creates typed Leaflet layer groups for map features and a composite feature group\n * used by leaflet-draw for edit/delete across all editable layers.\n */\nexport function createMapLayerGroups(\n  L: typeof import('leaflet'),\n  map: L.Map,\n  resolveEditableLayer: (layer: L.Layer) => L.FeatureGroup | undefined,\n): AXMapLayerGroups {\n  const markerLayer = new L.FeatureGroup();\n  const polygonLayer = new L.FeatureGroup();\n  const polylineLayer = new L.FeatureGroup();\n  const rectangleLayer = new L.FeatureGroup();\n  const circleLayer = new L.FeatureGroup();\n  const poiLayer = new L.FeatureGroup();\n  const boundaryLayer = new L.FeatureGroup();\n\n  const editableTypeLayers = [markerLayer, polygonLayer, polylineLayer, rectangleLayer, circleLayer];\n\n  // Z-order: boundary and shapes below markers/POIs\n  boundaryLayer.addTo(map);\n  polygonLayer.addTo(map);\n  polylineLayer.addTo(map);\n  rectangleLayer.addTo(map);\n  circleLayer.addTo(map);\n  markerLayer.addTo(map);\n  poiLayer.addTo(map);\n\n  const editableItems = createCompositeFeatureGroup(L, editableTypeLayers, resolveEditableLayer);\n\n  return {\n    markerLayer,\n    polygonLayer,\n    polylineLayer,\n    rectangleLayer,\n    circleLayer,\n    poiLayer,\n    boundaryLayer,\n    editableItems,\n  };\n}\n\nfunction createCompositeFeatureGroup(\n  L: typeof import('leaflet'),\n  typeLayers: L.FeatureGroup[],\n  resolveEditableLayer: (layer: L.Layer) => L.FeatureGroup | undefined,\n): L.FeatureGroup {\n  const composite = new L.FeatureGroup();\n\n  composite.getLayers = () => typeLayers.flatMap((layer) => layer.getLayers());\n\n  composite.eachLayer = function (fn: (layer: L.Layer) => void, context?: object) {\n    typeLayers.forEach((group) => group.eachLayer(fn, context));\n    return composite;\n  };\n\n  composite.addLayer = function (layer: L.Layer) {\n    const target = resolveEditableLayer(layer);\n    target?.addLayer(layer);\n    return composite;\n  };\n\n  composite.removeLayer = function (layer: L.Layer) {\n    for (const group of typeLayers) {\n      if (group.hasLayer(layer)) {\n        group.removeLayer(layer);\n        break;\n      }\n    }\n    return composite;\n  };\n\n  composite.clearLayers = function () {\n    typeLayers.forEach((group) => group.clearLayers());\n    return composite;\n  };\n\n  composite.hasLayer = function (layer: L.Layer) {\n    return typeLayers.some((group) => group.hasLayer(layer));\n  };\n\n  return composite;\n}\n","import { AXIconResolverService } from '@acorex/core/icon';\nimport { EventEmitter, inject, Injectable } from '@angular/core';\nimport { AX_MAP_CONFIG } from './map.config';\nimport {\n  AXMapCircle,\n  AXMapControlPlace,\n  AXMapData,\n  AXMapLatLng,\n  AXMapLocation,\n  AXMapMarker,\n  AXMapPolygon,\n  AXMapPolyline,\n  AXMapRectangle,\n  AXPoiMarker,\n} from './map.type';\nimport { AXPoiProviderService } from './poi.provider';\nimport { createMapLayerGroups } from './map-layers';\n\n/**\n * Service for managing Leaflet maps and related functionalities.\n */\n@Injectable()\nexport class AXLeafletService {\n  private mapConfig = inject(AX_MAP_CONFIG);\n  private iconResolver = inject(AXIconResolverService, { optional: true });\n  private poiProviderService = inject(AXPoiProviderService, { optional: true });\n  private defaultIcon: any;\n  private position: AXMapControlPlace = 'topleft';\n  private maxMarkers: number | null = null;\n  private maxPolygons: number | null = null;\n  private maxPolylines: number | null = null;\n  private maxRectangles: number | null = null;\n  private maxCircles: number | null = null;\n  private shapeColor = 'blue';\n  private poiMinZoom = 10; // Default minimum zoom level to show POIs\n  private poiMarkers: L.Marker[] = []; // Track all POI markers\n\n  protected L: typeof import('leaflet');\n  private map?: L.Map;\n  private drawControl?: L.Control.Draw;\n  private locateControl?: L.Control.Locate;\n  private markerLayer!: L.FeatureGroup;\n  private polygonLayer!: L.FeatureGroup;\n  private polylineLayer!: L.FeatureGroup;\n  private rectangleLayer!: L.FeatureGroup;\n  private circleLayer!: L.FeatureGroup;\n  private poiLayer!: L.FeatureGroup;\n  private boundaryLayer!: L.FeatureGroup;\n  /** Composite group for leaflet-draw edit/delete across all editable layers */\n  private drawnItems!: L.FeatureGroup;\n  private boundary: AXMapPolygon[] | null = null;\n  private _addMarkerOnTapEnabled = false;\n  private _isCurrentlyDrawing = false;\n  private _hasDrawControl = false;\n  private _isReadonly = false;\n  private _isDisabled = false;\n  private _isUpdatingCenter = false; // Flag to prevent feedback loops\n\n  /**\n   * Emits when the zoom level of the map changes.\n   */\n  public onZoomChanged = new EventEmitter<number>();\n\n  /**\n   * Emits when the longitude of the map center changes.\n   */\n  public onLongitudeChanged = new EventEmitter<number>();\n\n  /**\n   * Emits when the latitude of the map center changes.\n   */\n  public onLatitudeChanged = new EventEmitter<number>();\n\n  /**\n   * Emits when marker data changes.\n   */\n  public onMarkerChanged = new EventEmitter<AXMapMarker[]>();\n  /**\n   * Emits when a poi is added.\n   */\n  public onPoiAdded = new EventEmitter<AXPoiMarker>();\n  /**\n   * Emits when a poi is changed.\n   */\n  public onPoiChanged = new EventEmitter<AXPoiMarker[]>();\n  /**\n   * Emits when a marker is added.\n   */\n  public onMarkerAdded = new EventEmitter<AXMapMarker>();\n  /**\n   * Emits when a marker is clicked.\n   */\n  public onMarkerClick = new EventEmitter<AXMapMarker>();\n  /**\n   * Emits when the user's location is found.\n   */\n  public onLocationFound = new EventEmitter<AXMapLocation>();\n  /**\n   * Emits when polygon data changes.\n   */\n  public onPolygonChanged = new EventEmitter<AXMapPolygon[]>();\n  /**\n   * Emits when an error occurs during map load/initialization\n   */\n  public onLoadError = new EventEmitter<Error>();\n  /**\n   * Emits when a polygon is added.\n   */\n  public onPolygonAdded = new EventEmitter<AXMapPolygon>();\n  /**\n   * Emits when a polygon is clicked.\n   */\n  public onPolygonClick = new EventEmitter<AXMapPolygon>();\n  /**\n   * Emits when polyline data changes.\n   */\n  public onPolylineChanged = new EventEmitter<AXMapPolyline[]>();\n  /**\n   * Emits when a polyline is added.\n   */\n  public onPolylineAdded = new EventEmitter<AXMapPolyline>();\n  /**\n   * Emits when a polyline is clicked.\n   */\n  public onPolylineClick = new EventEmitter<AXMapPolyline>();\n  /**\n   * Emits when rectangle data changes.\n   */\n  public onRectangleChanged = new EventEmitter<AXMapRectangle[]>();\n  /**\n   * Emits when a rectangle is added.\n   */\n  public onRectangleAdded = new EventEmitter<AXMapRectangle>();\n  /**\n   * Emits when a rectangle is clicked.\n   */\n  public onRectangleClick = new EventEmitter<AXMapRectangle>();\n  /**\n   * Emits when circle data changes.\n   */\n  public onCircleChanged = new EventEmitter<AXMapCircle[]>();\n  /**\n   * Emits when a circle is added.\n   */\n  public onCircleAdded = new EventEmitter<AXMapCircle>();\n  /**\n   * Emits when a circle is clicked.\n   */\n  public onCircleClick = new EventEmitter<AXMapCircle>();\n  /**\n   * Loads the Leaflet library and its plugins.\n   */\n  public async loadLeaflet(): Promise<void> {\n    try {\n      const leafletModule = await import('leaflet');\n      this.L = leafletModule.default ?? leafletModule; // handle default export\n\n      await import('leaflet-draw');\n      this.patchLeafletDraw();\n      await import('leaflet.locatecontrol');\n\n      // Set up default icon from mapConfig\n      this.defaultIcon = this.L.icon({\n        iconUrl: this.mapConfig.markerIcon,\n        shadowUrl: this.mapConfig.markerShadow,\n        iconSize: [25, 41],\n        iconAnchor: [12, 41],\n        shadowSize: [41, 41],\n        popupAnchor: [0, -40],\n      });\n    } catch (error) {\n      console.error('Error Loading Leaflet:', error);\n      // Emit load error for consumers\n      this.onLoadError.emit(error instanceof Error ? error : new Error(String(error)));\n      throw new Error(`Failed to load Leaflet library: ${error instanceof Error ? error.message : 'Unknown error'}`);\n    }\n  }\n\n  /**\n   * Initializes the Leaflet map.\n   * @param mapElement The HTML element to render the map in.\n   * @param location The initial map center.\n   * @param zoom The initial zoom level. Defaults to 13.\n   */\n  public async initMap(mapElement: HTMLElement, location: AXMapLatLng, zoom = 13) {\n    try {\n      await this.loadLeaflet();\n      const map = this.L.map(mapElement).setView([location.latitude, location.longitude], zoom);\n      this.L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n        maxZoom: 20,\n        noWrap: true,\n        attribution: '© ACoreX',\n      }).addTo(map);\n      this.initMapLayers(map);\n      this.map = map;\n\n      // Add event listeners for zoom and move changes\n      this.map.on('zoomend', () => this.handleZoomChange());\n      this.map.on('moveend', () => this.handleCenterChange());\n\n      // Add click listener for adding markers on tap\n      this.map.on('click', async (e: any) => {\n        if (this._addMarkerOnTapEnabled && !this._isDrawingMode() && !this._isDisabled && !this._isReadonly) {\n          // Check max markers limit\n          if (this.maxMarkers !== null && this.getMarkers().length >= this.maxMarkers) {\n            console.warn('Markers reached max count.');\n            return;\n          }\n\n          const latlng = e.latlng;\n          const newMarker: AXMapMarker = { latitude: latlng.lat, longitude: latlng.lng };\n          await this.addMarker(newMarker, true);\n        }\n      });\n\n      // Load POIs from providers\n      await this.loadPoisFromProviders();\n    } catch (error) {\n      console.error('Error initializing Leaflet map:', error);\n      this.onLoadError.emit(error instanceof Error ? error : new Error(String(error)));\n      throw error;\n    }\n  }\n\n  private handleZoomChange(): void {\n    if (this.map) {\n      const currentZoom = this.map.getZoom();\n      this.onZoomChanged.emit(currentZoom);\n\n      // Show/hide POIs based on zoom level\n      this.updatePoiVisibility(currentZoom);\n    }\n  }\n\n  private handleCenterChange(): void {\n    // Don't emit if we're programmatically updating the center (prevents feedback loop)\n    if (this.map && !this._isUpdatingCenter) {\n      const center = this.map.getCenter();\n      this.onLatitudeChanged.emit(center.lat);\n      this.onLongitudeChanged.emit(center.lng);\n    }\n  }\n\n  private initMapLayers(map: L.Map): void {\n    const layers = createMapLayerGroups(this.L, map, (layer) => this.resolveEditableLayer(layer));\n\n    this.markerLayer = layers.markerLayer;\n    this.polygonLayer = layers.polygonLayer;\n    this.polylineLayer = layers.polylineLayer;\n    this.rectangleLayer = layers.rectangleLayer;\n    this.circleLayer = layers.circleLayer;\n    this.poiLayer = layers.poiLayer;\n    this.boundaryLayer = layers.boundaryLayer;\n    this.drawnItems = layers.editableItems;\n  }\n\n  private get editableTypeLayers(): L.FeatureGroup[] {\n    return [this.markerLayer, this.polygonLayer, this.polylineLayer, this.rectangleLayer, this.circleLayer];\n  }\n\n  private resolveEditableLayer(layer: L.Layer): L.FeatureGroup | undefined {\n    if (layer instanceof this.L.Marker) {\n      return this.markerLayer;\n    }\n    if (this.isPolygonLayer(layer)) {\n      return this.polygonLayer;\n    }\n    if (this.isPolylineLayer(layer)) {\n      return this.polylineLayer;\n    }\n    if (this.isRectangleLayer(layer)) {\n      return this.rectangleLayer;\n    }\n    if (this.isCircleLayer(layer)) {\n      return this.circleLayer;\n    }\n    return undefined;\n  }\n\n  private forEachEditableLayer(fn: (layer: L.Layer) => void): void {\n    this.editableTypeLayers.forEach((group) => group.eachLayer(fn));\n  }\n\n  private getAllEditableLayers(): L.Layer[] {\n    return this.editableTypeLayers.flatMap((group) => group.getLayers());\n  }\n\n  /**\n   * Creates a custom icon from SVG string or URL using the icon resolver if possible\n   * @param iconSrc Path to the icon, SVG string, or icon key\n   * @returns Leaflet icon\n   */\n  public async setCustomIcon(iconSrc: string): Promise<any> {\n    if (!iconSrc) {\n      return this.defaultIcon;\n    }\n\n    try {\n      // Try to resolve using the icon resolver if available\n      if (this.iconResolver) {\n        try {\n          const resolvedIcon = await this.iconResolver.resolve(iconSrc);\n          if (resolvedIcon) {\n            return this.createLeafletIcon(resolvedIcon);\n          }\n        } catch (error) {\n          console.warn(`Error resolving icon: ${iconSrc}`, error);\n        }\n      }\n\n      // If resolver not available or resolution failed, treat as direct content\n      return this.createLeafletIcon(iconSrc);\n    } catch (error) {\n      console.warn(`Error creating custom icon: ${iconSrc}`, error);\n      return this.defaultIcon;\n    }\n  }\n\n  /**\n   * Creates a Leaflet icon from SVG or URL\n   * @param iconSrc The icon source (SVG string or URL)\n   * @returns Leaflet icon\n   */\n  private createLeafletIcon(iconSrc: string): any {\n    if (!iconSrc) {\n      return this.defaultIcon;\n    }\n\n    try {\n      // Check if the iconSrc is a URL or SVG string\n      const isSvgString = iconSrc.trim().startsWith('<svg');\n\n      if (isSvgString) {\n        // Create a div icon with the SVG content\n        return this.L.divIcon({\n          html: iconSrc,\n          className: 'ax-map-custom-icon',\n          iconSize: [25, 25],\n          iconAnchor: [12, 12],\n          popupAnchor: [0, -12],\n        });\n      } else {\n        // Create an icon with the URL\n        return this.L.icon({\n          iconUrl: iconSrc,\n          iconSize: [25, 25],\n          iconAnchor: [12, 12],\n          popupAnchor: [0, -12],\n        });\n      }\n    } catch (error) {\n      console.warn(`Error creating icon from source: ${iconSrc}`, error);\n      return this.defaultIcon;\n    }\n  }\n\n  /**\n   * Gets the Leaflet map instance.\n   * @returns The Leaflet map instance, or undefined if not initialized.\n   */\n  public getMap(): L.Map | undefined {\n    return this.map;\n  }\n\n  /**\n   * Gets the Leaflet package.\n   * @returns The Leaflet package.\n   */\n  public getLeafletPackage(): typeof import('leaflet') {\n    return this.L;\n  }\n\n  /**\n   * Sets the zoom level of the map.\n   * @param zoom The desired zoom level.\n   */\n  public setZoomLevel(zoom: number): void {\n    if (this.map) {\n      this.map.setZoom(zoom);\n      this.handleZoomChange(); // Emit zoom change event\n    }\n  }\n\n  /**\n   * Sets the center of the map.\n   * @param location The new center location.\n   */\n  public setCenter(location: AXMapLatLng): void {\n    if (this.map && location) {\n      const currentCenter = this.map.getCenter();\n      const newLat = location.latitude;\n      const newLng = location.longitude;\n\n      // Only update if center actually changed (avoid unnecessary updates)\n      if (Math.abs(currentCenter.lat - newLat) > 0.0001 || Math.abs(currentCenter.lng - newLng) > 0.0001) {\n        this._isUpdatingCenter = true;\n        this.map.setView([newLat, newLng], this.map.getZoom());\n        // Reset flag after a short delay to allow moveend event to fire\n        setTimeout(() => {\n          this._isUpdatingCenter = false;\n        }, 100);\n      }\n    }\n  }\n\n  /**\n   * Flies to a specific location on the map.\n   * @param location The target location.\n   * @param zoom The target zoom level (optional).\n   * @param setMarker Whether to add a marker at the destination after flying.\n   * @param duration The duration of the fly animation in seconds.\n   */\n  public flyTo(location: AXMapLatLng, zoom?: number, setMarker = false, duration = 1.0): void {\n    if (this.map && location) {\n      this.map.flyTo([location.latitude, location.longitude], zoom || this.map.getZoom(), {\n        animate: true,\n        duration: duration,\n      });\n      if (setMarker) {\n        this.map.once('moveend', () => {\n          this.addMarker(location);\n          this.handleCenterChange(); // Emit center change events after flying\n        });\n      } else {\n        this.map.once('moveend', () => this.handleCenterChange()); // Emit center change events after flying\n      }\n    }\n  }\n\n  /**\n   * Gets all markers currently on the map.\n   * @returns An array of AXMapMarker objects.\n   */\n  public getMarkers(): AXMapMarker[] {\n    if (!this.markerLayer) {\n      return [];\n    }\n\n    return this.markerLayer\n      .getLayers()\n      .filter((layer) => layer instanceof this.L.Marker)\n      .map((marker) => {\n        const latLng = (marker as L.Marker).getLatLng();\n        const location = (marker as any).location || {};\n        return {\n          latitude: latLng.lat,\n          longitude: latLng.lng,\n          title: location.title || marker.options.title,\n          iconKey: location.iconKey,\n          icon: location.icon,\n          popup: location.popup,\n          popupOpen: location.popupOpen,\n          popupCloseButton: location.popupCloseButton,\n          id: location.id,\n          isLocked: location.isLocked,\n        } as AXMapMarker;\n      });\n  }\n  /**\n   * Gets all polygons currently on the map.\n   * @returns An array of AXMapPolygon objects.\n   */\n  public getPolygons(): AXMapPolygon[] {\n    if (!this.polygonLayer) {\n      return [];\n    }\n\n    return this.polygonLayer\n      .getLayers()\n      .filter((layer) => this.isPolygonLayer(layer))\n      .map((polygon) => {\n        const latLngs = polygon.getLatLngs()[0]; // Access the outer boundary\n        const meta = (polygon as any).polygon as AXMapPolygon | undefined;\n\n        const points: AXMapLatLng[] = (latLngs as any).map((latLng) => ({\n          latitude: latLng.lat,\n          longitude: latLng.lng,\n        }));\n\n        return {\n          points,\n          title: meta?.title,\n          color: polygon.options?.color,\n          id: meta?.id,\n          isLocked: meta?.isLocked,\n        };\n      });\n  }\n\n  /**\n   * Gets all polylines currently on the map.\n   */\n  public getPolylines(): AXMapPolyline[] {\n    if (!this.polylineLayer) {\n      return [];\n    }\n\n    return this.polylineLayer\n      .getLayers()\n      .filter((layer) => this.isPolylineLayer(layer))\n      .map((polyline) => {\n        const latLngs = polyline.getLatLngs() as L.LatLng[];\n        const meta = (polyline as any).polyline as AXMapPolyline | undefined;\n\n        return {\n          points: latLngs.map((latLng) => ({\n            latitude: latLng.lat,\n            longitude: latLng.lng,\n          })),\n          title: meta?.title,\n          color: polyline.options?.color,\n          id: meta?.id,\n          isLocked: meta?.isLocked,\n        };\n      });\n  }\n\n  /**\n   * Gets all rectangles currently on the map.\n   */\n  public getRectangles(): AXMapRectangle[] {\n    if (!this.rectangleLayer) {\n      return [];\n    }\n\n    return this.rectangleLayer\n      .getLayers()\n      .filter((layer) => this.isRectangleLayer(layer))\n      .map((rectangle) => {\n        const bounds = rectangle.getBounds();\n        const meta = (rectangle as any).rectangle as AXMapRectangle | undefined;\n\n        return {\n          southWest: {\n            latitude: bounds.getSouthWest().lat,\n            longitude: bounds.getSouthWest().lng,\n          },\n          northEast: {\n            latitude: bounds.getNorthEast().lat,\n            longitude: bounds.getNorthEast().lng,\n          },\n          title: meta?.title,\n          color: rectangle.options?.color,\n          id: meta?.id,\n          isLocked: meta?.isLocked,\n        };\n      });\n  }\n\n  /**\n   * Gets all circles currently on the map.\n   */\n  public getCircles(): AXMapCircle[] {\n    if (!this.circleLayer) {\n      return [];\n    }\n\n    return this.circleLayer\n      .getLayers()\n      .filter((layer) => this.isCircleLayer(layer))\n      .map((circle) => {\n        const center = circle.getLatLng();\n        const meta = (circle as any).circle as AXMapCircle | undefined;\n\n        return {\n          center: {\n            latitude: center.lat,\n            longitude: center.lng,\n          },\n          radius: circle.getRadius(),\n          title: meta?.title,\n          color: circle.options?.color,\n          id: meta?.id,\n          isLocked: meta?.isLocked,\n        };\n      });\n  }\n\n  /**\n   * Gets POI markers from the POI layer.\n   * @returns Array of POI markers.\n   */\n  public getPois(): AXPoiMarker[] {\n    const pois: AXPoiMarker[] = [];\n    if (!this.poiLayer || !this.map) {\n      return pois;\n    }\n\n    this.poiLayer.eachLayer((layer: any) => {\n      if (layer instanceof this.L.Marker) {\n        const latLng = layer.getLatLng();\n        const poi: AXPoiMarker = {\n          latitude: latLng.lat,\n          longitude: latLng.lng,\n        };\n\n        // Extract additional properties if available\n        if (layer.options.title) {\n          poi.title = layer.options.title;\n        }\n        if ((layer.options as any).iconKey) {\n          poi.iconKey = (layer.options as any).iconKey;\n        }\n        if ((layer.options as any).providerKey) {\n          (poi as any).providerKey = (layer.options as any).providerKey;\n        }\n        if ((layer.options as any).minZoom !== undefined) {\n          poi.minZoom = (layer.options as any).minZoom;\n        }\n\n        // Handle popup if available\n        const popup = layer.getPopup();\n        if (popup) {\n          const content = popup.getContent();\n          poi.popup = typeof content === 'string' ? content : '';\n          poi.popupOpen = layer.isPopupOpen();\n        }\n\n        pois.push(poi);\n      }\n    });\n\n    return pois;\n  }\n\n  /**\n   * Adds a draw control to the map for creating markers, polygons, polylines, rectangles, and circles.\n   */\n  public addDrawControl(\n    position: AXMapControlPlace = 'topleft',\n    maxMarkers?: number,\n    maxPolygons?: number,\n    maxPolylines?: number,\n    maxRectangles?: number,\n    maxCircles?: number,\n    shapeColor?: string,\n  ): void {\n    this._hasDrawControl = true;\n    this.position = position;\n    if (maxMarkers !== undefined) this.maxMarkers = maxMarkers;\n    if (maxPolygons !== undefined) this.maxPolygons = maxPolygons;\n    if (maxPolylines !== undefined) this.maxPolylines = maxPolylines;\n    if (maxRectangles !== undefined) this.maxRectangles = maxRectangles;\n    if (maxCircles !== undefined) this.maxCircles = maxCircles;\n    if (shapeColor) this.shapeColor = shapeColor;\n\n    if (this.drawControl) {\n      this.map?.removeControl(this.drawControl);\n      this.drawControl = undefined;\n    }\n\n    if (this.map) {\n      this.drawControl = new this.L.Control.Draw({\n        position: this.position,\n        edit: {\n          featureGroup: this.drawnItems,\n        },\n        draw: {\n          marker: this.canDrawMoreMarkers() ? { icon: this.defaultIcon } : false,\n          polygon: this.canDrawMorePolygons() ? {} : false,\n          polyline: this.canDrawMorePolylines() ? {} : false,\n          rectangle: this.canDrawMoreRectangles() ? {} : false,\n          circle: this.canDrawMoreCircles() ? {} : false,\n          circlemarker: false,\n        },\n      });\n      this.map.addControl(this.drawControl);\n\n      const onCreated = (event: any) => {\n        const layer = event.layer;\n        if (layer instanceof this.L.Marker) {\n          const markerData = { latitude: layer.getLatLng().lat, longitude: layer.getLatLng().lng };\n          this.addMarker(markerData);\n        } else if (this.isPolygonLayer(layer)) {\n          const latLngs = layer.getLatLngs();\n          const polygonData: AXMapPolygon = {\n            points: (latLngs[0] as Array<any>).map((latLng) => ({\n              latitude: latLng.lat,\n              longitude: latLng.lng,\n            })),\n            color: this.shapeColor || this.getRandomColorName(),\n          };\n          this.addPolygon(polygonData);\n        } else if (this.isPolylineLayer(layer)) {\n          const latLngs = layer.getLatLngs() as L.LatLng[];\n          const polylineData: AXMapPolyline = {\n            points: latLngs.map((latLng) => ({\n              latitude: latLng.lat,\n              longitude: latLng.lng,\n            })),\n            color: this.shapeColor || this.getRandomColorName(),\n          };\n          this.addPolyline(polylineData);\n        } else if (this.isRectangleLayer(layer)) {\n          const bounds = layer.getBounds();\n          const rectangleData: AXMapRectangle = {\n            southWest: {\n              latitude: bounds.getSouthWest().lat,\n              longitude: bounds.getSouthWest().lng,\n            },\n            northEast: {\n              latitude: bounds.getNorthEast().lat,\n              longitude: bounds.getNorthEast().lng,\n            },\n            color: this.shapeColor || this.getRandomColorName(),\n          };\n          this.addRectangle(rectangleData);\n        } else if (this.isCircleLayer(layer)) {\n          const center = layer.getLatLng();\n          const circleData: AXMapCircle = {\n            center: {\n              latitude: center.lat,\n              longitude: center.lng,\n            },\n            radius: layer.getRadius(),\n            color: this.shapeColor || this.getRandomColorName(),\n          };\n          this.addCircle(circleData);\n        } else {\n          console.warn('Unsupported layer type drawn:', layer);\n        }\n      };\n\n      const onDeleted = (event: any) => {\n        const deletedLayers = event.layers;\n        const layersToReAdd: L.Layer[] = [];\n\n        deletedLayers.eachLayer((layer: L.Layer) => {\n          if (layer instanceof this.L.Marker) {\n            const loc = (layer as any).location as AXMapMarker;\n            if (loc?.isLocked) {\n              layersToReAdd.push(layer);\n            }\n          } else if (this.isPolygonLayer(layer)) {\n            const meta = (layer as any).polygon as AXMapPolygon | undefined;\n            if (meta?.isLocked) {\n              layersToReAdd.push(layer);\n            }\n          } else if (this.isPolylineLayer(layer)) {\n            const meta = (layer as any).polyline as AXMapPolyline | undefined;\n            if (meta?.isLocked) {\n              layersToReAdd.push(layer);\n            }\n          } else if (this.isRectangleLayer(layer)) {\n            const meta = (layer as any).rectangle as AXMapRectangle | undefined;\n            if (meta?.isLocked) {\n              layersToReAdd.push(layer);\n            }\n          } else if (this.isCircleLayer(layer)) {\n            const meta = (layer as any).circle as AXMapCircle | undefined;\n            if (meta?.isLocked) {\n              layersToReAdd.push(layer);\n            }\n          } else {\n            console.warn('Unsupported layer type deleted:', layer);\n          }\n        });\n\n        layersToReAdd.forEach((layer) => {\n          this.drawnItems.addLayer(layer);\n        });\n\n        this.onMarkerChanged.emit(this.getMarkers());\n        this.onPolygonChanged.emit(this.getPolygons());\n        this.onPolylineChanged.emit(this.getPolylines());\n        this.onRectangleChanged.emit(this.getRectangles());\n        this.onCircleChanged.emit(this.getCircles());\n        this.refreshDrawControl();\n      };\n\n      const onEdited = (event: any) => {\n        const layers = event.layers;\n        layers.eachLayer((layer: L.Layer) => {\n          if (layer instanceof this.L.Marker) {\n            const loc = (layer as any).location as AXMapMarker;\n            if (loc?.isLocked) {\n              (layer as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n            } else {\n              const latlng = (layer as L.Marker).getLatLng();\n              const newLocation = { latitude: latlng.lat, longitude: latlng.lng };\n\n              if (this.boundary) {\n                const isWithinBounds = this.boundary.some((boundaryPolygon) =>\n                  this.isPointInPolygon(newLocation, boundaryPolygon),\n                );\n                if (!isWithinBounds) {\n                  (layer as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n                  console.warn('Marker movement outside the boundary is not allowed.');\n                  return;\n                }\n              }\n\n              loc.latitude = latlng.lat;\n              loc.longitude = latlng.lng;\n            }\n            this.onMarkerChanged.emit(this.getMarkers());\n          } else if (this.isPolygonLayer(layer)) {\n            const latLngs = (layer as L.Polygon).getLatLngs()[0];\n            const polygonPoints = (latLngs as any).map((latLng: any) => ({\n              latitude: latLng.lat,\n              longitude: latLng.lng,\n            }));\n\n            if (this.boundary && !this.arePointsWithinBoundary(polygonPoints)) {\n              console.warn('Polygon editing outside the boundary is not allowed.');\n              return;\n            }\n\n            const existing = (layer as any).polygon as AXMapPolygon | undefined;\n            if (existing) {\n              (layer as any).polygon = { ...existing, points: polygonPoints };\n            }\n\n            this.onPolygonChanged.emit(this.getPolygons());\n          } else if (this.isPolylineLayer(layer)) {\n            const latLngs = (layer as L.Polyline).getLatLngs() as L.LatLng[];\n            const polylinePoints = latLngs.map((latLng) => ({\n              latitude: latLng.lat,\n              longitude: latLng.lng,\n            }));\n\n            if (this.boundary && !this.arePointsWithinBoundary(polylinePoints)) {\n              console.warn('Polyline editing outside the boundary is not allowed.');\n              return;\n            }\n\n            const existing = (layer as any).polyline as AXMapPolyline | undefined;\n            if (existing) {\n              (layer as any).polyline = { ...existing, points: polylinePoints };\n            }\n\n            this.onPolylineChanged.emit(this.getPolylines());\n          } else if (this.isRectangleLayer(layer)) {\n            const bounds = (layer as L.Rectangle).getBounds();\n            const rectangleData: AXMapRectangle = {\n              southWest: {\n                latitude: bounds.getSouthWest().lat,\n                longitude: bounds.getSouthWest().lng,\n              },\n              northEast: {\n                latitude: bounds.getNorthEast().lat,\n                longitude: bounds.getNorthEast().lng,\n              },\n            };\n\n            if (this.boundary && !this.arePointsWithinBoundary(this.getRectangleCornerPoints(rectangleData))) {\n              console.warn('Rectangle editing outside the boundary is not allowed.');\n              return;\n            }\n\n            const existing = (layer as any).rectangle as AXMapRectangle | undefined;\n            if (existing) {\n              (layer as any).rectangle = { ...existing, ...rectangleData };\n            }\n\n            this.onRectangleChanged.emit(this.getRectangles());\n          } else if (this.isCircleLayer(layer)) {\n            const center = (layer as L.Circle).getLatLng();\n            const circleData: AXMapCircle = {\n              center: {\n                latitude: center.lat,\n                longitude: center.lng,\n              },\n              radius: (layer as L.Circle).getRadius(),\n            };\n\n            if (\n              this.boundary &&\n              !this.boundary.some((boundaryPolygon) => this.isPointInPolygon(circleData.center, boundaryPolygon))\n            ) {\n              console.warn('Circle editing outside the boundary is not allowed.');\n              return;\n            }\n\n            const existing = (layer as any).circle as AXMapCircle | undefined;\n            if (existing) {\n              (layer as any).circle = { ...existing, ...circleData };\n            }\n\n            this.onCircleChanged.emit(this.getCircles());\n          } else {\n            console.warn('Unsupported layer type edited:', layer);\n          }\n        });\n      };\n\n      this.map.off('draw:created');\n      this.map.off('draw:deleted');\n      this.map.off('draw:edited');\n      this.map.off('draw:drawstart');\n      this.map.off('draw:drawstop');\n\n      this.map.on('draw:created', onCreated);\n      this.map.on('draw:deleted', onDeleted);\n      this.map.on('draw:edited', onEdited);\n\n      this.map.on('draw:drawstart', () => {\n        this._isCurrentlyDrawing = true;\n      });\n\n      this.map.on('draw:drawstop', () => {\n        this._isCurrentlyDrawing = false;\n      });\n    }\n  }\n\n  /**\n   * Adds a locate control to the map.\n   * @param position The position of the control on the map. Defaults to 'bottomright'.\n   */\n  public addLocateControl(position: AXMapControlPlace = 'bottomright'): void {\n    if (this.locateControl) {\n      this.map?.removeControl(this.locateControl);\n      this.locateControl = undefined;\n    }\n    if (this.map) {\n      const locateControl = this.L.control\n        .locate({\n          position: position,\n          flyTo: true,\n          setView: 'untilPanOrZoom',\n          showPopup: true,\n          onLocationError: (e) => console.warn(e.message),\n          onLocationOutsideMapBounds: (control) => control.stop(),\n          locateOptions: {\n            enableHighAccuracy: true,\n          },\n          strings: {\n            title: 'Show my location',\n            popup: 'You are within {distance} meters from this point',\n            outsideMapBoundsMsg: 'You seem to be outside the map bounds',\n          },\n        })\n        .addTo(this.map);\n\n      this.locateControl = locateControl;\n\n      const onLocationFound = (event: any) => {\n        const location: AXMapLocation = {\n          latitude: event.latitude,\n          longitude: event.longitude,\n          precision: event.accuracy,\n        };\n        this.onLocationFound.emit(location);\n      };\n\n      this.map.on('locationfound', onLocationFound);\n    }\n  }\n\n  private availableColors = ['red', 'blue', 'green', 'orange', 'purple', 'brown', 'black'];\n\n  private getRandomColorName = () => {\n    const randomIndex = Math.floor(Math.random() * this.availableColors.length);\n    return this.availableColors[randomIndex];\n  };\n\n  /**\n   * Removes the draw control from the map.\n   */\n  public removeDrawControl(): void {\n    if (this.drawControl) {\n      this.map?.removeControl(this.drawControl);\n      this.drawControl = undefined;\n    }\n  }\n\n  /**\n   * Removes the locate control from the map.\n   */\n  public removeLocateControl(): void {\n    if (this.map && this.locateControl) {\n      this.map.removeControl(this.locateControl);\n      this.locateControl = undefined;\n    }\n  }\n\n  /**\n   * Clears all drawn items, including markers, polygons, and POIs.\n   * @param clearPois Whether to clear POI markers as well. Defaults to false.\n   */\n  public clearDrawItems(clearPois = false): void {\n    if (!this.map || !this.drawnItems) {\n      return;\n    }\n\n    this.drawnItems.clearLayers();\n    if (this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n\n    // Clear POI layer if requested\n    if (clearPois && this.poiLayer) {\n      this.poiLayer.clearLayers();\n      this.poiMarkers = [];\n      this.onPoiChanged.emit([]);\n\n      if (this.poiProviderService) {\n        this.loadPoisFromProviders();\n      }\n    }\n\n    this.onMarkerChanged.emit([]);\n    this.onPolygonChanged.emit([]);\n    this.onPolylineChanged.emit([]);\n    this.onRectangleChanged.emit([]);\n    this.onCircleChanged.emit([]);\n  }\n\n  /**\n   * Gets the current drawn items (markers and polygons).\n   * @returns An object containing arrays of markers and polygons.\n   */\n  public getDrawItem(): AXMapData {\n    return {\n      pois: this.getPois(),\n      markers: this.getMarkers(),\n      polygons: this.getPolygons(),\n      polylines: this.getPolylines(),\n      rectangles: this.getRectangles(),\n      circles: this.getCircles(),\n    };\n  }\n\n  /**\n   * Sets the drawn items on the map.\n   */\n  public async setDrawItem(data: AXMapData) {\n    await this.addMarker(data.markers);\n    this.addPolygon(data.polygons);\n    this.addPolyline(data.polylines ?? []);\n    this.addRectangle(data.rectangles ?? []);\n    this.addCircle(data.circles ?? []);\n    await this.addPoi(data.pois);\n  }\n\n  /**\n   * Adjusts the map view to fit all markers, polygons, and boundaries currently on the map.\n   * POIs are included based on the includePois parameter.\n   */\n  public fitBoundsToDrawItems(includePois = false): void {\n    if (!this.map) {\n      return;\n    }\n\n    const layersToFit: L.Layer[] = [...this.getAllEditableLayers()];\n\n    if (includePois && this.poiLayer) {\n      layersToFit.push(...this.poiLayer.getLayers());\n    }\n\n    if (this.boundaryLayer) {\n      layersToFit.push(...this.boundaryLayer.getLayers());\n    }\n\n    if (layersToFit.length > 0) {\n      const featureGroup = this.L.featureGroup(layersToFit);\n      const bounds = featureGroup.getBounds();\n      if (bounds.isValid()) {\n        this.map.fitBounds(bounds, { padding: [50, 50] });\n      }\n    }\n  }\n\n  /**\n   * Sets a boundary for restricting markers and polygons.\n   * @param boundaryPolygon The polygon defining the boundary area.\n   */\n\n  public setBoundary(boundaryPolygons: AXMapPolygon[]): void {\n    if (!this.L || !boundaryPolygons || boundaryPolygons.length === 0) {\n      console.warn('Invalid boundary polygons provided.');\n      return;\n    }\n\n    // Store the boundary polygons\n    this.boundary = boundaryPolygons;\n    this.boundaryLayer.clearLayers();\n\n    boundaryPolygons.forEach((boundaryPolygon) => {\n      if (boundaryPolygon.points.length < 3) {\n        console.warn('Invalid boundary polygon provided.');\n        return;\n      }\n\n      const polygon = this.L.polygon(\n        boundaryPolygon.points.map((point) => [point.latitude, point.longitude]),\n        { color: boundaryPolygon.color ?? 'green', weight: 2, fillOpacity: 0.1, dashArray: '0 10 5 0' },\n      );\n\n      this.boundaryLayer.addLayer(polygon);\n    });\n  }\n\n  // Add this utility function to your code\n  isPointInPolygon(point: AXMapLatLng, polygon: AXMapPolygon): boolean {\n    const x = point.latitude;\n    const y = point.longitude;\n    let inside = false;\n\n    for (let i = 0, j = polygon.points.length - 1; i < polygon.points.length; j = i++) {\n      const xi = polygon.points[i].latitude;\n      const yi = polygon.points[i].longitude;\n      const xj = polygon.points[j].latitude;\n      const yj = polygon.points[j].longitude;\n\n      const intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n\n      if (intersect) inside = !inside;\n    }\n\n    return inside;\n  }\n\n  /**\n   * Removes the boundary, allowing unrestricted drawing.\n   */\n  public removeBoundary(): void {\n    this.boundaryLayer?.clearLayers();\n    this.boundary = null;\n  }\n\n  /**\n   * Destroys the map instance and removes all event listeners.\n   */\n  public destroyMap(): void {\n    // Clear POI marker references\n    this.poiMarkers = [];\n\n    if (this.map) {\n      this.map.off();\n      this.map.remove();\n      this.map = undefined;\n      this.drawControl = undefined;\n      this.locateControl = undefined;\n    }\n  }\n\n  /**\n   * Updates a marker's popup text and options\n   * @param marker The marker to update\n   * @param popup The new popup text\n   * @param open Whether the popup should be opened after update\n   * @param closeButton Whether the popup should have a close button\n   * @returns True if the update was successful, false otherwise\n   */\n  public updateMarkerPopup(marker: AXMapMarker, popup: string, open = false, closeButton = true): boolean {\n    if (!this.map) return false;\n\n    // Find the marker in the drawn items\n    const markerLayer = this.findMarkerLayer(marker);\n    if (!markerLayer) return false;\n\n    // Update the popup\n    markerLayer.unbindPopup();\n    markerLayer.bindPopup(popup, {\n      closeButton: closeButton,\n      className: 'ax-map-popup',\n    });\n\n    // Open popup if requested\n    if (open) {\n      markerLayer.openPopup();\n    }\n\n    // Update the marker data\n    (markerLayer as any).location.popup = popup;\n    (markerLayer as any).location.popupOpen = open;\n    (markerLayer as any).location.popupCloseButton = closeButton;\n\n    return true;\n  }\n\n  /**\n   * Finds a marker layer by its latitude and longitude\n   * @param marker The marker to find\n   * @returns The Leaflet marker layer or undefined if not found\n   */\n  private findMarkerLayer(marker: AXMapMarker): L.Marker | undefined {\n    let foundMarker: L.Marker | undefined;\n\n    this.markerLayer.eachLayer((layer) => {\n      if (layer instanceof this.L.Marker) {\n        const layerLatLng = layer.getLatLng();\n        if (layerLatLng.lat === marker.latitude && layerLatLng.lng === marker.longitude) {\n          foundMarker = layer as L.Marker;\n        }\n      }\n    });\n\n    return foundMarker;\n  }\n\n  /**\n   * Updates popups for multiple markers in a single operation\n   * @param updates Array of marker popup updates\n   * @returns Number of markers successfully updated\n   */\n  public updateMarkerPopups(\n    updates: { marker: AXMapMarker; popup: string; open?: boolean; closeButton?: boolean }[],\n  ): number {\n    if (!this.map) return 0;\n\n    let successCount = 0;\n\n    // Create a map of coordinates to marker layers for faster lookup\n    const markerLayerMap = new Map<string, L.Marker>();\n\n    this.markerLayer.eachLayer((layer) => {\n      if (layer instanceof this.L.Marker) {\n        const latLng = layer.getLatLng();\n        const key = `${latLng.lat},${latLng.lng}`;\n        markerLayerMap.set(key, layer as L.Marker);\n      }\n    });\n\n    // Process updates using the map for faster lookups\n    updates.forEach((update) => {\n      const key = `${update.marker.latitude},${update.marker.longitude}`;\n      const markerLayer = markerLayerMap.get(key);\n\n      if (markerLayer) {\n        // Update popup\n        markerLayer.unbindPopup();\n        markerLayer.bindPopup(update.popup, {\n          closeButton: update.closeButton ?? true,\n          className: 'ax-map-popup',\n        });\n\n        // Open popup if requested\n        if (update.open) {\n          markerLayer.openPopup();\n        }\n\n        // Update marker data\n        (markerLayer as any).location.popup = update.popup;\n        (markerLayer as any).location.popupOpen = update.open ?? false;\n        (markerLayer as any).location.popupCloseButton = update.closeButton ?? true;\n\n        successCount++;\n      }\n    });\n\n    return successCount;\n  }\n\n  /**\n   * Adds a marker or markers to the map.\n   * @param locations The marker or markers to add.\n   */\n  public async addMarker(locations: AXMapMarker | AXMapMarker[], emitEvents = true): Promise<void> {\n    if (!this.map || !this.L) {\n      console.warn('Map or Leaflet not initialized.');\n      return;\n    }\n\n    if (\n      this.maxMarkers !== null &&\n      this.getMarkers().length + (Array.isArray(locations) ? locations.length : 1) > this.maxMarkers\n    ) {\n      console.warn('Markers Reached max count.');\n    }\n\n    const locationsArray = Array.isArray(locations) ? locations : [locations];\n\n    for (const location of locationsArray) {\n      // Check if the marker is within any of the boundary polygons\n      if (this.boundary) {\n        const isWithinBounds = this.boundary.some((boundaryPolygon) =>\n          this.isPointInPolygon(location, boundaryPolygon),\n        );\n        if (!isWithinBounds) {\n          console.warn('Marker placement outside the boundary is not allowed.');\n          continue;\n        }\n      }\n\n      // Get icon from either iconKey or direct icon\n      let markerIcon = this.defaultIcon;\n      if (location.iconKey) {\n        markerIcon = await this.setCustomIcon(location.iconKey);\n      }\n\n      // Add the marker to the map\n      const marker = this.L.marker([location.latitude, location.longitude], {\n        icon: markerIcon,\n        draggable: !location.isLocked && !!this.drawControl && !this._isDisabled && !this._isReadonly,\n      });\n\n      // Handle popup if provided\n      if (location.popup) {\n        marker.bindPopup(location.popup, {\n          closeButton: location.popupCloseButton !== false,\n          className: 'ax-map-popup',\n        });\n\n        if (location.popupOpen) {\n          marker.openPopup();\n        }\n      }\n\n      // Store the location data for later retrieval\n      (marker as any).location = location;\n\n      marker.on('click', () => {\n        this.onMarkerClick.emit(location);\n      });\n\n      // Handle drag events (without emitting to avoid performance issues)\n      marker.on('drag', (event) => {\n        const latlng = (event.target as L.Marker).getLatLng();\n        const loc = (event.target as any).location as AXMapMarker;\n        if (loc?.isLocked) {\n          (event.target as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n          return;\n        }\n\n        // Check boundary during drag\n        if (this.boundary) {\n          const newLocation = { latitude: latlng.lat, longitude: latlng.lng };\n          const isWithinBounds = this.boundary.some((boundaryPolygon) =>\n            this.isPointInPolygon(newLocation, boundaryPolygon),\n          );\n          if (!isWithinBounds) {\n            // Revert to original position if outside boundary\n            (event.target as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n            return;\n          }\n        }\n\n        // Update location data during drag (but don't emit to avoid lag)\n        loc.latitude = latlng.lat;\n        loc.longitude = latlng.lng;\n      });\n\n      marker.on('dragend', (event) => {\n        const latlng = (event.target as L.Marker).getLatLng();\n        const loc = (event.target as any).location as AXMapMarker;\n        if (loc?.isLocked) {\n          // revert drag\n          (event.target as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n          return;\n        }\n\n        // Final boundary check on drag end\n        if (this.boundary) {\n          const newLocation = { latitude: latlng.lat, longitude: latlng.lng };\n          const isWithinBounds = this.boundary.some((boundaryPolygon) =>\n            this.isPointInPolygon(newLocation, boundaryPolygon),\n          );\n          if (!isWithinBounds) {\n            // Revert to original position if outside boundary\n            (event.target as L.Marker).setLatLng(this.L.latLng(loc.latitude, loc.longitude));\n            console.warn('Marker movement outside the boundary is not allowed.');\n            return;\n          }\n        }\n\n        loc.latitude = latlng.lat;\n        loc.longitude = latlng.lng;\n        this.onMarkerChanged.emit(this.getMarkers());\n      });\n\n      this.markerLayer.addLayer(marker);\n      if (emitEvents) {\n        this.onMarkerAdded.emit(location);\n      }\n    }\n    if (emitEvents) {\n      this.onMarkerChanged.emit(this.getMarkers());\n    }\n\n    if (this.getMarkers().length === this.maxMarkers && this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Adds a polygon or polygons to the map, respecting the boundary if set.\n   * @param polygons The polygon or polygons to add.\n   * @param clickCallback Optional callback function to be executed on polygon click.\n   */\n  public addPolygon(polygons: AXMapPolygon | AXMapPolygon[], emitEvents = true): void {\n    if (!this.map || !this.L) {\n      console.warn('Map or Leaflet not initialized.');\n      return;\n    }\n\n    const polygonsToAdd = Array.isArray(polygons) ? polygons : [polygons];\n\n    polygonsToAdd.forEach((polygon) => {\n      if (polygon.points.length < 3) {\n        console.warn('Polygon needs 3 or more points.');\n        return;\n      }\n\n      if (this.maxPolygons !== null && this.getPolygons().length >= this.maxPolygons) {\n        console.warn('Polygon reached max count.');\n        return;\n      }\n\n      // Check if all polygon points are within any of the boundary polygons\n      if (this.boundary) {\n        const isWithinBounds = polygon.points.every((point) =>\n          this.boundary.some((boundaryPolygon) => this.isPointInPolygon(point, boundaryPolygon)),\n        );\n\n        if (!isWithinBounds) {\n          console.warn('Polygon drawing outside the boundary is not allowed.');\n          return;\n        }\n      }\n\n      // Create the polygon\n      const latLngs = polygon.points.map((point) => this.L.latLng(point.latitude, point.longitude));\n      const newPolygon = new this.L.Polygon(latLngs, { color: polygon.color || 'blue' });\n\n      // Store metadata for later lookup/removal by id\n      (newPolygon as any).polygon = polygon;\n\n      if (polygon.title) {\n        newPolygon.bindPopup(polygon.title);\n      }\n\n      newPolygon.on('click', () => {\n        this.onPolygonClick.emit(polygon);\n      });\n\n      // Add the polygon to the map\n      this.polygonLayer.addLayer(newPolygon);\n\n      // Emit events\n      if (emitEvents) {\n        this.onPolygonAdded.emit(polygon);\n        this.onPolygonChanged.emit(this.getPolygons());\n      }\n    });\n\n    if (this.getPolygons().length === this.maxPolygons && this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Adds a polyline or polylines to the map.\n   */\n  public addPolyline(polylines: AXMapPolyline | AXMapPolyline[], emitEvents = true): void {\n    if (!this.map || !this.L) {\n      console.warn('Map or Leaflet not initialized.');\n      return;\n    }\n\n    const polylinesToAdd = Array.isArray(polylines) ? polylines : [polylines];\n\n    polylinesToAdd.forEach((polyline) => {\n      if (polyline.points.length < 2) {\n        console.warn('Polyline needs 2 or more points.');\n        return;\n      }\n\n      if (this.maxPolylines !== null && this.getPolylines().length >= this.maxPolylines) {\n        console.warn('Polyline reached max count.');\n        return;\n      }\n\n      if (this.boundary && !this.arePointsWithinBoundary(polyline.points)) {\n        console.warn('Polyline drawing outside the boundary is not allowed.');\n        return;\n      }\n\n      const latLngs = polyline.points.map((point) => this.L.latLng(point.latitude, point.longitude));\n      const newPolyline = new this.L.Polyline(latLngs, { color: polyline.color || this.shapeColor });\n\n      (newPolyline as any).polyline = polyline;\n\n      if (polyline.title) {\n        newPolyline.bindPopup(polyline.title);\n      }\n\n      newPolyline.on('click', () => {\n        this.onPolylineClick.emit(polyline);\n      });\n\n      this.polylineLayer.addLayer(newPolyline);\n\n      if (emitEvents) {\n        this.onPolylineAdded.emit(polyline);\n        this.onPolylineChanged.emit(this.getPolylines());\n      }\n    });\n\n    if (this.getPolylines().length === this.maxPolylines && this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Adds a rectangle or rectangles to the map.\n   */\n  public addRectangle(rectangles: AXMapRectangle | AXMapRectangle[], emitEvents = true): void {\n    if (!this.map || !this.L) {\n      console.warn('Map or Leaflet not initialized.');\n      return;\n    }\n\n    const rectanglesToAdd = Array.isArray(rectangles) ? rectangles : [rectangles];\n\n    rectanglesToAdd.forEach((rectangle) => {\n      if (this.maxRectangles !== null && this.getRectangles().length >= this.maxRectangles) {\n        console.warn('Rectangle reached max count.');\n        return;\n      }\n\n      const cornerPoints = this.getRectangleCornerPoints(rectangle);\n      if (this.boundary && !this.arePointsWithinBoundary(cornerPoints)) {\n        console.warn('Rectangle drawing outside the boundary is not allowed.');\n        return;\n      }\n\n      const bounds = this.L.latLngBounds(\n        [rectangle.southWest.latitude, rectangle.southWest.longitude],\n        [rectangle.northEast.latitude, rectangle.northEast.longitude],\n      );\n      const newRectangle = new this.L.Rectangle(bounds, { color: rectangle.color || this.shapeColor });\n\n      (newRectangle as any).rectangle = rectangle;\n\n      if (rectangle.title) {\n        newRectangle.bindPopup(rectangle.title);\n      }\n\n      newRectangle.on('click', () => {\n        this.onRectangleClick.emit(rectangle);\n      });\n\n      this.rectangleLayer.addLayer(newRectangle);\n\n      if (emitEvents) {\n        this.onRectangleAdded.emit(rectangle);\n        this.onRectangleChanged.emit(this.getRectangles());\n      }\n    });\n\n    if (this.getRectangles().length === this.maxRectangles && this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Adds a circle or circles to the map.\n   */\n  public addCircle(circles: AXMapCircle | AXMapCircle[], emitEvents = true): void {\n    if (!this.map || !this.L) {\n      console.warn('Map or Leaflet not initialized.');\n      return;\n    }\n\n    const circlesToAdd = Array.isArray(circles) ? circles : [circles];\n\n    circlesToAdd.forEach((circle) => {\n      if (circle.radius <= 0) {\n        console.warn('Circle radius must be greater than 0.');\n        return;\n      }\n\n      if (this.maxCircles !== null && this.getCircles().length >= this.maxCircles) {\n        console.warn('Circle reached max count.');\n        return;\n      }\n\n      if (\n        this.boundary &&\n        !this.boundary.some((boundaryPolygon) => this.isPointInPolygon(circle.center, boundaryPolygon))\n      ) {\n        console.warn('Circle drawing outside the boundary is not allowed.');\n        return;\n      }\n\n      const newCircle = new this.L.Circle([circle.center.latitude, circle.center.longitude], {\n        radius: circle.radius,\n        color: circle.color || this.shapeColor,\n      });\n\n      (newCircle as any).circle = circle;\n\n      if (circle.title) {\n        newCircle.bindPopup(circle.title);\n      }\n\n      newCircle.on('click', () => {\n        this.onCircleClick.emit(circle);\n      });\n\n      this.circleLayer.addLayer(newCircle);\n\n      if (emitEvents) {\n        this.onCircleAdded.emit(circle);\n        this.onCircleChanged.emit(this.getCircles());\n      }\n    });\n\n    if (this.getCircles().length === this.maxCircles && this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Adds a POI marker to the map.\n   * @param locations One or more POI markers to add.\n   */\n  public async addPoi(locations: AXPoiMarker | AXPoiMarker[]): Promise<void> {\n    if (!this.map || !this.poiLayer) {\n      return;\n    }\n\n    const addSinglePoi = async (poi: AXPoiMarker) => {\n      try {\n        let icon = this.defaultIcon;\n\n        if (poi.iconKey) {\n          icon = await this.setCustomIcon(poi.iconKey);\n        }\n\n        const markerOptions: L.MarkerOptions = {\n          icon,\n          title: poi.title,\n          draggable: !this._isDisabled && !this._isReadonly,\n        };\n\n        // Add custom properties to options\n        (markerOptions as any).iconKey = poi.iconKey;\n        (markerOptions as any).providerKey = (poi as any).providerKey;\n        // Store minZoom property in marker options\n        (markerOptions as any).minZoom = poi.minZoom !== undefined ? poi.minZoom : this.poiMinZoom;\n\n        const marker = this.L.marker([poi.latitude, poi.longitude], markerOptions);\n\n        if (poi.popup) {\n          marker.bindPopup(poi.popup, {\n            closeButton: poi.popupCloseButton !== false,\n          });\n\n          if (poi.popupOpen) {\n            marker.openPopup();\n          }\n        }\n\n        marker.on('dragend', (event) => {\n          const latLng = event.target.getLatLng();\n          // Update poi location data in the marker\n          (event.target as any).poi = {\n            ...poi,\n            latitude: latLng.lat,\n            longitude: latLng.lng,\n          };\n\n          this.onPoiChanged.emit(this.getPois());\n        });\n\n        this.poiLayer.addLayer(marker);\n        // Track this marker for visibility control\n        this.poiMarkers.push(marker);\n        this.onPoiAdded.emit(poi);\n      } catch (error) {\n        console.error('Error adding POI marker:', error);\n      }\n    };\n\n    if (Array.isArray(locations)) {\n      await Promise.all(locations.map((loc) => addSinglePoi(loc)));\n    } else {\n      await addSinglePoi(locations);\n    }\n\n    // Set initial visibility based on current zoom\n    if (this.map) {\n      this.updatePoiVisibility(this.map.getZoom());\n    }\n\n    this.onPoiChanged.emit(this.getPois());\n  }\n\n  /**\n   * Updates the visibility of POI markers based on the current zoom level\n   * @param currentZoom The current zoom level of the map\n   */\n  private updatePoiVisibility(currentZoom: number): void {\n    // Check each marker individually against its own minZoom value or the global one\n    this.poiMarkers.forEach((marker) => {\n      const el = marker.getElement();\n      if (el) {\n        // Use the marker's specific minZoom if available, otherwise use the global setting\n        const markerMinZoom =\n          (marker.options as any).minZoom !== undefined ? (marker.options as any).minZoom : this.poiMinZoom;\n\n        const isVisible = currentZoom >= markerMinZoom;\n\n        el.style.opacity = isVisible ? '1' : '0';\n        // Disable pointer events when hidden\n        el.style.pointerEvents = isVisible ? 'auto' : 'none';\n      }\n    });\n  }\n\n  /**\n   * Sets the minimum zoom level at which POI markers become visible\n   * @param minZoom The minimum zoom level (default is 10)\n   */\n  public setPoiMinZoom(minZoom: number): void {\n    this.poiMinZoom = minZoom;\n\n    if (this.map) {\n      this.updatePoiVisibility(this.map.getZoom());\n    }\n  }\n\n  /**\n   * Gets the current minimum zoom level for POI visibility\n   * @returns The minimum zoom level\n   */\n  public getPoiMinZoom(): number {\n    return this.poiMinZoom;\n  }\n\n  /**\n   * Loads POIs from all registered providers\n   */\n  public async loadPoisFromProviders(): Promise<void> {\n    if (!this.map || !this.poiProviderService) {\n      return;\n    }\n\n    try {\n      const pois = await this.poiProviderService.getList();\n      if (pois.length > 0) {\n        await this.addPoi(pois);\n      }\n    } catch (error) {\n      console.error('Error loading POIs from providers:', error);\n    }\n  }\n\n  /**\n   * Refreshes POIs from providers, clearing existing POIs first\n   */\n  public async refreshPois(): Promise<void> {\n    if (!this.map || !this.poiLayer || !this.poiProviderService) {\n      return;\n    }\n\n    // Clear existing POIs\n    this.poiLayer.clearLayers();\n    this.poiMarkers = [];\n\n    // Load POIs from providers\n    await this.loadPoisFromProviders();\n  }\n\n  /**\n   * Refreshes POIs from a specific provider by key\n   * @param providerKey The key of the provider to refresh\n   */\n  public async refreshPoiByProvider(providerKey: string): Promise<void> {\n    if (!this.map || !this.poiLayer || !this.poiProviderService) {\n      return;\n    }\n\n    try {\n      // Remove existing POIs for this provider\n      const currentPois = this.getPois();\n\n      // First remove all POI markers from this provider from the map\n      this.poiMarkers = this.poiMarkers.filter((marker) => {\n        const latLng = marker.getLatLng();\n        const isPoi = currentPois.some(\n          (poi) =>\n            poi.latitude === latLng.lat && poi.longitude === latLng.lng && (poi as any).providerKey === providerKey,\n        );\n\n        if (isPoi) {\n          this.poiLayer.removeLayer(marker);\n          return false;\n        }\n        return true;\n      });\n\n      // Get fresh POIs from the provider\n      const pois = await this.poiProviderService.getList();\n\n      // Filter POIs from the specific provider\n      const providerPois = pois.filter((poi) => (poi as any).providerKey === providerKey);\n\n      // Add the refreshed POIs\n      if (providerPois.length > 0) {\n        await this.addPoi(providerPois);\n      }\n\n      this.onPoiChanged.emit(this.getPois());\n    } catch (error) {\n      console.error(`Error refreshing POIs from provider ${providerKey}:`, error);\n    }\n  }\n\n  /**\n   * Sets whether markers can be added by clicking/tapping on the map\n   * @param enabled Whether to enable marker-on-tap functionality\n   */\n  public setAddMarkerOnTap(enabled: boolean): void {\n    this._addMarkerOnTapEnabled = enabled;\n  }\n\n  /**\n   * Checks if the map is currently in drawing mode\n   * @returns True if currently drawing\n   */\n  private _isDrawingMode(): boolean {\n    return this._isCurrentlyDrawing;\n  }\n\n  /**\n   * Removes markers by id or location. If no location provided, removes all markers.\n   */\n  public removeMarker(locations?: AXMapMarker | AXMapMarker[]): void {\n    if (!this.markerLayer || !this.L) return;\n\n    const removeLayer = (layer: L.Layer) => this.markerLayer.removeLayer(layer);\n\n    if (!locations) {\n      this.markerLayer.clearLayers();\n      this.onMarkerChanged.emit(this.getMarkers());\n      if (this._hasDrawControl) {\n        this.refreshDrawControl();\n      }\n      return;\n    }\n\n    const targets = Array.isArray(locations) ? locations : [locations];\n\n    const findByIdOrLatLng = (target: AXMapMarker): L.Marker | undefined => {\n      let found: L.Marker | undefined;\n      this.markerLayer.eachLayer((layer) => {\n        if (found) return;\n        if (layer instanceof this.L.Marker) {\n          const loc = (layer as any).location as AXMapMarker | undefined;\n          const hasIdMatch =\n            (target as any)?.id != null && (loc as any)?.id != null && (loc as any).id === (target as any).id;\n          const hasPosMatch = loc && loc.latitude === target.latitude && loc.longitude === target.longitude;\n          if (hasIdMatch || hasPosMatch) {\n            found = layer as L.Marker;\n          }\n        }\n      });\n      return found;\n    };\n\n    targets.forEach((t) => {\n      const layer = findByIdOrLatLng(t);\n      if (layer) {\n        removeLayer(layer);\n      }\n    });\n\n    this.onMarkerChanged.emit(this.getMarkers());\n    if (this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  /**\n   * Removes polygons by id or geometry. If no location provided, removes all polygons.\n   */\n  public removePolygon(locations?: AXMapPolygon | AXMapPolygon[]): void {\n    if (!this.polygonLayer || !this.L) return;\n\n    const removeLayer = (layer: L.Layer) => this.polygonLayer.removeLayer(layer);\n\n    if (!locations) {\n      this.polygonLayer.clearLayers();\n      this.onPolygonChanged.emit(this.getPolygons());\n      if (this._hasDrawControl) {\n        this.refreshDrawControl();\n      }\n      return;\n    }\n\n    const targets = Array.isArray(locations) ? locations : [locations];\n\n    const polygonsEqualByPoints = (a: AXMapPolygon, b: AXMapPolygon): boolean => {\n      if (!a?.points || !b?.points) return false;\n      if (a.points.length !== b.points.length) return false;\n      for (let i = 0; i < a.points.length; i++) {\n        if (a.points[i].latitude !== b.points[i].latitude || a.points[i].longitude !== b.points[i].longitude) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    const findPolygonLayer = (target: AXMapPolygon): import('leaflet').Polygon<any> | undefined => {\n      let found: import('leaflet').Polygon<any> | undefined;\n      this.polygonLayer.eachLayer((layer) => {\n        if (found) return;\n        if (this.isPolygonLayer(layer)) {\n          const meta = (layer as any).polygon as AXMapPolygon | undefined;\n          const hasIdMatch =\n            (target as any)?.id != null && (meta as any)?.id != null && (meta as any).id === (target as any).id;\n          if (hasIdMatch) {\n            found = layer as any;\n            return;\n          }\n          // Fallback to geometry match\n          const latLngs = (layer as any).getLatLngs()[0] as any[];\n          const layerPoly: AXMapPolygon = {\n            points: latLngs.map((ll) => ({ latitude: ll.lat, longitude: ll.lng })),\n            color: (layer as any).options?.color,\n          } as AXMapPolygon;\n          if (polygonsEqualByPoints(layerPoly, target)) {\n            found = layer as any;\n          }\n        }\n      });\n      return found;\n    };\n\n    targets.forEach((t) => {\n      const layer = findPolygonLayer(t);\n      if (layer) {\n        removeLayer(layer);\n      }\n    });\n\n    this.onPolygonChanged.emit(this.getPolygons());\n    if (this._hasDrawControl) {\n      this.refreshDrawControl();\n    }\n  }\n\n  public setMaxMarkers(maxMarkers: number): void {\n    this.maxMarkers = maxMarkers;\n  }\n\n  public setMaxPolygons(maxPolygons: number): void {\n    this.maxPolygons = maxPolygons;\n  }\n\n  public setMaxPolylines(maxPolylines: number): void {\n    this.maxPolylines = maxPolylines;\n  }\n\n  public setMaxRectangles(maxRectangles: number): void {\n    this.maxRectangles = maxRectangles;\n  }\n\n  public setMaxCircles(maxCircles: number): void {\n    this.maxCircles = maxCircles;\n  }\n\n  private refreshDrawControl(): void {\n    if (this._hasDrawControl) {\n      this.addDrawControl(this.position);\n    }\n  }\n\n  private canDrawMoreMarkers(): boolean {\n    return this.maxMarkers === null || this.getMarkers().length < this.maxMarkers;\n  }\n\n  private canDrawMorePolygons(): boolean {\n    return this.maxPolygons === null || this.getPolygons().length < this.maxPolygons;\n  }\n\n  private canDrawMorePolylines(): boolean {\n    return this.maxPolylines === null || this.getPolylines().length < this.maxPolylines;\n  }\n\n  private canDrawMoreRectangles(): boolean {\n    return this.maxRectangles === null || this.getRectangles().length < this.maxRectangles;\n  }\n\n  private canDrawMoreCircles(): boolean {\n    return this.maxCircles === null || this.getCircles().length < this.maxCircles;\n  }\n\n  private isPolygonLayer(layer: L.Layer): layer is L.Polygon {\n    return layer instanceof this.L.Polygon && !(layer instanceof this.L.Rectangle);\n  }\n\n  private isPolylineLayer(layer: L.Layer): layer is L.Polyline {\n    return layer instanceof this.L.Polyline && !(layer instanceof this.L.Polygon);\n  }\n\n  private isRectangleLayer(layer: L.Layer): layer is L.Rectangle {\n    return layer instanceof this.L.Rectangle;\n  }\n\n  private isCircleLayer(layer: L.Layer): layer is L.Circle {\n    return layer instanceof this.L.Circle;\n  }\n\n  private arePointsWithinBoundary(points: AXMapLatLng[]): boolean {\n    return points.every((point) =>\n      this.boundary?.some((boundaryPolygon) => this.isPointInPolygon(point, boundaryPolygon)),\n    );\n  }\n\n  private getRectangleCornerPoints(rectangle: AXMapRectangle): AXMapLatLng[] {\n    return [\n      rectangle.southWest,\n      rectangle.northEast,\n      {\n        latitude: rectangle.southWest.latitude,\n        longitude: rectangle.northEast.longitude,\n      },\n      {\n        latitude: rectangle.northEast.latitude,\n        longitude: rectangle.southWest.longitude,\n      },\n    ];\n  }\n\n  /**\n   * Removes polylines by id or geometry. If not provided, removes all polylines.\n   */\n  public removePolyline(locations?: AXMapPolyline | AXMapPolyline[]): void {\n    if (!this.polylineLayer || !this.L) return;\n\n    const removeLayer = (layer: L.Layer) => this.polylineLayer.removeLayer(layer);\n\n    if (!locations) {\n      this.polylineLayer.clearLayers();\n      this.onPolylineChanged.emit(this.getPolylines());\n      this.refreshDrawControl();\n      return;\n    }\n\n    const targets = Array.isArray(locations) ? locations : [locations];\n\n    targets.forEach((target) => {\n      let found: L.Polyline | undefined;\n      this.polylineLayer.eachLayer((layer) => {\n        if (found) return;\n        const meta = (layer as any).polyline as AXMapPolyline | undefined;\n        const hasIdMatch = target.id != null && meta?.id != null && meta.id === target.id;\n        if (hasIdMatch) {\n          found = layer as L.Polyline;\n          return;\n        }\n        if (this.polylinesEqualByPoints(this.layerToPolyline(layer as L.Polyline), target)) {\n          found = layer as L.Polyline;\n        }\n      });\n      if (found) {\n        removeLayer(found);\n      }\n    });\n\n    this.onPolylineChanged.emit(this.getPolylines());\n    this.refreshDrawControl();\n  }\n\n  /**\n   * Removes rectangles by id or geometry. If not provided, removes all rectangles.\n   */\n  public removeRectangle(locations?: AXMapRectangle | AXMapRectangle[]): void {\n    if (!this.rectangleLayer || !this.L) return;\n\n    const removeLayer = (layer: L.Layer) => this.rectangleLayer.removeLayer(layer);\n\n    if (!locations) {\n      this.rectangleLayer.clearLayers();\n      this.onRectangleChanged.emit(this.getRectangles());\n      this.refreshDrawControl();\n      return;\n    }\n\n    const targets = Array.isArray(locations) ? locations : [locations];\n\n    targets.forEach((target) => {\n      let found: L.Rectangle | undefined;\n      this.rectangleLayer.eachLayer((layer) => {\n        if (found) return;\n        const meta = (layer as any).rectangle as AXMapRectangle | undefined;\n        const hasIdMatch = target.id != null && meta?.id != null && meta.id === target.id;\n        if (hasIdMatch) {\n          found = layer as L.Rectangle;\n          return;\n        }\n        const current = this.layerToRectangle(layer as L.Rectangle);\n        if (this.rectanglesEqual(current, target)) {\n          found = layer as L.Rectangle;\n        }\n      });\n      if (found) {\n        removeLayer(found);\n      }\n    });\n\n    this.onRectangleChanged.emit(this.getRectangles());\n    this.refreshDrawControl();\n  }\n\n  /**\n   * Removes circles by id or geometry. If not provided, removes all circles.\n   */\n  public removeCircle(locations?: AXMapCircle | AXMapCircle[]): void {\n    if (!this.circleLayer || !this.L) return;\n\n    const removeLayer = (layer: L.Layer) => this.circleLayer.removeLayer(layer);\n\n    if (!locations) {\n      this.circleLayer.clearLayers();\n      this.onCircleChanged.emit(this.getCircles());\n      this.refreshDrawControl();\n      return;\n    }\n\n    const targets = Array.isArray(locations) ? locations : [locations];\n\n    targets.forEach((target) => {\n      let found: L.Circle | undefined;\n      this.circleLayer.eachLayer((layer) => {\n        if (found) return;\n        const meta = (layer as any).circle as AXMapCircle | undefined;\n        const hasIdMatch = target.id != null && meta?.id != null && meta.id === target.id;\n        if (hasIdMatch) {\n          found = layer as L.Circle;\n          return;\n        }\n        const current = this.layerToCircle(layer as L.Circle);\n        if (this.circlesEqual(current, target)) {\n          found = layer as L.Circle;\n        }\n      });\n      if (found) {\n        removeLayer(found);\n      }\n    });\n\n    this.onCircleChanged.emit(this.getCircles());\n    this.refreshDrawControl();\n  }\n\n  private layerToPolyline(layer: L.Polyline): AXMapPolyline {\n    const latLngs = layer.getLatLngs() as L.LatLng[];\n    const meta = (layer as any).polyline as AXMapPolyline | undefined;\n    return {\n      points: latLngs.map((latLng) => ({ latitude: latLng.lat, longitude: latLng.lng })),\n      title: meta?.title,\n      color: layer.options?.color,\n      id: meta?.id,\n      isLocked: meta?.isLocked,\n    };\n  }\n\n  private layerToRectangle(layer: L.Rectangle): AXMapRectangle {\n    const bounds = layer.getBounds();\n    const meta = (layer as any).rectangle as AXMapRectangle | undefined;\n    return {\n      southWest: {\n        latitude: bounds.getSouthWest().lat,\n        longitude: bounds.getSouthWest().lng,\n      },\n      northEast: {\n        latitude: bounds.getNorthEast().lat,\n        longitude: bounds.getNorthEast().lng,\n      },\n      title: meta?.title,\n      color: layer.options?.color,\n      id: meta?.id,\n      isLocked: meta?.isLocked,\n    };\n  }\n\n  private layerToCircle(layer: L.Circle): AXMapCircle {\n    const center = layer.getLatLng();\n    const meta = (layer as any).circle as AXMapCircle | undefined;\n    return {\n      center: { latitude: center.lat, longitude: center.lng },\n      radius: layer.getRadius(),\n      title: meta?.title,\n      color: layer.options?.color,\n      id: meta?.id,\n      isLocked: meta?.isLocked,\n    };\n  }\n\n  private polylinesEqualByPoints(a: AXMapPolyline, b: AXMapPolyline): boolean {\n    if (!a?.points || !b?.points || a.points.length !== b.points.length) return false;\n    return a.points.every(\n      (point, index) => point.latitude === b.points[index].latitude && point.longitude === b.points[index].longitude,\n    );\n  }\n\n  private rectanglesEqual(a: AXMapRectangle, b: AXMapRectangle): boolean {\n    return (\n      a.southWest.latitude === b.southWest.latitude &&\n      a.southWest.longitude === b.southWest.longitude &&\n      a.northEast.latitude === b.northEast.latitude &&\n      a.northEast.longitude === b.northEast.longitude\n    );\n  }\n\n  private circlesEqual(a: AXMapCircle, b: AXMapCircle): boolean {\n    return (\n      a.center.latitude === b.center.latitude && a.center.longitude === b.center.longitude && a.radius === b.radius\n    );\n  }\n\n  private setPathLayerInteractive(layer: L.Layer, interactive: boolean): void {\n    if (\n      this.isPolylineLayer(layer) ||\n      this.isPolygonLayer(layer) ||\n      this.isRectangleLayer(layer) ||\n      this.isCircleLayer(layer)\n    ) {\n      (layer as L.Path).setStyle({ interactive });\n    }\n  }\n\n  /**\n   * Sets the readonly state of the map.\n   * When readonly, map is movable and zoomable but all functionality (drawing, adding markers, controls) is disabled.\n   * @param readonly Whether to set the map to readonly mode\n   */\n  public setReadonly(readonly: boolean): void {\n    this._isReadonly = readonly;\n\n    if (!this.map || this._isDisabled) {\n      // Don't modify anything if disabled (disabled takes precedence)\n      return;\n    }\n\n    if (readonly) {\n      // Keep map interactions enabled (panning and zooming)\n      // But disable dragging on markers and polygons\n      this.forEachEditableLayer((layer) => {\n        if (layer instanceof this.L.Marker) {\n          (layer as L.Marker).dragging?.disable();\n        } else {\n          this.setPathLayerInteractive(layer, false);\n        }\n      });\n\n      // Disable dragging on POI markers\n      if (this.poiLayer) {\n        this.poiLayer.eachLayer((layer) => {\n          if (layer instanceof this.L.Marker) {\n            (layer as L.Marker).dragging?.disable();\n          }\n        });\n      }\n\n      // Disable marker-on-tap when readonly\n      this._addMarkerOnTapEnabled = false;\n    } else {\n      // Re-enable dragging on markers and polygons (if draw control exists)\n      this.forEachEditableLayer((layer) => {\n        if (layer instanceof this.L.Marker) {\n          const loc = (layer as any).location as AXMapMarker | undefined;\n          if (loc && !loc.isLocked && this.drawControl) {\n            (layer as L.Marker).dragging?.enable();\n          }\n        } else {\n          this.setPathLayerInteractive(layer, true);\n        }\n      });\n\n      // Re-enable dragging on POI markers\n      if (this.poiLayer) {\n        this.poiLayer.eachLayer((layer) => {\n          if (layer instanceof this.L.Marker) {\n            (layer as L.Marker).dragging?.enable();\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * Sets the disabled state of the map.\n   * When disabled, everything is disabled including zoom, moving, drawing, and all interactions.\n   * @param disabled Whether to disable the map completely\n   */\n  public setDisabled(disabled: boolean): void {\n    this._isDisabled = disabled;\n\n    if (!this.map) {\n      return;\n    }\n\n    if (disabled) {\n      // Disable all map interactions (panning and zooming)\n      this.map.dragging.disable();\n      this.map.touchZoom.disable();\n      this.map.doubleClickZoom.disable();\n      this.map.scrollWheelZoom.disable();\n      this.map.boxZoom.disable();\n      this.map.keyboard.disable();\n\n      // Remove zoom control buttons\n      try {\n        if (this.map.zoomControl) {\n          this.map.removeControl(this.map.zoomControl);\n        }\n      } catch (e) {\n        // Zoom control might not exist, ignore error\n      }\n\n      // Disable dragging on existing markers and polygons\n      this.forEachEditableLayer((layer) => {\n        if (layer instanceof this.L.Marker) {\n          (layer as L.Marker).dragging?.disable();\n        } else {\n          this.setPathLayerInteractive(layer, false);\n        }\n      });\n\n      // Disable dragging on POI markers\n      if (this.poiLayer) {\n        this.poiLayer.eachLayer((layer) => {\n          if (layer instanceof this.L.Marker) {\n            (layer as L.Marker).dragging?.disable();\n          }\n        });\n      }\n\n      // Disable marker-on-tap when map is disabled\n      this._addMarkerOnTapEnabled = false;\n    } else {\n      // Enable all map interactions\n      this.map.dragging.enable();\n      this.map.touchZoom.enable();\n      this.map.doubleClickZoom.enable();\n      this.map.scrollWheelZoom.enable();\n      this.map.boxZoom.enable();\n      this.map.keyboard.enable();\n\n      // Re-add zoom control buttons (only if not readonly, since readonly should keep zoom controls)\n      if (!this._isReadonly) {\n        // Check if zoom control doesn't exist, then add it\n        // Leaflet's addTo will handle if it already exists\n        if (!this.map.zoomControl) {\n          this.L.control.zoom().addTo(this.map);\n        }\n      }\n\n      // If readonly is still active, don't re-enable dragging\n      if (!this._isReadonly) {\n        // Re-enable dragging on markers and polygons (if draw control exists)\n        this.forEachEditableLayer((layer) => {\n          if (layer instanceof this.L.Marker) {\n            const loc = (layer as any).location as AXMapMarker | undefined;\n            if (loc && !loc.isLocked && this.drawControl) {\n              (layer as L.Marker).dragging?.enable();\n            }\n          } else {\n            this.setPathLayerInteractive(layer, true);\n          }\n        });\n\n        // Re-enable dragging on POI markers\n        if (this.poiLayer) {\n          this.poiLayer.eachLayer((layer) => {\n            if (layer instanceof this.L.Marker) {\n              (layer as L.Marker).dragging?.enable();\n            }\n          });\n        }\n      } else {\n        // If readonly is active, apply readonly state\n        this.setReadonly(true);\n      }\n    }\n  }\n\n  /**\n   * Fixes leaflet-draw strict-mode bug where `type` is used without declaration\n   * in GeometryUtil.readableArea (affects rectangle/polygon area tooltips).\n   * @see https://github.com/Leaflet/Leaflet.draw/issues/898\n   */\n  private patchLeafletDraw(): void {\n    const geometryUtil = (this.L as typeof import('leaflet') & { GeometryUtil?: LeafletDrawGeometryUtil }).GeometryUtil;\n    if (!geometryUtil?.readableArea) {\n      return;\n    }\n\n    const defaultPrecision = { km: 2, ha: 2, m: 0, mi: 2, ac: 2, yd: 0, ft: 0, nm: 2 };\n    const formattedNumber = geometryUtil.formattedNumber.bind(geometryUtil);\n\n    geometryUtil.readableArea = (area: number, isMetric?: boolean | string | string[], precision?: object): string => {\n      let areaStr: string;\n      let units: string[];\n      const resolvedPrecision = { ...defaultPrecision, ...(precision as Record<string, number> | undefined) };\n\n      if (isMetric) {\n        units = ['ha', 'm'];\n        const metricType = typeof isMetric;\n        if (metricType === 'string') {\n          units = [isMetric as string];\n        } else if (metricType !== 'boolean') {\n          units = isMetric as string[];\n        }\n\n        if (area >= 1_000_000 && units.includes('km')) {\n          areaStr = `${formattedNumber(area * 0.000001, resolvedPrecision['km'])} km²`;\n        } else if (area >= 10_000 && units.includes('ha')) {\n          areaStr = `${formattedNumber(area * 0.0001, resolvedPrecision['ha'])} ha`;\n        } else {\n          areaStr = `${formattedNumber(area, resolvedPrecision['m'])} m²`;\n        }\n      } else {\n        area /= 0.836127;\n\n        if (area >= 3_097_600) {\n          areaStr = `${formattedNumber(area / 3_097_600, resolvedPrecision['mi'])} mi²`;\n        } else if (area >= 4_840) {\n          areaStr = `${formattedNumber(area / 4_840, resolvedPrecision['ac'])} acres`;\n        } else {\n          areaStr = `${formattedNumber(area, resolvedPrecision['yd'])} yd²`;\n        }\n      }\n\n      return areaStr;\n    };\n  }\n}\n\ntype LeafletDrawGeometryUtil = {\n  formattedNumber: (n: number, precision: number) => string;\n  readableArea: (area: number, isMetric?: boolean | string | string[], precision?: object) => string;\n};\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport {\n  afterNextRender,\n  Component,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { AXLeafletService } from './map.service';\nimport {\n  AXMapCircle,\n  AXMapControlPlace,\n  AXMapData,\n  AXMapMarker,\n  AXMapPolygon,\n  AXMapPolyline,\n  AXMapRectangle,\n  AXPoiMarker,\n} from './map.type';\n\n/**\n * @description\n * The `AXMapComponent` provides an interactive map powered by Leaflet. It supports markers, location tracking,\n * and configurable zoom, latitude, longitude, and marker behavior. The component allows easy integration and\n * manipulation of map features.\n *\n * @example\n * <ax-map [latitude]=\"51.505\" [longitude]=\"-0.09\" [zoomLevel]=\"13\" [hasMarker]=\"true\"></ax-map>\n */\n@Component({\n  selector: 'ax-map',\n  templateUrl: './map.component.html',\n  styleUrls: ['./map.component.css'],\n  providers: [AXLeafletService, { provide: AXComponent, useExisting: AXMapComponent }],\n\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AXMapComponent extends NXComponent implements OnDestroy {\n  /**\n   * @description\n   * Zoom level of the map.\n   */\n  zoomLevel = model<number | null>(null);\n\n  /**\n   * @description\n   * Latitude of the map center.\n   */\n  latitude = model<number | null>(null);\n\n  /**\n   * @description\n   * Longitude of the map center.\n   */\n  longitude = model<number | null>(null);\n\n  /**\n   * @description\n   * Maximum number of markers allowed on the map.\n   * @default 0\n   */\n  maxMarker = input(0);\n\n  /**\n   * @description\n   * Maximum number of polygons allowed on the map.\n   * @default 0\n   */\n  maxPolygon = input(0);\n\n  /**\n   * @description\n   * Maximum number of polylines allowed on the map.\n   * @default 0\n   */\n  maxPolyline = input(0);\n\n  /**\n   * @description\n   * Maximum number of rectangles allowed on the map.\n   * @default 0\n   */\n  maxRectangle = input(0);\n\n  /**\n   * @description\n   * Maximum number of circles allowed on the map.\n   * @default 0\n   */\n  maxCircle = input(0);\n\n  /**\n   * @description\n   * Whether the map should have a marker control.\n   * @default false\n   */\n  hasDraw = input(false);\n\n  /**\n   * @description\n   * Whether the map should have a location control.\n   * @default false\n   */\n  hasLocator = input(false);\n\n  /**\n   * @description\n   * Whether map should contain all draw items.\n   * @default false\n   */\n  fitToDraw = input(false);\n\n  /**\n   * @description\n   * Whether map draw has to limit in area.\n   * @default undefined\n   */\n  limitDraw = input<AXMapPolygon[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Whether to include POIs when fitting the map to draw items.\n   * @default false\n   */\n  addPoiToFitDraw = input(false);\n\n  /**\n   * @description\n   * If true, user can add a marker by clicking/tapping on the map.\n   * @default false\n   */\n  addMarkerOnTap = input(false);\n\n  /**\n   * @description\n   * If true, map is movable and zoomable but all functionality (drawing, adding markers, controls) is disabled.\n   * @default false\n   */\n  readonly = input(false);\n\n  /**\n   * @description\n   * If true, disables everything including zoom, moving, drawing, and all interactions. Map becomes completely read-only.\n   * @default false\n   */\n  disabled = input(false);\n\n  /**\n   * @description\n   * Position of the marker control on the map.\n   * @default 'topleft'\n   */\n  markerPlace = input<AXMapControlPlace>('topleft');\n\n  /**\n   * @description\n   * Position of the locate control on the map.\n   * @default 'bottomright'\n   */\n  locatePlace = input<AXMapControlPlace>('bottomright');\n\n  /**\n   * @description\n   * Minimum zoom level at which POI markers become visible.\n   * @default 10\n   */\n  poiMinZoom = input(10);\n\n  /**\n   * @description\n   * Array or single marker location(s) to be placed on the map.\n   * @default undefined\n   */\n  markers = input<AXMapMarker | AXMapMarker[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Array or single polygon location(s) to be placed on the map.\n   * @default undefined\n   */\n  polygons = input<AXMapPolygon | AXMapPolygon[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Array or single polyline(s) to be placed on the map.\n   * @default undefined\n   */\n  polylines = input<AXMapPolyline | AXMapPolyline[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Array or single rectangle(s) to be placed on the map.\n   * @default undefined\n   */\n  rectangles = input<AXMapRectangle | AXMapRectangle[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Array or single circle(s) to be placed on the map.\n   * @default undefined\n   */\n  circles = input<AXMapCircle | AXMapCircle[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Array or single POI marker(s) to be placed on the map.\n   * @default undefined\n   */\n  pois = input<AXPoiMarker | AXPoiMarker[] | undefined>(undefined);\n\n  /**\n   * @description\n   * Event triggered when a new marker is added to the map.\n   */\n  onMarkerAdded = output<AXMapMarker>();\n\n  /**\n   * @description\n   * Event triggered when a marker is clicked on the map.\n   */\n  onMarkerClick = output<AXMapMarker>();\n\n  /**\n   * @description\n   * Event triggered when marker positions are changed on the map.\n   */\n  onMarkerChanged = output<AXMapMarker[]>();\n\n  /**\n   * @description\n   * Event triggered when a new polygon is added to the map.\n   */\n  onPolygonAdded = output<AXMapPolygon>();\n  /**\n   * @description\n   * Event triggered when a polygon is clicked on the map.\n   */\n  onPolygonClick = output<AXMapPolygon>();\n\n  /**\n   * @description\n   * Event triggered when polygon positions are changed on the map.\n   */\n  onPolygonChanged = output<AXMapPolygon[]>();\n\n  /**\n   * @description\n   * Event triggered when a new polyline is added to the map.\n   */\n  onPolylineAdded = output<AXMapPolyline>();\n\n  /**\n   * @description\n   * Event triggered when a polyline is clicked on the map.\n   */\n  onPolylineClick = output<AXMapPolyline>();\n\n  /**\n   * @description\n   * Event triggered when polyline positions are changed on the map.\n   */\n  onPolylineChanged = output<AXMapPolyline[]>();\n\n  /**\n   * @description\n   * Event triggered when a new rectangle is added to the map.\n   */\n  onRectangleAdded = output<AXMapRectangle>();\n\n  /**\n   * @description\n   * Event triggered when a rectangle is clicked on the map.\n   */\n  onRectangleClick = output<AXMapRectangle>();\n\n  /**\n   * @description\n   * Event triggered when rectangle bounds are changed on the map.\n   */\n  onRectangleChanged = output<AXMapRectangle[]>();\n\n  /**\n   * @description\n   * Event triggered when a new circle is added to the map.\n   */\n  onCircleAdded = output<AXMapCircle>();\n\n  /**\n   * @description\n   * Event triggered when a circle is clicked on the map.\n   */\n  onCircleClick = output<AXMapCircle>();\n\n  /**\n   * @description\n   * Event triggered when circle data is changed on the map.\n   */\n  onCircleChanged = output<AXMapCircle[]>();\n\n  /**\n   * @description\n   * Event triggered when a location is found via the location control.\n   */\n  onLocationFound = output<AXMapMarker>();\n\n  /**\n   * @description\n   * Event triggered when POI positions are changed on the map.\n   */\n  onPoiChanged = output<AXPoiMarker[]>();\n\n  /**\n   * @description\n   * Event triggered when a new POI is added to the map.\n   */\n  onPoiAdded = output<AXPoiMarker>();\n\n  /**\n   * @description\n   * Event triggered map is loaded.\n   */\n  onMapReady = output<void>();\n  /**\n   * @description\n   * Event triggered when map loading/initialization fails.\n   */\n  onLoadError = output<Error>();\n\n  private mapContainer = viewChild<ElementRef>('mapContainer');\n  private leafletService = inject(AXLeafletService);\n  private rendered = signal(false);\n\n  // Subscriptions\n  private onLatitudeChangedSubscription?: Subscription;\n  private onLongitudeChangedSubscription?: Subscription;\n  private onZoomChangedSubscription?: Subscription;\n  private onLocationFoundSubscription?: Subscription;\n  private onMarkerChangedSubscription?: Subscription;\n  private onMarkerAddedSubscription?: Subscription;\n  private onMarkerClickSubscription?: Subscription;\n  private onPolygonChangedSubscription?: Subscription;\n  private onPolygonAddedSubscription?: Subscription;\n  private onPolygonClickSubscription?: Subscription;\n  private onPolylineChangedSubscription?: Subscription;\n  private onPolylineAddedSubscription?: Subscription;\n  private onPolylineClickSubscription?: Subscription;\n  private onRectangleChangedSubscription?: Subscription;\n  private onRectangleAddedSubscription?: Subscription;\n  private onRectangleClickSubscription?: Subscription;\n  private onCircleChangedSubscription?: Subscription;\n  private onCircleAddedSubscription?: Subscription;\n  private onCircleClickSubscription?: Subscription;\n  private onPoiChangedSubscription?: Subscription;\n  private onPoiAddedSubscription?: Subscription;\n\n  /**\n   * @description\n   * Adds a marker to the specified location on the map.\n   * @param location - The location where the marker should be placed.\n   * @param emitEvents - Whether to emit events for the marker.\n   */\n  async addMarker(location: AXMapMarker | AXMapMarker[], emitEvents = false) {\n    await this.leafletService.addMarker(location, emitEvents);\n  }\n\n  /**\n   * @description\n   * Removes markers by id or location; if not provided removes all markers\n   */\n  removeMarker(location?: AXMapMarker | AXMapMarker[]) {\n    this.leafletService.removeMarker(location);\n  }\n\n  /**\n   * @description\n   * Adds a polygon to the specified location on the map.\n   * @param location - The location where the polygon should be placed.\n   * @param emitEvents - Whether to emit events for the polygon.\n   */\n  addPolygon(location: AXMapPolygon | AXMapPolygon[], emitEvents = false) {\n    this.leafletService.addPolygon(location, emitEvents);\n  }\n\n  /**\n   * @description\n   * Removes polygons by id or geometry; if not provided removes all polygons\n   */\n  removePolygon(location?: AXMapPolygon | AXMapPolygon[]) {\n    this.leafletService.removePolygon(location);\n  }\n\n  /**\n   * @description\n   * Adds a polyline to the map.\n   */\n  addPolyline(location: AXMapPolyline | AXMapPolyline[], emitEvents = false) {\n    this.leafletService.addPolyline(location, emitEvents);\n  }\n\n  /**\n   * @description\n   * Removes polylines by id or geometry; if not provided removes all polylines\n   */\n  removePolyline(location?: AXMapPolyline | AXMapPolyline[]) {\n    this.leafletService.removePolyline(location);\n  }\n\n  /**\n   * @description\n   * Adds a rectangle to the map.\n   */\n  addRectangle(location: AXMapRectangle | AXMapRectangle[], emitEvents = false) {\n    this.leafletService.addRectangle(location, emitEvents);\n  }\n\n  /**\n   * @description\n   * Removes rectangles by id or geometry; if not provided removes all rectangles\n   */\n  removeRectangle(location?: AXMapRectangle | AXMapRectangle[]) {\n    this.leafletService.removeRectangle(location);\n  }\n\n  /**\n   * @description\n   * Adds a circle to the map.\n   */\n  addCircle(location: AXMapCircle | AXMapCircle[], emitEvents = false) {\n    this.leafletService.addCircle(location, emitEvents);\n  }\n\n  /**\n   * @description\n   * Removes circles by id or geometry; if not provided removes all circles\n   */\n  removeCircle(location?: AXMapCircle | AXMapCircle[]) {\n    this.leafletService.removeCircle(location);\n  }\n\n  /**\n   * @description\n   * Retrieves all markers currently placed on the map.\n   * @returns An array of `AXMapMarker` representing all markers.\n   */\n  getMarkers(): AXMapMarker[] {\n    return this.leafletService.getMarkers();\n  }\n\n  /**\n   * @description\n   * Retrieves all polygons currently placed on the map.\n   * @returns An array of `AXMapPolygon` representing all polygons.\n   */\n  getPolygons(): AXMapPolygon[] {\n    return this.leafletService.getPolygons();\n  }\n\n  /**\n   * @description\n   * Retrieves all polylines currently placed on the map.\n   */\n  getPolylines(): AXMapPolyline[] {\n    return this.leafletService.getPolylines();\n  }\n\n  /**\n   * @description\n   * Retrieves all rectangles currently placed on the map.\n   */\n  getRectangles(): AXMapRectangle[] {\n    return this.leafletService.getRectangles();\n  }\n\n  /**\n   * @description\n   * Retrieves all circles currently placed on the map.\n   */\n  getCircles(): AXMapCircle[] {\n    return this.leafletService.getCircles();\n  }\n\n  /**\n   * @description\n   * Retrieves all POI markers currently placed on the map.\n   * @returns An array of `AXPoiMarker` representing all POI markers.\n   */\n  getPois(): AXPoiMarker[] {\n    return this.leafletService.getPois();\n  }\n\n  /**\n   * @description\n   * Clear all markers and polygons\n   */\n  clearDrawItems() {\n    this.leafletService.clearDrawItems();\n  }\n\n  /**\n   * @description\n   * Get all markers and polygons\n   */\n  getDrawItem() {\n    return this.leafletService.getDrawItem();\n  }\n\n  /**\n   * @description\n   * set markers and polygons\n   */\n  async setDrawItem(data: AXMapData) {\n    return await this.leafletService.setDrawItem(data);\n  }\n\n  /**\n   * Adjusts the map view to fit all markers and polygons currently on the map.\n   */\n  public fitBoundsToDrawItems() {\n    return this.leafletService.fitBoundsToDrawItems(this.addPoiToFitDraw());\n  }\n\n  /**\n   * @description\n   * Sets the boundary limit for drawing\n   * @param data - The polygon data defining the boundary\n   */\n  public setLimitDraw(data: AXMapPolygon[]) {\n    return this.leafletService.setBoundary(data);\n  }\n\n  /**\n   * @description\n   * Removes the boundary limit for drawing\n   */\n  public removeLimitDraw() {\n    this.leafletService.removeBoundary();\n  }\n\n  /**\n   * @description\n   * Flies the map to a specific location with optional zoom, marker placement, and animation duration.\n   *\n   * @param location - The target location to fly to.\n   * @param zoom - Optional zoom level for the map.\n   * @param setMarker - Whether to set a marker at the destination.\n   * @param duration - Optional duration for the fly animation.\n   */\n  flyTo(location: AXMapMarker, zoom?: number, setMarker?: boolean, duration?: number) {\n    this.leafletService.flyTo(location, zoom, setMarker, duration);\n  }\n\n  /**\n   * Initialize the map once rendering is complete\n   */\n  #initMap = afterNextRender(async () => {\n    // Propagate service load errors to component output\n    const onLoadErrSub = this.leafletService.onLoadError.subscribe((err) => this.onLoadError.emit(err));\n    try {\n      await this.leafletService.initMap(\n        this.mapContainer().nativeElement,\n        { latitude: this.latitude() ?? 31, longitude: this.longitude() ?? 51 },\n        this.zoomLevel() ?? 5,\n      );\n    } catch (e) {\n      console.warn(e);\n    } finally {\n      onLoadErrSub.unsubscribe();\n    }\n\n    // Set minimum zoom level for POIs\n    this.leafletService.setPoiMinZoom(this.poiMinZoom());\n\n    // Initialize map data\n    if (this.markers()) {\n      await this.leafletService.addMarker(this.markers());\n    }\n    if (this.polygons()) {\n      this.leafletService.addPolygon(this.polygons());\n    }\n    if (this.polylines()) {\n      this.leafletService.addPolyline(this.polylines());\n    }\n    if (this.rectangles()) {\n      this.leafletService.addRectangle(this.rectangles());\n    }\n    if (this.circles()) {\n      this.leafletService.addCircle(this.circles());\n    }\n    if (this.pois()) {\n      await this.leafletService.addPoi(this.pois());\n    }\n    if (this.limitDraw()) {\n      this.leafletService.setBoundary(this.limitDraw());\n    }\n\n    // Setup map events\n    this.setupMapEvents();\n\n    // Apply initial fit if needed\n    if (this.fitToDraw()) {\n      this.leafletService.fitBoundsToDrawItems(this.addPoiToFitDraw());\n    }\n\n    this.onMapReady.emit();\n    this.rendered.set(true);\n  });\n\n  /**\n   * Setup map event listeners\n   */\n  private setupMapEvents(): void {\n    this.setupMapMovementEvents();\n    // addMarkerOnTap is now handled by the service via the effect\n    // Ensure subscriptions to service events are always active, regardless of draw control\n    this.setupDrawEventSubscriptions();\n  }\n\n  /**\n   * Setup map movement event subscriptions\n   */\n  private setupMapMovementEvents(): void {\n    this.onLatitudeChangedSubscription = this.leafletService.onLatitudeChanged.subscribe((latitude) => {\n      this.latitude.set(latitude);\n    });\n\n    this.onLongitudeChangedSubscription = this.leafletService.onLongitudeChanged.subscribe((longitude) => {\n      this.longitude.set(longitude);\n    });\n\n    this.onZoomChangedSubscription = this.leafletService.onZoomChanged.subscribe((zoom) => {\n      this.zoomLevel.set(zoom);\n    });\n  }\n\n  /**\n   * Effect for locator control\n   */\n  #locatorEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    const hasLocator = this.hasLocator();\n    const locatePlace = this.locatePlace();\n    const isDisabled = this.disabled();\n    const isReadonly = this.readonly();\n\n    if (!hasLocator || isDisabled || isReadonly) {\n      this.leafletService.removeLocateControl();\n      if (this.onLocationFoundSubscription) {\n        this.onLocationFoundSubscription.unsubscribe();\n        this.onLocationFoundSubscription = undefined;\n      }\n      return;\n    }\n\n    // Add locator control\n    this.leafletService.addLocateControl(locatePlace);\n\n    // Subscribe to location events if not already subscribed\n    if (!this.onLocationFoundSubscription) {\n      this.onLocationFoundSubscription = this.leafletService.onLocationFound\n        .pipe(\n          distinctUntilChanged(\n            (prev: AXMapMarker, curr: AXMapMarker) =>\n              prev.latitude === curr.latitude && prev.longitude === curr.longitude,\n          ),\n        )\n        .subscribe((location: AXMapMarker) => {\n          this.onLocationFound.emit(location);\n        });\n    }\n  });\n\n  /**\n   * Effect for draw control\n   */\n  #drawControlEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    const hasDraw = this.hasDraw();\n    const markerPlace = this.markerPlace();\n    const maxMarker = this.maxMarker();\n    const maxPolygon = this.maxPolygon();\n    const maxPolyline = this.maxPolyline();\n    const maxRectangle = this.maxRectangle();\n    const maxCircle = this.maxCircle();\n    const isDisabled = this.disabled();\n    const isReadonly = this.readonly();\n\n    if (maxMarker) {\n      this.leafletService.setMaxMarkers(maxMarker);\n    }\n    if (maxPolygon) {\n      this.leafletService.setMaxPolygons(maxPolygon);\n    }\n    if (maxPolyline) {\n      this.leafletService.setMaxPolylines(maxPolyline);\n    }\n    if (maxRectangle) {\n      this.leafletService.setMaxRectangles(maxRectangle);\n    }\n    if (maxCircle) {\n      this.leafletService.setMaxCircles(maxCircle);\n    }\n\n    if (!hasDraw || isDisabled || isReadonly) {\n      this.leafletService.removeDrawControl();\n      return;\n    }\n\n    this.leafletService.addDrawControl(\n      markerPlace,\n      maxMarker || 1,\n      maxPolygon,\n      maxPolyline || 1,\n      maxRectangle || 1,\n      maxCircle || 1,\n    );\n\n    // Set up event subscriptions\n    this.setupDrawEventSubscriptions();\n  });\n\n  /**\n   * Setup draw event subscriptions\n   */\n  private setupDrawEventSubscriptions(): void {\n    this.setupMarkerEventSubscriptions();\n    this.setupPolygonEventSubscriptions();\n    this.setupPolylineEventSubscriptions();\n    this.setupRectangleEventSubscriptions();\n    this.setupCircleEventSubscriptions();\n    this.setupPoiEventSubscriptions();\n  }\n\n  /**\n   * Setup marker event subscriptions\n   */\n  private setupMarkerEventSubscriptions(): void {\n    if (!this.onMarkerChangedSubscription) {\n      this.onMarkerChangedSubscription = this.leafletService.onMarkerChanged.subscribe((markers) => {\n        this.onMarkerChanged.emit(markers);\n      });\n    }\n\n    if (!this.onMarkerAddedSubscription) {\n      this.onMarkerAddedSubscription = this.leafletService.onMarkerAdded.subscribe((marker) => {\n        this.onMarkerAdded.emit(marker);\n      });\n    }\n\n    if (!this.onMarkerClickSubscription) {\n      this.onMarkerClickSubscription = this.leafletService.onMarkerClick.subscribe((marker) => {\n        this.onMarkerClick.emit(marker);\n      });\n    }\n  }\n\n  /**\n   * Setup polygon event subscriptions\n   */\n  private setupPolygonEventSubscriptions(): void {\n    if (!this.onPolygonChangedSubscription) {\n      this.onPolygonChangedSubscription = this.leafletService.onPolygonChanged.subscribe((polygons) => {\n        this.onPolygonChanged.emit(polygons);\n      });\n    }\n\n    if (!this.onPolygonAddedSubscription) {\n      this.onPolygonAddedSubscription = this.leafletService.onPolygonAdded.subscribe((polygon) => {\n        this.onPolygonAdded.emit(polygon);\n      });\n    }\n\n    if (!this.onPolygonClickSubscription) {\n      this.onPolygonClickSubscription = this.leafletService.onPolygonClick.subscribe((polygon) => {\n        this.onPolygonClick.emit(polygon);\n      });\n    }\n  }\n\n  private setupPolylineEventSubscriptions(): void {\n    if (!this.onPolylineChangedSubscription) {\n      this.onPolylineChangedSubscription = this.leafletService.onPolylineChanged.subscribe((polylines) => {\n        this.onPolylineChanged.emit(polylines);\n      });\n    }\n\n    if (!this.onPolylineAddedSubscription) {\n      this.onPolylineAddedSubscription = this.leafletService.onPolylineAdded.subscribe((polyline) => {\n        this.onPolylineAdded.emit(polyline);\n      });\n    }\n\n    if (!this.onPolylineClickSubscription) {\n      this.onPolylineClickSubscription = this.leafletService.onPolylineClick.subscribe((polyline) => {\n        this.onPolylineClick.emit(polyline);\n      });\n    }\n  }\n\n  private setupRectangleEventSubscriptions(): void {\n    if (!this.onRectangleChangedSubscription) {\n      this.onRectangleChangedSubscription = this.leafletService.onRectangleChanged.subscribe((rectangles) => {\n        this.onRectangleChanged.emit(rectangles);\n      });\n    }\n\n    if (!this.onRectangleAddedSubscription) {\n      this.onRectangleAddedSubscription = this.leafletService.onRectangleAdded.subscribe((rectangle) => {\n        this.onRectangleAdded.emit(rectangle);\n      });\n    }\n\n    if (!this.onRectangleClickSubscription) {\n      this.onRectangleClickSubscription = this.leafletService.onRectangleClick.subscribe((rectangle) => {\n        this.onRectangleClick.emit(rectangle);\n      });\n    }\n  }\n\n  private setupCircleEventSubscriptions(): void {\n    if (!this.onCircleChangedSubscription) {\n      this.onCircleChangedSubscription = this.leafletService.onCircleChanged.subscribe((circles) => {\n        this.onCircleChanged.emit(circles);\n      });\n    }\n\n    if (!this.onCircleAddedSubscription) {\n      this.onCircleAddedSubscription = this.leafletService.onCircleAdded.subscribe((circle) => {\n        this.onCircleAdded.emit(circle);\n      });\n    }\n\n    if (!this.onCircleClickSubscription) {\n      this.onCircleClickSubscription = this.leafletService.onCircleClick.subscribe((circle) => {\n        this.onCircleClick.emit(circle);\n      });\n    }\n  }\n\n  /**\n   * Setup POI event subscriptions\n   */\n  private setupPoiEventSubscriptions(): void {\n    if (!this.onPoiChangedSubscription) {\n      this.onPoiChangedSubscription = this.leafletService.onPoiChanged\n        .pipe(distinctUntilChanged())\n        .subscribe((data) => {\n          this.onPoiChanged.emit(data);\n        });\n    }\n\n    if (!this.onPoiAddedSubscription) {\n      this.onPoiAddedSubscription = this.leafletService.onPoiAdded.pipe(distinctUntilChanged()).subscribe((data) => {\n        this.onPoiAdded.emit(data);\n      });\n    }\n  }\n\n  /**\n   * Unsubscribe from draw events\n   */\n  private unsubscribeFromDrawEvents(): void {\n    this.unsubscribeMarkerEvents();\n    this.unsubscribePolygonEvents();\n    this.unsubscribePolylineEvents();\n    this.unsubscribeRectangleEvents();\n    this.unsubscribeCircleEvents();\n    this.unsubscribePoiEvents();\n  }\n\n  /**\n   * Unsubscribe from marker events\n   */\n  private unsubscribeMarkerEvents(): void {\n    const markerSubscriptions = [\n      { sub: this.onMarkerChangedSubscription, prop: 'onMarkerChangedSubscription' },\n      { sub: this.onMarkerAddedSubscription, prop: 'onMarkerAddedSubscription' },\n      { sub: this.onMarkerClickSubscription, prop: 'onMarkerClickSubscription' },\n    ];\n\n    markerSubscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  /**\n   * Unsubscribe from polygon events\n   */\n  private unsubscribePolygonEvents(): void {\n    const polygonSubscriptions = [\n      { sub: this.onPolygonChangedSubscription, prop: 'onPolygonChangedSubscription' },\n      { sub: this.onPolygonAddedSubscription, prop: 'onPolygonAddedSubscription' },\n      { sub: this.onPolygonClickSubscription, prop: 'onPolygonClickSubscription' },\n    ];\n\n    polygonSubscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  private unsubscribePolylineEvents(): void {\n    const subscriptions = [\n      { sub: this.onPolylineChangedSubscription, prop: 'onPolylineChangedSubscription' },\n      { sub: this.onPolylineAddedSubscription, prop: 'onPolylineAddedSubscription' },\n      { sub: this.onPolylineClickSubscription, prop: 'onPolylineClickSubscription' },\n    ];\n\n    subscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  private unsubscribeRectangleEvents(): void {\n    const subscriptions = [\n      { sub: this.onRectangleChangedSubscription, prop: 'onRectangleChangedSubscription' },\n      { sub: this.onRectangleAddedSubscription, prop: 'onRectangleAddedSubscription' },\n      { sub: this.onRectangleClickSubscription, prop: 'onRectangleClickSubscription' },\n    ];\n\n    subscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  private unsubscribeCircleEvents(): void {\n    const subscriptions = [\n      { sub: this.onCircleChangedSubscription, prop: 'onCircleChangedSubscription' },\n      { sub: this.onCircleAddedSubscription, prop: 'onCircleAddedSubscription' },\n      { sub: this.onCircleClickSubscription, prop: 'onCircleClickSubscription' },\n    ];\n\n    subscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  /**\n   * Unsubscribe from POI events\n   */\n  private unsubscribePoiEvents(): void {\n    const poiSubscriptions = [\n      { sub: this.onPoiChangedSubscription, prop: 'onPoiChangedSubscription' },\n      { sub: this.onPoiAddedSubscription, prop: 'onPoiAddedSubscription' },\n    ];\n\n    poiSubscriptions.forEach(({ sub, prop }) => {\n      if (sub) {\n        sub.unsubscribe();\n        (this as any)[prop] = undefined;\n      }\n    });\n  }\n\n  /**\n   * Effect for zoom level changes\n   */\n  #zoomEffect = effect(() => {\n    if (this.rendered() && this.zoomLevel() !== null) {\n      this.leafletService.setZoomLevel(this.zoomLevel());\n    }\n  });\n\n  /**\n   * Effect for limit draw changes\n   */\n  #limitDrawEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    const limitDraw = this.limitDraw();\n    if (limitDraw) {\n      this.leafletService.removeBoundary();\n      this.leafletService.setBoundary(limitDraw);\n\n      if (this.fitToDraw()) {\n        this.fitBoundsToDrawItems();\n      }\n    }\n  });\n\n  /**\n   * Effect for fitToDraw changes\n   */\n  #fitToDrawEffect = effect(() => {\n    if (this.rendered() && this.fitToDraw()) {\n      this.fitBoundsToDrawItems();\n    }\n  });\n\n  /**\n   * Effect for center changes (lat/long)\n   */\n  #centerEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    if (this.fitToDraw()) {\n      this.fitBoundsToDrawItems();\n    }\n  });\n\n  #latlngEffect = effect(() => {\n    if (!this.rendered()) {\n      return () => {\n        // No-op cleanup\n      };\n    }\n\n    const lat = this.latitude();\n    const lng = this.longitude();\n    let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n    // Only update if values are not null\n    if (lat !== null && lng !== null) {\n      // Debounce to avoid excessive updates\n      timeoutId = setTimeout(() => {\n        if (this.rendered()) {\n          this.leafletService.setCenter({\n            latitude: lat,\n            longitude: lng,\n          } as AXMapMarker);\n        }\n      }, 50);\n    }\n\n    // Cleanup function for effect\n    return () => {\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n    };\n  });\n\n  /**\n   * Effect for POI minimum zoom level changes\n   */\n  #poiMinZoomEffect = effect(() => {\n    if (this.rendered()) {\n      this.leafletService.setPoiMinZoom(this.poiMinZoom());\n    }\n  });\n\n  /**\n   * Effect for addMarkerOnTap changes\n   */\n  #addMarkerOnTapEffect = effect(() => {\n    if (this.rendered()) {\n      const isDisabled = this.disabled();\n      const isReadonly = this.readonly();\n      // Only allow marker-on-tap if not disabled and not readonly\n      if (!isDisabled && !isReadonly) {\n        this.leafletService.setAddMarkerOnTap(this.addMarkerOnTap());\n      } else {\n        this.leafletService.setAddMarkerOnTap(false);\n      }\n    }\n  });\n\n  /**\n   * Effect for readonly state changes\n   */\n  #readonlyEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    const isReadonly = this.readonly();\n    const isDisabled = this.disabled();\n\n    // Disabled takes precedence over readonly\n    if (isDisabled) {\n      this.leafletService.setDisabled(true);\n      return;\n    }\n\n    this.leafletService.setReadonly(isReadonly);\n\n    // Remove controls when readonly\n    if (isReadonly) {\n      this.leafletService.removeDrawControl();\n      this.leafletService.removeLocateControl();\n    }\n  });\n\n  /**\n   * Effect for disabled state changes\n   */\n  #disabledEffect = effect(() => {\n    if (!this.rendered()) return;\n\n    const isDisabled = this.disabled();\n    this.leafletService.setDisabled(isDisabled);\n\n    // Remove controls when disabled\n    if (isDisabled) {\n      this.leafletService.removeDrawControl();\n      this.leafletService.removeLocateControl();\n    }\n  });\n\n  /**\n   * @description\n   * Update popup for a specific marker\n   * @param marker - The marker to update\n   * @param popup - The new popup text\n   * @param open - Whether the popup should be opened after update\n   * @param closeButton - Whether the popup should have a close button\n   * @returns True if the update was successful, false otherwise\n   */\n  updateMarkerPopup(marker: AXMapMarker, popup: string, open = false, closeButton = true): boolean {\n    return this.leafletService.updateMarkerPopup(marker, popup, open, closeButton);\n  }\n\n  /**\n   * @description\n   * Update popup for multiple markers\n   * @param updates - Array of marker popup updates\n   * @returns Number of markers successfully updated\n   */\n  updateMarkersPopups(\n    updates: { marker: AXMapMarker; popup: string; open?: boolean; closeButton?: boolean }[],\n  ): number {\n    return this.leafletService.updateMarkerPopups(updates);\n  }\n\n  /**\n   * @description\n   * Refreshes POIs from providers, clearing existing POIs first\n   */\n  async refreshPois(): Promise<void> {\n    return this.leafletService.refreshPois();\n  }\n\n  /**\n   * Cleanup function that destroys the map and unsubscribes from all subscriptions.\n   */\n  ngOnDestroy(): void {\n    this.unsubscribeFromAllEvents();\n    this.leafletService.destroyMap();\n  }\n\n  /**\n   * Unsubscribe from all event subscriptions\n   */\n  private unsubscribeFromAllEvents(): void {\n    this.unsubscribeFromDrawEvents();\n    this.unsubscribeFromMapEvents();\n  }\n\n  /**\n   * Unsubscribe from map-level events\n   */\n  private unsubscribeFromMapEvents(): void {\n    const mapSubscriptions = [\n      this.onLocationFoundSubscription,\n      this.onLatitudeChangedSubscription,\n      this.onLongitudeChangedSubscription,\n      this.onZoomChangedSubscription,\n      this.onPoiChangedSubscription,\n      this.onPoiAddedSubscription,\n    ];\n\n    mapSubscriptions.forEach((subscription) => {\n      if (subscription) {\n        subscription.unsubscribe();\n      }\n    });\n  }\n}\n","<div #mapContainer class=\"ax-map-container\"></div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXMapComponent } from './map.component';\nimport { AXLeafletService } from './map.service';\n\n@NgModule({\n  imports: [CommonModule, AXMapComponent],\n  providers: [AXLeafletService],\n  exports: [AXMapComponent],\n})\nexport class AXMapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}