{"version":3,"file":"js/121-b6421970a70a07d119c4.js","mappings":"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","sources":["webpack://app/./app/webpack/src/utils/crosshair_altitude_service/indexed_db_cache.ts","webpack://app/./app/webpack/src/utils/crosshair_altitude_service/tile.ts","webpack://app/./app/webpack/src/utils/crosshair_altitude_service/pixel_methods.ts","webpack://app/./app/webpack/src/utils/crosshair_altitude_service/validation_utils.ts","webpack://app/./app/webpack/src/utils/crosshair_altitude_service/fetch_cached_image.ts","webpack://app/./app/webpack/src/utils/helpers/CopyToClipboardHelper.ts","webpack://app/./app/webpack/src/utils/helpers/GeoLocateHelper.ts","webpack://app/./app/webpack/src/utils/models/HiikerElevation.ts","webpack://app/./app/webpack/src/utils/helpers/HiikerElevationApiHelper.ts","webpack://app/./app/webpack/src/utils/helpers/PointOnStraightLineHelper.ts","webpack://app/./app/webpack/src/utils/helpers/TypsenseClientHelper.ts","webpack://app/./app/webpack/src/utils/models/Graphooper.ts","webpack://app/./app/webpack/src/utils/models/LineStringFeature.ts","webpack://app/./app/webpack/src/utils/models/MarkerFeature.ts","webpack://app/./app/webpack/src/go_to_location_dialog/GoToLocationDialog.vue","webpack://app/./app/webpack/src/utils/helpers/LocalStorageHelper.ts","webpack://app/./app/webpack/src/go_to_location_dialog/GoToLocationDialog.vue?d48e","webpack://app/app/webpack/src/go_to_location_dialog/GoToLocationDialog.vue","webpack://app/./app/webpack/src/go_to_location_dialog/GoToLocationDialog.vue?e955","webpack://app/./app/webpack/src/import_route_multiple_options_dialog/ImportRouteMultipleOptionsDialog.vue","webpack://app/./app/webpack/src/import_route_multiple_options_dialog/ImportRouteMultipleOptionsDialog.vue?6fbc","webpack://app/app/webpack/src/import_route_multiple_options_dialog/ImportRouteMultipleOptionsDialog.vue","webpack://app/./app/webpack/src/import_route_multiple_options_dialog/ImportRouteMultipleOptionsDialog.vue?0e68","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialog.vue","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialogSearchResultsListItem.vue?7e45","webpack://app/app/webpack/src/trail_import_dialog/TrailImportDialogSearchResultsListItem.vue","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialogSearchResultsListItem.vue?8ea8","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialogSearchResultsListItem.vue","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialog.vue?4f1d","webpack://app/app/webpack/src/trail_import_dialog/TrailImportDialog.vue","webpack://app/./app/webpack/src/trail_import_dialog/TrailImportDialog.vue?260a"],"sourcesContent":["export class IndexedDBCache {\n private dbName: string;\n private storeName: string;\n private dbPromise: Promise;\n\n constructor(dbName: string = 'tileCacheDB', storeName: string = 'tiles') {\n this.dbName = dbName;\n this.storeName = storeName;\n this.dbPromise = this.initDB();\n }\n\n private initDB(): Promise {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName, { keyPath: 'url' });\n }\n };\n\n request.onsuccess = () => {\n resolve(request.result);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n\n async get(url: string): Promise {\n const db = await this.dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, 'readonly');\n const store = transaction.objectStore(this.storeName);\n const request = store.get(url);\n\n request.onsuccess = () => {\n resolve(request.result ? request.result.blob : null);\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n\n async set(url: string, blob: Blob): Promise {\n const db = await this.dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, 'readwrite');\n const store = transaction.objectStore(this.storeName);\n const request = store.put({ url, blob });\n\n request.onsuccess = () => {\n resolve();\n };\n\n request.onerror = () => {\n reject(request.error);\n };\n });\n }\n}\n","export class Tile {\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n static fromCoordinates(lat: number, lon: number, zoom: number = 10): Tile {\n // Validate and clamp latitude\n if (typeof lat !== 'number' || isNaN(lat)) {\n throw new Error('Latitude must be a valid number.');\n }\n if (typeof lon !== 'number' || isNaN(lon)) {\n throw new Error('Longitude must be a valid number.');\n }\n\n lat = Math.max(Math.min(lat, 85.05112878), -85.05112878);\n lon = ((lon + 180) % 360) - 180; // Wrap longitude within [-180, 180]\n\n const latRad = (lat * Math.PI) / 180;\n const n = Math.pow(2, zoom);\n\n const x = Math.floor(((lon + 180) / 360) * n);\n const y = Math.floor(\n ((1 -\n Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) /\n 2) *\n n\n );\n\n if (isNaN(x) || isNaN(y)) {\n throw new Error('Calculated tile coordinates are invalid.');\n }\n\n return new Tile(x, y, zoom);\n }\n}\n","import {IndexedDBCache} from \"./indexed_db_cache\";\nimport {Tile} from \"./tile\";\nimport {fetchAndCacheBlob, fetchAndCacheImage} from \"./fetch_cached_image\";\nimport {validateCoordinates} from \"./validation_utils\";\nimport {MeasurementPrefUtility} from \"../helpers/MeasurementPref\";\n\nasync function getElevationFromBlob(\n blob: Blob,\n x: number,\n y: number\n): Promise {\n // Create an ImageBitmap from the blob\n const imageBitmap = await createImageBitmap(blob);\n\n // Use OffscreenCanvas if available, otherwise fallback to regular canvas\n const canvas =\n typeof OffscreenCanvas !== 'undefined'\n ? new OffscreenCanvas(imageBitmap.width, imageBitmap.height)\n : document.createElement('canvas');\n\n canvas.width = imageBitmap.width;\n canvas.height = imageBitmap.height;\n\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Failed to get 2D context');\n }\n\n // Draw the ImageBitmap onto the canvas\n ctx.drawImage(imageBitmap, 0, 0);\n\n // Get pixel data at the specified coordinates\n const pixelData = ctx.getImageData(x, y, 1, 1).data;\n\n const R = pixelData[0];\n const G = pixelData[1];\n const B = pixelData[2];\n\n const elevation = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1);\n return elevation;\n}\n\n\nfunction getElevationAtPixel(\n image: HTMLImageElement,\n x: number,\n y: number\n): number {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n throw new Error('Failed to get 2D context');\n }\n\n ctx.drawImage(image, 0, 0);\n const pixelData = ctx.getImageData(x, y, 1, 1).data;\n\n const R = pixelData[0];\n const G = pixelData[1];\n const B = pixelData[2];\n\n const elevation = -10000 + ((R * 256 * 256 + G * 256 + B) * 0.1);\n return elevation;\n}\n\nfunction getPixelCoordinates(\n coord: { lat: number; lng: number },\n tile: Tile,\n tileSize: number = 512\n): { x: number; y: number } {\n const n = Math.pow(2, tile.z);\n const lonDeg = coord.lng;\n const latRad = (coord.lat * Math.PI) / 180;\n\n const x = ((lonDeg + 180) / 360) * n * tileSize;\n const y =\n ((1 -\n Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) /\n 2) *\n n *\n tileSize;\n\n const pixelX = Math.floor(x - tile.x * tileSize);\n const pixelY = Math.floor(y - tile.y * tileSize);\n\n return { x: pixelX, y: pixelY };\n}\n\nexport async function getElevation(\n coord: { lat: number; lng: number },\n zoom: number = 10,\n cache: IndexedDBCache\n): Promise {\n // Validate coordinates\n let accessToken = \"pk.eyJ1IjoiaGlpa2VyLW1hcHMiLCJhIjoiY2xydDBwMTU4MDFmdDJwbzd5NjFxMmlyciJ9.Q0bXbghB7N2Ji93oLrAJng\"\n validateCoordinates(coord.lat, coord.lng);\n\n if (zoom < 10) {\n return ''\n }\n if (zoom > 10) {\n zoom = 10\n }\n const tile = Tile.fromCoordinates(coord.lat, coord.lng, zoom);\n const tileUrl = `https://api.mapbox.com/v4/mapbox.terrain-rgb/${tile.z}/${tile.x}/${tile.y}@2x.pngraw?access_token=${accessToken}`;\n\n try {\n // Fetch and cache the tile blob\n const blob = await fetchAndCacheBlob(tileUrl, cache);\n\n // Calculate the pixel coordinates within the tile\n const pixelCoords = getPixelCoordinates(coord, tile, 512); // Assuming tile size is 512\n\n // Ensure pixel coordinates are within bounds\n if (\n pixelCoords.x < 0 ||\n pixelCoords.y < 0 ||\n pixelCoords.x >= 512 ||\n pixelCoords.y >= 512\n ) {\n throw new Error('Pixel coordinates are out of bounds');\n }\n\n // Get elevation from the blob\n const elevation = await getElevationFromBlob(\n blob,\n pixelCoords.x,\n pixelCoords.y\n );\n\n let measurementPreference = MeasurementPrefUtility.preference()\n return '• ' + measurementPreference.smallUnitFormatter(elevation);\n } catch (error) {\n throw new Error(`Failed to get elevation: ${error.message}`);\n }\n}\n\n\n\n","export function validateCoordinates(lat: number, lng: number): void {\n if (\n typeof lat !== 'number' ||\n typeof lng !== 'number' ||\n isNaN(lat) ||\n isNaN(lng)\n ) {\n throw new Error('Latitude and longitude must be valid numbers.');\n }\n\n if (lat < -90 || lat > 90) {\n throw new Error('Latitude must be between -90 and 90 degrees.');\n }\n\n if (lng < -180 || lng > 180) {\n throw new Error('Longitude must be between -180 and 180 degrees.');\n }\n}\n","import {IndexedDBCache} from \"./indexed_db_cache\";\n\nexport async function fetchAndCacheImage(\n url: string,\n cache: IndexedDBCache\n): Promise {\n // Check cache first\n const cachedBlob = await cache.get(url);\n\n if (cachedBlob) {\n // Create an image element from the cached blob\n return createImageFromBlob(cachedBlob);\n } else {\n // Fetch the image from the network\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch image: ${response.statusText}`);\n }\n const blob = await response.blob();\n\n // Cache the image\n await cache.set(url, blob);\n\n // Create an image element from the fetched blob\n return createImageFromBlob(blob);\n }\n}\n\nexport function createImageFromBlob(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const url = URL.createObjectURL(blob);\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve(img);\n };\n img.onerror = (error) => {\n URL.revokeObjectURL(url);\n reject(new Error('Failed to load image'));\n };\n img.src = url;\n });\n}\n\nexport async function fetchAndCacheBlob(\n url: string,\n cache: IndexedDBCache\n): Promise {\n // Check cache first\n const cachedBlob = await cache.get(url);\n\n if (cachedBlob) {\n return cachedBlob;\n } else {\n // Fetch the blob from the network\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch blob: ${response.statusText}`);\n }\n const blob = await response.blob();\n\n // Cache the blob\n await cache.set(url, blob);\n\n return blob;\n }\n}\n\n","export default function copyToClipboard(text, completion) {\n navigator.clipboard.writeText(text)\n .then(() => {\n console.log('Text copied to clipboard');\n document.getElementById( 'copyConfirm' ).style.display = 'block';\n completion(true, null);\n })\n .catch(err => {\n console.error('Failed to copy text: ', err);\n completion(false, null);\n });\n}\n","import mapboxgl from \"mapbox-gl\";\n\nexport default function createGeoLocate() {\n const map = window.map;\n const geolocate = new mapboxgl.GeolocateControl({\n positionOptions: {\n enableHighAccuracy: true,\n },\n trackUserLocation: true,\n showUserLocation: true,\n showAccuracyCircle: true,\n });\n\n // Handle successful geolocation\n geolocate.on(\"geolocate\", (event) => {\n window.geolocateLocated();\n });\n\n // Handle geolocation errors\n geolocate.on(\"error\", (error) => {\n console.error(\"Error getting location:\", error);\n window.geolocateError();\n // alert(\"Error getting location: \" + error.message);\n });\n\n // Custom method to check permissions and trigger geolocation\n geolocate.permissionAndTrigger = () => {\n if (\"geolocation\" in navigator) {\n navigator.permissions\n .query({ name: \"geolocation\" })\n .then((result) => {\n if (result.state === \"granted\") {\n geolocate.trigger();\n } else if (result.state === \"prompt\") {\n navigator.geolocation.getCurrentPosition(\n () => {\n geolocate.trigger();\n },\n () => {\n console.error(\"User denied permission to access location\");\n alert(\"User denied permission to access location\");\n window.geolocateError();\n }\n );\n } else {\n console.error(\"User denied permission to access location\");\n alert(\"Please enable location services to use this feature\");\n window.geolocateError();\n }\n })\n .catch((error) => {\n console.error(\"Permission query failed:\", error);\n window.geolocateError();\n alert(\"Failed to check location permissions: \" + error.message);\n });\n } else {\n alert(\"Geolocation is not available on your device. Please contact support@hiiker.co\");\n console.error(\"Geolocation is not available\");\n window.geolocateError();\n }\n };\n\n // Add the control to the map\n map.addControl(geolocate);\n\n // Hide the default button after the map loads\n const hideGeolocateButton = () => {\n const element = document.querySelector(\".mapboxgl-ctrl-geolocate\");\n if (element) {\n element.style.display = \"none\";\n } else {\n console.warn(\"Element not found in the DOM.\");\n }\n };\n\n let mapRenderInstance = null;\n\n const mapRendered = () => {\n console.log(\"Map rendered\");\n if (map.loaded()) {\n console.log(\"Map loaded, hiding button now\");\n hideGeolocateButton();\n map.off(\"render\", mapRenderInstance);\n }\n }\n\n// Run if already loaded, or wait for load if not\n if (map.loaded()) {\n console.log(\"Map already loaded, hiding button now\");\n hideGeolocateButton();\n } else {\n console.log(\"Map not loaded, waiting for events\");\n map.on(\"load\", () => {\n console.log(\"Map 'load' event fired\");\n hideGeolocateButton();\n });\n mapRenderInstance = mapRendered;\n map.on(\"render\", mapRenderInstance);\n }\n\n // Expose the geolocate control globally\n window.geoLocate = geolocate;\n}\n","// To parse this data:\n//\n// import { Convert } from \"./file\";\n//\n// const hiikerElevation = Convert.toHiikerElevation(json);\n//\n// These functions will throw an error if the JSON doesn't\n// match the expected interface, even if the JSON is valid.\n\nimport {\n LineStringFeature, LineStringGeometry, LineStringProperties,\n LineStringPropertiesExtra, LineStringPropertiesSurface, LineStringPropertiesWaytypes,\n LineStringPropertiesSummary\n} from \"./LineStringFeature\";\nimport {generateID} from \"../helpers/IDGenerator\";\n\nexport interface HiikerElevation {\n lat: number;\n lng: number;\n elevation: number;\n}\n\n// Converts JSON strings to/from your types\n// and asserts the results of JSON.parse at runtime\nexport class Convert {\n public static toHiikerElevation(json: string): HiikerElevation[] {\n return cast(JSON.parse(json), a(r(\"HiikerElevation\")));\n }\n\n public static hiikerElevationToJson(value: HiikerElevation[]): string {\n return JSON.stringify(uncast(value, a(r(\"HiikerElevation\"))), null, 2);\n }\n\n public static toSingleHiikerElevation(json: string): HiikerElevation {\n return cast(JSON.parse(json), r(\"HiikerElevation\"));\n }\n}\n\nfunction invalidValue(typ: any, val: any, key: any = ''): never {\n if (key) {\n throw Error(`Invalid value for key \"${key}\". Expected type ${JSON.stringify(typ)} but got ${JSON.stringify(val)}`);\n }\n throw Error(`Invalid value ${JSON.stringify(val)} for type ${JSON.stringify(typ)}`, );\n}\n\nfunction jsonToJSProps(typ: any): any {\n if (typ.jsonToJS === undefined) {\n const map: any = {};\n typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });\n typ.jsonToJS = map;\n }\n return typ.jsonToJS;\n}\n\nfunction jsToJSONProps(typ: any): any {\n if (typ.jsToJSON === undefined) {\n const map: any = {};\n typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });\n typ.jsToJSON = map;\n }\n return typ.jsToJSON;\n}\n\nfunction transform(val: any, typ: any, getProps: any, key: any = ''): any {\n function transformPrimitive(typ: string, val: any): any {\n if (typeof typ === typeof val) return val;\n return invalidValue(typ, val, key);\n }\n\n function transformUnion(typs: any[], val: any): any {\n // val must validate against one typ in typs\n const l = typs.length;\n for (let i = 0; i < l; i++) {\n const typ = typs[i];\n try {\n return transform(val, typ, getProps);\n } catch (_) {}\n }\n return invalidValue(typs, val);\n }\n\n function transformEnum(cases: string[], val: any): any {\n if (cases.indexOf(val) !== -1) return val;\n return invalidValue(cases, val);\n }\n\n function transformArray(typ: any, val: any): any {\n // val must be an array with no invalid elements\n if (!Array.isArray(val)) return invalidValue(\"array\", val);\n return val.map(el => transform(el, typ, getProps));\n }\n\n function transformDate(val: any): any {\n if (val === null) {\n return null;\n }\n const d = new Date(val);\n if (isNaN(d.valueOf())) {\n return invalidValue(\"Date\", val);\n }\n return d;\n }\n\n function transformObject(props: { [k: string]: any }, additional: any, val: any): any {\n if (val === null || typeof val !== \"object\" || Array.isArray(val)) {\n return invalidValue(\"object\", val);\n }\n const result: any = {};\n Object.getOwnPropertyNames(props).forEach(key => {\n const prop = props[key];\n const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;\n result[prop.key] = transform(v, prop.typ, getProps, prop.key);\n });\n Object.getOwnPropertyNames(val).forEach(key => {\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\n result[key] = transform(val[key], additional, getProps, key);\n }\n });\n return result;\n }\n\n if (typ === \"any\") return val;\n if (typ === null) {\n if (val === null) return val;\n return invalidValue(typ, val);\n }\n if (typ === false) return invalidValue(typ, val);\n while (typeof typ === \"object\" && typ.ref !== undefined) {\n typ = typeMap[typ.ref];\n }\n if (Array.isArray(typ)) return transformEnum(typ, val);\n if (typeof typ === \"object\") {\n return typ.hasOwnProperty(\"unionMembers\") ? transformUnion(typ.unionMembers, val)\n : typ.hasOwnProperty(\"arrayItems\") ? transformArray(typ.arrayItems, val)\n : typ.hasOwnProperty(\"props\") ? transformObject(getProps(typ), typ.additional, val)\n : invalidValue(typ, val);\n }\n // Numbers can be parsed by Date but shouldn't be.\n if (typ === Date && typeof val !== \"number\") return transformDate(val);\n return transformPrimitive(typ, val);\n}\n\nfunction cast(val: any, typ: any): T {\n return transform(val, typ, jsonToJSProps);\n}\n\nfunction uncast(val: T, typ: any): any {\n return transform(val, typ, jsToJSONProps);\n}\n\nfunction a(typ: any) {\n return { arrayItems: typ };\n}\n\nfunction u(...typs: any[]) {\n return { unionMembers: typs };\n}\n\nfunction o(props: any[], additional: any) {\n return { props, additional };\n}\n\nfunction m(additional: any) {\n return { props: [], additional };\n}\n\nfunction r(name: string) {\n return { ref: name };\n}\n\nconst typeMap: any = {\n \"HiikerElevation\": o([\n { json: \"lat\", js: \"lat\", typ: 3.14 },\n { json: \"lng\", js: \"lng\", typ: 3.14 },\n { json: \"elevation\", js: \"elevation\", typ: 0 },\n ], false),\n};\n\nexport function hiikerElevationToLineStringFeature(hiikerElevation: HiikerElevation[]): LineStringFeature {\n let coords = hiikerElevation.map((elevation: HiikerElevation) => {\n return [elevation.lng, elevation.lat, elevation.elevation]\n })\n let properties = new LineStringProperties(\n 0, 0, [],\n new LineStringPropertiesExtra(new LineStringPropertiesSurface([], []),\n new LineStringPropertiesWaytypes([], []), []),\n new LineStringPropertiesSummary(0, 0), []\n )\n properties.id = generateID()\n return new LineStringFeature(\n new LineStringGeometry(\n coords\n ),\n properties,\n []\n )\n}\n","import {Convert, HiikerElevation, hiikerElevationToLineStringFeature} from '../models/HiikerElevation'\nimport type { MarkerFeature } from '../models/MarkerFeature'\nimport { LineStringFeature } from '../models/LineStringFeature'\nimport pointsForLineString from \"./PointOnStraightLineHelper\";\n\nexport async function hiikerElevation(\n startMarker: MarkerFeature,\n endMarker: MarkerFeature\n): Promise {\n try {\n let points = pointsForLineString(startMarker.markerGeometry.coordinates[1], startMarker.markerGeometry.coordinates[0], endMarker.markerGeometry.coordinates[1], endMarker.markerGeometry.coordinates[0]);\n let coordsForElevationAPI = points.map((point) => {\n return [point[1], point[0]];\n })\n let raw = JSON.stringify(coordsForElevationAPI);\n const requestOptions = {\n method: 'POST',\n body: raw\n };\n\n let response = await fetch(\"https://elevation-service-2.hiiker.com\", requestOptions)\n let json = await response.text()\n const hiikerElevation = Convert.toHiikerElevation(json);\n return hiikerElevationToLineStringFeature(hiikerElevation);\n } catch (error) {\n return LineStringFeature.straightLine(startMarker, endMarker);\n }\n}\n\nexport async function getElevationData(\n coords: number[][]\n): Promise {\n try {\n let raw = JSON.stringify(coords);\n const requestOptions = {\n method: 'POST',\n body: raw\n };\n\n let response = await fetch(\"https://elevation-service-2.hiiker.com\", requestOptions)\n let json = await response.text()\n\n return Convert.toHiikerElevation(json);\n } catch (error) {\n return null\n }\n}\n\nexport async function singleHiikerElevation(\n lat: number,\n lon: number\n): Promise {\n try {\n var raw = JSON.stringify([\n [\n lat,\n lon\n ]\n ]);\n const requestOptions = {\n method: 'POST',\n body: raw\n };\n let response = await fetch(\"https://elevation-service-2.hiiker.com\", requestOptions)\n let json = await response.text()\n return Convert.toHiikerElevation(json)[0];\n } catch (error) {\n return null\n }\n}\n","import { lineString as turfLineString, length as turfLength, along as turfAlong } from \"@turf/turf\";\n\nexport default function pointsForLineString(startLat, startLon, endLat, endLon) {\n const lineString = turfLineString([[startLon, startLat], [endLon, endLat]]);\n const length = turfLength(lineString, { units: \"meters\" });\n const intervalLength = 100;\n const numberOfIntervals = length / intervalLength;\n let points: number[][] = [];\n points.push(lineString.geometry.coordinates[0]);\n for (let i = 0; i < numberOfIntervals; i++) {\n const point = turfAlong(lineString, i * intervalLength, {\n units: \"meters\",\n });\n points.push(point.geometry.coordinates);\n }\n points.push(lineString.geometry.coordinates[1]);\n return points;\n}\n\nexport function pointsOnLineString(coords, intervalLength = 500) {\n const lineString = turfLineString(coords)\n const length = turfLength(lineString, { units: \"meters\" });\n const numberOfIntervals = Math.floor(length / intervalLength)\n let points: number[][] = [];\n for (let i = 0; i < numberOfIntervals; i++) {\n const point = turfAlong(lineString, i * intervalLength, {\n units: \"meters\",\n });\n points.push(point.geometry.coordinates);\n }\n points.push(lineString.geometry.coordinates[lineString.geometry.coordinates.length - 1]);\n return points;\n}\n","import axios from \"axios\";\n\nexport async function search(\n string: string = \"*\",\n): Promise {\n const axiosClient = axios.create({\n headers: {\n 'x-typesense-api-key': window.typesenseSearchApiKey,\n },\n })\n let url = createTypesenseURL(string)\n\n try {\n let response = await axiosClient(url)\n return response.data as Object\n } catch (e) {\n return null\n }\n}\n\nfunction createTypesenseURL(\n query: string = \"*\"\n): string {\n let urlBase = 'https://' + window.typesenseUrl + \"/collections/trails/documents/search\"\n const url = new URL(urlBase);\n\n url.searchParams.append(\"q\", query);\n url.searchParams.append(\"per_page\", \"40\");\n url.searchParams.append(\"query_by\", \"name,short_address\")\n return url.href\n}\n","// To parse this data:\n//\n// import { Convert, Graphooper } from \"./file\";\n//\n// const graphooper = Convert.toGraphooper(json);\n//\n// These functions will throw an error if the JSON doesn't\n// match the expected interface, even if the JSON is valid.\nimport { LineStringFeature } from \"./LineStringFeature\";\nimport {MarkerFeature, setElevationData} from \"./MarkerFeature\";\nimport {plainToClass} from \"class-transformer\";\n\nexport interface Graphooper {\n hints: Hints;\n info: Info;\n paths: Path[];\n}\n\nexport interface Hints {\n \"visited_nodes.sum\": number;\n \"visited_nodes.average\": number;\n}\n\nexport interface Info {\n copyrights: string[];\n took: number;\n}\n\nexport interface Path {\n distance: number;\n weight: number;\n time: number;\n transfers: number;\n points_encoded: boolean;\n bbox: number[];\n points: Points;\n legs: any[];\n details: Details;\n ascend: number;\n descend: number;\n snapped_waypoints: Points;\n}\n\nexport interface Details {\n distance: Array;\n surface: Array>;\n}\n\nexport interface Points {\n type: string;\n coordinates: Array;\n}\n\n// Converts JSON strings to/from your types\n// and asserts the results of JSON.parse at runtime\nexport class Convert {\n public static toGraphooper(json: string): Graphooper {\n const graphooper: Graphooper = JSON.parse(json)\n return graphooper\n }\n\n public static graphooperToJson(value: Graphooper): string {\n return JSON.stringify(uncast(value, r(\"Graphooper\")), null, 2);\n }\n}\n\nfunction invalidValue(typ: any, val: any, key: any = \"\"): never {\n if (key) {\n throw Error(\n `Invalid value for key \"${key}\". Expected type ${JSON.stringify(\n typ\n )} but got ${JSON.stringify(val)}`\n );\n }\n throw Error(\n `Invalid value ${JSON.stringify(val)} for type ${JSON.stringify(typ)}`\n );\n}\n\nfunction jsonToJSProps(typ: any): any {\n if (typ.jsonToJS === undefined) {\n const map: any = {};\n typ.props.forEach((p: any) => (map[p.json] = { key: p.js, typ: p.typ }));\n typ.jsonToJS = map;\n }\n return typ.jsonToJS;\n}\n\nfunction jsToJSONProps(typ: any): any {\n if (typ.jsToJSON === undefined) {\n const map: any = {};\n typ.props.forEach((p: any) => (map[p.js] = { key: p.json, typ: p.typ }));\n typ.jsToJSON = map;\n }\n return typ.jsToJSON;\n}\n\nfunction transform(val: any, typ: any, getProps: any, key: any = \"\"): any {\n function transformPrimitive(typ: string, val: any): any {\n if (typeof typ === typeof val) return val;\n return invalidValue(typ, val, key);\n }\n\n function transformUnion(typs: any[], val: any): any {\n // val must validate against one typ in typs\n const l = typs.length;\n for (let i = 0; i < l; i++) {\n const typ = typs[i];\n try {\n return transform(val, typ, getProps);\n } catch (_) {}\n }\n return invalidValue(typs, val);\n }\n\n function transformEnum(cases: string[], val: any): any {\n if (cases.indexOf(val) !== -1) return val;\n return invalidValue(cases, val);\n }\n\n function transformArray(typ: any, val: any): any {\n // val must be an array with no invalid elements\n if (!Array.isArray(val)) return invalidValue(\"array\", val);\n return val.map((el) => transform(el, typ, getProps));\n }\n\n function transformDate(val: any): any {\n if (val === null) {\n return null;\n }\n const d = new Date(val);\n if (isNaN(d.valueOf())) {\n return invalidValue(\"Date\", val);\n }\n return d;\n }\n\n function transformObject(\n props: { [k: string]: any },\n additional: any,\n val: any\n ): any {\n if (val === null || typeof val !== \"object\" || Array.isArray(val)) {\n return invalidValue(\"object\", val);\n }\n const result: any = {};\n Object.getOwnPropertyNames(props).forEach((key) => {\n const prop = props[key];\n const v = Object.prototype.hasOwnProperty.call(val, key)\n ? val[key]\n : undefined;\n result[prop.key] = transform(v, prop.typ, getProps, prop.key);\n });\n Object.getOwnPropertyNames(val).forEach((key) => {\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\n result[key] = transform(val[key], additional, getProps, key);\n }\n });\n return result;\n }\n\n if (typ === \"any\") return val;\n if (typ === null) {\n if (val === null) return val;\n return invalidValue(typ, val);\n }\n if (typ === false) return invalidValue(typ, val);\n while (typeof typ === \"object\" && typ.ref !== undefined) {\n typ = typeMap[typ.ref];\n }\n if (Array.isArray(typ)) return transformEnum(typ, val);\n if (typeof typ === \"object\") {\n return typ.hasOwnProperty(\"unionMembers\")\n ? transformUnion(typ.unionMembers, val)\n : typ.hasOwnProperty(\"arrayItems\")\n ? transformArray(typ.arrayItems, val)\n : typ.hasOwnProperty(\"props\")\n ? transformObject(getProps(typ), typ.additional, val)\n : invalidValue(typ, val);\n }\n // Numbers can be parsed by Date but shouldn't be.\n if (typ === Date && typeof val !== \"number\") return transformDate(val);\n return transformPrimitive(typ, val);\n}\n\nfunction cast(val: any, typ: any): T {\n return transform(val, typ, jsonToJSProps);\n}\n\nfunction uncast(val: T, typ: any): any {\n return transform(val, typ, jsToJSONProps);\n}\n\nfunction a(typ: any) {\n return { arrayItems: typ };\n}\n\nfunction u(...typs: any[]) {\n return { unionMembers: typs };\n}\n\nfunction o(props: any[], additional: any) {\n return { props, additional };\n}\n\nfunction m(additional: any) {\n return { props: [], additional };\n}\n\nfunction r(name: string) {\n return { ref: name };\n}\n\nconst typeMap: any = {\n Graphooper: o(\n [\n { json: \"hints\", js: \"hints\", typ: r(\"Hints\") },\n { json: \"info\", js: \"info\", typ: r(\"Info\") },\n { json: \"paths\", js: \"paths\", typ: a(r(\"Path\")) },\n ],\n false\n ),\n Hints: o(\n [\n { json: \"visited_nodes.sum\", js: \"visited_nodes.sum\", typ: 0 },\n { json: \"visited_nodes.average\", js: \"visited_nodes.average\", typ: 0 },\n ],\n false\n ),\n Info: o(\n [\n { json: \"copyrights\", js: \"copyrights\", typ: a(\"\") },\n { json: \"took\", js: \"took\", typ: 0 },\n ],\n false\n ),\n Path: o(\n [\n { json: \"distance\", js: \"distance\", typ: 3.14 },\n { json: \"weight\", js: \"weight\", typ: 3.14 },\n { json: \"time\", js: \"time\", typ: 0 },\n { json: \"transfers\", js: \"transfers\", typ: 0 },\n { json: \"points_encoded\", js: \"points_encoded\", typ: true },\n { json: \"bbox\", js: \"bbox\", typ: a(3.14) },\n { json: \"points\", js: \"points\", typ: r(\"Points\") },\n { json: \"legs\", js: \"legs\", typ: a(\"any\") },\n { json: \"details\", js: \"details\", typ: r(\"Details\") },\n { json: \"ascend\", js: \"ascend\", typ: 3.14 },\n { json: \"descend\", js: \"descend\", typ: 3.14 },\n { json: \"snapped_waypoints\", js: \"snapped_waypoints\", typ: r(\"Points\") },\n ],\n false\n ),\n Details: o(\n [\n { json: \"distance\", js: \"distance\", typ: a(a(3.14)) },\n { json: \"surface\", js: \"surface\", typ: a(a(u(0, \"\"))) },\n ],\n false\n ),\n Points: o(\n [\n { json: \"type\", js: \"type\", typ: \"\" },\n { json: \"coordinates\", js: \"coordinates\", typ: a(a(3.14)) },\n ],\n false\n ),\n};\n\nexport async function snapPoints(startMarker: MarkerFeature, endMarker: MarkerFeature, routePreference: String = \"hike\"): Promise {\n const key = \"9d14d718-4052-4e8a-81ea-67f6dec7326d\";\n try {\n const snapJson = await fetch(\n `https://graphhopper.com/api/1/route` +\n `?point=${startMarker.markerGeometry.coordinates[1]},${startMarker.markerGeometry.coordinates[0]}` +\n `&point=${endMarker.markerGeometry.coordinates[1]},${endMarker.markerGeometry.coordinates[0]}` +\n `&instructions=false&points_encoded=false` +\n `&details=surface&details=distance` +\n `&elevation=true` +\n `&profile=${routePreference}` +\n `&key=${key}`,\n {\n cache: \"force-cache\",\n }\n );\n let response = await snapJson.text();\n const graphooper = Convert.toGraphooper(response);\n await setElevationData(startMarker);\n // graphooper.paths[0].points.coordinates.push(endMarker.markerGeometry.coordinates) #Dont add end point.\n return graphooperToGeoJson(graphooper)\n } catch (e) {\n throw e\n }\n}\n\nexport function graphooperToGeoJson(graphooper: Graphooper): LineStringFeature {\n return LineStringFeature.fromGraphooper(graphooper);\n}\n","import {Graphooper} from \"./Graphooper\";\nimport {MarkerFeature} from \"./MarkerFeature\";\nimport {generateID} from \"../helpers/IDGenerator\";\nimport pointsForLineString from \"../helpers/PointOnStraightLineHelper\";\nimport {encode} from \"@mapbox/polyline\";\nimport mapboxgl from \"mapbox-gl\";\n\nexport class LineStringFeature {\n type: string = \"Feature\";\n lineStringGeometry: LineStringGeometry;\n lineStringProperties: LineStringProperties;\n bbox: number[];\n\n public constructor(\n lineStringGeometry: LineStringGeometry,\n lineStringProperties: LineStringProperties,\n bbox: number[]\n ) {\n this.lineStringGeometry = lineStringGeometry;\n this.lineStringProperties = lineStringProperties;\n this.bbox = bbox;\n }\n\n toWKT(): string {\n let wkt = \"LINESTRING(\";\n for (let i = 0; i < this.lineStringGeometry.coordinates.length; i++) {\n let coordinate = this.lineStringGeometry.coordinates[i];\n wkt += coordinate[0] + \" \" + coordinate[1] + \" \" + (coordinate[2] ?? 0.0);\n if (i + 1 < this.lineStringGeometry.coordinates.length) {\n wkt += \", \";\n }\n }\n wkt += \")\";\n return wkt;\n }\n\n static straightLine(\n startMarker: MarkerFeature,\n endMarker: MarkerFeature\n ): LineStringFeature {\n let points = pointsForLineString(startMarker.markerGeometry.coordinates[1], startMarker.markerGeometry.coordinates[0], endMarker.markerGeometry.coordinates[1], endMarker.markerGeometry.coordinates[0]);\n return LineStringFeature.coordsOnlyFeature(points);\n }\n\n static coordsOnlyFeature(coordinates: number[][]): LineStringFeature {\n let properties = new LineStringProperties(\n 0,\n 0,\n [],\n new LineStringPropertiesExtra(\n new LineStringPropertiesSurface([], []),\n new LineStringPropertiesWaytypes([], []),\n []\n ),\n new LineStringPropertiesSummary(0, 0),\n []\n )\n properties.id = generateID()\n return new LineStringFeature(\n new LineStringGeometry(coordinates),\n properties,\n []\n );\n }\n\n static fromGeoJsonForEdit(geoJson: any): LineStringFeature {\n return LineStringFeature.coordsOnlyFeature(geoJson[\"geometry\"][\"coordinates\"])\n }\n\n static fromGeoJson(geoJson: any): LineStringFeature {\n return new LineStringFeature(\n new LineStringGeometry(geoJson[\"geometry\"][\"coordinates\"]),\n new LineStringProperties(\n geoJson[\"properties\"][\"ascent\"],\n geoJson[\"properties\"][\"descent\"],\n geoJson[\"properties\"][\"segments\"],\n new LineStringPropertiesExtra(\n new LineStringPropertiesSurface(\n geoJson[\"properties\"][\"extras\"][\"surface\"][\"values\"],\n geoJson[\"properties\"][\"extras\"][\"surface\"][\"summary\"]\n ),\n new LineStringPropertiesWaytypes(\n geoJson[\"properties\"][\"extras\"][\"waytypes\"][\"values\"],\n geoJson[\"properties\"][\"extras\"][\"waytypes\"][\"summary\"]\n ),\n geoJson[\"properties\"][\"extras\"][\"distances\"]\n ),\n new LineStringPropertiesSummary(\n geoJson[\"properties\"][\"summary\"][\"distance\"],\n geoJson[\"properties\"][\"summary\"][\"duration\"]\n ),\n geoJson[\"properties\"][\"wayPoints\"]\n ),\n geoJson[\"bbox\"]\n );\n }\n\n static fromGraphooper(graphooper: Graphooper): LineStringFeature {\n let path = graphooper.paths[0];\n let properties = new LineStringProperties(\n path.ascend,\n path.descend,\n [],\n new LineStringPropertiesExtra(\n new LineStringPropertiesSurface(path.details.surface, []),\n new LineStringPropertiesWaytypes([], []),\n path.details.distance\n ),\n new LineStringPropertiesSummary(path.distance, path.time / 1000),\n []\n );\n properties.id = generateID()\n return new LineStringFeature(\n new LineStringGeometry(path.points.coordinates),\n properties,\n path.bbox\n );\n }\n\n toGeoJsonSource(): mapboxgl.GeoJSONSource {\n return {\n type: \"geojson\",\n // @ts-ignore\n data: this.toGeoJson(),\n };\n }\n\n toGeoJsonString() {\n return JSON.stringify(this.toGeoJson());\n }\n\n toElevationGain(): number {\n const coords = this.lineStringGeometry.coordinates\n // If we don't have at least 2 points, return 0\n if (coords.length < 2) {\n return 0.0\n }\n\n let totalElevationGain = 0.0\n let baseElevation = coords[0][2] // Start at the first altitude\n\n // Loop from the second coordinate onward\n for (let i = 1; i < coords.length; i++) {\n const altitude = coords[i][2]\n const elevationChange = altitude - baseElevation\n\n // If the elevation change is above threshold, count it and reset baseElevation\n if (elevationChange > 6) {\n totalElevationGain += elevationChange\n baseElevation = altitude\n }\n // If altitude drops below the current base, reset baseElevation\n else if (altitude < baseElevation) {\n baseElevation = altitude\n }\n }\n\n return totalElevationGain\n }\n\n toGeoJson() {\n return {\n type: \"Feature\",\n bbox: this.bbox,\n geometry: {\n type: \"LineString\",\n coordinates: this.lineStringGeometry.coordinates,\n },\n properties: {\n ascent: this.lineStringProperties.ascent,\n descent: this.lineStringProperties.descent,\n segments: [],\n extras: {\n surface: {\n values: this.lineStringProperties.extras.surface.values,\n summary: [],\n },\n waytypes: { values: [], summary: [] },\n distances: this.lineStringProperties.extras.distances,\n },\n summary: {\n distance: this.lineStringProperties.summary.distance,\n duration: this.lineStringProperties.summary.duration,\n },\n wayPoints: [],\n },\n };\n }\n\n toStaticMap(): String {\n const encodedPolyline = encode(this.lineStringGeometry.coordinates.map((coordinate) => [coordinate[1], coordinate[0]]));\n const path = \"&path=stroke:red|fill:none|enc:\" + encodedPolyline;\n return `https://api.maptiler.com/maps/topo-v2/static/auto/600x600.jpg?key=eiYbK75yQcfs8fMBLBi0${path}`;\n }\n}\n\nexport class LineStringGeometry {\n type: string = \"LineString\";\n coordinates: number[][] = [];\n\n constructor(coordinates: number[][]) {\n this.coordinates = coordinates;\n }\n}\n\nexport class LineStringProperties {\n ascent: number;\n descent: number;\n segments: number[];\n extras: LineStringPropertiesExtra;\n summary: LineStringPropertiesSummary;\n wayPoints: [];\n id: string | null = null;\n\n constructor(\n ascent: number,\n descent: number,\n segments: number[],\n extras: LineStringPropertiesExtra,\n summary: LineStringPropertiesSummary,\n wayPoints: []\n ) {\n this.ascent = ascent;\n this.descent = descent;\n this.segments = segments;\n this.extras = extras;\n this.summary = summary;\n this.wayPoints = wayPoints;\n }\n}\n\nexport class LineStringPropertiesSummary {\n distance: number;\n duration: number;\n\n constructor(distance: number, duration: number) {\n this.distance = distance;\n this.duration = duration;\n }\n}\n\nexport class LineStringPropertiesExtra {\n surface: LineStringPropertiesSurface;\n waytypes: LineStringPropertiesWaytypes;\n distances: number[][];\n\n constructor(\n surface: LineStringPropertiesSurface,\n waytypes: LineStringPropertiesWaytypes,\n distances: number[][]\n ) {\n this.surface = surface;\n this.waytypes = waytypes;\n this.distances = distances;\n }\n}\n\nexport class LineStringPropertiesSurface {\n values: Array<(string | number)[]>;\n summary: number[];\n\n constructor(values: Array<(string | number)[]>, summary: number[]) {\n this.values = values;\n this.summary = summary;\n }\n\n surfaceIntToString(index: number): string | null {\n const surfaceInt = this.values[index][0];\n switch (surfaceInt) {\n case 0:\n return `unknown`;\n case 1:\n return `paved`;\n case 2:\n return `unpaved`;\n case 3:\n return `asphalt`;\n case 4:\n return `concrete`;\n case 5:\n return `cobblestone`;\n case 6:\n return `metal`;\n case 7:\n return `wood`;\n case 8:\n return `compactedGravel`;\n case 9:\n return `fineGravel`;\n case 10:\n return `gravel`;\n case 11:\n return `dirt`;\n case 12:\n return `ground`;\n case 13:\n return `ice`;\n case 14:\n return `pavingStones`;\n case 15:\n return `sand`;\n case 16:\n return `woodchips`;\n case 17:\n return `grass`;\n case 18:\n return `grassPaver`;\n default:\n return null;\n }\n }\n}\n\nexport class LineStringPropertiesWaytypes {\n values: number[][];\n summary: number[];\n\n constructor(values: number[][], summary: number[]) {\n this.values = values;\n this.summary = summary;\n }\n}\n","import mapboxgl from \"mapbox-gl\";\nimport {plainToClass, Type} from \"class-transformer\";\n// import store from \"../../plan_trail/store/store\";\nimport {generateID} from \"../helpers/IDGenerator\"\nimport {singleHiikerElevation} from \"../helpers/HiikerElevationApiHelper\";\nimport {LineStringFeature, LineStringGeometry} from \"./LineStringFeature\";\n\nexport async function setElevationData(any) {\n let hiikerElevation = await singleHiikerElevation(any.markerGeometry.coordinates[1], any.markerGeometry.coordinates[0])\n if (hiikerElevation != null) {\n any.markerProperties.ele = parseInt(hiikerElevation.elevation)\n any.markerGeometry.coordinates = [hiikerElevation.lng, hiikerElevation.lat, hiikerElevation.elevation]\n }\n}\n\nexport class MarkerFeature {\n type: string = \"Feature\";\n markerGeometry: MarkerGeometry;\n markerProperties: MarkerProperties;\n\n constructor (markerGeometry: MarkerGeometry, markerProperties: MarkerProperties) {\n this.markerGeometry = markerGeometry;\n this.markerProperties = markerProperties;\n }\n\n static async fromCoordinates(coordinates: number[], skipElevation = false): Promise {\n let markerFeature = new MarkerFeature(\n new MarkerGeometry(coordinates),\n new MarkerProperties(generateID(), true, Date.now().toString(), 0)\n );\n if (!skipElevation) {\n await markerFeature.setElevationData()\n }\n return markerFeature;\n }\n\n static fromGeoJson(geoJson: any) {\n return new MarkerFeature(\n new MarkerGeometry(geoJson.geometry.coordinates),\n new MarkerProperties(`${generateID()}`, geoJson.properties.snap, geoJson.properties.date, geoJson.properties.elevation_meters)\n );\n }\n\n\n async setElevationData() {\n await setElevationData(this)\n }\n\n toGeoJSONSourceRaw(): mapboxgl.GeoJSONSourceRaw {\n return {\n type: \"geojson\",\n // @ts-ignore\n data: this.toGeoJson(),\n };\n }\n\n toGeoJson() {\n return {\n type: \"Feature\",\n geometry: plainToClass(MarkerGeometry, this.markerGeometry).toJson(),\n properties: plainToClass(MarkerProperties, this.markerProperties).toJson(),\n };\n }\n\n toGeoJsonString(): string {\n return JSON.stringify(this.toGeoJson());\n }\n}\n\nexport class MarkerGeometry {\n type: string = \"Point\";\n coordinates: number[] = [];\n\n lat(): number {\n return this.coordinates[1]\n }\n\n lon(): number {\n return this.coordinates[0]\n }\n\n constructor (coordinates: number[]) {\n this.coordinates = coordinates\n }\n\n toJson() {\n return {\n type: \"Point\",\n coordinates: this.coordinates,\n };\n }\n}\n\nexport class MarkerProperties {\n id: string;\n isSnap: boolean;\n date: string;\n ele: number;\n lineStringFeatures: LineStringFeature[] = []\n\n constructor (id: string, isSnap: boolean, date: string, ele: number) {\n this.id = id;\n this.isSnap = isSnap;\n this.date = date;\n this.ele = ele;\n }\n\n toJson() {\n return {\n id: this.id,\n isSnap: this.isSnap,\n date: this.date,\n ele: this.ele,\n };\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal fade\",staticStyle:{\"background-color\":\"rgba(7,7,7,0.36)\"},attrs:{\"id\":\"go-to-location-dialog\",\"tabindex\":\"-1\",\"role\":\"dialog\",\"aria-hidden\":\"true\"}},[_c('div',{staticClass:\"modal-dialog modal-dialog-centered\",attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-body p-5\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"input-group rounded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.coord),expression:\"coord\"}],staticClass:\"form-control py-3\",attrs:{\"autocomplete\":\"off\",\"id\":\"location-input\",\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":(_vm.coord)},on:{\"input\":function($event){if($event.target.composing)return;_vm.coord=$event.target.value}}})]),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"location-dropdown\"}}),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-secondary mr-2\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_vm._v(\"CANCEL\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-primary\",on:{\"click\":_vm.goToLocation}},[_vm._v(\"GO TO LOCATION\")])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('h3',{staticClass:\"mb-3\"},[_c('strong',[_vm._v(\"Search GPS or Location\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12\"},[_c('hr')])])\n}]\n\nexport { render, staticRenderFns }","import {GridRef} from \"./GridRefPreference\";\n\nconst RECENT_SEARCHES_KEY = \"recentSearches\";\n\nexport function addRecentSearchToLocalStorage(search: string, forGridRef: GridRef) {\n const recentSearches = getRecentSearchesFromLocalStorage(forGridRef);\n const newRecentSearches = [search, ...recentSearches];\n localStorage.setItem(RECENT_SEARCHES_KEY, JSON.stringify(newRecentSearches));\n}\n\nexport function getRecentSearchesFromLocalStorage(forGridRef: GridRef): string[] {\n const recentSearches = localStorage.getItem(RECENT_SEARCHES_KEY + forGridRef.toString());\n if (recentSearches) {\n return JSON.parse(recentSearches);\n }\n return [];\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GoToLocationDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GoToLocationDialog.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./GoToLocationDialog.vue?vue&type=template&id=1172645f&\"\nimport script from \"./GoToLocationDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./GoToLocationDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GoToLocationDialog.vue?vue&type=style&index=0&id=1172645f&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"modal fade\",staticStyle:{\"background-color\":\"rgba(7,7,7,0.36)\"},attrs:{\"id\":\"import-route-multiple-options-dialog\",\"tabindex\":\"-1\",\"role\":\"dialog\",\"aria-hidden\":\"true\"}},[_c('div',{staticClass:\"modal-dialog modal-md modal-dialog-centered\",attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-body p-5\"},[_vm._m(0),_vm._v(\" \"),_c('p',[_vm._v(\"The file that you have imported contains multiple routes. Select the route that you wish to used for your planned trail.\")]),_vm._v(\" \"),_c('div',{staticClass:\"route-grid\"},_vm._l((_vm.routes.slice(0, _vm.countToShow)),function(route){return _c('div',{key:route.id,staticStyle:{\"height\":\"70%\"}},[_c('a',{staticClass:\"card textIn\",on:{\"click\":function($event){return _vm.importRoute(route)}}},[_c('span',{staticClass:\"text\"},[_vm._v(\"OPEN\")]),_vm._v(\" \"),(route.image)?[_c('img',{staticClass:\"card-img-top\",attrs:{\"src\":route.image,\"alt\":\"...\"}})]:_vm._e(),_vm._v(\" \"),(route.selected)?[_c('p',[_vm._v(\"Selected\")])]:_vm._e()],2)])}),0),_vm._v(\" \"),(_vm.routes.length > _vm.countToShow)?_c('div',[_c('button',{staticClass:\"btn btn-block btn-link mt-3\",on:{\"click\":function($event){_vm.countToShow += 5}}},[_vm._v(\"Show More\")])]):_vm._e(),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-secondary mt-3\",attrs:{\"data-bs-dismiss\":\"modal\",\"aria-label\":\"Close\"}},[_vm._v(\"Close\")])])])]),_vm._v(\" \"),_c('LoadingDialog',{attrs:{\"show-loading-dialog\":_vm.loading}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('h3',{staticClass:\"mb-3\"},[_c('strong',[_vm._v(\"Select route to import\")])])\n}]\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImportRouteMultipleOptionsDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImportRouteMultipleOptionsDialog.vue?vue&type=script&lang=ts&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./ImportRouteMultipleOptionsDialog.vue?vue&type=template&id=7c6401e1&scoped=true&\"\nimport script from \"./ImportRouteMultipleOptionsDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./ImportRouteMultipleOptionsDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ImportRouteMultipleOptionsDialog.vue?vue&type=style&index=0&id=7c6401e1&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7c6401e1\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal fade\",staticStyle:{\"background-color\":\"rgba(7,7,7,0.36)\"},attrs:{\"id\":\"trail-import-dialog\",\"tabindex\":\"-1\",\"role\":\"dialog\",\"aria-hidden\":\"true\"}},[_c('div',{staticClass:\"modal-dialog modal-md modal-dialog-centered\",attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_c('div',{staticClass:\"modal-body p-5\"},[_c('div',{staticClass:\"row\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"col-4\"},[_c('button',{staticClass:\"btn btn-block btn-primary d-flex align-items-center justify-content-center\",on:{\"click\":_vm.importGPXClicked}},[_vm._v(\"\\n IMPORT FILE\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"input-group hero-search rounded mt-3\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchString),expression:\"searchString\"}],staticClass:\"form-control py-3\",attrs:{\"autocomplete\":\"off\",\"id\":\"trail-input\",\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":(_vm.searchString)},on:{\"input\":function($event){if($event.target.composing)return;_vm.searchString=$event.target.value}}})]),_vm._v(\" \"),_c('div',{staticClass:\"row mt-3\"},[_c('div',{staticClass:\"col-12\"},[_c('div',{staticClass:\"rounded\",attrs:{\"id\":\"results\"}},[(_vm.curatedTrailResults.length > 0)?[_vm._m(1),_vm._v(\" \"),_vm._l((_vm.curatedTrailResults.slice(0, _vm.curatedTrailShowMore ? 1000 : 5)),function(result){return _c('div',{key:result.document.id},[_c('TrailImportDialogSearchResultsListItem',{attrs:{\"name\":result.document.name,\"distance-meters\":result.document.distance,\"thumbnail-url\":result.document.jumbo_image,\"obj\":result,\"click\":_vm.curatedTrailClicked}})],1)}),_vm._v(\" \"),(!_vm.curatedTrailShowMore && _vm.curatedTrailResults.length > 5)?[_c('div',{staticClass:\"d-flex justify-content-center align-items-center\"},[_c('button',{staticClass:\"btn btn-link\",on:{\"click\":function($event){_vm.curatedTrailShowMore = true}}},[_vm._v(\"Show More\")])])]:_vm._e()]:_vm._e()],2)])]),_vm._v(\" \"),_c('div',{staticClass:\"row mt-3\"},[_c('div',{staticClass:\"col-12\"},[_c('div',{staticClass:\"rounded\",attrs:{\"id\":\"results\"}},[(_vm.plannedTrailResults.length > 0)?[_vm._m(2),_vm._v(\" \"),_vm._l((_vm.plannedTrailResults.slice(0, _vm.plannedTrailShowMore ? 1000 : 5)),function(plannedTrail){return _c('div',{key:plannedTrail.id},[_c('TrailImportDialogSearchResultsListItem',{attrs:{\"name\":plannedTrail.title,\"distance-meters\":plannedTrail.distanceMeters,\"thumbnail-url\":plannedTrail.thumbnailUrl,\"obj\":plannedTrail,\"click\":_vm.planedTrailClicked}})],1)}),_vm._v(\" \"),(!_vm.plannedTrailShowMore && _vm.plannedTrailResults.length > 5)?[_c('div',{staticClass:\"d-flex justify-content-center align-items-center\"},[_c('button',{staticClass:\"btn btn-link\",on:{\"click\":function($event){_vm.plannedTrailShowMore = true}}},[_vm._v(\"Show More\")])])]:_vm._e()]:_vm._e()],2)])]),_vm._v(\" \"),_c('div',{staticClass:\"row mt-3\"},[_c('div',{staticClass:\"col-12\"},[_c('div',{staticClass:\"rounded\",attrs:{\"id\":\"results\"}},[(_vm.recordedTrailResults.length > 0)?[_vm._m(3),_vm._v(\" \"),_vm._l((_vm.recordedTrailResults.slice(0, _vm.recordedTrailShowMore ? 1000 : 5)),function(recordedTrail){return _c('div',{key:recordedTrail.id},[_c('TrailImportDialogSearchResultsListItem',{attrs:{\"name\":recordedTrail.title,\"distance-meters\":recordedTrail.distanceMeters,\"thumbnail-url\":recordedTrail.thumbnailUrl,\"obj\":recordedTrail,\"click\":_vm.recordedTrailClicked}})],1)}),_vm._v(\" \"),(!_vm.recordedTrailShowMore && _vm.recordedTrailResults.length > 5)?[_c('div',{staticClass:\"d-flex justify-content-center align-items-center\"},[_c('button',{staticClass:\"btn btn-link\",on:{\"click\":function($event){_vm.recordedTrailShowMore = true}}},[_vm._v(\"Show More\")])])]:_vm._e()]:_vm._e()],2)])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-secondary mr-2\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_vm._v(\"Close\")])])])]),_vm._v(\" \"),_c('LoadingDialog',{attrs:{\"show-loading-dialog\":_vm.loading}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"col-8\"},[_c('h3',[_c('strong',[_vm._v(\"Import Trails\")])]),_vm._v(\" \"),_c('p',[_c('small',[_vm._v(\"Start your plan with a pre existing trail from our trail or from your own custom activities\")])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('small',{staticClass:\"text-yellow mb-1\"},[_c('strong',[_vm._v(\"Hiiker Trails\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('small',{staticClass:\"text-yellow mb-1\"},[_c('strong',[_vm._v(\"Planned Trails\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('small',{staticClass:\"text-yellow mb-1\"},[_c('strong',[_vm._v(\"Recorded Trails\")])])\n}]\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TrailImportDialogSearchResultsListItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TrailImportDialogSearchResultsListItem.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./TrailImportDialogSearchResultsListItem.vue?vue&type=template&id=f130a94e&scoped=true&\"\nimport script from \"./TrailImportDialogSearchResultsListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./TrailImportDialogSearchResultsListItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TrailImportDialogSearchResultsListItem.vue?vue&type=style&index=0&id=f130a94e&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f130a94e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{},[_c('div',{staticClass:\"d-flex justify-content-between align-items-center mt-2 mb-2\",staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":function($event){return _vm.click(_vm.obj)}}},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('img',{staticClass:\"rounded-circle\",attrs:{\"src\":_vm.thumbnailUrl,\"width\":\"50\",\"height\":\"50\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"d-flex flex-column ml-3\"},[_c('div',{staticClass:\"d-flex align-items-center ellipsis\"},[_c('p',{staticClass:\"m-0\"},[_c('strong',[_vm._v(_vm._s(_vm.name))])])]),_vm._v(\" \"),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('small',{staticClass:\"text-muted\"},[_vm._v(_vm._s(_vm.measurementPreference.smallUnitFormatter(_vm.distanceMeters, true)))])])])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-sm btn-secondary\"},[_vm._v(\"\\n OPEN\\n \")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TrailImportDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TrailImportDialog.vue?vue&type=script&lang=js&\"","\n\n\n\n\n","import { render, staticRenderFns } from \"./TrailImportDialog.vue?vue&type=template&id=0fce35b4&\"\nimport script from \"./TrailImportDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./TrailImportDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TrailImportDialog.vue?vue&type=style&index=0&id=0fce35b4&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"names":["IndexedDBCache","constructor","dbName","arguments","length","undefined","storeName","this","dbPromise","initDB","Promise","resolve","reject","request","indexedDB","open","onupgradeneeded","db","result","objectStoreNames","contains","createObjectStore","keyPath","onsuccess","onerror","error","async","url","transaction","objectStore","get","blob","put","Tile","x","y","z","static","lat","lon","zoom","isNaN","Error","latRad","Math","max","min","PI","n","pow","floor","log","tan","cos","getElevation","coord","cache","lng","validateCoordinates","tile","fromCoordinates","tileUrl","cachedBlob","response","fetch","ok","statusText","set","fetchAndCacheBlob","pixelCoords","tileSize","lonDeg","getPixelCoordinates","elevation","imageBitmap","createImageBitmap","canvas","OffscreenCanvas","width","height","document","createElement","ctx","getContext","drawImage","pixelData","getImageData","data","getElevationFromBlob","MeasurementPrefUtility","smallUnitFormatter","message","copyToClipboard","text","completion","navigator","clipboard","writeText","then","console","getElementById","style","display","catch","err","createGeoLocate","map","window","geolocate","mapboxgl","positionOptions","enableHighAccuracy","trackUserLocation","showUserLocation","showAccuracyCircle","on","event","geolocateLocated","geolocateError","permissionAndTrigger","permissions","query","name","state","trigger","geolocation","getCurrentPosition","alert","addControl","hideGeolocateButton","element","querySelector","warn","mapRenderInstance","mapRendered","loaded","off","geoLocate","Convert","json","cast","JSON","parse","a","r","value","stringify","val","typ","transform","jsToJSONProps","invalidValue","key","jsonToJSProps","jsonToJS","props","forEach","p","js","jsToJSON","getProps","ref","typeMap","Array","isArray","cases","indexOf","transformEnum","hasOwnProperty","typs","l","i","_","transformUnion","unionMembers","el","transformArray","arrayItems","additional","Object","getOwnPropertyNames","prop","v","prototype","call","transformObject","Date","d","valueOf","transformDate","transformPrimitive","hiikerElevation","startMarker","endMarker","coordsForElevationAPI","pointsForLineString","markerGeometry","coordinates","point","requestOptions","method","body","coords","properties","LineStringProperties","LineStringPropertiesExtra","LineStringPropertiesSurface","LineStringPropertiesWaytypes","LineStringPropertiesSummary","id","generateID","LineStringFeature","LineStringGeometry","hiikerElevationToLineStringFeature","toHiikerElevation","getElevationData","singleHiikerElevation","startLat","startLon","endLat","endLon","lineString","turfLineString","numberOfIntervals","turfLength","units","points","push","geometry","turfAlong","search","string","axiosClient","axios","headers","typesenseSearchApiKey","urlBase","typesenseUrl","URL","searchParams","append","href","createTypesenseURL","e","o","Graphooper","Hints","Info","Path","Details","_len","_key","u","Points","snapPoints","routePreference","snapJson","graphooper","toGraphooper","setElevationData","graphooperToGeoJson","type","lineStringGeometry","lineStringProperties","bbox","toWKT","wkt","coordinate","coordsOnlyFeature","geoJson","path","paths","ascend","descend","details","surface","distance","time","toGeoJsonSource","toGeoJson","toGeoJsonString","toElevationGain","totalElevationGain","baseElevation","altitude","elevationChange","ascent","descent","segments","extras","values","summary","waytypes","distances","duration","wayPoints","toStaticMap","encode","surfaceIntToString","index","any","markerProperties","ele","parseInt","MarkerFeature","skipElevation","markerFeature","MarkerGeometry","MarkerProperties","now","toString","snap","date","elevation_meters","toGeoJSONSourceRaw","plainToClass","toJson","lineStringFeatures","isSnap","RECENT_SEARCHES_KEY","addRecentSearchToLocalStorage","forGridRef","recentSearches","localStorage","getItem","getRecentSearchesFromLocalStorage","newRecentSearches","setItem","defineComponent","placeholder","gridRef","watch","input","dropdown","trim","innerHTML","GridRefUtils","location","option","textContent","display_name","addEventListener","boundingbox","parseFloat","bounds","fitBounds","padding","$store","dispatch","flyTo","center","$","modal","appendChild","gridRefUtils","GridRef","methods","gridRefPreference","convertLetteredIrishGridRefToLonLat","convertLetteredGBGridRefToLatLng","split","LngLat","convertNzGridRefToLonLat","latLng","lngLat","essential","formatFeedback","_vm","_c","_self","_setupProxy","staticClass","staticStyle","attrs","_m","_v","directives","rawName","expression","domProps","$event","target","composing","goToLocation","components","LoadingDialog","loading","routes","countToShow","mounted","importRouteMultipleOptionsDialogShow","lineStrings","image","selected","lineStringFeature","importRoute","route","features","_l","slice","_e","String","default","distanceMeters","Number","thumbnailUrl","obj","click","Function","measurementPreference","_s","TrailImportDialogSearchResultsListItem","searchString","curatedTrailResults","curatedTrailShowMore","plannedTrailResults","plannedTrailShowMore","recordedTrailResults","recordedTrailShowMore","hits","graph_client","SearchUsersPlannedTrails","ptv2PlannedTrailsTextSearch","SearchUsersRecordedTrails","recordingsTextSearch","importGPXClicked","accept","self","onchange","files","file","trail","firebase","getToken","token","GetTrail","confirmed","confirm","bus","$emit","geoData","planedTrailClicked","GetPtv2PlannedTrail","ptv2PlannedTrailById","geojsonFeatureCollection","recordedTrailClicked","GetRecordedTrailById","slug","recordingBySlug","jumbo_image","curatedTrailClicked","plannedTrail","title","recordedTrail"],"sourceRoot":""}