vue3-maplibre-gl 4.2.1 → 4.2.2

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.
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, shallowRef, computed, unref, provide, watch, watchEffect, nextTick, onBeforeMount, onUnmounted, createElementBlock, openBlock, normalizeClass, createCommentVNode, renderSlot, inject, onMounted, useSlots } from "vue";
2
- import { u as useOptimizedComputed, a as useCreateMaplibre, b as useMapEventListener, c as useLogger, d as useGeolocateControl, e as useGeolocateEventListener, f as useCreateGeoJsonSource, g as useDebouncedWatch, h as useCreateFillLayer, i as useLayerEventListener, j as useCreateCircleLayer, k as useCreateLineLayer, l as useCreateSymbolLayer, m as useCreateImage, n as useCreateMarker, o as useCreatePopup } from "./composables-DAnOe464.js";
2
+ import { u as useOptimizedComputed, a as useCreateMaplibre, b as useMapEventListener, c as useLogger, d as useGeolocateControl, e as useGeolocateEventListener, f as useCreateGeoJsonSource, g as useDebouncedWatch, h as useCreateFillLayer, i as useLayerEventListener, j as useCreateCircleLayer, k as useCreateLineLayer, l as useCreateSymbolLayer, m as useCreateImage, n as useCreateMarker, o as useCreatePopup } from "./composables-Bc9mligj.js";
3
3
  const MapProvideKey = Symbol();
4
4
  const SourceProvideKey = Symbol();
