@tic-nova/ngx-mapbox-gl 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +3 -0
  2. package/esm2022/index.js +32 -0
  3. package/esm2022/index.js.map +1 -0
  4. package/esm2022/lib/control/attribution-control.directive.js +39 -0
  5. package/esm2022/lib/control/attribution-control.directive.js.map +1 -0
  6. package/esm2022/lib/control/control.component.js +62 -0
  7. package/esm2022/lib/control/control.component.js.map +1 -0
  8. package/esm2022/lib/control/fullscreen-control.directive.js +39 -0
  9. package/esm2022/lib/control/fullscreen-control.directive.js.map +1 -0
  10. package/esm2022/lib/control/geolocate-control.directive.js +52 -0
  11. package/esm2022/lib/control/geolocate-control.directive.js.map +1 -0
  12. package/esm2022/lib/control/navigation-control.directive.js +39 -0
  13. package/esm2022/lib/control/navigation-control.directive.js.map +1 -0
  14. package/esm2022/lib/control/scale-control.directive.js +45 -0
  15. package/esm2022/lib/control/scale-control.directive.js.map +1 -0
  16. package/esm2022/lib/draggable/draggable.directive.js +121 -0
  17. package/esm2022/lib/draggable/draggable.directive.js.map +1 -0
  18. package/esm2022/lib/image/image.component.js +79 -0
  19. package/esm2022/lib/image/image.component.js.map +1 -0
  20. package/esm2022/lib/layer/layer.component.js +139 -0
  21. package/esm2022/lib/layer/layer.component.js.map +1 -0
  22. package/esm2022/lib/map/map.component.js +381 -0
  23. package/esm2022/lib/map/map.component.js.map +1 -0
  24. package/esm2022/lib/map/map.service.js +725 -0
  25. package/esm2022/lib/map/map.service.js.map +1 -0
  26. package/esm2022/lib/map/map.types.js +30 -0
  27. package/esm2022/lib/map/map.types.js.map +1 -0
  28. package/esm2022/lib/marker/marker.component.js +114 -0
  29. package/esm2022/lib/marker/marker.component.js.map +1 -0
  30. package/esm2022/lib/markers-for-clusters/markers-for-clusters.component.js +168 -0
  31. package/esm2022/lib/markers-for-clusters/markers-for-clusters.component.js.map +1 -0
  32. package/esm2022/lib/popup/popup.component.js +124 -0
  33. package/esm2022/lib/popup/popup.component.js.map +1 -0
  34. package/esm2022/lib/provide-mapbox-gl.js +8 -0
  35. package/esm2022/lib/provide-mapbox-gl.js.map +1 -0
  36. package/esm2022/lib/source/canvas-source.component.js +74 -0
  37. package/esm2022/lib/source/canvas-source.component.js.map +1 -0
  38. package/esm2022/lib/source/geojson/feature.component.js +42 -0
  39. package/esm2022/lib/source/geojson/feature.component.js.map +1 -0
  40. package/esm2022/lib/source/geojson/geojson-source.component.js +204 -0
  41. package/esm2022/lib/source/geojson/geojson-source.component.js.map +1 -0
  42. package/esm2022/lib/source/image-source.component.js +58 -0
  43. package/esm2022/lib/source/image-source.component.js.map +1 -0
  44. package/esm2022/lib/source/raster-dem-source.component.js +91 -0
  45. package/esm2022/lib/source/raster-dem-source.component.js.map +1 -0
  46. package/esm2022/lib/source/raster-source.component.js +85 -0
  47. package/esm2022/lib/source/raster-source.component.js.map +1 -0
  48. package/esm2022/lib/source/vector-source.component.js +99 -0
  49. package/esm2022/lib/source/vector-source.component.js.map +1 -0
  50. package/esm2022/lib/source/video-source.component.js +80 -0
  51. package/esm2022/lib/source/video-source.component.js.map +1 -0
  52. package/esm2022/ngx-mapbox-gl.js +5 -0
  53. package/esm2022/ngx-mapbox-gl.js.map +1 -0
  54. package/index.d.ts +24 -0
  55. package/lib/control/attribution-control.directive.d.ts +11 -0
  56. package/lib/control/control.component.d.ts +21 -0
  57. package/lib/control/fullscreen-control.directive.d.ts +11 -0
  58. package/lib/control/geolocate-control.directive.d.ts +15 -0
  59. package/lib/control/navigation-control.directive.d.ts +11 -0
  60. package/lib/control/scale-control.directive.d.ts +12 -0
  61. package/lib/draggable/draggable.directive.d.ts +20 -0
  62. package/lib/image/image.component.d.ts +34 -0
  63. package/lib/layer/layer.component.d.ts +422 -0
  64. package/lib/map/map.component.d.ts +185 -0
  65. package/lib/map/map.service.d.ts +123 -0
  66. package/lib/map/map.types.d.ts +72 -0
  67. package/lib/marker/marker.component.d.ts +31 -0
  68. package/lib/markers-for-clusters/markers-for-clusters.component.d.ts +28 -0
  69. package/lib/popup/popup.component.d.ts +33 -0
  70. package/lib/provide-mapbox-gl.d.ts +6 -0
  71. package/lib/source/canvas-source.component.d.ts +23 -0
  72. package/lib/source/geojson/feature.component.d.ts +16 -0
  73. package/lib/source/geojson/geojson-source.component.d.ts +63 -0
  74. package/lib/source/image-source.component.d.ts +22 -0
  75. package/lib/source/raster-dem-source.component.d.ts +23 -0
  76. package/lib/source/raster-source.component.d.ts +23 -0
  77. package/lib/source/vector-source.component.d.ts +24 -0
  78. package/lib/source/video-source.component.d.ts +24 -0
  79. package/ngx-mapbox-gl.d.ts +5 -0
  80. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.service.js","sourceRoot":"","sources":["../../../../../../libs/ngx-mapbox-gl/src/lib/map/map.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n EventEmitter,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n afterEveryRender,\n inject,\n} from '@angular/core';\nimport {\n Map,\n Marker,\n Popup,\n type AnimationOptions,\n type CanvasSource,\n type EasingOptions,\n type FilterSpecification,\n type LayerSpecification,\n type LayoutSpecification,\n type LngLatLike,\n type MapOptions,\n type MarkerOptions,\n type PaintSpecification,\n type PointLike,\n type PopupOptions,\n type Source,\n type SourceSpecification,\n} from 'mapbox-gl';\nimport { AsyncSubject, Observable, Subscription } from 'rxjs';\nimport { LayerEvents, NgxMapEvent } from './map.types';\n\nexport const MAPBOX_API_KEY = new InjectionToken('MapboxApiKey');\n\nexport interface SetupMap {\n accessToken?: string;\n mapOptions: Omit<MapOptions, 'bearing' | 'pitch' | 'zoom'> & {\n /**\n * NOTE: Thoses can be arrays in order to be able to imperatively change them if the map is moved manually\n */\n bearing?: [number] | number;\n pitch?: [number] | number;\n zoom?: [number] | number;\n };\n mapEvents: NgxMapEvent;\n}\n\nexport interface SetupLayer {\n layerOptions: Parameters<Map['addLayer']>[0];\n layerEvents: LayerEvents;\n}\n\nexport interface SetupPopup {\n popupOptions: PopupOptions;\n popupEvents: {\n popupOpen: EventEmitter<void>;\n popupClose: EventEmitter<void>;\n };\n}\n\nexport interface SetupMarker {\n markersOptions: {\n pitchAlignment?: MarkerOptions['pitchAlignment'];\n rotationAlignment?: MarkerOptions['rotationAlignment'];\n offset?: MarkerOptions['offset'];\n anchor?: MarkerOptions['anchor'];\n draggable?: MarkerOptions['draggable'];\n element: HTMLElement;\n feature?: GeoJSON.Feature<GeoJSON.Point>;\n lngLat?: LngLatLike;\n clickTolerance?: MarkerOptions['clickTolerance'];\n };\n markersEvents: {\n markerDragStart: EventEmitter<Marker>;\n markerDrag: EventEmitter<Marker>;\n markerDragEnd: EventEmitter<Marker>;\n };\n}\n\nexport type MovingOptions =\n | Parameters<Map['jumpTo']>[0]\n | Parameters<Map['easeTo']>[0]\n | Parameters<Map['flyTo']>[0];\n\n@Injectable()\nexport class MapService {\n private readonly zone = inject(NgZone);\n private readonly MAPBOX_API_KEY = inject<string | null>(MAPBOX_API_KEY, {\n optional: true,\n });\n private readonly injector = inject(Injector);\n\n mapInstance: Map;\n mapCreated$: Observable<void>;\n mapLoaded$: Observable<void>;\n mapEvents: NgxMapEvent;\n\n private mapCreated = new AsyncSubject<void>();\n private mapLoaded = new AsyncSubject<void>();\n private markersToRemove: Marker[] = [];\n private popupsToRemove: Popup[] = [];\n private imageIdsToRemove: string[] = [];\n private subscription = new Subscription();\n\n constructor() {\n this.mapCreated$ = this.mapCreated.asObservable();\n this.mapLoaded$ = this.mapLoaded.asObservable();\n }\n\n setup(options: SetupMap) {\n const mapOptions = {\n ...options.mapOptions,\n bearing: Array.isArray(options.mapOptions.bearing)\n ? options.mapOptions.bearing[0]\n : options.mapOptions.bearing,\n zoom: Array.isArray(options.mapOptions.zoom)\n ? options.mapOptions.zoom[0]\n : options.mapOptions.zoom,\n pitch: Array.isArray(options.mapOptions.pitch)\n ? options.mapOptions.pitch[0]\n : options.mapOptions.pitch,\n accessToken: options.accessToken || this.MAPBOX_API_KEY || '',\n };\n this.createMap(mapOptions);\n this.hookEvents(options.mapEvents);\n this.mapEvents = options.mapEvents;\n this.mapCreated.next(undefined);\n this.mapCreated.complete();\n // Intentionally emit mapCreate after internal mapCreated event\n if (options.mapEvents.mapCreate.observed) {\n this.zone.run(() => {\n options.mapEvents.mapCreate.emit(this.mapInstance);\n });\n }\n }\n\n destroyMap() {\n if (this.mapInstance) {\n this.subscription.unsubscribe();\n this.mapInstance.remove();\n }\n }\n\n updateProjection(projection: MapOptions['projection']) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setProjection(projection);\n });\n }\n\n updateMinZoom(minZoom: number) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setMinZoom(minZoom);\n });\n }\n\n updateMaxZoom(maxZoom: number) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setMaxZoom(maxZoom);\n });\n }\n\n updateMinPitch(minPitch: number) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setMinPitch(minPitch);\n });\n }\n\n updateMaxPitch(maxPitch: number) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setMaxPitch(maxPitch);\n });\n }\n\n updateRenderWorldCopies(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setRenderWorldCopies(status);\n });\n }\n\n updateScrollZoom(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.scrollZoom.enable()\n : this.mapInstance.scrollZoom.disable();\n });\n }\n\n updateDragRotate(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.dragRotate.enable()\n : this.mapInstance.dragRotate.disable();\n });\n }\n\n updateTouchPitch(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.touchPitch.enable()\n : this.mapInstance.touchPitch.disable();\n });\n }\n\n updateTouchZoomRotate(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.touchZoomRotate.enable()\n : this.mapInstance.touchZoomRotate.disable();\n });\n }\n\n updateDoubleClickZoom(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.doubleClickZoom.enable()\n : this.mapInstance.doubleClickZoom.disable();\n });\n }\n\n updateKeyboard(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.keyboard.enable()\n : this.mapInstance.keyboard.disable();\n });\n }\n\n updateDragPan(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.dragPan.enable()\n : this.mapInstance.dragPan.disable();\n });\n }\n\n updateBoxZoom(status: boolean) {\n return this.zone.runOutsideAngular(() => {\n status\n ? this.mapInstance.boxZoom.enable()\n : this.mapInstance.boxZoom.disable();\n });\n }\n\n updateStyle(style: Parameters<Map['setStyle']>[0]) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setStyle(style);\n });\n }\n\n updateMaxBounds(maxBounds: Parameters<Map['setMaxBounds']>[0]) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setMaxBounds(maxBounds);\n });\n }\n\n changeCanvasCursor(cursor: string) {\n const canvas = this.mapInstance.getCanvasContainer();\n canvas.style.cursor = cursor;\n }\n\n queryRenderedFeatures(\n pointOrBox: PointLike | [PointLike, PointLike],\n parameters?: {\n layers?: string[];\n filter?: FilterSpecification;\n validate?: boolean;\n },\n ): GeoJSON.Feature<GeoJSON.GeometryObject>[] {\n return this.mapInstance.queryRenderedFeatures(pointOrBox, parameters);\n }\n\n panTo(center: LngLatLike, options?: AnimationOptions) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.panTo(center, options);\n });\n }\n\n move(\n movingMethod: 'jumpTo' | 'easeTo' | 'flyTo',\n movingOptions?: MovingOptions,\n zoom?: number,\n center?: LngLatLike,\n bearing?: number,\n pitch?: number,\n ) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance[movingMethod]({\n ...movingOptions,\n zoom: zoom != null ? zoom : this.mapInstance.getZoom(),\n center: center != null ? center : this.mapInstance.getCenter(),\n bearing: bearing != null ? bearing : this.mapInstance.getBearing(),\n pitch: pitch != null ? pitch : this.mapInstance.getPitch(),\n });\n });\n }\n\n addLayer(layer: SetupLayer, bindEvents: boolean, before?: string) {\n this.zone.runOutsideAngular(() => {\n Object.keys(layer.layerOptions).forEach((key: string) => {\n const tkey = key as keyof Parameters<Map['addLayer']>[0];\n if (layer.layerOptions[tkey] === undefined) {\n delete layer.layerOptions[tkey];\n }\n });\n this.mapInstance.addLayer(layer.layerOptions, before);\n if (bindEvents) {\n if (layer.layerEvents.layerClick.observed) {\n this.mapInstance.on('click', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerClick.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerDblClick.observed) {\n this.mapInstance.on('dblclick', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerDblClick.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseDown.observed) {\n this.mapInstance.on('mousedown', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseDown.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseUp.observed) {\n this.mapInstance.on('mouseup', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseUp.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseEnter.observed) {\n this.mapInstance.on('mouseenter', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseEnter.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseLeave.observed) {\n this.mapInstance.on('mouseleave', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseLeave.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseMove.observed) {\n this.mapInstance.on('mousemove', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseMove.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseOver.observed) {\n this.mapInstance.on('mouseover', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseOver.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerMouseOut.observed) {\n this.mapInstance.on('mouseout', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerMouseOut.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerContextMenu.observed) {\n this.mapInstance.on('contextmenu', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerContextMenu.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerTouchStart.observed) {\n this.mapInstance.on('touchstart', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerTouchStart.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerTouchEnd.observed) {\n this.mapInstance.on('touchend', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerTouchEnd.emit(evt);\n });\n });\n }\n if (layer.layerEvents.layerTouchCancel.observed) {\n this.mapInstance.on('touchcancel', layer.layerOptions.id, (evt) => {\n this.zone.run(() => {\n layer.layerEvents.layerTouchCancel.emit(evt);\n });\n });\n }\n }\n });\n }\n\n removeLayer(layerId: string) {\n this.zone.runOutsideAngular(() => {\n if (this.mapInstance.getLayer(layerId) != null) {\n this.mapInstance.removeLayer(layerId);\n }\n });\n }\n\n addMarker(marker: SetupMarker) {\n const options: MarkerOptions = {\n offset: marker.markersOptions.offset,\n anchor: marker.markersOptions.anchor,\n draggable: marker.markersOptions.draggable,\n rotationAlignment: marker.markersOptions.rotationAlignment,\n pitchAlignment: marker.markersOptions.pitchAlignment,\n clickTolerance: marker.markersOptions.clickTolerance,\n };\n Object.keys(options).forEach((key: string) => {\n const tkey = key as keyof MarkerOptions;\n if (options[tkey] === undefined) {\n delete options[tkey];\n }\n });\n if (marker.markersOptions.element.childNodes.length > 0) {\n options.element = marker.markersOptions.element;\n }\n const markerInstance = new Marker(options);\n if (marker.markersEvents.markerDragStart.observed) {\n markerInstance.on('dragstart', (event) => {\n if (event) {\n const { target } = event as { target: Marker };\n this.zone.run(() => {\n marker.markersEvents.markerDragStart.emit(target);\n });\n }\n });\n }\n /*\n\n */\n if (marker.markersEvents.markerDrag.observed) {\n markerInstance.on('drag', (event) => {\n if (event) {\n const { target } = event as { target: Marker };\n this.zone.run(() => {\n marker.markersEvents.markerDrag.emit(target);\n });\n }\n });\n }\n if (marker.markersEvents.markerDragEnd.observed) {\n markerInstance.on('dragend', (event) => {\n if (event) {\n const { target } = event as { target: Marker };\n this.zone.run(() => {\n marker.markersEvents.markerDragEnd.emit(target);\n });\n }\n });\n }\n const lngLat: LngLatLike = marker.markersOptions.feature\n ? (marker.markersOptions.feature.geometry!.coordinates as [\n number,\n number,\n ])\n : marker.markersOptions.lngLat!;\n markerInstance.setLngLat(lngLat);\n return this.zone.runOutsideAngular(() => {\n markerInstance.addTo(this.mapInstance);\n return markerInstance;\n });\n }\n\n removeMarker(marker: Marker) {\n this.markersToRemove.push(marker);\n }\n\n createPopup(popup: SetupPopup, element: Node) {\n return this.zone.runOutsideAngular(() => {\n Object.keys(popup.popupOptions).forEach((key) => {\n const tkey = key as keyof PopupOptions;\n return (\n popup.popupOptions[tkey] === undefined &&\n delete popup.popupOptions[tkey]\n );\n });\n const popupInstance = new Popup(popup.popupOptions);\n popupInstance.setDOMContent(element);\n if (popup.popupEvents.popupClose.observed) {\n popupInstance.on('close', () => {\n this.zone.run(() => {\n popup.popupEvents.popupClose.emit();\n });\n });\n }\n if (popup.popupEvents.popupOpen.observed) {\n popupInstance.on('open', () => {\n this.zone.run(() => {\n popup.popupEvents.popupOpen.emit();\n });\n });\n }\n return popupInstance;\n });\n }\n\n addPopupToMap(popup: Popup, lngLat: LngLatLike, skipOpenEvent = false) {\n return this.zone.runOutsideAngular(() => {\n if (skipOpenEvent && popup._listeners) {\n delete popup._listeners['open'];\n }\n popup.setLngLat(lngLat);\n popup.addTo(this.mapInstance);\n });\n }\n\n addPopupToMarker(marker: Marker, popup: Popup) {\n return this.zone.runOutsideAngular(() => {\n marker.setPopup(popup);\n });\n }\n\n removePopupFromMap(popup: Popup, skipCloseEvent = false) {\n if (skipCloseEvent && popup._listeners) {\n delete popup._listeners['close'];\n }\n this.popupsToRemove.push(popup);\n }\n\n removePopupFromMarker(marker: Marker) {\n return this.zone.runOutsideAngular(() => {\n marker.setPopup(undefined);\n });\n }\n\n addControl(\n control: Parameters<Map['addControl']>[0],\n position?: Parameters<Map['addControl']>[1],\n ) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.addControl(control, position);\n });\n }\n\n removeControl(control: Parameters<Map['removeControl']>[0]) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.removeControl(control);\n });\n }\n\n async loadAndAddImage(\n imageId: string,\n url: string,\n options?: Parameters<Map['addImage']>[2],\n ) {\n return this.zone.runOutsideAngular(\n () =>\n new Promise<void>((resolve, reject) => {\n this.mapInstance.loadImage(url, (error, image) => {\n if (error) {\n reject(error);\n return;\n }\n if (!image) {\n reject(new Error('Image not loaded'));\n return;\n }\n this.addImage(imageId, image, options);\n resolve();\n });\n }),\n );\n }\n\n addImage(\n imageId: Parameters<Map['addImage']>[0],\n data: Parameters<Map['addImage']>[1],\n options?: Parameters<Map['addImage']>[2],\n ) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.addImage(imageId, data, options);\n });\n }\n\n removeImage(imageId: string) {\n this.imageIdsToRemove.push(imageId);\n }\n\n addSource(\n sourceId: string,\n source: SourceSpecification | CanvasSource['options'],\n ) {\n return this.zone.runOutsideAngular(() => {\n Object.keys(source).forEach((key) => {\n const tkey = key as keyof SourceSpecification;\n return source[tkey] === undefined && delete source[tkey];\n });\n this.mapInstance.addSource(sourceId, source as SourceSpecification);\n });\n }\n\n getSource<T extends Source>(sourceId: string) {\n return this.mapInstance.getSource<T>(sourceId);\n }\n\n removeSource(sourceId: string) {\n this.zone.runOutsideAngular(() => {\n this.findLayersBySourceId(sourceId).forEach((layer) =>\n this.mapInstance.removeLayer(layer.id),\n );\n this.mapInstance.removeSource(sourceId);\n });\n }\n\n setLayerAllPaintProperty(layerId: string, paint: PaintSpecification) {\n return this.zone.runOutsideAngular(() => {\n Object.keys(paint).forEach((key) => {\n const tKey = key as keyof PaintSpecification;\n // TODO Check for perf, setPaintProperty only on changed paint props maybe\n this.mapInstance.setPaintProperty(layerId, tKey, paint[tKey]);\n });\n });\n }\n\n setLayerAllLayoutProperty(layerId: string, layout: LayoutSpecification) {\n return this.zone.runOutsideAngular(() => {\n Object.keys(layout).forEach((key) => {\n const tKey = key as keyof LayoutSpecification;\n // TODO Check for perf, setLayoutProperty only on changed layout props maybe\n this.mapInstance.setLayoutProperty(layerId, tKey, layout[tKey]);\n });\n });\n }\n\n setLayerFilter(layerId: string, filter: FilterSpecification[]) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setFilter(layerId, filter);\n });\n }\n\n setLayerBefore(layerId: string, beforeId: string) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.moveLayer(layerId, beforeId);\n });\n }\n\n setLayerZoomRange(layerId: string, minZoom?: number, maxZoom?: number) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.setLayerZoomRange(\n layerId,\n minZoom ? minZoom : 0,\n maxZoom ? maxZoom : 20,\n );\n });\n }\n\n fitBounds(\n bounds: Parameters<Map['fitBounds']>[0],\n options?: Parameters<Map['fitBounds']>[1],\n ) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.fitBounds(bounds, options);\n });\n }\n\n fitScreenCoordinates(\n points: [PointLike, PointLike],\n bearing: number,\n options?: EasingOptions,\n ) {\n return this.zone.runOutsideAngular(() => {\n this.mapInstance.fitScreenCoordinates(\n points[0],\n points[1],\n bearing,\n options,\n );\n });\n }\n\n applyChanges() {\n this.zone.runOutsideAngular(() => {\n this.removeMarkers();\n this.removePopups();\n this.removeImages();\n });\n }\n\n private createMap(options: MapOptions) {\n NgZone.assertNotInAngularZone();\n Object.keys(options).forEach((key: string) => {\n const tkey = key as keyof MapOptions;\n if (options[tkey] === undefined) {\n delete options[tkey];\n }\n });\n this.mapInstance = new Map(options);\n afterEveryRender(\n {\n write: () => {\n this.applyChanges();\n },\n },\n { injector: this.injector },\n );\n }\n\n private removeMarkers() {\n for (const marker of this.markersToRemove) {\n marker.remove();\n }\n this.markersToRemove = [];\n }\n\n private removePopups() {\n for (const popup of this.popupsToRemove) {\n popup.remove();\n }\n this.popupsToRemove = [];\n }\n\n private removeImages() {\n for (const imageId of this.imageIdsToRemove) {\n this.mapInstance.removeImage(imageId);\n }\n this.imageIdsToRemove = [];\n }\n\n private findLayersBySourceId(sourceId: string): LayerSpecification[] {\n const layers = this.mapInstance.getStyle().layers;\n if (layers == null) {\n return [];\n }\n\n return layers.filter((l) =>\n 'source' in l ? l.source === sourceId : false,\n );\n }\n\n private hookEvents(events: NgxMapEvent) {\n this.mapInstance.on('load', (evt) => {\n this.mapLoaded.next(undefined);\n this.mapLoaded.complete();\n this.zone.run(() => {\n events.mapLoad.emit(evt);\n });\n });\n if (events.mapResize.observed) {\n this.mapInstance.on('resize', (evt) =>\n this.zone.run(() => {\n events.mapResize.emit(evt);\n }),\n );\n }\n if (events.mapRemove.observed) {\n this.mapInstance.on('remove', (evt) =>\n this.zone.run(() => {\n events.mapRemove.emit(evt);\n }),\n );\n }\n if (events.mapMouseDown.observed) {\n this.mapInstance.on('mousedown', (evt) =>\n this.zone.run(() => {\n events.mapMouseDown.emit(evt);\n }),\n );\n }\n if (events.mapMouseUp.observed) {\n this.mapInstance.on('mouseup', (evt) =>\n this.zone.run(() => {\n events.mapMouseUp.emit(evt);\n }),\n );\n }\n if (events.mapMouseMove.observed) {\n this.mapInstance.on('mousemove', (evt) =>\n this.zone.run(() => {\n events.mapMouseMove.emit(evt);\n }),\n );\n }\n if (events.mapClick.observed) {\n this.mapInstance.on('click', (evt) =>\n this.zone.run(() => {\n events.mapClick.emit(evt);\n }),\n );\n }\n if (events.mapDblClick.observed) {\n this.mapInstance.on('dblclick', (evt) =>\n this.zone.run(() => {\n events.mapDblClick.emit(evt);\n }),\n );\n }\n if (events.mapMouseOver.observed) {\n this.mapInstance.on('mouseover', (evt) =>\n this.zone.run(() => {\n events.mapMouseOver.emit(evt);\n }),\n );\n }\n if (events.mapMouseOut.observed) {\n this.mapInstance.on('mouseout', (evt) =>\n this.zone.run(() => {\n events.mapMouseOut.emit(evt);\n }),\n );\n }\n if (events.mapContextMenu.observed) {\n this.mapInstance.on('contextmenu', (evt) =>\n this.zone.run(() => {\n events.mapContextMenu.emit(evt);\n }),\n );\n }\n if (events.mapTouchStart.observed) {\n this.mapInstance.on('touchstart', (evt) =>\n this.zone.run(() => {\n events.mapTouchStart.emit(evt);\n }),\n );\n }\n if (events.mapTouchEnd.observed) {\n this.mapInstance.on('touchend', (evt) =>\n this.zone.run(() => {\n events.mapTouchEnd.emit(evt);\n }),\n );\n }\n if (events.mapTouchMove.observed) {\n this.mapInstance.on('touchmove', (evt) =>\n this.zone.run(() => {\n events.mapTouchMove.emit(evt);\n }),\n );\n }\n if (events.mapTouchCancel.observed) {\n this.mapInstance.on('touchcancel', (evt) =>\n this.zone.run(() => {\n events.mapTouchCancel.emit(evt);\n }),\n );\n }\n if (events.mapWheel.observed) {\n this.mapInstance.on('wheel', (evt) =>\n this.zone.run(() => {\n events.mapWheel.emit(evt);\n }),\n );\n }\n if (events.moveStart.observed) {\n this.mapInstance.on('movestart', (evt) =>\n this.zone.run(() => events.moveStart.emit(evt)),\n );\n }\n if (events.move.observed) {\n this.mapInstance.on('move', (evt) =>\n this.zone.run(() => events.move.emit(evt)),\n );\n }\n if (events.moveEnd.observed) {\n this.mapInstance.on('moveend', (evt) =>\n this.zone.run(() => events.moveEnd.emit(evt)),\n );\n }\n if (events.mapDragStart.observed) {\n this.mapInstance.on('dragstart', (evt) =>\n this.zone.run(() => events.mapDragStart.emit(evt)),\n );\n }\n if (events.mapDrag.observed) {\n this.mapInstance.on('drag', (evt) =>\n this.zone.run(() => events.mapDrag.emit(evt)),\n );\n }\n if (events.mapDragEnd.observed) {\n this.mapInstance.on('dragend', (evt) =>\n this.zone.run(() => events.mapDragEnd.emit(evt)),\n );\n }\n if (events.zoomStart.observed) {\n this.mapInstance.on('zoomstart', () =>\n this.zone.run(() => events.zoomStart.emit()),\n );\n }\n if (events.zoomEvt.observed) {\n this.mapInstance.on('zoom', () =>\n this.zone.run(() => events.zoomEvt.emit()),\n );\n }\n if (events.zoomEnd.observed) {\n this.mapInstance.on('zoomend', () =>\n this.zone.run(() => events.zoomEnd.emit()),\n );\n }\n if (events.rotateStart.observed) {\n this.mapInstance.on('rotatestart', (evt) =>\n this.zone.run(() => events.rotateStart.emit(evt)),\n );\n }\n if (events.rotate.observed) {\n this.mapInstance.on('rotate', (evt) =>\n this.zone.run(() => events.rotate.emit(evt)),\n );\n }\n if (events.rotateEnd.observed) {\n this.mapInstance.on('rotateend', (evt) =>\n this.zone.run(() => events.rotateEnd.emit(evt)),\n );\n }\n if (events.pitchStart.observed) {\n this.mapInstance.on('pitchstart', () =>\n this.zone.run(() => events.pitchStart.emit()),\n );\n }\n if (events.pitchEvt.observed) {\n this.mapInstance.on('pitch', () =>\n this.zone.run(() => events.pitchEvt.emit()),\n );\n }\n if (events.pitchEnd.observed) {\n this.mapInstance.on('pitchend', () =>\n this.zone.run(() => events.pitchEnd.emit()),\n );\n }\n if (events.boxZoomStart.observed) {\n this.mapInstance.on('boxzoomstart', (evt) =>\n this.zone.run(() => events.boxZoomStart.emit(evt)),\n );\n }\n if (events.boxZoomEnd.observed) {\n this.mapInstance.on('boxzoomend', (evt) =>\n this.zone.run(() => events.boxZoomEnd.emit(evt)),\n );\n }\n if (events.boxZoomCancel.observed) {\n this.mapInstance.on('boxzoomcancel', (evt) =>\n this.zone.run(() => events.boxZoomCancel.emit(evt)),\n );\n }\n if (events.webGlContextLost.observed) {\n this.mapInstance.on('webglcontextlost', (evt) =>\n this.zone.run(() => events.webGlContextLost.emit(evt)),\n );\n }\n if (events.webGlContextRestored.observed) {\n this.mapInstance.on('webglcontextrestored', (evt) =>\n this.zone.run(() => events.webGlContextRestored.emit(evt)),\n );\n }\n if (events.render.observed) {\n this.mapInstance.on('render', () =>\n this.zone.run(() => events.render.emit()),\n );\n }\n if (events.mapError.observed) {\n this.mapInstance.on('error', (evt) =>\n this.zone.run(() => events.mapError.emit(evt.error)),\n );\n }\n if (events.data.observed) {\n this.mapInstance.on('data', (evt) =>\n this.zone.run(() => events.data.emit(evt)),\n );\n }\n if (events.styleData.observed) {\n this.mapInstance.on('styledata', (evt) =>\n this.zone.run(() => events.styleData.emit(evt)),\n );\n }\n if (events.sourceData.observed) {\n this.mapInstance.on('sourcedata', (evt) =>\n this.zone.run(() => events.sourceData.emit(evt)),\n );\n }\n if (events.dataLoading.observed) {\n this.mapInstance.on('dataloading', (evt) =>\n this.zone.run(() => events.dataLoading.emit(evt)),\n );\n }\n if (events.styleDataLoading.observed) {\n this.mapInstance.on('styledataloading', (evt) =>\n this.zone.run(() => events.styleDataLoading.emit(evt)),\n );\n }\n if (events.sourceDataLoading.observed) {\n this.mapInstance.on('sourcedataloading', (evt) =>\n this.zone.run(() => events.sourceDataLoading.emit(evt)),\n );\n }\n if (events.styleImageMissing.observed) {\n this.mapInstance.on('styleimagemissing', (evt) =>\n this.zone.run(() => events.styleImageMissing.emit(evt)),\n );\n }\n if (events.idle.observed) {\n this.mapInstance.on('idle', () =>\n this.zone.run(() => events.idle.emit()),\n );\n }\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * in typescript 4.1 DOM interface Position and Coordinates renamed to GeolocationPosition GeolocationCoordinates
3
+ * to avoid deprecation angular version < 11.0.0 we declared own Coordinates, Position interface
4
+ */
5
+ // export interface NgxMapboxGeolocationCoordinates {
6
+ // readonly accuracy: number;
7
+ // readonly altitude: number | null;
8
+ // readonly altitudeAccuracy: number | null;
9
+ // readonly heading: number | null;
10
+ // readonly latitude: number;
11
+ // readonly longitude: number;
12
+ // readonly speed: number | null;
13
+ // }
14
+ // export interface Position {
15
+ // coords: NgxMapboxGeolocationCoordinates;
16
+ // target: GeolocateControl;
17
+ // timestamp: number;
18
+ // type: string;
19
+ // }
20
+ // export type MapImageData =
21
+ // | HTMLImageElement
22
+ // | ArrayBufferView
23
+ // | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }
24
+ // | ImageData
25
+ // | ImageBitmap;
26
+ // export interface MapImageOptions {
27
+ // pixelRatio: number;
28
+ // sdf: boolean;
29
+ // }
30
+ //# sourceMappingURL=map.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.types.js","sourceRoot":"","sources":["../../../../../../libs/ngx-mapbox-gl/src/lib/map/map.types.ts"],"names":[],"mappings":"AAgFA;;;GAGG;AAEH,qDAAqD;AACrD,+BAA+B;AAC/B,sCAAsC;AACtC,8CAA8C;AAC9C,qCAAqC;AACrC,+BAA+B;AAC/B,gCAAgC;AAChC,mCAAmC;AACnC,IAAI;AAEJ,8BAA8B;AAC9B,6CAA6C;AAC7C,8BAA8B;AAC9B,uBAAuB;AACvB,kBAAkB;AAClB,IAAI;AAEJ,6BAA6B;AAC7B,uBAAuB;AACvB,sBAAsB;AACtB,8EAA8E;AAC9E,gBAAgB;AAChB,mBAAmB;AAEnB,qCAAqC;AACrC,wBAAwB;AACxB,kBAAkB;AAClB,IAAI","sourcesContent":["import { EventEmitter } from '@angular/core';\nimport type {\n Map,\n MapContextEvent,\n MapDataEvent,\n MapEvent,\n MapEvents,\n MapMouseEvent,\n MapSourceDataEvent,\n MapStyleDataEvent,\n MapTouchEvent,\n MapWheelEvent,\n} from 'mapbox-gl';\n\nexport interface NgxMapEvent {\n mapResize: EventEmitter<MapEvent>;\n mapRemove: EventEmitter<MapEvent>;\n mapMouseDown: EventEmitter<MapMouseEvent>;\n mapMouseUp: EventEmitter<MapMouseEvent>;\n mapMouseMove: EventEmitter<MapMouseEvent>;\n mapClick: EventEmitter<MapMouseEvent>;\n mapDblClick: EventEmitter<MapMouseEvent>;\n mapMouseOver: EventEmitter<MapMouseEvent>;\n mapMouseOut: EventEmitter<MapMouseEvent>;\n mapContextMenu: EventEmitter<MapMouseEvent>;\n mapTouchStart: EventEmitter<MapTouchEvent>;\n mapTouchEnd: EventEmitter<MapTouchEvent>;\n mapTouchMove: EventEmitter<MapTouchEvent>;\n mapTouchCancel: EventEmitter<MapTouchEvent>;\n mapWheel: EventEmitter<MapWheelEvent>;\n moveStart: EventEmitter<MapEvents['movestart']>;\n move: EventEmitter<MapEvents['move']>;\n moveEnd: EventEmitter<MapEvents['moveend']>;\n mapDragStart: EventEmitter<MapEvents['dragstart']>;\n mapDrag: EventEmitter<MapEvents['drag']>;\n mapDragEnd: EventEmitter<MapEvents['dragend']>;\n zoomStart: EventEmitter<void>;\n zoomEvt: EventEmitter<void>;\n zoomEnd: EventEmitter<void>;\n rotateStart: EventEmitter<MapEvents['rotatestart']>;\n rotate: EventEmitter<MapEvents['rotate']>;\n rotateEnd: EventEmitter<MapEvents['rotateend']>;\n pitchStart: EventEmitter<void>;\n pitchEvt: EventEmitter<void>;\n pitchEnd: EventEmitter<void>;\n boxZoomStart: EventEmitter<MapEvents['boxzoomstart']>;\n boxZoomEnd: EventEmitter<MapEvents['boxzoomend']>;\n boxZoomCancel: EventEmitter<MapEvents['boxzoomcancel']>;\n webGlContextLost: EventEmitter<MapContextEvent>;\n webGlContextRestored: EventEmitter<MapContextEvent>;\n mapLoad: EventEmitter<MapEvent>;\n mapCreate: EventEmitter<Map>;\n render: EventEmitter<void>;\n mapError: EventEmitter<Error>;\n data: EventEmitter<MapDataEvent>;\n styleData: EventEmitter<MapStyleDataEvent>;\n sourceData: EventEmitter<MapSourceDataEvent>;\n dataLoading: EventEmitter<MapDataEvent>;\n styleDataLoading: EventEmitter<MapStyleDataEvent>;\n sourceDataLoading: EventEmitter<MapSourceDataEvent>;\n styleImageMissing: EventEmitter<{ id: string }>;\n idle: EventEmitter<void>;\n}\n\nexport interface LayerEvents {\n layerClick: EventEmitter<MapMouseEvent>;\n layerDblClick: EventEmitter<MapMouseEvent>;\n layerMouseDown: EventEmitter<MapMouseEvent>;\n layerMouseUp: EventEmitter<MapMouseEvent>;\n layerMouseEnter: EventEmitter<MapMouseEvent>;\n layerMouseLeave: EventEmitter<MapMouseEvent>;\n layerMouseMove: EventEmitter<MapMouseEvent>;\n layerMouseOver: EventEmitter<MapMouseEvent>;\n layerMouseOut: EventEmitter<MapMouseEvent>;\n layerContextMenu: EventEmitter<MapMouseEvent>;\n layerTouchStart: EventEmitter<MapTouchEvent>;\n layerTouchEnd: EventEmitter<MapTouchEvent>;\n layerTouchCancel: EventEmitter<MapTouchEvent>;\n}\n\n/**\n * in typescript 4.1 DOM interface Position and Coordinates renamed to GeolocationPosition GeolocationCoordinates\n * to avoid deprecation angular version < 11.0.0 we declared own Coordinates, Position interface\n */\n\n// export interface NgxMapboxGeolocationCoordinates {\n// readonly accuracy: number;\n// readonly altitude: number | null;\n// readonly altitudeAccuracy: number | null;\n// readonly heading: number | null;\n// readonly latitude: number;\n// readonly longitude: number;\n// readonly speed: number | null;\n// }\n\n// export interface Position {\n// coords: NgxMapboxGeolocationCoordinates;\n// target: GeolocateControl;\n// timestamp: number;\n// type: string;\n// }\n\n// export type MapImageData =\n// | HTMLImageElement\n// | ArrayBufferView\n// | { width: number; height: number; data: Uint8Array | Uint8ClampedArray }\n// | ImageData\n// | ImageBitmap;\n\n// export interface MapImageOptions {\n// pixelRatio: number;\n// sdf: boolean;\n// }\n"]}
@@ -0,0 +1,114 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Output, ViewChild, ViewEncapsulation, inject, input, } from '@angular/core';
2
+ import { MapService } from '../map/map.service';
3
+ import * as i0 from "@angular/core";
4
+ export class MarkerComponent {
5
+ mapService = inject(MapService);
6
+ /* Init input */
7
+ offset = input(...(ngDevMode ? [undefined, { debugName: "offset" }] : []));
8
+ anchor = input(...(ngDevMode ? [undefined, { debugName: "anchor" }] : []));
9
+ clickTolerance = input(...(ngDevMode ? [undefined, { debugName: "clickTolerance" }] : []));
10
+ /* Dynamic input */
11
+ feature = input(...(ngDevMode ? [undefined, { debugName: "feature" }] : []));
12
+ lngLat = input(...(ngDevMode ? [undefined, { debugName: "lngLat" }] : []));
13
+ draggable = input(...(ngDevMode ? [undefined, { debugName: "draggable" }] : []));
14
+ popupShown = input(...(ngDevMode ? [undefined, { debugName: "popupShown" }] : []));
15
+ className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : []));
16
+ zIndex = input(...(ngDevMode ? [undefined, { debugName: "zIndex" }] : []));
17
+ pitchAlignment = input(...(ngDevMode ? [undefined, { debugName: "pitchAlignment" }] : []));
18
+ rotationAlignment = input(...(ngDevMode ? [undefined, { debugName: "rotationAlignment" }] : []));
19
+ markerDragStart = new EventEmitter();
20
+ markerDragEnd = new EventEmitter();
21
+ markerDrag = new EventEmitter();
22
+ content;
23
+ markerInstance;
24
+ ngOnInit() {
25
+ if (this.feature() && this.lngLat()) {
26
+ throw new Error('feature and lngLat input are mutually exclusive');
27
+ }
28
+ }
29
+ ngOnChanges(changes) {
30
+ if (changes['lngLat'] && !changes['lngLat'].isFirstChange()) {
31
+ this.markerInstance.setLngLat(this.lngLat());
32
+ }
33
+ if (changes['feature'] && !changes['feature'].isFirstChange()) {
34
+ this.markerInstance.setLngLat(this.feature().geometry.coordinates);
35
+ }
36
+ if (changes['draggable'] && !changes['draggable'].isFirstChange()) {
37
+ this.markerInstance.setDraggable(!!this.draggable());
38
+ }
39
+ if (changes['popupShown'] && !changes['popupShown'].isFirstChange()) {
40
+ changes['popupShown'].currentValue
41
+ ? this.markerInstance.getPopup()?.addTo(this.mapService.mapInstance)
42
+ : this.markerInstance.getPopup()?.remove();
43
+ }
44
+ if (changes['pitchAlignment'] &&
45
+ !changes['pitchAlignment'].isFirstChange()) {
46
+ this.markerInstance.setPitchAlignment(changes['pitchAlignment'].currentValue);
47
+ }
48
+ if (changes['rotationAlignment'] &&
49
+ !changes['rotationAlignment'].isFirstChange()) {
50
+ this.markerInstance.setRotationAlignment(changes['rotationAlignment'].currentValue);
51
+ }
52
+ }
53
+ ngAfterViewInit() {
54
+ this.mapService.mapCreated$.subscribe(() => {
55
+ this.markerInstance = this.mapService.addMarker({
56
+ markersOptions: {
57
+ offset: this.offset(),
58
+ anchor: this.anchor(),
59
+ pitchAlignment: this.pitchAlignment(),
60
+ rotationAlignment: this.rotationAlignment(),
61
+ draggable: this.draggable(),
62
+ element: this.content.nativeElement,
63
+ feature: this.feature(),
64
+ lngLat: this.lngLat(),
65
+ clickTolerance: this.clickTolerance(),
66
+ },
67
+ markersEvents: {
68
+ markerDragStart: this.markerDragStart,
69
+ markerDrag: this.markerDrag,
70
+ markerDragEnd: this.markerDragEnd,
71
+ },
72
+ });
73
+ });
74
+ }
75
+ ngOnDestroy() {
76
+ this.mapService.removeMarker(this.markerInstance);
77
+ this.markerInstance = undefined;
78
+ }
79
+ togglePopup() {
80
+ this.markerInstance.togglePopup();
81
+ }
82
+ updateCoordinates(coordinates) {
83
+ this.markerInstance.setLngLat(coordinates);
84
+ }
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarkerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
86
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: MarkerComponent, isStandalone: true, selector: "mgl-marker", inputs: { offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, clickTolerance: { classPropertyName: "clickTolerance", publicName: "clickTolerance", isSignal: true, isRequired: false, transformFunction: null }, feature: { classPropertyName: "feature", publicName: "feature", isSignal: true, isRequired: false, transformFunction: null }, lngLat: { classPropertyName: "lngLat", publicName: "lngLat", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: "draggable", publicName: "draggable", isSignal: true, isRequired: false, transformFunction: null }, popupShown: { classPropertyName: "popupShown", publicName: "popupShown", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, pitchAlignment: { classPropertyName: "pitchAlignment", publicName: "pitchAlignment", isSignal: true, isRequired: false, transformFunction: null }, rotationAlignment: { classPropertyName: "rotationAlignment", publicName: "rotationAlignment", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { markerDragStart: "markerDragStart", markerDragEnd: "markerDragEnd", markerDrag: "markerDrag" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
87
+ <div [class]="className()" [style.z-index]="zIndex()" #content>
88
+ <ng-content />
89
+ </div>
90
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
91
+ }
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarkerComponent, decorators: [{
93
+ type: Component,
94
+ args: [{
95
+ selector: 'mgl-marker',
96
+ template: `
97
+ <div [class]="className()" [style.z-index]="zIndex()" #content>
98
+ <ng-content />
99
+ </div>
100
+ `,
101
+ encapsulation: ViewEncapsulation.None,
102
+ changeDetection: ChangeDetectionStrategy.OnPush,
103
+ }]
104
+ }], propDecorators: { offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchor", required: false }] }], clickTolerance: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickTolerance", required: false }] }], feature: [{ type: i0.Input, args: [{ isSignal: true, alias: "feature", required: false }] }], lngLat: [{ type: i0.Input, args: [{ isSignal: true, alias: "lngLat", required: false }] }], draggable: [{ type: i0.Input, args: [{ isSignal: true, alias: "draggable", required: false }] }], popupShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "popupShown", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], pitchAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "pitchAlignment", required: false }] }], rotationAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "rotationAlignment", required: false }] }], markerDragStart: [{
105
+ type: Output
106
+ }], markerDragEnd: [{
107
+ type: Output
108
+ }], markerDrag: [{
109
+ type: Output
110
+ }], content: [{
111
+ type: ViewChild,
112
+ args: ['content', { static: true }]
113
+ }] } });
114
+ //# sourceMappingURL=marker.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker.component.js","sourceRoot":"","sources":["../../../../../../libs/ngx-mapbox-gl/src/lib/marker/marker.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n input,\n} from '@angular/core';\nimport type { LngLatLike, Marker, MarkerOptions } from 'mapbox-gl';\nimport { MapService } from '../map/map.service';\nimport type { Feature, Point } from 'geojson';\n\n@Component({\n selector: 'mgl-marker',\n\n template: `\n <div [class]=\"className()\" [style.z-index]=\"zIndex()\" #content>\n <ng-content />\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkerComponent\n implements OnChanges, OnDestroy, AfterViewInit, OnInit\n{\n private mapService = inject(MapService);\n\n /* Init input */\n offset = input<MarkerOptions['offset']>();\n anchor = input<MarkerOptions['anchor']>();\n clickTolerance = input<MarkerOptions['clickTolerance']>();\n\n /* Dynamic input */\n feature = input<Feature<Point>>();\n lngLat = input<LngLatLike>();\n draggable = input<MarkerOptions['draggable']>();\n popupShown = input<boolean>();\n className = input<string>();\n zIndex = input<number>();\n pitchAlignment = input<MarkerOptions['pitchAlignment']>();\n rotationAlignment = input<MarkerOptions['rotationAlignment']>();\n\n @Output() markerDragStart = new EventEmitter<Marker>();\n @Output() markerDragEnd = new EventEmitter<Marker>();\n @Output() markerDrag = new EventEmitter<Marker>();\n\n @ViewChild('content', { static: true }) content: ElementRef;\n\n markerInstance?: Marker;\n\n ngOnInit() {\n if (this.feature() && this.lngLat()) {\n throw new Error('feature and lngLat input are mutually exclusive');\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['lngLat'] && !changes['lngLat'].isFirstChange()) {\n this.markerInstance!.setLngLat(this.lngLat()!);\n }\n if (changes['feature'] && !changes['feature'].isFirstChange()) {\n this.markerInstance!.setLngLat(\n this.feature()!.geometry!.coordinates as [number, number],\n );\n }\n if (changes['draggable'] && !changes['draggable'].isFirstChange()) {\n this.markerInstance!.setDraggable(!!this.draggable());\n }\n if (changes['popupShown'] && !changes['popupShown'].isFirstChange()) {\n changes['popupShown'].currentValue\n ? this.markerInstance!.getPopup()?.addTo(this.mapService.mapInstance)\n : this.markerInstance!.getPopup()?.remove();\n }\n if (\n changes['pitchAlignment'] &&\n !changes['pitchAlignment'].isFirstChange()\n ) {\n this.markerInstance!.setPitchAlignment(\n changes['pitchAlignment'].currentValue,\n );\n }\n if (\n changes['rotationAlignment'] &&\n !changes['rotationAlignment'].isFirstChange()\n ) {\n this.markerInstance!.setRotationAlignment(\n changes['rotationAlignment'].currentValue,\n );\n }\n }\n\n ngAfterViewInit() {\n this.mapService.mapCreated$.subscribe(() => {\n this.markerInstance = this.mapService.addMarker({\n markersOptions: {\n offset: this.offset(),\n anchor: this.anchor(),\n pitchAlignment: this.pitchAlignment(),\n rotationAlignment: this.rotationAlignment(),\n draggable: this.draggable(),\n element: this.content.nativeElement,\n feature: this.feature(),\n lngLat: this.lngLat(),\n clickTolerance: this.clickTolerance(),\n },\n markersEvents: {\n markerDragStart: this.markerDragStart,\n markerDrag: this.markerDrag,\n markerDragEnd: this.markerDragEnd,\n },\n });\n });\n }\n\n ngOnDestroy() {\n this.mapService.removeMarker(this.markerInstance!);\n this.markerInstance = undefined;\n }\n\n togglePopup() {\n this.markerInstance!.togglePopup();\n }\n\n updateCoordinates(coordinates: number[]) {\n this.markerInstance!.setLngLat(coordinates as [number, number]);\n }\n}\n"]}
@@ -0,0 +1,168 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, Directive, NgZone, TemplateRef, inject, input, signal, } from '@angular/core';
2
+ import { fromEvent, merge, Subscription } from 'rxjs';
3
+ import { filter, startWith, switchMap } from 'rxjs/operators';
4
+ import { MapService } from '../map/map.service';
5
+ import { MarkerComponent } from '../marker/marker.component';
6
+ import { LayerComponent } from '../layer/layer.component';
7
+ import { NgTemplateOutlet } from '@angular/common';
8
+ import * as i0 from "@angular/core";
9
+ export class PointDirective {
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PointDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: PointDirective, isStandalone: true, selector: "ng-template[mglPoint]", ngImport: i0 });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: PointDirective, decorators: [{
14
+ type: Directive,
15
+ args: [{
16
+ selector: 'ng-template[mglPoint]',
17
+ }]
18
+ }] });
19
+ export class ClusterPointDirective {
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ClusterPointDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
21
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: ClusterPointDirective, isStandalone: true, selector: "ng-template[mglClusterPoint]", ngImport: i0 });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ClusterPointDirective, decorators: [{
24
+ type: Directive,
25
+ args: [{
26
+ selector: 'ng-template[mglClusterPoint]',
27
+ }]
28
+ }] });
29
+ let uniqId = 0;
30
+ export class MarkersForClustersComponent {
31
+ mapService = inject(MapService);
32
+ zone = inject(NgZone);
33
+ /* Init input */
34
+ source = input.required(...(ngDevMode ? [{ debugName: "source" }] : []));
35
+ /* Dynamic input */
36
+ customPointIdKey = input(...(ngDevMode ? [undefined, { debugName: "customPointIdKey" }] : []));
37
+ pointTpl;
38
+ clusterPointTpl;
39
+ clusterPoints = signal([], ...(ngDevMode ? [{ debugName: "clusterPoints" }] : []));
40
+ layerId = `mgl-markers-for-clusters-${uniqId++}`;
41
+ sub = new Subscription();
42
+ ngAfterContentInit() {
43
+ const clusterDataUpdate = () => fromEvent(this.mapService.mapInstance, 'data').pipe(filter((e) => e.sourceId === this.source() &&
44
+ e.sourceDataType !== 'metadata' &&
45
+ this.mapService.mapInstance.isSourceLoaded(this.source())));
46
+ const sub = this.mapService.mapCreated$
47
+ .pipe(switchMap(clusterDataUpdate), switchMap(() => merge(fromEvent(this.mapService.mapInstance, 'move'), fromEvent(this.mapService.mapInstance, 'moveend')).pipe(startWith(undefined))))
48
+ .subscribe(() => {
49
+ this.zone.run(() => {
50
+ this.updateCluster();
51
+ });
52
+ });
53
+ this.sub.add(sub);
54
+ }
55
+ ngOnDestroy() {
56
+ this.sub.unsubscribe();
57
+ }
58
+ trackByFeature(feature) {
59
+ if (feature.id) {
60
+ return feature.id;
61
+ }
62
+ const customPointIdKey = this.customPointIdKey();
63
+ if (!customPointIdKey) {
64
+ console.warn('[mgl-markers-for-clusters] feature.id is falsy, please provide a custom key');
65
+ return '';
66
+ }
67
+ const id = feature.properties?.[customPointIdKey];
68
+ if (!id) {
69
+ console.warn(`[mgl-markers-for-clusters] Custom key [${customPointIdKey}], resolve to falsy for`, feature);
70
+ return '';
71
+ }
72
+ return id;
73
+ }
74
+ updateCluster() {
75
+ const params = {
76
+ layers: [this.layerId],
77
+ };
78
+ if (!this.pointTpl) {
79
+ params.filter = ['==', 'cluster', true];
80
+ }
81
+ const clusterPoints = this.mapService.mapInstance.queryRenderedFeatures(params);
82
+ // Remove duplicates, because it seems that queryRenderedFeatures can return duplicates
83
+ const seen = new Set();
84
+ const unique = [];
85
+ for (const feature of clusterPoints) {
86
+ const id = this.trackByFeature(feature);
87
+ if (!seen.has(id)) {
88
+ seen.add(id);
89
+ unique.push(feature);
90
+ }
91
+ }
92
+ this.clusterPoints.set(unique);
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarkersForClustersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MarkersForClustersComponent, isStandalone: true, selector: "mgl-markers-for-clusters", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, customPointIdKey: { classPropertyName: "customPointIdKey", publicName: "customPointIdKey", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "pointTpl", first: true, predicate: PointDirective, descendants: true, read: TemplateRef }, { propertyName: "clusterPointTpl", first: true, predicate: ClusterPointDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: `
96
+ <mgl-layer
97
+ [id]="layerId"
98
+ [source]="source()"
99
+ type="circle"
100
+ [paint]="{ 'circle-radius': 0 }"
101
+ />
102
+ @for (feature of clusterPoints(); track trackByFeature(feature)) {
103
+ @if (feature.properties!['cluster']) {
104
+ <mgl-marker [feature]="$any(feature)">
105
+ @if (clusterPointTpl) {
106
+ <ng-template
107
+ [ngTemplateOutlet]="clusterPointTpl"
108
+ [ngTemplateOutletContext]="{ $implicit: feature }"
109
+ />
110
+ }
111
+ </mgl-marker>
112
+ } @else {
113
+ <mgl-marker [feature]="$any(feature)">
114
+ @if (pointTpl) {
115
+ <ng-template
116
+ [ngTemplateOutlet]="pointTpl"
117
+ [ngTemplateOutletContext]="{ $implicit: feature }"
118
+ />
119
+ }
120
+ </mgl-marker>
121
+ }
122
+ }
123
+ `, isInline: true, dependencies: [{ kind: "component", type: MarkerComponent, selector: "mgl-marker", inputs: ["offset", "anchor", "clickTolerance", "feature", "lngLat", "draggable", "popupShown", "className", "zIndex", "pitchAlignment", "rotationAlignment"], outputs: ["markerDragStart", "markerDragEnd", "markerDrag"] }, { kind: "component", type: LayerComponent, selector: "mgl-layer", inputs: ["id", "source", "type", "metadata", "sourceLayer", "filter", "layout", "paint", "before", "minzoom", "maxzoom"], outputs: ["layerClick", "layerDblClick", "layerMouseDown", "layerMouseUp", "layerMouseEnter", "layerMouseLeave", "layerMouseMove", "layerMouseOver", "layerMouseOut", "layerContextMenu", "layerTouchStart", "layerTouchEnd", "layerTouchCancel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
124
+ }
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MarkersForClustersComponent, decorators: [{
126
+ type: Component,
127
+ args: [{
128
+ selector: 'mgl-markers-for-clusters',
129
+ template: `
130
+ <mgl-layer
131
+ [id]="layerId"
132
+ [source]="source()"
133
+ type="circle"
134
+ [paint]="{ 'circle-radius': 0 }"
135
+ />
136
+ @for (feature of clusterPoints(); track trackByFeature(feature)) {
137
+ @if (feature.properties!['cluster']) {
138
+ <mgl-marker [feature]="$any(feature)">
139
+ @if (clusterPointTpl) {
140
+ <ng-template
141
+ [ngTemplateOutlet]="clusterPointTpl"
142
+ [ngTemplateOutletContext]="{ $implicit: feature }"
143
+ />
144
+ }
145
+ </mgl-marker>
146
+ } @else {
147
+ <mgl-marker [feature]="$any(feature)">
148
+ @if (pointTpl) {
149
+ <ng-template
150
+ [ngTemplateOutlet]="pointTpl"
151
+ [ngTemplateOutletContext]="{ $implicit: feature }"
152
+ />
153
+ }
154
+ </mgl-marker>
155
+ }
156
+ }
157
+ `,
158
+ imports: [MarkerComponent, LayerComponent, NgTemplateOutlet],
159
+ changeDetection: ChangeDetectionStrategy.OnPush,
160
+ }]
161
+ }], propDecorators: { source: [{ type: i0.Input, args: [{ isSignal: true, alias: "source", required: true }] }], customPointIdKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "customPointIdKey", required: false }] }], pointTpl: [{
162
+ type: ContentChild,
163
+ args: [PointDirective, { read: TemplateRef, static: false }]
164
+ }], clusterPointTpl: [{
165
+ type: ContentChild,
166
+ args: [ClusterPointDirective, { read: TemplateRef, static: false }]
167
+ }] } });
168
+ //# sourceMappingURL=markers-for-clusters.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markers-for-clusters.component.js","sourceRoot":"","sources":["../../../../../../libs/ngx-mapbox-gl/src/lib/markers-for-clusters/markers-for-clusters.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n NgZone,\n OnDestroy,\n TemplateRef,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport type {\n MapSourceDataEvent,\n GeoJSONFeature,\n FilterSpecification,\n} from 'mapbox-gl';\nimport { fromEvent, merge, Subscription } from 'rxjs';\nimport { filter, startWith, switchMap } from 'rxjs/operators';\nimport { MapService } from '../map/map.service';\nimport { MarkerComponent } from '../marker/marker.component';\nimport { LayerComponent } from '../layer/layer.component';\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Directive({\n selector: 'ng-template[mglPoint]',\n})\nexport class PointDirective {}\n\n@Directive({\n selector: 'ng-template[mglClusterPoint]',\n})\nexport class ClusterPointDirective {}\n\nlet uniqId = 0;\n\n@Component({\n selector: 'mgl-markers-for-clusters',\n\n template: `\n <mgl-layer\n [id]=\"layerId\"\n [source]=\"source()\"\n type=\"circle\"\n [paint]=\"{ 'circle-radius': 0 }\"\n />\n @for (feature of clusterPoints(); track trackByFeature(feature)) {\n @if (feature.properties!['cluster']) {\n <mgl-marker [feature]=\"$any(feature)\">\n @if (clusterPointTpl) {\n <ng-template\n [ngTemplateOutlet]=\"clusterPointTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: feature }\"\n />\n }\n </mgl-marker>\n } @else {\n <mgl-marker [feature]=\"$any(feature)\">\n @if (pointTpl) {\n <ng-template\n [ngTemplateOutlet]=\"pointTpl\"\n [ngTemplateOutletContext]=\"{ $implicit: feature }\"\n />\n }\n </mgl-marker>\n }\n }\n `,\n imports: [MarkerComponent, LayerComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MarkersForClustersComponent\n implements OnDestroy, AfterContentInit\n{\n private mapService = inject(MapService);\n private zone = inject(NgZone);\n\n /* Init input */\n source = input.required<string>();\n\n /* Dynamic input */\n customPointIdKey = input<string>();\n\n @ContentChild(PointDirective, { read: TemplateRef, static: false })\n pointTpl?: TemplateRef<unknown>;\n @ContentChild(ClusterPointDirective, { read: TemplateRef, static: false })\n clusterPointTpl: TemplateRef<unknown>;\n\n clusterPoints = signal<GeoJSONFeature[]>([]);\n layerId = `mgl-markers-for-clusters-${uniqId++}`;\n\n private sub = new Subscription();\n\n ngAfterContentInit() {\n const clusterDataUpdate = () =>\n fromEvent<MapSourceDataEvent>(this.mapService.mapInstance, 'data').pipe(\n filter(\n (e) =>\n e.sourceId === this.source() &&\n e.sourceDataType !== 'metadata' &&\n this.mapService.mapInstance.isSourceLoaded(this.source()),\n ),\n );\n const sub = this.mapService.mapCreated$\n .pipe(\n switchMap(clusterDataUpdate),\n switchMap(() =>\n merge(\n fromEvent(this.mapService.mapInstance, 'move'),\n fromEvent(this.mapService.mapInstance, 'moveend'),\n ).pipe(startWith(undefined)),\n ),\n )\n .subscribe(() => {\n this.zone.run(() => {\n this.updateCluster();\n });\n });\n this.sub.add(sub);\n }\n\n ngOnDestroy() {\n this.sub.unsubscribe();\n }\n\n trackByFeature(feature: GeoJSONFeature) {\n if (feature.id) {\n return feature.id;\n }\n const customPointIdKey = this.customPointIdKey();\n if (!customPointIdKey) {\n console.warn(\n '[mgl-markers-for-clusters] feature.id is falsy, please provide a custom key',\n );\n return '';\n }\n const id = feature.properties?.[customPointIdKey];\n if (!id) {\n console.warn(\n `[mgl-markers-for-clusters] Custom key [${customPointIdKey}], resolve to falsy for`,\n feature,\n );\n return '';\n }\n return id;\n }\n\n private updateCluster() {\n const params: { layers?: string[]; filter?: FilterSpecification } = {\n layers: [this.layerId],\n };\n if (!this.pointTpl) {\n params.filter = ['==', 'cluster', true];\n }\n const clusterPoints =\n this.mapService.mapInstance.queryRenderedFeatures(params);\n // Remove duplicates, because it seems that queryRenderedFeatures can return duplicates\n const seen = new Set();\n const unique = [];\n for (const feature of clusterPoints) {\n const id = this.trackByFeature(feature);\n if (!seen.has(id)) {\n seen.add(id);\n unique.push(feature);\n }\n }\n this.clusterPoints.set(unique);\n }\n}\n"]}