{"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                  &#9733;\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                  &#9733;\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                        &#9733;\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\">&middot;</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\">&middot;</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":""}