5
5
  var MapCreationStatus = /* @__PURE__ */ ((MapCreationStatus2) => {
@@ -1288,4 +1288,4 @@ export {
1288
1288
  _sfc_main$1 as k,
1289
1289
  _sfc_main as l
1290
1290
  };
1291
- //# sourceMappingURL=components-CshbV8A0.js.map
1291
+ //# sourceMappingURL=components-D-FQXhcJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components-CshbV8A0.js","sources":["../libs/enums/MapProvideKey.ts","../libs/enums/MaplibreEnum.ts","../libs/enums/MaplibreLayerEnum.ts","../libs/components/Maplibre.vue","../libs/components/GeolocateControls.vue","../libs/components/GeoJsonSource.vue","../libs/components/FillLayer.vue","../libs/components/CircleLayer.vue","../libs/components/LineLayer.vue","../libs/components/SymbolLayer.vue","../libs/components/Image.vue","../libs/components/Marker.vue","../libs/components/Popup.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey, ShallowRef } from 'vue';\nimport type { GeoJSONSource, Map, SourceSpecification } from 'maplibre-gl';\nimport type { Nullable } from '@libs/types';\n\nexport const MapProvideKey = Symbol() as InjectionKey<\n ShallowRef<Nullable<Map>> | ComputedRef<Nullable<Map>>\n>;\n\nexport const SourceProvideKey = Symbol() as InjectionKey<\n | ShallowRef<Nullable<SourceSpecification | GeoJSONSource>>\n | ComputedRef<Nullable<SourceSpecification | GeoJSONSource>>\n>;\n","import type { GeolocateEventTypes, MapEventTypes } from '@libs/types';\n\nexport enum MapCreationStatus {\n NotInitialized = 'not-initialized',\n Initializing = 'initializing',\n Loading = 'loading',\n Loaded = 'loaded',\n Error = 'error',\n Destroyed = 'destroyed',\n}\n\nexport const MaplibreEvents: (keyof MapEventTypes)[] = [\n 'error',\n 'load',\n 'idle',\n 'remove',\n 'render',\n 'resize',\n 'webglcontextlost',\n 'webglcontextrestored',\n 'dataloading',\n 'data',\n 'tiledataloading',\n 'sourcedataloading',\n 'sourcedata',\n 'styledata',\n 'styleimagemissing',\n 'dataabort',\n 'sourcedataabort',\n 'boxzoomcancel',\n 'boxzoomstart',\n 'boxzoomend',\n 'touchcancel',\n 'touchmove',\n 'touchend',\n 'touchstart',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'mousemove',\n 'mouseup',\n 'mousedown',\n 'mouseout',\n 'mouseover',\n 'movestart',\n 'move',\n 'moveend',\n 'zoomstart',\n 'zoom',\n 'zoomend',\n 'rotatestart',\n 'rotate',\n 'rotateend',\n 'dragstart',\n 'drag',\n 'dragend',\n 'pitchstart',\n 'pitch',\n 'pitchend',\n 'wheel',\n 'terrain',\n];\n\nexport const GeolocateEvents: (keyof GeolocateEventTypes)[] = [\n 'geolocate',\n 'error',\n 'outofmaxbounds',\n 'trackuserlocationstart',\n 'trackuserlocationend',\n];\n","import type { MapLayerEventType } from 'maplibre-gl';\n\nexport const MaplibreLayerEvents: (keyof MapLayerEventType)[] = [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n 'touchstart',\n 'touchend',\n 'touchcancel',\n];\n","<script lang=\"ts\" setup>\nimport {\n ref,\n provide,\n computed,\n unref,\n watch,\n nextTick,\n onBeforeMount,\n onUnmounted,\n watchEffect,\n shallowRef,\n} from 'vue';\nimport { MapProvideKey, MaplibreEvents, MapCreationStatus } from '@libs/enums';\nimport {\n useCreateMaplibre,\n useMapEventListener,\n useLogger,\n useOptimizedComputed,\n} from '@libs/composables';\nimport type { CreateMaplibreActions, MaplibreActions } from '@libs/types';\nimport type {\n Map,\n MapContextEvent,\n MapDataEvent,\n MapEventType,\n MapLibreZoomEvent,\n MapMouseEvent,\n MapOptions,\n MapSourceDataEvent,\n MapTouchEvent,\n MapWheelEvent,\n} from 'maplibre-gl';\n\n/**\n * Enhanced Maplibre component props with comprehensive configuration options\n */\ninterface MaplibreProps {\n /** Map configuration options */\n options?: Partial<MapOptions>;\n /** Callback for registering map actions */\n register?: (actions: MaplibreActions) => void;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Container ID for the map element */\n containerId?: string;\n /** Custom container class names */\n containerClass?: string;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Load success callback */\n onLoad?: (map: Map) => void;\n}\n\ninterface Emits {\n (e: keyof MapEventType, ev: any): void;\n (e: 'register', actions: MaplibreActions): void;\n (\n e: 'error' | 'load' | 'idle' | 'remove' | 'render' | 'resize',\n ev: Event,\n ): void;\n (e: 'webglcontextlost' | 'webglcontextrestored', ev: MapContextEvent): void;\n (\n e: 'dataloading' | 'data' | 'tiledataloading' | 'dataabort',\n ev: MapDataEvent,\n ): void;\n (\n e: 'sourcedataloading' | 'sourcedata' | 'sourcedataabort',\n ev: MapSourceDataEvent,\n ): void;\n (e: 'styledata', ev: Event): void;\n (e: 'styleimagemissing', ev: Event): void;\n (\n e: 'boxzoomcancel' | 'boxzoomstart' | 'boxzoomend',\n ev: MapLibreZoomEvent,\n ): void;\n (\n e: 'touchcancel' | 'touchmove' | 'touchend' | 'touchstart',\n ev: MapTouchEvent,\n ): void;\n (\n e:\n | 'click'\n | 'contextmenu'\n | 'dblclick'\n | 'mousemove'\n | 'mouseup'\n | 'mousedown'\n | 'mouseout'\n | 'mouseover',\n ev: MapMouseEvent,\n ): void;\n (\n e:\n | 'movestart'\n | 'move'\n | 'moveend'\n | 'zoomstart'\n | 'zoom'\n | 'zoomend'\n | 'rotatestart'\n | 'rotate'\n | 'rotateend'\n | 'dragstart'\n | 'drag'\n | 'dragend'\n | 'pitchstart'\n | 'pitch'\n | 'pitchend',\n ev: Event,\n ): void;\n (e: 'wheel', ev: MapWheelEvent): void;\n (e: 'terrain', ev: Event): void;\n}\n\nconst props = withDefaults(defineProps<MaplibreProps>(), {\n options: () => ({\n // Provide sensible defaults for better performance\n style: 'https://demotiles.maplibre.org/style.json',\n center: [0, 0] as [number, number],\n zoom: 1,\n pitch: 0,\n bearing: 0,\n antialias: true,\n optimizeForTerrain: true,\n // Performance optimizations\n preserveDrawingBuffer: false,\n refreshExpiredTiles: true,\n maxTileCacheSize: null,\n localIdeographFontFamily: false,\n transformRequest: undefined,\n collectResourceTiming: false,\n fadeDuration: 300,\n crossSourceCollisions: true,\n }),\n debug: false,\n autoCleanup: true,\n containerId: () => `maplibre-${Math.random().toString(36).substring(2, 11)}`,\n containerClass: '',\n});\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst innerOptions = ref<Partial<MapOptions>>();\nconst mapContainerRef = shallowRef<HTMLElement | null>(null);\nconst styleRef = ref(props.options.style as string);\n\nconst isComponentMounted = ref(false);\nconst mapCreationStatus = ref<MapCreationStatus>(\n MapCreationStatus.NotInitialized,\n);\n\n// Enhanced computed properties for better reactivity and performance\nconst mapOptions = useOptimizedComputed(\n () => {\n const baseOptions = { ...props.options };\n const mergedOptions = { ...baseOptions, ...innerOptions.value };\n return mergedOptions;\n },\n {\n deepEqual: true, // Use deep equality for complex objects\n },\n);\n\nconst isMapReady = computed(\n () => mapCreationStatus.value === MapCreationStatus.Loaded,\n);\nconst isMapLoading = computed(\n () => mapCreationStatus.value === MapCreationStatus.Loading,\n);\nconst hasMapError = computed(\n () => mapCreationStatus.value === MapCreationStatus.Error,\n);\n\n/**\n * Enhanced map options setter with validation and error handling\n * @param options - Partial map options to merge\n */\nfunction setMapOptions(options: Partial<MapOptions>): void {\n try {\n innerOptions.value = {\n ...(unref(mapOptions) || {}),\n ...options,\n };\n } catch (error) {\n logError('Error setting map options:', error, { options });\n }\n}\n\n// Enhanced map creation with comprehensive error handling and performance monitoring\nconst {\n mapInstance,\n\n setCenter,\n setBearing,\n setZoom,\n setPitch,\n setStyle,\n setMaxBounds,\n setMaxPitch,\n setMaxZoom,\n setMinPitch,\n setMinZoom,\n setRenderWorldCopies,\n} = useCreateMaplibre(mapContainerRef, styleRef, {\n ...unref(mapOptions),\n register: (actions: CreateMaplibreActions) => {\n try {\n const enhancedActions = {\n ...actions,\n setMapOptions,\n // Additional enhanced methods\n isMapReady: isMapReady.value,\n isMapLoading: isMapLoading.value,\n hasMapError: hasMapError.value,\n };\n\n props.register?.(enhancedActions as MaplibreActions);\n emits('register', enhancedActions as MaplibreActions);\n } catch (error) {\n logError('Error during map registration:', error);\n props.onError?.(error);\n }\n },\n onLoad: (map) => {\n try {\n mapCreationStatus.value = MapCreationStatus.Loaded;\n props.onLoad?.(map);\n } catch (error) {\n logError('Error in map load handler:', error);\n props.onError?.(error);\n }\n },\n onError: (error) => {\n try {\n mapCreationStatus.value = MapCreationStatus.Error;\n logError('Map creation error:', error);\n props.onError?.(error);\n } catch (handlerError) {\n logError('Error in error handler:', handlerError);\n }\n },\n debug: props.debug,\n});\n\n// Provide map instance to child components\nprovide(MapProvideKey, mapInstance);\n\n// Enhanced event listeners with error handling and performance monitoring\nMaplibreEvents.map((evt) => {\n return useMapEventListener({\n map: mapInstance,\n event: evt,\n on: (data) => {\n try {\n emits(evt as keyof MapEventType, data);\n } catch (error) {\n logError(`Error in ${evt} event handler:`, error, { data });\n }\n },\n debug: props.debug,\n });\n});\n\n// Create optimized watchers for map properties with null safety\nconst watchers = [\n watch(\n () => unref(mapOptions).center,\n (value) => value && setCenter(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).bearing,\n (value) => value !== undefined && setBearing(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).zoom,\n (value) => value !== undefined && setZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).pitch,\n (value) => value !== undefined && setPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).style,\n (value) => value && setStyle(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxBounds,\n (value) => value && setMaxBounds(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxPitch,\n (value) => value !== undefined && value !== null && setMaxPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxZoom,\n (value) => value !== undefined && value !== null && setMaxZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).minPitch,\n (value) => value !== undefined && value !== null && setMinPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).minZoom,\n (value) => value !== undefined && value !== null && setMinZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).renderWorldCopies,\n (value) => value !== undefined && setRenderWorldCopies(value),\n { flush: 'post' },\n ),\n];\n\n// Enhanced container management\nwatchEffect(async () => {\n try {\n await nextTick();\n\n if (mapContainerRef.value) {\n isComponentMounted.value = true;\n mapCreationStatus.value = MapCreationStatus.Initializing;\n } else {\n // Wait for next tick if container is not ready yet\n return;\n }\n } catch (error) {\n logError('Error in container creation watchEffect:', error);\n mapCreationStatus.value = MapCreationStatus.Error;\n props.onError?.(error);\n }\n});\n\n// Enhanced cleanup with comprehensive resource disposal\nfunction cleanup(): void {\n try {\n // Stop all watchers\n watchers.forEach((stopWatcher) => stopWatcher?.());\n\n // Reset state\n isComponentMounted.value = false;\n mapCreationStatus.value = MapCreationStatus.Destroyed;\n } catch (error) {\n logError('Error during cleanup:', error);\n }\n}\n\nonBeforeMount(() => {\n if (props.autoCleanup) {\n cleanup();\n }\n});\n\nonUnmounted(() => {\n if (props.autoCleanup) {\n cleanup();\n }\n});\n</script>\n\n<template>\n <div\n :id=\"containerId\"\n ref=\"mapContainerRef\"\n :class=\"['maplibre-container', containerClass]\"\n >\n <!-- Loading state -->\n <div v-if=\"isMapLoading\">\n <slot name=\"loading\"> </slot>\n </div>\n\n <!-- Error state -->\n <div v-if=\"hasMapError\">\n <slot name=\"error\"> </slot>\n </div>\n\n <!-- Map content -->\n <slot v-if=\"isMapReady || (!isMapLoading && !hasMapError)\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n.maplibre-container {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport {\n inject,\n ref,\n watchEffect,\n computed,\n onUnmounted,\n shallowRef,\n} from 'vue';\nimport { MapProvideKey, GeolocateEvents } from '@libs/enums';\nimport {\n useGeolocateControl,\n useGeolocateEventListener,\n useLogger,\n} from '@libs/composables';\nimport type {\n GeolocateSuccess,\n GeolocationPositionError,\n GeolocateEventTypes,\n} from '@libs/types';\nimport type {\n ControlPosition,\n GeolocateControl,\n GeolocateControlOptions,\n} from 'maplibre-gl';\n\n/**\n * Enhanced GeolocateControl component props with comprehensive configuration options\n */\ninterface GeolocateControlProps {\n /** Position of the control on the map */\n position?: ControlPosition;\n /** Geolocate control configuration options */\n options?: GeolocateControlOptions;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Success callback for geolocation */\n onGeolocate?: (data: GeolocateSuccess) => void;\n /** Callback when user location tracking starts */\n onTrackingStart?: (data: GeolocateSuccess) => void;\n /** Callback when user location tracking ends */\n onTrackingEnd?: (data: GeolocateSuccess) => void;\n /** Callback when user location is out of max bounds */\n onOutOfMaxBounds?: (data: GeolocateSuccess) => void;\n}\n\n/**\n * Enhanced event emits with proper typing and comprehensive event coverage\n */\ninterface Emits {\n (e: keyof GeolocateEventTypes, ev: any): void;\n (e: 'register', ev: GeolocateControl): void;\n (e: 'geolocate', ev: GeolocateSuccess): void;\n (e: 'error', ev: GeolocationPositionError): void;\n (e: 'outofmaxbounds', ev: GeolocateSuccess): void;\n (e: 'trackuserlocationstart', ev: GeolocateSuccess): void;\n (e: 'trackuserlocationend', ev: GeolocateSuccess): void;\n}\n\nconst props = withDefaults(defineProps<GeolocateControlProps>(), {\n position: 'bottom-right',\n options: () => ({}),\n debug: false,\n autoCleanup: true,\n});\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst isControlRegistered = ref(false);\nconst controlError = ref<any>(null);\n\n// Computed properties for better reactivity and performance\nconst hasControlError = computed(() => !!controlError.value);\n\n// Enhanced geolocate control with comprehensive error handling\nconst { geolocateControl, isControlAdded, removeControl, addControl, trigger } =\n useGeolocateControl({\n map: mapInstance,\n position: props.position,\n options: props.options,\n debug: props.debug,\n });\n\n/**\n * Enhanced event handler with error handling and callback support\n * @param eventType - The type of geolocate event\n * @param data - Event data\n */\nfunction handleGeolocateEvent(\n eventType: keyof GeolocateEventTypes,\n data: any,\n): void {\n try {\n // Emit the event\n emits(eventType, data);\n\n // Call specific callback handlers\n switch (eventType) {\n case 'geolocate':\n props.onGeolocate?.(data as GeolocateSuccess);\n break;\n case 'error':\n controlError.value = data;\n props.onError?.(data);\n break;\n case 'trackuserlocationstart':\n props.onTrackingStart?.(data as GeolocateSuccess);\n break;\n case 'trackuserlocationend':\n props.onTrackingEnd?.(data as GeolocateSuccess);\n break;\n case 'outofmaxbounds':\n props.onOutOfMaxBounds?.(data as GeolocateSuccess);\n break;\n default:\n break;\n }\n } catch (error) {\n logError(`Error handling ${eventType} event:`, error, { data });\n controlError.value = error;\n props.onError?.(error);\n }\n}\n\n// Enhanced control registration with error handling\nwatchEffect(() => {\n try {\n if (geolocateControl.value && !isControlRegistered.value) {\n emits('register', geolocateControl.value);\n isControlRegistered.value = true;\n controlError.value = null;\n }\n } catch (error) {\n logError('Error registering geolocate control:', error);\n controlError.value = error;\n props.onError?.(error);\n }\n});\n\n// Enhanced event listeners with error handling and performance optimization\nGeolocateEvents.map((evt) => {\n return useGeolocateEventListener({\n geolocate: geolocateControl,\n event: evt,\n on: (data) => handleGeolocateEvent(evt, data),\n debug: props.debug,\n });\n});\n\n/**\n * Enhanced cleanup function for disposing resources\n */\nfunction cleanup(): void {\n try {\n if (props.autoCleanup) {\n // Reset state\n isControlRegistered.value = false;\n controlError.value = null;\n\n // Remove control if still added\n if (isControlAdded.value) {\n removeControl();\n }\n }\n } catch (error) {\n logError('Error during geolocate control cleanup:', error);\n }\n}\n\n// Cleanup on component unmount\nonUnmounted(cleanup);\n\n// Expose control methods for parent components\ndefineExpose({\n geolocateControl,\n isControlAdded,\n isControlRegistered,\n hasControlError,\n controlError,\n addControl,\n removeControl,\n trigger,\n cleanup,\n});\n</script>\n\n<template>\n <!-- Enhanced template with error state and accessibility -->\n <div v-if=\"hasControlError\">\n <slot name=\"error\"> </slot>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, provide, computed, onUnmounted, shallowRef } from 'vue';\nimport { MapProvideKey, SourceProvideKey } from '@libs/enums';\nimport {\n useCreateGeoJsonSource,\n useLogger,\n useDebouncedWatch,\n} from '@libs/composables';\nimport type { CreateGeoJsonSourceActions } from '@libs/composables';\nimport type { GeoJSONSource, GeoJSONSourceSpecification } from 'maplibre-gl';\n\n/**\n * Enhanced GeoJsonSource component props with comprehensive configuration options\n */\ninterface GeoJsonSourceProps {\n /** Unique identifier for the source */\n id?: string;\n /** GeoJSON data for the source */\n data?: GeoJSONSourceSpecification['data'];\n /** Additional source configuration options */\n options?: Partial<GeoJSONSourceSpecification>;\n /** Callback for registering source actions */\n register?: (actions: CreateGeoJsonSourceActions) => void;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Source load success callback */\n onLoad?: (source: GeoJSONSource) => void;\n /** Data update callback */\n onDataUpdate?: (data: GeoJSONSourceSpecification['data']) => void;\n /** Debounce delay for data updates in milliseconds (default: 100) */\n debounceDelay?: number;\n}\n\n/**\n * Enhanced event emits with proper typing and comprehensive event coverage\n */\ninterface Emits {\n (e: 'register', actions: CreateGeoJsonSourceActions): void;\n (e: 'error', error: any): void;\n (e: 'load', source: any): void;\n (e: 'data-update', data: GeoJSONSourceSpecification['data']): void;\n}\n\nconst props = withDefaults(defineProps<GeoJsonSourceProps>(), {\n data: () => ({\n type: 'FeatureCollection',\n features: [],\n }),\n options: () => ({}),\n debug: false,\n autoCleanup: true,\n debounceDelay: 100,\n});\n\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst isSourceRegistered = ref(false);\nconst lastDataUpdate = shallowRef<GeoJSONSourceSpecification['data']>();\n\n// Computed properties for better reactivity and performance\nconst isDataValid = computed(() => {\n const data = props.data;\n if (!data) return false;\n\n // Basic GeoJSON validation\n if (typeof data === 'object' && 'type' in data) {\n return data.type === 'FeatureCollection' || data.type === 'Feature';\n }\n\n // URL validation for string data\n if (typeof data === 'string') {\n try {\n new URL(data);\n return true;\n } catch {\n return false;\n }\n }\n\n return false;\n});\n\n/**\n * Enhanced data setter with validation and error handling\n * @param newData - New GeoJSON data to set\n */\nfunction handleSetData(newData: GeoJSONSourceSpecification['data']): void {\n try {\n if (!newData) return;\n\n // Validate data before setting\n if (typeof newData === 'object' && 'type' in newData) {\n if (!['FeatureCollection', 'Feature'].includes(newData.type)) {\n logError('Invalid GeoJSON type:', newData.type);\n return;\n }\n }\n\n setData(newData);\n lastDataUpdate.value = newData;\n\n // Emit data update event\n emits('data-update', newData);\n props.onDataUpdate?.(newData);\n } catch (error) {\n logError('Error setting GeoJSON source data:', error);\n emits('error', error);\n props.onError?.(error);\n }\n}\n\n// Enhanced GeoJSON source with comprehensive error handling\nconst {\n sourceId,\n getSource,\n setData,\n removeSource,\n refreshSource,\n sourceStatus,\n isSourceReady,\n} = useCreateGeoJsonSource({\n map: mapInstance,\n id: props.id,\n data: props.data,\n options: props.options,\n debug: props.debug,\n register: (actions) => {\n try {\n const enhancedActions = {\n ...actions,\n // Additional enhanced methods\n isSourceRegistered: isSourceRegistered.value,\n lastDataUpdate: lastDataUpdate.value,\n isDataValid: isDataValid.value,\n };\n\n props.register?.(enhancedActions);\n emits('register', enhancedActions);\n\n isSourceRegistered.value = true;\n\n // Emit load event\n if (actions.getSource.value) {\n emits('load', actions.getSource.value);\n props.onLoad?.(actions.getSource.value);\n }\n } catch (error) {\n logError('Error registering GeoJSON source:', error);\n emits('error', error);\n props.onError?.(error);\n }\n },\n});\n\n// Provide source to child components\nprovide(SourceProvideKey, getSource);\n\n// Enhanced debounced data watcher with validation and error handling for better performance\nconst stopDataWatcher = useDebouncedWatch(\n () => props.data,\n (newData, oldData) => {\n if (newData === oldData) return;\n\n try {\n if (newData && isDataValid.value) {\n handleSetData(newData);\n } else if (newData && !isDataValid.value) {\n const error = new Error('Invalid GeoJSON data format');\n logError('Invalid GeoJSON data provided:', newData);\n emits('error', error);\n props.onError?.(error);\n }\n } catch (error) {\n logError('Error in data watcher:', error);\n emits('error', error);\n props.onError?.(error);\n }\n },\n {\n delay: props.debounceDelay,\n deep: true,\n immediate: true,\n flush: 'post', // Optimize by running after DOM updates\n debug: props.debug,\n },\n);\n\n/**\n * Enhanced cleanup function for disposing resources\n */\nfunction cleanup(): void {\n try {\n if (props.autoCleanup) {\n // Stop debounced watcher\n stopDataWatcher();\n\n // Reset state\n isSourceRegistered.value = false;\n lastDataUpdate.value = undefined;\n\n // Remove source if still available\n if (isSourceReady) {\n removeSource();\n }\n }\n } catch (error) {\n logError('Error during GeoJSON source cleanup:', error);\n }\n}\n\n// Cleanup on component unmount\nonUnmounted(cleanup);\n\n// Expose source methods for parent components\ndefineExpose({\n sourceId,\n getSource,\n setData: handleSetData,\n removeSource,\n refreshSource,\n sourceStatus,\n isSourceReady,\n isSourceRegistered,\n isDataValid,\n lastDataUpdate,\n cleanup,\n});\n</script>\n\n<template>\n <!-- Main content slot -->\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, watch, computed, onUnmounted, shallowRef } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateFillLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n FillLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n FillLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for FillLayer component\n * Defines all configurable properties for a MapLibre GL Fill Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the fill layer */\n style: FillLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for FillLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, shallowRef(null));\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n) => {\n emits('register', actions, map);\n};\n\n// Create fill layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateFillLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useLayerEventListener, useCreateCircleLayer } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n CircleLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n CircleLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for CircleLayer component\n * Defines all configurable properties for a MapLibre GL Circle Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the circle layer */\n style: CircleLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Enable debug logging */\n debug: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for CircleLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults and performance optimizations\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n debug: false,\n filter: () => ['all'] as FilterSpecification,\n style: () => ({}) as CircleLayerStyle,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create circle layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateCircleLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateLineLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n LineLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n LineLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for LineLayer component\n * Defines all configurable properties for a MapLibre GL Line Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the line layer */\n style: LineLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for LineLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create line layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateLineLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateSymbolLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n SymbolLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n SymbolLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for SymbolLayer component\n * Defines all configurable properties for a MapLibre GL Symbol Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the symbol layer */\n style: SymbolLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for SymbolLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create symbol layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateSymbolLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, computed, watch, onMounted } from 'vue';\nimport { useCreateImage, useLogger } from '@libs/composables';\nimport { MapProvideKey } from '@libs/enums';\nimport type { ImageDatas } from '@libs/types';\nimport type { StyleImageMetadata } from 'maplibre-gl';\n\n/**\n * Interface for individual image items\n */\ninterface ImageItem {\n /** Unique identifier for the image */\n id: string;\n /** Image data (URL string or ImageData/HTMLImageElement) */\n image: ImageDatas | string;\n /** Optional image metadata and options */\n options?: Partial<StyleImageMetadata>;\n}\n\n/**\n * Props interface for Image component\n * Manages multiple images for MapLibre GL\n */\ninterface ImageProps {\n /** Array of images to load */\n images: ImageItem[];\n /** Default options applied to all images */\n options?: Partial<StyleImageMetadata>;\n /** Whether to show loading state */\n showLoading?: boolean;\n /** Whether to enable debug logging */\n debug?: boolean;\n /**\n * Force recreation when image dimensions change instead of throwing error.\n * When true (default), images are always removed and re-added to prevent dimension mismatch errors.\n * This solves the common \"width and height must be the same as the previous version\" error.\n */\n forceRecreateOnDimensionChange?: boolean;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<ImageProps>(), {\n images: () => [],\n showLoading: true,\n forceRecreateOnDimensionChange: true,\n});\n\nconst { logError } = useLogger(props.debug);\n\n// Reactive state\nconst loading = ref(true);\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance\nconst hasImages = computed(() => props.images.length > 0);\n\n/**\n * Enhanced image loading function with error handling and progress tracking\n * @param images - Array of images to load\n */\nasync function loadImages(images: ImageItem[]): Promise<void> {\n if (!images.length) {\n loading.value = false;\n return;\n }\n\n loading.value = true;\n\n try {\n const loadPromises = images.map(async (image) => {\n try {\n const actions = useCreateImage({\n map: mapInstance,\n id: image.id,\n image: image.image,\n options: image.options || props.options,\n debug: props.debug,\n forceRecreateOnDimensionChange: props.forceRecreateOnDimensionChange,\n });\n await actions.loadPromise;\n } catch (error) {\n const errorMessage = `Failed to load image ${image.id}: ${error}`;\n logError(errorMessage);\n }\n });\n\n await Promise.allSettled(loadPromises);\n } catch (error) {\n logError('Error loading images:', error);\n } finally {\n loading.value = false;\n }\n}\n\n// Watch for changes in images prop\nwatch(\n () => props.images,\n (newImages) => {\n if (newImages.length > 0) {\n loadImages(newImages);\n }\n },\n { deep: true, immediate: false },\n);\n\n// Load images on mount\nonMounted(() => {\n if (hasImages.value) {\n loadImages(props.images);\n } else {\n loading.value = false;\n }\n});\n</script>\n<template>\n <slot v-if=\"!loading\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, useSlots, watch, computed, shallowRef } from 'vue';\nimport { MapProvideKey } from '@libs/enums';\nimport { useCreateMarker } from '@libs/composables';\nimport type { Anchor } from '@libs/types';\nimport type {\n LngLatLike,\n Alignment,\n PointLike,\n MarkerOptions,\n Popup,\n} from 'maplibre-gl';\n\n/**\n * Props interface for Marker component\n * Defines all configurable properties for a MapLibre GL Marker\n */\ninterface MarkerProps {\n /** Geographic coordinates for the marker */\n lnglat: LngLatLike;\n /** Popup to associate with the marker */\n popup: Popup;\n /** Marker configuration options */\n options: MarkerOptions;\n /** Whether the marker is draggable */\n draggable: boolean;\n /** Custom HTML element for the marker */\n element: HTMLElement | undefined;\n /** Offset from the marker's position */\n offset: PointLike | undefined;\n /** Anchor point for the marker */\n anchor: Anchor | undefined;\n /** Color of the default marker */\n color: string | undefined;\n /** Tolerance for click events */\n clickTolerance: number | undefined;\n /** Rotation angle in degrees */\n rotation: number | undefined;\n /** Rotation alignment relative to the map */\n rotationAlignment: Alignment | undefined;\n /** Pitch alignment relative to the map */\n pitchAlignment: Alignment | undefined;\n /** Scale factor for the marker */\n scale: number | undefined;\n /** Opacity when marker is occluded */\n occludedOpacity: number | undefined;\n}\n\n/**\n * Events interface for Marker component\n * Defines all events that can be emitted by the marker\n */\ninterface Emits {\n /** Fired when marker drag starts */\n (e: 'dragstart', ev: Event): void;\n /** Fired during marker drag */\n (e: 'drag', ev: Event): void;\n /** Fired when marker drag ends */\n (e: 'dragend', ev: Event): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<MarkerProps>>(), {\n options: () => ({}),\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Slots for custom marker content\nconst slots = useSlots();\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst markerElRef = ref<HTMLElement>();\n\n// Computed properties for better performance\nconst hasCustomElement = computed(() => Boolean(slots.default?.()));\n\nconst markerOptions = computed(() => ({\n ...props.options,\n ...(props.draggable !== undefined && { draggable: props.draggable }),\n ...(props.offset !== undefined && { offset: props.offset }),\n ...(props.anchor !== undefined && { anchor: props.anchor }),\n ...(props.color !== undefined && { color: props.color }),\n ...(props.clickTolerance !== undefined && {\n clickTolerance: props.clickTolerance,\n }),\n ...(props.rotation !== undefined && { rotation: props.rotation }),\n ...(props.rotationAlignment !== undefined && {\n rotationAlignment: props.rotationAlignment,\n }),\n ...(props.pitchAlignment !== undefined && {\n pitchAlignment: props.pitchAlignment,\n }),\n ...(props.scale !== undefined && { scale: props.scale }),\n ...(props.occludedOpacity !== undefined && {\n occludedOpacity: props.occludedOpacity,\n }),\n}));\n\n// Enhanced event handlers with error handling\nconst eventHandlers = {\n dragstart: (ev: Event) => {\n emits('dragstart', ev);\n },\n drag: (ev: Event) => {\n emits('drag', ev);\n },\n dragend: (ev: Event) => {\n emits('dragend', ev);\n },\n};\n\n// Create marker with optimized configuration\nconst { setDraggable, setLngLat } = useCreateMarker({\n map: mapInstance,\n el: hasCustomElement.value ? markerElRef : undefined,\n lnglat: props.lnglat,\n popup: props.popup,\n options: markerOptions.value,\n on: eventHandlers,\n});\n\n// Reactive watchers for prop changes with error handling\nwatch(\n () => props.lnglat,\n (newLnglat) => {\n if (newLnglat) {\n setLngLat(newLnglat);\n }\n },\n { deep: true },\n);\n\nwatch(\n () => props.draggable,\n (newDraggable) => {\n if (newDraggable !== undefined) {\n setDraggable(newDraggable);\n }\n },\n);\n</script>\n<template>\n <div ref=\"markerElRef\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, watch, computed, shallowRef } from 'vue';\nimport { MapProvideKey } from '@libs/enums';\nimport { useCreatePopup } from '@libs/composables';\nimport type { LngLatLike, PopupOptions } from 'maplibre-gl';\n\n/**\n * Props interface for Popup component\n * Defines all configurable properties for a MapLibre GL Popup\n */\ninterface PopupProps {\n /** CSS class name for the popup */\n className: string;\n /** Geographic coordinates for the popup */\n lnglat: LngLatLike;\n /** Whether the popup is visible */\n show: boolean;\n /** Whether to attach popup to the map */\n withMap: boolean;\n /** Popup configuration options */\n options: PopupOptions;\n /** HTML content for the popup */\n html: string;\n /** Maximum width of the popup */\n maxWidth?: string;\n /** Whether to show close button */\n closeButton?: boolean;\n /** Whether to close on map click */\n closeOnClick?: boolean;\n /** Whether to close on escape key */\n closeOnEscape?: boolean;\n}\n\n/**\n * Events interface for Popup component\n * Defines all events that can be emitted by the popup\n */\ninterface Emits {\n /** Fired when popup is closed */\n (event: 'close'): void;\n /** Fired when popup is opened */\n (event: 'open'): void;\n /** Fired when show state changes (for v-model support) */\n (event: 'update:show', show: boolean): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<PopupProps>>(), {\n show: true,\n withMap: true,\n closeButton: true,\n closeOnClick: true,\n closeOnEscape: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst popupElRef = ref<HTMLElement>();\n\n// Computed properties for better performance\nconst popupOptions = computed(() => ({\n ...props.options,\n className: props.className,\n maxWidth: props.maxWidth,\n closeButton: props.closeButton,\n closeOnClick: props.closeOnClick,\n closeOnEscape: props.closeOnEscape,\n}));\n\n// Enhanced event handlers with error handling\nconst eventHandlers = {\n open: () => {\n emits('open');\n emits('update:show', true);\n },\n close: () => {\n emits('close');\n emits('update:show', false);\n },\n};\n\n// Create popup with optimized configuration\nconst { setLngLat, show, hide } = useCreatePopup({\n map: mapInstance,\n el: popupElRef,\n lnglat: props.lnglat,\n html: props.html,\n show: props.show,\n withMap: props.withMap,\n options: popupOptions.value,\n on: eventHandlers,\n});\n\n// Reactive watchers for prop changes with error handling\nwatch(\n () => props.show,\n (isShow) => {\n if (isShow) show();\n else hide();\n },\n);\n\nwatch(\n () => props.lnglat,\n (newLnglat) => {\n if (newLnglat) {\n setLngLat(newLnglat);\n }\n },\n { deep: true },\n);\n</script>\n<template>\n <div ref=\"popupElRef\" class=\"Maplibregl-popup-content-inner\">\n <slot />\n </div>\n</template>\n"],"names":["MapCreationStatus","_createElementBlock","containerId","containerClass","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"components-D-FQXhcJ.js","sources":["../libs/enums/MapProvideKey.ts","../libs/enums/MaplibreEnum.ts","../libs/enums/MaplibreLayerEnum.ts","../libs/components/Maplibre.vue","../libs/components/GeolocateControls.vue","../libs/components/GeoJsonSource.vue","../libs/components/FillLayer.vue","../libs/components/CircleLayer.vue","../libs/components/LineLayer.vue","../libs/components/SymbolLayer.vue","../libs/components/Image.vue","../libs/components/Marker.vue","../libs/components/Popup.vue"],"sourcesContent":["import type { ComputedRef, InjectionKey, ShallowRef } from 'vue';\nimport type { GeoJSONSource, Map, SourceSpecification } from 'maplibre-gl';\nimport type { Nullable } from '@libs/types';\n\nexport const MapProvideKey = Symbol() as InjectionKey<\n ShallowRef<Nullable<Map>> | ComputedRef<Nullable<Map>>\n>;\n\nexport const SourceProvideKey = Symbol() as InjectionKey<\n | ShallowRef<Nullable<SourceSpecification | GeoJSONSource>>\n | ComputedRef<Nullable<SourceSpecification | GeoJSONSource>>\n>;\n","import type { GeolocateEventTypes, MapEventTypes } from '@libs/types';\n\nexport enum MapCreationStatus {\n NotInitialized = 'not-initialized',\n Initializing = 'initializing',\n Loading = 'loading',\n Loaded = 'loaded',\n Error = 'error',\n Destroyed = 'destroyed',\n}\n\nexport const MaplibreEvents: (keyof MapEventTypes)[] = [\n 'error',\n 'load',\n 'idle',\n 'remove',\n 'render',\n 'resize',\n 'webglcontextlost',\n 'webglcontextrestored',\n 'dataloading',\n 'data',\n 'tiledataloading',\n 'sourcedataloading',\n 'sourcedata',\n 'styledata',\n 'styleimagemissing',\n 'dataabort',\n 'sourcedataabort',\n 'boxzoomcancel',\n 'boxzoomstart',\n 'boxzoomend',\n 'touchcancel',\n 'touchmove',\n 'touchend',\n 'touchstart',\n 'click',\n 'contextmenu',\n 'dblclick',\n 'mousemove',\n 'mouseup',\n 'mousedown',\n 'mouseout',\n 'mouseover',\n 'movestart',\n 'move',\n 'moveend',\n 'zoomstart',\n 'zoom',\n 'zoomend',\n 'rotatestart',\n 'rotate',\n 'rotateend',\n 'dragstart',\n 'drag',\n 'dragend',\n 'pitchstart',\n 'pitch',\n 'pitchend',\n 'wheel',\n 'terrain',\n];\n\nexport const GeolocateEvents: (keyof GeolocateEventTypes)[] = [\n 'geolocate',\n 'error',\n 'outofmaxbounds',\n 'trackuserlocationstart',\n 'trackuserlocationend',\n];\n","import type { MapLayerEventType } from 'maplibre-gl';\n\nexport const MaplibreLayerEvents: (keyof MapLayerEventType)[] = [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n 'touchstart',\n 'touchend',\n 'touchcancel',\n];\n","<script lang=\"ts\" setup>\nimport {\n ref,\n provide,\n computed,\n unref,\n watch,\n nextTick,\n onBeforeMount,\n onUnmounted,\n watchEffect,\n shallowRef,\n} from 'vue';\nimport { MapProvideKey, MaplibreEvents, MapCreationStatus } from '@libs/enums';\nimport {\n useCreateMaplibre,\n useMapEventListener,\n useLogger,\n useOptimizedComputed,\n} from '@libs/composables';\nimport type { CreateMaplibreActions, MaplibreActions } from '@libs/types';\nimport type {\n Map,\n MapContextEvent,\n MapDataEvent,\n MapEventType,\n MapLibreZoomEvent,\n MapMouseEvent,\n MapOptions,\n MapSourceDataEvent,\n MapTouchEvent,\n MapWheelEvent,\n} from 'maplibre-gl';\n\n/**\n * Enhanced Maplibre component props with comprehensive configuration options\n */\ninterface MaplibreProps {\n /** Map configuration options */\n options?: Partial<MapOptions>;\n /** Callback for registering map actions */\n register?: (actions: MaplibreActions) => void;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Container ID for the map element */\n containerId?: string;\n /** Custom container class names */\n containerClass?: string;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Load success callback */\n onLoad?: (map: Map) => void;\n}\n\ninterface Emits {\n (e: keyof MapEventType, ev: any): void;\n (e: 'register', actions: MaplibreActions): void;\n (\n e: 'error' | 'load' | 'idle' | 'remove' | 'render' | 'resize',\n ev: Event,\n ): void;\n (e: 'webglcontextlost' | 'webglcontextrestored', ev: MapContextEvent): void;\n (\n e: 'dataloading' | 'data' | 'tiledataloading' | 'dataabort',\n ev: MapDataEvent,\n ): void;\n (\n e: 'sourcedataloading' | 'sourcedata' | 'sourcedataabort',\n ev: MapSourceDataEvent,\n ): void;\n (e: 'styledata', ev: Event): void;\n (e: 'styleimagemissing', ev: Event): void;\n (\n e: 'boxzoomcancel' | 'boxzoomstart' | 'boxzoomend',\n ev: MapLibreZoomEvent,\n ): void;\n (\n e: 'touchcancel' | 'touchmove' | 'touchend' | 'touchstart',\n ev: MapTouchEvent,\n ): void;\n (\n e:\n | 'click'\n | 'contextmenu'\n | 'dblclick'\n | 'mousemove'\n | 'mouseup'\n | 'mousedown'\n | 'mouseout'\n | 'mouseover',\n ev: MapMouseEvent,\n ): void;\n (\n e:\n | 'movestart'\n | 'move'\n | 'moveend'\n | 'zoomstart'\n | 'zoom'\n | 'zoomend'\n | 'rotatestart'\n | 'rotate'\n | 'rotateend'\n | 'dragstart'\n | 'drag'\n | 'dragend'\n | 'pitchstart'\n | 'pitch'\n | 'pitchend',\n ev: Event,\n ): void;\n (e: 'wheel', ev: MapWheelEvent): void;\n (e: 'terrain', ev: Event): void;\n}\n\nconst props = withDefaults(defineProps<MaplibreProps>(), {\n options: () => ({\n // Provide sensible defaults for better performance\n style: 'https://demotiles.maplibre.org/style.json',\n center: [0, 0] as [number, number],\n zoom: 1,\n pitch: 0,\n bearing: 0,\n antialias: true,\n optimizeForTerrain: true,\n // Performance optimizations\n preserveDrawingBuffer: false,\n refreshExpiredTiles: true,\n maxTileCacheSize: null,\n localIdeographFontFamily: false,\n transformRequest: undefined,\n collectResourceTiming: false,\n fadeDuration: 300,\n crossSourceCollisions: true,\n }),\n debug: false,\n autoCleanup: true,\n containerId: () => `maplibre-${Math.random().toString(36).substring(2, 11)}`,\n containerClass: '',\n});\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst innerOptions = ref<Partial<MapOptions>>();\nconst mapContainerRef = shallowRef<HTMLElement | null>(null);\nconst styleRef = ref(props.options.style as string);\n\nconst isComponentMounted = ref(false);\nconst mapCreationStatus = ref<MapCreationStatus>(\n MapCreationStatus.NotInitialized,\n);\n\n// Enhanced computed properties for better reactivity and performance\nconst mapOptions = useOptimizedComputed(\n () => {\n const baseOptions = { ...props.options };\n const mergedOptions = { ...baseOptions, ...innerOptions.value };\n return mergedOptions;\n },\n {\n deepEqual: true, // Use deep equality for complex objects\n },\n);\n\nconst isMapReady = computed(\n () => mapCreationStatus.value === MapCreationStatus.Loaded,\n);\nconst isMapLoading = computed(\n () => mapCreationStatus.value === MapCreationStatus.Loading,\n);\nconst hasMapError = computed(\n () => mapCreationStatus.value === MapCreationStatus.Error,\n);\n\n/**\n * Enhanced map options setter with validation and error handling\n * @param options - Partial map options to merge\n */\nfunction setMapOptions(options: Partial<MapOptions>): void {\n try {\n innerOptions.value = {\n ...(unref(mapOptions) || {}),\n ...options,\n };\n } catch (error) {\n logError('Error setting map options:', error, { options });\n }\n}\n\n// Enhanced map creation with comprehensive error handling and performance monitoring\nconst {\n mapInstance,\n\n setCenter,\n setBearing,\n setZoom,\n setPitch,\n setStyle,\n setMaxBounds,\n setMaxPitch,\n setMaxZoom,\n setMinPitch,\n setMinZoom,\n setRenderWorldCopies,\n} = useCreateMaplibre(mapContainerRef, styleRef, {\n ...unref(mapOptions),\n register: (actions: CreateMaplibreActions) => {\n try {\n const enhancedActions = {\n ...actions,\n setMapOptions,\n // Additional enhanced methods\n isMapReady: isMapReady.value,\n isMapLoading: isMapLoading.value,\n hasMapError: hasMapError.value,\n };\n\n props.register?.(enhancedActions as MaplibreActions);\n emits('register', enhancedActions as MaplibreActions);\n } catch (error) {\n logError('Error during map registration:', error);\n props.onError?.(error);\n }\n },\n onLoad: (map) => {\n try {\n mapCreationStatus.value = MapCreationStatus.Loaded;\n props.onLoad?.(map);\n } catch (error) {\n logError('Error in map load handler:', error);\n props.onError?.(error);\n }\n },\n onError: (error) => {\n try {\n mapCreationStatus.value = MapCreationStatus.Error;\n logError('Map creation error:', error);\n props.onError?.(error);\n } catch (handlerError) {\n logError('Error in error handler:', handlerError);\n }\n },\n debug: props.debug,\n});\n\n// Provide map instance to child components\nprovide(MapProvideKey, mapInstance);\n\n// Enhanced event listeners with error handling and performance monitoring\nMaplibreEvents.map((evt) => {\n return useMapEventListener({\n map: mapInstance,\n event: evt,\n on: (data) => {\n try {\n emits(evt as keyof MapEventType, data);\n } catch (error) {\n logError(`Error in ${evt} event handler:`, error, { data });\n }\n },\n debug: props.debug,\n });\n});\n\n// Create optimized watchers for map properties with null safety\nconst watchers = [\n watch(\n () => unref(mapOptions).center,\n (value) => value && setCenter(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).bearing,\n (value) => value !== undefined && setBearing(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).zoom,\n (value) => value !== undefined && setZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).pitch,\n (value) => value !== undefined && setPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).style,\n (value) => value && setStyle(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxBounds,\n (value) => value && setMaxBounds(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxPitch,\n (value) => value !== undefined && value !== null && setMaxPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).maxZoom,\n (value) => value !== undefined && value !== null && setMaxZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).minPitch,\n (value) => value !== undefined && value !== null && setMinPitch(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).minZoom,\n (value) => value !== undefined && value !== null && setMinZoom(value),\n { flush: 'post' },\n ),\n watch(\n () => unref(mapOptions).renderWorldCopies,\n (value) => value !== undefined && setRenderWorldCopies(value),\n { flush: 'post' },\n ),\n];\n\n// Enhanced container management\nwatchEffect(async () => {\n try {\n await nextTick();\n\n if (mapContainerRef.value) {\n isComponentMounted.value = true;\n mapCreationStatus.value = MapCreationStatus.Initializing;\n } else {\n // Wait for next tick if container is not ready yet\n return;\n }\n } catch (error) {\n logError('Error in container creation watchEffect:', error);\n mapCreationStatus.value = MapCreationStatus.Error;\n props.onError?.(error);\n }\n});\n\n// Enhanced cleanup with comprehensive resource disposal\nfunction cleanup(): void {\n try {\n // Stop all watchers\n watchers.forEach((stopWatcher) => stopWatcher?.());\n\n // Reset state\n isComponentMounted.value = false;\n mapCreationStatus.value = MapCreationStatus.Destroyed;\n } catch (error) {\n logError('Error during cleanup:', error);\n }\n}\n\nonBeforeMount(() => {\n if (props.autoCleanup) {\n cleanup();\n }\n});\n\nonUnmounted(() => {\n if (props.autoCleanup) {\n cleanup();\n }\n});\n</script>\n\n<template>\n <div\n :id=\"containerId\"\n ref=\"mapContainerRef\"\n :class=\"['maplibre-container', containerClass]\"\n >\n <!-- Loading state -->\n <div v-if=\"isMapLoading\">\n <slot name=\"loading\"> </slot>\n </div>\n\n <!-- Error state -->\n <div v-if=\"hasMapError\">\n <slot name=\"error\"> </slot>\n </div>\n\n <!-- Map content -->\n <slot v-if=\"isMapReady || (!isMapLoading && !hasMapError)\" />\n </div>\n</template>\n\n<style lang=\"scss\">\n.maplibre-container {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport {\n inject,\n ref,\n watchEffect,\n computed,\n onUnmounted,\n shallowRef,\n} from 'vue';\nimport { MapProvideKey, GeolocateEvents } from '@libs/enums';\nimport {\n useGeolocateControl,\n useGeolocateEventListener,\n useLogger,\n} from '@libs/composables';\nimport type {\n GeolocateSuccess,\n GeolocationPositionError,\n GeolocateEventTypes,\n} from '@libs/types';\nimport type {\n ControlPosition,\n GeolocateControl,\n GeolocateControlOptions,\n} from 'maplibre-gl';\n\n/**\n * Enhanced GeolocateControl component props with comprehensive configuration options\n */\ninterface GeolocateControlProps {\n /** Position of the control on the map */\n position?: ControlPosition;\n /** Geolocate control configuration options */\n options?: GeolocateControlOptions;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Success callback for geolocation */\n onGeolocate?: (data: GeolocateSuccess) => void;\n /** Callback when user location tracking starts */\n onTrackingStart?: (data: GeolocateSuccess) => void;\n /** Callback when user location tracking ends */\n onTrackingEnd?: (data: GeolocateSuccess) => void;\n /** Callback when user location is out of max bounds */\n onOutOfMaxBounds?: (data: GeolocateSuccess) => void;\n}\n\n/**\n * Enhanced event emits with proper typing and comprehensive event coverage\n */\ninterface Emits {\n (e: keyof GeolocateEventTypes, ev: any): void;\n (e: 'register', ev: GeolocateControl): void;\n (e: 'geolocate', ev: GeolocateSuccess): void;\n (e: 'error', ev: GeolocationPositionError): void;\n (e: 'outofmaxbounds', ev: GeolocateSuccess): void;\n (e: 'trackuserlocationstart', ev: GeolocateSuccess): void;\n (e: 'trackuserlocationend', ev: GeolocateSuccess): void;\n}\n\nconst props = withDefaults(defineProps<GeolocateControlProps>(), {\n position: 'bottom-right',\n options: () => ({}),\n debug: false,\n autoCleanup: true,\n});\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst isControlRegistered = ref(false);\nconst controlError = ref<any>(null);\n\n// Computed properties for better reactivity and performance\nconst hasControlError = computed(() => !!controlError.value);\n\n// Enhanced geolocate control with comprehensive error handling\nconst { geolocateControl, isControlAdded, removeControl, addControl, trigger } =\n useGeolocateControl({\n map: mapInstance,\n position: props.position,\n options: props.options,\n debug: props.debug,\n });\n\n/**\n * Enhanced event handler with error handling and callback support\n * @param eventType - The type of geolocate event\n * @param data - Event data\n */\nfunction handleGeolocateEvent(\n eventType: keyof GeolocateEventTypes,\n data: any,\n): void {\n try {\n // Emit the event\n emits(eventType, data);\n\n // Call specific callback handlers\n switch (eventType) {\n case 'geolocate':\n props.onGeolocate?.(data as GeolocateSuccess);\n break;\n case 'error':\n controlError.value = data;\n props.onError?.(data);\n break;\n case 'trackuserlocationstart':\n props.onTrackingStart?.(data as GeolocateSuccess);\n break;\n case 'trackuserlocationend':\n props.onTrackingEnd?.(data as GeolocateSuccess);\n break;\n case 'outofmaxbounds':\n props.onOutOfMaxBounds?.(data as GeolocateSuccess);\n break;\n default:\n break;\n }\n } catch (error) {\n logError(`Error handling ${eventType} event:`, error, { data });\n controlError.value = error;\n props.onError?.(error);\n }\n}\n\n// Enhanced control registration with error handling\nwatchEffect(() => {\n try {\n if (geolocateControl.value && !isControlRegistered.value) {\n emits('register', geolocateControl.value);\n isControlRegistered.value = true;\n controlError.value = null;\n }\n } catch (error) {\n logError('Error registering geolocate control:', error);\n controlError.value = error;\n props.onError?.(error);\n }\n});\n\n// Enhanced event listeners with error handling and performance optimization\nGeolocateEvents.map((evt) => {\n return useGeolocateEventListener({\n geolocate: geolocateControl,\n event: evt,\n on: (data) => handleGeolocateEvent(evt, data),\n debug: props.debug,\n });\n});\n\n/**\n * Enhanced cleanup function for disposing resources\n */\nfunction cleanup(): void {\n try {\n if (props.autoCleanup) {\n // Reset state\n isControlRegistered.value = false;\n controlError.value = null;\n\n // Remove control if still added\n if (isControlAdded.value) {\n removeControl();\n }\n }\n } catch (error) {\n logError('Error during geolocate control cleanup:', error);\n }\n}\n\n// Cleanup on component unmount\nonUnmounted(cleanup);\n\n// Expose control methods for parent components\ndefineExpose({\n geolocateControl,\n isControlAdded,\n isControlRegistered,\n hasControlError,\n controlError,\n addControl,\n removeControl,\n trigger,\n cleanup,\n});\n</script>\n\n<template>\n <!-- Enhanced template with error state and accessibility -->\n <div v-if=\"hasControlError\">\n <slot name=\"error\"> </slot>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, provide, computed, onUnmounted, shallowRef } from 'vue';\nimport { MapProvideKey, SourceProvideKey } from '@libs/enums';\nimport {\n useCreateGeoJsonSource,\n useLogger,\n useDebouncedWatch,\n} from '@libs/composables';\nimport type { CreateGeoJsonSourceActions } from '@libs/composables';\nimport type { GeoJSONSource, GeoJSONSourceSpecification } from 'maplibre-gl';\n\n/**\n * Enhanced GeoJsonSource component props with comprehensive configuration options\n */\ninterface GeoJsonSourceProps {\n /** Unique identifier for the source */\n id?: string;\n /** GeoJSON data for the source */\n data?: GeoJSONSourceSpecification['data'];\n /** Additional source configuration options */\n options?: Partial<GeoJSONSourceSpecification>;\n /** Callback for registering source actions */\n register?: (actions: CreateGeoJsonSourceActions) => void;\n /** Enable debug logging */\n debug?: boolean;\n /** Automatically cleanup resources on unmount */\n autoCleanup?: boolean;\n /** Error handling callback */\n onError?: (error: any) => void;\n /** Source load success callback */\n onLoad?: (source: GeoJSONSource) => void;\n /** Data update callback */\n onDataUpdate?: (data: GeoJSONSourceSpecification['data']) => void;\n /** Debounce delay for data updates in milliseconds (default: 100) */\n debounceDelay?: number;\n}\n\n/**\n * Enhanced event emits with proper typing and comprehensive event coverage\n */\ninterface Emits {\n (e: 'register', actions: CreateGeoJsonSourceActions): void;\n (e: 'error', error: any): void;\n (e: 'load', source: any): void;\n (e: 'data-update', data: GeoJSONSourceSpecification['data']): void;\n}\n\nconst props = withDefaults(defineProps<GeoJsonSourceProps>(), {\n data: () => ({\n type: 'FeatureCollection',\n features: [],\n }),\n options: () => ({}),\n debug: false,\n autoCleanup: true,\n debounceDelay: 100,\n});\n\nconst emits = defineEmits<Emits>();\n\n// Enhanced logging and error handling\nconst { logError } = useLogger(props.debug);\n\n// Reactive state management\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst isSourceRegistered = ref(false);\nconst lastDataUpdate = shallowRef<GeoJSONSourceSpecification['data']>();\n\n// Computed properties for better reactivity and performance\nconst isDataValid = computed(() => {\n const data = props.data;\n if (!data) return false;\n\n // Basic GeoJSON validation\n if (typeof data === 'object' && 'type' in data) {\n return data.type === 'FeatureCollection' || data.type === 'Feature';\n }\n\n // URL validation for string data\n if (typeof data === 'string') {\n try {\n new URL(data);\n return true;\n } catch {\n return false;\n }\n }\n\n return false;\n});\n\n/**\n * Enhanced data setter with validation and error handling\n * @param newData - New GeoJSON data to set\n */\nfunction handleSetData(newData: GeoJSONSourceSpecification['data']): void {\n try {\n if (!newData) return;\n\n // Validate data before setting\n if (typeof newData === 'object' && 'type' in newData) {\n if (!['FeatureCollection', 'Feature'].includes(newData.type)) {\n logError('Invalid GeoJSON type:', newData.type);\n return;\n }\n }\n\n setData(newData);\n lastDataUpdate.value = newData;\n\n // Emit data update event\n emits('data-update', newData);\n props.onDataUpdate?.(newData);\n } catch (error) {\n logError('Error setting GeoJSON source data:', error);\n emits('error', error);\n props.onError?.(error);\n }\n}\n\n// Enhanced GeoJSON source with comprehensive error handling\nconst {\n sourceId,\n getSource,\n setData,\n removeSource,\n refreshSource,\n sourceStatus,\n isSourceReady,\n} = useCreateGeoJsonSource({\n map: mapInstance,\n id: props.id,\n data: props.data,\n options: props.options,\n debug: props.debug,\n register: (actions) => {\n try {\n const enhancedActions = {\n ...actions,\n // Additional enhanced methods\n isSourceRegistered: isSourceRegistered.value,\n lastDataUpdate: lastDataUpdate.value,\n isDataValid: isDataValid.value,\n };\n\n props.register?.(enhancedActions);\n emits('register', enhancedActions);\n\n isSourceRegistered.value = true;\n\n // Emit load event\n if (actions.getSource.value) {\n emits('load', actions.getSource.value);\n props.onLoad?.(actions.getSource.value);\n }\n } catch (error) {\n logError('Error registering GeoJSON source:', error);\n emits('error', error);\n props.onError?.(error);\n }\n },\n});\n\n// Provide source to child components\nprovide(SourceProvideKey, getSource);\n\n// Enhanced debounced data watcher with validation and error handling for better performance\nconst stopDataWatcher = useDebouncedWatch(\n () => props.data,\n (newData, oldData) => {\n if (newData === oldData) return;\n\n try {\n if (newData && isDataValid.value) {\n handleSetData(newData);\n } else if (newData && !isDataValid.value) {\n const error = new Error('Invalid GeoJSON data format');\n logError('Invalid GeoJSON data provided:', newData);\n emits('error', error);\n props.onError?.(error);\n }\n } catch (error) {\n logError('Error in data watcher:', error);\n emits('error', error);\n props.onError?.(error);\n }\n },\n {\n delay: props.debounceDelay,\n deep: true,\n immediate: true,\n flush: 'post', // Optimize by running after DOM updates\n debug: props.debug,\n },\n);\n\n/**\n * Enhanced cleanup function for disposing resources\n */\nfunction cleanup(): void {\n try {\n if (props.autoCleanup) {\n // Stop debounced watcher\n stopDataWatcher();\n\n // Reset state\n isSourceRegistered.value = false;\n lastDataUpdate.value = undefined;\n\n // Remove source if still available\n if (isSourceReady) {\n removeSource();\n }\n }\n } catch (error) {\n logError('Error during GeoJSON source cleanup:', error);\n }\n}\n\n// Cleanup on component unmount\nonUnmounted(cleanup);\n\n// Expose source methods for parent components\ndefineExpose({\n sourceId,\n getSource,\n setData: handleSetData,\n removeSource,\n refreshSource,\n sourceStatus,\n isSourceReady,\n isSourceRegistered,\n isDataValid,\n lastDataUpdate,\n cleanup,\n});\n</script>\n\n<template>\n <!-- Main content slot -->\n <slot />\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, watch, computed, onUnmounted, shallowRef } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateFillLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n FillLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n FillLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for FillLayer component\n * Defines all configurable properties for a MapLibre GL Fill Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the fill layer */\n style: FillLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for FillLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, shallowRef(null));\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<FillLayerSpecification>,\n map: Map,\n) => {\n emits('register', actions, map);\n};\n\n// Create fill layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateFillLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useLayerEventListener, useCreateCircleLayer } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n CircleLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n CircleLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for CircleLayer component\n * Defines all configurable properties for a MapLibre GL Circle Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the circle layer */\n style: CircleLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Enable debug logging */\n debug: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for CircleLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults and performance optimizations\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n debug: false,\n filter: () => ['all'] as FilterSpecification,\n style: () => ({}) as CircleLayerStyle,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<CircleLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create circle layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateCircleLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateLineLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n LineLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n LineLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for LineLayer component\n * Defines all configurable properties for a MapLibre GL Line Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the line layer */\n style: LineLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for LineLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<LineLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create line layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateLineLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MaplibreLayerEvents,\n} from '@libs/enums';\nimport { useCreateSymbolLayer, useLayerEventListener } from '@libs/composables';\nimport type {\n CreateLayerActions,\n AnyLayout,\n SymbolLayerStyle,\n} from '@libs/types';\nimport type {\n Map,\n MapLayerEventType,\n MapLayerMouseEvent,\n MapLayerTouchEvent,\n FilterSpecification,\n SymbolLayerSpecification,\n} from 'maplibre-gl';\n\n/**\n * Props interface for SymbolLayer component\n * Defines all configurable properties for a MapLibre GL Symbol Layer\n */\ninterface LayerProps {\n /** Unique identifier for the layer */\n id: string;\n /** Filter expression to apply to the layer */\n filter: FilterSpecification;\n /** Style configuration for the symbol layer */\n style: SymbolLayerStyle;\n /** Maximum zoom level for layer visibility */\n maxzoom: number;\n /** Minimum zoom level for layer visibility */\n minzoom: number;\n /** Arbitrary metadata for the layer */\n metadata: object;\n /** Data source for the layer */\n source: string | object;\n /** Source layer name for vector sources */\n sourceLayer: string;\n /** ID of layer before which to insert this layer */\n beforeId: string;\n /** Whether the layer is visible */\n visible: boolean;\n /** Callback function to register layer actions */\n register: (\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n ) => void;\n}\n\n/**\n * Events interface for SymbolLayer component\n * Defines all events that can be emitted by the layer\n */\ninterface Emits {\n /** Generic layer event */\n (e: keyof MapLayerEventType, ev: any): void;\n /** Layer registration event */\n (\n e: 'register',\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n ): void;\n /** Mouse events */\n (\n e:\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mouseup'\n | 'mousemove'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseover'\n | 'mouseout'\n | 'contextmenu',\n ev: MapLayerMouseEvent,\n ): void;\n /** Touch events */\n (e: 'touchstart' | 'touchend' | 'touchcancel', ev: MapLayerTouchEvent): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<LayerProps>>(), {\n visible: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst sourceData = inject(SourceProvideKey, ref(null));\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance and reactivity\nconst effectiveSource = computed(() => props.source || sourceData.value);\n\nconst visibilityStyle = computed(\n (): AnyLayout => ({\n visibility: props.visible ? 'visible' : 'none',\n }),\n);\n\nconst mergedStyle = computed(() => ({\n ...props.style,\n ...visibilityStyle.value,\n}));\n\n// Enhanced register callback with proper typing\nconst handleRegister = (\n actions: CreateLayerActions<SymbolLayerSpecification>,\n map: Map,\n) => {\n props.register?.(actions, map);\n emits('register', actions, map);\n};\n\n// Create symbol layer with optimized configuration\nconst {\n getLayer,\n setBeforeId,\n setFilter,\n setStyle,\n setZoomRange,\n setLayoutProperty,\n} = useCreateSymbolLayer({\n map: mapInstance,\n source: effectiveSource,\n style: mergedStyle.value,\n filter: props.filter || ['all'],\n id: props.id,\n maxzoom: props.maxzoom || 22,\n minzoom: props.minzoom || 1,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMaplibreLayerEvents.forEach((evt) => {\n useLayerEventListener({\n map: mapInstance,\n layer: getLayer,\n event: evt,\n on: (data) => {\n emits(evt, data);\n },\n });\n});\n\n// Optimized single watcher for all prop changes to reduce overhead\nconst stopPropsWatcher = watch(\n () => ({\n filter: props.filter,\n style: props.style,\n maxzoom: props.maxzoom,\n minzoom: props.minzoom,\n beforeId: props.beforeId,\n visible: props.visible,\n }),\n (newProps, oldProps) => {\n // Only update if values actually changed to prevent unnecessary operations\n if (newProps.filter !== oldProps?.filter) {\n setFilter(newProps.filter);\n }\n if (newProps.style !== oldProps?.style) {\n setStyle(newProps.style);\n }\n if (\n newProps.maxzoom !== oldProps?.maxzoom ||\n newProps.minzoom !== oldProps?.minzoom\n ) {\n setZoomRange(newProps.minzoom, newProps.maxzoom);\n }\n if (newProps.beforeId !== oldProps?.beforeId) {\n setBeforeId(newProps.beforeId);\n }\n if (newProps.visible !== oldProps?.visible) {\n setLayoutProperty('visibility', newProps.visible ? 'visible' : 'none');\n }\n },\n {\n deep: true,\n flush: 'post', // Run after DOM updates for better performance\n },\n);\n\n// Enhanced cleanup\nonUnmounted(() => {\n stopPropsWatcher();\n});\n</script>\n<template></template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, computed, watch, onMounted } from 'vue';\nimport { useCreateImage, useLogger } from '@libs/composables';\nimport { MapProvideKey } from '@libs/enums';\nimport type { ImageDatas } from '@libs/types';\nimport type { StyleImageMetadata } from 'maplibre-gl';\n\n/**\n * Interface for individual image items\n */\ninterface ImageItem {\n /** Unique identifier for the image */\n id: string;\n /** Image data (URL string or ImageData/HTMLImageElement) */\n image: ImageDatas | string;\n /** Optional image metadata and options */\n options?: Partial<StyleImageMetadata>;\n}\n\n/**\n * Props interface for Image component\n * Manages multiple images for MapLibre GL\n */\ninterface ImageProps {\n /** Array of images to load */\n images: ImageItem[];\n /** Default options applied to all images */\n options?: Partial<StyleImageMetadata>;\n /** Whether to show loading state */\n showLoading?: boolean;\n /** Whether to enable debug logging */\n debug?: boolean;\n /**\n * Force recreation when image dimensions change instead of throwing error.\n * When true (default), images are always removed and re-added to prevent dimension mismatch errors.\n * This solves the common \"width and height must be the same as the previous version\" error.\n */\n forceRecreateOnDimensionChange?: boolean;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<ImageProps>(), {\n images: () => [],\n showLoading: true,\n forceRecreateOnDimensionChange: true,\n});\n\nconst { logError } = useLogger(props.debug);\n\n// Reactive state\nconst loading = ref(true);\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, ref(null));\n\n// Computed properties for better performance\nconst hasImages = computed(() => props.images.length > 0);\n\n/**\n * Enhanced image loading function with error handling and progress tracking\n * @param images - Array of images to load\n */\nasync function loadImages(images: ImageItem[]): Promise<void> {\n if (!images.length) {\n loading.value = false;\n return;\n }\n\n loading.value = true;\n\n try {\n const loadPromises = images.map(async (image) => {\n try {\n const actions = useCreateImage({\n map: mapInstance,\n id: image.id,\n image: image.image,\n options: image.options || props.options,\n debug: props.debug,\n forceRecreateOnDimensionChange: props.forceRecreateOnDimensionChange,\n });\n await actions.loadPromise;\n } catch (error) {\n const errorMessage = `Failed to load image ${image.id}: ${error}`;\n logError(errorMessage);\n }\n });\n\n await Promise.allSettled(loadPromises);\n } catch (error) {\n logError('Error loading images:', error);\n } finally {\n loading.value = false;\n }\n}\n\n// Watch for changes in images prop\nwatch(\n () => props.images,\n (newImages) => {\n if (newImages.length > 0) {\n loadImages(newImages);\n }\n },\n { deep: true, immediate: false },\n);\n\n// Load images on mount\nonMounted(() => {\n if (hasImages.value) {\n loadImages(props.images);\n } else {\n loading.value = false;\n }\n});\n</script>\n<template>\n <slot v-if=\"!loading\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, useSlots, watch, computed, shallowRef } from 'vue';\nimport { MapProvideKey } from '@libs/enums';\nimport { useCreateMarker } from '@libs/composables';\nimport type { Anchor } from '@libs/types';\nimport type {\n LngLatLike,\n Alignment,\n PointLike,\n MarkerOptions,\n Popup,\n} from 'maplibre-gl';\n\n/**\n * Props interface for Marker component\n * Defines all configurable properties for a MapLibre GL Marker\n */\ninterface MarkerProps {\n /** Geographic coordinates for the marker */\n lnglat: LngLatLike;\n /** Popup to associate with the marker */\n popup: Popup;\n /** Marker configuration options */\n options: MarkerOptions;\n /** Whether the marker is draggable */\n draggable: boolean;\n /** Custom HTML element for the marker */\n element: HTMLElement | undefined;\n /** Offset from the marker's position */\n offset: PointLike | undefined;\n /** Anchor point for the marker */\n anchor: Anchor | undefined;\n /** Color of the default marker */\n color: string | undefined;\n /** Tolerance for click events */\n clickTolerance: number | undefined;\n /** Rotation angle in degrees */\n rotation: number | undefined;\n /** Rotation alignment relative to the map */\n rotationAlignment: Alignment | undefined;\n /** Pitch alignment relative to the map */\n pitchAlignment: Alignment | undefined;\n /** Scale factor for the marker */\n scale: number | undefined;\n /** Opacity when marker is occluded */\n occludedOpacity: number | undefined;\n}\n\n/**\n * Events interface for Marker component\n * Defines all events that can be emitted by the marker\n */\ninterface Emits {\n /** Fired when marker drag starts */\n (e: 'dragstart', ev: Event): void;\n /** Fired during marker drag */\n (e: 'drag', ev: Event): void;\n /** Fired when marker drag ends */\n (e: 'dragend', ev: Event): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<MarkerProps>>(), {\n options: () => ({}),\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Slots for custom marker content\nconst slots = useSlots();\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst markerElRef = ref<HTMLElement>();\n\n// Computed properties for better performance\nconst hasCustomElement = computed(() => Boolean(slots.default?.()));\n\nconst markerOptions = computed(() => ({\n ...props.options,\n ...(props.draggable !== undefined && { draggable: props.draggable }),\n ...(props.offset !== undefined && { offset: props.offset }),\n ...(props.anchor !== undefined && { anchor: props.anchor }),\n ...(props.color !== undefined && { color: props.color }),\n ...(props.clickTolerance !== undefined && {\n clickTolerance: props.clickTolerance,\n }),\n ...(props.rotation !== undefined && { rotation: props.rotation }),\n ...(props.rotationAlignment !== undefined && {\n rotationAlignment: props.rotationAlignment,\n }),\n ...(props.pitchAlignment !== undefined && {\n pitchAlignment: props.pitchAlignment,\n }),\n ...(props.scale !== undefined && { scale: props.scale }),\n ...(props.occludedOpacity !== undefined && {\n occludedOpacity: props.occludedOpacity,\n }),\n}));\n\n// Enhanced event handlers with error handling\nconst eventHandlers = {\n dragstart: (ev: Event) => {\n emits('dragstart', ev);\n },\n drag: (ev: Event) => {\n emits('drag', ev);\n },\n dragend: (ev: Event) => {\n emits('dragend', ev);\n },\n};\n\n// Create marker with optimized configuration\nconst { setDraggable, setLngLat } = useCreateMarker({\n map: mapInstance,\n el: hasCustomElement.value ? markerElRef : undefined,\n lnglat: props.lnglat,\n popup: props.popup,\n options: markerOptions.value,\n on: eventHandlers,\n});\n\n// Reactive watchers for prop changes with error handling\nwatch(\n () => props.lnglat,\n (newLnglat) => {\n if (newLnglat) {\n setLngLat(newLnglat);\n }\n },\n { deep: true },\n);\n\nwatch(\n () => props.draggable,\n (newDraggable) => {\n if (newDraggable !== undefined) {\n setDraggable(newDraggable);\n }\n },\n);\n</script>\n<template>\n <div ref=\"markerElRef\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, ref, watch, computed, shallowRef } from 'vue';\nimport { MapProvideKey } from '@libs/enums';\nimport { useCreatePopup } from '@libs/composables';\nimport type { LngLatLike, PopupOptions } from 'maplibre-gl';\n\n/**\n * Props interface for Popup component\n * Defines all configurable properties for a MapLibre GL Popup\n */\ninterface PopupProps {\n /** CSS class name for the popup */\n className: string;\n /** Geographic coordinates for the popup */\n lnglat: LngLatLike;\n /** Whether the popup is visible */\n show: boolean;\n /** Whether to attach popup to the map */\n withMap: boolean;\n /** Popup configuration options */\n options: PopupOptions;\n /** HTML content for the popup */\n html: string;\n /** Maximum width of the popup */\n maxWidth?: string;\n /** Whether to show close button */\n closeButton?: boolean;\n /** Whether to close on map click */\n closeOnClick?: boolean;\n /** Whether to close on escape key */\n closeOnEscape?: boolean;\n}\n\n/**\n * Events interface for Popup component\n * Defines all events that can be emitted by the popup\n */\ninterface Emits {\n /** Fired when popup is closed */\n (event: 'close'): void;\n /** Fired when popup is opened */\n (event: 'open'): void;\n /** Fired when show state changes (for v-model support) */\n (event: 'update:show', show: boolean): void;\n}\n\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<Partial<PopupProps>>(), {\n show: true,\n withMap: true,\n closeButton: true,\n closeOnClick: true,\n closeOnEscape: true,\n});\n\n// Component events\nconst emits = defineEmits<Emits>();\n\n// Injected dependencies\nconst mapInstance = inject(MapProvideKey, shallowRef(null));\nconst popupElRef = ref<HTMLElement>();\n\n// Computed properties for better performance\nconst popupOptions = computed(() => ({\n ...props.options,\n className: props.className,\n maxWidth: props.maxWidth,\n closeButton: props.closeButton,\n closeOnClick: props.closeOnClick,\n closeOnEscape: props.closeOnEscape,\n}));\n\n// Enhanced event handlers with error handling\nconst eventHandlers = {\n open: () => {\n emits('open');\n emits('update:show', true);\n },\n close: () => {\n emits('close');\n emits('update:show', false);\n },\n};\n\n// Create popup with optimized configuration\nconst { setLngLat, show, hide } = useCreatePopup({\n map: mapInstance,\n el: popupElRef,\n lnglat: props.lnglat,\n html: props.html,\n show: props.show,\n withMap: props.withMap,\n options: popupOptions.value,\n on: eventHandlers,\n});\n\n// Reactive watchers for prop changes with error handling\nwatch(\n () => props.show,\n (isShow) => {\n if (isShow) show();\n else hide();\n },\n);\n\nwatch(\n () => props.lnglat,\n (newLnglat) => {\n if (newLnglat) {\n setLngLat(newLnglat);\n }\n },\n { deep: true },\n);\n</script>\n<template>\n <div ref=\"popupElRef\" class=\"Maplibregl-popup-content-inner\">\n <slot />\n </div>\n</template>\n"],"names":["MapCreationStatus","_createElementBlock","containerId","containerClass","_renderSlot"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { CreateBaseLayerActions, Nullable, LayerTypes } from '../../types';
1
+ import { CreateBaseLayerActions, LayerTypes, Nullable } from '../../types';
2
+ import { FilterSpecification, LayerSpecification, Map, SourceSpecification } from 'maplibre-gl';
2
3
  import { MaybeRef } from 'vue';
3
- import { SourceSpecification, FilterSpecification, Map, LayerSpecification } from 'maplibre-gl';
4
4
 
5
5
  /**
6
6
  * Layer creation status enum for better state management
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateLayer.d.ts","sourceRoot":"","sources":["../../../libs/composables/layers/useCreateLayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,GAAG,EAEH,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,kBAAkB;IACpE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,mBAAmB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3E,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,kBAAkB,CACpE,SAAQ,sBAAsB,CAAC,KAAK,CAAC;IACrC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,EAAE;QACrB,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,KAAK,IAAI,CAAC;CACZ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,kBAAkB,EAC7D,GAAG,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAC/B,oBAAoB,CAAC,KAAK,CAAC,CAiW7B"}
1
+ {"version":3,"file":"useCreateLayer.d.ts","sourceRoot":"","sources":["../../../libs/composables/layers/useCreateLayer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,GAAG,EACH,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGpC;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,kBAAkB;IACpE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,mBAAmB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC3E,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,kBAAkB,CACpE,SAAQ,sBAAsB,CAAC,KAAK,CAAC;IACrC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,EAAE;QACrB,MAAM,CAAC,EAAE,mBAAmB,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9B,KAAK,IAAI,CAAC;CACZ;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,kBAAkB,EAC7D,GAAG,EAAE,oBAAoB,CAAC,KAAK,CAAC,GAC/B,oBAAoB,CAAC,KAAK,CAAC,CAkW7B"}
@@ -1,8 +1,9 @@
1
- export * from './useCreateMaplibre';
2
- export * from './useMaplibre';
3
- export * from './useLayer';
4
1
  export * from './useCreateImage';
5
- export * from './useGeoJsonSource';
6
- export * from './useCreatePopup';
2
+ export * from './useCreateMaplibre';
7
3
  export * from './useCreateMarker';
4
+ export * from './useCreatePopup';
5
+ export * from './useGeoJsonSource';
6
+ export * from './useLayer';
7
+ export * from './useMaplibre';
8
+ export * from './useMaplibreConfig';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/composables/map/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/composables/map/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { MapCreationStatus } from '../../enums';
2
2
  import { CreateMaplibreActions } from '../../types';
3
+ import { CameraOptions, LngLatBoundsLike, LngLatLike, MapOptions, StyleSpecification, Map } from 'maplibre-gl';
3
4
  import { MaybeRef } from 'vue';
4
- import { Map, MapOptions, LngLatBoundsLike, LngLatLike, StyleSpecification, CameraOptions } from 'maplibre-gl';
5
5
 
6
6
  interface CreateMaplibreProps extends MapOptions {
7
7
  register?: (actions: SimplifiedCreateMaplibreActions) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateMaplibre.d.ts","sourceRoot":"","sources":["../../../libs/composables/map/useCreateMaplibre.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,aAAa,EAGd,MAAM,aAAa,CAAC;AAErB,UAAU,mBAAoB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,IAAI,CAAC;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED,UAAU,+BAAgC,SAAQ,qBAAqB;IAErE,gBAAgB,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAG7C,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IAGrB,eAAe,EAAE,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,EAC/C,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAC/C,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,OAAO,CAAM;sBAxB1C,MAAM,aAAa,GAAG,IAAI;uBAGzB,QAAQ,CAAC,iBAAiB,CAAC;gBAClC,OAAO;kBACL,OAAO;iBACR,OAAO;qBAGH,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI;;;;;;;;;;;;;mBA4FrC,IAAI;qBAiDF,IAAI;wBAmRD,IAAI;sBARN,IAAI;EAmE5B"}
1
+ {"version":3,"file":"useCreateMaplibre.d.ts","sourceRoot":"","sources":["../../../libs/composables/map/useCreateMaplibre.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,UAAU,EAEV,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAWpC,UAAU,mBAAoB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,IAAI,CAAC;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED,UAAU,+BAAgC,SAAQ,qBAAqB;IAErE,gBAAgB,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IAG7C,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IAGrB,eAAe,EAAE,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,EAC/C,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAC/C,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,OAAO,CAAM;sBAxB1C,MAAM,aAAa,GAAG,IAAI;uBAGzB,QAAQ,CAAC,iBAAiB,CAAC;gBAClC,OAAO;kBACL,OAAO;iBACR,OAAO;qBAGH,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI;;;;;;;;;;;;;mBA4FrC,IAAI;qBAqDF,IAAI;wBAmRD,IAAI;sBARN,IAAI;EAmE5B"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Configuration options for MapLibre GL performance optimization
3
+ */
4
+ export interface MaplibreConfigOptions {
5
+ /** Number of web workers for tile loading (default: 4) */
6
+ workerCount?: number;
7
+ /** Maximum parallel image requests (default: 16) */
8
+ maxParallelImageRequests?: number;
9
+ /** Whether to prewarm MapLibre resources on initialization (default: true) */
10
+ prewarmResources?: boolean;
11
+ /** Enable debug logging */
12
+ debug?: boolean;
13
+ }
14
+ /**
15
+ * Actions returned by useMaplibreConfig
16
+ */
17
+ export interface MaplibreConfigActions {
18
+ /** Clears prewarmed resources - call on app unmount to release memory */
19
+ clearPrewarmedResources: () => void;
20
+ }
21
+ /**
22
+ * Composable for configuring MapLibre GL global performance settings.
23
+ *
24
+ * This should be called once at the application level (e.g., in App.vue or main.ts)
25
+ * to optimize MapLibre performance across all map instances.
26
+ *
27
+ * @example
28
+ * ```vue
29
+ * <script setup>
30
+ * import { useMaplibreConfig } from 'vue3-maplibre-gl';
31
+ *
32
+ * // Initialize MapLibre with optimized settings
33
+ * useMaplibreConfig({
34
+ * workerCount: 4,
35
+ * maxParallelImageRequests: 16,
36
+ * prewarmResources: true,
37
+ * });
38
+ * </script>
39
+ * ```
40
+ *
41
+ * @param options - Configuration options for MapLibre performance
42
+ * @returns Actions for managing MapLibre configuration
43
+ */
44
+ export declare function useMaplibreConfig(options?: MaplibreConfigOptions): MaplibreConfigActions;
45
+ //# sourceMappingURL=useMaplibreConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMaplibreConfig.d.ts","sourceRoot":"","sources":["../../../libs/composables/map/useMaplibreConfig.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,qBAA0B,GAClC,qBAAqB,CA4CvB"}
@@ -1,6 +1,6 @@
1
- import { MaybeRef, ShallowRef } from 'vue';
2
1
  import { Nullable } from '../../types';
3
- import { Map, GeoJSONSource, GeoJSONSourceSpecification } from 'maplibre-gl';
2
+ import { GeoJSONSource, GeoJSONSourceSpecification, Map } from 'maplibre-gl';
3
+ import { MaybeRef, ShallowRef } from 'vue';
4
4
 
5
5
  /**
6
6
  * Source creation status enum for better state management
@@ -1 +1 @@
1
- {"version":3,"file":"useCreateGeoJsonSource.d.ts","sourceRoot":"","sources":["../../../libs/composables/sources/useCreateGeoJsonSource.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EACV,GAAG,EACH,aAAa,EAEb,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,oBAAY,YAAY;IACtB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,wBAAwB;IAChC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACpE;AAUD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,EAAE,EACF,IAA2B,EAC3B,OAAY,EACZ,KAAa,EACb,QAAQ,GACT,EAAE,wBAAwB,GAAG,0BAA0B,CA8JvD"}
1
+ {"version":3,"file":"useCreateGeoJsonSource.d.ts","sourceRoot":"","sources":["../../../libs/composables/sources/useCreateGeoJsonSource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,GAAG,EAEJ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAYhD;;GAEG;AACH,oBAAY,YAAY;IACtB,UAAU,gBAAgB;IAC1B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,wBAAwB;IAChC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACpE;AAUD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,GAAG,EAAE,MAAM,EACX,EAAE,EACF,IAA2B,EAC3B,OAAY,EACZ,KAAa,EACb,QAAQ,GACT,EAAE,wBAAwB,GAAG,0BAA0B,CA+JvD"}