{"version":3,"file":"js/plan_trail-d42486c863d282dbde55.js","mappings":"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","sources":["webpack://app/./app/webpack/src/plan_trail/PlanTrail.vue","webpack://app/app/webpack/src/plan_trail/components/PlanTrailLineChart.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailLineChart.vue?60e0","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailLineChart.vue?5b8a","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailLineChart.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailChartTopBar.vue?9828","webpack://app/app/webpack/src/plan_trail/components/PlanTrailChartTopBar.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailChartTopBar.vue?8140","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailChartTopBar.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailSaveModal.vue?4b1c","webpack://app/app/webpack/src/plan_trail/components/PlanTrailSaveModal.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailSaveModal.vue?e9fd","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailSaveModal.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailShareModal.vue?b2e2","webpack://app/app/webpack/src/plan_trail/components/PlanTrailShareModal.vue","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailShareModal.vue?f030","webpack://app/./app/webpack/src/plan_trail/components/PlanTrailShareModal.vue","webpack://app/app/webpack/src/plan_trail/PlanTrail.vue","webpack://app/./app/webpack/src/plan_trail/PlanTrail.vue?d41f","webpack://app/./app/webpack/src/plan_trail/PlanTrail.vue?355d","webpack://app/./app/webpack/src/plan_trail/store/modules/getters.ts","webpack://app/./app/webpack/src/plan_trail/store/modules/mutations.ts","webpack://app/./app/webpack/src/utils/helpers/ImportFileHelper.ts","webpack://app/./app/webpack/src/plan_trail/store/modules/actions.ts","webpack://app/./app/webpack/src/utils/helpers/GetLatLonFromURLForPlannedTrail.ts","webpack://app/./app/webpack/src/utils/helpers/IsClickOnPOIHelper.ts","webpack://app/./app/webpack/src/plan_trail/store/modules/PlanTrailModule.ts","webpack://app/./app/webpack/src/plan_trail/store/store.ts","webpack://app/./app/webpack/src/plan_trail/main.ts","webpack://app/./app/webpack/src/js/bugsnag.js","webpack://app/./app/webpack/src/map_data/store/modules/MapDataPOIsModule.ts","webpack://app/./app/webpack/src/map_data/store/modules/MapDataTrailsModule.ts","webpack://app/./app/webpack/src/utils/graphql/poi-graph.ts","webpack://app/./app/webpack/src/utils/helpers/PoiDetailsToWaypointDescriptionHelper.ts","webpack://app/./app/webpack/src/utils/helpers/datetimeLocalization.ts","webpack://app/./app/webpack/src/map_data/MapDataDialog.vue","webpack://app/./app/webpack/src/map_data/MapDataPOIsTab.vue?daf2","webpack://app/app/webpack/src/map_data/MapDataPOIsTab.vue","webpack://app/./app/webpack/src/map_data/MapDataPOIsTab.vue?82c2","webpack://app/./app/webpack/src/map_data/MapDataPOIsTab.vue","webpack://app/./app/webpack/src/map_data/MapDataDialog.vue?c942","webpack://app/app/webpack/src/map_data/MapDataDialog.vue","webpack://app/./app/webpack/src/map_data/MapDataDialog.vue?bb1f","webpack://app/./app/webpack/src/map_data/MapDataPOIDetailDialog.vue","webpack://app/./app/webpack/src/map_data/MapDataPOIDetailDialog.vue?4865","webpack://app/app/webpack/src/map_data/MapDataPOIDetailDialog.vue","webpack://app/./app/webpack/src/map_data/MapDataPOIDetailDialog.vue?2f09","webpack://app/./app/webpack/src/map_data/MapDataTrailsTab.vue","webpack://app/./app/webpack/src/map_data/MapDataTrailsTab.vue?e4ef","webpack://app/app/webpack/src/map_data/MapDataTrailsTab.vue","webpack://app/./app/webpack/src/map_data/MapDataTrailsTab.vue?fa93","webpack://app/./app/webpack/src/poi_detail_dialog/POIDetailDialog.vue","webpack://app/./app/webpack/src/poi_detail_dialog/POIDetailDialog.vue?6cde","webpack://app/app/webpack/src/poi_detail_dialog/POIDetailDialog.vue","webpack://app/./app/webpack/src/poi_detail_dialog/POIDetailDialog.vue?4905","webpack://app/./app/webpack/src/poi_dialog/POIDialog.vue","webpack://app/./app/webpack/src/poi_dialog/POIDialog.vue?fdb5","webpack://app/app/webpack/src/poi_dialog/POIDialog.vue","webpack://app/./app/webpack/src/poi_dialog/POIDialog.vue?4bec","webpack://app/./app/webpack/src/utils/shared_components/Loader.vue","webpack://app/./app/webpack/src/utils/shared_components/Loader.vue?16b7","webpack://app/app/webpack/src/utils/shared_components/Loader.vue","webpack://app/./app/webpack/src/utils/shared_components/Loader.vue?8ba7","webpack://app/./app/webpack/src/waypoint_adding_mode_notificaiton/WaypointAddingNotification.vue","webpack://app/./app/webpack/src/waypoint_adding_mode_notificaiton/WaypointAddingNotification.vue?9224","webpack://app/app/webpack/src/waypoint_adding_mode_notificaiton/WaypointAddingNotification.vue","webpack://app/./app/webpack/src/waypoint_adding_mode_notificaiton/WaypointAddingNotification.vue?29d7","webpack://app/./app/webpack/src/waypoint_dialog/WaypointDialog.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogEditWaypointDetails.vue?c0e6","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogEditWaypointDetails.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogEditWaypointDetails.vue?283d","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogEditWaypointDetails.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogOptions.vue?737d","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogOptions.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogOptions.vue?e194","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogOptions.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogViewWaypointDetails.vue?911a","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogViewWaypointDetails.vue","webpack://app/./app/webpack/src/utils/helpers/OpenOnGoogleMaps.ts","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogViewWaypointDetails.vue?b76c","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogViewWaypointDetails.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroups.vue?29a7","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroups.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroups.vue?a1ef","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroups.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupSelection.vue?1e7f","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupSelection.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupSelection.vue?e4a7","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupSelection.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupWaypoints.vue?885b","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupWaypoints.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupWaypoints.vue?c701","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypointGroupWaypoints.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypoints.vue?4fa1","webpack://app/app/webpack/src/waypoint_dialog/components/WaypointDialogWaypoints.vue","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypoints.vue?1bde","webpack://app/./app/webpack/src/waypoint_dialog/components/WaypointDialogWaypoints.vue","webpack://app/./app/webpack/src/waypoint_dialog/WaypointDialog.vue?a3c2","webpack://app/app/webpack/src/waypoint_dialog/WaypointDialog.vue","webpack://app/./app/webpack/src/waypoint_dialog/WaypointDialog.vue?c592"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"position-relative d-flex overflow-hidden\"},[_c('vue-topprogress',{ref:\"topProgress\",attrs:{\"height\":7,\"color\":\"#70C381\"}}),_vm._v(\" \"),_c('link',{attrs:{\"href\":\"https://api.mapbox.com/mapbox-gl-js/v3.10.0/mapbox-gl.css\",\"rel\":\"stylesheet\"}}),_vm._v(\" \"),_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"map-container\",class:{ 'query-mode': !this.planMode }},[_c('div',{staticClass:\"map-content\"},[_c('div',{ref:\"map\",staticClass:\"mapbox m-0 p-0\",staticStyle:{\"height\":\"90vh\"},attrs:{\"id\":\"map\"}}),_vm._v(\" \"),_c('MapButtons',{attrs:{\"button-clicked\":_vm.buttonClicked,\"buttons\":_vm.buttons}}),_vm._v(\" \"),_c('div',{staticClass:\"stats\"},[_c('p',[_c('b',[_vm._v(\"Distance:\")]),_vm._v(\" \"+_vm._s(this.$store.getters['planTrail/trailDistanceString']))]),_vm._v(\" \"),_c('p',{staticClass:\"m-0\"},[_c('b',[_vm._v(\"Elevation gain:\")]),_vm._v(\" \"+_vm._s(this.$store.getters['planTrail/elevationGainString'])+\" \")])]),_vm._v(\" \"),_c('div',{staticClass:\"position-absolute coordsbar\"},[_c('p',{staticClass:\"py-1 px-3 m-0\"},[_vm._v(_vm._s(this.$store.state.planTrail.miniCoordsBar))])]),_vm._v(\" \"),_c('div',{staticClass:\"chart-container chart-div\",on:{\"mouseleave\":function($event){_vm.hover = false},\"mouseenter\":function($event){_vm.hover = true}}},[_c('PlanTrailChartTopBar'),_vm._v(\" \"),_c('PlanTrailLineChart')],1),_vm._v(\" \"),_c('button',{staticClass:\"sidebar-btn d-flex align-items-center\",on:{\"click\":_vm.hideSidebar}},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"chevron_right\")])]),_vm._v(\" \"),_c('MapControls',{staticStyle:{\"position\":\"absolute\",\"bottom\":\"180px\",\"right\":\"20px\"}}),_vm._v(\" \"),_c('TrailDataCard'),_vm._v(\" \"),(_vm.miniLoader)?_c('Loader'):_vm._e()],1)]),_vm._v(\" \"),_c('div',{staticClass:\"right-sidebar map-sidebar active\"},[_c('div',{staticClass:\"sidebar-container\"},[_c('div',{staticClass:\"p-3\"},[_vm._m(1),_vm._v(\" \"),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.routePreference),expression:\"routePreference\"}],staticClass:\"form-control\",attrs:{\"id\":\"activity-select\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.routePreference=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"hike\"}},[_vm._v(\"Hike\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"car\"}},[_vm._v(\"Car\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"bike\"}},[_vm._v(\"Bike\")])])]),_vm._v(\" \"),_c('div',{staticClass:\"button-grid px-3 pt-3 pb-2\"},[_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",on:{\"click\":this.undoClicked}},[_c('span',{staticClass:\"material-icons mr-1\"},[_vm._v(\"undo\")]),_vm._v(\" Undo\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",on:{\"click\":this.redoClicked}},[_c('span',{staticClass:\"material-icons mr-1\"},[_vm._v(\"redo\")]),_vm._v(\" Redo\\n \")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-1\"}),_vm._v(\" \"),_vm._m(2),_vm._v(\" \"),_c('div',{staticClass:\"button-grid px-3 pb-3\"},[_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",class:{ 'btn-active': this.$store.state.planTrail.isSnap },attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Disable to plot routes in straight lines\"},on:{\"click\":_vm.snapClicked}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"timeline\")]),_vm._v(\"\\n Snap\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",class:{ 'btn-active': this.$store.state.planTrail.removalMode },attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Enable to remove control points\"},on:{\"click\":_vm.removalModeClicked}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"backspace\")]),_vm._v(\"\\n Delete\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",class:{ 'btn-active': this.planMode },attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Disable plan mode to interact with other map features\"},on:{\"click\":_vm.togglePlanMode}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"edit\")]),_vm._v(\"\\n Plan\\n \")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-1\"}),_vm._v(\" \"),_c('div',{staticClass:\"p-3\"},[_vm._m(3),_vm._v(\" \"),_c('div',{staticClass:\"button-grid\"},[_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Create loop to the start of the route\"},on:{\"click\":_vm.loopRoute}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"cached\")]),_vm._v(\"\\n Loop\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Switch start and end points\"},on:{\"click\":_vm.reverseRoute}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"sync_alt\")]),_vm._v(\"\\n Reverse\\n \")]),_vm._v(\" \"),_vm._m(4),_vm._v(\" \"),_c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Update the Elevation profile using additional data\"},on:{\"click\":_vm.updateElevation}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"auto_graph\")]),_vm._v(\"\\n Elevation sync\\n \")])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-1\"}),_vm._v(\" \"),_c('div',{staticClass:\"p-3 d-flex\"},[_c('button',{staticClass:\"btn btn-sm btn-primary btn-block\",attrs:{\"data-toggle\":\"modal\"},on:{\"click\":function($event){return _vm.saveClicked($event)}}},[_vm._v(\"\\n SAVE PLAN\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-sm btn-secondary square d-flex justify-content-center align-items-center ml-2\",attrs:{\"data-toggle\":\"modal\"},on:{\"click\":function($event){return _vm.shareClicked($event)}}},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"share\")])])]),_vm._v(\" \"),_c('div',{staticClass:\"px-3\"},[_c('button',{staticClass:\"btn btn-sm btn-link btn-block text-muted\",on:{\"click\":_vm.clearMap}},[_vm._v(\"\\n CLEAR\\n \")])])])]),_vm._v(\" \"),_c('BaseMapStylesDialog'),_vm._v(\" \"),_c('PlanTrailSaveModal'),_vm._v(\" \"),_c('PlanTrailShareModal'),_vm._v(\" \"),_c('GoToLocationDialog'),_vm._v(\" \"),_c('TrailImportDialog'),_vm._v(\" \"),_c('ImportRouteMultipleOptionsDialog'),_vm._v(\" \"),_c('LoadingDialog',{attrs:{\"show-loading-dialog\":this.$store.state.planTrail.loading}}),_vm._v(\" \"),_c('WaypointAddingNotification',{attrs:{\"enabled\":_vm.waypointAddingModeEnabled}}),_vm._v(\" \"),_c('MapDataDialog'),_vm._v(\" \"),_c('MapDataPOIDetailDialog'),_vm._v(\" \"),_c('WaypointDialog'),_vm._v(\" \"),_c('div',{staticClass:\"my-silly-class\"}),_vm._v(\" \"),_c('input',{staticStyle:{\"display\":\"none\"},attrs:{\"id\":\"file-selector\",\"type\":\"file\",\"accept\":\".gpx\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"mobileCTA d-flex justify-content-center align-items-center p-3\"},[_c('div',{staticClass:\"text-center d-flex align-items-center\",attrs:{\"id\":\"app-cta-overlay\"}},[_c('div',[_c('img',{staticClass:\"rounded mb-3\",attrs:{\"alt\":\"Hiiker app\",\"width\":\"250\",\"src\":require(\"../../src/img/app-hero-demo.webp\")}}),_vm._v(\" \"),_c('h3',[_c('strong',[_vm._v(\"Planning a hike on your mobile device?\")])]),_vm._v(\" \"),_c('p',[_c('small',[_vm._v(\"Get the best experience on the the HiiKER App\")])]),_vm._v(\" \"),_c('a',{staticClass:\"btn btn-primary mt-2\",attrs:{\"href\":\"/app\"}},[_c('span',[_vm._v(\"Open in app\")])])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('label',{attrs:{\"for\":\"activity-select\"}},[_c('b',[_vm._v(\"Route Preference:\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"pt-3 px-3\"},[_c('p',[_c('b',[_vm._v(\"Modes:\")])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"block mb-2\"},[_c('b',[_vm._v(\"Route options:\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"btn-toggle d-flex justify-content-center align-items-center\",attrs:{\"data-bs-toggle\":\"modal\",\"data-bs-target\":\"#trail-import-dialog\"}},[_c('span',{staticClass:\"material-icons d-flex justify-content-center mr-1\"},[_vm._v(\"upload_file\")]),_vm._v(\" \"),_c('span',{attrs:{\"data-bs-toggle\":\"tooltip\",\"data-bs-placement\":\"top\",\"data-bs-custom-class\":\"weather-tooltip\",\"title\":\"Import a route via GPX\"}},[_vm._v(\"\\n Import\\n \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div id=\"line-chart\" style=\"height: 150px\">\n <canvas id=\"elevationChart\"></canvas>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {MeasurementPrefUtility} from \"../../utils/helpers/MeasurementPref\";\nimport * as Chart from \"chart.js\";\nimport ElevationMarker from \"../../../assets/img/markers/elevation-icon-new-large.png\";\nimport {mapState, mapGetters} from \"vuex\";\nimport { defineComponent } from 'vue';\nimport mapboxgl from \"mapbox-gl\";\n\nvar elevationMarker: mapboxgl.Marker | null = null\n\nexport default defineComponent( {\n name: 'PlanTrailLineChart',\n data() {\n return {\n chart: null,\n };\n },\n watch: {\n chartData: async function(value) {\n await this.updateChartData(value)\n }\n },\n computed: mapGetters({\n chartData: 'planTrail/createChartData'\n }),\n mounted() {\n setTimeout(() => {\n let chartData = this.$store.getters['planTrail/createChartData'];\n this.updateChartData(chartData);\n }, 1000)\n },\n methods: {\n createElevationMarker() {\n const marker = new mapboxgl.Marker();\n const el = document.createElement('elevation');\n el.style.display = 'block';\n el.style.border = '3px solid #fff';\n el.style.cursor = 'pointer';\n el.style.padding = '0px';\n el.style.marginTop = '13px';\n el.style.backgroundColor = \"#bbb\";\n el.style.borderRadius = \"100%\";\n el.style.width = `${20}px`;\n el.style.height = `${20}px`;\n el.style.backgroundSize = 'cover';\n el.style.backgroundRepeat = 'no-repeat';\n el.style.backgroundPosition = 'center center';\n // @ts-ignore\n marker._element = el;\n return marker;\n },\n async updateChartData(chartData) {\n if (chartData) {\n if (this.chart != null) {\n this.chart.data = chartData\n this.chart.update()\n } else {\n const config = {\n type: 'line',\n data: chartData,\n options: this.createOptions(),\n }\n this.chart = new Chart(\n document.getElementById('elevationChart'),\n config,\n );\n }\n\n }\n },\n createOptions(): Chart.ChartOptions {\n const measurementPref = MeasurementPrefUtility.preference()\n const self = this\n return {\n hover: {\n mode: 'nearest',\n intersect: false,\n onHover: function (e, item) {\n if (e.type == 'mouseout' && elevationMarker != null) {\n elevationMarker?.remove();\n return\n }\n if (item.length) {\n if (elevationMarker == null) {\n elevationMarker = self.createElevationMarker()\n }\n const lat = item[0]._chart.data.lat[item[0]._index]\n const lon = item[0]._chart.data.lon[item[0]._index]\n elevationMarker.setLngLat([lon, lat]).addTo(window.map);\n }\n },\n },\n layout: {\n padding: {\n left: 10,\n right: 15,\n top: 15,\n bottom: 5\n }\n },\n responsive: true,\n maintainAspectRatio: false,\n elements: {point: {radius: 0}},\n scales: {\n xAxes: [{\n gridLines: {\n display: true,\n color: 'rgba(134,134,134,0.87)',\n },\n ticks: {\n fontColor: 'rgba(255,255,255,0.87)',\n // fontStyle: 'bold',\n fontSize: '10',\n }\n }],\n yAxes: [{\n gridLines: {\n display: true,\n color: 'rgba(134,134,134,0.87)',\n },\n ticks: {\n fontColor: 'rgba(255,255,255,0.87)',\n fontSize: '10',\n // fontStyle: 'bold',\n callback(value: number | string, index: number, values: number[] | string[]): string | number | null | undefined {\n return value + ` ${measurementPref.meterSymbol()}`;\n },\n },\n }],\n },\n legend: {display: false},\n tooltips: {\n intersect: false,\n axis: 'x',\n callbacks: {\n label(tooltipItem: Chart.ChartTooltipItem, data: Chart.ChartData): string {\n return `${tooltipItem.yLabel} ${measurementPref.meterSymbol()}`;\n }\n }\n },\n animation: {\n duration: 0\n },\n }\n }\n }\n});\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlanTrailLineChart.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!./PlanTrailLineChart.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PlanTrailLineChart.vue?vue&type=template&id=443e26f4&\"\nimport script from \"./PlanTrailLineChart.vue?vue&type=script&lang=ts&\"\nexport * from \"./PlanTrailLineChart.vue?vue&type=script&lang=ts&\"\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,_setup=_vm._self._setupProxy;return _vm._m(0)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticStyle:{\"height\":\"150px\"},attrs:{\"id\":\"line-chart\"}},[_c('canvas',{attrs:{\"id\":\"elevationChart\"}})])\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!./PlanTrailChartTopBar.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!./PlanTrailChartTopBar.vue?vue&type=script&lang=ts&\"","<template>\n <div v-on:click=\"hideElevation\" class=\"chart-info p-1 d-flex justify-content-center\">\n <small class=\"text-center\">\n <strong>Elevation profile</strong>\n <span class=\" d-none d-md-inline\">: Hover/tap elevation line to track a specific point on the map.</span>\n <span type=\"button\" class=\"ml-3\" style=\"color: #af8e0e;\"><strong id=\"toggleShow\">HIDE</strong></span>\n </small>\n </div>\n</template>\n\n<script lang=\"ts\">\nexport default {\n methods: {\n hideElevation() {\n const element = document.getElementById('line-chart');\n const toggleText = document.getElementById('toggleShow');\n const mapToolsContainer = document.getElementById('map-tools-container');\n\n if (element.style.height === '0px') {\n element.style.height = '150px';\n toggleText.innerHTML = 'HIDE';\n mapToolsContainer.style.bottom = '220px';\n } else {\n element.style.height = '0px';\n toggleText.innerHTML = 'SHOW';\n mapToolsContainer.style.bottom = '70px';\n }\n },\n },\n};\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./PlanTrailChartTopBar.vue?vue&type=template&id=251e3c2f&scoped=true&\"\nimport script from \"./PlanTrailChartTopBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./PlanTrailChartTopBar.vue?vue&type=script&lang=ts&\"\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 \"251e3c2f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chart-info p-1 d-flex justify-content-center\",on:{\"click\":_vm.hideElevation}},[_vm._m(0)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('small',{staticClass:\"text-center\"},[_c('strong',[_vm._v(\"Elevation profile\")]),_vm._v(\" \"),_c('span',{staticClass:\"d-none d-md-inline\"},[_vm._v(\": Hover/tap elevation line to track a specific point on the map.\")]),_vm._v(\" \"),_c('span',{staticClass:\"ml-3\",staticStyle:{\"color\":\"#af8e0e\"},attrs:{\"type\":\"button\"}},[_c('strong',{attrs:{\"id\":\"toggleShow\"}},[_vm._v(\"HIDE\")])])])\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!./PlanTrailSaveModal.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!./PlanTrailSaveModal.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"modal fade\" id=\"save-plan-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content p-5\">\n <div class=\"form-group\">\n <h3 class=\"mb-3\"><strong>Save Plan</strong></h3>\n <label for=\"plannedTrailName\" class=\"\"><small><strong>Hike name</strong></small></label>\n <input type=\"text\" v-model=\"title\" class=\"form-control mb-3\" id=\"plannedTrailName\"\n placeholder=\"New plan - 12-12-2023\">\n\n <hr class=\"my-3\">\n\n <label for=\"plannedTrailDesc\" class=\"\"><small><strong>Hike description</strong></small></label>\n <textarea rows=\"3\" type=\"text\" v-model=\"description\" class=\"form-control p-2 mb-3\" id=\"plannedTrailDesc\" placeholder=\"Some details about the route\"></textarea>\n\n <hr class=\"my-3\">\n\n <div class=\"row\">\n <div class=\"col\">\n <label><small><strong>Hike time</strong></small></label>\n <input\n :min=\"minDate\"\n type=\"datetime-local\"\n class=\"text-muted pl-2 mr-2 flex-fill\"\n id=\"plannedTrailTime\"\n :value=\"localizedPlannedToHikeOn\"\n @input=\"updatePlannedToHikeOn\"\n >\n </div>\n </div>\n\n <hr class=\"my-3\">\n\n <label for=\"plannedTrailImg\" class=\"form-label\"><small><strong>Add images</strong></small></label>\n <form class=\"custom-file\">\n <button class=\"btn btn-secondary\" @click=\"triggerFileInput($event)\">Choose Files</button>\n <input multiple=\"multiple\" ref=\"fileInput\" accept=\".jpg, .jpeg, .png\" id=\"plannedTrailImg\" type=\"file\" class=\"custom-file-upload\" style=\"display: none;\" @change=\"handleFileInputChange\"/>\n <div class=\"thumbnails mt-2 mb-2\">\n <div v-for=\"(previewObj, index) in previewUrls\" :key=\"index\" class=\"thumbnail square\">\n <img :src=\"previewObj.previewUrl\" :alt=\"`image-${index}`\" class=\"thumbnail-image\" />\n <button @click=\"removeImage($event, previewObj.id)\" class=\"delete-button\">x</button>\n </div>\n </div>\n </form>\n\n <hr class=\"my-3\">\n\n <p><label for=\"\" class=\"\"><small><strong>Who can view</strong></small></label></p>\n <div class=\"input-group mb-3 text-muted\">\n <p class=\"p-2 bg-dark w-100 rounded\">\n <select class=\"custom-select text-muted w-100\" id=\"plannedTrailPrivacy\" @change=\"privacyChanged\">\n <template v-if=\"this.public\">\n <option value=\"1\" selected>Everyone can view</option>\n <option value=\"2\">Only I can view</option>\n </template>\n <template v-else>\n <option value=\"1\">Everyone can view</option>\n <option value=\"2\" selected>Only I can view</option>\n </template>\n </select>\n </p>\n </div>\n\n <hr class=\"my-3\">\n\n <div class=\"d-flex\">\n <button class=\"btn btn-secondary flex-fill mr-2 mt-3\" data-bs-dismiss=\"modal\">CANCEL\n </button>\n <button class=\"btn btn-primary flex-fill mt-3\" @click=\"save\">SAVE</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\n\nimport { generateID } from \"../../utils/helpers/IDGenerator\";\n\nexport default {\n data() {\n const today = new Date(); // get today's date and time\n const isoString = today.toISOString().slice(0, -8); // convert to ISO 8601 string and remove the\n return {\n minDate: isoString,\n files: [],\n previewUrls: [],\n };\n },\n methods: {\n triggerFileInput(event) {\n event.preventDefault();\n this.$refs.fileInput.click();\n },\n handleFileInputChange(event) {\n if (event.target.files.length <= 0) {\n this.previewUrls = [];\n } else {\n this.previewUrls.length = 0; // Reset the previewUrls array\n }\n for (const file of event.target.files) {\n this.files.push(file);\n const id = generateID();\n const reader = new FileReader();\n reader.onload = (e) => {\n this.previewUrls.push({ previewUrl: e.target.result, id });\n if (this.previewUrls.length === this.files.length) {\n this.$store.dispatch('planTrail/uploadImages', {\n files: this.files,\n ids: this.previewUrls.map((previewUrl) => previewUrl.id),\n });\n }\n };\n reader.readAsDataURL(file);\n }\n this.$refs.fileInput.value = \"\";\n },\n privacyChanged(event) {\n this.$store.state.planTrail.public = event.target.value === '1';\n },\n save() {\n this.$store.dispatch('planTrail/save');\n },\n removeImage(event, id) {\n event.preventDefault();\n const index = this.previewUrls.findIndex((previewUrl) => previewUrl.id === id);\n const file = this.files[index];\n this.previewUrls.splice(index, 1);\n this.files.splice(index, 1);\n this.$store.dispatch('planTrail/destroyImage', { id, file });\n },\n updatePlannedToHikeOn(event) {\n this.$store.dispatch('planTrail/setPlannedToHikeOn', event.target.value);\n },\n },\n computed: {\n title: {\n get() {\n return this.$store.state.planTrail.title;\n },\n set(value) {\n this.$store.commit('planTrail/setTitle', value);\n },\n },\n description: {\n get() {\n return this.$store.state.planTrail.description;\n },\n set(value) {\n this.$store.commit('planTrail/setDescription', value);\n },\n },\n localizedPlannedToHikeOn() {\n const value = this.$store.getters['planTrail/getLocalizedPlannedToHikeOn'];\n console.log(value);\n return value;\n },\n public: {\n get() {\n return this.$store.state.planTrail.public;\n },\n set(value) {\n this.$store.state.planTrail.public = value;\n },\n },\n },\n};\n</script>\n\n<style scoped>\n\n.dropdown-toggle {\n text-align: left;\n}\n\n.dropdown-toggle::after {\n float: right\n}\n\n.thumbnails {\n white-space: nowrap; /* Prevent line breaks */\n overflow-x: auto; /* Enable horizontal scrolling */\n}\n\n.thumbnail {\n border: 1px solid #505150;\n padding: 4px;\n border-radius: 5px;\n display: inline-block;\n margin-right: 11px;\n width: 90px;\n height: 90px;\n position: relative;\n}\n\n.thumbnail-image {\n max-width: 100px;\n max-height: 100px;\n}\n\n.delete-button {\n position: absolute;\n top: 0;\n right: 0;\n background: rgb(0 0 0 / 68%);\n color: #fff;\n font-size: 17px;\n padding: 2px 4px;\n border: none;\n cursor: pointer;\n height: 30px;\n width: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n}\n\n</style>\n","import { render, staticRenderFns } from \"./PlanTrailSaveModal.vue?vue&type=template&id=6b186888&scoped=true&\"\nimport script from \"./PlanTrailSaveModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PlanTrailSaveModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlanTrailSaveModal.vue?vue&type=style&index=0&id=6b186888&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 \"6b186888\",\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\",attrs:{\"id\":\"save-plan-dialog\",\"tabindex\":\"-1\",\"role\":\"dialog\",\"aria-hidden\":\"true\"}},[_c('div',{staticClass:\"modal-dialog modal-dialog-centered\",attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content p-5\"},[_c('div',{staticClass:\"form-group\"},[_vm._m(0),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.title),expression:\"title\"}],staticClass:\"form-control mb-3\",attrs:{\"type\":\"text\",\"id\":\"plannedTrailName\",\"placeholder\":\"New plan - 12-12-2023\"},domProps:{\"value\":(_vm.title)},on:{\"input\":function($event){if($event.target.composing)return;_vm.title=$event.target.value}}}),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(2),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.description),expression:\"description\"}],staticClass:\"form-control p-2 mb-3\",attrs:{\"rows\":\"3\",\"type\":\"text\",\"id\":\"plannedTrailDesc\",\"placeholder\":\"Some details about the route\"},domProps:{\"value\":(_vm.description)},on:{\"input\":function($event){if($event.target.composing)return;_vm.description=$event.target.value}}}),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col\"},[_vm._m(3),_vm._v(\" \"),_c('input',{staticClass:\"text-muted pl-2 mr-2 flex-fill\",attrs:{\"min\":_vm.minDate,\"type\":\"datetime-local\",\"id\":\"plannedTrailTime\"},domProps:{\"value\":_vm.localizedPlannedToHikeOn},on:{\"input\":_vm.updatePlannedToHikeOn}})])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(4),_vm._v(\" \"),_c('form',{staticClass:\"custom-file\"},[_c('button',{staticClass:\"btn btn-secondary\",on:{\"click\":function($event){return _vm.triggerFileInput($event)}}},[_vm._v(\"Choose Files\")]),_vm._v(\" \"),_c('input',{ref:\"fileInput\",staticClass:\"custom-file-upload\",staticStyle:{\"display\":\"none\"},attrs:{\"multiple\":\"multiple\",\"accept\":\".jpg, .jpeg, .png\",\"id\":\"plannedTrailImg\",\"type\":\"file\"},on:{\"change\":_vm.handleFileInputChange}}),_vm._v(\" \"),_c('div',{staticClass:\"thumbnails mt-2 mb-2\"},_vm._l((_vm.previewUrls),function(previewObj,index){return _c('div',{key:index,staticClass:\"thumbnail square\"},[_c('img',{staticClass:\"thumbnail-image\",attrs:{\"src\":previewObj.previewUrl,\"alt\":`image-${index}`}}),_vm._v(\" \"),_c('button',{staticClass:\"delete-button\",on:{\"click\":function($event){return _vm.removeImage($event, previewObj.id)}}},[_vm._v(\"x\")])])}),0)]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(5),_vm._v(\" \"),_c('div',{staticClass:\"input-group mb-3 text-muted\"},[_c('p',{staticClass:\"p-2 bg-dark w-100 rounded\"},[_c('select',{staticClass:\"custom-select text-muted w-100\",attrs:{\"id\":\"plannedTrailPrivacy\"},on:{\"change\":_vm.privacyChanged}},[(this.public)?[_c('option',{attrs:{\"value\":\"1\",\"selected\":\"\"}},[_vm._v(\"Everyone can view\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Only I can view\")])]:[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Everyone can view\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"2\",\"selected\":\"\"}},[_vm._v(\"Only I can view\")])]],2)])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_c('div',{staticClass:\"d-flex\"},[_c('button',{staticClass:\"btn btn-secondary flex-fill mr-2 mt-3\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_vm._v(\"CANCEL\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-primary flex-fill mt-3\",on:{\"click\":_vm.save}},[_vm._v(\"SAVE\")])])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('h3',{staticClass:\"mb-3\"},[_c('strong',[_vm._v(\"Save Plan\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{attrs:{\"for\":\"plannedTrailName\"}},[_c('small',[_c('strong',[_vm._v(\"Hike name\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{attrs:{\"for\":\"plannedTrailDesc\"}},[_c('small',[_c('strong',[_vm._v(\"Hike description\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',[_c('small',[_c('strong',[_vm._v(\"Hike time\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('label',{staticClass:\"form-label\",attrs:{\"for\":\"plannedTrailImg\"}},[_c('small',[_c('strong',[_vm._v(\"Add images\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',[_c('label',{attrs:{\"for\":\"\"}},[_c('small',[_c('strong',[_vm._v(\"Who can view\")])])])])\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!./PlanTrailShareModal.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!./PlanTrailShareModal.vue?vue&type=script&lang=ts&\"","<template>\n <div class=\"modal fade\" id=\"share-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-body p-5\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h3><strong>Share your plan</strong></h3>\n <p class=\"text-muted d-flex\">Copy the link below and share <span class=\"text-yellow ml-2\" id=\"copyConfirm\" style=\"display: none\">Copied!</span></p>\n <div class=\"input-group my-3\" id=\"copyURLInputGroup\">\n <input :value=\"this.$store.state.planTrail.shareableUrl\" class=\"form-control\" id=\"trailShareInput\"/>\n <div class=\"input-group-append\">\n <span class=\"input-group-text btn btn-secondary\" role=\"button\" @click=\"copyToClipboardClicked\">\n <span class=\"material-icons\">\n content_copy\n </span>\n </span>\n </div>\n </div>\n <button class=\"btn btn-secondary mr-2\" data-bs-dismiss=\"modal\">Close</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n\nimport { defineComponent } from 'vue';\nimport copyToClipboard from '../../utils/helpers/CopyToClipboardHelper';\n\nexport default defineComponent({\n data() {\n return {};\n },\n methods: {\n copyToClipboardClicked() {\n copyToClipboard(this.$store.state.planTrail.shareableUrl, (success, error) => {\n if (error) alert(error);\n });\n },\n },\n});\n</script>\n","import { render, staticRenderFns } from \"./PlanTrailShareModal.vue?vue&type=template&id=6ff4ee58&\"\nimport script from \"./PlanTrailShareModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./PlanTrailShareModal.vue?vue&type=script&lang=ts&\"\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,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal fade\",attrs:{\"id\":\"share-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\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12\"},[_vm._m(0),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('div',{staticClass:\"input-group my-3\",attrs:{\"id\":\"copyURLInputGroup\"}},[_c('input',{staticClass:\"form-control\",attrs:{\"id\":\"trailShareInput\"},domProps:{\"value\":this.$store.state.planTrail.shareableUrl}}),_vm._v(\" \"),_c('div',{staticClass:\"input-group-append\"},[_c('span',{staticClass:\"input-group-text btn btn-secondary\",attrs:{\"role\":\"button\"},on:{\"click\":_vm.copyToClipboardClicked}},[_c('span',{staticClass:\"material-icons\"},[_vm._v(\"\\n content_copy\\n \")])])])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-secondary mr-2\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_vm._v(\"Close\")])])])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('h3',[_c('strong',[_vm._v(\"Share your plan\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"text-muted d-flex\"},[_vm._v(\"Copy the link below and share \"),_c('span',{staticClass:\"text-yellow ml-2\",staticStyle:{\"display\":\"none\"},attrs:{\"id\":\"copyConfirm\"}},[_vm._v(\"Copied!\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"position-relative d-flex overflow-hidden\">\n <vue-topprogress :height=\"7\" color=\"#70C381\" ref=\"topProgress\"></vue-topprogress>\n <link href='https://api.mapbox.com/mapbox-gl-js/v3.10.0/mapbox-gl.css' rel='stylesheet' />\n <div class=\"mobileCTA d-flex justify-content-center align-items-center p-3\">\n <div class=\"text-center d-flex align-items-center\" id=\"app-cta-overlay\">\n <div>\n <img class=\"rounded mb-3\" alt=\"Hiiker app\" width=\"250\" src=\"../../src/img/app-hero-demo.webp\">\n <h3><strong>Planning a hike on your mobile device?</strong></h3>\n <p><small>Get the best experience on the the HiiKER App</small></p>\n <a class=\"btn btn-primary mt-2\" href=\"/app\">\n <span>Open in app</span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"map-container\" :class=\"{ 'query-mode': !this.planMode }\">\n <div class=\"map-content\">\n <div id='map' ref=\"map\" class=\"mapbox m-0 p-0\" style=\"height: 90vh\"></div>\n <MapButtons :button-clicked=\"buttonClicked\" :buttons=\"buttons\"/>\n\n <div class=\"stats\">\n <p><b>Distance:</b> {{ this.$store.getters['planTrail/trailDistanceString'] }}</p>\n <p class=\"m-0\"><b>Elevation gain:</b> {{ this.$store.getters['planTrail/elevationGainString'] }} </p>\n </div>\n\n <div class=\"position-absolute coordsbar\">\n <p class=\"py-1 px-3 m-0\">{{ this.$store.state.planTrail.miniCoordsBar }}</p>\n </div>\n <div class=\"chart-container chart-div\" @mouseleave=\"hover = false\" @mouseenter=\"hover = true\">\n <PlanTrailChartTopBar />\n <PlanTrailLineChart />\n </div>\n\n <button class=\"sidebar-btn d-flex align-items-center\" v-on:click=\"hideSidebar\">\n <span class=\"material-icons\">chevron_right</span>\n </button>\n <MapControls style=\"position: absolute; bottom: 180px; right: 20px;\"/>\n <TrailDataCard />\n <Loader v-if=\"miniLoader\" />\n </div>\n </div>\n\n <div class=\"right-sidebar map-sidebar active\">\n\n <div class=\"sidebar-container\">\n <!-- Add the dropdown here -->\n <div class=\"p-3\">\n <label for=\"activity-select\"><b>Route Preference:</b></label>\n <select id=\"activity-select\" v-model=\"routePreference\" class=\"form-control\">\n <option value=\"hike\">Hike</option>\n <option value=\"car\">Car</option>\n <option value=\"bike\">Bike</option>\n </select>\n </div>\n <div class=\"button-grid px-3 pt-3 pb-2\">\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" v-on:click=\"this.undoClicked\"><span\n class=\"material-icons mr-1\">undo</span> Undo\n </button>\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" v-on:click=\"this.redoClicked\"><span\n class=\"material-icons mr-1\">redo</span> Redo\n </button>\n </div>\n\n <hr class=\"my-1\">\n\n <div class=\"pt-3 px-3\">\n <p><b>Modes:</b></p>\n </div>\n <div class=\"button-grid px-3 pb-3\">\n <!-- Snap Button -->\n <button\n class=\"btn-toggle d-flex justify-content-center align-items-center\"\n :class=\"{ 'btn-active': this.$store.state.planTrail.isSnap }\"\n v-on:click=\"snapClicked\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Disable to plot routes in straight lines\"\n >\n <span class=\"material-icons d-flex justify-content-center mr-1\">timeline</span>\n Snap\n </button>\n\n <!-- Removal Button -->\n <button\n class=\"btn-toggle d-flex justify-content-center align-items-center\"\n :class=\"{ 'btn-active': this.$store.state.planTrail.removalMode }\"\n v-on:click=\"removalModeClicked\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Enable to remove control points\"\n >\n <span class=\"material-icons d-flex justify-content-center mr-1\">backspace</span>\n Delete\n </button>\n\n <button\n class=\"btn-toggle d-flex justify-content-center align-items-center\"\n :class=\"{ 'btn-active': this.planMode }\"\n v-on:click=\"togglePlanMode\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Disable plan mode to interact with other map features\"\n >\n <span class=\"material-icons d-flex justify-content-center mr-1\">edit</span>\n Plan\n </button>\n </div>\n\n <hr class=\"my-1\">\n\n <div class=\"p-3\">\n <p class=\"block mb-2\"><b>Route options:</b></p>\n <div class=\"button-grid\">\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" @click=\"loopRoute\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Create loop to the start of the route\">\n <span class=\"material-icons d-flex justify-content-center mr-1\">cached</span>\n Loop\n </button>\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" @click=\"reverseRoute\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Switch start and end points\">\n <span class=\"material-icons d-flex justify-content-center mr-1\">sync_alt</span>\n Reverse\n </button>\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" data-bs-toggle=\"modal\" data-bs-target=\"#trail-import-dialog\">\n <span class=\"material-icons d-flex justify-content-center mr-1\">upload_file</span>\n <span data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Import a route via GPX\">\n Import\n </span>\n </button>\n <button class=\"btn-toggle d-flex justify-content-center align-items-center\" @click=\"updateElevation\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"weather-tooltip\"\n title=\"Update the Elevation profile using additional data\">\n <span class=\"material-icons d-flex justify-content-center mr-1\">auto_graph</span>\n Elevation sync\n </button>\n </div>\n </div>\n\n <hr class=\"my-1\">\n\n <div class=\"p-3 d-flex\">\n <button class=\"btn btn-sm btn-primary btn-block\" data-toggle=\"modal\" @click=\"saveClicked($event)\">\n SAVE PLAN\n </button>\n <button class=\"btn btn-sm btn-secondary square d-flex justify-content-center align-items-center ml-2\" data-toggle=\"modal\" @click=\"shareClicked($event)\">\n <span class=\"material-icons\">share</span>\n </button>\n </div>\n\n <div class=\"px-3\">\n <button class=\"btn btn-sm btn-link btn-block text-muted\" @click=\"clearMap\">\n CLEAR\n </button>\n </div>\n </div>\n\n </div>\n\n <BaseMapStylesDialog/>\n <PlanTrailSaveModal/>\n<!-- <PlanTrailSignInModal/>-->\n <PlanTrailShareModal/>\n <GoToLocationDialog/>\n <TrailImportDialog/>\n <ImportRouteMultipleOptionsDialog/>\n <LoadingDialog :show-loading-dialog=\"this.$store.state.planTrail.loading\"/>\n <WaypointAddingNotification :enabled=\"waypointAddingModeEnabled\" />\n <MapDataDialog />\n <MapDataPOIDetailDialog />\n <WaypointDialog/>\n\n <div class=\"my-silly-class\"></div>\n <input id=\"file-selector\" type=\"file\" accept=\".gpx\" style=\"display: none\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport BaseMapStylesDialog from '../base_map_styles_dialog/BaseMapStylesDialog.vue';\nimport PlanTrailLineChart from \"./components/PlanTrailLineChart.vue\";\nimport PlanTrailChartTopBar from \"./components/PlanTrailChartTopBar.vue\"\nimport { RevenueCatUtil } from \"../utils/models/RevenueCatUser\";\nimport PlanTrailSaveModal from \"./components/PlanTrailSaveModal.vue\";\n// import PlanTrailSignInModal from \"./components/PlanTrailSignInModal.vue\";\nimport PlanTrailShareModal from \"./components/PlanTrailShareModal.vue\";\nimport MapButtons from \"../components/MapButtons.vue\";\nimport {mapGetters, mapState} from \"vuex\";\nimport GoToLocationDialog from \"../go_to_location_dialog/GoToLocationDialog.vue\";\nimport TrailImportDialog from \".././trail_import_dialog/TrailImportDialog.vue\";\nimport MapControls from \"../components/MapControls.vue\";\nimport ImportRouteMultipleOptionsDialog\n from \"../import_route_multiple_options_dialog/ImportRouteMultipleOptionsDialog.vue\";\nimport LoadingDialog from \"../utils/shared_components/LoadingDialog.vue\";\nimport {OnBoardingGoal} from \"../utils/models/OnBoardingGoal\";\nimport WaypointAddingNotification from \"../waypoint_adding_mode_notificaiton/WaypointAddingNotification.vue\";\nimport WaypointDialog from \"../waypoint_dialog/WaypointDialog.vue\";\nimport POIDialog from \"../poi_dialog/POIDialog.vue\";\nimport POIDetailDialog from \"../poi_detail_dialog/POIDetailDialog.vue\";\nimport {ThreeDimensionalMapManager} from \"../utils/models/MapStyles\";\nimport {RevenueCatWrapper} from \"../utils/RevenueCatWrapper\";\nimport MapDataDialog from \"../map_data/MapDataDialog.vue\";\nimport MapDataPOIDetailDialog from \"../map_data/MapDataPOIDetailDialog.vue\";\nimport Loader from \"../utils/shared_components/Loader.vue\";\nimport TrailDataCard from \"../trail_data_card/TrailDataCard.vue\";\n\nexport default defineComponent({\n components: {\n TrailDataCard, Loader, MapDataPOIDetailDialog,\n MapDataDialog,\n POIDetailDialog,\n POIDialog,\n WaypointDialog,\n WaypointAddingNotification,\n LoadingDialog,\n ImportRouteMultipleOptionsDialog,\n MapButtons,\n BaseMapStylesDialog,\n PlanTrailLineChart,\n PlanTrailChartTopBar,\n PlanTrailSaveModal,\n // PlanTrailSignInModal,\n PlanTrailShareModal,\n GoToLocationDialog,\n TrailImportDialog,\n MapControls\n },\n data() {\n return {\n hover: false,\n buttons: [\n {\n id: 2, name: '', icon: 'search', enabled: false, dropIcon: true,\n },\n { id: 0, name: 'Change Map', icon: 'layers', enabled: false, dropIcon: true },\n { id: 1, name: '3D Mode', icon: 'landscape', enabled: false, dropIcon: false },\n {\n id: 5, name: 'Add to Map', icon: 'add_circle', enabled: false, dropIcon: false,\n },\n {\n id: 3, name: 'Waypoints', icon: 'location_on', enabled: false, dropIcon: false,\n },\n {\n id: 7,\n name: 'Print Map',\n icon: 'print',\n enabled: true,\n dropIcon: false,\n clear: false\n }\n ]\n };\n },\n computed: Object.assign(\n {\n title: {\n get() {\n return this.$store.state.planTrail.title\n },\n set(value) {\n this.$store.commit('planTrail/setTitle', value)\n }\n },\n routePreference: {\n get() {\n return this.$store.state.planTrail.routePreference;\n },\n set(value) {\n this.$store.commit('planTrail/setRoutePreference', value);\n }\n }\n },\n mapState({\n waypointAddingModeEnabled: state => state.waypoints.waypointAddingModeEnabled,\n selectedPOI: state => state.poi.selectedPOI,\n miniLoader: state => state.mapDataTrails?.miniLoader,\n planMode: state => state.planTrail.planMode,\n })\n ),\n created() {\n $(function () {\n $('[data-bs-toggle=\"tooltip\"]').tooltip()\n })\n },\n mounted() {\n if ($(window).width() < 600) {\n $(\".mobileCTA\").css(\"visibility\", \"visible\");\n }\n },\n methods: {\n saveClicked(event) {\n event.preventDefault();\n if (window.user == null) {\n window.onBoardingVue.launchFor(OnBoardingGoal.CreateAccount)\n return\n }\n $(\"#save-plan-dialog\").modal('show');\n },\n shareClicked(event) {\n event.preventDefault();\n if (window.user == null) {\n window.onBoardingVue.launchFor(OnBoardingGoal.CreateAccount)\n return\n }\n this.$store.dispatch('planTrail/shareRoute');\n },\n async buttonClicked(id: number) {\n const isProOrProPlus = await RevenueCatWrapper.isProOrProPlus()\n switch (id) {\n case 0:\n if (window.user) {\n $('#map-styles-dialog').modal('show');\n } else {\n window.onBoardingVue.launchFor(OnBoardingGoal.MapStyles)\n }\n break;\n case 1:\n if (isProOrProPlus) {\n ThreeDimensionalMapManager.toggle3DMode()\n } else {\n window.location.href = \"/purchases\"\n }\n break;\n case 2:\n $(\"#go-to-location-dialog\").modal('show');\n break;\n case 5:\n if (window.user) {\n $('#add-to-map-dialog').modal('show');\n } else {\n window.onBoardingVue.launchFor(OnBoardingGoal.Waypoints)\n }\n break;\n case 3:\n if (window.user) {\n $('#waypoint-options-dialog').modal('show');\n } else {\n window.onBoardingVue.launchFor(OnBoardingGoal.Waypoints)\n }\n break;\n case 6:\n this.$store.dispatch('poi/removeAllPOIsFromMap')\n break;\n case 7:\n window.location.href = \"/print-maps\"\n }\n },\n async undoClicked() {\n await this.$store.dispatch('planTrail/undo');\n },\n async redoClicked() {\n await this.$store.dispatch('planTrail/redo');\n },\n snapClicked() {\n this.$store.commit('planTrail/toggleSnap');\n },\n removalModeClicked() {\n this.$store.commit('planTrail/toggleRemovalMode');\n },\n togglePlanMode() {\n this.$store.commit('planTrail/setPlanMode', !this.planMode);\n\n if (window.map) {\n window.map.getCanvas().style.cursor = this.planMode ? 'crosshair' : 'pointer';\n }\n },\n outAndBackClicked() {\n this.$store.dispatch('planTrail/outAndBackClicked');\n },\n async save() {\n const self = this\n self.$refs.topProgress.start();\n if (window.user) {\n if (this.$store.state.planTrail.markers.length < 2) {\n return alert(\"You must have at least 2 markers to save a trail\");\n }\n let text = document.getElementById('plannedTrailName').value\n await this.$store.dispatch('planTrail/save', text);\n setTimeout(async () => {\n self.$refs.topProgress.done();\n }, 900);\n } else {\n $('#signup-dialog').modal('show');\n }\n },\n closeToastClicked() {\n this.$store.commit('planTrail/clearError');\n },\n loopRoute() {\n this.$store.dispatch('planTrail/loopRoute');\n },\n reverseRoute() {\n this.$store.dispatch('planTrail/reverseFullRoute');\n },\n updateElevation() {\n this.$store.dispatch('planTrail/updateElevation');\n },\n clearMap() {\n this.$store.dispatch('planTrail/clearMap');\n },\n hideSidebar() {\n $('.right-sidebar').toggleClass('active');\n $('.sidebar-btn').toggleClass('active');\n if ($(window).width() < 769) {\n $('.left-sidebar').removeClass('active');\n }\n setTimeout(() => {\n window.map.resize();\n }, 100);\n },\n async _3dClicked() {\n const isProOrProPlus = await RevenueCatWrapper.isProOrProPlus()\n if (isProOrProPlus) {\n this.$store.dispatch('mapStyles/toggle3dMaps');\n } else {\n window.onBoardingVue.launchFor(OnBoardingGoal.MapStyles)\n }\n }\n },\n});\n</script>\n\n<style>\n\n.query-mode{\n .chart-container, .stats{\n display: none;\n }\n\n .buttons-container{\n bottom: 30px !important;\n }\n}\n\n.my-silly-class {\n display: none;\n}\n.map-container {\n flex: 1 1 auto;\n max-width: 100%;\n z-index: 7;\n}\n\n.map-content {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.mapbox {\n top: 0;\n bottom: 0;\n width: 100%;\n height: 100%;\n z-index: 2;\n}\n\n.right-sidebar {\n width: 0px;\n max-width: 0px;\n flex: 0 0 0px;\n padding: 0;\n}\n\n.right-sidebar.active {\n width: 320px;\n max-width: 100%;\n flex: 0 0 320px;\n}\n\n.sidebar-btn {\n position: absolute;\n top: 6.5em;\n right: -3px;\n padding: 20px 2px;\n background: #202020;\n color: #fff;\n border: none;\n z-index: 100;\n border-radius: 5px;\n}\n\n.button-grid {\n width: 100%;\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-column-gap: .75em;\n grid-row-gap: .75em;\n justify-items: stretch;\n align-items: inital;\n}\n\n.mapboxgl-ctrl-scale {\n background-color: hsla(0, 0%, 100%, .75);\n border: 2px solid #333;\n border-top: #333;\n box-sizing: border-box;\n color: #333;\n font-size: 10px;\n padding: 0 5px;\n white-space: nowrap;\n border-radius: 0 0 10px 10px;\n position: absolute;\n top: 59px;\n left: 5px;\n}\n\n.coordsbar {\n background-color: #17181d;\n top: 80px;\n left: 45%;\n border-radius: 4px;\n z-index: 100;\n}\n\n.stats {\n position: absolute;\n bottom: 180px;\n left: 1em;\n background-color: rgba(17, 17, 17, 0.8);\n border-radius: 5px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n padding: 1em;\n border-radius: 4px;\n z-index: 100;\n margin-bottom: 1em;\n}\n\n.btn-toggle.disabled,\n.btn-small.disabled,\n.btn-save.disabled {\n opacity: 0.5;\n}\n\n.btn-toggle {\n font-weight: 500;\n padding: 1em 0;\n border: none;\n background-color: #2c2c2c;\n border-radius: 4px;\n color: #ffffff;\n\n .material-icons{\n font-size: 15px;\n }\n}\n\n.btn-active.btn-active {\n background-color: #F57700;\n color: #202020;\n font-weight: 700;\n}\n\n.btn-active.btn-active {\n background-color: var(--yellow);\n color: #202020;\n font-weight: 700;\n}\n\n.btn-small {\n font-size: .9em;\n font-weight: 500;\n padding: .75em 0;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background-color: transparent;\n border-radius: 4px;\n color: #ffffff;\n}\n\n.btn-save {\n font-size: .9em;\n font-weight: 500;\n padding: 1em 0;\n border: none;\n background-color: #70C381;\n border-radius: 4px;\n}\n\n.btn-small .material-icons,\n.btn-save .material-icons {\n font-size: 1.4em;\n}\n\n#save-plan-dialog .form-control {\n border: none;\n padding: 0;\n}\n\n.chart-div {\n bottom: 0;\n width: 100%;\n height: auto;\n position: absolute;\n z-index: 100;\n background-color: rgb(0 0 0 / 74%);\n}\n\n.threeDmapImg {\n -webkit-transition: all .3s ease-in-out;\n -moz-transition: all .3s ease-in-out;\n -o-transition: all .3s ease-in-out;\n transition: all .3s ease-in-out;\n}\n\n.threeDmapImg:hover {\n bottom: 0;\n filter: hue-rotate(193deg);\n cursor: pointer;\n}\n\n.mobileCTA {\n position: absolute;\n z-index: 8;\n background: #202020fa;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n visibility: hidden;\n}\n\n@media (max-width: 900px) {\n .mapboxgl-ctrl-scale {\n top: 112px;\n }\n\n .coordsbar {\n top: 74px;\n }\n}\n\n.query-mode-cursor {\n cursor: pointer;\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-9.use[0]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlanTrail.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!./PlanTrail.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PlanTrail.vue?vue&type=template&id=9f8297ee&\"\nimport script from \"./PlanTrail.vue?vue&type=script&lang=ts&\"\nexport * from \"./PlanTrail.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./PlanTrail.vue?vue&type=style&index=0&id=9f8297ee&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","import { GetterTree } from \"vuex\";\nimport { RootState } from \"../store\";\nimport { MarkerFeature } from \"../../../utils/models/MarkerFeature\";\nimport { plainToClass } from \"class-transformer\";\nimport { LineStringFeature } from \"../../../utils/models/LineStringFeature\";\nimport {\n length as turfLength,\n distance as turfDistance,\n} from \"@turf/turf\";\nimport { MeasurementPrefUtility } from \"../../../utils/helpers/MeasurementPref\";\nimport { PlanTrailState } from \"./PlanTrailModule\";\nimport moment from 'moment';\nimport 'moment-timezone';\nimport {SavedCenter} from \"../../../utils/models/MapStyles\";\nimport mapboxgl from \"mapbox-gl\";\n\nconst getters: GetterTree<PlanTrailState, RootState> = {\n getLocalizedPlannedToHikeOn(state) {\n const localDateTime = moment.utc(state.plannedToHikeOn).local();\n const localizedDateTime = localDateTime.format('YYYY-MM-DDTHH:mm');\n return localizedDateTime;\n },\n getLastUndoMarkers(state) {\n return state.undoMarkers[state.undoMarkers.length - 1]\n },\n getLastRedoMarkers(state) {\n return state.redoMarkers[state.redoMarkers.length - 1]\n },\n getLastUndoLineStrings(state) {\n return state.undoLineStrings[state.undoLineStrings.length - 1]\n },\n getLastRedoLineStrings(state) {\n return state.redoLineStrings[state.redoLineStrings.length - 1]\n },\n markersFeatureCollection(state) {\n return {\n type: 'FeatureCollection',\n features: state.markers.map(marker => {\n // @ts-ignore\n const markerFeature: MarkerFeature = plainToClass(MarkerFeature, marker)\n return markerFeature.toGeoJson()\n })\n }\n },\n initialMapSettings(state): mapboxgl.MapboxOptions {\n const currentCenter = SavedCenter.getCurrentCenter()\n return {\n container: 'map', // container ID\n // @ts-ignore\n center: currentCenter.lngLat(), // starting position [lng, lat]\n maxPitch: 60,\n zoom: currentCenter.zoom, // starting zoom\n }\n },\n trailDistanceString(state, getters) {\n let distance = turfLength(getters.lineStringFeatureCollection, { units: 'meters' })\n return MeasurementPrefUtility.preference().smallUnitFormatter(distance, true)\n },\n elevationGainString(state, getters) {\n let elevationGainTotal = 0;\n\n state.lineStrings.forEach((lineString) => {\n const lineStringFeature = plainToClass(LineStringFeature, lineString);\n const coordinates = lineStringFeature.lineStringGeometry.coordinates; // Assuming this contains altitude data\n\n if (coordinates.length < 2) {\n return;\n }\n\n let totalElevationGain = 0;\n let baseElevation = coordinates[0][2];\n\n for (let i = 1; i < coordinates.length; i++) {\n const elevationChange = coordinates[i][2] - baseElevation;\n\n if (elevationChange > 6) {\n totalElevationGain += elevationChange;\n baseElevation = coordinates[i][2]; // Reset baseElevation on significant gain\n } else if (coordinates[i][2] < baseElevation) {\n baseElevation = coordinates[i][2]; // Reset baseElevation on any descent\n }\n }\n\n elevationGainTotal += totalElevationGain;\n });\n\n return MeasurementPrefUtility.preference().smallUnitFormatter(elevationGainTotal, false);\n },\n lineStringFeatureCollection(state) {\n return {\n type: 'FeatureCollection',\n features: state.lineStrings.map(lineString => {\n const lineStringFeature: LineStringFeature = plainToClass(LineStringFeature, lineString)\n return lineStringFeature.toGeoJson()\n })\n }\n },\n getPtv2MarkerAttributes(state) {\n return state.markers.map(marker => {\n let markerFeature = plainToClass(MarkerFeature, marker)\n return {\n elevationMeters: markerFeature.markerProperties.ele,\n lonlat: `POINT(${markerFeature.markerGeometry.coordinates[0]} ${markerFeature.markerGeometry.coordinates[1]})`,\n snap: markerFeature.markerProperties.isSnap\n }\n })\n },\n getPtv2LineStringAttributes(state) {\n return state.lineStrings.map(lineString => {\n let lineStringFeature = plainToClass(LineStringFeature, lineString)\n return {\n geometry: lineStringFeature.toWKT(),\n }\n })\n },\n createChartData(state) {\n const coordinates = state.lineStrings.flatMap(lineString => {\n return lineString.lineStringGeometry.coordinates\n })\n const chartdata: any = {\n labels: [],\n xLabels: [],\n lat: [],\n lon: [],\n datasets: [\n {\n borderColor: '#ffffff',\n borderWidth: 2,\n fill: false,\n data: [],\n },\n ],\n };\n let divider = 0;\n if (coordinates.length > 1000) {\n divider = Math.round(coordinates.length / 1000);\n }\n let count = 0;\n let distance = 0;\n const distances = coordinates.map((coordinate: any, index: number) => {\n if (index === 0) {\n return 0;\n } else {\n distance += Math.round(turfDistance(coordinates[index - 1], coordinate, { units: 'meters' }))\n return distance;\n }\n })\n const measurementUtils = MeasurementPrefUtility.preference()\n for (let i = 0; i < coordinates.length; i++) {\n if (count === divider) {\n count = 0;\n const coord = coordinates[i];\n chartdata.xLabels.push(measurementUtils.bigUnitFormatter(distances[i] / 1000, false));\n\n chartdata.labels.push(measurementUtils.smallUnitFormatter(coord[2]));\n chartdata.lat.push(coord[1]);\n chartdata.lon.push(coord[0]);\n chartdata.datasets[0].data.push(measurementUtils.smallUnitValue(coord[2]));\n } else {\n count++;\n }\n }\n return chartdata;\n },\n getLastMarker(state): MarkerFeature | null {\n if (state.markers.length == 0) {\n return null\n }\n return state.markers[state.markers.length - 1]\n },\n markersIsEmpty(state): boolean {\n return state.markers.length == 0\n },\n getPtv2ImageAttributes(state) {\n return state.photosIds.map(photoId => {\n return {\n parentClientId: state.clientId,\n clientId: photoId,\n imageableType: 'planned',\n }\n })\n }\n}\nexport default getters\n","import {MarkerFeature, MarkerGeometry, MarkerProperties} from \"../../../utils/models/MarkerFeature\";\nimport {MutationTree} from \"vuex\";\nimport {PlanTrailState} from \"./PlanTrailModule\";\nimport {LineStringFeature} from \"../../../utils/models/LineStringFeature\";\n\nconst mutations: MutationTree<PlanTrailState> = {\n setTitle(state, title: string) {\n state.title = title;\n },\n setDescription(state, description: string) {\n state.description = description;\n },\n setError(state, error: string) {\n state.error = error\n },\n clearError(state) {\n state.error = null\n },\n setMiniCoordsBar(state, miniCoordsBarString: string) {\n state.miniCoordsBar = miniCoordsBarString\n },\n setState(state, newState) {\n state = {...newState}\n },\n setZoom(state, zoom: number) {\n state.zoom = zoom\n },\n setCenter(state, center: number[]) {\n state.center = center\n },\n setMarkers(state, markers: MarkerFeature[]) {\n state.markers = markers\n },\n setLineStrings(state, lineStrings: LineStringFeature[]) {\n state.lineStrings = lineStrings\n },\n updateMarker(state, marker: MarkerFeature) {\n const foundIndex = state.markers.findIndex(m => m.markerProperties.id === marker.markerProperties.id)\n if (foundIndex == null) {\n return\n }\n state.markers[foundIndex] = marker\n },\n addMarker(state, marker: MarkerFeature) {\n state.markers.push(marker)\n },\n addMarkerObj(state, markerDetails: {lng: number, lat: number, id: string, isSnap: boolean}): MarkerFeature {\n const marker = new MarkerFeature(\n new MarkerGeometry([markerDetails.lng, markerDetails.lat] as number[]),\n new MarkerProperties(markerDetails.id, markerDetails.isSnap, Date.now().toString(), 0)\n )\n state.markers.push(marker)\n return marker\n },\n insertMarkerObj(state, payload: {lng: number, lat: number, id: string, isSnap: boolean, index: number}): MarkerFeature {\n const marker = new MarkerFeature(\n new MarkerGeometry([payload.lng, payload.lat] as number[]),\n new MarkerProperties(payload.id, payload.isSnap, Date.now().toString(), 0)\n )\n state.markers.splice(payload.index, 0, marker)\n return marker\n },\n removeMarker(state, marker: MarkerFeature) {\n const foundMarker = state.markers.find(m => m.markerProperties.id === marker.markerProperties.id)\n if (foundMarker == null) {\n return\n }\n const index = state.markers.indexOf(foundMarker)\n state.markers.splice(index, 1)\n },\n addLineStrings(state, lineStrings: LineStringFeature[]) {\n state.lineStrings = lineStrings\n },\n addLineString(state, lineString: LineStringFeature) {\n state.lineStrings.push(lineString)\n },\n mergeLineStrings(state, payload: {lineString1Index: number, lineString2Index: number}) {\n let lineString1 = state.lineStrings[payload.lineString1Index]\n let lineString2 = state.lineStrings[payload.lineString2Index]\n let mergedLineString = LineStringFeature.coordsOnlyFeature(\n lineString1.lineStringGeometry.coordinates.concat(lineString2.lineStringGeometry.coordinates)\n )\n // Remove the lineString2Index lineString\n state.lineStrings.splice(payload.lineString2Index, 1)\n state.lineStrings[payload.lineString1Index] = mergedLineString\n },\n removeLastLineString(state) {\n state.lineStrings.pop()\n },\n removeFirstLineString(state) {\n state.lineStrings.shift()\n },\n addLineStringAtIndex(state, payload: {lineString: LineStringFeature, index: number}) {\n if (payload.index == state.lineStrings.length) {\n state.lineStrings.push(payload.lineString)\n } else {\n state.lineStrings.splice(payload.index, 0, payload.lineString)\n }\n\n },\n removeLineString(state, lineString: LineStringFeature) {\n state.lineStrings.splice(state.lineStrings.indexOf(lineString), 1)\n },\n removeLineStringAtIndex(state, index: number): LineStringFeature {\n return state.lineStrings.splice(index, 1)[0]\n },\n removeAllLineStrings(state) {\n state.lineStrings = []\n },\n removeAllMarkers(state) {\n state.markers = []\n },\n updateUndo(state) {\n state.undoMarkers.push(JSON.parse(JSON.stringify(state.markers)))\n state.undoLineStrings.push(JSON.parse(JSON.stringify(state.lineStrings)))\n },\n updateRedo(state) {\n state.redoMarkers.push(JSON.parse(JSON.stringify(state.markers)))\n state.redoLineStrings.push(JSON.parse(JSON.stringify(state.lineStrings)))\n },\n popRedo(state) {\n state.redoMarkers.pop()\n state.redoLineStrings.pop()\n },\n popUndo(state) {\n state.undoMarkers.pop()\n state.undoLineStrings.pop()\n },\n clearRedo(state) {\n state.redoMarkers = []\n state.redoLineStrings = []\n },\n clearUndo(state) {\n state.undoMarkers = []\n state.undoLineStrings = []\n },\n setToLastUndo(state) {\n state.markers = state.undoMarkers[state.undoMarkers.length - 1]\n state.lineStrings = state.undoLineStrings[state.undoLineStrings.length - 1]\n },\n toggleSnap(state) {\n state.isSnap = !state.isSnap\n },\n toggleRemovalMode(state) {\n state.removalMode = !state.removalMode\n },\n disableRemovalMode(state) {\n state.removalMode = false\n },\n setPlanMode(state, planMode: boolean) {\n state.planMode = planMode\n },\n setRoutePreference(state, value) {\n state.routePreference = value;\n },\n}\n\nexport default mutations\n","import {MarkerFeature} from \"../models/MarkerFeature\";\nimport {LineStringFeature, LineStringProperties} from \"../models/LineStringFeature\";\nimport GpxParser from \"gpxparser\";\nimport {getElevationData} from \"./HiikerElevationApiHelper\";\nimport {length as turfLength} from \"@turf/turf\";\nimport {pointsOnLineString} from \"./PointOnStraightLineHelper\";\nimport {splitLineStringFromListOfMarkersHelper} from \"./SplitLineStringFromListOfMarkersHelper\";\nimport toGeoJson from \"@mapbox/togeojson\";\nimport txcParser from \"tcx\";\n\nfunction isGPX(fileContent) {\n const kmlStartTagRegex = /<gpx[^>]*>/i;\n const kmlEndTagRegex = /<\\/gpx>/i;\n return kmlStartTagRegex.test(fileContent) && kmlEndTagRegex.test(fileContent);\n}\n\nfunction isKML(fileContent) {\n const kmlStartTagRegex = /<kml[^>]*>/i;\n const kmlEndTagRegex = /<\\/kml>/i;\n return kmlStartTagRegex.test(fileContent) && kmlEndTagRegex.test(fileContent);\n}\n\nfunction isTCX(fileContent) {\n const tcxStartTagRegex = /<TrainingCenterDatabase[^>]*>/i;\n const tcxEndTagRegex = /<\\/TrainingCenterDatabase>/i;\n return tcxStartTagRegex.test(fileContent) && tcxEndTagRegex.test(fileContent);\n}\n\n\nfunction isGeoJSON(fileContent) {\n try {\n const geoJSONData = JSON.parse(fileContent);\n return geoJSONData.type !== undefined;\n } catch (e) {\n return false;\n }\n}\n\nfunction readFileContent(file: File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n // @ts-ignore\n resolve(event.target.result);\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsText(file);\n });\n}\n\nfunction getFileExtension(file) {\n return file.name.split('.').pop().toLowerCase();\n}\n\nexport async function getMarkersAndLineStringsFrom(file: File): Promise<MarkersAndLineStrings> {\n const fileExtension = getFileExtension(file);\n const fileContent = await readFileContent(file);\n\n if (isGPX(fileContent)) {\n // Import as GPX\n return MarkersAndLineStrings.fromGPX(fileContent)\n } else if (isKML(fileContent)) {\n // Import as KML\n return MarkersAndLineStrings.fromKML(fileContent)\n } else if (isGeoJSON(fileContent)) {\n // Import as GeoJSON\n return MarkersAndLineStrings.fromGeoJson(fileContent)\n } else if (isTCX(fileContent)) {\n // Import as TCX\n return MarkersAndLineStrings.fromTCX(fileContent)\n }\n throw Error('File type not supported');\n}\n\nclass MarkersAndLineStrings {\n\n markers: MarkerFeature[]\n lineStrings: LineStringFeature[]\n\n constructor(markers, lineStrings) {\n this.markers = markers;\n this.lineStrings = lineStrings;\n }\n\n addMarker(marker) {\n this.markers.push(marker);\n }\n\n addLineString(lineString) {\n this.lineStrings.push(lineString);\n }\n\n static async fromGPX(gpxString): Promise<MarkersAndLineStrings> {\n let gpx = new GpxParser();\n gpx.parse(gpxString);\n // @ts-ignore\n let geoJson = gpx.toGeoJSON()\n\n return MarkersAndLineStrings.fromGeoJson(JSON.stringify(geoJson))\n }\n\n static async fromKML(kmlString): Promise<MarkersAndLineStrings> {\n const xml = new DOMParser().parseFromString(kmlString, 'text/xml')\n const geoJson = toGeoJson.kml(xml)\n return MarkersAndLineStrings.fromGeoJson(JSON.stringify(geoJson))\n }\n\n static async fromTCX(tcxString): Promise<MarkersAndLineStrings> {\n const parser = new DOMParser();\n const tcxDoc = parser.parseFromString(tcxString, 'application/xml');\n const trackpoints = Array.from(tcxDoc.querySelectorAll('Trackpoint'));\n const coordinates = trackpoints.map(trackpoint => {\n const lat = parseFloat(trackpoint.querySelector('LatitudeDegrees').textContent);\n const lon = parseFloat(trackpoint.querySelector('LongitudeDegrees').textContent);\n const elevationElement = trackpoint.querySelector('AltitudeMeters');\n const elevation = elevationElement && elevationElement.textContent.trim() !== '' ?\n parseFloat(elevationElement.textContent) : 0.0;\n return [lon, lat, elevation];\n });\n\n const geojson = {\n \"type\": \"FeatureCollection\",\n \"features\": [{\n type: 'Feature',\n geometry: {\n type: 'LineString',\n coordinates: coordinates\n },\n properties: {\n name: tcxDoc.querySelector('Name')?.textContent ?? 'no-name'\n }\n }]\n };\n\n return MarkersAndLineStrings.fromGeoJson(JSON.stringify(geojson))\n }\n\n static async fromGeoJson(geoJsonString): Promise<MarkersAndLineStrings> {\n let geoJson = JSON.parse(geoJsonString)\n\n let lineStrings = geoJson.features.filter((feature) => feature.geometry.type === \"LineString\")\n const lineStringFeatures = await Promise.all(lineStrings.map(async (lineString) => {\n const coords = lineString.geometry.coordinates\n if (lineStrings.length > 6) {\n return LineStringFeature.coordsOnlyFeature(coords)\n } else {\n let coordsWithUpdatedElevation = await getElevationData(coords.map(c => [c[1], c[0]]))\n // @ts-ignore\n return LineStringFeature.coordsOnlyFeature(coordsWithUpdatedElevation.map(h => [h.lng, h.lat, h.elevation]))\n }\n }))\n if (lineStringFeatures.length > 1) {\n throw MultiRouteError.fromLineStrings(lineStringFeatures)\n } else if (lineStringFeatures.length === 1) {\n return MarkersAndLineStrings.createLineStringAndMakersFrom(lineStringFeatures[0])\n } else {\n throw Error(\"No routes found\")\n }\n }\n\n static async createLineStringAndMakersFrom(lineStringFeature: LineStringFeature) {\n let coords = lineStringFeature.lineStringGeometry.coordinates\n let coordsWithUpdatedElevation = await getElevationData(coords.map(c => [c[1], c[0]]))\n\n // @ts-ignore\n let lineStringFeatureWithElevation = LineStringFeature.coordsOnlyFeature(coordsWithUpdatedElevation.map(h => [h.lng, h.lat, h.elevation]))\n // @ts-ignore\n let length = turfLength(lineStringFeatureWithElevation.toGeoJson(), { units: 'meters' })\n let intervalLength = Math.floor(length / 15)\n let startCoord = coords[0]\n let endCoord = coords[coords.length - 1]\n\n let markers: MarkerFeature[] = []\n markers.push(\n await MarkerFeature.fromCoordinates(\n startCoord, true\n )\n )\n markers.push(\n await MarkerFeature.fromCoordinates(\n endCoord, true\n )\n )\n\n return new MarkersAndLineStrings(markers, [lineStringFeatureWithElevation])\n }\n}\n\nexport class MultiRouteError extends Error {\n lineStrings: LineStringFeature[]\n\n constructor(message) {\n super(message);\n this.lineStrings = [];\n }\n\n static fromLineStrings(lineStrings: LineStringFeature[]) {\n let error = new MultiRouteError(\"File contains more than one track or route.\")\n error.lineStrings = lineStrings;\n return error;\n }\n}\n","import { ActionTree } from \"vuex\";\nimport { RootState } from \"../store\";\nimport { GridRefUtils } from \"../../../utils/helpers/GridRefPreference\";\nimport {\n lineString,\n lineSplit,\n point,\n nearestPointOnLine\n} from \"@turf/turf\";\nimport { bbox as turfBbox } from \"@turf/turf\";\nimport { MarkerFeature, MarkerGeometry } from \"../../../utils/models/MarkerFeature\";\nimport { plainToClass } from \"class-transformer\";\nimport { LineStringFeature } from \"../../../utils/models/LineStringFeature\";\nimport { generateID } from \"../../../utils/helpers/IDGenerator\";\nimport graphClient from \"../../../utils/graphql/graph_client\";\nimport { CreatePtv2PlannedTrail, UpdatePtv2PlannedTrail } from \"../../../utils/graphql/planned-trail-graph\";\nimport { PlanTrailState } from \"./PlanTrailModule\";\nimport { snapPoints } from \"../../../utils/models/Graphooper\";\nimport { hiikerElevation, getElevationData } from \"../../../utils/helpers/HiikerElevationApiHelper\";\n// @ts-ignore\nimport { MeasurementPrefUtility } from \"../../../utils/helpers/MeasurementPref\";\nimport { getMarkersAndLineStringsFrom, MultiRouteError } from \"../../../utils/helpers/ImportFileHelper\";\nimport firebase from '../../../js/firebase'\nimport 'firebase/compat/storage';\nimport moment from 'moment';\nimport 'moment-timezone';\nimport { getLatLonFromURLForPlannedTrail } from \"../../../utils/helpers/GetLatLonFromURLForPlannedTrail\";\nimport { isClickOnWaypointHelper } from \"../../../utils/helpers/IsClickOnWaypointHelper\";\nimport { isClickOnPOIHelper } from \"../../../utils/helpers/IsClickOnPOIHelper\";\nimport mapboxgl from \"mapbox-gl\";\nimport { IndexedDBCache } from \"../../../utils/crosshair_altitude_service/indexed_db_cache\";\nimport { getElevation } from \"../../../utils/crosshair_altitude_service/pixel_methods\";\nimport throttle from 'lodash/throttle';\n\nlet functionRefs = {}\n\nconst actions: ActionTree<PlanTrailState, RootState> = {\n async initialiseStore(store) {\n let plannedTrail = window.plannedTrail\n if (plannedTrail && plannedTrail.title) {\n store.state.title = plannedTrail.title\n store.state.description = plannedTrail.description\n store.state.plannedToHikeOn = plannedTrail.planned_to_hike_on\n store.state.clientId = plannedTrail.client_id\n } else {\n store.state.clientId = generateID()\n }\n if (window.lineString) {\n // Its an edit\n const lineString = window.lineString;\n let markerFeatures: MarkerFeature[] = []\n let lineStringFeatures: LineStringFeature[] = []\n for (const feature of lineString.features) {\n if (feature.geometry.type === \"LineString\") {\n lineStringFeatures.push(LineStringFeature.fromGeoJsonForEdit(feature))\n } else if (feature.geometry.type === \"Point\") {\n markerFeatures.push(MarkerFeature.fromGeoJson(feature))\n }\n }\n store.commit(\"setMarkers\", markerFeatures)\n store.commit(\"setLineStrings\", lineStringFeatures)\n } else {\n const locallyStoredState = localStorage.getItem('store')\n if (locallyStoredState) {\n const jsonFromLocalStorage = JSON.parse(locallyStoredState)\n if (jsonFromLocalStorage.planTrail.markers.length > 0) {\n const confirm = window.confirm('You have unsaved changes. Do you want to load them?')\n if (confirm) {\n this.replaceState(jsonFromLocalStorage)\n await store.commit('disableRemovalMode')\n } else {\n localStorage.removeItem('store')\n }\n }\n }\n }\n },\n setMapLatLonFromParams(store) {\n const params = new URLSearchParams(window.location.search);\n if (params.has('lat') && params.has('lng') && params.has('zoom')) {\n // Set map to fly to location\n const lat = parseFloat(params.get('lat') as string)\n const lng = parseFloat(params.get('lng') as string)\n const zoom = parseFloat(params.get('zoom') as string)\n window.map.flyTo({\n center: [lng, lat],\n zoom: zoom,\n duration: 500\n })\n }\n },\n async mapInitialised(store) {\n const gridRef = GridRefUtils.preference()\n let measurementPreference = MeasurementPrefUtility.preference()\n window.map.addControl(new mapboxgl.ScaleControl({ unit: measurementPreference.mapbox(), maxWidth: 150 }), 'top-left');\n const geoJson = store.getters['markersFeatureCollection']\n if (geoJson.features.length > 0) {\n store.dispatch('setMapBounds', { geoJson })\n }\n const cache = new IndexedDBCache();\n\n const handleMouseMove = async (e) => {\n const coords = gridRef.convert(e.lngLat);\n const currentZoom = window.map.getZoom();\n const elevation = await getElevation(e.lngLat, currentZoom, cache);\n store.commit('setMiniCoordsBar', `${coords.toString()} ${elevation}`);\n };\n\n const throttledMouseMove = throttle(handleMouseMove, 20); // Adjust the throttle interval as needed\n window.map.on('mousemove', throttledMouseMove);\n\n const latLonForPlannedTrail = getLatLonFromURLForPlannedTrail(window.location.href);\n if (latLonForPlannedTrail) {\n await store.dispatch('clearMap', true)\n let id = generateID()\n store.commit(\n \"addMarkerObj\",\n {\n lng: latLonForPlannedTrail.lon,\n lat: latLonForPlannedTrail.lat,\n id: id, isSnap: true\n }\n )\n let marker = store.getters.getLastMarker\n store.dispatch(\"addMarkerToMap\", marker)\n window.map.flyTo({\n center: [latLonForPlannedTrail.lon, latLonForPlannedTrail.lat],\n zoom: 11,\n duration: 2500\n })\n }\n },\n setMapBounds(store, data: { geoJson: GeoJSON.FeatureCollection, duration: number }) {\n const map = window.map\n const newBbox = turfBbox(data.geoJson);\n // @ts-ignore\n const bounds = mapboxgl.LngLatBounds.convert(newBbox);\n map.fitBounds(bounds, {\n padding: 200,\n duration: data.duration != null ? data.duration : 0,\n });\n },\n async undo(store) {\n if (store.state.undoMarkers.length > 0) {\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('removeAllLineStringsFromMap')\n await store.commit('updateRedo');\n const lastUndoMarkers = store.getters.getLastUndoMarkers;\n await store.commit('setMarkers', lastUndoMarkers);\n const lastUndoLineStrings = store.getters.getLastUndoLineStrings;\n await store.commit('setLineStrings', lastUndoLineStrings);\n await store.commit('popUndo');\n await store.dispatch('addAllMarkersToMap')\n await store.dispatch('addAllLineStringsToMap')\n }\n },\n async redo(store) {\n if (store.state.redoMarkers.length > 0) {\n await store.commit('updateUndo');\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('removeAllLineStringsFromMap')\n const lastRedoMarkers = store.getters.getLastRedoMarkers;\n await store.commit('setMarkers', lastRedoMarkers);\n const lastRedoLineStrings = store.getters.getLastRedoLineStrings;\n await store.commit('setLineStrings', lastRedoLineStrings);\n await store.commit('popRedo');\n await store.dispatch('addAllMarkersToMap')\n await store.dispatch('addAllLineStringsToMap')\n }\n },\n\n // MARK - Markers\n async addAllMarkersToMap(store) {\n const markers: MarkerFeature[] = store.state.markers\n for (let i = 0; i < markers.length; i++) {\n await store.dispatch(\"addMarkerToMap\", markers[i])\n }\n },\n async addMarkerToMap(store, marker: MarkerFeature) {\n const markerFeature = plainToClass(MarkerFeature, marker)\n const map = window.map\n const id = markerFeature.markerProperties.id\n await store.dispatch('removeMarkerFromMap', markerFeature)\n let source = markerFeature.toGeoJSONSourceRaw()\n map.addSource(id, source);\n let layer = await store.dispatch(\"createMarkerLayer\", { id, isFirst: store.state.markers[0].markerProperties.id == markerFeature.markerProperties.id })\n map.addLayer(layer);\n await store.dispatch('addListenersForMarker', markerFeature)\n },\n async shouldRemoveMarker(store, marker: MarkerFeature) {\n if (!store.state.removalMode) {\n return\n }\n await store.commit('updateUndo')\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('removeAllLineStringsFromMap')\n await store.dispatch('removeMarkerAndAddLineString', marker)\n await store.dispatch('addAllMarkersToMap')\n await store.dispatch('addAllLineStringsToMap')\n },\n async removeMarkerAndAddLineString(store, marker: MarkerFeature) {\n const markerIndex = store.state.markers.findIndex(m => m.markerProperties.id == marker.markerProperties.id)\n if (markerIndex == 0) {\n // Start Marker\n // Remove LineString at index 0\n await store.commit('removeFirstLineString')\n } else if (markerIndex == store.state.markers.length - 1) {\n // End Marker\n // Remove LineString at index - 1\n await store.commit('removeLastLineString')\n } else {\n // Middle Marker\n // Merge Linestring at index - 1 and index\n // Then insert at index - 1\n await store.commit('mergeLineStrings', { lineString1Index: markerIndex - 1, lineString2Index: markerIndex })\n }\n await store.commit('removeMarker', marker)\n },\n removeMarkerFromMap(store, marker: MarkerFeature) {\n const markerFeature: MarkerFeature = plainToClass(MarkerFeature, marker)\n const map = window.map\n const id = markerFeature.markerProperties.id\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n if (map.getSource(id)) {\n map.removeSource(id);\n }\n },\n createMarkerLayer(store, markerDetails: { id: string, isFirst: boolean }): mapboxgl.CircleLayer {\n return {\n id: markerDetails.id,\n type: \"circle\",\n source: markerDetails.id,\n paint: {\n \"circle-radius\": 6,\n \"circle-color\": markerDetails.isFirst ? \"#6db65b\" : \"#2CC2E3\",\n \"circle-stroke-color\": \"#ffffff\",\n \"circle-stroke-width\": 3\n },\n }\n },\n async removeAllMarkersFromMap(store) {\n const markers = store.state.markers\n for (let i = 0; i < markers.length; i++) {\n await store.dispatch('removeMarkerFromMap', markers[i])\n }\n },\n addListenersForMarker(store, feature: MarkerFeature) {\n const canvas = window.map.getCanvasContainer();\n const id = feature.markerProperties.id\n const added = Date.now()\n\n async function onMove(e: mapboxgl.MapMouseEvent) {\n const coords = e.lngLat;\n canvas.style.cursor = \"grabbing\";\n feature.markerGeometry.coordinates = [coords.lng, coords.lat];\n let geoJsonSource = window.map.getSource(id) as mapboxgl.GeoJSONSource;\n // @ts-ignore\n geoJsonSource.setData(feature.toGeoJson());\n }\n\n async function onUp(e: mapboxgl.MapMouseEvent) {\n window.map.off(\"mousemove\", onMove);\n window.map.off(\"touchmove\", onMove);\n endClickTime = Date.now()\n if (startClickTime != null && endClickTime - startClickTime < 200) {\n startClickTime = null;\n await store.dispatch('shouldRemoveMarker', feature)\n } else {\n // We need to add this as as this event is double called for an unknown reason\n // causing to try to update a removed marker.\n await store.dispatch('markerMoved', feature)\n }\n canvas.style.cursor = \"move\";\n }\n\n function enterStyleMarker() {\n window.map.setPaintProperty(id, \"circle-color\", \"#3887be\");\n if (store.state.removalMode) {\n window.map.setPaintProperty(id, \"circle-color\", \"#DB2B35\");\n canvas.style.cursor = \"pointer\";\n } else {\n canvas.style.cursor = \"move\";\n }\n }\n\n function leaveStyleMarker() {\n if (window.map.getLayer(id) != null) {\n if (id == store.state.markers[0].markerProperties.id) {\n window.map.setPaintProperty(id, \"circle-color\", \"#6db65b\");\n } else {\n window.map.setPaintProperty(id, \"circle-color\", \"#2CC2E3\");\n }\n }\n canvas.style.cursor = \"crosshair\";\n }\n\n function mouseDown(e: mapboxgl.MapMouseEvent) {\n // Prevent the default map drag behavior.\n startClickTime = Date.now()\n e.preventDefault();\n canvas.style.cursor = \"grab\";\n window.map.on(\"mousemove\", onMove);\n window.map.once(\"mouseup\", onUp);\n }\n\n function touchStart(e) {\n if (e.points.length !== 1) return;\n // Prevent the default map drag behavior.\n e.preventDefault();\n\n window.map.on(\"touchmove\", onMove);\n window.map.once(\"touchend\", onUp);\n }\n\n if (functionRefs[id] != null) {\n functionRefs[id].forEach((ref) => {\n window.map.off(\"mouseenter\", id, ref);\n window.map.off(\"mouseleave\", id, ref);\n window.map.off(\"mousedown\", id, ref);\n window.map.off(\"touchstart\", id, ref);\n })\n }\n\n functionRefs[id] = [onMove, onUp, enterStyleMarker, leaveStyleMarker, mouseDown, touchStart]\n\n window.map.on(\"mouseenter\", id, enterStyleMarker);\n window.map.on(\"mouseleave\", id, leaveStyleMarker);\n window.map.on(\"mousedown\", id, mouseDown);\n window.map.on(\"touchstart\", id, touchStart);\n\n var startClickTime: number | null = null\n var endClickTime: number | null = null\n },\n\n // MARK - Polylines\n async markerMoved(store, marker: MarkerFeature) {\n if (window.map.getSource('marker')) {\n window.map.removeLayer('marker')\n window.map.removeSource('marker')\n }\n await store.commit('updateUndo')\n marker.markerProperties.isSnap = store.state.isSnap\n await store.commit('updateMarker', marker)\n const index = store.state.markers.findIndex(m => m.markerProperties.id == marker.markerProperties.id)\n await store.dispatch('updateLineStringsFromMarkerMove', index)\n },\n\n async addAllLineStringsToMap(store) {\n let lineStrings = store.state.lineStrings\n for (let i = 0; i < lineStrings.length; i++) {\n await store.dispatch(\"addLineStringToMap\", { lineStringFeature: lineStrings[i], id: i })\n }\n },\n\n /**\n * REFACTOR:\n * 1. Immediately return a provisional line (straight line)\n * 2. Kick off the real fetch in the background; replace it once done\n */\n async createPolylineGeoJson(\n { state, dispatch },\n polylineDetails: { startMarker: MarkerFeature; endMarker: MarkerFeature }\n ): Promise<LineStringFeature> {\n const { startMarker, endMarker } = polylineDetails;\n const isSnap = endMarker.markerProperties.isSnap;\n\n // 1) Create a provisional line with minimal/zero elevation:\n const provisionalLine = LineStringFeature.straightLine(startMarker, endMarker);\n\n // 2) In parallel, do the real fetch and replace:\n if (isSnap) {\n snapPoints(startMarker, endMarker, state.routePreference)\n .then((realLine) => {\n dispatch(\"replaceProvisionalLine\", { provisionalLine, realLine });\n })\n .catch((error) => {\n console.error(\"snapPoints error:\", error);\n // If error, keep the provisional line\n });\n } else {\n hiikerElevation(startMarker, endMarker)\n .then((realLine) => {\n dispatch(\"replaceProvisionalLine\", { provisionalLine, realLine });\n })\n .catch((error) => {\n console.error(\"hiikerElevation error:\", error);\n // If error, keep the provisional line\n });\n }\n\n // Return the provisional line so we can add it to the store & map immediately\n return provisionalLine;\n },\n\n /**\n * REFACTOR:\n * Replaces the provisional line with the real line once data arrives\n */\n async replaceProvisionalLine({ commit, dispatch, state }, { provisionalLine, realLine }) {\n // Find index of the provisional line in the store\n const idx = state.lineStrings.findIndex(\n ls => ls.lineStringProperties.id === provisionalLine.lineStringProperties.id\n );\n if (idx === -1) {\n // The user might have undone or removed the line. Do nothing.\n return;\n }\n\n // Remove the provisional line from the map\n dispatch(\"removeLineStringFromMap\", idx);\n\n // Replace line in the store\n commit(\"removeLineStringAtIndex\", idx);\n commit(\"addLineStringAtIndex\", { lineString: realLine, index: idx });\n\n // Add the real line to the map\n dispatch(\"addLineStringToMap\", { lineStringFeature: realLine, id: idx });\n },\n\n async updateLineStringsFromMarkerMove({ state, commit, dispatch }, markerIndex) {\n let indexes: number[] = []\n if (markerIndex == 0) {\n indexes.push(0)\n } else if (markerIndex == state.markers.length - 1) {\n indexes.push(markerIndex - 1)\n } else {\n indexes.push(markerIndex - 1)\n indexes.push(markerIndex)\n }\n for (let i = 0; i < indexes.length; i++) {\n let index1 = indexes[i]\n await commit('removeLineStringAtIndex', index1)\n await dispatch('removeLineStringFromMap', index1)\n const startMarker = state.markers[index1]\n const endMarker = state.markers[index1 + 1]\n // Create a provisional line, let background fetch replace it\n let provisionalLine = await dispatch('createPolylineGeoJson', { startMarker, endMarker })\n await commit('addLineStringAtIndex', { lineString: provisionalLine, index: index1 })\n await dispatch(\"addLineStringToMap\", { lineStringFeature: provisionalLine, id: index1 })\n }\n },\n\n async addToPolyline({ state, dispatch, commit }, marker: MarkerFeature) {\n const markers = state.markers\n if (markers.length < 2) {\n return\n }\n const startMarker = markers[markers.length - 2]\n // Create a provisional line\n let provisionalLine = await dispatch('createPolylineGeoJson', { startMarker, endMarker: marker })\n commit('addLineStringAtIndex', { lineString: provisionalLine, index: state.lineStrings.length })\n await dispatch(\"addLineStringToMap\", { lineStringFeature: provisionalLine, id: state.lineStrings.length - 1 })\n },\n\n async removeAllLineStringsFromMap(store) {\n const markers = store.state.markers\n for (let i = 0; i < markers.length; i++) {\n await store.dispatch(\"removeLineStringFromMap\", i)\n }\n },\n async addLineStringToMap(\n store,\n data: {\n lineStringFeature: LineStringFeature,\n id: number\n }\n ) {\n const map = window.map\n const id = data.id\n await store.dispatch(\"removeLineStringFromMap\", id)\n const stringId = `polyline-${id}`;\n const arrowLayer = `arrow-layer-${stringId}`;\n const firstMarkerLayer = store.state.markers[0]?.markerProperties.id\n const lineLayer = await store.dispatch(\"createLineLayer\", stringId)\n\n const lineString = plainToClass(LineStringFeature, data.lineStringFeature)\n await map.addSource(\n stringId,\n lineString.toGeoJsonSource()\n );\n if (firstMarkerLayer != null && map.getLayer(firstMarkerLayer)) {\n await map.addLayer(lineLayer, firstMarkerLayer);\n } else {\n await map.addLayer(lineLayer);\n }\n await store.dispatch('addPolylineArrowLayerToMap', { targetLayerId: stringId, arrowLayer })\n },\n removeLineStringFromMap(store, id: number) {\n const map = window.map\n const stringId = `polyline-${id}`;\n const arrowLayer = `arrow-layer-${stringId}`;\n if (map.getLayer(arrowLayer)) {\n map.removeLayer(arrowLayer);\n }\n if (map.getLayer(stringId)) {\n map.removeLayer(stringId);\n }\n if (map.getSource(stringId) !== undefined) {\n map.removeSource(stringId);\n }\n },\n createLineLayer(store, stringId: string): mapboxgl.LineLayer {\n return {\n id: stringId,\n type: \"line\",\n source: stringId,\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n paint: {\n \"line-color\": \"#fd5372\",\n \"line-width\": 5,\n }\n }\n },\n addPolylineArrowLayerToMap(\n store,\n arrowLayerDetails: {\n targetLayerId: string, arrowLayer: string\n }\n ) {\n const map = window.map\n const url = \"https://i.postimg.cc/3JMHRKJ3/polyline-arrow-symbol.png\";\n const arrowLayer = arrowLayerDetails.arrowLayer\n map.loadImage(url, (error?: Error | undefined, result?: HTMLImageElement | ImageBitmap | undefined) => {\n if (error) {\n return;\n }\n if (map.hasImage(arrowLayer)) {\n map.removeImage(arrowLayer);\n }\n map.addImage(arrowLayer, result as ImageBitmap);\n if (map.getLayer(arrowLayer)) {\n map.removeLayer(arrowLayer);\n }\n map.addLayer({\n id: arrowLayer,\n type: \"symbol\",\n source: arrowLayerDetails.targetLayerId,\n layout: {\n \"symbol-placement\": \"line\",\n \"icon-allow-overlap\": true,\n 'icon-ignore-placement': true,\n \"icon-image\": arrowLayer,\n \"icon-size\": 0.045,\n visibility: \"visible\",\n },\n });\n });\n },\n\n // MARK - other\n async mapClicked(store, e: mapboxgl.MapMouseEvent) {\n if (store.rootState.waypoints?.waypointAddingModeEnabled) {\n return;\n }\n if (!store.state.planMode) {\n return;\n }\n if (isClickOnWaypointHelper(window.map.queryRenderedFeatures(e.point))) {\n return;\n }\n if (isClickOnPOIHelper(window.map.queryRenderedFeatures(e.point))) {\n return;\n }\n if (store.state.removalMode) {\n return\n }\n const features = window.map.queryRenderedFeatures(e.point);\n if (features.length > 0) {\n const markerFeatures = features.filter((feature) => feature.layer.id.includes(\"marker\"));\n if (markerFeatures.length > 0) {\n const polylineFeatures = features.filter((feature) => feature.layer.id.includes(\"polyline\"));\n if (polylineFeatures.length > 0) {\n console.log(\"marker clicked\")\n store.dispatch(\"insertMarker\", {linestringFeature: polylineFeatures[0], markerFeature: markerFeatures[0]})\n }\n return\n }\n }\n await store.commit('clearRedo')\n await store.commit('updateUndo')\n let id = generateID()\n await store.commit(\n \"addMarkerObj\",\n {\n lng: e.lngLat.lng, lat: e.lngLat.lat,\n id: id, isSnap: store.state.isSnap\n }\n )\n await store.dispatch(\"addMarkerToMap\", store.getters.getLastMarker)\n await store.dispatch('addToPolyline', store.getters.getLastMarker)\n },\n async save(store, shouldRedirect: boolean = true) {\n // Dont continue if photos are uploading.\n if (store.state.photosToUpload.length > 0) {\n return alert(\"Please wait for photos to upload before saving\")\n }\n store.state.loading = true\n if (store.state.lineStrings.length == 0) {\n store.state.loading = false\n return alert(\"Please add at least 2 markers to save a route\")\n }\n if (window.plannedTrail) {\n // save edit\n try {\n let titleToSet = ''\n if (store.state.title != null && store.state.title != '') {\n titleToSet = store.state.title\n } else {\n titleToSet = \"Web Planned Trail - \" + (new Date().toLocaleString())\n }\n let variables = {\n plannedTrail: {\n id: window.plannedTrail.id,\n lineStringsAttributes: store.getters.getPtv2LineStringAttributes,\n markersAttributes: store.getters.getPtv2MarkerAttributes,\n title: titleToSet,\n description: store.state.description,\n public: store.state.public,\n }\n }\n if (store.state.plannedToHikeOn) {\n variables.plannedTrail.plannedToHikeOn = new Date(store.state.plannedToHikeOn).toISOString()\n }\n if (store.getters.getPtv2ImageAttributes.length > 0) {\n variables.plannedTrail.imagesAttributes = store.getters.getPtv2ImageAttributes\n }\n const response = await graphClient.request(\n UpdatePtv2PlannedTrail,\n variables\n )\n if (response.updatePtv2PlannedTrail != null && response.updatePtv2PlannedTrail.errors.length > 0) {\n store.state.loading = false\n return alert(response.updatePtv2PlannedTrail.errors)\n }\n if (response.updatePtv2PlannedTrail.id != null) {\n localStorage.removeItem('store')\n // @ts-ignore\n if (shouldRedirect) {\n window.location = '/user/planned-trails'\n } else {\n store.state.clientId = response.updatePtv2PlannedTrail.clientId\n window.plannedTrail = response.updatePtv2PlannedTrail\n }\n } else {\n store.state.loading = false\n const error = \"Unknown error occurred\"\n return alert(error)\n }\n } catch (e) {\n store.state.loading = false\n alert(e)\n }\n } else {\n try {\n var titleToSet = ''\n if (store.state.title != null) {\n titleToSet = store.state.title\n } else {\n titleToSet = \"Web Planned Trail - \" + (new Date().toLocaleString())\n }\n const variables = {\n plannedTrail: {\n lineStringsAttributes: store.getters.getPtv2LineStringAttributes,\n markersAttributes: store.getters.getPtv2MarkerAttributes,\n title: titleToSet,\n description: store.state.description,\n public: store.state.public\n }\n }\n if (store.state.plannedToHikeOn) {\n variables.plannedTrail.plannedToHikeOn = new Date(store.state.plannedToHikeOn).toISOString()\n }\n if (store.getters.getPtv2ImageAttributes.length > 0) {\n variables.plannedTrail.imagesAttributes = store.getters.getPtv2ImageAttributes\n }\n const response = await graphClient.request(\n CreatePtv2PlannedTrail,\n variables\n )\n if (response.createPtv2PlannedTrail != null && response.createPtv2PlannedTrail.errors.length > 0) {\n store.state.loading = false\n return alert(response.createPtv2PlannedTrail.errors)\n }\n if (response.createPtv2PlannedTrail.id != null) {\n localStorage.removeItem('store')\n // @ts-ignore\n if (shouldRedirect) {\n window.location = '/user/planned-trails'\n } else {\n window.plannedTrail = response.createPtv2PlannedTrail\n store.state.clientId = response.createPtv2PlannedTrail.clientId\n }\n } else {\n store.state.loading = false\n const error = \"Unknown error occurred\"\n return alert(error)\n }\n } catch (e) {\n store.state.loading = false\n return alert(e)\n }\n }\n },\n async loopRoute(store) {\n if (store.state.markers.length > 0) {\n await store.commit('clearRedo')\n await store.commit('updateUndo')\n let id = generateID()\n let startMarkerGeometry: MarkerGeometry = plainToClass(MarkerGeometry, store.state.markers[0].markerGeometry)\n store.commit(\n \"addMarkerObj\",\n {\n lng: startMarkerGeometry.lon() + 0.00001,\n lat: startMarkerGeometry.lat() - 0.00001,\n id: id, isSnap: true\n }\n )\n let marker = store.getters.getLastMarker\n store.dispatch(\"addMarkerToMap\", marker)\n await store.dispatch('addToPolyline', store.state.markers[store.state.markers.length - 1])\n }\n },\n async clearMap(store, skipConfirmation: boolean = false) {\n if (!skipConfirmation) {\n let confirmed = confirm(\"Are you sure you want to clear the map?\")\n if (!confirmed) {\n return\n }\n }\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('removeAllLineStringsFromMap')\n await store.commit('removeAllMarkers')\n await store.commit('removeAllLineStrings')\n await store.commit('disableRemovalMode')\n },\n async importFile(store, file: File) {\n try {\n if (store.state.lineStrings.length > 0) {\n let confirmed = confirm(\"Are you sure you want to clear the map?\")\n if (!confirmed) {\n return\n }\n }\n\n const markersAndLineStrings = await getMarkersAndLineStringsFrom(file)\n\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('removeAllLineStringsFromMap')\n await store.commit('removeAllMarkers')\n await store.commit('removeAllLineStrings')\n await store.commit('setMarkers', markersAndLineStrings.markers)\n await store.commit('setLineStrings', markersAndLineStrings.lineStrings)\n await store.dispatch('addAllMarkersToMap')\n await store.dispatch('addAllLineStringsToMap')\n\n const bbox = turfBbox(store.getters.lineStringFeatureCollection);\n // @ts-ignore\n $(\"#trail-import-dialog\").modal('hide');\n // @ts-ignore\n window.map.fitBounds(bbox, { padding: 20 });\n } catch (e) {\n if (e instanceof MultiRouteError) {\n // @ts-ignore\n $(\"#trail-import-dialog\").modal('hide');\n // @ts-ignore\n window.importRouteMultipleOptionsDialogShow(e.lineStrings)\n } else {\n alert(e)\n }\n }\n },\n async mouseMovedOnMap(store, e: mapboxgl.MapMouseEvent) {\n const map = window.map\n const features = map.queryRenderedFeatures(e.point);\n if (features && features.length > 0) {\n if (features[0].layer.id.includes('polyline-')) {\n const coordinate = e.lngLat\n if (map.getSource('marker')) {\n // @ts-ignore\n map.getSource('marker').setData({\n type: 'Point',\n coordinates: [coordinate.lng, coordinate.lat]\n })\n return\n }\n map.addSource('marker', {\n type: 'geojson',\n data: {\n type: 'Point',\n coordinates: [coordinate.lng, coordinate.lat]\n }\n });\n map.addLayer({\n id: 'marker',\n type: 'circle',\n source: 'marker',\n paint: {\n 'circle-radius': 10,\n 'circle-color': '#3887be'\n }\n }, features[0].layer.id);\n }\n } else {\n if (map.getSource('marker')) {\n map.removeLayer('marker');\n map.removeSource('marker');\n }\n }\n },\n\n async insertMarker(store, data: { linestringFeature: any, markerFeature: any }) {\n\n await store.commit('updateUndo')\n await store.commit('clearRedo')\n\n const polylineInsertPoint = data.markerFeature.geometry.coordinates\n const polylineId = data.linestringFeature.source\n const polylineIndex = parseInt(polylineId.split('-')[1])\n const polylineFromState = store.state.lineStrings[polylineIndex]\n\n const linestring = lineString(polylineFromState.lineStringGeometry.coordinates)\n let markerPoint = point(polylineInsertPoint);\n let nearest = nearestPointOnLine(linestring, markerPoint);\n let result = lineSplit(linestring, nearest);\n\n let lineString1 = result.features[0]\n let coords1 = lineString1.geometry.coordinates\n let lineStringFeature1 = LineStringFeature.coordsOnlyFeature(coords1)\n const coords1ToGetElev = coords1[coords1.length - 1]\n\n let lineString2 = result.features[1]\n let coords2 = lineString2.geometry.coordinates\n let lineStringFeature2 = LineStringFeature.coordsOnlyFeature(coords2)\n const coords2ToGetElev = coords2[0]\n const elevation = await getElevationData([[coords1ToGetElev[1], coords1ToGetElev[0]], [coords2ToGetElev[1], coords2ToGetElev[0]]])\n lineStringFeature1.lineStringGeometry.coordinates[coords1.length - 1][2] = elevation[0].elevation\n lineStringFeature2.lineStringGeometry.coordinates[0][2] = elevation[1].elevation\n\n store.commit('removeLineStringAtIndex', polylineIndex)\n store.commit('addLineStringAtIndex', {lineString: lineStringFeature1, index: polylineIndex})\n store.commit('addLineStringAtIndex', {lineString: lineStringFeature2, index: polylineIndex + 1})\n\n let shouldBeSnap = store.state.markers[polylineIndex + 1].markerProperties.isSnap\n let id = generateID()\n store.commit('insertMarkerObj', {\n lng: markerPoint.geometry.coordinates[0],\n lat: markerPoint.geometry.coordinates[1],\n id: id, isSnap: shouldBeSnap, index: polylineIndex + 1\n })\n await store.dispatch('removeAllLineStringsFromMap')\n await store.dispatch('removeAllMarkersFromMap')\n await store.dispatch('addAllMarkersToMap')\n await store.dispatch('addAllLineStringsToMap')\n },\n\n async importFromGeoJson(store, geoJson) {\n await store.dispatch('removeAllLineStringsFromMap')\n await store.dispatch('removeAllMarkersFromMap')\n store.commit('removeAllLineStrings');\n store.commit('removeAllMarkers');\n store.commit('clearRedo');\n store.commit('clearUndo');\n // geoJson\n\n if (geoJson.features.length > 1) {\n let markers = geoJson.features.filter(feature => feature.geometry.type == 'Point')\n let lineStrings = geoJson.features.filter(feature => feature.geometry.type == 'LineString')\n let lineStringFeatures = lineStrings.map(lineString => LineStringFeature.coordsOnlyFeature(lineString.geometry.coordinates))\n markers.forEach(marker => {\n store.commit('addMarkerObj',\n { lng: marker.geometry.coordinates[0], lat: marker.geometry.coordinates[1], id: generateID(), isSnap: true }\n )\n })\n lineStringFeatures.forEach(lineString => {\n store.commit('addLineString', lineString)\n })\n store.dispatch('addAllMarkersToMap')\n store.dispatch('addAllLineStringsToMap')\n\n const bbox = turfBbox(geoJson);\n // @ts-ignore\n window.map.fitBounds(bbox, { padding: 20 });\n } else {\n const coordinates = geoJson.features[0].geometry.coordinates\n const firstCoordinate = coordinates[0]\n const lastCoordinate = coordinates[coordinates.length - 1]\n store.commit('addMarkerObj',\n { lng: firstCoordinate[0], lat: firstCoordinate[1], id: generateID(), isSnap: true }\n )\n store.commit('addMarkerObj',\n { lng: lastCoordinate[0], lat: lastCoordinate[1], id: generateID(), isSnap: true }\n )\n let lineStringFeature = LineStringFeature.coordsOnlyFeature(coordinates)\n store.commit('addLineString', lineStringFeature)\n\n store.dispatch('addAllMarkersToMap')\n store.dispatch('addAllLineStringsToMap')\n\n const bbox = turfBbox(geoJson.features[0]);\n // @ts-ignore\n window.map.fitBounds(bbox, { padding: 20 });\n }\n },\n\n async reverseFullRoute(store) {\n await store.commit('updateUndo')\n await store.commit('clearRedo')\n await store.dispatch('removeAllLineStringsFromMap')\n await store.dispatch('removeAllMarkersFromMap')\n store.state.markers.reverse()\n store.state.lineStrings = store.state.lineStrings.map(lineString => {\n return LineStringFeature.coordsOnlyFeature(lineString.lineStringGeometry.coordinates.reverse())\n }).reverse()\n store.dispatch('addAllMarkersToMap')\n store.dispatch('addAllLineStringsToMap')\n },\n\n async updateElevation(store) {\n await store.dispatch('removeAllLineStringsFromMap')\n await store.dispatch('removeAllMarkersFromMap')\n store.state.lineStrings = await Promise.all(store.state.lineStrings.map(async lineString => {\n const coords = lineString.lineStringGeometry.coordinates\n let coordsWithUpdatedElevation = await getElevationData(coords.map(c => [c[1], c[0]]))\n return LineStringFeature.coordsOnlyFeature(coordsWithUpdatedElevation.map(h => [h.lng, h.lat, h.elevation]))\n }))\n store.dispatch('addAllMarkersToMap')\n store.dispatch('addAllLineStringsToMap')\n },\n\n async uploadImages(store, data: {files: File[], ids: string[]}) {\n const files = data.files\n for (const file of files) {\n store.state.photosToUpload.push(file)\n }\n try {\n for (let i = 0; i < files.length; i++) {\n const file = files[i]\n const id = data.ids[i]\n let userId = window.user.firebase_user_id\n let fileName = `web------${userId}---planned---${store.state.clientId}` +\n `---${id}------` +\n `${new Date().toISOString()}.jpg`\n await firebase.storage().ref().child(\"rails_upload_end_point\").child(fileName).put(file)\n const index = store.state.photosToUpload.findIndex(fileToCheck => fileToCheck.name == file.name)\n if (index !== -1) {\n store.state.photosToUpload.splice(index, 1);\n }\n store.state.photosIds.push(id)\n }\n } catch (e) {\n alert(e)\n }\n },\n\n destroyImage(store, data: {id: string, file: File}) {\n store.state.photosToUpload = store.state.photosToUpload.filter(file => file.name !== data.file.name)\n store.state.photosIds = store.state.photosIds.filter(photoId => photoId !== data.id)\n // If you had a GraphQL destroyImage mutation, you might call it here\n // graphClient.request(DestroyImage, { id: id }).then(data => {\n // console.log(data)\n // })\n },\n\n async shareRoute(store) {\n store.state.loading = true\n await store.dispatch('save', false)\n if (window.plannedTrail && window.plannedTrail.shareableUrl) {\n store.state.shareableUrl = window.plannedTrail.shareableUrl\n // @ts-ignore\n $('#share-dialog').modal('show')\n }\n store.state.loading = false\n },\n setPlannedToHikeOn(store, value) {\n // Your local time value\n const localTimeValue = value;\n\n // Parse the local time value\n const localMoment = moment(localTimeValue);\n\n // Convert the local time value to UTC\n const utcMoment = localMoment.utc();\n\n // Format the UTC time as a string (e.g., \"YYYY-MM-DDTHH:mm:ss[Z]\")\n const utcString = utcMoment.format(\"YYYY-MM-DDTHH:mm:ss[Z]\");\n\n console.log(utcString); // Output: \"2023-05-10T17:01:00Z\"\n\n store.state.plannedToHikeOn = utcString;\n }\n}\n\nexport default actions;\n","/**\n * Extracts the latitude and longitude values from a given URL based on the 'startPoint' query parameter.\n *\n * The expected URL format is \"?startPoint=latitude,longitude\".\n * If the format is valid, it returns an object with `lat` and `lon` properties.\n * Otherwise, it returns null.\n *\n * @param {string} url - The URL from which the latitude and longitude values are to be extracted.\n * @returns {{ lat: number, lon: number } | null} - An object containing the latitude and longitude values, or null if invalid.\n *\n * @example\n * const url = \"https://yourwebsite.com/plan-trail?startPoint=53.5,-7.5\";\n * const result = getLatLonFromURL(url);\n * // Returns: { lat: 53.5, lon: -7.5 }\n */\nexport function getLatLonFromURLForPlannedTrail(url: string): { lat: number, lon: number } | null {\n const urlObj = new URL(url);\n const startPoint = urlObj.searchParams.get('startPoint');\n\n if (startPoint) {\n const [lat, lon] = startPoint.split(',').map(coord => parseFloat(coord.trim()));\n\n // Check if lat and lon are valid numbers\n if (!isNaN(lat) && !isNaN(lon)) {\n return { lat, lon };\n }\n }\n\n return null;\n}\n","export function isClickOnPOIHelper(features: any[]): boolean {\n if (features.length > 0) {\n let feature = features[0]\n if (feature.source.includes('poi')) {\n return true\n }\n }\n return false\n}\n","import {Module} from \"vuex\";\nimport {MarkerFeature} from \"../../../utils/models/MarkerFeature\";\nimport store, {RootState} from \"../store\";\nimport Vue from \"vue\";\nimport mapboxgl from \"mapbox-gl\";\nimport {LineStringFeature} from \"../../../utils/models/LineStringFeature\";\nimport getters from \"./getters\";\nimport mutations from \"./mutations\";\nimport actions from \"./actions\";\n\nexport class PlanTrailState {\n title: string | null = null\n description: string | null = null\n plannedToHikeOn: string | null = null\n public: boolean = true\n photosIds: string[] = []\n photosToUpload: File[] = []\n markers: MarkerFeature[] = []\n isSnap: boolean = true\n redoMarkers: MarkerFeature[][] = []\n undoMarkers: MarkerFeature[][] = []\n redoLineStrings: LineStringFeature[][] = []\n undoLineStrings: LineStringFeature[][] = []\n removalMode: boolean = false\n center: number[] = [0, 0]\n zoom: number = 0\n lineStrings: LineStringFeature[] = []\n miniCoordsBar: string = ''\n error?: string | null = undefined\n onMarkerMoveCalled = false;\n loading = false;\n clientId: string | null = null;\n shareableUrl: string | null = null;\n planMode: boolean = true;\n routePreference: string = \"hike\";\n}\n\ndeclare global {\n interface Window {\n map: mapboxgl.Map;\n }\n}\n\nconst state = Vue.observable(new PlanTrailState());\n\nexport default class PlanTrailModule implements Module<PlanTrailState, RootState> {\n namespaced = true\n state = state\n actions = actions\n mutations = mutations\n getters = getters\n}\n","import Vuex, {Store} from 'vuex';\nimport Vue from 'vue';\nimport MapStylesDialogModule, {\n MapStylesState\n} from \"../../base_map_styles_dialog/store/modules/BaseMapStylesDialogModule\";\nimport PlanTrailModule, {PlanTrailState} from \"./modules/PlanTrailModule\";\nimport WaypointDialogModule, {WaypointDialogState} from \"../../waypoint_dialog/store/module/WaypointOptionsDialogModule\";\nimport POIDialogModule, {POIDialogState} from \"../../poi_dialog/store/modules/POIDialogModule\";\nimport POIEverywhereDialogModule, {POIEverywhereDialogState} from \"../../pois_everywhere/store/modules/POIEverywhereDialogModule\";\nimport MapDataTrailsModule, {MapDataTrailsState} from \"../../map_data/store/modules/MapDataTrailsModule\";\nimport MapDataPOIsModule, {MapDataPOIsState} from \"../../map_data/store/modules/MapDataPOIsModule\";\n\nVue.use(Vuex)\n\nexport interface RootState {\n mapStyles: MapStylesState\n planTrail: PlanTrailState\n waypoints: WaypointDialogState\n mapDataPOIs: MapDataPOIsState,\n mapDataTrails: MapDataTrailsState,\n}\n\nconst store: Store<RootState> = new Vuex.Store({\n modules: {\n mapStyles: new MapStylesDialogModule(),\n planTrail: new PlanTrailModule(),\n waypoints: new WaypointDialogModule(),\n mapDataTrails: new MapDataTrailsModule(),\n mapDataPOIs: new MapDataPOIsModule(),\n }\n})\n\nstore.subscribe((mutation, state) => {\n if (\n mutation.type === 'planTrail/addLineString' ||\n mutation.type == 'planTrail/addLineStrings' ||\n mutation.type == 'planTrail/addLineStringAtIndex' ||\n mutation.type == 'planTrail/addToRedoMarkers' ||\n mutation.type == 'planTrail/addToRedoLineStrings'\n ){\n const stateCopy = JSON.parse(JSON.stringify(state))\n stateCopy.mapStyles = new MapStylesState()\n stateCopy.planTrail.redoLineStrings = []\n stateCopy.planTrail.redoMarkers = []\n stateCopy.planTrail.undoLineStrings = []\n stateCopy.planTrail.undoMarkers = []\n localStorage.setItem('store', JSON.stringify(stateCopy))\n }\n})\n\n\n\nexport default store;\n\n","import Vue from 'vue';\nimport App from './PlanTrail.vue';\nimport store from \"./store/store\";\nimport mapboxgl, { MapboxEvent, Style } from \"mapbox-gl\";\n// @ts-ignore\nimport maptilerToken from \"../utils/helpers/MaptilerToken\";\nimport { MapOverlayOption } from \"../utils/models/MapOverlayOptions\";\nimport vueTopprogress from 'vue-top-progress';\nimport createGeoLocate from \"../utils/helpers/GeoLocateHelper\";\nimport {Client} from \"typesense\";\nimport '../utils/bus';\n// @ts-ignore\nimport { generateID } from \"../utils/helpers/IDGenerator\";\nimport { LineStringFeature } from \"../utils/models/LineStringFeature\";\nimport {HiikerMapStyle, MapStyle, SavedCenter, ThreeDimensionalMapManager} from \"../utils/models/MapStyles\";\nimport {RevenueCatUtil} from \"../utils/models/RevenueCatUser\";\nimport {OnBoardingGoal} from \"../utils/models/OnBoardingGoal\";\nimport getQueryParams from \"../utils/helpers/GetQueryParamsHelper\";\nimport 'mapbox-gl/dist/mapbox-gl.css';\nimport {RevenueCatWrapper} from \"../utils/RevenueCatWrapper\";\n\ndeclare global {\n interface Window {\n vue: Vue;\n map: mapboxgl.Map;\n geoLocate: mapboxgl.GeolocateControl;\n typesenseClient: Client;\n }\n}\n\ndeclare global {\n interface Window {\n importRouteMultipleOptionsDialogShow: (lineStrings: LineStringFeature[]) => void;\n }\n}\n\nif (document.querySelector('#plan_trail')) {\n\n Vue.use(vueTopprogress);\n\n window.vue = new Vue({\n store,\n render: (createElement) => {\n return createElement(App)\n },\n async beforeCreate() {\n await this.$store.dispatch('planTrail/initialiseStore');\n await this.$store.dispatch('mapStyles/initialiseStore');\n },\n async mounted() {\n mapboxgl.accessToken = \"pk.eyJ1IjoiaGlpa2VyLW1hcHMiLCJhIjoiY2x0YThyZHppMWhmejJqbzExODBuY3dveiJ9.nBrtnXgbzxpAx_953HCB-w\"\n const map = new mapboxgl.Map(this.$store.getters['planTrail/initialMapSettings']);\n const isProOrProPlus = await RevenueCatWrapper.isProOrProPlus();\n map.setStyle(HiikerMapStyle.getCurrentStyle(isProOrProPlus).styleUrl)\n const canvas = map.getCanvasContainer();\n canvas.style.cursor = \"crosshair\";\n map.on('click', this.mapClicked);\n map.on('moveend', this.mapMoved);\n map.on('load' , async () => {\n window.bus.$emit('map-loaded');\n createGeoLocate();\n await this.$store.dispatch('planTrail/mapInitialised');\n this.$store.dispatch('planTrail/setMapLatLonFromParams');\n });\n map.on('style.load', () => {\n ThreeDimensionalMapManager.disable3DMode()\n console.log(\"CALLLLLLEEEEEDDDD style update\")\n this.mapStyleLoaded()\n })\n window.bus.$on('map-style-loaded', () => {\n this.mapStyleLoaded()\n })\n let marker: mapboxgl.Marker | null = null;\n window.map = map;\n map.on('mousemove', (e: mapboxgl.MapMouseEvent) => {\n if (window.map) {\n this.$store.dispatch('planTrail/mouseMovedOnMap', e);\n }\n });\n this.$store.dispatch('waypoints/initialiseStore');\n window.bus.$on('update-geojson', (geoJson: any) => {\n this.$store.dispatch('planTrail/importFromGeoJson', geoJson)\n })\n },\n beforeDestroy() {\n\n },\n methods: {\n async mapInitialised() {\n\n },\n mapMoved(event: MapboxEvent) {\n SavedCenter.saveCurrentCenter()\n },\n async mapClicked(e: mapboxgl.MapMouseEvent) {\n await this.$store.dispatch('planTrail/mapClicked', e);\n },\n mapStyleLoaded() {\n setTimeout(async () => {\n await this.$store.dispatch('planTrail/addAllMarkersToMap')\n await this.$store.dispatch('planTrail/addAllLineStringsToMap')\n }, 1000)\n },\n\n },\n }).$mount('#plan_trail');\n}\n","import bugsnag from '@bugsnag/js';\n\nif(process.env.NODE_ENV === 'production') {\n bugsnag('9f17b291a8a3869ce535ff629d3d69f1')\n}\n","import { ActionTree, GetterTree, Module, MutationTree } from \"vuex\";\nimport Vue from \"vue\";\nimport { POIUtility } from \"../../../utils/models/POI\";\nimport {isClickOnWaypointHelper} from \"../../../utils/helpers/IsClickOnWaypointHelper\";\n\n// -- Define the module’s state interface\nexport interface MapDataPOIsState {\n activatedPois: any[]; // list of currently active POI objects\n poiList: any[]; // full list of available POIs\n}\n\n// -- Initialize state\nconst state: MapDataPOIsState = Vue.observable({\n // Start with an empty array. We’ll rehydrate activatedPois in initActivePois.\n activatedPois: [],\n // Get and sort all POIs (using your POIUtility)\n poiList: POIUtility.allPOIUtils().sort((a, b) => {\n return a.prettyName().localeCompare(b.prettyName());\n }),\n});\n\n// -- Mutations to update activated POIs and keep localStorage in sync\nconst mutations: MutationTree<MapDataPOIsState> = {\n SET_ACTIVATED_POIS(state, pois: any[]) {\n state.activatedPois = pois;\n // Persist only the layerNames\n localStorage.setItem(\n \"activatedPois\",\n JSON.stringify(pois.map((poi) => poi.layerName))\n );\n },\n ADD_ACTIVATED_POI(state, poi: any) {\n if (!state.activatedPois.some((p: any) => p.layerName === poi.layerName)) {\n state.activatedPois.push(poi);\n localStorage.setItem(\n \"activatedPois\",\n JSON.stringify(state.activatedPois.map((p) => p.layerName))\n );\n }\n },\n REMOVE_ACTIVATED_POI(state, poi: any) {\n state.activatedPois = state.activatedPois.filter(\n (p: any) => p.layerName !== poi.layerName\n );\n localStorage.setItem(\n \"activatedPois\",\n JSON.stringify(state.activatedPois.map((p) => p.layerName))\n );\n },\n REMOTE_ALL_POIS(state) {\n state.activatedPois = [];\n localStorage.removeItem(\"activatedPois\");\n }\n};\n\n// -- Actions for initialization and toggling POI layers on the map\nconst actions: ActionTree<MapDataPOIsState, any> = {\n /**\n * Initialize activated POIs:\n * - Load from localStorage (as an array of layerNames) and rehydrate the active POIs.\n * - Process any URL parameters for a passed POI.\n * - Finally, add each active POI’s layers to the map.\n */\n initActivePois({ state, commit, dispatch }) {\n // Load stored layer names (if any) from localStorage.\n const storedActivated: string[] = JSON.parse(\n localStorage.getItem(\"activatedPois\") || \"[]\"\n );\n\n // Map the stored layer names to actual POI objects from poiList.\n const validActivated = storedActivated\n .map((layerName: string) =>\n state.poiList.find((poi: any) => poi.layerName === layerName)\n )\n .filter((poi: any) => poi);\n\n commit(\"SET_ACTIVATED_POIS\", validActivated);\n\n // Process URL parameters for a passed POI.\n const passedPoi = POIUtility.checkForPassedPOI();\n if (passedPoi) {\n if (!state.poiList.some((poi: any) => poi.layerName === passedPoi.layerName)) {\n console.warn(\"Passed POI is not in the available list; ignoring.\");\n } else if (\n !state.activatedPois.some((poi: any) => poi.layerName === passedPoi.layerName)\n ) {\n commit(\"ADD_ACTIVATED_POI\", passedPoi);\n }\n }\n\n // If the map is ready, add layers for each activated POI.\n if (window.map && window.map.getStyle && window.map.getStyle().layers) {\n dispatch(\"refreshActivePois\");\n }\n },\n\n addAllPois({ state, commit, dispatch }) {\n state.poiList.forEach((poi) => {\n commit(\"ADD_ACTIVATED_POI\", poi);\n });\n dispatch(\"refreshActivePois\");\n },\n\n addParkPois({ state, commit, dispatch }) {\n const parkPois = POIUtility.allParkUtils()\n state.poiList.forEach((poi) => {\n commit(\"ADD_ACTIVATED_POI\", poi);\n });\n dispatch(\"refreshActivePois\");\n },\n\n refreshActivePois({ state, dispatch }) {\n state.activatedPois.forEach((poi: any) => {\n dispatch(\"addPoiLayers\", poi);\n });\n },\n\n /**\n * Activate the click handler.\n * On click, if a feature is rendered from an active POI, show its details.\n */\n activateClickHandler({ state, rootState }) {\n window.map.on(\"click\", (e) => {\n if (rootState.planTrail && rootState.planTrail.planMode) {\n return;\n }\n if (state.activatedPois.length === 0) {\n return;\n }\n if (isClickOnWaypointHelper(window.map.queryRenderedFeatures(e.point))) {\n return;\n }\n const features = window.map.queryRenderedFeatures(e.point, {\n layers: state.activatedPois.map((poi) => poi.layerName),\n });\n if (features.length) {\n const feature = features[0];\n const poi = state.poiList.find(\n (poi) => poi.layerName === feature.layer.id\n );\n if (poi && window.showPoi) {\n window.showPoi(poi.databaseClassName(), feature.properties.id);\n }\n }\n });\n },\n\n viewCreated({dispatch}) {\n window.bus.$on('map-loaded', () => {\n dispatch(\"initActivePois\");\n dispatch(\"activateClickHandler\");\n dispatch(\"refreshActivePois\");\n console.log('Map Data POIs map-loaded');\n });\n window.bus.$on('map-style-loaded', () => {\n console.log('Map Data POIs style.load');\n dispatch(\"refreshActivePois\");\n })\n },\n\n beforeViewDestroyed() {\n window.bus.$off('map-loaded');\n window.bus.$off('map-style-loaded');\n },\n\n /**\n * Toggle a POI's active state.\n * If active, remove its layers; if inactive, add its layers.\n */\n togglePoi({ state, commit, dispatch }, poi: any) {\n if (state.activatedPois.some((active: any) => active.layerName === poi.layerName)) {\n commit(\"REMOVE_ACTIVATED_POI\", poi);\n dispatch(\"removePoiLayers\", poi);\n } else {\n commit(\"ADD_ACTIVATED_POI\", poi);\n dispatch(\"addPoiLayers\", poi);\n }\n },\n\n /**\n * Add the map layers for the given POI.\n */\n addPoiLayers({}, poi: any) {\n // If the POI's source is already added, do nothing.\n if (window.map.getSource(poi.layerName)) return;\n window.map.addSource(poi.layerName, {\n type: \"vector\",\n tiles: [poi.mvtUrl],\n minzoom: 10,\n maxzoom: 14,\n promoteId: poi.layerName,\n });\n window.map.addLayer({\n id: poi.layerName,\n type: \"symbol\",\n source: poi.layerName,\n \"source-layer\": \"data\",\n layout: {\n \"icon-image\": poi.puckIconName,\n \"icon-size\": 0.25,\n \"icon-anchor\": \"center\",\n \"icon-allow-overlap\": true,\n },\n });\n },\n\n /**\n * Remove the map layers for the given POI.\n */\n removePoiLayers({}, poi: any) {\n if (window.map.getLayer(poi.layerName)) {\n window.map.removeLayer(poi.layerName);\n }\n if (window.map.getSource(poi.layerName)) {\n window.map.removeSource(poi.layerName);\n }\n },\n};\n\n// -- A getter to check if a POI is active\nconst getters: GetterTree<MapDataPOIsState, any> = {\n isPoiActive: (state) => (poi) => {\n return state.activatedPois.some((active) => active.layerName === poi.layerName);\n },\n};\n\n// -- Export the module as a class-based Vuex module\nexport default class MapDataPOIsModule implements Module<MapDataPOIsState, any> {\n namespaced = true;\n state = state;\n actions = actions;\n mutations = mutations;\n getters = getters;\n}\n","// store/modules/mapDataTrails.ts\nimport {ActionTree, GetterTree, Module, MutationTree} from \"vuex\";\nimport Vue from \"vue\";\n\n// GraphQL client and queries\nimport graph_client from \"../../../utils/graphql/graph_client\";\nimport {GetTrail} from \"../../../utils/graphql/trail-graph\";\nimport {GetPtv2PlannedTrail} from \"../../../utils/graphql/planned-trail-graph\";\nimport {GetRecordedTrailById, GetRecordedTrailByRecordingId} from \"../../../utils/graphql/recorded-trail-graph\";\n\n// -- Define the module’s state interface\nexport interface MapDataTrailsState {\n activeSources: string[];\n trailOptions: { [key: string]: string };\n sourceColors: { [key: string]: string };\n miniLoader: boolean;\n}\n\n// -- Initialize state\nconst state: MapDataTrailsState = Vue.observable({\n activeSources: JSON.parse(localStorage.getItem(\"activeTrailSources\") || \"[]\"),\n trailOptions: {\n get_user_recordings: \"Show my Recorded Trails\",\n get_user_planned_trails: \"Show my Planned Trails\",\n get_user_completed_trails: \"Show my Completed Trails\",\n // get_published_trails: \"Show HiiKER Trails\",\n },\n sourceColors: {\n get_user_recordings: \"#9E00FF\", // Purple\n get_user_planned_trails: \"#F57700\", // Orange\n get_user_completed_trails: \"#FF00FF\", // Magenta\n // get_published_trails: \"#FF0000\", // Red\n },\n miniLoader: false,\n});\n\n// -- Mutations update the list of active sources and update localStorage\nconst mutations: MutationTree<MapDataTrailsState> = {\n SET_ACTIVE_SOURCES(state, sources: string[]) {\n state.activeSources = sources;\n localStorage.setItem(\"activeTrailSources\", JSON.stringify(state.activeSources));\n },\n ADD_ACTIVE_SOURCE(state, source: string) {\n if (!state.activeSources.includes(source)) {\n state.activeSources.push(source);\n localStorage.setItem(\"activeTrailSources\", JSON.stringify(state.activeSources));\n }\n },\n REMOVE_ACTIVE_SOURCE(state, source: string) {\n state.activeSources = state.activeSources.filter((s) => s !== source);\n localStorage.setItem(\"activeTrailSources\", JSON.stringify(state.activeSources));\n },\n};\n\n// -- A helper function to darken a HEX color\nconst darkenColor = (color: string, factor = 0.7): string => {\n const rgb = color.match(/\\w\\w/g)?.map((c) => parseInt(c, 16)) || [0, 0, 0];\n return `#${rgb\n .map((c) =>\n Math.max(0, Math.min(255, Math.floor(c * factor)))\n .toString(16)\n .padStart(2, \"0\")\n )\n .join(\"\")}`;\n};\n\n// -- Actions perform initialization, toggle behavior, and handle the map logic\nconst actions: ActionTree<MapDataTrailsState, unknown> = {\n // Called from your component’s created() hook to initialize active sources\n initActiveSources({state, commit}) {\n const validSources = Object.keys(state.trailOptions);\n console.log(\"Valid sources:\", validSources);\n\n if (!window.user) {\n commit(\"SET_ACTIVE_SOURCES\", []);\n return;\n }\n\n const urlParams = new URLSearchParams(window.location.search);\n let useUrlOverrides = false;\n const urlActiveSources = [];\n\n // Check each valid source for a URL parameter override.\n validSources.forEach((source) => {\n if (urlParams.has(source)) {\n useUrlOverrides = true;\n const paramValue = urlParams.get(source);\n console.log(`URL parameter for ${source}:`, paramValue);\n if (paramValue === \"true\") {\n urlActiveSources.push(source);\n }\n // If the URL parameter is \"false\", we simply don't add it.\n }\n });\n\n if (useUrlOverrides) {\n // When URL parameters are provided, ignore localStorage and use URL data only.\n // (Optionally, you can log if no sources were activated via URL.)\n console.log(\"Using URL parameters for activation:\", urlActiveSources);\n commit(\"SET_ACTIVE_SOURCES\", urlActiveSources);\n } else {\n // No URL overrides: use localStorage values.\n let filtered = state.activeSources.filter((source) =>\n validSources.includes(source)\n );\n console.log(\"Filtered sources from localStorage:\", filtered);\n\n commit(\"SET_ACTIVE_SOURCES\", filtered);\n }\n },\n\n forceOneSource({state, commit, dispatch}, source: string) {\n commit(\"SET_ACTIVE_SOURCES\", [source]);\n dispatch(\"refreshLineSources\");\n },\n\n viewCreated({dispatch}) {\n window.bus.$on('map-loaded', () => {\n dispatch(\"initActiveSources\");\n dispatch(\"initMapClickHandler\");\n dispatch(\"refreshLineSources\");\n console.log('TrailOptions map-loaded');\n });\n window.bus.$on('map-style-loaded', () => {\n console.log('TrailOptions style.load');\n dispatch(\"refreshLineSources\");\n })\n },\n\n beforeViewDestroyed() {\n window.bus.$off('map-loaded');\n window.bus.$off('map-style-loaded');\n },\n\n // Toggle a given trail source (update state & map layers)\n toggleTrail({state, commit, dispatch}, source: string) {\n if (state.activeSources.includes(source)) {\n commit(\"REMOVE_ACTIVE_SOURCE\", source);\n } else {\n commit(\"ADD_ACTIVE_SOURCE\", source);\n }\n dispatch(\"toggleLineSource\", source);\n },\n\n // Add or remove the vector source and layers from the map for a given source\n toggleLineSource({state, getters}, source: string) {\n const borderLayerId = `${source}-border`;\n const pointLayerId = `${source}-points`;\n\n if (state.activeSources.includes(source)) {\n // Source is active; ensure it’s added to the map\n if (!window.map.getSource(source)) {\n console.log(\"Adding layer:\", source);\n const color = state.sourceColors[source] || \"#000000\";\n const darkerColor = darkenColor(color);\n const baseUrl = window.location.origin;\n window.map.addSource(source, {\n type: \"vector\",\n tiles: [\n `${baseUrl}/vector/${source}/{z}/{x}/{y}?public_filter=false&user_id=${window.user.id}&t=${Date.now()}`,\n ],\n minzoom: getters.minZoomForSource(source),\n maxzoom: 14,\n });\n\n window.map.addLayer({\n id: borderLayerId,\n type: \"line\",\n source: source,\n \"source-layer\": \"data\",\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n paint: {\n \"line-color\": darkerColor,\n \"line-width\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 0, 2,\n 14, 6,\n ],\n },\n });\n\n window.map.addLayer({\n id: source,\n type: \"line\",\n source: source,\n \"source-layer\": \"data\",\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n paint: {\n \"line-color\": color,\n \"line-width\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 0, 1,\n 14, 4,\n ],\n },\n });\n } else {\n console.log(`Source ${source} already exists on the map; skipping add.`);\n }\n } else {\n // Source is not active; remove it from the map if present\n if (window.map.getSource(source)) {\n console.log(\"Removing layer:\", source);\n if (window.map.getLayer(source)) {\n window.map.removeLayer(source);\n }\n if (window.map.getLayer(borderLayerId)) {\n window.map.removeLayer(borderLayerId);\n }\n if (window.map.getLayer(pointLayerId)) {\n window.map.removeLayer(pointLayerId);\n }\n window.map.removeSource(source);\n } else {\n console.log(`Source ${source} not found on the map; skipping remove.`);\n }\n }\n },\n\n // Handle a click on the map (dispatch the correct method based on the clicked feature’s source)\n addFeatureFromClick({state, dispatch}, {source, properties}) {\n state.miniLoader = true;\n switch (source) {\n case \"get_user_recordings\":\n dispatch(\"getRecording\", properties.id);\n break;\n case \"get_user_planned_trails\":\n dispatch(\"getPtv2PlannedTrail\", properties.ptv2_planned_trail_id);\n break;\n case \"get_user_completed_trails\":\n dispatch(\"getTrail\", properties.line_stringable_id);\n break;\n case \"get_published_trails\":\n dispatch(\"getTrail\", properties.trail_id);\n break;\n }\n },\n\n // Retrieve a trail feature and add it to the map\n getTrail({dispatch, rootState}, id: string) {\n // If you have a progress bar component you might trigger it here.\n console.log(\"Loading Trail with id:\", id);\n graph_client.request(GetTrail, {id}).then((data) => {\n console.log(\"Trail data:\", data);\n const trailFeatureCollection = JSON.parse(data.trail.multilinestring);\n dispatch(\"addLineLayToMap\", trailFeatureCollection);\n if (window.trailCardDataTrail) {\n window.trailCardDataTrail(data.trail);\n }\n }).catch((error) => {\n console.error(error);\n alert(\"Error fetching trail. Please try again later.\");\n }).finally(() => {\n state.miniLoader = false;\n })\n },\n\n // Retrieve a planned trail feature and add it to the map\n getPtv2PlannedTrail({dispatch}, id: string) {\n console.log(\"Loading Planned Trail with id:\", id);\n graph_client.request(GetPtv2PlannedTrail, {id}).then((data) => {\n console.log(\"Planned trail data:\", data);\n const plannedTrailFeatureCollection = data.ptv2PlannedTrailById.geojsonFeatureCollection;\n dispatch(\"addLineLayToMap\", plannedTrailFeatureCollection);\n if (window.trailCardDataPtv2PlannedTrail) {\n window.trailCardDataPtv2PlannedTrail(data.ptv2PlannedTrailById);\n }\n state.miniLoader = false;\n }).catch((error) => {\n alert(\"Error fetching planned trail. Please try again later.\");\n }).finally(() => {\n state.miniLoader = false;\n })\n },\n\n // Retrieve a recording feature and add it to the map\n getRecording({dispatch}, id: string) {\n console.log(\"Loading Recording with id:\", id);\n graph_client.request(GetRecordedTrailByRecordingId, {id: `${id}`}).then((data) => {\n console.log(\"Recording data:\", data);\n const recordingFeatureCollection = JSON.parse(data.recording.lineString);\n dispatch(\"addLineLayToMap\", recordingFeatureCollection);\n if (window.trailCardDataRecording) {\n window.trailCardDataRecording(data.recording);\n }\n state.miniLoader = false;\n }).catch((error) => {\n alert(\"Error fetching recording. Please try again later.\");\n }).finally(() => {\n state.miniLoader = false;\n })\n },\n\n // Remove an individual line layer from the map\n removeLineLayer() {\n if (window.map.getLayer(\"individual-line\")) {\n window.map.removeLayer(\"individual-line\");\n window.map.removeLayer(\"individual-line-border\");\n }\n if (window.map.getSource(\"individual-line\")) {\n window.map.removeSource(\"individual-line\");\n }\n },\n\n // Add an individual line layer to the map (used for showing a single trail)\n addLineLayToMap({dispatch}, geoJsonFeatureCollection: any) {\n dispatch(\"removeLineLayer\");\n const color = \"#ff00f2\";\n const darkerColor = darkenColor(color);\n window.map.addSource(\"individual-line\", {\n type: \"geojson\",\n data: geoJsonFeatureCollection,\n });\n\n window.map.addLayer({\n id: \"individual-line\",\n type: \"line\",\n source: \"individual-line\",\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n paint: {\n \"line-color\": color,\n \"line-width\": 8,\n },\n });\n window.map.addLayer({\n id: \"individual-line-border\",\n type: \"line\",\n source: \"individual-line\",\n layout: {\n \"line-join\": \"round\",\n \"line-cap\": \"round\",\n },\n paint: {\n \"line-color\": darkerColor,\n \"line-width\": [\n \"interpolate\",\n [\"linear\"],\n [\"zoom\"],\n 0, // At zoom level 0\n 2,\n 14, // At zoom level 14\n 6,\n ],\n },\n });\n },\n\n refreshLineSources({state, dispatch}) {\n state.activeSources.forEach((source) => {\n dispatch(\"toggleLineSource\", source);\n });\n },\n\n // Set up the map click handler after the map is initialized (e.g. in mounted())\n initMapClickHandler({state, dispatch, rootState}) {\n dispatch(\"refreshLineSources\");\n // Listen for map clicks and handle feature selection\n window.map.on(\"click\", (e: any) => {\n if (rootState.planTrail && rootState.planTrail.planMode) {\n return;\n }\n if (state.activeSources.length === 0) {\n if (window.trailCardClearData) {\n window.trailCardClearData();\n }\n dispatch(\"removeLineLayer\");\n return;\n }\n const features = window.map.queryRenderedFeatures(e.point, {\n layers: state.activeSources,\n });\n if (features.length === 0) {\n if (window.trailCardClearData) {\n window.trailCardClearData();\n }\n dispatch(\"removeLineLayer\");\n return;\n }\n const feature = features[0];\n const featureProperties = feature.properties;\n const source = feature.source;\n dispatch(\"addFeatureFromClick\", {source, properties: featureProperties});\n });\n },\n};\n\n// -- A simple getter so components can ask if a source is active\nconst getters: GetterTree<MapDataTrailsState, any> = {\n isSourceActive: (state) => (source: string): boolean => {\n return state.activeSources.includes(source);\n },\n minZoomForSource: () => (source: string): number => {\n if (source === \"get_published_trails\") {\n return 10;\n }\n return 5;\n }\n};\n\nexport default class MapDataTrailsModule implements Module<MapDataTrailsState, any> {\n namespaced = true\n state = state\n actions = actions\n mutations = mutations\n getters = getters\n}\n","import {gql} from \"graphql-request\";\n\nexport const GetAccomsByPolygon = gql`\n query GetAccomsByPolygon($polygon: String!, $types: [String!]) {\n accommodationsByPolygon(polygon: $polygon, types: $types) {\n id\n type\n name\n lonlat\n internationalPhoneNumber\n website\n email\n\n }\n }\n`;\n\nexport const GetAmenitiesByPolygon = gql`\n query GetAmenitiesByPolygon($polygon: String!, $types: [String!]!) {\n amenitiesByPolygon(polygon: $polygon, types: $types) {\n id\n type\n name\n lonlat\n website\n email\n phone\n wikidata\n }\n }\n`;\n\nexport const GetPoisByString = gql`\n query GetPoisByString($string:String!,$trailId:Int!,$types:[String!]!){\n poisByString(string:$string,trailId:$trailId,types:$types){\n id\n name\n klass\n type\n lonlat\n website\n email\n trails {\n id\n name\n }\n }\n }\n`;\n\nexport const GetPOIsPopularByTrail = gql`\n query GetPOIsPopularByTrail($trailId:Int!,$types:[String!]!){\n poisPopularByTrail(trailId:$trailId,types:$types){\n id\n name\n klass\n type\n lonlat\n website\n email\n trails {\n id\n name\n }\n impressionsCount\n }\n }\n`;\n\nexport const GetPOIByID = gql`\n query GetPoiById($type:String!,$id:ID!){\n poi(type:$type,id:$id) {\n id\n name\n klass\n type\n lonlat\n website\n email\n placeId\n serpData\n trails {\n id\n name\n }\n impressionsCount\n }\n }\n`\n","export function poiDetailsToWaypointDescriptionHelper(poi) {\n let stringToReturn = \"\";\n Object.entries(poi).forEach(([key, value]) => {\n if (value && key) {\n stringToReturn += `${key}: ${value}\\n`;\n }\n })\n return stringToReturn;\n}\n","import LocalTime from 'local-time';\n\nLocalTime.start();\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\":\"add-to-map-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-3\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"tab-content\",attrs:{\"id\":\"myTabContent\"}},[_c('div',{staticClass:\"tab-pane fade show active\",attrs:{\"id\":\"trail-tab-pane\",\"role\":\"tabpanel\",\"aria-labelledby\":\"home-tab\",\"tabindex\":\"0\"}},[_c('VectorDialog')],1),_vm._v(\" \"),_c('div',{staticClass:\"tab-pane fade\",attrs:{\"id\":\"poi-tab-pane\",\"role\":\"tabpanel\",\"aria-labelledby\":\"poi-tab\",\"tabindex\":\"0\"}},[_c('POIs')],1)]),_vm._v(\" \"),_vm._m(1)])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('ul',{staticClass:\"nav nav-tabs d-flex justify-content-around\",attrs:{\"id\":\"myTab\",\"role\":\"tablist\"}},[_c('li',{staticClass:\"nav-item\",attrs:{\"role\":\"presentation\"}},[_c('button',{staticClass:\"nav-link active\",attrs:{\"id\":\"trail-tab\",\"data-bs-toggle\":\"tab\",\"data-bs-target\":\"#trail-tab-pane\",\"type\":\"button\",\"role\":\"tab\",\"aria-controls\":\"trail-tab-pane\",\"aria-selected\":\"true\"}},[_vm._v(\"Trails\")])]),_vm._v(\" \"),_c('li',{staticClass:\"nav-item\",attrs:{\"role\":\"presentation\"}},[_c('button',{staticClass:\"nav-link\",attrs:{\"id\":\"poi-tab\",\"data-bs-toggle\":\"tab\",\"data-bs-target\":\"#poi-tab-pane\",\"type\":\"button\",\"role\":\"tab\",\"aria-controls\":\"poi-tab-pane\",\"aria-selected\":\"false\"}},[_vm._v(\"POIs\")])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"button btn-link btn-block btn-sm text-muted mt-3\",attrs:{\"data-bs-dismiss\":\"modal\",\"aria-label\":\"Close\"}},[_c('strong',[_vm._v(\"CLOSE\")])])\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!./MapDataPOIsTab.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!./MapDataPOIsTab.vue?vue&type=script&lang=js&\"","<template>\n <div>\n <!-- Search Input -->\n <input\n type=\"text\"\n v-model=\"searchQuery\"\n placeholder=\"Filter POIs...\"\n class=\"form-control my-3\"\n >\n\n <div class=\"options-list mt-3\">\n <div\n class=\"option-item\"\n v-for=\"poi in filteredPoiList\"\n :key=\"poi.layerName\"\n >\n <input\n type=\"checkbox\"\n :id=\"`toggle-${poi.layerName}`\"\n :checked=\"isPoiActive(poi)\"\n @change=\"togglePoi(poi)\"\n style=\"display: none\"\n />\n\n <label\n class=\"custom-checkbox d-flex justify-content-between\"\n role=\"switch\"\n :aria-checked=\"isPoiActive(poi)\"\n :for=\"`toggle-${poi.layerName}`\"\n >\n <div class=\"d-flex justify-content-between align-items-center\">\n <img\n :src=\"poi.getPublicImageIcon()\"\n :alt=\"poi.prettyName()\"\n class=\"poi-icon\"\n :class=\"{ selected: isPoiActive(poi) }\"\n @click=\"togglePoi(poi)\"\n width=\"25\"\n />\n <span class=\"ml-2 label-text\">{{ poi.prettyName() }}</span>\n </div>\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"21\" viewBox=\"0 0 42 21\" fill=\"none\">\n <rect\n width=\"42\"\n height=\"21\"\n rx=\"10.5\"\n :fill=\"isPoiActive(poi) ? poi.getColor() : '#CCC'\"\n />\n <circle\n class=\"switch-circle\"\n :class=\"{ 'switch-circle-active': isPoiActive(poi) }\"\n cx=\"11.5\"\n cy=\"10.5\"\n r=\"8.5\"\n fill=\"white\"\n />\n </svg>\n </label>\n <hr>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters, mapActions } from 'vuex';\n\nexport default {\n name: 'MapDataPOIsTab',\n data() {\n return {\n searchQuery: ''\n };\n },\n computed: {\n ...mapState('mapDataPOIs', ['poiList', 'activatedPois']),\n ...mapGetters('mapDataPOIs', ['isPoiActive']),\n\n filteredPoiList() {\n if (!this.searchQuery) {\n return this.poiList;\n }\n return this.poiList.filter(poi => {\n const searchTerm = this.searchQuery.toLowerCase();\n const poiName = poi.prettyName()\n .toLowerCase();\n return poiName.includes(searchTerm);\n });\n }\n },\n methods: {\n ...mapActions('mapDataPOIs', ['togglePoi', 'initActivePois', 'viewCreated', 'beforeViewDestroyed']),\n },\n created() {\n this.viewCreated();\n },\n beforeDestroy() {\n this.beforeViewDestroyed();\n },\n};\n</script>\n\n<style scoped>\n.options-list {\n padding: 0;\n margin: 0;\n}\n\n.option-item {\n padding: 10px 0;\n}\n\n.custom-checkbox {\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.label-text {\n font-size: 1em;\n font-weight: 500;\n}\n\n.switch-circle {\n transition: transform 0.3s ease;\n}\n\n.switch-circle-active {\n transform: translateX(19px);\n}\n\n/* Optional search input styling */\n.form-control {\n padding: 8px 12px;\n border-radius: 4px;\n transition: border-color 0.15s ease-in-out;\n}\n</style>\n","import { render, staticRenderFns } from \"./MapDataPOIsTab.vue?vue&type=template&id=25705fd0&scoped=true&\"\nimport script from \"./MapDataPOIsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MapDataPOIsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MapDataPOIsTab.vue?vue&type=style&index=0&id=25705fd0&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 \"25705fd0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchQuery),expression:\"searchQuery\"}],staticClass:\"form-control my-3\",attrs:{\"type\":\"text\",\"placeholder\":\"Filter POIs...\"},domProps:{\"value\":(_vm.searchQuery)},on:{\"input\":function($event){if($event.target.composing)return;_vm.searchQuery=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"options-list mt-3\"},_vm._l((_vm.filteredPoiList),function(poi){return _c('div',{key:poi.layerName,staticClass:\"option-item\"},[_c('input',{staticStyle:{\"display\":\"none\"},attrs:{\"type\":\"checkbox\",\"id\":`toggle-${poi.layerName}`},domProps:{\"checked\":_vm.isPoiActive(poi)},on:{\"change\":function($event){return _vm.togglePoi(poi)}}}),_vm._v(\" \"),_c('label',{staticClass:\"custom-checkbox d-flex justify-content-between\",attrs:{\"role\":\"switch\",\"aria-checked\":_vm.isPoiActive(poi),\"for\":`toggle-${poi.layerName}`}},[_c('div',{staticClass:\"d-flex justify-content-between align-items-center\"},[_c('img',{staticClass:\"poi-icon\",class:{ selected: _vm.isPoiActive(poi) },attrs:{\"src\":poi.getPublicImageIcon(),\"alt\":poi.prettyName(),\"width\":\"25\"},on:{\"click\":function($event){return _vm.togglePoi(poi)}}}),_vm._v(\" \"),_c('span',{staticClass:\"ml-2 label-text\"},[_vm._v(_vm._s(poi.prettyName()))])]),_vm._v(\" \"),_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"42\",\"height\":\"21\",\"viewBox\":\"0 0 42 21\",\"fill\":\"none\"}},[_c('rect',{attrs:{\"width\":\"42\",\"height\":\"21\",\"rx\":\"10.5\",\"fill\":_vm.isPoiActive(poi) ? poi.getColor() : '#CCC'}}),_vm._v(\" \"),_c('circle',{staticClass:\"switch-circle\",class:{ 'switch-circle-active': _vm.isPoiActive(poi) },attrs:{\"cx\":\"11.5\",\"cy\":\"10.5\",\"r\":\"8.5\",\"fill\":\"white\"}})])]),_vm._v(\" \"),_c('hr')])}),0)])\n}\nvar staticRenderFns = []\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!./MapDataDialog.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!./MapDataDialog.vue?vue&type=script&lang=ts&\"","<template>\n <div class=\"modal fade\" style=\"background-color: rgba(7,7,7,0.36);\" id=\"add-to-map-dialog\" tabindex=\"-1\" role=\"dialog\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-body p-3\">\n\n <ul class=\"nav nav-tabs d-flex justify-content-around\" id=\"myTab\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <button class=\"nav-link active\" id=\"trail-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#trail-tab-pane\" type=\"button\" role=\"tab\" aria-controls=\"trail-tab-pane\" aria-selected=\"true\">Trails</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button class=\"nav-link\" id=\"poi-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#poi-tab-pane\" type=\"button\" role=\"tab\" aria-controls=\"poi-tab-pane\" aria-selected=\"false\">POIs</button>\n </li>\n </ul>\n <div class=\"tab-content\" id=\"myTabContent\">\n <div class=\"tab-pane fade show active\" id=\"trail-tab-pane\" role=\"tabpanel\" aria-labelledby=\"home-tab\" tabindex=\"0\">\n <VectorDialog />\n </div>\n <div class=\"tab-pane fade\" id=\"poi-tab-pane\" role=\"tabpanel\" aria-labelledby=\"poi-tab\" tabindex=\"0\">\n <POIs />\n </div>\n </div>\n\n <button\n class=\"button btn-link btn-block btn-sm text-muted mt-3\"\n data-bs-dismiss=\"modal\"\n aria-label=\"Close\"\n >\n <strong>CLOSE</strong>\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport VectorDialog from './MapDataTrailsTab.vue';\nimport WaypointDialog from '../waypoint_dialog/WaypointDialog.vue';\nimport POIs from \"./MapDataPOIsTab.vue\";\n\nexport default defineComponent({\n components: { VectorDialog, WaypointDialog, POIs },\n});\n</script>\n\n<style scoped>\n.modal-content {\n height: 75vh; /* Set the height of the modal content to 70% of the viewport height */\n overflow-y: auto; /* Add a vertical scroll bar if the content overflows */\n}\n</style>\n","import { render, staticRenderFns } from \"./MapDataDialog.vue?vue&type=template&id=1c2480ac&scoped=true&\"\nimport script from \"./MapDataDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./MapDataDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./MapDataDialog.vue?vue&type=style&index=0&id=1c2480ac&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 \"1c2480ac\",\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\",attrs:{\"id\":\"poi-detail-dialog\",\"tabindex\":\"-1\",\"role\":\"dialog\",\"aria-hidden\":\"true\"}},[_c('div',{staticClass:\"modal-dialog modal-dialog-centered\",attrs:{\"role\":\"document\"}},[_c('div',{staticClass:\"modal-content\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"px-3 pb-3 modal-body\"},[(!_vm.serpData || !_vm.serpData.result)?[(_vm.name)?_c('p',{staticClass:\"display-5\"},[_c('strong',[_vm._v(_vm._s(_vm.name))])]):_vm._e(),_vm._v(\" \"),(!_vm.name)?_c('p',{staticClass:\"display-5\"},[_c('strong',[_vm._v(_vm._s(_vm.type))])]):_vm._e(),_vm._v(\" \"),(_vm.name)?_c('p',{staticClass:\"display-5\"},[_vm._v(_vm._s(_vm.type))]):_vm._e(),_vm._v(\" \"),_c('p',[_c('a',{attrs:{\"href\":_vm.coordsLink}},[_c('small',{staticClass:\"text-muted\"},[_vm._v(_vm._s(_vm.coords))])])]),_vm._v(\" \"),(_vm.phoneNumber)?_c('p',[_vm._m(1),_vm._v(\" \"+_vm._s(_vm.phoneNumber))]):_vm._e(),_vm._v(\" \"),(_vm.email)?_c('p',[_vm._m(2),_vm._v(\" \"+_vm._s(_vm.email))]):_vm._e(),_vm._v(\" \"),(_vm.description)?_c('hr',{staticClass:\"my-2\"}):_vm._e(),_vm._v(\" \"),(_vm.description)?_c('p',[_vm._v(_vm._s(_vm.description))]):_vm._e(),_vm._v(\" \"),(_vm.poi)?_c('p',{staticClass:\"mt-3\"},[_c('button',{staticClass:\"btn btn-sm btn-primary rounded-pill p-1 px-2 d-flex align-items-center\",on:{\"click\":_vm.addToWaypoints}},[_vm._v(\"\\n ADD TO WAYPOINTS \"),_c('span',{staticClass:\"material-icons ml-1\"},[_vm._v(\"add_circle\")])])]):_vm._e()]:[_c('p',{staticClass:\"display-5\"},[_c('strong',[_vm._v(_vm._s(_vm.serpName))])]),_vm._v(\" \"),_c('div',{staticClass:\"small text-muted mb-3\"},[(_vm.serpRating > 0)?[_vm._l((Math.round(_vm.serpRating)),function(n){return _c('span',{key:'filled-' + n,staticClass:\"text-yellow\"},[_vm._v(\"\\n ★\\n \")])}),_vm._v(\" \"),_vm._l((5 - Math.round(_vm.serpRating)),function(n){return _c('span',{key:'empty-' + n,staticClass:\"text-secondary\"},[_vm._v(\"\\n ★\\n \")])}),_vm._v(\" \"),_c('span',{staticClass:\"ms-2\"},[_vm._v(\"\\n \"+_vm._s(_vm.serpRating.toFixed(1))+\"\\n (\"+_vm._s(_vm.serpTotalRatings)+\" Reviews)\\n \")])]:_vm._e()],2),_vm._v(\" \"),(_vm.serpPhone)?_c('p',{staticClass:\"d-flex align-items-center mb-2\"},[_c('span',{staticClass:\"material-icons mr-3\"},[_vm._v(\"call\")]),_vm._v(\" \"+_vm._s(_vm.serpPhone)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.email)?_c('p',{staticClass:\"d-flex align-items-center mb-2\"},[_c('span',{staticClass:\"material-icons mr-3\"},[_vm._v(\"mail\")]),_vm._v(\" \"+_vm._s(_vm.email)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.serpWebsite)?_c('p',{staticClass:\"d-flex align-items-center mb-2\"},[_c('span',{staticClass:\"material-icons mr-3\"},[_vm._v(\"public\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":_vm.serpWebsite,\"target\":\"_blank\",\"rel\":\"noopener noreferrer\"}},[_c('u',{staticClass:\"text-yellow\"},[_vm._v(\"Website\")])])]):_vm._e(),_vm._v(\" \"),(_vm.serpAddress)?_c('p',{staticClass:\"d-flex align-items-center mb-2\"},[_c('span',{staticClass:\"material-icons mr-3\"},[_vm._v(\"location_on\")]),_vm._v(\" \"+_vm._s(_vm.serpAddress)+\"\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.poi)?_c('p',{staticClass:\"mt-3\"},[_c('button',{staticClass:\"btn btn-sm btn-primary rounded-pill p-1 px-2 d-flex align-items-center\",on:{\"click\":_vm.addToWaypoints}},[_vm._v(\"\\n ADD TO WAYPOINTS \"),_c('span',{staticClass:\"material-icons ml-1\"},[_vm._v(\"add_circle\")])])]):_vm._e(),_vm._v(\" \"),(_vm.description)?_c('hr',{staticClass:\"my-2\"}):_vm._e(),_vm._v(\" \"),(_vm.description)?_c('p',[_vm._v(_vm._s(_vm.description))]):_vm._e(),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),(_vm.serpPhotos && _vm.serpPhotos.length)?[_c('div',{staticClass:\"carousel slide mb-3\",attrs:{\"id\":\"serpDataImagesCarousel\",\"data-bs-ride\":\"carousel\"}},[_c('div',{staticClass:\"carousel-inner\"},_vm._l((_vm.serpPhotos),function(photo,index){return _c('div',{key:index,class:['carousel-item', { active: index === 0 }]},[_c('img',{staticClass:\"d-block w-100\",staticStyle:{\"object-fit\":\"cover\",\"max-height\":\"300px\"},attrs:{\"alt\":_vm.serpName,\"src\":_vm.getPhotoUrl(photo)}})])}),0),_vm._v(\" \"),_vm._m(3),_vm._v(\" \"),_vm._m(4)])]:_vm._e(),_vm._v(\" \"),(_vm.serpReviews && _vm.serpReviews.length)?_c('div',[_c('h6',{staticClass:\"mt-3\"},[_vm._v(\"Reviews\")]),_vm._v(\" \"),_vm._l((_vm.serpReviews.slice(0, 5)),function(rev,rIdx){return _c('div',{key:rIdx,staticClass:\"card mb-2\"},[_c('div',{staticClass:\"card-body p-2\"},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('strong',[_vm._v(_vm._s(rev.author_name))]),_vm._v(\" \"),_c('div',{staticClass:\"ms-2\"},_vm._l((rev.rating),function(n){return _c('span',{key:`star-${rIdx}-${n}`,staticClass:\"text-warning\"},[_vm._v(\"\\n ★\\n \")])}),0)]),_vm._v(\" \"),_c('div',{staticClass:\"small text-muted\"},[_vm._v(\"\\n \"+_vm._s(rev.relative_time_description)+\"\\n \")]),_vm._v(\" \"),_c('p',{staticClass:\"mb-1 mt-1\"},[_vm._v(_vm._s(rev.text))])])])})],2):_vm._e()]],2)])]),_vm._v(\" \"),(_vm.showLoader)?_c('Loader'):_vm._e()],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal-header border-0 pt-3 pe-3\",staticStyle:{\"position\":\"relative\"}},[_c('button',{staticClass:\"btn p-0\",staticStyle:{\"position\":\"absolute\",\"right\":\"1rem\",\"top\":\"1rem\",\"z-index\":\"1\"},attrs:{\"type\":\"button\",\"data-bs-dismiss\":\"modal\",\"aria-label\":\"Close\"}},[_c('span',{staticClass:\"material-icons fs-5\"},[_vm._v(\"close\")])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('small',[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"call\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('small',[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"mail\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"carousel-control-prev\",attrs:{\"type\":\"button\",\"data-bs-target\":\"#serpDataImagesCarousel\",\"data-bs-slide\":\"prev\"}},[_c('span',{staticClass:\"carousel-control-prev-icon\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" \"),_c('span',{staticClass:\"visually-hidden\"},[_vm._v(\"Previous\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"carousel-control-next\",attrs:{\"type\":\"button\",\"data-bs-target\":\"#serpDataImagesCarousel\",\"data-bs-slide\":\"next\"}},[_c('span',{staticClass:\"carousel-control-next-icon\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" \"),_c('span',{staticClass:\"visually-hidden\"},[_vm._v(\"Next\")])])\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!./MapDataPOIDetailDialog.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!./MapDataPOIDetailDialog.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"modal fade\" id=\"poi-detail-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n\n <!-- Added close button container -->\n <div class=\"modal-header border-0 pt-3 pe-3\" style=\"position: relative;\">\n <button\n type=\"button\"\n class=\"btn p-0\"\n data-bs-dismiss=\"modal\"\n aria-label=\"Close\"\n style=\"position: absolute; right: 1rem; top: 1rem; z-index: 1;\"\n >\n <span class=\"material-icons fs-5\">close</span>\n </button>\n </div>\n\n <div class=\"px-3 pb-3 modal-body\">\n\n <!-- If no serpData.result, fallback to minimal info from the POI object itself -->\n <template v-if=\"!serpData || !serpData.result\">\n <p v-if=\"name\" class=\"display-5\"><strong>{{ name }}</strong></p>\n <p v-if=\"!name\" class=\"display-5\"><strong>{{ type }}</strong></p>\n <p v-if=\"name\" class=\"display-5\">{{ type }}</p>\n <p><a :href=\"coordsLink\"><small class=\"text-muted\">{{ coords }}</small></a></p>\n <p v-if=\"phoneNumber\"><small><span class=\"material-icons mr-2\">call</span></small> {{ phoneNumber }}</p>\n <p v-if=\"email\"><small><span class=\"material-icons mr-2\">mail</span></small> {{ email }}</p>\n <hr v-if=\"description\" class=\"my-2\">\n <p v-if=\"description\">{{ description }}</p>\n <p class=\"mt-3\" v-if=\"poi\">\n <button class=\"btn btn-sm btn-primary rounded-pill p-1 px-2 d-flex align-items-center\" @click=\"addToWaypoints\">\n ADD TO WAYPOINTS <span class=\"material-icons ml-1\">add_circle</span>\n </button>\n </p>\n </template>\n\n <!--\n NEW SECTION for Google Places data\n Displayed if serpData.result exists\n -->\n <template v-else>\n\n <!-- Basic POI info from new format -->\n <p class=\"display-5\"><strong>{{ serpName }}</strong></p>\n\n <!-- Star rating display + total reviews -->\n <div class=\"small text-muted mb-3\">\n <template v-if=\"serpRating > 0\">\n <!-- Filled stars -->\n <span\n v-for=\"n in Math.round(serpRating)\"\n :key=\"'filled-' + n\"\n class=\"text-yellow\"\n >\n ★\n </span>\n <!-- Unfilled stars -->\n <span\n v-for=\"n in 5 - Math.round(serpRating)\"\n :key=\"'empty-' + n\"\n class=\"text-secondary\"\n >\n ★\n </span>\n <span class=\"ms-2\">\n {{ serpRating.toFixed(1) }}\n ({{ serpTotalRatings }} Reviews)\n </span>\n </template>\n </div>\n\n <!-- Phone -->\n <p class=\"d-flex align-items-center mb-2\" v-if=\"serpPhone\">\n <span class=\"material-icons mr-3\">call</span> {{ serpPhone }}\n </p>\n\n <!-- Email (if you have it in your own data or you store it somewhere) -->\n <p class=\"d-flex align-items-center mb-2\" v-if=\"email\">\n <span class=\"material-icons mr-3\">mail</span> {{ email }}\n </p>\n\n <!-- Website -->\n <p class=\"d-flex align-items-center mb-2\" v-if=\"serpWebsite\">\n <span class=\"material-icons mr-3\">public</span>\n <a :href=\"serpWebsite\" target=\"_blank\" rel=\"noopener noreferrer\">\n <u class=\"text-yellow\">Website</u>\n </a>\n </p>\n\n <!-- Address -->\n <p class=\"d-flex align-items-center mb-2\" v-if=\"serpAddress\">\n <span class=\"material-icons mr-3\">location_on</span> {{ serpAddress }}\n </p>\n\n <!-- Add to Waypoints button -->\n <p v-if=\"poi\" class=\"mt-3\">\n <button class=\"btn btn-sm btn-primary rounded-pill p-1 px-2 d-flex align-items-center\" @click=\"addToWaypoints\">\n ADD TO WAYPOINTS <span class=\"material-icons ml-1\">add_circle</span>\n </button>\n </p>\n\n <!-- If your own POI description is needed -->\n <hr v-if=\"description\" class=\"my-2\">\n <p v-if=\"description\">{{ description }}</p>\n <hr class=\"my-2\"/>\n\n <!-- Photos carousel (if present) -->\n <template v-if=\"serpPhotos && serpPhotos.length\">\n <div id=\"serpDataImagesCarousel\" class=\"carousel slide mb-3\" data-bs-ride=\"carousel\">\n <div class=\"carousel-inner\">\n <div\n v-for=\"(photo, index) in serpPhotos\"\n :key=\"index\"\n :class=\"['carousel-item', { active: index === 0 }]\"\n >\n <!--\n NOTE: Normally you need to build a place-photo URL from the photo_reference\n if you want the actual image. E.g.\n :src=\"`https://maps.googleapis.com/maps/api/place/photo?maxwidth=1600&photoreference=${photo.photo_reference}&key=YOUR_API_KEY`\"\n -->\n <img\n :alt=\"serpName\"\n class=\"d-block w-100\"\n style=\"object-fit: cover; max-height: 300px;\"\n :src=\"getPhotoUrl(photo)\"\n />\n </div>\n </div>\n <!-- Carousel controls -->\n <button\n class=\"carousel-control-prev\"\n type=\"button\"\n data-bs-target=\"#serpDataImagesCarousel\"\n data-bs-slide=\"prev\"\n >\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button\n class=\"carousel-control-next\"\n type=\"button\"\n data-bs-target=\"#serpDataImagesCarousel\"\n data-bs-slide=\"next\"\n >\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n </template>\n\n <!-- Reviews -->\n <div v-if=\"serpReviews && serpReviews.length\">\n <h6 class=\"mt-3\">Reviews</h6>\n <div\n v-for=\"(rev, rIdx) in serpReviews.slice(0, 5)\"\n :key=\"rIdx\"\n class=\"card mb-2\"\n >\n <div class=\"card-body p-2\">\n <div class=\"d-flex align-items-center\">\n <!-- Author & rating -->\n <strong>{{ rev.author_name }}</strong>\n <div class=\"ms-2\">\n <span\n v-for=\"n in rev.rating\"\n :key=\"`star-${rIdx}-${n}`\"\n class=\"text-warning\"\n >\n ★\n </span>\n </div>\n </div>\n <!-- Relative time description or actual date -->\n <div class=\"small text-muted\">\n {{ rev.relative_time_description }}\n </div>\n <!-- Review text -->\n <p class=\"mb-1 mt-1\">{{ rev.text }}</p>\n </div>\n </div>\n </div>\n\n </template>\n </div>\n </div>\n </div>\n <Loader v-if=\"showLoader\" />\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { poiDetailsToWaypointDescriptionHelper } from '../utils/helpers/PoiDetailsToWaypointDescriptionHelper';\nimport { OnBoardingGoal } from '../utils/models/OnBoardingGoal';\nimport { POIUtility } from '../utils/models/POI';\nimport graph_client from \"../utils/graphql/graph_client\";\nimport {GetPOIByID} from \"../utils/graphql/poi-graph\";\nimport Loader from \"../utils/shared_components/Loader.vue\";\n\nexport default defineComponent({\n components: {Loader},\n mounted() {\n const dialog = $('#poi-detail-dialog');\n\n // Bind the event\n dialog.on('hidden.bs.modal', this.onModalHidden);\n\n // Assign showPoi function to window\n window.showPoi = (poiType, poiId) => {\n this.poiId = poiId;\n this.poiType = poiType;\n this.getPOI();\n $('#poi-detail-dialog').modal('show');\n };\n },\n beforeUnmount() {\n // Unbind the event listener to prevent memory leaks\n $('#poi-detail-dialog').off('hidden.bs.modal', this.onModalHidden);\n\n // Clean up the global function\n window.showPoi = null;\n },\n data() {\n return {\n poi: null,\n poiId: null,\n poiType: null,\n serpData: null,\n showLoader: false,\n };\n },\n watch: {\n showPOIDetailDialog(val) {\n if (val) {\n $('#poi-detail-dialog').modal('show');\n } else {\n $('#poi-detail-dialog').modal('hide');\n }\n },\n poiType(val) {\n if (val && val !== 'Accommodation' && val !== 'Amenity') {\n throw new Error('Invalid POI type');\n }\n },\n },\n methods: {\n onModalHidden() {\n this.poi = null;\n this.poiId = null;\n this.poiType = null;\n this.serpData = null;\n },\n addToWaypoints() {\n if (window.user == null) {\n window.onBoardingVue.launchFor(OnBoardingGoal.Waypoints);\n return;\n }\n const type = POIUtility.fromString(this.type);\n this.$store.dispatch('waypoints/createWaypoint', {\n lngLat: this.lngLat,\n title: this.name,\n type: type.poi,\n description: poiDetailsToWaypointDescriptionHelper(this.poi),\n });\n $('#poi-detail-dialog').modal('hide');\n },\n getPOI() {\n if (this.poiId === null) {\n throw new Error('POI ID is null');\n }\n if (this.poiType === null) {\n throw new Error('POI type is null');\n }\n this.showLoader = true;\n graph_client.request(GetPOIByID, {\n type: this.poiType,\n id: this.poiId,\n })\n .then((data) => {\n this.poi = data.poi;\n if (data.poi.serpData) {\n // In your DB, you have the full JSON from Google including { \"result\": { ... } }\n this.serpData = JSON.parse(data.poi.serpData);\n }\n })\n .catch((error) => {\n console.error(error);\n }).finally(() => {\n this.showLoader = false;\n });\n },\n\n // If you'd like to generate a full Google Photo URL (assuming you have an API key):\n getPhotoUrl(photo) {\n // You can adapt maxwidth, etc. as needed.\n const apiKey = 'AIzaSyCu3xfWAxpEvS75rIrD2L8rjP_vlWM2W74';\n return `https://maps.googleapis.com/maps/api/place/photo?maxwidth=1000&photoreference=${photo.photo_reference}&key=${apiKey}`;\n },\n },\n computed: {\n // Basic POI fields from your own DB object\n type() {\n return this.poi ? this.poi.type : \"\";\n },\n id() {\n return this.poi ? this.poi.id : \"\";\n },\n name() {\n return this.poi ? this.poi.name : \"\";\n },\n phoneNumber() {\n // You might store phone in your DB. Or fallback to serpData if you prefer.\n return this.poi ? this.poi.international_phone_number : \"\";\n },\n website() {\n if (!this.poi || !this.poi.website) return \"\";\n if (this.poi.website === 'http://' || this.poi.website === 'https://') return \"\";\n return this.poi.website;\n },\n email() {\n return this.poi ? this.poi.email : \"\";\n },\n description() {\n return this.poi ? this.poi.description : \"\";\n },\n coords() {\n if (!this.poi) return '';\n const lon = this.poi.lonlat[0];\n const lat = this.poi.lonlat[1];\n return `${lat.toFixed(5)}, ${lon.toFixed(5)}`;\n },\n lngLat() {\n if (!this.poi) throw new Error('POI is null');\n const lng = this.poi.lonlat[0];\n const lat = this.poi.lonlat[1];\n return { lng, lat };\n },\n coordsLink() {\n if (!this.poi) return '#';\n const lon = this.poi.lonlat[0];\n const lat = this.poi.lonlat[1];\n return `/map?lng=${lon.toFixed(5)}&lat=${lat.toFixed(5)}`;\n },\n\n // Now let's map the new serpData.result fields to convenient properties\n serpResult() {\n // If serpData is present, we'll use serpData.result\n return this.serpData && this.serpData.result ? this.serpData.result : null;\n },\n serpName() {\n return this.serpResult ? this.serpResult.name : \"\";\n },\n serpRating() {\n return this.serpResult ? (this.serpResult.rating || 0) : 0;\n },\n serpTotalRatings() {\n return this.serpResult ? (this.serpResult.user_ratings_total || 0) : 0;\n },\n serpPhone() {\n // There's \"international_phone_number\" or \"formatted_phone_number\"\n return this.serpResult\n ? (this.serpResult.international_phone_number || this.serpResult.formatted_phone_number || \"\")\n : \"\";\n },\n serpWebsite() {\n return this.serpResult ? (this.serpResult.website || \"\") : \"\";\n },\n serpAddress() {\n // There's \"formatted_address\" or \"vicinity\", whichever you prefer\n return this.serpResult ? (this.serpResult.formatted_address || \"\") : \"\";\n },\n serpPhotos() {\n // photos array is found in serpData.result.photos\n return this.serpResult && this.serpResult.photos\n ? this.serpResult.photos\n : [];\n },\n serpReviews() {\n // reviews array is found in serpData.result.reviews\n return this.serpResult && this.serpResult.reviews\n ? this.serpResult.reviews\n : [];\n }\n },\n});\n</script>\n\n<style scoped>\n/* Add any custom styling if you want to refine the look */\n</style>\n","import { render, staticRenderFns } from \"./MapDataPOIDetailDialog.vue?vue&type=template&id=a5f226f4&scoped=true&\"\nimport script from \"./MapDataPOIDetailDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./MapDataPOIDetailDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MapDataPOIDetailDialog.vue?vue&type=style&index=0&id=a5f226f4&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 \"a5f226f4\",\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:\"options-list mt-3\"},_vm._l((_vm.trailOptions),function(label,source){return _c('div',{key:source,staticClass:\"option-item\"},[_c('input',{staticStyle:{\"display\":\"none\"},attrs:{\"type\":\"checkbox\",\"id\":`toggle-${source}`},domProps:{\"checked\":_vm.isSourceActive(source)},on:{\"change\":function($event){return _vm.toggleTrail(source)}}}),_vm._v(\" \"),_c('label',{staticClass:\"custom-checkbox d-flex justify-content-between\",attrs:{\"role\":\"switch\",\"aria-checked\":_vm.isSourceActive(source),\"for\":`toggle-${source}`}},[_c('span',{staticClass:\"label-text\"},[_vm._v(_vm._s(label))]),_vm._v(\" \"),_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"42\",\"height\":\"21\",\"viewBox\":\"0 0 42 21\",\"fill\":\"none\"}},[_c('rect',{attrs:{\"width\":\"42\",\"height\":\"21\",\"rx\":\"10.5\",\"fill\":_vm.sourceColor(source)}}),_vm._v(\" \"),_c('circle',{staticClass:\"switch-circle\",class:{ 'switch-circle-active': _vm.isSourceActive(source) },attrs:{\"cx\":\"11.5\",\"cy\":\"10.5\",\"r\":\"8.5\",\"fill\":\"white\"}})])]),_vm._v(\" \"),_c('hr')])}),0)])\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!./MapDataTrailsTab.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!./MapDataTrailsTab.vue?vue&type=script&lang=js&\"","<template>\n <div>\n <div class=\"options-list mt-3\">\n <div\n class=\"option-item\"\n v-for=\"(label, source) in trailOptions\"\n :key=\"source\"\n >\n <!-- Hidden checkbox for accessibility -->\n <input\n type=\"checkbox\"\n :id=\"`toggle-${source}`\"\n :checked=\"isSourceActive(source)\"\n @change=\"toggleTrail(source)\"\n style=\"display: none\"\n />\n\n <!-- Label that now includes the SVG toggle -->\n <label\n class=\"custom-checkbox d-flex justify-content-between\"\n role=\"switch\"\n :aria-checked=\"isSourceActive(source)\"\n :for=\"`toggle-${source}`\"\n >\n <span class=\"label-text\">{{ label }}</span>\n <!-- SVG toggle switch element -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"21\" viewBox=\"0 0 42 21\" fill=\"none\">\n <rect\n width=\"42\"\n height=\"21\"\n rx=\"10.5\"\n :fill=\"sourceColor(source)\"\n />\n <circle\n class=\"switch-circle\"\n :class=\"{ 'switch-circle-active': isSourceActive(source) }\"\n cx=\"11.5\"\n cy=\"10.5\"\n r=\"8.5\"\n fill=\"white\"\n />\n </svg>\n </label>\n <hr>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters, mapActions } from 'vuex';\n\nexport default {\n name: 'TrailOptions',\n computed: {\n ...mapState('mapDataTrails', ['trailOptions', 'sourceColors']),\n ...mapGetters('mapDataTrails', ['isSourceActive']),\n },\n methods: {\n ...mapActions('mapDataTrails', ['toggleTrail', 'viewCreated', 'beforeViewDestroyed']),\n // Returns the proper color based on the active state\n sourceColor(source) {\n return this.isSourceActive(source)\n ? this.sourceColors[source]\n : '#CCC';\n },\n },\n beforeDestroy() {\n this.beforeViewDestroyed();\n },\n created() {\n this.viewCreated();\n },\n};\n</script>\n\n<style scoped>\n.options-list {\n padding: 0;\n margin: 0;\n}\n\n.option-item {\n padding: 10px 0;\n}\n\n.custom-checkbox {\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n/* Hide the native checkbox but keep it accessible */\n.custom-checkbox input {\n display: none;\n}\n\n/* Text label styling */\n.label-text {\n font-size: 1em;\n font-weight: 500;\n}\n\n/* Circle transition styling for the SVG toggle */\n.switch-circle {\n transition: transform 0.3s ease;\n}\n\n.switch-circle-active {\n /* Shift the circle to represent an active state */\n transform: translateX(19px);\n}\n</style>\n","import { render, staticRenderFns } from \"./MapDataTrailsTab.vue?vue&type=template&id=5b6e616f&scoped=true&\"\nimport script from \"./MapDataTrailsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MapDataTrailsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MapDataTrailsTab.vue?vue&type=style&index=0&id=5b6e616f&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 \"5b6e616f\",\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\",attrs:{\"id\":\"poi-detail-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-header\",style:(`backgroundColor: ${this.color}`)},[_c('h3',{staticClass:\"text-dark m-0\"},[_c('strong',[_vm._v(_vm._s(_vm.name != null && _vm.name != \"\" ? _vm.name : _vm.type))])])]),_vm._v(\" \"),_c('div',{staticClass:\"p-3 modal-body\"},[_c('p',[_c('strong',[_vm._v(\"Type:\")]),_vm._v(\" \"+_vm._s(_vm.type))]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),(_vm.description)?[_c('p',[_c('strong',[_vm._v(\"Description:\")]),_vm._v(\" \"+_vm._s(_vm.description))]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})]:_vm._e(),_vm._v(\" \"),(_vm.coords)?[_c('p',[_c('strong',[_vm._v(\"Location:\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":_vm.coordsLink,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.coords))])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})]:_vm._e(),_vm._v(\" \"),(_vm.id)?[_c('p',[_c('strong',[_vm._v(\"ID:\")]),_vm._v(\" \"+_vm._s(_vm.id))]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})]:_vm._e(),_vm._v(\" \"),(_vm.phoneNumber)?[_c('p',[_c('strong',[_vm._v(\"Phone Number:\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":`tel:${_vm.phoneNumber}`,\"target\":\"_blank\"}},[_c('u',[_vm._v(_vm._s(_vm.phoneNumber))])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})]:_vm._e(),_vm._v(\" \"),(_vm.website)?[_c('p',[_c('strong',[_vm._v(\"Website:\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":_vm.website,\"target\":\"_blank\"}},[_c('u',[_vm._v(_vm._s(_vm.website))])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})]:_vm._e(),_vm._v(\" \"),(_vm.email)?[_c('p',[_c('strong',[_vm._v(\"Email:\")]),_vm._v(\" \"+_vm._s(_vm.email))])]:_vm._e(),_vm._v(\" \"),_c('p',{},[_c('button',{staticClass:\"btn btn-block btn-secondary\",on:{\"click\":_vm.addToWaypoints}},[_vm._v(\"\\n ADD TO WAYPOINTS\\n \")])]),_vm._v(\" \"),_vm._m(0)],2)])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"button btn-link btn-block btn-sm text-muted\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_c('strong',[_vm._v(\"CLOSE\")])])\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!./POIDetailDialog.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!./POIDetailDialog.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"modal fade\" id=\"poi-detail-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\" :style=\"`backgroundColor: ${this.color}`\">\n <h3 class=\"text-dark m-0\"><strong>{{ name != null && name != \"\" ? name : type }}</strong></h3>\n </div>\n <div class=\"p-3 modal-body\">\n <p><strong>Type:</strong> {{ type }}</p>\n <hr class=\"my-2\"/>\n <template v-if=\"description\">\n <p><strong>Description:</strong> {{ description }}</p>\n <hr class=\"my-2\"/>\n </template>\n <template v-if=\"coords\">\n <p><strong>Location:</strong> <a :href=\"coordsLink\" target=\"_blank\">{{ coords }}</a></p>\n <hr class=\"my-2\"/>\n </template>\n <template v-if=\"id\">\n <p><strong>ID:</strong> {{ id }}</p>\n <hr class=\"my-2\"/>\n </template>\n <template v-if=\"phoneNumber\">\n <p><strong>Phone Number:</strong> <a :href=\"`tel:${phoneNumber}`\" target=\"_blank\"><u>{{ phoneNumber }}</u></a></p>\n <hr class=\"my-2\">\n </template>\n <template v-if=\"website\">\n <p><strong>Website:</strong> <a :href=\"website\" target=\"_blank\"><u>{{ website }}</u></a></p>\n <hr class=\"my-2\"/>\n </template>\n <template v-if=\"email\">\n <p><strong>Email:</strong> {{ email }}</p>\n </template>\n <p class=\"\">\n <button class=\"btn btn-block btn-secondary\" @click=\"addToWaypoints\">\n ADD TO WAYPOINTS\n </button>\n </p>\n <button class=\"button btn-link btn-block btn-sm text-muted\" data-bs-dismiss=\"modal\">\n <strong>CLOSE</strong>\n </button>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { poiDetailsToWaypointDescriptionHelper } from '../utils/helpers/PoiDetailsToWaypointDescriptionHelper';\nimport { POIUtility } from '../utils/models/POI';\nimport {OnBoardingGoal} from \"../utils/models/OnBoardingGoal\";\n\nexport default defineComponent({\n mounted() {\n const dialog = $('#poi-detail-dialog');\n dialog.modal('show');\n const self = this;\n dialog.on('hidden.bs.modal', () => {\n self.$store.commit('poi/clearSelectedPOI');\n });\n },\n watch: {\n showPOIDetailDialog(val) {\n if (val) {\n $('#poi-detail-dialog').modal('show');\n } else {\n $('#poi-detail-dialog').modal('hide');\n }\n },\n },\n methods: {\n addToWaypoints() {\n if (window.user == null) {\n window.onBoardingVue.launchFor(OnBoardingGoal.Waypoints);\n return;\n }\n const type = POIUtility.fromString(this.type);\n this.$store.dispatch(\n 'waypoints/createWaypoint', {\n lngLat: this.lngLat,\n title: this.name,\n type: type.poi,\n description: poiDetailsToWaypointDescriptionHelper(this.poi),\n },\n );\n $('#poi-detail-dialog').modal('hide');\n },\n },\n computed: {\n type() {\n return this.poi.properties.type;\n },\n poi() {\n return this.$store.state.poi.selectedPOI;\n },\n id() {\n return this.poi.properties.id;\n },\n name() {\n return this.poi.properties.name;\n },\n phoneNumber() {\n return this.poi.properties.international_phone_number;\n },\n website() {\n if (this.poi.properties.website === \"http://\" || this.poi.properties.website === \"https://\") return null;\n return this.poi.properties.website;\n },\n email() {\n return this.poi.properties.email;\n },\n description() {\n return this.poi.properties.description;\n },\n photoUrls() {\n return this.poi.properties.photos_urls;\n },\n coords() {\n const lon = this.poi.geometry.coordinates[0];\n const lat = this.poi.geometry.coordinates[1];\n return `${lat.toFixed(5)}, ${lon.toFixed(5)}`;\n },\n lngLat() {\n const lng = this.poi.geometry.coordinates[0];\n const lat = this.poi.geometry.coordinates[1];\n return { lng, lat };\n },\n coordsLink() {\n const lon = this.poi.geometry.coordinates[0];\n const lat = this.poi.geometry.coordinates[1];\n return `http://localhost:3000/map?lng=${lon.toFixed(5)}&lat=${lat.toFixed(5)}`;\n },\n color() {\n return POIUtility.fromString(this.type).getColor();\n },\n },\n});\n</script>\n","import { render, staticRenderFns } from \"./POIDetailDialog.vue?vue&type=template&id=0db946ba&\"\nimport script from \"./POIDetailDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./POIDetailDialog.vue?vue&type=script&lang=js&\"\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,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal fade\",staticStyle:{\"background-color\":\"rgba(7,7,7,0.36)\"},attrs:{\"id\":\"poi-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-3\"},[(this.$store.state.poi.showAccoms)?[_vm._m(0),_vm._v(\" \"),_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Show campgrounds, hostels, and more along the trail.\")]),_vm._v(\" \"),(this.accomPois.length === 0)?[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"No accommodation locations available for this trail.\")])]:_vm._l((_vm.accomPois),function(poi){return _c('div',{key:poi.poi,staticClass:\"card p-0 mb-2\"},[(_vm.activePOIs.find(p => p.poi === poi.poi) != null)?[_c('label',{staticClass:\"card-body d-flex align-items-center justify-content-between py-2 m-0 active\",on:{\"click\":function($event){return _vm.checked(poi)}}},[_c('span',{staticClass:\"d-flex align-items-center\"},[_c('img',{attrs:{\"width\":\"28\",\"src\":poi.getPublicImageIcon()}}),_vm._v(\" \"),_c('span',{staticClass:\"m-0 ml-2\",attrs:{\"for\":\"toggle\"}},[_vm._v(_vm._s(poi.prettyName()))])]),_vm._v(\" \"),_c('span',{staticClass:\"material-icons checkit\"},[_vm._v(\"check_circle\")])])]:[_c('label',{staticClass:\"card-body d-flex align-items-center justify-content-between py-2 m-0\",on:{\"click\":function($event){return _vm.checked(poi)}}},[_c('span',{staticClass:\"d-flex align-items-center\"},[_c('img',{attrs:{\"width\":\"28\",\"src\":poi.getPublicImageIcon()}}),_vm._v(\" \"),_c('span',{staticClass:\"m-0 ml-2\",attrs:{\"for\":\"toggle\"}},[_vm._v(_vm._s(poi.prettyName()))])]),_vm._v(\" \"),_c('span',{staticClass:\"material-icons checkit\"},[_vm._v(\"check_circle\")])])]],2)}),_vm._v(\" \"),_vm._m(1)]:[_vm._m(2),_vm._v(\" \"),_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Show water points, history, food/coffee spots, and more along the trail.\")]),_vm._v(\" \"),(this.amenityPois.length === 0)?[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"No amenity locations available for this trail.\")])]:_vm._l((_vm.amenityPois),function(poi){return _c('div',{key:poi.poi,staticClass:\"card p-0 mb-2\"},[(_vm.activePOIs.find(p => p.poi === poi.poi) != null)?[_c('label',{staticClass:\"card-body d-flex align-items-center justify-content-between py-2 m-0 active\",on:{\"click\":function($event){return _vm.checked(poi)}}},[_c('span',{staticClass:\"d-flex align-items-center\"},[_c('img',{attrs:{\"width\":\"28\",\"src\":poi.getPublicImageIcon()}}),_vm._v(\" \"),_c('span',{staticClass:\"m-0 ml-2\",attrs:{\"for\":\"toggle\"}},[_vm._v(_vm._s(poi.prettyName()))])]),_vm._v(\" \"),_c('span',{staticClass:\"material-icons checkit\"},[_vm._v(\"check_circle\")])])]:[_c('label',{staticClass:\"card-body d-flex align-items-center justify-content-between py-2 m-0\",on:{\"click\":function($event){return _vm.checked(poi)}}},[_c('span',{staticClass:\"d-flex align-items-center\"},[_c('img',{attrs:{\"width\":\"28\",\"src\":poi.getPublicImageIcon()}}),_vm._v(\" \"),_c('span',{staticClass:\"m-0 ml-2\",attrs:{\"for\":\"toggle\"}},[_vm._v(_vm._s(poi.prettyName()))])]),_vm._v(\" \"),_c('span',{staticClass:\"material-icons checkit\"},[_vm._v(\"check_circle\")])])]],2)}),_vm._v(\" \"),_vm._m(3)]],2)])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('h3',[_c('strong',[_vm._v(\"Accommodation locations\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"button btn-link btn-block btn-sm text-muted\",attrs:{\"data-bs-dismiss\":\"modal\"}},[_c('strong',[_vm._v(\"CLOSE\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('h3',[_c('strong',[_vm._v(\"Amenity locations\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('button',{staticClass:\"button btn-link btn-block btn-sm text-muted\",attrs:{\"data-bs-dismiss\":\"modal\",\"aria-label\":\"Close\"}},[_c('strong',[_vm._v(\"CLOSE\")])])\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!./POIDialog.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!./POIDialog.vue?vue&type=script&lang=ts&\"","<template>\n <div class=\"modal fade\" style=\"background-color: rgba(7,7,7,0.36);\" id=\"poi-dialog\" tabindex=\"-1\" role=\"dialog\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-body p-3\">\n <template v-if=\"this.$store.state.poi.showAccoms\">\n <h3><strong>Accommodation locations</strong></h3>\n <p class=\"mb-3\">Show campgrounds, hostels, and more along the trail.</p>\n <template v-if=\"this.accomPois.length === 0\">\n <p class=\"mb-3\">No accommodation locations available for this trail.</p>\n </template>\n <template v-else>\n <div class=\"card p-0 mb-2\" v-for=\"poi in accomPois\" :key=\"poi.poi\">\n <template v-if=\"activePOIs.find(p => p.poi === poi.poi) != null\">\n <label class=\"card-body d-flex align-items-center justify-content-between py-2 m-0 active\" @click=\"checked(poi)\">\n <span class=\"d-flex align-items-center\">\n <img width=\"28\" :src=\"poi.getPublicImageIcon()\"/>\n <span class=\"m-0 ml-2\" for=\"toggle\">{{ poi.prettyName() }}</span>\n </span>\n<!-- <input type=\"checkbox\" id=\"toggle\" class=\"visually-hidden\" @click.prevent>-->\n <span class=\"material-icons checkit\">check_circle</span>\n <!-- <input type=\"checkbox\" /> -->\n </label>\n </template>\n <template v-else>\n <label class=\"card-body d-flex align-items-center justify-content-between py-2 m-0\" @click=\"checked(poi)\">\n <span class=\"d-flex align-items-center\">\n <img width=\"28\" :src=\"poi.getPublicImageIcon()\"/>\n <span class=\"m-0 ml-2\" for=\"toggle\">{{ poi.prettyName() }}</span>\n </span>\n<!-- <input type=\"checkbox\" id=\"toggle\" class=\"visually-hidden\" @click.prevent>-->\n <span class=\"material-icons checkit\">check_circle</span>\n <!-- <input type=\"checkbox\" /> -->\n </label>\n </template>\n </div>\n </template>\n <button class=\"button btn-link btn-block btn-sm text-muted\" data-bs-dismiss=\"modal\">\n <strong>CLOSE</strong>\n </button>\n </template>\n <template v-else>\n <h3><strong>Amenity locations</strong></h3>\n <p class=\"mb-3\">Show water points, history, food/coffee spots, and more along the trail.</p>\n <template v-if=\"this.amenityPois.length === 0\">\n <p class=\"mb-3\">No amenity locations available for this trail.</p>\n </template>\n <template v-else>\n <div class=\"card p-0 mb-2\" v-for=\"poi in amenityPois\" :key=\"poi.poi\">\n <template v-if=\"activePOIs.find(p => p.poi === poi.poi) != null\">\n <label class=\"card-body d-flex align-items-center justify-content-between py-2 m-0 active\" @click=\"checked(poi)\">\n <span class=\"d-flex align-items-center\">\n <img width=\"28\" :src=\"poi.getPublicImageIcon()\"/>\n <span class=\"m-0 ml-2\" for=\"toggle\">{{ poi.prettyName() }}</span>\n </span>\n <span class=\"material-icons checkit\">check_circle</span>\n </label>\n </template>\n <template v-else>\n <label class=\"card-body d-flex align-items-center justify-content-between py-2 m-0\" @click=\"checked(poi)\">\n <span class=\"d-flex align-items-center\">\n <img width=\"28\" :src=\"poi.getPublicImageIcon()\"/>\n <span class=\"m-0 ml-2\" for=\"toggle\">{{ poi.prettyName() }}</span>\n </span>\n <span class=\"material-icons checkit\">check_circle</span>\n </label>\n </template>\n </div>\n </template>\n <button class=\"button btn-link btn-block btn-sm text-muted\" data-bs-dismiss=\"modal\" aria-label=\"Close\">\n <strong>CLOSE</strong>\n </button>\n </template>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {defineComponent} from 'vue';\n// eslint-disable-next-line import/extensions,import/no-unresolved\nimport {POIUtility} from '../utils/models/POI';\n\nexport default defineComponent({\n data() {\n return {\n\n };\n },\n computed: {\n accomPois(): POIUtility[] {\n return this.$store.state.poi.accomPois;\n },\n amenityPois(): POIUtility[] {\n return this.$store.state.poi.amenityPois;\n },\n activePOIs(): POIUtility[] {\n return this.$store.state.poi.activePOIs;\n },\n },\n watch: {\n showPOIDialog(val) {\n if (val) {\n $('#poi-dialog').modal('show');\n } else {\n $('#poi-dialog').modal('hide');\n }\n },\n },\n methods: {\n async checked(poi: POIUtility) {\n if (this.activePOIs.find(p => p.layerName === poi.layerName) != null) {\n await this.$store.dispatch('poi/removePOIFromMap', poi)\n } else {\n await this.$store.dispatch('poi/addPOIToMap', poi)\n }\n }\n },\n});\n</script>\n\n<style scoped>\n.modal-dialog {\n overflow-y: initial !important\n}\n\n.modal-body {\n max-height: 70vh;\n overflow-y: auto;\n}\n\nlabel {\n font-size: 1.2em;\n font-weight: 600;\n}\n\n.card {\n background-color: transparent;\n}\n\n.checkit {\n color: #5F5F5F;\n}\n\n.card-body.active .checkit {\n color: #FFC107;\n}\n\n.card-body.active {\n background-color: #2c2c2c;\n transition: all .3s ease-in-out;\n}\n\n\n.visually-hidden {\n position: absolute;\n left: -100vw;\n\n /* Note, you may want to position the checkbox over top the label and set the opacity to zero instead. It can be better for accessibilty on some touch devices for discoverability. */\n}\n</style>\n","import { render, staticRenderFns } from \"./POIDialog.vue?vue&type=template&id=51ebc890&scoped=true&\"\nimport script from \"./POIDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./POIDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./POIDialog.vue?vue&type=style&index=0&id=51ebc890&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 \"51ebc890\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _vm._m(0)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"loader-container\"},[_c('div',{staticClass:\"loader\"})])\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!./Loader.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!./Loader.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"loader-container\">\n <div class=\"loader\"></div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'Loader'\n}\n</script>\n\n<style scoped>\n.loader-container {\n background: rgba(0,0,0,0.3); /* Semi-transparent black background */\n padding: 1em;\n position: absolute;\n top: 50%;\n left: 50%;\n /* Center the container using transform */\n transform: translate(-50%, -50%);\n z-index: 9999; /* Ensure it appears above other elements like the map */\n border-radius: 10px;\n}\n\n.loader {\n border: 3px solid var(--gray); /* Light gray border */\n border-top: 3px solid var(--yellow); /* Blue border for the spinning effect */\n border-radius: 50%;\n width: 30px; /* Smaller width */\n height: 30px; /* Smaller height */\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n</style>\n","import { render, staticRenderFns } from \"./Loader.vue?vue&type=template&id=8d47c346&scoped=true&\"\nimport script from \"./Loader.vue?vue&type=script&lang=js&\"\nexport * from \"./Loader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Loader.vue?vue&type=style&index=0&id=8d47c346&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 \"8d47c346\",\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 (_vm.enabled)?_c('div',{staticClass:\"add-mode\"},[_vm._m(0),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-link d-flex align-items-center float-right\",on:{\"click\":_vm.disableAddingWaypointsMode}},[_vm._v(\"EXIT \"),_c('span',{staticClass:\"material-icons ml-2\"},[_vm._v(\"close\")])])]):_vm._e()\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"text-yellow d-flex align-items-center\"},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"info\")]),_vm._v(\" \"),_c('strong',[_vm._v(\"Add waypoint\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('small',[_vm._v(\"Select where you wish to add the new waypoint\")])])\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!./WaypointAddingNotification.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!./WaypointAddingNotification.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"add-mode\" v-if=\"enabled\">\n <p class=\"text-yellow d-flex align-items-center\"><span class=\"material-icons mr-2\">info</span> <strong>Add waypoint</strong></p>\n <p><small>Select where you wish to add the new waypoint</small></p>\n <button class=\"btn btn-link d-flex align-items-center float-right\" @click=\"disableAddingWaypointsMode\">EXIT <span class=\"material-icons ml-2\">close</span></button>\n </div>\n</template>\n\n<script>\n\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n props: {\n enabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n mounted() {\n\n },\n methods: {\n disableAddingWaypointsMode() {\n this.$store.commit('waypoints/toggleWaypointAddingNotification');\n },\n },\n});\n\n</script>\n\n<style scoped>\n .add-mode{\n padding: 1.5em;\n top: 75px;\n left: 1em;\n position: absolute;\n background-color: rgba(0, 0, 0, 0.80);;\n z-index: 101;\n border-radius: 10px;\n }\n</style>\n","import { render, staticRenderFns } from \"./WaypointAddingNotification.vue?vue&type=template&id=296eb9cc&scoped=true&\"\nimport script from \"./WaypointAddingNotification.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointAddingNotification.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WaypointAddingNotification.vue?vue&type=style&index=0&id=296eb9cc&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 \"296eb9cc\",\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\",attrs:{\"id\":\"waypoint-options-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\"},[(_vm.topPageIsWaypointOptions)?[_c('WaypointDialogOptions')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypointGroups)?[_c('WaypointDialogWaypointGroups')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypointGroupsWaypoints)?[_c('WaypointDialogWaypointGroupWaypoints')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypointViewDetails)?[_c('WaypointDialogViewWaypointDetails')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypointEditDetails)?[_c('WaypointDialogEditWaypointDetails')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypoints)?[_c('WaypointDialogWaypoints')]:_vm._e(),_vm._v(\" \"),(_vm.topPageIsWaypointGroupSelection)?[_c('WaypointDialogWaypointGroupSelection')]:_vm._e(),_vm._v(\" \"),_vm._m(0)],2)])]),_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('button',{staticClass:\"button btn-link btn-block btn-sm text-muted mt-3\",attrs:{\"data-bs-dismiss\":\"modal\",\"aria-label\":\"Close\"}},[_c('strong',[_vm._v(\"CLOSE\")])])\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!./WaypointDialogEditWaypointDetails.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!./WaypointDialogEditWaypointDetails.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n <button @click=\"backClicked\" class=\"btn btn-grey-light d-flex align-items-center p-0 pb-3\"><span class=\"material-icons mr-2\">arrow_left</span> Back</button>\n\n <div class=\"form-group\">\n\n <p><label for=\"\" class=\"\"><small><strong>Waypoint type</strong></small></label></p>\n <div class=\"input-group mb-3 text-muted\">\n <select class=\"custom-select text-muted w-100\" id=\"waypointType\" v-model=\"selectedWaypoint.type\">\n <option v-for=\"waypointType in allWaypointTypes\" :key=\"waypointType.poi\" :value=\"waypointType.poi\">\n {{ waypointType.prettyName() }}\n </option>\n </select>\n </div>\n <hr class=\"my-3\">\n\n <p><label for=\"plannedTrailName\" class=\"\"><small><strong>Name</strong></small></label></p>\n <input type=\"text\" v-model=\"title\" class=\"form-control mb-3\" id=\"plannedTrailName\"\n placeholder=\"Enter name\">\n\n <hr class=\"my-3\">\n\n <p><label for=\"plannedTrailDesc\"><small><strong>Description</strong></small></label></p>\n <textarea class=\"form-control mb-3\" id=\"plannedTrailDesc\" v-model=\"description\" placeholder=\"Some details about the waypoint\"></textarea>\n\n <hr class=\"my-3\">\n\n <p><label for=\"plannedTrailImg\" class=\"form-label\"><small><strong>Add images</strong></small></label></p>\n <form class=\"custom-file\">\n <button class=\"btn btn-secondary w-100\" @click=\"triggerFileInput($event)\">Choose Files</button>\n <input\n multiple=\"multiple\" ref=\"fileInput\" accept=\".jpg, .jpeg, .png\" id=\"plannedTrailImg\"\n type=\"file\" class=\"custom-file-upload w-100\" style=\"display: none;\" @change=\"handleFileInputChange\"\n />\n <div class=\"thumbnails mt-2 mb-2\">\n <div v-for=\"(previewObj, index) in previewUrls\" :key=\"index\" class=\"thumbnail square\">\n <img :src=\"previewObj.file.url\" :alt=\"`image-${index}`\" class=\"thumbnail-image\" />\n <button @click=\"removeImage($event, previewObj)\" class=\"delete-button btn-secondary\">x</button>\n </div>\n </div>\n </form>\n\n <hr class=\"my-3\">\n\n <p><label for=\"plannedTrailImg\" class=\"form-label\"><small><strong>Group</strong></small></label></p>\n <form class=\"custom-file\">\n <button class=\"btn btn-secondary w-100\" @click=\"chooseGroupClicked($event)\">Choose Group</button>\n </form>\n <hr class=\"my-3\">\n\n\n <p><label for=\"\" class=\"\"><small><strong>Who can view</strong></small></label></p>\n <div class=\"input-group mb-3 text-muted\">\n <select class=\"custom-select text-muted w-100\" id=\"plannedTrailPrivacy\" @change=\"privacyChanged\">\n <template v-if=\"selectedWaypoint.public\">\n <option value=\"1\" selected>Everyone can view</option>\n <option value=\"2\">Only I can view</option>\n </template>\n <template v-else>\n <option value=\"1\">Everyone can view</option>\n <option value=\"2\" selected>Only I can view</option>\n </template>\n </select>\n </div>\n\n <hr class=\"my-3\">\n\n <div class=\"d-flex\">\n <button class=\"btn btn-secondary flex-fill mr-2 mt-3\" data-bs-dismiss=\"modal\" @click=\"cancel\">CANCEL\n </button>\n <button class=\"btn btn-primary flex-fill mt-3\" @click=\"save\">SAVE</button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { mapState } from 'vuex';\n// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { POIUtility } from '../../utils/models/POI';\nimport {WaypointOptionsDialogPages} from \"../../utils/models/WaypointOptionsDialogPages\";\n\nexport default defineComponent({\n data() {\n return {\n allWaypointTypes: [],\n };\n },\n mounted() {\n this.allWaypointTypes = POIUtility.allPOIUtils();\n },\n computed: Object.assign(mapState({\n selectedWaypoint: (state) => state.waypoints.selectedWaypoint,\n }), {\n title: {\n get() {\n return this.selectedWaypoint.title;\n },\n set(newValue) {\n this.$store.commit('waypoints/setSelectedWaypointTitle', newValue);\n },\n },\n description: {\n get() {\n return this.selectedWaypoint.description;\n },\n set(newValue) {\n this.$store.commit('waypoints/setSelectedWaypointDescription', newValue); // Example of using Vuex to set a value.\n },\n },\n previewUrls() {\n return this.selectedWaypoint.waypointPhotos;\n },\n }),\n methods: {\n backClicked() {\n this.$store.commit('waypoints/popPage');\n },\n privacyChanged() {\n this.selectedWaypoint.public = !this.selectedWaypoint.public;\n },\n save() {\n this.$store.dispatch('waypoints/saveSelectedWaypoint');\n },\n cancel() {\n $('#waypoint-options-dialog').modal('hide');\n },\n triggerFileInput(event) {\n event.preventDefault();\n this.$refs.fileInput.click(); // Trigger the click event on the file input\n },\n removeImage(event, image) {\n event.preventDefault();\n this.$store.dispatch('waypoints/provisionallyRemoveWaypointImage', image);\n },\n async handleFileInputChange(event) {\n const { files } = event.target;\n if (files.length > 0) {\n this.$store.dispatch('waypoints/uploadWaypointImages', files);\n }\n },\n chooseGroupClicked(event) {\n event.preventDefault();\n this.$store.commit('waypoints/setTopPage', WaypointOptionsDialogPages.WaypointGroupSelection);\n },\n },\n});\n</script>\n\n<style scoped>\n.thumbnails .thumbnail{\n max-width: 70px;\n display: inline-flex;\n margin-right: 10px;\n position: relative;\n}\n\n.thumbnail .delete-button{\n position: absolute;\n top: 0;\n right: 0;\n padding: 0 !important;\n height: 20px;\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #DB2B35;\n}\n</style>\n","import { render, staticRenderFns } from \"./WaypointDialogEditWaypointDetails.vue?vue&type=template&id=94347982&scoped=true&\"\nimport script from \"./WaypointDialogEditWaypointDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogEditWaypointDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WaypointDialogEditWaypointDetails.vue?vue&type=style&index=0&id=94347982&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 \"94347982\",\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:\"mt-3\"},[_c('button',{staticClass:\"btn btn-grey-light d-flex align-items-center p-0 pb-3\",on:{\"click\":_vm.backClicked}},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"arrow_left\")]),_vm._v(\" Back\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-group\"},[_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"input-group mb-3 text-muted\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.selectedWaypoint.type),expression:\"selectedWaypoint.type\"}],staticClass:\"custom-select text-muted w-100\",attrs:{\"id\":\"waypointType\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.selectedWaypoint, \"type\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},_vm._l((_vm.allWaypointTypes),function(waypointType){return _c('option',{key:waypointType.poi,domProps:{\"value\":waypointType.poi}},[_vm._v(\"\\n \"+_vm._s(waypointType.prettyName())+\"\\n \")])}),0)]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.title),expression:\"title\"}],staticClass:\"form-control mb-3\",attrs:{\"type\":\"text\",\"id\":\"plannedTrailName\",\"placeholder\":\"Enter name\"},domProps:{\"value\":(_vm.title)},on:{\"input\":function($event){if($event.target.composing)return;_vm.title=$event.target.value}}}),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(2),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.description),expression:\"description\"}],staticClass:\"form-control mb-3\",attrs:{\"id\":\"plannedTrailDesc\",\"placeholder\":\"Some details about the waypoint\"},domProps:{\"value\":(_vm.description)},on:{\"input\":function($event){if($event.target.composing)return;_vm.description=$event.target.value}}}),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(3),_vm._v(\" \"),_c('form',{staticClass:\"custom-file\"},[_c('button',{staticClass:\"btn btn-secondary w-100\",on:{\"click\":function($event){return _vm.triggerFileInput($event)}}},[_vm._v(\"Choose Files\")]),_vm._v(\" \"),_c('input',{ref:\"fileInput\",staticClass:\"custom-file-upload w-100\",staticStyle:{\"display\":\"none\"},attrs:{\"multiple\":\"multiple\",\"accept\":\".jpg, .jpeg, .png\",\"id\":\"plannedTrailImg\",\"type\":\"file\"},on:{\"change\":_vm.handleFileInputChange}}),_vm._v(\" \"),_c('div',{staticClass:\"thumbnails mt-2 mb-2\"},_vm._l((_vm.previewUrls),function(previewObj,index){return _c('div',{key:index,staticClass:\"thumbnail square\"},[_c('img',{staticClass:\"thumbnail-image\",attrs:{\"src\":previewObj.file.url,\"alt\":`image-${index}`}}),_vm._v(\" \"),_c('button',{staticClass:\"delete-button btn-secondary\",on:{\"click\":function($event){return _vm.removeImage($event, previewObj)}}},[_vm._v(\"x\")])])}),0)]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(4),_vm._v(\" \"),_c('form',{staticClass:\"custom-file\"},[_c('button',{staticClass:\"btn btn-secondary w-100\",on:{\"click\":function($event){return _vm.chooseGroupClicked($event)}}},[_vm._v(\"Choose Group\")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_vm._m(5),_vm._v(\" \"),_c('div',{staticClass:\"input-group mb-3 text-muted\"},[_c('select',{staticClass:\"custom-select text-muted w-100\",attrs:{\"id\":\"plannedTrailPrivacy\"},on:{\"change\":_vm.privacyChanged}},[(_vm.selectedWaypoint.public)?[_c('option',{attrs:{\"value\":\"1\",\"selected\":\"\"}},[_vm._v(\"Everyone can view\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Only I can view\")])]:[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Everyone can view\")]),_vm._v(\" \"),_c('option',{attrs:{\"value\":\"2\",\"selected\":\"\"}},[_vm._v(\"Only I can view\")])]],2)]),_vm._v(\" \"),_c('hr',{staticClass:\"my-3\"}),_vm._v(\" \"),_c('div',{staticClass:\"d-flex\"},[_c('button',{staticClass:\"btn btn-secondary flex-fill mr-2 mt-3\",attrs:{\"data-bs-dismiss\":\"modal\"},on:{\"click\":_vm.cancel}},[_vm._v(\"CANCEL\\n \")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-primary flex-fill mt-3\",on:{\"click\":_vm.save}},[_vm._v(\"SAVE\")])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{attrs:{\"for\":\"\"}},[_c('small',[_c('strong',[_vm._v(\"Waypoint type\")])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{attrs:{\"for\":\"plannedTrailName\"}},[_c('small',[_c('strong',[_vm._v(\"Name\")])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{attrs:{\"for\":\"plannedTrailDesc\"}},[_c('small',[_c('strong',[_vm._v(\"Description\")])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"plannedTrailImg\"}},[_c('small',[_c('strong',[_vm._v(\"Add images\")])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{staticClass:\"form-label\",attrs:{\"for\":\"plannedTrailImg\"}},[_c('small',[_c('strong',[_vm._v(\"Group\")])])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',[_c('label',{attrs:{\"for\":\"\"}},[_c('small',[_c('strong',[_vm._v(\"Who can view\")])])])])\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!./WaypointDialogOptions.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!./WaypointDialogOptions.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n <p class=\"display-5\"><strong>Waypoints</strong></p>\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"clickedShowWaypoints\">\n Show Waypoints on Map\n <span class=\"float-right\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"21\" viewBox=\"0 0 42 21\" fill=\"none\">\n <rect width=\"42\" height=\"21\" rx=\"10.5\" :fill=\"mapContainsWaypoints ? `#70C381` : `#363636`\"/>\n <circle :cx=\"mapContainsWaypoints ? '30.5' : '11.5'\" cy=\"10.5\" r=\"8.5\" fill=\"white\"/>\n </svg>\n </span>\n </button>\n <hr class=\"my-2\">\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"addNewWaypoint\">\n Add new Waypoint\n <span class=\"material-icons float-right\">add_circle</span>\n </button>\n <hr class=\"my-2\">\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"clickViewAllWaypoints\">\n View all Waypoints\n <span class=\"material-icons float-right\">list</span>\n </button>\n <hr class=\"my-2\">\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"viewWaypointGroupsClicked\">\n View Waypoint Groups\n <span class=\"material-icons float-right\">folder</span>\n </button>\n <hr class=\"my-2\">\n <input class=\"d-none\" type=\"file\" id=\"file-input\" title=\"\" @change=\"handleGPXImportFile\" accept=\"application/gpx+xml\">\n <label for=\"file-input\" class=\"p-2 font-weight-normal text-white btn-link d-flex justify-content-between\" style=\"cursor: pointer\">\n <span class=\"\">Import Waypoints from GPX File</span>\n <span class=\"material-icons float-right\">upload</span>\n </label>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\n// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { mapState } from 'vuex';\nimport { WaypointOptionsDialogPages } from '../../utils/models/WaypointOptionsDialogPages';\n\nexport default defineComponent({\n computed: Object.assign(mapState({\n mapContainsWaypoints: (state) => state.waypoints.mapContainsWaypoints,\n })),\n methods: {\n handleGPXImportFile(event) {\n const file = event.target.files[0];\n const fileExtension = file.name.split('.').pop().toLowerCase();\n if (fileExtension === 'gpx') {\n // Handle the GPX file\n this.$store.dispatch('waypoints/importGPXFile', file);\n } else {\n alert('Please select a GPX file. It must end in .gpx');\n }\n },\n addNewWaypoint() {\n this.$store.commit('waypoints/toggleWaypointAddingNotification');\n $('#waypoint-options-dialog').modal('hide');\n },\n clickViewAllWaypoints() {\n this.$store.commit('waypoints/setTopPage', WaypointOptionsDialogPages.Waypoints);\n },\n clickedShowWaypoints() {\n if (this.mapContainsWaypoints) {\n this.$store.dispatch('waypoints/removeWaypointsFromMap');\n } else {\n this.$store.dispatch('waypoints/addWaypointsToMap');\n }\n $('#waypoint-options-dialog').modal('hide');\n },\n viewWaypointGroupsClicked() {\n this.$store.commit('waypoints/setTopPage', WaypointOptionsDialogPages.WaypointGroups);\n },\n },\n});\n</script>\n\n<style scoped>\n</style>\n","import { render, staticRenderFns } from \"./WaypointDialogOptions.vue?vue&type=template&id=453b61b6&scoped=true&\"\nimport script from \"./WaypointDialogOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogOptions.vue?vue&type=script&lang=js&\"\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 \"453b61b6\",\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:\"mt-3\"},[_vm._m(0),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.clickedShowWaypoints}},[_vm._v(\"\\n Show Waypoints on Map\\n \"),_c('span',{staticClass:\"float-right\"},[_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"42\",\"height\":\"21\",\"viewBox\":\"0 0 42 21\",\"fill\":\"none\"}},[_c('rect',{attrs:{\"width\":\"42\",\"height\":\"21\",\"rx\":\"10.5\",\"fill\":_vm.mapContainsWaypoints ? `#70C381` : `#363636`}}),_vm._v(\" \"),_c('circle',{attrs:{\"cx\":_vm.mapContainsWaypoints ? '30.5' : '11.5',\"cy\":\"10.5\",\"r\":\"8.5\",\"fill\":\"white\"}})])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.addNewWaypoint}},[_vm._v(\"\\n Add new Waypoint\\n \"),_c('span',{staticClass:\"material-icons float-right\"},[_vm._v(\"add_circle\")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.clickViewAllWaypoints}},[_vm._v(\"\\n View all Waypoints\\n \"),_c('span',{staticClass:\"material-icons float-right\"},[_vm._v(\"list\")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.viewWaypointGroupsClicked}},[_vm._v(\"\\n View Waypoint Groups\\n \"),_c('span',{staticClass:\"material-icons float-right\"},[_vm._v(\"folder\")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('input',{staticClass:\"d-none\",attrs:{\"type\":\"file\",\"id\":\"file-input\",\"title\":\"\",\"accept\":\"application/gpx+xml\"},on:{\"change\":_vm.handleGPXImportFile}}),_vm._v(\" \"),_vm._m(1)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"display-5\"},[_c('strong',[_vm._v(\"Waypoints\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('label',{staticClass:\"p-2 font-weight-normal text-white btn-link d-flex justify-content-between\",staticStyle:{\"cursor\":\"pointer\"},attrs:{\"for\":\"file-input\"}},[_c('span',{},[_vm._v(\"Import Waypoints from GPX File\")]),_vm._v(\" \"),_c('span',{staticClass:\"material-icons float-right\"},[_vm._v(\"upload\")])])\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!./WaypointDialogViewWaypointDetails.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!./WaypointDialogViewWaypointDetails.vue?vue&type=script&lang=js&\"","<template>\n <div>\n <div class=\"px-3 py-2 text-dark\" style=\"background-color: #fab500\">\n <p class=\"m-0\"><strong>{{title}}</strong></p>\n <small>{{formattedDate}}</small>\n </div>\n\n <div class=\"wcarousel-container pt-3 pl-3 pr-0\" id=\"myCarousel\" :if=\"waypointPhotos.length > 0\">\n <div class=\"wcarousel\">\n <div v-for=\"(photo, index) in waypointPhotos\" :key=\"index\" class=\"wcarousel-item square pr-3\">\n <img :src=\"photo.file.url\" alt=\"Image 1\">\n </div>\n </div>\n </div>\n\n <div class=\"p-4\">\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"planTrailToWaypoint\">\n Plan trail from waypoint\n <span class=\"float-right\" @click=\"planTrailToWaypoint\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"22\" viewBox=\"0 0 21 22\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.5 14C14.0899 14 17 11.0899 17 7.5C17 3.91015 14.0899 1 10.5 1C6.91015 1 4 3.91015 4 7.5C4 11.0899 6.91015 14 10.5 14ZM10 3C9.26907 3 8.26245 3.28183 7.43247 4.07861C6.57717 4.8997 6 6.17853 6 8H8C8 6.62147 8.42283 5.9003 8.81753 5.52139C9.23755 5.11817 9.73093 5 10 5V3Z\" fill=\"white\"/>\n <path d=\"M9 13H11V22L9 20.0435V13Z\" fill=\"white\"/>\n </svg>\n </span>\n </button>\n\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"printWaypoint()\">\n Print map of waypoint\n <span class=\"float-right\" @click=\"printWaypoint\">\n <span class=\"material-icons float-right\" @click=\"printWaypoint()\">print</span>\n </span>\n </button>\n\n <template v-if=\"isUsersWaypoint\">\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"editWaypointDetails($event)\" >\n Edit details\n <span class=\"material-icons float-right\" @click=\"editWaypointDetails($event)\">edit</span>\n </button>\n </template>\n\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"openOnGoogleStreetView\">\n View on Google Street View\n <span class=\"material-icons float-right\" @click=\"openOnGoogleStreetView\">directions</span>\n </button>\n\n\n\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"shareClicked\">\n Share Waypoint <span class=\"text-yellow ml-1\" v-if=\"showCopied\">Copied to clipboard!</span>\n <span class=\"material-icons float-right\">share</span>\n </button>\n <button class=\"btn btn-link pt-0\" @click=\"shareClicked\">{{ selectedWaypointShareUrl }}</button>\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"getDirectionsToWaypoint\">\n Driving directions\n <span class=\"material-icons float-right\" @click=\"getDirectionsToWaypoint\">directions</span>\n </button>\n\n <template v-if=\"isUsersWaypoint\">\n <hr class=\"my-2\">\n\n <button class=\"btn btn-block btn-link text-white d-flex justify-content-between\" @click=\"deleteWaypoint\">\n Delete Waypoint\n <span class=\"material-icons float-right\" @click=\"deleteWaypoint\">delete</span>\n </button>\n </template>\n\n <hr class=\"my-2\">\n\n <p class=\"pt-3 px-2\"><strong class=\"text-yellow\">Details</strong></p>\n <p class=\"pt-2 px-2\">\n <span><strong class=\"\">Description:</strong></span>\n </p>\n <p class=\"pb-2 px-2\">\n <span class=\"\">{{ this.description }}</span>\n </p>\n <hr class=\"my-2\">\n\n <p class=\"p-2\">\n <span><strong class=\"\">Coords:</strong></span>\n <span class=\"float-right\">{{ this.preferenceLonLat }}</span>\n </p>\n <hr class=\"my-2\">\n\n <p class=\"p-2\">\n <span><strong class=\"\">Type:</strong></span>\n <span class=\"float-right\">{{ prettyType }}</span>\n </p>\n <hr class=\"my-2\">\n\n <p class=\"p-2\">\n <span><strong class=\"\">ID:</strong></span>\n <span class=\"float-right\">{{ clientId }}</span>\n </p>\n <hr class=\"my-2\">\n\n </div>\n\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary d-block m-auto\" data-bs-dismiss=\"modal\">Close</button>\n </div>\n</div>\n</template>\n\n<script>\n\nimport { defineComponent } from 'vue';\nimport { mapGetters, mapState } from 'vuex';\n// eslint-disable-next-line import/no-unresolved,import/extensions\nimport { GridRefUtils } from '../../utils/helpers/GridRefPreference';\n// eslint-disable-next-line import/no-unresolved,import/extensions\nimport { openGoogleMaps } from '../../utils/helpers/OpenOnGoogleMaps';\n// eslint-disable-next-line import/no-unresolved,import/extensions\nimport { wktPointToLatLng } from '../../utils/helpers/WKTPointToLatLng';\n// eslint-disable-next-line import/no-unresolved,import/extensions\nimport { POIUtility } from '../../utils/models/POI';\n// eslint-disable-next-line import/no-unresolved,import/extensions\nimport { WaypointOptionsDialogPages } from '../../utils/models/WaypointOptionsDialogPages';\n\nexport default defineComponent({\n data() {\n return {\n gridRefUtils: null,\n showCopied: false,\n };\n },\n async mounted() {\n const gridRef = await GridRefUtils.preference();\n this.gridRefUtils = gridRef;\n\n document.addEventListener(\"DOMContentLoaded\", function() {\n const carousel = document.getElementById(\"myCarousel\");\n\n carousel.addEventListener(\"wheel\", function(event) {\n event.stopPropagation();\n });\n});\n },\n computed: Object.assign(mapState({\n selectedWaypoint: (state) => state.waypoints.selectedWaypoint,\n }), mapGetters({\n selectedWaypointShareUrl: 'waypoints/selectedWaypointShareUrl',\n }), {\n id() {\n return this.selectedWaypoint.id;\n },\n title() {\n return this.selectedWaypoint.title;\n },\n type() {\n return this.selectedWaypoint.type;\n },\n prettyType() {\n return POIUtility.fromString(this.type).prettyName();\n },\n description() {\n return this.selectedWaypoint.description;\n },\n lonlat() {\n return this.selectedWaypoint.lonlat;\n },\n preferenceLonLat() {\n return this.gridRefUtils ? this.gridRefUtils.convert(this.point) : this.lonlat;\n },\n point() {\n return wktPointToLatLng(this.lonlat);\n },\n createdAt() {\n return this.selectedWaypoint.createdAt;\n },\n updatedAt() {\n return this.selectedWaypoint.updatedAt;\n },\n clientId() {\n return this.selectedWaypoint.clientId;\n },\n userId() {\n return this.selectedWaypoint.userId;\n },\n isUsersWaypoint() {\n if (window.user == null) {\n return false;\n }\n return this.selectedWaypoint.userId === window.user.id;\n },\n public() {\n return this.selectedWaypoint.public;\n },\n formattedDate() {\n const date = new Date(this.createdAt);\n const year = date.getFullYear();\n const month = (`0${date.getMonth() + 1}`).slice(-2);\n const day = (`0${date.getDate()}`).slice(-2);\n const hours = (`0${date.getHours()}`).slice(-2);\n const minutes = (`0${date.getMinutes()}`).slice(-2);\n const seconds = (`0${date.getSeconds()}`).slice(-2);\n\n // You can adjust this line to get the date in the format you want\n return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`;\n },\n waypointPhotos() {\n return this.selectedWaypoint.waypointPhotos ?? [];\n }\n }),\n methods: {\n openOnGoogleStreetView() {\n let lat = this.point.lat;\n let lng = this.point.lng;\n let heading = 0;\n let pitch = 0;\n let fov = 90;\n let url = `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${lat},${lng}&heading=${heading}&pitch=${pitch}&fov=${fov}`;\n window.open(url, '_blank');\n },\n editWaypointDetails(event) {\n event.preventDefault();\n this.$store.commit('waypoints/setTopPage', WaypointOptionsDialogPages.WaypointEditDetails);\n },\n deleteWaypoint() {\n this.$store.dispatch('waypoints/deleteSelectedWaypoint');\n },\n shareClicked() {\n navigator.clipboard.writeText(this.selectedWaypointShareUrl).then(() => {\n }).catch((err) => {\n console.error('Unable to copy text to clipboard', err);\n });\n this.showCopied = !this.showCopied;\n },\n getDirectionsToWaypoint() {\n openGoogleMaps(this.point.lat, this.point.lng);\n },\n planTrailToWaypoint() {\n this.$store.dispatch('waypoints/planTrailToSelectedWaypoint');\n },\n printWaypoint() {\n window.location.href = `/print-maps?data_ids[]=${this.selectedWaypoint.id}&data_types[]=Waypoint`;\n },\n },\n});\n</script>\n\n<style scoped>\n\n.wcarousel-container {\n overflow: hidden;\n width: calc(2.5 * 300px); /* Showing 2.5 images, each of 300px */\n max-width: 100%;\n}\n\n.wcarousel {\n display: flex;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: none; /* Hide scrollbar for Firefox */\n}\n\n.wcarousel::-webkit-scrollbar {\n display: none; /* Hide scrollbar for Chrome, Safari, and Opera */\n}\n\n.wcarousel-item {\n flex: 0 0 auto;\n width: 45%;\n scroll-snap-align: start;\n position: relative;\n}\n\n.wcarousel-item img {\n width: 100%;\n height: auto;\n}\n\n</style>\n","/**\n * Opens Google Maps in a new tab showing directions to the provided latitude and longitude.\n *\n * @param {number} lat Latitude\n * @param {number} lon Longitude\n */\nexport function openGoogleMaps(lat, lon) {\n const googleMapsUrl = `https://www.google.com/maps/dir//${lat},${lon}`;\n window.open(googleMapsUrl, '_blank'); // Open the URL in a new tab\n}\n","import { render, staticRenderFns } from \"./WaypointDialogViewWaypointDetails.vue?vue&type=template&id=15f58976&scoped=true&\"\nimport script from \"./WaypointDialogViewWaypointDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogViewWaypointDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WaypointDialogViewWaypointDetails.vue?vue&type=style&index=0&id=15f58976&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 \"15f58976\",\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',[_c('div',{staticClass:\"px-3 py-2 text-dark\",staticStyle:{\"background-color\":\"#fab500\"}},[_c('p',{staticClass:\"m-0\"},[_c('strong',[_vm._v(_vm._s(_vm.title))])]),_vm._v(\" \"),_c('small',[_vm._v(_vm._s(_vm.formattedDate))])]),_vm._v(\" \"),_c('div',{staticClass:\"wcarousel-container pt-3 pl-3 pr-0\",attrs:{\"id\":\"myCarousel\",\"if\":_vm.waypointPhotos.length > 0}},[_c('div',{staticClass:\"wcarousel\"},_vm._l((_vm.waypointPhotos),function(photo,index){return _c('div',{key:index,staticClass:\"wcarousel-item square pr-3\"},[_c('img',{attrs:{\"src\":photo.file.url,\"alt\":\"Image 1\"}})])}),0)]),_vm._v(\" \"),_c('div',{staticClass:\"p-4\"},[_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.planTrailToWaypoint}},[_vm._v(\"\\n Plan trail from waypoint\\n \"),_c('span',{staticClass:\"float-right\",on:{\"click\":_vm.planTrailToWaypoint}},[_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"21\",\"height\":\"22\",\"viewBox\":\"0 0 21 22\",\"fill\":\"none\"}},[_c('path',{attrs:{\"fill-rule\":\"evenodd\",\"clip-rule\":\"evenodd\",\"d\":\"M10.5 14C14.0899 14 17 11.0899 17 7.5C17 3.91015 14.0899 1 10.5 1C6.91015 1 4 3.91015 4 7.5C4 11.0899 6.91015 14 10.5 14ZM10 3C9.26907 3 8.26245 3.28183 7.43247 4.07861C6.57717 4.8997 6 6.17853 6 8H8C8 6.62147 8.42283 5.9003 8.81753 5.52139C9.23755 5.11817 9.73093 5 10 5V3Z\",\"fill\":\"white\"}}),_vm._v(\" \"),_c('path',{attrs:{\"d\":\"M9 13H11V22L9 20.0435V13Z\",\"fill\":\"white\"}})])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":function($event){return _vm.printWaypoint()}}},[_vm._v(\"\\n Print map of waypoint\\n \"),_c('span',{staticClass:\"float-right\",on:{\"click\":_vm.printWaypoint}},[_c('span',{staticClass:\"material-icons float-right\",on:{\"click\":function($event){return _vm.printWaypoint()}}},[_vm._v(\"print\")])])]),_vm._v(\" \"),(_vm.isUsersWaypoint)?[_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":function($event){return _vm.editWaypointDetails($event)}}},[_vm._v(\"\\n Edit details\\n \"),_c('span',{staticClass:\"material-icons float-right\",on:{\"click\":function($event){return _vm.editWaypointDetails($event)}}},[_vm._v(\"edit\")])])]:_vm._e(),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.openOnGoogleStreetView}},[_vm._v(\"\\n View on Google Street View\\n \"),_c('span',{staticClass:\"material-icons float-right\",on:{\"click\":_vm.openOnGoogleStreetView}},[_vm._v(\"directions\")])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.shareClicked}},[_vm._v(\"\\n Share Waypoint \"),(_vm.showCopied)?_c('span',{staticClass:\"text-yellow ml-1\"},[_vm._v(\"Copied to clipboard!\")]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"material-icons float-right\"},[_vm._v(\"share\")])]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-link pt-0\",on:{\"click\":_vm.shareClicked}},[_vm._v(_vm._s(_vm.selectedWaypointShareUrl))]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.getDirectionsToWaypoint}},[_vm._v(\"\\n Driving directions\\n \"),_c('span',{staticClass:\"material-icons float-right\",on:{\"click\":_vm.getDirectionsToWaypoint}},[_vm._v(\"directions\")])]),_vm._v(\" \"),(_vm.isUsersWaypoint)?[_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-block btn-link text-white d-flex justify-content-between\",on:{\"click\":_vm.deleteWaypoint}},[_vm._v(\"\\n Delete Waypoint\\n \"),_c('span',{staticClass:\"material-icons float-right\",on:{\"click\":_vm.deleteWaypoint}},[_vm._v(\"delete\")])])]:_vm._e(),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_vm._m(0),_vm._v(\" \"),_vm._m(1),_vm._v(\" \"),_c('p',{staticClass:\"pb-2 px-2\"},[_c('span',{},[_vm._v(_vm._s(this.description))])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('p',{staticClass:\"p-2\"},[_vm._m(2),_vm._v(\" \"),_c('span',{staticClass:\"float-right\"},[_vm._v(_vm._s(this.preferenceLonLat))])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('p',{staticClass:\"p-2\"},[_vm._m(3),_vm._v(\" \"),_c('span',{staticClass:\"float-right\"},[_vm._v(_vm._s(_vm.prettyType))])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"}),_vm._v(\" \"),_c('p',{staticClass:\"p-2\"},[_vm._m(4),_vm._v(\" \"),_c('span',{staticClass:\"float-right\"},[_vm._v(_vm._s(_vm.clientId))])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})],2),_vm._v(\" \"),_vm._m(5)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"pt-3 px-2\"},[_c('strong',{staticClass:\"text-yellow\"},[_vm._v(\"Details\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"pt-2 px-2\"},[_c('span',[_c('strong',{},[_vm._v(\"Description:\")])])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',[_c('strong',{},[_vm._v(\"Coords:\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',[_c('strong',{},[_vm._v(\"Type:\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',[_c('strong',{},[_vm._v(\"ID:\")])])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"modal-footer\"},[_c('button',{staticClass:\"btn btn-secondary d-block m-auto\",attrs:{\"type\":\"button\",\"data-bs-dismiss\":\"modal\"}},[_vm._v(\"Close\")])])\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!./WaypointDialogWaypointGroups.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!./WaypointDialogWaypointGroups.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n\n <button @click=\"backClicked\" class=\"btn btn-grey-light d-flex align-items-center p-0 pb-3\"><span class=\"material-icons mr-2\">arrow_left</span> Back</button>\n\n <div v-for=\"waypointGroup in allUserWaypointGroups\" :key=\"waypointGroup.obfuscatedId\">\n <div class=\"d-flex justify-content-between\" role=\"button\" @click=\"waypointGroupClicked(waypointGroup)\">\n <span>\n <p>{{waypointGroup.title}} ({{waypointGroup.waypoints.length}})</p>\n </span>\n <span class=\"float-right d-none d-flex justify-content-center\">\n <span class=\"material-icons mr-2\" @click=\"waypointGroupClicked(waypointGroup)\">chevron_right</span>\n </span>\n </div>\n <hr class=\"my-2\">\n </div>\n\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { mapState } from 'vuex';\nimport { WaypointOptionsDialogPages } from '../../utils/models/WaypointOptionsDialogPages';\n\nexport default defineComponent({\n data() {\n return {\n };\n },\n mounted() {\n this.$store.dispatch('waypoints/getAllUserWaypointGroups');\n },\n methods: {\n backClicked() {\n this.$store.commit('waypoints/popPage');\n },\n waypointGroupClicked(waypointGroup) {\n this.$store.dispatch('waypoints/getWaypointGroup', waypointGroup.clientId);\n this.$store.commit('waypoints/setTopPage', WaypointOptionsDialogPages.WaypointGroupsWaypoints);\n },\n },\n computed: Object.assign(mapState({\n allUserWaypointGroups: (state) => state.waypoints.allUserWaypointGroups,\n })),\n});\n</script>\n","import { render, staticRenderFns } from \"./WaypointDialogWaypointGroups.vue?vue&type=template&id=25ba207a&\"\nimport script from \"./WaypointDialogWaypointGroups.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogWaypointGroups.vue?vue&type=script&lang=js&\"\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,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"mt-3\"},[_c('button',{staticClass:\"btn btn-grey-light d-flex align-items-center p-0 pb-3\",on:{\"click\":_vm.backClicked}},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"arrow_left\")]),_vm._v(\" Back\")]),_vm._v(\" \"),_vm._l((_vm.allUserWaypointGroups),function(waypointGroup){return _c('div',{key:waypointGroup.obfuscatedId},[_c('div',{staticClass:\"d-flex justify-content-between\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.waypointGroupClicked(waypointGroup)}}},[_c('span',[_c('p',[_vm._v(_vm._s(waypointGroup.title)+\" (\"+_vm._s(waypointGroup.waypoints.length)+\")\")])]),_vm._v(\" \"),_c('span',{staticClass:\"float-right d-none d-flex justify-content-center\"},[_c('span',{staticClass:\"material-icons mr-2\",on:{\"click\":function($event){return _vm.waypointGroupClicked(waypointGroup)}}},[_vm._v(\"chevron_right\")])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})])})],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!./WaypointDialogWaypointGroupSelection.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!./WaypointDialogWaypointGroupSelection.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n <button @click=\"backClicked\" class=\"btn btn-grey-light d-flex align-items-center p-0 pb-3\"><span class=\"material-icons mr-2\">arrow_left</span> Back</button>\n\n <label for=\"plannedTrailName\" class=\"\"><small><strong>Waypoint Groups</strong></small></label>\n <div class=\"row p-0 m-0\">\n <div class=\"input-group col-12 p-0 m-0 d-flex align-items-center\">\n <input class=\"form-control py-2 border-0\" placeholder=\"Create a new group\" @keyup.enter=\"createWaypointGroup($event)\" v-model=\"newWaypointGroupName\">\n <span class=\"input-group-append\">\n <button class=\"btn btn-block btn-link d-flex align-items-center\" type=\"button\" @click=\"createWaypointGroup($event)\">\n <span class=\"material-icons text-muted\">add</span>\n </button>\n </span>\n </div>\n </div>\n <div v-for=\"waypointGroup of this.allUserWaypointGroups\" :key=\"waypointGroup.id\">\n <div class=\"row p-0 m-0\">\n <div class=\"input-group col-12 p-0 m-0 d-flex align-items-center\">\n <span class=\"form-control py-2 border-0\"><p class=\"m-0\">{{waypointGroup.title}}</p></span>\n <span class=\"input-group-append\">\n <button class=\"btn btn-block btn-link d-flex align-items-center\" type=\"button\" @click=\"updateWaypointGroup($event, waypointGroup)\">\n <template v-if=\"waypointGroupIncludesWaypoint(waypointGroup)\">\n <span class=\"material-icons text-primary\">check</span>\n </template>\n <template v-else>\n <span class=\"material-icons text-muted\">add</span>\n </template>\n </button>\n </span>\n </div>\n </div>\n <div class=\"row p-0 m-0\">\n <div class=\"col-12 p-0 m-0\">\n <hr class=\"my-1\">\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n newWaypointGroupName: '',\n };\n },\n mounted() {\n this.$store.dispatch('waypoints/getAllUserWaypointGroups');\n },\n computed: {\n allUserWaypointGroups() {\n return this.$store.state.waypoints.allUserWaypointGroups;\n },\n selectedWaypoint() {\n return this.$store.state.waypoints.selectedWaypoint;\n },\n },\n methods: {\n backClicked() {\n this.$store.commit('waypoints/popPage');\n },\n waypointGroupIncludesWaypoint(waypointGroup) {\n return waypointGroup.waypoints.find((waypoint) => waypoint.clientId === this.selectedWaypoint.clientId) != null;\n },\n updateWaypointGroup(event, waypointGroup) {\n event.preventDefault();\n if (this.waypointGroupIncludesWaypoint(waypointGroup)) {\n waypointGroup.waypoints = waypointGroup.waypoints.filter((waypoint) => waypoint.clientId !== this.selectedWaypoint.clientId);\n } else {\n waypointGroup.waypoints.push(this.selectedWaypoint);\n }\n this.$store.dispatch('waypoints/updateWaypointGroup', {\n id: waypointGroup.id,\n title: waypointGroup.title,\n waypointIds: waypointGroup.waypoints.map((waypoint) => waypoint.id),\n });\n },\n createWaypointGroup(event) {\n event.preventDefault();\n this.$store.dispatch(\n 'waypoints/createWaypointGroup',\n {\n title: this.newWaypointGroupName,\n waypointIds: [this.selectedWaypoint.id],\n },\n );\n this.newWaypointGroupName = '';\n },\n },\n};\n</script>\n\n<style scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./WaypointDialogWaypointGroupSelection.vue?vue&type=template&id=173a3d90&scoped=true&\"\nimport script from \"./WaypointDialogWaypointGroupSelection.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogWaypointGroupSelection.vue?vue&type=script&lang=js&\"\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 \"173a3d90\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"mt-3\"},[_c('button',{staticClass:\"btn btn-grey-light d-flex align-items-center p-0 pb-3\",on:{\"click\":_vm.backClicked}},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"arrow_left\")]),_vm._v(\" Back\")]),_vm._v(\" \"),_vm._m(0),_vm._v(\" \"),_c('div',{staticClass:\"row p-0 m-0\"},[_c('div',{staticClass:\"input-group col-12 p-0 m-0 d-flex align-items-center\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newWaypointGroupName),expression:\"newWaypointGroupName\"}],staticClass:\"form-control py-2 border-0\",attrs:{\"placeholder\":\"Create a new group\"},domProps:{\"value\":(_vm.newWaypointGroupName)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.createWaypointGroup($event)},\"input\":function($event){if($event.target.composing)return;_vm.newWaypointGroupName=$event.target.value}}}),_vm._v(\" \"),_c('span',{staticClass:\"input-group-append\"},[_c('button',{staticClass:\"btn btn-block btn-link d-flex align-items-center\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.createWaypointGroup($event)}}},[_c('span',{staticClass:\"material-icons text-muted\"},[_vm._v(\"add\")])])])])]),_vm._v(\" \"),_vm._l((this.allUserWaypointGroups),function(waypointGroup){return _c('div',{key:waypointGroup.id},[_c('div',{staticClass:\"row p-0 m-0\"},[_c('div',{staticClass:\"input-group col-12 p-0 m-0 d-flex align-items-center\"},[_c('span',{staticClass:\"form-control py-2 border-0\"},[_c('p',{staticClass:\"m-0\"},[_vm._v(_vm._s(waypointGroup.title))])]),_vm._v(\" \"),_c('span',{staticClass:\"input-group-append\"},[_c('button',{staticClass:\"btn btn-block btn-link d-flex align-items-center\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.updateWaypointGroup($event, waypointGroup)}}},[(_vm.waypointGroupIncludesWaypoint(waypointGroup))?[_c('span',{staticClass:\"material-icons text-primary\"},[_vm._v(\"check\")])]:[_c('span',{staticClass:\"material-icons text-muted\"},[_vm._v(\"add\")])]],2)])])]),_vm._v(\" \"),_vm._m(1,true)])})],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('label',{attrs:{\"for\":\"plannedTrailName\"}},[_c('small',[_c('strong',[_vm._v(\"Waypoint Groups\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"row p-0 m-0\"},[_c('div',{staticClass:\"col-12 p-0 m-0\"},[_c('hr',{staticClass:\"my-1\"})])])\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!./WaypointDialogWaypointGroupWaypoints.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!./WaypointDialogWaypointGroupWaypoints.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n\n <div class=\"d-flex justify-content-between align-items-center\">\n <button @click=\"backClicked\" class=\"btn btn-grey-light d-flex align-items-center p-0 pb-3\"><span class=\"material-icons mr-2\">arrow_left</span> Back</button>\n <button @click=\"printGroup\" class=\"btn btn-secondary\">PRINT</button>\n </div>\n\n <p class=\"mb-3\"><strong>{{selectedWaypointGroup?.title}}</strong></p>\n\n <div v-for=\"waypoint in uniqueWaypoints\" :key=\"waypoint.clientId\">\n <div class=\"d-flex justify-content-between\">\n <span>\n <p class=\"m-0\">{{waypoint.title}}</p>\n <p><small class=\"text-muted\">{{waypoint.createdAt}}</small></p>\n </span>\n <span class=\"float-right d-none d-flex justify-content-center\">\n <button class=\"btn btn-xs btn-secondary\" style=\"max-height: 34px;\" @click=\"showClicked(waypoint)\">SHOW</button>\n </span>\n </div>\n <hr class=\"my-2\">\n </div>\n <span class=\"float-right d-none d-flex pb-3 justify-content-center\">\n <button class=\"btn btn-xs btn-danger mr-2\" @click=\"deleteWaypointGroup\">Delete Group</button>\n <button class=\"btn btn-xs btn-secondary\" @click=\"exportGroupToGPX\">Export all waypoints to GPX</button>\n </span>\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { mapState } from 'vuex';\n\nexport default defineComponent({\n data() {\n return {\n };\n },\n computed: {\n ...mapState({\n selectedWaypointGroup: (state) => state.waypoints.selectedWaypointGroup,\n }),\n uniqueWaypoints() {\n const seenIds = new Set();\n if (!this.selectedWaypointGroup) {\n return [];\n }\n return this.selectedWaypointGroup.waypoints.filter((waypoint) => {\n if (seenIds.has(waypoint.id)) {\n return false;\n }\n seenIds.add(waypoint.id);\n return true;\n });\n },\n },\n methods: {\n backClicked() {\n this.$store.commit('waypoints/popPage');\n },\n showClicked(waypoint) {\n this.$store.dispatch('waypoints/showWaypointOnMap', waypoint);\n },\n printGroup() {\n window.location.href = `/print-maps?data_ids[]=${this.selectedWaypointGroup.id}&data_types[]=WaypointGroup`;\n },\n exportGroupToGPX() {\n this.$store.dispatch('waypoints/exportSelectedWaypointGroupToGPX');\n },\n deleteWaypointGroup() {\n this.$store.dispatch('waypoints/destroySelectedWaypointGroup');\n },\n },\n});\n</script>\n\n<style scoped>\n</style>\n","import { render, staticRenderFns } from \"./WaypointDialogWaypointGroupWaypoints.vue?vue&type=template&id=cc90cd10&scoped=true&\"\nimport script from \"./WaypointDialogWaypointGroupWaypoints.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogWaypointGroupWaypoints.vue?vue&type=script&lang=js&\"\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 \"cc90cd10\",\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:\"mt-3\"},[_c('div',{staticClass:\"d-flex justify-content-between align-items-center\"},[_c('button',{staticClass:\"btn btn-grey-light d-flex align-items-center p-0 pb-3\",on:{\"click\":_vm.backClicked}},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"arrow_left\")]),_vm._v(\" Back\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-secondary\",on:{\"click\":_vm.printGroup}},[_vm._v(\"PRINT\")])]),_vm._v(\" \"),_c('p',{staticClass:\"mb-3\"},[_c('strong',[_vm._v(_vm._s(_vm.selectedWaypointGroup?.title))])]),_vm._v(\" \"),_vm._l((_vm.uniqueWaypoints),function(waypoint){return _c('div',{key:waypoint.clientId},[_c('div',{staticClass:\"d-flex justify-content-between\"},[_c('span',[_c('p',{staticClass:\"m-0\"},[_vm._v(_vm._s(waypoint.title))]),_vm._v(\" \"),_c('p',[_c('small',{staticClass:\"text-muted\"},[_vm._v(_vm._s(waypoint.createdAt))])])]),_vm._v(\" \"),_c('span',{staticClass:\"float-right d-none d-flex justify-content-center\"},[_c('button',{staticClass:\"btn btn-xs btn-secondary\",staticStyle:{\"max-height\":\"34px\"},on:{\"click\":function($event){return _vm.showClicked(waypoint)}}},[_vm._v(\"SHOW\")])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})])}),_vm._v(\" \"),_c('span',{staticClass:\"float-right d-none d-flex pb-3 justify-content-center\"},[_c('button',{staticClass:\"btn btn-xs btn-danger mr-2\",on:{\"click\":_vm.deleteWaypointGroup}},[_vm._v(\"Delete Group\")]),_vm._v(\" \"),_c('button',{staticClass:\"btn btn-xs btn-secondary\",on:{\"click\":_vm.exportGroupToGPX}},[_vm._v(\"Export all waypoints to GPX\")])])],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!./WaypointDialogWaypoints.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!./WaypointDialogWaypoints.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"mt-3\">\n <button @click=\"backClicked\" class=\"btn btn-grey-light d-flex align-items-center p-0 pb-3\"><span class=\"material-icons mr-2\">arrow_left</span> Back</button>\n\n <input class=\"form-control py-3 btn-secondary\" type=\"text\" v-model=\"searchQuery\" placeholder=\"Search...\" @input=\"runSearch\" />\n\n <p class=\"my-3\"><strong>My Waypoints</strong></p>\n <div v-for=\"waypoint in waypointsForList\" :key=\"waypoint.id\">\n <div class=\"row\">\n <div class=\"col-9\">\n <p class=\"m-0 d-flex align-items-center\">\n {{waypoint.title}}\n </p>\n <small class=\"text-muted d-flex align-items-center mt-1\">{{new Date(waypoint.createdAt).toLocaleDateString()}} - {{new Date(waypoint.createdAt).toLocaleTimeString()}}\n <span class=\"mx-2\">·</span>\n <span role=\"button\" class=\"text-muted d-flex align-items-center\" @click=\"exportWaypointToGPX(waypoint)\">GPX <span class=\"material-icons ml-1\" style=\"font-size: 17px;\">download</span></span>\n <span class=\"mx-2\">·</span>\n <span role=\"button\" class=\"text-muted d-flex align-items-center\" @click=\"deleteWaypoint(waypoint)\">Delete <span class=\"material-icons ml-1\" style=\"font-size: 17px;\">delete</span></span>\n </small>\n </div>\n <div class=\"col-3\">\n <button class=\"btn btn-block btn-xs btn-secondary\" style=\"max-height: 34px;\" @click=\"showWaypointOnMap(waypoint)\">SHOW</button>\n </div>\n </div>\n <hr class=\"my-2\">\n </div>\n\n </div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue';\nimport { mapGetters } from 'vuex';\nimport _ from 'lodash';\n\nexport default defineComponent({\n data() {\n return {\n searchQuery: '',\n };\n },\n mounted() {\n this.runSearch();\n },\n computed: Object.assign(mapGetters({\n waypointsForList: 'waypoints/waypointsForList',\n })),\n methods: {\n async runSearch() {\n await this.$store.dispatch('waypoints/searchWaypoints', this.searchQuery);\n },\n backClicked() {\n this.$store.commit('waypoints/popPage');\n },\n showWaypointOnMap(waypoint) {\n this.$store.dispatch('waypoints/showWaypointOnMap', waypoint);\n },\n exportWaypointToGPX(waypoint) {\n this.$store.dispatch('waypoints/exportWaypointToGPX', waypoint);\n },\n async deleteWaypoint(waypoint) {\n await this.$store.dispatch('waypoints/deleteWaypoint', waypoint);\n await this.runSearch();\n },\n },\n});\n</script>\n","import { render, staticRenderFns } from \"./WaypointDialogWaypoints.vue?vue&type=template&id=67ad7169&\"\nimport script from \"./WaypointDialogWaypoints.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialogWaypoints.vue?vue&type=script&lang=js&\"\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,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"mt-3\"},[_c('button',{staticClass:\"btn btn-grey-light d-flex align-items-center p-0 pb-3\",on:{\"click\":_vm.backClicked}},[_c('span',{staticClass:\"material-icons mr-2\"},[_vm._v(\"arrow_left\")]),_vm._v(\" Back\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchQuery),expression:\"searchQuery\"}],staticClass:\"form-control py-3 btn-secondary\",attrs:{\"type\":\"text\",\"placeholder\":\"Search...\"},domProps:{\"value\":(_vm.searchQuery)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.searchQuery=$event.target.value},_vm.runSearch]}}),_vm._v(\" \"),_vm._m(0),_vm._v(\" \"),_vm._l((_vm.waypointsForList),function(waypoint){return _c('div',{key:waypoint.id},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-9\"},[_c('p',{staticClass:\"m-0 d-flex align-items-center\"},[_vm._v(\"\\n \"+_vm._s(waypoint.title)+\"\\n \")]),_vm._v(\" \"),_c('small',{staticClass:\"text-muted d-flex align-items-center mt-1\"},[_vm._v(_vm._s(new Date(waypoint.createdAt).toLocaleDateString())+\" - \"+_vm._s(new Date(waypoint.createdAt).toLocaleTimeString())+\"\\n \"),_c('span',{staticClass:\"mx-2\"},[_vm._v(\"·\")]),_vm._v(\" \"),_c('span',{staticClass:\"text-muted d-flex align-items-center\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.exportWaypointToGPX(waypoint)}}},[_vm._v(\"GPX \"),_c('span',{staticClass:\"material-icons ml-1\",staticStyle:{\"font-size\":\"17px\"}},[_vm._v(\"download\")])]),_vm._v(\" \"),_c('span',{staticClass:\"mx-2\"},[_vm._v(\"·\")]),_vm._v(\" \"),_c('span',{staticClass:\"text-muted d-flex align-items-center\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.deleteWaypoint(waypoint)}}},[_vm._v(\"Delete \"),_c('span',{staticClass:\"material-icons ml-1\",staticStyle:{\"font-size\":\"17px\"}},[_vm._v(\"delete\")])])])]),_vm._v(\" \"),_c('div',{staticClass:\"col-3\"},[_c('button',{staticClass:\"btn btn-block btn-xs btn-secondary\",staticStyle:{\"max-height\":\"34px\"},on:{\"click\":function($event){return _vm.showWaypointOnMap(waypoint)}}},[_vm._v(\"SHOW\")])])]),_vm._v(\" \"),_c('hr',{staticClass:\"my-2\"})])})],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('p',{staticClass:\"my-3\"},[_c('strong',[_vm._v(\"My Waypoints\")])])\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!./WaypointDialog.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!./WaypointDialog.vue?vue&type=script&lang=js&\"","<template>\n <div class=\"modal fade\" id=\"waypoint-options-dialog\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-body\">\n <template v-if=\"topPageIsWaypointOptions\">\n <WaypointDialogOptions/>\n </template>\n <template v-if=\"topPageIsWaypointGroups\">\n <WaypointDialogWaypointGroups/>\n </template>\n <template v-if=\"topPageIsWaypointGroupsWaypoints\">\n <WaypointDialogWaypointGroupWaypoints/>\n </template>\n <template v-if=\"topPageIsWaypointViewDetails\">\n <WaypointDialogViewWaypointDetails/>\n </template>\n <template v-if=\"topPageIsWaypointEditDetails\">\n <WaypointDialogEditWaypointDetails/>\n </template>\n <template v-if=\"topPageIsWaypoints\">\n <WaypointDialogWaypoints/>\n </template>\n <template v-if=\"topPageIsWaypointGroupSelection\">\n <WaypointDialogWaypointGroupSelection/>\n </template>\n\n <button\n class=\"button btn-link btn-block btn-sm text-muted mt-3\"\n data-bs-dismiss=\"modal\"\n aria-label=\"Close\"\n >\n <strong>CLOSE</strong>\n </button>\n\n </div>\n </div>\n </div>\n <LoadingDialog :show-loading-dialog=\"loading\"/>\n </div>\n</template>\n\n<script>\n\nimport { defineComponent } from 'vue';\n// eslint-disable-next-line import/extensions,import/no-unresolved\nimport { mapGetters, mapState } from 'vuex';\nimport LoadingDialog from '../utils/shared_components/LoadingDialog.vue';\nimport WaypointDialogEditWaypointDetails from './components/WaypointDialogEditWaypointDetails.vue';\nimport WaypointDialogOptions from './components/WaypointDialogOptions.vue';\nimport WaypointDialogViewWaypointDetails from './components/WaypointDialogViewWaypointDetails.vue';\nimport WaypointDialogWaypointGroups from './components/WaypointDialogWaypointGroups.vue';\nimport WaypointDialogWaypointGroupSelection from './components/WaypointDialogWaypointGroupSelection.vue';\nimport WaypointDialogWaypointGroupWaypoints from './components/WaypointDialogWaypointGroupWaypoints.vue';\nimport WaypointDialogWaypoints from './components/WaypointDialogWaypoints.vue';\n\nexport default defineComponent({\n components: {\n LoadingDialog,\n WaypointDialogWaypoints,\n WaypointDialogWaypointGroupWaypoints,\n WaypointDialogWaypointGroups,\n WaypointDialogEditWaypointDetails,\n WaypointDialogViewWaypointDetails,\n WaypointDialogOptions,\n WaypointDialogWaypointGroupSelection,\n },\n mounted() {\n\n },\n computed: Object.assign(mapGetters({\n topPageIsWaypointOptions: 'waypoints/topPageIsWaypointOptions',\n topPageIsWaypointViewDetails: 'waypoints/topPageIsWaypointViewDetails',\n topPageIsWaypointEditDetails: 'waypoints/topPageIsWaypointEditDetails',\n topPageIsWaypoints: 'waypoints/topPageIsWaypoints',\n topPageIsWaypointGroups: 'waypoints/topPageIsWaypointGroups',\n topPageIsWaypointGroupsWaypoints: 'waypoints/topPageIsWaypointGroupsWaypoints',\n topPageIsWaypointGroupSelection: 'waypoints/topPageIsWaypointGroupSelection',\n }), mapState({\n loading: (state) => state.waypoints.loading,\n })),\n});\n</script>\n\n<style scoped>\n.modal-content{\n overflow-x: hidden !important;\n}\n</style>\n","import { render, staticRenderFns } from \"./WaypointDialog.vue?vue&type=template&id=483db776&scoped=true&\"\nimport script from \"./WaypointDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./WaypointDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WaypointDialog.vue?vue&type=style&index=0&id=483db776&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 \"483db776\",\n null\n \n)\n\nexport default component.exports"],"names":["staticRenderFns","_vm","this","_c","_self","_setupProxy","staticClass","attrs","require","_v","elevationMarker","defineComponent","name","data","chart","watch","chartData","value","updateChartData","computed","mapGetters","mounted","setTimeout","$store","getters","methods","createElevationMarker","marker","mapboxgl","el","document","createElement","style","display","border","cursor","padding","marginTop","backgroundColor","borderRadius","width","height","backgroundSize","backgroundRepeat","backgroundPosition","_element","update","config","type","options","createOptions","Chart","getElementById","measurementPref","MeasurementPrefUtility","self","hover","mode","intersect","onHover","e","item","length","lat","_chart","_index","lon","setLngLat","addTo","window","map","remove","layout","left","right","top","bottom","responsive","maintainAspectRatio","elements","point","radius","scales","xAxes","gridLines","color","ticks","fontColor","fontSize","yAxes","callback","index","values","meterSymbol","legend","tooltips","axis","callbacks","label","tooltipItem","yLabel","animation","duration","_m","staticStyle","hideElevation","element","toggleText","mapToolsContainer","innerHTML","on","minDate","Date","toISOString","slice","files","previewUrls","triggerFileInput","event","preventDefault","$refs","fileInput","click","handleFileInputChange","target","file","push","id","generateID","reader","FileReader","onload","previewUrl","result","dispatch","ids","readAsDataURL","privacyChanged","state","planTrail","public","save","removeImage","findIndex","splice","updatePlannedToHikeOn","title","get","set","commit","description","localizedPlannedToHikeOn","console","log","directives","rawName","expression","domProps","$event","composing","ref","_l","previewObj","key","copyToClipboardClicked","copyToClipboard","shareableUrl","success","error","alert","components","TrailDataCard","Loader","MapDataPOIDetailDialog","MapDataDialog","POIDetailDialog","POIDialog","WaypointDialog","WaypointAddingNotification","LoadingDialog","ImportRouteMultipleOptionsDialog","MapButtons","BaseMapStylesDialog","PlanTrailLineChart","PlanTrailChartTopBar","PlanTrailSaveModal","PlanTrailShareModal","GoToLocationDialog","TrailImportDialog","MapControls","buttons","icon","enabled","dropIcon","clear","Object","assign","routePreference","mapState","waypointAddingModeEnabled","waypoints","selectedPOI","poi","miniLoader","mapDataTrails","planMode","created","$","tooltip","css","saveClicked","user","modal","onBoardingVue","launchFor","OnBoardingGoal","shareClicked","isProOrProPlus","RevenueCatWrapper","ThreeDimensionalMapManager","location","href","snapClicked","removalModeClicked","togglePlanMode","getCanvas","outAndBackClicked","topProgress","start","markers","text","done","closeToastClicked","loopRoute","reverseRoute","updateElevation","clearMap","hideSidebar","toggleClass","removeClass","resize","class","buttonClicked","_s","miniCoordsBar","_e","$$selectedVal","Array","prototype","filter","call","o","selected","_value","multiple","undoClicked","redoClicked","isSnap","removalMode","loading","getLocalizedPlannedToHikeOn","moment","plannedToHikeOn","local","format","getLastUndoMarkers","undoMarkers","getLastRedoMarkers","redoMarkers","getLastUndoLineStrings","undoLineStrings","getLastRedoLineStrings","redoLineStrings","markersFeatureCollection","features","plainToClass","MarkerFeature","toGeoJson","initialMapSettings","currentCenter","SavedCenter","container","center","lngLat","maxPitch","zoom","trailDistanceString","distance","turfLength","lineStringFeatureCollection","units","smallUnitFormatter","elevationGainString","elevationGainTotal","lineStrings","forEach","lineString","coordinates","LineStringFeature","lineStringGeometry","totalElevationGain","baseElevation","i","elevationChange","getPtv2MarkerAttributes","markerFeature","elevationMeters","markerProperties","ele","lonlat","markerGeometry","snap","getPtv2LineStringAttributes","geometry","toWKT","createChartData","flatMap","chartdata","labels","xLabels","datasets","borderColor","borderWidth","fill","divider","Math","round","count","distances","coordinate","turfDistance","measurementUtils","coord","bigUnitFormatter","smallUnitValue","getLastMarker","markersIsEmpty","getPtv2ImageAttributes","photosIds","photoId","parentClientId","clientId","imageableType","mutations","setTitle","setDescription","setError","clearError","setMiniCoordsBar","miniCoordsBarString","setState","newState","setZoom","setCenter","setMarkers","setLineStrings","updateMarker","foundIndex","m","addMarker","addMarkerObj","markerDetails","MarkerGeometry","lng","MarkerProperties","now","toString","insertMarkerObj","payload","removeMarker","foundMarker","find","indexOf","addLineStrings","addLineString","mergeLineStrings","lineString1","lineString1Index","lineString2","lineString2Index","mergedLineString","concat","removeLastLineString","pop","removeFirstLineString","shift","addLineStringAtIndex","removeLineString","removeLineStringAtIndex","removeAllLineStrings","removeAllMarkers","updateUndo","JSON","parse","stringify","updateRedo","popRedo","popUndo","clearRedo","clearUndo","setToLastUndo","toggleSnap","toggleRemovalMode","disableRemovalMode","setPlanMode","setRoutePreference","async","getMarkersAndLineStringsFrom","split","toLowerCase","getFileExtension","fileContent","Promise","resolve","reject","onerror","readAsText","readFileContent","test","isGPX","MarkersAndLineStrings","fromGPX","isKML","fromKML","undefined","isGeoJSON","fromGeoJson","isTCX","fromTCX","Error","constructor","static","gpxString","gpx","GpxParser","geoJson","toGeoJSON","kmlString","xml","DOMParser","parseFromString","tcxString","tcxDoc","geojson","from","querySelectorAll","trackpoint","parseFloat","querySelector","textContent","elevationElement","trim","properties","geoJsonString","feature","lineStringFeatures","all","coords","coordsWithUpdatedElevation","getElevationData","c","h","elevation","MultiRouteError","fromLineStrings","createLineStringAndMakersFrom","lineStringFeature","lineStringFeatureWithElevation","startCoord","floor","endCoord","message","super","functionRefs","actions","store","plannedTrail","planned_to_hike_on","client_id","markerFeatures","locallyStoredState","localStorage","getItem","jsonFromLocalStorage","confirm","replaceState","removeItem","setMapLatLonFromParams","params","URLSearchParams","search","has","flyTo","gridRef","GridRefUtils","measurementPreference","addControl","unit","mapbox","maxWidth","cache","IndexedDBCache","throttledMouseMove","throttle","convert","currentZoom","getZoom","getElevation","latLonForPlannedTrail","url","startPoint","URL","searchParams","isNaN","getLatLonFromURLForPlannedTrail","setMapBounds","newBbox","turfBbox","bounds","fitBounds","lastUndoMarkers","lastUndoLineStrings","lastRedoMarkers","lastRedoLineStrings","source","toGeoJSONSourceRaw","addSource","layer","isFirst","addLayer","markerIndex","removeMarkerFromMap","getLayer","removeLayer","getSource","removeSource","createMarkerLayer","paint","addListenersForMarker","canvas","getCanvasContainer","onMove","setData","onUp","off","endClickTime","startClickTime","enterStyleMarker","setPaintProperty","leaveStyleMarker","mouseDown","once","touchStart","points","_ref","polylineDetails","startMarker","endMarker","provisionalLine","snapPoints","then","realLine","catch","hiikerElevation","_ref2","_ref3","idx","ls","lineStringProperties","_ref4","indexes","index1","_ref5","stringId","arrowLayer","firstMarkerLayer","lineLayer","toGeoJsonSource","targetLayerId","removeLineStringFromMap","createLineLayer","addPolylineArrowLayerToMap","arrowLayerDetails","loadImage","hasImage","addImage","visibility","rootState","isClickOnWaypointHelper","queryRenderedFeatures","includes","isClickOnPOIHelper","polylineFeatures","linestringFeature","shouldRedirect","arguments","photosToUpload","titleToSet","toLocaleString","variables","lineStringsAttributes","markersAttributes","imagesAttributes","response","graphClient","UpdatePtv2PlannedTrail","updatePtv2PlannedTrail","errors","CreatePtv2PlannedTrail","createPtv2PlannedTrail","startMarkerGeometry","markersAndLineStrings","bbox","importRouteMultipleOptionsDialogShow","polylineInsertPoint","polylineId","polylineIndex","parseInt","polylineFromState","linestring","markerPoint","nearest","nearestPointOnLine","lineSplit","coords1","lineStringFeature1","coords1ToGetElev","coords2","lineStringFeature2","coords2ToGetElev","shouldBeSnap","firstCoordinate","lastCoordinate","reverse","fileName","firebase_user_id","firebase","child","put","fileToCheck","destroyImage","setPlannedToHikeOn","localTimeValue","utcString","utc","Vue","onMarkerMoveCalled","Vuex","modules","mapStyles","MapStylesDialogModule","namespaced","WaypointDialogModule","MapDataTrailsModule","mapDataPOIs","MapDataPOIsModule","subscribe","mutation","stateCopy","MapStylesState","setItem","vueTopprogress","vue","render","App","setStyle","HiikerMapStyle","styleUrl","mapClicked","mapMoved","bus","$emit","createGeoLocate","mapStyleLoaded","$on","beforeDestroy","$mount","bugsnag","activatedPois","poiList","POIUtility","sort","a","b","prettyName","localeCompare","SET_ACTIVATED_POIS","pois","layerName","ADD_ACTIVATED_POI","some","p","REMOVE_ACTIVATED_POI","REMOTE_ALL_POIS","initActivePois","passedPoi","warn","getStyle","layers","addAllPois","addParkPois","refreshActivePois","activateClickHandler","showPoi","databaseClassName","viewCreated","_ref6","beforeViewDestroyed","$off","togglePoi","_ref7","active","addPoiLayers","_ref8","tiles","mvtUrl","minzoom","maxzoom","promoteId","puckIconName","removePoiLayers","_ref9","isPoiActive","activeSources","trailOptions","get_user_recordings","get_user_planned_trails","get_user_completed_trails","sourceColors","SET_ACTIVE_SOURCES","sources","ADD_ACTIVE_SOURCE","REMOVE_ACTIVE_SOURCE","s","darkenColor","factor","match","max","min","padStart","join","initActiveSources","validSources","keys","urlParams","useUrlOverrides","urlActiveSources","paramValue","filtered","forceOneSource","toggleTrail","toggleLineSource","borderLayerId","pointLayerId","darkerColor","baseUrl","origin","minZoomForSource","addFeatureFromClick","ptv2_planned_trail_id","line_stringable_id","trail_id","getTrail","graph_client","GetTrail","trailFeatureCollection","trail","multilinestring","trailCardDataTrail","finally","getPtv2PlannedTrail","GetPtv2PlannedTrail","plannedTrailFeatureCollection","ptv2PlannedTrailById","geojsonFeatureCollection","trailCardDataPtv2PlannedTrail","getRecording","_ref10","GetRecordedTrailByRecordingId","recordingFeatureCollection","recording","trailCardDataRecording","removeLineLayer","addLineLayToMap","_ref11","geoJsonFeatureCollection","refreshLineSources","_ref12","initMapClickHandler","_ref13","trailCardClearData","featureProperties","isSourceActive","gql","GetPoisByString","GetPOIsPopularByTrail","GetPOIByID","poiDetailsToWaypointDescriptionHelper","stringToReturn","entries","LocalTime","searchQuery","filteredPoiList","searchTerm","mapActions","getPublicImageIcon","getColor","VectorDialog","POIs","onModalHidden","poiType","poiId","getPOI","beforeUnmount","serpData","showLoader","showPOIDetailDialog","val","addToWaypoints","getPhotoUrl","photo","photo_reference","phoneNumber","international_phone_number","website","email","toFixed","coordsLink","serpResult","serpName","serpRating","rating","serpTotalRatings","user_ratings_total","serpPhone","formatted_phone_number","serpWebsite","serpAddress","formatted_address","serpPhotos","photos","serpReviews","reviews","n","rev","rIdx","author_name","relative_time_description","sourceColor","dialog","photoUrls","photos_urls","accomPois","amenityPois","activePOIs","showPOIDialog","showAccoms","checked","props","Boolean","required","default","disableAddingWaypointsMode","allWaypointTypes","selectedWaypoint","newValue","waypointPhotos","backClicked","cancel","image","chooseGroupClicked","WaypointOptionsDialogPages","$set","waypointType","mapContainsWaypoints","handleGPXImportFile","addNewWaypoint","clickViewAllWaypoints","clickedShowWaypoints","viewWaypointGroupsClicked","gridRefUtils","showCopied","addEventListener","stopPropagation","selectedWaypointShareUrl","prettyType","preferenceLonLat","wktPointToLatLng","createdAt","updatedAt","userId","isUsersWaypoint","formattedDate","date","year","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","openOnGoogleStreetView","open","editWaypointDetails","deleteWaypoint","navigator","clipboard","writeText","err","getDirectionsToWaypoint","googleMapsUrl","openGoogleMaps","planTrailToWaypoint","printWaypoint","waypointGroupClicked","waypointGroup","allUserWaypointGroups","obfuscatedId","newWaypointGroupName","waypointGroupIncludesWaypoint","waypoint","updateWaypointGroup","waypointIds","createWaypointGroup","_k","keyCode","selectedWaypointGroup","uniqueWaypoints","seenIds","Set","add","showClicked","printGroup","exportGroupToGPX","deleteWaypointGroup","runSearch","waypointsForList","showWaypointOnMap","exportWaypointToGPX","toLocaleDateString","toLocaleTimeString","WaypointDialogWaypoints","WaypointDialogWaypointGroupWaypoints","WaypointDialogWaypointGroups","WaypointDialogEditWaypointDetails","WaypointDialogViewWaypointDetails","WaypointDialogOptions","WaypointDialogWaypointGroupSelection","topPageIsWaypointOptions","topPageIsWaypointViewDetails","topPageIsWaypointEditDetails","topPageIsWaypoints","topPageIsWaypointGroups","topPageIsWaypointGroupsWaypoints","topPageIsWaypointGroupSelection"],"sourceRoot":""}