vue3-maplibre-gl 3.2.2 → 3.2.3
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.
- package/dist/components/Mapbox.vue.d.ts.map +1 -1
- package/dist/{components-CwXC2MaG.js → components-BHHiuQRV.js} +3 -4
- package/dist/components-BHHiuQRV.js.map +1 -0
- package/dist/composables/utils/useOptimizedComputed.d.ts +0 -2
- package/dist/composables/utils/useOptimizedComputed.d.ts.map +1 -1
- package/dist/{composables-BFBL0Id8.js → composables-CbiBPK7-.js} +3 -17
- package/dist/composables-CbiBPK7-.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/dist/style.css +1 -0
- package/package.json +2 -2
- package/dist/components-CwXC2MaG.js.map +0 -1
- package/dist/components.css +0 -1
- package/dist/composables-BFBL0Id8.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mapbox.vue.d.ts","sourceRoot":"","sources":["../../libs/components/Mapbox.vue"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EACV,GAAG,EACH,eAAe,EACf,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,UAAU,WAAW;IACnB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"Mapbox.vue.d.ts","sourceRoot":"","sources":["../../libs/components/Mapbox.vue"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EACV,GAAG,EACH,eAAe,EACf,YAAY,EAEZ,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,UAAU,WAAW;IACnB,gCAAgC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC7B;AAqYD,iBAAS,cAAc;qBAkFO,GAAG;mBACL,GAAG;qBACD,GAAG;EAGhC;AAYD,QAAA,MAAM,eAAe;;;gBA5HC,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAhB,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAvX5B,OAAO;iBAED,OAAO;aANX,OAAO,CAAC,UAAU,CAAC;iBAQf,MAAM;oBAEH,MAAM;4EAofvB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAAvG,wBAAwG;AACxG,KAAK,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AACjE,KAAK,6BAA6B,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE;CAAE,CAAC;AAC9M,KAAK,kBAAkB,CAAC,CAAC,EAAE,CAAC,IAAI;KAE1B,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;QACxE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;KACb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AACN,KAAK,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC;AACxD,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,QAAO;QAClD,MAAM,EAAE,CAAC,CAAC;KACT,CAAA;CAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, computed, unref, provide, watch, watchEffect, nextTick, onBeforeMount, onUnmounted, createElementBlock, openBlock, createCommentVNode, renderSlot, inject, onMounted } from "vue";
|
|
2
|
-
import { u as useOptimizedComputed, a as useCreateMapbox, 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 useCreatePopup } from "./composables-
|
|
2
|
+
import { u as useOptimizedComputed, a as useCreateMapbox, 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 useCreatePopup } from "./composables-CbiBPK7-.js";
|
|
3
3
|
const MapProvideKey = Symbol();
|
|
4
4
|
const SourceProvideKey = Symbol();
|
|
5
5
|
var MapCreationStatus = /* @__PURE__ */ ((MapCreationStatus2) => {
|
|
@@ -139,9 +139,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
|
139
139
|
return mergedOptions;
|
|
140
140
|
},
|
|
141
141
|
{
|
|
142
|
-
deepEqual: true
|
|
142
|
+
deepEqual: true
|
|
143
143
|
// Use deep equality for complex objects
|
|
144
|
-
debug: props.debug
|
|
145
144
|
}
|
|
146
145
|
);
|
|
147
146
|
const isMapReady = computed(
|
|
@@ -1214,4 +1213,4 @@ export {
|
|
|
1214
1213
|
_sfc_main$1 as j,
|
|
1215
1214
|
_sfc_main as k
|
|
1216
1215
|
};
|
|
1217
|
-
//# sourceMappingURL=components-
|
|
1216
|
+
//# sourceMappingURL=components-BHHiuQRV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-BHHiuQRV.js","sources":["../libs/enums/MapProvideKey.ts","../libs/enums/MapboxEnum.ts","../libs/enums/MapboxLayerEnum.ts","../libs/components/Mapbox.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/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 MapboxEvents: (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 MapboxLayerEvents: (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} from 'vue';\nimport { MapProvideKey, MapboxEvents, MapCreationStatus } from '@libs/enums';\nimport {\n useCreateMapbox,\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 Mapbox component props with comprehensive configuration options\n */\ninterface MapboxProps {\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<MapboxProps>(), {\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 maplibreElRef = ref<HTMLElement>();\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\n // Ensure container is properly set\n if (!mergedOptions.container) {\n mergedOptions.container = props.containerId;\n }\n\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/**\n * Enhanced container creation with error handling and validation\n */\nfunction createMapContainer(): HTMLElement | null {\n try {\n const wrapper = document.getElementById('maplibre_container');\n if (!wrapper) {\n logError('Map container wrapper not found');\n return null;\n }\n\n // Remove existing container if present\n const existingContainer = document.getElementById(props.containerId);\n if (existingContainer) {\n existingContainer.remove();\n }\n\n const container = document.createElement('div');\n container.id = props.containerId;\n container.className = props.containerClass;\n container.style.width = '100%';\n container.style.height = '100%';\n\n wrapper.appendChild(container);\n return container;\n } catch (error) {\n logError('Error creating map container:', error);\n return null;\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} = useCreateMapbox(maplibreElRef, 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\nMapboxEvents.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 const container = createMapContainer();\n if (container) {\n maplibreElRef.value = container;\n isComponentMounted.value = true;\n mapCreationStatus.value = MapCreationStatus.Initializing;\n } else {\n logError('Failed to create map container');\n mapCreationStatus.value = MapCreationStatus.Error;\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 // Remove container\n maplibreElRef.value?.remove();\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 id=\"maplibre_container\">\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\n// Legacy support\n#maplibre_container {\n @extend .maplibre-container;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { inject, ref, watchEffect, computed, onUnmounted } 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, ref(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 } 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, ref(null));\nconst isSourceRegistered = ref(false);\nconst lastDataUpdate = ref<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 { ref, inject, watch, computed, onUnmounted } from 'vue';\nimport {\n MapProvideKey,\n SourceProvideKey,\n MapboxLayerEvents,\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, 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<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,\n minzoom: props.minzoom,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMapboxLayerEvents.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 MapboxLayerEvents,\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,\n minzoom: props.minzoom,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMapboxLayerEvents.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 MapboxLayerEvents,\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,\n minzoom: props.minzoom,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMapboxLayerEvents.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 MapboxLayerEvents,\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,\n minzoom: props.minzoom,\n metadata: props.metadata,\n sourceLayer: props.sourceLayer,\n register: handleRegister,\n});\n\n// Optimized event listener setup with error handling\nMapboxLayerEvents.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\n// Component props with sensible defaults\nconst props = withDefaults(defineProps<ImageProps>(), {\n images: () => [],\n showLoading: 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 });\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, watch, computed } 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, ref(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 isShow ? show() : 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=\"mapboxgl-popup-content-inner\">\n <slot />\n </div>\n</template>\n"],"names":["MapCreationStatus","_openBlock","_createElementBlock","_hoisted_1","_renderSlot"],"mappings":"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"}
|
|
@@ -10,8 +10,6 @@ interface OptimizedComputedOptions<T> {
|
|
|
10
10
|
equalityFn?: (a: T, b: T) => boolean;
|
|
11
11
|
/** Cache duration in milliseconds (default: no expiration) */
|
|
12
12
|
cacheDuration?: number;
|
|
13
|
-
/** Enable debug logging */
|
|
14
|
-
debug?: boolean;
|
|
15
13
|
}
|
|
16
14
|
/**
|
|
17
15
|
* Creates an optimized computed property with caching and equality checking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOptimizedComputed.d.ts","sourceRoot":"","sources":["../../../libs/composables/utils/useOptimizedComputed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEtD;;GAEG;AACH,UAAU,wBAAwB,CAAC,CAAC;IAClC,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;IACrC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"useOptimizedComputed.d.ts","sourceRoot":"","sources":["../../../libs/composables/utils/useOptimizedComputed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEtD;;GAEG;AACH,UAAU,wBAAwB,CAAC,CAAC;IAClC,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;IACrC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,MAAM,CAAC,EACf,OAAO,GAAE,wBAAwB,CAAC,CAAC,CAAM,GACxC,WAAW,CAAC,CAAC,CAAC,CA4ChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACtD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EAC/B,KAAK,GAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,MAA0C,EACrE,YAAY,SAAM,GACjB,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAyB7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACnD,MAAM,EAAE,MAAM,CAAC,EACf,SAAS,SAAO,EAChB,UAAU,SAAM,GACf,WAAW,CAAC,CAAC,CAAC,CA0BhB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,MAAM,EAAE,MAAM,CAAC,EACf,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,GAC7B,WAAW,CAAC,CAAC,CAAC,CAkBhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,MAAM,CAAC,EACf,SAAS,SAAI,EACb,UAAU,SAAK,GACd,WAAW,CAAC,CAAC,CAAC,CAkChB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, computed, unref, watchEffect, onUnmounted, watch, shallowRef, effectScope, onScopeDispose, onMounted, nextTick } from "vue";
|
|
2
2
|
import { Map as Map$1, getVersion, Popup, Marker, GeolocateControl } from "maplibre-gl";
|
|
3
|
-
import { M as MapCreationStatus } from "./components-
|
|
3
|
+
import { M as MapCreationStatus } from "./components-BHHiuQRV.js";
|
|
4
4
|
var BoundsStatus = /* @__PURE__ */ ((BoundsStatus2) => {
|
|
5
5
|
BoundsStatus2["NotSet"] = "not-set";
|
|
6
6
|
BoundsStatus2["Setting"] = "setting";
|
|
@@ -921,12 +921,7 @@ function useJumpTo(mapOrProps, legacyOptions) {
|
|
|
921
921
|
};
|
|
922
922
|
}
|
|
923
923
|
function useOptimizedComputed(getter, options = {}) {
|
|
924
|
-
const {
|
|
925
|
-
deepEqual = false,
|
|
926
|
-
equalityFn,
|
|
927
|
-
cacheDuration,
|
|
928
|
-
debug = false
|
|
929
|
-
} = options;
|
|
924
|
+
const { deepEqual = false, equalityFn, cacheDuration } = options;
|
|
930
925
|
const lastValue = ref();
|
|
931
926
|
const lastComputedTime = ref(0);
|
|
932
927
|
const hasInitialValue = ref(false);
|
|
@@ -942,25 +937,16 @@ function useOptimizedComputed(getter, options = {}) {
|
|
|
942
937
|
if (cacheDuration && hasInitialValue.value) {
|
|
943
938
|
const timeSinceLastCompute = now - lastComputedTime.value;
|
|
944
939
|
if (timeSinceLastCompute < cacheDuration) {
|
|
945
|
-
if (debug) {
|
|
946
|
-
console.log("useOptimizedComputed: returning cached value");
|
|
947
|
-
}
|
|
948
940
|
return lastValue.value;
|
|
949
941
|
}
|
|
950
942
|
}
|
|
951
943
|
const newValue = getter();
|
|
952
944
|
if (hasInitialValue.value && isEqual(newValue, lastValue.value)) {
|
|
953
|
-
if (debug) {
|
|
954
|
-
console.log("useOptimizedComputed: value unchanged, returning cached");
|
|
955
|
-
}
|
|
956
945
|
return lastValue.value;
|
|
957
946
|
}
|
|
958
947
|
lastValue.value = newValue;
|
|
959
948
|
lastComputedTime.value = now;
|
|
960
949
|
hasInitialValue.value = true;
|
|
961
|
-
if (debug) {
|
|
962
|
-
console.log("useOptimizedComputed: computed new value", newValue);
|
|
963
|
-
}
|
|
964
950
|
return newValue;
|
|
965
951
|
});
|
|
966
952
|
}
|
|
@@ -5764,4 +5750,4 @@ export {
|
|
|
5764
5750
|
useMemoized as y,
|
|
5765
5751
|
useThrottledComputed as z
|
|
5766
5752
|
};
|
|
5767
|
-
//# sourceMappingURL=composables-
|
|
5753
|
+
//# sourceMappingURL=composables-CbiBPK7-.js.map
|