@geoql/v-mapkit.js
Version:
MapKit with the power of Vue 3
1 lines • 25.6 kB
Source Map (JSON)
{"version":3,"file":"v-mapkit.mjs","sources":["../src/utils/store/index.ts","../src/components/annotations/Image.ts","../src/components/annotations/Marker.ts","../src/components/overlays/Circle.ts","../src/components/overlays/Polygon.ts","../src/components/overlays/Polyline.ts","../src/components/overlays/Tile.ts","../src/utils/events/index.ts","../src/utils/helpers/index.ts","../src/components/VMap.vue","../src/utils/config/index.ts","../src/install.ts"],"sourcesContent":["import { createGlobalState } from '@vueuse/core';\nimport { reactive, shallowRef } from 'vue';\n\nexport const useGlobalState = createGlobalState(() => {\n return {\n mapkit: shallowRef({} as typeof window.mapkit),\n ui: reactive({\n init: false as boolean,\n load: false as boolean,\n geocoderLoad: false as boolean,\n searchLoad: false as boolean,\n }),\n map: shallowRef({} as mapkit.Map),\n geocoder: shallowRef({} as mapkit.Geocoder),\n search: shallowRef({} as mapkit.Search),\n };\n});\n","import { type Ref, ref, shallowRef } from 'vue';\nimport { type ImageProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const ImageAnnotation = (props: ImageProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n\n if (state.ui.init && state.ui.load && state.map.value) {\n const coords = new mapkit.value.Coordinate(\n props.coordinates[0],\n props.coordinates[1],\n );\n const annotation: Ref<mapkit.ImageAnnotationConstructorOptions> = ref(\n props.annotation,\n );\n\n const imageAnnotation = new mapkit.value.ImageAnnotation(\n coords,\n annotation.value,\n );\n state.map.value.addAnnotation(imageAnnotation);\n }\n};\n","import { type Ref, ref, shallowRef } from 'vue';\nimport { type MarkerProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const MarkerAnnotation = (props: MarkerProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n\n if (state.ui.init && state.ui.load && state.map.value) {\n const coords = new mapkit.value.Coordinate(\n props.coordinates[0],\n props.coordinates[1],\n );\n const annotation: Ref<mapkit.MarkerAnnotationConstructorOptions> = ref(\n props.annotation || {},\n );\n const markerAnnotation = new mapkit.value.MarkerAnnotation(\n coords,\n annotation.value,\n );\n state.map.value.addAnnotation(markerAnnotation);\n }\n};\n","import { type Ref, ref, shallowRef } from 'vue';\nimport { type CircleOverlayProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const CircleOverlay = (props: CircleOverlayProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n if (state.ui.init && state.ui.load && state.map.value) {\n const radius: Ref<number> = ref(props['circle-radius'] || 1);\n const coords = new mapkit.value.Coordinate(\n props['circle-coordinates'][0],\n props['circle-coordinates'][1],\n );\n const style = new mapkit.value.Style(props['circle-style'] || {});\n const circle = new mapkit.value.CircleOverlay(coords, radius.value, {\n style,\n });\n state.map.value.addOverlay(circle);\n }\n};\n","import { type Ref, shallowRef } from 'vue';\nimport { type PolygonOverlayProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const PolygonOverlay = (props: PolygonOverlayProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n\n if (state.ui.init && state.ui.load && state.map.value) {\n const points = props['polygon-coordinates'].map((point) => {\n return new mapkit.value.Coordinate(point[0], point[1]);\n });\n // Map the raw coordinates to Coordinates:\n const style = new mapkit.value.Style(props['polygon-style']);\n const rect = new mapkit.value.PolygonOverlay(points, { style });\n state.map.value.addOverlay(rect);\n }\n};\n","import { type Ref, shallowRef } from 'vue';\nimport { type PolylineOverlayProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const PolylineOverlay = (props: PolylineOverlayProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n\n if (state.ui.init && state.ui.load && state.map.value) {\n const coords = props['polyline-coordinates'].map((point) => {\n return new mapkit.value.Coordinate(point[0], point[1]);\n });\n const style = new mapkit.value.Style(props['polyline-style']);\n const polyline = new mapkit.value.PolylineOverlay(coords, { style });\n state.map.value.addOverlay(polyline);\n }\n};\n","import { type Ref, ref, shallowRef } from 'vue';\nimport { type TileOverlayProps } from '~/types';\nimport { useGlobalState } from '../../utils/store';\n\nexport const TileOverlay = (props: TileOverlayProps): void => {\n const state = useGlobalState();\n const mapkit: Ref<typeof window.mapkit> = shallowRef(state.mapkit.value);\n\n if (state.ui.init && state.ui.load && state.map.value) {\n const options: Ref<mapkit.TileOverlayConstructorOptions> = ref(\n props.options || {},\n );\n const url: Ref<mapkit.URLTemplateCallback | string> = ref(props.url);\n const tileOverlay = new mapkit.value.TileOverlay(url.value, options.value);\n state.map.value.addTileOverlay(tileOverlay);\n }\n};\n","type MapEvents = keyof mapkit.MapEvents<string>;\n\nexport const mapDisplayEvents: MapEvents[] = [\n 'region-change-start',\n 'region-change-end',\n 'rotation-start',\n 'rotation-end',\n 'scroll-start',\n 'scroll-end',\n 'zoom-start',\n 'zoom-end',\n 'map-type-change',\n];\n\nexport const mapAnnotationOverlayEvents: MapEvents[] = [\n 'select',\n 'deselect',\n 'drag-start',\n 'dragging',\n 'drag-end',\n];\n\nexport const mapUserLocationEvents: MapEvents[] = [\n 'user-location-change',\n 'user-location-error',\n];\n\nexport const mapInteractionEvents: MapEvents[] = [\n 'single-tap',\n 'double-tap',\n 'long-press',\n];\n","/**\n * Loads the mapkit library\n * from CDN\n *\n * @param {string} v – version of mapkit.js\n * @returns {Promise} - Adds mapkit to window\n */\nconst loadMapKit = async (v: string): Promise<typeof window.mapkit> => {\n return new Promise((resolve, reject) => {\n const src = `https://cdn.apple-mapkit.com/mk/${v}/mapkit.js`;\n if (window.mapkit) {\n return resolve(window.mapkit);\n }\n const script = document.createElement('script');\n script.onload = () => resolve(window.mapkit);\n script.onerror = (error) => reject(error);\n document.body.appendChild(script);\n script.src = src;\n });\n};\n\nexport { loadMapKit };\n","<script lang=\"ts\">\n import { tryOnMounted, tryOnUnmounted } from '@vueuse/core';\n import {\n h,\n reactive,\n defineComponent,\n type PropType,\n type SetupContext,\n } from 'vue';\n import type { GeocoderOptions, SearchOptions, VMapProps } from '~/types';\n import {\n mapAnnotationOverlayEvents,\n mapDisplayEvents,\n mapInteractionEvents,\n mapUserLocationEvents,\n } from '../utils/events';\n import { loadMapKit } from '../utils/helpers';\n import { useGlobalState } from '../utils/store';\n\n export default defineComponent({\n name: 'VMap',\n props: {\n version: {\n type: String as PropType<string>,\n required: false,\n default: '5.x.x',\n description: 'The version of mapkit.js to be map-loaded',\n },\n language: {\n type: String as PropType<string>,\n required: false,\n default: 'en',\n description: 'The language maps to be map-loaded in',\n },\n accessToken: {\n type: String as PropType<string>,\n required: true,\n default: '',\n description: 'The JWT required for loading the mapkit library',\n },\n initOptions: {\n type: Object as PropType<mapkit.MapKitInitOptions>,\n required: false,\n default: () => {\n return {};\n },\n description: 'The init options of loading map',\n },\n mapOptions: {\n type: Object as PropType<mapkit.MapConstructorOptions>,\n required: false,\n default: () => {\n return {};\n },\n },\n geocoderOptions: {\n type: Object as PropType<GeocoderOptions>,\n required: false,\n default: () => {\n return {\n enabled: false,\n };\n },\n },\n searchOptions: {\n type: Object as PropType<SearchOptions>,\n required: false,\n default: () => {\n return {\n enabled: false,\n };\n },\n },\n },\n emits: [\n 'map',\n 'map-initialized',\n 'map-loaded',\n 'map-destroyed',\n 'geocoder-loaded',\n 'search-loaded',\n ],\n setup(props: VMapProps, { slots, emit }: SetupContext) {\n // Use global state\n const state = useGlobalState();\n // MapKit related stuff\n let mapkit: typeof window.mapkit = reactive({} as typeof window.mapkit);\n // Emit init values\n emit('map-initialized', state.ui.init);\n emit('map-loaded', state.ui.load);\n emit('geocoder-loaded', state.ui.geocoderLoad);\n emit('search-loaded', state.ui.searchLoad);\n\n /**\n * Mounted Lifecycle Hook ♻️\n */\n tryOnMounted(async () => {\n try {\n mapkit = await loadMapKit(props.version);\n state.mapkit.value = mapkit;\n } catch (error: unknown) {\n throw new Error(error as string);\n }\n if (!state.ui.init) {\n try {\n await initMap();\n } catch (error: unknown) {\n throw new Error(error as string);\n }\n if (state.ui.init && !state.ui.load) {\n try {\n await loadMap();\n // Listen to events on Map\n listenMapEvents();\n } catch (error: unknown) {\n throw new Error(error as string);\n }\n if (props.geocoderOptions.enabled) {\n try {\n await loadGeocoder();\n } catch (error: unknown) {\n throw new Error(error as string);\n }\n }\n if (props.searchOptions.enabled) {\n try {\n await loadSearch();\n } catch (error: unknown) {\n throw new Error(error as string);\n }\n }\n }\n }\n });\n /**\n * Destroy the map\n */\n tryOnUnmounted(() => {\n if (state.map.value instanceof mapkit.Map) {\n state.map.value.destroy();\n emit('map-destroyed', true);\n }\n });\n\n /**\n * Initialize the map\n *\n * @returns {Promise<string>} - Returns a string promise\n */\n async function initMap(): Promise<string> {\n return new Promise((resolve, reject) => {\n const options: mapkit.MapKitInitOptions = {\n authorizationCallback: (done: (e: string) => void) => {\n done(props.accessToken);\n },\n };\n mapkit.init({ ...options, ...props.initOptions });\n // Else, resolve:\n state.ui.init = true;\n resolve('Map Initialized');\n emit('map-initialized', state.ui.init);\n // Listen in case of error:\n mapkit.addEventListener('error', (e) => {\n state.ui.init = false;\n reject(`Failed to initialize Map: ${e}`);\n });\n });\n }\n\n /**\n * Load the map\n *\n * @returns {Promise<string>} - Returns a string promise\n */\n async function loadMap(): Promise<string> {\n return new Promise((resolve, reject) => {\n state.map.value = new mapkit.Map('map', {\n ...props.mapOptions,\n });\n if (state.map.value instanceof mapkit.Map) {\n state.ui.load = true;\n resolve('Map Loaded');\n } else {\n state.ui.load = false;\n reject('Failed to load Map');\n }\n emit('map-loaded', state.ui.load);\n emit('map', state.map.value);\n });\n }\n\n /**\n * Loads the GeoCoder\n *\n * @returns {Promise<string>} - Returns a string promise\n */\n async function loadGeocoder(): Promise<string> {\n return new Promise((resolve, reject) => {\n state.geocoder.value = new mapkit.Geocoder(\n props.geocoderOptions.options,\n );\n if (state.geocoder.value instanceof mapkit.Geocoder) {\n state.ui.geocoderLoad = true;\n resolve('Geocoder Loaded');\n } else {\n state.ui.geocoderLoad = false;\n reject('Failed to load Geocoder');\n }\n emit('geocoder-loaded', state.ui.geocoderLoad);\n });\n }\n\n /**\n * Loads the Search\n *\n * @returns {Promise<string>} - Returns a string promise\n */\n async function loadSearch(): Promise<string> {\n return new Promise((resolve, reject) => {\n state.search.value = new mapkit.Search(props.searchOptions.options);\n if (state.search.value instanceof mapkit.Search) {\n state.ui.searchLoad = true;\n resolve('Search Loaded');\n } else {\n state.ui.searchLoad = false;\n reject('Failed to load Search');\n }\n emit('search-loaded', state.ui.searchLoad);\n });\n }\n\n /**\n * Listen to Map events\n *\n * @returns {void}\n */\n function listenMapEvents(): void {\n // // Map Display Events\n displayEvents();\n // Annotation and Overlay Events\n annotationOverlayEvents();\n // User Location Events\n userLocationEvents();\n // Map Interaction Events\n interactionEvents();\n }\n\n /**\n * Listen to Display events\n *\n * @returns {void}\n */\n function displayEvents(): void {\n mapDisplayEvents.forEach((e) => {\n state.map.value.addEventListener(e, (event) => {\n console.log(`Map Display Event ${e}`, event);\n });\n });\n }\n /**\n * Listen to map interaction events\n *\n * @returns {void}\n */\n function interactionEvents(): void {\n mapInteractionEvents.forEach((e) => {\n state.map.value.addEventListener(e, (event) => {\n console.log(`Map Interaction Event ${e}`, event);\n });\n });\n }\n /**\n * Listen to map annotation events\n *\n * @returns {void}\n */\n function annotationOverlayEvents(): void {\n mapAnnotationOverlayEvents.forEach((e) => {\n state.map.value.addEventListener(e, (event) => {\n console.log(`Map Annotation & Overlay Event ${e}`, event);\n });\n });\n }\n /**\n * Listen to map user location events\n *\n * @returns {void}\n */\n function userLocationEvents(): void {\n mapUserLocationEvents.forEach((e) => {\n state.map.value.addEventListener(e, (event) => {\n console.log(`Map User Location Event ${e}`, event);\n });\n });\n }\n\n return () =>\n h('div', { id: 'map' }, slots && slots.default ? slots.default() : {});\n },\n });\n</script>\n\n<style>\n #map {\n height: 100% !important;\n width: 100% !important;\n }\n</style>\n","import { App as Application } from 'vue';\n\nconst config = {};\n\nexport let VueInstance: Application;\n\nexport { config as default };\n\nexport const setVueInstance = (instance: Application) => {\n VueInstance = instance;\n};\n","import { App as Application, Plugin } from 'vue';\nimport { ImageAnnotation, MarkerAnnotation } from './components/annotations';\nimport {\n CircleOverlay,\n PolygonOverlay,\n PolylineOverlay,\n TileOverlay,\n} from './components/overlays';\nimport VMap from './components/VMap.vue';\nimport { setVueInstance } from './utils/config/index';\n\nlet installed: boolean = false;\n\nconst install: Exclude<Plugin['install'], undefined> = (\n instance: Application,\n) => {\n if (!installed) {\n setVueInstance(instance);\n instance.component('VMap', VMap);\n instance.component('ImageAnnotation', ImageAnnotation);\n instance.component('MarkerAnnotation', MarkerAnnotation);\n instance.component('CircleOverlay', CircleOverlay);\n instance.component('PolygonOverlay', PolygonOverlay);\n instance.component('PolylineOverlay', PolylineOverlay);\n instance.component('TileOverlay', TileOverlay);\n installed = true;\n }\n};\n\nexport default install;\n"],"names":["useGlobalState","createGlobalState","shallowRef","reactive","ImageAnnotation","props","state","mapkit","coords","annotation","ref","imageAnnotation","MarkerAnnotation","markerAnnotation","CircleOverlay","radius","style","circle","PolygonOverlay","points","point","rect","PolylineOverlay","polyline","TileOverlay","options","url","tileOverlay","mapDisplayEvents","mapAnnotationOverlayEvents","mapUserLocationEvents","mapInteractionEvents","loadMapKit","v","resolve","reject","src","script","error","_sfc_main","defineComponent","slots","emit","tryOnMounted","initMap","loadMap","listenMapEvents","loadGeocoder","loadSearch","tryOnUnmounted","done","e","displayEvents","annotationOverlayEvents","userLocationEvents","interactionEvents","event","h","setVueInstance","instance","installed","install","VMap","install$1"],"mappings":"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"}