FitTrackee/fittrackee/dist/static/js/workouts.833bfd44.js.map

1 line
268 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/views/workouts/WorkoutsView.vue","webpack:///./src/components/Workouts/WorkoutsFilters.vue","webpack:///./src/components/Workouts/WorkoutsFilters.vue?161a","webpack:///./src/components/Workouts/WorkoutsFilters.vue?45da","webpack:///./src/components/Workouts/WorkoutsList.vue","webpack:///./src/components/Workouts/WorkoutsList.vue?4e15","webpack:///./src/components/Workouts/WorkoutsList.vue?3ddd","webpack:///./src/views/workouts/WorkoutsView.vue?afea","webpack:///./src/views/workouts/WorkoutsView.vue?c9bc","webpack:///./src/components/Workout/WorkoutDetail/WorkoutMap.vue?015a","webpack:///./src/views/workouts/Workout.vue","webpack:///./src/components/Workout/WorkoutChart.vue","webpack:///./src/components/Workout/WorkoutChart.vue?936b","webpack:///./src/components/Workout/WorkoutChart.vue?99f8","webpack:///./src/components/Workout/WorkoutDetail/index.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?d900","webpack:///./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?5151","webpack:///./src/components/Workout/WorkoutDetail/WorkoutData.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutRecord.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?eef2","webpack:///./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?2ca7","webpack:///./src/components/Workout/WorkoutDetail/WorkoutWeather.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?b55e","webpack:///./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?d419","webpack:///./src/components/Workout/WorkoutDetail/WorkoutData.vue?75c9","webpack:///./src/components/Workout/WorkoutDetail/WorkoutData.vue?3d6c","webpack:///./src/components/Workout/WorkoutDetail/WorkoutMap.vue","webpack:///./src/components/Workout/WorkoutDetail/WorkoutMap.vue?ffa0","webpack:///./src/components/Workout/WorkoutDetail/WorkoutMap.vue?0f49","webpack:///./src/components/Workout/WorkoutDetail/index.vue?18b8","webpack:///./src/components/Workout/WorkoutDetail/index.vue?7f4b","webpack:///./src/components/Workout/WorkoutNotes.vue","webpack:///./src/components/Workout/WorkoutNotes.vue?9d7d","webpack:///./src/components/Workout/WorkoutNotes.vue?fea4","webpack:///./src/components/Workout/WorkoutSegments.vue","webpack:///./src/components/Workout/WorkoutSegments.vue?0d6f","webpack:///./src/components/Workout/WorkoutSegments.vue?12ef","webpack:///./src/views/workouts/Workout.vue?bcf8","webpack:///./src/views/workouts/Workout.vue?05c5","webpack:///./src/components/Workout/WorkoutNotes.vue?bf09","webpack:///./src/components/Workout/WorkoutChart.vue?0c03","webpack:///./src/components/Workout/WorkoutDetail/WorkoutCardTitle.vue?ecb7","webpack:///./src/components/Workouts/WorkoutsList.vue?2e9d","webpack:///./node_modules/@vue-leaflet/vue-leaflet/dist/vue-leaflet.esm.js","webpack:///./src/views/workouts/Workout.vue?5e32","webpack:///./src/components/Workout/WorkoutEdition.vue","webpack:///./src/components/Workout/WorkoutEdition.vue?6283","webpack:///./src/components/Workout/WorkoutEdition.vue?0b48","webpack:///./src/components/Workout/WorkoutSegments.vue?6726","webpack:///./src/components/Workout/WorkoutEdition.vue?01b9","webpack:///./src/components/Workout/WorkoutDetail/WorkoutWeather.vue?cd23","webpack:///./src/views/workouts/AddWorkout.vue","webpack:///./src/views/workouts/AddWorkout.vue?8f86","webpack:///./src/views/workouts/AddWorkout.vue?6832","webpack:///./src/views/workouts/EditWorkout.vue","webpack:///./src/views/workouts/EditWorkout.vue?313d","webpack:///./src/views/workouts/EditWorkout.vue?5a5b","webpack:///./src/components/Workout/WorkoutDetail/WorkoutRecord.vue?54aa","webpack:///./src/components/Workout/WorkoutDetail/WorkoutData.vue?f67b","webpack:///./src/components/Workout/WorkoutDetail/index.vue?61ea","webpack:///./src/views/workouts/WorkoutsView.vue?37a7","webpack:///./node_modules/@tmcw/togeojson/dist/togeojson.umd.js","webpack:///./src/views/workouts/AddWorkout.vue?0528","webpack:///./src/components/Workouts/WorkoutsFilters.vue?7d88"],"names":["id","class","authUser","username","hiddenFilters","sports","translatedSports","updateParams","toggleFilters","aria-hidden","$t","user","params","value","name","type","handleFilterChange","filter","s","sport","key","label","min","step","pattern","placeholder","onFilter","props","Object","required","emits","setup","emit","t","event","target","render","__scopeId","workouts","length","capitalize","workout","title","sport-label","to","with_gpx","display-hover","format","Number","distance","toFixed","moving","ave_speed","max_speed","moreWorkoutsExist","loadMoreWorkouts","components","NoWorkouts","StaticMap","store","useStore","getters","GETTERS","USER_WORKOUTS","per_page","page","previous_workout","loadWorkouts","dispatch","ACTIONS","GET_USER_WORKOUTS","GET_MORE_USER_WORKOUTS","getDateWithTZ","WorkoutsFilters","WorkoutsList","AUTH_USER_PROFILE","SPORTS","filters","workoutData","markerCoordinates","displaySegment","updateCoordinates","segments","notes","loading","content","checked","displayDistance","updateDisplayDistance","emitEmptyCoordinates","LineChart","datasets","chartData","labels","distance_labels","duration_labels","JSON","parse","stringify","speed","elevation","coordinates","options","responsive","maintainAspectRatio","animation","layout","padding","top","scales","grid","drawOnChartArea","ticks","count","callback","formatDuration","bounds","display","text","position","beginAtZero","elements","point","pointStyle","pointRadius","plugins","datalabels","tooltip","interaction","intersect","mode","callbacks","context","dataset","formattedValue","yAxisID","tooltipItems","emitCoordinates","dataIndex","replace","duration","Date","toISOString","substr","latitude","longitude","lineChartProps","displayModal","message","deleteWorkout","workoutObject","workoutId","updateDisplayModal","previousUrl","segmentId","workoutDate","workoutTime","nextUrl","record_type","withPause","pauses","aveSpeed","maxSpeed","maxAlt","minAlt","src","alt","ascent","descent","String","weatherStart","weatherEnd","icon","temperature","humidity","wind","WorkoutRecord","WorkoutWeather","geoJson","jsonData","center","zoom","ref","fitBounds","url","getApiUrl","attribution","appConfig","map_attribution","geojson","lat-lng","LGeoJson","LMap","LMarker","LTileLayer","getGeoJson","gpxContent","DOMParser","parseFromString","e","console","error","getCenter","workoutMap","leafletObject","APP_CONFIG","gpx","WorkoutCardTitle","WorkoutData","WorkoutMap","Boolean","route","getWorkoutObjectUrl","next_workout","getWorkoutObject","segment","urls","workout_date","timezone","max_alt","min_alt","records","segment_id","weather_end","weather_start","workout_time","DELETE_WORKOUT","newSegmentId","find","sport_id","index","NotFound","WorkoutChart","WorkoutDetail","WorkoutNotes","WorkoutSegments","payload","GET_WORKOUT_DATA","WORKOUT_DATA","newWorkoutId","commit","MUTATIONS","EMPTY_WORKOUT","debounce","fn","time","timeout","args","this","clearTimeout","setTimeout","apply","capitalizeFirstLetter","string","charAt","toUpperCase","slice","propsBinder","methods","leafletElement","setMethodName","newVal","oldVal","remapEvents","contextAttrs","result","attrName","startsWith","eventName","toLocaleLowerCase","resetWebpackIcon","async","Icon","modules","Promise","all","Default","prototype","_getIconUrl","mergeOptions","iconRetinaUrl","default","iconUrl","shadowUrl","provideLeafletWrapper","methodName","wrapped","warn","wrapper","updateLeafletWrapper","leafletMethod","WINDOW_OR_GLOBAL","self","global","undefined","GLOBAL_LEAFLET_OPT","props$1","pane","custom","layerType","visible","setup$1","leafletRef","addLayer","removeLayer","componentOptions","componentMethods","addThisLayer","removeThisLayer","val","old","attributionControl","$parent","removeAttribution","addAttribution","isVisible","bindPopup","bindTooltip","getTooltip","unbindTooltip","popup","getPopup","unbindPopup","ready","slots","style","props$2","interactive","bubblingMouseEvents","props$3","stroke","color","weight","opacity","lineCap","lineJoin","dashArray","dashOffset","fill","fillColor","fillOpacity","fillRule","className","props$4","latLng","Array","radius","props$6","setup$6","setPosition","remove","render$1","props$b","setup$b","layerOptions","layerMethods","layer","props$d","setup$d","layerGroupMethods","clearLayers","addData","toGeoJSON","getBounds","script$8","useGlobalLeaflet","geoJSON","DomEvent","L","listeners","attrs","on","$slots","props$e","zIndex","tileSize","noWrap","minZoom","maxZoom","setup$e","props$f","iconSize","iconAnchor","popupAnchor","tooltipAnchor","shadowRetinaUrl","shadowSize","shadowAnchor","bgPos","script$d","maxBounds","paddingBottomRight","paddingTopLeft","worldCopyJump","crs","maxBoundsViscosity","inertia","inertiaDeceleration","inertiaMaxSpeed","easeLinearity","zoomAnimation","zoomAnimationThreshold","fadeAnimation","markerZoomAnimation","noBlockingAnimations","root","blueprint","layersToAdd","layersInControl","registerControl","registerLayerControl","eventHandlers","getZoom","l","updateVisibleProp","map","CRS","latLngBounds","beforeMapMount","optionsCrs","EPSG3857","layerControl","push","exist","_leaflet_id","lControlLayer","forEach","lControl","addControl","setZoom","animate","prevBounds","newBounds","isValid","oldBounds","lastSetBounds","boundsChanged","equals","fitBoundsOptions","newCenter","oldCenter","lastSetCenter","lat","lng","panTo","moveEndHandler","overlayAddHandler","overlayRemoveHandler","width","height","props$h","draggable","zIndexOffset","setup$g","dragging","enable","disable","latlng","oldLatLng","getLatLng","setLatLng","script$e","getElement","html","innerHTML","newIcon","setIcon","marker","latLngSync","props$i","latLngs","smoothFactor","noClip","props$j","props$k","props$n","tms","subdomains","detectRetina","setup$m","gridLayerOptions","gridLayerMethods","script$j","tileLayer","for","isCreation","updateWorkout","withGpx","disabled","updateWithGpx","workoutDataObject","is_active","accept","updateFile","fileSizeLimit","gpx_limit_import","zipSizeLimit","workoutDurationHour","workoutDurationMinutes","workoutDurationSeconds","workoutDistance","input","updateNotes","errorMessages","onCancel","router","formatWorkoutForm","max_single_file_size","max_zip_file_size","ERROR_MESSAGES","workoutForm","gpxFile","files","workoutDateTime","split","formatPayload","EDIT_WORKOUT","data","ADD_WORKOUT_WITHOUT_GPX","errorMessage","SET_ERROR_MESSAGES","file","ADD_WORKOUT","go","newWorkout","previousWorkout","EMPTY_ERROR_MESSAGES","WorkoutEdition","exports","normalize","textContent","n","getElementsByTagName","o","r","parseFloat","i","isNaN","getElementsByTagNameNS","parentNode","tagName","links","assign","href","getAttribute","a","extendedValues","c","properties","_gpxType","geometry","line","times","g","coordinateProperties","entries","u","m","p","h","heartRate","extensions","f","extendedProperties","heartRates","d","heart","y","N","x","T","b","charCodeAt","S","k","A","xml","attributes","childNodes","nodeName","nodeValue","trim","B","E","parseInt","F","P","coords","v","geoms","coordTimes","address","styleUrl","styleHash","styleMapHash","normal","description","timespan","begin","end","timestamp","visibility","geometries","M","toString","features","from","gpxGen","kml","kmlGen","tcx","tcxGen","defineProperty"],"mappings":"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","file":"static/js/workouts.833bfd44.js","sourcesContent":["<template>\n <div id=\"workouts\" v-if=\"authUser.username\">\n <div class=\"container workouts-container\">\n <div class=\"filters-container\" :class=\"{ hidden: hiddenFilters }\">\n <WorkoutsFilters\n :sports=\"translatedSports\"\n :authUser=\"authUser\"\n @filter=\"updateParams\"\n />\n </div>\n <div class=\"display-filters\">\n <div @click=\"toggleFilters\">\n <i\n :class=\"`fa fa-caret-${hiddenFilters ? 'down' : 'up'}`\"\n aria-hidden=\"true\"\n />\n <span>\n {{ $t(`workouts.${hiddenFilters ? 'DISPLAY' : 'HIDE'}_FILTERS`) }}\n </span>\n </div>\n </div>\n <div class=\"list-container\">\n <WorkoutsList\n :user=\"authUser\"\n :params=\"params\"\n :sports=\"translatedSports\"\n />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { ComputedRef, Ref, computed, defineComponent, ref } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import WorkoutsFilters from '@/components/Workouts/WorkoutsFilters.vue'\n import WorkoutsList from '@/components/Workouts/WorkoutsList.vue'\n import { USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutsView',\n components: {\n WorkoutsFilters,\n WorkoutsList,\n },\n setup() {\n const { t } = useI18n()\n const store = useStore()\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef<ITranslatedSport[]> = computed(() =>\n translateSports(sports.value, t)\n )\n const params: Ref<Record<string, string>> = ref({})\n const hiddenFilters = ref(true)\n\n function updateParams(filters: Record<string, string>) {\n params.value = filters\n hiddenFilters.value = true\n }\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\n return {\n authUser,\n hiddenFilters,\n params,\n translatedSports,\n toggleFilters,\n updateParams,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workouts {\n height: 100%;\n\n .workouts-container {\n display: flex;\n flex-direction: row;\n @media screen and (max-width: $medium-limit) {\n flex-direction: column;\n }\n\n .filters-container,\n .list-container {\n display: flex;\n flex-direction: column;\n }\n\n .filters-container {\n width: 25%;\n @media screen and (max-width: $medium-limit) {\n width: 100%;\n\n @media screen and (max-width: $small-limit) {\n &.hidden {\n display: none;\n }\n }\n }\n }\n\n .display-filters {\n display: none;\n font-size: 0.8em;\n padding: 0 $default-padding * 2;\n\n span {\n cursor: pointer;\n font-weight: bold;\n padding-left: $default-padding * 0.5;\n }\n .fa {\n cursor: pointer;\n }\n\n @media screen and (max-width: $small-limit) {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n }\n\n .list-container {\n width: 75%;\n @media screen and (max-width: $medium-limit) {\n width: 100%;\n }\n }\n }\n }\n</style>\n","<template>\n <div class=\"workouts-filters\">\n <div class=\"box\">\n <div class=\"form\">\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.FROM') }}: </label>\n <input name=\"from\" type=\"date\" @change=\"handleFilterChange\" />\n </div>\n <div class=\"form-item\">\n <label> {{ $t('workouts.TO') }}: </label>\n <input name=\"to\" type=\"date\" @change=\"handleFilterChange\" />\n </div>\n </div>\n\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.SPORT', 1) }}:</label>\n <select name=\"sport_id\" @change=\"handleFilterChange\">\n <option value=\"\" />\n <option\n v-for=\"sport in translatedSports.filter((s) =>\n authUser.sports_list.includes(s.id)\n )\"\n :value=\"sport.id\"\n :key=\"sport.id\"\n >\n {{ sport.label }}\n </option>\n </select>\n </div>\n </div>\n\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.DISTANCE') }} (km): </label>\n <div class=\"form-inputs-group\">\n <input\n name=\"distance_from\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n @change=\"handleFilterChange\"\n />\n <span>{{ $t('workouts.TO') }}</span>\n <input\n name=\"distance_to\"\n type=\"number\"\n min=\"0\"\n step=\"1\"\n @change=\"handleFilterChange\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.DURATION') }} (km): </label>\n <div class=\"form-inputs-group\">\n <input\n name=\"duration_from\"\n @change=\"handleFilterChange\"\n pattern=\"^([0-9]*[0-9]):([0-5][0-9])$\"\n placeholder=\"hh:mm\"\n type=\"text\"\n />\n <span>{{ $t('workouts.TO') }}</span>\n <input\n name=\"duration_to\"\n @change=\"handleFilterChange\"\n pattern=\"^([0-9]*[0-9]):([0-5][0-9])$\"\n placeholder=\"hh:mm\"\n type=\"text\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.AVE_SPEED') }} (km): </label>\n <div class=\"form-inputs-group\">\n <input\n min=\"0\"\n name=\"ave_speed_from\"\n @change=\"handleFilterChange\"\n step=\"1\"\n type=\"number\"\n />\n <span>{{ $t('workouts.TO') }}</span>\n <input\n min=\"0\"\n name=\"ave_speed_to\"\n @change=\"handleFilterChange\"\n step=\"1\"\n type=\"number\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"form-items-group\">\n <div class=\"form-item\">\n <label> {{ $t('workouts.MAX_SPEED') }} (km): </label>\n\n <div class=\"form-inputs-group\">\n <input\n min=\"0\"\n name=\"max_speed_from\"\n @change=\"handleFilterChange\"\n step=\"1\"\n type=\"number\"\n />\n <span>{{ $t('workouts.TO') }}</span>\n <input\n min=\"0\"\n name=\"max_speed_to\"\n @change=\"handleFilterChange\"\n step=\"1\"\n type=\"number\"\n />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"form-button\">\n <button class=\"confirm\" @click=\"onFilter\">\n {{ $t('buttons.FILTER') }}\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, ComputedRef, defineComponent, PropType } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutsFilters',\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n required: true,\n },\n },\n emits: ['filter', 'filtersUpdate'],\n setup(props, { emit }) {\n const { t } = useI18n()\n const translatedSports: ComputedRef<ISport[]> = computed(() =>\n translateSports(props.sports, t)\n )\n const params: Record<string, string> = {}\n\n function handleFilterChange(event: Event & { target: HTMLInputElement }) {\n if (event.target.value === '') {\n delete params[event.target.name]\n } else {\n params[event.target.name] = event.target.value\n }\n }\n function onFilter() {\n emit('filter', { ...params })\n }\n\n return { translatedSports, onFilter, handleFilterChange }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base.scss';\n\n .workouts-filters {\n .form {\n display: flex;\n flex-direction: column;\n padding-top: 0;\n\n .form-items-group {\n display: flex;\n flex-direction: column;\n padding: $default-padding * 0.5;\n\n .form-item {\n display: flex;\n flex-direction: column;\n\n .form-inputs-group {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n\n input {\n width: 34%;\n }\n span {\n padding: $default-padding * 0.5;\n }\n }\n\n input {\n height: 16px;\n }\n\n select {\n height: 36px;\n padding: 0 $default-padding * 0.5;\n }\n }\n }\n }\n\n .form-button {\n display: flex;\n justify-content: center;\n\n button {\n margin: $default-padding * 2 $default-padding * 0.5 $default-padding\n $default-padding * 0.5;\n width: 100%;\n }\n }\n\n @media screen and (max-width: $medium-limit) {\n .form {\n flex-direction: row;\n padding-top: $default-padding * 0.5;\n\n .form-items-group {\n padding: 0 $default-padding * 0.5;\n height: 100%;\n\n .form-item {\n label {\n font-size: 0.9em;\n }\n\n .form-inputs-group {\n flex-direction: column;\n justify-content: normal;\n padding: 0;\n\n input {\n width: 75%;\n }\n }\n }\n }\n }\n\n .form-button {\n button {\n margin: $default-padding $default-padding * 0.5;\n width: 100%;\n }\n }\n }\n @media screen and (max-width: $small-limit) {\n .form {\n flex-direction: column;\n padding-top: 0;\n\n .form-items-group {\n padding: $default-padding * 0.5;\n\n .form-item {\n label {\n font-size: 1em;\n }\n\n .form-inputs-group {\n flex-direction: row;\n justify-content: space-around;\n align-items: center;\n input {\n width: 50%;\n }\n span {\n padding: $default-padding * 0.5;\n }\n }\n }\n }\n }\n .form-button {\n button {\n margin: $default-padding $default-padding * 0.5;\n }\n }\n }\n }\n</style>\n","\n import { computed, ComputedRef, defineComponent, PropType } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutsFilters',\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n required: true,\n },\n },\n emits: ['filter', 'filtersUpdate'],\n setup(props, { emit }) {\n const { t } = useI18n()\n const translatedSports: ComputedRef<ISport[]> = computed(() =>\n translateSports(props.sports, t)\n )\n const params: Record<string, string> = {}\n\n function handleFilterChange(event: Event & { target: HTMLInputElement }) {\n if (event.target.value === '') {\n delete params[event.target.name]\n } else {\n params[event.target.name] = event.target.value\n }\n }\n function onFilter() {\n emit('filter', { ...params })\n }\n\n return { translatedSports, onFilter, handleFilterChange }\n },\n })\n","import { render } from \"./WorkoutsFilters.vue?vue&type=template&id=6d15726f&scoped=true\"\nimport script from \"./WorkoutsFilters.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutsFilters.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutsFilters.vue?vue&type=style&index=0&id=6d15726f&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6d15726f\"\n\nexport default script","<template>\n <div class=\"workouts-list\">\n <div class=\"box\" :class=\"{ 'empty-table': workouts.length === 0 }\">\n <div class=\"workouts-table responsive-table\">\n <table>\n <thead>\n <tr>\n <th class=\"sport-col\" />\n <th>{{ capitalize($t('workouts.WORKOUT', 1)) }}</th>\n <th>{{ capitalize($t('workouts.DATE')) }}</th>\n <th>{{ capitalize($t('workouts.DISTANCE')) }}</th>\n <th>{{ capitalize($t('workouts.DURATION')) }}</th>\n <th>{{ capitalize($t('workouts.AVE_SPEED')) }}</th>\n <th>{{ capitalize($t('workouts.MAX_SPEED')) }}</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"workout in workouts\" :key=\"workout.id\">\n <td class=\"sport-col\">\n <span class=\"cell-heading\">\n {{ $t('workouts.SPORT', 1) }}\n </span>\n <SportImage\n :title=\"\n sports.filter((s) => s.id === workout.sport_id)[0]\n .translatedLabel\n \"\n :sport-label=\"\n sports.filter((s) => s.id === workout.sport_id)[0].label\n \"\n ></SportImage>\n </td>\n <td class=\"workout-title\">\n <span class=\"cell-heading\">\n {{ capitalize($t('workouts.WORKOUT', 1)) }}\n </span>\n <router-link\n class=\"nav-item\"\n :to=\"{ name: 'Workout', params: { workoutId: workout.id } }\"\n >\n <i\n v-if=\"workout.with_gpx\"\n class=\"fa fa-map-o\"\n aria-hidden=\"true\"\n />\n {{ workout.title }}\n </router-link>\n <StaticMap\n v-if=\"workout.with_gpx\"\n :workout=\"workout\"\n :display-hover=\"true\"\n />\n </td>\n <td>\n <span class=\"cell-heading\">\n {{ $t('workouts.DATE') }}\n </span>\n {{\n format(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'dd/MM/yyyy HH:mm'\n )\n }}\n </td>\n <td class=\"text-right\">\n <span class=\"cell-heading\">\n {{ $t('workouts.DISTANCE') }}\n </span>\n {{ Number(workout.distance).toFixed(2) }} km\n </td>\n <td class=\"text-right\">\n <span class=\"cell-heading\">\n {{ $t('workouts.DURATION') }}\n </span>\n {{ workout.moving }}\n </td>\n <td class=\"text-right\">\n <span class=\"cell-heading\">\n {{ $t('workouts.AVE_SPEED') }}\n </span>\n {{ workout.ave_speed }} km/h\n </td>\n <td class=\"text-right\">\n <span class=\"cell-heading\">\n {{ $t('workouts.MAX_SPEED') }}\n </span>\n {{ workout.max_speed }} km/h\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <NoWorkouts v-if=\"workouts.length === 0\" />\n <div v-if=\"moreWorkoutsExist\" class=\"more-workouts\">\n <button @click=\"loadMoreWorkouts\">\n {{ $t('workouts.LOAD_MORE_WORKOUT') }}\n </button>\n </div>\n <div id=\"bottom\" />\n </div>\n</template>\n\n<script lang=\"ts\">\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n computed,\n defineComponent,\n ref,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getDateWithTZ } from '@/utils/dates'\n\n export default defineComponent({\n name: 'WorkoutsList',\n components: {\n NoWorkouts,\n StaticMap,\n },\n props: {\n params: {\n type: Object as PropType<Record<string, string>>,\n required: true,\n },\n user: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n sports: {\n type: Object as PropType<ITranslatedSport[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const workouts: ComputedRef<IWorkout[]> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const per_page = 10\n const page = ref(1)\n const moreWorkoutsExist: ComputedRef<boolean> = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n onBeforeMount(() => {\n loadWorkouts()\n })\n\n function loadWorkouts() {\n page.value = 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS, {\n page: page.value,\n per_page,\n ...props.params,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_USER_WORKOUTS, {\n page: page.value,\n per_page,\n ...props.params,\n })\n }\n\n watch(\n () => props.params,\n async () => {\n loadWorkouts()\n }\n )\n\n return {\n moreWorkoutsExist,\n workouts,\n capitalize,\n format,\n getDateWithTZ,\n loadMoreWorkouts,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base.scss';\n .workouts-list {\n display: flex;\n flex-direction: column;\n margin-bottom: 50px;\n width: 100%;\n\n .box {\n @media screen and (max-width: $small-limit) {\n &.empty-table {\n display: none;\n }\n }\n .workouts-table {\n .sport-col {\n padding-right: 0;\n }\n .workout-title {\n max-width: 90px;\n position: relative;\n .fa-map-o {\n font-size: 0.75em;\n }\n .static-map {\n display: none;\n box-shadow: 3px 3px 3px 1px lightgrey;\n }\n }\n .workout-title:hover .static-map {\n display: block;\n }\n .sport-img {\n height: 20px;\n width: 20px;\n }\n @media screen and (max-width: $small-limit) {\n .sport-col {\n display: flex;\n justify-content: center;\n padding: $default-padding;\n }\n .workout-title {\n max-width: initial;\n }\n }\n }\n }\n\n .more-workouts {\n display: flex;\n justify-content: center;\n padding: $default-padding;\n }\n }\n</style>\n","\n import { format } from 'date-fns'\n import {\n ComputedRef,\n PropType,\n computed,\n defineComponent,\n ref,\n watch,\n capitalize,\n onBeforeMount,\n } from 'vue'\n\n import StaticMap from '@/components/Common/StaticMap.vue'\n import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ITranslatedSport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getDateWithTZ } from '@/utils/dates'\n\n export default defineComponent({\n name: 'WorkoutsList',\n components: {\n NoWorkouts,\n StaticMap,\n },\n props: {\n params: {\n type: Object as PropType<Record<string, string>>,\n required: true,\n },\n user: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n sports: {\n type: Object as PropType<ITranslatedSport[]>,\n },\n },\n setup(props) {\n const store = useStore()\n const workouts: ComputedRef<IWorkout[]> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]\n )\n const per_page = 10\n const page = ref(1)\n const moreWorkoutsExist: ComputedRef<boolean> = computed(() =>\n workouts.value.length > 0\n ? workouts.value[workouts.value.length - 1].previous_workout !== null\n : false\n )\n\n onBeforeMount(() => {\n loadWorkouts()\n })\n\n function loadWorkouts() {\n page.value = 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_USER_WORKOUTS, {\n page: page.value,\n per_page,\n ...props.params,\n })\n }\n function loadMoreWorkouts() {\n page.value += 1\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_MORE_USER_WORKOUTS, {\n page: page.value,\n per_page,\n ...props.params,\n })\n }\n\n watch(\n () => props.params,\n async () => {\n loadWorkouts()\n }\n )\n\n return {\n moreWorkoutsExist,\n workouts,\n capitalize,\n format,\n getDateWithTZ,\n loadMoreWorkouts,\n }\n },\n })\n","import { render } from \"./WorkoutsList.vue?vue&type=template&id=d190dd62&scoped=true\"\nimport script from \"./WorkoutsList.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutsList.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutsList.vue?vue&type=style&index=0&id=d190dd62&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-d190dd62\"\n\nexport default script","\n import { ComputedRef, Ref, computed, defineComponent, ref } from 'vue'\n import { useI18n } from 'vue-i18n'\n\n import WorkoutsFilters from '@/components/Workouts/WorkoutsFilters.vue'\n import WorkoutsList from '@/components/Workouts/WorkoutsList.vue'\n import { USER_STORE, SPORTS_STORE } from '@/store/constants'\n import { ISport, ITranslatedSport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { useStore } from '@/use/useStore'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutsView',\n components: {\n WorkoutsFilters,\n WorkoutsList,\n },\n setup() {\n const { t } = useI18n()\n const store = useStore()\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const translatedSports: ComputedRef<ITranslatedSport[]> = computed(() =>\n translateSports(sports.value, t)\n )\n const params: Ref<Record<string, string>> = ref({})\n const hiddenFilters = ref(true)\n\n function updateParams(filters: Record<string, string>) {\n params.value = filters\n hiddenFilters.value = true\n }\n function toggleFilters() {\n hiddenFilters.value = !hiddenFilters.value\n }\n\n return {\n authUser,\n hiddenFilters,\n params,\n translatedSports,\n toggleFilters,\n updateParams,\n }\n },\n })\n","import { render } from \"./WorkoutsView.vue?vue&type=template&id=499760ae&scoped=true\"\nimport script from \"./WorkoutsView.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutsView.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutsView.vue?vue&type=style&index=0&id=499760ae&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-499760ae\"\n\nexport default script","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutMap.vue?vue&type=style&index=0&id=76f3a2e8&lang=scss&scoped=true\"","<template>\n <div id=\"workout\">\n <div class=\"container\">\n <div class=\"workout-container\" v-if=\"sports.length > 0\">\n <div v-if=\"workoutData.workout.id\">\n <WorkoutDetail\n :workoutData=\"workoutData\"\n :sports=\"sports\"\n :authUser=\"authUser\"\n :markerCoordinates=\"markerCoordinates\"\n :displaySegment=\"displaySegment\"\n />\n <WorkoutChart\n v-if=\"\n workoutData.workout.with_gpx && workoutData.chartData.length > 0\n \"\n :workoutData=\"workoutData\"\n :authUser=\"authUser\"\n :displaySegment=\"displaySegment\"\n @getCoordinates=\"updateCoordinates\"\n />\n <WorkoutSegments\n v-if=\"!displaySegment && workoutData.workout.segments.length > 1\"\n :segments=\"workoutData.workout.segments\"\n />\n <WorkoutNotes\n v-if=\"!displaySegment\"\n :notes=\"workoutData.workout.notes\"\n />\n <div id=\"bottom\" />\n </div>\n <div v-else>\n <NotFound v-if=\"!workoutData.loading\" target=\"WORKOUT\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import {\n ComputedRef,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import WorkoutChart from '@/components/Workout/WorkoutChart.vue'\n import WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutSegments.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'Workout',\n components: {\n NotFound,\n WorkoutChart,\n WorkoutDetail,\n WorkoutNotes,\n WorkoutSegments,\n },\n props: {\n displaySegment: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const route = useRoute()\n const store = useStore()\n\n onBeforeMount(() => {\n const payload: IWorkoutPayload = { workoutId: route.params.workoutId }\n if (props.displaySegment) {\n payload.segmentId = route.params.segmentId\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, payload)\n })\n\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n let markerCoordinates: Ref<TCoordinates> = ref({\n latitude: null,\n longitude: null,\n })\n\n function updateCoordinates(coordinates: TCoordinates) {\n markerCoordinates.value = {\n latitude: coordinates.latitude,\n longitude: coordinates.longitude,\n }\n }\n\n watch(\n () => route.params.workoutId,\n async (newWorkoutId) => {\n if (newWorkoutId) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: newWorkoutId,\n })\n }\n }\n )\n watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (route.params.workoutId) {\n const payload: IWorkoutPayload = {\n workoutId: route.params.workoutId,\n }\n if (newSegmentId) {\n payload.segmentId = newSegmentId\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, payload)\n }\n }\n )\n\n onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n })\n\n return {\n authUser,\n markerCoordinates,\n sports,\n workoutData,\n updateCoordinates,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout {\n display: flex;\n margin-bottom: 45px;\n .container {\n width: 100%;\n padding: 0;\n .workout-container {\n width: 100%;\n }\n .workout-loading {\n height: $app-height;\n width: 100%;\n .loading {\n display: flex;\n align-items: center;\n height: 100%;\n }\n }\n }\n }\n</style>\n","<template>\n <div id=\"workout-chart\">\n <Card>\n <template #title>{{ $t('workouts.ANALYSIS') }} </template>\n <template #content>\n <div class=\"chart-radio\">\n <label>\n <input\n type=\"radio\"\n name=\"distance\"\n :checked=\"displayDistance\"\n @click=\"updateDisplayDistance\"\n />\n {{ $t('workouts.DISTANCE') }}\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"duration\"\n :checked=\"!displayDistance\"\n @click=\"updateDisplayDistance\"\n />\n {{ $t('workouts.DURATION') }}\n </label>\n </div>\n <LineChart\n v-bind=\"lineChartProps\"\n class=\"line-chart\"\n @mouseleave=\"emitEmptyCoordinates\"\n />\n <div class=\"no-data-cleaning\">\n {{ $t('workouts.NO_DATA_CLEANING') }}\n </div>\n </template>\n </Card>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { getDatasets } from '@/utils/workouts'\n\n export default defineComponent({\n name: 'WorkoutChart',\n components: {\n LineChart,\n },\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n required: true,\n },\n },\n emits: ['getCoordinates'],\n setup(props, { emit }) {\n const { t } = useI18n()\n\n let displayDistance = ref(true)\n const datasets: ComputedRef<IWorkoutChartData> = computed(() =>\n getDatasets(props.workoutData.chartData, t)\n )\n let chartData: ComputedRef<ChartData<'line'>> = computed(() => ({\n labels: displayDistance.value\n ? datasets.value.distance_labels\n : datasets.value.duration_labels,\n datasets: JSON.parse(\n JSON.stringify([\n datasets.value.datasets.speed,\n datasets.value.datasets.elevation,\n ])\n ),\n }))\n const coordinates: ComputedRef<TCoordinates[]> = computed(\n () => datasets.value.coordinates\n )\n const options = computed<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: 22,\n },\n },\n scales: {\n [displayDistance.value ? 'xDistance' : 'xDuration']: {\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n count: 10,\n callback: function (value) {\n return displayDistance.value\n ? Number(value).toFixed(2)\n : formatDuration(value)\n },\n },\n type: 'linear',\n bounds: 'data',\n title: {\n display: true,\n text: displayDistance.value\n ? t('workouts.DISTANCE') + ' (km)'\n : t('workouts.DURATION'),\n },\n },\n ySpeed: {\n grid: {\n drawOnChartArea: false,\n },\n position: 'left',\n title: {\n display: true,\n text: t('workouts.SPEED') + ' (km/h)',\n },\n },\n yElevation: {\n beginAtZero: true,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ' (m)',\n },\n },\n },\n elements: {\n point: {\n pointStyle: 'circle',\n pointRadius: 0,\n },\n },\n plugins: {\n datalabels: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: false,\n mode: 'index',\n },\n callbacks: {\n label: function (context) {\n const label = ` ${context.dataset.label}: ${context.formattedValue}`\n return context.dataset.yAxisID === 'yElevation'\n ? label + ' m'\n : label + ' km/h'\n },\n title: function (tooltipItems) {\n if (tooltipItems.length > 0) {\n emitCoordinates(coordinates.value[tooltipItems[0].dataIndex])\n }\n return tooltipItems.length === 0\n ? ''\n : displayDistance.value\n ? `${t('workouts.DISTANCE')}: ${tooltipItems[0].label} km`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n },\n }))\n\n function updateDisplayDistance() {\n displayDistance.value = !displayDistance.value\n }\n function formatDuration(duration: string | number): string {\n return new Date(+duration * 1000).toISOString().substr(11, 8)\n }\n function emitCoordinates(coordinates: TCoordinates) {\n emit('getCoordinates', coordinates)\n }\n function emitEmptyCoordinates() {\n emitCoordinates({ latitude: null, longitude: null })\n }\n\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n })\n return {\n displayDistance,\n lineChartProps,\n emitEmptyCoordinates,\n updateDisplayDistance,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout-chart {\n ::v-deep(.card) {\n .card-title {\n text-transform: capitalize;\n }\n .card-content {\n display: flex;\n flex-direction: column;\n .chart-radio {\n width: 100%;\n display: flex;\n justify-content: center;\n label {\n padding: 0 $default-padding;\n }\n }\n .no-data-cleaning {\n font-size: 0.85em;\n font-style: italic;\n }\n }\n\n @media screen and (max-width: $small-limit) {\n .card-content {\n padding: $default-padding 0;\n .no-data-cleaning {\n padding: 0 $default-padding * 2;\n }\n }\n }\n }\n }\n</style>\n","\n import { ChartData, ChartOptions } from 'chart.js'\n import { ComputedRef, PropType, computed, defineComponent, ref } from 'vue'\n import { LineChart, useLineChart } from 'vue-chart-3'\n import { useI18n } from 'vue-i18n'\n\n import { IUserProfile } from '@/types/user'\n import {\n IWorkoutChartData,\n IWorkoutData,\n TCoordinates,\n } from '@/types/workouts'\n import { getDatasets } from '@/utils/workouts'\n\n export default defineComponent({\n name: 'WorkoutChart',\n components: {\n LineChart,\n },\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n required: true,\n },\n },\n emits: ['getCoordinates'],\n setup(props, { emit }) {\n const { t } = useI18n()\n\n let displayDistance = ref(true)\n const datasets: ComputedRef<IWorkoutChartData> = computed(() =>\n getDatasets(props.workoutData.chartData, t)\n )\n let chartData: ComputedRef<ChartData<'line'>> = computed(() => ({\n labels: displayDistance.value\n ? datasets.value.distance_labels\n : datasets.value.duration_labels,\n datasets: JSON.parse(\n JSON.stringify([\n datasets.value.datasets.speed,\n datasets.value.datasets.elevation,\n ])\n ),\n }))\n const coordinates: ComputedRef<TCoordinates[]> = computed(\n () => datasets.value.coordinates\n )\n const options = computed<ChartOptions<'line'>>(() => ({\n responsive: true,\n maintainAspectRatio: true,\n animation: false,\n layout: {\n padding: {\n top: 22,\n },\n },\n scales: {\n [displayDistance.value ? 'xDistance' : 'xDuration']: {\n grid: {\n drawOnChartArea: false,\n },\n ticks: {\n count: 10,\n callback: function (value) {\n return displayDistance.value\n ? Number(value).toFixed(2)\n : formatDuration(value)\n },\n },\n type: 'linear',\n bounds: 'data',\n title: {\n display: true,\n text: displayDistance.value\n ? t('workouts.DISTANCE') + ' (km)'\n : t('workouts.DURATION'),\n },\n },\n ySpeed: {\n grid: {\n drawOnChartArea: false,\n },\n position: 'left',\n title: {\n display: true,\n text: t('workouts.SPEED') + ' (km/h)',\n },\n },\n yElevation: {\n beginAtZero: true,\n grid: {\n drawOnChartArea: false,\n },\n position: 'right',\n title: {\n display: true,\n text: t('workouts.ELEVATION') + ' (m)',\n },\n },\n },\n elements: {\n point: {\n pointStyle: 'circle',\n pointRadius: 0,\n },\n },\n plugins: {\n datalabels: {\n display: false,\n },\n tooltip: {\n interaction: {\n intersect: false,\n mode: 'index',\n },\n callbacks: {\n label: function (context) {\n const label = ` ${context.dataset.label}: ${context.formattedValue}`\n return context.dataset.yAxisID === 'yElevation'\n ? label + ' m'\n : label + ' km/h'\n },\n title: function (tooltipItems) {\n if (tooltipItems.length > 0) {\n emitCoordinates(coordinates.value[tooltipItems[0].dataIndex])\n }\n return tooltipItems.length === 0\n ? ''\n : displayDistance.value\n ? `${t('workouts.DISTANCE')}: ${tooltipItems[0].label} km`\n : `${t('workouts.DURATION')}: ${formatDuration(\n tooltipItems[0].label.replace(',', '')\n )}`\n },\n },\n },\n },\n }))\n\n function updateDisplayDistance() {\n displayDistance.value = !displayDistance.value\n }\n function formatDuration(duration: string | number): string {\n return new Date(+duration * 1000).toISOString().substr(11, 8)\n }\n function emitCoordinates(coordinates: TCoordinates) {\n emit('getCoordinates', coordinates)\n }\n function emitEmptyCoordinates() {\n emitCoordinates({ latitude: null, longitude: null })\n }\n\n const { lineChartProps } = useLineChart({\n chartData,\n options,\n })\n return {\n displayDistance,\n lineChartProps,\n emitEmptyCoordinates,\n updateDisplayDistance,\n }\n },\n })\n","import { render } from \"./WorkoutChart.vue?vue&type=template&id=2230775e&scoped=true\"\nimport script from \"./WorkoutChart.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutChart.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutChart.vue?vue&type=style&index=0&id=2230775e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2230775e\"\n\nexport default script","<template>\n <div class=\"workout-detail\">\n <Modal\n v-if=\"displayModal\"\n :title=\"$t('common.CONFIRMATION')\"\n :message=\"$t('workouts.WORKOUT_DELETION_CONFIRMATION')\"\n @confirmAction=\"deleteWorkout(workoutObject.workoutId)\"\n @cancelAction=\"updateDisplayModal(false)\"\n />\n <Card>\n <template #title>\n <WorkoutCardTitle\n :sport=\"sport\"\n :workoutObject=\"workoutObject\"\n @displayModal=\"updateDisplayModal(true)\"\n />\n </template>\n <template #content>\n <WorkoutMap\n :workoutData=\"workoutData\"\n :markerCoordinates=\"markerCoordinates\"\n />\n <WorkoutData :workoutObject=\"workoutObject\" />\n </template>\n </Card>\n </div>\n</template>\n\n<script lang=\"ts\">\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutCardTitle from '@/components/Workout/WorkoutDetail/WorkoutCardTitle.vue'\n import WorkoutData from '@/components/Workout/WorkoutDetail/WorkoutData.vue'\n import WorkoutMap from '@/components/Workout/WorkoutDetail/WorkoutMap.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import {\n IWorkout,\n IWorkoutData,\n IWorkoutObject,\n IWorkoutSegment,\n TCoordinates,\n } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n\n export default defineComponent({\n name: 'WorkoutDetail',\n components: {\n WorkoutCardTitle,\n WorkoutData,\n WorkoutMap,\n },\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n displaySegment: {\n type: Boolean,\n required: true,\n },\n markerCoordinates: {\n type: Object as PropType<TCoordinates>,\n required: false,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n },\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n required: true,\n },\n },\n setup(props) {\n const route = useRoute()\n const store = useStore()\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record<string, string | null> {\n const previousUrl =\n displaySegment && segmentId && segmentId !== 1\n ? `/workouts/${workout.id}/segment/${segmentId - 1}`\n : !displaySegment && workout.previous_workout\n ? `/workouts/${workout.previous_workout}`\n : null\n const nextUrl =\n displaySegment && segmentId && segmentId < workout.segments.length\n ? `/workouts/${workout.id}/segment/${segmentId + 1}`\n : !displaySegment && workout.next_workout\n ? `/workouts/${workout.next_workout}`\n : null\n return {\n previousUrl,\n nextUrl,\n }\n }\n function getWorkoutObject(\n workout: IWorkout,\n segment: IWorkoutSegment | null\n ): IWorkoutObject {\n const urls = getWorkoutObjectUrl(\n workout,\n props.displaySegment,\n segmentId.value ? +segmentId.value : null\n )\n const workoutDate = formatWorkoutDate(\n getDateWithTZ(\n props.workoutData.workout.workout_date,\n props.authUser.timezone\n )\n )\n return {\n ascent: segment ? segment.ascent : workout.ascent,\n aveSpeed: segment ? segment.ave_speed : workout.ave_speed,\n distance: segment ? segment.distance : workout.distance,\n descent: segment ? segment.descent : workout.descent,\n duration: segment ? segment.duration : workout.duration,\n maxAlt: segment ? segment.max_alt : workout.max_alt,\n maxSpeed: segment ? segment.max_speed : workout.max_speed,\n minAlt: segment ? segment.min_alt : workout.min_alt,\n moving: segment ? segment.moving : workout.moving,\n nextUrl: urls.nextUrl,\n pauses: segment ? segment.pauses : workout.pauses,\n previousUrl: urls.previousUrl,\n records: segment ? [] : workout.records,\n segmentId: segment ? segment.segment_id : null,\n title: workout.title,\n type: props.displaySegment ? 'SEGMENT' : 'WORKOUT',\n workoutDate: workoutDate.workout_date,\n weatherEnd: segment ? null : workout.weather_end,\n workoutId: workout.id,\n weatherStart: segment ? null : workout.weather_start,\n workoutTime: workoutDate.workout_time,\n }\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteWorkout(workoutId: string) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT, {\n workoutId: workoutId,\n })\n }\n\n const workout: ComputedRef<IWorkout> = computed(\n () => props.workoutData.workout\n )\n let segmentId: Ref<number | null> = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef<IWorkoutSegment | null> = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n let displayModal: Ref<boolean> = ref(false)\n\n watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\n return {\n sport: computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n ),\n workoutObject: computed(() =>\n getWorkoutObject(workout.value, segment.value)\n ),\n displayModal,\n deleteWorkout,\n updateDisplayModal,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n .workout-detail {\n display: flex;\n ::v-deep(.card) {\n width: 100%;\n .card-content {\n display: flex;\n flex-direction: row;\n @media screen and (max-width: $medium-limit) {\n flex-direction: column;\n }\n }\n }\n }\n</style>\n","<template>\n <div id=\"workout-card-title\">\n <div\n class=\"workout-previous workout-arrow\"\n :class=\"{ inactive: !workoutObject.previousUrl }\"\n :title=\"\n workoutObject.previousUrl\n ? $t(`workouts.PREVIOUS_${workoutObject.type}`)\n : $t(`workouts.NO_PREVIOUS_${workoutObject.type}`)\n \"\n @click=\"\n workoutObject.previousUrl\n ? $router.push(workoutObject.previousUrl)\n : null\n \"\n >\n <i class=\"fa fa-chevron-left\" aria-hidden=\"true\" />\n </div>\n <div class=\"workout-card-title\">\n <SportImage :sport-label=\"sport.label\" />\n <div class=\"workout-title-date\">\n <div class=\"workout-title\" v-if=\"workoutObject.type === 'WORKOUT'\">\n {{ workoutObject.title }}\n <i\n class=\"fa fa-edit\"\n aria-hidden=\"true\"\n @click=\"\n $router.push({\n name: 'EditWorkout',\n params: { workoutId: workoutObject.workoutId },\n })\n \"\n />\n <i\n class=\"fa fa-trash\"\n aria-hidden=\"true\"\n @click=\"emit('displayModal', true)\"\n />\n </div>\n <div class=\"workout-title\" v-else>\n {{ workoutObject.title }}\n <span class=\"workout-segment\">\n —\n <i class=\"fa fa-map-marker\" aria-hidden=\"true\" />\n {{ $t('workouts.SEGMENT') }}\n {{ workoutObject.segmentId + 1 }}\n </span>\n </div>\n <div class=\"workout-date\">\n {{ workoutObject.workoutDate }} -\n {{ workoutObject.workoutTime }}\n <span class=\"workout-link\">\n <router-link\n v-if=\"workoutObject.type === 'SEGMENT'\"\n :to=\"{\n name: 'Workout',\n params: { workoutId: workoutObject.workoutId },\n }\"\n >\n > {{ $t('workouts.BACK_TO_WORKOUT') }}\n </router-link></span\n >\n </div>\n </div>\n </div>\n <div\n class=\"workout-next workout-arrow\"\n :class=\"{ inactive: !workoutObject.nextUrl }\"\n :title=\"\n workoutObject.nextUrl\n ? $t(`workouts.NEXT_${workoutObject.type}`)\n : $t(`workouts.NO_NEXT_${workoutObject.type}`)\n \"\n @click=\"\n workoutObject.nextUrl ? $router.push(workoutObject.nextUrl) : null\n \"\n >\n <i class=\"fa fa-chevron-right\" aria-hidden=\"true\" />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { PropType, defineComponent } from 'vue'\n\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutCardTitle',\n props: {\n sport: {\n type: Object as PropType<ISport>,\n required: true,\n },\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n emits: ['displayModal'],\n setup(props, { emit }) {\n return { emit }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n\n #workout-card-title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .workout-arrow {\n cursor: pointer;\n &.inactive {\n color: var(--disabled-color);\n cursor: default;\n }\n }\n\n .workout-card-title {\n display: flex;\n flex-grow: 1;\n .sport-img {\n height: 35px;\n width: 35px;\n padding: 0 $default-padding;\n }\n .workout-date {\n font-size: 0.8em;\n font-weight: normal;\n }\n .workout-segment {\n font-weight: normal;\n }\n .workout-link {\n padding-left: $default-padding;\n }\n\n .fa {\n padding: 0 $default-padding * 0.3;\n }\n\n @media screen and (max-width: $small-limit) {\n .fa-trash,\n .fa-edit {\n border: solid 1px var(--card-border-color);\n border-radius: $border-radius;\n margin-left: $default-margin * 0.5;\n padding: 0 $default-padding;\n }\n }\n }\n }\n</style>\n","\n import { PropType, defineComponent } from 'vue'\n\n import { ISport } from '@/types/sports'\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutCardTitle',\n props: {\n sport: {\n type: Object as PropType<ISport>,\n required: true,\n },\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n emits: ['displayModal'],\n setup(props, { emit }) {\n return { emit }\n },\n })\n","import { render } from \"./WorkoutCardTitle.vue?vue&type=template&id=9cab340c&scoped=true\"\nimport script from \"./WorkoutCardTitle.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutCardTitle.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutCardTitle.vue?vue&type=style&index=0&id=9cab340c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-9cab340c\"\n\nexport default script","<template>\n <div id=\"workout-info\">\n <div class=\"workout-data\">\n <i class=\"fa fa-clock-o\" aria-hidden=\"true\" />\n {{ $t('workouts.DURATION') }}: <span>{{ workoutObject.moving }}</span>\n <WorkoutRecord :workoutObject=\"workoutObject\" record_type=\"LD\" />\n <div v-if=\"withPause\">\n ({{ $t('workouts.PAUSES') }}: <span>{{ workoutObject.pauses }}</span> -\n {{ $t('workouts.TOTAL_DURATION') }}:\n <span>{{ workoutObject.duration }})</span>\n </div>\n </div>\n <div class=\"workout-data\">\n <i class=\"fa fa-road\" aria-hidden=\"true\" />\n {{ $t('workouts.DISTANCE') }}:\n <span>{{ workoutObject.distance }} km</span>\n <WorkoutRecord :workoutObject=\"workoutObject\" record_type=\"FD\" />\n </div>\n <div class=\"workout-data\">\n <i class=\"fa fa-tachometer\" aria-hidden=\"true\" />\n {{ $t('workouts.AVERAGE_SPEED') }}:\n <span>{{ workoutObject.aveSpeed }} km/h</span\n ><WorkoutRecord :workoutObject=\"workoutObject\" record_type=\"AS\" /><br />\n {{ $t('workouts.MAX_SPEED') }}:\n <span>{{ workoutObject.maxSpeed }} km/h</span>\n <WorkoutRecord :workoutObject=\"workoutObject\" record_type=\"MS\" />\n </div>\n <div\n class=\"workout-data\"\n v-if=\"workoutObject.maxAlt !== null && workoutObject.minAlt !== null\"\n >\n <img\n class=\"mountains\"\n src=\"/img/workouts/mountains.svg\"\n :alt=\"$t('workouts.ELEVATION')\"\n />\n {{ $t('workouts.MIN_ALTITUDE') }}:\n <span>{{ workoutObject.minAlt }} m</span><br />\n {{ $t('workouts.MAX_ALTITUDE') }}:\n <span>{{ workoutObject.maxAlt }} m</span>\n </div>\n <div\n class=\"workout-data\"\n v-if=\"workoutObject.ascent !== null && workoutObject.descent !== null\"\n >\n <i class=\"fa fa-location-arrow\" aria-hidden=\"true\" />\n {{ $t('workouts.ASCENT') }}: <span>{{ workoutObject.ascent }} m</span\n ><br />\n {{ $t('workouts.DESCENT') }}: <span>{{ workoutObject.descent }} m</span>\n </div>\n <WorkoutWeather :workoutObject=\"workoutObject\" />\n </div>\n</template>\n\n<script lang=\"ts\">\n import { PropType, computed, defineComponent } from 'vue'\n\n import WorkoutRecord from '@/components/Workout/WorkoutDetail/WorkoutRecord.vue'\n import WorkoutWeather from '@/components/Workout/WorkoutDetail/WorkoutWeather.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutData',\n components: {\n WorkoutRecord,\n WorkoutWeather,\n },\n props: {\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n setup(props) {\n return {\n withPause: computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n ),\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout-info {\n display: flex;\n flex-direction: column;\n padding: $default-padding $default-padding * 2;\n width: 100%;\n .mountains {\n margin-bottom: -3px;\n height: 16px;\n filter: var(--workout-img-color);\n }\n .workout-data {\n text-transform: capitalize;\n padding: $default-padding * 0.5 0;\n\n span {\n font-weight: bold;\n text-transform: lowercase;\n }\n }\n\n @media screen and (max-width: $small-limit) {\n padding: $default-padding;\n }\n }\n</style>\n","<template>\n <span\n class=\"workout-record\"\n v-if=\"\n workoutObject.records &&\n workoutObject.records.find((record) => record.record_type === record_type)\n \"\n >\n <sup>\n <i class=\"fa fa-trophy\" aria-hidden=\"true\" />\n </sup>\n </span>\n</template>\n\n<script lang=\"ts\">\n import { defineComponent, PropType } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutRecord',\n props: {\n record_type: {\n type: String,\n required: true,\n },\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n .workout-record {\n sup {\n font-size: 75%;\n line-height: 0;\n }\n }\n</style>\n","\n import { defineComponent, PropType } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutRecord',\n props: {\n record_type: {\n type: String,\n required: true,\n },\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n })\n","import { render } from \"./WorkoutRecord.vue?vue&type=template&id=da96984c&scoped=true\"\nimport script from \"./WorkoutRecord.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutRecord.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutRecord.vue?vue&type=style&index=0&id=da96984c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-da96984c\"\n\nexport default script","<template>\n <div\n id=\"workout-weather\"\n v-if=\"workoutObject.weatherStart && workoutObject.weatherEnd\"\n >\n <table class=\"weather-table\">\n <thead>\n <tr>\n <th />\n <th>\n <div class=\"weather-th\">\n {{ $t('workouts.START') }}\n <img\n class=\"weather-img\"\n :src=\"`/img/weather/${workoutObject.weatherStart.icon}.svg`\"\n :alt=\"\n $t(\n `workouts.WEATHER.DARK_SKY.${workoutObject.weatherStart.icon}`\n )\n \"\n :title=\"\n $t(\n `workouts.WEATHER.DARK_SKY.${workoutObject.weatherStart.icon}`\n )\n \"\n />\n </div>\n </th>\n <th>\n <div class=\"weather-th\">\n {{ $t('workouts.END') }}\n <img\n class=\"weather-img\"\n :src=\"`/img/weather/${workoutObject.weatherEnd.icon}.svg`\"\n :alt=\"\n $t(\n `workouts.WEATHER.DARK_SKY.${workoutObject.weatherEnd.icon}`\n )\n \"\n :title=\"\n $t(\n `workouts.WEATHER.DARK_SKY.${workoutObject.weatherEnd.icon}`\n )\n \"\n />\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <img\n class=\"weather-img weather-img-small\"\n src=\"/img/weather/temperature.svg\"\n :alt=\"$t(`workouts.WEATHER.TEMPERATURE`)\"\n :title=\"$t(`workouts.WEATHER.TEMPERATURE`)\"\n />\n </td>\n <td>\n {{ Number(workoutObject.weatherStart.temperature).toFixed(1) }}°C\n </td>\n <td>\n {{ Number(workoutObject.weatherEnd.temperature).toFixed(1) }}°C\n </td>\n </tr>\n <tr>\n <td>\n <img\n class=\"weather-img weather-img-small\"\n src=\"/img/weather/pour-rain.svg\"\n :alt=\"$t(`workouts.WEATHER.HUMIDITY`)\"\n :title=\"$t(`workouts.WEATHER.HUMIDITY`)\"\n />\n </td>\n <td>\n {{ Number(workoutObject.weatherStart.humidity * 100).toFixed(1) }}%\n </td>\n <td>\n {{ Number(workoutObject.weatherEnd.humidity * 100).toFixed(1) }}%\n </td>\n </tr>\n <tr>\n <td>\n <img\n class=\"weather-img weather-img-small\"\n src=\"/img/weather/breeze.svg\"\n :alt=\"$t(`workouts.WEATHER.WIND`)\"\n :title=\"$t(`workouts.WEATHER.WIND`)\"\n />\n </td>\n <td>{{ Number(workoutObject.weatherStart.wind).toFixed(1) }}m/s</td>\n <td>{{ Number(workoutObject.weatherEnd.wind).toFixed(1) }}m/s</td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { defineComponent, PropType } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutWeather',\n props: {\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout-weather {\n padding-top: $default-padding;\n .weather-img {\n height: 30px;\n filter: var(--workout-img-color);\n }\n .weather-img-small {\n height: 20px;\n }\n .weather-table {\n width: 100%;\n text-align: center;\n\n .weather-th {\n display: flex;\n flex-direction: column;\n text-transform: capitalize;\n }\n\n tbody {\n font-size: 0.8em;\n }\n }\n }\n</style>\n","\n import { defineComponent, PropType } from 'vue'\n\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutWeather',\n props: {\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n })\n","import { render } from \"./WorkoutWeather.vue?vue&type=template&id=7eb41918&scoped=true\"\nimport script from \"./WorkoutWeather.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutWeather.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutWeather.vue?vue&type=style&index=0&id=7eb41918&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7eb41918\"\n\nexport default script","\n import { PropType, computed, defineComponent } from 'vue'\n\n import WorkoutRecord from '@/components/Workout/WorkoutDetail/WorkoutRecord.vue'\n import WorkoutWeather from '@/components/Workout/WorkoutDetail/WorkoutWeather.vue'\n import { IWorkoutObject } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutData',\n components: {\n WorkoutRecord,\n WorkoutWeather,\n },\n props: {\n workoutObject: {\n type: Object as PropType<IWorkoutObject>,\n required: true,\n },\n },\n setup(props) {\n return {\n withPause: computed(\n () =>\n props.workoutObject.pauses !== '0:00:00' &&\n props.workoutObject.pauses !== null\n ),\n }\n },\n })\n","import { render } from \"./WorkoutData.vue?vue&type=template&id=45a7f031&scoped=true\"\nimport script from \"./WorkoutData.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutData.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutData.vue?vue&type=style&index=0&id=45a7f031&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-45a7f031\"\n\nexport default script","<template>\n <div id=\"workout-map\">\n <div v-if=\"workoutData.loading\" class=\"leaflet-container\" />\n <div v-else>\n <div class=\"leaflet-container\" v-if=\"workoutData.workout.with_gpx\">\n <LMap\n v-if=\"geoJson.jsonData && center && bounds.length === 2\"\n :zoom=\"13\"\n :center=\"center\"\n :bounds=\"bounds\"\n ref=\"workoutMap\"\n @ready=\"fitBounds(bounds)\"\n >\n <LTileLayer\n :url=\"`${getApiUrl()}workouts/map_tile/{s}/{z}/{x}/{y}.png`\"\n :attribution=\"appConfig.map_attribution\"\n :bounds=\"bounds\"\n />\n <LGeoJson :geojson=\"geoJson.jsonData\" />\n <LMarker\n v-if=\"markerCoordinates.latitude\"\n :lat-lng=\"[markerCoordinates.latitude, markerCoordinates.longitude]\"\n />\n </LMap>\n </div>\n <div v-else class=\"no-map\">{{ $t('workouts.NO_MAP') }}</div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { gpx } from '@tmcw/togeojson'\n import { LGeoJson, LMap, LMarker, LTileLayer } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, PropType, computed, defineComponent, ref } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { GeoJSONData } from '@/types/geojson'\n import { IWorkoutData, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getApiUrl } from '@/utils'\n\n export default defineComponent({\n name: 'WorkoutMap',\n components: {\n LGeoJson,\n LMap,\n LMarker,\n LTileLayer,\n },\n props: {\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n },\n markerCoordinates: {\n type: Object as PropType<TCoordinates>,\n required: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n function getGeoJson(gpxContent: string): GeoJSONData {\n if (!gpxContent || gpxContent !== '') {\n try {\n const jsonData = gpx(\n new DOMParser().parseFromString(gpxContent, 'text/xml')\n )\n return { jsonData }\n } catch (e) {\n console.error('Invalid gpx content')\n return {}\n }\n }\n return {}\n }\n function getCenter(bounds: ComputedRef<number[][]>): number[] {\n return [\n (bounds.value[0][0] + bounds.value[1][0]) / 2,\n (bounds.value[0][1] + bounds.value[1][1]) / 2,\n ]\n }\n function fitBounds(bounds: number[][]) {\n if (workoutMap.value?.leafletObject) {\n workoutMap.value?.leafletObject.fitBounds(bounds)\n }\n }\n\n const workoutMap = ref<null | {\n leafletObject: { fitBounds: (bounds: number[][]) => null }\n }>(null)\n const bounds = computed(() =>\n props.workoutData\n ? [\n [\n props.workoutData.workout.bounds[0],\n props.workoutData.workout.bounds[1],\n ],\n [\n props.workoutData.workout.bounds[2],\n props.workoutData.workout.bounds[3],\n ],\n ]\n : []\n )\n const appConfig: ComputedRef<TAppConfig> = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const center = computed(() => getCenter(bounds))\n const geoJson = computed(() =>\n props.workoutData && props.workoutData.gpx\n ? getGeoJson(props.workoutData.gpx)\n : {}\n )\n\n return {\n appConfig,\n bounds,\n center,\n geoJson,\n workoutMap,\n fitBounds,\n getApiUrl,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout-map {\n padding: $default-padding 0;\n .leaflet-container,\n .no-map {\n height: 400px;\n width: 600px;\n }\n .no-map {\n line-height: 400px;\n }\n\n @media screen and (max-width: $small-limit) {\n padding: 0;\n .leaflet-container {\n width: 100%;\n height: 300px;\n }\n .no-map {\n display: none;\n }\n }\n }\n</style>\n","\n import { gpx } from '@tmcw/togeojson'\n import { LGeoJson, LMap, LMarker, LTileLayer } from '@vue-leaflet/vue-leaflet'\n import { ComputedRef, PropType, computed, defineComponent, ref } from 'vue'\n\n import { ROOT_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { GeoJSONData } from '@/types/geojson'\n import { IWorkoutData, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { getApiUrl } from '@/utils'\n\n export default defineComponent({\n name: 'WorkoutMap',\n components: {\n LGeoJson,\n LMap,\n LMarker,\n LTileLayer,\n },\n props: {\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n },\n markerCoordinates: {\n type: Object as PropType<TCoordinates>,\n required: false,\n },\n },\n setup(props) {\n const store = useStore()\n\n function getGeoJson(gpxContent: string): GeoJSONData {\n if (!gpxContent || gpxContent !== '') {\n try {\n const jsonData = gpx(\n new DOMParser().parseFromString(gpxContent, 'text/xml')\n )\n return { jsonData }\n } catch (e) {\n console.error('Invalid gpx content')\n return {}\n }\n }\n return {}\n }\n function getCenter(bounds: ComputedRef<number[][]>): number[] {\n return [\n (bounds.value[0][0] + bounds.value[1][0]) / 2,\n (bounds.value[0][1] + bounds.value[1][1]) / 2,\n ]\n }\n function fitBounds(bounds: number[][]) {\n if (workoutMap.value?.leafletObject) {\n workoutMap.value?.leafletObject.fitBounds(bounds)\n }\n }\n\n const workoutMap = ref<null | {\n leafletObject: { fitBounds: (bounds: number[][]) => null }\n }>(null)\n const bounds = computed(() =>\n props.workoutData\n ? [\n [\n props.workoutData.workout.bounds[0],\n props.workoutData.workout.bounds[1],\n ],\n [\n props.workoutData.workout.bounds[2],\n props.workoutData.workout.bounds[3],\n ],\n ]\n : []\n )\n const appConfig: ComputedRef<TAppConfig> = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const center = computed(() => getCenter(bounds))\n const geoJson = computed(() =>\n props.workoutData && props.workoutData.gpx\n ? getGeoJson(props.workoutData.gpx)\n : {}\n )\n\n return {\n appConfig,\n bounds,\n center,\n geoJson,\n workoutMap,\n fitBounds,\n getApiUrl,\n }\n },\n })\n","import { render } from \"./WorkoutMap.vue?vue&type=template&id=76f3a2e8&scoped=true\"\nimport script from \"./WorkoutMap.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutMap.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutMap.vue?vue&type=style&index=0&id=76f3a2e8&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-76f3a2e8\"\n\nexport default script","\n import {\n ComputedRef,\n PropType,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutCardTitle from '@/components/Workout/WorkoutDetail/WorkoutCardTitle.vue'\n import WorkoutData from '@/components/Workout/WorkoutDetail/WorkoutData.vue'\n import WorkoutMap from '@/components/Workout/WorkoutDetail/WorkoutMap.vue'\n import { WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import {\n IWorkout,\n IWorkoutData,\n IWorkoutObject,\n IWorkoutSegment,\n TCoordinates,\n } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n\n export default defineComponent({\n name: 'WorkoutDetail',\n components: {\n WorkoutCardTitle,\n WorkoutData,\n WorkoutMap,\n },\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n displaySegment: {\n type: Boolean,\n required: true,\n },\n markerCoordinates: {\n type: Object as PropType<TCoordinates>,\n required: false,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n },\n workoutData: {\n type: Object as PropType<IWorkoutData>,\n required: true,\n },\n },\n setup(props) {\n const route = useRoute()\n const store = useStore()\n\n function getWorkoutObjectUrl(\n workout: IWorkout,\n displaySegment: boolean,\n segmentId: number | null\n ): Record<string, string | null> {\n const previousUrl =\n displaySegment && segmentId && segmentId !== 1\n ? `/workouts/${workout.id}/segment/${segmentId - 1}`\n : !displaySegment && workout.previous_workout\n ? `/workouts/${workout.previous_workout}`\n : null\n const nextUrl =\n displaySegment && segmentId && segmentId < workout.segments.length\n ? `/workouts/${workout.id}/segment/${segmentId + 1}`\n : !displaySegment && workout.next_workout\n ? `/workouts/${workout.next_workout}`\n : null\n return {\n previousUrl,\n nextUrl,\n }\n }\n function getWorkoutObject(\n workout: IWorkout,\n segment: IWorkoutSegment | null\n ): IWorkoutObject {\n const urls = getWorkoutObjectUrl(\n workout,\n props.displaySegment,\n segmentId.value ? +segmentId.value : null\n )\n const workoutDate = formatWorkoutDate(\n getDateWithTZ(\n props.workoutData.workout.workout_date,\n props.authUser.timezone\n )\n )\n return {\n ascent: segment ? segment.ascent : workout.ascent,\n aveSpeed: segment ? segment.ave_speed : workout.ave_speed,\n distance: segment ? segment.distance : workout.distance,\n descent: segment ? segment.descent : workout.descent,\n duration: segment ? segment.duration : workout.duration,\n maxAlt: segment ? segment.max_alt : workout.max_alt,\n maxSpeed: segment ? segment.max_speed : workout.max_speed,\n minAlt: segment ? segment.min_alt : workout.min_alt,\n moving: segment ? segment.moving : workout.moving,\n nextUrl: urls.nextUrl,\n pauses: segment ? segment.pauses : workout.pauses,\n previousUrl: urls.previousUrl,\n records: segment ? [] : workout.records,\n segmentId: segment ? segment.segment_id : null,\n title: workout.title,\n type: props.displaySegment ? 'SEGMENT' : 'WORKOUT',\n workoutDate: workoutDate.workout_date,\n weatherEnd: segment ? null : workout.weather_end,\n workoutId: workout.id,\n weatherStart: segment ? null : workout.weather_start,\n workoutTime: workoutDate.workout_time,\n }\n }\n function updateDisplayModal(value: boolean) {\n displayModal.value = value\n }\n function deleteWorkout(workoutId: string) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.DELETE_WORKOUT, {\n workoutId: workoutId,\n })\n }\n\n const workout: ComputedRef<IWorkout> = computed(\n () => props.workoutData.workout\n )\n let segmentId: Ref<number | null> = ref(\n route.params.workoutId ? +route.params.segmentId : null\n )\n const segment: ComputedRef<IWorkoutSegment | null> = computed(() =>\n workout.value.segments.length > 0 && segmentId.value\n ? workout.value.segments[+segmentId.value - 1]\n : null\n )\n let displayModal: Ref<boolean> = ref(false)\n\n watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (newSegmentId) {\n segmentId.value = +newSegmentId\n }\n }\n )\n\n return {\n sport: computed(() =>\n props.sports\n ? props.sports.find(\n (sport) => sport.id === props.workoutData.workout.sport_id\n )\n : {}\n ),\n workoutObject: computed(() =>\n getWorkoutObject(workout.value, segment.value)\n ),\n displayModal,\n deleteWorkout,\n updateDisplayModal,\n }\n },\n })\n","import { render } from \"./index.vue?vue&type=template&id=a17554ea&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=a17554ea&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a17554ea\"\n\nexport default script","<template>\n <div id=\"workout-note\">\n <Card>\n <template #title>{{ $t('workouts.NOTES') }}</template>\n <template #content>\n {{ notes && notes !== '' ? notes : $t('workouts.NO_NOTES') }}</template\n >\n </Card>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { defineComponent } from 'vue'\n\n export default defineComponent({\n name: 'WorkoutNotes',\n props: {\n notes: {\n type: String,\n required: false,\n },\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base.scss';\n #workout-note {\n ::v-deep(.card-content) {\n font-style: italic;\n }\n }\n</style>\n","\n import { defineComponent } from 'vue'\n\n export default defineComponent({\n name: 'WorkoutNotes',\n props: {\n notes: {\n type: String,\n required: false,\n },\n },\n })\n","import { render } from \"./WorkoutNotes.vue?vue&type=template&id=5c47d30a&scoped=true\"\nimport script from \"./WorkoutNotes.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutNotes.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutNotes.vue?vue&type=style&index=0&id=5c47d30a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5c47d30a\"\n\nexport default script","<template>\n <div id=\"workout-segments\">\n <Card>\n <template #title>{{ $t('workouts.SEGMENT', 2) }}</template>\n <template #content>\n <ul>\n <li v-for=\"(segment, index) in segments\" :key=\"segment.segment_id\">\n <router-link\n :to=\"{\n name: 'WorkoutSegment',\n params: {\n workoutId: segment.workout_id,\n segmentId: index + 1,\n },\n }\"\n >{{ $t('workouts.SEGMENT', 1) }} {{ index + 1 }}</router-link\n >\n ({{ $t('workouts.DISTANCE') }}: {{ segment.distance }} km,\n {{ $t('workouts.DURATION') }}: {{ segment.duration }})\n </li>\n </ul>\n </template>\n </Card>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { PropType, defineComponent } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutSegments',\n props: {\n segments: {\n type: Object as PropType<IWorkoutSegment[]>,\n required: true,\n },\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n #workout-segments {\n ::v-deep(.card) {\n .card-title {\n text-transform: capitalize;\n }\n .card-content {\n padding-bottom: 0;\n padding-top: 0;\n a {\n font-weight: bold;\n }\n ul {\n padding: 0 $default-padding;\n list-style: square;\n }\n }\n }\n }\n</style>\n","\n import { PropType, defineComponent } from 'vue'\n\n import { IWorkoutSegment } from '@/types/workouts'\n\n export default defineComponent({\n name: 'WorkoutSegments',\n props: {\n segments: {\n type: Object as PropType<IWorkoutSegment[]>,\n required: true,\n },\n },\n })\n","import { render } from \"./WorkoutSegments.vue?vue&type=template&id=5c40d110&scoped=true\"\nimport script from \"./WorkoutSegments.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutSegments.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutSegments.vue?vue&type=style&index=0&id=5c40d110&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-5c40d110\"\n\nexport default script","\n import {\n ComputedRef,\n Ref,\n computed,\n defineComponent,\n ref,\n watch,\n onBeforeMount,\n onUnmounted,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import NotFound from '@/components/Common/NotFound.vue'\n import WorkoutChart from '@/components/Workout/WorkoutChart.vue'\n import WorkoutDetail from '@/components/Workout/WorkoutDetail/index.vue'\n import WorkoutNotes from '@/components/Workout/WorkoutNotes.vue'\n import WorkoutSegments from '@/components/Workout/WorkoutSegments.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData, IWorkoutPayload, TCoordinates } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'Workout',\n components: {\n NotFound,\n WorkoutChart,\n WorkoutDetail,\n WorkoutNotes,\n WorkoutSegments,\n },\n props: {\n displaySegment: {\n type: Boolean,\n required: true,\n },\n },\n setup(props) {\n const route = useRoute()\n const store = useStore()\n\n onBeforeMount(() => {\n const payload: IWorkoutPayload = { workoutId: route.params.workoutId }\n if (props.displaySegment) {\n payload.segmentId = route.params.segmentId\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, payload)\n })\n\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n let markerCoordinates: Ref<TCoordinates> = ref({\n latitude: null,\n longitude: null,\n })\n\n function updateCoordinates(coordinates: TCoordinates) {\n markerCoordinates.value = {\n latitude: coordinates.latitude,\n longitude: coordinates.longitude,\n }\n }\n\n watch(\n () => route.params.workoutId,\n async (newWorkoutId) => {\n if (newWorkoutId) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: newWorkoutId,\n })\n }\n }\n )\n watch(\n () => route.params.segmentId,\n async (newSegmentId) => {\n if (route.params.workoutId) {\n const payload: IWorkoutPayload = {\n workoutId: route.params.workoutId,\n }\n if (newSegmentId) {\n payload.segmentId = newSegmentId\n }\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, payload)\n }\n }\n )\n\n onUnmounted(() => {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n })\n\n return {\n authUser,\n markerCoordinates,\n sports,\n workoutData,\n updateCoordinates,\n }\n },\n })\n","import { render } from \"./Workout.vue?vue&type=template&id=a4156454&scoped=true\"\nimport script from \"./Workout.vue?vue&type=script&lang=ts\"\nexport * from \"./Workout.vue?vue&type=script&lang=ts\"\n\nimport \"./Workout.vue?vue&type=style&index=0&id=a4156454&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-a4156454\"\n\nexport default script","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutNotes.vue?vue&type=style&index=0&id=5c47d30a&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutChart.vue?vue&type=style&index=0&id=2230775e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutCardTitle.vue?vue&type=style&index=0&id=9cab340c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutsList.vue?vue&type=style&index=0&id=d190dd62&lang=scss&scoped=true\"","import { watch, ref, provide, h, inject, onUnmounted, onBeforeUnmount, onMounted, nextTick, render as render$3, reactive, computed } from 'vue';\n\nconst debounce = (fn, time) => {\n let timeout;\n\n return function (...args) {\n const context = this;\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n fn.apply(context, args);\n timeout = null;\n }, time);\n };\n};\n\nconst capitalizeFirstLetter = (string) => {\n if (!string || typeof string.charAt !== \"function\") {\n return string;\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\nconst propsBinder = (methods, leafletElement, props) => {\n for (const key in props) {\n const setMethodName = \"set\" + capitalizeFirstLetter(key);\n if (methods[setMethodName]) {\n watch(\n () => props[key],\n (newVal, oldVal) => {\n methods[setMethodName](newVal, oldVal);\n }\n );\n } else if (leafletElement[setMethodName]) {\n watch(\n () => props[key],\n (newVal) => {\n leafletElement[setMethodName](newVal);\n }\n );\n }\n }\n};\n\nconst remapEvents = (contextAttrs) => {\n const result = {};\n for (const attrName in contextAttrs) {\n if (\n attrName.startsWith(\"on\") &&\n !attrName.startsWith(\"onUpdate\") &&\n attrName !== \"onReady\"\n ) {\n const eventName = attrName.slice(2).toLocaleLowerCase();\n result[eventName] = contextAttrs[attrName];\n }\n }\n return result;\n};\n\nconst resetWebpackIcon = async (Icon) => {\n const modules = await Promise.all([\n import('leaflet/dist/images/marker-icon-2x.png'),\n import('leaflet/dist/images/marker-icon.png'),\n import('leaflet/dist/images/marker-shadow.png'),\n ]);\n\n delete Icon.Default.prototype._getIconUrl;\n\n Icon.Default.mergeOptions({\n iconRetinaUrl: modules[0].default,\n iconUrl: modules[1].default,\n shadowUrl: modules[2].default,\n });\n};\n\n/**\n * Wraps a placeholder function and provides it with the given name.\n * The wrapper can later be updated with {@link updateLeafletWrapper}\n * to provide a different function.\n *\n * @param {String} methodName Key used to provide the wrapper function\n */\nconst provideLeafletWrapper = (methodName) => {\n const wrapped = ref(() =>\n console.warn(`Method ${methodName} has been invoked without being replaced`)\n );\n const wrapper = (...args) => wrapped.value(...args);\n // eslint-disable-next-line vue/no-ref-as-operand\n wrapper.wrapped = wrapped;\n provide(methodName, wrapper);\n\n return wrapper;\n};\n\n/**\n * Change the function that will be executed when an injected Leaflet wrapper\n * is invoked.\n *\n * @param {*} wrapper Provided wrapper whose wrapped function is to be updated\n * @param {function} leafletMethod New method to be wrapped by the wrapper\n */\nconst updateLeafletWrapper = (wrapper, leafletMethod) =>\n (wrapper.wrapped.value = leafletMethod);\n\nconst WINDOW_OR_GLOBAL =\n (typeof self === \"object\" && self.self === self && self) ||\n (typeof global === \"object\" && global.global === global && global) ||\n undefined;\n\nconst GLOBAL_LEAFLET_OPT = \"useGlobalLeaflet\";\n\nconst props = {\n options: {\n type: Object,\n default: () => ({}),\n },\n};\n\nconst setup = (props) => {\n return { options: props.options, methods: {} };\n};\n\nconst props$1 = {\n ...props,\n pane: {\n type: String,\n default: \"overlayPane\",\n },\n attribution: {\n type: String,\n default: null,\n },\n name: {\n type: String,\n custom: true,\n default: undefined,\n },\n layerType: {\n type: String,\n custom: true,\n default: undefined,\n },\n visible: {\n type: Boolean,\n custom: true,\n default: true,\n },\n};\n\nconst setup$1 = (props, leafletRef, context) => {\n const addLayer = inject(\"addLayer\");\n const removeLayer = inject(\"removeLayer\");\n const {\n options: componentOptions,\n methods: componentMethods,\n } = setup(props);\n\n const options = {\n ...componentOptions,\n attribution: props.attribution,\n pane: props.pane,\n };\n\n const addThisLayer = () => addLayer({ leafletObject: leafletRef.value });\n const removeThisLayer = () =>\n removeLayer({ leafletObject: leafletRef.value });\n\n const methods = {\n ...componentMethods,\n setAttribution(val, old) {\n const attributionControl = this.$parent.leafletObject.attributionControl;\n attributionControl.removeAttribution(old).addAttribution(val);\n },\n setName() {\n removeThisLayer();\n if (props.visible) {\n addThisLayer();\n }\n },\n setLayerType() {\n removeThisLayer();\n if (props.visible) {\n addThisLayer();\n }\n },\n setVisible(isVisible) {\n if (leafletRef.value) {\n if (isVisible) {\n addThisLayer();\n } else {\n removeThisLayer();\n }\n }\n },\n bindPopup({ leafletObject }) {\n leafletRef.value.bindPopup(leafletObject);\n },\n bindTooltip({ leafletObject }) {\n leafletRef.value.bindTooltip(leafletObject);\n },\n unbindTooltip() {\n const tooltip = leafletRef.value ? leafletRef.value.getTooltip() : null;\n if (tooltip) {\n tooltip.unbindTooltip();\n }\n },\n unbindPopup() {\n const popup = leafletRef.value ? leafletRef.value.getPopup() : null;\n if (popup) {\n popup.unbindPopup();\n }\n },\n updateVisibleProp(value) {\n /**\n * Triggers when the visible prop needs to be updated\n * @type {boolean}\n * @property {boolean} value - value of the visible property\n */\n context.emit(\"update:visible\", value);\n },\n };\n\n provide(\"bindPopup\", methods.bindPopup);\n provide(\"bindTooltip\", methods.bindTooltip);\n provide(\"unbindTooltip\", methods.unbindTooltip);\n provide(\"unbindPopup\", methods.unbindPopup);\n\n onUnmounted(() => {\n methods.unbindPopup();\n methods.unbindTooltip();\n removeThisLayer();\n });\n\n return { options, methods };\n};\n\nconst render = (ready, slots) => {\n if (ready && slots.default) {\n return h(\"div\", { style: { display: \"none\" } }, slots.default());\n }\n};\n\nconst props$2 = {\n ...props,\n interactive: {\n type: Boolean,\n default: true,\n },\n bubblingMouseEvents: {\n type: Boolean,\n default: true,\n },\n};\n\nconst setup$2 = (props) => {\n const { options: componentOptions, methods } = setup(props);\n const options = {\n ...componentOptions,\n interactive: props.interactive,\n bubblingMouseEvents: props.bubblingMouseEvents,\n };\n\n return { options, methods };\n};\n\nconst props$3 = {\n ...props$1,\n ...props$2,\n stroke: {\n type: Boolean,\n custom: true,\n default: true,\n },\n color: {\n type: String,\n custom: true,\n default: \"#3388ff\",\n },\n weight: {\n type: Number,\n custom: true,\n default: 3,\n },\n opacity: {\n type: Number,\n custom: true,\n default: 1.0,\n },\n lineCap: {\n type: String,\n custom: true,\n default: \"round\",\n },\n lineJoin: {\n type: String,\n custom: true,\n default: \"round\",\n },\n dashArray: {\n type: String,\n custom: true,\n default: null,\n },\n dashOffset: {\n type: String,\n custom: true,\n default: null,\n },\n fill: {\n type: Boolean,\n custom: true,\n default: false,\n },\n fillColor: {\n type: String,\n custom: true,\n default: \"#3388ff\",\n },\n fillOpacity: {\n type: Number,\n custom: true,\n default: 0.2,\n },\n fillRule: {\n type: String,\n custom: true,\n default: \"evenodd\",\n },\n className: {\n type: String,\n custom: true,\n default: null,\n },\n};\n\nconst setup$3 = (props, leafletRef, context) => {\n const { options: layerOptions, methods: layerMethods } = setup$1(\n props,\n leafletRef,\n context\n );\n const {\n options: interactiveLayerOptions,\n methods: interactiveLayerMethods,\n } = setup$2(props);\n\n const removeLayer = inject(\"removeLayer\");\n\n const options = {\n ...layerOptions,\n ...interactiveLayerOptions,\n stroke: props.stroke,\n color: props.color,\n weight: props.weight,\n opacity: props.opacity,\n lineCap: props.lineCap,\n lineJoin: props.lineJoin,\n dashArray: props.dashArray,\n dashOffset: props.dashOffset,\n fill: props.fill,\n fillColor: props.fillColor,\n fillOpacity: props.fillOpacity,\n fillRule: props.fillRule,\n className: props.className,\n };\n const methods = {\n ...layerMethods,\n ...interactiveLayerMethods,\n setStroke(stroke) {\n leafletRef.value.setStyle({ stroke });\n },\n setColor(color) {\n leafletRef.value.setStyle({ color });\n },\n setWeight(weight) {\n leafletRef.value.setStyle({ weight });\n },\n setOpacity(opacity) {\n leafletRef.value.setStyle({ opacity });\n },\n setLineCap(lineCap) {\n leafletRef.value.setStyle({ lineCap });\n },\n setLineJoin(lineJoin) {\n leafletRef.value.setStyle({ lineJoin });\n },\n setDashArray(dashArray) {\n leafletRef.value.setStyle({ dashArray });\n },\n setDashOffset(dashOffset) {\n leafletRef.value.setStyle({ dashOffset });\n },\n setFill(fill) {\n leafletRef.value.setStyle({ fill });\n },\n setFillColor(fillColor) {\n leafletRef.value.setStyle({ fillColor });\n },\n setFillOpacity(fillOpacity) {\n leafletRef.value.setStyle({ fillOpacity });\n },\n setFillRule(fillRule) {\n leafletRef.value.setStyle({ fillRule });\n },\n setClassName(className) {\n leafletRef.value.setStyle({ className });\n },\n };\n\n onBeforeUnmount(() => {\n removeLayer({ leafletObject: leafletRef.value });\n });\n\n return { options, methods };\n};\n\nconst props$4 = {\n ...props$3,\n latLng: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n /**\n * Radius of the marker in pixels.\n */\n radius: {\n type: Number,\n default: null,\n },\n};\n\nconst setup$4 = (props, leafletRef, context) => {\n const { options: pathOptions, methods: pathMethods } = setup$3(\n props,\n leafletRef,\n context\n );\n const options = {\n ...pathOptions,\n ...props,\n };\n const methods = {\n ...pathMethods,\n setRadius(radius) {\n leafletRef.value.setRadius(radius);\n },\n setLatLng(latLng) {\n leafletRef.value.setLatLng(latLng);\n },\n };\n\n return { options, methods };\n};\n\nconst props$5 = {\n ...props$4,\n /**\n * Radius of the circle in meters.\n */\n radius: {\n type: Number,\n default: null,\n },\n};\n\nconst setup$5 = (props, leafletRef, context) => {\n const {\n options: circleMarkerOptions,\n methods: circleMarkerMethods,\n } = setup$4(props, leafletRef, context);\n\n const options = {\n ...circleMarkerOptions,\n ...props,\n };\n\n const methods = {\n ...circleMarkerMethods,\n };\n\n return { options, methods };\n};\n\n/**\n * Circle component, lets you add and personalize circles on the map\n */\nvar script = {\n name: \"LCircle\",\n props: props$5,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$5(props, leafletRef, context);\n\n onMounted(async () => {\n const { circle, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = circle(props.latLng, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript.__file = \"src/components/LCircle.vue\";\n\n/**\n * Circle Marker component, lets you add and personalize circle markers on the map\n */\nvar script$1 = {\n name: \"LCircleMarker\",\n props: props$4,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$4(props, leafletRef, context);\n\n onMounted(async () => {\n const { circleMarker, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = circleMarker(props.latLng, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$1.__file = \"src/components/LCircleMarker.vue\";\n\nconst props$6 = {\n ...props,\n position: {\n type: String,\n default: \"topright\",\n },\n};\n\nconst setup$6 = (props, leafletRef) => {\n const {\n options: componentOptions,\n methods: componentMethods,\n } = setup(props);\n const options = {\n ...componentOptions,\n position: props.position,\n };\n\n const methods = {\n ...componentMethods,\n setPosition(position) {\n if (leafletRef.value) {\n leafletRef.value.setPosition(position);\n }\n },\n };\n\n onUnmounted(() => {\n if (leafletRef.value) {\n leafletRef.value.remove();\n }\n });\n\n return { options, methods };\n};\n\nconst render$1 = (slots) => {\n if (slots.default) {\n return h(\"div\", { ref: \"root\" }, slots.default());\n }\n return null;\n};\n\nvar script$2 = {\n name: \"LControl\",\n props: {\n ...props$6,\n disableClickPropagation: {\n type: Boolean,\n custom: true,\n default: true,\n },\n disableScrollPropagation: {\n type: Boolean,\n custom: true,\n default: false,\n },\n },\n setup(props, context) {\n const leafletRef = ref({});\n const root = ref(null);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const registerControl = inject(\"registerControl\");\n\n const { options, methods } = setup$6(props, leafletRef);\n\n onMounted(async () => {\n const { Control, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n const LControl = Control.extend({\n onAdd() {\n return root.value;\n },\n });\n\n leafletRef.value = new LControl(options);\n propsBinder(methods, leafletRef.value, props);\n registerControl({ leafletObject: leafletRef.value });\n\n if (props.disableClickPropagation) {\n DomEvent.disableClickPropagation(root.value);\n }\n if (props.disableScrollPropagation) {\n DomEvent.disableScrollPropagation(root.value);\n }\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { root, leafletObject: leafletRef };\n },\n render() {\n return render$1(this.$slots);\n },\n};\n\nscript$2.__file = \"src/components/LControl.vue\";\n\nconst props$7 = {\n ...props$6,\n prefix: {\n type: String,\n default: \"Vue-Leaflet\",\n custom: true,\n },\n};\n\nconst setup$7 = (props, leafletRef) => {\n const { options: controlOptions, methods: controlMethods } = setup$6(\n props,\n leafletRef\n );\n const options = {\n ...controlOptions,\n prefix: props.prefix,\n };\n\n const methods = {\n ...controlMethods,\n setPrefix(prefix) {\n leafletRef.value.setPrefix(prefix);\n },\n };\n\n return { options, methods };\n};\n\nvar script$3 = {\n name: \"LControlAttribution\",\n props: props$7,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const registerControl = inject(\"registerControl\");\n\n const { options, methods } = setup$7(props, leafletRef);\n\n onMounted(async () => {\n const { control } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = control.attribution(options);\n propsBinder(methods, leafletRef.value, props);\n registerControl({ leafletObject: leafletRef.value });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { leafletObject: leafletRef.value };\n },\n render() {\n return null;\n },\n};\n\nscript$3.__file = \"src/components/LControlAttribution.vue\";\n\nconst props$8 = {\n ...props$6,\n collapsed: {\n type: Boolean,\n default: true,\n },\n autoZIndex: {\n type: Boolean,\n default: true,\n },\n hideSingleBase: {\n type: Boolean,\n default: false,\n },\n sortLayers: {\n type: Boolean,\n default: false,\n },\n sortFunction: {\n type: Function,\n default: undefined,\n },\n};\n\nconst setup$8 = (props, leafletRef) => {\n const { options: controlOptions } = setup$6(props, leafletRef);\n const options = {\n ...controlOptions,\n collapsed: props.collapsed,\n autoZIndex: props.autoZIndex,\n hideSingleBase: props.hideSingleBase,\n sortLayers: props.sortLayers,\n sortFunction: props.sortFunction,\n };\n\n const methods = {\n addLayer(layer) {\n if (layer.layerType === \"base\") {\n leafletRef.value.addBaseLayer(layer.leafletObject, layer.name);\n } else if (layer.layerType === \"overlay\") {\n leafletRef.value.addOverlay(layer.leafletObject, layer.name);\n }\n },\n removeLayer(layer) {\n leafletRef.value.removeLayer(layer.leafletObject);\n },\n };\n return { options, methods };\n};\n\nvar script$4 = {\n name: \"LControlLayers\",\n props: props$8,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const registerLayerControl = inject(\"registerLayerControl\");\n\n const { options, methods } = setup$8(props, leafletRef);\n\n onMounted(async () => {\n const { control } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = control.layers(null, null, options);\n\n propsBinder(methods, leafletRef.value, props);\n\n registerLayerControl({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { leafletObject: leafletRef.value };\n },\n render() {\n return null;\n },\n};\n\nscript$4.__file = \"src/components/LControlLayers.vue\";\n\nconst props$9 = {\n ...props$6,\n maxWidth: {\n type: Number,\n default: 100,\n },\n metric: {\n type: Boolean,\n default: true,\n },\n imperial: {\n type: Boolean,\n default: true,\n },\n updateWhenIdle: {\n type: Boolean,\n default: false,\n },\n};\n\nconst setup$9 = (props, leafletRef) => {\n const { options: controlOptions, methods: controlMethods } = setup$6(\n props,\n leafletRef\n );\n const options = {\n ...controlOptions,\n maxWidth: props.maxWidth,\n metric: props.metric,\n imperial: props.imperial,\n updateWhenIdle: props.updateWhenIdle,\n };\n\n return { options, methods: controlMethods };\n};\n\nvar script$5 = {\n name: \"LControlScale\",\n props: props$9,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const registerControl = inject(\"registerControl\");\n\n const { options, methods } = setup$9(props, leafletRef);\n\n onMounted(async () => {\n const { control } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = control.scale(options);\n propsBinder(methods, leafletRef.value, props);\n registerControl({ leafletObject: leafletRef.value });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { leafletObject: leafletRef.value };\n },\n render() {\n return null;\n },\n};\n\nscript$5.__file = \"src/components/LControlScale.vue\";\n\nconst props$a = {\n ...props$6,\n zoomInText: {\n type: String,\n default: \"+\",\n },\n zoomInTitle: {\n type: String,\n default: \"Zoom in\",\n },\n zoomOutText: {\n type: String,\n default: \"-\",\n },\n zoomOutTitle: {\n type: String,\n default: \"Zoom out\",\n },\n};\n\nconst setup$a = (props, leafletRef) => {\n const { options: controlOptions, methods: controlMethods } = setup$6(\n props,\n leafletRef\n );\n const options = {\n ...controlOptions,\n zoomInText: props.zoomInText,\n zoomInTitle: props.zoomInTitle,\n zoomOutText: props.zoomOutText,\n zoomOutTitle: props.zoomOutTitle,\n };\n\n return { options, methods: controlMethods };\n};\n\nvar script$6 = {\n name: \"LControlZoom\",\n props: props$a,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const registerControl = inject(\"registerControl\");\n\n const { options, methods } = setup$a(props, leafletRef);\n\n onMounted(async () => {\n const { control } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = control.zoom(options);\n propsBinder(methods, leafletRef.value, props);\n registerControl({ leafletObject: leafletRef.value });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { leafletObject: leafletRef.value };\n },\n render() {\n return null;\n },\n};\n\nscript$6.__file = \"src/components/LControlZoom.vue\";\n\nconst props$b = {\n ...props$1,\n};\n\nconst setup$b = (props, leafletRef, context) => {\n const { options: layerOptions, methods: layerMethods } = setup$1(\n props,\n leafletRef,\n context\n );\n\n const options = {\n ...layerOptions,\n };\n\n const methods = {\n ...layerMethods,\n addLayer(layer) {\n leafletRef.value.addLayer(layer.leafletObject);\n },\n removeLayer(layer) {\n leafletRef.value.removeLayer(layer.leafletObject);\n },\n };\n\n provide(\"addLayer\", methods.addLayer);\n provide(\"removeLayer\", methods.removeLayer);\n\n return { options, methods };\n};\n\nconst props$c = {\n ...props$b,\n};\n\nconst setup$c = (props, leafletRef) => {\n const { options: layerOptions, methods: layerGroupMethods } = setup$b(\n props,\n leafletRef\n );\n\n const options = {\n ...layerOptions,\n ...props,\n };\n\n const methods = {\n ...layerGroupMethods,\n };\n\n return { options, methods };\n};\n\nvar script$7 = {\n props: props$c,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { methods, options } = setup$c(props, leafletRef);\n\n onMounted(async () => {\n const { featureGroup, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = featureGroup(options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$7.__file = \"src/components/LFeatureGroup.vue\";\n\nconst props$d = {\n ...props$b,\n geojson: {\n type: [Object, Array],\n default: () => ({}),\n },\n};\n\nconst setup$d = (props, leafletRef) => {\n const { options: layerOptions, methods: layerGroupMethods } = setup$b(\n props,\n leafletRef\n );\n\n const options = {\n ...layerOptions,\n ...props,\n };\n\n const methods = {\n ...layerGroupMethods,\n setGeojson(newVal) {\n leafletRef.value.clearLayers();\n leafletRef.value.addData(newVal);\n },\n getGeoJSONData() {\n return leafletRef.value.toGeoJSON();\n },\n getBounds() {\n return leafletRef.value.getBounds();\n },\n };\n\n return { options, methods };\n};\n\nvar script$8 = {\n props: props$d,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { methods, options } = setup$d(props, leafletRef);\n\n onMounted(async () => {\n const { geoJSON, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = geoJSON(props.geojson, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$8.__file = \"src/components/LGeoJson.vue\";\n\nconst props$e = {\n ...props$1,\n pane: {\n type: String,\n default: \"tilePane\",\n },\n opacity: {\n type: Number,\n custom: false,\n default: 1.0,\n },\n zIndex: {\n type: Number,\n default: 1,\n },\n tileSize: {\n type: Number,\n default: 256,\n },\n noWrap: {\n type: Boolean,\n default: false,\n },\n minZoom: {\n type: Number,\n default: 0,\n },\n maxZoom: {\n type: Number,\n default: undefined,\n },\n};\n\nconst setup$e = (props, leafletRef, context) => {\n const { options: layerOptions, methods: layerMethods } = setup$1(\n props,\n leafletRef,\n context\n );\n const options = {\n ...layerOptions,\n pane: props.pane,\n opacity: props.opacity,\n zIndex: props.zIndex,\n tileSize: props.tileSize,\n noWrap: props.noWrap,\n minZoom: props.minZoom,\n maxZoom: props.maxZoom,\n };\n return { options, methods: { ...layerMethods } };\n};\n\nvar script$9 = {\n props: {\n ...props$e,\n childRender: {\n type: Function,\n required: true,\n },\n },\n setup(props, context) {\n const leafletRef = ref({});\n const tileComponents = ref({});\n const root = ref(null);\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$e(props, leafletRef, context);\n\n onMounted(async () => {\n const { GridLayer, DomEvent, DomUtil } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n methods.onUnload = (e) => {\n const key = leafletRef.value._tileCoordsToKey(e.coords);\n if (tileComponents[key]) {\n tileComponents[key].innerHTML = \"\";\n tileComponents[key] = undefined;\n }\n };\n\n methods.setTileComponent = () => {\n leafletRef.value.redraw();\n };\n\n const GLayer = GridLayer.extend({\n createTile(coords) {\n const key = leafletRef.value._tileCoordsToKey(coords);\n tileComponents[key] = DomUtil.create(\"div\");\n\n let vNode = h(\n { setup: props.childRender, props: [\"coords\"] },\n { coords }\n );\n render$3(vNode, tileComponents[key]);\n\n return tileComponents[key];\n },\n });\n\n leafletRef.value = new GLayer(options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n leafletRef.value.on(\"tileunload\", methods.onUnload);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n onUnmounted(() => {\n leafletRef.value.off(\"tileunload\", methods.unLoad);\n });\n\n return { root, ready, leafletObject: leafletRef };\n },\n render() {\n if (this.ready) {\n return h(\"div\", { style: { display: \"none\" }, ref: \"root\" });\n }\n return null;\n },\n};\n\nscript$9.__file = \"src/components/LGridLayer.vue\";\n\nconst props$f = {\n iconUrl: {\n type: String,\n custom: true,\n default: null,\n },\n iconRetinaUrl: {\n type: String,\n custom: true,\n default: null,\n },\n iconSize: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n iconAnchor: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n popupAnchor: {\n type: [Object, Array],\n custom: true,\n default: () => [0, 0],\n },\n tooltipAnchor: {\n type: [Object, Array],\n custom: true,\n default: () => [0, 0],\n },\n shadowUrl: {\n type: String,\n custom: true,\n default: null,\n },\n shadowRetinaUrl: {\n type: String,\n custom: true,\n default: null,\n },\n shadowSize: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n shadowAnchor: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n bgPos: {\n type: [Object, Array],\n custom: true,\n default: () => [0, 0],\n },\n className: {\n type: String,\n custom: true,\n default: \"\",\n },\n options: {\n type: Object,\n custom: true,\n default: () => ({}),\n },\n};\n\n/**\n * Icon component, lets you add and custom icons to the map\n */\nvar script$a = {\n name: \"LIcon\",\n props: {\n ...props$f,\n ...props,\n },\n setup(props, context) {\n const root = ref(null);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const canSetParentHtml = inject(\"canSetParentHtml\");\n const setParentHtml = inject(\"setParentHtml\");\n const setIcon = inject(\"setIcon\");\n\n let onDomEvent;\n let offDomEvent;\n let divIcon;\n let icon;\n let iconObject = undefined;\n\n const createIcon = (el, recreationNeeded, htmlSwapNeeded) => {\n const elHtml = el && el.innerHTML;\n if (!recreationNeeded) {\n if (htmlSwapNeeded && iconObject && canSetParentHtml()) {\n setParentHtml(elHtml);\n }\n return;\n }\n\n const listeners = remapEvents(context.attrs);\n if (iconObject) {\n offDomEvent(iconObject, listeners);\n }\n\n const { options: componentOptions } = setup(props);\n const options = {\n ...componentOptions,\n iconUrl: props.iconUrl,\n iconRetinaUrl: props.iconRetinaUrl,\n iconSize: props.iconSize,\n iconAnchor: props.iconAnchor,\n popupAnchor: props.popupAnchor,\n tooltipAnchor: props.tooltipAnchor,\n shadowUrl: props.shadowUrl,\n shadowRetinaUrl: props.shadowRetinaUrl,\n shadowSize: props.shadowSize,\n shadowAnchor: props.shadowAnchor,\n bgPos: props.bgPos,\n className: props.className,\n html: elHtml || props.html,\n };\n\n iconObject = options.html ? divIcon(options) : icon(options);\n onDomEvent(iconObject, listeners);\n setIcon(iconObject);\n };\n\n const scheduleCreateIcon = () => {\n nextTick(() => createIcon(root.value, true, false));\n };\n\n const scheduleHtmlSwap = () => {\n nextTick(() => createIcon(root.value, false, true));\n };\n\n const methods = {\n setIconUrl: scheduleCreateIcon,\n setIconRetinaUrl: scheduleCreateIcon,\n setIconSize: scheduleCreateIcon,\n setIconAnchor: scheduleCreateIcon,\n setPopupAnchor: scheduleCreateIcon,\n setTooltipAnchor: scheduleCreateIcon,\n setShadowUrl: scheduleCreateIcon,\n setShadowRetinaUrl: scheduleCreateIcon,\n setShadowAnchor: scheduleCreateIcon,\n setBgPos: scheduleCreateIcon,\n setClassName: scheduleCreateIcon,\n setHtml: scheduleCreateIcon,\n };\n\n onMounted(async () => {\n const { DomEvent, divIcon: lDivIcon, icon: lIcon } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n onDomEvent = DomEvent.on;\n offDomEvent = DomEvent.off;\n divIcon = lDivIcon;\n icon = lIcon;\n\n propsBinder(methods, {}, props);\n\n const observer = new MutationObserver(scheduleHtmlSwap);\n observer.observe(root.value, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n scheduleCreateIcon();\n });\n\n return { root };\n },\n render() {\n const content = this.$slots.default ? this.$slots.default() : undefined;\n return h(\"div\", { ref: \"root\" }, content);\n },\n};\n\nscript$a.__file = \"src/components/LIcon.vue\";\n\n/**\n * @typedef {import('leaflet/dist/leaflet-src.esm.js').LatLngBounds} LatLngBounds\n */\n\nconst props$g = {\n ...props$1,\n url: {\n type: String,\n required: true,\n },\n bounds: {\n type: [Array, Object],\n required: true,\n },\n opacity: {\n type: Number,\n custom: true,\n default: 1.0,\n },\n alt: {\n type: String,\n default: \"\",\n },\n interactive: {\n type: Boolean,\n default: false,\n },\n crossOrigin: {\n type: Boolean,\n default: false,\n },\n errorOverlayUrl: {\n type: String,\n custom: true,\n default: \"\",\n },\n zIndex: {\n type: Number,\n custom: true,\n default: 1,\n },\n className: {\n type: String,\n default: \"\",\n },\n};\n\nconst setup$f = (setupProps, LeafletRef, context) => {\n const { options: layerOptions, methods: layerMethods } = setup$1(\n setupProps,\n LeafletRef,\n context\n );\n const options = {\n ...layerOptions,\n ...setupProps,\n };\n\n const methods = {\n ...layerMethods,\n /**\n * Sets the opacity of the overlay.\n * @param {number} opacity\n */\n setOpacity(opacity) {\n return LeafletRef.value.setOpacity(opacity);\n },\n /**\n * Changes the URL of the image.\n * @param {string} url\n */\n setUrl(url) {\n return LeafletRef.value.setUrl(url);\n },\n /**\n * Update the bounds that this ImageOverlay covers\n * @param {LatLngBounds | Array<Array<number>>} bounds\n */\n setBounds(bounds) {\n return LeafletRef.value.setBounds(bounds);\n },\n /**\n * Get the bounds that this ImageOverlay covers\n * @returns {LatLngBounds}\n */\n getBounds() {\n return LeafletRef.value.getBounds();\n },\n /**\n * Returns the instance of HTMLImageElement used by this overlay.\n * @returns {HTMLElement}\n */\n getElement() {\n return LeafletRef.value.getElement();\n },\n /**\n * Brings the layer to the top of all overlays.\n */\n bringToFront() {\n return LeafletRef.value.bringToFront();\n },\n /**\n * Brings the layer to the bottom of all overlays.\n */\n bringToBack() {\n return LeafletRef.value.bringToBack();\n },\n /**\n * Changes the zIndex of the image overlay.\n * @param {number} zIndex\n */\n setZIndex(zIndex) {\n return LeafletRef.value.setZIndex(zIndex);\n },\n };\n\n return { options, methods };\n};\n\n/**\n * ImageOverlay component, render a plain image instead of a geospatial map.\n */\nvar script$b = {\n name: \"LImageOverlay\",\n props: props$g,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$f(props, leafletRef, context);\n\n onMounted(async () => {\n const { imageOverlay, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n leafletRef.value = imageOverlay(props.url, props.bounds, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$b.__file = \"src/components/LImageOverlay.vue\";\n\nvar script$c = {\n props: props$b,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { methods } = setup$b(props, leafletRef, context);\n\n onMounted(async () => {\n const { layerGroup, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n leafletRef.value = layerGroup(props.options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$c.__file = \"src/components/LLayerGroup.vue\";\n\nvar script$d = {\n emits: [\"ready\", \"update:zoom\", \"update:center\", \"update:bounds\"],\n props: {\n ...props,\n /**\n * The center of the map, supports .sync modifier\n */\n center: {\n type: [Object, Array],\n default: () => [0, 0],\n },\n /**\n * The bounds of the map, supports .sync modifier\n */\n bounds: {\n type: [Array, Object],\n default: undefined,\n },\n /**\n * The max bounds of the map\n */\n maxBounds: {\n type: [Array, Object],\n default: undefined,\n },\n /**\n * The zoom of the map, supports .sync modifier\n */\n zoom: {\n type: Number,\n default: 0,\n },\n /**\n * The minZoom of the map\n */\n minZoom: {\n type: Number,\n default: undefined,\n },\n /**\n * The maxZoom of the map\n */\n maxZoom: {\n type: Number,\n default: undefined,\n },\n /**\n * The paddingBottomRight of the map\n */\n paddingBottomRight: {\n type: Array,\n default: undefined,\n },\n /**\n * The paddingTopLeft of the map\n */\n paddingTopLeft: {\n type: Array,\n default: undefined,\n },\n /**\n * The padding of the map\n */\n padding: {\n type: Array,\n default: undefined,\n },\n /**\n * The worldCopyJump option for the map\n */\n worldCopyJump: {\n type: Boolean,\n default: false,\n },\n /**\n * The CRS to use for the map. Can be an object that defines a coordinate reference\n * system for projecting geographical points into screen coordinates and back\n * (see https://leafletjs.com/reference-1.7.1.html#crs-l-crs-base), or a string\n * name identifying one of Leaflet's defined CRSs, such as \"EPSG4326\".\n */\n crs: {\n type: [String, Object],\n default: \"EPSG3857\",\n },\n maxBoundsViscosity: {\n type: Number,\n default: undefined,\n },\n inertia: {\n type: Boolean,\n default: undefined,\n },\n inertiaDeceleration: {\n type: Number,\n default: undefined,\n },\n inertiaMaxSpeed: {\n type: Number,\n default: undefined,\n },\n easeLinearity: {\n type: Number,\n default: undefined,\n },\n zoomAnimation: {\n type: Boolean,\n default: undefined,\n },\n zoomAnimationThreshold: {\n type: Number,\n default: undefined,\n },\n fadeAnimation: {\n type: Boolean,\n default: undefined,\n },\n markerZoomAnimation: {\n type: Boolean,\n default: undefined,\n },\n noBlockingAnimations: {\n type: Boolean,\n default: false,\n },\n useGlobalLeaflet: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, context) {\n const root = ref(null);\n const blueprint = reactive({\n ready: false,\n leafletRef: {},\n layersToAdd: [],\n layersInControl: [],\n });\n const { options: componentOptions } = setup(props);\n const options = {\n ...componentOptions,\n minZoom: props.minZoom,\n maxZoom: props.maxZoom,\n maxBounds: props.maxBounds,\n maxBoundsViscosity: props.maxBoundsViscosity,\n worldCopyJump: props.worldCopyJump,\n crs: props.crs,\n center: props.center,\n zoom: props.zoom,\n inertia: props.inertia,\n inertiaDeceleration: props.inertiaDeceleration,\n inertiaMaxSpeed: props.inertiaMaxSpeed,\n easeLinearity: props.easeLinearity,\n zoomAnimation: props.zoomAnimation,\n zoomAnimationThreshold: props.zoomAnimationThreshold,\n fadeAnimation: props.fadeAnimation,\n markerZoomAnimation: props.markerZoomAnimation,\n };\n\n const addLayer = provideLeafletWrapper(\"addLayer\");\n const removeLayer = provideLeafletWrapper(\"removeLayer\");\n const registerControl = provideLeafletWrapper(\"registerControl\");\n const registerLayerControl = provideLeafletWrapper(\"registerLayerControl\");\n provide(GLOBAL_LEAFLET_OPT, props.useGlobalLeaflet);\n\n const eventHandlers = {\n moveEndHandler() {\n /**\n * Triggers when zoom is updated\n * @type {number,string}\n */\n context.emit(\"update:zoom\", blueprint.leafletRef.getZoom());\n /**\n * Triggers when center is updated\n * @type {object,array}\n */\n context.emit(\"update:center\", blueprint.leafletRef.getCenter());\n\n /**\n * Triggers when bounds are updated\n * @type {object}\n */\n context.emit(\"update:bounds\", blueprint.leafletRef.getBounds());\n },\n overlayAddHandler(e) {\n const layer = blueprint.layersInControl.find((l) => l.name === e.name);\n if (layer) {\n layer.updateVisibleProp(true);\n }\n },\n overlayRemoveHandler(e) {\n const layer = blueprint.layersInControl.find((l) => l.name === e.name);\n if (layer) {\n layer.updateVisibleProp(false);\n }\n },\n };\n\n onMounted(async () => {\n if (props.useGlobalLeaflet) {\n WINDOW_OR_GLOBAL.L = WINDOW_OR_GLOBAL.L || (await import('leaflet'));\n }\n const {\n map,\n CRS,\n Icon,\n latLngBounds,\n latLng,\n DomEvent,\n } = props.useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n try {\n options.beforeMapMount && (await options.beforeMapMount());\n } catch (error) {\n console.error(\n `The following error occurred running the provided beforeMapMount hook ${error.message}`\n );\n }\n\n await resetWebpackIcon(Icon);\n\n const optionsCrs =\n typeof options.crs == \"string\" ? CRS[options.crs] : options.crs;\n options.crs = optionsCrs || CRS.EPSG3857;\n\n const methods = {\n addLayer(layer) {\n if (layer.layerType !== undefined) {\n if (blueprint.layerControl === undefined) {\n blueprint.layersToAdd.push(layer);\n } else {\n const exist = blueprint.layersInControl.find(\n (l) =>\n l.leafletObject._leaflet_id ===\n layer.leafletObject._leaflet_id\n );\n if (!exist) {\n blueprint.layerControl.addLayer(layer);\n blueprint.layersInControl.push(layer);\n }\n }\n }\n if (layer.visible !== false) {\n blueprint.leafletRef.addLayer(layer.leafletObject);\n }\n },\n removeLayer(layer) {\n if (layer.layerType !== undefined) {\n if (blueprint.layerControl === undefined) {\n blueprint.layersToAdd = blueprint.layersToAdd.filter(\n (l) => l.name !== layer.name\n );\n } else {\n blueprint.layerControl.removeLayer(layer.leafletObject);\n blueprint.layersInControl = blueprint.layersInControl.filter(\n (l) =>\n l.leafletObject._leaflet_id !==\n layer.leafletObject._leaflet_id\n );\n }\n }\n blueprint.leafletRef.removeLayer(layer.leafletObject);\n },\n\n registerLayerControl(lControlLayer) {\n blueprint.layerControl = lControlLayer;\n blueprint.layersToAdd.forEach((layer) => {\n blueprint.layerControl.addLayer(layer);\n });\n blueprint.layersToAdd = [];\n\n registerControl(lControlLayer);\n },\n\n registerControl(lControl) {\n blueprint.leafletRef.addControl(lControl.leafletObject);\n },\n\n setZoom(newVal) {\n const zoom = blueprint.leafletRef.getZoom();\n if (newVal !== zoom) {\n blueprint.leafletRef.setZoom(newVal, {\n animate: props.noBlockingAnimations ? false : null,\n });\n }\n },\n\n setPaddingBottomRight(newVal) {\n blueprint.paddingBottomRight = newVal;\n },\n setPaddingTopLeft(newVal) {\n blueprint.paddingTopLeft = newVal;\n },\n setPadding(newVal) {\n blueprint.padding = newVal;\n },\n setCrs(newVal) {\n const prevBounds = blueprint.leafletRef.getBounds();\n blueprint.leafletRef.options.crs = newVal;\n blueprint.leafletRef.fitBounds(prevBounds, {\n animate: false,\n padding: [0, 0],\n });\n },\n fitBounds(bounds) {\n blueprint.leafletRef.fitBounds(bounds, {\n animate: this.noBlockingAnimations ? false : null,\n });\n },\n setBounds(newVal) {\n if (!newVal) {\n return;\n }\n const newBounds = latLngBounds(newVal);\n if (!newBounds.isValid()) {\n return;\n }\n const oldBounds =\n blueprint.lastSetBounds || blueprint.leafletRef.getBounds();\n const boundsChanged = !oldBounds.equals(newBounds, 0); // set maxMargin to 0 - check exact equals\n if (boundsChanged) {\n blueprint.lastSetBounds = newBounds;\n blueprint.leafletRef.fitBounds(newBounds, this.fitBoundsOptions);\n }\n },\n\n setCenter(newVal) {\n if (newVal == null) {\n return;\n }\n const newCenter = latLng(newVal);\n const oldCenter =\n blueprint.lastSetCenter || blueprint.leafletRef.getCenter();\n if (\n oldCenter.lat !== newCenter.lat ||\n oldCenter.lng !== newCenter.lng\n ) {\n blueprint.lastSetCenter = newCenter;\n blueprint.leafletRef.panTo(newCenter, {\n animate: this.noBlockingAnimations ? false : null,\n });\n }\n },\n };\n\n updateLeafletWrapper(addLayer, methods.addLayer);\n updateLeafletWrapper(removeLayer, methods.removeLayer);\n updateLeafletWrapper(registerControl, methods.registerControl);\n updateLeafletWrapper(registerLayerControl, methods.registerLayerControl);\n\n blueprint.leafletRef = map(root.value, options);\n\n propsBinder(methods, blueprint.leafletRef, props);\n const listeners = remapEvents(context.attrs);\n\n blueprint.leafletRef.on(\n \"moveend\",\n debounce(eventHandlers.moveEndHandler, 100)\n );\n blueprint.leafletRef.on(\"overlayadd\", eventHandlers.overlayAddHandler);\n blueprint.leafletRef.on(\n \"overlayremove\",\n eventHandlers.overlayRemoveHandler\n );\n DomEvent.on(blueprint.leafletRef, listeners);\n blueprint.ready = true;\n nextTick(() => context.emit(\"ready\", blueprint.leafletRef));\n });\n\n onBeforeUnmount(() => {\n if (blueprint.leafletRef) {\n blueprint.leafletRef.remove();\n }\n });\n\n const leafletObject = computed(() => blueprint.leafletRef);\n const ready = computed(() => blueprint.ready);\n return { root, ready, leafletObject };\n },\n render() {\n return h(\n \"div\",\n { style: { width: \"100%\", height: \"100%\" }, ref: \"root\" },\n this.ready ? this.$slots.default() : {}\n );\n },\n};\n\nscript$d.__file = \"src/components/LMap.vue\";\n\nconst props$h = {\n ...props$1,\n pane: {\n type: String,\n default: \"markerPane\",\n },\n draggable: {\n type: Boolean,\n custom: true,\n default: false,\n },\n latLng: {\n type: [Object, Array],\n custom: true,\n default: null,\n },\n icon: {\n type: [Object],\n default: () => undefined,\n custom: false,\n },\n zIndexOffset: {\n type: Number,\n custom: false,\n default: null,\n },\n};\n\nconst setup$g = (props, leafletRef, context) => {\n const { options: layerOptions, methods: layerMethods } = setup$1(\n props,\n leafletRef,\n context\n );\n const options = {\n ...layerOptions,\n ...props,\n };\n\n const methods = {\n ...layerMethods,\n setDraggable(value) {\n if (leafletRef.value.dragging) {\n value\n ? leafletRef.value.dragging.enable()\n : leafletRef.value.dragging.disable();\n }\n },\n latLngSync(event) {\n context.emit(\"update:latLng\", event.latlng);\n context.emit(\"update:lat-lng\", event.latlng);\n },\n setLatLng(newVal) {\n if (newVal == null) {\n return;\n }\n\n if (leafletRef.value) {\n const oldLatLng = leafletRef.value.getLatLng();\n if (!oldLatLng || !oldLatLng.equals(newVal)) {\n leafletRef.value.setLatLng(newVal);\n }\n }\n },\n };\n return { options, methods };\n};\n\n/**\n * Marker component, lets you add and personalize markers on the map\n */\nvar script$e = {\n name: \"LMarker\",\n props: props$h,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n provide(\"canSetParentHtml\", () => !!leafletRef.value.getElement());\n provide(\n \"setParentHtml\",\n (html) => (leafletRef.value.getElement().innerHTML = html)\n );\n provide(\n \"setIcon\",\n (newIcon) => leafletRef.value.setIcon && leafletRef.value.setIcon(newIcon)\n );\n const { options, methods } = setup$g(props, leafletRef, context);\n if (options.icon === undefined) {\n // If the options objection has a property named 'icon', then Leaflet will overwrite\n // the default icon with it for the marker, _even if it is undefined_.\n // This leads to the issue discussed in https://github.com/vue-leaflet/vue-leaflet/issues/130\n delete options.icon;\n }\n\n onMounted(async () => {\n const { marker, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n leafletRef.value = marker(props.latLng, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n leafletRef.value.on(\"move\", debounce(methods.latLngSync, 100));\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$e.__file = \"src/components/LMarker.vue\";\n\nconst props$i = {\n ...props$3,\n latLngs: {\n type: Array,\n default: () => [],\n },\n smoothFactor: {\n type: Number,\n custom: true,\n default: 1.0,\n },\n noClip: {\n type: Boolean,\n custom: true,\n default: false,\n },\n};\n\nconst setup$h = (props, leafletRef, context) => {\n const { options: pathOptions, methods: pathMethods } = setup$3(\n props,\n leafletRef,\n context\n );\n const options = {\n ...pathOptions,\n ...props,\n };\n\n const methods = {\n ...pathMethods,\n setSmoothFactor(smoothFactor) {\n leafletRef.value.setStyle({ smoothFactor });\n },\n setNoClip(noClip) {\n leafletRef.value.setStyle({ noClip });\n },\n addLatLng(latLng) {\n leafletRef.value.addLatLng(latLng);\n },\n };\n return { options, methods };\n};\n\nconst props$j = {\n ...props$i,\n};\n\nconst setup$i = (props, leafletRef, context) => {\n const { options: polylineOptions, methods: polylineMethods } = setup$h(\n props,\n leafletRef,\n context\n );\n const options = {\n ...polylineOptions,\n ...props,\n };\n\n const methods = {\n ...polylineMethods,\n toGeoJSON(precision) {\n return leafletRef.value.toGeoJSON(precision);\n },\n };\n\n return { options, methods };\n};\n\n/**\n * Polygon component, lets you add and customize polygon regions on the map\n */\nvar script$f = {\n name: \"LPolygon\",\n props: props$j,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$i(props, leafletRef, context);\n\n onMounted(async () => {\n const { polygon, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = polygon(props.latLngs, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$f.__file = \"src/components/LPolygon.vue\";\n\n/**\n * Polyline component, lets you add and personalize polylines on the map\n */\nvar script$g = {\n name: \"LPolyline\",\n props: props$i,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$h(props, leafletRef, context);\n\n onMounted(async () => {\n const { polyline, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = polyline(props.latLngs, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$g.__file = \"src/components/LPolyline.vue\";\n\nconst props$k = {\n ...props,\n content: {\n type: String,\n default: null,\n },\n};\n\nconst setup$j = (props, leafletRef) => {\n const { options, methods: componentMethods } = setup(props);\n const methods = {\n ...componentMethods,\n setContent(newVal) {\n if (leafletRef.value && newVal !== null && newVal !== undefined) {\n leafletRef.value.setContent(newVal);\n }\n },\n };\n return { options, methods };\n};\n\nconst render$2 = (slots) => {\n if (slots.default) {\n return h(\"div\", { ref: \"root\" }, slots.default());\n }\n return null;\n};\n\nconst props$l = {\n ...props$k,\n latLng: {\n type: [Object, Array],\n default: () => [],\n },\n};\n\nconst setup$k = (props, leafletRef) => {\n const { options, methods } = setup$j(props, leafletRef);\n const unbindPopup = inject(\"unbindPopup\");\n\n onBeforeUnmount(() => {\n unbindPopup();\n });\n\n return { options, methods };\n};\n\n/**\n * Display a popup on the map\n */\nvar script$h = {\n name: \"LPopup\",\n props: props$l,\n setup(props, context) {\n const leafletRef = ref({});\n const root = ref(null);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const bindPopup = inject(\"bindPopup\");\n\n const { options, methods } = setup$k(props, leafletRef);\n\n onMounted(async () => {\n const { popup, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = popup(options);\n\n if (props.latLng !== undefined) {\n leafletRef.value.setLatLng(props.latLng);\n }\n\n propsBinder(methods, leafletRef.value, props);\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n leafletRef.value.setContent(props.content || root.value);\n bindPopup({ leafletObject: leafletRef.value });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { root, leafletObject: leafletRef };\n },\n render() {\n return render$2(this.$slots);\n },\n};\n\nscript$h.__file = \"src/components/LPopup.vue\";\n\nconst props$m = {\n ...props$j,\n bounds: {\n type: Array,\n default: undefined,\n },\n};\n\nconst setup$l = (props, leafletRef, context) => {\n const { options: polygonOptions, methods: polygonMethods } = setup$i(\n props,\n leafletRef,\n context\n );\n const options = {\n ...polygonOptions,\n ...props,\n };\n\n const methods = {\n ...polygonMethods,\n setBounds(latLngBounds) {\n leafletRef.value.setBounds(latLngBounds);\n },\n setLatLngs(latLngs) {\n // Calling setLatLngs on a Leaflet rectangle will convert it\n // to a polygon. So instead, we call setBounds here to ensure\n // that the rectangle remains a rectangle, defined by the\n // bounds of the points in the latLngs array.\n leafletRef.value.setBounds(latLngs);\n },\n };\n\n return { options, methods };\n};\n\n/**\n * Rectangle component, lets you add and customize rectangular regions on the map\n */\nvar script$i = {\n name: \"LRectangle\",\n props: props$m,\n setup(props, context) {\n const leafletRef = ref({});\n const ready = ref(false);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$l(props, leafletRef, context);\n\n onMounted(async () => {\n const { rectangle, latLngBounds, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n const bounds =\n props.bounds && props.bounds.length\n ? latLngBounds(props.bounds)\n : latLngBounds(props.latLngs);\n leafletRef.value = rectangle(bounds, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n ready.value = true;\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n return { ready, leafletObject: leafletRef };\n },\n render() {\n return render(this.ready, this.$slots);\n },\n};\n\nscript$i.__file = \"src/components/LRectangle.vue\";\n\nconst props$n = {\n ...props$e,\n tms: {\n type: Boolean,\n default: false,\n },\n subdomains: {\n type: String,\n default: \"abc\",\n },\n detectRetina: {\n type: Boolean,\n default: false,\n },\n url: {\n type: String,\n default: null,\n },\n};\n\nconst setup$m = (props, leafletRef) => {\n const {\n options: gridLayerOptions,\n methods: gridLayerMethods,\n } = setup$e(props, leafletRef);\n const options = {\n ...gridLayerOptions,\n tms: props.tms,\n subdomains: props.subdomains,\n detectRetina: props.detectRetina,\n };\n return {\n options,\n methods: {\n ...gridLayerMethods,\n },\n };\n};\n\nvar script$j = {\n props: props$n,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$m(props, leafletRef);\n\n onMounted(async () => {\n const { tileLayer, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n leafletRef.value = tileLayer(props.url, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n\n return { leafletObject: leafletRef };\n },\n render() {\n return null;\n },\n};\n\nscript$j.__file = \"src/components/LTileLayer.vue\";\n\nconst props$o = {\n ...props$k,\n};\n\nconst setup$n = (props, leafletRef) => {\n const { options, methods } = setup$j(props, leafletRef);\n const unbindTooltip = inject(\"unbindTooltip\");\n\n onBeforeUnmount(() => {\n unbindTooltip();\n });\n\n return { options, methods };\n};\n\n/**\n * Display a tooltip on the map\n */\nvar script$k = {\n name: \"LTooltip\",\n props: props$o,\n setup(props, context) {\n const leafletRef = ref({});\n const root = ref(null);\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const bindTooltip = inject(\"bindTooltip\");\n\n const { options, methods } = setup$n(props, leafletRef);\n\n onMounted(async () => {\n const { tooltip, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = tooltip(options);\n\n propsBinder(methods, leafletRef.value, props);\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n leafletRef.value.setContent(props.content || root.value);\n bindTooltip({ leafletObject: leafletRef.value });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { root, leafletObject: leafletRef };\n },\n render() {\n return render$2(this.$slots);\n },\n};\n\nscript$k.__file = \"src/components/LTooltip.vue\";\n\nconst props$p = {\n ...props$n,\n baseUrl: {\n type: String,\n default: null,\n required: true,\n },\n layers: {\n type: String,\n default: \"\",\n },\n styles: {\n type: String,\n default: \"\",\n },\n format: {\n type: String,\n default: \"image/jpeg\",\n },\n transparent: {\n type: Boolean,\n custom: false,\n },\n version: {\n type: String,\n default: \"1.1.1\",\n },\n crs: {\n default: null,\n },\n upperCase: {\n type: Boolean,\n default: false,\n },\n};\n\nconst setup$o = (props, leafletRef) => {\n const {\n options: tileLayerOptions,\n methods: tileLayerMethods,\n } = setup$m(props, leafletRef);\n const options = {\n ...tileLayerOptions,\n layers: props.layers,\n styles: props.styles,\n format: props.format,\n transparent: props.transparent,\n version: props.version,\n crs: props.crs,\n upperCase: props.upperCase,\n };\n return {\n options,\n methods: {\n ...tileLayerMethods,\n },\n };\n};\n\nvar script$l = {\n props: props$p,\n setup(props, context) {\n const leafletRef = ref({});\n\n const useGlobalLeaflet = inject(GLOBAL_LEAFLET_OPT);\n const addLayer = inject(\"addLayer\");\n\n const { options, methods } = setup$o(props, leafletRef);\n\n onMounted(async () => {\n const { tileLayer, DomEvent } = useGlobalLeaflet\n ? WINDOW_OR_GLOBAL.L\n : await import('leaflet/dist/leaflet-src.esm');\n\n leafletRef.value = tileLayer.wms(props.baseUrl, options);\n\n const listeners = remapEvents(context.attrs);\n DomEvent.on(leafletRef.value, listeners);\n\n propsBinder(methods, leafletRef.value, props);\n addLayer({\n ...props,\n ...methods,\n leafletObject: leafletRef.value,\n });\n nextTick(() => context.emit(\"ready\", leafletRef.value));\n });\n return { leafletObject: leafletRef.value };\n },\n render() {\n return null;\n },\n};\n\nscript$l.__file = \"src/components/LWmsTileLayer.vue\";\n\nexport { script as LCircle, script$1 as LCircleMarker, script$2 as LControl, script$3 as LControlAttribution, script$4 as LControlLayers, script$5 as LControlScale, script$6 as LControlZoom, script$7 as LFeatureGroup, script$8 as LGeoJson, script$9 as LGridLayer, script$a as LIcon, script$b as LImageOverlay, script$c as LLayerGroup, script$d as LMap, script$e as LMarker, script$f as LPolygon, script$g as LPolyline, script$h as LPopup, script$i as LRectangle, script$j as LTileLayer, script$k as LTooltip, script$l as LWmsTileLayer };\n//# sourceMappingURL=vue-leaflet.esm.js.map\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Workout.vue?vue&type=style&index=0&id=a4156454&lang=scss&scoped=true\"","<template>\n <div\n id=\"workout-edition\"\n class=\"center-card center-card with-margin\"\n :class=\"{ 'center-form': workout && workout.with_gpx }\"\n >\n <Card>\n <template #title>{{\n $t(`workouts.${isCreation ? 'ADD' : 'EDIT'}_WORKOUT`)\n }}</template>\n <template #content>\n <div id=\"workout-form\">\n <form @submit.prevent=\"updateWorkout\">\n <div class=\"form-items\">\n <div class=\"form-item-radio\" v-if=\"isCreation\">\n <div>\n <input\n id=\"withGpx\"\n type=\"radio\"\n :checked=\"withGpx\"\n :disabled=\"loading\"\n @click=\"updateWithGpx\"\n />\n <label for=\"withGpx\">{{ $t('workouts.WITH_GPX') }}</label>\n </div>\n <div>\n <input\n id=\"withoutGpx\"\n type=\"radio\"\n :checked=\"!withGpx\"\n :disabled=\"loading\"\n @click=\"updateWithGpx\"\n />\n <label for=\"withoutGpx\">{{\n $t('workouts.WITHOUT_GPX')\n }}</label>\n </div>\n </div>\n <div class=\"form-item\">\n <label> {{ $t('workouts.SPORT', 1) }}: </label>\n <select\n id=\"sport\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.sport_id\"\n >\n <option\n v-for=\"sport in translatedSports.filter((s) => s.is_active)\"\n :value=\"sport.id\"\n :key=\"sport.id\"\n >\n {{ sport.label }}\n </option>\n </select>\n </div>\n <div class=\"form-item\" v-if=\"isCreation && withGpx\">\n <label for=\"gpxFile\">\n {{ $t('workouts.GPX_FILE') }}\n {{ $t('workouts.ZIP_ARCHIVE_DESCRIPTION') }}:\n </label>\n <input\n id=\"gpxFile\"\n name=\"gpxFile\"\n type=\"file\"\n accept=\".gpx, .zip\"\n :disabled=\"loading\"\n @input=\"updateFile\"\n />\n <div class=\"files-help info-box\">\n <div>\n <strong>{{ $t('workouts.GPX_FILE') }}:</strong>\n <ul>\n <li>\n {{ $t('workouts.MAX_SIZE') }}: {{ fileSizeLimit }}\n </li>\n </ul>\n </div>\n <div>\n <strong>{{ $t('workouts.ZIP_ARCHIVE') }}:</strong>\n <ul>\n <li>{{ $t('workouts.NO_FOLDER') }}</li>\n <li>\n {{ $t('workouts.MAX_FILES') }}: {{ gpx_limit_import }}\n </li>\n <li>{{ $t('workouts.MAX_SIZE') }}: {{ zipSizeLimit }}</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=\"form-item\" v-else>\n <label for=\"title\"> {{ $t('workouts.TITLE') }}: </label>\n <input\n id=\"title\"\n name=\"title\"\n type=\"text\"\n :required=\"!isCreation\"\n :disabled=\"loading\"\n v-model=\"workoutDataObject.title\"\n />\n </div>\n <div v-if=\"!withGpx\">\n <div class=\"workout-date-duration\">\n <div class=\"form-item\">\n <label>{{ $t('workouts.WORKOUT_DATE') }}:</label>\n <div class=\"workout-date-time\">\n <input\n id=\"workout-date\"\n name=\"workout-date\"\n type=\"date\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutDate\"\n />\n <input\n id=\"workout-time\"\n name=\"workout-time\"\n class=\"workout-time\"\n type=\"time\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutTime\"\n />\n </div>\n </div>\n <div class=\"form-item\">\n <label>{{ $t('workouts.DURATION') }}:</label>\n <div>\n <input\n id=\"workout-duration-hour\"\n name=\"workout-duration-hour\"\n class=\"workout-duration\"\n type=\"text\"\n placeholder=\"HH\"\n pattern=\"^([0-9]*[0-9])$\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutDurationHour\"\n />\n :\n <input\n id=\"workout-duration-minutes\"\n name=\"workout-duration-minutes\"\n class=\"workout-duration\"\n type=\"text\"\n pattern=\"^([0-5][0-9])$\"\n placeholder=\"MM\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutDurationMinutes\"\n />\n :\n <input\n id=\"workout-duration-seconds\"\n name=\"workout-duration-seconds\"\n class=\"workout-duration\"\n type=\"text\"\n pattern=\"^([0-5][0-9])$\"\n placeholder=\"SS\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutDurationSeconds\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-item\">\n <label>{{ $t('workouts.DISTANCE') }} (km):</label>\n <input\n name=\"workout-distance\"\n type=\"number\"\n min=\"0\"\n step=\"0.1\"\n required\n :disabled=\"loading\"\n v-model=\"workoutDataObject.workoutDistance\"\n />\n </div>\n </div>\n <div class=\"form-item\">\n <label> {{ $t('workouts.NOTES') }}: </label>\n <CustomTextArea\n name=\"notes\"\n :input=\"workoutDataObject.notes\"\n :disabled=\"loading\"\n @updateValue=\"updateNotes\"\n />\n </div>\n </div>\n <ErrorMessage :message=\"errorMessages\" v-if=\"errorMessages\" />\n <div v-if=\"loading\">\n <Loader />\n </div>\n <div v-else class=\"form-buttons\">\n <button class=\"confirm\" type=\"submit\" :disabled=\"loading\">\n {{ $t('buttons.SUBMIT') }}\n </button>\n <button class=\"cancel\" @click.prevent=\"onCancel\">\n {{ $t('buttons.CANCEL') }}\n </button>\n </div>\n </form>\n </div>\n </template>\n </Card>\n </div>\n</template>\n\n<script lang=\"ts\">\n import {\n ComputedRef,\n PropType,\n defineComponent,\n computed,\n reactive,\n ref,\n watch,\n onMounted,\n onUnmounted,\n } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout, IWorkoutForm } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n import { getReadableFileSize } from '@/utils/files'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutEdition',\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n isCreation: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n required: true,\n },\n workout: {\n type: Object as PropType<IWorkout>,\n required: false,\n },\n },\n setup(props) {\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n onMounted(() => {\n if (props.workout && props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n const translatedSports: ComputedRef<ISport[]> = computed(() =>\n translateSports(props.sports, t)\n )\n const appConfig: ComputedRef<TAppConfig> = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const fileSizeLimit = appConfig.value.max_single_file_size\n ? getReadableFileSize(appConfig.value.max_single_file_size)\n : ''\n const gpx_limit_import = appConfig.value.gpx_limit_import\n const zipSizeLimit = appConfig.value.max_zip_file_size\n ? getReadableFileSize(appConfig.value.max_zip_file_size)\n : ''\n const errorMessages: ComputedRef<string | string[] | null> = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const workoutForm = reactive({\n sport_id: '',\n title: '',\n notes: '',\n workoutDate: '',\n workoutTime: '',\n workoutDurationHour: '',\n workoutDurationMinutes: '',\n workoutDurationSeconds: '',\n workoutDistance: '',\n })\n let withGpx = ref(\n props.workout ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n }\n function updateFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n gpxFile = event.target.files[0]\n }\n }\n function formatWorkoutForm(workout: IWorkout) {\n workoutForm.sport_id = `${workout.sport_id}`\n workoutForm.title = workout.title\n workoutForm.notes = workout.notes\n if (!workout.with_gpx) {\n const workoutDateTime = formatWorkoutDate(\n getDateWithTZ(workout.workout_date, props.authUser.timezone),\n 'yyyy-MM-dd'\n )\n const duration = workout.duration.split(':')\n workoutForm.workoutDistance = `${workout.distance}`\n workoutForm.workoutDate = workoutDateTime.workout_date\n workoutForm.workoutTime = workoutDateTime.workout_time\n workoutForm.workoutDurationHour = duration[0]\n workoutForm.workoutDurationMinutes = duration[1]\n workoutForm.workoutDurationSeconds = duration[2]\n }\n }\n function formatPayload(payload: IWorkoutForm) {\n payload.title = workoutForm.title\n payload.distance = +workoutForm.workoutDistance\n payload.duration =\n +workoutForm.workoutDurationHour * 3600 +\n +workoutForm.workoutDurationMinutes * 60 +\n +workoutForm.workoutDurationSeconds\n payload.workout_date = `${workoutForm.workoutDate} ${workoutForm.workoutTime}`\n }\n function updateWorkout() {\n const payload: IWorkoutForm = {\n sport_id: +workoutForm.sport_id,\n notes: workoutForm.notes,\n }\n if (props.workout) {\n if (props.workout.with_gpx) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n formatPayload(payload)\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,\n payload\n )\n }\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessage\n )\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,\n payload\n )\n }\n }\n }\n function onCancel() {\n if (props.workout) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n\n watch(\n () => props.workout,\n async (\n newWorkout: IWorkout | undefined,\n previousWorkout: IWorkout | undefined\n ) => {\n if (newWorkout !== previousWorkout && newWorkout && newWorkout.id) {\n formatWorkoutForm(newWorkout)\n }\n }\n )\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n return {\n appConfig,\n errorMessages,\n fileSizeLimit,\n gpx_limit_import,\n translatedSports,\n withGpx,\n zipSizeLimit,\n workoutDataObject: workoutForm,\n onCancel,\n updateFile,\n updateNotes,\n updateWithGpx,\n updateWorkout,\n }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n\n #workout-edition {\n @media screen and (max-width: $small-limit) {\n &.center-form {\n margin: 50px auto;\n }\n }\n\n ::v-deep(.card) {\n .card-title {\n text-align: center;\n text-transform: uppercase;\n }\n\n .card-content {\n @media screen and (max-width: $medium-limit) {\n padding: $default-padding 0;\n }\n\n #workout-form {\n .form-items {\n display: flex;\n flex-direction: column;\n\n input {\n height: 20px;\n }\n\n .workout-date-duration {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n @media screen and (max-width: $medium-limit) {\n flex-direction: column;\n }\n }\n\n .form-item {\n display: flex;\n flex-direction: column;\n padding: $default-padding;\n\n .workout-date-time {\n display: flex;\n #workout-date {\n margin-right: $default-margin;\n }\n }\n\n .workout-duration {\n width: 25px;\n }\n }\n\n .form-item-radio {\n display: flex;\n justify-content: space-around;\n label {\n font-weight: normal;\n @media screen and (max-width: $medium-limit) {\n font-size: 0.9em;\n }\n }\n input {\n margin-top: -2px;\n vertical-align: middle;\n }\n }\n }\n\n .form-buttons {\n display: flex;\n justify-content: flex-end;\n button {\n margin: $default-padding * 0.5;\n }\n }\n\n .files-help {\n display: flex;\n justify-content: space-around;\n margin-top: $default-margin;\n div {\n display: flex;\n @media screen and (max-width: $medium-limit) {\n flex-direction: column;\n }\n ul {\n margin: 0;\n padding: 0 $default-padding * 2;\n }\n }\n }\n }\n }\n }\n }\n</style>\n","\n import {\n ComputedRef,\n PropType,\n defineComponent,\n computed,\n reactive,\n ref,\n watch,\n onMounted,\n onUnmounted,\n } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useRouter } from 'vue-router'\n\n import { ROOT_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { TAppConfig } from '@/types/application'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkout, IWorkoutForm } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n import { formatWorkoutDate, getDateWithTZ } from '@/utils/dates'\n import { getReadableFileSize } from '@/utils/files'\n import { translateSports } from '@/utils/sports'\n\n export default defineComponent({\n name: 'WorkoutEdition',\n props: {\n authUser: {\n type: Object as PropType<IUserProfile>,\n required: true,\n },\n isCreation: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n sports: {\n type: Object as PropType<ISport[]>,\n required: true,\n },\n workout: {\n type: Object as PropType<IWorkout>,\n required: false,\n },\n },\n setup(props) {\n const { t } = useI18n()\n const store = useStore()\n const router = useRouter()\n\n onMounted(() => {\n if (props.workout && props.workout.id) {\n formatWorkoutForm(props.workout)\n }\n })\n\n const translatedSports: ComputedRef<ISport[]> = computed(() =>\n translateSports(props.sports, t)\n )\n const appConfig: ComputedRef<TAppConfig> = computed(\n () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n )\n const fileSizeLimit = appConfig.value.max_single_file_size\n ? getReadableFileSize(appConfig.value.max_single_file_size)\n : ''\n const gpx_limit_import = appConfig.value.gpx_limit_import\n const zipSizeLimit = appConfig.value.max_zip_file_size\n ? getReadableFileSize(appConfig.value.max_zip_file_size)\n : ''\n const errorMessages: ComputedRef<string | string[] | null> = computed(\n () => store.getters[ROOT_STORE.GETTERS.ERROR_MESSAGES]\n )\n const workoutForm = reactive({\n sport_id: '',\n title: '',\n notes: '',\n workoutDate: '',\n workoutTime: '',\n workoutDurationHour: '',\n workoutDurationMinutes: '',\n workoutDurationSeconds: '',\n workoutDistance: '',\n })\n let withGpx = ref(\n props.workout ? props.workout.with_gpx : props.isCreation\n )\n let gpxFile: File | null = null\n\n function updateNotes(value: string) {\n workoutForm.notes = value\n }\n function updateWithGpx() {\n withGpx.value = !withGpx.value\n }\n function updateFile(event: Event & { target: HTMLInputElement }) {\n if (event.target.files) {\n gpxFile = event.target.files[0]\n }\n }\n function formatWorkoutForm(workout: IWorkout) {\n workoutForm.sport_id = `${workout.sport_id}`\n workoutForm.title = workout.title\n workoutForm.notes = workout.notes\n if (!workout.with_gpx) {\n const workoutDateTime = formatWorkoutDate(\n getDateWithTZ(workout.workout_date, props.authUser.timezone),\n 'yyyy-MM-dd'\n )\n const duration = workout.duration.split(':')\n workoutForm.workoutDistance = `${workout.distance}`\n workoutForm.workoutDate = workoutDateTime.workout_date\n workoutForm.workoutTime = workoutDateTime.workout_time\n workoutForm.workoutDurationHour = duration[0]\n workoutForm.workoutDurationMinutes = duration[1]\n workoutForm.workoutDurationSeconds = duration[2]\n }\n }\n function formatPayload(payload: IWorkoutForm) {\n payload.title = workoutForm.title\n payload.distance = +workoutForm.workoutDistance\n payload.duration =\n +workoutForm.workoutDurationHour * 3600 +\n +workoutForm.workoutDurationMinutes * 60 +\n +workoutForm.workoutDurationSeconds\n payload.workout_date = `${workoutForm.workoutDate} ${workoutForm.workoutTime}`\n }\n function updateWorkout() {\n const payload: IWorkoutForm = {\n sport_id: +workoutForm.sport_id,\n notes: workoutForm.notes,\n }\n if (props.workout) {\n if (props.workout.with_gpx) {\n store.dispatch(WORKOUTS_STORE.ACTIONS.EDIT_WORKOUT, {\n workoutId: props.workout.id,\n data: payload,\n })\n } else {\n formatPayload(payload)\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,\n payload\n )\n }\n } else {\n if (withGpx.value) {\n if (!gpxFile) {\n const errorMessage = 'workouts.NO_FILE_PROVIDED'\n store.commit(\n ROOT_STORE.MUTATIONS.SET_ERROR_MESSAGES,\n errorMessage\n )\n return\n }\n payload.file = gpxFile\n store.dispatch(WORKOUTS_STORE.ACTIONS.ADD_WORKOUT, payload)\n } else {\n formatPayload(payload)\n store.dispatch(\n WORKOUTS_STORE.ACTIONS.ADD_WORKOUT_WITHOUT_GPX,\n payload\n )\n }\n }\n }\n function onCancel() {\n if (props.workout) {\n router.push({\n name: 'Workout',\n params: { workoutId: props.workout.id },\n })\n } else {\n router.go(-1)\n }\n }\n\n watch(\n () => props.workout,\n async (\n newWorkout: IWorkout | undefined,\n previousWorkout: IWorkout | undefined\n ) => {\n if (newWorkout !== previousWorkout && newWorkout && newWorkout.id) {\n formatWorkoutForm(newWorkout)\n }\n }\n )\n\n onUnmounted(() => store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES))\n\n return {\n appConfig,\n errorMessages,\n fileSizeLimit,\n gpx_limit_import,\n translatedSports,\n withGpx,\n zipSizeLimit,\n workoutDataObject: workoutForm,\n onCancel,\n updateFile,\n updateNotes,\n updateWithGpx,\n updateWorkout,\n }\n },\n })\n","import { render } from \"./WorkoutEdition.vue?vue&type=template&id=29a8656e&scoped=true\"\nimport script from \"./WorkoutEdition.vue?vue&type=script&lang=ts\"\nexport * from \"./WorkoutEdition.vue?vue&type=script&lang=ts\"\n\nimport \"./WorkoutEdition.vue?vue&type=style&index=0&id=29a8656e&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-29a8656e\"\n\nexport default script","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutSegments.vue?vue&type=style&index=0&id=5c40d110&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutEdition.vue?vue&type=style&index=0&id=29a8656e&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutWeather.vue?vue&type=style&index=0&id=7eb41918&lang=scss&scoped=true\"","<template>\n <div id=\"add-workout\">\n <div class=\"container\">\n <WorkoutEdition\n :authUser=\"authUser\"\n :sports=\"sports\"\n :isCreation=\"true\"\n :loading=\"workoutData.loading\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import { computed, defineComponent, ComputedRef } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'AddWorkout',\n components: {\n WorkoutEdition,\n },\n setup() {\n const store = useStore()\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n return { authUser, sports, workoutData }\n },\n })\n</script>\n\n<style lang=\"scss\" scoped>\n @import '~@/scss/base';\n</style>\n","\n import { computed, defineComponent, ComputedRef } from 'vue'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'AddWorkout',\n components: {\n WorkoutEdition,\n },\n setup() {\n const store = useStore()\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n return { authUser, sports, workoutData }\n },\n })\n","import { render } from \"./AddWorkout.vue?vue&type=template&id=2e2371d9&scoped=true\"\nimport script from \"./AddWorkout.vue?vue&type=script&lang=ts\"\nexport * from \"./AddWorkout.vue?vue&type=script&lang=ts\"\n\nimport \"./AddWorkout.vue?vue&type=style&index=0&id=2e2371d9&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2e2371d9\"\n\nexport default script","<template>\n <div id=\"edit-workout\">\n <div class=\"container\">\n <WorkoutEdition\n :authUser=\"authUser\"\n :sports=\"sports\"\n :workout=\"workoutData.workout\"\n :loading=\"workoutData.loading\"\n />\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\n import {\n computed,\n defineComponent,\n watch,\n onBeforeMount,\n ComputedRef,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'EditWorkout',\n components: {\n WorkoutEdition,\n },\n setup() {\n const route = useRoute()\n const store = useStore()\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\n })\n\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n watch(\n () => route.params.workoutId,\n async (newWorkoutId) => {\n if (!newWorkoutId) {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n }\n }\n )\n\n return { authUser, sports, workoutData }\n },\n })\n</script>\n","\n import {\n computed,\n defineComponent,\n watch,\n onBeforeMount,\n ComputedRef,\n } from 'vue'\n import { useRoute } from 'vue-router'\n\n import WorkoutEdition from '@/components/Workout/WorkoutEdition.vue'\n import { SPORTS_STORE, USER_STORE, WORKOUTS_STORE } from '@/store/constants'\n import { ISport } from '@/types/sports'\n import { IUserProfile } from '@/types/user'\n import { IWorkoutData } from '@/types/workouts'\n import { useStore } from '@/use/useStore'\n\n export default defineComponent({\n name: 'EditWorkout',\n components: {\n WorkoutEdition,\n },\n setup() {\n const route = useRoute()\n const store = useStore()\n\n onBeforeMount(() => {\n store.dispatch(WORKOUTS_STORE.ACTIONS.GET_WORKOUT_DATA, {\n workoutId: route.params.workoutId,\n })\n })\n\n const authUser: ComputedRef<IUserProfile> = computed(\n () => store.getters[USER_STORE.GETTERS.AUTH_USER_PROFILE]\n )\n const sports: ComputedRef<ISport[]> = computed(\n () => store.getters[SPORTS_STORE.GETTERS.SPORTS]\n )\n const workoutData: ComputedRef<IWorkoutData> = computed(\n () => store.getters[WORKOUTS_STORE.GETTERS.WORKOUT_DATA]\n )\n\n watch(\n () => route.params.workoutId,\n async (newWorkoutId) => {\n if (!newWorkoutId) {\n store.commit(WORKOUTS_STORE.MUTATIONS.EMPTY_WORKOUT)\n }\n }\n )\n\n return { authUser, sports, workoutData }\n },\n })\n","import { render } from \"./EditWorkout.vue?vue&type=template&id=d8d24d66\"\nimport script from \"./EditWorkout.vue?vue&type=script&lang=ts\"\nexport * from \"./EditWorkout.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutRecord.vue?vue&type=style&index=0&id=da96984c&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutData.vue?vue&type=style&index=0&id=45a7f031&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./index.vue?vue&type=style&index=0&id=a17554ea&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutsView.vue?vue&type=style&index=0&id=499760ae&lang=scss&scoped=true\"","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).toGeoJSON={})}(this,(function(e){\"use strict\";function t(e){return e&&e.normalize&&e.normalize(),e&&e.textContent||\"\"}function n(e,t){const n=e.getElementsByTagName(t);return n.length?n[0]:null}function o(e){const o={};if(e){const s=n(e,\"line\");if(s){const e=t(n(s,\"color\")),r=parseFloat(t(n(s,\"opacity\"))),i=parseFloat(t(n(s,\"width\")));e&&(o.stroke=e),isNaN(r)||(o[\"stroke-opacity\"]=r),isNaN(i)||(o[\"stroke-width\"]=96*i/25.4)}}return o}function s(e,o){const s={};let r,i;for(i=0;i<o.length;i++)r=n(e,o[i]),r&&(s[o[i]]=t(r));return s}function r(e){const n=s(e,[\"name\",\"cmt\",\"desc\",\"type\",\"time\",\"keywords\"]),o=e.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\",\"*\");for(let s=0;s<o.length;s++){const r=o[s];r.parentNode.parentNode===e&&(n[r.tagName.replace(\":\",\"_\")]=t(r))}const r=e.getElementsByTagName(\"link\");r.length&&(n.links=[]);for(let e=0;e<r.length;e++)n.links.push(Object.assign({href:r[e].getAttribute(\"href\")},s(r[e],[\"text\",\"type\"])));return n}function i(e){const o=[parseFloat(e.getAttribute(\"lon\")),parseFloat(e.getAttribute(\"lat\"))],s=n(e,\"ele\"),r=n(e,\"gpxtpx:hr\")||n(e,\"hr\"),i=n(e,\"time\");let l;s&&(l=parseFloat(t(s)),isNaN(l)||o.push(l));const a={coordinates:o,time:i?t(i):null,extendedValues:[]};r&&a.extendedValues.push([\"heart\",parseFloat(t(r))]);const c=n(e,\"extensions\");if(null!==c)for(const e of[\"speed\",\"course\",\"hAcc\",\"vAcc\"]){const o=parseFloat(t(n(c,e)));isNaN(o)||a.extendedValues.push([e,o])}return a}function l(e){const t=a(e,\"rtept\");if(t)return{type:\"Feature\",properties:Object.assign(r(e),o(n(e,\"extensions\")),{_gpxType:\"rte\"}),geometry:{type:\"LineString\",coordinates:t.line}}}function a(e,t){const n=e.getElementsByTagName(t);if(n.length<2)return;const o=[],s=[],r={};for(let e=0;e<n.length;e++){const t=i(n[e]);o.push(t.coordinates),t.time&&s.push(t.time);for(let o=0;o<t.extendedValues.length;o++){const[s,i]=t.extendedValues[o],l=\"heart\"===s?s:s+\"s\";r[l]||(r[l]=Array(n.length).fill(null)),r[l][e]=i}}return{line:o,times:s,extendedValues:r}}function c(e){const t=e.getElementsByTagName(\"trkseg\"),s=[],i=[],l=[];for(let e=0;e<t.length;e++){const n=a(t[e],\"trkpt\");n&&(l.push(n),n.times&&n.times.length&&i.push(n.times))}if(0===l.length)return;const c=l.length>1,g=Object.assign(r(e),o(n(e,\"extensions\")),{_gpxType:\"trk\"},i.length?{coordinateProperties:{times:c?i:i[0]}}:{});for(let e=0;e<l.length;e++){const t=l[e];s.push(t.line);for(const[n,o]of Object.entries(t.extendedValues)){let t=g;\"heart\"===n&&(g.coordinateProperties||(g.coordinateProperties={}),t=g.coordinateProperties),c?(t[n]||(t[n]=l.map((e=>new Array(e.line.length).fill(null)))),t[n][e]=o):t[n]=o}}return{type:\"Feature\",properties:g,geometry:c?{type:\"MultiLineString\",coordinates:s}:{type:\"LineString\",coordinates:s[0]}}}function*g(e){const t=e.getElementsByTagName(\"trk\"),n=e.getElementsByTagName(\"rte\"),o=e.getElementsByTagName(\"wpt\");for(let e=0;e<t.length;e++){const n=c(t[e]);n&&(yield n)}for(let e=0;e<n.length;e++){const t=l(n[e]);t&&(yield t)}for(let e=0;e<o.length;e++)yield(a=o[e],{type:\"Feature\",properties:Object.assign(r(a),s(a,[\"sym\"])),geometry:{type:\"Point\",coordinates:i(a).coordinates}});var a}const u=[[\"heartRate\",\"heartRates\"],[\"Cadence\",\"cadences\"],[\"Speed\",\"speeds\"],[\"Watts\",\"watts\"]],m=[[\"TotalTimeSeconds\",\"totalTimeSeconds\"],[\"DistanceMeters\",\"distanceMeters\"],[\"MaximumSpeed\",\"maxSpeed\"],[\"AverageHeartRateBpm\",\"avgHeartRate\"],[\"MaximumHeartRateBpm\",\"maxHeartRate\"],[\"AvgSpeed\",\"avgSpeed\"],[\"AvgWatts\",\"avgWatts\"],[\"MaxWatts\",\"maxWatts\"]];function p(e,o){const s=[];for(const[r,i]of o){let o=n(e,r);if(!o){const t=e.getElementsByTagNameNS(\"http://www.garmin.com/xmlschemas/ActivityExtension/v2\",r);t.length&&(o=t[0])}const l=parseFloat(t(o));isNaN(l)||s.push([i,l])}return s}function h(e){const o=t(n(e,\"LongitudeDegrees\")),s=t(n(e,\"LatitudeDegrees\"));if(!o.length||!s.length)return null;const r=[parseFloat(o),parseFloat(s)],i=n(e,\"AltitudeMeters\"),l=n(e,\"HeartRateBpm\"),a=n(e,\"Time\");let c;return i&&(c=parseFloat(t(i)),isNaN(c)||r.push(c)),{coordinates:r,time:a?t(a):null,heartRate:l?parseFloat(t(l)):null,extensions:p(e,u)}}function f(e,t){const n=e.getElementsByTagName(t),o=[],s=[],r=[];if(n.length<2)return null;const i={extendedProperties:{}};for(let e=0;e<n.length;e++){const t=h(n[e]);if(null!==t){o.push(t.coordinates),t.time&&s.push(t.time),t.heartRate&&r.push(t.heartRate);for(const[o,s]of t.extensions)i.extendedProperties[o]||(i.extendedProperties[o]=Array(n.length).fill(null)),i.extendedProperties[o][e]=s}}return Object.assign(i,{line:o,times:s,heartRates:r})}function d(e){const o=e.getElementsByTagName(\"Track\"),s=[],r=[],i=[],l=[];let a;const c=function(e){const t={};for(const[n,o]of e)t[n]=o;return t}(p(e,m)),g=n(e,\"Name\");g&&(c.name=t(g));for(let e=0;e<o.length;e++)a=f(o[e],\"Trackpoint\"),a&&(s.push(a.line),a.times.length&&r.push(a.times),a.heartRates.length&&i.push(a.heartRates),l.push(a.extendedProperties));for(let e=0;e<l.length;e++){const t=l[e];for(const n in t)1===o.length?c[n]=a.extendedProperties[n]:(c[n]||(c[n]=s.map((e=>Array(e.length).fill(null)))),c[n][e]=t[n])}if(0!==s.length)return(r.length||i.length)&&(c.coordinateProperties=Object.assign(r.length?{times:1===s.length?r[0]:r}:{},i.length?{heart:1===s.length?i[0]:i}:{})),{type:\"Feature\",properties:c,geometry:{type:1===s.length?\"LineString\":\"MultiLineString\",coordinates:1===s.length?s[0]:s}}}function*y(e){const t=e.getElementsByTagName(\"Lap\");for(let e=0;e<t.length;e++){const n=d(t[e]);n&&(yield n)}const n=e.getElementsByTagName(\"Courses\");for(let e=0;e<n.length;e++){const t=d(n[e]);t&&(yield t)}}const N=/\\s*/g,x=/^\\s*|\\s*$/g,T=/\\s+/;function b(e){if(!e||!e.length)return 0;let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return t}function S(e){return e.replace(N,\"\").split(\",\").map(parseFloat)}function k(e){return e.replace(x,\"\").split(T).map(S)}function A(e){if(void 0!==e.xml)return e.xml;if(e.tagName){let t=e.tagName;for(let n=0;n<e.attributes.length;n++)t+=e.attributes[n].name+e.attributes[n].value;for(let n=0;n<e.childNodes.length;n++)t+=A(e.childNodes[n]);return t}return\"#text\"===e.nodeName?(e.nodeValue||e.value||\"\").trim():\"#cdata-section\"===e.nodeName?e.nodeValue:\"\"}const B=[\"Polygon\",\"LineString\",\"Point\",\"Track\",\"gx:Track\"];function E(e,o,s){let r=t(n(o,\"color\"))||\"\";const i=\"stroke\"==s||\"fill\"===s?s:s+\"-color\";\"#\"===r.substr(0,1)&&(r=r.substr(1)),6===r.length||3===r.length?e[i]=r:8===r.length&&(e[s+\"-opacity\"]=parseInt(r.substr(0,2),16)/255,e[i]=\"#\"+r.substr(6,2)+r.substr(4,2)+r.substr(2,2))}function F(e,o,s,r){const i=parseFloat(t(n(o,s)));isNaN(i)||(e[r]=i)}function P(e){let n=e.getElementsByTagName(\"coord\");const o=[],s=[];0===n.length&&(n=e.getElementsByTagName(\"gx:coord\"));for(let e=0;e<n.length;e++)o.push(t(n[e]).split(\" \").map(parseFloat));const r=e.getElementsByTagName(\"when\");for(let e=0;e<r.length;e++)s.push(t(r[e]));return{coords:o,times:s}}function v(e){let o,s,r,i,l;const a=[],c=[];if(n(e,\"MultiGeometry\"))return v(n(e,\"MultiGeometry\"));if(n(e,\"MultiTrack\"))return v(n(e,\"MultiTrack\"));if(n(e,\"gx:MultiTrack\"))return v(n(e,\"gx:MultiTrack\"));for(r=0;r<B.length;r++)if(s=e.getElementsByTagName(B[r]),s)for(i=0;i<s.length;i++)if(o=s[i],\"Point\"===B[r])a.push({type:\"Point\",coordinates:S(t(n(o,\"coordinates\")))});else if(\"LineString\"===B[r])a.push({type:\"LineString\",coordinates:k(t(n(o,\"coordinates\")))});else if(\"Polygon\"===B[r]){const e=o.getElementsByTagName(\"LinearRing\"),s=[];for(l=0;l<e.length;l++)s.push(k(t(n(e[l],\"coordinates\"))));a.push({type:\"Polygon\",coordinates:s})}else if(\"Track\"===B[r]||\"gx:Track\"===B[r]){const e=P(o);a.push({type:\"LineString\",coordinates:e.coords}),e.times.length&&c.push(e.times)}return{geoms:a,coordTimes:c}}function L(e,o,s,r){const i=v(e);let l;const a={},c=t(n(e,\"name\")),g=t(n(e,\"address\"));let u=t(n(e,\"styleUrl\"));const m=t(n(e,\"description\")),p=n(e,\"TimeSpan\"),h=n(e,\"TimeStamp\"),f=n(e,\"ExtendedData\");let d=n(e,\"IconStyle\"),y=n(e,\"LabelStyle\"),N=n(e,\"LineStyle\"),x=n(e,\"PolyStyle\");const T=n(e,\"visibility\");if(c&&(a.name=c),g&&(a.address=g),u){\"#\"!==u[0]&&(u=\"#\"+u),a.styleUrl=u,o[u]&&(a.styleHash=o[u]),s[u]&&(a.styleMapHash=s[u],a.styleHash=o[s[u].normal]);const e=r[a.styleHash];e&&(d||(d=n(e,\"IconStyle\")),y||(y=n(e,\"LabelStyle\")),N||(N=n(e,\"LineStyle\")),x||(x=n(e,\"PolyStyle\")))}if(m&&(a.description=m),p){const e=t(n(p,\"begin\")),o=t(n(p,\"end\"));a.timespan={begin:e,end:o}}if(h&&(a.timestamp=t(n(h,\"when\"))),d){E(a,d,\"icon\"),F(a,d,\"scale\",\"icon-scale\"),F(a,d,\"heading\",\"icon-heading\");const e=n(d,\"hotSpot\");if(e){const t=parseFloat(e.getAttribute(\"x\")),n=parseFloat(e.getAttribute(\"y\"));isNaN(t)||isNaN(n)||(a[\"icon-offset\"]=[t,n])}const o=n(d,\"Icon\");if(o){const e=t(n(o,\"href\"));e&&(a.icon=e)}}if(y&&(E(a,y,\"label\"),F(a,y,\"scale\",\"label-scale\")),N&&(E(a,N,\"stroke\"),F(a,N,\"width\",\"stroke-width\")),x){E(a,x,\"fill\");const e=t(n(x,\"fill\")),o=t(n(x,\"outline\"));e&&(a[\"fill-opacity\"]=\"1\"===e?a[\"fill-opacity\"]||1:0),o&&(a[\"stroke-opacity\"]=\"1\"===o?a[\"stroke-opacity\"]||1:0)}if(f){const e=f.getElementsByTagName(\"Data\"),o=f.getElementsByTagName(\"SimpleData\");for(l=0;l<e.length;l++)a[e[l].getAttribute(\"name\")]=t(n(e[l],\"value\"));for(l=0;l<o.length;l++)a[o[l].getAttribute(\"name\")]=t(o[l])}T&&(a.visibility=t(T)),i.coordTimes.length&&(a.coordinateProperties={times:1===i.coordTimes.length?i.coordTimes[0]:i.coordTimes});const b={type:\"Feature\",geometry:0===i.geoms.length?null:1===i.geoms.length?i.geoms[0]:{type:\"GeometryCollection\",geometries:i.geoms},properties:a};return e.getAttribute(\"id\")&&(b.id=e.getAttribute(\"id\")),b}function*M(e){const o={},s={},r={},i=e.getElementsByTagName(\"Placemark\"),l=e.getElementsByTagName(\"Style\"),a=e.getElementsByTagName(\"StyleMap\");for(let e=0;e<l.length;e++){const t=b(A(l[e])).toString(16);o[\"#\"+l[e].getAttribute(\"id\")]=t,s[t]=l[e]}for(let e=0;e<a.length;e++){o[\"#\"+a[e].getAttribute(\"id\")]=b(A(a[e])).toString(16);const s=a[e].getElementsByTagName(\"Pair\"),i={};for(let e=0;e<s.length;e++)i[t(n(s[e],\"key\"))]=t(n(s[e],\"styleUrl\"));r[\"#\"+a[e].getAttribute(\"id\")]=i}for(let e=0;e<i.length;e++){const t=L(i[e],o,r,s);t&&(yield t)}}e.gpx=function(e){return{type:\"FeatureCollection\",features:Array.from(g(e))}},e.gpxGen=g,e.kml=function(e){return{type:\"FeatureCollection\",features:Array.from(M(e))}},e.kmlGen=M,e.tcx=function(e){return{type:\"FeatureCollection\",features:Array.from(y(e))}},e.tcxGen=y,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n//# sourceMappingURL=togeojson.umd.js.map\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AddWorkout.vue?vue&type=style&index=0&id=2e2371d9&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WorkoutsFilters.vue?vue&type=style&index=0&id=6d15726f&lang=scss&scoped=true\""],"sourceRoot":""}